<?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>237967</bug_id>
          
          <creation_ts>2022-03-16 09:30:19 -0700</creation_ts>
          <short_desc>Clarify code for logical-to-physical mappings, and add physical-to-logical mappings</short_desc>
          <delta_ts>2022-03-17 08:15:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>236199</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Oriol Brufau">obrufau</reporter>
          <assigned_to name="Oriol Brufau">obrufau</assigned_to>
          <cc>annulen</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1851857</commentid>
    <comment_count>0</comment_count>
    <who name="Oriol Brufau">obrufau</who>
    <bug_when>2022-03-16 09:30:19 -0700</bug_when>
    <thetext>The current code for logical-to-physical mappings is not easy to understand.

mapLogicalSideToPhysicalSide relies on casting a LogicalBoxSide enum into a BoxSide enum, and then maybe casting it into an int and back into a BoxSide...
So the code relies on the arbitrary order of the enum values, and it&apos;s hard to grasp what it&apos;s doing.

mapLogicalCornerToPhysicalCorner just happens to work but again it&apos;s quite difficult to follow.
For example, if bug 166941 adds new writing modes, most probably the entire method will need to be changed.

Also, in bug 236199 I will need physical-to-logical mappings, i.e. the inverse of the current functions.
But the way that they are now, writing the inverse code is not straight-forward at all.

So these functions should be refactored to be understandable, and should have inverse functions where it&apos;s clear looking at the code that they are really inverse functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851871</commentid>
    <comment_count>1</comment_count>
      <attachid>454853</attachid>
    <who name="Oriol Brufau">obrufau</who>
    <bug_when>2022-03-16 10:19:03 -0700</bug_when>
    <thetext>Created attachment 454853
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852026</commentid>
    <comment_count>2</comment_count>
      <attachid>454853</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-16 15:42:53 -0700</bug_when>
    <thetext>Comment on attachment 454853
Patch

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

Can we make a test suite for these functions using static_assert? It can be in a .cpp file so we don’t run it more than once.

&gt; Source/WebCore/css/makeprop.pl:746
&gt; +    const TextFlow&amp; textflow = makeTextFlow(writingMode, direction);

Can this use auto&amp; or auto?

&gt; Source/WebCore/css/makeprop.pl:781
&gt; +            print GPERF &quot;static_assert(&quot; . $assert . &quot;, \&quot;&quot; . $assert . &quot;\&quot;);\n&quot;;

There’s no need to repeat the assertion expression twice. Can just static_assert(expression). Earlier versions of C++ required a string every time, but the latest does not, and there’s no value to repeating the expression in string form.

&gt; Source/WebCore/css/makeprop.pl:785
&gt; +            my $assert =  $logicalToPhysical . &quot;(&quot; . $textFlow . &quot;, &quot; . $physicalToLogical . &quot;(&quot; . $textFlow . &quot;, &quot; . $physicalEnum . &quot;)) == &quot; . $physicalEnum;

Extra space here after &quot;=&quot;.

&gt; Source/WebCore/css/makeprop.pl:786
&gt; +            print GPERF &quot;static_assert(&quot; . $assert . &quot;, \&quot;&quot; . $assert . &quot;\&quot;);\n&quot;;

Ditto.

&gt; Source/WebCore/platform/text/WritingMode.h:160
&gt;  constexpr inline BoxSide mapLogicalSideToPhysicalSide(TextFlow textflow, LogicalBoxSide logicalSide)

It’s never necessary to write &quot;constexpr inline&quot;. Just &quot;constexpr&quot; means the same thing, for a function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852034</commentid>
    <comment_count>3</comment_count>
    <who name="Oriol Brufau">obrufau</who>
    <bug_when>2022-03-16 16:01:43 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 454853 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=454853&amp;action=review
&gt; 
&gt; Can we make a test suite for these functions using static_assert? It can be
&gt; in a .cpp file so we don’t run it more than once.

I would have written a unit test, but at first I didn&apos;t find any existing example.
I guess I have found them in Tools/TestWebKitAPI/Tests/WebCore/, do you mean something like that?

&gt; &gt; Source/WebCore/css/makeprop.pl:781
&gt; &gt; +            print GPERF &quot;static_assert(&quot; . $assert . &quot;, \&quot;&quot; . $assert . &quot;\&quot;);\n&quot;;
&gt; 
&gt; There’s no need to repeat the assertion expression twice. Can just
&gt; static_assert(expression). Earlier versions of C++ required a string every
&gt; time, but the latest does not, and there’s no value to repeating the
&gt; expression in string form.

I did it in order to get a meaningful message if the assert fails.
But it doesn&apos;t matter if I write a unit test instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852105</commentid>
    <comment_count>4</comment_count>
      <attachid>454923</attachid>
    <who name="Oriol Brufau">obrufau</who>
    <bug_when>2022-03-16 18:44:59 -0700</bug_when>
    <thetext>Created attachment 454923
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852106</commentid>
    <comment_count>5</comment_count>
    <who name="Oriol Brufau">obrufau</who>
    <bug_when>2022-03-16 18:50:22 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Can we make a test suite for these functions using static_assert? It can be
&gt; in a .cpp file so we don’t run it more than once.

Added Tools/TestWebKitAPI/Tests/WebCore/WritingModeTests.cpp
Not sure if you need to take a look, or if your previous approval still holds.

&gt; &gt; Source/WebCore/css/makeprop.pl:746
&gt; &gt; +    const TextFlow&amp; textflow = makeTextFlow(writingMode, direction);
&gt; 
&gt; Can this use auto&amp; or auto?

Done.

&gt; &gt; Source/WebCore/css/makeprop.pl:781
&gt; &gt; +            print GPERF &quot;static_assert(&quot; . $assert . &quot;, \&quot;&quot; . $assert . &quot;\&quot;);\n&quot;;
&gt; 
&gt; There’s no need to repeat the assertion expression twice. Can just
&gt; static_assert(expression). Earlier versions of C++ required a string every
&gt; time, but the latest does not, and there’s no value to repeating the
&gt; expression in string form.
&gt; 
&gt; &gt; Source/WebCore/css/makeprop.pl:785
&gt; &gt; +            my $assert =  $logicalToPhysical . &quot;(&quot; . $textFlow . &quot;, &quot; . $physicalToLogical . &quot;(&quot; . $textFlow . &quot;, &quot; . $physicalEnum . &quot;)) == &quot; . $physicalEnum;
&gt; 
&gt; Extra space here after &quot;=&quot;.
&gt; 
&gt; &gt; Source/WebCore/css/makeprop.pl:786
&gt; &gt; +            print GPERF &quot;static_assert(&quot; . $assert . &quot;, \&quot;&quot; . $assert . &quot;\&quot;);\n&quot;;
&gt; 
&gt; Ditto.

Removed this code.

&gt; &gt; Source/WebCore/platform/text/WritingMode.h:160
&gt; &gt;  constexpr inline BoxSide mapLogicalSideToPhysicalSide(TextFlow textflow, LogicalBoxSide logicalSide)
&gt; 
&gt; It’s never necessary to write &quot;constexpr inline&quot;. Just &quot;constexpr&quot; means the
&gt; same thing, for a function.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852279</commentid>
    <comment_count>6</comment_count>
      <attachid>454923</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-17 07:38:40 -0700</bug_when>
    <thetext>Comment on attachment 454923
Patch

This is all good. I think at least some of the unit tests could be restructured so they run at compile time rather than runtime since this is largely constexpr code. But that does not have to be done just to land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852296</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-17 08:14:27 -0700</bug_when>
    <thetext>Committed r291407 (248537@main): &lt;https://commits.webkit.org/248537@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 454923.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852297</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-17 08:15:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/90431868&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454853</attachid>
            <date>2022-03-16 10:19:03 -0700</date>
            <delta_ts>2022-03-16 18:44:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237967-20220316181901.patch</filename>
            <type>text/plain</type>
            <size>12514</size>
            <attacher name="Oriol Brufau">obrufau</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2ZhZGIxNWJiMzNlZTc0
OWVjOTkzMjI4ZjBlMGM3MjUzZTljNjI4Ni4uODM3MDI0MzkwZDZkZjZiNWRmODAwNDQ3ZjVjMzU3
ZGJlOGU5MWVhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDIyLTAzLTE2ICBPcmlv
bCBCcnVmYXUgIDxvYnJ1ZmF1QGlnYWxpYS5jb20+CisKKyAgICAgICAgQ2xhcmlmeSBjb2RlIGZv
ciBsb2dpY2FsLXRvLXBoeXNpY2FsIG1hcHBpbmdzLCBhbmQgYWRkIHBoeXNpY2FsLXRvLWxvZ2lj
YWwgbWFwcGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNzk2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZSBjb2RlIGZvciBsb2dpY2FsLXRvLXBoeXNpY2FsIG1hcHBpbmdzIHdhc24ndCBlYXN5
IHRvIHVuZGVyc3RhbmQsIGUuZy4KKyAgICAgICAgbWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lk
ZSB1c2VkIHRvIGNhc3QgYSBMb2dpY2FsQm94U2lkZSBlbnVtIGludG8gYQorICAgICAgICBCb3hT
aWRlIGVudW0sIGFuZCB0aGVuIG1heWJlIGNhc3RpbmcgaXQgaW50byBhbiBpbnQgYW5kIGJhY2sg
dG8gQm94U2lkZS4KKyAgICAgICAgU28gdGhlIGNvZGUgcmVsaWVkIG9uIHRoZSBhcmJpdHJhcnkg
b3JkZXIgb2YgdGhlIGVudW0gdmFsdWVzLCBhbmQgaXQgd2FzCisgICAgICAgIGhhcmQgdG8gZ3Jh
c3Agd2hhdCB3YXMgZ29pbmcgb24uCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyB0aGVzZSBt
YXBwaW5ncyBtdWNoIGNsZWFyZXIsIGFuZCBhbHNvIGFkZHMgdGhlIGludmVyc2UKKyAgICAgICAg
cGh5c2ljYWwtdG8tbG9naWNhbCBtYXBwaW5ncy4gQmVpbmcgYWJsZSB0byBjb252ZXJ0IGEgcGh5
c2ljYWwgcHJvcGVydHkKKyAgICAgICAgaW50byBpdHMgbG9naWNhbCBlcXVpdmFsZW50IHdpbGwg
YmUgbmVlZGVkIGZvciBidWcgMjM2MTk5LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNl
IHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICBUZXN0cyBpbiBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtbG9naWNhbC8gZW5zdXJlIHRoYXQK
KyAgICAgICAgdGhpcyBwYXRjaCBkb2Vzbid0IGJyZWFrIGxvZ2ljYWwtdG8tcGh5c2ljYWwgbWFw
cGluZ3MuCisgICAgICAgIEFuZCBzb21lIHN0YXRpY19hc3NlcnRzIGVuc3VyZSB0aGF0IHRoZSBw
aHlzaWNhbC10by1sb2dpY2FsIG1hcHBpbmdzCisgICAgICAgIGFyZSB0aGUgY29ycmVjdCBpbnZl
cnNlLgorCisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5Lmg6CisgICAgICAgICogY3NzL21ha2Vw
cm9wLnBsOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvV3JpdGluZ01vZGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6Om1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6bWFwUGh5c2ljYWxTaWRlVG9Mb2dpY2FsU2lkZSk6CisgICAgICAgIChXZWJDb3JlOjptYXBM
b2dpY2FsQ29ybmVyVG9QaHlzaWNhbENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjptYXBQaHlz
aWNhbENvcm5lclRvTG9naWNhbENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjptYXBMb2dpY2Fs
QXhpc1RvUGh5c2ljYWxBeGlzKToKKyAgICAgICAgKFdlYkNvcmU6Om1hcFBoeXNpY2FsQXhpc1Rv
TG9naWNhbEF4aXMpOgorICAgICAgICAoV2ViQ29yZTo6aXNIb3Jpem9udGFsUGh5c2ljYWxTaWRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pcnJvclBoeXNpY2FsU2lkZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpyb3RhdGVQaHlzaWNhbFNpZGUpOiBEZWxldGVkLgorCiAy
MDIyLTAzLTE1ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI5MTI4Mi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5
LmgKaW5kZXggYmIwN2Y3N2VhNmZmNTg3ZDA0MGQ3NzA5ZjAzMTM3NDliODAzZDQ4NC4uZWRhYWZm
ZWMxM2MxYmZjZjczMGJlYjYyZmQ5YzgyZGQwMjI2ODMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1Byb3BlcnR5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3Bl
cnR5LmgKQEAgLTc3LDYgKzc3LDcgQEAgcHVibGljOgogICAgIHZvaWQgd3JhcFZhbHVlSW5Db21t
YVNlcGFyYXRlZExpc3QoKTsKIAogICAgIHN0YXRpYyBDU1NQcm9wZXJ0eUlEIHJlc29sdmVEaXJl
Y3Rpb25Bd2FyZVByb3BlcnR5KENTU1Byb3BlcnR5SUQsIFRleHREaXJlY3Rpb24sIFdyaXRpbmdN
b2RlKTsKKyAgICBzdGF0aWMgQ1NTUHJvcGVydHlJRCB1bnJlc29sdmVQaHlzaWNhbFByb3BlcnR5
KENTU1Byb3BlcnR5SUQsIFRleHREaXJlY3Rpb24sIFdyaXRpbmdNb2RlKTsKICAgICBzdGF0aWMg
Ym9vbCBpc0luaGVyaXRlZFByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwogICAgIHN0YXRpYyBWZWN0
b3I8U3RyaW5nPiBhbGlhc2VzRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7CiAgICAgc3RhdGlj
IGJvb2wgaXNEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsIGIvU291cmNlL1dlYkNvcmUvY3NzL21h
a2Vwcm9wLnBsCmluZGV4IDc4YzJiMmU2M2Y5OWNhOTE4MTBlNjc4NzViYzg0MTk5ZmU1NjIyODUu
LjBiNjc2NjY2NzQ0ZTg1Nzk5ZTJkZGZhMzg3YzBjYWNmZjdjYjVmY2MgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFr
ZXByb3AucGwKQEAgLTc0MSw2ICs3NDEsNTUgQEAgcHJpbnQgR1BFUkYgPDwgIkVPRiI7CiAgICAg
fQogfQogCitDU1NQcm9wZXJ0eUlEIENTU1Byb3BlcnR5Ojp1bnJlc29sdmVQaHlzaWNhbFByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKQoreworICAgIGNvbnN0IFRleHRGbG93JiB0ZXh0ZmxvdyA9
IG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKTsKKyAgICBzd2l0Y2ggKHByb3Bl
cnR5SUQpIHsKK0VPRgorCitmb3IgbXkgJGxvZ2ljYWxQcm9wZXJ0eUdyb3VwICh2YWx1ZXMgJWxv
Z2ljYWxQcm9wZXJ0eUdyb3VwcykgeworICAgIHdoaWxlIChteSAoJHJlc29sdmVyLCAkbmFtZSkg
PSBlYWNoICV7ICRsb2dpY2FsUHJvcGVydHlHcm91cC0+eyJwaHlzaWNhbCJ9IH0pIHsKKyAgICAg
ICAgbXkgJGtpbmQgPSAkbG9naWNhbFByb3BlcnR5R3JvdXAtPnsia2luZCJ9OworICAgICAgICBt
eSAka2luZElkID0gbmFtZVRvSWQoJGtpbmQpOworICAgICAgICBteSAkcmVzb2x2ZXJFbnVtID0g
IkJveCIgLiAka2luZElkIC4gIjo6IiAuIG5hbWVUb0lkKCRyZXNvbHZlcik7CisgICAgICAgIG15
ICRsb2dpY2FscyA9ICRsb2dpY2FsUHJvcGVydHlHcm91cFJlc29sdmVyc3sibG9naWNhbCJ9LT57
JGtpbmR9OworICAgICAgICBteSBAcHJvcGVydGllcyA9IG1hcCB7ICJDU1NQcm9wZXJ0eSIgLiAk
bmFtZVRvSWR7JGxvZ2ljYWxQcm9wZXJ0eUdyb3VwLT57ImxvZ2ljYWwifXskX319IH0gQHsgJGxv
Z2ljYWxzIH07CisgICAgICAgIHByaW50IEdQRVJGICIgICAgY2FzZSBDU1NQcm9wZXJ0eUlEOjpD
U1NQcm9wZXJ0eSIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIjoge1xuIjsKKyAgICAgICAgcHJpbnQg
R1BFUkYgIiAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQcm9wZXJ0eUlEIHByb3BlcnRpZXNb
IiAuIHNjYWxhcihAcHJvcGVydGllcykgLiAiXSA9IHsgIiAuIGpvaW4oIiwgIiwgQHByb3BlcnRp
ZXMpIC4gIiB9O1xuIjsKKyAgICAgICAgcHJpbnQgR1BFUkYgIiAgICAgICAgcmV0dXJuIHByb3Bl
cnRpZXNbc3RhdGljX2Nhc3Q8c2l6ZV90PihtYXBQaHlzaWNhbCIgLiAka2luZElkIC4gIlRvTG9n
aWNhbCIgLiAka2luZElkIC4gIih0ZXh0ZmxvdywgIiAuICRyZXNvbHZlckVudW0gLiAiKSldO1xu
IjsKKyAgICAgICAgcHJpbnQgR1BFUkYgIiAgICB9XG4iOworICAgIH0KK30KKworcHJpbnQgR1BF
UkYgPDwgIkVPRiI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5SUQ7Cisg
ICAgfQorfQorCitFT0YKKworZm9yIG15ICRraW5kIChrZXlzICV7ICRsb2dpY2FsUHJvcGVydHlH
cm91cFJlc29sdmVyc3sibG9naWNhbCJ9IH0pIHsKKyAgICBteSAka2luZElkID0gbmFtZVRvSWQo
JGtpbmQpOworICAgIG15ICRwaHlzaWNhbFRvTG9naWNhbCA9ICJtYXBQaHlzaWNhbCIgLiAka2lu
ZElkIC4gIlRvTG9naWNhbCIgLiAka2luZElkOworICAgIG15ICRsb2dpY2FsVG9QaHlzaWNhbCA9
ICJtYXBMb2dpY2FsIiAuICRraW5kSWQgLiAiVG9QaHlzaWNhbCIgLiAka2luZElkOworICAgIGZv
ciAobXkgJGkgPSAwOyAkaSA8IDg7ICRpKyspIHsKKyAgICAgICAgbXkgJHRleHRGbG93ID0gInN0
YXRpY19jYXN0PFRleHRGbG93PigiIC4gJGkgLiAiKSI7CisgICAgICAgIGZvciBteSAkbG9naWNh
bFJlc29sdmVyIChAeyAkbG9naWNhbFByb3BlcnR5R3JvdXBSZXNvbHZlcnN7ImxvZ2ljYWwifS0+
eyRraW5kfSB9KSB7CisgICAgICAgICAgICBteSAkbG9naWNhbEVudW0gPSAiTG9naWNhbEJveCIg
LiAka2luZElkIC4gIjo6IiAuIG5hbWVUb0lkKCRsb2dpY2FsUmVzb2x2ZXIpOworICAgICAgICAg
ICAgbXkgJGFzc2VydCA9ICRwaHlzaWNhbFRvTG9naWNhbCAuICIoIiAuICR0ZXh0RmxvdyAuICIs
ICIgLiAkbG9naWNhbFRvUGh5c2ljYWwgLiAiKCIgLiAkdGV4dEZsb3cgLiAiLCAiIC4gJGxvZ2lj
YWxFbnVtIC4gIikpID09ICIgLiAkbG9naWNhbEVudW07CisgICAgICAgICAgICBwcmludCBHUEVS
RiAic3RhdGljX2Fzc2VydCgiIC4gJGFzc2VydCAuICIsIFwiIiAuICRhc3NlcnQgLiAiXCIpO1xu
IjsKKyAgICAgICAgfQorICAgICAgICBmb3IgbXkgJHBoeXNpY2FsUmVzb2x2ZXIgKEB7ICRsb2dp
Y2FsUHJvcGVydHlHcm91cFJlc29sdmVyc3sicGh5c2ljYWwifS0+eyRraW5kfSB9KSB7CisgICAg
ICAgICAgICBteSAkcGh5c2ljYWxFbnVtID0gIkJveCIgLiAka2luZElkIC4gIjo6IiAuIG5hbWVU
b0lkKCRwaHlzaWNhbFJlc29sdmVyKTsKKyAgICAgICAgICAgIG15ICRhc3NlcnQgPSAgJGxvZ2lj
YWxUb1BoeXNpY2FsIC4gIigiIC4gJHRleHRGbG93IC4gIiwgIiAuICRwaHlzaWNhbFRvTG9naWNh
bCAuICIoIiAuICR0ZXh0RmxvdyAuICIsICIgLiAkcGh5c2ljYWxFbnVtIC4gIikpID09ICIgLiAk
cGh5c2ljYWxFbnVtOworICAgICAgICAgICAgcHJpbnQgR1BFUkYgInN0YXRpY19hc3NlcnQoIiAu
ICRhc3NlcnQgLiAiLCBcIiIgLiAkYXNzZXJ0IC4gIlwiKTtcbiI7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ByaW50IEdQRVJGIDw8ICJFT0YiOworCiBib29sIENTU1Byb3BlcnR5Ojppc0Rlc2Ny
aXB0b3JPbmx5KENTU1Byb3BlcnR5SUQgaWQpCiB7CiAgICAgc3dpdGNoIChpZCkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Xcml0aW5nTW9kZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Xcml0aW5nTW9kZS5oCmluZGV4IGUyMDdhMzc0ODQ2MWZk
OWYxOTZmOGMzNzkyZjQ4OTU5NTU4MGIyZjQuLmJlNzZlYzFlMTc2OWI5NDdkYjZlOTVlZjM0Njll
YWU0NTAxNThmMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvV3Jp
dGluZ01vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2Rl
LmgKQEAgLTEyOCw2ICsxMjgsOSBAQCBlbnVtIGNsYXNzIEJveFNpZGUgOiB1aW50OF90IHsKICAg
ICBMZWZ0CiB9OwogCisvLyBUaGUgbWFwcGluZyBpcyB3aXRoIHRoZSBmaXJzdCBzdGFydC9lbmQg
Z2l2aW5nIHRoZSBibG9jayBheGlzIHNpZGUsCisvLyBhbmQgdGhlIHNlY29uZCB0aGUgaW5saW5l
LWF4aXMgc2lkZSwgZS5nIExvZ2ljYWxCb3hDb3JuZXI6OlN0YXJ0RW5kIGlzCisvLyB0aGUgY29y
bmVyIGJldHdlZW4gTG9naWNhbEJveFNpZGU6OkJsb2NrU3RhcnQgYW5kIExvZ2ljYWxCb3hTaWRl
OjpJbmxpbmVFbmQuCiBlbnVtIGNsYXNzIExvZ2ljYWxCb3hDb3JuZXIgOiB1aW50OF90IHsKICAg
ICBTdGFydFN0YXJ0LAogICAgIFN0YXJ0RW5kLApAQCAtMTM1LDggKzEzOCw2IEBAIGVudW0gY2xh
c3MgTG9naWNhbEJveENvcm5lciA6IHVpbnQ4X3QgewogICAgIEVuZEVuZAogfTsKIAotLy8gVGhl
IG1hcHBpbmcgaXMgd2l0aCB0aGUgZmlyc3Qgc3RhcnQvZW5kIGdpdmluZyB0aGUgYmxvY2sgYXhp
cyBzaWRlLAotLy8gYW5kIHRoZSBzZWNvbmQgdGhlIGlubGluZS1heGlzIHNpZGUsIGkuZS4gcGF0
dGVybmVkIGFzICdib3JkZXItYmxvY2staW5saW5lLXJhZGl1cycuCiBlbnVtIGNsYXNzIEJveENv
cm5lciA6IHVpbnQ4X3QgewogICAgIFRvcExlZnQsCiAgICAgVG9wUmlnaHQsCkBAIC0xNTYsMzYg
KzE1NywxNSBAQCBlbnVtIGNsYXNzIEJveEF4aXMgOiB1aW50OF90IHsKIAogY29uc3RleHByIHN0
ZDo6YXJyYXk8Qm94U2lkZSwgND4gYWxsQm94U2lkZXMgPSB7IEJveFNpZGU6OlRvcCwgQm94U2lk
ZTo6UmlnaHQsIEJveFNpZGU6OkJvdHRvbSwgQm94U2lkZTo6TGVmdCB9OwogCi1jb25zdGV4cHIg
aW5saW5lIGJvb2wgaXNIb3Jpem9udGFsUGh5c2ljYWxTaWRlKEJveFNpZGUgcGh5c2ljYWxTaWRl
KQotewotICAgIHJldHVybiBwaHlzaWNhbFNpZGUgPT0gQm94U2lkZTo6TGVmdCB8fCBwaHlzaWNh
bFNpZGUgPT0gQm94U2lkZTo6UmlnaHQ7Ci19Ci0KLWNvbnN0ZXhwciBpbmxpbmUgQm94U2lkZSBt
aXJyb3JQaHlzaWNhbFNpZGUoQm94U2lkZSBwaHlzaWNhbFNpZGUpCi17Ci0gICAgLy8gdG9wIDwt
PiBib3R0b20gYW5kIGxlZnQgPC0+IHJpZ2h0IGNvbnZlcnNpb24KLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Qm94U2lkZT4oKHN0YXRpY19jYXN0PGludD4ocGh5c2ljYWxTaWRlKSArIDIpICUgNCk7
Ci19Ci0KLWNvbnN0ZXhwciBpbmxpbmUgQm94U2lkZSByb3RhdGVQaHlzaWNhbFNpZGUoQm94U2lk
ZSBwaHlzaWNhbFNpZGUpCi17Ci0gICAgLy8gdG9wIDwtPiBsZWZ0IGFuZCByaWdodCA8LT4gYm90
dG9tIGNvbnZlcnNpb24KLSAgICBib29sIGhvcml6b250YWxTaWRlID0gaXNIb3Jpem9udGFsUGh5
c2ljYWxTaWRlKHBoeXNpY2FsU2lkZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEJveFNpZGU+
KChzdGF0aWNfY2FzdDxpbnQ+KHBoeXNpY2FsU2lkZSkgKyAoaG9yaXpvbnRhbFNpZGUgPyAxIDog
MykpICUgNCk7Ci19Ci0KIGNvbnN0ZXhwciBpbmxpbmUgQm94U2lkZSBtYXBMb2dpY2FsU2lkZVRv
UGh5c2ljYWxTaWRlKFRleHRGbG93IHRleHRmbG93LCBMb2dpY2FsQm94U2lkZSBsb2dpY2FsU2lk
ZSkKIHsKLSAgICBCb3hTaWRlIHBoeXNpY2FsU2lkZSA9IHN0YXRpY19jYXN0PEJveFNpZGU+KGxv
Z2ljYWxTaWRlKTsKLSAgICBib29sIGhvcml6b250YWxTaWRlID0gaXNIb3Jpem9udGFsUGh5c2lj
YWxTaWRlKHBoeXNpY2FsU2lkZSk7Ci0KLSAgICBpZiAoaXNWZXJ0aWNhbFRleHRGbG93KHRleHRm
bG93KSkKLSAgICAgICAgcGh5c2ljYWxTaWRlID0gcm90YXRlUGh5c2ljYWxTaWRlKHBoeXNpY2Fs
U2lkZSk7Ci0KLSAgICBpZiAoKGhvcml6b250YWxTaWRlICYmIGlzUmV2ZXJzZWRUZXh0Rmxvdyh0
ZXh0ZmxvdykpIHx8ICghaG9yaXpvbnRhbFNpZGUgJiYgaXNGbGlwcGVkVGV4dEZsb3codGV4dGZs
b3cpKSkKLSAgICAgICAgcGh5c2ljYWxTaWRlID0gbWlycm9yUGh5c2ljYWxTaWRlKHBoeXNpY2Fs
U2lkZSk7Ci0KLSAgICByZXR1cm4gcGh5c2ljYWxTaWRlOworICAgIGJvb2wgaXNCbG9jayA9IGxv
Z2ljYWxTaWRlID09IExvZ2ljYWxCb3hTaWRlOjpCbG9ja1N0YXJ0IHx8IGxvZ2ljYWxTaWRlID09
IExvZ2ljYWxCb3hTaWRlOjpCbG9ja0VuZDsKKyAgICBib29sIGlzU3RhcnQgPSBsb2dpY2FsU2lk
ZSA9PSBMb2dpY2FsQm94U2lkZTo6QmxvY2tTdGFydCB8fCBsb2dpY2FsU2lkZSA9PSBMb2dpY2Fs
Qm94U2lkZTo6SW5saW5lU3RhcnQ7CisgICAgYm9vbCBpc05vcm1hbFN0YXJ0ID0gaXNTdGFydCAh
PSAoaXNCbG9jayA/IGlzRmxpcHBlZFRleHRGbG93KHRleHRmbG93KSA6IGlzUmV2ZXJzZWRUZXh0
Rmxvdyh0ZXh0ZmxvdykpOworICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGlzQmxvY2sgIT0gaXNWZXJ0
aWNhbFRleHRGbG93KHRleHRmbG93KTsKKyAgICBpZiAoaXNWZXJ0aWNhbCkKKyAgICAgICAgcmV0
dXJuIGlzTm9ybWFsU3RhcnQgPyBCb3hTaWRlOjpUb3AgOiBCb3hTaWRlOjpCb3R0b207CisgICAg
cmV0dXJuIGlzTm9ybWFsU3RhcnQgPyBCb3hTaWRlOjpMZWZ0IDogQm94U2lkZTo6UmlnaHQ7CiB9
CiAKIGNvbnN0ZXhwciBpbmxpbmUgQm94U2lkZSBtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRl
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBMb2dpY2FsQm94U2lkZSBsb2dpY2FsU2lkZSkKQEAg
LTE5NSwyNSArMTc1LDU5IEBAIGNvbnN0ZXhwciBpbmxpbmUgQm94U2lkZSBtYXBMb2dpY2FsU2lk
ZVRvUGh5c2ljYWxTaWRlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBMCiAgICAgcmV0dXJuIG1h
cExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJl
Y3Rpb24pLCBsb2dpY2FsU2lkZSk7CiB9CiAKK2NvbnN0ZXhwciBpbmxpbmUgTG9naWNhbEJveFNp
ZGUgbWFwUGh5c2ljYWxTaWRlVG9Mb2dpY2FsU2lkZShUZXh0RmxvdyB0ZXh0ZmxvdywgQm94U2lk
ZSBzaWRlKQoreworICAgIGJvb2wgaXNOb3JtYWxTdGFydCA9IHNpZGUgPT0gQm94U2lkZTo6VG9w
IHx8IHNpZGUgPT0gQm94U2lkZTo6TGVmdDsKKyAgICBib29sIGlzVmVydGljYWwgPSBzaWRlID09
IEJveFNpZGU6OlRvcCB8fCBzaWRlID09IEJveFNpZGU6OkJvdHRvbTsKKyAgICBib29sIGlzQmxv
Y2sgPSBpc1ZlcnRpY2FsICE9IGlzVmVydGljYWxUZXh0Rmxvdyh0ZXh0Zmxvdyk7CisgICAgaWYg
KGlzQmxvY2spIHsKKyAgICAgICAgYm9vbCBpc0Jsb2NrU3RhcnQgPSBpc05vcm1hbFN0YXJ0ICE9
IGlzRmxpcHBlZFRleHRGbG93KHRleHRmbG93KTsKKyAgICAgICAgcmV0dXJuIGlzQmxvY2tTdGFy
dCA/IExvZ2ljYWxCb3hTaWRlOjpCbG9ja1N0YXJ0IDogTG9naWNhbEJveFNpZGU6OkJsb2NrRW5k
OworICAgIH0KKyAgICBib29sIGlzSW5saW5lU3RhcnQgPSBpc05vcm1hbFN0YXJ0ICE9IGlzUmV2
ZXJzZWRUZXh0Rmxvdyh0ZXh0Zmxvdyk7CisgICAgcmV0dXJuIGlzSW5saW5lU3RhcnQgPyBMb2dp
Y2FsQm94U2lkZTo6SW5saW5lU3RhcnQgOiBMb2dpY2FsQm94U2lkZTo6SW5saW5lRW5kOworfQor
CiBjb25zdGV4cHIgaW5saW5lIEJveENvcm5lciBtYXBMb2dpY2FsQ29ybmVyVG9QaHlzaWNhbENv
cm5lcihUZXh0RmxvdyB0ZXh0ZmxvdywgTG9naWNhbEJveENvcm5lciBsb2dpY2FsQm94Q29ybmVy
KQogewogICAgIGJvb2wgaXNCbG9ja1N0YXJ0ID0gbG9naWNhbEJveENvcm5lciA9PSBMb2dpY2Fs
Qm94Q29ybmVyOjpTdGFydFN0YXJ0IHx8IGxvZ2ljYWxCb3hDb3JuZXIgPT0gTG9naWNhbEJveENv
cm5lcjo6U3RhcnRFbmQ7CiAgICAgYm9vbCBpc0lubGluZVN0YXJ0ID0gbG9naWNhbEJveENvcm5l
ciA9PSBMb2dpY2FsQm94Q29ybmVyOjpTdGFydFN0YXJ0IHx8IGxvZ2ljYWxCb3hDb3JuZXIgPT0g
TG9naWNhbEJveENvcm5lcjo6RW5kU3RhcnQ7Ci0gICAgaWYgKGlzQmxvY2tTdGFydCA9PSBpc0Zs
aXBwZWRUZXh0Rmxvdyh0ZXh0ZmxvdykpIHsKLSAgICAgICAgaWYgKGlzSW5saW5lU3RhcnQgPT0g
aXNSZXZlcnNlZFRleHRGbG93KHRleHRmbG93KSkKLSAgICAgICAgICAgIHJldHVybiBCb3hDb3Ju
ZXI6OkJvdHRvbVJpZ2h0OwotICAgIH0gZWxzZSBpZiAoaXNJbmxpbmVTdGFydCAhPSBpc1JldmVy
c2VkVGV4dEZsb3codGV4dGZsb3cpKQotICAgICAgICByZXR1cm4gQm94Q29ybmVyOjpUb3BMZWZ0
OwotICAgIGlmIChpc0Jsb2NrU3RhcnQgPT0gaXNGbGlwcGVkTGluZXNUZXh0Rmxvdyh0ZXh0Zmxv
dykpCi0gICAgICAgIHJldHVybiBCb3hDb3JuZXI6OkJvdHRvbUxlZnQ7Ci0gICAgcmV0dXJuIEJv
eENvcm5lcjo6VG9wUmlnaHQ7CisgICAgYm9vbCBpc05vcm1hbEJsb2NrU3RhcnQgPSBpc0Jsb2Nr
U3RhcnQgIT0gaXNGbGlwcGVkVGV4dEZsb3codGV4dGZsb3cpOworICAgIGJvb2wgaXNOb3JtYWxJ
bmxpbmVTdGFydCA9IGlzSW5saW5lU3RhcnQgIT0gaXNSZXZlcnNlZFRleHRGbG93KHRleHRmbG93
KTsKKyAgICBib29sIHVzaW5nVmVydGljYWxUZXh0RmxvdyA9IGlzVmVydGljYWxUZXh0Rmxvdyh0
ZXh0Zmxvdyk7CisgICAgYm9vbCBpc1RvcCA9IHVzaW5nVmVydGljYWxUZXh0RmxvdyA/IGlzTm9y
bWFsSW5saW5lU3RhcnQgOiBpc05vcm1hbEJsb2NrU3RhcnQ7CisgICAgYm9vbCBpc0xlZnQgPSB1
c2luZ1ZlcnRpY2FsVGV4dEZsb3cgPyBpc05vcm1hbEJsb2NrU3RhcnQgOiBpc05vcm1hbElubGlu
ZVN0YXJ0OworICAgIGlmIChpc1RvcCkKKyAgICAgICAgcmV0dXJuIGlzTGVmdCA/IEJveENvcm5l
cjo6VG9wTGVmdCA6IEJveENvcm5lcjo6VG9wUmlnaHQ7CisgICAgcmV0dXJuIGlzTGVmdCA/IEJv
eENvcm5lcjo6Qm90dG9tTGVmdCA6IEJveENvcm5lcjo6Qm90dG9tUmlnaHQ7Cit9CisKK2NvbnN0
ZXhwciBpbmxpbmUgTG9naWNhbEJveENvcm5lciBtYXBQaHlzaWNhbENvcm5lclRvTG9naWNhbENv
cm5lcihUZXh0RmxvdyB0ZXh0ZmxvdywgQm94Q29ybmVyIGJveENvcm5lcikKK3sKKyAgICBib29s
IGlzVG9wID0gYm94Q29ybmVyID09IEJveENvcm5lcjo6VG9wTGVmdCB8fCBib3hDb3JuZXIgPT0g
Qm94Q29ybmVyOjpUb3BSaWdodDsKKyAgICBib29sIGlzTGVmdCA9IGJveENvcm5lciA9PSBCb3hD
b3JuZXI6OlRvcExlZnQgfHwgYm94Q29ybmVyID09IEJveENvcm5lcjo6Qm90dG9tTGVmdDsKKyAg
ICBib29sIHVzaW5nVmVydGljYWxUZXh0RmxvdyA9IGlzVmVydGljYWxUZXh0Rmxvdyh0ZXh0Zmxv
dyk7CisgICAgYm9vbCBpc05vcm1hbEJsb2NrU3RhcnQgPSB1c2luZ1ZlcnRpY2FsVGV4dEZsb3cg
PyBpc0xlZnQgOiBpc1RvcDsKKyAgICBib29sIGlzTm9ybWFsSW5saW5lU3RhcnQgPSB1c2luZ1Zl
cnRpY2FsVGV4dEZsb3cgPyBpc1RvcCA6IGlzTGVmdDsKKyAgICBib29sIGlzQmxvY2tTdGFydCA9
IGlzTm9ybWFsQmxvY2tTdGFydCAhPSBpc0ZsaXBwZWRUZXh0Rmxvdyh0ZXh0Zmxvdyk7CisgICAg
Ym9vbCBpc0lubGluZVN0YXJ0ID0gaXNOb3JtYWxJbmxpbmVTdGFydCAhPSBpc1JldmVyc2VkVGV4
dEZsb3codGV4dGZsb3cpOworICAgIGlmIChpc0Jsb2NrU3RhcnQpCisgICAgICAgIHJldHVybiBp
c0lubGluZVN0YXJ0ID8gTG9naWNhbEJveENvcm5lcjo6U3RhcnRTdGFydCA6IExvZ2ljYWxCb3hD
b3JuZXI6OlN0YXJ0RW5kOworICAgIHJldHVybiBpc0lubGluZVN0YXJ0ID8gTG9naWNhbEJveENv
cm5lcjo6RW5kU3RhcnQgOiBMb2dpY2FsQm94Q29ybmVyOjpFbmRFbmQ7CiB9CiAKIGNvbnN0ZXhw
ciBpbmxpbmUgQm94QXhpcyBtYXBMb2dpY2FsQXhpc1RvUGh5c2ljYWxBeGlzKFRleHRGbG93IHRl
eHRmbG93LCBMb2dpY2FsQm94QXhpcyBsb2dpY2FsQXhpcykKIHsKLSAgICBpZiAoaXNWZXJ0aWNh
bFRleHRGbG93KHRleHRmbG93KSkKLSAgICAgICAgcmV0dXJuIGxvZ2ljYWxBeGlzID09IExvZ2lj
YWxCb3hBeGlzOjpJbmxpbmUgPyBCb3hBeGlzOjpWZXJ0aWNhbCA6IEJveEF4aXM6Okhvcml6b250
YWw7Ci0gICAgcmV0dXJuIGxvZ2ljYWxBeGlzID09IExvZ2ljYWxCb3hBeGlzOjpJbmxpbmUgPyBC
b3hBeGlzOjpIb3Jpem9udGFsIDogQm94QXhpczo6VmVydGljYWw7CisgICAgYm9vbCBpc0Jsb2Nr
ID0gbG9naWNhbEF4aXMgPT0gTG9naWNhbEJveEF4aXM6OkJsb2NrOworICAgIGJvb2wgaXNWZXJ0
aWNhbCA9IGlzQmxvY2sgIT0gaXNWZXJ0aWNhbFRleHRGbG93KHRleHRmbG93KTsKKyAgICByZXR1
cm4gaXNWZXJ0aWNhbCA/IEJveEF4aXM6OlZlcnRpY2FsIDogQm94QXhpczo6SG9yaXpvbnRhbDsK
K30KKworY29uc3RleHByIGlubGluZSBMb2dpY2FsQm94QXhpcyBtYXBQaHlzaWNhbEF4aXNUb0xv
Z2ljYWxBeGlzKFRleHRGbG93IHRleHRmbG93LCBCb3hBeGlzIGF4aXMpCit7CisgICAgYm9vbCBp
c1ZlcnRpY2FsID0gYXhpcyA9PSBCb3hBeGlzOjpWZXJ0aWNhbDsKKyAgICBib29sIGlzQmxvY2sg
PSBpc1ZlcnRpY2FsICE9IGlzVmVydGljYWxUZXh0Rmxvdyh0ZXh0Zmxvdyk7CisgICAgcmV0dXJu
IGlzQmxvY2sgPyBMb2dpY2FsQm94QXhpczo6QmxvY2sgOiBMb2dpY2FsQm94QXhpczo6SW5saW5l
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454923</attachid>
            <date>2022-03-16 18:44:59 -0700</date>
            <delta_ts>2022-03-17 08:14:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237967-20220317024457.patch</filename>
            <type>text/plain</type>
            <size>24487</size>
            <attacher name="Oriol Brufau">obrufau</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2ZhZGIxNWJiMzNlZTc0
OWVjOTkzMjI4ZjBlMGM3MjUzZTljNjI4Ni4uNGEwOWQ4ZDgzZTEyOTZjYWVkNTdhNWJhZWNjZjFm
OTdhMzA4MDRjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIyLTAzLTE2ICBPcmlv
bCBCcnVmYXUgIDxvYnJ1ZmF1QGlnYWxpYS5jb20+CisKKyAgICAgICAgQ2xhcmlmeSBjb2RlIGZv
ciBsb2dpY2FsLXRvLXBoeXNpY2FsIG1hcHBpbmdzLCBhbmQgYWRkIHBoeXNpY2FsLXRvLWxvZ2lj
YWwgbWFwcGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNzk2NworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
IFRoZSBjb2RlIGZvciBsb2dpY2FsLXRvLXBoeXNpY2FsIG1hcHBpbmdzIHdhc24ndCBlYXN5IHRv
IHVuZGVyc3RhbmQsIGUuZy4KKyAgICAgICAgbWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZSB1
c2VkIHRvIGNhc3QgYSBMb2dpY2FsQm94U2lkZSBlbnVtIGludG8gYQorICAgICAgICBCb3hTaWRl
IGVudW0sIGFuZCB0aGVuIG1heWJlIGNhc3RpbmcgaXQgaW50byBhbiBpbnQgYW5kIGJhY2sgdG8g
Qm94U2lkZS4KKyAgICAgICAgU28gdGhlIGNvZGUgcmVsaWVkIG9uIHRoZSBhcmJpdHJhcnkgb3Jk
ZXIgb2YgdGhlIGVudW0gdmFsdWVzLCBhbmQgaXQgd2FzCisgICAgICAgIGhhcmQgdG8gZ3Jhc3Ag
d2hhdCB3YXMgZ29pbmcgb24uCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyB0aGVzZSBtYXBw
aW5ncyBtdWNoIGNsZWFyZXIsIGFuZCBhbHNvIGFkZHMgdGhlIGludmVyc2UKKyAgICAgICAgcGh5
c2ljYWwtdG8tbG9naWNhbCBtYXBwaW5ncy4gQmVpbmcgYWJsZSB0byBjb252ZXJ0IGEgcGh5c2lj
YWwgcHJvcGVydHkKKyAgICAgICAgaW50byBpdHMgbG9naWNhbCBlcXVpdmFsZW50IHdpbGwgYmUg
bmVlZGVkIGZvciBidWcgMjM2MTk5LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRo
ZXJlIGlzIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICBUZXN0cyBpbiBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtbG9naWNhbC8gZW5zdXJlIHRoYXQKKyAg
ICAgICAgdGhpcyBwYXRjaCBkb2Vzbid0IGJyZWFrIGxvZ2ljYWwtdG8tcGh5c2ljYWwgbWFwcGlu
Z3MuCisgICAgICAgIFNvbWUgbmV3IEFQSSB0ZXN0cyBlbnN1cmUgdGhhdCB0aGUgcGh5c2ljYWwt
dG8tbG9naWNhbCBtYXBwaW5ncworICAgICAgICBhcmUgdGhlIGNvcnJlY3QgaW52ZXJzZS4KKwor
ICAgICAgICBUZXN0czogV3JpdGluZ01vZGUuTG9naWNhbEJveFNpZGUKKyAgICAgICAgICAgICAg
IFdyaXRpbmdNb2RlLkJveFNpZGUKKyAgICAgICAgICAgICAgIFdyaXRpbmdNb2RlLkxvZ2ljYWxC
b3hDb3JuZXIKKyAgICAgICAgICAgICAgIFdyaXRpbmdNb2RlLkJveENvcm5lcgorICAgICAgICAg
ICAgICAgV3JpdGluZ01vZGUuTG9naWNhbEJveEF4aXMKKyAgICAgICAgICAgICAgIFdyaXRpbmdN
b2RlLkJveEF4aXMKKworICAgICAgICAqIGNzcy9DU1NQcm9wZXJ0eS5oOgorICAgICAgICAqIGNz
cy9tYWtlcHJvcC5wbDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2RlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjptYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKToKKyAgICAgICAg
KFdlYkNvcmU6Om1hcFBoeXNpY2FsU2lkZVRvTG9naWNhbFNpZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6bWFwTG9naWNhbENvcm5lclRvUGh5c2ljYWxDb3JuZXIpOgorICAgICAgICAoV2ViQ29yZTo6
bWFwUGh5c2ljYWxDb3JuZXJUb0xvZ2ljYWxDb3JuZXIpOgorICAgICAgICAoV2ViQ29yZTo6bWFw
TG9naWNhbEF4aXNUb1BoeXNpY2FsQXhpcyk6CisgICAgICAgIChXZWJDb3JlOjptYXBQaHlzaWNh
bEF4aXNUb0xvZ2ljYWxBeGlzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzSG9yaXpvbnRhbFBoeXNp
Y2FsU2lkZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptaXJyb3JQaHlzaWNhbFNpZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cm90YXRlUGh5c2ljYWxTaWRlKTogRGVsZXRl
ZC4KKwogMjAyMi0wMy0xNSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyOTEyODIuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHkuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
cm9wZXJ0eS5oCmluZGV4IGJiMDdmNzdlYTZmZjU4N2QwNDBkNzcwOWYwMzEzNzQ5YjgwM2Q0ODQu
LmVkYWFmZmVjMTNjMWJmY2Y3MzBiZWI2MmZkOWM4MmRkMDIyNjgzMGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcm9wZXJ0eS5oCkBAIC03Nyw2ICs3Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHdyYXBWYWx1
ZUluQ29tbWFTZXBhcmF0ZWRMaXN0KCk7CiAKICAgICBzdGF0aWMgQ1NTUHJvcGVydHlJRCByZXNv
bHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBUZXh0RGlyZWN0aW9uLCBX
cml0aW5nTW9kZSk7CisgICAgc3RhdGljIENTU1Byb3BlcnR5SUQgdW5yZXNvbHZlUGh5c2ljYWxQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBUZXh0RGlyZWN0aW9uLCBXcml0aW5nTW9kZSk7CiAgICAg
c3RhdGljIGJvb2wgaXNJbmhlcml0ZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKICAgICBzdGF0
aWMgVmVjdG9yPFN0cmluZz4gYWxpYXNlc0ZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwogICAg
IHN0YXRpYyBib29sIGlzRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9tYWtlcHJvcC5wbAppbmRleCA3OGMyYjJlNjNmOTljYTkxODEwZTY3ODc1YmM4NDE5OWZl
NTYyMjg1Li4wOGZlMDlmNGRiMTRmYjNhZDc4YjlkNzhlM2RmZTJhYTJhMjk5NGFjIDEwMDc1NQot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL21ha2Vwcm9wLnBsCkBAIC03MTYsNyArNzE2LDcgQEAgcHJpbnQgR1BFUkYgPDwgIkVPRiI7
CiAKIENTU1Byb3BlcnR5SUQgQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKQogewotICAgIGNvbnN0IFRleHRGbG93JiB0ZXh0ZmxvdyA9
IG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKTsKKyAgICBhdXRvIHRleHRmbG93
ID0gbWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pOwogICAgIHN3aXRjaCAocHJv
cGVydHlJRCkgewogRU9GCiAKQEAgLTc0MSw2ICs3NDEsMzIgQEAgcHJpbnQgR1BFUkYgPDwgIkVP
RiI7CiAgICAgfQogfQogCitDU1NQcm9wZXJ0eUlEIENTU1Byb3BlcnR5Ojp1bnJlc29sdmVQaHlz
aWNhbFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgVGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQoreworICAgIGF1dG8gdGV4dGZsb3cgPSBt
YWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbik7CisgICAgc3dpdGNoIChwcm9wZXJ0
eUlEKSB7CitFT0YKKworZm9yIG15ICRsb2dpY2FsUHJvcGVydHlHcm91cCAodmFsdWVzICVsb2dp
Y2FsUHJvcGVydHlHcm91cHMpIHsKKyAgICB3aGlsZSAobXkgKCRyZXNvbHZlciwgJG5hbWUpID0g
ZWFjaCAleyAkbG9naWNhbFByb3BlcnR5R3JvdXAtPnsicGh5c2ljYWwifSB9KSB7CisgICAgICAg
IG15ICRraW5kID0gJGxvZ2ljYWxQcm9wZXJ0eUdyb3VwLT57ImtpbmQifTsKKyAgICAgICAgbXkg
JGtpbmRJZCA9IG5hbWVUb0lkKCRraW5kKTsKKyAgICAgICAgbXkgJHJlc29sdmVyRW51bSA9ICJC
b3giIC4gJGtpbmRJZCAuICI6OiIgLiBuYW1lVG9JZCgkcmVzb2x2ZXIpOworICAgICAgICBteSAk
bG9naWNhbHMgPSAkbG9naWNhbFByb3BlcnR5R3JvdXBSZXNvbHZlcnN7ImxvZ2ljYWwifS0+eyRr
aW5kfTsKKyAgICAgICAgbXkgQHByb3BlcnRpZXMgPSBtYXAgeyAiQ1NTUHJvcGVydHkiIC4gJG5h
bWVUb0lkeyRsb2dpY2FsUHJvcGVydHlHcm91cC0+eyJsb2dpY2FsIn17JF99fSB9IEB7ICRsb2dp
Y2FscyB9OworICAgICAgICBwcmludCBHUEVSRiAiICAgIGNhc2UgQ1NTUHJvcGVydHlJRDo6Q1NT
UHJvcGVydHkiIC4gJG5hbWVUb0lkeyRuYW1lfSAuICI6IHtcbiI7CisgICAgICAgIHByaW50IEdQ
RVJGICIgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0aWVzWyIg
LiBzY2FsYXIoQHByb3BlcnRpZXMpIC4gIl0gPSB7ICIgLiBqb2luKCIsICIsIEBwcm9wZXJ0aWVz
KSAuICIgfTtcbiI7CisgICAgICAgIHByaW50IEdQRVJGICIgICAgICAgIHJldHVybiBwcm9wZXJ0
aWVzW3N0YXRpY19jYXN0PHNpemVfdD4obWFwUGh5c2ljYWwiIC4gJGtpbmRJZCAuICJUb0xvZ2lj
YWwiIC4gJGtpbmRJZCAuICIodGV4dGZsb3csICIgLiAkcmVzb2x2ZXJFbnVtIC4gIikpXTtcbiI7
CisgICAgICAgIHByaW50IEdQRVJGICIgICAgfVxuIjsKKyAgICB9Cit9CisKK3ByaW50IEdQRVJG
IDw8ICJFT0YiOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBwcm9wZXJ0eUlEOworICAg
IH0KK30KKwogYm9vbCBDU1NQcm9wZXJ0eTo6aXNEZXNjcmlwdG9yT25seShDU1NQcm9wZXJ0eUlE
IGlkKQogewogICAgIHN3aXRjaCAoaWQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvV3JpdGluZ01vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
V3JpdGluZ01vZGUuaAppbmRleCBlMjA3YTM3NDg0NjFmZDlmMTk2ZjhjMzc5MmY0ODk1OTU1ODBi
MmY0Li4xM2FhZDEzOGU3MjEyM2NmZGY4YmNkOTk2ZGU3OWJlNjJlZTUyZTIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2RlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Xcml0aW5nTW9kZS5oCkBAIC0xMjgsNiArMTI4LDkgQEAg
ZW51bSBjbGFzcyBCb3hTaWRlIDogdWludDhfdCB7CiAgICAgTGVmdAogfTsKIAorLy8gVGhlIG1h
cHBpbmcgaXMgd2l0aCB0aGUgZmlyc3Qgc3RhcnQvZW5kIGdpdmluZyB0aGUgYmxvY2sgYXhpcyBz
aWRlLAorLy8gYW5kIHRoZSBzZWNvbmQgdGhlIGlubGluZS1heGlzIHNpZGUsIGUuZyBMb2dpY2Fs
Qm94Q29ybmVyOjpTdGFydEVuZCBpcworLy8gdGhlIGNvcm5lciBiZXR3ZWVuIExvZ2ljYWxCb3hT
aWRlOjpCbG9ja1N0YXJ0IGFuZCBMb2dpY2FsQm94U2lkZTo6SW5saW5lRW5kLgogZW51bSBjbGFz
cyBMb2dpY2FsQm94Q29ybmVyIDogdWludDhfdCB7CiAgICAgU3RhcnRTdGFydCwKICAgICBTdGFy
dEVuZCwKQEAgLTEzNSw4ICsxMzgsNiBAQCBlbnVtIGNsYXNzIExvZ2ljYWxCb3hDb3JuZXIgOiB1
aW50OF90IHsKICAgICBFbmRFbmQKIH07CiAKLS8vIFRoZSBtYXBwaW5nIGlzIHdpdGggdGhlIGZp
cnN0IHN0YXJ0L2VuZCBnaXZpbmcgdGhlIGJsb2NrIGF4aXMgc2lkZSwKLS8vIGFuZCB0aGUgc2Vj
b25kIHRoZSBpbmxpbmUtYXhpcyBzaWRlLCBpLmUuIHBhdHRlcm5lZCBhcyAnYm9yZGVyLWJsb2Nr
LWlubGluZS1yYWRpdXMnLgogZW51bSBjbGFzcyBCb3hDb3JuZXIgOiB1aW50OF90IHsKICAgICBU
b3BMZWZ0LAogICAgIFRvcFJpZ2h0LApAQCAtMTU2LDY0ICsxNTcsNzcgQEAgZW51bSBjbGFzcyBC
b3hBeGlzIDogdWludDhfdCB7CiAKIGNvbnN0ZXhwciBzdGQ6OmFycmF5PEJveFNpZGUsIDQ+IGFs
bEJveFNpZGVzID0geyBCb3hTaWRlOjpUb3AsIEJveFNpZGU6OlJpZ2h0LCBCb3hTaWRlOjpCb3R0
b20sIEJveFNpZGU6OkxlZnQgfTsKIAotY29uc3RleHByIGlubGluZSBib29sIGlzSG9yaXpvbnRh
bFBoeXNpY2FsU2lkZShCb3hTaWRlIHBoeXNpY2FsU2lkZSkKK2NvbnN0ZXhwciBCb3hTaWRlIG1h
cExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUoVGV4dEZsb3cgdGV4dGZsb3csIExvZ2ljYWxCb3hT
aWRlIGxvZ2ljYWxTaWRlKQogewotICAgIHJldHVybiBwaHlzaWNhbFNpZGUgPT0gQm94U2lkZTo6
TGVmdCB8fCBwaHlzaWNhbFNpZGUgPT0gQm94U2lkZTo6UmlnaHQ7CisgICAgYm9vbCBpc0Jsb2Nr
ID0gbG9naWNhbFNpZGUgPT0gTG9naWNhbEJveFNpZGU6OkJsb2NrU3RhcnQgfHwgbG9naWNhbFNp
ZGUgPT0gTG9naWNhbEJveFNpZGU6OkJsb2NrRW5kOworICAgIGJvb2wgaXNTdGFydCA9IGxvZ2lj
YWxTaWRlID09IExvZ2ljYWxCb3hTaWRlOjpCbG9ja1N0YXJ0IHx8IGxvZ2ljYWxTaWRlID09IExv
Z2ljYWxCb3hTaWRlOjpJbmxpbmVTdGFydDsKKyAgICBib29sIGlzTm9ybWFsU3RhcnQgPSBpc1N0
YXJ0ICE9IChpc0Jsb2NrID8gaXNGbGlwcGVkVGV4dEZsb3codGV4dGZsb3cpIDogaXNSZXZlcnNl
ZFRleHRGbG93KHRleHRmbG93KSk7CisgICAgYm9vbCBpc1ZlcnRpY2FsID0gaXNCbG9jayAhPSBp
c1ZlcnRpY2FsVGV4dEZsb3codGV4dGZsb3cpOworICAgIGlmIChpc1ZlcnRpY2FsKQorICAgICAg
ICByZXR1cm4gaXNOb3JtYWxTdGFydCA/IEJveFNpZGU6OlRvcCA6IEJveFNpZGU6OkJvdHRvbTsK
KyAgICByZXR1cm4gaXNOb3JtYWxTdGFydCA/IEJveFNpZGU6OkxlZnQgOiBCb3hTaWRlOjpSaWdo
dDsKIH0KIAotY29uc3RleHByIGlubGluZSBCb3hTaWRlIG1pcnJvclBoeXNpY2FsU2lkZShCb3hT
aWRlIHBoeXNpY2FsU2lkZSkKK2NvbnN0ZXhwciBCb3hTaWRlIG1hcExvZ2ljYWxTaWRlVG9QaHlz
aWNhbFNpZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIExvZ2ljYWxCb3hTaWRlIGxvZ2ljYWxT
aWRlKQogewotICAgIC8vIHRvcCA8LT4gYm90dG9tIGFuZCBsZWZ0IDwtPiByaWdodCBjb252ZXJz
aW9uCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEJveFNpZGU+KChzdGF0aWNfY2FzdDxpbnQ+KHBo
eXNpY2FsU2lkZSkgKyAyKSAlIDQpOworICAgIC8vIFNldCB0aGUgZGlyZWN0aW9uIHN1Y2ggdGhh
dCBzaWRlIGlzIG1pcnJvcmVkIGlmIGlzRmxpcHBlZFdyaXRpbmdNb2RlKCkgaXMgdHJ1ZQorICAg
IFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gaXNGbGlwcGVkV3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpID8gVGV4dERpcmVjdGlvbjo6UlRMIDogVGV4dERpcmVjdGlvbjo6TFRSOworICAgIHJldHVy
biBtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwg
ZGlyZWN0aW9uKSwgbG9naWNhbFNpZGUpOwogfQogCi1jb25zdGV4cHIgaW5saW5lIEJveFNpZGUg
cm90YXRlUGh5c2ljYWxTaWRlKEJveFNpZGUgcGh5c2ljYWxTaWRlKQorY29uc3RleHByIExvZ2lj
YWxCb3hTaWRlIG1hcFBoeXNpY2FsU2lkZVRvTG9naWNhbFNpZGUoVGV4dEZsb3cgdGV4dGZsb3cs
IEJveFNpZGUgc2lkZSkKIHsKLSAgICAvLyB0b3AgPC0+IGxlZnQgYW5kIHJpZ2h0IDwtPiBib3R0
b20gY29udmVyc2lvbgotICAgIGJvb2wgaG9yaXpvbnRhbFNpZGUgPSBpc0hvcml6b250YWxQaHlz
aWNhbFNpZGUocGh5c2ljYWxTaWRlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Qm94U2lkZT4o
KHN0YXRpY19jYXN0PGludD4ocGh5c2ljYWxTaWRlKSArIChob3Jpem9udGFsU2lkZSA/IDEgOiAz
KSkgJSA0KTsKKyAgICBib29sIGlzTm9ybWFsU3RhcnQgPSBzaWRlID09IEJveFNpZGU6OlRvcCB8
fCBzaWRlID09IEJveFNpZGU6OkxlZnQ7CisgICAgYm9vbCBpc1ZlcnRpY2FsID0gc2lkZSA9PSBC
b3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpCb3R0b207CisgICAgYm9vbCBpc0Jsb2Nr
ID0gaXNWZXJ0aWNhbCAhPSBpc1ZlcnRpY2FsVGV4dEZsb3codGV4dGZsb3cpOworICAgIGlmIChp
c0Jsb2NrKSB7CisgICAgICAgIGJvb2wgaXNCbG9ja1N0YXJ0ID0gaXNOb3JtYWxTdGFydCAhPSBp
c0ZsaXBwZWRUZXh0Rmxvdyh0ZXh0Zmxvdyk7CisgICAgICAgIHJldHVybiBpc0Jsb2NrU3RhcnQg
PyBMb2dpY2FsQm94U2lkZTo6QmxvY2tTdGFydCA6IExvZ2ljYWxCb3hTaWRlOjpCbG9ja0VuZDsK
KyAgICB9CisgICAgYm9vbCBpc0lubGluZVN0YXJ0ID0gaXNOb3JtYWxTdGFydCAhPSBpc1JldmVy
c2VkVGV4dEZsb3codGV4dGZsb3cpOworICAgIHJldHVybiBpc0lubGluZVN0YXJ0ID8gTG9naWNh
bEJveFNpZGU6OklubGluZVN0YXJ0IDogTG9naWNhbEJveFNpZGU6OklubGluZUVuZDsKIH0KIAot
Y29uc3RleHByIGlubGluZSBCb3hTaWRlIG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUoVGV4
dEZsb3cgdGV4dGZsb3csIExvZ2ljYWxCb3hTaWRlIGxvZ2ljYWxTaWRlKQorY29uc3RleHByIEJv
eENvcm5lciBtYXBMb2dpY2FsQ29ybmVyVG9QaHlzaWNhbENvcm5lcihUZXh0RmxvdyB0ZXh0Zmxv
dywgTG9naWNhbEJveENvcm5lciBsb2dpY2FsQm94Q29ybmVyKQogewotICAgIEJveFNpZGUgcGh5
c2ljYWxTaWRlID0gc3RhdGljX2Nhc3Q8Qm94U2lkZT4obG9naWNhbFNpZGUpOwotICAgIGJvb2wg
aG9yaXpvbnRhbFNpZGUgPSBpc0hvcml6b250YWxQaHlzaWNhbFNpZGUocGh5c2ljYWxTaWRlKTsK
LQotICAgIGlmIChpc1ZlcnRpY2FsVGV4dEZsb3codGV4dGZsb3cpKQotICAgICAgICBwaHlzaWNh
bFNpZGUgPSByb3RhdGVQaHlzaWNhbFNpZGUocGh5c2ljYWxTaWRlKTsKLQotICAgIGlmICgoaG9y
aXpvbnRhbFNpZGUgJiYgaXNSZXZlcnNlZFRleHRGbG93KHRleHRmbG93KSkgfHwgKCFob3Jpem9u
dGFsU2lkZSAmJiBpc0ZsaXBwZWRUZXh0Rmxvdyh0ZXh0ZmxvdykpKQotICAgICAgICBwaHlzaWNh
bFNpZGUgPSBtaXJyb3JQaHlzaWNhbFNpZGUocGh5c2ljYWxTaWRlKTsKLQotICAgIHJldHVybiBw
aHlzaWNhbFNpZGU7CisgICAgYm9vbCBpc0Jsb2NrU3RhcnQgPSBsb2dpY2FsQm94Q29ybmVyID09
IExvZ2ljYWxCb3hDb3JuZXI6OlN0YXJ0U3RhcnQgfHwgbG9naWNhbEJveENvcm5lciA9PSBMb2dp
Y2FsQm94Q29ybmVyOjpTdGFydEVuZDsKKyAgICBib29sIGlzSW5saW5lU3RhcnQgPSBsb2dpY2Fs
Qm94Q29ybmVyID09IExvZ2ljYWxCb3hDb3JuZXI6OlN0YXJ0U3RhcnQgfHwgbG9naWNhbEJveENv
cm5lciA9PSBMb2dpY2FsQm94Q29ybmVyOjpFbmRTdGFydDsKKyAgICBib29sIGlzTm9ybWFsQmxv
Y2tTdGFydCA9IGlzQmxvY2tTdGFydCAhPSBpc0ZsaXBwZWRUZXh0Rmxvdyh0ZXh0Zmxvdyk7Cisg
ICAgYm9vbCBpc05vcm1hbElubGluZVN0YXJ0ID0gaXNJbmxpbmVTdGFydCAhPSBpc1JldmVyc2Vk
VGV4dEZsb3codGV4dGZsb3cpOworICAgIGJvb2wgdXNpbmdWZXJ0aWNhbFRleHRGbG93ID0gaXNW
ZXJ0aWNhbFRleHRGbG93KHRleHRmbG93KTsKKyAgICBib29sIGlzVG9wID0gdXNpbmdWZXJ0aWNh
bFRleHRGbG93ID8gaXNOb3JtYWxJbmxpbmVTdGFydCA6IGlzTm9ybWFsQmxvY2tTdGFydDsKKyAg
ICBib29sIGlzTGVmdCA9IHVzaW5nVmVydGljYWxUZXh0RmxvdyA/IGlzTm9ybWFsQmxvY2tTdGFy
dCA6IGlzTm9ybWFsSW5saW5lU3RhcnQ7CisgICAgaWYgKGlzVG9wKQorICAgICAgICByZXR1cm4g
aXNMZWZ0ID8gQm94Q29ybmVyOjpUb3BMZWZ0IDogQm94Q29ybmVyOjpUb3BSaWdodDsKKyAgICBy
ZXR1cm4gaXNMZWZ0ID8gQm94Q29ybmVyOjpCb3R0b21MZWZ0IDogQm94Q29ybmVyOjpCb3R0b21S
aWdodDsKIH0KIAotY29uc3RleHByIGlubGluZSBCb3hTaWRlIG1hcExvZ2ljYWxTaWRlVG9QaHlz
aWNhbFNpZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIExvZ2ljYWxCb3hTaWRlIGxvZ2ljYWxT
aWRlKQorY29uc3RleHByIExvZ2ljYWxCb3hDb3JuZXIgbWFwUGh5c2ljYWxDb3JuZXJUb0xvZ2lj
YWxDb3JuZXIoVGV4dEZsb3cgdGV4dGZsb3csIEJveENvcm5lciBib3hDb3JuZXIpCiB7Ci0gICAg
Ly8gU2V0IHRoZSBkaXJlY3Rpb24gc3VjaCB0aGF0IHNpZGUgaXMgbWlycm9yZWQgaWYgaXNGbGlw
cGVkV3JpdGluZ01vZGUoKSBpcyB0cnVlCi0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBp
c0ZsaXBwZWRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSkgPyBUZXh0RGlyZWN0aW9uOjpSVEwgOiBU
ZXh0RGlyZWN0aW9uOjpMVFI7Ci0gICAgcmV0dXJuIG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNp
ZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pLCBsb2dpY2FsU2lkZSk7Cisg
ICAgYm9vbCBpc1RvcCA9IGJveENvcm5lciA9PSBCb3hDb3JuZXI6OlRvcExlZnQgfHwgYm94Q29y
bmVyID09IEJveENvcm5lcjo6VG9wUmlnaHQ7CisgICAgYm9vbCBpc0xlZnQgPSBib3hDb3JuZXIg
PT0gQm94Q29ybmVyOjpUb3BMZWZ0IHx8IGJveENvcm5lciA9PSBCb3hDb3JuZXI6OkJvdHRvbUxl
ZnQ7CisgICAgYm9vbCB1c2luZ1ZlcnRpY2FsVGV4dEZsb3cgPSBpc1ZlcnRpY2FsVGV4dEZsb3co
dGV4dGZsb3cpOworICAgIGJvb2wgaXNOb3JtYWxCbG9ja1N0YXJ0ID0gdXNpbmdWZXJ0aWNhbFRl
eHRGbG93ID8gaXNMZWZ0IDogaXNUb3A7CisgICAgYm9vbCBpc05vcm1hbElubGluZVN0YXJ0ID0g
dXNpbmdWZXJ0aWNhbFRleHRGbG93ID8gaXNUb3AgOiBpc0xlZnQ7CisgICAgYm9vbCBpc0Jsb2Nr
U3RhcnQgPSBpc05vcm1hbEJsb2NrU3RhcnQgIT0gaXNGbGlwcGVkVGV4dEZsb3codGV4dGZsb3cp
OworICAgIGJvb2wgaXNJbmxpbmVTdGFydCA9IGlzTm9ybWFsSW5saW5lU3RhcnQgIT0gaXNSZXZl
cnNlZFRleHRGbG93KHRleHRmbG93KTsKKyAgICBpZiAoaXNCbG9ja1N0YXJ0KQorICAgICAgICBy
ZXR1cm4gaXNJbmxpbmVTdGFydCA/IExvZ2ljYWxCb3hDb3JuZXI6OlN0YXJ0U3RhcnQgOiBMb2dp
Y2FsQm94Q29ybmVyOjpTdGFydEVuZDsKKyAgICByZXR1cm4gaXNJbmxpbmVTdGFydCA/IExvZ2lj
YWxCb3hDb3JuZXI6OkVuZFN0YXJ0IDogTG9naWNhbEJveENvcm5lcjo6RW5kRW5kOwogfQogCi1j
b25zdGV4cHIgaW5saW5lIEJveENvcm5lciBtYXBMb2dpY2FsQ29ybmVyVG9QaHlzaWNhbENvcm5l
cihUZXh0RmxvdyB0ZXh0ZmxvdywgTG9naWNhbEJveENvcm5lciBsb2dpY2FsQm94Q29ybmVyKQor
Y29uc3RleHByIEJveEF4aXMgbWFwTG9naWNhbEF4aXNUb1BoeXNpY2FsQXhpcyhUZXh0RmxvdyB0
ZXh0ZmxvdywgTG9naWNhbEJveEF4aXMgbG9naWNhbEF4aXMpCiB7Ci0gICAgYm9vbCBpc0Jsb2Nr
U3RhcnQgPSBsb2dpY2FsQm94Q29ybmVyID09IExvZ2ljYWxCb3hDb3JuZXI6OlN0YXJ0U3RhcnQg
fHwgbG9naWNhbEJveENvcm5lciA9PSBMb2dpY2FsQm94Q29ybmVyOjpTdGFydEVuZDsKLSAgICBi
b29sIGlzSW5saW5lU3RhcnQgPSBsb2dpY2FsQm94Q29ybmVyID09IExvZ2ljYWxCb3hDb3JuZXI6
OlN0YXJ0U3RhcnQgfHwgbG9naWNhbEJveENvcm5lciA9PSBMb2dpY2FsQm94Q29ybmVyOjpFbmRT
dGFydDsKLSAgICBpZiAoaXNCbG9ja1N0YXJ0ID09IGlzRmxpcHBlZFRleHRGbG93KHRleHRmbG93
KSkgewotICAgICAgICBpZiAoaXNJbmxpbmVTdGFydCA9PSBpc1JldmVyc2VkVGV4dEZsb3codGV4
dGZsb3cpKQotICAgICAgICAgICAgcmV0dXJuIEJveENvcm5lcjo6Qm90dG9tUmlnaHQ7Ci0gICAg
fSBlbHNlIGlmIChpc0lubGluZVN0YXJ0ICE9IGlzUmV2ZXJzZWRUZXh0Rmxvdyh0ZXh0Zmxvdykp
Ci0gICAgICAgIHJldHVybiBCb3hDb3JuZXI6OlRvcExlZnQ7Ci0gICAgaWYgKGlzQmxvY2tTdGFy
dCA9PSBpc0ZsaXBwZWRMaW5lc1RleHRGbG93KHRleHRmbG93KSkKLSAgICAgICAgcmV0dXJuIEJv
eENvcm5lcjo6Qm90dG9tTGVmdDsKLSAgICByZXR1cm4gQm94Q29ybmVyOjpUb3BSaWdodDsKKyAg
ICBib29sIGlzQmxvY2sgPSBsb2dpY2FsQXhpcyA9PSBMb2dpY2FsQm94QXhpczo6QmxvY2s7Cisg
ICAgYm9vbCBpc1ZlcnRpY2FsID0gaXNCbG9jayAhPSBpc1ZlcnRpY2FsVGV4dEZsb3codGV4dGZs
b3cpOworICAgIHJldHVybiBpc1ZlcnRpY2FsID8gQm94QXhpczo6VmVydGljYWwgOiBCb3hBeGlz
OjpIb3Jpem9udGFsOwogfQogCi1jb25zdGV4cHIgaW5saW5lIEJveEF4aXMgbWFwTG9naWNhbEF4
aXNUb1BoeXNpY2FsQXhpcyhUZXh0RmxvdyB0ZXh0ZmxvdywgTG9naWNhbEJveEF4aXMgbG9naWNh
bEF4aXMpCitjb25zdGV4cHIgTG9naWNhbEJveEF4aXMgbWFwUGh5c2ljYWxBeGlzVG9Mb2dpY2Fs
QXhpcyhUZXh0RmxvdyB0ZXh0ZmxvdywgQm94QXhpcyBheGlzKQogewotICAgIGlmIChpc1ZlcnRp
Y2FsVGV4dEZsb3codGV4dGZsb3cpKQotICAgICAgICByZXR1cm4gbG9naWNhbEF4aXMgPT0gTG9n
aWNhbEJveEF4aXM6OklubGluZSA/IEJveEF4aXM6OlZlcnRpY2FsIDogQm94QXhpczo6SG9yaXpv
bnRhbDsKLSAgICByZXR1cm4gbG9naWNhbEF4aXMgPT0gTG9naWNhbEJveEF4aXM6OklubGluZSA/
IEJveEF4aXM6Okhvcml6b250YWwgOiBCb3hBeGlzOjpWZXJ0aWNhbDsKKyAgICBib29sIGlzVmVy
dGljYWwgPSBheGlzID09IEJveEF4aXM6OlZlcnRpY2FsOworICAgIGJvb2wgaXNCbG9jayA9IGlz
VmVydGljYWwgIT0gaXNWZXJ0aWNhbFRleHRGbG93KHRleHRmbG93KTsKKyAgICByZXR1cm4gaXNC
bG9jayA/IExvZ2ljYWxCb3hBeGlzOjpCbG9jayA6IExvZ2ljYWxCb3hBeGlzOjpJbmxpbmU7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0ZTQwZjU5OTMzYzQwZjYwMTNlOWNiZjhiNjlkYmFiMWZm
OWQ0MmVlLi44ZjhlZjFiYzNlMDAyZjBmMGZiNjNiNjM4ZjFhODhhNmU0ZjQxOThkIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMjItMDMtMTYgIE9yaW9sIEJydWZhdSAgPG9icnVmYXVAaWdhbGlhLmNvbT4KKworICAg
ICAgICBDbGFyaWZ5IGNvZGUgZm9yIGxvZ2ljYWwtdG8tcGh5c2ljYWwgbWFwcGluZ3MsIGFuZCBh
ZGQgcGh5c2ljYWwtdG8tbG9naWNhbCBtYXBwaW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3OTY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCisKKyAgICAgICAgQWRkIHRlc3RzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvV3JpdGluZ01vZGVUZXN0cy5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VEVTVCk6CisKIDIwMjItMDMtMTUgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBw
bGUuY29tPgogCiAgICAgICAgIFtNZXJnZS1RdWV1ZV0gUmVuYW1lIGJ1Z3ppbGxhX2NvbW1lbnRf
dGV4dApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKaW5kZXggYTFhOTE0MmZmYThiNTVmNzdi
NTRlNGZhZTg1NmRhZmYwOWVjMWMzYi4uM2UzOWE0MDZiNTUzOWRkNTdiZmJhMWEwMWQ3ZWVjNzJl
OWQ4ZDFhOSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CkBAIC0xOTgsNiArMTk4LDcg
QEAgaWYgKEVOQUJMRV9XRUJDT1JFKQogICAgICAgICBUZXN0cy9XZWJDb3JlL1RpbWVSYW5nZXMu
Y3BwCiAgICAgICAgIFRlc3RzL1dlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCiAgICAg
ICAgIFRlc3RzL1dlYkNvcmUvVVJMUGFyc2VyVGV4dEVuY29kaW5nLmNwcAorICAgICAgICBUZXN0
cy9XZWJDb3JlL1dyaXRpbmdNb2RlVGVzdHMuY3BwCiAgICAgKQogCiAgICAgc2V0KFRlc3RXZWJD
b3JlX0xJQlJBUklFUwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmZDE2YjVmM2VhMzIzOTc5
ZmU2ZGM1ZThiMmUyOGZmOTgxMDdjZTQwLi4zOTZhMmZjNTVmZTcyYWQ3Y2MwYTNjMTM2OTQ0MTUw
NDA2OTkwMzc4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTg5LDYgKzE4OSw3IEBACiAJ
CTMzREM4OTEyMTQxOTU1RkUwMDc0N0VGNyAvKiBzaW1wbGUtaWZyYW1lLmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNEQzg5MEUxNDE5
NTM5MzAwNzQ3RUY3IC8qIHNpbXBsZS1pZnJhbWUuaHRtbCAqLzsgfTsKIAkJMzNEQzg5MTQxNDE5
NTc5RjAwNzQ3RUY3IC8qIExvYWRDYW5jZWxlZE5vU2VydmVyUmVkaXJlY3RDYWxsYmFja19CdW5k
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNE
Qzg5MTMxNDE5NTc5RjAwNzQ3RUY3IC8qIExvYWRDYW5jZWxlZE5vU2VydmVyUmVkaXJlY3RDYWxs
YmFja19CdW5kbGUuY3BwICovOyB9OwogCQkzM0U3OUUwNjEzN0I1RkQ5MDBFMzJEOTkgLyogbW91
c2UtbW92ZS1saXN0ZW5lci5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMzRTc5RTA1MTM3QjVGQ0UwMEUzMkQ5OSAvKiBtb3VzZS1tb3Zl
LWxpc3RlbmVyLmh0bWwgKi87IH07CisJCTM1NDVFNTg5MjdFMkFEMTMwMEYxOTEwRSAvKiBXcml0
aW5nTW9kZVRlc3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDM1NDVFNTg4MjdFMkFEMTIwMEYxOTEwRSAvKiBXcml0aW5nTW9kZVRlc3RzLmNwcCAq
LzsgfTsKIAkJMzcxMzdFNEIyMTEyNEQwMTAwMkJFRUE0IC8qIEF0dHJTdHlsZS5odG1sIGluIENv
cHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NjBDNEYy
MjExMjRCRDAwMDIzM0FDQyAvKiBBdHRyU3R5bGUuaHRtbCAqLzsgfTsKIAkJMzc0QjdBNjExREYz
NzFDRjAwQUNDQjZDIC8qIEJ1bmRsZUVkaXRpbmdEZWxlZ2F0ZVBsdWdJbi5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NEI3QTVGMURGMzZFRUUwMEFD
Q0I2QyAvKiBCdW5kbGVFZGl0aW5nRGVsZWdhdGVQbHVnSW4ubW0gKi87IH07CiAJCTM3OEU2NDc3
MTYzMjY1NUUwMEI2QzY3NiAvKiBJbmplY3RlZEJ1bmRsZUZyYW1lSGl0VGVzdF9CdW5kbGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc4RTY0NzUx
NjMyNjU1RDAwQjZDNjc2IC8qIEluamVjdGVkQnVuZGxlRnJhbWVIaXRUZXN0X0J1bmRsZS5jcHAg
Ki87IH07CkBAIC0xOTMzLDYgKzE5MzQsNyBAQAogCQkzM0RDODkxMDE0MTk1M0EzMDA3NDdFRjcg
LyogTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVjdENhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvYWRDYW5jZWxlZE5vU2VydmVyUmVkaXJlY3RDYWxs
YmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzREM4OTEzMTQxOTU3OUYw
MDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGlyZWN0Q2FsbGJhY2tfQnVuZGxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvYWRDYW5jZWxlZE5vU2Vy
dmVyUmVkaXJlY3RDYWxsYmFja19CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzM0U3OUUwNTEzN0I1RkNFMDBFMzJEOTkgLyogbW91c2UtbW92ZS1saXN0ZW5lci5odG1s
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gIm1vdXNlLW1vdmUtbGlzdGVuZXIuaHRtbCI7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM1NDVFNTg4MjdFMkFEMTIwMEYxOTEwRSAv
KiBXcml0aW5nTW9kZVRlc3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdyaXRpbmdNb2RlVGVzdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
NzBDRTIyOTFGNTczNDM0MDBFNzQxMEIgLyogV0tDb250ZW50Vmlld1RhcmdldEZvckFjdGlvbi5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLQ29udGVudFZpZXdUYXJnZXRGb3JBY3Rpb24ubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MTE5NUFBMUZFNTc5NzcwMEExRkI5MiAv
KiBXS1dlYlZpZXdBbHdheXNTaG93c1Njcm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V0tXZWJWaWV3QWx3YXlzU2hvd3NTY3JvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzcxMTlBN0YyMENDQjY5NTAwMkM2REM5IC8qIFdlYktpdFRhcmdldENvbmRpdGlvbmFs
cy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBXZWJLaXRUYXJnZXRDb25kaXRpb25hbHMueGNjb25m
aWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODQ5LDYgKzM4NTEsNyBAQAogCQkJ
CTdBRDNGRThEMUQ3NUZCOEQwMEIxNjlBNCAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAgKi8s
CiAJCQkJNTdEMUQ3NUUyMURDQjdBODAwOTNFODZBIC8qIFUyZkNvbW1hbmRDb25zdHJ1Y3RvclRl
c3QuY3BwICovLAogCQkJCUUzQTFFNzdFMjFCMjVCMzkwMDhDNjAwNyAvKiBVUkxQYXJzZXJUZXh0
RW5jb2RpbmcuY3BwICovLAorCQkJCTM1NDVFNTg4MjdFMkFEMTIwMEYxOTEwRSAvKiBXcml0aW5n
TW9kZVRlc3RzLmNwcCAqLywKIAkJCQk1QzU4MUQzMTI3QzhBMDFDMDA2QjNCQzQgLyogWW91VHVi
ZVBsdWdpblJlcGxhY2VtZW50LmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gV2ViQ29yZTsKQEAg
LTU5NjAsNiArNTk2Myw3IEBACiAJCQkJRTUyMEEzNkIyNUFGQjc2QzAwNTI2Q0I5IC8qIFdLV2Vi
Vmlld1RpdGxlYmFyU2VwYXJhdG9yVGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Qzc0QzhG
QTIyREZCQTk2MDBEQTJEQUIgLyogV1RGU3RyaW5nVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUMxNEQzMDQ2MjRCNEMzQkEwMDQ4MDM4NyAvKiBYUENFbmRwb2ludC5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTM1NDVFNTg5MjdFMkFEMTMwMEYxOTEwRSAvKiBXcml0aW5nTW9kZVRlc3Rz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTgxRDMyMjdDOEEwMUMwMDZCM0JDNCAvKiBZb3VU
dWJlUGx1Z2luUmVwbGFjZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvV3JpdGluZ01vZGVUZXN0cy5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvV3JpdGluZ01vZGVUZXN0cy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Mjg5Y2FkYzg4ZDVhMjg3N2E4YTU4MzA5YWY2M2QwZDQ2YTBkMjRkYwotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Xcml0aW5nTW9kZVRlc3RzLmNw
cApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBJZ2FsaWEgUy5M
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvV3JpdGluZ01vZGUuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwor
Y29uc3RleHByIHN0ZDo6YXJyYXk8VGV4dEZsb3csIDg+IGFsbFRleHRGbG93cyA9IHsKKyAgICBJ
bmxpbmVFYXN0QmxvY2tTb3V0aCwKKyAgICBJbmxpbmVXZXN0QmxvY2tTb3V0aCwKKyAgICBJbmxp
bmVFYXN0QmxvY2tOb3J0aCwKKyAgICBJbmxpbmVXZXN0QmxvY2tOb3J0aCwKKyAgICBJbmxpbmVT
b3V0aEJsb2NrRWFzdCwKKyAgICBJbmxpbmVTb3V0aEJsb2NrV2VzdCwKKyAgICBJbmxpbmVOb3J0
aEJsb2NrRWFzdCwKKyAgICBJbmxpbmVOb3J0aEJsb2NrV2VzdCwKK307CisKK1RFU1QoV3JpdGlu
Z01vZGUsIExvZ2ljYWxCb3hTaWRlKQoreworICAgIGF1dG8gbWFwQmFja0FuZEZvcnRoID0gW10o
VGV4dEZsb3cgdGV4dEZsb3csIExvZ2ljYWxCb3hTaWRlIGxvZ2ljYWxTaWRlKSB7CisgICAgICAg
IHJldHVybiBtYXBQaHlzaWNhbFNpZGVUb0xvZ2ljYWxTaWRlKHRleHRGbG93LCBtYXBMb2dpY2Fs
U2lkZVRvUGh5c2ljYWxTaWRlKHRleHRGbG93LCBsb2dpY2FsU2lkZSkpOworICAgIH07CisgICAg
Zm9yIChUZXh0RmxvdyB0ZXh0RmxvdyA6IGFsbFRleHRGbG93cykgeworICAgICAgICBFWFBFQ1Rf
RVEobWFwQmFja0FuZEZvcnRoKHRleHRGbG93LCBMb2dpY2FsQm94U2lkZTo6QmxvY2tTdGFydCks
IExvZ2ljYWxCb3hTaWRlOjpCbG9ja1N0YXJ0KSA8PCAid2l0aCB0ZXh0Rmxvdz0iIDw8IHRleHRG
bG93OworICAgICAgICBFWFBFQ1RfRVEobWFwQmFja0FuZEZvcnRoKHRleHRGbG93LCBMb2dpY2Fs
Qm94U2lkZTo6QmxvY2tFbmQpLCBMb2dpY2FsQm94U2lkZTo6QmxvY2tFbmQpIDw8ICJ3aXRoIHRl
eHRGbG93PSIgPDwgdGV4dEZsb3c7CisgICAgICAgIEVYUEVDVF9FUShtYXBCYWNrQW5kRm9ydGgo
dGV4dEZsb3csIExvZ2ljYWxCb3hTaWRlOjpJbmxpbmVTdGFydCksIExvZ2ljYWxCb3hTaWRlOjpJ
bmxpbmVTdGFydCkgPDwgIndpdGggdGV4dEZsb3c9IiA8PCB0ZXh0RmxvdzsKKyAgICAgICAgRVhQ
RUNUX0VRKG1hcEJhY2tBbmRGb3J0aCh0ZXh0RmxvdywgTG9naWNhbEJveFNpZGU6OklubGluZUVu
ZCksIExvZ2ljYWxCb3hTaWRlOjpJbmxpbmVFbmQpIDw8ICJ3aXRoIHRleHRGbG93PSIgPDwgdGV4
dEZsb3c7CisgICAgfQorfQorCitURVNUKFdyaXRpbmdNb2RlLCBCb3hTaWRlKQoreworICAgIGF1
dG8gbWFwQmFja0FuZEZvcnRoID0gW10oVGV4dEZsb3cgdGV4dEZsb3csIEJveFNpZGUgc2lkZSkg
eworICAgICAgICByZXR1cm4gbWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZSh0ZXh0Rmxvdywg
bWFwUGh5c2ljYWxTaWRlVG9Mb2dpY2FsU2lkZSh0ZXh0Rmxvdywgc2lkZSkpOworICAgIH07Cisg
ICAgZm9yIChUZXh0RmxvdyB0ZXh0RmxvdyA6IGFsbFRleHRGbG93cykgeworICAgICAgICBFWFBF
Q1RfRVEobWFwQmFja0FuZEZvcnRoKHRleHRGbG93LCBCb3hTaWRlOjpUb3ApLCBCb3hTaWRlOjpU
b3ApIDw8ICJ3aXRoIHRleHRGbG93PSIgPDwgdGV4dEZsb3c7CisgICAgICAgIEVYUEVDVF9FUSht
YXBCYWNrQW5kRm9ydGgodGV4dEZsb3csIEJveFNpZGU6OlJpZ2h0KSwgQm94U2lkZTo6UmlnaHQp
IDw8ICJ3aXRoIHRleHRGbG93PSIgPDwgdGV4dEZsb3c7CisgICAgICAgIEVYUEVDVF9FUShtYXBC
YWNrQW5kRm9ydGgodGV4dEZsb3csIEJveFNpZGU6OkJvdHRvbSksIEJveFNpZGU6OkJvdHRvbSkg
PDwgIndpdGggdGV4dEZsb3c9IiA8PCB0ZXh0RmxvdzsKKyAgICAgICAgRVhQRUNUX0VRKG1hcEJh
Y2tBbmRGb3J0aCh0ZXh0RmxvdywgQm94U2lkZTo6TGVmdCksIEJveFNpZGU6OkxlZnQpIDw8ICJ3
aXRoIHRleHRGbG93PSIgPDwgdGV4dEZsb3c7CisgICAgfQorfQorCitURVNUKFdyaXRpbmdNb2Rl
LCBMb2dpY2FsQm94Q29ybmVyKQoreworICAgIGF1dG8gbWFwQmFja0FuZEZvcnRoID0gW10oVGV4
dEZsb3cgdGV4dEZsb3csIExvZ2ljYWxCb3hDb3JuZXIgbG9naWNhbENvcm5lcikgeworICAgICAg
ICByZXR1cm4gbWFwUGh5c2ljYWxDb3JuZXJUb0xvZ2ljYWxDb3JuZXIodGV4dEZsb3csIG1hcExv
Z2ljYWxDb3JuZXJUb1BoeXNpY2FsQ29ybmVyKHRleHRGbG93LCBsb2dpY2FsQ29ybmVyKSk7Cisg
ICAgfTsKKyAgICBmb3IgKFRleHRGbG93IHRleHRGbG93IDogYWxsVGV4dEZsb3dzKSB7CisgICAg
ICAgIEVYUEVDVF9FUShtYXBCYWNrQW5kRm9ydGgodGV4dEZsb3csIExvZ2ljYWxCb3hDb3JuZXI6
OlN0YXJ0U3RhcnQpLCBMb2dpY2FsQm94Q29ybmVyOjpTdGFydFN0YXJ0KSA8PCAid2l0aCB0ZXh0
Rmxvdz0iIDw8IHRleHRGbG93OworICAgICAgICBFWFBFQ1RfRVEobWFwQmFja0FuZEZvcnRoKHRl
eHRGbG93LCBMb2dpY2FsQm94Q29ybmVyOjpTdGFydEVuZCksIExvZ2ljYWxCb3hDb3JuZXI6OlN0
YXJ0RW5kKSA8PCAid2l0aCB0ZXh0Rmxvdz0iIDw8IHRleHRGbG93OworICAgICAgICBFWFBFQ1Rf
RVEobWFwQmFja0FuZEZvcnRoKHRleHRGbG93LCBMb2dpY2FsQm94Q29ybmVyOjpFbmRTdGFydCks
IExvZ2ljYWxCb3hDb3JuZXI6OkVuZFN0YXJ0KSA8PCAid2l0aCB0ZXh0Rmxvdz0iIDw8IHRleHRG
bG93OworICAgICAgICBFWFBFQ1RfRVEobWFwQmFja0FuZEZvcnRoKHRleHRGbG93LCBMb2dpY2Fs
Qm94Q29ybmVyOjpFbmRFbmQpLCBMb2dpY2FsQm94Q29ybmVyOjpFbmRFbmQpIDw8ICJ3aXRoIHRl
eHRGbG93PSIgPDwgdGV4dEZsb3c7CisgICAgfQorfQorCitURVNUKFdyaXRpbmdNb2RlLCBCb3hD
b3JuZXIpCit7CisgICAgYXV0byBtYXBCYWNrQW5kRm9ydGggPSBbXShUZXh0RmxvdyB0ZXh0Rmxv
dywgQm94Q29ybmVyIGNvcm5lcikgeworICAgICAgICByZXR1cm4gbWFwTG9naWNhbENvcm5lclRv
UGh5c2ljYWxDb3JuZXIodGV4dEZsb3csIG1hcFBoeXNpY2FsQ29ybmVyVG9Mb2dpY2FsQ29ybmVy
KHRleHRGbG93LCBjb3JuZXIpKTsKKyAgICB9OworICAgIGZvciAoVGV4dEZsb3cgdGV4dEZsb3cg
OiBhbGxUZXh0Rmxvd3MpIHsKKyAgICAgICAgRVhQRUNUX0VRKG1hcEJhY2tBbmRGb3J0aCh0ZXh0
RmxvdywgQm94Q29ybmVyOjpUb3BMZWZ0KSwgQm94Q29ybmVyOjpUb3BMZWZ0KSA8PCAid2l0aCB0
ZXh0Rmxvdz0iIDw8IHRleHRGbG93OworICAgICAgICBFWFBFQ1RfRVEobWFwQmFja0FuZEZvcnRo
KHRleHRGbG93LCBCb3hDb3JuZXI6OlRvcFJpZ2h0KSwgQm94Q29ybmVyOjpUb3BSaWdodCkgPDwg
IndpdGggdGV4dEZsb3c9IiA8PCB0ZXh0RmxvdzsKKyAgICAgICAgRVhQRUNUX0VRKG1hcEJhY2tB
bmRGb3J0aCh0ZXh0RmxvdywgQm94Q29ybmVyOjpCb3R0b21SaWdodCksIEJveENvcm5lcjo6Qm90
dG9tUmlnaHQpIDw8ICJ3aXRoIHRleHRGbG93PSIgPDwgdGV4dEZsb3c7CisgICAgICAgIEVYUEVD
VF9FUShtYXBCYWNrQW5kRm9ydGgodGV4dEZsb3csIEJveENvcm5lcjo6Qm90dG9tTGVmdCksIEJv
eENvcm5lcjo6Qm90dG9tTGVmdCkgPDwgIndpdGggdGV4dEZsb3c9IiA8PCB0ZXh0RmxvdzsKKyAg
ICB9Cit9CisKK1RFU1QoV3JpdGluZ01vZGUsIExvZ2ljYWxCb3hBeGlzKQoreworICAgIGF1dG8g
bWFwQmFja0FuZEZvcnRoID0gW10oVGV4dEZsb3cgdGV4dEZsb3csIExvZ2ljYWxCb3hBeGlzIGxv
Z2ljYWxBeGlzKSB7CisgICAgICAgIHJldHVybiBtYXBQaHlzaWNhbEF4aXNUb0xvZ2ljYWxBeGlz
KHRleHRGbG93LCBtYXBMb2dpY2FsQXhpc1RvUGh5c2ljYWxBeGlzKHRleHRGbG93LCBsb2dpY2Fs
QXhpcykpOworICAgIH07CisgICAgZm9yIChUZXh0RmxvdyB0ZXh0RmxvdyA6IGFsbFRleHRGbG93
cykgeworICAgICAgICBFWFBFQ1RfRVEobWFwQmFja0FuZEZvcnRoKHRleHRGbG93LCBMb2dpY2Fs
Qm94QXhpczo6QmxvY2spLCBMb2dpY2FsQm94QXhpczo6QmxvY2spIDw8ICJ3aXRoIHRleHRGbG93
PSIgPDwgdGV4dEZsb3c7CisgICAgICAgIEVYUEVDVF9FUShtYXBCYWNrQW5kRm9ydGgodGV4dEZs
b3csIExvZ2ljYWxCb3hBeGlzOjpJbmxpbmUpLCBMb2dpY2FsQm94QXhpczo6SW5saW5lKSA8PCAi
d2l0aCB0ZXh0Rmxvdz0iIDw8IHRleHRGbG93OworICAgIH0KK30KKworVEVTVChXcml0aW5nTW9k
ZSwgQm94QXhpcykKK3sKKyAgICBhdXRvIG1hcEJhY2tBbmRGb3J0aCA9IFtdKFRleHRGbG93IHRl
eHRGbG93LCBCb3hBeGlzIGF4aXMpIHsKKyAgICAgICAgcmV0dXJuIG1hcExvZ2ljYWxBeGlzVG9Q
aHlzaWNhbEF4aXModGV4dEZsb3csIG1hcFBoeXNpY2FsQXhpc1RvTG9naWNhbEF4aXModGV4dEZs
b3csIGF4aXMpKTsKKyAgICB9OworICAgIGZvciAoVGV4dEZsb3cgdGV4dEZsb3cgOiBhbGxUZXh0
Rmxvd3MpIHsKKyAgICAgICAgRVhQRUNUX0VRKG1hcEJhY2tBbmRGb3J0aCh0ZXh0RmxvdywgQm94
QXhpczo6SG9yaXpvbnRhbCksIEJveEF4aXM6Okhvcml6b250YWwpIDw8ICJ3aXRoIHRleHRGbG93
PSIgPDwgdGV4dEZsb3c7CisgICAgICAgIEVYUEVDVF9FUShtYXBCYWNrQW5kRm9ydGgodGV4dEZs
b3csIEJveEF4aXM6OlZlcnRpY2FsKSwgQm94QXhpczo6VmVydGljYWwpIDw8ICJ3aXRoIHRleHRG
bG93PSIgPDwgdGV4dEZsb3c7CisgICAgfQorfQorCit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>