<?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>234517</bug_id>
          
          <creation_ts>2021-12-20 10:09:57 -0800</creation_ts>
          <short_desc>[LFC][IFC] Move display builder files under /display directory</short_desc>
          <delta_ts>2021-12-20 12:19:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1825643</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-12-20 10:09:57 -0800</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825645</commentid>
    <comment_count>1</comment_count>
      <attachid>447610</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-12-20 10:24:48 -0800</bug_when>
    <thetext>Created attachment 447610
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825652</commentid>
    <comment_count>2</comment_count>
      <attachid>447612</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-12-20 11:04:10 -0800</bug_when>
    <thetext>Created attachment 447612
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825671</commentid>
    <comment_count>3</comment_count>
      <attachid>447612</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-12-20 11:56:59 -0800</bug_when>
    <thetext>Comment on attachment 447612
Patch

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

&gt; Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:42
&gt; +namespace WebCore {
&gt; +namespace Layout {

Are you going to switch the namespace too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825678</commentid>
    <comment_count>4</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-12-20 12:11:50 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #3)
&gt; Comment on attachment 447612 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=447612&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:42
&gt; &gt; +namespace WebCore {
&gt; &gt; +namespace Layout {
&gt; 
&gt; Are you going to switch the namespace too?
Yeah, I should do that too at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825680</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-20 12:18:25 -0800</bug_when>
    <thetext>Committed r287271 (245427@main): &lt;https://commits.webkit.org/245427@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 447612.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825682</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-20 12:19:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/86735343&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447610</attachid>
            <date>2021-12-20 10:24:48 -0800</date>
            <delta_ts>2021-12-20 10:59:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.txt</filename>
            <type>text/plain</type>
            <size>5782</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5N2IzNWE2OThlNGYuLmUwZTFmZGU2ZjQ2ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE1IEBACisyMDIxLTEyLTIwICBBbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4K
KworICAgICAgICBbTEZDXVtJRkNdIE1vdmUgZGlzcGxheSBidWlsZGVyIGZpbGVzIHVuZGVyIC9k
aXNwbGF5IGRpcmVjdG9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM0NTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUv
ZGlzcGxheS9JbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRGlzcGxh
eUNvbnRlbnRCdWlsZGVyLmNwcC4KKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2lubGluZS9kaXNwbGF5L0lubGluZURpc3BsYXlDb250ZW50QnVpbGRlci5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5l
RGlzcGxheUNvbnRlbnRCdWlsZGVyLmguCisKIDIwMjEtMTItMTQgIFNlcmdpbyBWaWxsYXIgU2Vu
aW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW2Nzcy1mbGV4Ym94XSBQcmUtbGF5
b3V0IG9ydGhvZ29uYWwgY2hpbGRyZW4gdG8gY29tcHV0ZSB0aGUgcHJlZmVycmVkIGxvZ2ljYWwg
d2lkdGgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggNDY2NmM2MTkyN2ExLi5jNDNmNTk5MzZhNDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CkBAIC0xNTU1LDcgKzE1NTUsNiBAQCBsYXlvdXQvZmxvYXRzL0Zsb2F0QXZvaWRl
ci5jcHAKIGxheW91dC9mbG9hdHMvRmxvYXRpbmdDb250ZXh0LmNwcAogbGF5b3V0L2Zsb2F0cy9G
bG9hdGluZ1N0YXRlLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5l
Q29udGVudEJyZWFrZXIuY3BwCi1sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9Jbmxp
bmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKIGxheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdRdWlya3MuY3BwCkBAIC0xNTY4LDYgKzE1
NjcsNyBAQCBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQm94QnVp
bGRlci5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCdWls
ZGVyLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJveFZl
cnRpY2FsQWxpZ25lci5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGlu
ZVRleHRJdGVtLmNwcAorbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvZGlzcGxheS9J
bmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2lubGluZS9pbnZhbGlkYXRpb24vSW5saW5lSW52YWxpZGF0aW9uLmNwcAogbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvdGV4dC9UZXh0VXRpbC5jcHAKIGxheW91dC9pbnRlZ3JhdGlv
bi9JbmxpbmVJdGVyYXRvckJveC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlMGM0ZWM5OTU5NzQuLjJlNDUxY2U2NGQ0OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMjIxMSw2ICsyMjExLDcgQEAKIAkJNkY2RUU3NDMyNkQ0NEVFMzAwMzc0Q0RBIC8qIElu
bGluZUxpbmVCb3hWZXJ0aWNhbEFsaWduZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZGNkVFNzQxMjZENDRFRTIwMDM3NENEQSAvKiBJbmxpbmVMaW5l
Qm94VmVydGljYWxBbGlnbmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNkY3Q0EzQzYyMDhDMjk1NzAwMkYyOUFCIC8qIExheW91dFN0YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjdDQTNDNDIw
OEMyOTU2MDAyRjI5QUIgLyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjdDQTNDQTIwOEMyQjJFMDAyRjI5QUIgLyogSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZGN0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTZGOEE4Q0I5Mjc3MEZERUEwMDA5REEyMSAvKiBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxk
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTE1
MTNEMDAyNkQ5ODFERDAwNEQzRkFBIC8qIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlci5jcHAg
Ki87IH07CiAJCTZGOTE0MjExMjUxNTIxMzgwMDRFNEZFQSAvKiBJbmxpbmVEaXNwbGF5TGluZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY5MTQyMEYy
NTE1MjEzNzAwNEU0RkVBIC8qIElubGluZURpc3BsYXlMaW5lLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkY5OTVBMTYxQTcwNzU2MjAwQTczNUY0
IC8qIFdlYkdMU3luYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkY5OTVBMTQxQTcwNzU2MjAwQTczNUY0IC8qIFdlYkdMU3luYy5oICovOyB9OwogCQk2
Rjk5NUEyMDFBNzA3OEIxMDBBNzM1RjQgLyogV2ViR0xRdWVyeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY5OTVBMTgxQTcwNzhCMTAwQTczNUY0IC8q
IFdlYkdMUXVlcnkuaCAqLzsgfTsKQEAgLTE5MjIwLDggKzE5MjIxLDYgQEAKIAkJCQk2RkU3RERE
RDIwRUM2RThCMDA4QjVCNEUgLyogdGV4dCAqLywKIAkJCQk2RkUxOTgxMzIxNzgzOTdCMDA0NDZG
MDggLyogSW5saW5lQ29udGVudEJyZWFrZXIuY3BwICovLAogCQkJCTZGRTE5ODE1MjE3ODM5N0Mw
MDQ0NkYwOCAvKiBJbmxpbmVDb250ZW50QnJlYWtlci5oICovLAotCQkJCTExNTEzRDAwMjZEOTgx
REQwMDREM0ZBQSAvKiBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwICovLAotCQkJCTEx
NTEzRDAyMjZEOTgxRTcwMDREM0ZBQSAvKiBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuaCAq
LywKIAkJCQk2RjdDQTNDOTIwOEMyQjJFMDAyRjI5QUIgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQuY3BwICovLAogCQkJCTZGN0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5oICovLAogCQkJCTZGMzVFRkFGMjE4N0NCRDUwMDQ0RTBGNCAvKiBJbmxpbmVG
b3JtYXR0aW5nR2VvbWV0cnkuY3BwICovLApAQCAtMTkyNTcsNiArMTkyNTYsOCBAQAogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk2RkMzRjk0NTI1MTY3NTY2MDBBNDlC
RUEgLyogSW5saW5lRGlzcGxheUJveC5oICovLAorCQkJCTExNTEzRDAwMjZEOTgxREQwMDREM0ZB
QSAvKiBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwICovLAorCQkJCTExNTEzRDAyMjZE
OTgxRTcwMDREM0ZBQSAvKiBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuaCAqLywKIAkJCQk2
RjkxNDIwRjI1MTUyMTM3MDA0RTRGRUEgLyogSW5saW5lRGlzcGxheUxpbmUuaCAqLywKIAkJCSk7
CiAJCQlwYXRoID0gZGlzcGxheTsKQEAgLTM4NDc2LDYgKzM4NDc3LDcgQEAKIAkJCQlDRDI3QUU1
MTIyQTk4Njg3MDA5NDdGRjkgLyogSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTA3MEUyRDBGMjZGMjUwODkwMDE0QUFDMyAvKiBJbmJhbmRDaGFwdGVyVHJhY2tQ
cml2YXRlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEMDYzRjgyMUUyM0ZBODkwMDgx
MkJFMyAvKiBJbml0RGF0YVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZGOEE4Q0I5
Mjc3MEZERUEwMDA5REEyMSAvKiBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTM1QzQ3NzAwOUFDNEQ3MzAwQTZBQUI0IC8qIEtleUV2ZW50TWFjLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBOThFMEIxNjAzQ0Q2MDAwRkVBM0IxIC8qIExlZ2FjeUNE
TS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREU4QjVFQzFBNjk3NzczMDBCNEI2NkEgLyogTGVn
YWN5Q0RNUHJpdmF0ZUNsZWFyS2V5LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRGlzcGxh
eUNvbnRlbnRCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvaW5saW5lL2Rpc3BsYXkvSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyLmNwcApzaW1p
bGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyLmNwcApyZW5h
bWUgdG8gU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvZGlz
cGxheS9JbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVEaXNwbGF5Q29u
dGVudEJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
aW5saW5lL2Rpc3BsYXkvSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyLmgKc2ltaWxhcml0eSBp
bmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50QnVpbGRlci5oCnJlbmFtZSB0byBTb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9kaXNwbGF5L0lubGlu
ZURpc3BsYXlDb250ZW50QnVpbGRlci5oCg==
</data>
<flag name="commit-queue"
          id="473291"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447612</attachid>
            <date>2021-12-20 11:04:10 -0800</date>
            <delta_ts>2021-12-20 12:18:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234517-20211220110409.patch</filename>
            <type>text/plain</type>
            <size>87404</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3MjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTdiMzVhNjk4ZTRmNGVi
NmFhNzU0ODhlODQ4ZDBhZGM4MTYwZDQyYS4uZTBlMWZkZTZmNDZlMTY4YzVjMDE3NjBhNzU0NzAx
NTYxNGU0ZjYzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIxLTEyLTIwICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXVtJRkNdIE1vdmUgZGlz
cGxheSBidWlsZGVyIGZpbGVzIHVuZGVyIC9kaXNwbGF5IGRpcmVjdG9yeQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NTE3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvZGlzcGxheS9JbmxpbmVEaXNwbGF5Q29udGVudEJ1
aWxkZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9pbmxpbmUvSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyLmNwcC4KKyAgICAgICAg
KiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9kaXNwbGF5L0lubGluZURpc3BsYXlD
b250ZW50QnVpbGRlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyLmguCisKIDIw
MjEtMTItMTQgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW2Nzcy1mbGV4Ym94XSBQcmUtbGF5b3V0IG9ydGhvZ29uYWwgY2hpbGRyZW4gdG8gY29t
cHV0ZSB0aGUgcHJlZmVycmVkIGxvZ2ljYWwgd2lkdGgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNDY2NmM2
MTkyN2ExYzI0MDYwNjc2MTQxMjZlNGU5NWFlZDQyOTVlZS4uYzQzZjU5OTM2YTQ1YTY0MmM2MGFm
MzVlMjlmNWZkMjhiYWZiYjliMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE1NTUsNyArMTU1NSw2IEBA
IGxheW91dC9mbG9hdHMvRmxvYXRBdm9pZGVyLmNwcAogbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0Nv
bnRleHQuY3BwCiBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nU3RhdGUuY3BwCiBsYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVDb250ZW50QnJlYWtlci5jcHAKLWxheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50QnVpbGRlci5jcHAKIGxh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNw
cAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21l
dHJ5LmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGlu
Z1F1aXJrcy5jcHAKQEAgLTE1NjgsNiArMTU2Nyw3IEBAIGxheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUxpbmVCb3hCdWlsZGVyLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJ1aWxkZXIuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2lubGluZS9JbmxpbmVMaW5lQm94VmVydGljYWxBbGlnbmVyLmNwcAogbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lVGV4dEl0ZW0uY3BwCitsYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2lubGluZS9kaXNwbGF5L0lubGluZURpc3BsYXlDb250ZW50QnVpbGRlci5jcHAK
IGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2ludmFsaWRhdGlvbi9JbmxpbmVJbnZh
bGlkYXRpb24uY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS90ZXh0L1RleHRV
dGlsLmNwcAogbGF5b3V0L2ludGVncmF0aW9uL0lubGluZUl0ZXJhdG9yQm94LmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGUw
YzRlYzk5NTk3NGNiMTZlN2ZkMWNlN2UzZGNkMjhjOTY0MzBmNTIuLjVmYTY4Mjg5MjExZDc2Y2Nm
MWUyOGRlNWJjNzU1ZmViZWZhNmRlOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE5MjIwLDggKzE5MjIwLDYgQEAKIAkJCQk2
RkU3RERERDIwRUM2RThCMDA4QjVCNEUgLyogdGV4dCAqLywKIAkJCQk2RkUxOTgxMzIxNzgzOTdC
MDA0NDZGMDggLyogSW5saW5lQ29udGVudEJyZWFrZXIuY3BwICovLAogCQkJCTZGRTE5ODE1MjE3
ODM5N0MwMDQ0NkYwOCAvKiBJbmxpbmVDb250ZW50QnJlYWtlci5oICovLAotCQkJCTExNTEzRDAw
MjZEOTgxREQwMDREM0ZBQSAvKiBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwICovLAot
CQkJCTExNTEzRDAyMjZEOTgxRTcwMDREM0ZBQSAvKiBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxk
ZXIuaCAqLywKIAkJCQk2RjdDQTNDOTIwOEMyQjJFMDAyRjI5QUIgLyogSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQuY3BwICovLAogCQkJCTZGN0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dC5oICovLAogCQkJCTZGMzVFRkFGMjE4N0NCRDUwMDQ0RTBGNCAvKiBJ
bmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwICovLApAQCAtMTkyNTcsNiArMTkyNTUsOCBAQAog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk2RkMzRjk0NTI1MTY3NTY2
MDBBNDlCRUEgLyogSW5saW5lRGlzcGxheUJveC5oICovLAorCQkJCTExNTEzRDAwMjZEOTgxREQw
MDREM0ZBQSAvKiBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwICovLAorCQkJCTExNTEz
RDAyMjZEOTgxRTcwMDREM0ZBQSAvKiBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuaCAqLywK
IAkJCQk2RjkxNDIwRjI1MTUyMTM3MDA0RTRGRUEgLyogSW5saW5lRGlzcGxheUxpbmUuaCAqLywK
IAkJCSk7CiAJCQlwYXRoID0gZGlzcGxheTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50QnVpbGRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9J
bmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxN2JhYzdjNWRlYzE1MmUzYzZjZWZiZmM3ZWY3YWM0NWVmYTg2ZDI5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50QnVpbGRlci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuaCIKLQot
I2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAiRm9udENh
c2NhZGUuaCIKLSNpbmNsdWRlICJMYXlvdXRCb3hHZW9tZXRyeS5oIgotI2luY2x1ZGUgIkxheW91
dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKLSNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiCi0jaW5jbHVkZSAiVGV4dFV0aWwuaCIKLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KLSNpbmNsdWRlIDx3dGYvUmFuZ2UuaD4KLQotdXNpbmcgV1RGOjpSYW5nZTsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7Ci0KLXN0YXRpYyBpbmxpbmUgTGF5b3V0
VW5pdCBtYXJnaW5MZWZ0KGNvbnN0IExheW91dDo6Qm94R2VvbWV0cnkmIGJveEdlb21ldHJ5LCBi
b29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCi17Ci0gICAgcmV0dXJuIGlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24gPyBib3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpIDogYm94R2VvbWV0cnkubWFyZ2lu
RW5kKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBtYXJnaW5SaWdodChjb25zdCBM
YXlvdXQ6OkJveEdlb21ldHJ5JiBib3hHZW9tZXRyeSwgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKQotewotICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID8gYm94R2VvbWV0cnku
bWFyZ2luRW5kKCkgOiBib3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpOwotfQotCi1zdGF0aWMgaW5s
aW5lIExheW91dFVuaXQgYm9yZGVyTGVmdChjb25zdCBMYXlvdXQ6OkJveEdlb21ldHJ5JiBib3hH
ZW9tZXRyeSwgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKQotewotICAgIHJldHVybiBpc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uID8gYm94R2VvbWV0cnkuYm9yZGVyU3RhcnQoKSA6IGJveEdlb21l
dHJ5LmJvcmRlckVuZCgpOwotfQotCi1zdGF0aWMgaW5saW5lIExheW91dFVuaXQgYm9yZGVyUmln
aHQoY29uc3QgTGF5b3V0OjpCb3hHZW9tZXRyeSYgYm94R2VvbWV0cnksIGJvb2wgaXNMZWZ0VG9S
aWdodERpcmVjdGlvbikKLXsKLSAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA/IGJv
eEdlb21ldHJ5LmJvcmRlckVuZCgpIDogYm94R2VvbWV0cnkuYm9yZGVyU3RhcnQoKTsKLX0KLQot
c3RhdGljIGlubGluZSBMYXlvdXRVbml0IHBhZGRpbmdMZWZ0KGNvbnN0IExheW91dDo6Qm94R2Vv
bWV0cnkmIGJveEdlb21ldHJ5LCBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCi17Ci0gICAg
cmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPyBib3hHZW9tZXRyeS5wYWRkaW5nU3RhcnQo
KS52YWx1ZV9vcigwX2x1KSA6IGJveEdlb21ldHJ5LnBhZGRpbmdFbmQoKS52YWx1ZV9vcigwX2x1
KTsKLX0KLQotc3RhdGljIGlubGluZSBMYXlvdXRVbml0IHBhZGRpbmdSaWdodChjb25zdCBMYXlv
dXQ6OkJveEdlb21ldHJ5JiBib3hHZW9tZXRyeSwgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KQotewotICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID8gYm94R2VvbWV0cnkucGFk
ZGluZ0VuZCgpLnZhbHVlX29yKDBfbHUpIDogYm94R2VvbWV0cnkucGFkZGluZ1N0YXJ0KCkudmFs
dWVfb3IoMF9sdSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgT3B0aW9uU2V0PElubGluZURpc3BsYXk6
OkJveDo6UG9zaXRpb25XaXRoaW5JbmxpbmVMZXZlbEJveD4gaXNGaXJzdExhc3RCb3goY29uc3Qg
SW5saW5lTGV2ZWxCb3gmIGlubGluZUJveCkKLXsKLSAgICBhdXRvIHBvc2l0aW9uV2l0aGluSW5s
aW5lTGV2ZWxCb3ggPSBPcHRpb25TZXQ8SW5saW5lRGlzcGxheTo6Qm94OjpQb3NpdGlvbldpdGhp
bklubGluZUxldmVsQm94PiB7IH07Ci0gICAgaWYgKGlubGluZUJveC5pc0ZpcnN0Qm94KCkpCi0g
ICAgICAgIHBvc2l0aW9uV2l0aGluSW5saW5lTGV2ZWxCb3guYWRkKElubGluZURpc3BsYXk6OkJv
eDo6UG9zaXRpb25XaXRoaW5JbmxpbmVMZXZlbEJveDo6Rmlyc3QpOwotICAgIGlmIChpbmxpbmVC
b3guaXNMYXN0Qm94KCkpCi0gICAgICAgIHBvc2l0aW9uV2l0aGluSW5saW5lTGV2ZWxCb3guYWRk
KElubGluZURpc3BsYXk6OkJveDo6UG9zaXRpb25XaXRoaW5JbmxpbmVMZXZlbEJveDo6TGFzdCk7
Ci0gICAgcmV0dXJuIHBvc2l0aW9uV2l0aGluSW5saW5lTGV2ZWxCb3g7Ci19Ci0KLUlubGluZURp
c3BsYXlDb250ZW50QnVpbGRlcjo6SW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyKGNvbnN0IENv
bnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBJbmxpbmVGb3JtYXR0aW5nU3RhdGUm
IGZvcm1hdHRpbmdTdGF0ZSkKLSAgICA6IG1fZm9ybWF0dGluZ0NvbnRleHRSb290KGZvcm1hdHRp
bmdDb250ZXh0Um9vdCkKLSAgICAsIG1fZm9ybWF0dGluZ1N0YXRlKGZvcm1hdHRpbmdTdGF0ZSkK
LXsKLX0KLQotRGlzcGxheUJveGVzIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlcjo6YnVpbGQo
Y29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCwgY29uc3QgTGluZUJv
eCYgbGluZUJveCwgY29uc3QgSW5saW5lUmVjdCYgbGluZUJveExvZ2ljYWxSZWN0LCBjb25zdCBz
aXplX3QgbGluZUluZGV4KQotewotICAgIERpc3BsYXlCb3hlcyBib3hlczsKLSAgICBib3hlcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxpbmVDb250ZW50LnJ1bnMuc2l6ZSgpICsgbGluZUJveC5u
b25Sb290SW5saW5lTGV2ZWxCb3hlcygpLnNpemUoKSArIDEpOwotCi0gICAgbV9saW5lSW5kZXgg
PSBsaW5lSW5kZXg7Ci0gICAgLy8gRXZlcnkgbGluZSBzdGFydHMgd2l0aCBhIHJvb3QgYm94LCBl
dmVuIHRoZSBlbXB0eSBvbmVzLgotICAgIGF1dG8gcm9vdElubGluZUJveFJlY3QgPSBsaW5lQm94
LmxvZ2ljYWxSZWN0Rm9yUm9vdElubGluZUJveCgpOwotICAgIHJvb3RJbmxpbmVCb3hSZWN0Lm1v
dmVCeShsaW5lQm94TG9naWNhbFJlY3QudG9wTGVmdCgpKTsKLSAgICBib3hlcy5hcHBlbmQoeyBt
X2xpbmVJbmRleCwgSW5saW5lRGlzcGxheTo6Qm94OjpUeXBlOjpSb290SW5saW5lQm94LCByb290
KCksIFVCSURJX0RFRkFVTFRfTFRSLCByb290SW5saW5lQm94UmVjdCwgcm9vdElubGluZUJveFJl
Y3QsIHsgfSwgeyB9LCBsaW5lQm94LnJvb3RJbmxpbmVCb3goKS5oYXNDb250ZW50KCkgfSk7Ci0K
LSAgICBhdXRvIGNvbnRlbnROZWVkc0JpZGlSZW9yZGVyaW5nID0gIWxpbmVDb250ZW50LnZpc3Vh
bE9yZGVyTGlzdC5pc0VtcHR5KCk7Ci0gICAgaWYgKGNvbnRlbnROZWVkc0JpZGlSZW9yZGVyaW5n
KQotICAgICAgICBwcm9jZXNzQmlkaUNvbnRlbnQobGluZUNvbnRlbnQsIGxpbmVCb3gsIGxpbmVC
b3hMb2dpY2FsUmVjdC50b3BMZWZ0KCksIGJveGVzKTsKLSAgICBlbHNlCi0gICAgICAgIHByb2Nl
c3NOb25CaWRpQ29udGVudChsaW5lQ29udGVudCwgbGluZUJveCwgbGluZUJveExvZ2ljYWxSZWN0
LnRvcExlZnQoKSwgYm94ZXMpOwotICAgIHByb2Nlc3NPdmVyZmxvd25SdW5zRm9yRWxsaXBzaXMo
Ym94ZXMsIGxpbmVCb3hMb2dpY2FsUmVjdC5yaWdodCgpKTsKLSAgICBjb2xsZWN0SW5rT3ZlcmZs
b3dGb3JJbmxpbmVCb3hlcyhib3hlcyk7Ci0gICAgcmV0dXJuIGJveGVzOwotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgY29tcHV0ZUJveFNoYWRvd0lua092ZXJmbG93KGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgSW5saW5lUmVjdCYgaW5rT3ZlcmZsb3cpCi17Ci0gICAgYXV0byB0b3BCb3hTaGFk
b3cgPSBMYXlvdXRVbml0IHsgfTsKLSAgICBhdXRvIGJvdHRvbUJveFNoYWRvdyA9IExheW91dFVu
aXQgeyB9OwotICAgIHN0eWxlLmdldEJveFNoYWRvd0Jsb2NrRGlyZWN0aW9uRXh0ZW50KHRvcEJv
eFNoYWRvdywgYm90dG9tQm94U2hhZG93KTsKLQotICAgIGF1dG8gbGVmdEJveFNoYWRvdyA9IExh
eW91dFVuaXQgeyB9OwotICAgIGF1dG8gcmlnaHRCb3hTaGFkb3cgPSBMYXlvdXRVbml0IHsgfTsK
LSAgICBzdHlsZS5nZXRCb3hTaGFkb3dJbmxpbmVEaXJlY3Rpb25FeHRlbnQobGVmdEJveFNoYWRv
dywgcmlnaHRCb3hTaGFkb3cpOwotICAgIGlmICghdG9wQm94U2hhZG93ICYmICFib3R0b21Cb3hT
aGFkb3cgJiYgIWxlZnRCb3hTaGFkb3cgJiYgIXJpZ2h0Qm94U2hhZG93KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaW5rT3ZlcmZsb3cuaW5mbGF0ZShJbmxpbmVMYXlvdXRVbml0IHsgdG9w
Qm94U2hhZG93IH0sIElubGluZUxheW91dFVuaXQgeyByaWdodEJveFNoYWRvdyB9LCBJbmxpbmVM
YXlvdXRVbml0IHsgYm90dG9tQm94U2hhZG93IH0sIElubGluZUxheW91dFVuaXQgeyBsZWZ0Qm94
U2hhZG93IH0pOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIElubGluZURpc3BsYXlDb250
ZW50QnVpbGRlcjo6YXBwZW5kVGV4dERpc3BsYXlCb3goY29uc3QgTGluZTo6UnVuJiBsaW5lUnVu
LCBjb25zdCBJbmxpbmVSZWN0JiB0ZXh0UnVuUmVjdCwgRGlzcGxheUJveGVzJiBib3hlcykKLXsK
LSAgICBBU1NFUlQobGluZVJ1bi50ZXh0Q29udGVudCgpICYmIGlzPElubGluZVRleHRCb3g+KGxp
bmVSdW4ubGF5b3V0Qm94KCkpKTsKLQotICAgIGF1dG8mIGxheW91dEJveCA9IGxpbmVSdW4ubGF5
b3V0Qm94KCk7Ci0gICAgYXV0byYgc3R5bGUgPSAhbV9saW5lSW5kZXggPyBsYXlvdXRCb3guZmly
c3RMaW5lU3R5bGUoKSA6IGxheW91dEJveC5zdHlsZSgpOwotCi0gICAgYXV0byBpbmtPdmVyZmxv
dyA9IFsmXSB7Ci0gICAgICAgIGF1dG8gaW5pdGlhbENvbnRhaW5nQmxvY2tTaXplID0gUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRGb3JtYXR0aW5nQ29udGV4
dEludGVncmF0aW9uRW5hYmxlZCgpCi0gICAgICAgICAgICA/IGZvcm1hdHRpbmdTdGF0ZSgpLmxh
eW91dFN0YXRlKCkudmlld3BvcnRTaXplKCkKLSAgICAgICAgICAgIDogZm9ybWF0dGluZ1N0YXRl
KCkubGF5b3V0U3RhdGUoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3guaW5pdGlhbENvbnRhaW5p
bmdCbG9jaygpKS5jb250ZW50Qm94KCkuc2l6ZSgpOwotICAgICAgICBhdXRvIHN0cm9rZU92ZXJm
bG93ID0gY2VpbGYoc3R5bGUuY29tcHV0ZWRTdHJva2VXaWR0aChjZWlsZWRJbnRTaXplKGluaXRp
YWxDb250YWluZ0Jsb2NrU2l6ZSkpKTsKLSAgICAgICAgYXV0byBpbmtPdmVyZmxvdyA9IHRleHRS
dW5SZWN0OwotICAgICAgICBpbmtPdmVyZmxvdy5pbmZsYXRlKHN0cm9rZU92ZXJmbG93KTsKLSAg
ICAgICAgYXV0byBsZXR0ZXJTcGFjaW5nID0gc3R5bGUuZm9udENhc2NhZGUoKS5sZXR0ZXJTcGFj
aW5nKCk7Ci0gICAgICAgIGlmIChsZXR0ZXJTcGFjaW5nIDwgMCkgewotICAgICAgICAgICAgLy8g
TGFzdCBsZXR0ZXIncyBuZWdhdGl2ZSBzcGFjaW5nIHNocmlua3MgbG9naWNhbCByZWN0LiBQdXNo
IGl0IHRvIGluayBvdmVyZmxvdy4KLSAgICAgICAgICAgIGlua092ZXJmbG93LmV4cGFuZCgtbGV0
dGVyU3BhY2luZywgeyB9KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaW5rT3ZlcmZsb3c7
Ci0gICAgfTsKLSAgICBhdXRvIGNvbnRlbnQgPSBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PihsYXlv
dXRCb3gpLmNvbnRlbnQoKTsKLSAgICBhdXRvIHRleHQgPSBsaW5lUnVuLnRleHRDb250ZW50KCk7
Ci0gICAgYXV0byBhZGp1c3RlZENvbnRlbnRUb1JlbmRlciA9IFsmXSB7Ci0gICAgICAgIHJldHVy
biB0ZXh0LT5uZWVkc0h5cGhlbiA/IG1ha2VTdHJpbmcoY29udGVudC5zdWJzdHJpbmcodGV4dC0+
c3RhcnQsIHRleHQtPmxlbmd0aCksIHN0eWxlLmh5cGhlblN0cmluZygpKSA6IFN0cmluZygpOwot
ICAgIH07Ci0gICAgYm94ZXMuYXBwZW5kKHsgbV9saW5lSW5kZXgKLSAgICAgICAgLCBJbmxpbmVE
aXNwbGF5OjpCb3g6OlR5cGU6OlRleHQKLSAgICAgICAgLCBsYXlvdXRCb3gKLSAgICAgICAgLCBs
aW5lUnVuLmJpZGlMZXZlbCgpCi0gICAgICAgICwgdGV4dFJ1blJlY3QKLSAgICAgICAgLCBpbmtP
dmVyZmxvdygpCi0gICAgICAgICwgbGluZVJ1bi5leHBhbnNpb24oKQotICAgICAgICAsIElubGlu
ZURpc3BsYXk6OkJveDo6VGV4dCB7IHRleHQtPnN0YXJ0LCB0ZXh0LT5sZW5ndGgsIGNvbnRlbnQs
IGFkanVzdGVkQ29udGVudFRvUmVuZGVyKCksIHRleHQtPm5lZWRzSHlwaGVuIH0KLSAgICAgICAg
LCB0cnVlCi0gICAgICAgICwgeyB9Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSW5saW5lRGlzcGxheUNv
bnRlbnRCdWlsZGVyOjphcHBlbmRTb2Z0TGluZUJyZWFrRGlzcGxheUJveChjb25zdCBMaW5lOjpS
dW4mIGxpbmVSdW4sIGNvbnN0IElubGluZVJlY3QmIHNvZnRMaW5lQnJlYWtSdW5SZWN0LCBEaXNw
bGF5Qm94ZXMmIGJveGVzKQotewotICAgIEFTU0VSVChsaW5lUnVuLnRleHRDb250ZW50KCkgJiYg
aXM8SW5saW5lVGV4dEJveD4obGluZVJ1bi5sYXlvdXRCb3goKSkpOwotCi0gICAgYXV0byYgbGF5
b3V0Qm94ID0gbGluZVJ1bi5sYXlvdXRCb3goKTsKLSAgICBhdXRvJiB0ZXh0ID0gbGluZVJ1bi50
ZXh0Q29udGVudCgpOwotCi0gICAgYm94ZXMuYXBwZW5kKHsgbV9saW5lSW5kZXgKLSAgICAgICAg
LCBJbmxpbmVEaXNwbGF5OjpCb3g6OlR5cGU6OlNvZnRMaW5lQnJlYWsKLSAgICAgICAgLCBsYXlv
dXRCb3gKLSAgICAgICAgLCBsaW5lUnVuLmJpZGlMZXZlbCgpCi0gICAgICAgICwgc29mdExpbmVC
cmVha1J1blJlY3QKLSAgICAgICAgLCBzb2Z0TGluZUJyZWFrUnVuUmVjdAotICAgICAgICAsIGxp
bmVSdW4uZXhwYW5zaW9uKCkKLSAgICAgICAgLCBJbmxpbmVEaXNwbGF5OjpCb3g6OlRleHQgeyB0
ZXh0LT5zdGFydCwgdGV4dC0+bGVuZ3RoLCBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PihsYXlvdXRC
b3gpLmNvbnRlbnQoKSB9Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSW5saW5lRGlzcGxheUNvbnRlbnRC
dWlsZGVyOjphcHBlbmRIYXJkTGluZUJyZWFrRGlzcGxheUJveChjb25zdCBMaW5lOjpSdW4mIGxp
bmVSdW4sIGNvbnN0IElubGluZVJlY3QmIGxpbmVCcmVha0JveFJlY3QsIERpc3BsYXlCb3hlcyYg
Ym94ZXMpCi17Ci0gICAgYXV0byYgbGF5b3V0Qm94ID0gbGluZVJ1bi5sYXlvdXRCb3goKTsKLQot
ICAgIGJveGVzLmFwcGVuZCh7IG1fbGluZUluZGV4Ci0gICAgICAgICwgSW5saW5lRGlzcGxheTo6
Qm94OjpUeXBlOjpMaW5lQnJlYWtCb3gKLSAgICAgICAgLCBsYXlvdXRCb3gKLSAgICAgICAgLCBs
aW5lUnVuLmJpZGlMZXZlbCgpCi0gICAgICAgICwgbGluZUJyZWFrQm94UmVjdAotICAgICAgICAs
IGxpbmVCcmVha0JveFJlY3QKLSAgICAgICAgLCBsaW5lUnVuLmV4cGFuc2lvbigpCi0gICAgICAg
ICwgeyB9Ci0gICAgfSk7Ci0KLSAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0
ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCk7Ci0gICAgYm94R2VvbWV0cnkuc2V0TG9naWNhbFRv
cExlZnQodG9MYXlvdXRQb2ludChsaW5lQnJlYWtCb3hSZWN0LnRvcExlZnQoKSkpOwotICAgIGJv
eEdlb21ldHJ5LnNldENvbnRlbnRCb3hIZWlnaHQodG9MYXlvdXRVbml0KGxpbmVCcmVha0JveFJl
Y3QuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OmFw
cGVuZEF0b21pY0lubGluZUxldmVsRGlzcGxheUJveChjb25zdCBMaW5lOjpSdW4mIGxpbmVSdW4s
IGNvbnN0IElubGluZVJlY3QmIGJvcmRlckJveFJlY3QsIERpc3BsYXlCb3hlcyYgYm94ZXMpCi17
Ci0gICAgQVNTRVJUKGxpbmVSdW4ubGF5b3V0Qm94KCkuaXNBdG9taWNJbmxpbmVMZXZlbEJveCgp
KTsKLQotICAgIGF1dG8mIGxheW91dEJveCA9IGxpbmVSdW4ubGF5b3V0Qm94KCk7Ci0gICAgYXV0
byBpbmtPdmVyZmxvdyA9IFsmXSB7Ci0gICAgICAgIGF1dG8gaW5rT3ZlcmZsb3cgPSBib3JkZXJC
b3hSZWN0OwotICAgICAgICBjb21wdXRlQm94U2hhZG93SW5rT3ZlcmZsb3coIW1fbGluZUluZGV4
ID8gbGF5b3V0Qm94LmZpcnN0TGluZVN0eWxlKCkgOiBsYXlvdXRCb3guc3R5bGUoKSwgaW5rT3Zl
cmZsb3cpOwotICAgICAgICAvLyBBdG9taWMgaW5saW5lIGJveCBjb250cmlidXRlIHRvIHRoZWly
IGlubGluZSBib3ggcGFyZW50cyBpbmsgb3ZlcmZsb3cgYXQgYWxsIHRpbWVzIChlLmcuIDxzcGFu
PjxpbWc+PC9zcGFuPikuCi0gICAgICAgIG1fY29udGVudEhhc0lua092ZXJmbG93ID0gbV9jb250
ZW50SGFzSW5rT3ZlcmZsb3cgfHwgJmxheW91dEJveC5wYXJlbnQoKSAhPSAmcm9vdCgpOwotICAg
ICAgICByZXR1cm4gaW5rT3ZlcmZsb3c7Ci0gICAgfTsKLSAgICBib3hlcy5hcHBlbmQoeyBtX2xp
bmVJbmRleAotICAgICAgICAsIElubGluZURpc3BsYXk6OkJveDo6VHlwZTo6QXRvbWljSW5saW5l
TGV2ZWxCb3gKLSAgICAgICAgLCBsYXlvdXRCb3gKLSAgICAgICAgLCBsaW5lUnVuLmJpZGlMZXZl
bCgpCi0gICAgICAgICwgYm9yZGVyQm94UmVjdAotICAgICAgICAsIGlua092ZXJmbG93KCkKLSAg
ICAgICAgLCBsaW5lUnVuLmV4cGFuc2lvbigpCi0gICAgICAgICwgeyB9Ci0gICAgfSk7Ci0gICAg
Ly8gTm90ZSB0aGF0IGlubGluZSBib3hlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGxpbmUgYW5kIHRo
ZWlyIHRvcCBwb3NpdGlvbiBjYW4gYmUgbmVnYXRpdmUuCi0gICAgLy8gQXRvbWljIGlubGluZSBi
b3hlcyBhcmUgYWxsIHNldC4gVGhlaXIgbWFyZ2luL2JvcmRlci9jb250ZW50IGJveCBnZW9tZXRy
aWVzIGFyZSBhbHJlYWR5IGNvbXB1dGVkLiBXZSBqdXN0IGhhdmUgdG8gcG9zaXRpb24gdGhlbSBo
ZXJlLgotICAgIGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCkuc2V0TG9n
aWNhbFRvcExlZnQodG9MYXlvdXRQb2ludChib3JkZXJCb3hSZWN0LnRvcExlZnQoKSkpOwotfQot
Ci12b2lkIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlcjo6c2V0SW5saW5lQm94R2VvbWV0cnko
Y29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IElubGluZVJlY3QmIHJlY3QsIGJvb2wgaXNGaXJz
dElubGluZUJveEZyYWdtZW50KQotewotICAgIGF1dG8gYWRqdXN0ZWRTaXplID0gTGF5b3V0U2l6
ZSB7IExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwocmVjdC53aWR0aCgpKSwgTGF5b3V0VW5pdDo6
ZnJvbUZsb2F0Q2VpbChyZWN0LmhlaWdodCgpKSB9OwotICAgIGF1dG8gYWRqdXN0ZWRSZWN0ID0g
UmVjdCB7IExheW91dFBvaW50IHsgcmVjdC50b3BMZWZ0KCkgfSwgYWRqdXN0ZWRTaXplIH07Ci0g
ICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlv
dXRCb3gpOwotICAgIGlmICghaXNGaXJzdElubGluZUJveEZyYWdtZW50KSB7Ci0gICAgICAgIGF1
dG8gZW5jbG9zaW5nQm9yZGVyQm94UmVjdCA9IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KGJv
eEdlb21ldHJ5KTsKLSAgICAgICAgZW5jbG9zaW5nQm9yZGVyQm94UmVjdC5leHBhbmRUb0NvbnRh
aW4oYWRqdXN0ZWRSZWN0KTsKLSAgICAgICAgYWRqdXN0ZWRSZWN0ID0gZW5jbG9zaW5nQm9yZGVy
Qm94UmVjdDsKLSAgICB9Ci0gICAgYm94R2VvbWV0cnkuc2V0TG9naWNhbFRvcExlZnQoYWRqdXN0
ZWRSZWN0LnRvcExlZnQoKSk7Ci0gICAgYXV0byBjb250ZW50Qm94SGVpZ2h0ID0gYWRqdXN0ZWRS
ZWN0LmhlaWdodCgpIC0gKGJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBib3hHZW9tZXRy
eS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZV9vcigwX2x1KSk7Ci0gICAgYXV0byBjb250ZW50Qm94
V2lkdGggPSBhZGp1c3RlZFJlY3Qud2lkdGgoKSAtIChib3hHZW9tZXRyeS5ob3Jpem9udGFsQm9y
ZGVyKCkgKyBib3hHZW9tZXRyeS5ob3Jpem9udGFsUGFkZGluZygpLnZhbHVlX29yKDBfbHUpKTsK
LSAgICBib3hHZW9tZXRyeS5zZXRDb250ZW50Qm94SGVpZ2h0KGNvbnRlbnRCb3hIZWlnaHQpOwot
ICAgIGJveEdlb21ldHJ5LnNldENvbnRlbnRCb3hXaWR0aChjb250ZW50Qm94V2lkdGgpOwotfQot
Ci12b2lkIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlcjo6YXBwZW5kSW5saW5lQm94RGlzcGxh
eUJveChjb25zdCBMaW5lOjpSdW4mIGxpbmVSdW4sIGNvbnN0IElubGluZUxldmVsQm94JiBpbmxp
bmVCb3gsIGNvbnN0IElubGluZVJlY3QmIGlubGluZUJveEJvcmRlckJveCwgYm9vbCBsaW5laGFz
Q29udGVudCwgRGlzcGxheUJveGVzJiBib3hlcykKLXsKLSAgICBBU1NFUlQobGluZVJ1bi5sYXlv
dXRCb3goKS5pc0lubGluZUJveCgpKTsKLQotICAgIGF1dG8mIGxheW91dEJveCA9IGxpbmVSdW4u
bGF5b3V0Qm94KCk7Ci0KLSAgICBpZiAoIWxpbmVoYXNDb250ZW50KSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBJdCdzIGV4cGVjdGVkIHRvIG5vdCBoYXZlIGFueSBib3hlcyBvbiBlbXB0eSBsaW5lcy4g
V2Ugc2hvdWxkIHJlY29uc2lkZXIgdGhpcy4KLSAgICAgICAgc2V0SW5saW5lQm94R2VvbWV0cnko
bGF5b3V0Qm94LCBpbmxpbmVCb3hCb3JkZXJCb3gsIHRydWUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYXV0byBpbmtPdmVyZmxvdyA9IFsmXSB7Ci0gICAgICAgIGF1dG8gaW5rT3Zl
cmZsb3cgPSBpbmxpbmVCb3hCb3JkZXJCb3g7Ci0gICAgICAgIG1fY29udGVudEhhc0lua092ZXJm
bG93ID0gY29tcHV0ZUJveFNoYWRvd0lua092ZXJmbG93KCFtX2xpbmVJbmRleCA/IGxheW91dEJv
eC5maXJzdExpbmVTdHlsZSgpIDogbGF5b3V0Qm94LnN0eWxlKCksIGlua092ZXJmbG93KSB8fCBt
X2NvbnRlbnRIYXNJbmtPdmVyZmxvdzsKLSAgICAgICAgcmV0dXJuIGlua092ZXJmbG93OwotICAg
IH07Ci0gICAgQVNTRVJUKGlubGluZUJveC5pc0lubGluZUJveCgpKTsKLSAgICBBU1NFUlQoaW5s
aW5lQm94LmlzRmlyc3RCb3goKSk7Ci0gICAgYm94ZXMuYXBwZW5kKHsgbV9saW5lSW5kZXgKLSAg
ICAgICAgLCBJbmxpbmVEaXNwbGF5OjpCb3g6OlR5cGU6Ok5vblJvb3RJbmxpbmVCb3gKLSAgICAg
ICAgLCBsYXlvdXRCb3gKLSAgICAgICAgLCBsaW5lUnVuLmJpZGlMZXZlbCgpCi0gICAgICAgICwg
aW5saW5lQm94Qm9yZGVyQm94Ci0gICAgICAgICwgaW5rT3ZlcmZsb3coKQotICAgICAgICAsIHsg
fQotICAgICAgICAsIHsgfQotICAgICAgICAsIGlubGluZUJveC5oYXNDb250ZW50KCkKLSAgICAg
ICAgLCBpc0ZpcnN0TGFzdEJveChpbmxpbmVCb3gpCi0gICAgfSk7Ci0gICAgLy8gVGhpcyBpbmxp
bmUgYm94IHNob3dlZCB1cCBmaXJzdCBvbiB0aGlzIGxpbmUuCi0gICAgc2V0SW5saW5lQm94R2Vv
bWV0cnkobGF5b3V0Qm94LCBpbmxpbmVCb3hCb3JkZXJCb3gsIHRydWUpOwotfQotCi12b2lkIElu
bGluZURpc3BsYXlDb250ZW50QnVpbGRlcjo6YXBwZW5kU3Bhbm5pbmdJbmxpbmVCb3hEaXNwbGF5
Qm94KGNvbnN0IExpbmU6OlJ1biYgbGluZVJ1biwgY29uc3QgSW5saW5lTGV2ZWxCb3gmIGlubGlu
ZUJveCwgY29uc3QgSW5saW5lUmVjdCYgaW5saW5lQm94Qm9yZGVyQm94LCBEaXNwbGF5Qm94ZXMm
IGJveGVzKQotewotICAgIEFTU0VSVChsaW5lUnVuLmxheW91dEJveCgpLmlzSW5saW5lQm94KCkp
OwotCi0gICAgYXV0byYgbGF5b3V0Qm94ID0gbGluZVJ1bi5sYXlvdXRCb3goKTsKLSAgICBhdXRv
IGlua092ZXJmbG93ID0gWyZdIHsKLSAgICAgICAgYXV0byBpbmtPdmVyZmxvdyA9IGlubGluZUJv
eEJvcmRlckJveDsKLSAgICAgICAgbV9jb250ZW50SGFzSW5rT3ZlcmZsb3cgPSBjb21wdXRlQm94
U2hhZG93SW5rT3ZlcmZsb3coIW1fbGluZUluZGV4ID8gbGF5b3V0Qm94LmZpcnN0TGluZVN0eWxl
KCkgOiBsYXlvdXRCb3guc3R5bGUoKSwgaW5rT3ZlcmZsb3cpIHx8IG1fY29udGVudEhhc0lua092
ZXJmbG93OwotICAgICAgICByZXR1cm4gaW5rT3ZlcmZsb3c7Ci0gICAgfTsKLSAgICBBU1NFUlQo
IWlubGluZUJveC5pc0ZpcnN0Qm94KCkpOwotICAgIGJveGVzLmFwcGVuZCh7IG1fbGluZUluZGV4
Ci0gICAgICAgICwgSW5saW5lRGlzcGxheTo6Qm94OjpUeXBlOjpOb25Sb290SW5saW5lQm94Ci0g
ICAgICAgICwgbGF5b3V0Qm94Ci0gICAgICAgICwgbGluZVJ1bi5iaWRpTGV2ZWwoKQotICAgICAg
ICAsIGlubGluZUJveEJvcmRlckJveAotICAgICAgICAsIGlua092ZXJmbG93KCkKLSAgICAgICAg
LCB7IH0KLSAgICAgICAgLCB7IH0KLSAgICAgICAgLCBpbmxpbmVCb3guaGFzQ29udGVudCgpCi0g
ICAgICAgICwgaXNGaXJzdExhc3RCb3goaW5saW5lQm94KQotICAgIH0pOwotICAgIC8vIE1pZGRs
ZSBvciBlbmQgb2YgdGhlIGlubGluZSBib3guIExldCdzIHN0cmV0Y2ggdGhlIGJveCBhcyBuZWVk
ZWQuCi0gICAgc2V0SW5saW5lQm94R2VvbWV0cnkobGF5b3V0Qm94LCBpbmxpbmVCb3hCb3JkZXJC
b3gsIGZhbHNlKTsKLX0KLQotdm9pZCBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OmFwcGVu
ZElubGluZURpc3BsYXlCb3hBdEJpZGlCb3VuZGFyeShjb25zdCBCb3gmIGxheW91dEJveCwgRGlz
cGxheUJveGVzJiBib3hlcykKLXsKLSAgICAvLyBHZW9tZXRyaWVzIGZvciBpbmxpbmUgYm94ZXMg
YXQgYmlkaSBib3VuZGFyaWVzIGFyZSBjb21wdXRlZCBhdCBhIHBvc3QtcHJvY2VzcyBzdGVwLgot
ICAgIGJveGVzLmFwcGVuZCh7IG1fbGluZUluZGV4Ci0gICAgICAgICwgSW5saW5lRGlzcGxheTo6
Qm94OjpUeXBlOjpOb25Sb290SW5saW5lQm94Ci0gICAgICAgICwgbGF5b3V0Qm94Ci0gICAgICAg
ICwgVUJJRElfREVGQVVMVF9MVFIKLSAgICAgICAgLCB7IH0KLSAgICAgICAgLCB7IH0KLSAgICAg
ICAgLCB7IH0KLSAgICAgICAgLCB7IH0KLSAgICB9KTsKLX0KLQotdm9pZCBJbmxpbmVEaXNwbGF5
Q29udGVudEJ1aWxkZXI6OnByb2Nlc3NOb25CaWRpQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6
TGluZUNvbnRlbnQmIGxpbmVDb250ZW50LCBjb25zdCBMaW5lQm94JiBsaW5lQm94LCBjb25zdCBJ
bmxpbmVMYXlvdXRQb2ludCYgbGluZUJveExvZ2ljYWxUb3BMZWZ0LCBEaXNwbGF5Qm94ZXMmIGJv
eGVzKQotewotICAgIGF1dG8gcm9vdElubGluZUJveFdpZHRoID0gbGluZUJveC5sb2dpY2FsUmVj
dEZvclJvb3RJbmxpbmVCb3goKS53aWR0aCgpOwotICAgIGF1dG8gcm9vdElubGluZUJveEFsaWdu
bWVudE9mZnNldCA9IGxpbmVCb3gucm9vdElubGluZUJveEFsaWdubWVudE9mZnNldCgpOwotICAg
IGF1dG8gbmVlZHNEaXJlY3Rpb25BZGp1c3RtZW50ID0gIXJvb3QoKS5zdHlsZSgpLmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKTsKLQotICAgIGZvciAoYXV0byYgbGluZVJ1biA6IGxpbmVDb250ZW50
LnJ1bnMpIHsKLSAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gbGluZVJ1bi5sYXlvdXRCb3goKTsK
LQotICAgICAgICBhdXRvIHZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdCA9IFsmXShhdXRvIGxvZ2lj
YWxSZWN0KSB7Ci0gICAgICAgICAgICAvLyBXaGVuIHRoZSBsb2dpY2FsIG9yZGVyID09IHZpc3Vh
bCBvcmRlciwgUlRMIGlubGluZSBkaXJlY3Rpb24gaXMganVzdCBhbiBvZmZzZXQuCi0gICAgICAg
ICAgICBhdXRvIGhvcml6b250YWxPZmZzZXQgPSBuZWVkc0RpcmVjdGlvbkFkanVzdG1lbnQgPyBs
aW5lQ29udGVudC5saW5lTG9naWNhbFdpZHRoIC0gcm9vdElubGluZUJveFdpZHRoIC0gcm9vdElu
bGluZUJveEFsaWdubWVudE9mZnNldCA6IHJvb3RJbmxpbmVCb3hBbGlnbm1lbnRPZmZzZXQ7Ci0g
ICAgICAgICAgICBsb2dpY2FsUmVjdC5tb3ZlQnkoeyBsaW5lQm94TG9naWNhbFRvcExlZnQueCgp
ICsgaG9yaXpvbnRhbE9mZnNldCwgbGluZUJveExvZ2ljYWxUb3BMZWZ0LnkoKSB9KTsKLSAgICAg
ICAgICAgIHJldHVybiBsb2dpY2FsUmVjdDsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAobGlu
ZVJ1bi5pc1RleHQoKSkgewotICAgICAgICAgICAgYXBwZW5kVGV4dERpc3BsYXlCb3gobGluZVJ1
biwgdmlzdWFsUmVjdFJlbGF0aXZlVG9Sb290KGxpbmVCb3gubG9naWNhbFJlY3RGb3JUZXh0UnVu
KGxpbmVSdW4pKSwgYm94ZXMpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGxpbmVSdW4uaXNTb2Z0TGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgIGFwcGVu
ZFNvZnRMaW5lQnJlYWtEaXNwbGF5Qm94KGxpbmVSdW4sIHZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9v
dChsaW5lQm94LmxvZ2ljYWxSZWN0Rm9yVGV4dFJ1bihsaW5lUnVuKSksIGJveGVzKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsaW5lUnVuLmlzSGFyZExp
bmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBhcHBlbmRIYXJkTGluZUJyZWFrRGlzcGxheUJveChs
aW5lUnVuLCB2aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QobGluZUJveC5sb2dpY2FsUmVjdEZvckxp
bmVCcmVha0JveChsYXlvdXRCb3gpKSwgYm94ZXMpOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGxpbmVSdW4uaXNCb3goKSkgewotICAgICAgICAgICAgYXBw
ZW5kQXRvbWljSW5saW5lTGV2ZWxEaXNwbGF5Qm94KGxpbmVSdW4KLSAgICAgICAgICAgICAgICAs
IHZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdChsaW5lQm94LmxvZ2ljYWxCb3JkZXJCb3hGb3JBdG9t
aWNJbmxpbmVMZXZlbEJveChsYXlvdXRCb3gsIGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5
KGxheW91dEJveCkpKQotICAgICAgICAgICAgICAgICwgYm94ZXMpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxpbmVSdW4uaXNJbmxpbmVCb3hTdGFydCgp
KSB7Ci0gICAgICAgICAgICBhcHBlbmRJbmxpbmVCb3hEaXNwbGF5Qm94KGxpbmVSdW4KLSAgICAg
ICAgICAgICAgICAsIGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGluZVJ1bi5s
YXlvdXRCb3goKSkKLSAgICAgICAgICAgICAgICAsIHZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdChs
aW5lQm94LmxvZ2ljYWxCb3JkZXJCb3hGb3JJbmxpbmVCb3gobGF5b3V0Qm94LCBmb3JtYXR0aW5n
U3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpKSkKLSAgICAgICAgICAgICAgICAsIGxpbmVC
b3guaGFzQ29udGVudCgpCi0gICAgICAgICAgICAgICAgLCBib3hlcyk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobGluZVJ1bi5pc0xpbmVTcGFubmluZ0lu
bGluZUJveFN0YXJ0KCkpIHsKLSAgICAgICAgICAgIGlmICghbGluZUJveC5oYXNDb250ZW50KCkp
IHsKLSAgICAgICAgICAgICAgICAvLyBXaGVuIGEgc3Bhbm5pbmcgaW5saW5lIGJveCAoZS5nLiA8
ZGl2PnRleHQ8c3Bhbj48YnI+PC9zcGFuPjwvZGl2PikgbGFuZHMgb24gYW4gZW1wdHkgbGluZQot
ICAgICAgICAgICAgICAgIC8vIChlbXB0eSBoZXJlIG1lYW5zIG5vIGNvbnRlbnQgYXQgYWxsIGlu
Y2x1ZGluZyBsaW5lIGJyZWFrcywgbm90IGp1c3QgdmlzdWFsbHkgZW1wdHkpIHRoZW4gd2UKLSAg
ICAgICAgICAgICAgICAvLyBkb24ndCBleHRlbmQgdGhlIHNwYW5uaW5nIGxpbmUgYm94IG92ZXIg
dG8gdGhpcyBsaW5lIC1hbHNvIHRoZXJlIGlzIG5vIG5leHQgbGluZSBpbiBjYXNlcyBsaWtlIHRo
aXMuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBhcHBlbmRTcGFubmluZ0lubGluZUJveERpc3BsYXlCb3gobGluZVJ1bgotICAgICAgICAgICAg
ICAgICwgbGluZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJveChsaW5lUnVuLmxheW91dEJv
eCgpKQotICAgICAgICAgICAgICAgICwgdmlzdWFsUmVjdFJlbGF0aXZlVG9Sb290KGxpbmVCb3gu
bG9naWNhbEJvcmRlckJveEZvcklubGluZUJveChsYXlvdXRCb3gsIGZvcm1hdHRpbmdTdGF0ZSgp
LmJveEdlb21ldHJ5KGxheW91dEJveCkpKQotICAgICAgICAgICAgICAgICwgYm94ZXMpOwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGxpbmVSdW4uaXNJ
bmxpbmVCb3hFbmQoKSB8fCBsaW5lUnVuLmlzV29yZEJyZWFrT3Bwb3J0dW5pdHkoKSk7Ci0gICAg
fQotfQotCi1zdHJ1Y3QgRGlzcGxheUJveFRyZWUgewotcHVibGljOgotICAgIHN0cnVjdCBOb2Rl
IHsKLSAgICAgICAgLy8gTm9kZSdzIHBhcmVudCBpbmRleCBpbiBtX2Rpc3BsYXlCb3hOb2Rlcy4K
LSAgICAgICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+IHBhcmVudEluZGV4OwotICAgICAgICAvLyBB
c3NvY2lhdGVkIGRpc3BsYXkgYm94IGluZGV4IGluIERpc3BsYXlCb3hlcy4KLSAgICAgICAgc2l6
ZV90IGRpc3BsYXlCb3hJbmRleCB7IDAgfTsKLSAgICAgICAgLy8gQ2hpbGQgaW5kZXhlcyBpbiBt
X2Rpc3BsYXlCb3hOb2Rlcy4KLSAgICAgICAgVmVjdG9yPHNpemVfdD4gY2hpbGRyZW4geyB9Owot
ICAgIH07Ci0KLSAgICBEaXNwbGF5Qm94VHJlZSgpCi0gICAgewotICAgICAgICBtX2Rpc3BsYXlC
b3hOb2Rlcy5hcHBlbmQoeyB9KTsKLSAgICB9Ci0KLSAgICBib29sIGhhc0lubGluZUJveCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlzcGxheUJveE5vZGVzLnNpemUoKSA+IDE7IH0KLSAgICBjb25zdCBO
b2RlJiByb290KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5Qm94Tm9kZXMuZmlyc3QoKTsgfQot
ICAgIE5vZGUmIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9kaXNwbGF5Qm94Tm9kZXNbaW5k
ZXhdOyB9Ci0gICAgY29uc3QgTm9kZSYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBt
X2Rpc3BsYXlCb3hOb2Rlc1tpbmRleF07IH0KLQotICAgIHNpemVfdCBhcHBlbmQoc2l6ZV90IHBh
cmVudE5vZGVJbmRleCwgc2l6ZV90IGNoaWxkRGlzcGxheUJveEluZGV4KQotICAgIHsKLSAgICAg
ICAgYXV0byBjaGlsZERpc3BsYXlCb3hOb2RlSW5kZXggPSBtX2Rpc3BsYXlCb3hOb2Rlcy5zaXpl
KCk7Ci0gICAgICAgIG1fZGlzcGxheUJveE5vZGVzLmFwcGVuZCh7IHBhcmVudE5vZGVJbmRleCwg
Y2hpbGREaXNwbGF5Qm94SW5kZXggfSk7Ci0gICAgICAgIGF0KHBhcmVudE5vZGVJbmRleCkuY2hp
bGRyZW4uYXBwZW5kKGNoaWxkRGlzcGxheUJveE5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBj
aGlsZERpc3BsYXlCb3hOb2RlSW5kZXg7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFZlY3RvcjxO
b2RlLCAxMD4gbV9kaXNwbGF5Qm94Tm9kZXM7Ci19OwotCi1zdHJ1Y3QgQW5jZXN0b3JTdGFjayB7
Ci0gICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+IHVud2luZChjb25zdCBDb250YWluZXJCb3gmIGNv
bnRhaW5lckJveCkKLSAgICB7Ci0gICAgICAgIC8vIFVud2luZCB0aGUgc3RhY2sgYWxsIHRoZSB3
YXkgdG8gY29udGFpbmVyIGJveC4KLSAgICAgICAgaWYgKCFtX3NldC5jb250YWlucygmY29udGFp
bmVyQm94KSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHdoaWxlIChtX3NldC5s
YXN0KCkgIT0gJmNvbnRhaW5lckJveCkgewotICAgICAgICAgICAgbV9zdGFjay5yZW1vdmVMYXN0
KCk7Ci0gICAgICAgICAgICBtX3NldC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ly8gUm9vdCBpcyBhbHdheXMgYSBjb21tb24gYW5jZXN0b3IuCi0gICAgICAgIEFTU0VSVCghbV9z
dGFjay5pc0VtcHR5KCkpOwotICAgICAgICByZXR1cm4gbV9zdGFjay5sYXN0KCk7Ci0gICAgfQot
Ci0gICAgdm9pZCBwdXNoKHNpemVfdCBkaXNwbGF5Qm94Tm9kZUluZGV4Rm9yQ29udGFpbmVyQm94
LCBjb25zdCBDb250YWluZXJCb3gmIGNvbnRhaW5lckJveCkKLSAgICB7Ci0gICAgICAgIG1fc3Rh
Y2suYXBwZW5kKGRpc3BsYXlCb3hOb2RlSW5kZXhGb3JDb250YWluZXJCb3gpOwotICAgICAgICBB
U1NFUlQoIW1fc2V0LmNvbnRhaW5zKCZjb250YWluZXJCb3gpKTsKLSAgICAgICAgbV9zZXQuYWRk
KCZjb250YWluZXJCb3gpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBWZWN0b3I8c2l6ZV90PiBt
X3N0YWNrOwotICAgIExpc3RIYXNoU2V0PGNvbnN0IENvbnRhaW5lckJveCo+IG1fc2V0OwotfTsK
LQotc3RhdGljIGlubGluZSBzaXplX3QgY3JlYXRlZERpc3BsYXlCb3hOb2RlRm9yQ29udGFpbmVy
Qm94QW5kUHVzaFRvQW5jZXN0b3JTdGFjayhjb25zdCBDb250YWluZXJCb3gmIGNvbnRhaW5lckJv
eCwgc2l6ZV90IGRpc3BsYXlCb3hJbmRleCwgc2l6ZV90IHBhcmVudERpc3BsYXlCb3hOb2RlSW5k
ZXgsIERpc3BsYXlCb3hUcmVlJiBkaXNwbGF5Qm94VHJlZSwgQW5jZXN0b3JTdGFjayYgYW5jZXN0
b3JTdGFjaykKLXsKLSAgICBhdXRvIGRpc3BsYXlCb3hOb2RlSW5kZXggPSBkaXNwbGF5Qm94VHJl
ZS5hcHBlbmQocGFyZW50RGlzcGxheUJveE5vZGVJbmRleCwgZGlzcGxheUJveEluZGV4KTsKLSAg
ICBhbmNlc3RvclN0YWNrLnB1c2goZGlzcGxheUJveE5vZGVJbmRleCwgY29udGFpbmVyQm94KTsK
LSAgICByZXR1cm4gZGlzcGxheUJveE5vZGVJbmRleDsKLX0KLQotc2l6ZV90IElubGluZURpc3Bs
YXlDb250ZW50QnVpbGRlcjo6ZW5zdXJlRGlzcGxheUJveEZvckNvbnRhaW5lcihjb25zdCBDb250
YWluZXJCb3gmIGNvbnRhaW5lckJveCwgRGlzcGxheUJveFRyZWUmIGRpc3BsYXlCb3hUcmVlLCBB
bmNlc3RvclN0YWNrJiBhbmNlc3RvclN0YWNrLCBEaXNwbGF5Qm94ZXMmIGJveGVzKQotewotICAg
IEFTU0VSVChjb250YWluZXJCb3guaXNJbmxpbmVCb3goKSB8fCAmY29udGFpbmVyQm94ID09ICZy
b290KCkpOwotICAgIGlmIChhdXRvIGxvd2VzdENvbW1vbkFuY2VzdG9ySW5kZXggPSBhbmNlc3Rv
clN0YWNrLnVud2luZChjb250YWluZXJCb3gpKQotICAgICAgICByZXR1cm4gKmxvd2VzdENvbW1v
bkFuY2VzdG9ySW5kZXg7Ci0gICAgYXV0byBlbmNsb3NpbmdEaXNwbGF5Qm94Tm9kZUluZGV4Rm9y
Q29udGFpbmVyID0gZW5zdXJlRGlzcGxheUJveEZvckNvbnRhaW5lcihjb250YWluZXJCb3gucGFy
ZW50KCksIGRpc3BsYXlCb3hUcmVlLCBhbmNlc3RvclN0YWNrLCBib3hlcyk7Ci0gICAgYXBwZW5k
SW5saW5lRGlzcGxheUJveEF0QmlkaUJvdW5kYXJ5KGNvbnRhaW5lckJveCwgYm94ZXMpOwotICAg
IHJldHVybiBjcmVhdGVkRGlzcGxheUJveE5vZGVGb3JDb250YWluZXJCb3hBbmRQdXNoVG9BbmNl
c3RvclN0YWNrKGNvbnRhaW5lckJveCwgYm94ZXMuc2l6ZSgpIC0gMSwgZW5jbG9zaW5nRGlzcGxh
eUJveE5vZGVJbmRleEZvckNvbnRhaW5lciwgZGlzcGxheUJveFRyZWUsIGFuY2VzdG9yU3RhY2sp
OwotfQotCi1zdHJ1Y3QgSXNGaXJzdExhc3RJbmRleCB7Ci0gICAgc3RkOjpvcHRpb25hbDxzaXpl
X3Q+IGZpcnN0OwotICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBsYXN0OwotfTsKLXVzaW5nIElz
Rmlyc3RMYXN0SW5kZXhlc01hcCA9IEhhc2hNYXA8Y29uc3QgQm94KiwgSXNGaXJzdExhc3RJbmRl
eD47Ci12b2lkIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlcjo6YWRqdXN0VmlzdWFsR2VvbWV0
cnlGb3JEaXNwbGF5Qm94KHNpemVfdCBkaXNwbGF5Qm94Tm9kZUluZGV4LCBJbmxpbmVMYXlvdXRV
bml0JiBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVCb3hM
b2dpY2FsVG9wLCBjb25zdCBEaXNwbGF5Qm94VHJlZSYgZGlzcGxheUJveFRyZWUsIERpc3BsYXlC
b3hlcyYgYm94ZXMsIGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IElzRmlyc3RMYXN0SW5k
ZXhlc01hcCYgaXNGaXJzdExhc3RJbmRleGVzTWFwKQotewotICAgIC8vIE5vbi1pbmxpbmUgYm94
IGRpc3BsYXkgYm94ZXMganVzdCBuZWVkIGEgaG9yaXpvbnRhbCBhZGp1c3RtZW50IHdoaWxlCi0g
ICAgLy8gaW5saW5lIGJveCB0eXBlIG9mIGRpc3BsYXkgYm94ZXMgbmVlZAotICAgIC8vIDEuIGhv
cml6b250YWwgYWRqdXN0bWVudCBhbmQgbWFyZ2luL2JvcmRlci9wYWRkaW5nIHN0YXJ0IG9mZnNl
dHRpbmcgb24gdGhlIGZpcnN0IGJveAotICAgIC8vIDIuIHJpZ2h0IGVkZ2UgY29tcHV0YXRpb24g
aW5jbHVkaW5nIGRlc2NlbmRhbnQgY29udGVudCB3aWR0aCBhbmQgbWFyZ2luL2JvcmRlci9wYWRk
aW5nIGVuZCBvZmZzZXR0aW5nIG9uIHRoZSBsYXN0IGJveAotICAgIGF1dG8mIGRpc3BsYXlCb3gg
PSBib3hlc1tkaXNwbGF5Qm94VHJlZS5hdChkaXNwbGF5Qm94Tm9kZUluZGV4KS5kaXNwbGF5Qm94
SW5kZXhdOwotICAgIGF1dG8mIGxheW91dEJveCA9IGRpc3BsYXlCb3gubGF5b3V0Qm94KCk7Ci0K
LSAgICBpZiAoIWRpc3BsYXlCb3guaXNOb25Sb290SW5saW5lQm94KCkpIHsKLSAgICAgICAgaWYg
KGRpc3BsYXlCb3guaXNBdG9taWNJbmxpbmVMZXZlbEJveCgpIHx8IGRpc3BsYXlCb3guaXNHZW5l
cmljSW5saW5lTGV2ZWxCb3goKSkgewotICAgICAgICAgICAgYXV0byBpc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uID0gbGF5b3V0Qm94LnBhcmVudCgpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpOwotICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5i
b3hHZW9tZXRyeShsYXlvdXRCb3gpOwotICAgICAgICAgICAgYXV0byBib3hNYXJnaW5MZWZ0ID0g
bWFyZ2luTGVmdChib3hHZW9tZXRyeSwgaXNMZWZ0VG9SaWdodERpcmVjdGlvbik7Ci0gICAgICAg
ICAgICBhdXRvIGJveE1hcmdpblJpZ2h0ID0gbWFyZ2luUmlnaHQoYm94R2VvbWV0cnksIGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24pOwotCi0gICAgICAgICAgICBhdXRvIGJvcmRlckJveExlZnQgPSBM
YXlvdXRVbml0IHsgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciArIGJveE1hcmdpbkxlZnQgfTsK
LSAgICAgICAgICAgIGJveEdlb21ldHJ5LnNldExvZ2ljYWxMZWZ0KGJvcmRlckJveExlZnQpOwot
ICAgICAgICAgICAgZGlzcGxheUJveC5zZXRMZWZ0KGJvcmRlckJveExlZnQpOwotCi0gICAgICAg
ICAgICBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyICs9IGJveE1hcmdpbkxlZnQgKyBkaXNwbGF5
Qm94LndpZHRoKCkgKyBib3hNYXJnaW5SaWdodDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGRpc3BsYXlCb3guc2V0TGVmdChjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyKTsKLSAgICAg
ICAgICAgIGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIgKz0gZGlzcGxheUJveC53aWR0aCgpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvJiBib3hHZW9tZXRy
eSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCk7Ci0gICAgYXV0byBp
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gbGF5b3V0Qm94LnN0eWxlKCkuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpOwotICAgIGF1dG8gaXNGaXJzdExhc3RJbmRleGVzID0gaXNGaXJzdExhc3RJbmRl
eGVzTWFwLmdldCgmbGF5b3V0Qm94KTsKLSAgICBhdXRvIGlzRmlyc3RCb3ggPSBpc0ZpcnN0TGFz
dEluZGV4ZXMuZmlyc3QgJiYgKmlzRmlyc3RMYXN0SW5kZXhlcy5maXJzdCA9PSBkaXNwbGF5Qm94
Tm9kZUluZGV4OwotICAgIGF1dG8gaXNMYXN0Qm94ID0gaXNGaXJzdExhc3RJbmRleGVzLmxhc3Qg
JiYgKmlzRmlyc3RMYXN0SW5kZXhlcy5sYXN0ID09IGRpc3BsYXlCb3hOb2RlSW5kZXg7Ci0gICAg
YXV0byBiZWZvcmVJbmxpbmVCb3hDb250ZW50ID0gWyZdIHsKLSAgICAgICAgYXV0byBsb2dpY2Fs
UmVjdCA9IGxpbmVCb3gubG9naWNhbEJvcmRlckJveEZvcklubGluZUJveChsYXlvdXRCb3gsIGJv
eEdlb21ldHJ5KTsKLSAgICAgICAgYXV0byB2aXN1YWxSZWN0ID0gSW5saW5lUmVjdCB7IGxpbmVC
b3hMb2dpY2FsVG9wICsgbG9naWNhbFJlY3QudG9wKCksIGNvbnRlbnRSaWdodEluVmlzdWFsT3Jk
ZXIsIHsgfSwgbG9naWNhbFJlY3QuaGVpZ2h0KCkgfTsKLSAgICAgICAgYXV0byBzaG91bGRBcHBs
eUxlZnRTaWRlID0gKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gJiYgaXNGaXJzdEJveCkgfHwgKCFp
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uICYmIGlzTGFzdEJveCk7Ci0gICAgICAgIGlmICghc2hvdWxk
QXBwbHlMZWZ0U2lkZSkKLSAgICAgICAgICAgIHJldHVybiBkaXNwbGF5Qm94LnNldFJlY3Qodmlz
dWFsUmVjdCwgdmlzdWFsUmVjdCk7Ci0KLSAgICAgICAgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRl
ciArPSBtYXJnaW5MZWZ0KGJveEdlb21ldHJ5LCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKTsKLSAg
ICAgICAgYXV0byB2aXN1YWxSZWN0V2l0aE1hcmdpbkxlZnQgPSBJbmxpbmVSZWN0IHsgdmlzdWFs
UmVjdC50b3AoKSwgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciwgdmlzdWFsUmVjdC53aWR0aCgp
LCB2aXN1YWxSZWN0LmhlaWdodCgpIH07Ci0gICAgICAgIGRpc3BsYXlCb3guc2V0UmVjdCh2aXN1
YWxSZWN0V2l0aE1hcmdpbkxlZnQsIHZpc3VhbFJlY3RXaXRoTWFyZ2luTGVmdCk7Ci0gICAgICAg
IGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIgKz0gYm9yZGVyTGVmdChib3hHZW9tZXRyeSwgaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbikgKyBwYWRkaW5nTGVmdChib3hHZW9tZXRyeSwgaXNMZWZ0VG9S
aWdodERpcmVjdGlvbik7Ci0gICAgfTsKLSAgICBiZWZvcmVJbmxpbmVCb3hDb250ZW50KCk7Ci0K
LSAgICBmb3IgKGF1dG8gY2hpbGREaXNwbGF5Qm94Tm9kZUluZGV4IDogZGlzcGxheUJveFRyZWUu
YXQoZGlzcGxheUJveE5vZGVJbmRleCkuY2hpbGRyZW4pCi0gICAgICAgIGFkanVzdFZpc3VhbEdl
b21ldHJ5Rm9yRGlzcGxheUJveChjaGlsZERpc3BsYXlCb3hOb2RlSW5kZXgsIGNvbnRlbnRSaWdo
dEluVmlzdWFsT3JkZXIsIGxpbmVCb3hMb2dpY2FsVG9wLCBkaXNwbGF5Qm94VHJlZSwgYm94ZXMs
IGxpbmVCb3gsIGlzRmlyc3RMYXN0SW5kZXhlc01hcCk7Ci0KLSAgICBhdXRvIGFmdGVySW5saW5l
Qm94Q29udGVudCA9IFsmXSB7Ci0gICAgICAgIGF1dG8gc2hvdWxkQXBwbHlSaWdodFNpZGUgPSAo
aXNMZWZ0VG9SaWdodERpcmVjdGlvbiAmJiBpc0xhc3RCb3gpIHx8ICghaXNMZWZ0VG9SaWdodERp
cmVjdGlvbiAmJiBpc0ZpcnN0Qm94KTsKLSAgICAgICAgaWYgKCFzaG91bGRBcHBseVJpZ2h0U2lk
ZSkKLSAgICAgICAgICAgIHJldHVybiBkaXNwbGF5Qm94LnNldFJpZ2h0KGNvbnRlbnRSaWdodElu
VmlzdWFsT3JkZXIpOwotCi0gICAgICAgIGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIgKz0gYm9y
ZGVyUmlnaHQoYm94R2VvbWV0cnksIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pICsgcGFkZGluZ1Jp
Z2h0KGJveEdlb21ldHJ5LCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKTsKLSAgICAgICAgZGlzcGxh
eUJveC5zZXRSaWdodChjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyKTsKLSAgICAgICAgY29udGVu
dFJpZ2h0SW5WaXN1YWxPcmRlciArPSBtYXJnaW5SaWdodChib3hHZW9tZXRyeSwgaXNMZWZ0VG9S
aWdodERpcmVjdGlvbik7Ci0gICAgfTsKLSAgICBhZnRlcklubGluZUJveENvbnRlbnQoKTsKLQot
ICAgIGF1dG8gY29tcHV0ZUlua092ZXJmbG93ID0gWyZdIHsKLSAgICAgICAgYXV0byBpbmtPdmVy
ZmxvdyA9IGRpc3BsYXlCb3gucmVjdCgpOwotICAgICAgICBtX2NvbnRlbnRIYXNJbmtPdmVyZmxv
dyA9IGNvbXB1dGVCb3hTaGFkb3dJbmtPdmVyZmxvdyghbV9saW5lSW5kZXggPyBsYXlvdXRCb3gu
Zmlyc3RMaW5lU3R5bGUoKSA6IGxheW91dEJveC5zdHlsZSgpLCBpbmtPdmVyZmxvdykgfHwgbV9j
b250ZW50SGFzSW5rT3ZlcmZsb3c7Ci0gICAgICAgIGRpc3BsYXlCb3guYWRqdXN0SW5rT3ZlcmZs
b3coaW5rT3ZlcmZsb3cpOwotICAgIH07Ci0gICAgY29tcHV0ZUlua092ZXJmbG93KCk7Ci0KLSAg
ICBzZXRJbmxpbmVCb3hHZW9tZXRyeShsYXlvdXRCb3gsIGRpc3BsYXlCb3gucmVjdCgpLCBpc0Zp
cnN0Qm94KTsKLSAgICBpZiAobGluZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJveChsYXlv
dXRCb3gpLmhhc0NvbnRlbnQoKSkKLSAgICAgICAgZGlzcGxheUJveC5zZXRIYXNDb250ZW50KCk7
Ci19Ci0KLXZvaWQgSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjpwcm9jZXNzQmlkaUNvbnRl
bnQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCwgY29uc3QgTGlu
ZUJveCYgbGluZUJveCwgY29uc3QgSW5saW5lTGF5b3V0UG9pbnQmIGxpbmVCb3hMb2dpY2FsVG9w
TGVmdCwgRGlzcGxheUJveGVzJiBib3hlcykKLXsKLSAgICBBU1NFUlQobGluZUNvbnRlbnQudmlz
dWFsT3JkZXJMaXN0LnNpemUoKSA8PSBsaW5lQ29udGVudC5ydW5zLnNpemUoKSk7Ci0KLSAgICBB
bmNlc3RvclN0YWNrIGFuY2VzdG9yU3RhY2s7Ci0gICAgYXV0byBkaXNwbGF5Qm94VHJlZSA9IERp
c3BsYXlCb3hUcmVlIHsgfTsKLSAgICBhbmNlc3RvclN0YWNrLnB1c2goeyB9LCByb290KCkpOwot
Ci0gICAgYXV0byByb290SW5saW5lQm94QWxpZ25tZW50T2Zmc2V0ID0gbGluZUJveC5yb290SW5s
aW5lQm94QWxpZ25tZW50T2Zmc2V0KCk7Ci0gICAgYXV0byBjb250ZW50U3RhcnRJblZpc3VhbE9y
ZGVyID0gcm9vdElubGluZUJveEFsaWdubWVudE9mZnNldDsKLSAgICBhdXRvIGNyZWF0ZURpc3Bs
YXlCb3hlc0luVmlzdWFsT3JkZXIgPSBbJl0gewotICAgICAgICAvLyBGaXJzdCB2aXN1YWwgcnVu
J3MgaW5pdGlhbCBjb250ZW50IHBvc2l0aW9uIGRlcGVuZHMgb24gdGhlIGJsb2NrJ3MgaW5saW5l
IGRpcmVjdGlvbi4KLSAgICAgICAgaWYgKCFyb290KCkuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkpCi0gICAgICAgICAgICBjb250ZW50U3RhcnRJblZpc3VhbE9yZGVyID0gbGluZUNv
bnRlbnQubGluZUxvZ2ljYWxXaWR0aCAtIGxpbmVCb3gubG9naWNhbFJlY3RGb3JSb290SW5saW5l
Qm94KCkud2lkdGgoKSAtIHJvb3RJbmxpbmVCb3hBbGlnbm1lbnRPZmZzZXQ7Ci0KLSAgICAgICAg
YXV0byBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyID0gY29udGVudFN0YXJ0SW5WaXN1YWxPcmRl
cjsKLSAgICAgICAgYXV0byYgcnVucyA9IGxpbmVDb250ZW50LnJ1bnM7Ci0gICAgICAgIGZvciAo
YXV0byB2aXN1YWxPcmRlciA6IGxpbmVDb250ZW50LnZpc3VhbE9yZGVyTGlzdCkgewotICAgICAg
ICAgICAgQVNTRVJUKHJ1bnNbdmlzdWFsT3JkZXJdLmJpZGlMZXZlbCgpICE9IElubGluZUl0ZW06
Om9wYXF1ZUJpZGlMZXZlbCk7Ci0KLSAgICAgICAgICAgIGF1dG8mIGxpbmVSdW4gPSBydW5zW3Zp
c3VhbE9yZGVyXTsKLSAgICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGxpbmVSdW4ubGF5b3V0
Qm94KCk7Ci0KLSAgICAgICAgICAgIGF1dG8gbmVlZHNEaXNwbGF5Qm94ID0gIWxpbmVSdW4uaXNX
b3JkQnJlYWtPcHBvcnR1bml0eSgpICYmICFsaW5lUnVuLmlzSW5saW5lQm94RW5kKCk7Ci0gICAg
ICAgICAgICBpZiAoIW5lZWRzRGlzcGxheUJveCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgYXV0byB2aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QgPSBbJl0oYXV0byBs
b2dpY2FsUmVjdCkgewotICAgICAgICAgICAgICAgIGxvZ2ljYWxSZWN0LnNldExlZnQoY29udGVu
dFJpZ2h0SW5WaXN1YWxPcmRlcik7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFJlY3QubW92ZUJ5
KGxpbmVCb3hMb2dpY2FsVG9wTGVmdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2ljYWxS
ZWN0OwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgYXV0byBwYXJlbnREaXNwbGF5Qm94
Tm9kZUluZGV4ID0gZW5zdXJlRGlzcGxheUJveEZvckNvbnRhaW5lcihsYXlvdXRCb3gucGFyZW50
KCksIGRpc3BsYXlCb3hUcmVlLCBhbmNlc3RvclN0YWNrLCBib3hlcyk7Ci0gICAgICAgICAgICBp
ZiAobGluZVJ1bi5pc1RleHQoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gdmlzdWFsUmVjdCA9
IHZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdChsaW5lQm94LmxvZ2ljYWxSZWN0Rm9yVGV4dFJ1bihs
aW5lUnVuKSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kVGV4dERpc3BsYXlCb3gobGluZVJ1biwg
dmlzdWFsUmVjdCwgYm94ZXMpOwotICAgICAgICAgICAgICAgIGNvbnRlbnRSaWdodEluVmlzdWFs
T3JkZXIgKz0gdmlzdWFsUmVjdC53aWR0aCgpOwotICAgICAgICAgICAgICAgIGRpc3BsYXlCb3hU
cmVlLmFwcGVuZChwYXJlbnREaXNwbGF5Qm94Tm9kZUluZGV4LCBib3hlcy5zaXplKCkgLSAxKTsK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChsaW5lUnVuLmlzU29mdExpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCF2
aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QobGluZUJveC5sb2dpY2FsUmVjdEZvclRleHRSdW4obGlu
ZVJ1bikpLndpZHRoKCkpOwotICAgICAgICAgICAgICAgIGFwcGVuZFNvZnRMaW5lQnJlYWtEaXNw
bGF5Qm94KGxpbmVSdW4sIHZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdChsaW5lQm94LmxvZ2ljYWxS
ZWN0Rm9yVGV4dFJ1bihsaW5lUnVuKSksIGJveGVzKTsKLSAgICAgICAgICAgICAgICBkaXNwbGF5
Qm94VHJlZS5hcHBlbmQocGFyZW50RGlzcGxheUJveE5vZGVJbmRleCwgYm94ZXMuc2l6ZSgpIC0g
MSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAobGluZVJ1bi5pc0hhcmRMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VCghdmlzdWFsUmVjdFJlbGF0aXZlVG9Sb290KGxpbmVCb3gubG9naWNhbFJlY3RGb3JMaW5lQnJl
YWtCb3gobGF5b3V0Qm94KSkud2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kSGFyZExp
bmVCcmVha0Rpc3BsYXlCb3gobGluZVJ1biwgdmlzdWFsUmVjdFJlbGF0aXZlVG9Sb290KGxpbmVC
b3gubG9naWNhbFJlY3RGb3JMaW5lQnJlYWtCb3gobGF5b3V0Qm94KSksIGJveGVzKTsKLSAgICAg
ICAgICAgICAgICBkaXNwbGF5Qm94VHJlZS5hcHBlbmQocGFyZW50RGlzcGxheUJveE5vZGVJbmRl
eCwgYm94ZXMuc2l6ZSgpIC0gMSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAobGluZVJ1bi5pc0JveCgpKSB7Ci0gICAgICAgICAgICAg
ICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlv
dXRCb3gpOwotICAgICAgICAgICAgICAgIGF1dG8gdmlzdWFsUmVjdCA9IHZpc3VhbFJlY3RSZWxh
dGl2ZVRvUm9vdChsaW5lQm94LmxvZ2ljYWxCb3JkZXJCb3hGb3JBdG9taWNJbmxpbmVMZXZlbEJv
eChsYXlvdXRCb3gsIGJveEdlb21ldHJ5KSk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24gPSBsYXlvdXRCb3gucGFyZW50KCkuc3R5bGUoKS5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgYXV0byBib3hNYXJnaW5MZWZ0ID0gbWFy
Z2luTGVmdChib3hHZW9tZXRyeSwgaXNMZWZ0VG9SaWdodERpcmVjdGlvbik7Ci0gICAgICAgICAg
ICAgICAgdmlzdWFsUmVjdC5tb3ZlSG9yaXpvbnRhbGx5KGJveE1hcmdpbkxlZnQpOwotICAgICAg
ICAgICAgICAgIGFwcGVuZEF0b21pY0lubGluZUxldmVsRGlzcGxheUJveChsaW5lUnVuLCB2aXN1
YWxSZWN0LCBib3hlcyk7Ci0gICAgICAgICAgICAgICAgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRl
ciArPSBib3hNYXJnaW5MZWZ0ICsgdmlzdWFsUmVjdC53aWR0aCgpICsgbWFyZ2luUmlnaHQoYm94
R2VvbWV0cnksIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pOwotICAgICAgICAgICAgICAgIGRpc3Bs
YXlCb3hUcmVlLmFwcGVuZChwYXJlbnREaXNwbGF5Qm94Tm9kZUluZGV4LCBib3hlcy5zaXplKCkg
LSAxKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChsaW5lUnVuLmlzSW5saW5lQm94U3RhcnQoKSB8fCBsaW5lUnVuLmlzTGluZVNwYW5u
aW5nSW5saW5lQm94U3RhcnQoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGlsZSB3
ZSBzaG91bGQgb25seSBnZXQgaGVyZSB3aXRoIGVtcHR5IGlubGluZSBib3hlcywgdGhlcmUgYXJl
Ci0gICAgICAgICAgICAgICAgLy8gc29tZSBjYXNlcyB3aGVyZSB0aGUgaW5saW5lIGJveCBoYXMg
c29tZSBjb250ZW50IG9uIHRoZSBwYXJhZ3JhcGggbGV2ZWwgKGF0IGJpZGkgc3BsaXQpIGJ1dCBs
aW5lIGJyZWFraW5nIHJlbmRlcnMgaXQgZW1wdHkKLSAgICAgICAgICAgICAgICAvLyBvciB0aGVp
ciBjb250ZW50IGlzIGNvbXBsZXRlbHkgY29sbGFwc2VkLgotICAgICAgICAgICAgICAgIC8vIFN1
Y2ggaW5saW5lIGJveGVzIHNob3VsZCBhbHNvIGJlIGhhbmRsZWQgaGVyZS4KLSAgICAgICAgICAg
ICAgICBhcHBlbmRJbmxpbmVEaXNwbGF5Qm94QXRCaWRpQm91bmRhcnkobGF5b3V0Qm94LCBib3hl
cyk7Ci0gICAgICAgICAgICAgICAgY3JlYXRlZERpc3BsYXlCb3hOb2RlRm9yQ29udGFpbmVyQm94
QW5kUHVzaFRvQW5jZXN0b3JTdGFjayhkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCks
IGJveGVzLnNpemUoKSAtIDEsIHBhcmVudERpc3BsYXlCb3hOb2RlSW5kZXgsIGRpc3BsYXlCb3hU
cmVlLCBhbmNlc3RvclN0YWNrKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAg
fTsKLSAgICBjcmVhdGVEaXNwbGF5Qm94ZXNJblZpc3VhbE9yZGVyKCk7Ci0KLSAgICBpZiAoZGlz
cGxheUJveFRyZWUuaGFzSW5saW5lQm94KCkpIHsKLSAgICAgICAgSXNGaXJzdExhc3RJbmRleGVz
TWFwIGlzRmlyc3RMYXN0SW5kZXhlc01hcDsKLSAgICAgICAgYXV0byBjb21wdXRlSXNGaXJzdElz
TGFzdEJveCA9IFsmXSB7Ci0gICAgICAgICAgICBBU1NFUlQoYm94ZXNbMF0uaXNSb290SW5saW5l
Qm94KCkpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAxOyBpbmRleCA8IGJveGVz
LnNpemUoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGlmICghYm94ZXNbaW5kZXhdLmlz
Tm9uUm9vdElubGluZUJveCgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBib3hlc1tpbmRleF0ubGF5b3V0Qm94KCk7Ci0g
ICAgICAgICAgICAgICAgYXV0byBpc0ZpcnN0Qm94ID0gbGluZUJveC5pbmxpbmVMZXZlbEJveEZv
ckxheW91dEJveChsYXlvdXRCb3gpLmlzRmlyc3RCb3goKTsKLSAgICAgICAgICAgICAgICBhdXRv
IGlzTGFzdEJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94
KS5pc0xhc3RCb3goKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzRmlyc3RCb3ggJiYgIWlzTGFz
dEJveCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzRmlyc3RCb3gpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpc0ZpcnN0TGFzdEluZGV4
ZXMgPSBpc0ZpcnN0TGFzdEluZGV4ZXNNYXAuZ2V0KCZsYXlvdXRCb3gpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzRmlyc3RMYXN0SW5kZXhlcy5maXJzdCB8fCBpc0xhc3RCb3gpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpc0ZpcnN0TGFzdEluZGV4ZXNNYXAuc2V0KCZsYXlvdXRCb3gs
IElzRmlyc3RMYXN0SW5kZXggeyBpc0ZpcnN0TGFzdEluZGV4ZXMuZmlyc3QudmFsdWVfb3IoaW5k
ZXgpLCBpc0xhc3RCb3ggPyBpbmRleCA6IGlzRmlyc3RMYXN0SW5kZXhlcy5sYXN0IH0pOwotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzTGFzdEJveCkgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzRmly
c3RCb3gpOwotICAgICAgICAgICAgICAgICAgICBpc0ZpcnN0TGFzdEluZGV4ZXNNYXAuc2V0KCZs
YXlvdXRCb3gsIElzRmlyc3RMYXN0SW5kZXggeyB7IH0sIGluZGV4IH0pOwotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH07Ci0gICAgICAgIGNvbXB1dGVJc0ZpcnN0SXNMYXN0Qm94KCk7Ci0KLSAgICAgICAgYXV0
byBhZGp1c3RWaXN1YWxHZW9tZXRyeVdpdGhJbmxpbmVCb3hlcyA9IFsmXSB7Ci0gICAgICAgICAg
ICBhdXRvIGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIgPSBsaW5lQm94TG9naWNhbFRvcExlZnQu
eCgpICsgY29udGVudFN0YXJ0SW5WaXN1YWxPcmRlcjsKLQotICAgICAgICAgICAgZm9yIChhdXRv
IGNoaWxkRGlzcGxheUJveE5vZGVJbmRleCA6IGRpc3BsYXlCb3hUcmVlLnJvb3QoKS5jaGlsZHJl
bikKLSAgICAgICAgICAgICAgICBhZGp1c3RWaXN1YWxHZW9tZXRyeUZvckRpc3BsYXlCb3goY2hp
bGREaXNwbGF5Qm94Tm9kZUluZGV4LCBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyLCBsaW5lQm94
TG9naWNhbFRvcExlZnQueSgpLCBkaXNwbGF5Qm94VHJlZSwgYm94ZXMsIGxpbmVCb3gsIGlzRmly
c3RMYXN0SW5kZXhlc01hcCk7Ci0gICAgICAgIH07Ci0gICAgICAgIGFkanVzdFZpc3VhbEdlb21l
dHJ5V2l0aElubGluZUJveGVzKCk7Ci0gICAgfQotfQotCi12b2lkIElubGluZURpc3BsYXlDb250
ZW50QnVpbGRlcjo6cHJvY2Vzc092ZXJmbG93blJ1bnNGb3JFbGxpcHNpcyhEaXNwbGF5Qm94ZXMm
IGJveGVzLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVCb3hMb2dpY2FsUmlnaHQpCi17Ci0gICAgaWYg
KHJvb3QoKS5zdHlsZSgpLnRleHRPdmVyZmxvdygpICE9IFRleHRPdmVyZmxvdzo6RWxsaXBzaXMp
Ci0gICAgICAgIHJldHVybjsKLSAgICBhdXRvJiByb290SW5saW5lQm94ID0gYm94ZXNbMF07Ci0g
ICAgQVNTRVJUKHJvb3RJbmxpbmVCb3guaXNSb290SW5saW5lQm94KCkpOwotCi0gICAgYXV0byBy
b290SW5saW5lQm94UmVjdCA9IHJvb3RJbmxpbmVCb3gucmVjdCgpOwotICAgIGlmIChyb290SW5s
aW5lQm94UmVjdC5yaWdodCgpIDw9IGxpbmVCb3hMb2dpY2FsUmlnaHQpIHsKLSAgICAgICAgQVNT
RVJUKGJveGVzLmxhc3QoKS5yaWdodCgpIDw9IGxpbmVCb3hMb2dpY2FsUmlnaHQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiBlbGxpcHNpc1N0cigmaG9yaXpvbnRhbEVsbGlwc2lzLCAxKTsKLSAg
ICBhdXRvIGVsbGlwc2lzUnVuID0gV2ViQ29yZTo6VGV4dFJ1biB7IGVsbGlwc2lzU3RyLT5zdHJp
bmcoKSB9OwotICAgIGF1dG8gZWxsaXBzaXNXaWR0aCA9ICFtX2xpbmVJbmRleCA/IHJvb3QoKS5m
aXJzdExpbmVTdHlsZSgpLmZvbnRDYXNjYWRlKCkud2lkdGgoZWxsaXBzaXNSdW4pIDogcm9vdCgp
LnN0eWxlKCkuZm9udENhc2NhZGUoKS53aWR0aChlbGxpcHNpc1J1bik7Ci0gICAgYXV0byBmaXJz
dFRydW5jYXRlZEJveEluZGV4ID0gYm94ZXMuc2l6ZSgpOwotCi0gICAgZm9yIChhdXRvIGluZGV4
ID0gYm94ZXMuc2l6ZSgpOyBpbmRleC0tOykgewotICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0g
Ym94ZXNbaW5kZXhdOwotCi0gICAgICAgIGlmIChkaXNwbGF5Qm94LmxlZnQoKSA+PSBsaW5lQm94
TG9naWNhbFJpZ2h0KSB7Ci0gICAgICAgICAgICAvLyBGdWxseSBvdmVyZmxvd24gYm94ZXMgYXJl
IGNvbGxhcHNlZC4KLSAgICAgICAgICAgIGRpc3BsYXlCb3gudHJ1bmNhdGUoKTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2Uga2VlcCB0cnVuY2F0aW5n
IGNvbnRlbnQgdW50aWwgYWZ0ZXIgd2UgY2FuIGFjY29tbW9kYXRlIHRoZSBlbGxpcHNpcyBjb250
ZW50Ci0gICAgICAgIC8vIDEuIGZ1bGx5IHRydW5jYXRlIGluIGNhc2Ugb2YgaW5saW5lIGxldmVs
IGJveGVzIChpZSBub24tdGV4dCBjb250ZW50KSBvciBpZiBlbGxpcHNpcyBjb250ZW50IGlzIHdp
ZGVyIHRoYW4gdGhlIG92ZXJmbG93aW5nIG9uZS4KLSAgICAgICAgLy8gMi4gcGFydGlhbGx5IHRy
dW5jYXRlZCB0byBtYWtlIHJvb20gZm9yIHRoZSBlbGxpcHNpcyBib3guCi0gICAgICAgIGF1dG8g
YXZhaWxhYmxlUm9vbUZvckVsbGlwc2lzID0gbGluZUJveExvZ2ljYWxSaWdodCAtIGRpc3BsYXlC
b3gubGVmdCgpOwotICAgICAgICBpZiAoYXZhaWxhYmxlUm9vbUZvckVsbGlwc2lzIDw9IGVsbGlw
c2lzV2lkdGgpIHsKLSAgICAgICAgICAgIC8vIENhbid0IGFjY29tbW9kYXRlIHRoZSBlbGxpcHNp
cyBjb250ZW50IGhlcmUuIFdlIG5lZWQgdG8gdHJ1bmNhdGUgbm9uLW92ZXJmbG93aW5nIGJveGVz
IHRvby4KLSAgICAgICAgICAgIGRpc3BsYXlCb3gudHJ1bmNhdGUoKTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byB0cnVuY2F0ZWRXaWR0aCA9IElubGlu
ZUxheW91dFVuaXQgeyB9OwotICAgICAgICBpZiAoZGlzcGxheUJveC5pc1RleHQoKSkgewotICAg
ICAgICAgICAgYXV0byB0ZXh0ID0gKmRpc3BsYXlCb3gudGV4dCgpOwotICAgICAgICAgICAgLy8g
RklYTUU6IENoZWNrIGlmIGl0IG5lZWRzIGFkanVzdG1lbnQgZm9yIFJUTCBkaXJlY3Rpb24uCi0g
ICAgICAgICAgICB0cnVuY2F0ZWRXaWR0aCA9IFRleHRVdGlsOjpicmVha1dvcmQoZG93bmNhc3Q8
SW5saW5lVGV4dEJveD4oZGlzcGxheUJveC5sYXlvdXRCb3goKSksIHRleHQuc3RhcnQoKSwgdGV4
dC5sZW5ndGgoKSwgZGlzcGxheUJveC53aWR0aCgpLCBhdmFpbGFibGVSb29tRm9yRWxsaXBzaXMg
LSBlbGxpcHNpc1dpZHRoLCB7IH0sIGRpc3BsYXlCb3guc3R5bGUoKS5mb250Q2FzY2FkZSgpKS5s
b2dpY2FsV2lkdGg7Ci0gICAgICAgIH0KLSAgICAgICAgZGlzcGxheUJveC50cnVuY2F0ZSh0cnVu
Y2F0ZWRXaWR0aCk7Ci0gICAgICAgIGZpcnN0VHJ1bmNhdGVkQm94SW5kZXggPSBpbmRleDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEFTU0VSVChmaXJzdFRydW5jYXRlZEJveEluZGV4IDwg
Ym94ZXMuc2l6ZSgpKTsKLSAgICAvLyBDb2xsYXBzZSB0cnVuY2F0ZWQgcnVucy4KLSAgICBhdXRv
IGNvbnRlbnRSaWdodCA9IGJveGVzW2ZpcnN0VHJ1bmNhdGVkQm94SW5kZXhdLnJpZ2h0KCk7Ci0g
ICAgZm9yIChhdXRvIGluZGV4ID0gZmlyc3RUcnVuY2F0ZWRCb3hJbmRleCArIDE7IGluZGV4IDwg
Ym94ZXMuc2l6ZSgpOyArK2luZGV4KQotICAgICAgICBib3hlc1tpbmRleF0ubW92ZUhvcml6b250
YWxseShjb250ZW50UmlnaHQgLSBib3hlc1tpbmRleF0ubGVmdCgpKTsKLSAgICAvLyBBbmQgYXBw
ZW5kIHRoZSBlbGxpcHNpcyBib3ggYXMgdGhlIHRyYWlsaW5nIGl0ZW0uCi0gICAgYXV0byBlbGxp
c3Bpc0JveFJlY3QgPSBJbmxpbmVSZWN0IHsgcm9vdElubGluZUJveFJlY3QudG9wKCksIGNvbnRl
bnRSaWdodCwgZWxsaXBzaXNXaWR0aCwgcm9vdElubGluZUJveFJlY3QuaGVpZ2h0KCkgfTsKLSAg
ICBib3hlcy5hcHBlbmQoeyBtX2xpbmVJbmRleAotICAgICAgICAsIElubGluZURpc3BsYXk6OkJv
eDo6VHlwZTo6RWxsaXBzaXMKLSAgICAgICAgLCByb290KCkKLSAgICAgICAgLCBVQklESV9ERUZB
VUxUX0xUUgotICAgICAgICAsIGVsbGlzcGlzQm94UmVjdAotICAgICAgICAsIGVsbGlzcGlzQm94
UmVjdAotICAgICAgICAsIHsgfQotICAgICAgICAsIElubGluZURpc3BsYXk6OkJveDo6VGV4dCB7
IDAsIDEsIGVsbGlwc2lzU3RyLT5zdHJpbmcoKSB9IH0pOwotfQotCi12b2lkIElubGluZURpc3Bs
YXlDb250ZW50QnVpbGRlcjo6Y29sbGVjdElua092ZXJmbG93Rm9ySW5saW5lQm94ZXMoRGlzcGxh
eUJveGVzJiBib3hlcykKLXsKLSAgICBpZiAoIW1fY29udGVudEhhc0lua092ZXJmbG93KQotICAg
ICAgICByZXR1cm47Ci0gICAgLy8gVmlzaXQgdGhlIGlubGluZSBib3hlcyBhbmQgcHJvcGFnYXRl
IGluayBvdmVyZmxvdyB0byB0aGVpciBwYXJlbnRzIC1leGNlcHQgdG8gdGhlIHJvb3QgaW5saW5l
IGJveC4KLSAgICAvLyAoZS5nLiA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB4OyI+U21hbGwg
Zm9udCBzaXplPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMzAwcHg7Ij5MYXJnZXIgZm9udCBzaXpl
LiBUaGlzIG92ZXJmbG93cyB0aGUgdG9wIG1vc3Qgc3Bhbi48L3NwYW4+PC9zcGFuPikuCi0gICAg
YXV0byBhY2N1bXVsYXRlZElua092ZXJmbG93UmVjdCA9IElubGluZVJlY3QgeyB7IH0sIHsgfSB9
OwotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gYm94ZXMuc2l6ZSgpOyBpbmRleC0tOykgewotICAg
ICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gYm94ZXNbaW5kZXhdOwotCi0gICAgICAgIGF1dG8gbWF5
SGF2ZUlua092ZXJmbG93ID0gZGlzcGxheUJveC5pc0F0b21pY0lubGluZUxldmVsQm94KCkgfHwg
ZGlzcGxheUJveC5pc0dlbmVyaWNJbmxpbmVMZXZlbEJveCgpIHx8IGRpc3BsYXlCb3guaXNOb25S
b290SW5saW5lQm94KCk7Ci0gICAgICAgIGlmICghbWF5SGF2ZUlua092ZXJmbG93KQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChkaXNwbGF5Qm94LmlzTm9uUm9vdElubGluZUJv
eCgpICYmICFhY2N1bXVsYXRlZElua092ZXJmbG93UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICBkaXNwbGF5Qm94LmFkanVzdElua092ZXJmbG93KGFjY3VtdWxhdGVkSW5rT3ZlcmZsb3dSZWN0
KTsKLQotICAgICAgICAvLyBXZSBzdG9wIGNvbGxlY3RpbmcgaW5rIG92ZXJmbG93IGZvciBhdCBy
b290IGlubGluZSBib3ggKGkuZS4gZG9uJ3QgaW5mbGF0ZSB0aGUgcm9vdCBpbmxpbmUgYm94IHdp
dGggdGhlIGlubGluZSBjb250ZW50IGhlcmUpLgotICAgICAgICBhdXRvIHBhcmVudEJveElzUm9v
dCA9ICZkaXNwbGF5Qm94LmxheW91dEJveCgpLnBhcmVudCgpID09ICZyb290KCk7Ci0gICAgICAg
IGlmIChwYXJlbnRCb3hJc1Jvb3QpCi0gICAgICAgICAgICBhY2N1bXVsYXRlZElua092ZXJmbG93
UmVjdCA9IElubGluZVJlY3QgeyB7IH0sIHsgfSB9OwotICAgICAgICBlbHNlIGlmIChhY2N1bXVs
YXRlZElua092ZXJmbG93UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhY2N1bXVsYXRlZElu
a092ZXJmbG93UmVjdCA9IGRpc3BsYXlCb3guaW5rT3ZlcmZsb3coKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgYWNjdW11bGF0ZWRJbmtPdmVyZmxvd1JlY3QuZXhwYW5kVG9Db250YWluKGRp
c3BsYXlCb3guaW5rT3ZlcmZsb3coKSk7Ci0gICAgfQotfQotCi12b2lkIElubGluZURpc3BsYXlD
b250ZW50QnVpbGRlcjo6Y29tcHV0ZUlzRmlyc3RJc0xhc3RCb3hGb3JJbmxpbmVDb250ZW50KERp
c3BsYXlCb3hlcyYgYm94ZXMpCi17Ci0gICAgSGFzaE1hcDxjb25zdCBCb3gqLCBzaXplX3Q+IGxh
c3REaXNwbGF5Qm94Rm9yTGF5b3V0Qm94SW5kZXhlczsKLQotICAgIEFTU0VSVChib3hlc1swXS5p
c1Jvb3RJbmxpbmVCb3goKSk7Ci0gICAgYm94ZXNbMF0uc2V0SXNGaXJzdEZvckxheW91dEJveCh0
cnVlKTsKLSAgICBzaXplX3QgbGFzdFJvb3RJbmxpbmVCb3hJbmRleCA9IDA7Ci0KLSAgICBmb3Ig
KHNpemVfdCBpbmRleCA9IDE7IGluZGV4IDwgYm94ZXMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAg
ICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBib3hlc1tpbmRleF07Ci0gICAgICAgIGlmIChkaXNwbGF5
Qm94LmlzUm9vdElubGluZUJveCgpKSB7Ci0gICAgICAgICAgICBsYXN0Um9vdElubGluZUJveElu
ZGV4ID0gaW5kZXg7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBh
dXRvJiBsYXlvdXRCb3ggPSBkaXNwbGF5Qm94LmxheW91dEJveCgpOwotICAgICAgICBpZiAobGFz
dERpc3BsYXlCb3hGb3JMYXlvdXRCb3hJbmRleGVzLnNldCgmbGF5b3V0Qm94LCBpbmRleCkuaXNO
ZXdFbnRyeSkKLSAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0SXNGaXJzdEZvckxheW91dEJveCh0
cnVlKTsKLSAgICB9Ci0gICAgZm9yIChhdXRvIGluZGV4IDogbGFzdERpc3BsYXlCb3hGb3JMYXlv
dXRCb3hJbmRleGVzLnZhbHVlcygpKQotICAgICAgICBib3hlc1tpbmRleF0uc2V0SXNMYXN0Rm9y
TGF5b3V0Qm94KHRydWUpOwotCi0gICAgYm94ZXNbbGFzdFJvb3RJbmxpbmVCb3hJbmRleF0uc2V0
SXNMYXN0Rm9yTGF5b3V0Qm94KHRydWUpOwotfQotCi19Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5l
RGlzcGxheUNvbnRlbnRCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2lubGluZS9JbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYTFmZmJiNThjZmU1ZDgwOGMxYTQxODdlYjRiN2Y4M2E2NzQw
ZmFhZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVEaXNwbGF5
Q29udGVudEJ1aWxkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhU
KQotCi0jaW5jbHVkZSAiSW5saW5lTGluZUJ1aWxkZXIuaCIKLSNpbmNsdWRlICJMYXlvdXRVbml0
cy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotc3RydWN0
IEFuY2VzdG9yU3RhY2s7Ci1jbGFzcyBDb250YWluZXJCb3g7Ci1zdHJ1Y3QgRGlzcGxheUJveFRy
ZWU7Ci1zdHJ1Y3QgSXNGaXJzdExhc3RJbmRleDsKLWNsYXNzIElubGluZUZvcm1hdHRpbmdTdGF0
ZTsKLWNsYXNzIExpbmVCb3g7Ci0KLWNsYXNzIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlciB7
Ci1wdWJsaWM6Ci0gICAgSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyKGNvbnN0IENvbnRhaW5l
ckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmKTsKLQot
ICAgIERpc3BsYXlCb3hlcyBidWlsZChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmLCBj
b25zdCBMaW5lQm94JiwgY29uc3QgSW5saW5lUmVjdCYgbGluZUJveExvZ2ljYWxSZWN0LCBjb25z
dCBzaXplX3QgbGluZUluZGV4KTsKLQotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVJc0ZpcnN0SXNM
YXN0Qm94Rm9ySW5saW5lQ29udGVudChEaXNwbGF5Qm94ZXMmKTsKLQotcHJpdmF0ZToKLSAgICB2
b2lkIHByb2Nlc3NOb25CaWRpQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQm
LCBjb25zdCBMaW5lQm94JiwgY29uc3QgSW5saW5lTGF5b3V0UG9pbnQmIGxpbmVCb3hMb2dpY2Fs
VG9wTGVmdCwgRGlzcGxheUJveGVzJik7Ci0gICAgdm9pZCBwcm9jZXNzQmlkaUNvbnRlbnQoY29u
c3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiwgY29uc3QgTGluZUJveCYsIGNvbnN0IElubGlu
ZUxheW91dFBvaW50JiBsaW5lQm94TG9naWNhbFRvcExlZnQsIERpc3BsYXlCb3hlcyYpOwotICAg
IHZvaWQgcHJvY2Vzc092ZXJmbG93blJ1bnNGb3JFbGxpcHNpcyhEaXNwbGF5Qm94ZXMmLCBJbmxp
bmVMYXlvdXRVbml0IGxpbmVCb3hMb2dpY2FsUmlnaHQpOwotICAgIHZvaWQgY29sbGVjdElua092
ZXJmbG93Rm9ySW5saW5lQm94ZXMoRGlzcGxheUJveGVzJik7Ci0KLSAgICB2b2lkIGFwcGVuZFRl
eHREaXNwbGF5Qm94KGNvbnN0IExpbmU6OlJ1biYsIGNvbnN0IElubGluZVJlY3QmLCBEaXNwbGF5
Qm94ZXMmKTsKLSAgICB2b2lkIGFwcGVuZFNvZnRMaW5lQnJlYWtEaXNwbGF5Qm94KGNvbnN0IExp
bmU6OlJ1biYsIGNvbnN0IElubGluZVJlY3QmLCBEaXNwbGF5Qm94ZXMmKTsKLSAgICB2b2lkIGFw
cGVuZEhhcmRMaW5lQnJlYWtEaXNwbGF5Qm94KGNvbnN0IExpbmU6OlJ1biYsIGNvbnN0IElubGlu
ZVJlY3QmLCBEaXNwbGF5Qm94ZXMmKTsKLSAgICB2b2lkIGFwcGVuZEF0b21pY0lubGluZUxldmVs
RGlzcGxheUJveChjb25zdCBMaW5lOjpSdW4mLCBjb25zdCBJbmxpbmVSZWN0JiAsIERpc3BsYXlC
b3hlcyYpOwotICAgIHZvaWQgYXBwZW5kSW5saW5lQm94RGlzcGxheUJveChjb25zdCBMaW5lOjpS
dW4mLCBjb25zdCBJbmxpbmVMZXZlbEJveCYsIGNvbnN0IElubGluZVJlY3QmLCBib29sIGxpbmVo
YXNDb250ZW50LCBEaXNwbGF5Qm94ZXMmKTsKLSAgICB2b2lkIGFwcGVuZFNwYW5uaW5nSW5saW5l
Qm94RGlzcGxheUJveChjb25zdCBMaW5lOjpSdW4mLCBjb25zdCBJbmxpbmVMZXZlbEJveCYsIGNv
bnN0IElubGluZVJlY3QmLCBEaXNwbGF5Qm94ZXMmKTsKLSAgICB2b2lkIGFwcGVuZElubGluZURp
c3BsYXlCb3hBdEJpZGlCb3VuZGFyeShjb25zdCBCb3gmLCBEaXNwbGF5Qm94ZXMmKTsKLQotICAg
IHZvaWQgc2V0SW5saW5lQm94R2VvbWV0cnkoY29uc3QgQm94JiwgY29uc3QgSW5saW5lUmVjdCYs
IGJvb2wgaXNGaXJzdElubGluZUJveEZyYWdtZW50KTsKLSAgICB2b2lkIGFkanVzdFZpc3VhbEdl
b21ldHJ5Rm9yRGlzcGxheUJveChzaXplX3QgZGlzcGxheUJveE5vZGVJbmRleCwgSW5saW5lTGF5
b3V0VW5pdCYgYWNjdW11bGF0ZWRPZmZzZXQsIElubGluZUxheW91dFVuaXQgbGluZUJveExvZ2lj
YWxUb3AsIGNvbnN0IERpc3BsYXlCb3hUcmVlJiwgRGlzcGxheUJveGVzJiwgY29uc3QgTGluZUJv
eCYsIGNvbnN0IEhhc2hNYXA8Y29uc3QgQm94KiwgSXNGaXJzdExhc3RJbmRleD4mKTsKLSAgICBz
aXplX3QgZW5zdXJlRGlzcGxheUJveEZvckNvbnRhaW5lcihjb25zdCBDb250YWluZXJCb3gmLCBE
aXNwbGF5Qm94VHJlZSYsIEFuY2VzdG9yU3RhY2smLCBEaXNwbGF5Qm94ZXMmKTsKLQotICAgIGNv
bnN0IENvbnRhaW5lckJveCYgcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRl
eHRSb290OyB9Ci0gICAgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdTdGF0ZTsgfSAKLQotICAgIGNvbnN0IENvbnRhaW5l
ckJveCYgbV9mb3JtYXR0aW5nQ29udGV4dFJvb3Q7Ci0gICAgSW5saW5lRm9ybWF0dGluZ1N0YXRl
JiBtX2Zvcm1hdHRpbmdTdGF0ZTsKLSAgICBzaXplX3QgbV9saW5lSW5kZXggeyAwIH07Ci0gICAg
Ym9vbCBtX2NvbnRlbnRIYXNJbmtPdmVyZmxvdyB7IGZhbHNlIH07Ci19OwotCi19Ci19Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9pbmxpbmUvZGlzcGxheS9JbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvZGlzcGxheS9JbmxpbmVE
aXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3YmFjN2M1ZGVjMTUyZTNjNmNl
ZmJmYzdlZjdhYzQ1ZWZhODZkMjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9kaXNwbGF5L0lubGluZURpc3BsYXlDb250
ZW50QnVpbGRlci5jcHAKQEAgLTAsMCArMSw3NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyLmgiCisKKyNp
ZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKKyNpbmNsdWRlICJMYXlvdXRJ
bml0aWFsQ29udGFpbmluZ0Jsb2NrLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgorI2luY2x1ZGUgIlRleHRVdGlsLmgiCisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1JhbmdlLmg+CisKK3VzaW5nIFdURjo6UmFuZ2U7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitzdGF0aWMgaW5saW5lIExheW91dFVu
aXQgbWFyZ2luTGVmdChjb25zdCBMYXlvdXQ6OkJveEdlb21ldHJ5JiBib3hHZW9tZXRyeSwgYm9v
bCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKQoreworICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uID8gYm94R2VvbWV0cnkubWFyZ2luU3RhcnQoKSA6IGJveEdlb21ldHJ5Lm1hcmdpbkVu
ZCgpOworfQorCitzdGF0aWMgaW5saW5lIExheW91dFVuaXQgbWFyZ2luUmlnaHQoY29uc3QgTGF5
b3V0OjpCb3hHZW9tZXRyeSYgYm94R2VvbWV0cnksIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlv
bikKK3sKKyAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA/IGJveEdlb21ldHJ5Lm1h
cmdpbkVuZCgpIDogYm94R2VvbWV0cnkubWFyZ2luU3RhcnQoKTsKK30KKworc3RhdGljIGlubGlu
ZSBMYXlvdXRVbml0IGJvcmRlckxlZnQoY29uc3QgTGF5b3V0OjpCb3hHZW9tZXRyeSYgYm94R2Vv
bWV0cnksIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbikKK3sKKyAgICByZXR1cm4gaXNMZWZ0
VG9SaWdodERpcmVjdGlvbiA/IGJveEdlb21ldHJ5LmJvcmRlclN0YXJ0KCkgOiBib3hHZW9tZXRy
eS5ib3JkZXJFbmQoKTsKK30KKworc3RhdGljIGlubGluZSBMYXlvdXRVbml0IGJvcmRlclJpZ2h0
KGNvbnN0IExheW91dDo6Qm94R2VvbWV0cnkmIGJveEdlb21ldHJ5LCBib29sIGlzTGVmdFRvUmln
aHREaXJlY3Rpb24pCit7CisgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPyBib3hH
ZW9tZXRyeS5ib3JkZXJFbmQoKSA6IGJveEdlb21ldHJ5LmJvcmRlclN0YXJ0KCk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBwYWRkaW5nTGVmdChjb25zdCBMYXlvdXQ6OkJveEdlb21l
dHJ5JiBib3hHZW9tZXRyeSwgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKQoreworICAgIHJl
dHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID8gYm94R2VvbWV0cnkucGFkZGluZ1N0YXJ0KCku
dmFsdWVfb3IoMF9sdSkgOiBib3hHZW9tZXRyeS5wYWRkaW5nRW5kKCkudmFsdWVfb3IoMF9sdSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBwYWRkaW5nUmlnaHQoY29uc3QgTGF5b3V0
OjpCb3hHZW9tZXRyeSYgYm94R2VvbWV0cnksIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbikK
K3sKKyAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA/IGJveEdlb21ldHJ5LnBhZGRp
bmdFbmQoKS52YWx1ZV9vcigwX2x1KSA6IGJveEdlb21ldHJ5LnBhZGRpbmdTdGFydCgpLnZhbHVl
X29yKDBfbHUpOworfQorCitzdGF0aWMgaW5saW5lIE9wdGlvblNldDxJbmxpbmVEaXNwbGF5OjpC
b3g6OlBvc2l0aW9uV2l0aGluSW5saW5lTGV2ZWxCb3g+IGlzRmlyc3RMYXN0Qm94KGNvbnN0IElu
bGluZUxldmVsQm94JiBpbmxpbmVCb3gpCit7CisgICAgYXV0byBwb3NpdGlvbldpdGhpbklubGlu
ZUxldmVsQm94ID0gT3B0aW9uU2V0PElubGluZURpc3BsYXk6OkJveDo6UG9zaXRpb25XaXRoaW5J
bmxpbmVMZXZlbEJveD4geyB9OworICAgIGlmIChpbmxpbmVCb3guaXNGaXJzdEJveCgpKQorICAg
ICAgICBwb3NpdGlvbldpdGhpbklubGluZUxldmVsQm94LmFkZChJbmxpbmVEaXNwbGF5OjpCb3g6
OlBvc2l0aW9uV2l0aGluSW5saW5lTGV2ZWxCb3g6OkZpcnN0KTsKKyAgICBpZiAoaW5saW5lQm94
LmlzTGFzdEJveCgpKQorICAgICAgICBwb3NpdGlvbldpdGhpbklubGluZUxldmVsQm94LmFkZChJ
bmxpbmVEaXNwbGF5OjpCb3g6OlBvc2l0aW9uV2l0aGluSW5saW5lTGV2ZWxCb3g6Okxhc3QpOwor
ICAgIHJldHVybiBwb3NpdGlvbldpdGhpbklubGluZUxldmVsQm94OworfQorCitJbmxpbmVEaXNw
bGF5Q29udGVudEJ1aWxkZXI6OklubGluZURpc3BsYXlDb250ZW50QnVpbGRlcihjb25zdCBDb250
YWluZXJCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBm
b3JtYXR0aW5nU3RhdGUpCisgICAgOiBtX2Zvcm1hdHRpbmdDb250ZXh0Um9vdChmb3JtYXR0aW5n
Q29udGV4dFJvb3QpCisgICAgLCBtX2Zvcm1hdHRpbmdTdGF0ZShmb3JtYXR0aW5nU3RhdGUpCit7
Cit9CisKK0Rpc3BsYXlCb3hlcyBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OmJ1aWxkKGNv
bnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IExpbmVCb3gm
IGxpbmVCb3gsIGNvbnN0IElubGluZVJlY3QmIGxpbmVCb3hMb2dpY2FsUmVjdCwgY29uc3Qgc2l6
ZV90IGxpbmVJbmRleCkKK3sKKyAgICBEaXNwbGF5Qm94ZXMgYm94ZXM7CisgICAgYm94ZXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShsaW5lQ29udGVudC5ydW5zLnNpemUoKSArIGxpbmVCb3gubm9u
Um9vdElubGluZUxldmVsQm94ZXMoKS5zaXplKCkgKyAxKTsKKworICAgIG1fbGluZUluZGV4ID0g
bGluZUluZGV4OworICAgIC8vIEV2ZXJ5IGxpbmUgc3RhcnRzIHdpdGggYSByb290IGJveCwgZXZl
biB0aGUgZW1wdHkgb25lcy4KKyAgICBhdXRvIHJvb3RJbmxpbmVCb3hSZWN0ID0gbGluZUJveC5s
b2dpY2FsUmVjdEZvclJvb3RJbmxpbmVCb3goKTsKKyAgICByb290SW5saW5lQm94UmVjdC5tb3Zl
QnkobGluZUJveExvZ2ljYWxSZWN0LnRvcExlZnQoKSk7CisgICAgYm94ZXMuYXBwZW5kKHsgbV9s
aW5lSW5kZXgsIElubGluZURpc3BsYXk6OkJveDo6VHlwZTo6Um9vdElubGluZUJveCwgcm9vdCgp
LCBVQklESV9ERUZBVUxUX0xUUiwgcm9vdElubGluZUJveFJlY3QsIHJvb3RJbmxpbmVCb3hSZWN0
LCB7IH0sIHsgfSwgbGluZUJveC5yb290SW5saW5lQm94KCkuaGFzQ29udGVudCgpIH0pOworCisg
ICAgYXV0byBjb250ZW50TmVlZHNCaWRpUmVvcmRlcmluZyA9ICFsaW5lQ29udGVudC52aXN1YWxP
cmRlckxpc3QuaXNFbXB0eSgpOworICAgIGlmIChjb250ZW50TmVlZHNCaWRpUmVvcmRlcmluZykK
KyAgICAgICAgcHJvY2Vzc0JpZGlDb250ZW50KGxpbmVDb250ZW50LCBsaW5lQm94LCBsaW5lQm94
TG9naWNhbFJlY3QudG9wTGVmdCgpLCBib3hlcyk7CisgICAgZWxzZQorICAgICAgICBwcm9jZXNz
Tm9uQmlkaUNvbnRlbnQobGluZUNvbnRlbnQsIGxpbmVCb3gsIGxpbmVCb3hMb2dpY2FsUmVjdC50
b3BMZWZ0KCksIGJveGVzKTsKKyAgICBwcm9jZXNzT3ZlcmZsb3duUnVuc0ZvckVsbGlwc2lzKGJv
eGVzLCBsaW5lQm94TG9naWNhbFJlY3QucmlnaHQoKSk7CisgICAgY29sbGVjdElua092ZXJmbG93
Rm9ySW5saW5lQm94ZXMoYm94ZXMpOworICAgIHJldHVybiBib3hlczsKK30KKworc3RhdGljIGlu
bGluZSBib29sIGNvbXB1dGVCb3hTaGFkb3dJbmtPdmVyZmxvdyhjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIElubGluZVJlY3QmIGlua092ZXJmbG93KQoreworICAgIGF1dG8gdG9wQm94U2hhZG93
ID0gTGF5b3V0VW5pdCB7IH07CisgICAgYXV0byBib3R0b21Cb3hTaGFkb3cgPSBMYXlvdXRVbml0
IHsgfTsKKyAgICBzdHlsZS5nZXRCb3hTaGFkb3dCbG9ja0RpcmVjdGlvbkV4dGVudCh0b3BCb3hT
aGFkb3csIGJvdHRvbUJveFNoYWRvdyk7CisKKyAgICBhdXRvIGxlZnRCb3hTaGFkb3cgPSBMYXlv
dXRVbml0IHsgfTsKKyAgICBhdXRvIHJpZ2h0Qm94U2hhZG93ID0gTGF5b3V0VW5pdCB7IH07Cisg
ICAgc3R5bGUuZ2V0Qm94U2hhZG93SW5saW5lRGlyZWN0aW9uRXh0ZW50KGxlZnRCb3hTaGFkb3cs
IHJpZ2h0Qm94U2hhZG93KTsKKyAgICBpZiAoIXRvcEJveFNoYWRvdyAmJiAhYm90dG9tQm94U2hh
ZG93ICYmICFsZWZ0Qm94U2hhZG93ICYmICFyaWdodEJveFNoYWRvdykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlua092ZXJmbG93LmluZmxhdGUoSW5saW5lTGF5b3V0VW5pdCB7IHRvcEJv
eFNoYWRvdyB9LCBJbmxpbmVMYXlvdXRVbml0IHsgcmlnaHRCb3hTaGFkb3cgfSwgSW5saW5lTGF5
b3V0VW5pdCB7IGJvdHRvbUJveFNoYWRvdyB9LCBJbmxpbmVMYXlvdXRVbml0IHsgbGVmdEJveFNo
YWRvdyB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJbmxpbmVEaXNwbGF5Q29udGVu
dEJ1aWxkZXI6OmFwcGVuZFRleHREaXNwbGF5Qm94KGNvbnN0IExpbmU6OlJ1biYgbGluZVJ1biwg
Y29uc3QgSW5saW5lUmVjdCYgdGV4dFJ1blJlY3QsIERpc3BsYXlCb3hlcyYgYm94ZXMpCit7Cisg
ICAgQVNTRVJUKGxpbmVSdW4udGV4dENvbnRlbnQoKSAmJiBpczxJbmxpbmVUZXh0Qm94PihsaW5l
UnVuLmxheW91dEJveCgpKSk7CisKKyAgICBhdXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxheW91
dEJveCgpOworICAgIGF1dG8mIHN0eWxlID0gIW1fbGluZUluZGV4ID8gbGF5b3V0Qm94LmZpcnN0
TGluZVN0eWxlKCkgOiBsYXlvdXRCb3guc3R5bGUoKTsKKworICAgIGF1dG8gaW5rT3ZlcmZsb3cg
PSBbJl0geworICAgICAgICBhdXRvIGluaXRpYWxDb250YWluZ0Jsb2NrU2l6ZSA9IFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJ
bnRlZ3JhdGlvbkVuYWJsZWQoKQorICAgICAgICAgICAgPyBmb3JtYXR0aW5nU3RhdGUoKS5sYXlv
dXRTdGF0ZSgpLnZpZXdwb3J0U2l6ZSgpCisgICAgICAgICAgICA6IGZvcm1hdHRpbmdTdGF0ZSgp
LmxheW91dFN0YXRlKCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94LmluaXRpYWxDb250YWluaW5n
QmxvY2soKSkuY29udGVudEJveCgpLnNpemUoKTsKKyAgICAgICAgYXV0byBzdHJva2VPdmVyZmxv
dyA9IGNlaWxmKHN0eWxlLmNvbXB1dGVkU3Ryb2tlV2lkdGgoY2VpbGVkSW50U2l6ZShpbml0aWFs
Q29udGFpbmdCbG9ja1NpemUpKSk7CisgICAgICAgIGF1dG8gaW5rT3ZlcmZsb3cgPSB0ZXh0UnVu
UmVjdDsKKyAgICAgICAgaW5rT3ZlcmZsb3cuaW5mbGF0ZShzdHJva2VPdmVyZmxvdyk7CisgICAg
ICAgIGF1dG8gbGV0dGVyU3BhY2luZyA9IHN0eWxlLmZvbnRDYXNjYWRlKCkubGV0dGVyU3BhY2lu
ZygpOworICAgICAgICBpZiAobGV0dGVyU3BhY2luZyA8IDApIHsKKyAgICAgICAgICAgIC8vIExh
c3QgbGV0dGVyJ3MgbmVnYXRpdmUgc3BhY2luZyBzaHJpbmtzIGxvZ2ljYWwgcmVjdC4gUHVzaCBp
dCB0byBpbmsgb3ZlcmZsb3cuCisgICAgICAgICAgICBpbmtPdmVyZmxvdy5leHBhbmQoLWxldHRl
clNwYWNpbmcsIHsgfSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGlua092ZXJmbG93Owor
ICAgIH07CisgICAgYXV0byBjb250ZW50ID0gZG93bmNhc3Q8SW5saW5lVGV4dEJveD4obGF5b3V0
Qm94KS5jb250ZW50KCk7CisgICAgYXV0byB0ZXh0ID0gbGluZVJ1bi50ZXh0Q29udGVudCgpOwor
ICAgIGF1dG8gYWRqdXN0ZWRDb250ZW50VG9SZW5kZXIgPSBbJl0geworICAgICAgICByZXR1cm4g
dGV4dC0+bmVlZHNIeXBoZW4gPyBtYWtlU3RyaW5nKGNvbnRlbnQuc3Vic3RyaW5nKHRleHQtPnN0
YXJ0LCB0ZXh0LT5sZW5ndGgpLCBzdHlsZS5oeXBoZW5TdHJpbmcoKSkgOiBTdHJpbmcoKTsKKyAg
ICB9OworICAgIGJveGVzLmFwcGVuZCh7IG1fbGluZUluZGV4CisgICAgICAgICwgSW5saW5lRGlz
cGxheTo6Qm94OjpUeXBlOjpUZXh0CisgICAgICAgICwgbGF5b3V0Qm94CisgICAgICAgICwgbGlu
ZVJ1bi5iaWRpTGV2ZWwoKQorICAgICAgICAsIHRleHRSdW5SZWN0CisgICAgICAgICwgaW5rT3Zl
cmZsb3coKQorICAgICAgICAsIGxpbmVSdW4uZXhwYW5zaW9uKCkKKyAgICAgICAgLCBJbmxpbmVE
aXNwbGF5OjpCb3g6OlRleHQgeyB0ZXh0LT5zdGFydCwgdGV4dC0+bGVuZ3RoLCBjb250ZW50LCBh
ZGp1c3RlZENvbnRlbnRUb1JlbmRlcigpLCB0ZXh0LT5uZWVkc0h5cGhlbiB9CisgICAgICAgICwg
dHJ1ZQorICAgICAgICAsIHsgfQorICAgIH0pOworfQorCit2b2lkIElubGluZURpc3BsYXlDb250
ZW50QnVpbGRlcjo6YXBwZW5kU29mdExpbmVCcmVha0Rpc3BsYXlCb3goY29uc3QgTGluZTo6UnVu
JiBsaW5lUnVuLCBjb25zdCBJbmxpbmVSZWN0JiBzb2Z0TGluZUJyZWFrUnVuUmVjdCwgRGlzcGxh
eUJveGVzJiBib3hlcykKK3sKKyAgICBBU1NFUlQobGluZVJ1bi50ZXh0Q29udGVudCgpICYmIGlz
PElubGluZVRleHRCb3g+KGxpbmVSdW4ubGF5b3V0Qm94KCkpKTsKKworICAgIGF1dG8mIGxheW91
dEJveCA9IGxpbmVSdW4ubGF5b3V0Qm94KCk7CisgICAgYXV0byYgdGV4dCA9IGxpbmVSdW4udGV4
dENvbnRlbnQoKTsKKworICAgIGJveGVzLmFwcGVuZCh7IG1fbGluZUluZGV4CisgICAgICAgICwg
SW5saW5lRGlzcGxheTo6Qm94OjpUeXBlOjpTb2Z0TGluZUJyZWFrCisgICAgICAgICwgbGF5b3V0
Qm94CisgICAgICAgICwgbGluZVJ1bi5iaWRpTGV2ZWwoKQorICAgICAgICAsIHNvZnRMaW5lQnJl
YWtSdW5SZWN0CisgICAgICAgICwgc29mdExpbmVCcmVha1J1blJlY3QKKyAgICAgICAgLCBsaW5l
UnVuLmV4cGFuc2lvbigpCisgICAgICAgICwgSW5saW5lRGlzcGxheTo6Qm94OjpUZXh0IHsgdGV4
dC0+c3RhcnQsIHRleHQtPmxlbmd0aCwgZG93bmNhc3Q8SW5saW5lVGV4dEJveD4obGF5b3V0Qm94
KS5jb250ZW50KCkgfQorICAgIH0pOworfQorCit2b2lkIElubGluZURpc3BsYXlDb250ZW50QnVp
bGRlcjo6YXBwZW5kSGFyZExpbmVCcmVha0Rpc3BsYXlCb3goY29uc3QgTGluZTo6UnVuJiBsaW5l
UnVuLCBjb25zdCBJbmxpbmVSZWN0JiBsaW5lQnJlYWtCb3hSZWN0LCBEaXNwbGF5Qm94ZXMmIGJv
eGVzKQoreworICAgIGF1dG8mIGxheW91dEJveCA9IGxpbmVSdW4ubGF5b3V0Qm94KCk7CisKKyAg
ICBib3hlcy5hcHBlbmQoeyBtX2xpbmVJbmRleAorICAgICAgICAsIElubGluZURpc3BsYXk6OkJv
eDo6VHlwZTo6TGluZUJyZWFrQm94CisgICAgICAgICwgbGF5b3V0Qm94CisgICAgICAgICwgbGlu
ZVJ1bi5iaWRpTGV2ZWwoKQorICAgICAgICAsIGxpbmVCcmVha0JveFJlY3QKKyAgICAgICAgLCBs
aW5lQnJlYWtCb3hSZWN0CisgICAgICAgICwgbGluZVJ1bi5leHBhbnNpb24oKQorICAgICAgICAs
IHsgfQorICAgIH0pOworCisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUo
KS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpOworICAgIGJveEdlb21ldHJ5LnNldExvZ2ljYWxUb3BM
ZWZ0KHRvTGF5b3V0UG9pbnQobGluZUJyZWFrQm94UmVjdC50b3BMZWZ0KCkpKTsKKyAgICBib3hH
ZW9tZXRyeS5zZXRDb250ZW50Qm94SGVpZ2h0KHRvTGF5b3V0VW5pdChsaW5lQnJlYWtCb3hSZWN0
LmhlaWdodCgpKSk7Cit9CisKK3ZvaWQgSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjphcHBl
bmRBdG9taWNJbmxpbmVMZXZlbERpc3BsYXlCb3goY29uc3QgTGluZTo6UnVuJiBsaW5lUnVuLCBj
b25zdCBJbmxpbmVSZWN0JiBib3JkZXJCb3hSZWN0LCBEaXNwbGF5Qm94ZXMmIGJveGVzKQorewor
ICAgIEFTU0VSVChsaW5lUnVuLmxheW91dEJveCgpLmlzQXRvbWljSW5saW5lTGV2ZWxCb3goKSk7
CisKKyAgICBhdXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxheW91dEJveCgpOworICAgIGF1dG8g
aW5rT3ZlcmZsb3cgPSBbJl0geworICAgICAgICBhdXRvIGlua092ZXJmbG93ID0gYm9yZGVyQm94
UmVjdDsKKyAgICAgICAgY29tcHV0ZUJveFNoYWRvd0lua092ZXJmbG93KCFtX2xpbmVJbmRleCA/
IGxheW91dEJveC5maXJzdExpbmVTdHlsZSgpIDogbGF5b3V0Qm94LnN0eWxlKCksIGlua092ZXJm
bG93KTsKKyAgICAgICAgLy8gQXRvbWljIGlubGluZSBib3ggY29udHJpYnV0ZSB0byB0aGVpciBp
bmxpbmUgYm94IHBhcmVudHMgaW5rIG92ZXJmbG93IGF0IGFsbCB0aW1lcyAoZS5nLiA8c3Bhbj48
aW1nPjwvc3Bhbj4pLgorICAgICAgICBtX2NvbnRlbnRIYXNJbmtPdmVyZmxvdyA9IG1fY29udGVu
dEhhc0lua092ZXJmbG93IHx8ICZsYXlvdXRCb3gucGFyZW50KCkgIT0gJnJvb3QoKTsKKyAgICAg
ICAgcmV0dXJuIGlua092ZXJmbG93OworICAgIH07CisgICAgYm94ZXMuYXBwZW5kKHsgbV9saW5l
SW5kZXgKKyAgICAgICAgLCBJbmxpbmVEaXNwbGF5OjpCb3g6OlR5cGU6OkF0b21pY0lubGluZUxl
dmVsQm94CisgICAgICAgICwgbGF5b3V0Qm94CisgICAgICAgICwgbGluZVJ1bi5iaWRpTGV2ZWwo
KQorICAgICAgICAsIGJvcmRlckJveFJlY3QKKyAgICAgICAgLCBpbmtPdmVyZmxvdygpCisgICAg
ICAgICwgbGluZVJ1bi5leHBhbnNpb24oKQorICAgICAgICAsIHsgfQorICAgIH0pOworICAgIC8v
IE5vdGUgdGhhdCBpbmxpbmUgYm94ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBsaW5lIGFuZCB0aGVp
ciB0b3AgcG9zaXRpb24gY2FuIGJlIG5lZ2F0aXZlLgorICAgIC8vIEF0b21pYyBpbmxpbmUgYm94
ZXMgYXJlIGFsbCBzZXQuIFRoZWlyIG1hcmdpbi9ib3JkZXIvY29udGVudCBib3ggZ2VvbWV0cmll
cyBhcmUgYWxyZWFkeSBjb21wdXRlZC4gV2UganVzdCBoYXZlIHRvIHBvc2l0aW9uIHRoZW0gaGVy
ZS4KKyAgICBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpLnNldExvZ2lj
YWxUb3BMZWZ0KHRvTGF5b3V0UG9pbnQoYm9yZGVyQm94UmVjdC50b3BMZWZ0KCkpKTsKK30KKwor
dm9pZCBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OnNldElubGluZUJveEdlb21ldHJ5KGNv
bnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBJbmxpbmVSZWN0JiByZWN0LCBib29sIGlzRmlyc3RJ
bmxpbmVCb3hGcmFnbWVudCkKK3sKKyAgICBhdXRvIGFkanVzdGVkU2l6ZSA9IExheW91dFNpemUg
eyBMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKHJlY3Qud2lkdGgoKSksIExheW91dFVuaXQ6OmZy
b21GbG9hdENlaWwocmVjdC5oZWlnaHQoKSkgfTsKKyAgICBhdXRvIGFkanVzdGVkUmVjdCA9IFJl
Y3QgeyBMYXlvdXRQb2ludCB7IHJlY3QudG9wTGVmdCgpIH0sIGFkanVzdGVkU2l6ZSB9OworICAg
IGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkobGF5b3V0
Qm94KTsKKyAgICBpZiAoIWlzRmlyc3RJbmxpbmVCb3hGcmFnbWVudCkgeworICAgICAgICBhdXRv
IGVuY2xvc2luZ0JvcmRlckJveFJlY3QgPSBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVjdChib3hH
ZW9tZXRyeSk7CisgICAgICAgIGVuY2xvc2luZ0JvcmRlckJveFJlY3QuZXhwYW5kVG9Db250YWlu
KGFkanVzdGVkUmVjdCk7CisgICAgICAgIGFkanVzdGVkUmVjdCA9IGVuY2xvc2luZ0JvcmRlckJv
eFJlY3Q7CisgICAgfQorICAgIGJveEdlb21ldHJ5LnNldExvZ2ljYWxUb3BMZWZ0KGFkanVzdGVk
UmVjdC50b3BMZWZ0KCkpOworICAgIGF1dG8gY29udGVudEJveEhlaWdodCA9IGFkanVzdGVkUmVj
dC5oZWlnaHQoKSAtIChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnku
dmVydGljYWxQYWRkaW5nKCkudmFsdWVfb3IoMF9sdSkpOworICAgIGF1dG8gY29udGVudEJveFdp
ZHRoID0gYWRqdXN0ZWRSZWN0LndpZHRoKCkgLSAoYm94R2VvbWV0cnkuaG9yaXpvbnRhbEJvcmRl
cigpICsgYm94R2VvbWV0cnkuaG9yaXpvbnRhbFBhZGRpbmcoKS52YWx1ZV9vcigwX2x1KSk7Cisg
ICAgYm94R2VvbWV0cnkuc2V0Q29udGVudEJveEhlaWdodChjb250ZW50Qm94SGVpZ2h0KTsKKyAg
ICBib3hHZW9tZXRyeS5zZXRDb250ZW50Qm94V2lkdGgoY29udGVudEJveFdpZHRoKTsKK30KKwor
dm9pZCBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OmFwcGVuZElubGluZUJveERpc3BsYXlC
b3goY29uc3QgTGluZTo6UnVuJiBsaW5lUnVuLCBjb25zdCBJbmxpbmVMZXZlbEJveCYgaW5saW5l
Qm94LCBjb25zdCBJbmxpbmVSZWN0JiBpbmxpbmVCb3hCb3JkZXJCb3gsIGJvb2wgbGluZWhhc0Nv
bnRlbnQsIERpc3BsYXlCb3hlcyYgYm94ZXMpCit7CisgICAgQVNTRVJUKGxpbmVSdW4ubGF5b3V0
Qm94KCkuaXNJbmxpbmVCb3goKSk7CisKKyAgICBhdXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxh
eW91dEJveCgpOworCisgICAgaWYgKCFsaW5laGFzQ29udGVudCkgeworICAgICAgICAvLyBGSVhN
RTogSXQncyBleHBlY3RlZCB0byBub3QgaGF2ZSBhbnkgYm94ZXMgb24gZW1wdHkgbGluZXMuIFdl
IHNob3VsZCByZWNvbnNpZGVyIHRoaXMuCisgICAgICAgIHNldElubGluZUJveEdlb21ldHJ5KGxh
eW91dEJveCwgaW5saW5lQm94Qm9yZGVyQm94LCB0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGF1dG8gaW5rT3ZlcmZsb3cgPSBbJl0geworICAgICAgICBhdXRvIGlua092ZXJm
bG93ID0gaW5saW5lQm94Qm9yZGVyQm94OworICAgICAgICBtX2NvbnRlbnRIYXNJbmtPdmVyZmxv
dyA9IGNvbXB1dGVCb3hTaGFkb3dJbmtPdmVyZmxvdyghbV9saW5lSW5kZXggPyBsYXlvdXRCb3gu
Zmlyc3RMaW5lU3R5bGUoKSA6IGxheW91dEJveC5zdHlsZSgpLCBpbmtPdmVyZmxvdykgfHwgbV9j
b250ZW50SGFzSW5rT3ZlcmZsb3c7CisgICAgICAgIHJldHVybiBpbmtPdmVyZmxvdzsKKyAgICB9
OworICAgIEFTU0VSVChpbmxpbmVCb3guaXNJbmxpbmVCb3goKSk7CisgICAgQVNTRVJUKGlubGlu
ZUJveC5pc0ZpcnN0Qm94KCkpOworICAgIGJveGVzLmFwcGVuZCh7IG1fbGluZUluZGV4CisgICAg
ICAgICwgSW5saW5lRGlzcGxheTo6Qm94OjpUeXBlOjpOb25Sb290SW5saW5lQm94CisgICAgICAg
ICwgbGF5b3V0Qm94CisgICAgICAgICwgbGluZVJ1bi5iaWRpTGV2ZWwoKQorICAgICAgICAsIGlu
bGluZUJveEJvcmRlckJveAorICAgICAgICAsIGlua092ZXJmbG93KCkKKyAgICAgICAgLCB7IH0K
KyAgICAgICAgLCB7IH0KKyAgICAgICAgLCBpbmxpbmVCb3guaGFzQ29udGVudCgpCisgICAgICAg
ICwgaXNGaXJzdExhc3RCb3goaW5saW5lQm94KQorICAgIH0pOworICAgIC8vIFRoaXMgaW5saW5l
IGJveCBzaG93ZWQgdXAgZmlyc3Qgb24gdGhpcyBsaW5lLgorICAgIHNldElubGluZUJveEdlb21l
dHJ5KGxheW91dEJveCwgaW5saW5lQm94Qm9yZGVyQm94LCB0cnVlKTsKK30KKwordm9pZCBJbmxp
bmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OmFwcGVuZFNwYW5uaW5nSW5saW5lQm94RGlzcGxheUJv
eChjb25zdCBMaW5lOjpSdW4mIGxpbmVSdW4sIGNvbnN0IElubGluZUxldmVsQm94JiBpbmxpbmVC
b3gsIGNvbnN0IElubGluZVJlY3QmIGlubGluZUJveEJvcmRlckJveCwgRGlzcGxheUJveGVzJiBi
b3hlcykKK3sKKyAgICBBU1NFUlQobGluZVJ1bi5sYXlvdXRCb3goKS5pc0lubGluZUJveCgpKTsK
KworICAgIGF1dG8mIGxheW91dEJveCA9IGxpbmVSdW4ubGF5b3V0Qm94KCk7CisgICAgYXV0byBp
bmtPdmVyZmxvdyA9IFsmXSB7CisgICAgICAgIGF1dG8gaW5rT3ZlcmZsb3cgPSBpbmxpbmVCb3hC
b3JkZXJCb3g7CisgICAgICAgIG1fY29udGVudEhhc0lua092ZXJmbG93ID0gY29tcHV0ZUJveFNo
YWRvd0lua092ZXJmbG93KCFtX2xpbmVJbmRleCA/IGxheW91dEJveC5maXJzdExpbmVTdHlsZSgp
IDogbGF5b3V0Qm94LnN0eWxlKCksIGlua092ZXJmbG93KSB8fCBtX2NvbnRlbnRIYXNJbmtPdmVy
ZmxvdzsKKyAgICAgICAgcmV0dXJuIGlua092ZXJmbG93OworICAgIH07CisgICAgQVNTRVJUKCFp
bmxpbmVCb3guaXNGaXJzdEJveCgpKTsKKyAgICBib3hlcy5hcHBlbmQoeyBtX2xpbmVJbmRleAor
ICAgICAgICAsIElubGluZURpc3BsYXk6OkJveDo6VHlwZTo6Tm9uUm9vdElubGluZUJveAorICAg
ICAgICAsIGxheW91dEJveAorICAgICAgICAsIGxpbmVSdW4uYmlkaUxldmVsKCkKKyAgICAgICAg
LCBpbmxpbmVCb3hCb3JkZXJCb3gKKyAgICAgICAgLCBpbmtPdmVyZmxvdygpCisgICAgICAgICwg
eyB9CisgICAgICAgICwgeyB9CisgICAgICAgICwgaW5saW5lQm94Lmhhc0NvbnRlbnQoKQorICAg
ICAgICAsIGlzRmlyc3RMYXN0Qm94KGlubGluZUJveCkKKyAgICB9KTsKKyAgICAvLyBNaWRkbGUg
b3IgZW5kIG9mIHRoZSBpbmxpbmUgYm94LiBMZXQncyBzdHJldGNoIHRoZSBib3ggYXMgbmVlZGVk
LgorICAgIHNldElubGluZUJveEdlb21ldHJ5KGxheW91dEJveCwgaW5saW5lQm94Qm9yZGVyQm94
LCBmYWxzZSk7Cit9CisKK3ZvaWQgSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjphcHBlbmRJ
bmxpbmVEaXNwbGF5Qm94QXRCaWRpQm91bmRhcnkoY29uc3QgQm94JiBsYXlvdXRCb3gsIERpc3Bs
YXlCb3hlcyYgYm94ZXMpCit7CisgICAgLy8gR2VvbWV0cmllcyBmb3IgaW5saW5lIGJveGVzIGF0
IGJpZGkgYm91bmRhcmllcyBhcmUgY29tcHV0ZWQgYXQgYSBwb3N0LXByb2Nlc3Mgc3RlcC4KKyAg
ICBib3hlcy5hcHBlbmQoeyBtX2xpbmVJbmRleAorICAgICAgICAsIElubGluZURpc3BsYXk6OkJv
eDo6VHlwZTo6Tm9uUm9vdElubGluZUJveAorICAgICAgICAsIGxheW91dEJveAorICAgICAgICAs
IFVCSURJX0RFRkFVTFRfTFRSCisgICAgICAgICwgeyB9CisgICAgICAgICwgeyB9CisgICAgICAg
ICwgeyB9CisgICAgICAgICwgeyB9CisgICAgfSk7Cit9CisKK3ZvaWQgSW5saW5lRGlzcGxheUNv
bnRlbnRCdWlsZGVyOjpwcm9jZXNzTm9uQmlkaUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6Okxp
bmVDb250ZW50JiBsaW5lQ29udGVudCwgY29uc3QgTGluZUJveCYgbGluZUJveCwgY29uc3QgSW5s
aW5lTGF5b3V0UG9pbnQmIGxpbmVCb3hMb2dpY2FsVG9wTGVmdCwgRGlzcGxheUJveGVzJiBib3hl
cykKK3sKKyAgICBhdXRvIHJvb3RJbmxpbmVCb3hXaWR0aCA9IGxpbmVCb3gubG9naWNhbFJlY3RG
b3JSb290SW5saW5lQm94KCkud2lkdGgoKTsKKyAgICBhdXRvIHJvb3RJbmxpbmVCb3hBbGlnbm1l
bnRPZmZzZXQgPSBsaW5lQm94LnJvb3RJbmxpbmVCb3hBbGlnbm1lbnRPZmZzZXQoKTsKKyAgICBh
dXRvIG5lZWRzRGlyZWN0aW9uQWRqdXN0bWVudCA9ICFyb290KCkuc3R5bGUoKS5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCk7CisKKyAgICBmb3IgKGF1dG8mIGxpbmVSdW4gOiBsaW5lQ29udGVudC5y
dW5zKSB7CisgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGxpbmVSdW4ubGF5b3V0Qm94KCk7CisK
KyAgICAgICAgYXV0byB2aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QgPSBbJl0oYXV0byBsb2dpY2Fs
UmVjdCkgeworICAgICAgICAgICAgLy8gV2hlbiB0aGUgbG9naWNhbCBvcmRlciA9PSB2aXN1YWwg
b3JkZXIsIFJUTCBpbmxpbmUgZGlyZWN0aW9uIGlzIGp1c3QgYW4gb2Zmc2V0LgorICAgICAgICAg
ICAgYXV0byBob3Jpem9udGFsT2Zmc2V0ID0gbmVlZHNEaXJlY3Rpb25BZGp1c3RtZW50ID8gbGlu
ZUNvbnRlbnQubGluZUxvZ2ljYWxXaWR0aCAtIHJvb3RJbmxpbmVCb3hXaWR0aCAtIHJvb3RJbmxp
bmVCb3hBbGlnbm1lbnRPZmZzZXQgOiByb290SW5saW5lQm94QWxpZ25tZW50T2Zmc2V0OworICAg
ICAgICAgICAgbG9naWNhbFJlY3QubW92ZUJ5KHsgbGluZUJveExvZ2ljYWxUb3BMZWZ0LngoKSAr
IGhvcml6b250YWxPZmZzZXQsIGxpbmVCb3hMb2dpY2FsVG9wTGVmdC55KCkgfSk7CisgICAgICAg
ICAgICByZXR1cm4gbG9naWNhbFJlY3Q7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGxpbmVS
dW4uaXNUZXh0KCkpIHsKKyAgICAgICAgICAgIGFwcGVuZFRleHREaXNwbGF5Qm94KGxpbmVSdW4s
IHZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdChsaW5lQm94LmxvZ2ljYWxSZWN0Rm9yVGV4dFJ1bihs
aW5lUnVuKSksIGJveGVzKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIGlmIChsaW5lUnVuLmlzU29mdExpbmVCcmVhaygpKSB7CisgICAgICAgICAgICBhcHBlbmRT
b2Z0TGluZUJyZWFrRGlzcGxheUJveChsaW5lUnVuLCB2aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3Qo
bGluZUJveC5sb2dpY2FsUmVjdEZvclRleHRSdW4obGluZVJ1bikpLCBib3hlcyk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGluZVJ1bi5pc0hhcmRMaW5l
QnJlYWsoKSkgeworICAgICAgICAgICAgYXBwZW5kSGFyZExpbmVCcmVha0Rpc3BsYXlCb3gobGlu
ZVJ1biwgdmlzdWFsUmVjdFJlbGF0aXZlVG9Sb290KGxpbmVCb3gubG9naWNhbFJlY3RGb3JMaW5l
QnJlYWtCb3gobGF5b3V0Qm94KSksIGJveGVzKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgICAgIGlmIChsaW5lUnVuLmlzQm94KCkpIHsKKyAgICAgICAgICAgIGFwcGVu
ZEF0b21pY0lubGluZUxldmVsRGlzcGxheUJveChsaW5lUnVuCisgICAgICAgICAgICAgICAgLCB2
aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QobGluZUJveC5sb2dpY2FsQm9yZGVyQm94Rm9yQXRvbWlj
SW5saW5lTGV2ZWxCb3gobGF5b3V0Qm94LCBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShs
YXlvdXRCb3gpKSkKKyAgICAgICAgICAgICAgICAsIGJveGVzKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIGlmIChsaW5lUnVuLmlzSW5saW5lQm94U3RhcnQoKSkg
eworICAgICAgICAgICAgYXBwZW5kSW5saW5lQm94RGlzcGxheUJveChsaW5lUnVuCisgICAgICAg
ICAgICAgICAgLCBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxpbmVSdW4ubGF5
b3V0Qm94KCkpCisgICAgICAgICAgICAgICAgLCB2aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QobGlu
ZUJveC5sb2dpY2FsQm9yZGVyQm94Rm9ySW5saW5lQm94KGxheW91dEJveCwgZm9ybWF0dGluZ1N0
YXRlKCkuYm94R2VvbWV0cnkobGF5b3V0Qm94KSkpCisgICAgICAgICAgICAgICAgLCBsaW5lQm94
Lmhhc0NvbnRlbnQoKQorICAgICAgICAgICAgICAgICwgYm94ZXMpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxpbmVSdW4uaXNMaW5lU3Bhbm5pbmdJbmxp
bmVCb3hTdGFydCgpKSB7CisgICAgICAgICAgICBpZiAoIWxpbmVCb3guaGFzQ29udGVudCgpKSB7
CisgICAgICAgICAgICAgICAgLy8gV2hlbiBhIHNwYW5uaW5nIGlubGluZSBib3ggKGUuZy4gPGRp
dj50ZXh0PHNwYW4+PGJyPjwvc3Bhbj48L2Rpdj4pIGxhbmRzIG9uIGFuIGVtcHR5IGxpbmUKKyAg
ICAgICAgICAgICAgICAvLyAoZW1wdHkgaGVyZSBtZWFucyBubyBjb250ZW50IGF0IGFsbCBpbmNs
dWRpbmcgbGluZSBicmVha3MsIG5vdCBqdXN0IHZpc3VhbGx5IGVtcHR5KSB0aGVuIHdlCisgICAg
ICAgICAgICAgICAgLy8gZG9uJ3QgZXh0ZW5kIHRoZSBzcGFubmluZyBsaW5lIGJveCBvdmVyIHRv
IHRoaXMgbGluZSAtYWxzbyB0aGVyZSBpcyBubyBuZXh0IGxpbmUgaW4gY2FzZXMgbGlrZSB0aGlz
LgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YXBwZW5kU3Bhbm5pbmdJbmxpbmVCb3hEaXNwbGF5Qm94KGxpbmVSdW4KKyAgICAgICAgICAgICAg
ICAsIGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGluZVJ1bi5sYXlvdXRCb3go
KSkKKyAgICAgICAgICAgICAgICAsIHZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdChsaW5lQm94Lmxv
Z2ljYWxCb3JkZXJCb3hGb3JJbmxpbmVCb3gobGF5b3V0Qm94LCBmb3JtYXR0aW5nU3RhdGUoKS5i
b3hHZW9tZXRyeShsYXlvdXRCb3gpKSkKKyAgICAgICAgICAgICAgICAsIGJveGVzKTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChsaW5lUnVuLmlzSW5s
aW5lQm94RW5kKCkgfHwgbGluZVJ1bi5pc1dvcmRCcmVha09wcG9ydHVuaXR5KCkpOworICAgIH0K
K30KKworc3RydWN0IERpc3BsYXlCb3hUcmVlIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgTm9kZSB7
CisgICAgICAgIC8vIE5vZGUncyBwYXJlbnQgaW5kZXggaW4gbV9kaXNwbGF5Qm94Tm9kZXMuCisg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBwYXJlbnRJbmRleDsKKyAgICAgICAgLy8gQXNz
b2NpYXRlZCBkaXNwbGF5IGJveCBpbmRleCBpbiBEaXNwbGF5Qm94ZXMuCisgICAgICAgIHNpemVf
dCBkaXNwbGF5Qm94SW5kZXggeyAwIH07CisgICAgICAgIC8vIENoaWxkIGluZGV4ZXMgaW4gbV9k
aXNwbGF5Qm94Tm9kZXMuCisgICAgICAgIFZlY3RvcjxzaXplX3Q+IGNoaWxkcmVuIHsgfTsKKyAg
ICB9OworCisgICAgRGlzcGxheUJveFRyZWUoKQorICAgIHsKKyAgICAgICAgbV9kaXNwbGF5Qm94
Tm9kZXMuYXBwZW5kKHsgfSk7CisgICAgfQorCisgICAgYm9vbCBoYXNJbmxpbmVCb3goKSBjb25z
dCB7IHJldHVybiBtX2Rpc3BsYXlCb3hOb2Rlcy5zaXplKCkgPiAxOyB9CisgICAgY29uc3QgTm9k
ZSYgcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUJveE5vZGVzLmZpcnN0KCk7IH0KKyAg
ICBOb2RlJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fZGlzcGxheUJveE5vZGVzW2luZGV4
XTsgfQorICAgIGNvbnN0IE5vZGUmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9k
aXNwbGF5Qm94Tm9kZXNbaW5kZXhdOyB9CisKKyAgICBzaXplX3QgYXBwZW5kKHNpemVfdCBwYXJl
bnROb2RlSW5kZXgsIHNpemVfdCBjaGlsZERpc3BsYXlCb3hJbmRleCkKKyAgICB7CisgICAgICAg
IGF1dG8gY2hpbGREaXNwbGF5Qm94Tm9kZUluZGV4ID0gbV9kaXNwbGF5Qm94Tm9kZXMuc2l6ZSgp
OworICAgICAgICBtX2Rpc3BsYXlCb3hOb2Rlcy5hcHBlbmQoeyBwYXJlbnROb2RlSW5kZXgsIGNo
aWxkRGlzcGxheUJveEluZGV4IH0pOworICAgICAgICBhdChwYXJlbnROb2RlSW5kZXgpLmNoaWxk
cmVuLmFwcGVuZChjaGlsZERpc3BsYXlCb3hOb2RlSW5kZXgpOworICAgICAgICByZXR1cm4gY2hp
bGREaXNwbGF5Qm94Tm9kZUluZGV4OworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8Tm9k
ZSwgMTA+IG1fZGlzcGxheUJveE5vZGVzOworfTsKKworc3RydWN0IEFuY2VzdG9yU3RhY2sgewor
ICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiB1bndpbmQoY29uc3QgQ29udGFpbmVyQm94JiBjb250
YWluZXJCb3gpCisgICAgeworICAgICAgICAvLyBVbndpbmQgdGhlIHN0YWNrIGFsbCB0aGUgd2F5
IHRvIGNvbnRhaW5lciBib3guCisgICAgICAgIGlmICghbV9zZXQuY29udGFpbnMoJmNvbnRhaW5l
ckJveCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB3aGlsZSAobV9zZXQubGFz
dCgpICE9ICZjb250YWluZXJCb3gpIHsKKyAgICAgICAgICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgp
OworICAgICAgICAgICAgbV9zZXQucmVtb3ZlTGFzdCgpOworICAgICAgICB9CisgICAgICAgIC8v
IFJvb3QgaXMgYWx3YXlzIGEgY29tbW9uIGFuY2VzdG9yLgorICAgICAgICBBU1NFUlQoIW1fc3Rh
Y2suaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIG1fc3RhY2subGFzdCgpOworICAgIH0KKwor
ICAgIHZvaWQgcHVzaChzaXplX3QgZGlzcGxheUJveE5vZGVJbmRleEZvckNvbnRhaW5lckJveCwg
Y29uc3QgQ29udGFpbmVyQm94JiBjb250YWluZXJCb3gpCisgICAgeworICAgICAgICBtX3N0YWNr
LmFwcGVuZChkaXNwbGF5Qm94Tm9kZUluZGV4Rm9yQ29udGFpbmVyQm94KTsKKyAgICAgICAgQVNT
RVJUKCFtX3NldC5jb250YWlucygmY29udGFpbmVyQm94KSk7CisgICAgICAgIG1fc2V0LmFkZCgm
Y29udGFpbmVyQm94KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHNpemVfdD4gbV9z
dGFjazsKKyAgICBMaXN0SGFzaFNldDxjb25zdCBDb250YWluZXJCb3gqPiBtX3NldDsKK307CisK
K3N0YXRpYyBpbmxpbmUgc2l6ZV90IGNyZWF0ZWREaXNwbGF5Qm94Tm9kZUZvckNvbnRhaW5lckJv
eEFuZFB1c2hUb0FuY2VzdG9yU3RhY2soY29uc3QgQ29udGFpbmVyQm94JiBjb250YWluZXJCb3gs
IHNpemVfdCBkaXNwbGF5Qm94SW5kZXgsIHNpemVfdCBwYXJlbnREaXNwbGF5Qm94Tm9kZUluZGV4
LCBEaXNwbGF5Qm94VHJlZSYgZGlzcGxheUJveFRyZWUsIEFuY2VzdG9yU3RhY2smIGFuY2VzdG9y
U3RhY2spCit7CisgICAgYXV0byBkaXNwbGF5Qm94Tm9kZUluZGV4ID0gZGlzcGxheUJveFRyZWUu
YXBwZW5kKHBhcmVudERpc3BsYXlCb3hOb2RlSW5kZXgsIGRpc3BsYXlCb3hJbmRleCk7CisgICAg
YW5jZXN0b3JTdGFjay5wdXNoKGRpc3BsYXlCb3hOb2RlSW5kZXgsIGNvbnRhaW5lckJveCk7Cisg
ICAgcmV0dXJuIGRpc3BsYXlCb3hOb2RlSW5kZXg7Cit9CisKK3NpemVfdCBJbmxpbmVEaXNwbGF5
Q29udGVudEJ1aWxkZXI6OmVuc3VyZURpc3BsYXlCb3hGb3JDb250YWluZXIoY29uc3QgQ29udGFp
bmVyQm94JiBjb250YWluZXJCb3gsIERpc3BsYXlCb3hUcmVlJiBkaXNwbGF5Qm94VHJlZSwgQW5j
ZXN0b3JTdGFjayYgYW5jZXN0b3JTdGFjaywgRGlzcGxheUJveGVzJiBib3hlcykKK3sKKyAgICBB
U1NFUlQoY29udGFpbmVyQm94LmlzSW5saW5lQm94KCkgfHwgJmNvbnRhaW5lckJveCA9PSAmcm9v
dCgpKTsKKyAgICBpZiAoYXV0byBsb3dlc3RDb21tb25BbmNlc3RvckluZGV4ID0gYW5jZXN0b3JT
dGFjay51bndpbmQoY29udGFpbmVyQm94KSkKKyAgICAgICAgcmV0dXJuICpsb3dlc3RDb21tb25B
bmNlc3RvckluZGV4OworICAgIGF1dG8gZW5jbG9zaW5nRGlzcGxheUJveE5vZGVJbmRleEZvckNv
bnRhaW5lciA9IGVuc3VyZURpc3BsYXlCb3hGb3JDb250YWluZXIoY29udGFpbmVyQm94LnBhcmVu
dCgpLCBkaXNwbGF5Qm94VHJlZSwgYW5jZXN0b3JTdGFjaywgYm94ZXMpOworICAgIGFwcGVuZElu
bGluZURpc3BsYXlCb3hBdEJpZGlCb3VuZGFyeShjb250YWluZXJCb3gsIGJveGVzKTsKKyAgICBy
ZXR1cm4gY3JlYXRlZERpc3BsYXlCb3hOb2RlRm9yQ29udGFpbmVyQm94QW5kUHVzaFRvQW5jZXN0
b3JTdGFjayhjb250YWluZXJCb3gsIGJveGVzLnNpemUoKSAtIDEsIGVuY2xvc2luZ0Rpc3BsYXlC
b3hOb2RlSW5kZXhGb3JDb250YWluZXIsIGRpc3BsYXlCb3hUcmVlLCBhbmNlc3RvclN0YWNrKTsK
K30KKworc3RydWN0IElzRmlyc3RMYXN0SW5kZXggeworICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90
PiBmaXJzdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbGFzdDsKK307Cit1c2luZyBJc0Zp
cnN0TGFzdEluZGV4ZXNNYXAgPSBIYXNoTWFwPGNvbnN0IEJveCosIElzRmlyc3RMYXN0SW5kZXg+
Owordm9pZCBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OmFkanVzdFZpc3VhbEdlb21ldHJ5
Rm9yRGlzcGxheUJveChzaXplX3QgZGlzcGxheUJveE5vZGVJbmRleCwgSW5saW5lTGF5b3V0VW5p
dCYgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciwgSW5saW5lTGF5b3V0VW5pdCBsaW5lQm94TG9n
aWNhbFRvcCwgY29uc3QgRGlzcGxheUJveFRyZWUmIGRpc3BsYXlCb3hUcmVlLCBEaXNwbGF5Qm94
ZXMmIGJveGVzLCBjb25zdCBMaW5lQm94JiBsaW5lQm94LCBjb25zdCBJc0ZpcnN0TGFzdEluZGV4
ZXNNYXAmIGlzRmlyc3RMYXN0SW5kZXhlc01hcCkKK3sKKyAgICAvLyBOb24taW5saW5lIGJveCBk
aXNwbGF5IGJveGVzIGp1c3QgbmVlZCBhIGhvcml6b250YWwgYWRqdXN0bWVudCB3aGlsZQorICAg
IC8vIGlubGluZSBib3ggdHlwZSBvZiBkaXNwbGF5IGJveGVzIG5lZWQKKyAgICAvLyAxLiBob3Jp
em9udGFsIGFkanVzdG1lbnQgYW5kIG1hcmdpbi9ib3JkZXIvcGFkZGluZyBzdGFydCBvZmZzZXR0
aW5nIG9uIHRoZSBmaXJzdCBib3gKKyAgICAvLyAyLiByaWdodCBlZGdlIGNvbXB1dGF0aW9uIGlu
Y2x1ZGluZyBkZXNjZW5kYW50IGNvbnRlbnQgd2lkdGggYW5kIG1hcmdpbi9ib3JkZXIvcGFkZGlu
ZyBlbmQgb2Zmc2V0dGluZyBvbiB0aGUgbGFzdCBib3gKKyAgICBhdXRvJiBkaXNwbGF5Qm94ID0g
Ym94ZXNbZGlzcGxheUJveFRyZWUuYXQoZGlzcGxheUJveE5vZGVJbmRleCkuZGlzcGxheUJveElu
ZGV4XTsKKyAgICBhdXRvJiBsYXlvdXRCb3ggPSBkaXNwbGF5Qm94LmxheW91dEJveCgpOworCisg
ICAgaWYgKCFkaXNwbGF5Qm94LmlzTm9uUm9vdElubGluZUJveCgpKSB7CisgICAgICAgIGlmIChk
aXNwbGF5Qm94LmlzQXRvbWljSW5saW5lTGV2ZWxCb3goKSB8fCBkaXNwbGF5Qm94LmlzR2VuZXJp
Y0lubGluZUxldmVsQm94KCkpIHsKKyAgICAgICAgICAgIGF1dG8gaXNMZWZ0VG9SaWdodERpcmVj
dGlvbiA9IGxheW91dEJveC5wYXJlbnQoKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KTsKKyAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94
R2VvbWV0cnkobGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGF1dG8gYm94TWFyZ2luTGVmdCA9IG1h
cmdpbkxlZnQoYm94R2VvbWV0cnksIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pOworICAgICAgICAg
ICAgYXV0byBib3hNYXJnaW5SaWdodCA9IG1hcmdpblJpZ2h0KGJveEdlb21ldHJ5LCBpc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKTsKKworICAgICAgICAgICAgYXV0byBib3JkZXJCb3hMZWZ0ID0gTGF5
b3V0VW5pdCB7IGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIgKyBib3hNYXJnaW5MZWZ0IH07Cisg
ICAgICAgICAgICBib3hHZW9tZXRyeS5zZXRMb2dpY2FsTGVmdChib3JkZXJCb3hMZWZ0KTsKKyAg
ICAgICAgICAgIGRpc3BsYXlCb3guc2V0TGVmdChib3JkZXJCb3hMZWZ0KTsKKworICAgICAgICAg
ICAgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciArPSBib3hNYXJnaW5MZWZ0ICsgZGlzcGxheUJv
eC53aWR0aCgpICsgYm94TWFyZ2luUmlnaHQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBkaXNwbGF5Qm94LnNldExlZnQoY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlcik7CisgICAgICAg
ICAgICBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyICs9IGRpc3BsYXlCb3gud2lkdGgoKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYgYm94R2VvbWV0cnkg
PSBmb3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpOworICAgIGF1dG8gaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbiA9IGxheW91dEJveC5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKTsKKyAgICBhdXRvIGlzRmlyc3RMYXN0SW5kZXhlcyA9IGlzRmlyc3RMYXN0SW5kZXhl
c01hcC5nZXQoJmxheW91dEJveCk7CisgICAgYXV0byBpc0ZpcnN0Qm94ID0gaXNGaXJzdExhc3RJ
bmRleGVzLmZpcnN0ICYmICppc0ZpcnN0TGFzdEluZGV4ZXMuZmlyc3QgPT0gZGlzcGxheUJveE5v
ZGVJbmRleDsKKyAgICBhdXRvIGlzTGFzdEJveCA9IGlzRmlyc3RMYXN0SW5kZXhlcy5sYXN0ICYm
ICppc0ZpcnN0TGFzdEluZGV4ZXMubGFzdCA9PSBkaXNwbGF5Qm94Tm9kZUluZGV4OworICAgIGF1
dG8gYmVmb3JlSW5saW5lQm94Q29udGVudCA9IFsmXSB7CisgICAgICAgIGF1dG8gbG9naWNhbFJl
Y3QgPSBsaW5lQm94LmxvZ2ljYWxCb3JkZXJCb3hGb3JJbmxpbmVCb3gobGF5b3V0Qm94LCBib3hH
ZW9tZXRyeSk7CisgICAgICAgIGF1dG8gdmlzdWFsUmVjdCA9IElubGluZVJlY3QgeyBsaW5lQm94
TG9naWNhbFRvcCArIGxvZ2ljYWxSZWN0LnRvcCgpLCBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVy
LCB7IH0sIGxvZ2ljYWxSZWN0LmhlaWdodCgpIH07CisgICAgICAgIGF1dG8gc2hvdWxkQXBwbHlM
ZWZ0U2lkZSA9IChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uICYmIGlzRmlyc3RCb3gpIHx8ICghaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbiAmJiBpc0xhc3RCb3gpOworICAgICAgICBpZiAoIXNob3VsZEFw
cGx5TGVmdFNpZGUpCisgICAgICAgICAgICByZXR1cm4gZGlzcGxheUJveC5zZXRSZWN0KHZpc3Vh
bFJlY3QsIHZpc3VhbFJlY3QpOworCisgICAgICAgIGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIg
Kz0gbWFyZ2luTGVmdChib3hHZW9tZXRyeSwgaXNMZWZ0VG9SaWdodERpcmVjdGlvbik7CisgICAg
ICAgIGF1dG8gdmlzdWFsUmVjdFdpdGhNYXJnaW5MZWZ0ID0gSW5saW5lUmVjdCB7IHZpc3VhbFJl
Y3QudG9wKCksIGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIsIHZpc3VhbFJlY3Qud2lkdGgoKSwg
dmlzdWFsUmVjdC5oZWlnaHQoKSB9OworICAgICAgICBkaXNwbGF5Qm94LnNldFJlY3QodmlzdWFs
UmVjdFdpdGhNYXJnaW5MZWZ0LCB2aXN1YWxSZWN0V2l0aE1hcmdpbkxlZnQpOworICAgICAgICBj
b250ZW50UmlnaHRJblZpc3VhbE9yZGVyICs9IGJvcmRlckxlZnQoYm94R2VvbWV0cnksIGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24pICsgcGFkZGluZ0xlZnQoYm94R2VvbWV0cnksIGlzTGVmdFRvUmln
aHREaXJlY3Rpb24pOworICAgIH07CisgICAgYmVmb3JlSW5saW5lQm94Q29udGVudCgpOworCisg
ICAgZm9yIChhdXRvIGNoaWxkRGlzcGxheUJveE5vZGVJbmRleCA6IGRpc3BsYXlCb3hUcmVlLmF0
KGRpc3BsYXlCb3hOb2RlSW5kZXgpLmNoaWxkcmVuKQorICAgICAgICBhZGp1c3RWaXN1YWxHZW9t
ZXRyeUZvckRpc3BsYXlCb3goY2hpbGREaXNwbGF5Qm94Tm9kZUluZGV4LCBjb250ZW50UmlnaHRJ
blZpc3VhbE9yZGVyLCBsaW5lQm94TG9naWNhbFRvcCwgZGlzcGxheUJveFRyZWUsIGJveGVzLCBs
aW5lQm94LCBpc0ZpcnN0TGFzdEluZGV4ZXNNYXApOworCisgICAgYXV0byBhZnRlcklubGluZUJv
eENvbnRlbnQgPSBbJl0geworICAgICAgICBhdXRvIHNob3VsZEFwcGx5UmlnaHRTaWRlID0gKGlz
TGVmdFRvUmlnaHREaXJlY3Rpb24gJiYgaXNMYXN0Qm94KSB8fCAoIWlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24gJiYgaXNGaXJzdEJveCk7CisgICAgICAgIGlmICghc2hvdWxkQXBwbHlSaWdodFNpZGUp
CisgICAgICAgICAgICByZXR1cm4gZGlzcGxheUJveC5zZXRSaWdodChjb250ZW50UmlnaHRJblZp
c3VhbE9yZGVyKTsKKworICAgICAgICBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyICs9IGJvcmRl
clJpZ2h0KGJveEdlb21ldHJ5LCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKSArIHBhZGRpbmdSaWdo
dChib3hHZW9tZXRyeSwgaXNMZWZ0VG9SaWdodERpcmVjdGlvbik7CisgICAgICAgIGRpc3BsYXlC
b3guc2V0UmlnaHQoY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlcik7CisgICAgICAgIGNvbnRlbnRS
aWdodEluVmlzdWFsT3JkZXIgKz0gbWFyZ2luUmlnaHQoYm94R2VvbWV0cnksIGlzTGVmdFRvUmln
aHREaXJlY3Rpb24pOworICAgIH07CisgICAgYWZ0ZXJJbmxpbmVCb3hDb250ZW50KCk7CisKKyAg
ICBhdXRvIGNvbXB1dGVJbmtPdmVyZmxvdyA9IFsmXSB7CisgICAgICAgIGF1dG8gaW5rT3ZlcmZs
b3cgPSBkaXNwbGF5Qm94LnJlY3QoKTsKKyAgICAgICAgbV9jb250ZW50SGFzSW5rT3ZlcmZsb3cg
PSBjb21wdXRlQm94U2hhZG93SW5rT3ZlcmZsb3coIW1fbGluZUluZGV4ID8gbGF5b3V0Qm94LmZp
cnN0TGluZVN0eWxlKCkgOiBsYXlvdXRCb3guc3R5bGUoKSwgaW5rT3ZlcmZsb3cpIHx8IG1fY29u
dGVudEhhc0lua092ZXJmbG93OworICAgICAgICBkaXNwbGF5Qm94LmFkanVzdElua092ZXJmbG93
KGlua092ZXJmbG93KTsKKyAgICB9OworICAgIGNvbXB1dGVJbmtPdmVyZmxvdygpOworCisgICAg
c2V0SW5saW5lQm94R2VvbWV0cnkobGF5b3V0Qm94LCBkaXNwbGF5Qm94LnJlY3QoKSwgaXNGaXJz
dEJveCk7CisgICAgaWYgKGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0
Qm94KS5oYXNDb250ZW50KCkpCisgICAgICAgIGRpc3BsYXlCb3guc2V0SGFzQ29udGVudCgpOwor
fQorCit2b2lkIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlcjo6cHJvY2Vzc0JpZGlDb250ZW50
KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IExpbmVC
b3gmIGxpbmVCb3gsIGNvbnN0IElubGluZUxheW91dFBvaW50JiBsaW5lQm94TG9naWNhbFRvcExl
ZnQsIERpc3BsYXlCb3hlcyYgYm94ZXMpCit7CisgICAgQVNTRVJUKGxpbmVDb250ZW50LnZpc3Vh
bE9yZGVyTGlzdC5zaXplKCkgPD0gbGluZUNvbnRlbnQucnVucy5zaXplKCkpOworCisgICAgQW5j
ZXN0b3JTdGFjayBhbmNlc3RvclN0YWNrOworICAgIGF1dG8gZGlzcGxheUJveFRyZWUgPSBEaXNw
bGF5Qm94VHJlZSB7IH07CisgICAgYW5jZXN0b3JTdGFjay5wdXNoKHsgfSwgcm9vdCgpKTsKKwor
ICAgIGF1dG8gcm9vdElubGluZUJveEFsaWdubWVudE9mZnNldCA9IGxpbmVCb3gucm9vdElubGlu
ZUJveEFsaWdubWVudE9mZnNldCgpOworICAgIGF1dG8gY29udGVudFN0YXJ0SW5WaXN1YWxPcmRl
ciA9IHJvb3RJbmxpbmVCb3hBbGlnbm1lbnRPZmZzZXQ7CisgICAgYXV0byBjcmVhdGVEaXNwbGF5
Qm94ZXNJblZpc3VhbE9yZGVyID0gWyZdIHsKKyAgICAgICAgLy8gRmlyc3QgdmlzdWFsIHJ1bidz
IGluaXRpYWwgY29udGVudCBwb3NpdGlvbiBkZXBlbmRzIG9uIHRoZSBibG9jaydzIGlubGluZSBk
aXJlY3Rpb24uCisgICAgICAgIGlmICghcm9vdCgpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpKQorICAgICAgICAgICAgY29udGVudFN0YXJ0SW5WaXN1YWxPcmRlciA9IGxpbmVDb250
ZW50LmxpbmVMb2dpY2FsV2lkdGggLSBsaW5lQm94LmxvZ2ljYWxSZWN0Rm9yUm9vdElubGluZUJv
eCgpLndpZHRoKCkgLSByb290SW5saW5lQm94QWxpZ25tZW50T2Zmc2V0OworCisgICAgICAgIGF1
dG8gY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciA9IGNvbnRlbnRTdGFydEluVmlzdWFsT3JkZXI7
CisgICAgICAgIGF1dG8mIHJ1bnMgPSBsaW5lQ29udGVudC5ydW5zOworICAgICAgICBmb3IgKGF1
dG8gdmlzdWFsT3JkZXIgOiBsaW5lQ29udGVudC52aXN1YWxPcmRlckxpc3QpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChydW5zW3Zpc3VhbE9yZGVyXS5iaWRpTGV2ZWwoKSAhPSBJbmxpbmVJdGVtOjpv
cGFxdWVCaWRpTGV2ZWwpOworCisgICAgICAgICAgICBhdXRvJiBsaW5lUnVuID0gcnVuc1t2aXN1
YWxPcmRlcl07CisgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxheW91dEJv
eCgpOworCisgICAgICAgICAgICBhdXRvIG5lZWRzRGlzcGxheUJveCA9ICFsaW5lUnVuLmlzV29y
ZEJyZWFrT3Bwb3J0dW5pdHkoKSAmJiAhbGluZVJ1bi5pc0lubGluZUJveEVuZCgpOworICAgICAg
ICAgICAgaWYgKCFuZWVkc0Rpc3BsYXlCb3gpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIGF1dG8gdmlzdWFsUmVjdFJlbGF0aXZlVG9Sb290ID0gWyZdKGF1dG8gbG9n
aWNhbFJlY3QpIHsKKyAgICAgICAgICAgICAgICBsb2dpY2FsUmVjdC5zZXRMZWZ0KGNvbnRlbnRS
aWdodEluVmlzdWFsT3JkZXIpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmVCeShs
aW5lQm94TG9naWNhbFRvcExlZnQpOworICAgICAgICAgICAgICAgIHJldHVybiBsb2dpY2FsUmVj
dDsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGF1dG8gcGFyZW50RGlzcGxheUJveE5v
ZGVJbmRleCA9IGVuc3VyZURpc3BsYXlCb3hGb3JDb250YWluZXIobGF5b3V0Qm94LnBhcmVudCgp
LCBkaXNwbGF5Qm94VHJlZSwgYW5jZXN0b3JTdGFjaywgYm94ZXMpOworICAgICAgICAgICAgaWYg
KGxpbmVSdW4uaXNUZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHZpc3VhbFJlY3QgPSB2
aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QobGluZUJveC5sb2dpY2FsUmVjdEZvclRleHRSdW4obGlu
ZVJ1bikpOworICAgICAgICAgICAgICAgIGFwcGVuZFRleHREaXNwbGF5Qm94KGxpbmVSdW4sIHZp
c3VhbFJlY3QsIGJveGVzKTsKKyAgICAgICAgICAgICAgICBjb250ZW50UmlnaHRJblZpc3VhbE9y
ZGVyICs9IHZpc3VhbFJlY3Qud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBkaXNwbGF5Qm94VHJl
ZS5hcHBlbmQocGFyZW50RGlzcGxheUJveE5vZGVJbmRleCwgYm94ZXMuc2l6ZSgpIC0gMSk7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
bGluZVJ1bi5pc1NvZnRMaW5lQnJlYWsoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghdmlz
dWFsUmVjdFJlbGF0aXZlVG9Sb290KGxpbmVCb3gubG9naWNhbFJlY3RGb3JUZXh0UnVuKGxpbmVS
dW4pKS53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRTb2Z0TGluZUJyZWFrRGlzcGxh
eUJveChsaW5lUnVuLCB2aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QobGluZUJveC5sb2dpY2FsUmVj
dEZvclRleHRSdW4obGluZVJ1bikpLCBib3hlcyk7CisgICAgICAgICAgICAgICAgZGlzcGxheUJv
eFRyZWUuYXBwZW5kKHBhcmVudERpc3BsYXlCb3hOb2RlSW5kZXgsIGJveGVzLnNpemUoKSAtIDEp
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGxpbmVSdW4uaXNIYXJkTGluZUJyZWFrKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
IXZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdChsaW5lQm94LmxvZ2ljYWxSZWN0Rm9yTGluZUJyZWFr
Qm94KGxheW91dEJveCkpLndpZHRoKCkpOworICAgICAgICAgICAgICAgIGFwcGVuZEhhcmRMaW5l
QnJlYWtEaXNwbGF5Qm94KGxpbmVSdW4sIHZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdChsaW5lQm94
LmxvZ2ljYWxSZWN0Rm9yTGluZUJyZWFrQm94KGxheW91dEJveCkpLCBib3hlcyk7CisgICAgICAg
ICAgICAgICAgZGlzcGxheUJveFRyZWUuYXBwZW5kKHBhcmVudERpc3BsYXlCb3hOb2RlSW5kZXgs
IGJveGVzLnNpemUoKSAtIDEpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGxpbmVSdW4uaXNCb3goKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkobGF5b3V0
Qm94KTsKKyAgICAgICAgICAgICAgICBhdXRvIHZpc3VhbFJlY3QgPSB2aXN1YWxSZWN0UmVsYXRp
dmVUb1Jvb3QobGluZUJveC5sb2dpY2FsQm9yZGVyQm94Rm9yQXRvbWljSW5saW5lTGV2ZWxCb3go
bGF5b3V0Qm94LCBib3hHZW9tZXRyeSkpOworCisgICAgICAgICAgICAgICAgYXV0byBpc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uID0gbGF5b3V0Qm94LnBhcmVudCgpLnN0eWxlKCkuaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpOworICAgICAgICAgICAgICAgIGF1dG8gYm94TWFyZ2luTGVmdCA9IG1hcmdp
bkxlZnQoYm94R2VvbWV0cnksIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pOworICAgICAgICAgICAg
ICAgIHZpc3VhbFJlY3QubW92ZUhvcml6b250YWxseShib3hNYXJnaW5MZWZ0KTsKKyAgICAgICAg
ICAgICAgICBhcHBlbmRBdG9taWNJbmxpbmVMZXZlbERpc3BsYXlCb3gobGluZVJ1biwgdmlzdWFs
UmVjdCwgYm94ZXMpOworICAgICAgICAgICAgICAgIGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIg
Kz0gYm94TWFyZ2luTGVmdCArIHZpc3VhbFJlY3Qud2lkdGgoKSArIG1hcmdpblJpZ2h0KGJveEdl
b21ldHJ5LCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBkaXNwbGF5
Qm94VHJlZS5hcHBlbmQocGFyZW50RGlzcGxheUJveE5vZGVJbmRleCwgYm94ZXMuc2l6ZSgpIC0g
MSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAobGluZVJ1bi5pc0lubGluZUJveFN0YXJ0KCkgfHwgbGluZVJ1bi5pc0xpbmVTcGFubmlu
Z0lubGluZUJveFN0YXJ0KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hpbGUgd2Ug
c2hvdWxkIG9ubHkgZ2V0IGhlcmUgd2l0aCBlbXB0eSBpbmxpbmUgYm94ZXMsIHRoZXJlIGFyZQor
ICAgICAgICAgICAgICAgIC8vIHNvbWUgY2FzZXMgd2hlcmUgdGhlIGlubGluZSBib3ggaGFzIHNv
bWUgY29udGVudCBvbiB0aGUgcGFyYWdyYXBoIGxldmVsIChhdCBiaWRpIHNwbGl0KSBidXQgbGlu
ZSBicmVha2luZyByZW5kZXJzIGl0IGVtcHR5CisgICAgICAgICAgICAgICAgLy8gb3IgdGhlaXIg
Y29udGVudCBpcyBjb21wbGV0ZWx5IGNvbGxhcHNlZC4KKyAgICAgICAgICAgICAgICAvLyBTdWNo
IGlubGluZSBib3hlcyBzaG91bGQgYWxzbyBiZSBoYW5kbGVkIGhlcmUuCisgICAgICAgICAgICAg
ICAgYXBwZW5kSW5saW5lRGlzcGxheUJveEF0QmlkaUJvdW5kYXJ5KGxheW91dEJveCwgYm94ZXMp
OworICAgICAgICAgICAgICAgIGNyZWF0ZWREaXNwbGF5Qm94Tm9kZUZvckNvbnRhaW5lckJveEFu
ZFB1c2hUb0FuY2VzdG9yU3RhY2soZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLCBi
b3hlcy5zaXplKCkgLSAxLCBwYXJlbnREaXNwbGF5Qm94Tm9kZUluZGV4LCBkaXNwbGF5Qm94VHJl
ZSwgYW5jZXN0b3JTdGFjayk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH07
CisgICAgY3JlYXRlRGlzcGxheUJveGVzSW5WaXN1YWxPcmRlcigpOworCisgICAgaWYgKGRpc3Bs
YXlCb3hUcmVlLmhhc0lubGluZUJveCgpKSB7CisgICAgICAgIElzRmlyc3RMYXN0SW5kZXhlc01h
cCBpc0ZpcnN0TGFzdEluZGV4ZXNNYXA7CisgICAgICAgIGF1dG8gY29tcHV0ZUlzRmlyc3RJc0xh
c3RCb3ggPSBbJl0geworICAgICAgICAgICAgQVNTRVJUKGJveGVzWzBdLmlzUm9vdElubGluZUJv
eCgpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMTsgaW5kZXggPCBib3hlcy5z
aXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWJveGVzW2luZGV4XS5pc05v
blJvb3RJbmxpbmVCb3goKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gYm94ZXNbaW5kZXhdLmxheW91dEJveCgpOworICAg
ICAgICAgICAgICAgIGF1dG8gaXNGaXJzdEJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JM
YXlvdXRCb3gobGF5b3V0Qm94KS5pc0ZpcnN0Qm94KCk7CisgICAgICAgICAgICAgICAgYXV0byBp
c0xhc3RCb3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCku
aXNMYXN0Qm94KCk7CisgICAgICAgICAgICAgICAgaWYgKCFpc0ZpcnN0Qm94ICYmICFpc0xhc3RC
b3gpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChp
c0ZpcnN0Qm94KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaXNGaXJzdExhc3RJbmRleGVz
ID0gaXNGaXJzdExhc3RJbmRleGVzTWFwLmdldCgmbGF5b3V0Qm94KTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpc0ZpcnN0TGFzdEluZGV4ZXMuZmlyc3QgfHwgaXNMYXN0Qm94KQorICAgICAg
ICAgICAgICAgICAgICAgICAgaXNGaXJzdExhc3RJbmRleGVzTWFwLnNldCgmbGF5b3V0Qm94LCBJ
c0ZpcnN0TGFzdEluZGV4IHsgaXNGaXJzdExhc3RJbmRleGVzLmZpcnN0LnZhbHVlX29yKGluZGV4
KSwgaXNMYXN0Qm94ID8gaW5kZXggOiBpc0ZpcnN0TGFzdEluZGV4ZXMubGFzdCB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChpc0xhc3RCb3gpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0ZpcnN0
Qm94KTsKKyAgICAgICAgICAgICAgICAgICAgaXNGaXJzdExhc3RJbmRleGVzTWFwLnNldCgmbGF5
b3V0Qm94LCBJc0ZpcnN0TGFzdEluZGV4IHsgeyB9LCBpbmRleCB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9OworICAgICAgICBjb21wdXRlSXNGaXJzdElzTGFzdEJveCgpOworCisgICAgICAgIGF1dG8g
YWRqdXN0VmlzdWFsR2VvbWV0cnlXaXRoSW5saW5lQm94ZXMgPSBbJl0geworICAgICAgICAgICAg
YXV0byBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyID0gbGluZUJveExvZ2ljYWxUb3BMZWZ0Lngo
KSArIGNvbnRlbnRTdGFydEluVmlzdWFsT3JkZXI7CisKKyAgICAgICAgICAgIGZvciAoYXV0byBj
aGlsZERpc3BsYXlCb3hOb2RlSW5kZXggOiBkaXNwbGF5Qm94VHJlZS5yb290KCkuY2hpbGRyZW4p
CisgICAgICAgICAgICAgICAgYWRqdXN0VmlzdWFsR2VvbWV0cnlGb3JEaXNwbGF5Qm94KGNoaWxk
RGlzcGxheUJveE5vZGVJbmRleCwgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciwgbGluZUJveExv
Z2ljYWxUb3BMZWZ0LnkoKSwgZGlzcGxheUJveFRyZWUsIGJveGVzLCBsaW5lQm94LCBpc0ZpcnN0
TGFzdEluZGV4ZXNNYXApOworICAgICAgICB9OworICAgICAgICBhZGp1c3RWaXN1YWxHZW9tZXRy
eVdpdGhJbmxpbmVCb3hlcygpOworICAgIH0KK30KKwordm9pZCBJbmxpbmVEaXNwbGF5Q29udGVu
dEJ1aWxkZXI6OnByb2Nlc3NPdmVyZmxvd25SdW5zRm9yRWxsaXBzaXMoRGlzcGxheUJveGVzJiBi
b3hlcywgSW5saW5lTGF5b3V0VW5pdCBsaW5lQm94TG9naWNhbFJpZ2h0KQoreworICAgIGlmIChy
b290KCkuc3R5bGUoKS50ZXh0T3ZlcmZsb3coKSAhPSBUZXh0T3ZlcmZsb3c6OkVsbGlwc2lzKQor
ICAgICAgICByZXR1cm47CisgICAgYXV0byYgcm9vdElubGluZUJveCA9IGJveGVzWzBdOworICAg
IEFTU0VSVChyb290SW5saW5lQm94LmlzUm9vdElubGluZUJveCgpKTsKKworICAgIGF1dG8gcm9v
dElubGluZUJveFJlY3QgPSByb290SW5saW5lQm94LnJlY3QoKTsKKyAgICBpZiAocm9vdElubGlu
ZUJveFJlY3QucmlnaHQoKSA8PSBsaW5lQm94TG9naWNhbFJpZ2h0KSB7CisgICAgICAgIEFTU0VS
VChib3hlcy5sYXN0KCkucmlnaHQoKSA8PSBsaW5lQm94TG9naWNhbFJpZ2h0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgQXRvbVN0cmluZz4gZWxsaXBzaXNTdHIoJmhvcml6b250YWxFbGxpcHNpcywgMSk7CisgICAg
YXV0byBlbGxpcHNpc1J1biA9IFdlYkNvcmU6OlRleHRSdW4geyBlbGxpcHNpc1N0ci0+c3RyaW5n
KCkgfTsKKyAgICBhdXRvIGVsbGlwc2lzV2lkdGggPSAhbV9saW5lSW5kZXggPyByb290KCkuZmly
c3RMaW5lU3R5bGUoKS5mb250Q2FzY2FkZSgpLndpZHRoKGVsbGlwc2lzUnVuKSA6IHJvb3QoKS5z
dHlsZSgpLmZvbnRDYXNjYWRlKCkud2lkdGgoZWxsaXBzaXNSdW4pOworICAgIGF1dG8gZmlyc3RU
cnVuY2F0ZWRCb3hJbmRleCA9IGJveGVzLnNpemUoKTsKKworICAgIGZvciAoYXV0byBpbmRleCA9
IGJveGVzLnNpemUoKTsgaW5kZXgtLTspIHsKKyAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGJv
eGVzW2luZGV4XTsKKworICAgICAgICBpZiAoZGlzcGxheUJveC5sZWZ0KCkgPj0gbGluZUJveExv
Z2ljYWxSaWdodCkgeworICAgICAgICAgICAgLy8gRnVsbHkgb3ZlcmZsb3duIGJveGVzIGFyZSBj
b2xsYXBzZWQuCisgICAgICAgICAgICBkaXNwbGF5Qm94LnRydW5jYXRlKCk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGtlZXAgdHJ1bmNhdGluZyBj
b250ZW50IHVudGlsIGFmdGVyIHdlIGNhbiBhY2NvbW1vZGF0ZSB0aGUgZWxsaXBzaXMgY29udGVu
dAorICAgICAgICAvLyAxLiBmdWxseSB0cnVuY2F0ZSBpbiBjYXNlIG9mIGlubGluZSBsZXZlbCBi
b3hlcyAoaWUgbm9uLXRleHQgY29udGVudCkgb3IgaWYgZWxsaXBzaXMgY29udGVudCBpcyB3aWRl
ciB0aGFuIHRoZSBvdmVyZmxvd2luZyBvbmUuCisgICAgICAgIC8vIDIuIHBhcnRpYWxseSB0cnVu
Y2F0ZWQgdG8gbWFrZSByb29tIGZvciB0aGUgZWxsaXBzaXMgYm94LgorICAgICAgICBhdXRvIGF2
YWlsYWJsZVJvb21Gb3JFbGxpcHNpcyA9IGxpbmVCb3hMb2dpY2FsUmlnaHQgLSBkaXNwbGF5Qm94
LmxlZnQoKTsKKyAgICAgICAgaWYgKGF2YWlsYWJsZVJvb21Gb3JFbGxpcHNpcyA8PSBlbGxpcHNp
c1dpZHRoKSB7CisgICAgICAgICAgICAvLyBDYW4ndCBhY2NvbW1vZGF0ZSB0aGUgZWxsaXBzaXMg
Y29udGVudCBoZXJlLiBXZSBuZWVkIHRvIHRydW5jYXRlIG5vbi1vdmVyZmxvd2luZyBib3hlcyB0
b28uCisgICAgICAgICAgICBkaXNwbGF5Qm94LnRydW5jYXRlKCk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gdHJ1bmNhdGVkV2lkdGggPSBJbmxpbmVM
YXlvdXRVbml0IHsgfTsKKyAgICAgICAgaWYgKGRpc3BsYXlCb3guaXNUZXh0KCkpIHsKKyAgICAg
ICAgICAgIGF1dG8gdGV4dCA9ICpkaXNwbGF5Qm94LnRleHQoKTsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBDaGVjayBpZiBpdCBuZWVkcyBhZGp1c3RtZW50IGZvciBSVEwgZGlyZWN0aW9uLgorICAg
ICAgICAgICAgdHJ1bmNhdGVkV2lkdGggPSBUZXh0VXRpbDo6YnJlYWtXb3JkKGRvd25jYXN0PElu
bGluZVRleHRCb3g+KGRpc3BsYXlCb3gubGF5b3V0Qm94KCkpLCB0ZXh0LnN0YXJ0KCksIHRleHQu
bGVuZ3RoKCksIGRpc3BsYXlCb3gud2lkdGgoKSwgYXZhaWxhYmxlUm9vbUZvckVsbGlwc2lzIC0g
ZWxsaXBzaXNXaWR0aCwgeyB9LCBkaXNwbGF5Qm94LnN0eWxlKCkuZm9udENhc2NhZGUoKSkubG9n
aWNhbFdpZHRoOworICAgICAgICB9CisgICAgICAgIGRpc3BsYXlCb3gudHJ1bmNhdGUodHJ1bmNh
dGVkV2lkdGgpOworICAgICAgICBmaXJzdFRydW5jYXRlZEJveEluZGV4ID0gaW5kZXg7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBBU1NFUlQoZmlyc3RUcnVuY2F0ZWRCb3hJbmRleCA8IGJv
eGVzLnNpemUoKSk7CisgICAgLy8gQ29sbGFwc2UgdHJ1bmNhdGVkIHJ1bnMuCisgICAgYXV0byBj
b250ZW50UmlnaHQgPSBib3hlc1tmaXJzdFRydW5jYXRlZEJveEluZGV4XS5yaWdodCgpOworICAg
IGZvciAoYXV0byBpbmRleCA9IGZpcnN0VHJ1bmNhdGVkQm94SW5kZXggKyAxOyBpbmRleCA8IGJv
eGVzLnNpemUoKTsgKytpbmRleCkKKyAgICAgICAgYm94ZXNbaW5kZXhdLm1vdmVIb3Jpem9udGFs
bHkoY29udGVudFJpZ2h0IC0gYm94ZXNbaW5kZXhdLmxlZnQoKSk7CisgICAgLy8gQW5kIGFwcGVu
ZCB0aGUgZWxsaXBzaXMgYm94IGFzIHRoZSB0cmFpbGluZyBpdGVtLgorICAgIGF1dG8gZWxsaXNw
aXNCb3hSZWN0ID0gSW5saW5lUmVjdCB7IHJvb3RJbmxpbmVCb3hSZWN0LnRvcCgpLCBjb250ZW50
UmlnaHQsIGVsbGlwc2lzV2lkdGgsIHJvb3RJbmxpbmVCb3hSZWN0LmhlaWdodCgpIH07CisgICAg
Ym94ZXMuYXBwZW5kKHsgbV9saW5lSW5kZXgKKyAgICAgICAgLCBJbmxpbmVEaXNwbGF5OjpCb3g6
OlR5cGU6OkVsbGlwc2lzCisgICAgICAgICwgcm9vdCgpCisgICAgICAgICwgVUJJRElfREVGQVVM
VF9MVFIKKyAgICAgICAgLCBlbGxpc3Bpc0JveFJlY3QKKyAgICAgICAgLCBlbGxpc3Bpc0JveFJl
Y3QKKyAgICAgICAgLCB7IH0KKyAgICAgICAgLCBJbmxpbmVEaXNwbGF5OjpCb3g6OlRleHQgeyAw
LCAxLCBlbGxpcHNpc1N0ci0+c3RyaW5nKCkgfSB9KTsKK30KKwordm9pZCBJbmxpbmVEaXNwbGF5
Q29udGVudEJ1aWxkZXI6OmNvbGxlY3RJbmtPdmVyZmxvd0ZvcklubGluZUJveGVzKERpc3BsYXlC
b3hlcyYgYm94ZXMpCit7CisgICAgaWYgKCFtX2NvbnRlbnRIYXNJbmtPdmVyZmxvdykKKyAgICAg
ICAgcmV0dXJuOworICAgIC8vIFZpc2l0IHRoZSBpbmxpbmUgYm94ZXMgYW5kIHByb3BhZ2F0ZSBp
bmsgb3ZlcmZsb3cgdG8gdGhlaXIgcGFyZW50cyAtZXhjZXB0IHRvIHRoZSByb290IGlubGluZSBi
b3guCisgICAgLy8gKGUuZy4gPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBweDsiPlNtYWxsIGZv
bnQgc2l6ZTxzcGFuIHN0eWxlPSJmb250LXNpemU6IDMwMHB4OyI+TGFyZ2VyIGZvbnQgc2l6ZS4g
VGhpcyBvdmVyZmxvd3MgdGhlIHRvcCBtb3N0IHNwYW4uPC9zcGFuPjwvc3Bhbj4pLgorICAgIGF1
dG8gYWNjdW11bGF0ZWRJbmtPdmVyZmxvd1JlY3QgPSBJbmxpbmVSZWN0IHsgeyB9LCB7IH0gfTsK
KyAgICBmb3IgKHNpemVfdCBpbmRleCA9IGJveGVzLnNpemUoKTsgaW5kZXgtLTspIHsKKyAgICAg
ICAgYXV0byYgZGlzcGxheUJveCA9IGJveGVzW2luZGV4XTsKKworICAgICAgICBhdXRvIG1heUhh
dmVJbmtPdmVyZmxvdyA9IGRpc3BsYXlCb3guaXNBdG9taWNJbmxpbmVMZXZlbEJveCgpIHx8IGRp
c3BsYXlCb3guaXNHZW5lcmljSW5saW5lTGV2ZWxCb3goKSB8fCBkaXNwbGF5Qm94LmlzTm9uUm9v
dElubGluZUJveCgpOworICAgICAgICBpZiAoIW1heUhhdmVJbmtPdmVyZmxvdykKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoZGlzcGxheUJveC5pc05vblJvb3RJbmxpbmVCb3go
KSAmJiAhYWNjdW11bGF0ZWRJbmtPdmVyZmxvd1JlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ZGlzcGxheUJveC5hZGp1c3RJbmtPdmVyZmxvdyhhY2N1bXVsYXRlZElua092ZXJmbG93UmVjdCk7
CisKKyAgICAgICAgLy8gV2Ugc3RvcCBjb2xsZWN0aW5nIGluayBvdmVyZmxvdyBmb3IgYXQgcm9v
dCBpbmxpbmUgYm94IChpLmUuIGRvbid0IGluZmxhdGUgdGhlIHJvb3QgaW5saW5lIGJveCB3aXRo
IHRoZSBpbmxpbmUgY29udGVudCBoZXJlKS4KKyAgICAgICAgYXV0byBwYXJlbnRCb3hJc1Jvb3Qg
PSAmZGlzcGxheUJveC5sYXlvdXRCb3goKS5wYXJlbnQoKSA9PSAmcm9vdCgpOworICAgICAgICBp
ZiAocGFyZW50Qm94SXNSb290KQorICAgICAgICAgICAgYWNjdW11bGF0ZWRJbmtPdmVyZmxvd1Jl
Y3QgPSBJbmxpbmVSZWN0IHsgeyB9LCB7IH0gfTsKKyAgICAgICAgZWxzZSBpZiAoYWNjdW11bGF0
ZWRJbmtPdmVyZmxvd1JlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgYWNjdW11bGF0ZWRJbmtP
dmVyZmxvd1JlY3QgPSBkaXNwbGF5Qm94Lmlua092ZXJmbG93KCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGFjY3VtdWxhdGVkSW5rT3ZlcmZsb3dSZWN0LmV4cGFuZFRvQ29udGFpbihkaXNw
bGF5Qm94Lmlua092ZXJmbG93KCkpOworICAgIH0KK30KKwordm9pZCBJbmxpbmVEaXNwbGF5Q29u
dGVudEJ1aWxkZXI6OmNvbXB1dGVJc0ZpcnN0SXNMYXN0Qm94Rm9ySW5saW5lQ29udGVudChEaXNw
bGF5Qm94ZXMmIGJveGVzKQoreworICAgIEhhc2hNYXA8Y29uc3QgQm94Kiwgc2l6ZV90PiBsYXN0
RGlzcGxheUJveEZvckxheW91dEJveEluZGV4ZXM7CisKKyAgICBBU1NFUlQoYm94ZXNbMF0uaXNS
b290SW5saW5lQm94KCkpOworICAgIGJveGVzWzBdLnNldElzRmlyc3RGb3JMYXlvdXRCb3godHJ1
ZSk7CisgICAgc2l6ZV90IGxhc3RSb290SW5saW5lQm94SW5kZXggPSAwOworCisgICAgZm9yIChz
aXplX3QgaW5kZXggPSAxOyBpbmRleCA8IGJveGVzLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICBhdXRvJiBkaXNwbGF5Qm94ID0gYm94ZXNbaW5kZXhdOworICAgICAgICBpZiAoZGlzcGxheUJv
eC5pc1Jvb3RJbmxpbmVCb3goKSkgeworICAgICAgICAgICAgbGFzdFJvb3RJbmxpbmVCb3hJbmRl
eCA9IGluZGV4OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgYXV0
byYgbGF5b3V0Qm94ID0gZGlzcGxheUJveC5sYXlvdXRCb3goKTsKKyAgICAgICAgaWYgKGxhc3RE
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94SW5kZXhlcy5zZXQoJmxheW91dEJveCwgaW5kZXgpLmlzTmV3
RW50cnkpCisgICAgICAgICAgICBkaXNwbGF5Qm94LnNldElzRmlyc3RGb3JMYXlvdXRCb3godHJ1
ZSk7CisgICAgfQorICAgIGZvciAoYXV0byBpbmRleCA6IGxhc3REaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94SW5kZXhlcy52YWx1ZXMoKSkKKyAgICAgICAgYm94ZXNbaW5kZXhdLnNldElzTGFzdEZvckxh
eW91dEJveCh0cnVlKTsKKworICAgIGJveGVzW2xhc3RSb290SW5saW5lQm94SW5kZXhdLnNldElz
TGFzdEZvckxheW91dEJveCh0cnVlKTsKK30KKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3BsYXkv
SW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9kaXNwbGF5L0lubGluZURpc3BsYXlDb250ZW50QnVpbGRl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmExZmZiYjU4Y2ZlNWQ4MDhjMWE0MTg3ZWI0YjdmODNhNjc0MGZhYWYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2lubGluZS9kaXNwbGF5L0lubGluZURpc3BsYXlDb250ZW50QnVpbGRlci5oCkBAIC0wLDAg
KzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiSW5saW5lTGluZUJ1aWxkZXIuaCIKKyNp
bmNsdWRlICJMYXlvdXRVbml0cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2Ug
TGF5b3V0IHsKKworc3RydWN0IEFuY2VzdG9yU3RhY2s7CitjbGFzcyBDb250YWluZXJCb3g7Citz
dHJ1Y3QgRGlzcGxheUJveFRyZWU7CitzdHJ1Y3QgSXNGaXJzdExhc3RJbmRleDsKK2NsYXNzIElu
bGluZUZvcm1hdHRpbmdTdGF0ZTsKK2NsYXNzIExpbmVCb3g7CisKK2NsYXNzIElubGluZURpc3Bs
YXlDb250ZW50QnVpbGRlciB7CitwdWJsaWM6CisgICAgSW5saW5lRGlzcGxheUNvbnRlbnRCdWls
ZGVyKGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBJbmxpbmVGb3Jt
YXR0aW5nU3RhdGUmKTsKKworICAgIERpc3BsYXlCb3hlcyBidWlsZChjb25zdCBMaW5lQnVpbGRl
cjo6TGluZUNvbnRlbnQmLCBjb25zdCBMaW5lQm94JiwgY29uc3QgSW5saW5lUmVjdCYgbGluZUJv
eExvZ2ljYWxSZWN0LCBjb25zdCBzaXplX3QgbGluZUluZGV4KTsKKworICAgIHN0YXRpYyB2b2lk
IGNvbXB1dGVJc0ZpcnN0SXNMYXN0Qm94Rm9ySW5saW5lQ29udGVudChEaXNwbGF5Qm94ZXMmKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIHByb2Nlc3NOb25CaWRpQ29udGVudChjb25zdCBMaW5lQnVp
bGRlcjo6TGluZUNvbnRlbnQmLCBjb25zdCBMaW5lQm94JiwgY29uc3QgSW5saW5lTGF5b3V0UG9p
bnQmIGxpbmVCb3hMb2dpY2FsVG9wTGVmdCwgRGlzcGxheUJveGVzJik7CisgICAgdm9pZCBwcm9j
ZXNzQmlkaUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiwgY29uc3QgTGlu
ZUJveCYsIGNvbnN0IElubGluZUxheW91dFBvaW50JiBsaW5lQm94TG9naWNhbFRvcExlZnQsIERp
c3BsYXlCb3hlcyYpOworICAgIHZvaWQgcHJvY2Vzc092ZXJmbG93blJ1bnNGb3JFbGxpcHNpcyhE
aXNwbGF5Qm94ZXMmLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVCb3hMb2dpY2FsUmlnaHQpOworICAg
IHZvaWQgY29sbGVjdElua092ZXJmbG93Rm9ySW5saW5lQm94ZXMoRGlzcGxheUJveGVzJik7CisK
KyAgICB2b2lkIGFwcGVuZFRleHREaXNwbGF5Qm94KGNvbnN0IExpbmU6OlJ1biYsIGNvbnN0IElu
bGluZVJlY3QmLCBEaXNwbGF5Qm94ZXMmKTsKKyAgICB2b2lkIGFwcGVuZFNvZnRMaW5lQnJlYWtE
aXNwbGF5Qm94KGNvbnN0IExpbmU6OlJ1biYsIGNvbnN0IElubGluZVJlY3QmLCBEaXNwbGF5Qm94
ZXMmKTsKKyAgICB2b2lkIGFwcGVuZEhhcmRMaW5lQnJlYWtEaXNwbGF5Qm94KGNvbnN0IExpbmU6
OlJ1biYsIGNvbnN0IElubGluZVJlY3QmLCBEaXNwbGF5Qm94ZXMmKTsKKyAgICB2b2lkIGFwcGVu
ZEF0b21pY0lubGluZUxldmVsRGlzcGxheUJveChjb25zdCBMaW5lOjpSdW4mLCBjb25zdCBJbmxp
bmVSZWN0JiAsIERpc3BsYXlCb3hlcyYpOworICAgIHZvaWQgYXBwZW5kSW5saW5lQm94RGlzcGxh
eUJveChjb25zdCBMaW5lOjpSdW4mLCBjb25zdCBJbmxpbmVMZXZlbEJveCYsIGNvbnN0IElubGlu
ZVJlY3QmLCBib29sIGxpbmVoYXNDb250ZW50LCBEaXNwbGF5Qm94ZXMmKTsKKyAgICB2b2lkIGFw
cGVuZFNwYW5uaW5nSW5saW5lQm94RGlzcGxheUJveChjb25zdCBMaW5lOjpSdW4mLCBjb25zdCBJ
bmxpbmVMZXZlbEJveCYsIGNvbnN0IElubGluZVJlY3QmLCBEaXNwbGF5Qm94ZXMmKTsKKyAgICB2
b2lkIGFwcGVuZElubGluZURpc3BsYXlCb3hBdEJpZGlCb3VuZGFyeShjb25zdCBCb3gmLCBEaXNw
bGF5Qm94ZXMmKTsKKworICAgIHZvaWQgc2V0SW5saW5lQm94R2VvbWV0cnkoY29uc3QgQm94Jiwg
Y29uc3QgSW5saW5lUmVjdCYsIGJvb2wgaXNGaXJzdElubGluZUJveEZyYWdtZW50KTsKKyAgICB2
b2lkIGFkanVzdFZpc3VhbEdlb21ldHJ5Rm9yRGlzcGxheUJveChzaXplX3QgZGlzcGxheUJveE5v
ZGVJbmRleCwgSW5saW5lTGF5b3V0VW5pdCYgYWNjdW11bGF0ZWRPZmZzZXQsIElubGluZUxheW91
dFVuaXQgbGluZUJveExvZ2ljYWxUb3AsIGNvbnN0IERpc3BsYXlCb3hUcmVlJiwgRGlzcGxheUJv
eGVzJiwgY29uc3QgTGluZUJveCYsIGNvbnN0IEhhc2hNYXA8Y29uc3QgQm94KiwgSXNGaXJzdExh
c3RJbmRleD4mKTsKKyAgICBzaXplX3QgZW5zdXJlRGlzcGxheUJveEZvckNvbnRhaW5lcihjb25z
dCBDb250YWluZXJCb3gmLCBEaXNwbGF5Qm94VHJlZSYsIEFuY2VzdG9yU3RhY2smLCBEaXNwbGF5
Qm94ZXMmKTsKKworICAgIGNvbnN0IENvbnRhaW5lckJveCYgcm9vdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9ybWF0dGluZ0NvbnRleHRSb290OyB9CisgICAgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBm
b3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdTdGF0ZTsgfSAKKwor
ICAgIGNvbnN0IENvbnRhaW5lckJveCYgbV9mb3JtYXR0aW5nQ29udGV4dFJvb3Q7CisgICAgSW5s
aW5lRm9ybWF0dGluZ1N0YXRlJiBtX2Zvcm1hdHRpbmdTdGF0ZTsKKyAgICBzaXplX3QgbV9saW5l
SW5kZXggeyAwIH07CisgICAgYm9vbCBtX2NvbnRlbnRIYXNJbmtPdmVyZmxvdyB7IGZhbHNlIH07
Cit9OworCit9Cit9CisKKyNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>