<?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>233880</bug_id>
          
          <creation_ts>2021-12-06 10:15:38 -0800</creation_ts>
          <short_desc>[LFC][IFC] Refactor bidi inline box boundary handling</short_desc>
          <delta_ts>2021-12-09 13:05:48 -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>1820649</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-12-06 10:15:38 -0800</bug_when>
    <thetext>remove some code complexity by using more suitable data types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820686</commentid>
    <comment_count>1</comment_count>
      <attachid>446059</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-12-06 11:25:23 -0800</bug_when>
    <thetext>Created attachment 446059
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820712</commentid>
    <comment_count>2</comment_count>
      <attachid>446067</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-12-06 12:11:16 -0800</bug_when>
    <thetext>Created attachment 446067
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821579</commentid>
    <comment_count>3</comment_count>
      <attachid>446373</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-12-08 09:06:27 -0800</bug_when>
    <thetext>Created attachment 446373
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822135</commentid>
    <comment_count>4</comment_count>
      <attachid>446373</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-12-09 08:17:05 -0800</bug_when>
    <thetext>Comment on attachment 446373
Patch

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

&gt; Source/WebCore/ChangeLog:13
&gt; +          the previous ends +-horizontal margins) unless the content is embedded in an inline box (e.g. &lt;span&gt;embedded content&lt;/soan&gt;)

&lt;/span&gt;

&gt; Source/WebCore/layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:345
&gt; +    Vector&lt;std::unique_ptr&lt;DisplayBoxNode&gt;&gt; children;

I think we could reduce heap allocation by making this Vector&lt;DisplayBoxNode&gt; (with some inline capacity perhaps).

&gt; Source/WebCore/layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:371
&gt; +    Vector&lt;DisplayBoxNode*&gt; m_stack;

Then this would probably need to be replaced with some sort of index thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822145</commentid>
    <comment_count>5</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-12-09 08:46:11 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #4)
&gt; Comment on attachment 446373 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=446373&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:13
&gt; &gt; +          the previous ends +-horizontal margins) unless the content is embedded in an inline box (e.g. &lt;span&gt;embedded content&lt;/soan&gt;)
&gt; 
&gt; &lt;/span&gt;
&gt; 
&gt; &gt; Source/WebCore/layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:345
&gt; &gt; +    Vector&lt;std::unique_ptr&lt;DisplayBoxNode&gt;&gt; children;
&gt; 
&gt; I think we could reduce heap allocation by making this
&gt; Vector&lt;DisplayBoxNode&gt; (with some inline capacity perhaps).
&gt; 
&gt; &gt; Source/WebCore/layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp:371
&gt; &gt; +    Vector&lt;DisplayBoxNode*&gt; m_stack;
&gt; 
&gt; Then this would probably need to be replaced with some sort of index thing.
That&apos;s a very good point. I hope it&apos;s ok if I address this in a follow up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822146</commentid>
    <comment_count>6</comment_count>
      <attachid>446555</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-12-09 08:48:28 -0800</bug_when>
    <thetext>Created attachment 446555
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822158</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-09 09:28:12 -0800</bug_when>
    <thetext>Committed r286784 (245025@main): &lt;https://commits.webkit.org/245025@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 446555.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822280</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-09 13:05:48 -0800</bug_when>
    <thetext>&lt;rdar://problem/86287068&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446059</attachid>
            <date>2021-12-06 11:25:23 -0800</date>
            <delta_ts>2021-12-06 12:11:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233880-20211206112522.patch</filename>
            <type>text/plain</type>
            <size>29243</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODYyY2VkZmIwMjk4ODNi
YWFiNmUzZmM1NmY2MzJiYWU5MTljNTk4Mi4uNmMwZTQ0Yzc0YTA3NmQwMjVkNGZmZjExY2Q4MGE5
NDQxZThlOTQ2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIxLTEyLTA2ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXVtJRkNdIFJlZmFjdG9y
IGJpZGkgaW5saW5lIGJveCBib3VuZGFyeSBoYW5kbGluZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzODgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZW1vdmUgc29tZSBjb2RlIGNv
bXBsZXhpdHkgYnkgaW50cm9kdWNpbmcgbW9yZSBzdWl0YWJsZSBkYXRhIHR5cGVzIHRvIGhhbmRs
ZQorICAgICAgICBjb250ZW50IHJhbmdlcyBmb3IgaW5saW5lIGJveGVzLgorCisgICAgICAgIDEu
IFRoZSBmaW5hbCBvdXRwdXQgb2YgdGhlIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlciBpcyBh
IGxpc3Qgb2YgZGlzcGxheSBib3hlcy4KKyAgICAgICAgICBJdCdzIGEgc2ltcGxlICJvbmUgYm94
IHJpZ2h0IGFmdGVyIHRoZSBvdGhlciIgdHlwZSBvZiBzZXR1cCB3aXRoIGNvbnRpbnVvdXMgZ2Vv
bWV0cnkgKGllIG5leHQgYm94IHN0YXJ0cyB3aGVyZQorICAgICAgICAgIHRoZSBwcmV2aW91cyBl
bmRzICstaG9yaXpvbnRhbCBtYXJnaW5zKSB1bmxlc3MgdGhlIGNvbnRlbnQgaXMgZW1iZWRkZWQg
aW4gYW4gaW5saW5lIGJveCAoZS5nLiA8c3Bhbj5lbWJlZGRlZCBjb250ZW50PC9zb2FuPikKKyAg
ICAgICAgICBJbmxpbmUgYm94IHR5cGUgb2YgZGlzcGxheSBib3hlcyBlbmNsb3NlIGFsbCB0aGVp
ciBkZXNjZW5kYW50IGNvbnRlbnQuCisgICAgICAgICAgTm9ybWFsbHkgd2hlbiB0aGUgbG9naWNh
bCBvcmRlciA9PSB2aXN1YWwgb3JkZXIgKHVuaWRpcmVjdGlvbmFsIGNvbnRlbnQpLCB0aGUKKyAg
ICAgICAgICBkZXNjZW5kYW50IGNvbnRlbnQgZW5kcyByaWdodCBiZWZvcmUgdGhlICJpbmxpbmUg
Ym94IGVuZCIgbWFyayAoPC9zcGFuPikuIAorICAgICAgICAgIEl0IG1ha2VzIGl0IGVhc3kgdG8g
Y29tcHV0ZSB0aGUgcmlnaHQgZWRnZS9lbmNsb3Npbmcgd2lkdGggZm9yIHRoZSBpbmxpbmUgYm94
IHR5cGUgb2YgZGlzcGxheSBib3hlcy4KKyAgICAgICAgMi4gSG93ZXZlciB0aGUgdmlzdWFsIG9y
ZGVyIG9mIHRoZSBiaWRpIGNvbnRlbnQgbWFrZXMgdGhlICJsZXQncyB1c2UgdGhlIGlubGluZSBi
b3ggZW5kIG1hcmsiIGxvZ2ljIHVudXNhYmxlIGFzCisgICAgICAgICAgd2UgbWF5IHNlZSB0aGUg
ImlubGluZSBib3ggZW5kIiBtYXJrIGV2ZW4gYmVmb3JlIHdlIGNvbWUgYWNyb3NzIGFueSBkZXNj
ZW5kYW50IGNvbnRlbnQKKyAgICAgICAgICAodGhlcmUgYXJlIG90aGVyIHR5cGVzIG9mIGNvbmZ1
c2lvbnMgd2l0aCByYW5kb20gb3JkZXJpbmcpLgorICAgICAgICAzLiBXb3JraW5nIHdpdGggYSBs
aXN0IHdoZW4gdGhlIGNvbnRlbnQgY29tZXMgaW4gYSBuZXN0ZWQgZmxhdm9yIG1heSBpbnRyb2R1
Y2Ugc29tZSBjb21wbGV4aXR5IChlLmcuIG5lZWQgdG8ga2VlcCBjb250ZW50IHJhbmdlcyBhcm91
bmQpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHZlcnkgc2ltcGxlIERpc3Bs
YXlCb3hOb2RlIHR5cGUgd2hpY2gga2VlcHMgdHJhY2sgb2YgdGhlIGRpc3BsYXkgYm94ZXMgaW4g
YSB0cmVlIGZhc2hpb24uCisgICAgICAgIFRoZSBkaXNwbGF5IGJveGVzIGFyZSBzdGlsbCBzdG9y
ZWQgaW4gYSBsaXN0LCB3aGlsZSB0aGlzIG5ld2x5IGludHJvZHVjZWQgRGlzcGxheUJveE5vZGUg
dHJlZSBoZWxwcyB0cmF2ZXJzaW5nCisgICAgICAgIHRoZSBuZXN0ZWQgY29udGVudC4KKyAgICAg
ICAgSXQgaGVscHMgZmluZGluZyBvdXQgdGhlIGluc2VydGlvbiBwb2ludCBhdCB1bmV4cGVjdGVk
IGJpZGkgYm91bmRhcmllcyAoZS5nLiB3aGVuIG5lc3RlZCBjb250ZW50IGZyb20gb3RoZXIgaW5s
aW5lIGJveGVzCisgICAgICAgIHNob3cgdXAgaW4gYSBsb2dpY2FsbHkgdW5yZWxhdGVkIGlubGlu
ZSBib3gpIGFuZCBpdCBpcyBhbHNvIHZlcnkgdmFsdWFibGUgd2hlbiBjb21wdXRpbmcgdmlzdWFs
IGdlb21ldHJpZXMgZm9yIHRob3NlIGVuY2xvc2luZyBkaXNwbGF5IGJveGVzLiAKKworICAgICAg
ICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50
QnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkRpc3BsYXlCb3hOb2RlOjpE
aXNwbGF5Qm94Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkRpc3BsYXlCb3hOb2Rl
OjphcHBlbmRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkFuY2VzdG9yU3RhY2s6
OnVud2luZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkFuY2VzdG9yU3RhY2s6OnB1c2gp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6
OmVuc3VyZURpc3BsYXlCb3hGb3JDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OmFkanVzdFZpc3VhbEdlb21ldHJ5Rm9yQ2hp
bGROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRC
dWlsZGVyOjppbnNlcnRJbmxpbmVCb3hEaXNwbGF5Qm94Rm9yQmlkaUJvdW5kYXJ5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVy
OjphZGp1c3RJbmxpbmVCb3hEaXNwbGF5Qm94Rm9yQmlkaUJvdW5kYXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjpwcm9j
ZXNzQmlkaUNvbnRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OnByb2Nlc3NPdmVyZmxvd25SdW5zRm9yRWxsaXBzaXMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVEaXNwbGF5Q29udGVu
dEJ1aWxkZXI6OmNvbGxlY3RJbmtPdmVyZmxvd0ZvcklubGluZUJveGVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjpjb21w
dXRlSXNGaXJzdElzTGFzdEJveEZvcklubGluZUNvbnRlbnQpOiBEZWxldGVkLgorICAgICAgICAq
IGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50QnVp
bGRlci5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3Bs
YXkvSW5saW5lRGlzcGxheUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRGlzcGxheTo6
Qm94OjpzZXRMb2dpY2FsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVEaXNwbGF5OjpC
b3g6OnNldExvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVEaXNwbGF5OjpC
b3g6OnNldExvZ2ljYWxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZURpc3BsYXk6OkJv
eDo6c2V0SGFzQ29udGVudCk6CisKIDIwMjEtMTItMDYgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRz
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ2xlYW4gdXAgdmlydHVhbCBtZXRob2RzIG9uIEFuaW1h
dGlvbkVmZmVjdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9pbmxpbmUvSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250
ZW50QnVpbGRlci5jcHAKaW5kZXggNjk3YWUyODliM2QxZTU4NGU5NzNkNmI5ZTkwNzIwNzZkM2Mx
MjI3Yy4uZmM5NzMwM2JjMjU0OGNlYTg4OWEwZWUxYWYxOThhOTI1OGNjMzRmMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5l
RGlzcGxheUNvbnRlbnRCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwCkBA
IC0yNzUsMzUgKzI3NSw2IEBAIHZvaWQgSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjphcHBl
bmRTcGFubmluZ0lubGluZUJveERpc3BsYXlCb3goY29uc3QgTGluZTo6CiAgICAgc2V0SW5saW5l
Qm94R2VvbWV0cnkobGF5b3V0Qm94LCBpbmxpbmVCb3hCb3JkZXJCb3gsIGZhbHNlKTsKIH0KIAot
dm9pZCBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6Omluc2VydElubGluZUJveERpc3BsYXlC
b3hGb3JCaWRpQm91bmRhcnkoY29uc3QgSW5saW5lTGV2ZWxCb3gmIGlubGluZUJveCwgY29uc3Qg
SW5saW5lUmVjdCYgaW5saW5lQm94UmVjdCwgYm9vbCBpc0ZpcnN0SW5saW5lQm94RnJhZ21lbnQs
IHNpemVfdCBpbnNlcnRpb25Qb2ludCwgRGlzcGxheUJveGVzJiBib3hlcykKLXsKLSAgICBBU1NF
UlQoaW5saW5lQm94LmlzSW5saW5lQm94KCkpOwotCi0gICAgYXV0byBpc0ZpcnN0TGFzdEJveCA9
IE9wdGlvblNldDxJbmxpbmVEaXNwbGF5OjpCb3g6OlBvc2l0aW9uV2l0aGluSW5saW5lTGV2ZWxC
b3g+IHsgfTsKLSAgICBpZiAoaW5saW5lQm94LmlzRmlyc3RCb3goKSAmJiBpc0ZpcnN0SW5saW5l
Qm94RnJhZ21lbnQpCi0gICAgICAgIGlzRmlyc3RMYXN0Qm94LmFkZCh7IElubGluZURpc3BsYXk6
OkJveDo6UG9zaXRpb25XaXRoaW5JbmxpbmVMZXZlbEJveDo6Rmlyc3QgfSk7Ci0gICAgaWYgKGlu
bGluZUJveC5pc0xhc3RCb3goKSkKLSAgICAgICAgaXNGaXJzdExhc3RCb3guYWRkKHsgSW5saW5l
RGlzcGxheTo6Qm94OjpQb3NpdGlvbldpdGhpbklubGluZUxldmVsQm94OjpMYXN0IH0pOwotCi0g
ICAgLy8gRklYTUU6IENvbXB1dGUgaW5rIG92ZXJmbG93LgotICAgIGJveGVzLmluc2VydChpbnNl
cnRpb25Qb2ludCwgeyBtX2xpbmVJbmRleAotICAgICAgICAsIElubGluZURpc3BsYXk6OkJveDo6
VHlwZTo6Tm9uUm9vdElubGluZUJveAotICAgICAgICAsIGlubGluZUJveC5sYXlvdXRCb3goKQot
ICAgICAgICAsIFVCSURJX0RFRkFVTFRfTFRSCi0gICAgICAgICwgaW5saW5lQm94UmVjdAotICAg
ICAgICAsIGlubGluZUJveFJlY3QKLSAgICAgICAgLCB7IH0KLSAgICAgICAgLCB7IH0KLSAgICAg
ICAgLCB0cnVlCi0gICAgICAgICwgaXNGaXJzdExhc3RCb3ggfSk7Ci19Ci0KLXZvaWQgSW5saW5l
RGlzcGxheUNvbnRlbnRCdWlsZGVyOjphZGp1c3RJbmxpbmVCb3hEaXNwbGF5Qm94Rm9yQmlkaUJv
dW5kYXJ5KElubGluZURpc3BsYXk6OkJveCYgZGlzcGxheUJveCwgY29uc3QgSW5saW5lUmVjdCYg
aW5saW5lQm94UmVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZGlzcGxheUJveCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGlubGluZUJveFJlY3QpOwotfQotCiB2b2lkIElubGluZURpc3BsYXlDb250ZW50
QnVpbGRlcjo6cHJvY2Vzc05vbkJpZGlDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29u
dGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IElubGluZUxh
eW91dFBvaW50JiBsaW5lQm94TG9naWNhbFRvcExlZnQsIERpc3BsYXlCb3hlcyYgYm94ZXMpCiB7
CiAgICAgLy8gQ3JlYXRlIHRoZSBpbmxpbmUgYm94ZXMgb24gdGhlIGN1cnJlbnQgbGluZS4gVGhp
cyBpcyBtb3N0bHkgdGV4dCBhbmQgYXRvbWljIGlubGluZSBib3hlcy4KQEAgLTM1OCwzMSArMzI5
LDE0MyBAQCB2b2lkIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlcjo6cHJvY2Vzc05vbkJpZGlD
b250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQwogICAgIH0KIH0KIAorc3RydWN0IERpc3Bs
YXlCb3hOb2RlIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgRGlz
cGxheUJveE5vZGUoKSA9IGRlZmF1bHQ7CisgICAgRGlzcGxheUJveE5vZGUoc2l6ZV90IGluZGV4
LCBEaXNwbGF5Qm94Tm9kZSogcGFyZW50KQorICAgICAgICA6IGluZGV4KGluZGV4KQorICAgICAg
ICAsIHBhcmVudChwYXJlbnQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgdm9pZCBhcHBl
bmRDaGlsZChzaXplX3QgY2hpbGRJbmRleCkgeyBjaGlsZHJlbi5hcHBlbmQobWFrZVVuaXF1ZTxE
aXNwbGF5Qm94Tm9kZT4oY2hpbGRJbmRleCwgdGhpcykpOyB9CisKKyAgICBzaXplX3QgaW5kZXgg
eyAwIH07CisgICAgRGlzcGxheUJveE5vZGUqIHBhcmVudCB7IG51bGxwdHIgfTsKKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPERpc3BsYXlCb3hOb2RlPj4gY2hpbGRyZW47Cit9OworCitzdHJ1
Y3QgQW5jZXN0b3JTdGFjayB7CisgICAgRGlzcGxheUJveE5vZGUqIHVud2luZChjb25zdCBDb250
YWluZXJCb3gmIGNvbnRhaW5lckJveCkKKyAgICB7CisgICAgICAgIC8vIFVud2luZCB0aGUgc3Rh
Y2sgYWxsIHRoZSB3YXkgdG8gY29udGFpbmVyIGJveC4KKyAgICAgICAgaWYgKCFtX3NldC5jb250
YWlucygmY29udGFpbmVyQm94KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICB3aGlsZSAobV9zZXQubGFzdCgpICE9ICZjb250YWluZXJCb3gpIHsKKyAgICAgICAgICAgIG1f
c3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgbV9zZXQucmVtb3ZlTGFzdCgpOworICAg
ICAgICB9CisgICAgICAgIC8vIFJvb3QgaXMgYWx3YXlzIGEgY29tbW9uIGFuY2VzdG9yLgorICAg
ICAgICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIG1fc3RhY2su
bGFzdCgpOworICAgIH0KKworICAgIHZvaWQgcHVzaChEaXNwbGF5Qm94Tm9kZSYgZGlzcGxheUJv
eE5vZGUsIGNvbnN0IENvbnRhaW5lckJveCYgY29udGFpbmVyQm94KQorICAgIHsKKyAgICAgICAg
bV9zdGFjay5hcHBlbmQoJmRpc3BsYXlCb3hOb2RlKTsKKyAgICAgICAgQVNTRVJUKCFtX3NldC5j
b250YWlucygmY29udGFpbmVyQm94KSk7CisgICAgICAgIG1fc2V0LmFkZCgmY29udGFpbmVyQm94
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPERpc3BsYXlCb3hOb2RlKj4gbV9zdGFj
azsKKyAgICBMaXN0SGFzaFNldDxjb25zdCBDb250YWluZXJCb3gqPiBtX3NldDsKK307CisKK0Rp
c3BsYXlCb3hOb2RlJiBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OmVuc3VyZURpc3BsYXlC
b3hGb3JDb250YWluZXIoY29uc3QgQ29udGFpbmVyQm94JiBjb250YWluZXJCb3gsIEFuY2VzdG9y
U3RhY2smIGFuY2VzdG9yU3RhY2ssIERpc3BsYXlCb3hlcyYgYm94ZXMpCit7CisgICAgQVNTRVJU
KGNvbnRhaW5lckJveC5pc0lubGluZUJveCgpIHx8ICZjb250YWluZXJCb3ggPT0gJnJvb3QoKSk7
CisgICAgaWYgKGF1dG8qIGxvd2VzdENvbW1vbkFuY2VzdG9yID0gYW5jZXN0b3JTdGFjay51bndp
bmQoY29udGFpbmVyQm94KSkKKyAgICAgICAgcmV0dXJuICpsb3dlc3RDb21tb25BbmNlc3RvcjsK
KyAgICBhdXRvJiBlbmNsb3NpbmdEaXNwbGF5Qm94Tm9kZUZvckNvbnRhaW5lciA9IGVuc3VyZURp
c3BsYXlCb3hGb3JDb250YWluZXIoY29udGFpbmVyQm94LnBhcmVudCgpLCBhbmNlc3RvclN0YWNr
LCBib3hlcyk7CisgICAgYm94ZXMuYXBwZW5kKHsgbV9saW5lSW5kZXgsIElubGluZURpc3BsYXk6
OkJveDo6VHlwZTo6Tm9uUm9vdElubGluZUJveCwgY29udGFpbmVyQm94LCBVQklESV9ERUZBVUxU
X0xUUiwgeyB9LCB7IH0sIHsgfSwgeyB9LCB0cnVlLCB7IH0gfSk7CisKKyAgICBlbmNsb3NpbmdE
aXNwbGF5Qm94Tm9kZUZvckNvbnRhaW5lci5hcHBlbmRDaGlsZChib3hlcy5zaXplKCkgLSAxKTsK
KyAgICBhdXRvJiBkaXNwbGF5Qm94Tm9kZUZvckNvbnRhaW5lciA9ICplbmNsb3NpbmdEaXNwbGF5
Qm94Tm9kZUZvckNvbnRhaW5lci5jaGlsZHJlbi5sYXN0KCk7CisgICAgYW5jZXN0b3JTdGFjay5w
dXNoKGRpc3BsYXlCb3hOb2RlRm9yQ29udGFpbmVyLCBjb250YWluZXJCb3gpOworICAgIHJldHVy
biBkaXNwbGF5Qm94Tm9kZUZvckNvbnRhaW5lcjsKK30KKwordm9pZCBJbmxpbmVEaXNwbGF5Q29u
dGVudEJ1aWxkZXI6OmFkanVzdFZpc3VhbEdlb21ldHJ5Rm9yQ2hpbGROb2RlKGNvbnN0IERpc3Bs
YXlCb3hOb2RlJiBkaXNwbGF5Qm94Tm9kZSwgSW5saW5lTGF5b3V0VW5pdCYgY29udGVudFJpZ2h0
SW5WaXN1YWxPcmRlciwgSW5saW5lTGF5b3V0VW5pdCBsaW5lQm94TG9naWNhbFRvcCwgRGlzcGxh
eUJveGVzJiBib3hlcywgY29uc3QgTGluZUJveCYgbGluZUJveCkKK3sKKyAgICAvLyBOb24taW5s
aW5lIGJveCBkaXNwbGF5IGJveGVzIGp1c3QgbmVlZCBhIGhvcml6b250YWwgYWRqdXN0bWVudCB3
aGlsZQorICAgIC8vIGlubGluZSBib3ggdHlwZSBvZiBkaXNwbGF5IGJveGVzIG5lZWQKKyAgICAv
LyAxLiBob3Jpem9udGFsIGFkanVzdG1lbnQgYW5kIG1hcmdpbi9ib3JkZXIvcGFkZGluZyBzdGFy
dCBvZmZzZXR0aW5nIG9uIHRoZSBmaXJzdCBib3gKKyAgICAvLyAyLiByaWdodCBlZGdlIGNvbXB1
dGF0aW9uIGluY2x1ZGluZyBkZXNjZW5kYW50IGNvbnRlbnQgd2lkdGggYW5kIG1hcmdpbi9ib3Jk
ZXIvcGFkZGluZyBlbmQgb2Zmc2V0dGluZyBvbiB0aGUgbGFzdCBib3gKKyAgICBBU1NFUlQoZGlz
cGxheUJveE5vZGUuaW5kZXgpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBib3hlc1tkaXNwbGF5
Qm94Tm9kZS5pbmRleF07CisgICAgYXV0byYgbGF5b3V0Qm94ID0gZGlzcGxheUJveC5sYXlvdXRC
b3goKTsKKworICAgIGlmICghZGlzcGxheUJveC5pc05vblJvb3RJbmxpbmVCb3goKSkgeworICAg
ICAgICBkaXNwbGF5Qm94LnNldExvZ2ljYWxMZWZ0KGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIp
OworICAgICAgICBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyICs9IGRpc3BsYXlCb3gubG9naWNh
bFdpZHRoKCk7CisgICAgICAgIGlmIChkaXNwbGF5Qm94LmlzQXRvbWljSW5saW5lTGV2ZWxCb3go
KSB8fCBkaXNwbGF5Qm94LmlzR2VuZXJpY0lubGluZUxldmVsQm94KCkpCisgICAgICAgICAgICBj
b250ZW50UmlnaHRJblZpc3VhbE9yZGVyICs9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5
KGxheW91dEJveCkubWFyZ2luRW5kKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
dXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJv
eCk7CisgICAgYXV0byBiZWZvcmVJbmxpbmVCb3hDb250ZW50ID0gWyZdIHsKKyAgICAgICAgYXV0
byBsb2dpY2FsUmVjdCA9IGxpbmVCb3gubG9naWNhbEJvcmRlckJveEZvcklubGluZUJveChsYXlv
dXRCb3gsIGJveEdlb21ldHJ5KTsKKyAgICAgICAgYXV0byB2aXN1YWxSZWN0ID0gSW5saW5lUmVj
dCB7IGxpbmVCb3hMb2dpY2FsVG9wICsgbG9naWNhbFJlY3QudG9wKCksIGNvbnRlbnRSaWdodElu
VmlzdWFsT3JkZXIsIHsgfSwgbG9naWNhbFJlY3QuaGVpZ2h0KCkgfTsKKyAgICAgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBpbmsgb3ZlcmZsb3cuCisgICAgICAgIGlmICghZGlzcGxheUJv
eC5pc0ZpcnN0Rm9yTGF5b3V0Qm94KCkpCisgICAgICAgICAgICByZXR1cm4gZGlzcGxheUJveC5z
ZXRMb2dpY2FsUmVjdCh2aXN1YWxSZWN0LCB2aXN1YWxSZWN0KTsKKworICAgICAgICBjb250ZW50
UmlnaHRJblZpc3VhbE9yZGVyICs9IGJveEdlb21ldHJ5Lm1hcmdpblN0YXJ0KCk7CisgICAgICAg
IGF1dG8gdmlzdWFsUmVjdFdpdGhNYXJnaW5TdGFydCA9IElubGluZVJlY3QgeyB2aXN1YWxSZWN0
LnRvcCgpLCBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyLCB2aXN1YWxSZWN0LndpZHRoKCksIHZp
c3VhbFJlY3QuaGVpZ2h0KCkgfTsKKyAgICAgICAgZGlzcGxheUJveC5zZXRMb2dpY2FsUmVjdCh2
aXN1YWxSZWN0V2l0aE1hcmdpblN0YXJ0LCB2aXN1YWxSZWN0V2l0aE1hcmdpblN0YXJ0KTsKKyAg
ICAgICAgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciArPSBib3hHZW9tZXRyeS5ib3JkZXJBbmRQ
YWRkaW5nU3RhcnQoKTsKKyAgICB9OworICAgIGJlZm9yZUlubGluZUJveENvbnRlbnQoKTsKKwor
ICAgIGZvciAoYXV0byYgY2hpbGREaXNwbGF5Qm94Tm9kZSA6IGRpc3BsYXlCb3hOb2RlLmNoaWxk
cmVuKQorICAgICAgICBhZGp1c3RWaXN1YWxHZW9tZXRyeUZvckNoaWxkTm9kZSgqY2hpbGREaXNw
bGF5Qm94Tm9kZSwgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciwgbGluZUJveExvZ2ljYWxUb3As
IGJveGVzLCBsaW5lQm94KTsKKworICAgIGF1dG8gYWZ0ZXJJbmxpbmVCb3hDb250ZW50ID0gWyZd
IHsKKyAgICAgICAgaWYgKCFkaXNwbGF5Qm94LmlzTGFzdEZvckxheW91dEJveCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGRpc3BsYXlCb3guc2V0TG9naWNhbFJpZ2h0KGNvbnRlbnRSaWdodEluVmlz
dWFsT3JkZXIpOworCisgICAgICAgIGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIgKz0gYm94R2Vv
bWV0cnkuYm9yZGVyQW5kUGFkZGluZ0VuZCgpOworICAgICAgICBkaXNwbGF5Qm94LnNldExvZ2lj
YWxSaWdodChjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyKTsKKyAgICAgICAgY29udGVudFJpZ2h0
SW5WaXN1YWxPcmRlciArPSBib3hHZW9tZXRyeS5tYXJnaW5FbmQoKTsKKyAgICB9OworICAgIGFm
dGVySW5saW5lQm94Q29udGVudCgpOworCisgICAgc2V0SW5saW5lQm94R2VvbWV0cnkobGF5b3V0
Qm94LCBkaXNwbGF5Qm94LmxvZ2ljYWxSZWN0KCksIGRpc3BsYXlCb3guaXNGaXJzdEZvckxheW91
dEJveCgpKTsKKyAgICBpZiAobGluZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJveChsYXlv
dXRCb3gpLmhhc0NvbnRlbnQoKSkKKyAgICAgICAgZGlzcGxheUJveC5zZXRIYXNDb250ZW50KCk7
Cit9CisKIHZvaWQgSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjpwcm9jZXNzQmlkaUNvbnRl
bnQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCwgY29uc3QgTGlu
ZUJveCYgbGluZUJveCwgY29uc3QgSW5saW5lTGF5b3V0UG9pbnQmIGxpbmVCb3hMb2dpY2FsVG9w
TGVmdCwgRGlzcGxheUJveGVzJiBib3hlcykKIHsKICAgICBBU1NFUlQobGluZUNvbnRlbnQudmlz
dWFsT3JkZXJMaXN0LnNpemUoKSA9PSBsaW5lQ29udGVudC5ydW5zLnNpemUoKSk7CiAKLSAgICBW
ZWN0b3I8UmFuZ2U8c2l6ZV90Pj4gaW5saW5lQm94UmFuZ2VMaXN0OwotICAgIGF1dG8gbmVlZHNO
b25Sb290SW5saW5lQm94RGlzcGxheUJveCA9IGZhbHNlOwotICAgIGF1dG8gY3JlYXRlRGlzcGxh
eUJveGVzSW5WaXN1YWxPcmRlckZvckNvbnRlbnRSdW5zID0gWyZdIHsKKyAgICBBbmNlc3RvclN0
YWNrIGFuY2VzdG9yU3RhY2s7CisgICAgRGlzcGxheUJveE5vZGUgcm9vdERpc3BsYXlCb3hOb2Rl
ID0geyB9OworICAgIGFuY2VzdG9yU3RhY2sucHVzaChyb290RGlzcGxheUJveE5vZGUsIHJvb3Qo
KSk7CisKKyAgICBhdXRvIGNvbnRlbnRTdGFydEluVmlzdWFsT3JkZXIgPSBJbmxpbmVMYXlvdXRV
bml0IHsgfTsKKyAgICBhdXRvIGNyZWF0ZURpc3BsYXlCb3hlc0luVmlzdWFsT3JkZXIgPSBbJl0g
ewogICAgICAgICBhdXRvIHJvb3RJbmxpbmVCb3hSZWN0ID0gbGluZUJveC5sb2dpY2FsUmVjdEZv
clJvb3RJbmxpbmVCb3goKTsKLSAgICAgICAgYXV0byBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVy
ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CiAgICAgICAgIC8vIEZpcnN0IHZpc3VhbCBydW4ncyBp
bml0aWFsIGNvbnRlbnQgcG9zaXRpb24gZGVwZW5kcyBvbiB0aGUgYmxvY2sncyBpbmxpbmUgZGly
ZWN0aW9uLgogICAgICAgICBpZiAoIXJvb3QoKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdGhlIGJsb2NrIGVuZCBw
b3NpdGlvbiBpbnN0ZWFkIG9mIHRoZSBsaW5lTG9naWNhbFdpZHRoLgotICAgICAgICAgICAgY29u
dGVudFJpZ2h0SW5WaXN1YWxPcmRlciArPSBsaW5lQ29udGVudC5saW5lTG9naWNhbFdpZHRoIC0g
cm9vdElubGluZUJveFJlY3Qud2lkdGgoKTsKKyAgICAgICAgICAgIGNvbnRlbnRTdGFydEluVmlz
dWFsT3JkZXIgKz0gbGluZUNvbnRlbnQubGluZUxvZ2ljYWxXaWR0aCAtIHJvb3RJbmxpbmVCb3hS
ZWN0LndpZHRoKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gQWRqdXN0IHRoZSBjb250ZW50IHN0
YXJ0IHBvc2l0aW9uIHdpdGggdGhlICh0ZXh0KWFsaWdubWVudCBvZmZzZXQgKHJvb3QgaW5saW5l
IGJveCBoYXMgdGhlIGFsaWdubWVudCBvZmZzZXQgYW5kIG5vdCB0aGUgaW5kaXZpZHVhbCBydW5z
KS4KLSAgICAgICAgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciArPSByb290SW5saW5lQm94UmVj
dC5sZWZ0KCk7CisgICAgICAgIGNvbnRlbnRTdGFydEluVmlzdWFsT3JkZXIgKz0gcm9vdElubGlu
ZUJveFJlY3QubGVmdCgpOwogCisgICAgICAgIGF1dG8gY29udGVudFJpZ2h0SW5WaXN1YWxPcmRl
ciA9IGNvbnRlbnRTdGFydEluVmlzdWFsT3JkZXI7CiAgICAgICAgIGF1dG8mIHJ1bnMgPSBsaW5l
Q29udGVudC5ydW5zOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJ1bnMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgICAgIGF1dG8gdmlzdWFsSW5kZXggPSBsaW5lQ29udGVudC52aXN1
YWxPcmRlckxpc3RbaV07CiAgICAgICAgICAgICBhdXRvJiBsaW5lUnVuID0gcnVuc1t2aXN1YWxJ
bmRleF07CisgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxheW91dEJveCgp
OwogCi0gICAgICAgICAgICBhdXRvIGlzQ29udGVudFJ1biA9ICFsaW5lUnVuLmlzSW5saW5lQm94
U3RhcnQoKSAmJiAhbGluZVJ1bi5pc0xpbmVTcGFubmluZ0lubGluZUJveFN0YXJ0KCkgJiYgIWxp
bmVSdW4uaXNJbmxpbmVCb3hFbmQoKTsKKyAgICAgICAgICAgIGF1dG8gaXNDb250ZW50UnVuID0g
IWxpbmVSdW4uaXNJbmxpbmVCb3hTdGFydCgpICYmICFsaW5lUnVuLmlzTGluZVNwYW5uaW5nSW5s
aW5lQm94U3RhcnQoKSAmJiAhbGluZVJ1bi5pc0lubGluZUJveEVuZCgpICYmICFsaW5lUnVuLmlz
V29yZEJyZWFrT3Bwb3J0dW5pdHkoKTsKICAgICAgICAgICAgIGlmICghaXNDb250ZW50UnVuKSB7
Ci0gICAgICAgICAgICAgICAgbmVlZHNOb25Sb290SW5saW5lQm94RGlzcGxheUJveCA9IHRydWU7
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBpbmxpbmUgYm94ZXMg
d2l0aCBubyBjb250ZW50LgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQogCkBAIC0zOTIsMTc1ICs0NzUsNTUgQEAgdm9pZCBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxk
ZXI6OnByb2Nlc3NCaWRpQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnQKICAgICAg
ICAgICAgICAgICByZXR1cm4gbG9naWNhbGxSZWN0OwogICAgICAgICAgICAgfTsKIAorICAgICAg
ICAgICAgYXV0byYgcGFyZW50RGlzcGxheUJveE5vZGUgPSBlbnN1cmVEaXNwbGF5Qm94Rm9yQ29u
dGFpbmVyKGxheW91dEJveC5wYXJlbnQoKSwgYW5jZXN0b3JTdGFjaywgYm94ZXMpOwogICAgICAg
ICAgICAgaWYgKGxpbmVSdW4uaXNUZXh0KCkpIHsKICAgICAgICAgICAgICAgICBhdXRvIHZpc3Vh
bFJlY3QgPSB2aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QobGluZUJveC5sb2dpY2FsUmVjdEZvclRl
eHRSdW4obGluZVJ1bikpOwogICAgICAgICAgICAgICAgIGFwcGVuZFRleHREaXNwbGF5Qm94KGxp
bmVSdW4sIHZpc3VhbFJlY3QsIGJveGVzKTsKICAgICAgICAgICAgICAgICBjb250ZW50UmlnaHRJ
blZpc3VhbE9yZGVyICs9IHZpc3VhbFJlY3Qud2lkdGgoKTsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChsaW5lUnVuLmlzU29mdExpbmVC
cmVhaygpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmVSdW4uaXNTb2Z0TGluZUJyZWFr
KCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIXZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdChs
aW5lQm94LmxvZ2ljYWxSZWN0Rm9yVGV4dFJ1bihsaW5lUnVuKSkud2lkdGgoKSk7CiAgICAgICAg
ICAgICAgICAgYXBwZW5kU29mdExpbmVCcmVha0Rpc3BsYXlCb3gobGluZVJ1biwgdmlzdWFsUmVj
dFJlbGF0aXZlVG9Sb290KGxpbmVCb3gubG9naWNhbFJlY3RGb3JUZXh0UnVuKGxpbmVSdW4pKSwg
Ym94ZXMpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKGxpbmVSdW4uaXNIYXJkTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgICAgICBB
U1NFUlQoIXZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdChsaW5lQm94LmxvZ2ljYWxSZWN0Rm9yTGlu
ZUJyZWFrQm94KGxpbmVSdW4ubGF5b3V0Qm94KCkpKS53aWR0aCgpKTsKLSAgICAgICAgICAgICAg
ICBhcHBlbmRIYXJkTGluZUJyZWFrRGlzcGxheUJveChsaW5lUnVuLCB2aXN1YWxSZWN0UmVsYXRp
dmVUb1Jvb3QobGluZUJveC5sb2dpY2FsUmVjdEZvckxpbmVCcmVha0JveChsaW5lUnVuLmxheW91
dEJveCgpKSksIGJveGVzKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChsaW5lUnVuLmlzQm94KCkpIHsKLSAgICAgICAgICAgICAgICBh
dXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxheW91dEJveCgpOworICAgICAgICAgICAgfSBlbHNl
IGlmIChsaW5lUnVuLmlzSGFyZExpbmVCcmVhaygpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KCF2aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QobGluZUJveC5sb2dpY2FsUmVjdEZvckxpbmVCcmVh
a0JveChsYXlvdXRCb3gpKS53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRIYXJkTGlu
ZUJyZWFrRGlzcGxheUJveChsaW5lUnVuLCB2aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QobGluZUJv
eC5sb2dpY2FsUmVjdEZvckxpbmVCcmVha0JveChsYXlvdXRCb3gpKSwgYm94ZXMpOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChsaW5lUnVuLmlzQm94KCkpIHsKICAgICAgICAgICAgICAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCk7
CiAgICAgICAgICAgICAgICAgYXV0byB2aXN1YWxSZWN0ID0gdmlzdWFsUmVjdFJlbGF0aXZlVG9S
b290KGxpbmVCb3gubG9naWNhbEJvcmRlckJveEZvckF0b21pY0lubGluZUxldmVsQm94KGxheW91
dEJveCwgYm94R2VvbWV0cnkpKTsKICAgICAgICAgICAgICAgICB2aXN1YWxSZWN0Lm1vdmVIb3Jp
em9udGFsbHkoYm94R2VvbWV0cnkubWFyZ2luU3RhcnQoKSk7CiAgICAgICAgICAgICAgICAgYXBw
ZW5kQXRvbWljSW5saW5lTGV2ZWxEaXNwbGF5Qm94KGxpbmVSdW4sIHZpc3VhbFJlY3QsIGJveGVz
KTsKICAgICAgICAgICAgICAgICBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyICs9IGJveEdlb21l
dHJ5Lm1hcmdpblN0YXJ0KCkgKyB2aXN1YWxSZWN0LndpZHRoKCkgKyBib3hHZW9tZXRyeS5tYXJn
aW5FbmQoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIEFTU0VSVChsaW5lUnVuLmlzV29yZEJyZWFrT3Bwb3J0dW5pdHkoKSk7CisgICAgICAg
ICAgICBwYXJlbnREaXNwbGF5Qm94Tm9kZS5hcHBlbmRDaGlsZChib3hlcy5zaXplKCkgLSAxKTsK
ICAgICAgICAgfQogICAgIH07Ci0gICAgY3JlYXRlRGlzcGxheUJveGVzSW5WaXN1YWxPcmRlckZv
ckNvbnRlbnRSdW5zKCk7Ci0KLSAgICBhdXRvIG5lZWRzRGlzcGxheUJveEhvcml6b250YWxBZGp1
c3RtZW50ID0gZmFsc2U7Ci0gICAgYXV0byBjcmVhdGVEaXNwbGF5Qm94ZXNJblZpc3VhbE9yZGVy
Rm9ySW5saW5lQm94ZXMgPSBbJl0gewotICAgICAgICAvLyBWaXN1YWwgb3JkZXIgY291bGQgaW50
cm9kdWNlIGdhcHMgYW5kL29yIGluamVjdCBydW5zIG91dHNpZGUgZnJvbSB0aGUgY3VycmVudCBp
bmxpbmUgYm94IGNvbnRlbnQuCi0gICAgICAgIC8vIEluIHN1Y2ggY2FzZXMsIHdlIG5lZWQgdG8g
ImNsb3NlIiBhbmQgIm9wZW4iIGRpc3BsYXkgYm94ZXMgZm9yIHRoZXNlIGlubGluZSBib3ggZnJh
Z21lbnRzCi0gICAgICAgIC8vIHRvIGFjY29tbW9kYXRlIHRoZSBjdXJyZW50IGNvbnRlbnQuCi0g
ICAgICAgIC8vIFdlIGRvIGl0IGJ5IGZpbmRpbmcgdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Ig
b2YgdGhlIGxhc3QgYW5kIHRoZSBjdXJyZW50IGNvbnRlbnQgZGlzcGxheSBib3hlcyBhbmQKLSAg
ICAgICAgLy8gdHJhdmVyc2UgYm90aCBhbmNlc3RvciBjaGFpbnMgYW5kIGNsb3NlL29wZW4gdGhl
IHBhcmVudCAoaW5saW5lKSBib3hlcy4KLSAgICAgICAgLy8gKG9wZW4gaGVyZSBtZWFucyB0byBj
cmVhdGUgYSBuZXcgZGlzcGxheSBib3gsIHdoaWxlIGNsb3NlIG1lYW5zIHRvIHNpbXBseSBwb3Ag
aXQgb3V0IG9mIHBhcmVudEJveFN0YWNrKS4KLSAgICAgICAgLy8gPGRpdj5hPHNwYW4gaWQ9Zmly
c3Q+YiYjODIzODtnPC9zcGFuPmY8c3BhbiBpZD1zZWNvbmQ+ZSYjODIzNztjPC9zcGFuPmQ8L2Rp
dj4KLSAgICAgICAgLy8gcHJvZHVjZXMgdGhlIGZvbGxvd2luZyBvdXRwdXQgKG5vdGUgdGhlICM4
MjM4OyAjODIzNzsgUlRML0xUUiBjb250cm9sIGNoYXJhY3RlcnMpOgotICAgICAgICAvLyBhYmNk
ZWZnCi0gICAgICAgIC8vIHdpdGggdGhlIGZvbGxvd2luZywgZnJhZ21lbnRlZCBpbmxpbmUgYm94
ZXM6Ci0gICAgICAgIC8vIGFbZmlyc3Qgb3Blbl1iW2ZpcnN0IGNsb3NlXVtzZWNvbmQgb3Blbl1j
W3NlY29uZCBjbG9zZV1kW3NlY29uZCBvcGVuXWVbc2Vjb25kIGNsb3NlXWZbZmlyc3Qgb3Blbl1n
W2ZpcnN0IGNsb3NlXQotICAgICAgICBIYXNoTWFwPGNvbnN0IEJveCosIHNpemVfdD4gaW5saW5l
Qm94RGlzcGxheUJveE1hcDsKLSAgICAgICAgTGlzdEhhc2hTZXQ8Y29uc3QgQm94Kj4gcGFyZW50
Qm94U3RhY2s7Ci0gICAgICAgIHBhcmVudEJveFN0YWNrLmFkZCgmcm9vdCgpKTsKLQotICAgICAg
ICBBU1NFUlQoYm94ZXNbMF0uaXNSb290SW5saW5lQm94KCkpOwotICAgICAgICBmb3IgKHNpemVf
dCBpbmRleCA9IDE7IGluZGV4IDwgYm94ZXMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAg
ICBhdXRvJiBwYXJlbnRCb3ggPSBib3hlc1tpbmRleF0ubGF5b3V0Qm94KCkucGFyZW50KCk7Ci0g
ICAgICAgICAgICBBU1NFUlQocGFyZW50Qm94LmlzSW5saW5lQm94KCkgfHwgJnBhcmVudEJveCA9
PSAmcm9vdCgpKTsKLQotICAgICAgICAgICAgYXV0byBydW5QYXJlbnRJc0N1cnJlbnRJbmxpbmVC
b3ggPSAmcGFyZW50Qm94ID09IHBhcmVudEJveFN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgIGlm
IChydW5QYXJlbnRJc0N1cnJlbnRJbmxpbmVCb3gpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSd2
ZSBnb3QgdGhlIGNvcnJlY3QgaW5saW5lIGJveCBhcyBwYXJlbnQuIE5vdGhpbmcgdG8gZG8gaGVy
ZS4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGF1dG8gcGFyZW50Qm94U3RhY2tFbmQgPSBwYXJlbnRCb3hTdGFjay5lbmQoKTsKLSAgICAgICAg
ICAgIFZlY3Rvcjxjb25zdCBCb3gqPiBpbmxpbmVCb3hOZWVkaW5nRGlzcGxheUJveExpc3Q7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gJnBhcmVudEJveDsgYW5jZXN0b3I7IGFu
Y2VzdG9yID0gJmFuY2VzdG9yLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChh
bmNlc3RvciA9PSAmcm9vdCgpIHx8IGFuY2VzdG9yLT5pc0lubGluZUJveCgpKTsKLSAgICAgICAg
ICAgICAgICBhdXRvIHBhcmVudEJveEl0ZXJhdG9yID0gcGFyZW50Qm94U3RhY2suZmluZChhbmNl
c3Rvcik7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmVudEJveEl0ZXJhdG9yICE9IHBhcmVudEJv
eFN0YWNrRW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGxvd2VzdCBj
b21tb24gYW5jZXN0b3IuCi0gICAgICAgICAgICAgICAgICAgIC8vIExldCdzIHRyYXZlcnNlIGJv
dGggYW5jZXN0b3IgY2hhaW5zIGFuZCBjcmVhdGUvY2xvc2UgZGlzcGxheSBib3hlcyBhcyBuZWVk
ZWQuCi0gICAgICAgICAgICAgICAgICAgIFZlY3Rvcjxjb25zdCBCb3gqPiBpbmxpbmVCb3hGcmFn
bWVudHNUb0Nsb3NlOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSArK3BhcmVu
dEJveEl0ZXJhdG9yOyBpdCAhPSBwYXJlbnRCb3hTdGFja0VuZDsgKytpdCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlubGluZUJveEZyYWdtZW50c1RvQ2xvc2UuYXBwZW5kKCppdCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChhdXRvKiBpbmxpbmVCb3ggOiBtYWtlUmV2ZXJzZWRSYW5n
ZShpbmxpbmVCb3hGcmFnbWVudHNUb0Nsb3NlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGlubGluZUJveC0+aXNJbmxpbmVCb3goKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoaW5saW5lQm94RGlzcGxheUJveE1hcC5jb250YWlucyhpbmxpbmVCb3gpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlubGluZUJveFJhbmdlTGlzdC5hcHBlbmQoeyBpbmxpbmVC
b3hEaXNwbGF5Qm94TWFwLmdldChpbmxpbmVCb3gpLCBpbmRleCB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmVudEJveFN0YWNrLnJlbW92ZShpbmxpbmVCb3gpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IG5ldyBkaXNwbGF5IGJv
eGVzIGZvciBpbmxpbmUgYm94IGZyYWdtZW50cyBvbiBiaWRpIGJvdW5kYXJ5LgotICAgICAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8qIGlubGluZUJveCA6IG1ha2VSZXZlcnNlZFJhbmdlKGlubGlu
ZUJveE5lZWRpbmdEaXNwbGF5Qm94TGlzdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChpbmxpbmVCb3gtPmlzSW5saW5lQm94KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
cGFyZW50Qm94U3RhY2suYWRkKGlubGluZUJveCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG8gY3JlYXRlQW5kSW5zZXJ0RGlzcGxheUJveEZvcklubGluZUJveEZyYWdtZW50ID0gWyZd
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgInBy
ZXZpb3VzIiBkaXNwbGF5IGJveCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGlubGluZSBib3ggaXMgbm90
IHRyYWNrZWQgYXMgdGhlICJsYXN0IGJveCIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBsYXN0RGlzcGxheUJveEZvcklubGluZUJveEluZGV4ID0gaW5saW5lQm94RGlzcGxheUJv
eE1hcC50YWtlKGlubGluZUJveCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBp
c0ZpcnN0RnJhZ21lbnQgPSAhbGFzdERpc3BsYXlCb3hGb3JJbmxpbmVCb3hJbmRleDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRmlyc3RGcmFnbWVudCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm94ZXNbbGFzdERpc3BsYXlCb3hGb3JJbmxpbmVCb3hJbmRl
eF0uc2V0SXNMYXN0Rm9yTGF5b3V0Qm94KGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmxpbmVCb3hEaXNwbGF5Qm94TWFwLnNldChpbmxpbmVCb3gsIGluZGV4KTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0
YXRlKCkuYm94R2VvbWV0cnkoKmlubGluZUJveCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byB2aXN1YWxSZWN0ID0gbGluZUJveC5sb2dpY2FsQm9yZGVyQm94Rm9ySW5saW5lQm94
KCppbmxpbmVCb3gsIGJveEdlb21ldHJ5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBVc2UgdGhlIGN1cnJlbnQgY29udGVudCBsZWZ0IGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3Ig
dGhpcyBkaXNwbGF5IGJveC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXN1YWxSZWN0
LnNldExlZnQoYm94ZXNbaW5kZXhdLmxvZ2ljYWxMZWZ0KCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZpc3VhbFJlY3QubW92ZVZlcnRpY2FsbHkobGluZUJveExvZ2ljYWxUb3BMZWZ0
LnkoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmlzdWFsIHdpZHRoIGlzIG5v
dCB5ZXQga25vd24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzdWFsUmVjdC5zZXRX
aWR0aCh7IH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydElubGluZUJveERp
c3BsYXlCb3hGb3JCaWRpQm91bmRhcnkobGluZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJv
eCgqaW5saW5lQm94KSwgdmlzdWFsUmVjdCwgaXNGaXJzdEZyYWdtZW50LCBpbmRleCwgYm94ZXMp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTmVlZCB0byBwdXNoIHRoZSByZXN0IG9mIHRoZSBjb250ZW50IHdoZW4g
dGhpcyBpbmxpbmUgYm94IGhhcyBtYXJnaW4vYm9yZGVyL3BhZGRpbmcuCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmVlZHNEaXNwbGF5Qm94SG9yaXpvbnRhbEFkanVzdG1lbnQgPSBuZWVk
c0Rpc3BsYXlCb3hIb3Jpem9udGFsQWRqdXN0bWVudAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBib3hHZW9tZXRyeS5ob3Jpem9udGFsQm9yZGVyKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgYm94R2VvbWV0cnkuaG9yaXpvbnRhbFBhZGRpbmcoKS52YWx1
ZV9vcigwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBib3hHZW9tZXRyeS5t
YXJnaW5TdGFydCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGJveEdlb21l
dHJ5Lm1hcmdpbkVuZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZUFuZEluc2VydERpc3BsYXlCb3hGb3JJbmxpbmVCb3hGcmFnbWVu
dCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyByb290IG1heSBub3QgYmUgdGhl
IGxvd2VzdCBidXQgYWx3YXlzIGEgY29tbW9uIGFuY2VzdG9yLgotICAgICAgICAgICAgICAgIEFT
U0VSVChhbmNlc3RvciAhPSAmcm9vdCgpKTsKLSAgICAgICAgICAgICAgICBpbmxpbmVCb3hOZWVk
aW5nRGlzcGxheUJveExpc3QuYXBwZW5kKGFuY2VzdG9yKTsKKyAgICBjcmVhdGVEaXNwbGF5Qm94
ZXNJblZpc3VhbE9yZGVyKCk7CisKKyAgICBpZiAoIXJvb3REaXNwbGF5Qm94Tm9kZS5jaGlsZHJl
bi5pc0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byBjb21wdXRlSXNGaXJzdElzTGFzdEJveCA9IFsm
XSB7CisgICAgICAgICAgICBIYXNoTWFwPGNvbnN0IEJveCosIHNpemVfdD4gbGFzdERpc3BsYXlC
b3hJbmRleGVzOworICAgICAgICAgICAgQVNTRVJUKGJveGVzWzBdLmlzUm9vdElubGluZUJveCgp
KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMTsgaW5kZXggPCBib3hlcy5zaXpl
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gYm94ZXNb
aW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghZGlzcGxheUJveC5pc05vblJvb3RJbmxpbmVC
b3goKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYXV0
byYgbGF5b3V0Qm94ID0gZGlzcGxheUJveC5sYXlvdXRCb3goKTsKKyAgICAgICAgICAgICAgICBp
ZiAobGluZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJveChsYXlvdXRCb3gpLmlzRmlyc3RC
b3goKSAmJiBsYXN0RGlzcGxheUJveEluZGV4ZXMuc2V0KCZsYXlvdXRCb3gsIGluZGV4KS5pc05l
d0VudHJ5KQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Qm94LnNldElzRmlyc3RGb3JMYXlv
dXRCb3godHJ1ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gIkNsb3Nl
IiB0aGUgcmVtYWluaW5nIGlubGluZSBib3hlcyBvbiB0aGUgc3RhY2sgKGV4Y2x1ZGluZyB0aGUg
cm9vdCkuCi0gICAgICAgIHdoaWxlIChwYXJlbnRCb3hTdGFjay5zaXplKCkgPiAxKSB7Ci0gICAg
ICAgICAgICBhdXRvKiBwYXJlbnRJbmxpbmVCb3ggPSBwYXJlbnRCb3hTdGFjay50YWtlTGFzdCgp
OwotICAgICAgICAgICAgQVNTRVJUKGlubGluZUJveERpc3BsYXlCb3hNYXAuY29udGFpbnMocGFy
ZW50SW5saW5lQm94KSk7Ci0gICAgICAgICAgICBpbmxpbmVCb3hSYW5nZUxpc3QuYXBwZW5kKHsg
aW5saW5lQm94RGlzcGxheUJveE1hcC5nZXQocGFyZW50SW5saW5lQm94KSwgYm94ZXMuc2l6ZSgp
IH0pOwotICAgICAgICB9Ci0gICAgfTsKLSAgICBpZiAobmVlZHNOb25Sb290SW5saW5lQm94RGlz
cGxheUJveCkKLSAgICAgICAgY3JlYXRlRGlzcGxheUJveGVzSW5WaXN1YWxPcmRlckZvcklubGlu
ZUJveGVzKCk7Ci0KLSAgICBhdXRvIGFkanVzdFZpc3VhbEdlb21ldHJ5V2l0aElubGluZUJveGVz
ID0gWyZdIHsKLSAgICAgICAgc2l6ZV90IGN1cnJlbnRJbmxpbmVCb3ggPSAwOwotICAgICAgICBh
dXRvIGFjY3VtdWxhdGVkT2Zmc2V0ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0KLSAgICAgICAg
QVNTRVJUKGJveGVzWzBdLmlzUm9vdElubGluZUJveCgpKTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aW5kZXggPSAxOyBpbmRleCA8IGJveGVzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICAgICAg
YXV0byYgZGlzcGxheUJveCA9IGJveGVzW2luZGV4XTsKLSAgICAgICAgICAgIGRpc3BsYXlCb3gu
bW92ZUhvcml6b250YWxseShhY2N1bXVsYXRlZE9mZnNldCk7Ci0KLSAgICAgICAgICAgIHdoaWxl
IChjdXJyZW50SW5saW5lQm94IDwgaW5saW5lQm94UmFuZ2VMaXN0LnNpemUoKSAmJiBpbmRleCA9
PSBpbmxpbmVCb3hSYW5nZUxpc3RbY3VycmVudElubGluZUJveF0uZW5kKCkgLSAxKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gV2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGlubGluZSBib3ggY29udGVu
dC4KLSAgICAgICAgICAgICAgICAvLyBMZXQncyBjb21wdXRlIHRoZSBpbmxpbmUgYm94IHdpZHRo
IGFuZCBvZmZzZXQgdGhlIHJlc3Qgb2YgdGhlIGNvbnRlbnQgd2l0aCBwYWRkaW5nL2JvcmRlci9t
YXJnaW4gZW5kLgotICAgICAgICAgICAgICAgIGF1dG8gaW5saW5lQm94UmFuZ2UgPSBpbmxpbmVC
b3hSYW5nZUxpc3RbY3VycmVudElubGluZUJveCsrXTsKLSAgICAgICAgICAgICAgICBhdXRvJiBp
bmxpbmVCb3hEaXNwbGF5Qm94ID0gYm94ZXNbaW5saW5lQm94UmFuZ2UuYmVnaW4oKV07Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKGlubGluZUJveERpc3BsYXlCb3guaXNOb25Sb290SW5saW5lQm94
KCkpOwotCi0gICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3Rh
dGUoKS5ib3hHZW9tZXRyeShpbmxpbmVCb3hEaXNwbGF5Qm94LmxheW91dEJveCgpKTsKLSAgICAg
ICAgICAgICAgICBhdXRvIGNvbnRlbnRSaWdodCA9IGRpc3BsYXlCb3gubG9naWNhbFJpZ2h0KCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGlubGluZUJveERpc3BsYXlCb3guaXNMYXN0Rm9yTGF5b3V0
Qm94KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZWRPZmZzZXQgKz0gYm94R2Vv
bWV0cnkuYm9yZGVyQW5kUGFkZGluZ0VuZCgpICsgYm94R2VvbWV0cnkubWFyZ2luRW5kKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlubGluZUJveERpc3BsYXlCb3guc2V0TG9naWNhbFJpZ2h0KGNv
bnRlbnRSaWdodCArIGJveEdlb21ldHJ5LmJvcmRlckFuZFBhZGRpbmdFbmQoKSk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGlubGluZUJveERpc3BsYXlCb3gu
c2V0TG9naWNhbFJpZ2h0KGNvbnRlbnRSaWdodCk7CisgICAgICAgICAgICBmb3IgKGF1dG8gaW5k
ZXggOiBsYXN0RGlzcGxheUJveEluZGV4ZXMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAobGluZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJveChib3hlc1tpbmRleF0ubGF5b3V0
Qm94KCkpLmlzTGFzdEJveCgpKQorICAgICAgICAgICAgICAgICAgICBib3hlc1tpbmRleF0uc2V0
SXNMYXN0Rm9yTGF5b3V0Qm94KHRydWUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGRpc3BsYXlCb3guaXNOb25Sb290SW5saW5lQm94KCkgJiYgZGlzcGxheUJveC5pc0ZpcnN0Rm9y
TGF5b3V0Qm94KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBkaXNwbGF5
Qm94LmxheW91dEJveCgpOwotICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkobGF5b3V0Qm94KTsKKyAgICAgICAgfTsKKyAgICAg
ICAgY29tcHV0ZUlzRmlyc3RJc0xhc3RCb3goKTsKIAotICAgICAgICAgICAgICAgIGRpc3BsYXlC
b3gubW92ZUhvcml6b250YWxseShib3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpKTsKLSAgICAgICAg
ICAgICAgICBhY2N1bXVsYXRlZE9mZnNldCArPSBib3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpICsg
Ym94R2VvbWV0cnkuYm9yZGVyQW5kUGFkZGluZ1N0YXJ0KCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9OwotICAgIGlmIChuZWVkc0Rpc3BsYXlCb3hIb3Jpem9udGFsQWRqdXN0bWVu
dCkKKyAgICAgICAgYXV0byBhZGp1c3RWaXN1YWxHZW9tZXRyeVdpdGhJbmxpbmVCb3hlcyA9IFsm
XSB7CisgICAgICAgICAgICBhdXRvIGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIgPSBjb250ZW50
U3RhcnRJblZpc3VhbE9yZGVyOworICAgICAgICAgICAgZm9yIChhdXRvJiBjaGlsZERpc3BsYXlC
b3hOb2RlIDogcm9vdERpc3BsYXlCb3hOb2RlLmNoaWxkcmVuKQorICAgICAgICAgICAgICAgIGFk
anVzdFZpc3VhbEdlb21ldHJ5Rm9yQ2hpbGROb2RlKCpjaGlsZERpc3BsYXlCb3hOb2RlLCBjb250
ZW50UmlnaHRJblZpc3VhbE9yZGVyLCBsaW5lQm94TG9naWNhbFRvcExlZnQueSgpLCBib3hlcywg
bGluZUJveCk7CisgICAgICAgIH07CiAgICAgICAgIGFkanVzdFZpc3VhbEdlb21ldHJ5V2l0aElu
bGluZUJveGVzKCk7Ci0KLSAgICBhdXRvIGNvbXB1dGVJbmxpbmVCb3hHZW9tZXRyeSA9IFsmXSB7
Ci0gICAgICAgIEFTU0VSVCghaW5saW5lQm94UmFuZ2VMaXN0LmlzRW1wdHkoKSk7Ci0gICAgICAg
IGZvciAoYXV0byYgaW5saW5lQm94UmFuZ2UgOiBpbmxpbmVCb3hSYW5nZUxpc3QpIHsKLSAgICAg
ICAgICAgIGF1dG8mIGlubGluZUJveERpc3BsYXlCb3ggPSBib3hlc1tpbmxpbmVCb3hSYW5nZS5i
ZWdpbigpXTsKLSAgICAgICAgICAgIHNldElubGluZUJveEdlb21ldHJ5KGlubGluZUJveERpc3Bs
YXlCb3gubGF5b3V0Qm94KCksIGlubGluZUJveERpc3BsYXlCb3gubG9naWNhbFJlY3QoKSwgaW5s
aW5lQm94RGlzcGxheUJveC5pc0ZpcnN0Rm9yTGF5b3V0Qm94KCkpOwotICAgICAgICB9Ci0gICAg
fTsKLSAgICBpZiAobmVlZHNOb25Sb290SW5saW5lQm94RGlzcGxheUJveCkKLSAgICAgICAgY29t
cHV0ZUlubGluZUJveEdlb21ldHJ5KCk7CisgICAgfQogfQogCiB2b2lkIElubGluZURpc3BsYXlD
b250ZW50QnVpbGRlcjo6cHJvY2Vzc092ZXJmbG93blJ1bnNGb3JFbGxpcHNpcyhEaXNwbGF5Qm94
ZXMmIGJveGVzLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVCb3hMb2dpY2FsUmlnaHQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9Jbmxp
bmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50QnVpbGRlci5oCmluZGV4IDg4
OTQ5NGQzYjc4OTk5ZWRkZGE5OWFkZGUzYWE1ZTU1Y2YzNWM3MTIuLjgwYzNhMDY2NzVjMTQ4OWEx
ODRjZWRlODJhMDNkZjNmNjIyMzFjZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50QnVpbGRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lu
bGluZURpc3BsYXlDb250ZW50QnVpbGRlci5oCkBAIC0zMyw3ICszMyw5IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAorc3RydWN0IEFuY2VzdG9yU3RhY2s7CiBj
bGFzcyBDb250YWluZXJCb3g7CitzdHJ1Y3QgRGlzcGxheUJveE5vZGU7CiBjbGFzcyBJbmxpbmVG
b3JtYXR0aW5nU3RhdGU7CiBjbGFzcyBMaW5lQm94OwogCkBAIC01NywxMCArNTksMTAgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGFwcGVuZEF0b21pY0lubGluZUxldmVsRGlzcGxheUJveChjb25zdCBM
aW5lOjpSdW4mLCBjb25zdCBJbmxpbmVSZWN0JiAsIERpc3BsYXlCb3hlcyYpOwogICAgIHZvaWQg
YXBwZW5kSW5saW5lQm94RGlzcGxheUJveChjb25zdCBMaW5lOjpSdW4mLCBjb25zdCBJbmxpbmVM
ZXZlbEJveCYsIGNvbnN0IElubGluZVJlY3QmLCBib29sIGxpbmVoYXNDb250ZW50LCBEaXNwbGF5
Qm94ZXMmKTsKICAgICB2b2lkIGFwcGVuZFNwYW5uaW5nSW5saW5lQm94RGlzcGxheUJveChjb25z
dCBMaW5lOjpSdW4mLCBjb25zdCBJbmxpbmVMZXZlbEJveCYsIGNvbnN0IElubGluZVJlY3QmLCBE
aXNwbGF5Qm94ZXMmKTsKLSAgICB2b2lkIGluc2VydElubGluZUJveERpc3BsYXlCb3hGb3JCaWRp
Qm91bmRhcnkoY29uc3QgSW5saW5lTGV2ZWxCb3gmLCBjb25zdCBJbmxpbmVSZWN0JiwgYm9vbCBp
c0ZpcnN0SW5saW5lQm94RnJhZ21lbnQsIHNpemVfdCBpbnNlcnRpb25Qb2ludCwgRGlzcGxheUJv
eGVzJik7Ci0gICAgdm9pZCBhZGp1c3RJbmxpbmVCb3hEaXNwbGF5Qm94Rm9yQmlkaUJvdW5kYXJ5
KElubGluZURpc3BsYXk6OkJveCYsIGNvbnN0IElubGluZVJlY3QmKTsKIAogICAgIHZvaWQgc2V0
SW5saW5lQm94R2VvbWV0cnkoY29uc3QgQm94JiwgY29uc3QgSW5saW5lUmVjdCYsIGJvb2wgaXNG
aXJzdElubGluZUJveEZyYWdtZW50KTsKKyAgICB2b2lkIGFkanVzdFZpc3VhbEdlb21ldHJ5Rm9y
Q2hpbGROb2RlKGNvbnN0IERpc3BsYXlCb3hOb2RlJiwgSW5saW5lTGF5b3V0VW5pdCYgYWNjdW11
bGF0ZWRPZmZzZXQsIElubGluZUxheW91dFVuaXQgbGluZUJveExvZ2ljYWxUb3AsIERpc3BsYXlC
b3hlcyYsIGNvbnN0IExpbmVCb3gmKTsKKyAgICBEaXNwbGF5Qm94Tm9kZSYgZW5zdXJlRGlzcGxh
eUJveEZvckNvbnRhaW5lcihjb25zdCBDb250YWluZXJCb3gmLCBBbmNlc3RvclN0YWNrJiwgRGlz
cGxheUJveGVzJik7CiAKICAgICBjb25zdCBDb250YWluZXJCb3gmIHJvb3QoKSBjb25zdCB7IHJl
dHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0Um9vdDsgfQogICAgIElubGluZUZvcm1hdHRpbmdTdGF0
ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXR0aW5nU3RhdGU7IH0g
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS9kaXNwbGF5L0lubGluZURpc3BsYXlCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3BsYXkvSW5saW5lRGlzcGxheUJveC5oCmluZGV4
IDVmMGEyNzUwNDRmNDYwMmU0NTY2MzRmMGIxNGRjZmJjNjNkYmMzZTMuLjAwNDk5YzgxNzgwY2M5
ZDk3NzhiZDU5YzY4YTUxYzkwZjZhMjlhZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3BsYXkvSW5saW5lRGlzcGxheUJveC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rp
c3BsYXkvSW5saW5lRGlzcGxheUJveC5oCkBAIC0xMTgsNyArMTE4LDI0IEBAIHN0cnVjdCBCb3gg
ewogICAgIH0KICAgICB2b2lkIGFkanVzdElua092ZXJmbG93KGNvbnN0IExheW91dDo6SW5saW5l
UmVjdCYgY2hpbGRCb3JkZXJCb3gpIHsgcmV0dXJuIG1faW5rT3ZlcmZsb3cuZXhwYW5kVG9Db250
YWluKGNoaWxkQm9yZGVyQm94KTsgfQogICAgIHZvaWQgdHJ1bmNhdGUoTGF5b3V0OjpJbmxpbmVM
YXlvdXRVbml0IHRydW5jYXRlZHdpZHRoID0gMC5mKTsKLSAgICB2b2lkIHNldExvZ2ljYWxSaWdo
dChMYXlvdXQ6OklubGluZUxheW91dFVuaXQgcmlnaHQpIHsgbV9sb2dpY2FsUmVjdC5zZXRSaWdo
dChyaWdodCk7IH0KKyAgICB2b2lkIHNldExvZ2ljYWxMZWZ0KExheW91dDo6SW5saW5lTGF5b3V0
VW5pdCBsZWZ0KQorICAgIHsKKyAgICAgICAgYXV0byBvZmZzZXQgPSBsZWZ0IC0gbG9naWNhbExl
ZnQoKTsKKyAgICAgICAgbV9sb2dpY2FsUmVjdC5zZXRMZWZ0KGxlZnQpOworICAgICAgICBtX2lu
a092ZXJmbG93LnNldExlZnQobV9pbmtPdmVyZmxvdy5sZWZ0KCkgKyBvZmZzZXQpOworICAgIH0K
KyAgICB2b2lkIHNldExvZ2ljYWxSaWdodChMYXlvdXQ6OklubGluZUxheW91dFVuaXQgcmlnaHQp
CisgICAgeworICAgICAgICBhdXRvIG9mZnNldCA9IHJpZ2h0IC0gbG9naWNhbFJpZ2h0KCk7Cisg
ICAgICAgIG1fbG9naWNhbFJlY3Quc2V0UmlnaHQocmlnaHQpOworICAgICAgICBtX2lua092ZXJm
bG93LnNldFJpZ2h0KG1faW5rT3ZlcmZsb3cucmlnaHQoKSArIG9mZnNldCk7CisgICAgfQorICAg
IHZvaWQgc2V0TG9naWNhbFJlY3QoY29uc3QgTGF5b3V0OjpJbmxpbmVSZWN0JiByZWN0LCBjb25z
dCBMYXlvdXQ6OklubGluZVJlY3QmIGlua092ZXJmbG93KQorICAgIHsKKyAgICAgICAgbV9sb2dp
Y2FsUmVjdCA9IHJlY3Q7CisgICAgICAgIG1faW5rT3ZlcmZsb3cgPSBpbmtPdmVyZmxvdzsKKyAg
ICB9CisgICAgdm9pZCBzZXRIYXNDb250ZW50KCkgeyBtX2hhc0NvbnRlbnQgPSB0cnVlOyB9CiAK
ICAgICBzdGQ6Om9wdGlvbmFsPFRleHQ+JiB0ZXh0KCkgeyByZXR1cm4gbV90ZXh0OyB9CiAgICAg
Y29uc3Qgc3RkOjpvcHRpb25hbDxUZXh0PiYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsg
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446067</attachid>
            <date>2021-12-06 12:11:16 -0800</date>
            <delta_ts>2021-12-08 09:06:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233880-20211206121115.patch</filename>
            <type>text/plain</type>
            <size>29271</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODYyY2VkZmIwMjk4ODNi
YWFiNmUzZmM1NmY2MzJiYWU5MTljNTk4Mi4uNmMwZTQ0Yzc0YTA3NmQwMjVkNGZmZjExY2Q4MGE5
NDQxZThlOTQ2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIxLTEyLTA2ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXVtJRkNdIFJlZmFjdG9y
IGJpZGkgaW5saW5lIGJveCBib3VuZGFyeSBoYW5kbGluZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzODgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZW1vdmUgc29tZSBjb2RlIGNv
bXBsZXhpdHkgYnkgaW50cm9kdWNpbmcgbW9yZSBzdWl0YWJsZSBkYXRhIHR5cGVzIHRvIGhhbmRs
ZQorICAgICAgICBjb250ZW50IHJhbmdlcyBmb3IgaW5saW5lIGJveGVzLgorCisgICAgICAgIDEu
IFRoZSBmaW5hbCBvdXRwdXQgb2YgdGhlIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlciBpcyBh
IGxpc3Qgb2YgZGlzcGxheSBib3hlcy4KKyAgICAgICAgICBJdCdzIGEgc2ltcGxlICJvbmUgYm94
IHJpZ2h0IGFmdGVyIHRoZSBvdGhlciIgdHlwZSBvZiBzZXR1cCB3aXRoIGNvbnRpbnVvdXMgZ2Vv
bWV0cnkgKGllIG5leHQgYm94IHN0YXJ0cyB3aGVyZQorICAgICAgICAgIHRoZSBwcmV2aW91cyBl
bmRzICstaG9yaXpvbnRhbCBtYXJnaW5zKSB1bmxlc3MgdGhlIGNvbnRlbnQgaXMgZW1iZWRkZWQg
aW4gYW4gaW5saW5lIGJveCAoZS5nLiA8c3Bhbj5lbWJlZGRlZCBjb250ZW50PC9zb2FuPikKKyAg
ICAgICAgICBJbmxpbmUgYm94IHR5cGUgb2YgZGlzcGxheSBib3hlcyBlbmNsb3NlIGFsbCB0aGVp
ciBkZXNjZW5kYW50IGNvbnRlbnQuCisgICAgICAgICAgTm9ybWFsbHkgd2hlbiB0aGUgbG9naWNh
bCBvcmRlciA9PSB2aXN1YWwgb3JkZXIgKHVuaWRpcmVjdGlvbmFsIGNvbnRlbnQpLCB0aGUKKyAg
ICAgICAgICBkZXNjZW5kYW50IGNvbnRlbnQgZW5kcyByaWdodCBiZWZvcmUgdGhlICJpbmxpbmUg
Ym94IGVuZCIgbWFyayAoPC9zcGFuPikuIAorICAgICAgICAgIEl0IG1ha2VzIGl0IGVhc3kgdG8g
Y29tcHV0ZSB0aGUgcmlnaHQgZWRnZS9lbmNsb3Npbmcgd2lkdGggZm9yIHRoZSBpbmxpbmUgYm94
IHR5cGUgb2YgZGlzcGxheSBib3hlcy4KKyAgICAgICAgMi4gSG93ZXZlciB0aGUgdmlzdWFsIG9y
ZGVyIG9mIHRoZSBiaWRpIGNvbnRlbnQgbWFrZXMgdGhlICJsZXQncyB1c2UgdGhlIGlubGluZSBi
b3ggZW5kIG1hcmsiIGxvZ2ljIHVudXNhYmxlIGFzCisgICAgICAgICAgd2UgbWF5IHNlZSB0aGUg
ImlubGluZSBib3ggZW5kIiBtYXJrIGV2ZW4gYmVmb3JlIHdlIGNvbWUgYWNyb3NzIGFueSBkZXNj
ZW5kYW50IGNvbnRlbnQKKyAgICAgICAgICAodGhlcmUgYXJlIG90aGVyIHR5cGVzIG9mIGNvbmZ1
c2lvbnMgd2l0aCByYW5kb20gb3JkZXJpbmcpLgorICAgICAgICAzLiBXb3JraW5nIHdpdGggYSBs
aXN0IHdoZW4gdGhlIGNvbnRlbnQgY29tZXMgaW4gYSBuZXN0ZWQgZmxhdm9yIG1heSBpbnRyb2R1
Y2Ugc29tZSBjb21wbGV4aXR5IChlLmcuIG5lZWQgdG8ga2VlcCBjb250ZW50IHJhbmdlcyBhcm91
bmQpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHZlcnkgc2ltcGxlIERpc3Bs
YXlCb3hOb2RlIHR5cGUgd2hpY2gga2VlcHMgdHJhY2sgb2YgdGhlIGRpc3BsYXkgYm94ZXMgaW4g
YSB0cmVlIGZhc2hpb24uCisgICAgICAgIFRoZSBkaXNwbGF5IGJveGVzIGFyZSBzdGlsbCBzdG9y
ZWQgaW4gYSBsaXN0LCB3aGlsZSB0aGlzIG5ld2x5IGludHJvZHVjZWQgRGlzcGxheUJveE5vZGUg
dHJlZSBoZWxwcyB0cmF2ZXJzaW5nCisgICAgICAgIHRoZSBuZXN0ZWQgY29udGVudC4KKyAgICAg
ICAgSXQgaGVscHMgZmluZGluZyBvdXQgdGhlIGluc2VydGlvbiBwb2ludCBhdCB1bmV4cGVjdGVk
IGJpZGkgYm91bmRhcmllcyAoZS5nLiB3aGVuIG5lc3RlZCBjb250ZW50IGZyb20gb3RoZXIgaW5s
aW5lIGJveGVzCisgICAgICAgIHNob3cgdXAgaW4gYSBsb2dpY2FsbHkgdW5yZWxhdGVkIGlubGlu
ZSBib3gpIGFuZCBpdCBpcyBhbHNvIHZlcnkgdmFsdWFibGUgd2hlbiBjb21wdXRpbmcgdmlzdWFs
IGdlb21ldHJpZXMgZm9yIHRob3NlIGVuY2xvc2luZyBkaXNwbGF5IGJveGVzLiAKKworICAgICAg
ICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50
QnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkRpc3BsYXlCb3hOb2RlOjpE
aXNwbGF5Qm94Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkRpc3BsYXlCb3hOb2Rl
OjphcHBlbmRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkFuY2VzdG9yU3RhY2s6
OnVud2luZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkFuY2VzdG9yU3RhY2s6OnB1c2gp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6
OmVuc3VyZURpc3BsYXlCb3hGb3JDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OmFkanVzdFZpc3VhbEdlb21ldHJ5Rm9yQ2hp
bGROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRC
dWlsZGVyOjppbnNlcnRJbmxpbmVCb3hEaXNwbGF5Qm94Rm9yQmlkaUJvdW5kYXJ5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVy
OjphZGp1c3RJbmxpbmVCb3hEaXNwbGF5Qm94Rm9yQmlkaUJvdW5kYXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjpwcm9j
ZXNzQmlkaUNvbnRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OnByb2Nlc3NPdmVyZmxvd25SdW5zRm9yRWxsaXBzaXMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVEaXNwbGF5Q29udGVu
dEJ1aWxkZXI6OmNvbGxlY3RJbmtPdmVyZmxvd0ZvcklubGluZUJveGVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjpjb21w
dXRlSXNGaXJzdElzTGFzdEJveEZvcklubGluZUNvbnRlbnQpOiBEZWxldGVkLgorICAgICAgICAq
IGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50QnVp
bGRlci5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3Bs
YXkvSW5saW5lRGlzcGxheUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRGlzcGxheTo6
Qm94OjpzZXRMb2dpY2FsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVEaXNwbGF5OjpC
b3g6OnNldExvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVEaXNwbGF5OjpC
b3g6OnNldExvZ2ljYWxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZURpc3BsYXk6OkJv
eDo6c2V0SGFzQ29udGVudCk6CisKIDIwMjEtMTItMDYgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRz
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ2xlYW4gdXAgdmlydHVhbCBtZXRob2RzIG9uIEFuaW1h
dGlvbkVmZmVjdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9pbmxpbmUvSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250
ZW50QnVpbGRlci5jcHAKaW5kZXggNjk3YWUyODliM2QxZTU4NGU5NzNkNmI5ZTkwNzIwNzZkM2Mx
MjI3Yy4uYjExZmU3OGQzNTJiMDMzZjRmMTcxNTdiZDQxY2ZlM2UyYTU0YjJkYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5l
RGlzcGxheUNvbnRlbnRCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwCkBA
IC0yNzUsMzUgKzI3NSw2IEBAIHZvaWQgSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjphcHBl
bmRTcGFubmluZ0lubGluZUJveERpc3BsYXlCb3goY29uc3QgTGluZTo6CiAgICAgc2V0SW5saW5l
Qm94R2VvbWV0cnkobGF5b3V0Qm94LCBpbmxpbmVCb3hCb3JkZXJCb3gsIGZhbHNlKTsKIH0KIAot
dm9pZCBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6Omluc2VydElubGluZUJveERpc3BsYXlC
b3hGb3JCaWRpQm91bmRhcnkoY29uc3QgSW5saW5lTGV2ZWxCb3gmIGlubGluZUJveCwgY29uc3Qg
SW5saW5lUmVjdCYgaW5saW5lQm94UmVjdCwgYm9vbCBpc0ZpcnN0SW5saW5lQm94RnJhZ21lbnQs
IHNpemVfdCBpbnNlcnRpb25Qb2ludCwgRGlzcGxheUJveGVzJiBib3hlcykKLXsKLSAgICBBU1NF
UlQoaW5saW5lQm94LmlzSW5saW5lQm94KCkpOwotCi0gICAgYXV0byBpc0ZpcnN0TGFzdEJveCA9
IE9wdGlvblNldDxJbmxpbmVEaXNwbGF5OjpCb3g6OlBvc2l0aW9uV2l0aGluSW5saW5lTGV2ZWxC
b3g+IHsgfTsKLSAgICBpZiAoaW5saW5lQm94LmlzRmlyc3RCb3goKSAmJiBpc0ZpcnN0SW5saW5l
Qm94RnJhZ21lbnQpCi0gICAgICAgIGlzRmlyc3RMYXN0Qm94LmFkZCh7IElubGluZURpc3BsYXk6
OkJveDo6UG9zaXRpb25XaXRoaW5JbmxpbmVMZXZlbEJveDo6Rmlyc3QgfSk7Ci0gICAgaWYgKGlu
bGluZUJveC5pc0xhc3RCb3goKSkKLSAgICAgICAgaXNGaXJzdExhc3RCb3guYWRkKHsgSW5saW5l
RGlzcGxheTo6Qm94OjpQb3NpdGlvbldpdGhpbklubGluZUxldmVsQm94OjpMYXN0IH0pOwotCi0g
ICAgLy8gRklYTUU6IENvbXB1dGUgaW5rIG92ZXJmbG93LgotICAgIGJveGVzLmluc2VydChpbnNl
cnRpb25Qb2ludCwgeyBtX2xpbmVJbmRleAotICAgICAgICAsIElubGluZURpc3BsYXk6OkJveDo6
VHlwZTo6Tm9uUm9vdElubGluZUJveAotICAgICAgICAsIGlubGluZUJveC5sYXlvdXRCb3goKQot
ICAgICAgICAsIFVCSURJX0RFRkFVTFRfTFRSCi0gICAgICAgICwgaW5saW5lQm94UmVjdAotICAg
ICAgICAsIGlubGluZUJveFJlY3QKLSAgICAgICAgLCB7IH0KLSAgICAgICAgLCB7IH0KLSAgICAg
ICAgLCB0cnVlCi0gICAgICAgICwgaXNGaXJzdExhc3RCb3ggfSk7Ci19Ci0KLXZvaWQgSW5saW5l
RGlzcGxheUNvbnRlbnRCdWlsZGVyOjphZGp1c3RJbmxpbmVCb3hEaXNwbGF5Qm94Rm9yQmlkaUJv
dW5kYXJ5KElubGluZURpc3BsYXk6OkJveCYgZGlzcGxheUJveCwgY29uc3QgSW5saW5lUmVjdCYg
aW5saW5lQm94UmVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZGlzcGxheUJveCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGlubGluZUJveFJlY3QpOwotfQotCiB2b2lkIElubGluZURpc3BsYXlDb250ZW50
QnVpbGRlcjo6cHJvY2Vzc05vbkJpZGlDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29u
dGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IElubGluZUxh
eW91dFBvaW50JiBsaW5lQm94TG9naWNhbFRvcExlZnQsIERpc3BsYXlCb3hlcyYgYm94ZXMpCiB7
CiAgICAgLy8gQ3JlYXRlIHRoZSBpbmxpbmUgYm94ZXMgb24gdGhlIGN1cnJlbnQgbGluZS4gVGhp
cyBpcyBtb3N0bHkgdGV4dCBhbmQgYXRvbWljIGlubGluZSBib3hlcy4KQEAgLTM1OCwzMSArMzI5
LDE0MyBAQCB2b2lkIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlcjo6cHJvY2Vzc05vbkJpZGlD
b250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQwogICAgIH0KIH0KIAorc3RydWN0IERpc3Bs
YXlCb3hOb2RlIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgRGlz
cGxheUJveE5vZGUoKSA9IGRlZmF1bHQ7CisgICAgRGlzcGxheUJveE5vZGUoc2l6ZV90IGluZGV4
LCBEaXNwbGF5Qm94Tm9kZSogcGFyZW50KQorICAgICAgICA6IGluZGV4KGluZGV4KQorICAgICAg
ICAsIHBhcmVudChwYXJlbnQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgdm9pZCBhcHBl
bmRDaGlsZChzaXplX3QgY2hpbGRJbmRleCkgeyBjaGlsZHJlbi5hcHBlbmQobWFrZVVuaXF1ZTxE
aXNwbGF5Qm94Tm9kZT4oY2hpbGRJbmRleCwgdGhpcykpOyB9CisKKyAgICBzaXplX3QgaW5kZXgg
eyAwIH07CisgICAgRGlzcGxheUJveE5vZGUqIHBhcmVudCB7IG51bGxwdHIgfTsKKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPERpc3BsYXlCb3hOb2RlPj4gY2hpbGRyZW47Cit9OworCitzdHJ1
Y3QgQW5jZXN0b3JTdGFjayB7CisgICAgRGlzcGxheUJveE5vZGUqIHVud2luZChjb25zdCBDb250
YWluZXJCb3gmIGNvbnRhaW5lckJveCkKKyAgICB7CisgICAgICAgIC8vIFVud2luZCB0aGUgc3Rh
Y2sgYWxsIHRoZSB3YXkgdG8gY29udGFpbmVyIGJveC4KKyAgICAgICAgaWYgKCFtX3NldC5jb250
YWlucygmY29udGFpbmVyQm94KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICB3aGlsZSAobV9zZXQubGFzdCgpICE9ICZjb250YWluZXJCb3gpIHsKKyAgICAgICAgICAgIG1f
c3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgbV9zZXQucmVtb3ZlTGFzdCgpOworICAg
ICAgICB9CisgICAgICAgIC8vIFJvb3QgaXMgYWx3YXlzIGEgY29tbW9uIGFuY2VzdG9yLgorICAg
ICAgICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIG1fc3RhY2su
bGFzdCgpOworICAgIH0KKworICAgIHZvaWQgcHVzaChEaXNwbGF5Qm94Tm9kZSYgZGlzcGxheUJv
eE5vZGUsIGNvbnN0IENvbnRhaW5lckJveCYgY29udGFpbmVyQm94KQorICAgIHsKKyAgICAgICAg
bV9zdGFjay5hcHBlbmQoJmRpc3BsYXlCb3hOb2RlKTsKKyAgICAgICAgQVNTRVJUKCFtX3NldC5j
b250YWlucygmY29udGFpbmVyQm94KSk7CisgICAgICAgIG1fc2V0LmFkZCgmY29udGFpbmVyQm94
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPERpc3BsYXlCb3hOb2RlKj4gbV9zdGFj
azsKKyAgICBMaXN0SGFzaFNldDxjb25zdCBDb250YWluZXJCb3gqPiBtX3NldDsKK307CisKK0Rp
c3BsYXlCb3hOb2RlJiBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OmVuc3VyZURpc3BsYXlC
b3hGb3JDb250YWluZXIoY29uc3QgQ29udGFpbmVyQm94JiBjb250YWluZXJCb3gsIEFuY2VzdG9y
U3RhY2smIGFuY2VzdG9yU3RhY2ssIERpc3BsYXlCb3hlcyYgYm94ZXMpCit7CisgICAgQVNTRVJU
KGNvbnRhaW5lckJveC5pc0lubGluZUJveCgpIHx8ICZjb250YWluZXJCb3ggPT0gJnJvb3QoKSk7
CisgICAgaWYgKGF1dG8qIGxvd2VzdENvbW1vbkFuY2VzdG9yID0gYW5jZXN0b3JTdGFjay51bndp
bmQoY29udGFpbmVyQm94KSkKKyAgICAgICAgcmV0dXJuICpsb3dlc3RDb21tb25BbmNlc3RvcjsK
KyAgICBhdXRvJiBlbmNsb3NpbmdEaXNwbGF5Qm94Tm9kZUZvckNvbnRhaW5lciA9IGVuc3VyZURp
c3BsYXlCb3hGb3JDb250YWluZXIoY29udGFpbmVyQm94LnBhcmVudCgpLCBhbmNlc3RvclN0YWNr
LCBib3hlcyk7CisgICAgYm94ZXMuYXBwZW5kKHsgbV9saW5lSW5kZXgsIElubGluZURpc3BsYXk6
OkJveDo6VHlwZTo6Tm9uUm9vdElubGluZUJveCwgY29udGFpbmVyQm94LCBVQklESV9ERUZBVUxU
X0xUUiwgeyB9LCB7IH0sIHsgfSwgeyB9LCB0cnVlLCB7IH0gfSk7CisKKyAgICBlbmNsb3NpbmdE
aXNwbGF5Qm94Tm9kZUZvckNvbnRhaW5lci5hcHBlbmRDaGlsZChib3hlcy5zaXplKCkgLSAxKTsK
KyAgICBhdXRvJiBkaXNwbGF5Qm94Tm9kZUZvckNvbnRhaW5lciA9ICplbmNsb3NpbmdEaXNwbGF5
Qm94Tm9kZUZvckNvbnRhaW5lci5jaGlsZHJlbi5sYXN0KCk7CisgICAgYW5jZXN0b3JTdGFjay5w
dXNoKGRpc3BsYXlCb3hOb2RlRm9yQ29udGFpbmVyLCBjb250YWluZXJCb3gpOworICAgIHJldHVy
biBkaXNwbGF5Qm94Tm9kZUZvckNvbnRhaW5lcjsKK30KKwordm9pZCBJbmxpbmVEaXNwbGF5Q29u
dGVudEJ1aWxkZXI6OmFkanVzdFZpc3VhbEdlb21ldHJ5Rm9yQ2hpbGROb2RlKGNvbnN0IERpc3Bs
YXlCb3hOb2RlJiBkaXNwbGF5Qm94Tm9kZSwgSW5saW5lTGF5b3V0VW5pdCYgY29udGVudFJpZ2h0
SW5WaXN1YWxPcmRlciwgSW5saW5lTGF5b3V0VW5pdCBsaW5lQm94TG9naWNhbFRvcCwgRGlzcGxh
eUJveGVzJiBib3hlcywgY29uc3QgTGluZUJveCYgbGluZUJveCkKK3sKKyAgICAvLyBOb24taW5s
aW5lIGJveCBkaXNwbGF5IGJveGVzIGp1c3QgbmVlZCBhIGhvcml6b250YWwgYWRqdXN0bWVudCB3
aGlsZQorICAgIC8vIGlubGluZSBib3ggdHlwZSBvZiBkaXNwbGF5IGJveGVzIG5lZWQKKyAgICAv
LyAxLiBob3Jpem9udGFsIGFkanVzdG1lbnQgYW5kIG1hcmdpbi9ib3JkZXIvcGFkZGluZyBzdGFy
dCBvZmZzZXR0aW5nIG9uIHRoZSBmaXJzdCBib3gKKyAgICAvLyAyLiByaWdodCBlZGdlIGNvbXB1
dGF0aW9uIGluY2x1ZGluZyBkZXNjZW5kYW50IGNvbnRlbnQgd2lkdGggYW5kIG1hcmdpbi9ib3Jk
ZXIvcGFkZGluZyBlbmQgb2Zmc2V0dGluZyBvbiB0aGUgbGFzdCBib3gKKyAgICBBU1NFUlQoZGlz
cGxheUJveE5vZGUuaW5kZXgpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBib3hlc1tkaXNwbGF5
Qm94Tm9kZS5pbmRleF07CisgICAgYXV0byYgbGF5b3V0Qm94ID0gZGlzcGxheUJveC5sYXlvdXRC
b3goKTsKKworICAgIGlmICghZGlzcGxheUJveC5pc05vblJvb3RJbmxpbmVCb3goKSkgeworICAg
ICAgICBkaXNwbGF5Qm94LnNldExvZ2ljYWxMZWZ0KGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIp
OworICAgICAgICBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyICs9IGRpc3BsYXlCb3gubG9naWNh
bFdpZHRoKCk7CisgICAgICAgIGlmIChkaXNwbGF5Qm94LmlzQXRvbWljSW5saW5lTGV2ZWxCb3go
KSB8fCBkaXNwbGF5Qm94LmlzR2VuZXJpY0lubGluZUxldmVsQm94KCkpCisgICAgICAgICAgICBj
b250ZW50UmlnaHRJblZpc3VhbE9yZGVyICs9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5
KGxheW91dEJveCkubWFyZ2luRW5kKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
dXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJv
eCk7CisgICAgYXV0byBiZWZvcmVJbmxpbmVCb3hDb250ZW50ID0gWyZdIHsKKyAgICAgICAgYXV0
byBsb2dpY2FsUmVjdCA9IGxpbmVCb3gubG9naWNhbEJvcmRlckJveEZvcklubGluZUJveChsYXlv
dXRCb3gsIGJveEdlb21ldHJ5KTsKKyAgICAgICAgYXV0byB2aXN1YWxSZWN0ID0gSW5saW5lUmVj
dCB7IGxpbmVCb3hMb2dpY2FsVG9wICsgbG9naWNhbFJlY3QudG9wKCksIGNvbnRlbnRSaWdodElu
VmlzdWFsT3JkZXIsIHsgfSwgbG9naWNhbFJlY3QuaGVpZ2h0KCkgfTsKKyAgICAgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBpbmsgb3ZlcmZsb3cuCisgICAgICAgIGlmICghZGlzcGxheUJv
eC5pc0ZpcnN0Rm9yTGF5b3V0Qm94KCkpCisgICAgICAgICAgICByZXR1cm4gZGlzcGxheUJveC5z
ZXRMb2dpY2FsUmVjdCh2aXN1YWxSZWN0LCB2aXN1YWxSZWN0KTsKKworICAgICAgICBjb250ZW50
UmlnaHRJblZpc3VhbE9yZGVyICs9IGJveEdlb21ldHJ5Lm1hcmdpblN0YXJ0KCk7CisgICAgICAg
IGF1dG8gdmlzdWFsUmVjdFdpdGhNYXJnaW5TdGFydCA9IElubGluZVJlY3QgeyB2aXN1YWxSZWN0
LnRvcCgpLCBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyLCB2aXN1YWxSZWN0LndpZHRoKCksIHZp
c3VhbFJlY3QuaGVpZ2h0KCkgfTsKKyAgICAgICAgZGlzcGxheUJveC5zZXRMb2dpY2FsUmVjdCh2
aXN1YWxSZWN0V2l0aE1hcmdpblN0YXJ0LCB2aXN1YWxSZWN0V2l0aE1hcmdpblN0YXJ0KTsKKyAg
ICAgICAgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciArPSBib3hHZW9tZXRyeS5ib3JkZXJBbmRQ
YWRkaW5nU3RhcnQoKTsKKyAgICB9OworICAgIGJlZm9yZUlubGluZUJveENvbnRlbnQoKTsKKwor
ICAgIGZvciAoYXV0byYgY2hpbGREaXNwbGF5Qm94Tm9kZSA6IGRpc3BsYXlCb3hOb2RlLmNoaWxk
cmVuKQorICAgICAgICBhZGp1c3RWaXN1YWxHZW9tZXRyeUZvckNoaWxkTm9kZSgqY2hpbGREaXNw
bGF5Qm94Tm9kZSwgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciwgbGluZUJveExvZ2ljYWxUb3As
IGJveGVzLCBsaW5lQm94KTsKKworICAgIGF1dG8gYWZ0ZXJJbmxpbmVCb3hDb250ZW50ID0gWyZd
IHsKKyAgICAgICAgaWYgKCFkaXNwbGF5Qm94LmlzTGFzdEZvckxheW91dEJveCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGRpc3BsYXlCb3guc2V0TG9naWNhbFJpZ2h0KGNvbnRlbnRSaWdodEluVmlz
dWFsT3JkZXIpOworCisgICAgICAgIGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIgKz0gYm94R2Vv
bWV0cnkuYm9yZGVyQW5kUGFkZGluZ0VuZCgpOworICAgICAgICBkaXNwbGF5Qm94LnNldExvZ2lj
YWxSaWdodChjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyKTsKKyAgICAgICAgY29udGVudFJpZ2h0
SW5WaXN1YWxPcmRlciArPSBib3hHZW9tZXRyeS5tYXJnaW5FbmQoKTsKKyAgICB9OworICAgIGFm
dGVySW5saW5lQm94Q29udGVudCgpOworCisgICAgc2V0SW5saW5lQm94R2VvbWV0cnkobGF5b3V0
Qm94LCBkaXNwbGF5Qm94LmxvZ2ljYWxSZWN0KCksIGRpc3BsYXlCb3guaXNGaXJzdEZvckxheW91
dEJveCgpKTsKKyAgICBpZiAobGluZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJveChsYXlv
dXRCb3gpLmhhc0NvbnRlbnQoKSkKKyAgICAgICAgZGlzcGxheUJveC5zZXRIYXNDb250ZW50KCk7
Cit9CisKIHZvaWQgSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjpwcm9jZXNzQmlkaUNvbnRl
bnQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCwgY29uc3QgTGlu
ZUJveCYgbGluZUJveCwgY29uc3QgSW5saW5lTGF5b3V0UG9pbnQmIGxpbmVCb3hMb2dpY2FsVG9w
TGVmdCwgRGlzcGxheUJveGVzJiBib3hlcykKIHsKICAgICBBU1NFUlQobGluZUNvbnRlbnQudmlz
dWFsT3JkZXJMaXN0LnNpemUoKSA9PSBsaW5lQ29udGVudC5ydW5zLnNpemUoKSk7CiAKLSAgICBW
ZWN0b3I8UmFuZ2U8c2l6ZV90Pj4gaW5saW5lQm94UmFuZ2VMaXN0OwotICAgIGF1dG8gbmVlZHNO
b25Sb290SW5saW5lQm94RGlzcGxheUJveCA9IGZhbHNlOwotICAgIGF1dG8gY3JlYXRlRGlzcGxh
eUJveGVzSW5WaXN1YWxPcmRlckZvckNvbnRlbnRSdW5zID0gWyZdIHsKKyAgICBBbmNlc3RvclN0
YWNrIGFuY2VzdG9yU3RhY2s7CisgICAgRGlzcGxheUJveE5vZGUgcm9vdERpc3BsYXlCb3hOb2Rl
ID0geyB9OworICAgIGFuY2VzdG9yU3RhY2sucHVzaChyb290RGlzcGxheUJveE5vZGUsIHJvb3Qo
KSk7CisKKyAgICBhdXRvIGNvbnRlbnRTdGFydEluVmlzdWFsT3JkZXIgPSBJbmxpbmVMYXlvdXRV
bml0IHsgfTsKKyAgICBhdXRvIGNyZWF0ZURpc3BsYXlCb3hlc0luVmlzdWFsT3JkZXIgPSBbJl0g
ewogICAgICAgICBhdXRvIHJvb3RJbmxpbmVCb3hSZWN0ID0gbGluZUJveC5sb2dpY2FsUmVjdEZv
clJvb3RJbmxpbmVCb3goKTsKLSAgICAgICAgYXV0byBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVy
ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CiAgICAgICAgIC8vIEZpcnN0IHZpc3VhbCBydW4ncyBp
bml0aWFsIGNvbnRlbnQgcG9zaXRpb24gZGVwZW5kcyBvbiB0aGUgYmxvY2sncyBpbmxpbmUgZGly
ZWN0aW9uLgogICAgICAgICBpZiAoIXJvb3QoKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdGhlIGJsb2NrIGVuZCBw
b3NpdGlvbiBpbnN0ZWFkIG9mIHRoZSBsaW5lTG9naWNhbFdpZHRoLgotICAgICAgICAgICAgY29u
dGVudFJpZ2h0SW5WaXN1YWxPcmRlciArPSBsaW5lQ29udGVudC5saW5lTG9naWNhbFdpZHRoIC0g
cm9vdElubGluZUJveFJlY3Qud2lkdGgoKTsKKyAgICAgICAgICAgIGNvbnRlbnRTdGFydEluVmlz
dWFsT3JkZXIgKz0gbGluZUNvbnRlbnQubGluZUxvZ2ljYWxXaWR0aCAtIHJvb3RJbmxpbmVCb3hS
ZWN0LndpZHRoKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gQWRqdXN0IHRoZSBjb250ZW50IHN0
YXJ0IHBvc2l0aW9uIHdpdGggdGhlICh0ZXh0KWFsaWdubWVudCBvZmZzZXQgKHJvb3QgaW5saW5l
IGJveCBoYXMgdGhlIGFsaWdubWVudCBvZmZzZXQgYW5kIG5vdCB0aGUgaW5kaXZpZHVhbCBydW5z
KS4KLSAgICAgICAgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciArPSByb290SW5saW5lQm94UmVj
dC5sZWZ0KCk7CisgICAgICAgIGNvbnRlbnRTdGFydEluVmlzdWFsT3JkZXIgKz0gcm9vdElubGlu
ZUJveFJlY3QubGVmdCgpOwogCisgICAgICAgIGF1dG8gY29udGVudFJpZ2h0SW5WaXN1YWxPcmRl
ciA9IGNvbnRlbnRTdGFydEluVmlzdWFsT3JkZXI7CiAgICAgICAgIGF1dG8mIHJ1bnMgPSBsaW5l
Q29udGVudC5ydW5zOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJ1bnMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgICAgIGF1dG8gdmlzdWFsSW5kZXggPSBsaW5lQ29udGVudC52aXN1
YWxPcmRlckxpc3RbaV07CiAgICAgICAgICAgICBhdXRvJiBsaW5lUnVuID0gcnVuc1t2aXN1YWxJ
bmRleF07CisgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxheW91dEJveCgp
OwogCi0gICAgICAgICAgICBhdXRvIGlzQ29udGVudFJ1biA9ICFsaW5lUnVuLmlzSW5saW5lQm94
U3RhcnQoKSAmJiAhbGluZVJ1bi5pc0xpbmVTcGFubmluZ0lubGluZUJveFN0YXJ0KCkgJiYgIWxp
bmVSdW4uaXNJbmxpbmVCb3hFbmQoKTsKKyAgICAgICAgICAgIGF1dG8gaXNDb250ZW50UnVuID0g
IWxpbmVSdW4uaXNJbmxpbmVCb3hTdGFydCgpICYmICFsaW5lUnVuLmlzTGluZVNwYW5uaW5nSW5s
aW5lQm94U3RhcnQoKSAmJiAhbGluZVJ1bi5pc0lubGluZUJveEVuZCgpICYmICFsaW5lUnVuLmlz
V29yZEJyZWFrT3Bwb3J0dW5pdHkoKTsKICAgICAgICAgICAgIGlmICghaXNDb250ZW50UnVuKSB7
Ci0gICAgICAgICAgICAgICAgbmVlZHNOb25Sb290SW5saW5lQm94RGlzcGxheUJveCA9IHRydWU7
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBpbmxpbmUgYm94ZXMg
d2l0aCBubyBjb250ZW50LgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQogCkBAIC0zOTIsMTc1ICs0NzUsNTUgQEAgdm9pZCBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxk
ZXI6OnByb2Nlc3NCaWRpQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnQKICAgICAg
ICAgICAgICAgICByZXR1cm4gbG9naWNhbGxSZWN0OwogICAgICAgICAgICAgfTsKIAorICAgICAg
ICAgICAgYXV0byYgcGFyZW50RGlzcGxheUJveE5vZGUgPSBlbnN1cmVEaXNwbGF5Qm94Rm9yQ29u
dGFpbmVyKGxheW91dEJveC5wYXJlbnQoKSwgYW5jZXN0b3JTdGFjaywgYm94ZXMpOwogICAgICAg
ICAgICAgaWYgKGxpbmVSdW4uaXNUZXh0KCkpIHsKICAgICAgICAgICAgICAgICBhdXRvIHZpc3Vh
bFJlY3QgPSB2aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QobGluZUJveC5sb2dpY2FsUmVjdEZvclRl
eHRSdW4obGluZVJ1bikpOwogICAgICAgICAgICAgICAgIGFwcGVuZFRleHREaXNwbGF5Qm94KGxp
bmVSdW4sIHZpc3VhbFJlY3QsIGJveGVzKTsKICAgICAgICAgICAgICAgICBjb250ZW50UmlnaHRJ
blZpc3VhbE9yZGVyICs9IHZpc3VhbFJlY3Qud2lkdGgoKTsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChsaW5lUnVuLmlzU29mdExpbmVC
cmVhaygpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmVSdW4uaXNTb2Z0TGluZUJyZWFr
KCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIXZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdChs
aW5lQm94LmxvZ2ljYWxSZWN0Rm9yVGV4dFJ1bihsaW5lUnVuKSkud2lkdGgoKSk7CiAgICAgICAg
ICAgICAgICAgYXBwZW5kU29mdExpbmVCcmVha0Rpc3BsYXlCb3gobGluZVJ1biwgdmlzdWFsUmVj
dFJlbGF0aXZlVG9Sb290KGxpbmVCb3gubG9naWNhbFJlY3RGb3JUZXh0UnVuKGxpbmVSdW4pKSwg
Ym94ZXMpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKGxpbmVSdW4uaXNIYXJkTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgICAgICBB
U1NFUlQoIXZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdChsaW5lQm94LmxvZ2ljYWxSZWN0Rm9yTGlu
ZUJyZWFrQm94KGxpbmVSdW4ubGF5b3V0Qm94KCkpKS53aWR0aCgpKTsKLSAgICAgICAgICAgICAg
ICBhcHBlbmRIYXJkTGluZUJyZWFrRGlzcGxheUJveChsaW5lUnVuLCB2aXN1YWxSZWN0UmVsYXRp
dmVUb1Jvb3QobGluZUJveC5sb2dpY2FsUmVjdEZvckxpbmVCcmVha0JveChsaW5lUnVuLmxheW91
dEJveCgpKSksIGJveGVzKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChsaW5lUnVuLmlzQm94KCkpIHsKLSAgICAgICAgICAgICAgICBh
dXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxheW91dEJveCgpOworICAgICAgICAgICAgfSBlbHNl
IGlmIChsaW5lUnVuLmlzSGFyZExpbmVCcmVhaygpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KCF2aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QobGluZUJveC5sb2dpY2FsUmVjdEZvckxpbmVCcmVh
a0JveChsYXlvdXRCb3gpKS53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRIYXJkTGlu
ZUJyZWFrRGlzcGxheUJveChsaW5lUnVuLCB2aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QobGluZUJv
eC5sb2dpY2FsUmVjdEZvckxpbmVCcmVha0JveChsYXlvdXRCb3gpKSwgYm94ZXMpOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChsaW5lUnVuLmlzQm94KCkpIHsKICAgICAgICAgICAgICAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCk7
CiAgICAgICAgICAgICAgICAgYXV0byB2aXN1YWxSZWN0ID0gdmlzdWFsUmVjdFJlbGF0aXZlVG9S
b290KGxpbmVCb3gubG9naWNhbEJvcmRlckJveEZvckF0b21pY0lubGluZUxldmVsQm94KGxheW91
dEJveCwgYm94R2VvbWV0cnkpKTsKICAgICAgICAgICAgICAgICB2aXN1YWxSZWN0Lm1vdmVIb3Jp
em9udGFsbHkoYm94R2VvbWV0cnkubWFyZ2luU3RhcnQoKSk7CiAgICAgICAgICAgICAgICAgYXBw
ZW5kQXRvbWljSW5saW5lTGV2ZWxEaXNwbGF5Qm94KGxpbmVSdW4sIHZpc3VhbFJlY3QsIGJveGVz
KTsKICAgICAgICAgICAgICAgICBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyICs9IGJveEdlb21l
dHJ5Lm1hcmdpblN0YXJ0KCkgKyB2aXN1YWxSZWN0LndpZHRoKCkgKyBib3hHZW9tZXRyeS5tYXJn
aW5FbmQoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIEFTU0VSVChsaW5lUnVuLmlzV29yZEJyZWFrT3Bwb3J0dW5pdHkoKSk7CisgICAgICAg
ICAgICBwYXJlbnREaXNwbGF5Qm94Tm9kZS5hcHBlbmRDaGlsZChib3hlcy5zaXplKCkgLSAxKTsK
ICAgICAgICAgfQogICAgIH07Ci0gICAgY3JlYXRlRGlzcGxheUJveGVzSW5WaXN1YWxPcmRlckZv
ckNvbnRlbnRSdW5zKCk7Ci0KLSAgICBhdXRvIG5lZWRzRGlzcGxheUJveEhvcml6b250YWxBZGp1
c3RtZW50ID0gZmFsc2U7Ci0gICAgYXV0byBjcmVhdGVEaXNwbGF5Qm94ZXNJblZpc3VhbE9yZGVy
Rm9ySW5saW5lQm94ZXMgPSBbJl0gewotICAgICAgICAvLyBWaXN1YWwgb3JkZXIgY291bGQgaW50
cm9kdWNlIGdhcHMgYW5kL29yIGluamVjdCBydW5zIG91dHNpZGUgZnJvbSB0aGUgY3VycmVudCBp
bmxpbmUgYm94IGNvbnRlbnQuCi0gICAgICAgIC8vIEluIHN1Y2ggY2FzZXMsIHdlIG5lZWQgdG8g
ImNsb3NlIiBhbmQgIm9wZW4iIGRpc3BsYXkgYm94ZXMgZm9yIHRoZXNlIGlubGluZSBib3ggZnJh
Z21lbnRzCi0gICAgICAgIC8vIHRvIGFjY29tbW9kYXRlIHRoZSBjdXJyZW50IGNvbnRlbnQuCi0g
ICAgICAgIC8vIFdlIGRvIGl0IGJ5IGZpbmRpbmcgdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Ig
b2YgdGhlIGxhc3QgYW5kIHRoZSBjdXJyZW50IGNvbnRlbnQgZGlzcGxheSBib3hlcyBhbmQKLSAg
ICAgICAgLy8gdHJhdmVyc2UgYm90aCBhbmNlc3RvciBjaGFpbnMgYW5kIGNsb3NlL29wZW4gdGhl
IHBhcmVudCAoaW5saW5lKSBib3hlcy4KLSAgICAgICAgLy8gKG9wZW4gaGVyZSBtZWFucyB0byBj
cmVhdGUgYSBuZXcgZGlzcGxheSBib3gsIHdoaWxlIGNsb3NlIG1lYW5zIHRvIHNpbXBseSBwb3Ag
aXQgb3V0IG9mIHBhcmVudEJveFN0YWNrKS4KLSAgICAgICAgLy8gPGRpdj5hPHNwYW4gaWQ9Zmly
c3Q+YiYjODIzODtnPC9zcGFuPmY8c3BhbiBpZD1zZWNvbmQ+ZSYjODIzNztjPC9zcGFuPmQ8L2Rp
dj4KLSAgICAgICAgLy8gcHJvZHVjZXMgdGhlIGZvbGxvd2luZyBvdXRwdXQgKG5vdGUgdGhlICM4
MjM4OyAjODIzNzsgUlRML0xUUiBjb250cm9sIGNoYXJhY3RlcnMpOgotICAgICAgICAvLyBhYmNk
ZWZnCi0gICAgICAgIC8vIHdpdGggdGhlIGZvbGxvd2luZywgZnJhZ21lbnRlZCBpbmxpbmUgYm94
ZXM6Ci0gICAgICAgIC8vIGFbZmlyc3Qgb3Blbl1iW2ZpcnN0IGNsb3NlXVtzZWNvbmQgb3Blbl1j
W3NlY29uZCBjbG9zZV1kW3NlY29uZCBvcGVuXWVbc2Vjb25kIGNsb3NlXWZbZmlyc3Qgb3Blbl1n
W2ZpcnN0IGNsb3NlXQotICAgICAgICBIYXNoTWFwPGNvbnN0IEJveCosIHNpemVfdD4gaW5saW5l
Qm94RGlzcGxheUJveE1hcDsKLSAgICAgICAgTGlzdEhhc2hTZXQ8Y29uc3QgQm94Kj4gcGFyZW50
Qm94U3RhY2s7Ci0gICAgICAgIHBhcmVudEJveFN0YWNrLmFkZCgmcm9vdCgpKTsKLQotICAgICAg
ICBBU1NFUlQoYm94ZXNbMF0uaXNSb290SW5saW5lQm94KCkpOwotICAgICAgICBmb3IgKHNpemVf
dCBpbmRleCA9IDE7IGluZGV4IDwgYm94ZXMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAg
ICBhdXRvJiBwYXJlbnRCb3ggPSBib3hlc1tpbmRleF0ubGF5b3V0Qm94KCkucGFyZW50KCk7Ci0g
ICAgICAgICAgICBBU1NFUlQocGFyZW50Qm94LmlzSW5saW5lQm94KCkgfHwgJnBhcmVudEJveCA9
PSAmcm9vdCgpKTsKLQotICAgICAgICAgICAgYXV0byBydW5QYXJlbnRJc0N1cnJlbnRJbmxpbmVC
b3ggPSAmcGFyZW50Qm94ID09IHBhcmVudEJveFN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgIGlm
IChydW5QYXJlbnRJc0N1cnJlbnRJbmxpbmVCb3gpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSd2
ZSBnb3QgdGhlIGNvcnJlY3QgaW5saW5lIGJveCBhcyBwYXJlbnQuIE5vdGhpbmcgdG8gZG8gaGVy
ZS4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGF1dG8gcGFyZW50Qm94U3RhY2tFbmQgPSBwYXJlbnRCb3hTdGFjay5lbmQoKTsKLSAgICAgICAg
ICAgIFZlY3Rvcjxjb25zdCBCb3gqPiBpbmxpbmVCb3hOZWVkaW5nRGlzcGxheUJveExpc3Q7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gJnBhcmVudEJveDsgYW5jZXN0b3I7IGFu
Y2VzdG9yID0gJmFuY2VzdG9yLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChh
bmNlc3RvciA9PSAmcm9vdCgpIHx8IGFuY2VzdG9yLT5pc0lubGluZUJveCgpKTsKLSAgICAgICAg
ICAgICAgICBhdXRvIHBhcmVudEJveEl0ZXJhdG9yID0gcGFyZW50Qm94U3RhY2suZmluZChhbmNl
c3Rvcik7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmVudEJveEl0ZXJhdG9yICE9IHBhcmVudEJv
eFN0YWNrRW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGxvd2VzdCBj
b21tb24gYW5jZXN0b3IuCi0gICAgICAgICAgICAgICAgICAgIC8vIExldCdzIHRyYXZlcnNlIGJv
dGggYW5jZXN0b3IgY2hhaW5zIGFuZCBjcmVhdGUvY2xvc2UgZGlzcGxheSBib3hlcyBhcyBuZWVk
ZWQuCi0gICAgICAgICAgICAgICAgICAgIFZlY3Rvcjxjb25zdCBCb3gqPiBpbmxpbmVCb3hGcmFn
bWVudHNUb0Nsb3NlOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSArK3BhcmVu
dEJveEl0ZXJhdG9yOyBpdCAhPSBwYXJlbnRCb3hTdGFja0VuZDsgKytpdCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlubGluZUJveEZyYWdtZW50c1RvQ2xvc2UuYXBwZW5kKCppdCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChhdXRvKiBpbmxpbmVCb3ggOiBtYWtlUmV2ZXJzZWRSYW5n
ZShpbmxpbmVCb3hGcmFnbWVudHNUb0Nsb3NlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGlubGluZUJveC0+aXNJbmxpbmVCb3goKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoaW5saW5lQm94RGlzcGxheUJveE1hcC5jb250YWlucyhpbmxpbmVCb3gpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlubGluZUJveFJhbmdlTGlzdC5hcHBlbmQoeyBpbmxpbmVC
b3hEaXNwbGF5Qm94TWFwLmdldChpbmxpbmVCb3gpLCBpbmRleCB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmVudEJveFN0YWNrLnJlbW92ZShpbmxpbmVCb3gpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IG5ldyBkaXNwbGF5IGJv
eGVzIGZvciBpbmxpbmUgYm94IGZyYWdtZW50cyBvbiBiaWRpIGJvdW5kYXJ5LgotICAgICAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8qIGlubGluZUJveCA6IG1ha2VSZXZlcnNlZFJhbmdlKGlubGlu
ZUJveE5lZWRpbmdEaXNwbGF5Qm94TGlzdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChpbmxpbmVCb3gtPmlzSW5saW5lQm94KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
cGFyZW50Qm94U3RhY2suYWRkKGlubGluZUJveCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG8gY3JlYXRlQW5kSW5zZXJ0RGlzcGxheUJveEZvcklubGluZUJveEZyYWdtZW50ID0gWyZd
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgInBy
ZXZpb3VzIiBkaXNwbGF5IGJveCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGlubGluZSBib3ggaXMgbm90
IHRyYWNrZWQgYXMgdGhlICJsYXN0IGJveCIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBsYXN0RGlzcGxheUJveEZvcklubGluZUJveEluZGV4ID0gaW5saW5lQm94RGlzcGxheUJv
eE1hcC50YWtlKGlubGluZUJveCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBp
c0ZpcnN0RnJhZ21lbnQgPSAhbGFzdERpc3BsYXlCb3hGb3JJbmxpbmVCb3hJbmRleDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRmlyc3RGcmFnbWVudCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm94ZXNbbGFzdERpc3BsYXlCb3hGb3JJbmxpbmVCb3hJbmRl
eF0uc2V0SXNMYXN0Rm9yTGF5b3V0Qm94KGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmxpbmVCb3hEaXNwbGF5Qm94TWFwLnNldChpbmxpbmVCb3gsIGluZGV4KTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0
YXRlKCkuYm94R2VvbWV0cnkoKmlubGluZUJveCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byB2aXN1YWxSZWN0ID0gbGluZUJveC5sb2dpY2FsQm9yZGVyQm94Rm9ySW5saW5lQm94
KCppbmxpbmVCb3gsIGJveEdlb21ldHJ5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBVc2UgdGhlIGN1cnJlbnQgY29udGVudCBsZWZ0IGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3Ig
dGhpcyBkaXNwbGF5IGJveC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXN1YWxSZWN0
LnNldExlZnQoYm94ZXNbaW5kZXhdLmxvZ2ljYWxMZWZ0KCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZpc3VhbFJlY3QubW92ZVZlcnRpY2FsbHkobGluZUJveExvZ2ljYWxUb3BMZWZ0
LnkoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmlzdWFsIHdpZHRoIGlzIG5v
dCB5ZXQga25vd24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzdWFsUmVjdC5zZXRX
aWR0aCh7IH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydElubGluZUJveERp
c3BsYXlCb3hGb3JCaWRpQm91bmRhcnkobGluZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJv
eCgqaW5saW5lQm94KSwgdmlzdWFsUmVjdCwgaXNGaXJzdEZyYWdtZW50LCBpbmRleCwgYm94ZXMp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTmVlZCB0byBwdXNoIHRoZSByZXN0IG9mIHRoZSBjb250ZW50IHdoZW4g
dGhpcyBpbmxpbmUgYm94IGhhcyBtYXJnaW4vYm9yZGVyL3BhZGRpbmcuCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmVlZHNEaXNwbGF5Qm94SG9yaXpvbnRhbEFkanVzdG1lbnQgPSBuZWVk
c0Rpc3BsYXlCb3hIb3Jpem9udGFsQWRqdXN0bWVudAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBib3hHZW9tZXRyeS5ob3Jpem9udGFsQm9yZGVyKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgYm94R2VvbWV0cnkuaG9yaXpvbnRhbFBhZGRpbmcoKS52YWx1
ZV9vcigwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBib3hHZW9tZXRyeS5t
YXJnaW5TdGFydCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGJveEdlb21l
dHJ5Lm1hcmdpbkVuZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZUFuZEluc2VydERpc3BsYXlCb3hGb3JJbmxpbmVCb3hGcmFnbWVu
dCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyByb290IG1heSBub3QgYmUgdGhl
IGxvd2VzdCBidXQgYWx3YXlzIGEgY29tbW9uIGFuY2VzdG9yLgotICAgICAgICAgICAgICAgIEFT
U0VSVChhbmNlc3RvciAhPSAmcm9vdCgpKTsKLSAgICAgICAgICAgICAgICBpbmxpbmVCb3hOZWVk
aW5nRGlzcGxheUJveExpc3QuYXBwZW5kKGFuY2VzdG9yKTsKKyAgICBjcmVhdGVEaXNwbGF5Qm94
ZXNJblZpc3VhbE9yZGVyKCk7CisKKyAgICBpZiAoIXJvb3REaXNwbGF5Qm94Tm9kZS5jaGlsZHJl
bi5pc0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byBjb21wdXRlSXNGaXJzdElzTGFzdEJveCA9IFsm
XSB7CisgICAgICAgICAgICBIYXNoTWFwPGNvbnN0IEJveCosIHNpemVfdD4gbGFzdERpc3BsYXlC
b3hJbmRleGVzOworICAgICAgICAgICAgQVNTRVJUKGJveGVzWzBdLmlzUm9vdElubGluZUJveCgp
KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMTsgaW5kZXggPCBib3hlcy5zaXpl
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gYm94ZXNb
aW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghZGlzcGxheUJveC5pc05vblJvb3RJbmxpbmVC
b3goKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYXV0
byYgbGF5b3V0Qm94ID0gZGlzcGxheUJveC5sYXlvdXRCb3goKTsKKyAgICAgICAgICAgICAgICBp
ZiAobGluZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJveChsYXlvdXRCb3gpLmlzRmlyc3RC
b3goKSAmJiBsYXN0RGlzcGxheUJveEluZGV4ZXMuc2V0KCZsYXlvdXRCb3gsIGluZGV4KS5pc05l
d0VudHJ5KQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Qm94LnNldElzRmlyc3RGb3JMYXlv
dXRCb3godHJ1ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gIkNsb3Nl
IiB0aGUgcmVtYWluaW5nIGlubGluZSBib3hlcyBvbiB0aGUgc3RhY2sgKGV4Y2x1ZGluZyB0aGUg
cm9vdCkuCi0gICAgICAgIHdoaWxlIChwYXJlbnRCb3hTdGFjay5zaXplKCkgPiAxKSB7Ci0gICAg
ICAgICAgICBhdXRvKiBwYXJlbnRJbmxpbmVCb3ggPSBwYXJlbnRCb3hTdGFjay50YWtlTGFzdCgp
OwotICAgICAgICAgICAgQVNTRVJUKGlubGluZUJveERpc3BsYXlCb3hNYXAuY29udGFpbnMocGFy
ZW50SW5saW5lQm94KSk7Ci0gICAgICAgICAgICBpbmxpbmVCb3hSYW5nZUxpc3QuYXBwZW5kKHsg
aW5saW5lQm94RGlzcGxheUJveE1hcC5nZXQocGFyZW50SW5saW5lQm94KSwgYm94ZXMuc2l6ZSgp
IH0pOwotICAgICAgICB9Ci0gICAgfTsKLSAgICBpZiAobmVlZHNOb25Sb290SW5saW5lQm94RGlz
cGxheUJveCkKLSAgICAgICAgY3JlYXRlRGlzcGxheUJveGVzSW5WaXN1YWxPcmRlckZvcklubGlu
ZUJveGVzKCk7Ci0KLSAgICBhdXRvIGFkanVzdFZpc3VhbEdlb21ldHJ5V2l0aElubGluZUJveGVz
ID0gWyZdIHsKLSAgICAgICAgc2l6ZV90IGN1cnJlbnRJbmxpbmVCb3ggPSAwOwotICAgICAgICBh
dXRvIGFjY3VtdWxhdGVkT2Zmc2V0ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0KLSAgICAgICAg
QVNTRVJUKGJveGVzWzBdLmlzUm9vdElubGluZUJveCgpKTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aW5kZXggPSAxOyBpbmRleCA8IGJveGVzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICAgICAg
YXV0byYgZGlzcGxheUJveCA9IGJveGVzW2luZGV4XTsKLSAgICAgICAgICAgIGRpc3BsYXlCb3gu
bW92ZUhvcml6b250YWxseShhY2N1bXVsYXRlZE9mZnNldCk7Ci0KLSAgICAgICAgICAgIHdoaWxl
IChjdXJyZW50SW5saW5lQm94IDwgaW5saW5lQm94UmFuZ2VMaXN0LnNpemUoKSAmJiBpbmRleCA9
PSBpbmxpbmVCb3hSYW5nZUxpc3RbY3VycmVudElubGluZUJveF0uZW5kKCkgLSAxKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gV2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGlubGluZSBib3ggY29udGVu
dC4KLSAgICAgICAgICAgICAgICAvLyBMZXQncyBjb21wdXRlIHRoZSBpbmxpbmUgYm94IHdpZHRo
IGFuZCBvZmZzZXQgdGhlIHJlc3Qgb2YgdGhlIGNvbnRlbnQgd2l0aCBwYWRkaW5nL2JvcmRlci9t
YXJnaW4gZW5kLgotICAgICAgICAgICAgICAgIGF1dG8gaW5saW5lQm94UmFuZ2UgPSBpbmxpbmVC
b3hSYW5nZUxpc3RbY3VycmVudElubGluZUJveCsrXTsKLSAgICAgICAgICAgICAgICBhdXRvJiBp
bmxpbmVCb3hEaXNwbGF5Qm94ID0gYm94ZXNbaW5saW5lQm94UmFuZ2UuYmVnaW4oKV07Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKGlubGluZUJveERpc3BsYXlCb3guaXNOb25Sb290SW5saW5lQm94
KCkpOwotCi0gICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3Rh
dGUoKS5ib3hHZW9tZXRyeShpbmxpbmVCb3hEaXNwbGF5Qm94LmxheW91dEJveCgpKTsKLSAgICAg
ICAgICAgICAgICBhdXRvIGNvbnRlbnRSaWdodCA9IGRpc3BsYXlCb3gubG9naWNhbFJpZ2h0KCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGlubGluZUJveERpc3BsYXlCb3guaXNMYXN0Rm9yTGF5b3V0
Qm94KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZWRPZmZzZXQgKz0gYm94R2Vv
bWV0cnkuYm9yZGVyQW5kUGFkZGluZ0VuZCgpICsgYm94R2VvbWV0cnkubWFyZ2luRW5kKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlubGluZUJveERpc3BsYXlCb3guc2V0TG9naWNhbFJpZ2h0KGNv
bnRlbnRSaWdodCArIGJveEdlb21ldHJ5LmJvcmRlckFuZFBhZGRpbmdFbmQoKSk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGlubGluZUJveERpc3BsYXlCb3gu
c2V0TG9naWNhbFJpZ2h0KGNvbnRlbnRSaWdodCk7CisgICAgICAgICAgICBmb3IgKGF1dG8gaW5k
ZXggOiBsYXN0RGlzcGxheUJveEluZGV4ZXMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAobGluZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJveChib3hlc1tpbmRleF0ubGF5b3V0
Qm94KCkpLmlzTGFzdEJveCgpKQorICAgICAgICAgICAgICAgICAgICBib3hlc1tpbmRleF0uc2V0
SXNMYXN0Rm9yTGF5b3V0Qm94KHRydWUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGRpc3BsYXlCb3guaXNOb25Sb290SW5saW5lQm94KCkgJiYgZGlzcGxheUJveC5pc0ZpcnN0Rm9y
TGF5b3V0Qm94KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBkaXNwbGF5
Qm94LmxheW91dEJveCgpOwotICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkobGF5b3V0Qm94KTsKKyAgICAgICAgfTsKKyAgICAg
ICAgY29tcHV0ZUlzRmlyc3RJc0xhc3RCb3goKTsKIAotICAgICAgICAgICAgICAgIGRpc3BsYXlC
b3gubW92ZUhvcml6b250YWxseShib3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpKTsKLSAgICAgICAg
ICAgICAgICBhY2N1bXVsYXRlZE9mZnNldCArPSBib3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpICsg
Ym94R2VvbWV0cnkuYm9yZGVyQW5kUGFkZGluZ1N0YXJ0KCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9OwotICAgIGlmIChuZWVkc0Rpc3BsYXlCb3hIb3Jpem9udGFsQWRqdXN0bWVu
dCkKKyAgICAgICAgYXV0byBhZGp1c3RWaXN1YWxHZW9tZXRyeVdpdGhJbmxpbmVCb3hlcyA9IFsm
XSB7CisgICAgICAgICAgICBhdXRvIGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIgPSBsaW5lQm94
TG9naWNhbFRvcExlZnQueCgpICsgY29udGVudFN0YXJ0SW5WaXN1YWxPcmRlcjsKKyAgICAgICAg
ICAgIGZvciAoYXV0byYgY2hpbGREaXNwbGF5Qm94Tm9kZSA6IHJvb3REaXNwbGF5Qm94Tm9kZS5j
aGlsZHJlbikKKyAgICAgICAgICAgICAgICBhZGp1c3RWaXN1YWxHZW9tZXRyeUZvckNoaWxkTm9k
ZSgqY2hpbGREaXNwbGF5Qm94Tm9kZSwgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciwgbGluZUJv
eExvZ2ljYWxUb3BMZWZ0LnkoKSwgYm94ZXMsIGxpbmVCb3gpOworICAgICAgICB9OwogICAgICAg
ICBhZGp1c3RWaXN1YWxHZW9tZXRyeVdpdGhJbmxpbmVCb3hlcygpOwotCi0gICAgYXV0byBjb21w
dXRlSW5saW5lQm94R2VvbWV0cnkgPSBbJl0gewotICAgICAgICBBU1NFUlQoIWlubGluZUJveFJh
bmdlTGlzdC5pc0VtcHR5KCkpOwotICAgICAgICBmb3IgKGF1dG8mIGlubGluZUJveFJhbmdlIDog
aW5saW5lQm94UmFuZ2VMaXN0KSB7Ci0gICAgICAgICAgICBhdXRvJiBpbmxpbmVCb3hEaXNwbGF5
Qm94ID0gYm94ZXNbaW5saW5lQm94UmFuZ2UuYmVnaW4oKV07Ci0gICAgICAgICAgICBzZXRJbmxp
bmVCb3hHZW9tZXRyeShpbmxpbmVCb3hEaXNwbGF5Qm94LmxheW91dEJveCgpLCBpbmxpbmVCb3hE
aXNwbGF5Qm94LmxvZ2ljYWxSZWN0KCksIGlubGluZUJveERpc3BsYXlCb3guaXNGaXJzdEZvckxh
eW91dEJveCgpKTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgaWYgKG5lZWRzTm9uUm9vdElubGlu
ZUJveERpc3BsYXlCb3gpCi0gICAgICAgIGNvbXB1dGVJbmxpbmVCb3hHZW9tZXRyeSgpOworICAg
IH0KIH0KIAogdm9pZCBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OnByb2Nlc3NPdmVyZmxv
d25SdW5zRm9yRWxsaXBzaXMoRGlzcGxheUJveGVzJiBib3hlcywgSW5saW5lTGF5b3V0VW5pdCBs
aW5lQm94TG9naWNhbFJpZ2h0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVEaXNw
bGF5Q29udGVudEJ1aWxkZXIuaAppbmRleCA4ODk0OTRkM2I3ODk5OWVkZGRhOTlhZGRlM2FhNWU1
NWNmMzVjNzEyLi44MGMzYTA2Njc1YzE0ODlhMTg0Y2VkZTgyYTAzZGYzZjYyMjMxY2QxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9J
bmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuaApA
QCAtMzMsNyArMzMsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7
CiAKK3N0cnVjdCBBbmNlc3RvclN0YWNrOwogY2xhc3MgQ29udGFpbmVyQm94Oworc3RydWN0IERp
c3BsYXlCb3hOb2RlOwogY2xhc3MgSW5saW5lRm9ybWF0dGluZ1N0YXRlOwogY2xhc3MgTGluZUJv
eDsKIApAQCAtNTcsMTAgKzU5LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBlbmRBdG9taWNJ
bmxpbmVMZXZlbERpc3BsYXlCb3goY29uc3QgTGluZTo6UnVuJiwgY29uc3QgSW5saW5lUmVjdCYg
LCBEaXNwbGF5Qm94ZXMmKTsKICAgICB2b2lkIGFwcGVuZElubGluZUJveERpc3BsYXlCb3goY29u
c3QgTGluZTo6UnVuJiwgY29uc3QgSW5saW5lTGV2ZWxCb3gmLCBjb25zdCBJbmxpbmVSZWN0Jiwg
Ym9vbCBsaW5laGFzQ29udGVudCwgRGlzcGxheUJveGVzJik7CiAgICAgdm9pZCBhcHBlbmRTcGFu
bmluZ0lubGluZUJveERpc3BsYXlCb3goY29uc3QgTGluZTo6UnVuJiwgY29uc3QgSW5saW5lTGV2
ZWxCb3gmLCBjb25zdCBJbmxpbmVSZWN0JiwgRGlzcGxheUJveGVzJik7Ci0gICAgdm9pZCBpbnNl
cnRJbmxpbmVCb3hEaXNwbGF5Qm94Rm9yQmlkaUJvdW5kYXJ5KGNvbnN0IElubGluZUxldmVsQm94
JiwgY29uc3QgSW5saW5lUmVjdCYsIGJvb2wgaXNGaXJzdElubGluZUJveEZyYWdtZW50LCBzaXpl
X3QgaW5zZXJ0aW9uUG9pbnQsIERpc3BsYXlCb3hlcyYpOwotICAgIHZvaWQgYWRqdXN0SW5saW5l
Qm94RGlzcGxheUJveEZvckJpZGlCb3VuZGFyeShJbmxpbmVEaXNwbGF5OjpCb3gmLCBjb25zdCBJ
bmxpbmVSZWN0Jik7CiAKICAgICB2b2lkIHNldElubGluZUJveEdlb21ldHJ5KGNvbnN0IEJveCYs
IGNvbnN0IElubGluZVJlY3QmLCBib29sIGlzRmlyc3RJbmxpbmVCb3hGcmFnbWVudCk7CisgICAg
dm9pZCBhZGp1c3RWaXN1YWxHZW9tZXRyeUZvckNoaWxkTm9kZShjb25zdCBEaXNwbGF5Qm94Tm9k
ZSYsIElubGluZUxheW91dFVuaXQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBJbmxpbmVMYXlvdXRVbml0
IGxpbmVCb3hMb2dpY2FsVG9wLCBEaXNwbGF5Qm94ZXMmLCBjb25zdCBMaW5lQm94Jik7CisgICAg
RGlzcGxheUJveE5vZGUmIGVuc3VyZURpc3BsYXlCb3hGb3JDb250YWluZXIoY29uc3QgQ29udGFp
bmVyQm94JiwgQW5jZXN0b3JTdGFjayYsIERpc3BsYXlCb3hlcyYpOwogCiAgICAgY29uc3QgQ29u
dGFpbmVyQm94JiByb290KCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4dFJvb3Q7
IH0KICAgICBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9ybWF0dGluZ1N0YXRlOyB9IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvZGlzcGxheS9JbmxpbmVEaXNwbGF5Qm94
LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9kaXNw
bGF5L0lubGluZURpc3BsYXlCb3guaAppbmRleCA1ZjBhMjc1MDQ0ZjQ2MDJlNDU2NjM0ZjBiMTRk
Y2ZiYzYzZGJjM2UzLi4wMDQ5OWM4MTc4MGNjOWQ5Nzc4YmQ1OWM2OGE1MWM5MGY2YTI5YWU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGlu
ZS9kaXNwbGF5L0lubGluZURpc3BsYXlCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9kaXNwbGF5L0lubGluZURpc3BsYXlCb3guaApAQCAt
MTE4LDcgKzExOCwyNCBAQCBzdHJ1Y3QgQm94IHsKICAgICB9CiAgICAgdm9pZCBhZGp1c3RJbmtP
dmVyZmxvdyhjb25zdCBMYXlvdXQ6OklubGluZVJlY3QmIGNoaWxkQm9yZGVyQm94KSB7IHJldHVy
biBtX2lua092ZXJmbG93LmV4cGFuZFRvQ29udGFpbihjaGlsZEJvcmRlckJveCk7IH0KICAgICB2
b2lkIHRydW5jYXRlKExheW91dDo6SW5saW5lTGF5b3V0VW5pdCB0cnVuY2F0ZWR3aWR0aCA9IDAu
Zik7Ci0gICAgdm9pZCBzZXRMb2dpY2FsUmlnaHQoTGF5b3V0OjpJbmxpbmVMYXlvdXRVbml0IHJp
Z2h0KSB7IG1fbG9naWNhbFJlY3Quc2V0UmlnaHQocmlnaHQpOyB9CisgICAgdm9pZCBzZXRMb2dp
Y2FsTGVmdChMYXlvdXQ6OklubGluZUxheW91dFVuaXQgbGVmdCkKKyAgICB7CisgICAgICAgIGF1
dG8gb2Zmc2V0ID0gbGVmdCAtIGxvZ2ljYWxMZWZ0KCk7CisgICAgICAgIG1fbG9naWNhbFJlY3Qu
c2V0TGVmdChsZWZ0KTsKKyAgICAgICAgbV9pbmtPdmVyZmxvdy5zZXRMZWZ0KG1faW5rT3ZlcmZs
b3cubGVmdCgpICsgb2Zmc2V0KTsKKyAgICB9CisgICAgdm9pZCBzZXRMb2dpY2FsUmlnaHQoTGF5
b3V0OjpJbmxpbmVMYXlvdXRVbml0IHJpZ2h0KQorICAgIHsKKyAgICAgICAgYXV0byBvZmZzZXQg
PSByaWdodCAtIGxvZ2ljYWxSaWdodCgpOworICAgICAgICBtX2xvZ2ljYWxSZWN0LnNldFJpZ2h0
KHJpZ2h0KTsKKyAgICAgICAgbV9pbmtPdmVyZmxvdy5zZXRSaWdodChtX2lua092ZXJmbG93LnJp
Z2h0KCkgKyBvZmZzZXQpOworICAgIH0KKyAgICB2b2lkIHNldExvZ2ljYWxSZWN0KGNvbnN0IExh
eW91dDo6SW5saW5lUmVjdCYgcmVjdCwgY29uc3QgTGF5b3V0OjpJbmxpbmVSZWN0JiBpbmtPdmVy
ZmxvdykKKyAgICB7CisgICAgICAgIG1fbG9naWNhbFJlY3QgPSByZWN0OworICAgICAgICBtX2lu
a092ZXJmbG93ID0gaW5rT3ZlcmZsb3c7CisgICAgfQorICAgIHZvaWQgc2V0SGFzQ29udGVudCgp
IHsgbV9oYXNDb250ZW50ID0gdHJ1ZTsgfQogCiAgICAgc3RkOjpvcHRpb25hbDxUZXh0PiYgdGV4
dCgpIHsgcmV0dXJuIG1fdGV4dDsgfQogICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VGV4dD4mIHRl
eHQoKSBjb25zdCB7IHJldHVybiBtX3RleHQ7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446373</attachid>
            <date>2021-12-08 09:06:27 -0800</date>
            <delta_ts>2021-12-09 08:48:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233880-20211208090626.patch</filename>
            <type>text/plain</type>
            <size>29344</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODYyY2VkZmIwMjk4ODNi
YWFiNmUzZmM1NmY2MzJiYWU5MTljNTk4Mi4uNmMwZTQ0Yzc0YTA3NmQwMjVkNGZmZjExY2Q4MGE5
NDQxZThlOTQ2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIxLTEyLTA2ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXVtJRkNdIFJlZmFjdG9y
IGJpZGkgaW5saW5lIGJveCBib3VuZGFyeSBoYW5kbGluZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzODgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZW1vdmUgc29tZSBjb2RlIGNv
bXBsZXhpdHkgYnkgaW50cm9kdWNpbmcgbW9yZSBzdWl0YWJsZSBkYXRhIHR5cGVzIHRvIGhhbmRs
ZQorICAgICAgICBjb250ZW50IHJhbmdlcyBmb3IgaW5saW5lIGJveGVzLgorCisgICAgICAgIDEu
IFRoZSBmaW5hbCBvdXRwdXQgb2YgdGhlIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlciBpcyBh
IGxpc3Qgb2YgZGlzcGxheSBib3hlcy4KKyAgICAgICAgICBJdCdzIGEgc2ltcGxlICJvbmUgYm94
IHJpZ2h0IGFmdGVyIHRoZSBvdGhlciIgdHlwZSBvZiBzZXR1cCB3aXRoIGNvbnRpbnVvdXMgZ2Vv
bWV0cnkgKGllIG5leHQgYm94IHN0YXJ0cyB3aGVyZQorICAgICAgICAgIHRoZSBwcmV2aW91cyBl
bmRzICstaG9yaXpvbnRhbCBtYXJnaW5zKSB1bmxlc3MgdGhlIGNvbnRlbnQgaXMgZW1iZWRkZWQg
aW4gYW4gaW5saW5lIGJveCAoZS5nLiA8c3Bhbj5lbWJlZGRlZCBjb250ZW50PC9zb2FuPikKKyAg
ICAgICAgICBJbmxpbmUgYm94IHR5cGUgb2YgZGlzcGxheSBib3hlcyBlbmNsb3NlIGFsbCB0aGVp
ciBkZXNjZW5kYW50IGNvbnRlbnQuCisgICAgICAgICAgTm9ybWFsbHkgd2hlbiB0aGUgbG9naWNh
bCBvcmRlciA9PSB2aXN1YWwgb3JkZXIgKHVuaWRpcmVjdGlvbmFsIGNvbnRlbnQpLCB0aGUKKyAg
ICAgICAgICBkZXNjZW5kYW50IGNvbnRlbnQgZW5kcyByaWdodCBiZWZvcmUgdGhlICJpbmxpbmUg
Ym94IGVuZCIgbWFyayAoPC9zcGFuPikuIAorICAgICAgICAgIEl0IG1ha2VzIGl0IGVhc3kgdG8g
Y29tcHV0ZSB0aGUgcmlnaHQgZWRnZS9lbmNsb3Npbmcgd2lkdGggZm9yIHRoZSBpbmxpbmUgYm94
IHR5cGUgb2YgZGlzcGxheSBib3hlcy4KKyAgICAgICAgMi4gSG93ZXZlciB0aGUgdmlzdWFsIG9y
ZGVyIG9mIHRoZSBiaWRpIGNvbnRlbnQgbWFrZXMgdGhlICJsZXQncyB1c2UgdGhlIGlubGluZSBi
b3ggZW5kIG1hcmsiIGxvZ2ljIHVudXNhYmxlIGFzCisgICAgICAgICAgd2UgbWF5IHNlZSB0aGUg
ImlubGluZSBib3ggZW5kIiBtYXJrIGV2ZW4gYmVmb3JlIHdlIGNvbWUgYWNyb3NzIGFueSBkZXNj
ZW5kYW50IGNvbnRlbnQKKyAgICAgICAgICAodGhlcmUgYXJlIG90aGVyIHR5cGVzIG9mIGNvbmZ1
c2lvbnMgd2l0aCByYW5kb20gb3JkZXJpbmcpLgorICAgICAgICAzLiBXb3JraW5nIHdpdGggYSBs
aXN0IHdoZW4gdGhlIGNvbnRlbnQgY29tZXMgaW4gYSBuZXN0ZWQgZmxhdm9yIG1heSBpbnRyb2R1
Y2Ugc29tZSBjb21wbGV4aXR5IChlLmcuIG5lZWQgdG8ga2VlcCBjb250ZW50IHJhbmdlcyBhcm91
bmQpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHZlcnkgc2ltcGxlIERpc3Bs
YXlCb3hOb2RlIHR5cGUgd2hpY2gga2VlcHMgdHJhY2sgb2YgdGhlIGRpc3BsYXkgYm94ZXMgaW4g
YSB0cmVlIGZhc2hpb24uCisgICAgICAgIFRoZSBkaXNwbGF5IGJveGVzIGFyZSBzdGlsbCBzdG9y
ZWQgaW4gYSBsaXN0LCB3aGlsZSB0aGlzIG5ld2x5IGludHJvZHVjZWQgRGlzcGxheUJveE5vZGUg
dHJlZSBoZWxwcyB0cmF2ZXJzaW5nCisgICAgICAgIHRoZSBuZXN0ZWQgY29udGVudC4KKyAgICAg
ICAgSXQgaGVscHMgZmluZGluZyBvdXQgdGhlIGluc2VydGlvbiBwb2ludCBhdCB1bmV4cGVjdGVk
IGJpZGkgYm91bmRhcmllcyAoZS5nLiB3aGVuIG5lc3RlZCBjb250ZW50IGZyb20gb3RoZXIgaW5s
aW5lIGJveGVzCisgICAgICAgIHNob3cgdXAgaW4gYSBsb2dpY2FsbHkgdW5yZWxhdGVkIGlubGlu
ZSBib3gpIGFuZCBpdCBpcyBhbHNvIHZlcnkgdmFsdWFibGUgd2hlbiBjb21wdXRpbmcgdmlzdWFs
IGdlb21ldHJpZXMgZm9yIHRob3NlIGVuY2xvc2luZyBkaXNwbGF5IGJveGVzLiAKKworICAgICAg
ICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50
QnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkRpc3BsYXlCb3hOb2RlOjpE
aXNwbGF5Qm94Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkRpc3BsYXlCb3hOb2Rl
OjphcHBlbmRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkFuY2VzdG9yU3RhY2s6
OnVud2luZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkFuY2VzdG9yU3RhY2s6OnB1c2gp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6
OmVuc3VyZURpc3BsYXlCb3hGb3JDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OmFkanVzdFZpc3VhbEdlb21ldHJ5Rm9yQ2hp
bGROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRC
dWlsZGVyOjppbnNlcnRJbmxpbmVCb3hEaXNwbGF5Qm94Rm9yQmlkaUJvdW5kYXJ5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVy
OjphZGp1c3RJbmxpbmVCb3hEaXNwbGF5Qm94Rm9yQmlkaUJvdW5kYXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjpwcm9j
ZXNzQmlkaUNvbnRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OnByb2Nlc3NPdmVyZmxvd25SdW5zRm9yRWxsaXBzaXMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVEaXNwbGF5Q29udGVu
dEJ1aWxkZXI6OmNvbGxlY3RJbmtPdmVyZmxvd0ZvcklubGluZUJveGVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjpjb21w
dXRlSXNGaXJzdElzTGFzdEJveEZvcklubGluZUNvbnRlbnQpOiBEZWxldGVkLgorICAgICAgICAq
IGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50QnVp
bGRlci5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3Bs
YXkvSW5saW5lRGlzcGxheUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRGlzcGxheTo6
Qm94OjpzZXRMb2dpY2FsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVEaXNwbGF5OjpC
b3g6OnNldExvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVEaXNwbGF5OjpC
b3g6OnNldExvZ2ljYWxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZURpc3BsYXk6OkJv
eDo6c2V0SGFzQ29udGVudCk6CisKIDIwMjEtMTItMDYgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRz
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ2xlYW4gdXAgdmlydHVhbCBtZXRob2RzIG9uIEFuaW1h
dGlvbkVmZmVjdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9pbmxpbmUvSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250
ZW50QnVpbGRlci5jcHAKaW5kZXggNjk3YWUyODliM2QxZTU4NGU5NzNkNmI5ZTkwNzIwNzZkM2Mx
MjI3Yy4uMWU3MmMxODkwMDJjYzgyNTA4MzU0YzU5NTZkMGZlYmI1MmRiZTBlZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5l
RGlzcGxheUNvbnRlbnRCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwCkBA
IC0yNzUsMzUgKzI3NSw2IEBAIHZvaWQgSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjphcHBl
bmRTcGFubmluZ0lubGluZUJveERpc3BsYXlCb3goY29uc3QgTGluZTo6CiAgICAgc2V0SW5saW5l
Qm94R2VvbWV0cnkobGF5b3V0Qm94LCBpbmxpbmVCb3hCb3JkZXJCb3gsIGZhbHNlKTsKIH0KIAot
dm9pZCBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6Omluc2VydElubGluZUJveERpc3BsYXlC
b3hGb3JCaWRpQm91bmRhcnkoY29uc3QgSW5saW5lTGV2ZWxCb3gmIGlubGluZUJveCwgY29uc3Qg
SW5saW5lUmVjdCYgaW5saW5lQm94UmVjdCwgYm9vbCBpc0ZpcnN0SW5saW5lQm94RnJhZ21lbnQs
IHNpemVfdCBpbnNlcnRpb25Qb2ludCwgRGlzcGxheUJveGVzJiBib3hlcykKLXsKLSAgICBBU1NF
UlQoaW5saW5lQm94LmlzSW5saW5lQm94KCkpOwotCi0gICAgYXV0byBpc0ZpcnN0TGFzdEJveCA9
IE9wdGlvblNldDxJbmxpbmVEaXNwbGF5OjpCb3g6OlBvc2l0aW9uV2l0aGluSW5saW5lTGV2ZWxC
b3g+IHsgfTsKLSAgICBpZiAoaW5saW5lQm94LmlzRmlyc3RCb3goKSAmJiBpc0ZpcnN0SW5saW5l
Qm94RnJhZ21lbnQpCi0gICAgICAgIGlzRmlyc3RMYXN0Qm94LmFkZCh7IElubGluZURpc3BsYXk6
OkJveDo6UG9zaXRpb25XaXRoaW5JbmxpbmVMZXZlbEJveDo6Rmlyc3QgfSk7Ci0gICAgaWYgKGlu
bGluZUJveC5pc0xhc3RCb3goKSkKLSAgICAgICAgaXNGaXJzdExhc3RCb3guYWRkKHsgSW5saW5l
RGlzcGxheTo6Qm94OjpQb3NpdGlvbldpdGhpbklubGluZUxldmVsQm94OjpMYXN0IH0pOwotCi0g
ICAgLy8gRklYTUU6IENvbXB1dGUgaW5rIG92ZXJmbG93LgotICAgIGJveGVzLmluc2VydChpbnNl
cnRpb25Qb2ludCwgeyBtX2xpbmVJbmRleAotICAgICAgICAsIElubGluZURpc3BsYXk6OkJveDo6
VHlwZTo6Tm9uUm9vdElubGluZUJveAotICAgICAgICAsIGlubGluZUJveC5sYXlvdXRCb3goKQot
ICAgICAgICAsIFVCSURJX0RFRkFVTFRfTFRSCi0gICAgICAgICwgaW5saW5lQm94UmVjdAotICAg
ICAgICAsIGlubGluZUJveFJlY3QKLSAgICAgICAgLCB7IH0KLSAgICAgICAgLCB7IH0KLSAgICAg
ICAgLCB0cnVlCi0gICAgICAgICwgaXNGaXJzdExhc3RCb3ggfSk7Ci19Ci0KLXZvaWQgSW5saW5l
RGlzcGxheUNvbnRlbnRCdWlsZGVyOjphZGp1c3RJbmxpbmVCb3hEaXNwbGF5Qm94Rm9yQmlkaUJv
dW5kYXJ5KElubGluZURpc3BsYXk6OkJveCYgZGlzcGxheUJveCwgY29uc3QgSW5saW5lUmVjdCYg
aW5saW5lQm94UmVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0oZGlzcGxheUJveCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGlubGluZUJveFJlY3QpOwotfQotCiB2b2lkIElubGluZURpc3BsYXlDb250ZW50
QnVpbGRlcjo6cHJvY2Vzc05vbkJpZGlDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29u
dGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IElubGluZUxh
eW91dFBvaW50JiBsaW5lQm94TG9naWNhbFRvcExlZnQsIERpc3BsYXlCb3hlcyYgYm94ZXMpCiB7
CiAgICAgLy8gQ3JlYXRlIHRoZSBpbmxpbmUgYm94ZXMgb24gdGhlIGN1cnJlbnQgbGluZS4gVGhp
cyBpcyBtb3N0bHkgdGV4dCBhbmQgYXRvbWljIGlubGluZSBib3hlcy4KQEAgLTM1OCwzMSArMzI5
LDE0MyBAQCB2b2lkIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlcjo6cHJvY2Vzc05vbkJpZGlD
b250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQwogICAgIH0KIH0KIAorc3RydWN0IERpc3Bs
YXlCb3hOb2RlIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgRGlz
cGxheUJveE5vZGUoKSA9IGRlZmF1bHQ7CisgICAgRGlzcGxheUJveE5vZGUoc2l6ZV90IGluZGV4
LCBEaXNwbGF5Qm94Tm9kZSogcGFyZW50KQorICAgICAgICA6IGluZGV4KGluZGV4KQorICAgICAg
ICAsIHBhcmVudChwYXJlbnQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgdm9pZCBhcHBl
bmRDaGlsZChzaXplX3QgY2hpbGRJbmRleCkgeyBjaGlsZHJlbi5hcHBlbmQobWFrZVVuaXF1ZTxE
aXNwbGF5Qm94Tm9kZT4oY2hpbGRJbmRleCwgdGhpcykpOyB9CisKKyAgICBzaXplX3QgaW5kZXgg
eyAwIH07CisgICAgRGlzcGxheUJveE5vZGUqIHBhcmVudCB7IG51bGxwdHIgfTsKKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPERpc3BsYXlCb3hOb2RlPj4gY2hpbGRyZW47Cit9OworCitzdHJ1
Y3QgQW5jZXN0b3JTdGFjayB7CisgICAgRGlzcGxheUJveE5vZGUqIHVud2luZChjb25zdCBDb250
YWluZXJCb3gmIGNvbnRhaW5lckJveCkKKyAgICB7CisgICAgICAgIC8vIFVud2luZCB0aGUgc3Rh
Y2sgYWxsIHRoZSB3YXkgdG8gY29udGFpbmVyIGJveC4KKyAgICAgICAgaWYgKCFtX3NldC5jb250
YWlucygmY29udGFpbmVyQm94KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICB3aGlsZSAobV9zZXQubGFzdCgpICE9ICZjb250YWluZXJCb3gpIHsKKyAgICAgICAgICAgIG1f
c3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgbV9zZXQucmVtb3ZlTGFzdCgpOworICAg
ICAgICB9CisgICAgICAgIC8vIFJvb3QgaXMgYWx3YXlzIGEgY29tbW9uIGFuY2VzdG9yLgorICAg
ICAgICBBU1NFUlQoIW1fc3RhY2suaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIG1fc3RhY2su
bGFzdCgpOworICAgIH0KKworICAgIHZvaWQgcHVzaChEaXNwbGF5Qm94Tm9kZSYgZGlzcGxheUJv
eE5vZGUsIGNvbnN0IENvbnRhaW5lckJveCYgY29udGFpbmVyQm94KQorICAgIHsKKyAgICAgICAg
bV9zdGFjay5hcHBlbmQoJmRpc3BsYXlCb3hOb2RlKTsKKyAgICAgICAgQVNTRVJUKCFtX3NldC5j
b250YWlucygmY29udGFpbmVyQm94KSk7CisgICAgICAgIG1fc2V0LmFkZCgmY29udGFpbmVyQm94
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPERpc3BsYXlCb3hOb2RlKj4gbV9zdGFj
azsKKyAgICBMaXN0SGFzaFNldDxjb25zdCBDb250YWluZXJCb3gqPiBtX3NldDsKK307CisKK0Rp
c3BsYXlCb3hOb2RlJiBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OmVuc3VyZURpc3BsYXlC
b3hGb3JDb250YWluZXIoY29uc3QgQ29udGFpbmVyQm94JiBjb250YWluZXJCb3gsIEFuY2VzdG9y
U3RhY2smIGFuY2VzdG9yU3RhY2ssIERpc3BsYXlCb3hlcyYgYm94ZXMpCit7CisgICAgQVNTRVJU
KGNvbnRhaW5lckJveC5pc0lubGluZUJveCgpIHx8ICZjb250YWluZXJCb3ggPT0gJnJvb3QoKSk7
CisgICAgaWYgKGF1dG8qIGxvd2VzdENvbW1vbkFuY2VzdG9yID0gYW5jZXN0b3JTdGFjay51bndp
bmQoY29udGFpbmVyQm94KSkKKyAgICAgICAgcmV0dXJuICpsb3dlc3RDb21tb25BbmNlc3RvcjsK
KyAgICBhdXRvJiBlbmNsb3NpbmdEaXNwbGF5Qm94Tm9kZUZvckNvbnRhaW5lciA9IGVuc3VyZURp
c3BsYXlCb3hGb3JDb250YWluZXIoY29udGFpbmVyQm94LnBhcmVudCgpLCBhbmNlc3RvclN0YWNr
LCBib3hlcyk7CisgICAgYm94ZXMuYXBwZW5kKHsgbV9saW5lSW5kZXgsIElubGluZURpc3BsYXk6
OkJveDo6VHlwZTo6Tm9uUm9vdElubGluZUJveCwgY29udGFpbmVyQm94LCBVQklESV9ERUZBVUxU
X0xUUiwgeyB9LCB7IH0sIHsgfSwgeyB9LCB0cnVlLCB7IH0gfSk7CisKKyAgICBlbmNsb3NpbmdE
aXNwbGF5Qm94Tm9kZUZvckNvbnRhaW5lci5hcHBlbmRDaGlsZChib3hlcy5zaXplKCkgLSAxKTsK
KyAgICBhdXRvJiBkaXNwbGF5Qm94Tm9kZUZvckNvbnRhaW5lciA9ICplbmNsb3NpbmdEaXNwbGF5
Qm94Tm9kZUZvckNvbnRhaW5lci5jaGlsZHJlbi5sYXN0KCk7CisgICAgYW5jZXN0b3JTdGFjay5w
dXNoKGRpc3BsYXlCb3hOb2RlRm9yQ29udGFpbmVyLCBjb250YWluZXJCb3gpOworICAgIHJldHVy
biBkaXNwbGF5Qm94Tm9kZUZvckNvbnRhaW5lcjsKK30KKwordm9pZCBJbmxpbmVEaXNwbGF5Q29u
dGVudEJ1aWxkZXI6OmFkanVzdFZpc3VhbEdlb21ldHJ5Rm9yQ2hpbGROb2RlKGNvbnN0IERpc3Bs
YXlCb3hOb2RlJiBkaXNwbGF5Qm94Tm9kZSwgSW5saW5lTGF5b3V0VW5pdCYgY29udGVudFJpZ2h0
SW5WaXN1YWxPcmRlciwgSW5saW5lTGF5b3V0VW5pdCBsaW5lQm94TG9naWNhbFRvcCwgRGlzcGxh
eUJveGVzJiBib3hlcywgY29uc3QgTGluZUJveCYgbGluZUJveCkKK3sKKyAgICAvLyBOb24taW5s
aW5lIGJveCBkaXNwbGF5IGJveGVzIGp1c3QgbmVlZCBhIGhvcml6b250YWwgYWRqdXN0bWVudCB3
aGlsZQorICAgIC8vIGlubGluZSBib3ggdHlwZSBvZiBkaXNwbGF5IGJveGVzIG5lZWQKKyAgICAv
LyAxLiBob3Jpem9udGFsIGFkanVzdG1lbnQgYW5kIG1hcmdpbi9ib3JkZXIvcGFkZGluZyBzdGFy
dCBvZmZzZXR0aW5nIG9uIHRoZSBmaXJzdCBib3gKKyAgICAvLyAyLiByaWdodCBlZGdlIGNvbXB1
dGF0aW9uIGluY2x1ZGluZyBkZXNjZW5kYW50IGNvbnRlbnQgd2lkdGggYW5kIG1hcmdpbi9ib3Jk
ZXIvcGFkZGluZyBlbmQgb2Zmc2V0dGluZyBvbiB0aGUgbGFzdCBib3gKKyAgICBBU1NFUlQoZGlz
cGxheUJveE5vZGUuaW5kZXgpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBib3hlc1tkaXNwbGF5
Qm94Tm9kZS5pbmRleF07CisgICAgYXV0byYgbGF5b3V0Qm94ID0gZGlzcGxheUJveC5sYXlvdXRC
b3goKTsKKworICAgIGlmICghZGlzcGxheUJveC5pc05vblJvb3RJbmxpbmVCb3goKSkgeworICAg
ICAgICBkaXNwbGF5Qm94LnNldExvZ2ljYWxMZWZ0KGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIp
OworICAgICAgICBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyICs9IGRpc3BsYXlCb3gubG9naWNh
bFdpZHRoKCk7CisgICAgICAgIGlmIChkaXNwbGF5Qm94LmlzQXRvbWljSW5saW5lTGV2ZWxCb3go
KSB8fCBkaXNwbGF5Qm94LmlzR2VuZXJpY0lubGluZUxldmVsQm94KCkpCisgICAgICAgICAgICBj
b250ZW50UmlnaHRJblZpc3VhbE9yZGVyICs9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5
KGxheW91dEJveCkubWFyZ2luRW5kKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
dXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJv
eCk7CisgICAgYXV0byBiZWZvcmVJbmxpbmVCb3hDb250ZW50ID0gWyZdIHsKKyAgICAgICAgYXV0
byBsb2dpY2FsUmVjdCA9IGxpbmVCb3gubG9naWNhbEJvcmRlckJveEZvcklubGluZUJveChsYXlv
dXRCb3gsIGJveEdlb21ldHJ5KTsKKyAgICAgICAgYXV0byB2aXN1YWxSZWN0ID0gSW5saW5lUmVj
dCB7IGxpbmVCb3hMb2dpY2FsVG9wICsgbG9naWNhbFJlY3QudG9wKCksIGNvbnRlbnRSaWdodElu
VmlzdWFsT3JkZXIsIHsgfSwgbG9naWNhbFJlY3QuaGVpZ2h0KCkgfTsKKyAgICAgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBpbmsgb3ZlcmZsb3cuCisgICAgICAgIGlmICghZGlzcGxheUJv
eC5pc0ZpcnN0Rm9yTGF5b3V0Qm94KCkpCisgICAgICAgICAgICByZXR1cm4gZGlzcGxheUJveC5z
ZXRMb2dpY2FsUmVjdCh2aXN1YWxSZWN0LCB2aXN1YWxSZWN0KTsKKworICAgICAgICBjb250ZW50
UmlnaHRJblZpc3VhbE9yZGVyICs9IGJveEdlb21ldHJ5Lm1hcmdpblN0YXJ0KCk7CisgICAgICAg
IGF1dG8gdmlzdWFsUmVjdFdpdGhNYXJnaW5TdGFydCA9IElubGluZVJlY3QgeyB2aXN1YWxSZWN0
LnRvcCgpLCBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyLCB2aXN1YWxSZWN0LndpZHRoKCksIHZp
c3VhbFJlY3QuaGVpZ2h0KCkgfTsKKyAgICAgICAgZGlzcGxheUJveC5zZXRMb2dpY2FsUmVjdCh2
aXN1YWxSZWN0V2l0aE1hcmdpblN0YXJ0LCB2aXN1YWxSZWN0V2l0aE1hcmdpblN0YXJ0KTsKKyAg
ICAgICAgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciArPSBib3hHZW9tZXRyeS5ib3JkZXJBbmRQ
YWRkaW5nU3RhcnQoKTsKKyAgICB9OworICAgIGJlZm9yZUlubGluZUJveENvbnRlbnQoKTsKKwor
ICAgIGZvciAoYXV0byYgY2hpbGREaXNwbGF5Qm94Tm9kZSA6IGRpc3BsYXlCb3hOb2RlLmNoaWxk
cmVuKQorICAgICAgICBhZGp1c3RWaXN1YWxHZW9tZXRyeUZvckNoaWxkTm9kZSgqY2hpbGREaXNw
bGF5Qm94Tm9kZSwgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciwgbGluZUJveExvZ2ljYWxUb3As
IGJveGVzLCBsaW5lQm94KTsKKworICAgIGF1dG8gYWZ0ZXJJbmxpbmVCb3hDb250ZW50ID0gWyZd
IHsKKyAgICAgICAgaWYgKCFkaXNwbGF5Qm94LmlzTGFzdEZvckxheW91dEJveCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGRpc3BsYXlCb3guc2V0TG9naWNhbFJpZ2h0KGNvbnRlbnRSaWdodEluVmlz
dWFsT3JkZXIpOworCisgICAgICAgIGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIgKz0gYm94R2Vv
bWV0cnkuYm9yZGVyQW5kUGFkZGluZ0VuZCgpOworICAgICAgICBkaXNwbGF5Qm94LnNldExvZ2lj
YWxSaWdodChjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyKTsKKyAgICAgICAgY29udGVudFJpZ2h0
SW5WaXN1YWxPcmRlciArPSBib3hHZW9tZXRyeS5tYXJnaW5FbmQoKTsKKyAgICB9OworICAgIGFm
dGVySW5saW5lQm94Q29udGVudCgpOworCisgICAgc2V0SW5saW5lQm94R2VvbWV0cnkobGF5b3V0
Qm94LCBkaXNwbGF5Qm94LmxvZ2ljYWxSZWN0KCksIGRpc3BsYXlCb3guaXNGaXJzdEZvckxheW91
dEJveCgpKTsKKyAgICBpZiAobGluZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJveChsYXlv
dXRCb3gpLmhhc0NvbnRlbnQoKSkKKyAgICAgICAgZGlzcGxheUJveC5zZXRIYXNDb250ZW50KCk7
Cit9CisKIHZvaWQgSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjpwcm9jZXNzQmlkaUNvbnRl
bnQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCwgY29uc3QgTGlu
ZUJveCYgbGluZUJveCwgY29uc3QgSW5saW5lTGF5b3V0UG9pbnQmIGxpbmVCb3hMb2dpY2FsVG9w
TGVmdCwgRGlzcGxheUJveGVzJiBib3hlcykKIHsKICAgICBBU1NFUlQobGluZUNvbnRlbnQudmlz
dWFsT3JkZXJMaXN0LnNpemUoKSA9PSBsaW5lQ29udGVudC5ydW5zLnNpemUoKSk7CiAKLSAgICBW
ZWN0b3I8UmFuZ2U8c2l6ZV90Pj4gaW5saW5lQm94UmFuZ2VMaXN0OwotICAgIGF1dG8gbmVlZHNO
b25Sb290SW5saW5lQm94RGlzcGxheUJveCA9IGZhbHNlOwotICAgIGF1dG8gY3JlYXRlRGlzcGxh
eUJveGVzSW5WaXN1YWxPcmRlckZvckNvbnRlbnRSdW5zID0gWyZdIHsKKyAgICBBbmNlc3RvclN0
YWNrIGFuY2VzdG9yU3RhY2s7CisgICAgRGlzcGxheUJveE5vZGUgcm9vdERpc3BsYXlCb3hOb2Rl
ID0geyB9OworICAgIGFuY2VzdG9yU3RhY2sucHVzaChyb290RGlzcGxheUJveE5vZGUsIHJvb3Qo
KSk7CisKKyAgICBhdXRvIGNvbnRlbnRTdGFydEluVmlzdWFsT3JkZXIgPSBJbmxpbmVMYXlvdXRV
bml0IHsgfTsKKyAgICBhdXRvIGNyZWF0ZURpc3BsYXlCb3hlc0luVmlzdWFsT3JkZXIgPSBbJl0g
ewogICAgICAgICBhdXRvIHJvb3RJbmxpbmVCb3hSZWN0ID0gbGluZUJveC5sb2dpY2FsUmVjdEZv
clJvb3RJbmxpbmVCb3goKTsKLSAgICAgICAgYXV0byBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVy
ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CiAgICAgICAgIC8vIEZpcnN0IHZpc3VhbCBydW4ncyBp
bml0aWFsIGNvbnRlbnQgcG9zaXRpb24gZGVwZW5kcyBvbiB0aGUgYmxvY2sncyBpbmxpbmUgZGly
ZWN0aW9uLgogICAgICAgICBpZiAoIXJvb3QoKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdGhlIGJsb2NrIGVuZCBw
b3NpdGlvbiBpbnN0ZWFkIG9mIHRoZSBsaW5lTG9naWNhbFdpZHRoLgotICAgICAgICAgICAgY29u
dGVudFJpZ2h0SW5WaXN1YWxPcmRlciArPSBsaW5lQ29udGVudC5saW5lTG9naWNhbFdpZHRoIC0g
cm9vdElubGluZUJveFJlY3Qud2lkdGgoKTsKKyAgICAgICAgICAgIGNvbnRlbnRTdGFydEluVmlz
dWFsT3JkZXIgKz0gbGluZUNvbnRlbnQubGluZUxvZ2ljYWxXaWR0aCAtIHJvb3RJbmxpbmVCb3hS
ZWN0LndpZHRoKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gQWRqdXN0IHRoZSBjb250ZW50IHN0
YXJ0IHBvc2l0aW9uIHdpdGggdGhlICh0ZXh0KWFsaWdubWVudCBvZmZzZXQgKHJvb3QgaW5saW5l
IGJveCBoYXMgdGhlIGFsaWdubWVudCBvZmZzZXQgYW5kIG5vdCB0aGUgaW5kaXZpZHVhbCBydW5z
KS4KLSAgICAgICAgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciArPSByb290SW5saW5lQm94UmVj
dC5sZWZ0KCk7CisgICAgICAgIGNvbnRlbnRTdGFydEluVmlzdWFsT3JkZXIgKz0gcm9vdElubGlu
ZUJveFJlY3QubGVmdCgpOwogCisgICAgICAgIGF1dG8gY29udGVudFJpZ2h0SW5WaXN1YWxPcmRl
ciA9IGNvbnRlbnRTdGFydEluVmlzdWFsT3JkZXI7CiAgICAgICAgIGF1dG8mIHJ1bnMgPSBsaW5l
Q29udGVudC5ydW5zOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJ1bnMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgICAgIGF1dG8gdmlzdWFsSW5kZXggPSBsaW5lQ29udGVudC52aXN1
YWxPcmRlckxpc3RbaV07CiAgICAgICAgICAgICBhdXRvJiBsaW5lUnVuID0gcnVuc1t2aXN1YWxJ
bmRleF07CisgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxheW91dEJveCgp
OwogCi0gICAgICAgICAgICBhdXRvIGlzQ29udGVudFJ1biA9ICFsaW5lUnVuLmlzSW5saW5lQm94
U3RhcnQoKSAmJiAhbGluZVJ1bi5pc0xpbmVTcGFubmluZ0lubGluZUJveFN0YXJ0KCkgJiYgIWxp
bmVSdW4uaXNJbmxpbmVCb3hFbmQoKTsKKyAgICAgICAgICAgIGF1dG8gaXNDb250ZW50UnVuID0g
IWxpbmVSdW4uaXNJbmxpbmVCb3hTdGFydCgpICYmICFsaW5lUnVuLmlzTGluZVNwYW5uaW5nSW5s
aW5lQm94U3RhcnQoKSAmJiAhbGluZVJ1bi5pc0lubGluZUJveEVuZCgpICYmICFsaW5lUnVuLmlz
V29yZEJyZWFrT3Bwb3J0dW5pdHkoKTsKICAgICAgICAgICAgIGlmICghaXNDb250ZW50UnVuKSB7
Ci0gICAgICAgICAgICAgICAgbmVlZHNOb25Sb290SW5saW5lQm94RGlzcGxheUJveCA9IHRydWU7
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBpbmxpbmUgYm94ZXMg
d2l0aCBubyBjb250ZW50LgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQogCkBAIC0zOTIsMTc1ICs0NzUsNTYgQEAgdm9pZCBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxk
ZXI6OnByb2Nlc3NCaWRpQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnQKICAgICAg
ICAgICAgICAgICByZXR1cm4gbG9naWNhbGxSZWN0OwogICAgICAgICAgICAgfTsKIAorICAgICAg
ICAgICAgYXV0byYgcGFyZW50RGlzcGxheUJveE5vZGUgPSBlbnN1cmVEaXNwbGF5Qm94Rm9yQ29u
dGFpbmVyKGxheW91dEJveC5wYXJlbnQoKSwgYW5jZXN0b3JTdGFjaywgYm94ZXMpOwogICAgICAg
ICAgICAgaWYgKGxpbmVSdW4uaXNUZXh0KCkpIHsKICAgICAgICAgICAgICAgICBhdXRvIHZpc3Vh
bFJlY3QgPSB2aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QobGluZUJveC5sb2dpY2FsUmVjdEZvclRl
eHRSdW4obGluZVJ1bikpOwogICAgICAgICAgICAgICAgIGFwcGVuZFRleHREaXNwbGF5Qm94KGxp
bmVSdW4sIHZpc3VhbFJlY3QsIGJveGVzKTsKICAgICAgICAgICAgICAgICBjb250ZW50UmlnaHRJ
blZpc3VhbE9yZGVyICs9IHZpc3VhbFJlY3Qud2lkdGgoKTsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChsaW5lUnVuLmlzU29mdExpbmVC
cmVhaygpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmVSdW4uaXNTb2Z0TGluZUJyZWFr
KCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIXZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdChs
aW5lQm94LmxvZ2ljYWxSZWN0Rm9yVGV4dFJ1bihsaW5lUnVuKSkud2lkdGgoKSk7CiAgICAgICAg
ICAgICAgICAgYXBwZW5kU29mdExpbmVCcmVha0Rpc3BsYXlCb3gobGluZVJ1biwgdmlzdWFsUmVj
dFJlbGF0aXZlVG9Sb290KGxpbmVCb3gubG9naWNhbFJlY3RGb3JUZXh0UnVuKGxpbmVSdW4pKSwg
Ym94ZXMpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKGxpbmVSdW4uaXNIYXJkTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgICAgICBB
U1NFUlQoIXZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdChsaW5lQm94LmxvZ2ljYWxSZWN0Rm9yTGlu
ZUJyZWFrQm94KGxpbmVSdW4ubGF5b3V0Qm94KCkpKS53aWR0aCgpKTsKLSAgICAgICAgICAgICAg
ICBhcHBlbmRIYXJkTGluZUJyZWFrRGlzcGxheUJveChsaW5lUnVuLCB2aXN1YWxSZWN0UmVsYXRp
dmVUb1Jvb3QobGluZUJveC5sb2dpY2FsUmVjdEZvckxpbmVCcmVha0JveChsaW5lUnVuLmxheW91
dEJveCgpKSksIGJveGVzKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChsaW5lUnVuLmlzQm94KCkpIHsKLSAgICAgICAgICAgICAgICBh
dXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxheW91dEJveCgpOworICAgICAgICAgICAgfSBlbHNl
IGlmIChsaW5lUnVuLmlzSGFyZExpbmVCcmVhaygpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KCF2aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QobGluZUJveC5sb2dpY2FsUmVjdEZvckxpbmVCcmVh
a0JveChsYXlvdXRCb3gpKS53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRIYXJkTGlu
ZUJyZWFrRGlzcGxheUJveChsaW5lUnVuLCB2aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QobGluZUJv
eC5sb2dpY2FsUmVjdEZvckxpbmVCcmVha0JveChsYXlvdXRCb3gpKSwgYm94ZXMpOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChsaW5lUnVuLmlzQm94KCkpIHsKICAgICAgICAgICAgICAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCk7
CiAgICAgICAgICAgICAgICAgYXV0byB2aXN1YWxSZWN0ID0gdmlzdWFsUmVjdFJlbGF0aXZlVG9S
b290KGxpbmVCb3gubG9naWNhbEJvcmRlckJveEZvckF0b21pY0lubGluZUxldmVsQm94KGxheW91
dEJveCwgYm94R2VvbWV0cnkpKTsKICAgICAgICAgICAgICAgICB2aXN1YWxSZWN0Lm1vdmVIb3Jp
em9udGFsbHkoYm94R2VvbWV0cnkubWFyZ2luU3RhcnQoKSk7CiAgICAgICAgICAgICAgICAgYXBw
ZW5kQXRvbWljSW5saW5lTGV2ZWxEaXNwbGF5Qm94KGxpbmVSdW4sIHZpc3VhbFJlY3QsIGJveGVz
KTsKICAgICAgICAgICAgICAgICBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyICs9IGJveEdlb21l
dHJ5Lm1hcmdpblN0YXJ0KCkgKyB2aXN1YWxSZWN0LndpZHRoKCkgKyBib3hHZW9tZXRyeS5tYXJn
aW5FbmQoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIEFTU0VSVChsaW5lUnVuLmlzV29yZEJyZWFrT3Bwb3J0dW5pdHkoKSk7CisgICAgICAg
ICAgICBwYXJlbnREaXNwbGF5Qm94Tm9kZS5hcHBlbmRDaGlsZChib3hlcy5zaXplKCkgLSAxKTsK
ICAgICAgICAgfQogICAgIH07Ci0gICAgY3JlYXRlRGlzcGxheUJveGVzSW5WaXN1YWxPcmRlckZv
ckNvbnRlbnRSdW5zKCk7Ci0KLSAgICBhdXRvIG5lZWRzRGlzcGxheUJveEhvcml6b250YWxBZGp1
c3RtZW50ID0gZmFsc2U7Ci0gICAgYXV0byBjcmVhdGVEaXNwbGF5Qm94ZXNJblZpc3VhbE9yZGVy
Rm9ySW5saW5lQm94ZXMgPSBbJl0gewotICAgICAgICAvLyBWaXN1YWwgb3JkZXIgY291bGQgaW50
cm9kdWNlIGdhcHMgYW5kL29yIGluamVjdCBydW5zIG91dHNpZGUgZnJvbSB0aGUgY3VycmVudCBp
bmxpbmUgYm94IGNvbnRlbnQuCi0gICAgICAgIC8vIEluIHN1Y2ggY2FzZXMsIHdlIG5lZWQgdG8g
ImNsb3NlIiBhbmQgIm9wZW4iIGRpc3BsYXkgYm94ZXMgZm9yIHRoZXNlIGlubGluZSBib3ggZnJh
Z21lbnRzCi0gICAgICAgIC8vIHRvIGFjY29tbW9kYXRlIHRoZSBjdXJyZW50IGNvbnRlbnQuCi0g
ICAgICAgIC8vIFdlIGRvIGl0IGJ5IGZpbmRpbmcgdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Ig
b2YgdGhlIGxhc3QgYW5kIHRoZSBjdXJyZW50IGNvbnRlbnQgZGlzcGxheSBib3hlcyBhbmQKLSAg
ICAgICAgLy8gdHJhdmVyc2UgYm90aCBhbmNlc3RvciBjaGFpbnMgYW5kIGNsb3NlL29wZW4gdGhl
IHBhcmVudCAoaW5saW5lKSBib3hlcy4KLSAgICAgICAgLy8gKG9wZW4gaGVyZSBtZWFucyB0byBj
cmVhdGUgYSBuZXcgZGlzcGxheSBib3gsIHdoaWxlIGNsb3NlIG1lYW5zIHRvIHNpbXBseSBwb3Ag
aXQgb3V0IG9mIHBhcmVudEJveFN0YWNrKS4KLSAgICAgICAgLy8gPGRpdj5hPHNwYW4gaWQ9Zmly
c3Q+YiYjODIzODtnPC9zcGFuPmY8c3BhbiBpZD1zZWNvbmQ+ZSYjODIzNztjPC9zcGFuPmQ8L2Rp
dj4KLSAgICAgICAgLy8gcHJvZHVjZXMgdGhlIGZvbGxvd2luZyBvdXRwdXQgKG5vdGUgdGhlICM4
MjM4OyAjODIzNzsgUlRML0xUUiBjb250cm9sIGNoYXJhY3RlcnMpOgotICAgICAgICAvLyBhYmNk
ZWZnCi0gICAgICAgIC8vIHdpdGggdGhlIGZvbGxvd2luZywgZnJhZ21lbnRlZCBpbmxpbmUgYm94
ZXM6Ci0gICAgICAgIC8vIGFbZmlyc3Qgb3Blbl1iW2ZpcnN0IGNsb3NlXVtzZWNvbmQgb3Blbl1j
W3NlY29uZCBjbG9zZV1kW3NlY29uZCBvcGVuXWVbc2Vjb25kIGNsb3NlXWZbZmlyc3Qgb3Blbl1n
W2ZpcnN0IGNsb3NlXQotICAgICAgICBIYXNoTWFwPGNvbnN0IEJveCosIHNpemVfdD4gaW5saW5l
Qm94RGlzcGxheUJveE1hcDsKLSAgICAgICAgTGlzdEhhc2hTZXQ8Y29uc3QgQm94Kj4gcGFyZW50
Qm94U3RhY2s7Ci0gICAgICAgIHBhcmVudEJveFN0YWNrLmFkZCgmcm9vdCgpKTsKLQotICAgICAg
ICBBU1NFUlQoYm94ZXNbMF0uaXNSb290SW5saW5lQm94KCkpOwotICAgICAgICBmb3IgKHNpemVf
dCBpbmRleCA9IDE7IGluZGV4IDwgYm94ZXMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAg
ICBhdXRvJiBwYXJlbnRCb3ggPSBib3hlc1tpbmRleF0ubGF5b3V0Qm94KCkucGFyZW50KCk7Ci0g
ICAgICAgICAgICBBU1NFUlQocGFyZW50Qm94LmlzSW5saW5lQm94KCkgfHwgJnBhcmVudEJveCA9
PSAmcm9vdCgpKTsKLQotICAgICAgICAgICAgYXV0byBydW5QYXJlbnRJc0N1cnJlbnRJbmxpbmVC
b3ggPSAmcGFyZW50Qm94ID09IHBhcmVudEJveFN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgIGlm
IChydW5QYXJlbnRJc0N1cnJlbnRJbmxpbmVCb3gpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSd2
ZSBnb3QgdGhlIGNvcnJlY3QgaW5saW5lIGJveCBhcyBwYXJlbnQuIE5vdGhpbmcgdG8gZG8gaGVy
ZS4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGF1dG8gcGFyZW50Qm94U3RhY2tFbmQgPSBwYXJlbnRCb3hTdGFjay5lbmQoKTsKLSAgICAgICAg
ICAgIFZlY3Rvcjxjb25zdCBCb3gqPiBpbmxpbmVCb3hOZWVkaW5nRGlzcGxheUJveExpc3Q7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gJnBhcmVudEJveDsgYW5jZXN0b3I7IGFu
Y2VzdG9yID0gJmFuY2VzdG9yLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChh
bmNlc3RvciA9PSAmcm9vdCgpIHx8IGFuY2VzdG9yLT5pc0lubGluZUJveCgpKTsKLSAgICAgICAg
ICAgICAgICBhdXRvIHBhcmVudEJveEl0ZXJhdG9yID0gcGFyZW50Qm94U3RhY2suZmluZChhbmNl
c3Rvcik7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmVudEJveEl0ZXJhdG9yICE9IHBhcmVudEJv
eFN0YWNrRW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGxvd2VzdCBj
b21tb24gYW5jZXN0b3IuCi0gICAgICAgICAgICAgICAgICAgIC8vIExldCdzIHRyYXZlcnNlIGJv
dGggYW5jZXN0b3IgY2hhaW5zIGFuZCBjcmVhdGUvY2xvc2UgZGlzcGxheSBib3hlcyBhcyBuZWVk
ZWQuCi0gICAgICAgICAgICAgICAgICAgIFZlY3Rvcjxjb25zdCBCb3gqPiBpbmxpbmVCb3hGcmFn
bWVudHNUb0Nsb3NlOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSArK3BhcmVu
dEJveEl0ZXJhdG9yOyBpdCAhPSBwYXJlbnRCb3hTdGFja0VuZDsgKytpdCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlubGluZUJveEZyYWdtZW50c1RvQ2xvc2UuYXBwZW5kKCppdCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChhdXRvKiBpbmxpbmVCb3ggOiBtYWtlUmV2ZXJzZWRSYW5n
ZShpbmxpbmVCb3hGcmFnbWVudHNUb0Nsb3NlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGlubGluZUJveC0+aXNJbmxpbmVCb3goKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoaW5saW5lQm94RGlzcGxheUJveE1hcC5jb250YWlucyhpbmxpbmVCb3gpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlubGluZUJveFJhbmdlTGlzdC5hcHBlbmQoeyBpbmxpbmVC
b3hEaXNwbGF5Qm94TWFwLmdldChpbmxpbmVCb3gpLCBpbmRleCB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmVudEJveFN0YWNrLnJlbW92ZShpbmxpbmVCb3gpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IG5ldyBkaXNwbGF5IGJv
eGVzIGZvciBpbmxpbmUgYm94IGZyYWdtZW50cyBvbiBiaWRpIGJvdW5kYXJ5LgotICAgICAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8qIGlubGluZUJveCA6IG1ha2VSZXZlcnNlZFJhbmdlKGlubGlu
ZUJveE5lZWRpbmdEaXNwbGF5Qm94TGlzdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChpbmxpbmVCb3gtPmlzSW5saW5lQm94KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
cGFyZW50Qm94U3RhY2suYWRkKGlubGluZUJveCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG8gY3JlYXRlQW5kSW5zZXJ0RGlzcGxheUJveEZvcklubGluZUJveEZyYWdtZW50ID0gWyZd
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgInBy
ZXZpb3VzIiBkaXNwbGF5IGJveCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGlubGluZSBib3ggaXMgbm90
IHRyYWNrZWQgYXMgdGhlICJsYXN0IGJveCIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBsYXN0RGlzcGxheUJveEZvcklubGluZUJveEluZGV4ID0gaW5saW5lQm94RGlzcGxheUJv
eE1hcC50YWtlKGlubGluZUJveCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBp
c0ZpcnN0RnJhZ21lbnQgPSAhbGFzdERpc3BsYXlCb3hGb3JJbmxpbmVCb3hJbmRleDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRmlyc3RGcmFnbWVudCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm94ZXNbbGFzdERpc3BsYXlCb3hGb3JJbmxpbmVCb3hJbmRl
eF0uc2V0SXNMYXN0Rm9yTGF5b3V0Qm94KGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmxpbmVCb3hEaXNwbGF5Qm94TWFwLnNldChpbmxpbmVCb3gsIGluZGV4KTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0
YXRlKCkuYm94R2VvbWV0cnkoKmlubGluZUJveCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byB2aXN1YWxSZWN0ID0gbGluZUJveC5sb2dpY2FsQm9yZGVyQm94Rm9ySW5saW5lQm94
KCppbmxpbmVCb3gsIGJveEdlb21ldHJ5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBVc2UgdGhlIGN1cnJlbnQgY29udGVudCBsZWZ0IGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3Ig
dGhpcyBkaXNwbGF5IGJveC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXN1YWxSZWN0
LnNldExlZnQoYm94ZXNbaW5kZXhdLmxvZ2ljYWxMZWZ0KCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZpc3VhbFJlY3QubW92ZVZlcnRpY2FsbHkobGluZUJveExvZ2ljYWxUb3BMZWZ0
LnkoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmlzdWFsIHdpZHRoIGlzIG5v
dCB5ZXQga25vd24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzdWFsUmVjdC5zZXRX
aWR0aCh7IH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydElubGluZUJveERp
c3BsYXlCb3hGb3JCaWRpQm91bmRhcnkobGluZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJv
eCgqaW5saW5lQm94KSwgdmlzdWFsUmVjdCwgaXNGaXJzdEZyYWdtZW50LCBpbmRleCwgYm94ZXMp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTmVlZCB0byBwdXNoIHRoZSByZXN0IG9mIHRoZSBjb250ZW50IHdoZW4g
dGhpcyBpbmxpbmUgYm94IGhhcyBtYXJnaW4vYm9yZGVyL3BhZGRpbmcuCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmVlZHNEaXNwbGF5Qm94SG9yaXpvbnRhbEFkanVzdG1lbnQgPSBuZWVk
c0Rpc3BsYXlCb3hIb3Jpem9udGFsQWRqdXN0bWVudAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBib3hHZW9tZXRyeS5ob3Jpem9udGFsQm9yZGVyKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgYm94R2VvbWV0cnkuaG9yaXpvbnRhbFBhZGRpbmcoKS52YWx1
ZV9vcigwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBib3hHZW9tZXRyeS5t
YXJnaW5TdGFydCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGJveEdlb21l
dHJ5Lm1hcmdpbkVuZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZUFuZEluc2VydERpc3BsYXlCb3hGb3JJbmxpbmVCb3hGcmFnbWVu
dCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyByb290IG1heSBub3QgYmUgdGhl
IGxvd2VzdCBidXQgYWx3YXlzIGEgY29tbW9uIGFuY2VzdG9yLgotICAgICAgICAgICAgICAgIEFT
U0VSVChhbmNlc3RvciAhPSAmcm9vdCgpKTsKLSAgICAgICAgICAgICAgICBpbmxpbmVCb3hOZWVk
aW5nRGlzcGxheUJveExpc3QuYXBwZW5kKGFuY2VzdG9yKTsKKyAgICBjcmVhdGVEaXNwbGF5Qm94
ZXNJblZpc3VhbE9yZGVyKCk7CisKKyAgICBpZiAoIXJvb3REaXNwbGF5Qm94Tm9kZS5jaGlsZHJl
bi5pc0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byBjb21wdXRlSXNGaXJzdElzTGFzdEJveCA9IFsm
XSB7CisgICAgICAgICAgICBIYXNoTWFwPGNvbnN0IEJveCosIHNpemVfdD4gbGFzdERpc3BsYXlC
b3hJbmRleGVzOworICAgICAgICAgICAgQVNTRVJUKGJveGVzWzBdLmlzUm9vdElubGluZUJveCgp
KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMTsgaW5kZXggPCBib3hlcy5zaXpl
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gYm94ZXNb
aW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghZGlzcGxheUJveC5pc05vblJvb3RJbmxpbmVC
b3goKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYXV0
byYgbGF5b3V0Qm94ID0gZGlzcGxheUJveC5sYXlvdXRCb3goKTsKKyAgICAgICAgICAgICAgICBh
dXRvIGlzRmlyc3RCb3hPbkN1cnJlbnRMaW5lID0gbGFzdERpc3BsYXlCb3hJbmRleGVzLnNldCgm
bGF5b3V0Qm94LCBpbmRleCkuaXNOZXdFbnRyeTsKKyAgICAgICAgICAgICAgICBpZiAobGluZUJv
eC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJveChsYXlvdXRCb3gpLmlzRmlyc3RCb3goKSAmJiBp
c0ZpcnN0Qm94T25DdXJyZW50TGluZSkKKyAgICAgICAgICAgICAgICAgICAgZGlzcGxheUJveC5z
ZXRJc0ZpcnN0Rm9yTGF5b3V0Qm94KHRydWUpOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIC8vICJDbG9zZSIgdGhlIHJlbWFpbmluZyBpbmxpbmUgYm94ZXMgb24gdGhlIHN0YWNr
IChleGNsdWRpbmcgdGhlIHJvb3QpLgotICAgICAgICB3aGlsZSAocGFyZW50Qm94U3RhY2suc2l6
ZSgpID4gMSkgewotICAgICAgICAgICAgYXV0byogcGFyZW50SW5saW5lQm94ID0gcGFyZW50Qm94
U3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVCb3hEaXNwbGF5Qm94
TWFwLmNvbnRhaW5zKHBhcmVudElubGluZUJveCkpOwotICAgICAgICAgICAgaW5saW5lQm94UmFu
Z2VMaXN0LmFwcGVuZCh7IGlubGluZUJveERpc3BsYXlCb3hNYXAuZ2V0KHBhcmVudElubGluZUJv
eCksIGJveGVzLnNpemUoKSB9KTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgaWYgKG5lZWRzTm9u
Um9vdElubGluZUJveERpc3BsYXlCb3gpCi0gICAgICAgIGNyZWF0ZURpc3BsYXlCb3hlc0luVmlz
dWFsT3JkZXJGb3JJbmxpbmVCb3hlcygpOwotCi0gICAgYXV0byBhZGp1c3RWaXN1YWxHZW9tZXRy
eVdpdGhJbmxpbmVCb3hlcyA9IFsmXSB7Ci0gICAgICAgIHNpemVfdCBjdXJyZW50SW5saW5lQm94
ID0gMDsKLSAgICAgICAgYXV0byBhY2N1bXVsYXRlZE9mZnNldCA9IElubGluZUxheW91dFVuaXQg
eyB9OwotCi0gICAgICAgIEFTU0VSVChib3hlc1swXS5pc1Jvb3RJbmxpbmVCb3goKSk7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMTsgaW5kZXggPCBib3hlcy5zaXplKCk7ICsraW5kZXgp
IHsKLSAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBib3hlc1tpbmRleF07Ci0gICAgICAg
ICAgICBkaXNwbGF5Qm94Lm1vdmVIb3Jpem9udGFsbHkoYWNjdW11bGF0ZWRPZmZzZXQpOwotCi0g
ICAgICAgICAgICB3aGlsZSAoY3VycmVudElubGluZUJveCA8IGlubGluZUJveFJhbmdlTGlzdC5z
aXplKCkgJiYgaW5kZXggPT0gaW5saW5lQm94UmFuZ2VMaXN0W2N1cnJlbnRJbmxpbmVCb3hdLmVu
ZCgpIC0gMSkgewotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBp
bmxpbmUgYm94IGNvbnRlbnQuCi0gICAgICAgICAgICAgICAgLy8gTGV0J3MgY29tcHV0ZSB0aGUg
aW5saW5lIGJveCB3aWR0aCBhbmQgb2Zmc2V0IHRoZSByZXN0IG9mIHRoZSBjb250ZW50IHdpdGgg
cGFkZGluZy9ib3JkZXIvbWFyZ2luIGVuZC4KLSAgICAgICAgICAgICAgICBhdXRvIGlubGluZUJv
eFJhbmdlID0gaW5saW5lQm94UmFuZ2VMaXN0W2N1cnJlbnRJbmxpbmVCb3grK107Ci0gICAgICAg
ICAgICAgICAgYXV0byYgaW5saW5lQm94RGlzcGxheUJveCA9IGJveGVzW2lubGluZUJveFJhbmdl
LmJlZ2luKCldOwotICAgICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVCb3hEaXNwbGF5Qm94Lmlz
Tm9uUm9vdElubGluZUJveCgpKTsKLQotICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5
ID0gZm9ybWF0dGluZ1N0YXRlKCkuYm94R2VvbWV0cnkoaW5saW5lQm94RGlzcGxheUJveC5sYXlv
dXRCb3goKSk7Ci0gICAgICAgICAgICAgICAgYXV0byBjb250ZW50UmlnaHQgPSBkaXNwbGF5Qm94
LmxvZ2ljYWxSaWdodCgpOwotICAgICAgICAgICAgICAgIGlmIChpbmxpbmVCb3hEaXNwbGF5Qm94
LmlzTGFzdEZvckxheW91dEJveCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVk
T2Zmc2V0ICs9IGJveEdlb21ldHJ5LmJvcmRlckFuZFBhZGRpbmdFbmQoKSArIGJveEdlb21ldHJ5
Lm1hcmdpbkVuZCgpOwotICAgICAgICAgICAgICAgICAgICBpbmxpbmVCb3hEaXNwbGF5Qm94LnNl
dExvZ2ljYWxSaWdodChjb250ZW50UmlnaHQgKyBib3hHZW9tZXRyeS5ib3JkZXJBbmRQYWRkaW5n
RW5kKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBpbmxp
bmVCb3hEaXNwbGF5Qm94LnNldExvZ2ljYWxSaWdodChjb250ZW50UmlnaHQpOworICAgICAgICAg
ICAgZm9yIChhdXRvIGluZGV4IDogbGFzdERpc3BsYXlCb3hJbmRleGVzLnZhbHVlcygpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3goYm94
ZXNbaW5kZXhdLmxheW91dEJveCgpKS5pc0xhc3RCb3goKSkKKyAgICAgICAgICAgICAgICAgICAg
Ym94ZXNbaW5kZXhdLnNldElzTGFzdEZvckxheW91dEJveCh0cnVlKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChkaXNwbGF5Qm94LmlzTm9uUm9vdElubGluZUJveCgpICYmIGRpc3Bs
YXlCb3guaXNGaXJzdEZvckxheW91dEJveCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgbGF5
b3V0Qm94ID0gZGlzcGxheUJveC5sYXlvdXRCb3goKTsKLSAgICAgICAgICAgICAgICBhdXRvJiBi
b3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KGxheW91dEJveCk7Cisg
ICAgICAgIH07CisgICAgICAgIGNvbXB1dGVJc0ZpcnN0SXNMYXN0Qm94KCk7CiAKLSAgICAgICAg
ICAgICAgICBkaXNwbGF5Qm94Lm1vdmVIb3Jpem9udGFsbHkoYm94R2VvbWV0cnkubWFyZ2luU3Rh
cnQoKSk7Ci0gICAgICAgICAgICAgICAgYWNjdW11bGF0ZWRPZmZzZXQgKz0gYm94R2VvbWV0cnku
bWFyZ2luU3RhcnQoKSArIGJveEdlb21ldHJ5LmJvcmRlckFuZFBhZGRpbmdTdGFydCgpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLSAgICBpZiAobmVlZHNEaXNwbGF5Qm94SG9y
aXpvbnRhbEFkanVzdG1lbnQpCisgICAgICAgIGF1dG8gYWRqdXN0VmlzdWFsR2VvbWV0cnlXaXRo
SW5saW5lQm94ZXMgPSBbJl0geworICAgICAgICAgICAgYXV0byBjb250ZW50UmlnaHRJblZpc3Vh
bE9yZGVyID0gbGluZUJveExvZ2ljYWxUb3BMZWZ0LngoKSArIGNvbnRlbnRTdGFydEluVmlzdWFs
T3JkZXI7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxkRGlzcGxheUJveE5vZGUgOiByb290
RGlzcGxheUJveE5vZGUuY2hpbGRyZW4pCisgICAgICAgICAgICAgICAgYWRqdXN0VmlzdWFsR2Vv
bWV0cnlGb3JDaGlsZE5vZGUoKmNoaWxkRGlzcGxheUJveE5vZGUsIGNvbnRlbnRSaWdodEluVmlz
dWFsT3JkZXIsIGxpbmVCb3hMb2dpY2FsVG9wTGVmdC55KCksIGJveGVzLCBsaW5lQm94KTsKKyAg
ICAgICAgfTsKICAgICAgICAgYWRqdXN0VmlzdWFsR2VvbWV0cnlXaXRoSW5saW5lQm94ZXMoKTsK
LQotICAgIGF1dG8gY29tcHV0ZUlubGluZUJveEdlb21ldHJ5ID0gWyZdIHsKLSAgICAgICAgQVNT
RVJUKCFpbmxpbmVCb3hSYW5nZUxpc3QuaXNFbXB0eSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBp
bmxpbmVCb3hSYW5nZSA6IGlubGluZUJveFJhbmdlTGlzdCkgewotICAgICAgICAgICAgYXV0byYg
aW5saW5lQm94RGlzcGxheUJveCA9IGJveGVzW2lubGluZUJveFJhbmdlLmJlZ2luKCldOwotICAg
ICAgICAgICAgc2V0SW5saW5lQm94R2VvbWV0cnkoaW5saW5lQm94RGlzcGxheUJveC5sYXlvdXRC
b3goKSwgaW5saW5lQm94RGlzcGxheUJveC5sb2dpY2FsUmVjdCgpLCBpbmxpbmVCb3hEaXNwbGF5
Qm94LmlzRmlyc3RGb3JMYXlvdXRCb3goKSk7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIGlmIChu
ZWVkc05vblJvb3RJbmxpbmVCb3hEaXNwbGF5Qm94KQotICAgICAgICBjb21wdXRlSW5saW5lQm94
R2VvbWV0cnkoKTsKKyAgICB9CiB9CiAKIHZvaWQgSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVy
Ojpwcm9jZXNzT3ZlcmZsb3duUnVuc0ZvckVsbGlwc2lzKERpc3BsYXlCb3hlcyYgYm94ZXMsIElu
bGluZUxheW91dFVuaXQgbGluZUJveExvZ2ljYWxSaWdodCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250
ZW50QnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9p
bmxpbmUvSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyLmgKaW5kZXggODg5NDk0ZDNiNzg5OTll
ZGRkYTk5YWRkZTNhYTVlNTVjZjM1YzcxMi4uODBjM2EwNjY3NWMxNDg5YTE4NGNlZGU4MmEwM2Rm
M2Y2MjIzMWNkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9pbmxpbmUvSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRGlzcGxheUNv
bnRlbnRCdWlsZGVyLmgKQEAgLTMzLDcgKzMzLDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5h
bWVzcGFjZSBMYXlvdXQgewogCitzdHJ1Y3QgQW5jZXN0b3JTdGFjazsKIGNsYXNzIENvbnRhaW5l
ckJveDsKK3N0cnVjdCBEaXNwbGF5Qm94Tm9kZTsKIGNsYXNzIElubGluZUZvcm1hdHRpbmdTdGF0
ZTsKIGNsYXNzIExpbmVCb3g7CiAKQEAgLTU3LDEwICs1OSwxMCBAQCBwcml2YXRlOgogICAgIHZv
aWQgYXBwZW5kQXRvbWljSW5saW5lTGV2ZWxEaXNwbGF5Qm94KGNvbnN0IExpbmU6OlJ1biYsIGNv
bnN0IElubGluZVJlY3QmICwgRGlzcGxheUJveGVzJik7CiAgICAgdm9pZCBhcHBlbmRJbmxpbmVC
b3hEaXNwbGF5Qm94KGNvbnN0IExpbmU6OlJ1biYsIGNvbnN0IElubGluZUxldmVsQm94JiwgY29u
c3QgSW5saW5lUmVjdCYsIGJvb2wgbGluZWhhc0NvbnRlbnQsIERpc3BsYXlCb3hlcyYpOwogICAg
IHZvaWQgYXBwZW5kU3Bhbm5pbmdJbmxpbmVCb3hEaXNwbGF5Qm94KGNvbnN0IExpbmU6OlJ1biYs
IGNvbnN0IElubGluZUxldmVsQm94JiwgY29uc3QgSW5saW5lUmVjdCYsIERpc3BsYXlCb3hlcyYp
OwotICAgIHZvaWQgaW5zZXJ0SW5saW5lQm94RGlzcGxheUJveEZvckJpZGlCb3VuZGFyeShjb25z
dCBJbmxpbmVMZXZlbEJveCYsIGNvbnN0IElubGluZVJlY3QmLCBib29sIGlzRmlyc3RJbmxpbmVC
b3hGcmFnbWVudCwgc2l6ZV90IGluc2VydGlvblBvaW50LCBEaXNwbGF5Qm94ZXMmKTsKLSAgICB2
b2lkIGFkanVzdElubGluZUJveERpc3BsYXlCb3hGb3JCaWRpQm91bmRhcnkoSW5saW5lRGlzcGxh
eTo6Qm94JiwgY29uc3QgSW5saW5lUmVjdCYpOwogCiAgICAgdm9pZCBzZXRJbmxpbmVCb3hHZW9t
ZXRyeShjb25zdCBCb3gmLCBjb25zdCBJbmxpbmVSZWN0JiwgYm9vbCBpc0ZpcnN0SW5saW5lQm94
RnJhZ21lbnQpOworICAgIHZvaWQgYWRqdXN0VmlzdWFsR2VvbWV0cnlGb3JDaGlsZE5vZGUoY29u
c3QgRGlzcGxheUJveE5vZGUmLCBJbmxpbmVMYXlvdXRVbml0JiBhY2N1bXVsYXRlZE9mZnNldCwg
SW5saW5lTGF5b3V0VW5pdCBsaW5lQm94TG9naWNhbFRvcCwgRGlzcGxheUJveGVzJiwgY29uc3Qg
TGluZUJveCYpOworICAgIERpc3BsYXlCb3hOb2RlJiBlbnN1cmVEaXNwbGF5Qm94Rm9yQ29udGFp
bmVyKGNvbnN0IENvbnRhaW5lckJveCYsIEFuY2VzdG9yU3RhY2smLCBEaXNwbGF5Qm94ZXMmKTsK
IAogICAgIGNvbnN0IENvbnRhaW5lckJveCYgcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0
dGluZ0NvbnRleHRSb290OyB9CiAgICAgSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5n
U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdTdGF0ZTsgfSAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3BsYXkv
SW5saW5lRGlzcGxheUJveC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9pbmxpbmUvZGlzcGxheS9JbmxpbmVEaXNwbGF5Qm94LmgKaW5kZXggNWYwYTI3NTA0NGY0
NjAyZTQ1NjYzNGYwYjE0ZGNmYmM2M2RiYzNlMy4uMDA0OTljODE3ODBjYzlkOTc3OGJkNTljNjhh
NTFjOTBmNmEyOWFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9pbmxpbmUvZGlzcGxheS9JbmxpbmVEaXNwbGF5Qm94LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvZGlzcGxheS9JbmxpbmVE
aXNwbGF5Qm94LmgKQEAgLTExOCw3ICsxMTgsMjQgQEAgc3RydWN0IEJveCB7CiAgICAgfQogICAg
IHZvaWQgYWRqdXN0SW5rT3ZlcmZsb3coY29uc3QgTGF5b3V0OjpJbmxpbmVSZWN0JiBjaGlsZEJv
cmRlckJveCkgeyByZXR1cm4gbV9pbmtPdmVyZmxvdy5leHBhbmRUb0NvbnRhaW4oY2hpbGRCb3Jk
ZXJCb3gpOyB9CiAgICAgdm9pZCB0cnVuY2F0ZShMYXlvdXQ6OklubGluZUxheW91dFVuaXQgdHJ1
bmNhdGVkd2lkdGggPSAwLmYpOwotICAgIHZvaWQgc2V0TG9naWNhbFJpZ2h0KExheW91dDo6SW5s
aW5lTGF5b3V0VW5pdCByaWdodCkgeyBtX2xvZ2ljYWxSZWN0LnNldFJpZ2h0KHJpZ2h0KTsgfQor
ICAgIHZvaWQgc2V0TG9naWNhbExlZnQoTGF5b3V0OjpJbmxpbmVMYXlvdXRVbml0IGxlZnQpCisg
ICAgeworICAgICAgICBhdXRvIG9mZnNldCA9IGxlZnQgLSBsb2dpY2FsTGVmdCgpOworICAgICAg
ICBtX2xvZ2ljYWxSZWN0LnNldExlZnQobGVmdCk7CisgICAgICAgIG1faW5rT3ZlcmZsb3cuc2V0
TGVmdChtX2lua092ZXJmbG93LmxlZnQoKSArIG9mZnNldCk7CisgICAgfQorICAgIHZvaWQgc2V0
TG9naWNhbFJpZ2h0KExheW91dDo6SW5saW5lTGF5b3V0VW5pdCByaWdodCkKKyAgICB7CisgICAg
ICAgIGF1dG8gb2Zmc2V0ID0gcmlnaHQgLSBsb2dpY2FsUmlnaHQoKTsKKyAgICAgICAgbV9sb2dp
Y2FsUmVjdC5zZXRSaWdodChyaWdodCk7CisgICAgICAgIG1faW5rT3ZlcmZsb3cuc2V0UmlnaHQo
bV9pbmtPdmVyZmxvdy5yaWdodCgpICsgb2Zmc2V0KTsKKyAgICB9CisgICAgdm9pZCBzZXRMb2dp
Y2FsUmVjdChjb25zdCBMYXlvdXQ6OklubGluZVJlY3QmIHJlY3QsIGNvbnN0IExheW91dDo6SW5s
aW5lUmVjdCYgaW5rT3ZlcmZsb3cpCisgICAgeworICAgICAgICBtX2xvZ2ljYWxSZWN0ID0gcmVj
dDsKKyAgICAgICAgbV9pbmtPdmVyZmxvdyA9IGlua092ZXJmbG93OworICAgIH0KKyAgICB2b2lk
IHNldEhhc0NvbnRlbnQoKSB7IG1faGFzQ29udGVudCA9IHRydWU7IH0KIAogICAgIHN0ZDo6b3B0
aW9uYWw8VGV4dD4mIHRleHQoKSB7IHJldHVybiBtX3RleHQ7IH0KICAgICBjb25zdCBzdGQ6Om9w
dGlvbmFsPFRleHQ+JiB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0OyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446555</attachid>
            <date>2021-12-09 08:48:28 -0800</date>
            <delta_ts>2021-12-09 09:28:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233880-20211209084828.patch</filename>
            <type>text/plain</type>
            <size>29429</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2RiMmM4OGI1NDQ1M2Iy
ODE3MDEwYjBiYjVhMWZlNjllNDQ4MDgzYS4uMDQxMWM1YTI2OTJkMjA2MWIwNDcwNDNiYzJlYmE4
NzQxMjQ4NWFmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIxLTEyLTA5ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXVtJRkNdIFJlZmFjdG9y
IGJpZGkgaW5saW5lIGJveCBib3VuZGFyeSBoYW5kbGluZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzODgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
QW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgVGhpcyBwYXRjaCByZW1vdmUgc29tZSBjb2RlIGNv
bXBsZXhpdHkgYnkgaW50cm9kdWNpbmcgbW9yZSBzdWl0YWJsZSBkYXRhIHR5cGVzIHRvIGhhbmRs
ZQorICAgICAgICBjb250ZW50IHJhbmdlcyBmb3IgaW5saW5lIGJveGVzLgorCisgICAgICAgIDEu
IFRoZSBmaW5hbCBvdXRwdXQgb2YgdGhlIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlciBpcyBh
IGxpc3Qgb2YgZGlzcGxheSBib3hlcy4KKyAgICAgICAgICBJdCdzIGEgc2ltcGxlICJvbmUgYm94
IHJpZ2h0IGFmdGVyIHRoZSBvdGhlciIgdHlwZSBvZiBzZXR1cCB3aXRoIGNvbnRpbnVvdXMgZ2Vv
bWV0cnkgKGllIG5leHQgYm94IHN0YXJ0cyB3aGVyZQorICAgICAgICAgIHRoZSBwcmV2aW91cyBl
bmRzICstaG9yaXpvbnRhbCBtYXJnaW5zKSB1bmxlc3MgdGhlIGNvbnRlbnQgaXMgZW1iZWRkZWQg
aW4gYW4gaW5saW5lIGJveCAoZS5nLiA8c3Bhbj5lbWJlZGRlZCBjb250ZW50PC9zcGFuPikKKyAg
ICAgICAgICBJbmxpbmUgYm94IHR5cGUgb2YgZGlzcGxheSBib3hlcyBlbmNsb3NlIGFsbCB0aGVp
ciBkZXNjZW5kYW50IGNvbnRlbnQuCisgICAgICAgICAgTm9ybWFsbHkgd2hlbiB0aGUgbG9naWNh
bCBvcmRlciA9PSB2aXN1YWwgb3JkZXIgKHVuaWRpcmVjdGlvbmFsIGNvbnRlbnQpLCB0aGUKKyAg
ICAgICAgICBkZXNjZW5kYW50IGNvbnRlbnQgZW5kcyByaWdodCBiZWZvcmUgdGhlICJpbmxpbmUg
Ym94IGVuZCIgbWFyayAoPC9zcGFuPikuIAorICAgICAgICAgIEl0IG1ha2VzIGl0IGVhc3kgdG8g
Y29tcHV0ZSB0aGUgcmlnaHQgZWRnZS9lbmNsb3Npbmcgd2lkdGggZm9yIHRoZSBpbmxpbmUgYm94
IHR5cGUgb2YgZGlzcGxheSBib3hlcy4KKyAgICAgICAgMi4gSG93ZXZlciB0aGUgdmlzdWFsIG9y
ZGVyIG9mIHRoZSBiaWRpIGNvbnRlbnQgbWFrZXMgdGhlICJsZXQncyB1c2UgdGhlIGlubGluZSBi
b3ggZW5kIG1hcmsiIGxvZ2ljIHVudXNhYmxlIGFzCisgICAgICAgICAgd2UgbWF5IHNlZSB0aGUg
ImlubGluZSBib3ggZW5kIiBtYXJrIGV2ZW4gYmVmb3JlIHdlIGNvbWUgYWNyb3NzIGFueSBkZXNj
ZW5kYW50IGNvbnRlbnQKKyAgICAgICAgICAodGhlcmUgYXJlIG90aGVyIHR5cGVzIG9mIGNvbmZ1
c2lvbnMgd2l0aCByYW5kb20gb3JkZXJpbmcpLgorICAgICAgICAzLiBXb3JraW5nIHdpdGggYSBs
aXN0IHdoZW4gdGhlIGNvbnRlbnQgY29tZXMgaW4gYSBuZXN0ZWQgZmxhdm9yIG1heSBpbnRyb2R1
Y2Ugc29tZSBjb21wbGV4aXR5IChlLmcuIG5lZWQgdG8ga2VlcCBjb250ZW50IHJhbmdlcyBhcm91
bmQpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHZlcnkgc2ltcGxlIERpc3Bs
YXlCb3hOb2RlIHR5cGUgd2hpY2gga2VlcHMgdHJhY2sgb2YgdGhlIGRpc3BsYXkgYm94ZXMgaW4g
YSB0cmVlIGZhc2hpb24uCisgICAgICAgIFRoZSBkaXNwbGF5IGJveGVzIGFyZSBzdGlsbCBzdG9y
ZWQgaW4gYSBsaXN0LCB3aGlsZSB0aGlzIG5ld2x5IGludHJvZHVjZWQgRGlzcGxheUJveE5vZGUg
dHJlZSBoZWxwcyB0cmF2ZXJzaW5nCisgICAgICAgIHRoZSBuZXN0ZWQgY29udGVudC4KKyAgICAg
ICAgSXQgaGVscHMgZmluZGluZyBvdXQgdGhlIGluc2VydGlvbiBwb2ludCBhdCB1bmV4cGVjdGVk
IGJpZGkgYm91bmRhcmllcyAoZS5nLiB3aGVuIG5lc3RlZCBjb250ZW50IGZyb20gb3RoZXIgaW5s
aW5lIGJveGVzCisgICAgICAgIHNob3cgdXAgaW4gYSBsb2dpY2FsbHkgdW5yZWxhdGVkIGlubGlu
ZSBib3gpIGFuZCBpdCBpcyBhbHNvIHZlcnkgdmFsdWFibGUgd2hlbiBjb21wdXRpbmcgdmlzdWFs
IGdlb21ldHJpZXMgZm9yIHRob3NlIGVuY2xvc2luZyBkaXNwbGF5IGJveGVzLiAKKworICAgICAg
ICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50
QnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkRpc3BsYXlCb3hOb2RlOjpE
aXNwbGF5Qm94Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkRpc3BsYXlCb3hOb2Rl
OjphcHBlbmRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkFuY2VzdG9yU3RhY2s6
OnVud2luZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkFuY2VzdG9yU3RhY2s6OnB1c2gp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6
OmVuc3VyZURpc3BsYXlCb3hGb3JDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OmFkanVzdFZpc3VhbEdlb21ldHJ5Rm9yQ2hp
bGROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRC
dWlsZGVyOjppbnNlcnRJbmxpbmVCb3hEaXNwbGF5Qm94Rm9yQmlkaUJvdW5kYXJ5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVy
OjphZGp1c3RJbmxpbmVCb3hEaXNwbGF5Qm94Rm9yQmlkaUJvdW5kYXJ5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjpwcm9j
ZXNzQmlkaUNvbnRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OnByb2Nlc3NPdmVyZmxvd25SdW5zRm9yRWxsaXBzaXMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVEaXNwbGF5Q29udGVu
dEJ1aWxkZXI6OmNvbGxlY3RJbmtPdmVyZmxvd0ZvcklubGluZUJveGVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjpjb21w
dXRlSXNGaXJzdElzTGFzdEJveEZvcklubGluZUNvbnRlbnQpOiBEZWxldGVkLgorICAgICAgICAq
IGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50QnVp
bGRlci5oOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3Bs
YXkvSW5saW5lRGlzcGxheUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRGlzcGxheTo6
Qm94OjpzZXRMb2dpY2FsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVEaXNwbGF5OjpC
b3g6OnNldExvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVEaXNwbGF5OjpC
b3g6OnNldExvZ2ljYWxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZURpc3BsYXk6OkJv
eDo6c2V0SGFzQ29udGVudCk6CisKIDIwMjEtMTItMDkgIFR5bGVyIFdpbGNvY2sgIDx0eWxlcl93
QGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogVXNlIFJlZlB0cjxBWENvcmVPYmplY3Q+IGluc3Rl
YWQgb2YgcmF3IEFYQ29yZU9iamVjdCogcG9pbnRlcnMgaW4gQWNjZXNzaWJpbGl0eTo6ZmluZE1h
dGNoaW5nT2JqZWN0cyBhbmQgZG93bnN0cmVhbSBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlD
b250ZW50QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2lubGluZS9JbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwCmluZGV4IDY5N2FlMjg5
YjNkMWU1ODRlOTczZDZiOWU5MDcyMDc2ZDNjMTIyN2MuLjFlNzJjMTg5MDAyY2M4MjUwODM1NGM1
OTU2ZDBmZWJiNTJkYmUwZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50QnVpbGRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5l
RGlzcGxheUNvbnRlbnRCdWlsZGVyLmNwcApAQCAtMjc1LDM1ICsyNzUsNiBAQCB2b2lkIElubGlu
ZURpc3BsYXlDb250ZW50QnVpbGRlcjo6YXBwZW5kU3Bhbm5pbmdJbmxpbmVCb3hEaXNwbGF5Qm94
KGNvbnN0IExpbmU6OgogICAgIHNldElubGluZUJveEdlb21ldHJ5KGxheW91dEJveCwgaW5saW5l
Qm94Qm9yZGVyQm94LCBmYWxzZSk7CiB9CiAKLXZvaWQgSW5saW5lRGlzcGxheUNvbnRlbnRCdWls
ZGVyOjppbnNlcnRJbmxpbmVCb3hEaXNwbGF5Qm94Rm9yQmlkaUJvdW5kYXJ5KGNvbnN0IElubGlu
ZUxldmVsQm94JiBpbmxpbmVCb3gsIGNvbnN0IElubGluZVJlY3QmIGlubGluZUJveFJlY3QsIGJv
b2wgaXNGaXJzdElubGluZUJveEZyYWdtZW50LCBzaXplX3QgaW5zZXJ0aW9uUG9pbnQsIERpc3Bs
YXlCb3hlcyYgYm94ZXMpCi17Ci0gICAgQVNTRVJUKGlubGluZUJveC5pc0lubGluZUJveCgpKTsK
LQotICAgIGF1dG8gaXNGaXJzdExhc3RCb3ggPSBPcHRpb25TZXQ8SW5saW5lRGlzcGxheTo6Qm94
OjpQb3NpdGlvbldpdGhpbklubGluZUxldmVsQm94PiB7IH07Ci0gICAgaWYgKGlubGluZUJveC5p
c0ZpcnN0Qm94KCkgJiYgaXNGaXJzdElubGluZUJveEZyYWdtZW50KQotICAgICAgICBpc0ZpcnN0
TGFzdEJveC5hZGQoeyBJbmxpbmVEaXNwbGF5OjpCb3g6OlBvc2l0aW9uV2l0aGluSW5saW5lTGV2
ZWxCb3g6OkZpcnN0IH0pOwotICAgIGlmIChpbmxpbmVCb3guaXNMYXN0Qm94KCkpCi0gICAgICAg
IGlzRmlyc3RMYXN0Qm94LmFkZCh7IElubGluZURpc3BsYXk6OkJveDo6UG9zaXRpb25XaXRoaW5J
bmxpbmVMZXZlbEJveDo6TGFzdCB9KTsKLQotICAgIC8vIEZJWE1FOiBDb21wdXRlIGluayBvdmVy
Zmxvdy4KLSAgICBib3hlcy5pbnNlcnQoaW5zZXJ0aW9uUG9pbnQsIHsgbV9saW5lSW5kZXgKLSAg
ICAgICAgLCBJbmxpbmVEaXNwbGF5OjpCb3g6OlR5cGU6Ok5vblJvb3RJbmxpbmVCb3gKLSAgICAg
ICAgLCBpbmxpbmVCb3gubGF5b3V0Qm94KCkKLSAgICAgICAgLCBVQklESV9ERUZBVUxUX0xUUgot
ICAgICAgICAsIGlubGluZUJveFJlY3QKLSAgICAgICAgLCBpbmxpbmVCb3hSZWN0Ci0gICAgICAg
ICwgeyB9Ci0gICAgICAgICwgeyB9Ci0gICAgICAgICwgdHJ1ZQotICAgICAgICAsIGlzRmlyc3RM
YXN0Qm94IH0pOwotfQotCi12b2lkIElubGluZURpc3BsYXlDb250ZW50QnVpbGRlcjo6YWRqdXN0
SW5saW5lQm94RGlzcGxheUJveEZvckJpZGlCb3VuZGFyeShJbmxpbmVEaXNwbGF5OjpCb3gmIGRp
c3BsYXlCb3gsIGNvbnN0IElubGluZVJlY3QmIGlubGluZUJveFJlY3QpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGRpc3BsYXlCb3gpOwotICAgIFVOVVNFRF9QQVJBTShpbmxpbmVCb3hSZWN0KTsKLX0K
LQogdm9pZCBJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OnByb2Nlc3NOb25CaWRpQ29udGVu
dChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50LCBjb25zdCBMaW5l
Qm94JiBsaW5lQm94LCBjb25zdCBJbmxpbmVMYXlvdXRQb2ludCYgbGluZUJveExvZ2ljYWxUb3BM
ZWZ0LCBEaXNwbGF5Qm94ZXMmIGJveGVzKQogewogICAgIC8vIENyZWF0ZSB0aGUgaW5saW5lIGJv
eGVzIG9uIHRoZSBjdXJyZW50IGxpbmUuIFRoaXMgaXMgbW9zdGx5IHRleHQgYW5kIGF0b21pYyBp
bmxpbmUgYm94ZXMuCkBAIC0zNTgsMzEgKzMyOSwxNDMgQEAgdm9pZCBJbmxpbmVEaXNwbGF5Q29u
dGVudEJ1aWxkZXI6OnByb2Nlc3NOb25CaWRpQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGlu
ZUMKICAgICB9CiB9CiAKK3N0cnVjdCBEaXNwbGF5Qm94Tm9kZSB7CisgICAgV1RGX01BS0VfU1RS
VUNUX0ZBU1RfQUxMT0NBVEVEOworICAgIERpc3BsYXlCb3hOb2RlKCkgPSBkZWZhdWx0OworICAg
IERpc3BsYXlCb3hOb2RlKHNpemVfdCBpbmRleCwgRGlzcGxheUJveE5vZGUqIHBhcmVudCkKKyAg
ICAgICAgOiBpbmRleChpbmRleCkKKyAgICAgICAgLCBwYXJlbnQocGFyZW50KQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgIHZvaWQgYXBwZW5kQ2hpbGQoc2l6ZV90IGNoaWxkSW5kZXgpIHsg
Y2hpbGRyZW4uYXBwZW5kKG1ha2VVbmlxdWU8RGlzcGxheUJveE5vZGU+KGNoaWxkSW5kZXgsIHRo
aXMpKTsgfQorCisgICAgc2l6ZV90IGluZGV4IHsgMCB9OworICAgIERpc3BsYXlCb3hOb2RlKiBw
YXJlbnQgeyBudWxscHRyIH07CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5Qm94
Tm9kZT4+IGNoaWxkcmVuOworfTsKKworc3RydWN0IEFuY2VzdG9yU3RhY2sgeworICAgIERpc3Bs
YXlCb3hOb2RlKiB1bndpbmQoY29uc3QgQ29udGFpbmVyQm94JiBjb250YWluZXJCb3gpCisgICAg
eworICAgICAgICAvLyBVbndpbmQgdGhlIHN0YWNrIGFsbCB0aGUgd2F5IHRvIGNvbnRhaW5lciBi
b3guCisgICAgICAgIGlmICghbV9zZXQuY29udGFpbnMoJmNvbnRhaW5lckJveCkpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgd2hpbGUgKG1fc2V0Lmxhc3QoKSAhPSAmY29u
dGFpbmVyQm94KSB7CisgICAgICAgICAgICBtX3N0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAg
ICAgIG1fc2V0LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBSb290IGlzIGFs
d2F5cyBhIGNvbW1vbiBhbmNlc3Rvci4KKyAgICAgICAgQVNTRVJUKCFtX3N0YWNrLmlzRW1wdHko
KSk7CisgICAgICAgIHJldHVybiBtX3N0YWNrLmxhc3QoKTsKKyAgICB9CisKKyAgICB2b2lkIHB1
c2goRGlzcGxheUJveE5vZGUmIGRpc3BsYXlCb3hOb2RlLCBjb25zdCBDb250YWluZXJCb3gmIGNv
bnRhaW5lckJveCkKKyAgICB7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKCZkaXNwbGF5Qm94Tm9k
ZSk7CisgICAgICAgIEFTU0VSVCghbV9zZXQuY29udGFpbnMoJmNvbnRhaW5lckJveCkpOworICAg
ICAgICBtX3NldC5hZGQoJmNvbnRhaW5lckJveCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZl
Y3RvcjxEaXNwbGF5Qm94Tm9kZSo+IG1fc3RhY2s7CisgICAgTGlzdEhhc2hTZXQ8Y29uc3QgQ29u
dGFpbmVyQm94Kj4gbV9zZXQ7Cit9OworCitEaXNwbGF5Qm94Tm9kZSYgSW5saW5lRGlzcGxheUNv
bnRlbnRCdWlsZGVyOjplbnN1cmVEaXNwbGF5Qm94Rm9yQ29udGFpbmVyKGNvbnN0IENvbnRhaW5l
ckJveCYgY29udGFpbmVyQm94LCBBbmNlc3RvclN0YWNrJiBhbmNlc3RvclN0YWNrLCBEaXNwbGF5
Qm94ZXMmIGJveGVzKQoreworICAgIEFTU0VSVChjb250YWluZXJCb3guaXNJbmxpbmVCb3goKSB8
fCAmY29udGFpbmVyQm94ID09ICZyb290KCkpOworICAgIGlmIChhdXRvKiBsb3dlc3RDb21tb25B
bmNlc3RvciA9IGFuY2VzdG9yU3RhY2sudW53aW5kKGNvbnRhaW5lckJveCkpCisgICAgICAgIHJl
dHVybiAqbG93ZXN0Q29tbW9uQW5jZXN0b3I7CisgICAgYXV0byYgZW5jbG9zaW5nRGlzcGxheUJv
eE5vZGVGb3JDb250YWluZXIgPSBlbnN1cmVEaXNwbGF5Qm94Rm9yQ29udGFpbmVyKGNvbnRhaW5l
ckJveC5wYXJlbnQoKSwgYW5jZXN0b3JTdGFjaywgYm94ZXMpOworICAgIGJveGVzLmFwcGVuZCh7
IG1fbGluZUluZGV4LCBJbmxpbmVEaXNwbGF5OjpCb3g6OlR5cGU6Ok5vblJvb3RJbmxpbmVCb3gs
IGNvbnRhaW5lckJveCwgVUJJRElfREVGQVVMVF9MVFIsIHsgfSwgeyB9LCB7IH0sIHsgfSwgdHJ1
ZSwgeyB9IH0pOworCisgICAgZW5jbG9zaW5nRGlzcGxheUJveE5vZGVGb3JDb250YWluZXIuYXBw
ZW5kQ2hpbGQoYm94ZXMuc2l6ZSgpIC0gMSk7CisgICAgYXV0byYgZGlzcGxheUJveE5vZGVGb3JD
b250YWluZXIgPSAqZW5jbG9zaW5nRGlzcGxheUJveE5vZGVGb3JDb250YWluZXIuY2hpbGRyZW4u
bGFzdCgpOworICAgIGFuY2VzdG9yU3RhY2sucHVzaChkaXNwbGF5Qm94Tm9kZUZvckNvbnRhaW5l
ciwgY29udGFpbmVyQm94KTsKKyAgICByZXR1cm4gZGlzcGxheUJveE5vZGVGb3JDb250YWluZXI7
Cit9CisKK3ZvaWQgSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjphZGp1c3RWaXN1YWxHZW9t
ZXRyeUZvckNoaWxkTm9kZShjb25zdCBEaXNwbGF5Qm94Tm9kZSYgZGlzcGxheUJveE5vZGUsIElu
bGluZUxheW91dFVuaXQmIGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIsIElubGluZUxheW91dFVu
aXQgbGluZUJveExvZ2ljYWxUb3AsIERpc3BsYXlCb3hlcyYgYm94ZXMsIGNvbnN0IExpbmVCb3gm
IGxpbmVCb3gpCit7CisgICAgLy8gTm9uLWlubGluZSBib3ggZGlzcGxheSBib3hlcyBqdXN0IG5l
ZWQgYSBob3Jpem9udGFsIGFkanVzdG1lbnQgd2hpbGUKKyAgICAvLyBpbmxpbmUgYm94IHR5cGUg
b2YgZGlzcGxheSBib3hlcyBuZWVkCisgICAgLy8gMS4gaG9yaXpvbnRhbCBhZGp1c3RtZW50IGFu
ZCBtYXJnaW4vYm9yZGVyL3BhZGRpbmcgc3RhcnQgb2Zmc2V0dGluZyBvbiB0aGUgZmlyc3QgYm94
CisgICAgLy8gMi4gcmlnaHQgZWRnZSBjb21wdXRhdGlvbiBpbmNsdWRpbmcgZGVzY2VuZGFudCBj
b250ZW50IHdpZHRoIGFuZCBtYXJnaW4vYm9yZGVyL3BhZGRpbmcgZW5kIG9mZnNldHRpbmcgb24g
dGhlIGxhc3QgYm94CisgICAgQVNTRVJUKGRpc3BsYXlCb3hOb2RlLmluZGV4KTsKKyAgICBhdXRv
JiBkaXNwbGF5Qm94ID0gYm94ZXNbZGlzcGxheUJveE5vZGUuaW5kZXhdOworICAgIGF1dG8mIGxh
eW91dEJveCA9IGRpc3BsYXlCb3gubGF5b3V0Qm94KCk7CisKKyAgICBpZiAoIWRpc3BsYXlCb3gu
aXNOb25Sb290SW5saW5lQm94KCkpIHsKKyAgICAgICAgZGlzcGxheUJveC5zZXRMb2dpY2FsTGVm
dChjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyKTsKKyAgICAgICAgY29udGVudFJpZ2h0SW5WaXN1
YWxPcmRlciArPSBkaXNwbGF5Qm94LmxvZ2ljYWxXaWR0aCgpOworICAgICAgICBpZiAoZGlzcGxh
eUJveC5pc0F0b21pY0lubGluZUxldmVsQm94KCkgfHwgZGlzcGxheUJveC5pc0dlbmVyaWNJbmxp
bmVMZXZlbEJveCgpKQorICAgICAgICAgICAgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciArPSBm
b3JtYXR0aW5nU3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpLm1hcmdpbkVuZCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5n
U3RhdGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpOworICAgIGF1dG8gYmVmb3JlSW5saW5lQm94
Q29udGVudCA9IFsmXSB7CisgICAgICAgIGF1dG8gbG9naWNhbFJlY3QgPSBsaW5lQm94LmxvZ2lj
YWxCb3JkZXJCb3hGb3JJbmxpbmVCb3gobGF5b3V0Qm94LCBib3hHZW9tZXRyeSk7CisgICAgICAg
IGF1dG8gdmlzdWFsUmVjdCA9IElubGluZVJlY3QgeyBsaW5lQm94TG9naWNhbFRvcCArIGxvZ2lj
YWxSZWN0LnRvcCgpLCBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyLCB7IH0sIGxvZ2ljYWxSZWN0
LmhlaWdodCgpIH07CisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgaW5rIG92ZXJm
bG93LgorICAgICAgICBpZiAoIWRpc3BsYXlCb3guaXNGaXJzdEZvckxheW91dEJveCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGRpc3BsYXlCb3guc2V0TG9naWNhbFJlY3QodmlzdWFsUmVjdCwgdmlz
dWFsUmVjdCk7CisKKyAgICAgICAgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciArPSBib3hHZW9t
ZXRyeS5tYXJnaW5TdGFydCgpOworICAgICAgICBhdXRvIHZpc3VhbFJlY3RXaXRoTWFyZ2luU3Rh
cnQgPSBJbmxpbmVSZWN0IHsgdmlzdWFsUmVjdC50b3AoKSwgY29udGVudFJpZ2h0SW5WaXN1YWxP
cmRlciwgdmlzdWFsUmVjdC53aWR0aCgpLCB2aXN1YWxSZWN0LmhlaWdodCgpIH07CisgICAgICAg
IGRpc3BsYXlCb3guc2V0TG9naWNhbFJlY3QodmlzdWFsUmVjdFdpdGhNYXJnaW5TdGFydCwgdmlz
dWFsUmVjdFdpdGhNYXJnaW5TdGFydCk7CisgICAgICAgIGNvbnRlbnRSaWdodEluVmlzdWFsT3Jk
ZXIgKz0gYm94R2VvbWV0cnkuYm9yZGVyQW5kUGFkZGluZ1N0YXJ0KCk7CisgICAgfTsKKyAgICBi
ZWZvcmVJbmxpbmVCb3hDb250ZW50KCk7CisKKyAgICBmb3IgKGF1dG8mIGNoaWxkRGlzcGxheUJv
eE5vZGUgOiBkaXNwbGF5Qm94Tm9kZS5jaGlsZHJlbikKKyAgICAgICAgYWRqdXN0VmlzdWFsR2Vv
bWV0cnlGb3JDaGlsZE5vZGUoKmNoaWxkRGlzcGxheUJveE5vZGUsIGNvbnRlbnRSaWdodEluVmlz
dWFsT3JkZXIsIGxpbmVCb3hMb2dpY2FsVG9wLCBib3hlcywgbGluZUJveCk7CisKKyAgICBhdXRv
IGFmdGVySW5saW5lQm94Q29udGVudCA9IFsmXSB7CisgICAgICAgIGlmICghZGlzcGxheUJveC5p
c0xhc3RGb3JMYXlvdXRCb3goKSkKKyAgICAgICAgICAgIHJldHVybiBkaXNwbGF5Qm94LnNldExv
Z2ljYWxSaWdodChjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyKTsKKworICAgICAgICBjb250ZW50
UmlnaHRJblZpc3VhbE9yZGVyICs9IGJveEdlb21ldHJ5LmJvcmRlckFuZFBhZGRpbmdFbmQoKTsK
KyAgICAgICAgZGlzcGxheUJveC5zZXRMb2dpY2FsUmlnaHQoY29udGVudFJpZ2h0SW5WaXN1YWxP
cmRlcik7CisgICAgICAgIGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIgKz0gYm94R2VvbWV0cnku
bWFyZ2luRW5kKCk7CisgICAgfTsKKyAgICBhZnRlcklubGluZUJveENvbnRlbnQoKTsKKworICAg
IHNldElubGluZUJveEdlb21ldHJ5KGxheW91dEJveCwgZGlzcGxheUJveC5sb2dpY2FsUmVjdCgp
LCBkaXNwbGF5Qm94LmlzRmlyc3RGb3JMYXlvdXRCb3goKSk7CisgICAgaWYgKGxpbmVCb3guaW5s
aW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS5oYXNDb250ZW50KCkpCisgICAgICAg
IGRpc3BsYXlCb3guc2V0SGFzQ29udGVudCgpOworfQorCiB2b2lkIElubGluZURpc3BsYXlDb250
ZW50QnVpbGRlcjo6cHJvY2Vzc0JpZGlDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29u
dGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IElubGluZUxh
eW91dFBvaW50JiBsaW5lQm94TG9naWNhbFRvcExlZnQsIERpc3BsYXlCb3hlcyYgYm94ZXMpCiB7
CiAgICAgQVNTRVJUKGxpbmVDb250ZW50LnZpc3VhbE9yZGVyTGlzdC5zaXplKCkgPT0gbGluZUNv
bnRlbnQucnVucy5zaXplKCkpOwogCi0gICAgVmVjdG9yPFJhbmdlPHNpemVfdD4+IGlubGluZUJv
eFJhbmdlTGlzdDsKLSAgICBhdXRvIG5lZWRzTm9uUm9vdElubGluZUJveERpc3BsYXlCb3ggPSBm
YWxzZTsKLSAgICBhdXRvIGNyZWF0ZURpc3BsYXlCb3hlc0luVmlzdWFsT3JkZXJGb3JDb250ZW50
UnVucyA9IFsmXSB7CisgICAgQW5jZXN0b3JTdGFjayBhbmNlc3RvclN0YWNrOworICAgIERpc3Bs
YXlCb3hOb2RlIHJvb3REaXNwbGF5Qm94Tm9kZSA9IHsgfTsKKyAgICBhbmNlc3RvclN0YWNrLnB1
c2gocm9vdERpc3BsYXlCb3hOb2RlLCByb290KCkpOworCisgICAgYXV0byBjb250ZW50U3RhcnRJ
blZpc3VhbE9yZGVyID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgYXV0byBjcmVhdGVEaXNw
bGF5Qm94ZXNJblZpc3VhbE9yZGVyID0gWyZdIHsKICAgICAgICAgYXV0byByb290SW5saW5lQm94
UmVjdCA9IGxpbmVCb3gubG9naWNhbFJlY3RGb3JSb290SW5saW5lQm94KCk7Ci0gICAgICAgIGF1
dG8gY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciA9IElubGluZUxheW91dFVuaXQgeyB9OwogICAg
ICAgICAvLyBGaXJzdCB2aXN1YWwgcnVuJ3MgaW5pdGlhbCBjb250ZW50IHBvc2l0aW9uIGRlcGVu
ZHMgb24gdGhlIGJsb2NrJ3MgaW5saW5lIGRpcmVjdGlvbi4KICAgICAgICAgaWYgKCFyb290KCku
c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIHRoZSBibG9jayBlbmQgcG9zaXRpb24gaW5zdGVhZCBvZiB0aGUgbGluZUxv
Z2ljYWxXaWR0aC4KLSAgICAgICAgICAgIGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIgKz0gbGlu
ZUNvbnRlbnQubGluZUxvZ2ljYWxXaWR0aCAtIHJvb3RJbmxpbmVCb3hSZWN0LndpZHRoKCk7Cisg
ICAgICAgICAgICBjb250ZW50U3RhcnRJblZpc3VhbE9yZGVyICs9IGxpbmVDb250ZW50LmxpbmVM
b2dpY2FsV2lkdGggLSByb290SW5saW5lQm94UmVjdC53aWR0aCgpOwogICAgICAgICB9CiAgICAg
ICAgIC8vIEFkanVzdCB0aGUgY29udGVudCBzdGFydCBwb3NpdGlvbiB3aXRoIHRoZSAodGV4dClh
bGlnbm1lbnQgb2Zmc2V0IChyb290IGlubGluZSBib3ggaGFzIHRoZSBhbGlnbm1lbnQgb2Zmc2V0
IGFuZCBub3QgdGhlIGluZGl2aWR1YWwgcnVucykuCi0gICAgICAgIGNvbnRlbnRSaWdodEluVmlz
dWFsT3JkZXIgKz0gcm9vdElubGluZUJveFJlY3QubGVmdCgpOworICAgICAgICBjb250ZW50U3Rh
cnRJblZpc3VhbE9yZGVyICs9IHJvb3RJbmxpbmVCb3hSZWN0LmxlZnQoKTsKIAorICAgICAgICBh
dXRvIGNvbnRlbnRSaWdodEluVmlzdWFsT3JkZXIgPSBjb250ZW50U3RhcnRJblZpc3VhbE9yZGVy
OwogICAgICAgICBhdXRvJiBydW5zID0gbGluZUNvbnRlbnQucnVuczsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBydW5zLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBhdXRvIHZp
c3VhbEluZGV4ID0gbGluZUNvbnRlbnQudmlzdWFsT3JkZXJMaXN0W2ldOwogICAgICAgICAgICAg
YXV0byYgbGluZVJ1biA9IHJ1bnNbdmlzdWFsSW5kZXhdOworICAgICAgICAgICAgYXV0byYgbGF5
b3V0Qm94ID0gbGluZVJ1bi5sYXlvdXRCb3goKTsKIAotICAgICAgICAgICAgYXV0byBpc0NvbnRl
bnRSdW4gPSAhbGluZVJ1bi5pc0lubGluZUJveFN0YXJ0KCkgJiYgIWxpbmVSdW4uaXNMaW5lU3Bh
bm5pbmdJbmxpbmVCb3hTdGFydCgpICYmICFsaW5lUnVuLmlzSW5saW5lQm94RW5kKCk7CisgICAg
ICAgICAgICBhdXRvIGlzQ29udGVudFJ1biA9ICFsaW5lUnVuLmlzSW5saW5lQm94U3RhcnQoKSAm
JiAhbGluZVJ1bi5pc0xpbmVTcGFubmluZ0lubGluZUJveFN0YXJ0KCkgJiYgIWxpbmVSdW4uaXNJ
bmxpbmVCb3hFbmQoKSAmJiAhbGluZVJ1bi5pc1dvcmRCcmVha09wcG9ydHVuaXR5KCk7CiAgICAg
ICAgICAgICBpZiAoIWlzQ29udGVudFJ1bikgewotICAgICAgICAgICAgICAgIG5lZWRzTm9uUm9v
dElubGluZUJveERpc3BsYXlCb3ggPSB0cnVlOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBB
ZGQgc3VwcG9ydCBmb3IgaW5saW5lIGJveGVzIHdpdGggbm8gY29udGVudC4KICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIApAQCAtMzkyLDE3NSArNDc1LDU2IEBAIHZv
aWQgSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyOjpwcm9jZXNzQmlkaUNvbnRlbnQoY29uc3Qg
TGluZUJ1aWxkZXI6OkxpbmVDb250CiAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2ljYWxsUmVj
dDsKICAgICAgICAgICAgIH07CiAKKyAgICAgICAgICAgIGF1dG8mIHBhcmVudERpc3BsYXlCb3hO
b2RlID0gZW5zdXJlRGlzcGxheUJveEZvckNvbnRhaW5lcihsYXlvdXRCb3gucGFyZW50KCksIGFu
Y2VzdG9yU3RhY2ssIGJveGVzKTsKICAgICAgICAgICAgIGlmIChsaW5lUnVuLmlzVGV4dCgpKSB7
CiAgICAgICAgICAgICAgICAgYXV0byB2aXN1YWxSZWN0ID0gdmlzdWFsUmVjdFJlbGF0aXZlVG9S
b290KGxpbmVCb3gubG9naWNhbFJlY3RGb3JUZXh0UnVuKGxpbmVSdW4pKTsKICAgICAgICAgICAg
ICAgICBhcHBlbmRUZXh0RGlzcGxheUJveChsaW5lUnVuLCB2aXN1YWxSZWN0LCBib3hlcyk7CiAg
ICAgICAgICAgICAgICAgY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciArPSB2aXN1YWxSZWN0Lndp
ZHRoKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAobGluZVJ1bi5pc1NvZnRMaW5lQnJlYWsoKSkgeworICAgICAgICAgICAgfSBlbHNl
IGlmIChsaW5lUnVuLmlzU29mdExpbmVCcmVhaygpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KCF2aXN1YWxSZWN0UmVsYXRpdmVUb1Jvb3QobGluZUJveC5sb2dpY2FsUmVjdEZvclRleHRSdW4o
bGluZVJ1bikpLndpZHRoKCkpOwogICAgICAgICAgICAgICAgIGFwcGVuZFNvZnRMaW5lQnJlYWtE
aXNwbGF5Qm94KGxpbmVSdW4sIHZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdChsaW5lQm94LmxvZ2lj
YWxSZWN0Rm9yVGV4dFJ1bihsaW5lUnVuKSksIGJveGVzKTsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChsaW5lUnVuLmlzSGFyZExpbmVC
cmVhaygpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCF2aXN1YWxSZWN0UmVsYXRpdmVUb1Jv
b3QobGluZUJveC5sb2dpY2FsUmVjdEZvckxpbmVCcmVha0JveChsaW5lUnVuLmxheW91dEJveCgp
KSkud2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kSGFyZExpbmVCcmVha0Rpc3BsYXlC
b3gobGluZVJ1biwgdmlzdWFsUmVjdFJlbGF0aXZlVG9Sb290KGxpbmVCb3gubG9naWNhbFJlY3RG
b3JMaW5lQnJlYWtCb3gobGluZVJ1bi5sYXlvdXRCb3goKSkpLCBib3hlcyk7Ci0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGluZVJ1bi5p
c0JveCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gbGluZVJ1bi5sYXlv
dXRCb3goKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZVJ1bi5pc0hhcmRMaW5lQnJlYWso
KSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghdmlzdWFsUmVjdFJlbGF0aXZlVG9Sb290KGxp
bmVCb3gubG9naWNhbFJlY3RGb3JMaW5lQnJlYWtCb3gobGF5b3V0Qm94KSkud2lkdGgoKSk7Cisg
ICAgICAgICAgICAgICAgYXBwZW5kSGFyZExpbmVCcmVha0Rpc3BsYXlCb3gobGluZVJ1biwgdmlz
dWFsUmVjdFJlbGF0aXZlVG9Sb290KGxpbmVCb3gubG9naWNhbFJlY3RGb3JMaW5lQnJlYWtCb3go
bGF5b3V0Qm94KSksIGJveGVzKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZVJ1bi5pc0Jv
eCgpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3Rh
dGUoKS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpOwogICAgICAgICAgICAgICAgIGF1dG8gdmlzdWFs
UmVjdCA9IHZpc3VhbFJlY3RSZWxhdGl2ZVRvUm9vdChsaW5lQm94LmxvZ2ljYWxCb3JkZXJCb3hG
b3JBdG9taWNJbmxpbmVMZXZlbEJveChsYXlvdXRCb3gsIGJveEdlb21ldHJ5KSk7CiAgICAgICAg
ICAgICAgICAgdmlzdWFsUmVjdC5tb3ZlSG9yaXpvbnRhbGx5KGJveEdlb21ldHJ5Lm1hcmdpblN0
YXJ0KCkpOwogICAgICAgICAgICAgICAgIGFwcGVuZEF0b21pY0lubGluZUxldmVsRGlzcGxheUJv
eChsaW5lUnVuLCB2aXN1YWxSZWN0LCBib3hlcyk7CiAgICAgICAgICAgICAgICAgY29udGVudFJp
Z2h0SW5WaXN1YWxPcmRlciArPSBib3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpICsgdmlzdWFsUmVj
dC53aWR0aCgpICsgYm94R2VvbWV0cnkubWFyZ2luRW5kKCk7Ci0gICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQobGluZVJ1bi5pc1dvcmRC
cmVha09wcG9ydHVuaXR5KCkpOworICAgICAgICAgICAgcGFyZW50RGlzcGxheUJveE5vZGUuYXBw
ZW5kQ2hpbGQoYm94ZXMuc2l6ZSgpIC0gMSk7CiAgICAgICAgIH0KICAgICB9OwotICAgIGNyZWF0
ZURpc3BsYXlCb3hlc0luVmlzdWFsT3JkZXJGb3JDb250ZW50UnVucygpOwotCi0gICAgYXV0byBu
ZWVkc0Rpc3BsYXlCb3hIb3Jpem9udGFsQWRqdXN0bWVudCA9IGZhbHNlOwotICAgIGF1dG8gY3Jl
YXRlRGlzcGxheUJveGVzSW5WaXN1YWxPcmRlckZvcklubGluZUJveGVzID0gWyZdIHsKLSAgICAg
ICAgLy8gVmlzdWFsIG9yZGVyIGNvdWxkIGludHJvZHVjZSBnYXBzIGFuZC9vciBpbmplY3QgcnVu
cyBvdXRzaWRlIGZyb20gdGhlIGN1cnJlbnQgaW5saW5lIGJveCBjb250ZW50LgotICAgICAgICAv
LyBJbiBzdWNoIGNhc2VzLCB3ZSBuZWVkIHRvICJjbG9zZSIgYW5kICJvcGVuIiBkaXNwbGF5IGJv
eGVzIGZvciB0aGVzZSBpbmxpbmUgYm94IGZyYWdtZW50cwotICAgICAgICAvLyB0byBhY2NvbW1v
ZGF0ZSB0aGUgY3VycmVudCBjb250ZW50LgotICAgICAgICAvLyBXZSBkbyBpdCBieSBmaW5kaW5n
IHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSBsYXN0IGFuZCB0aGUgY3VycmVudCBj
b250ZW50IGRpc3BsYXkgYm94ZXMgYW5kCi0gICAgICAgIC8vIHRyYXZlcnNlIGJvdGggYW5jZXN0
b3IgY2hhaW5zIGFuZCBjbG9zZS9vcGVuIHRoZSBwYXJlbnQgKGlubGluZSkgYm94ZXMuCi0gICAg
ICAgIC8vIChvcGVuIGhlcmUgbWVhbnMgdG8gY3JlYXRlIGEgbmV3IGRpc3BsYXkgYm94LCB3aGls
ZSBjbG9zZSBtZWFucyB0byBzaW1wbHkgcG9wIGl0IG91dCBvZiBwYXJlbnRCb3hTdGFjaykuCi0g
ICAgICAgIC8vIDxkaXY+YTxzcGFuIGlkPWZpcnN0PmImIzgyMzg7Zzwvc3Bhbj5mPHNwYW4gaWQ9
c2Vjb25kPmUmIzgyMzc7Yzwvc3Bhbj5kPC9kaXY+Ci0gICAgICAgIC8vIHByb2R1Y2VzIHRoZSBm
b2xsb3dpbmcgb3V0cHV0IChub3RlIHRoZSAjODIzODsgIzgyMzc7IFJUTC9MVFIgY29udHJvbCBj
aGFyYWN0ZXJzKToKLSAgICAgICAgLy8gYWJjZGVmZwotICAgICAgICAvLyB3aXRoIHRoZSBmb2xs
b3dpbmcsIGZyYWdtZW50ZWQgaW5saW5lIGJveGVzOgotICAgICAgICAvLyBhW2ZpcnN0IG9wZW5d
YltmaXJzdCBjbG9zZV1bc2Vjb25kIG9wZW5dY1tzZWNvbmQgY2xvc2VdZFtzZWNvbmQgb3Blbl1l
W3NlY29uZCBjbG9zZV1mW2ZpcnN0IG9wZW5dZ1tmaXJzdCBjbG9zZV0KLSAgICAgICAgSGFzaE1h
cDxjb25zdCBCb3gqLCBzaXplX3Q+IGlubGluZUJveERpc3BsYXlCb3hNYXA7Ci0gICAgICAgIExp
c3RIYXNoU2V0PGNvbnN0IEJveCo+IHBhcmVudEJveFN0YWNrOwotICAgICAgICBwYXJlbnRCb3hT
dGFjay5hZGQoJnJvb3QoKSk7Ci0KLSAgICAgICAgQVNTRVJUKGJveGVzWzBdLmlzUm9vdElubGlu
ZUJveCgpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAxOyBpbmRleCA8IGJveGVzLnNp
emUoKTsgKytpbmRleCkgewotICAgICAgICAgICAgYXV0byYgcGFyZW50Qm94ID0gYm94ZXNbaW5k
ZXhdLmxheW91dEJveCgpLnBhcmVudCgpOwotICAgICAgICAgICAgQVNTRVJUKHBhcmVudEJveC5p
c0lubGluZUJveCgpIHx8ICZwYXJlbnRCb3ggPT0gJnJvb3QoKSk7Ci0KLSAgICAgICAgICAgIGF1
dG8gcnVuUGFyZW50SXNDdXJyZW50SW5saW5lQm94ID0gJnBhcmVudEJveCA9PSBwYXJlbnRCb3hT
dGFjay5sYXN0KCk7Ci0gICAgICAgICAgICBpZiAocnVuUGFyZW50SXNDdXJyZW50SW5saW5lQm94
KSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UndmUgZ290IHRoZSBjb3JyZWN0IGlubGluZSBib3gg
YXMgcGFyZW50LiBOb3RoaW5nIHRvIGRvIGhlcmUuCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdXRvIHBhcmVudEJveFN0YWNrRW5kID0gcGFy
ZW50Qm94U3RhY2suZW5kKCk7Ci0gICAgICAgICAgICBWZWN0b3I8Y29uc3QgQm94Kj4gaW5saW5l
Qm94TmVlZGluZ0Rpc3BsYXlCb3hMaXN0OwotICAgICAgICAgICAgZm9yIChhdXRvKiBhbmNlc3Rv
ciA9ICZwYXJlbnRCb3g7IGFuY2VzdG9yOyBhbmNlc3RvciA9ICZhbmNlc3Rvci0+cGFyZW50KCkp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoYW5jZXN0b3IgPT0gJnJvb3QoKSB8fCBhbmNlc3Rv
ci0+aXNJbmxpbmVCb3goKSk7Ci0gICAgICAgICAgICAgICAgYXV0byBwYXJlbnRCb3hJdGVyYXRv
ciA9IHBhcmVudEJveFN0YWNrLmZpbmQoYW5jZXN0b3IpOwotICAgICAgICAgICAgICAgIGlmIChw
YXJlbnRCb3hJdGVyYXRvciAhPSBwYXJlbnRCb3hTdGFja0VuZCkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIGlzIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yLgotICAgICAgICAgICAg
ICAgICAgICAvLyBMZXQncyB0cmF2ZXJzZSBib3RoIGFuY2VzdG9yIGNoYWlucyBhbmQgY3JlYXRl
L2Nsb3NlIGRpc3BsYXkgYm94ZXMgYXMgbmVlZGVkLgotICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8Y29uc3QgQm94Kj4gaW5saW5lQm94RnJhZ21lbnRzVG9DbG9zZTsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChhdXRvIGl0ID0gKytwYXJlbnRCb3hJdGVyYXRvcjsgaXQgIT0gcGFyZW50Qm94
U3RhY2tFbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVCb3hGcmFnbWVu
dHNUb0Nsb3NlLmFwcGVuZCgqaXQpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byog
aW5saW5lQm94IDogbWFrZVJldmVyc2VkUmFuZ2UoaW5saW5lQm94RnJhZ21lbnRzVG9DbG9zZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVCb3gtPmlzSW5saW5lQm94
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlubGluZUJveERpc3BsYXlCb3hN
YXAuY29udGFpbnMoaW5saW5lQm94KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVC
b3hSYW5nZUxpc3QuYXBwZW5kKHsgaW5saW5lQm94RGlzcGxheUJveE1hcC5nZXQoaW5saW5lQm94
KSwgaW5kZXggfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRCb3hTdGFjay5yZW1v
dmUoaW5saW5lQm94KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIC8vIEluc2VydCBuZXcgZGlzcGxheSBib3hlcyBmb3IgaW5saW5lIGJveCBmcmFnbWVudHMg
b24gYmlkaSBib3VuZGFyeS4KLSAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvKiBpbmxpbmVC
b3ggOiBtYWtlUmV2ZXJzZWRSYW5nZShpbmxpbmVCb3hOZWVkaW5nRGlzcGxheUJveExpc3QpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5saW5lQm94LT5pc0lubGluZUJveCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEJveFN0YWNrLmFkZChpbmxpbmVCb3gp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNyZWF0ZUFuZEluc2VydERpc3BsYXlC
b3hGb3JJbmxpbmVCb3hGcmFnbWVudCA9IFsmXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlICJwcmV2aW91cyIgZGlzcGxheSBib3ggZm9yIHRoaXMg
cGFydGljdWxhciBpbmxpbmUgYm94IGlzIG5vdCB0cmFja2VkIGFzIHRoZSAibGFzdCBib3giLgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbGFzdERpc3BsYXlCb3hGb3JJbmxpbmVC
b3hJbmRleCA9IGlubGluZUJveERpc3BsYXlCb3hNYXAudGFrZShpbmxpbmVCb3gpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXNGaXJzdEZyYWdtZW50ID0gIWxhc3REaXNwbGF5
Qm94Rm9ySW5saW5lQm94SW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFp
c0ZpcnN0RnJhZ21lbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveGVzW2xh
c3REaXNwbGF5Qm94Rm9ySW5saW5lQm94SW5kZXhdLnNldElzTGFzdEZvckxheW91dEJveChmYWxz
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lQm94RGlzcGxheUJveE1hcC5z
ZXQoaW5saW5lQm94LCBpbmRleCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21ldHJ5KCppbmxpbmVCb3gp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdmlzdWFsUmVjdCA9IGxpbmVCb3gu
bG9naWNhbEJvcmRlckJveEZvcklubGluZUJveCgqaW5saW5lQm94LCBib3hHZW9tZXRyeSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBjdXJyZW50IGNvbnRlbnQgbGVm
dCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgZGlzcGxheSBib3guCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmlzdWFsUmVjdC5zZXRMZWZ0KGJveGVzW2luZGV4XS5sb2dpY2Fs
TGVmdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXN1YWxSZWN0Lm1vdmVWZXJ0
aWNhbGx5KGxpbmVCb3hMb2dpY2FsVG9wTGVmdC55KCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFZpc3VhbCB3aWR0aCBpcyBub3QgeWV0IGtub3duLgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZpc3VhbFJlY3Quc2V0V2lkdGgoeyB9KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRJbmxpbmVCb3hEaXNwbGF5Qm94Rm9yQmlkaUJvdW5kYXJ5KGxpbmVC
b3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3goKmlubGluZUJveCksIHZpc3VhbFJlY3QsIGlz
Rmlyc3RGcmFnbWVudCwgaW5kZXgsIGJveGVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICArK2luZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gcHVzaCB0
aGUgcmVzdCBvZiB0aGUgY29udGVudCB3aGVuIHRoaXMgaW5saW5lIGJveCBoYXMgbWFyZ2luL2Jv
cmRlci9wYWRkaW5nLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRzRGlzcGxheUJv
eEhvcml6b250YWxBZGp1c3RtZW50ID0gbmVlZHNEaXNwbGF5Qm94SG9yaXpvbnRhbEFkanVzdG1l
bnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYm94R2VvbWV0cnkuaG9yaXpv
bnRhbEJvcmRlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGJveEdlb21l
dHJ5Lmhvcml6b250YWxQYWRkaW5nKCkudmFsdWVfb3IoMCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgYm94R2VvbWV0cnkubWFyZ2luU3RhcnQoKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBib3hHZW9tZXRyeS5tYXJnaW5FbmQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVBbmRJbnNlcnRE
aXNwbGF5Qm94Rm9ySW5saW5lQm94RnJhZ21lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgLy8gcm9vdCBtYXkgbm90IGJlIHRoZSBsb3dlc3QgYnV0IGFsd2F5cyBhIGNvbW1vbiBh
bmNlc3Rvci4KLSAgICAgICAgICAgICAgICBBU1NFUlQoYW5jZXN0b3IgIT0gJnJvb3QoKSk7Ci0g
ICAgICAgICAgICAgICAgaW5saW5lQm94TmVlZGluZ0Rpc3BsYXlCb3hMaXN0LmFwcGVuZChhbmNl
c3Rvcik7CisgICAgY3JlYXRlRGlzcGxheUJveGVzSW5WaXN1YWxPcmRlcigpOworCisgICAgaWYg
KCFyb290RGlzcGxheUJveE5vZGUuY2hpbGRyZW4uaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8g
Y29tcHV0ZUlzRmlyc3RJc0xhc3RCb3ggPSBbJl0geworICAgICAgICAgICAgSGFzaE1hcDxjb25z
dCBCb3gqLCBzaXplX3Q+IGxhc3REaXNwbGF5Qm94SW5kZXhlczsKKyAgICAgICAgICAgIEFTU0VS
VChib3hlc1swXS5pc1Jvb3RJbmxpbmVCb3goKSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBp
bmRleCA9IDE7IGluZGV4IDwgYm94ZXMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgZGlzcGxheUJveCA9IGJveGVzW2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAo
IWRpc3BsYXlCb3guaXNOb25Sb290SW5saW5lQm94KCkpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGRpc3BsYXlCb3gubGF5
b3V0Qm94KCk7CisgICAgICAgICAgICAgICAgYXV0byBpc0ZpcnN0Qm94T25DdXJyZW50TGluZSA9
IGxhc3REaXNwbGF5Qm94SW5kZXhlcy5zZXQoJmxheW91dEJveCwgaW5kZXgpLmlzTmV3RW50cnk7
CisgICAgICAgICAgICAgICAgaWYgKGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3go
bGF5b3V0Qm94KS5pc0ZpcnN0Qm94KCkgJiYgaXNGaXJzdEJveE9uQ3VycmVudExpbmUpCisgICAg
ICAgICAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0SXNGaXJzdEZvckxheW91dEJveCh0cnVlKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyAiQ2xvc2UiIHRoZSByZW1haW5p
bmcgaW5saW5lIGJveGVzIG9uIHRoZSBzdGFjayAoZXhjbHVkaW5nIHRoZSByb290KS4KLSAgICAg
ICAgd2hpbGUgKHBhcmVudEJveFN0YWNrLnNpemUoKSA+IDEpIHsKLSAgICAgICAgICAgIGF1dG8q
IHBhcmVudElubGluZUJveCA9IHBhcmVudEJveFN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgICAg
ICBBU1NFUlQoaW5saW5lQm94RGlzcGxheUJveE1hcC5jb250YWlucyhwYXJlbnRJbmxpbmVCb3gp
KTsKLSAgICAgICAgICAgIGlubGluZUJveFJhbmdlTGlzdC5hcHBlbmQoeyBpbmxpbmVCb3hEaXNw
bGF5Qm94TWFwLmdldChwYXJlbnRJbmxpbmVCb3gpLCBib3hlcy5zaXplKCkgfSk7Ci0gICAgICAg
IH0KLSAgICB9OwotICAgIGlmIChuZWVkc05vblJvb3RJbmxpbmVCb3hEaXNwbGF5Qm94KQotICAg
ICAgICBjcmVhdGVEaXNwbGF5Qm94ZXNJblZpc3VhbE9yZGVyRm9ySW5saW5lQm94ZXMoKTsKLQot
ICAgIGF1dG8gYWRqdXN0VmlzdWFsR2VvbWV0cnlXaXRoSW5saW5lQm94ZXMgPSBbJl0gewotICAg
ICAgICBzaXplX3QgY3VycmVudElubGluZUJveCA9IDA7Ci0gICAgICAgIGF1dG8gYWNjdW11bGF0
ZWRPZmZzZXQgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLQotICAgICAgICBBU1NFUlQoYm94ZXNb
MF0uaXNSb290SW5saW5lQm94KCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDE7IGlu
ZGV4IDwgYm94ZXMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gYm94ZXNbaW5kZXhdOwotICAgICAgICAgICAgZGlzcGxheUJveC5tb3ZlSG9yaXpvbnRh
bGx5KGFjY3VtdWxhdGVkT2Zmc2V0KTsKLQotICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRJbmxp
bmVCb3ggPCBpbmxpbmVCb3hSYW5nZUxpc3Quc2l6ZSgpICYmIGluZGV4ID09IGlubGluZUJveFJh
bmdlTGlzdFtjdXJyZW50SW5saW5lQm94XS5lbmQoKSAtIDEpIHsKLSAgICAgICAgICAgICAgICAv
LyBXZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgaW5saW5lIGJveCBjb250ZW50LgotICAgICAgICAg
ICAgICAgIC8vIExldCdzIGNvbXB1dGUgdGhlIGlubGluZSBib3ggd2lkdGggYW5kIG9mZnNldCB0
aGUgcmVzdCBvZiB0aGUgY29udGVudCB3aXRoIHBhZGRpbmcvYm9yZGVyL21hcmdpbiBlbmQuCi0g
ICAgICAgICAgICAgICAgYXV0byBpbmxpbmVCb3hSYW5nZSA9IGlubGluZUJveFJhbmdlTGlzdFtj
dXJyZW50SW5saW5lQm94KytdOwotICAgICAgICAgICAgICAgIGF1dG8mIGlubGluZUJveERpc3Bs
YXlCb3ggPSBib3hlc1tpbmxpbmVCb3hSYW5nZS5iZWdpbigpXTsKLSAgICAgICAgICAgICAgICBB
U1NFUlQoaW5saW5lQm94RGlzcGxheUJveC5pc05vblJvb3RJbmxpbmVCb3goKSk7Ci0KLSAgICAg
ICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdTdGF0ZSgpLmJveEdlb21l
dHJ5KGlubGluZUJveERpc3BsYXlCb3gubGF5b3V0Qm94KCkpOwotICAgICAgICAgICAgICAgIGF1
dG8gY29udGVudFJpZ2h0ID0gZGlzcGxheUJveC5sb2dpY2FsUmlnaHQoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoaW5saW5lQm94RGlzcGxheUJveC5pc0xhc3RGb3JMYXlvdXRCb3goKSkgewotICAg
ICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZE9mZnNldCArPSBib3hHZW9tZXRyeS5ib3JkZXJB
bmRQYWRkaW5nRW5kKCkgKyBib3hHZW9tZXRyeS5tYXJnaW5FbmQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgaW5saW5lQm94RGlzcGxheUJveC5zZXRMb2dpY2FsUmlnaHQoY29udGVudFJpZ2h0ICsg
Ym94R2VvbWV0cnkuYm9yZGVyQW5kUGFkZGluZ0VuZCgpKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgaW5saW5lQm94RGlzcGxheUJveC5zZXRMb2dpY2FsUmln
aHQoY29udGVudFJpZ2h0KTsKKyAgICAgICAgICAgIGZvciAoYXV0byBpbmRleCA6IGxhc3REaXNw
bGF5Qm94SW5kZXhlcy52YWx1ZXMoKSkgeworICAgICAgICAgICAgICAgIGlmIChsaW5lQm94Lmlu
bGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGJveGVzW2luZGV4XS5sYXlvdXRCb3goKSkuaXNMYXN0
Qm94KCkpCisgICAgICAgICAgICAgICAgICAgIGJveGVzW2luZGV4XS5zZXRJc0xhc3RGb3JMYXlv
dXRCb3godHJ1ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZGlzcGxheUJveC5p
c05vblJvb3RJbmxpbmVCb3goKSAmJiBkaXNwbGF5Qm94LmlzRmlyc3RGb3JMYXlvdXRCb3goKSkg
ewotICAgICAgICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGRpc3BsYXlCb3gubGF5b3V0Qm94
KCk7Ci0gICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUo
KS5ib3hHZW9tZXRyeShsYXlvdXRCb3gpOworICAgICAgICB9OworICAgICAgICBjb21wdXRlSXNG
aXJzdElzTGFzdEJveCgpOwogCi0gICAgICAgICAgICAgICAgZGlzcGxheUJveC5tb3ZlSG9yaXpv
bnRhbGx5KGJveEdlb21ldHJ5Lm1hcmdpblN0YXJ0KCkpOwotICAgICAgICAgICAgICAgIGFjY3Vt
dWxhdGVkT2Zmc2V0ICs9IGJveEdlb21ldHJ5Lm1hcmdpblN0YXJ0KCkgKyBib3hHZW9tZXRyeS5i
b3JkZXJBbmRQYWRkaW5nU3RhcnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07
Ci0gICAgaWYgKG5lZWRzRGlzcGxheUJveEhvcml6b250YWxBZGp1c3RtZW50KQorICAgICAgICBh
dXRvIGFkanVzdFZpc3VhbEdlb21ldHJ5V2l0aElubGluZUJveGVzID0gWyZdIHsKKyAgICAgICAg
ICAgIGF1dG8gY29udGVudFJpZ2h0SW5WaXN1YWxPcmRlciA9IGxpbmVCb3hMb2dpY2FsVG9wTGVm
dC54KCkgKyBjb250ZW50U3RhcnRJblZpc3VhbE9yZGVyOworICAgICAgICAgICAgZm9yIChhdXRv
JiBjaGlsZERpc3BsYXlCb3hOb2RlIDogcm9vdERpc3BsYXlCb3hOb2RlLmNoaWxkcmVuKQorICAg
ICAgICAgICAgICAgIGFkanVzdFZpc3VhbEdlb21ldHJ5Rm9yQ2hpbGROb2RlKCpjaGlsZERpc3Bs
YXlCb3hOb2RlLCBjb250ZW50UmlnaHRJblZpc3VhbE9yZGVyLCBsaW5lQm94TG9naWNhbFRvcExl
ZnQueSgpLCBib3hlcywgbGluZUJveCk7CisgICAgICAgIH07CiAgICAgICAgIGFkanVzdFZpc3Vh
bEdlb21ldHJ5V2l0aElubGluZUJveGVzKCk7Ci0KLSAgICBhdXRvIGNvbXB1dGVJbmxpbmVCb3hH
ZW9tZXRyeSA9IFsmXSB7Ci0gICAgICAgIEFTU0VSVCghaW5saW5lQm94UmFuZ2VMaXN0LmlzRW1w
dHkoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgaW5saW5lQm94UmFuZ2UgOiBpbmxpbmVCb3hSYW5n
ZUxpc3QpIHsKLSAgICAgICAgICAgIGF1dG8mIGlubGluZUJveERpc3BsYXlCb3ggPSBib3hlc1tp
bmxpbmVCb3hSYW5nZS5iZWdpbigpXTsKLSAgICAgICAgICAgIHNldElubGluZUJveEdlb21ldHJ5
KGlubGluZUJveERpc3BsYXlCb3gubGF5b3V0Qm94KCksIGlubGluZUJveERpc3BsYXlCb3gubG9n
aWNhbFJlY3QoKSwgaW5saW5lQm94RGlzcGxheUJveC5pc0ZpcnN0Rm9yTGF5b3V0Qm94KCkpOwot
ICAgICAgICB9Ci0gICAgfTsKLSAgICBpZiAobmVlZHNOb25Sb290SW5saW5lQm94RGlzcGxheUJv
eCkKLSAgICAgICAgY29tcHV0ZUlubGluZUJveEdlb21ldHJ5KCk7CisgICAgfQogfQogCiB2b2lk
IElubGluZURpc3BsYXlDb250ZW50QnVpbGRlcjo6cHJvY2Vzc092ZXJmbG93blJ1bnNGb3JFbGxp
cHNpcyhEaXNwbGF5Qm94ZXMmIGJveGVzLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVCb3hMb2dpY2Fs
UmlnaHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2lubGluZS9JbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50QnVp
bGRlci5oCmluZGV4IDg4OTQ5NGQzYjc4OTk5ZWRkZGE5OWFkZGUzYWE1ZTU1Y2YzNWM3MTIuLjgw
YzNhMDY2NzVjMTQ4OWExODRjZWRlODJhMDNkZjNmNjIyMzFjZDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlD
b250ZW50QnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvaW5saW5lL0lubGluZURpc3BsYXlDb250ZW50QnVpbGRlci5oCkBAIC0zMyw3ICszMyw5
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAorc3RydWN0IEFu
Y2VzdG9yU3RhY2s7CiBjbGFzcyBDb250YWluZXJCb3g7CitzdHJ1Y3QgRGlzcGxheUJveE5vZGU7
CiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nU3RhdGU7CiBjbGFzcyBMaW5lQm94OwogCkBAIC01Nywx
MCArNTksMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZEF0b21pY0lubGluZUxldmVsRGlz
cGxheUJveChjb25zdCBMaW5lOjpSdW4mLCBjb25zdCBJbmxpbmVSZWN0JiAsIERpc3BsYXlCb3hl
cyYpOwogICAgIHZvaWQgYXBwZW5kSW5saW5lQm94RGlzcGxheUJveChjb25zdCBMaW5lOjpSdW4m
LCBjb25zdCBJbmxpbmVMZXZlbEJveCYsIGNvbnN0IElubGluZVJlY3QmLCBib29sIGxpbmVoYXND
b250ZW50LCBEaXNwbGF5Qm94ZXMmKTsKICAgICB2b2lkIGFwcGVuZFNwYW5uaW5nSW5saW5lQm94
RGlzcGxheUJveChjb25zdCBMaW5lOjpSdW4mLCBjb25zdCBJbmxpbmVMZXZlbEJveCYsIGNvbnN0
IElubGluZVJlY3QmLCBEaXNwbGF5Qm94ZXMmKTsKLSAgICB2b2lkIGluc2VydElubGluZUJveERp
c3BsYXlCb3hGb3JCaWRpQm91bmRhcnkoY29uc3QgSW5saW5lTGV2ZWxCb3gmLCBjb25zdCBJbmxp
bmVSZWN0JiwgYm9vbCBpc0ZpcnN0SW5saW5lQm94RnJhZ21lbnQsIHNpemVfdCBpbnNlcnRpb25Q
b2ludCwgRGlzcGxheUJveGVzJik7Ci0gICAgdm9pZCBhZGp1c3RJbmxpbmVCb3hEaXNwbGF5Qm94
Rm9yQmlkaUJvdW5kYXJ5KElubGluZURpc3BsYXk6OkJveCYsIGNvbnN0IElubGluZVJlY3QmKTsK
IAogICAgIHZvaWQgc2V0SW5saW5lQm94R2VvbWV0cnkoY29uc3QgQm94JiwgY29uc3QgSW5saW5l
UmVjdCYsIGJvb2wgaXNGaXJzdElubGluZUJveEZyYWdtZW50KTsKKyAgICB2b2lkIGFkanVzdFZp
c3VhbEdlb21ldHJ5Rm9yQ2hpbGROb2RlKGNvbnN0IERpc3BsYXlCb3hOb2RlJiwgSW5saW5lTGF5
b3V0VW5pdCYgYWNjdW11bGF0ZWRPZmZzZXQsIElubGluZUxheW91dFVuaXQgbGluZUJveExvZ2lj
YWxUb3AsIERpc3BsYXlCb3hlcyYsIGNvbnN0IExpbmVCb3gmKTsKKyAgICBEaXNwbGF5Qm94Tm9k
ZSYgZW5zdXJlRGlzcGxheUJveEZvckNvbnRhaW5lcihjb25zdCBDb250YWluZXJCb3gmLCBBbmNl
c3RvclN0YWNrJiwgRGlzcGxheUJveGVzJik7CiAKICAgICBjb25zdCBDb250YWluZXJCb3gmIHJv
b3QoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0Um9vdDsgfQogICAgIElubGlu
ZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9mb3Jt
YXR0aW5nU3RhdGU7IH0gCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2lubGluZS9kaXNwbGF5L0lubGluZURpc3BsYXlCb3guaCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3BsYXkvSW5saW5lRGlz
cGxheUJveC5oCmluZGV4IDVmMGEyNzUwNDRmNDYwMmU0NTY2MzRmMGIxNGRjZmJjNjNkYmMzZTMu
LjAwNDk5YzgxNzgwY2M5ZDk3NzhiZDU5YzY4YTUxYzkwZjZhMjlhZTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3BsYXkvSW5s
aW5lRGlzcGxheUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvaW5saW5lL2Rpc3BsYXkvSW5saW5lRGlzcGxheUJveC5oCkBAIC0xMTgsNyArMTE4LDI0
IEBAIHN0cnVjdCBCb3ggewogICAgIH0KICAgICB2b2lkIGFkanVzdElua092ZXJmbG93KGNvbnN0
IExheW91dDo6SW5saW5lUmVjdCYgY2hpbGRCb3JkZXJCb3gpIHsgcmV0dXJuIG1faW5rT3ZlcmZs
b3cuZXhwYW5kVG9Db250YWluKGNoaWxkQm9yZGVyQm94KTsgfQogICAgIHZvaWQgdHJ1bmNhdGUo
TGF5b3V0OjpJbmxpbmVMYXlvdXRVbml0IHRydW5jYXRlZHdpZHRoID0gMC5mKTsKLSAgICB2b2lk
IHNldExvZ2ljYWxSaWdodChMYXlvdXQ6OklubGluZUxheW91dFVuaXQgcmlnaHQpIHsgbV9sb2dp
Y2FsUmVjdC5zZXRSaWdodChyaWdodCk7IH0KKyAgICB2b2lkIHNldExvZ2ljYWxMZWZ0KExheW91
dDo6SW5saW5lTGF5b3V0VW5pdCBsZWZ0KQorICAgIHsKKyAgICAgICAgYXV0byBvZmZzZXQgPSBs
ZWZ0IC0gbG9naWNhbExlZnQoKTsKKyAgICAgICAgbV9sb2dpY2FsUmVjdC5zZXRMZWZ0KGxlZnQp
OworICAgICAgICBtX2lua092ZXJmbG93LnNldExlZnQobV9pbmtPdmVyZmxvdy5sZWZ0KCkgKyBv
ZmZzZXQpOworICAgIH0KKyAgICB2b2lkIHNldExvZ2ljYWxSaWdodChMYXlvdXQ6OklubGluZUxh
eW91dFVuaXQgcmlnaHQpCisgICAgeworICAgICAgICBhdXRvIG9mZnNldCA9IHJpZ2h0IC0gbG9n
aWNhbFJpZ2h0KCk7CisgICAgICAgIG1fbG9naWNhbFJlY3Quc2V0UmlnaHQocmlnaHQpOworICAg
ICAgICBtX2lua092ZXJmbG93LnNldFJpZ2h0KG1faW5rT3ZlcmZsb3cucmlnaHQoKSArIG9mZnNl
dCk7CisgICAgfQorICAgIHZvaWQgc2V0TG9naWNhbFJlY3QoY29uc3QgTGF5b3V0OjpJbmxpbmVS
ZWN0JiByZWN0LCBjb25zdCBMYXlvdXQ6OklubGluZVJlY3QmIGlua092ZXJmbG93KQorICAgIHsK
KyAgICAgICAgbV9sb2dpY2FsUmVjdCA9IHJlY3Q7CisgICAgICAgIG1faW5rT3ZlcmZsb3cgPSBp
bmtPdmVyZmxvdzsKKyAgICB9CisgICAgdm9pZCBzZXRIYXNDb250ZW50KCkgeyBtX2hhc0NvbnRl
bnQgPSB0cnVlOyB9CiAKICAgICBzdGQ6Om9wdGlvbmFsPFRleHQ+JiB0ZXh0KCkgeyByZXR1cm4g
bV90ZXh0OyB9CiAgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxUZXh0PiYgdGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dDsgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>