<?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>238444</bug_id>
          
          <creation_ts>2022-03-28 04:02:34 -0700</creation_ts>
          <short_desc>[JSC] Use spoolers in FTL OSR exit thunk</short_desc>
          <delta_ts>2022-03-29 15:55:19 -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>New Bugs</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="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1855530</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-03-28 04:02:34 -0700</bug_when>
    <thetext>[JSC] Use spoolers in FTL OSR exit thunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855532</commentid>
    <comment_count>1</comment_count>
      <attachid>455897</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-03-28 04:12:10 -0700</bug_when>
    <thetext>Created attachment 455897
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855534</commentid>
    <comment_count>2</comment_count>
      <attachid>455899</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-03-28 04:15:57 -0700</bug_when>
    <thetext>Created attachment 455899
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855736</commentid>
    <comment_count>3</comment_count>
      <attachid>455899</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-03-28 12:57:14 -0700</bug_when>
    <thetext>Comment on attachment 455899
Patch

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

Nice.  r=me.

&gt; Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp:389
&gt; +                    if (!undefinedGPR) {

Use UNLIKELY?

&gt; Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp:400
&gt; +                        if (!undefinedGPR) {

Use UNLIKELY?

&gt; Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp:503
&gt; +            // The FTL compilation didn&apos;t preserve this register. This means that it also
&gt; +            // didn&apos;t use the register. So its value at the beginning of OSR exit should be
&gt; +            // preserved by the thunk. Luckily, we saved all registers into the register
&gt; +            // scratch buffer, so we can restore them from there.

Since this now describe all the registers restorations below (as opposed to a single register as before), we should pluralized references to &quot;register&quot; in this comment.  I suggest (with some additional detail for added context):

unwindIndex == UINT_MAX indicates that the FTL compilation didn&apos;t preserve these registers.
This means that it also didn&apos;t use them. Their values at the beginning of OSR exit should be
the ones to retain. We saved all registers into the register scratch buffer at the beginning of
the thunk. So we can restore them from there.

&gt; Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp:521
&gt; +                CCallHelpers::CopySpooler spooler(jit, GPRInfo::regT3, CCallHelpers::framePointerRegister, GPRInfo::regT0, GPRInfo::regT1, FPRInfo::fpRegT0, FPRInfo::fpRegT1);

nit: I suggest adding ASSERTs above the `jit.move(CCallHelpers::TrustedImmPtr(registerScratch), GPRInfo::regT3);` line above to ASSERT that regT0, refT1, and regT3 are not callee save since these loops include restoration of callee saves.  Hence, we can&apos;t use callee saves as temps.

&gt; Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp:542
&gt; +            // The FTL compilation preserved the register. Its new value is therefore
&gt; +            // irrelevant, but we can get the value that was preserved by using the unwind
&gt; +            // data. We&apos;ve already copied all unwind-able preserved registers into the unwind
&gt; +            // scratch buffer, so we can get it from there.

Again, pluralize.  I suggest:

The FTL compilation preserved these registers. Their new values are therefore
irrelevant, but we can get their values that were preserved by using the unwind
data. We&apos;ve already copied all unwind-able preserved registers into the unwind
scratch buffer, so we can get the values to restore from there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1856180</commentid>
    <comment_count>4</comment_count>
      <attachid>455899</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-03-29 14:06:47 -0700</bug_when>
    <thetext>Comment on attachment 455899
Patch

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

Thank you!

&gt;&gt; Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp:389
&gt;&gt; +                    if (!undefinedGPR) {
&gt; 
&gt; Use UNLIKELY?

Nice. Added.

&gt;&gt; Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp:400
&gt;&gt; +                        if (!undefinedGPR) {
&gt; 
&gt; Use UNLIKELY?

Done.

&gt;&gt; Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp:503
&gt;&gt; +            // scratch buffer, so we can restore them from there.
&gt; 
&gt; Since this now describe all the registers restorations below (as opposed to a single register as before), we should pluralized references to &quot;register&quot; in this comment.  I suggest (with some additional detail for added context):
&gt; 
&gt; unwindIndex == UINT_MAX indicates that the FTL compilation didn&apos;t preserve these registers.
&gt; This means that it also didn&apos;t use them. Their values at the beginning of OSR exit should be
&gt; the ones to retain. We saved all registers into the register scratch buffer at the beginning of
&gt; the thunk. So we can restore them from there.

Sounds good! Changed.

&gt;&gt; Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp:521
&gt;&gt; +                CCallHelpers::CopySpooler spooler(jit, GPRInfo::regT3, CCallHelpers::framePointerRegister, GPRInfo::regT0, GPRInfo::regT1, FPRInfo::fpRegT0, FPRInfo::fpRegT1);
&gt; 
&gt; nit: I suggest adding ASSERTs above the `jit.move(CCallHelpers::TrustedImmPtr(registerScratch), GPRInfo::regT3);` line above to ASSERT that regT0, refT1, and regT3 are not callee save since these loops include restoration of callee saves.  Hence, we can&apos;t use callee saves as temps.

Sounds good!

&gt;&gt; Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp:542
&gt;&gt; +            // scratch buffer, so we can get it from there.
&gt; 
&gt; Again, pluralize.  I suggest:
&gt; 
&gt; The FTL compilation preserved these registers. Their new values are therefore
&gt; irrelevant, but we can get their values that were preserved by using the unwind
&gt; data. We&apos;ve already copied all unwind-able preserved registers into the unwind
&gt; scratch buffer, so we can get the values to restore from there.

Nice, changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1856223</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-03-29 15:54:22 -0700</bug_when>
    <thetext>Committed r292078 (249005@trunk): &lt;https://commits.webkit.org/249005@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1856224</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-29 15:55:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/91009994&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455897</attachid>
            <date>2022-03-28 04:12:10 -0700</date>
            <delta_ts>2022-03-28 04:15:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-238444-20220328041210.patch</filename>
            <type>text/plain</type>
            <size>18656</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxOTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZTFhZWQ1NDFlYzA0NTAzM2E2ZGM3Y2RjZTNkZGRhYTEwYWU5NTM0Li4zODIyNWQ3M2JmMjhjZmYw
ZDRkMTQ2MzY5NjExOTg3MTI2OTliMTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMi0wMy0yOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFVzZSBzcG9vbGVycyBpbiBGVEwgT1NSIGV4aXQgdGh1bmsKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzODQ0NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGRlcGxveSBz
cG9vbGVycyBpbiBGVEwgT1NSIGV4aXQgdGh1bmsgdG8gcmVkdWNlIGdlbmVyYXRlZCBjb2RlIHNp
emUuCisgICAgICAgIFRoaXMgY2hhbmdlIHJlZHVjZXMgRlRMT1NSRXhpdCBjb2RlIHNpemUgaW4g
SmV0U3RyZWFtMiBieSAzNSUuCisKKyAgICAgICAgQmVmb3JlOgorICAgICAgICAgICAgRlRMT1NS
RXhpdDogODAzNTY0ICg3ODQuNzMwNDY5IEtCKSBjb3VudCAzNjMgYXZnIHNpemUgMjIxMworICAg
ICAgICBBZnRlcjoKKyAgICAgICAgICAgIEZUTE9TUkV4aXQ6IDUxNjQzMiAoNTA0LjMyODEyNSBL
QikgY291bnQgMzYyIGF2ZyBzaXplIDE0MjYKKworICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAgICAgICog
ZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0
dWIpOgorCiAyMDIyLTAzLTI3ICBMYXVybyBNb3VyYSAgPGxtb3VyYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIG5vbi11bmlmaWVkIGJ1aWxkZml4CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCBiMjQzYzY3NDc5NTBjZWZkNmI1MmQ4ZGU1M2E1
YWFlYTE0OGJiMGZjLi4wYWVkNzJkZmFjNzc1NWNlMmEyNmZjNTM2ODAzN2EyN2E3N2E0MWVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTQzMCwxMCArNDMw
LDExIEBAIHZvaWQgT1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2
bSwgY29uc3QgT1NSRXhpdCYgZXhpdCwgY29uc3QKICAgICAgICAgICAgICAgICAvLyBXZSBhbHNv
IHVzZSB0aGUgbm90Q2VsbE1hc2tSZWdpc3RlciBhcyB0aGUgc2NyYXRjaCByZWdpc3RlciwgZm9y
IHRoZSBzYW1lIHJlYXNvbi4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogZmluZCBhIGxlc3Mg
Z3Jvc3Mgd2F5IG9mIGRvaW5nIHRoaXMsIG1heWJlIHRocm91Z2ggZGVsYXlpbmcgdGhlc2Ugb3Bl
cmF0aW9ucyB1bnRpbCB3ZSBhY3R1YWxseSBoYXZlIHNvbWUgc3BhcmUgcmVnaXN0ZXJzIGFyb3Vu
ZD8KICAgICAgICAgICAgICAgICBwcm9maWxlLmVtaXRSZXBvcnRWYWx1ZShqaXQsIEpTVmFsdWVS
ZWdzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSwgR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdp
c3RlciwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZv
OjpudW1iZXJUYWdSZWdpc3Rlcik7Ci0gICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgcHJvZmlsZS5lbWl0UmVwb3J0VmFsdWUoaml0LCBKU1Zh
bHVlUmVncyhleGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKSksIEdQUkluZm86Om5vdENlbGxNYXNr
UmVnaXN0ZXIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0gICAgICAgICAgICBqaXQubW92ZShB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpOb3RDZWxsTWFzayksIEdQUklu
Zm86Om5vdENlbGxNYXNrUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok5vdENlbGxNYXNrKSwgR1BSSW5mbzo6
bm90Q2VsbE1hc2tSZWdpc3Rlcik7CisgICAgICAgICAgICB9CiAjZWxzZSAvLyBub3QgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3Mo
KSkgewogICAgICAgICAgICAgICAgIC8vIFNhdmUgYSByZWdpc3RlciBzbyB3ZSBjYW4gdXNlIGl0
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3Bw
CmluZGV4IGE4MjRmN2E1MTljZTQ1ZjRhNzQyNTU1OGUzNDRkMmYyN2Q0ZGQzY2MuLjhkYTU2OWVl
NWQ4ZTJlZjhjZTkwMDg1MWE5NDE3ZmUzMDM5NzdmNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAog
I2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMu
aCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDaGVja3BvaW50T1NS
RXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIgpA
QCAtMjQxLDggKzI0Miw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWdu
ZWQgZXhpdElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0CiAgICAgCiAgICAgLy8g
R2V0IHRoZSBjYWxsIGZyYW1lIGFuZCB0YWcgdGhpbmdpZXMuCiAgICAgLy8gUmVzdG9yZSB0aGUg
ZXhpdGluZyBmdW5jdGlvbidzIGNhbGxGcmFtZSB2YWx1ZSBpbnRvIGEgcmVnVDQKLSAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok5vdENlbGxNYXNrKSwgR1BSSW5mbzo6bm90Q2VsbE1hc2tS
ZWdpc3Rlcik7CisgICAgaml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CiAg
ICAgCiAgICAgLy8gRG8gc29tZSB2YWx1ZSBwcm9maWxpbmcuCiAgICAgaWYgKGV4aXQubV9kZXNj
cmlwdG9yLT5tX3Byb2ZpbGVEYXRhRm9ybWF0ICE9IERhdGFGb3JtYXROb25lKSB7CkBAIC0zNzcs
OSArMzc3LDY1IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQgZXhp
dElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0CiAgICAgLy8gU2F2ZSBhbGwgc3Rh
dGUgZnJvbSB3aGVyZXZlciB0aGUgZXhpdCBkYXRhIHRlbGxzIHVzIGl0IHdhcywgaW50byB0aGUg
YXBwcm9wcmlhdGUgcGxhY2UgaW4KICAgICAvLyB0aGUgc2NyYXRjaCBidWZmZXIuIFRoaXMgYWxz
byBkb2VzIHRoZSByZWJveGluZy4KICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhp
dC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAgICAgcmVj
b3ZlclZhbHVlKGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlc1tpbmRleF0pOwotICAgICAgICBq
aXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaCArIGluZGV4KTsKKyAgICB7CisgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8R1BSUmVnPiB1bmRlZmluZWRHUFI7CisgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzY3JhdGNoKSwgR1BSSW5mbzo6cmVnVDMpOwor
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkNvcHlTcG9vbGVyIHNwb29sZXIoaml0LCBDQ2FsbEhlbHBl
cnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDAs
IEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IGV4aXQubV9k
ZXNjcmlwdG9yLT5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07KSB7CisgICAgICAgICAgICBhdXRv
JiB2YWx1ZSA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlc1tpbmRleF07CisgICAgICAgICAg
ICBpZiAodmFsdWUuZGF0YUZvcm1hdCgpID09IERhdGFGb3JtYXRKUykgeworICAgICAgICAgICAg
ICAgIHN3aXRjaCAodmFsdWUua2luZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBFeGl0VmFs
dWVEZWFkOgorICAgICAgICAgICAgICAgICAgICBpZiAoIXVuZGVmaW5lZEdQUikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgdW5kZWZpbmVkR1BSID0gR1BSSW5mbzo6cmVnVDQ7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc3Bvb2xlci5jb3B5R1BSKHVuZGVmaW5l
ZEdQUi52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3Bvb2xlci5zdG9yZUdQUihpbmRl
eCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgIGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6IHsKKyAgICAgICAgICAg
ICAgICAgICAgRW5jb2RlZEpTVmFsdWUgY3VycmVudENvbnN0YW50ID0gSlNWYWx1ZTo6ZW5jb2Rl
KHZhbHVlLmNvbnN0YW50KCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbnN0
YW50ID09IGVuY29kZWRKU1VuZGVmaW5lZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXVuZGVmaW5lZEdQUikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmlu
ZWRHUFIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNwb29sZXIuY29weUdQUih1bmRlZmluZWRHUFIudmFsdWUoKSk7
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc3Bv
b2xlci5tb3ZlQ29uc3RhbnQoY3VycmVudENvbnN0YW50KTsKKyAgICAgICAgICAgICAgICAgICAg
c3Bvb2xlci5zdG9yZUdQUihpbmRleCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgorICAgICAgICAgICAgICAgICAgICBMb2NhdGlvbjo6
Zm9yVmFsdWVSZXAoZXhpdC5tX3ZhbHVlUmVwc1t2YWx1ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVu
dCgpXSkucmVzdG9yZUludG8oaml0LCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMywgaW5kZXggKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2Fz
ZSBFeGl0VmFsdWVJbkpTU3RhY2s6CisgICAgICAgICAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpT
U3RhY2tBc0ludDMyOgorICAgICAgICAgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJ
bnQ1MjoKKyAgICAgICAgICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgor
ICAgICAgICAgICAgICAgICAgICBzcG9vbGVyLmxvYWRHUFIodmFsdWUudmlydHVhbFJlZ2lzdGVy
KCkub2Zmc2V0KCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3Bvb2xlci5zdG9yZUdQUihpbmRleCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgRXhpdFZhbHVl
TWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKG1h
dGVyaWFsaXphdGlvblRvUG9pbnRlci5nZXQodmFsdWUub2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkp
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUklu
Zm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDMsIGluZGV4ICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVjb3ZlclZh
bHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QzLCBpbmRleCAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzcG9vbGVy
LmZpbmFsaXplR1BSKCk7CiAgICAgfQogICAgIAogICAgIC8vIEhlbmNlZm9ydGggd2UgbWFrZSBp
dCBsb29rIGxpa2UgdGhlIGV4aXRpbmcgZnVuY3Rpb24gd2FzIGNhbGxlZCB0aHJvdWdoIGEgcmVn
aXN0ZXIKQEAgLTM5MCwxMiArNDQ2LDE4IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2
bSwgdW5zaWduZWQgZXhpdElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0CiAgICAg
CiAgICAgLy8gQmVmb3JlIHdlIHN0YXJ0IG1lc3Npbmcgd2l0aCB0aGUgZnJhbWUsIHdlIG5lZWQg
dG8gc2V0IGFzaWRlIGFueSByZWdpc3RlcnMgdGhhdCB0aGUKICAgICAvLyBGVEwgY29kZSB3YXMg
cHJlc2VydmluZy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5zaXplKCk7IGktLTspIHsKLSAgICAgICAgUmVnaXN0ZXJB
dE9mZnNldCBlbnRyeSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5jYWxsZWVTYXZlUmVnaXN0ZXJz
KCktPmF0KGkpOwotICAgICAgICBqaXQubG9hZDY0KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBlbnRyeS5v
ZmZzZXQoKSksCi0gICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIGppdC5zdG9y
ZTY0KEdQUkluZm86OnJlZ1QwLCB1bndpbmRTY3JhdGNoICsgaSk7CisgICAgeworICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIHNyY0J1ZmZlckdQUiA9IEdQUkluZm86OnJlZ1QyOworICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIGRlc3RCdWZmZXJHUFIgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3Rlciwgc3JjQnVmZmVyR1BS
KTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHVud2luZFNj
cmF0Y2gpLCBkZXN0QnVmZmVyR1BSKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDb3B5U3Bvb2xl
ciBzcG9vbGVyKENDYWxsSGVscGVyczo6Q29weVNwb29sZXI6OkJ1ZmZlclJlZ3M6OkFsbG93TW9k
aWZpY2F0aW9uLCBqaXQsIHNyY0J1ZmZlckdQUiwgZGVzdEJ1ZmZlckdQUiwgR1BSSW5mbzo6cmVn
VDAsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2Nr
LT5qaXRDb2RlKCktPmNhbGxlZVNhdmVSZWdpc3RlcnMoKS0+c2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmNh
bGxlZVNhdmVSZWdpc3RlcnMoKS0+YXQoaSk7CisgICAgICAgICAgICBzcG9vbGVyLmxvYWRHUFIo
ZW50cnkub2Zmc2V0KCkpOworICAgICAgICAgICAgc3Bvb2xlci5zdG9yZUdQUihpICogc2l6ZW9m
KHVpbnQ2NF90KSk7CisgICAgICAgIH0KKyAgICAgICAgc3Bvb2xlci5maW5hbGl6ZUdQUigpOwog
ICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gaml0LmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKGV4aXQubV9jb2RlT3JpZ2luKTsKQEAgLTQxMSw0NSArNDczLDk5IEBA
IHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQgZXhpdElELCBKSVRDb2Rl
KiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBv
aW50ZXJSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAotICAgIFJlZ2lzdGVyU2V0IGFs
bEZUTENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmZ0bENhbGxlZVNhdmVSZWdpc3RlcnMoKTsK
LSAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYmFzZWxpbmVDYWxsZWVTYXZlcyA9IGJh
c2VsaW5lQ29kZUJsb2NrLT5qaXRDb2RlKCktPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKLQotICAg
IGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSBy
ZWcubmV4dCgpKSB7Ci0gICAgICAgIGlmICghYWxsRlRMQ2FsbGVlU2F2ZXMuZ2V0KHJlZykpIHsK
LSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgYWxsRlRM
Q2FsbGVlU2F2ZXMgPSBSZWdpc3RlclNldDo6ZnRsQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAg
ICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYmFzZWxpbmVDYWxsZWVTYXZlcyA9IGJh
c2VsaW5lQ29kZUJsb2NrLT5qaXRDb2RlKCktPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAg
ICAgYXV0byBpdGVyYXRlQ2FsbGVlU2F2ZXNJbXBsID0gWyZdKGF1dG8gY2hlY2ssIGF1dG8gZnVu
YykgeworICAgICAgICAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVn
OjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWFsbEZU
TENhbGxlZVNhdmVzLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWNoZWNrKHJlZykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHVud2luZEluZGV4ID0gY29kZUJsb2NrLT5q
aXRDb2RlKCktPmNhbGxlZVNhdmVSZWdpc3RlcnMoKS0+aW5kZXhPZihyZWcpOworICAgICAgICAg
ICAgICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPSBi
YXNlbGluZUNhbGxlZVNhdmVzLT5maW5kKHJlZyk7CisgICAgICAgICAgICAgICAgZnVuYyhyZWcs
IHVud2luZEluZGV4LCBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKworICAgICAgICBhdXRvIGl0ZXJhdGVHUFJDYWxsZWVTYXZlcyA9IFsmXShhdXRv
IGZ1bmMpIHsKKyAgICAgICAgICAgIGl0ZXJhdGVDYWxsZWVTYXZlc0ltcGwoW10oUmVnIHJlZykg
eyByZXR1cm4gcmVnLmlzR1BSKCk7IH0sIGZ1bmMpOworICAgICAgICB9OworCisgICAgICAgIGF1
dG8gaXRlcmF0ZUZQUkNhbGxlZVNhdmVzID0gWyZdKGF1dG8gZnVuYykgeworICAgICAgICAgICAg
aXRlcmF0ZUNhbGxlZVNhdmVzSW1wbChbXShSZWcgcmVnKSB7IHJldHVybiByZWcuaXNGUFIoKTsg
fSwgZnVuYyk7CisgICAgICAgIH07CisKKyAgICAgICAgeworICAgICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHJlZ2lzdGVyU2NyYXRjaCksIEdQUkluZm86OnJl
Z1QzKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBMb2FkIGZyb20gcmVnaXN0
ZXJTY3JhdGNoIGJ1ZmZlciB0byBjYWxsZWUtc2F2ZSByZWdpc3RlcnMuCisgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpMb2FkUmVnU3Bvb2xlciBzcG9vbGVyKGppdCwgR1BSSW5mbzo6cmVn
VDMpOworICAgICAgICAgICAgICAgIGl0ZXJhdGVHUFJDYWxsZWVTYXZlcyhbJl0oUmVnIHJlZywg
dW5zaWduZWQgdW53aW5kSW5kZXgsIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVn
aXN0ZXJPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVud2luZEluZGV4ID09IFVJ
TlRfTUFYICYmICFiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAg
ICAgc3Bvb2xlci5sb2FkR1BSKHsgcmVnLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldE9m
UmVnKHJlZykpLCB9KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBzcG9v
bGVyLmZpbmFsaXplR1BSKCk7CisgICAgICAgICAgICAgICAgaXRlcmF0ZUZQUkNhbGxlZVNhdmVz
KFsmXShSZWcgcmVnLCB1bnNpZ25lZCB1bndpbmRJbmRleCwgY29uc3QgUmVnaXN0ZXJBdE9mZnNl
dCogYmFzZWxpbmVSZWdpc3Rlck9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodW53
aW5kSW5kZXggPT0gVUlOVF9NQVggJiYgIWJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzcG9vbGVyLmxvYWRGUFIoeyByZWcsIHN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4ob2Zmc2V0T2ZSZWcocmVnKSksIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIHNwb29sZXIuZmluYWxpemVGUFIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAvLyBDb3B5IGZyb20gcmVnaXN0ZXJTY3JhdGNoIGJ1ZmZl
ciB0byBjYWxsIGZyYW1lLgorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q29weVNwb29s
ZXIgc3Bvb2xlcihqaXQsIEdQUkluZm86OnJlZ1QzLCBDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRl
clJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEZQUkluZm86OmZwUmVn
VDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgICAgIGl0ZXJhdGVHUFJDYWxsZWVT
YXZlcyhbJl0oUmVnIHJlZywgdW5zaWduZWQgdW53aW5kSW5kZXgsIGNvbnN0IFJlZ2lzdGVyQXRP
ZmZzZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHVud2luZEluZGV4ID09IFVJTlRfTUFYICYmIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNwb29sZXIubG9hZEdQUihvZmZzZXRPZlJlZyhyZWcpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNwb29sZXIuc3RvcmVHUFIoYmFzZWxpbmVSZWdpc3Rl
ck9mZnNldC0+b2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgc3Bvb2xlci5maW5hbGl6ZUdQUigpOworICAgICAgICAg
ICAgICAgIGl0ZXJhdGVGUFJDYWxsZWVTYXZlcyhbJl0oUmVnIHJlZywgdW5zaWduZWQgdW53aW5k
SW5kZXgsIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHVud2luZEluZGV4ID09IFVJTlRfTUFYICYmIGJhc2Vs
aW5lUmVnaXN0ZXJPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwb29sZXIubG9h
ZEZQUihvZmZzZXRPZlJlZyhyZWcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwb29sZXIu
c3RvcmVGUFIoYmFzZWxpbmVSZWdpc3Rlck9mZnNldC0+b2Zmc2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgc3Bvb2xlci5m
aW5hbGl6ZUZQUigpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHVuc2lnbmVk
IHVud2luZEluZGV4ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmNhbGxlZVNhdmVSZWdpc3RlcnMo
KS0+aW5kZXhPZihyZWcpOwotICAgICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0KiBiYXNlbGlu
ZVJlZ2lzdGVyT2Zmc2V0ID0gYmFzZWxpbmVDYWxsZWVTYXZlcy0+ZmluZChyZWcpOwotCi0gICAg
ICAgIGlmIChyZWcuaXNHUFIoKSkgewotICAgICAgICAgICAgR1BSUmVnIHJlZ1RvTG9hZCA9IGJh
c2VsaW5lUmVnaXN0ZXJPZmZzZXQgPyBHUFJJbmZvOjpyZWdUMCA6IHJlZy5ncHIoKTsKLQotICAg
ICAgICAgICAgaWYgKHVud2luZEluZGV4ID09IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhlIEZUTCBjb21waWxhdGlvbiBkaWRuJ3QgcHJlc2VydmUgdGhpcyByZWdpc3Rlci4gVGhp
cyBtZWFucyB0aGF0IGl0IGFsc28KLSAgICAgICAgICAgICAgICAvLyBkaWRuJ3QgdXNlIHRoZSBy
ZWdpc3Rlci4gU28gaXRzIHZhbHVlIGF0IHRoZSBiZWdpbm5pbmcgb2YgT1NSIGV4aXQgc2hvdWxk
IGJlCi0gICAgICAgICAgICAgICAgLy8gcHJlc2VydmVkIGJ5IHRoZSB0aHVuay4gTHVja2lseSwg
d2Ugc2F2ZWQgYWxsIHJlZ2lzdGVycyBpbnRvIHRoZSByZWdpc3RlcgotICAgICAgICAgICAgICAg
IC8vIHNjcmF0Y2ggYnVmZmVyLCBzbyB3ZSBjYW4gcmVzdG9yZSB0aGVtIGZyb20gdGhlcmUuCi0g
ICAgICAgICAgICAgICAgaml0LmxvYWQ2NChyZWdpc3RlclNjcmF0Y2ggKyBvZmZzZXRPZlJlZyhy
ZWcpLCByZWdUb0xvYWQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAv
LyBUaGUgRlRMIGNvbXBpbGF0aW9uIHByZXNlcnZlZCB0aGUgcmVnaXN0ZXIuIEl0cyBuZXcgdmFs
dWUgaXMgdGhlcmVmb3JlCi0gICAgICAgICAgICAgICAgLy8gaXJyZWxldmFudCwgYnV0IHdlIGNh
biBnZXQgdGhlIHZhbHVlIHRoYXQgd2FzIHByZXNlcnZlZCBieSB1c2luZyB0aGUgdW53aW5kCi0g
ICAgICAgICAgICAgICAgLy8gZGF0YS4gV2UndmUgYWxyZWFkeSBjb3BpZWQgYWxsIHVud2luZC1h
YmxlIHByZXNlcnZlZCByZWdpc3RlcnMgaW50byB0aGUgdW53aW5kCi0gICAgICAgICAgICAgICAg
Ly8gc2NyYXRjaCBidWZmZXIsIHNvIHdlIGNhbiBnZXQgaXQgZnJvbSB0aGVyZS4KLSAgICAgICAg
ICAgICAgICBqaXQubG9hZDY0KHVud2luZFNjcmF0Y2ggKyB1bndpbmRJbmRleCwgcmVnVG9Mb2Fk
KTsKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKChiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih1bndpbmRTY3JhdGNoKSAtIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHJlZ2lzdGVyU2NyYXRj
aCkpID09IHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkpOworICAgICAgICAgICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihyZXF1aXJlZFNjcmF0Y2hNZW1v
cnlTaXplSW5CeXRlcygpKSwgR1BSSW5mbzo6cmVnVDMpOyAvLyBDaGFuZ2UgcmVnaXN0ZXJTY3Jh
dGNoIHRvIHVud2luZFNjcmF0Y2guCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8g
TG9hZCBmcm9tIHVud2luZFNjcmF0Y2ggYnVmZmVyIHRvIGNhbGxlZS1zYXZlIHJlZ2lzdGVycy4K
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxvYWRSZWdTcG9vbGVyIHNwb29sZXIoaml0
LCBHUFJJbmZvOjpyZWdUMyk7CisgICAgICAgICAgICAgICAgaXRlcmF0ZUdQUkNhbGxlZVNhdmVz
KFsmXShSZWcgcmVnLCB1bnNpZ25lZCB1bndpbmRJbmRleCwgY29uc3QgUmVnaXN0ZXJBdE9mZnNl
dCogYmFzZWxpbmVSZWdpc3Rlck9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodW53
aW5kSW5kZXggIT0gVUlOVF9NQVggJiYgIWJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzcG9vbGVyLmxvYWRHUFIoeyByZWcsIHN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4odW53aW5kSW5kZXggKiBzaXplb2YodWludDY0X3QpKSwgfSk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgc3Bvb2xlci5maW5hbGl6ZUdQUigpOworICAgICAgICAg
ICAgICAgIGl0ZXJhdGVGUFJDYWxsZWVTYXZlcyhbJl0oUmVnIHJlZywgdW5zaWduZWQgdW53aW5k
SW5kZXgsIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHVud2luZEluZGV4ICE9IFVJTlRfTUFYICYmICFiYXNl
bGluZVJlZ2lzdGVyT2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgc3Bvb2xlci5sb2Fk
RlBSKHsgcmVnLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHVud2luZEluZGV4ICogc2l6ZW9mKHVp
bnQ2NF90KSksIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHNwb29s
ZXIuZmluYWxpemVGUFIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAvLyBDb3B5IGZyb20gdW53aW5kU2NyYXRjaCBidWZmZXIgdG8gY2FsbCBmcmFtZS4K
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNvcHlTcG9vbGVyIHNwb29sZXIoaml0LCBH
UFJJbmZvOjpyZWdUMywgQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgR1BSSW5m
bzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJl
Z1QxKTsKKyAgICAgICAgICAgICAgICBpdGVyYXRlR1BSQ2FsbGVlU2F2ZXMoWyZdKFJlZywgdW5z
aWduZWQgdW53aW5kSW5kZXgsIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVnaXN0
ZXJPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVud2luZEluZGV4ICE9IFVJTlRf
TUFYICYmIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNwb29sZXIubG9hZEdQUihzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHVud2luZEluZGV4ICogc2l6
ZW9mKHVpbnQ2NF90KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3Bvb2xlci5zdG9yZUdQ
UihiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0LT5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBzcG9vbGVyLmZpbmFsaXpl
R1BSKCk7CisgICAgICAgICAgICAgICAgaXRlcmF0ZUZQUkNhbGxlZVNhdmVzKFsmXShSZWcsIHVu
c2lnbmVkIHVud2luZEluZGV4LCBjb25zdCBSZWdpc3RlckF0T2Zmc2V0KiBiYXNlbGluZVJlZ2lz
dGVyT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh1bndpbmRJbmRleCAhPSBVSU5U
X01BWCAmJiBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzcG9vbGVyLmxvYWRGUFIoc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pih1bndpbmRJbmRleCAqIHNp
emVvZih1aW50NjRfdCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwb29sZXIuc3RvcmVG
UFIoYmFzZWxpbmVSZWdpc3Rlck9mZnNldC0+b2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgc3Bvb2xlci5maW5hbGl6
ZUZQUigpOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoYmFzZWxpbmVSZWdpc3Rl
ck9mZnNldCkKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChyZWdUb0xvYWQsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgYmFz
ZWxpbmVSZWdpc3Rlck9mZnNldC0+b2Zmc2V0KCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIEZQUlJlZyBmcFJlZ1RvTG9hZCA9IGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQgPyBGUFJJ
bmZvOjpmcFJlZ1QwIDogcmVnLmZwcigpOwotCi0gICAgICAgICAgICBpZiAodW53aW5kSW5kZXgg
PT0gVUlOVF9NQVgpCi0gICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIocmVnaXN0ZXJTY3JhdGNoICsgb2Zmc2V0T2ZSZWcocmVnKSksIGZw
UmVnVG9Mb2FkKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBqaXQubG9hZERv
dWJsZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih1bndpbmRTY3JhdGNoICsgdW53aW5k
SW5kZXgpLCBmcFJlZ1RvTG9hZCk7Ci0KLSAgICAgICAgICAgIGlmIChiYXNlbGluZVJlZ2lzdGVy
T2Zmc2V0KQotICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShmcFJlZ1RvTG9hZCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVy
LCBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0LT5vZmZzZXQoKSkpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC00NjUsMTcgKzU4MSwyNSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVu
c2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhpdAogCiAgICAgLy8g
Tm93IGdldCBzdGF0ZSBvdXQgb2YgdGhlIHNjcmF0Y2ggYnVmZmVyIGFuZCBwbGFjZSBpdCBiYWNr
IGludG8gdGhlIHN0YWNrLiBUaGUgdmFsdWVzIGFyZQogICAgIC8vIGFscmVhZHkgcmVib3hlZCBz
byB3ZSBqdXN0IG1vdmUgdGhlbS4KLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX2Rl
c2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAgICAgT3BlcmFuZCBv
cGVyYW5kID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpbmRl
eCk7Ci0KLSAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OworICAgIHsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBzcmNCdWZmZXJHUFIgPSBHUFJJbmZv
OjpyZWdUMjsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBkZXN0QnVmZmVyR1BSID0gR1BSSW5m
bzo6cmVnVDM7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihz
Y3JhdGNoKSwgc3JjQnVmZmVyR1BSKTsKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIGRlc3RCdWZmZXJHUFIpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNvcHlT
cG9vbGVyIHNwb29sZXIoQ0NhbGxIZWxwZXJzOjpDb3B5U3Bvb2xlcjo6QnVmZmVyUmVnczo6QWxs
b3dNb2RpZmljYXRpb24sIGppdCwgc3JjQnVmZmVyR1BSLCBkZXN0QnVmZmVyR1BSLCBHUFJJbmZv
OjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0g
ZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKKyAgICAgICAg
ICAgIE9wZXJhbmQgb3BlcmFuZCA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5k
Rm9ySW5kZXgoaW5kZXgpOworCisgICAgICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKSAm
JiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oYmFzZWxpbmVWaXJ0dWFsUmVn
aXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2Fz
dDxpbnQ+KGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBpbmRleCwg
R1BSSW5mbzo6cmVnVDApOwotICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAg
ICAgICAgICAgIHNwb29sZXIubG9hZEdQUihpbmRleCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
OworICAgICAgICAgICAgc3Bvb2xlci5zdG9yZUdQUihvcGVyYW5kLnZpcnR1YWxSZWdpc3Rlcigp
Lm9mZnNldCgpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIH0KKyAgICAgICAg
c3Bvb2xlci5maW5hbGl6ZUdQUigpOwogICAgIH0KICAgICAKICAgICBoYW5kbGVFeGl0Q291bnRz
KHZtLCBqaXQsIGV4aXQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455899</attachid>
            <date>2022-03-28 04:15:57 -0700</date>
            <delta_ts>2022-03-28 12:57:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-238444-20220328041556.patch</filename>
            <type>text/plain</type>
            <size>19333</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxOTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZTFhZWQ1NDFlYzA0NTAzM2E2ZGM3Y2RjZTNkZGRhYTEwYWU5NTM0Li4zODIyNWQ3M2JmMjhjZmYw
ZDRkMTQ2MzY5NjExOTg3MTI2OTliMTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMi0wMy0yOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFVzZSBzcG9vbGVycyBpbiBGVEwgT1NSIGV4aXQgdGh1bmsKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzODQ0NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGRlcGxveSBz
cG9vbGVycyBpbiBGVEwgT1NSIGV4aXQgdGh1bmsgdG8gcmVkdWNlIGdlbmVyYXRlZCBjb2RlIHNp
emUuCisgICAgICAgIFRoaXMgY2hhbmdlIHJlZHVjZXMgRlRMT1NSRXhpdCBjb2RlIHNpemUgaW4g
SmV0U3RyZWFtMiBieSAzNSUuCisKKyAgICAgICAgQmVmb3JlOgorICAgICAgICAgICAgRlRMT1NS
RXhpdDogODAzNTY0ICg3ODQuNzMwNDY5IEtCKSBjb3VudCAzNjMgYXZnIHNpemUgMjIxMworICAg
ICAgICBBZnRlcjoKKyAgICAgICAgICAgIEZUTE9TUkV4aXQ6IDUxNjQzMiAoNTA0LjMyODEyNSBL
QikgY291bnQgMzYyIGF2ZyBzaXplIDE0MjYKKworICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAgICAgICog
ZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0
dWIpOgorCiAyMDIyLTAzLTI3ICBMYXVybyBNb3VyYSAgPGxtb3VyYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIG5vbi11bmlmaWVkIGJ1aWxkZml4CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCBiMjQzYzY3NDc5NTBjZWZkNmI1MmQ4ZGU1M2E1
YWFlYTE0OGJiMGZjLi4wYWVkNzJkZmFjNzc1NWNlMmEyNmZjNTM2ODAzN2EyN2E3N2E0MWVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTQzMCwxMCArNDMw
LDExIEBAIHZvaWQgT1NSRXhpdDo6Y29tcGlsZUV4aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2
bSwgY29uc3QgT1NSRXhpdCYgZXhpdCwgY29uc3QKICAgICAgICAgICAgICAgICAvLyBXZSBhbHNv
IHVzZSB0aGUgbm90Q2VsbE1hc2tSZWdpc3RlciBhcyB0aGUgc2NyYXRjaCByZWdpc3RlciwgZm9y
IHRoZSBzYW1lIHJlYXNvbi4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogZmluZCBhIGxlc3Mg
Z3Jvc3Mgd2F5IG9mIGRvaW5nIHRoaXMsIG1heWJlIHRocm91Z2ggZGVsYXlpbmcgdGhlc2Ugb3Bl
cmF0aW9ucyB1bnRpbCB3ZSBhY3R1YWxseSBoYXZlIHNvbWUgc3BhcmUgcmVnaXN0ZXJzIGFyb3Vu
ZD8KICAgICAgICAgICAgICAgICBwcm9maWxlLmVtaXRSZXBvcnRWYWx1ZShqaXQsIEpTVmFsdWVS
ZWdzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSwgR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdp
c3RlciwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZv
OjpudW1iZXJUYWdSZWdpc3Rlcik7Ci0gICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgcHJvZmlsZS5lbWl0UmVwb3J0VmFsdWUoaml0LCBKU1Zh
bHVlUmVncyhleGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKSksIEdQUkluZm86Om5vdENlbGxNYXNr
UmVnaXN0ZXIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Ci0gICAgICAgICAgICBqaXQubW92ZShB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpOb3RDZWxsTWFzayksIEdQUklu
Zm86Om5vdENlbGxNYXNrUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok5vdENlbGxNYXNrKSwgR1BSSW5mbzo6
bm90Q2VsbE1hc2tSZWdpc3Rlcik7CisgICAgICAgICAgICB9CiAjZWxzZSAvLyBub3QgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3Mo
KSkgewogICAgICAgICAgICAgICAgIC8vIFNhdmUgYSByZWdpc3RlciBzbyB3ZSBjYW4gdXNlIGl0
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3Bw
CmluZGV4IGE4MjRmN2E1MTljZTQ1ZjRhNzQyNTU1OGUzNDRkMmYyN2Q0ZGQzY2MuLmUwNGI2ZWIw
YzhmNjU3ZTI4YzM3MGQ3NzA5NDEyZjJkNTU2MzkwZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAog
I2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzU3Bvb2xlcnMu
aCIKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDaGVja3BvaW50T1NS
RXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIgpA
QCAtMjQxLDggKzI0Miw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWdu
ZWQgZXhpdElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0CiAgICAgCiAgICAgLy8g
R2V0IHRoZSBjYWxsIGZyYW1lIGFuZCB0YWcgdGhpbmdpZXMuCiAgICAgLy8gUmVzdG9yZSB0aGUg
ZXhpdGluZyBmdW5jdGlvbidzIGNhbGxGcmFtZSB2YWx1ZSBpbnRvIGEgcmVnVDQKLSAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKLSAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok5vdENlbGxNYXNrKSwgR1BSSW5mbzo6bm90Q2VsbE1hc2tS
ZWdpc3Rlcik7CisgICAgaml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CiAg
ICAgCiAgICAgLy8gRG8gc29tZSB2YWx1ZSBwcm9maWxpbmcuCiAgICAgaWYgKGV4aXQubV9kZXNj
cmlwdG9yLT5tX3Byb2ZpbGVEYXRhRm9ybWF0ICE9IERhdGFGb3JtYXROb25lKSB7CkBAIC0zNzcs
OSArMzc3LDY1IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQgZXhp
dElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0CiAgICAgLy8gU2F2ZSBhbGwgc3Rh
dGUgZnJvbSB3aGVyZXZlciB0aGUgZXhpdCBkYXRhIHRlbGxzIHVzIGl0IHdhcywgaW50byB0aGUg
YXBwcm9wcmlhdGUgcGxhY2UgaW4KICAgICAvLyB0aGUgc2NyYXRjaCBidWZmZXIuIFRoaXMgYWxz
byBkb2VzIHRoZSByZWJveGluZy4KICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhp
dC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAgICAgcmVj
b3ZlclZhbHVlKGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlc1tpbmRleF0pOwotICAgICAgICBq
aXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaCArIGluZGV4KTsKKyAgICB7CisgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8R1BSUmVnPiB1bmRlZmluZWRHUFI7CisgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzY3JhdGNoKSwgR1BSSW5mbzo6cmVnVDMpOwor
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkNvcHlTcG9vbGVyIHNwb29sZXIoaml0LCBDQ2FsbEhlbHBl
cnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDAs
IEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IGV4aXQubV9k
ZXNjcmlwdG9yLT5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07KSB7CisgICAgICAgICAgICBhdXRv
JiB2YWx1ZSA9IGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlc1tpbmRleF07CisgICAgICAgICAg
ICBpZiAodmFsdWUuZGF0YUZvcm1hdCgpID09IERhdGFGb3JtYXRKUykgeworICAgICAgICAgICAg
ICAgIHN3aXRjaCAodmFsdWUua2luZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBFeGl0VmFs
dWVEZWFkOgorICAgICAgICAgICAgICAgICAgICBpZiAoIXVuZGVmaW5lZEdQUikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgdW5kZWZpbmVkR1BSID0gR1BSSW5mbzo6cmVnVDQ7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc3Bvb2xlci5jb3B5R1BSKHVuZGVmaW5l
ZEdQUi52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3Bvb2xlci5zdG9yZUdQUihpbmRl
eCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgIGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6IHsKKyAgICAgICAgICAg
ICAgICAgICAgRW5jb2RlZEpTVmFsdWUgY3VycmVudENvbnN0YW50ID0gSlNWYWx1ZTo6ZW5jb2Rl
KHZhbHVlLmNvbnN0YW50KCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbnN0
YW50ID09IGVuY29kZWRKU1VuZGVmaW5lZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXVuZGVmaW5lZEdQUikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmlu
ZWRHUFIgPSBHUFJJbmZvOjpyZWdUNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNwb29sZXIuY29weUdQUih1bmRlZmluZWRHUFIudmFsdWUoKSk7
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc3Bv
b2xlci5tb3ZlQ29uc3RhbnQoY3VycmVudENvbnN0YW50KTsKKyAgICAgICAgICAgICAgICAgICAg
c3Bvb2xlci5zdG9yZUdQUihpbmRleCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgorICAgICAgICAgICAgICAgICAgICBMb2NhdGlvbjo6
Zm9yVmFsdWVSZXAoZXhpdC5tX3ZhbHVlUmVwc1t2YWx1ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVu
dCgpXSkucmVzdG9yZUludG8oaml0LCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMywgaW5kZXggKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2Fz
ZSBFeGl0VmFsdWVJbkpTU3RhY2s6CisgICAgICAgICAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpT
U3RhY2tBc0ludDMyOgorICAgICAgICAgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJ
bnQ1MjoKKyAgICAgICAgICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgor
ICAgICAgICAgICAgICAgICAgICBzcG9vbGVyLmxvYWRHUFIodmFsdWUudmlydHVhbFJlZ2lzdGVy
KCkub2Zmc2V0KCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3Bvb2xlci5zdG9yZUdQUihpbmRleCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgRXhpdFZhbHVl
TWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKG1h
dGVyaWFsaXphdGlvblRvUG9pbnRlci5nZXQodmFsdWUub2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkp
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUklu
Zm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDMsIGluZGV4ICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVjb3ZlclZh
bHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QzLCBpbmRleCAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzcG9vbGVy
LmZpbmFsaXplR1BSKCk7CiAgICAgfQogICAgIAogICAgIC8vIEhlbmNlZm9ydGggd2UgbWFrZSBp
dCBsb29rIGxpa2UgdGhlIGV4aXRpbmcgZnVuY3Rpb24gd2FzIGNhbGxlZCB0aHJvdWdoIGEgcmVn
aXN0ZXIKQEAgLTM5MCwxMiArNDQ2LDE4IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2
bSwgdW5zaWduZWQgZXhpdElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0CiAgICAg
CiAgICAgLy8gQmVmb3JlIHdlIHN0YXJ0IG1lc3Npbmcgd2l0aCB0aGUgZnJhbWUsIHdlIG5lZWQg
dG8gc2V0IGFzaWRlIGFueSByZWdpc3RlcnMgdGhhdCB0aGUKICAgICAvLyBGVEwgY29kZSB3YXMg
cHJlc2VydmluZy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLT5zaXplKCk7IGktLTspIHsKLSAgICAgICAgUmVnaXN0ZXJB
dE9mZnNldCBlbnRyeSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5jYWxsZWVTYXZlUmVnaXN0ZXJz
KCktPmF0KGkpOwotICAgICAgICBqaXQubG9hZDY0KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBlbnRyeS5v
ZmZzZXQoKSksCi0gICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIGppdC5zdG9y
ZTY0KEdQUkluZm86OnJlZ1QwLCB1bndpbmRTY3JhdGNoICsgaSk7CisgICAgeworICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIHNyY0J1ZmZlckdQUiA9IEdQUkluZm86OnJlZ1QyOworICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIGRlc3RCdWZmZXJHUFIgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3Rlciwgc3JjQnVmZmVyR1BS
KTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHVud2luZFNj
cmF0Y2gpLCBkZXN0QnVmZmVyR1BSKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDb3B5U3Bvb2xl
ciBzcG9vbGVyKENDYWxsSGVscGVyczo6Q29weVNwb29sZXI6OkJ1ZmZlclJlZ3M6OkFsbG93TW9k
aWZpY2F0aW9uLCBqaXQsIHNyY0J1ZmZlckdQUiwgZGVzdEJ1ZmZlckdQUiwgR1BSSW5mbzo6cmVn
VDAsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2Nr
LT5qaXRDb2RlKCktPmNhbGxlZVNhdmVSZWdpc3RlcnMoKS0+c2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmNh
bGxlZVNhdmVSZWdpc3RlcnMoKS0+YXQoaSk7CisgICAgICAgICAgICBzcG9vbGVyLmxvYWRHUFIo
ZW50cnkub2Zmc2V0KCkpOworICAgICAgICAgICAgc3Bvb2xlci5zdG9yZUdQUihpICogc2l6ZW9m
KHVpbnQ2NF90KSk7CisgICAgICAgIH0KKyAgICAgICAgc3Bvb2xlci5maW5hbGl6ZUdQUigpOwog
ICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gaml0LmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKGV4aXQubV9jb2RlT3JpZ2luKTsKQEAgLTQxMSw0NSArNDczLDEwNyBA
QCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YihWTSYgdm0sIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29k
ZSogaml0Q29kZSwgT1NSRXhpdCYgZXhpdAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQ
b2ludGVyUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKLSAgICBSZWdpc3RlclNldCBh
bGxGVExDYWxsZWVTYXZlcyA9IFJlZ2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
Ci0gICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBi
YXNlbGluZUNvZGVCbG9jay0+aml0Q29kZSgpLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0KLSAg
ICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0g
cmVnLm5leHQoKSkgewotICAgICAgICBpZiAoIWFsbEZUTENhbGxlZVNhdmVzLmdldChyZWcpKSB7
Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICB7CisgICAgICAgIFJlZ2lzdGVyU2V0IGFsbEZU
TENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmZ0bENhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAg
ICAgICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGJhc2VsaW5lQ2FsbGVlU2F2ZXMgPSBi
YXNlbGluZUNvZGVCbG9jay0+aml0Q29kZSgpLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAg
ICAgIGF1dG8gaXRlcmF0ZUNhbGxlZVNhdmVzSW1wbCA9IFsmXShhdXRvIGNoZWNrLCBhdXRvIGZ1
bmMpIHsKKyAgICAgICAgICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJl
Zzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFhbGxG
VExDYWxsZWVTYXZlcy5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgaWYgKCFjaGVjayhyZWcpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCB1bndpbmRJbmRleCA9IGNvZGVCbG9jay0+
aml0Q29kZSgpLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCktPmluZGV4T2YocmVnKTsKKyAgICAgICAg
ICAgICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0KiBiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0ID0g
YmFzZWxpbmVDYWxsZWVTYXZlcy0+ZmluZChyZWcpOworICAgICAgICAgICAgICAgIGZ1bmMocmVn
LCB1bndpbmRJbmRleCwgYmFzZWxpbmVSZWdpc3Rlck9mZnNldCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisKKyAgICAgICAgYXV0byBpdGVyYXRlR1BSQ2FsbGVlU2F2ZXMgPSBbJl0oYXV0
byBmdW5jKSB7CisgICAgICAgICAgICBpdGVyYXRlQ2FsbGVlU2F2ZXNJbXBsKFtdKFJlZyByZWcp
IHsgcmV0dXJuIHJlZy5pc0dQUigpOyB9LCBmdW5jKTsKKyAgICAgICAgfTsKKworICAgICAgICBh
dXRvIGl0ZXJhdGVGUFJDYWxsZWVTYXZlcyA9IFsmXShhdXRvIGZ1bmMpIHsKKyAgICAgICAgICAg
IGl0ZXJhdGVDYWxsZWVTYXZlc0ltcGwoW10oUmVnIHJlZykgeyByZXR1cm4gcmVnLmlzRlBSKCk7
IH0sIGZ1bmMpOworICAgICAgICB9OworCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSBG
VEwgY29tcGlsYXRpb24gZGlkbid0IHByZXNlcnZlIHRoaXMgcmVnaXN0ZXIuIFRoaXMgbWVhbnMg
dGhhdCBpdCBhbHNvCisgICAgICAgICAgICAvLyBkaWRuJ3QgdXNlIHRoZSByZWdpc3Rlci4gU28g
aXRzIHZhbHVlIGF0IHRoZSBiZWdpbm5pbmcgb2YgT1NSIGV4aXQgc2hvdWxkIGJlCisgICAgICAg
ICAgICAvLyBwcmVzZXJ2ZWQgYnkgdGhlIHRodW5rLiBMdWNraWx5LCB3ZSBzYXZlZCBhbGwgcmVn
aXN0ZXJzIGludG8gdGhlIHJlZ2lzdGVyCisgICAgICAgICAgICAvLyBzY3JhdGNoIGJ1ZmZlciwg
c28gd2UgY2FuIHJlc3RvcmUgdGhlbSBmcm9tIHRoZXJlLgorICAgICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHJlZ2lzdGVyU2NyYXRjaCksIEdQUkluZm86OnJl
Z1QzKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBMb2FkIGZyb20gcmVnaXN0
ZXJTY3JhdGNoIGJ1ZmZlciB0byBjYWxsZWUtc2F2ZSByZWdpc3RlcnMuCisgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpMb2FkUmVnU3Bvb2xlciBzcG9vbGVyKGppdCwgR1BSSW5mbzo6cmVn
VDMpOworICAgICAgICAgICAgICAgIGl0ZXJhdGVHUFJDYWxsZWVTYXZlcyhbJl0oUmVnIHJlZywg
dW5zaWduZWQgdW53aW5kSW5kZXgsIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVn
aXN0ZXJPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVud2luZEluZGV4ID09IFVJ
TlRfTUFYICYmICFiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAg
ICAgc3Bvb2xlci5sb2FkR1BSKHsgcmVnLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldE9m
UmVnKHJlZykpLCB9KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBzcG9v
bGVyLmZpbmFsaXplR1BSKCk7CisgICAgICAgICAgICAgICAgaXRlcmF0ZUZQUkNhbGxlZVNhdmVz
KFsmXShSZWcgcmVnLCB1bnNpZ25lZCB1bndpbmRJbmRleCwgY29uc3QgUmVnaXN0ZXJBdE9mZnNl
dCogYmFzZWxpbmVSZWdpc3Rlck9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodW53
aW5kSW5kZXggPT0gVUlOVF9NQVggJiYgIWJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzcG9vbGVyLmxvYWRGUFIoeyByZWcsIHN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4ob2Zmc2V0T2ZSZWcocmVnKSksIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIHNwb29sZXIuZmluYWxpemVGUFIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAvLyBDb3B5IGZyb20gcmVnaXN0ZXJTY3JhdGNoIGJ1ZmZl
ciB0byBjYWxsIGZyYW1lLgorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q29weVNwb29s
ZXIgc3Bvb2xlcihqaXQsIEdQUkluZm86OnJlZ1QzLCBDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRl
clJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEZQUkluZm86OmZwUmVn
VDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgICAgIGl0ZXJhdGVHUFJDYWxsZWVT
YXZlcyhbJl0oUmVnIHJlZywgdW5zaWduZWQgdW53aW5kSW5kZXgsIGNvbnN0IFJlZ2lzdGVyQXRP
ZmZzZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHVud2luZEluZGV4ID09IFVJTlRfTUFYICYmIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNwb29sZXIubG9hZEdQUihvZmZzZXRPZlJlZyhyZWcpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNwb29sZXIuc3RvcmVHUFIoYmFzZWxpbmVSZWdpc3Rl
ck9mZnNldC0+b2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgc3Bvb2xlci5maW5hbGl6ZUdQUigpOworICAgICAgICAg
ICAgICAgIGl0ZXJhdGVGUFJDYWxsZWVTYXZlcyhbJl0oUmVnIHJlZywgdW5zaWduZWQgdW53aW5k
SW5kZXgsIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHVud2luZEluZGV4ID09IFVJTlRfTUFYICYmIGJhc2Vs
aW5lUmVnaXN0ZXJPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwb29sZXIubG9h
ZEZQUihvZmZzZXRPZlJlZyhyZWcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwb29sZXIu
c3RvcmVGUFIoYmFzZWxpbmVSZWdpc3Rlck9mZnNldC0+b2Zmc2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgc3Bvb2xlci5m
aW5hbGl6ZUZQUigpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHVuc2lnbmVk
IHVud2luZEluZGV4ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmNhbGxlZVNhdmVSZWdpc3RlcnMo
KS0+aW5kZXhPZihyZWcpOwotICAgICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0KiBiYXNlbGlu
ZVJlZ2lzdGVyT2Zmc2V0ID0gYmFzZWxpbmVDYWxsZWVTYXZlcy0+ZmluZChyZWcpOwotCi0gICAg
ICAgIGlmIChyZWcuaXNHUFIoKSkgewotICAgICAgICAgICAgR1BSUmVnIHJlZ1RvTG9hZCA9IGJh
c2VsaW5lUmVnaXN0ZXJPZmZzZXQgPyBHUFJJbmZvOjpyZWdUMCA6IHJlZy5ncHIoKTsKLQotICAg
ICAgICAgICAgaWYgKHVud2luZEluZGV4ID09IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhlIEZUTCBjb21waWxhdGlvbiBkaWRuJ3QgcHJlc2VydmUgdGhpcyByZWdpc3Rlci4gVGhp
cyBtZWFucyB0aGF0IGl0IGFsc28KLSAgICAgICAgICAgICAgICAvLyBkaWRuJ3QgdXNlIHRoZSBy
ZWdpc3Rlci4gU28gaXRzIHZhbHVlIGF0IHRoZSBiZWdpbm5pbmcgb2YgT1NSIGV4aXQgc2hvdWxk
IGJlCi0gICAgICAgICAgICAgICAgLy8gcHJlc2VydmVkIGJ5IHRoZSB0aHVuay4gTHVja2lseSwg
d2Ugc2F2ZWQgYWxsIHJlZ2lzdGVycyBpbnRvIHRoZSByZWdpc3RlcgotICAgICAgICAgICAgICAg
IC8vIHNjcmF0Y2ggYnVmZmVyLCBzbyB3ZSBjYW4gcmVzdG9yZSB0aGVtIGZyb20gdGhlcmUuCi0g
ICAgICAgICAgICAgICAgaml0LmxvYWQ2NChyZWdpc3RlclNjcmF0Y2ggKyBvZmZzZXRPZlJlZyhy
ZWcpLCByZWdUb0xvYWQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAv
LyBUaGUgRlRMIGNvbXBpbGF0aW9uIHByZXNlcnZlZCB0aGUgcmVnaXN0ZXIuIEl0cyBuZXcgdmFs
dWUgaXMgdGhlcmVmb3JlCi0gICAgICAgICAgICAgICAgLy8gaXJyZWxldmFudCwgYnV0IHdlIGNh
biBnZXQgdGhlIHZhbHVlIHRoYXQgd2FzIHByZXNlcnZlZCBieSB1c2luZyB0aGUgdW53aW5kCi0g
ICAgICAgICAgICAgICAgLy8gZGF0YS4gV2UndmUgYWxyZWFkeSBjb3BpZWQgYWxsIHVud2luZC1h
YmxlIHByZXNlcnZlZCByZWdpc3RlcnMgaW50byB0aGUgdW53aW5kCi0gICAgICAgICAgICAgICAg
Ly8gc2NyYXRjaCBidWZmZXIsIHNvIHdlIGNhbiBnZXQgaXQgZnJvbSB0aGVyZS4KLSAgICAgICAg
ICAgICAgICBqaXQubG9hZDY0KHVud2luZFNjcmF0Y2ggKyB1bndpbmRJbmRleCwgcmVnVG9Mb2Fk
KTsKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIEZUTCBjb21waWxhdGlvbiBwcmVzZXJ2
ZWQgdGhlIHJlZ2lzdGVyLiBJdHMgbmV3IHZhbHVlIGlzIHRoZXJlZm9yZQorICAgICAgICAgICAg
Ly8gaXJyZWxldmFudCwgYnV0IHdlIGNhbiBnZXQgdGhlIHZhbHVlIHRoYXQgd2FzIHByZXNlcnZl
ZCBieSB1c2luZyB0aGUgdW53aW5kCisgICAgICAgICAgICAvLyBkYXRhLiBXZSd2ZSBhbHJlYWR5
IGNvcGllZCBhbGwgdW53aW5kLWFibGUgcHJlc2VydmVkIHJlZ2lzdGVycyBpbnRvIHRoZSB1bndp
bmQKKyAgICAgICAgICAgIC8vIHNjcmF0Y2ggYnVmZmVyLCBzbyB3ZSBjYW4gZ2V0IGl0IGZyb20g
dGhlcmUuCisgICAgICAgICAgICBBU1NFUlQoKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVud2lu
ZFNjcmF0Y2gpIC0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocmVnaXN0ZXJTY3JhdGNoKSkgPT0g
cmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSk7CisgICAgICAgICAgICBqaXQuYWRk
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJ
bkJ5dGVzKCkpLCBHUFJJbmZvOjpyZWdUMyk7IC8vIENoYW5nZSByZWdpc3RlclNjcmF0Y2ggdG8g
dW53aW5kU2NyYXRjaC4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBMb2FkIGZy
b20gdW53aW5kU2NyYXRjaCBidWZmZXIgdG8gY2FsbGVlLXNhdmUgcmVnaXN0ZXJzLgorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6TG9hZFJlZ1Nwb29sZXIgc3Bvb2xlcihqaXQsIEdQUklu
Zm86OnJlZ1QzKTsKKyAgICAgICAgICAgICAgICBpdGVyYXRlR1BSQ2FsbGVlU2F2ZXMoWyZdKFJl
ZyByZWcsIHVuc2lnbmVkIHVud2luZEluZGV4LCBjb25zdCBSZWdpc3RlckF0T2Zmc2V0KiBiYXNl
bGluZVJlZ2lzdGVyT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh1bndpbmRJbmRl
eCAhPSBVSU5UX01BWCAmJiAhYmFzZWxpbmVSZWdpc3Rlck9mZnNldCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNwb29sZXIubG9hZEdQUih7IHJlZywgc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pih1
bndpbmRJbmRleCAqIHNpemVvZih1aW50NjRfdCkpLCB9KTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICBzcG9vbGVyLmZpbmFsaXplR1BSKCk7CisgICAgICAgICAgICAgICAg
aXRlcmF0ZUZQUkNhbGxlZVNhdmVzKFsmXShSZWcgcmVnLCB1bnNpZ25lZCB1bndpbmRJbmRleCwg
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldCogYmFzZWxpbmVSZWdpc3Rlck9mZnNldCkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAodW53aW5kSW5kZXggIT0gVUlOVF9NQVggJiYgIWJhc2VsaW5lUmVn
aXN0ZXJPZmZzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBzcG9vbGVyLmxvYWRGUFIoeyBy
ZWcsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4odW53aW5kSW5kZXggKiBzaXplb2YodWludDY0X3Qp
KSwgfSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgc3Bvb2xlci5maW5h
bGl6ZUZQUigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IC8vIENvcHkgZnJvbSB1bndpbmRTY3JhdGNoIGJ1ZmZlciB0byBjYWxsIGZyYW1lLgorICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q29weVNwb29sZXIgc3Bvb2xlcihqaXQsIEdQUkluZm86
OnJlZ1QzLCBDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdU
MCwgR1BSSW5mbzo6cmVnVDEsIEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOwor
ICAgICAgICAgICAgICAgIGl0ZXJhdGVHUFJDYWxsZWVTYXZlcyhbJl0oUmVnLCB1bnNpZ25lZCB1
bndpbmRJbmRleCwgY29uc3QgUmVnaXN0ZXJBdE9mZnNldCogYmFzZWxpbmVSZWdpc3Rlck9mZnNl
dCkgeworICAgICAgICAgICAgICAgICAgICBpZiAodW53aW5kSW5kZXggIT0gVUlOVF9NQVggJiYg
YmFzZWxpbmVSZWdpc3Rlck9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3Bvb2xl
ci5sb2FkR1BSKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4odW53aW5kSW5kZXggKiBzaXplb2YodWlu
dDY0X3QpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzcG9vbGVyLnN0b3JlR1BSKGJhc2Vs
aW5lUmVnaXN0ZXJPZmZzZXQtPm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHNwb29sZXIuZmluYWxpemVHUFIoKTsK
KyAgICAgICAgICAgICAgICBpdGVyYXRlRlBSQ2FsbGVlU2F2ZXMoWyZdKFJlZywgdW5zaWduZWQg
dW53aW5kSW5kZXgsIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQqIGJhc2VsaW5lUmVnaXN0ZXJPZmZz
ZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVud2luZEluZGV4ICE9IFVJTlRfTUFYICYm
IGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwb29s
ZXIubG9hZEZQUihzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHVud2luZEluZGV4ICogc2l6ZW9mKHVp
bnQ2NF90KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3Bvb2xlci5zdG9yZUZQUihiYXNl
bGluZVJlZ2lzdGVyT2Zmc2V0LT5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBzcG9vbGVyLmZpbmFsaXplRlBSKCk7
CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChiYXNlbGluZVJlZ2lzdGVyT2Zmc2V0
KQotICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHJlZ1RvTG9hZCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBiYXNlbGluZVJl
Z2lzdGVyT2Zmc2V0LT5vZmZzZXQoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
RlBSUmVnIGZwUmVnVG9Mb2FkID0gYmFzZWxpbmVSZWdpc3Rlck9mZnNldCA/IEZQUkluZm86OmZw
UmVnVDAgOiByZWcuZnByKCk7Ci0KLSAgICAgICAgICAgIGlmICh1bndpbmRJbmRleCA9PSBVSU5U
X01BWCkKLSAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihyZWdpc3RlclNjcmF0Y2ggKyBvZmZzZXRPZlJlZyhyZWcpKSwgZnBSZWdUb0xv
YWQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHVud2luZFNjcmF0Y2ggKyB1bndpbmRJbmRleCks
IGZwUmVnVG9Mb2FkKTsKLQotICAgICAgICAgICAgaWYgKGJhc2VsaW5lUmVnaXN0ZXJPZmZzZXQp
Ci0gICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKGZwUmVnVG9Mb2FkLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGJhc2Vs
aW5lUmVnaXN0ZXJPZmZzZXQtPm9mZnNldCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ2
NSwxNyArNTg5LDI1IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKFZNJiB2bSwgdW5zaWduZWQg
ZXhpdElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0CiAKICAgICAvLyBOb3cgZ2V0
IHN0YXRlIG91dCBvZiB0aGUgc2NyYXRjaCBidWZmZXIgYW5kIHBsYWNlIGl0IGJhY2sgaW50byB0
aGUgc3RhY2suIFRoZSB2YWx1ZXMgYXJlCiAgICAgLy8gYWxyZWFkeSByZWJveGVkIHNvIHdlIGp1
c3QgbW92ZSB0aGVtLgotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1fZGVzY3JpcHRv
ci0+bV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykgewotICAgICAgICBPcGVyYW5kIG9wZXJhbmQg
PSBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKLQot
ICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQotICAgICAgICAgICAgY29udGludWU7CisgICAg
eworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNyY0J1ZmZlckdQUiA9IEdQUkluZm86OnJlZ1Qy
OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGRlc3RCdWZmZXJHUFIgPSBHUFJJbmZvOjpyZWdU
MzsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2gp
LCBzcmNCdWZmZXJHUFIpOworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgZGVzdEJ1ZmZlckdQUik7CisgICAgICAgIENDYWxsSGVscGVyczo6Q29weVNwb29sZXIg
c3Bvb2xlcihDQ2FsbEhlbHBlcnM6OkNvcHlTcG9vbGVyOjpCdWZmZXJSZWdzOjpBbGxvd01vZGlm
aWNhdGlvbiwgaml0LCBzcmNCdWZmZXJHUFIsIGRlc3RCdWZmZXJHUFIsIEdQUkluZm86OnJlZ1Qw
LCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1f
ZGVzY3JpcHRvci0+bV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykgeworICAgICAgICAgICAgT3Bl
cmFuZCBvcGVyYW5kID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRl
eChpbmRleCk7CisKKyAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIG9wZXJh
bmQudG9Mb2NhbCgpIDwgc3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZVZpcnR1YWxSZWdpc3RlcnNG
b3JDYWxsZWVTYXZlcykpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChv
cGVyYW5kLmlzTG9jYWwoKSAmJiBvcGVyYW5kLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4o
YmFzZWxpbmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGppdC5sb2FkNjQoc2NyYXRjaCArIGluZGV4LCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAgICAgICAg
ICAgc3Bvb2xlci5sb2FkR1BSKGluZGV4ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAg
ICAgICAgICBzcG9vbGVyLnN0b3JlR1BSKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0
KCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAgfQorICAgICAgICBzcG9vbGVy
LmZpbmFsaXplR1BSKCk7CiAgICAgfQogICAgIAogICAgIGhhbmRsZUV4aXRDb3VudHModm0sIGpp
dCwgZXhpdCk7Cg==
</data>
<flag name="review"
          id="484020"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
    <flag name="commit-queue"
          id="484048"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>