<?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>151080</bug_id>
          
          <creation_ts>2015-11-09 23:52:25 -0800</creation_ts>
          <short_desc>sub IC does not properly handle exception handling now that try/catch is compiled in the FTL</short_desc>
          <delta_ts>2015-11-13 13:36:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1140701</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-09 23:52:25 -0800</bug_when>
    <thetext>Should be an easy fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140994</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-10 16:55:00 -0800</bug_when>
    <thetext>I&apos;m doing a bit of cleanup as part of this patch too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141000</commentid>
    <comment_count>2</comment_count>
      <attachid>265250</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-10 17:07:19 -0800</bug_when>
    <thetext>Created attachment 265250
WIP

I think this might be the patch.
Need to write some sub tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141018</commentid>
    <comment_count>3</comment_count>
      <attachid>265256</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-10 18:04:35 -0800</bug_when>
    <thetext>Created attachment 265256
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141019</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-10 18:06:04 -0800</bug_when>
    <thetext>Attachment 265256 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLOSRExit.cpp:49:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141031</commentid>
    <comment_count>5</comment_count>
      <attachid>265256</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-10 19:15:29 -0800</bug_when>
    <thetext>Comment on attachment 265256
patch

What about Add, and/or other snippets?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141106</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-11 07:31:12 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 265256 [details]
&gt; patch
&gt; 
&gt; What about Add, and/or other snippets?

They&apos;ll need the same treatment once they&apos;re introduced in the FTL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141883</commentid>
    <comment_count>7</comment_count>
      <attachid>265256</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-13 10:57:02 -0800</bug_when>
    <thetext>Comment on attachment 265256
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141910</commentid>
    <comment_count>8</comment_count>
      <attachid>265490</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-13 12:48:27 -0800</bug_when>
    <thetext>Created attachment 265490
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141912</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-13 12:53:59 -0800</bug_when>
    <thetext>Attachment 265490 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLOSRExit.cpp:49:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141930</commentid>
    <comment_count>10</comment_count>
      <attachid>265490</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-13 13:36:20 -0800</bug_when>
    <thetext>Comment on attachment 265490
patch for landing.

Clearing flags on attachment: 265490

Committed r192439: &lt;http://trac.webkit.org/changeset/192439&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141931</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-13 13:36:24 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265250</attachid>
            <date>2015-11-10 17:07:19 -0800</date>
            <delta_ts>2015-11-10 18:04:35 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>32901</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24g
MTkyMjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTg0LDIyICs1ODQsMTUgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25C
YXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBPU1JFeGl0JiBl
eGl0ID0gc3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7Ci0gICAgICAgICAgICBpZiAoZXhp
dERlc2NyaXB0b3IubV93aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQgfHwgZXhp
dERlc2NyaXB0b3IubV9pc0V4Y2VwdGlvbkZyb21MYXp5U2xvd1BhdGgpIHsKKyAgICAgICAgICAg
IGlmIChleGl0RGVzY3JpcHRvci53aWxsQXJyaXZlQXRFeGl0RnJvbUluZGlyZWN0RXhjZXB0aW9u
Q2hlY2soKSkgewogICAgICAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBp
dGVyLT52YWx1ZVtqXS5yZWNvcmQ7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhp
dC5tX2Rlc2NyaXB0b3IubV9zZW1hbnRpY0NvZGVPcmlnaW5Gb3JDYWxsRnJhbWVIZWFkZXIuaXNT
ZXQoKSk7CiAgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gc3Rh
dGUuaml0Q29kZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoZXhpdC5tX2Rlc2NyaXB0
b3IubV9zZW1hbnRpY0NvZGVPcmlnaW5Gb3JDYWxsRnJhbWVIZWFkZXIpOwogICAgICAgICAgICAg
ICAgIGV4aXQubV9leGNlcHRpb25IYW5kbGVyQ2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlSW5kZXg7
CiAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuYWRkTmV3RXhpdChpdGVy
LT52YWx1ZVtqXS5pbmRleCwgc3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCkgLSAxKTsKIAot
ICAgICAgICAgICAgICAgIGlmIChleGl0RGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uRnJvbUpTQ2Fs
bCkKKyAgICAgICAgICAgICAgICBpZiAoZXhpdERlc2NyaXB0b3IubV9leGNlcHRpb25UeXBlID09
IEV4Y2VwdGlvblR5cGU6OkpTQ2FsbCkKICAgICAgICAgICAgICAgICAgICAgZXhpdC5nYXRoZXJS
ZWdpc3RlcnNUb1NwaWxsRm9yQ2FsbElmRXhjZXB0aW9uKHN0YWNrbWFwcywgcmVjb3JkKTsKLSAg
ICAgICAgICAgICAgICBpZiAoZXhpdERlc2NyaXB0b3IubV9pc0V4Y2VwdGlvbkZyb21HZXRCeUlk
KSB7Ci0gICAgICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWNvcmQubG9jYXRpb25z
WzBdLmRpcmVjdEdQUigpOwotICAgICAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlY29y
ZC5sb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
aGFzIGFuIGludGVyZXN0aW5nIHN0b3J5LCBzZWUgY29tbWVudCBiZWxvdyBkZXNjcmliaW5nIGl0
LgotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IGJhc2UpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBleGl0LnJlZ2lzdGVyc1RvUHJlc2VydmVGb3JDYWxsVGhhdE1pZ2h0VGhyb3cu
c2V0KGJhc2UpOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KQEAgLTYyOSw3ICs2MjIsNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25T
dGFja01hcHMoCiAgICAgICAgICAgICBpbmZvLm1fdGh1bmtBZGRyZXNzID0gbGlua0J1ZmZlci0+
bG9jYXRpb25PZihpbmZvLm1fdGh1bmtMYWJlbCk7CiAgICAgICAgICAgICBleGl0Lm1fcGF0Y2hh
YmxlQ29kZU9mZnNldCA9IGxpbmtCdWZmZXItPm9mZnNldE9mKGluZm8ubV90aHVua0p1bXApOwog
Ci0gICAgICAgICAgICBpZiAoZXhpdC5tX2Rlc2NyaXB0b3IubV93aWxsQXJyaXZlQXRPU1JFeGl0
RnJvbUdlbmVyaWNVbndpbmQpIHsKKyAgICAgICAgICAgIGlmIChleGl0Lm1fZGVzY3JpcHRvci5t
aWdodEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKCkpIHsKICAgICAgICAgICAgICAg
ICBIYW5kbGVySW5mbyBuZXdIYW5kbGVyID0gZXhpdC5tX2Rlc2NyaXB0b3IubV9iYXNlbGluZUV4
Y2VwdGlvbkhhbmRsZXI7CiAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5zdGFydCA9IGV4aXQu
bV9leGNlcHRpb25IYW5kbGVyQ2FsbFNpdGVJbmRleC5iaXRzKCk7CiAgICAgICAgICAgICAgICAg
bmV3SGFuZGxlci5lbmQgPSBleGl0Lm1fZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXguYml0
cygpICsgMTsKQEAgLTY2Miw3ICs2NTUsNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2Vk
T25TdGFja01hcHMoCiAKICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0LCBDb2RlTG9jYXRpb25MYWJlbD4+IGV4Y2VwdGlvbkp1bXBzVG9MaW5rOwogICAgICAg
ICBhdXRvIGFkZE5ld0V4Y2VwdGlvbkp1bXBJZk5lY2Vzc2FyeSA9IFsmXSAodWludDMyX3QgcmVj
b3JkSW5kZXgpIHsKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdl
dCA9IGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmdldE9yUHV0QnlJZENhbGxPcGVyYXRpb25FeGNl
cHRpb25UYXJnZXQocmVjb3JkSW5kZXgpOworICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwg
ZXhjZXB0aW9uVGFyZ2V0ID0gZXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY2FsbE9wZXJhdGlvbkV4
Y2VwdGlvblRhcmdldChyZWNvcmRJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWV4Y2VwdGlvblRh
cmdldCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBleGNlcHRp
b25KdW1wc1RvTGluay5hcHBlbmQoCkBAIC03MDcsOCArNzAwLDEwIEBAIHN0YXRpYyB2b2lkIGZp
eEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0
ZXIgdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIGRvIHZhbHVlIHJlY292ZXJ5IG9uLiBXZSBjb21iYXQg
dGhpcyBzaXR1YXRpb24gZnJvbSBldmVyCiAgICAgICAgICAgICAgICAgICAgIC8vIHRha2luZyBw
bGFjZSBieSBlbnN1cmluZyB3ZSBzcGlsbCB0aGUgb3JpZ2luYWwgYmFzZSB2YWx1ZSBhbmQgdGhl
biByZWNvdmVyIGl0IGZyb20KICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHNwaWxsIHNsb3Qg
YXMgdGhlIGZpcnN0IHN0ZXAgaW4gT1NSIGV4aXQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChP
U1JFeGl0KiBleGl0ID0gZXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuZ2V0QnlJZE9TUkV4aXQoaXRl
ci0+dmFsdWVbaV0uaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoT1NSRXhpdCogZXhp
dCA9IGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmdldEJ5SWRPU1JFeGl0KGl0ZXItPnZhbHVlW2ld
LmluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhpdC0+cmVnaXN0ZXJzVG9QcmVz
ZXJ2ZUZvckNhbGxUaGF0TWlnaHRUaHJvdy5zZXQoYmFzZSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBleGl0LT5zcGlsbFJlZ2lzdGVyc1RvU3BpbGxTbG90KHNsb3dQYXRoSklULCBqc0NhbGxU
aGF0TWlnaHRUaHJvd1NwaWxsT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMs
IHNsb3dQYXRoSklULCBjb2RlT3JpZ2luLCBhZGRlZFVuaXF1ZUV4Y2VwdGlvbkp1bXAgPyAmZXhj
ZXB0aW9uSnVtcHNUb0xpbmsubGFzdCgpLmZpcnN0IDogJmV4Y2VwdGlvblRhcmdldCwKQEAgLTgy
Miw4ICs4MTcsMTcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAog
ICAgICAgICAgICAgICAgIEdQUlJlZyByaWdodCA9IHJlY29yZC5sb2NhdGlvbnNbMl0uZGlyZWN0
R1BSKCk7CiAKICAgICAgICAgICAgICAgICBhcml0aFN1Yi5tX3Nsb3dQYXRoU3RhcnRzLmFwcGVu
ZChzbG93UGF0aEpJVC5sYWJlbCgpKTsKKyAgICAgICAgICAgICAgICBib29sIGFkZGVkVW5pcXVl
RXhjZXB0aW9uSnVtcCA9IGFkZE5ld0V4Y2VwdGlvbkp1bXBJZk5lY2Vzc2FyeShpdGVyLT52YWx1
ZVtpXS5pbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBsZWZ0IHx8IHJlc3Vs
dCA9PSByaWdodCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHNpdHVhdGlvbiBoYXMg
YSByZWFsbHkgaW50ZXJlc3RpbmcgcmVnaXN0ZXIgcHJlc2VydmF0aW9uIHN0b3J5LgorICAgICAg
ICAgICAgICAgICAgICAvLyBTZWUgY29tbWVudCBhYm92ZSBmb3IgR2V0QnlJZHMuCisgICAgICAg
ICAgICAgICAgICAgIGlmIChPU1JFeGl0KiBleGl0ID0gZXhjZXB0aW9uSGFuZGxlck1hbmFnZXIu
c3ViT1NSRXhpdChpdGVyLT52YWx1ZVtpXS5pbmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGV4aXQtPnJlZ2lzdGVyc1RvUHJlc2VydmVGb3JDYWxsVGhhdE1pZ2h0VGhyb3cuc2V0KHJl
c3VsdCk7IC8vIFdlIHdhbnQgdG8gcmVjb3ZlciB0aGUgb3JpZ2luYWwgbGVmdCBvciByaWdodC4K
KyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQtPnNwaWxsUmVnaXN0ZXJzVG9TcGlsbFNsb3Qo
c2xvd1BhdGhKSVQsIGpzQ2FsbFRoYXRNaWdodFRocm93U3BpbGxPZmZzZXQpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1BhdGhKSVQsIGNvZGVPcmlnaW4sICZl
eGNlcHRpb25UYXJnZXQsCisgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihzdGF0ZSwgdXNl
ZFJlZ2lzdGVycywgc2xvd1BhdGhKSVQsIGNvZGVPcmlnaW4sIGFkZGVkVW5pcXVlRXhjZXB0aW9u
SnVtcCA/ICZleGNlcHRpb25KdW1wc1RvTGluay5sYXN0KCkuZmlyc3QgOiAmZXhjZXB0aW9uVGFy
Z2V0LAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25WYWx1ZVN1YiwgcmVzdWx0LCBsZWZ0
LCByaWdodCkuY2FsbCgpOwogCiAgICAgICAgICAgICAgICAgYXJpdGhTdWIubV9zbG93UGF0aERv
bmUuYXBwZW5kKHNsb3dQYXRoSklULmp1bXAoKSk7CkBAIC05OTcsNyArMTAwMSw3IEBAIHN0YXRp
YyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgT1NSRXhpdCYgZXhp
dCA9IGppdENvZGUtPm9zckV4aXRbZXhpdEluZGV4XTsKICAgICAgICAgVmVjdG9yPGNvbnN0IHZv
aWQqPiBjb2RlQWRkcmVzc2VzOwogCi0gICAgICAgIGlmIChleGl0Lm1fZGVzY3JpcHRvci5tX3dp
bGxBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJpY1Vud2luZCB8fCBleGl0Lm1fZGVzY3JpcHRvci5t
X2lzRXhjZXB0aW9uRnJvbUxhenlTbG93UGF0aCkgLy8gVGhpcyBpcyByZWFjaGVkIGJ5IGEganVt
cCBmcm9tIGdlbmVyaWNVbndpbmQgb3IgYSBqdW1wIGZyb20gYSBsYXp5IHNsb3cgcGF0aC4KKyAg
ICAgICAgaWYgKGV4aXQubV9kZXNjcmlwdG9yLndpbGxBcnJpdmVBdEV4aXRGcm9tSW5kaXJlY3RF
eGNlcHRpb25DaGVjaygpKSAvLyBUaGlzIGlzbid0IG1vZGVsZWQgaW4gTExWTSBJUi4KICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJl
Y29yZCA9IGppdENvZGUtPnN0YWNrbWFwcy5yZWNvcmRzW2V4aXQubV9zdGFja21hcFJlY29yZElu
ZGV4XTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uSGFuZGxl
ck1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
RXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3BwCShyZXZpc2lvbiAxOTIyNzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsMjAgKzQxLDIwIEBAIHZvaWQgRXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6
OmFkZE5ld0V4aXQKIHsKICAgICBtX21hcC5hZGQoc3RhY2ttYXBSZWNvcmRJbmRleCwgb3NyRXhp
dEluZGV4KTsKICAgICBPU1JFeGl0JiBleGl0ID0gbV9zdGF0ZS5qaXRDb2RlLT5vc3JFeGl0W29z
ckV4aXRJbmRleF07Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhpdC5tX2Rlc2NyaXB0b3IubV93aWxs
QXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQgfHwgZXhpdC5tX2Rlc2NyaXB0b3IubV9p
c0V4Y2VwdGlvbkZyb21MYXp5U2xvd1BhdGgpOworICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQubV9k
ZXNjcmlwdG9yLndpbGxBcnJpdmVBdEV4aXRGcm9tSW5kaXJlY3RFeGNlcHRpb25DaGVjaygpKTsK
IH0KIAotQ29kZUxvY2F0aW9uTGFiZWwgRXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OmdldE9yUHV0
QnlJZENhbGxPcGVyYXRpb25FeGNlcHRpb25UYXJnZXQodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJ
bmRleCkKK0NvZGVMb2NhdGlvbkxhYmVsIEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpjYWxsT3Bl
cmF0aW9uRXhjZXB0aW9uVGFyZ2V0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgpCiB7CiAg
ICAgYXV0byBmaW5kUmVzdWx0ID0gbV9tYXAuZmluZChzdGFja21hcFJlY29yZEluZGV4KTsKICAg
ICBpZiAoZmluZFJlc3VsdCA9PSBtX21hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIENvZGVMb2Nh
dGlvbkxhYmVsKCk7CiAKICAgICBzaXplX3Qgb3NyRXhpdEluZGV4ID0gZmluZFJlc3VsdC0+dmFs
dWU7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZS5qaXRDb2RlLT5vc3JFeGl0W29zckV4aXRJ
bmRleF0ubV9kZXNjcmlwdG9yLm1fd2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5k
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlLmppdENvZGUtPm9zckV4aXRbb3NyRXhpdElu
ZGV4XS5tX2Rlc2NyaXB0b3IubWlnaHRBcnJpdmVBdE9TUkV4aXRGcm9tQ2FsbE9wZXJhdGlvbigp
KTsKICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9zdGF0ZS5maW5hbGl6ZXIt
Pm9zckV4aXRbb3NyRXhpdEluZGV4XTsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmZvLm1fZ2V0QW5k
UHV0QnlJZENhbGxPcGVyYXRpb25FeGNlcHRpb25PU1JFeGl0RW50cmFuY2UuaXNTZXQoKSk7Ci0g
ICAgcmV0dXJuIG1fc3RhdGUuZmluYWxpemVyLT5leGl0VGh1bmtzTGlua0J1ZmZlci0+bG9jYXRp
b25PZihpbmZvLm1fZ2V0QW5kUHV0QnlJZENhbGxPcGVyYXRpb25FeGNlcHRpb25PU1JFeGl0RW50
cmFuY2UpOworICAgIFJFTEVBU0VfQVNTRVJUKGluZm8ubV9jYWxsT3BlcmF0aW9uRXhjZXB0aW9u
T1NSRXhpdEVudHJhbmNlLmlzU2V0KCkpOworICAgIHJldHVybiBtX3N0YXRlLmZpbmFsaXplci0+
ZXhpdFRodW5rc0xpbmtCdWZmZXItPmxvY2F0aW9uT2YoaW5mby5tX2NhbGxPcGVyYXRpb25FeGNl
cHRpb25PU1JFeGl0RW50cmFuY2UpOwogfQogCiBDb2RlTG9jYXRpb25MYWJlbCBFeGNlcHRpb25I
YW5kbGVyTWFuYWdlcjo6bGF6eVNsb3dQYXRoRXhjZXB0aW9uVGFyZ2V0KHVpbnQzMl90IHN0YWNr
bWFwUmVjb3JkSW5kZXgpCkBAIC02NCw3ICs2NCw3IEBAIENvZGVMb2NhdGlvbkxhYmVsIEV4Y2Vw
dGlvbkhhbmRsZXJNYW5hZ2UKICAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKCk7CiAK
ICAgICBzaXplX3Qgb3NyRXhpdEluZGV4ID0gZmluZFJlc3VsdC0+dmFsdWU7Ci0gICAgUkVMRUFT
RV9BU1NFUlQobV9zdGF0ZS5qaXRDb2RlLT5vc3JFeGl0W29zckV4aXRJbmRleF0ubV9kZXNjcmlw
dG9yLm1faXNFeGNlcHRpb25Gcm9tTGF6eVNsb3dQYXRoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCht
X3N0YXRlLmppdENvZGUtPm9zckV4aXRbb3NyRXhpdEluZGV4XS5tX2Rlc2NyaXB0b3IubV9leGNl
cHRpb25UeXBlID09IEV4Y2VwdGlvblR5cGU6OkxhenlTbG93UGF0aCk7CiAgICAgT1NSRXhpdENv
bXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fc3RhdGUuZmluYWxpemVyLT5vc3JFeGl0W29zckV4aXRJ
bmRleF07CiAgICAgUkVMRUFTRV9BU1NFUlQoaW5mby5tX3RodW5rTGFiZWwuaXNTZXQoKSk7CiAg
ICAgcmV0dXJuIG1fc3RhdGUuZmluYWxpemVyLT5leGl0VGh1bmtzTGlua0J1ZmZlci0+bG9jYXRp
b25PZihpbmZvLm1fdGh1bmtMYWJlbCk7CkBAIC03Nyw3ICs3NywxOCBAQCBPU1JFeGl0KiBFeGNl
cHRpb25IYW5kbGVyTWFuYWdlcjo6Z2V0QnlJCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IHNpemVfdCBvc3JFeGl0SW5kZXggPSBmaW5kUmVzdWx0LT52YWx1ZTsKICAgICBPU1JFeGl0KiBl
eGl0ID0gJm1fc3RhdGUuaml0Q29kZS0+b3NyRXhpdFtvc3JFeGl0SW5kZXhdOwotICAgIFJFTEVB
U0VfQVNTRVJUKGV4aXQtPm1fZGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uRnJvbUdldEJ5SWQpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQtPm1fZGVzY3JpcHRvci5tX2V4Y2VwdGlvblR5cGUgPT0g
RXhjZXB0aW9uVHlwZTo6R2V0QnlJZCk7CisgICAgcmV0dXJuIGV4aXQ7IAorfQorCitPU1JFeGl0
KiBFeGNlcHRpb25IYW5kbGVyTWFuYWdlcjo6c3ViT1NSRXhpdCh1aW50MzJfdCBzdGFja21hcFJl
Y29yZEluZGV4KQoreworICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQoc3RhY2ttYXBS
ZWNvcmRJbmRleCk7CisgICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIHNpemVfdCBvc3JFeGl0SW5kZXggPSBmaW5kUmVzdWx0LT52
YWx1ZTsKKyAgICBPU1JFeGl0KiBleGl0ID0gJm1fc3RhdGUuaml0Q29kZS0+b3NyRXhpdFtvc3JF
eGl0SW5kZXhdOworICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQtPm1fZGVzY3JpcHRvci5tX2V4Y2Vw
dGlvblR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6U3ViR2VuZXJhdG9yKTsKICAgICByZXR1cm4gZXhp
dDsgCiB9CiAKQEAgLTg4LDcgKzk5LDcgQEAgT1NSRXhpdCogRXhjZXB0aW9uSGFuZGxlck1hbmFn
ZXI6OmdldENhbAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBzaXplX3Qgb3NyRXhpdElu
ZGV4ID0gZmluZFJlc3VsdC0+dmFsdWU7CiAgICAgT1NSRXhpdCogZXhpdCA9ICZtX3N0YXRlLmpp
dENvZGUtPm9zckV4aXRbb3NyRXhpdEluZGV4XTsKLSAgICBSRUxFQVNFX0FTU0VSVChleGl0LT5t
X2Rlc2NyaXB0b3IubV9pc0V4Y2VwdGlvbkZyb21KU0NhbGwpOworICAgIFJFTEVBU0VfQVNTRVJU
KGV4aXQtPm1fZGVzY3JpcHRvci5tX2V4Y2VwdGlvblR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6SlND
YWxsKTsKICAgICByZXR1cm4gZXhpdDsgCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmgJKHJldmlzaW9u
IDE5MjI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uSGFuZGxl
ck1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTAgKzU3LDExIEBAIHB1YmxpYzoKIAog
ICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBvbmx5IG1ha2Ugc2Vuc2UgdG8gYmUgY2FsbGVkIGFmdGVy
IHdlJ3ZlIGdlbmVyYXRlZCB0aGUgT1NSCiAgICAgLy8gZXhpdCB0aHVua3MgYW5kIGFsbG9jYXRl
ZCB0aGUgT1NSIGV4aXQgdGh1bmtzJyBsaW5rIGJ1ZmZlci4KLSAgICBDb2RlTG9jYXRpb25MYWJl
bCBnZXRPclB1dEJ5SWRDYWxsT3BlcmF0aW9uRXhjZXB0aW9uVGFyZ2V0KHVpbnQzMl90IHN0YWNr
bWFwUmVjb3JkSW5kZXgpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxPcGVyYXRpb25FeGNl
cHRpb25UYXJnZXQodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCk7CiAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgbGF6eVNsb3dQYXRoRXhjZXB0aW9uVGFyZ2V0KHVpbnQzMl90IHN0YWNrbWFwUmVj
b3JkSW5kZXgpOwogCiAgICAgT1NSRXhpdCogZ2V0QnlJZE9TUkV4aXQodWludDMyX3Qgc3RhY2tt
YXBSZWNvcmRJbmRleCk7CisgICAgT1NSRXhpdCogc3ViT1NSRXhpdCh1aW50MzJfdCBzdGFja21h
cFJlY29yZEluZGV4KTsKICAgICBPU1JFeGl0KiBnZXRDYWxsT1NSRXhpdCh1aW50MzJfdCBzdGFj
a21hcFJlY29yZEluZGV4LCBjb25zdCBKU0NhbGwmKTsKICAgICBPU1JFeGl0KiBnZXRDYWxsT1NS
RXhpdCh1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4LCBjb25zdCBKU1RhaWxDYWxsJik7CiAg
ICAgT1NSRXhpdCogZ2V0Q2FsbE9TUkV4aXQodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCwg
Y29uc3QgSlNDYWxsVmFyYXJncyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTkyMjc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MywyMyArNTMsMjYgQEAgdm9pZCBFeGl0VGh1bmtHZW5lcmF0b3I6OmVt
aXRUaHVuayh1bnNpZwogICAgIAogICAgIGluZm8ubV90aHVua0xhYmVsID0gbGFiZWwoKTsKIAot
ICAgIGlmIChleGl0Lm1fZGVzY3JpcHRvci5tX3dpbGxBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJp
Y1Vud2luZCkgeworICAgIEp1bXAganVtcFRvUHVzaEluZGV4RnJvbUdlbmVyaWNVbndpbmQ7Cisg
ICAgaWYgKGV4aXQubV9kZXNjcmlwdG9yLm1pZ2h0QXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNV
bndpbmQoKSkgewogICAgICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1DYWxsZWVTYXZlc0J1
ZmZlcigpOwogICAgICAgICBsb2FkUHRyKHZtKCktPmFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNo
KCksIGZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigt
IHN0YXRpY19jYXN0PGludDY0X3Q+KG1fc3RhdGUuaml0Q29kZS0+c3RhY2ttYXBzLnN0YWNrU2l6
ZUZvckxvY2FscygpKSksIAogICAgICAgICAgICAgZnJhbWVQb2ludGVyUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKIAotICAgICAgICBpZiAoZXhpdC5tX2Rlc2NyaXB0b3IubV9pc0V4
Y2VwdGlvbkZyb21KU0NhbGwpCisgICAgICAgIGlmIChleGl0Lm1fZGVzY3JpcHRvci5tX2V4Y2Vw
dGlvblR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6SlNDYWxsKQogICAgICAgICAgICAgZXhpdC5yZWNv
dmVyUmVnaXN0ZXJzRnJvbVNwaWxsU2xvdCgqdGhpcywgb3NyRXhpdEZyb21HZW5lcmljVW53aW5k
U3RhY2tTcGlsbFNsb3QpOwogCi0gICAgICAgIEp1bXAgc2tpcEdldEFuZFB1dEJ5SWRTbG93UGF0
aEVudHJhbmNlID0ganVtcCgpOworICAgICAgICBqdW1wVG9QdXNoSW5kZXhGcm9tR2VuZXJpY1Vu
d2luZCA9IGp1bXAoKTsKKyAgICB9CiAKLSAgICAgICAgaW5mby5tX2dldEFuZFB1dEJ5SWRDYWxs
T3BlcmF0aW9uRXhjZXB0aW9uT1NSRXhpdEVudHJhbmNlID0gbGFiZWwoKTsKLSAgICAgICAgaWYg
KGV4aXQubV9kZXNjcmlwdG9yLm1faXNFeGNlcHRpb25Gcm9tR2V0QnlJZCkKLSAgICAgICAgICAg
IGV4aXQucmVjb3ZlclJlZ2lzdGVyc0Zyb21TcGlsbFNsb3QoKnRoaXMsIG9zckV4aXRGcm9tR2Vu
ZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKLSAgICAgICAgCi0gICAgICAgIHNraXBHZXRBbmRQ
dXRCeUlkU2xvd1BhdGhFbnRyYW5jZS5saW5rKHRoaXMpOworICAgIGlmIChleGl0Lm1fZGVzY3Jp
cHRvci5taWdodEFycml2ZUF0T1NSRXhpdEZyb21DYWxsT3BlcmF0aW9uKCkpIHsKKyAgICAgICAg
aW5mby5tX2NhbGxPcGVyYXRpb25FeGNlcHRpb25PU1JFeGl0RW50cmFuY2UgPSBsYWJlbCgpOwor
ICAgICAgICBleGl0LnJlY292ZXJSZWdpc3RlcnNGcm9tU3BpbGxTbG90KCp0aGlzLCBvc3JFeGl0
RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xvdCk7CiAgICAgfQorICAgIAorICAgIGlmIChl
eGl0Lm1fZGVzY3JpcHRvci5taWdodEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKCkp
CisgICAgICAgIGp1bXBUb1B1c2hJbmRleEZyb21HZW5lcmljVW53aW5kLmxpbmsodGhpcyk7CiAK
ICAgICBwdXNoVG9TYXZlSW1tZWRpYXRlV2l0aG91dFRvdWNoaW5nUmVnaXN0ZXJzKFRydXN0ZWRJ
bW0zMihpbmRleCkpOwogICAgIGluZm8ubV90aHVua0p1bXAgPSBwYXRjaGFibGVKdW1wKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkocmV2aXNpb24gMTkyMjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCwxNyArMjA4LDE5IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhOdW1iZXJPZkNhdGNoU3BpbGxzID0g
c3RkOjptYXgobWF4TnVtYmVyT2ZDYXRjaFNwaWxscywgbV9ncmFwaC5sb2NhbHNMaXZlSW5CeXRl
Y29kZShvcENhdGNoT3JpZ2luKS5iaXRDb3VudCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
QXJpdGhTdWI6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZDoKICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIG1heSBoYXZlIHRvIGZsdXNoIG9uZSB0aGluZyBmb3IgR2V0QnlJZHMgd2hlbiB0aGUgYmFz
ZSBhbmQgcmVzdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhcmUgYXNzaWduZWQgdGhl
IHNhbWUgcmVnaXN0ZXIuIEZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSBvdmVydmlldywgbG9vawot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgdGhlIGNvbW1lbnQgaW4gRlRMQ29tcGlsZS5j
cHAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG1heSBoYXZlIHRvIGZsdXNoIG9uZSB0
aGluZyBmb3IgR2V0QnlJZHMvQXJpdGhTdWJzIHdoZW4gdGhlIGJhc2UgYW5kIHJlc3VsdCBvciB0
aGUgbGVmdC9yaWdodCBhbmQgdGhlIHJlc3VsdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
YXJlIGFzc2lnbmVkIHRoZSBzYW1lIHJlZ2lzdGVyLiBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUg
b3ZlcnZpZXcsIGxvb2sgYXQgdGhlIGNvbW1lbnQgaW4gRlRMQ29tcGlsZS5jcHAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEFyaXRoU3ViICYmIG5vZGUtPmJpbmFy
eVVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOyAvLyBXZSBvbmx5IGNvbXBpbGUgcGF0Y2hwb2ludHMgZm9yIEFyaXRoU3ViIFVudHlwZWRV
c2UuCiAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIG9wQ2F0Y2hPcmlnaW47CiAg
ICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyogZXhjZXB0aW9uSGFuZGxlcjsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd2lsbENhdGNoRXhjZXB0aW9uID0gbV9ncmFwaC53
aWxsQ2F0Y2hFeGNlcHRpb25Jbk1hY2hpbmVGcmFtZShub2RlLT5vcmlnaW4uZm9yRXhpdCwgb3BD
YXRjaE9yaWdpbiwgZXhjZXB0aW9uSGFuZGxlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAod2lsbENhdGNoRXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBudW1iZXJPZkdldEJ5SWRTcGlsbHMgPSAxOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1heE51bWJlck9mQ2F0Y2hTcGlsbHMgPSBzdGQ6Om1heChtYXhOdW1i
ZXJPZkNhdGNoU3BpbGxzLCBudW1iZXJPZkdldEJ5SWRTcGlsbHMpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbnVtYmVyT2ZHZXRCeUlkT3JTdWJTcGls
bHMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE51bWJlck9mQ2F0Y2hTcGls
bHMgPSBzdGQ6Om1heChtYXhOdW1iZXJPZkNhdGNoU3BpbGxzLCBudW1iZXJPZkdldEJ5SWRPclN1
YlNwaWxscyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTU0MywxMCArMTU0NSwxNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMigpKTsKIAogICAgICAgICAgICAgLy8gQXJndW1lbnRzOiBpZCwgYnl0ZXMsIHRhcmdl
dCwgbnVtQXJncywgYXJncy4uLgotICAgICAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxs
KAotICAgICAgICAgICAgICAgIG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLAotICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50
MzIoc2l6ZU9mQXJpdGhTdWIoKSksCi0gICAgICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJl
ZjgpLCBtX291dC5jb25zdEludDMyKDIpLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBTdGFj
a21hcEFyZ3VtZW50TGlzdCBhcmd1bWVudHM7CisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5k
KG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCkpOworICAgICAgICAgICAgYXJndW1lbnRzLmFw
cGVuZChtX291dC5jb25zdEludDMyKHNpemVPZkFyaXRoU3ViKCkpKTsKKyAgICAgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQoY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKKyAgICAgICAgICAgIGFyZ3Vt
ZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMigyKSk7CisgICAgICAgICAgICBhcmd1bWVudHMu
YXBwZW5kKGxlZnQpOworICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChyaWdodCk7CisKKyAg
ICAgICAgICAgIGFwcGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hF
eGNlcHRpb24oYXJndW1lbnRzLCBFeGNlcHRpb25UeXBlOjpTdWJHZW5lcmF0b3IsIDMpOyAvLyBs
ZWZ0LCByaWdodCwgYW5kIHJlc3VsdCBzaG93IHVwIGluIHRoZSBzdGFja21hcCBsb2NhdGlvbnMu
CisKKyAgICAgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbChtX291dC5wYXRjaHBvaW50
SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKICAgICAgICAgICAgIHNldEluc3RydWN0aW9u
Q2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsKIAogICAgICAgICAg
ICAgbV9mdGxTdGF0ZS5hcml0aFN1YnMuYXBwZW5kKEFyaXRoU3ViRGVzY3JpcHRvcihzdGFja21h
cElELCBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYywKQEAgLTIzNjUsNyArMjM3NCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoYmFzZSk7IAogICAgICAgICBhcmd1bWVudHMu
YXBwZW5kKHZhbHVlKTsKIAotICAgICAgICBhcHBlbmRPU1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hw
b2ludElmV2lsbENhdGNoRXhjZXB0aW9uKGFyZ3VtZW50cywgTExWTUFueVJlZ0NhbGxDb252LCAy
KTsgLy8gMiBhcmd1bWVudHMgc2hvdyB1cCBpbiB0aGUgc3RhY2ttYXAgbG9jYXRpb25zOiB0aGUg
YmFzZSBhbmQgdGhlIHZhbHVlLgorICAgICAgICBhcHBlbmRPU1JFeGl0QXJndW1lbnRzRm9yUGF0
Y2hwb2ludElmV2lsbENhdGNoRXhjZXB0aW9uKGFyZ3VtZW50cywgRXhjZXB0aW9uVHlwZTo6UHV0
QnlJZCwgMik7IC8vIDIgYXJndW1lbnRzIHNob3cgdXAgaW4gdGhlIHN0YWNrbWFwIGxvY2F0aW9u
czogdGhlIGJhc2UgYW5kIHRoZSB2YWx1ZS4KIAogICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAs
IG1fb3V0LmNvbnN0SW50MzIoMikpOyAKICAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBjb25z
dE51bGwobV9vdXQucmVmOCkpOyAKQEAgLTQ1ODksNyArNDU5OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYWRkaW5nOyArK2kpCiAgICAgICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0KSk7CiAKLSAgICAgICAgYXBwZW5k
T1NSRXhpdEFyZ3VtZW50c0ZvclBhdGNocG9pbnRJZldpbGxDYXRjaEV4Y2VwdGlvbihhcmd1bWVu
dHMsIExMVk1XZWJLaXRKU0NhbGxDb252LCAwKTsgLy8gTm8gY2FsbCBhcmd1bWVudHMgc2hvdyB1
cCBpbiB0aGUgc3RhY2ttYXAgbG9jYXRpb25zLgorICAgICAgICBhcHBlbmRPU1JFeGl0QXJndW1l
bnRzRm9yUGF0Y2hwb2ludElmV2lsbENhdGNoRXhjZXB0aW9uKGFyZ3VtZW50cywgRXhjZXB0aW9u
VHlwZTo6SlNDYWxsLCAwKTsgLy8gTm8gY2FsbCBhcmd1bWVudHMgc2hvdyB1cCBpbiB0aGUgc3Rh
Y2ttYXAgbG9jYXRpb25zLgogCiAgICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29u
c3RJbnQzMigxICsgYWxpZ25lZEZyYW1lU2l6ZSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENT
aXplKSk7CiAgICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgY29uc3ROdWxsKG1fb3V0LnJlZjgp
KTsKQEAgLTQ2NzIsNyArNDY4MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVCh0aGlzQXJn
KTsKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh0aGlzQXJnKTsKIAotICAgICAgICBhcHBlbmRP
U1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hwb2ludElmV2lsbENhdGNoRXhjZXB0aW9uKGFyZ3VtZW50
cywgTExWTUNDYWxsQ29udiwgMCk7IC8vIE5vIGNhbGwgYXJndW1lbnRzIHNob3cgdXAgaW4gc3Rh
Y2ttYXAgbG9jYXRpb25zLgorICAgICAgICBhcHBlbmRPU1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hw
b2ludElmV2lsbENhdGNoRXhjZXB0aW9uKGFyZ3VtZW50cywgRXhjZXB0aW9uVHlwZTo6SlNDYWxs
LCAwKTsgLy8gTm8gY2FsbCBhcmd1bWVudHMgc2hvdyB1cCBpbiBzdGFja21hcCBsb2NhdGlvbnMu
CiAKICAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5jb25zdEludDMyKDIgKyAhIWpz
QXJndW1lbnRzKSk7CiAgICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgY29uc3ROdWxsKG1fb3V0
LnJlZjgpKTsKQEAgLTUwNTQsMTEgKzUwNjMsOCBAQCBwcml2YXRlOgogCiAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX29yaWdpbi5leGl0T0spOwogICAgICAgICAKLSAgICAg
ICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuYXBwZW5kKE9TUkV4aXRE
ZXNjcmlwdG9yKAotICAgICAgICAgICAgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIERhdGFGb3Jt
YXROb25lLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCksCi0gICAgICAgICAgICBtX29y
aWdpbi5mb3JFeGl0LCBtX29yaWdpbi5zZW1hbnRpYywKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICBhdmFpbGFi
aWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7CisKKyAgICAgICAgYXBwZW5k
T1NSRXhpdERlc2NyaXB0b3IoVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIEV4Y2VwdGlvblR5cGU6
Ok5vbmUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwogICAgICAgICAKICAgICAgICAg
T1NSRXhpdERlc2NyaXB0b3ImIGV4aXREZXNjcmlwdG9yID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5v
c3JFeGl0RGVzY3JpcHRvcnMubGFzdCgpOwogICAgICAgICAKQEAgLTYyNDEsNyArNjI0Nyw3IEBA
IHByaXZhdGU6CiAgICAgICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0IGFyZ3VtZW50czsKICAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZChiYXNlKTsKIAotICAgICAgICBhcHBlbmRPU1JFeGl0QXJndW1l
bnRzRm9yUGF0Y2hwb2ludElmV2lsbENhdGNoRXhjZXB0aW9uKGFyZ3VtZW50cywgTExWTUFueVJl
Z0NhbGxDb252LCAyLCBmYWxzZSwgdHJ1ZSk7IC8vIDIgYXJndW1lbnRzIHNob3cgdXAgaW4gdGhl
IHN0YWNrbWFwIGxvY2F0aW9uczogdGhlIHJlc3VsdCBhbmQgdGhlIGJhc2UuCisgICAgICAgIGFw
cGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oYXJn
dW1lbnRzLCBFeGNlcHRpb25UeXBlOjpHZXRCeUlkLCAyKTsgLy8gMiBhcmd1bWVudHMgc2hvdyB1
cCBpbiB0aGUgc3RhY2ttYXAgbG9jYXRpb25zOiB0aGUgcmVzdWx0IGFuZCB0aGUgYmFzZS4KIAog
ICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoMSkpOyAKICAgICAg
ICAgYXJndW1lbnRzLmluc2VydCgwLCBjb25zdE51bGwobV9vdXQucmVmOCkpOwpAQCAtNzU5Niw3
ICs3NjAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25z
dEludDMyKHVzZXJBcmd1bWVudHMuc2l6ZSgpKSk7CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmRW
ZWN0b3IodXNlckFyZ3VtZW50cyk7CiAKLSAgICAgICAgYXBwZW5kT1NSRXhpdEFyZ3VtZW50c0Zv
clBhdGNocG9pbnRJZldpbGxDYXRjaEV4Y2VwdGlvbihhcmd1bWVudHMsIExMVk1BbnlSZWdDYWxs
Q29udiwgdXNlckFyZ3VtZW50cy5zaXplKCkgKyAxLCB0cnVlKTsgLy8gQWxsIHRoZSBhcmd1bWVu
dHMgcGx1cyB0aGUgcmVzdWx0IHNob3cgdXAgaW4gdGhlIHN0YWNrbWFwIGxvY2F0aW9ucy4KKyAg
ICAgICAgYXBwZW5kT1NSRXhpdEFyZ3VtZW50c0ZvclBhdGNocG9pbnRJZldpbGxDYXRjaEV4Y2Vw
dGlvbihhcmd1bWVudHMsIEV4Y2VwdGlvblR5cGU6OkxhenlTbG93UGF0aCwgdXNlckFyZ3VtZW50
cy5zaXplKCkgKyAxKTsgLy8gQWxsIHRoZSBhcmd1bWVudHMgcGx1cyB0aGUgcmVzdWx0IHNob3cg
dXAgaW4gdGhlIHN0YWNrbWFwIGxvY2F0aW9ucy4KIAogICAgICAgICBMVmFsdWUgY2FsbCA9IG1f
b3V0LmNhbGwobV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksIGFyZ3VtZW50cyk7CiAg
ICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0Nh
bGxDb252KTsKQEAgLTg4NDUsNyArODg1MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbik7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmRPU1JFeGl0QXJn
dW1lbnRzRm9yUGF0Y2hwb2ludElmV2lsbENhdGNoRXhjZXB0aW9uKFN0YWNrbWFwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIExDYWxsQ29udiBjYWxsaW5nQ29udmVudGlvbiwgdW5zaWduZWQgb2Zm
c2V0T2ZFeGl0QXJndW1lbnRzLCBib29sIGlzTGF6eVNsb3dQYXRoID0gZmFsc2UsIGJvb2wgaXNH
ZXRCeWRJZCA9IGZhbHNlKQorICAgIHZvaWQgYXBwZW5kT1NSRXhpdEFyZ3VtZW50c0ZvclBhdGNo
cG9pbnRJZldpbGxDYXRjaEV4Y2VwdGlvbihTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBFeGNlcHRpb25UeXBlIGV4Y2VwdGlvblR5cGUsIHVuc2lnbmVkIG9mZnNldE9mRXhpdEFyZ3Vt
ZW50cykKICAgICB7CiAgICAgICAgIENvZGVPcmlnaW4gb3BDYXRjaE9yaWdpbjsKICAgICAgICAg
SGFuZGxlckluZm8qIGV4Y2VwdGlvbkhhbmRsZXI7CkBAIC04ODUzLDI3ICs4ODU5LDE1IEBAIHBy
aXZhdGU6CiAgICAgICAgIGlmICghd2lsbENhdGNoRXhjZXB0aW9uKQogICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKFVuY291bnRhYmxlLCBub1Zh
bHVlKCksIG51bGxwdHIsIG1fb3JpZ2luLndpdGhGb3JFeGl0QW5kRXhpdE9LKG9wQ2F0Y2hPcmln
aW4sIHRydWUpKTsKKyAgICAgICAgYXBwZW5kT1NSRXhpdERlc2NyaXB0b3IoVW5jb3VudGFibGUs
IGV4Y2VwdGlvblR5cGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4ud2l0aEZvckV4aXRB
bmRFeGl0T0sob3BDYXRjaE9yaWdpbiwgdHJ1ZSkpOwogICAgICAgICBPU1JFeGl0RGVzY3JpcHRv
ciYgZXhpdERlc2NyaXB0b3IgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9y
cy5sYXN0KCk7CiAgICAgICAgIGV4aXREZXNjcmlwdG9yLm1fc2VtYW50aWNDb2RlT3JpZ2luRm9y
Q2FsbEZyYW1lSGVhZGVyID0gY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpOwotICAg
ICAgICBleGl0RGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uSGFuZGxlciA9IHRydWU7Ci0gICAgICAg
IGV4aXREZXNjcmlwdG9yLm1fd2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kID0g
IWlzTGF6eVNsb3dQYXRoOwotICAgICAgICBleGl0RGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uRnJv
bUxhenlTbG93UGF0aCA9IGlzTGF6eVNsb3dQYXRoOwotICAgICAgICBleGl0RGVzY3JpcHRvci5t
X2lzRXhjZXB0aW9uRnJvbUpTQ2FsbCA9IGNhbGxpbmdDb252ZW50aW9uID09IExMVk1XZWJLaXRK
U0NhbGxDb252IHx8IGNhbGxpbmdDb252ZW50aW9uID09IExMVk1DQ2FsbENvbnY7Ci0gICAgICAg
IGV4aXREZXNjcmlwdG9yLm1faXNFeGNlcHRpb25Gcm9tR2V0QnlJZCA9IGlzR2V0QnlkSWQ7CiAg
ICAgICAgIGV4aXREZXNjcmlwdG9yLm1fYmFzZWxpbmVFeGNlcHRpb25IYW5kbGVyID0gKmV4Y2Vw
dGlvbkhhbmRsZXI7CiAgICAgICAgIGV4aXREZXNjcmlwdG9yLm1fc3RhY2ttYXBJRCA9IG1fc3Rh
Y2ttYXBJRHMgLSAxOwogCiAgICAgICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0IGZyZXNoTGlzdDsK
LSAgICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBmcmVzaExpc3QsIG5v
VmFsdWUoKSwgZXhpdERlc2NyaXB0b3IubV9jb2RlT3JpZ2luKTsKKyAgICAgICAgYnVpbGRFeGl0
QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBmcmVzaExpc3QsIG5vVmFsdWUoKSwgZXhpdERlc2Ny
aXB0b3IubV9jb2RlT3JpZ2luLCBvZmZzZXRPZkV4aXRBcmd1bWVudHMpOwogICAgICAgICBhcmd1
bWVudHMuYXBwZW5kVmVjdG9yKGZyZXNoTGlzdCk7Ci0KLSAgICAgICAgaWYgKG9mZnNldE9mRXhp
dEFyZ3VtZW50cykgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleGl0RGVz
Y3JpcHRvci5tX3ZhbHVlcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChleGl0
RGVzY3JpcHRvci5tX3ZhbHVlc1tpXS5oYXNJbmRleEluU3RhY2ttYXBMb2NhdGlvbnMoKSkKLSAg
ICAgICAgICAgICAgICAgICAgZXhpdERlc2NyaXB0b3IubV92YWx1ZXNbaV0uYWRqdXN0U3RhY2tt
YXBMb2NhdGlvbnNJbmRleEJ5T2Zmc2V0KG9mZnNldE9mRXhpdEFyZ3VtZW50cyk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBib29sIGVtaXRCcmFuY2hUb09TUkV4aXRJ
ZldpbGxDYXRjaEV4Y2VwdGlvbihMVmFsdWUgaGFkRXhjZXB0aW9uKQpAQCAtODg5MywxMCArODg4
NywxMCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9ibG9ja3MuZ2V0KGJsb2NrKTsKICAg
ICB9CiAKLSAgICB2b2lkIGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKEV4aXRLaW5kIGtpbmQsIEZv
cm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIE5vZGVPcmlnaW4gb3JpZ2lu
KQorICAgIHZvaWQgYXBwZW5kT1NSRXhpdERlc2NyaXB0b3IoRXhpdEtpbmQga2luZCwgRXhjZXB0
aW9uVHlwZSBleGNlcHRpb25UeXBlLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGln
aFZhbHVlLCBOb2RlT3JpZ2luIG9yaWdpbikKICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUuaml0
Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLmFwcGVuZChPU1JFeGl0RGVzY3JpcHRvcigKLSAgICAg
ICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKKyAgICAgICAgICAgIGtpbmQsIGV4Y2VwdGlvblR5
cGUsIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGVGb3IoaGlnaFZhbHVlKSwKICAgICAgICAgICAgIG9yaWdpbi5mb3JFeGl0LCBvcmlnaW4uc2Vt
YW50aWMsCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFy
Z3VtZW50cygpLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVy
T2ZMb2NhbHMoKSkpOwpAQCAtODkzNiw5ICs4OTMwLDggQEAgcHJpdmF0ZToKICAgICAgICAgaWYg
KGZhaWxDb25kaXRpb24gPT0gbV9vdXQuYm9vbGVhbkZhbHNlKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKGtpbmQsIGxvd1ZhbHVlLCBoaWdo
VmFsdWUsIG9yaWdpbik7CisgICAgICAgIGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKGtpbmQsIGlz
RXhjZXB0aW9uSGFuZGxlciA/IEV4Y2VwdGlvblR5cGU6OkNDYWxsRXhjZXB0aW9uIDogRXhjZXB0
aW9uVHlwZTo6Tm9uZSwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgb3JpZ2luKTsKICAgICAgICAgT1NS
RXhpdERlc2NyaXB0b3ImIGV4aXREZXNjcmlwdG9yID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JF
eGl0RGVzY3JpcHRvcnMubGFzdCgpOwotICAgICAgICBleGl0RGVzY3JpcHRvci5tX2lzRXhjZXB0
aW9uSGFuZGxlciA9IGlzRXhjZXB0aW9uSGFuZGxlcjsKIAogICAgICAgICBpZiAoZmFpbENvbmRp
dGlvbiA9PSBtX291dC5ib29sZWFuVHJ1ZSkgewogICAgICAgICAgICAgZW1pdE9TUkV4aXRDYWxs
KGV4aXREZXNjcmlwdG9yLCBsb3dWYWx1ZSk7CkBAIC04OTc1LDcgKzg5NjgsNyBAQCBwcml2YXRl
OgogICAgIAogICAgIHZvaWQgYnVpbGRFeGl0QXJndW1lbnRzKAogICAgICAgICBPU1JFeGl0RGVz
Y3JpcHRvciYgZXhpdERlc2NyaXB0b3IsIFN0YWNrbWFwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLAotICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
CisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgdW5zaWduZWQgb2Zmc2V0T2ZFeGl0QXJn
dW1lbnRzSW5TdGFja21hcExvY2F0aW9ucyA9IDApCiAgICAgewogICAgICAgICBpZiAoISFsb3dW
YWx1ZSkKICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobG93VmFsdWUudmFsdWUoKSk7CkBA
IC05MDEwLDE2ICs5MDAzLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsIG1fbm9kZSwKICAgICAgICAgICAgICAgICAgICAgKCEoYXZhaWxhYmlsaXR5LmlzRGVhZCgp
ICYmIG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIGNv
ZGVPcmlnaW4pKSkgfHwgbV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBleGl0RGVzY3JpcHRv
ci5tX3ZhbHVlc1tpXSA9IGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwg
YXZhaWxhYmlsaXR5KTsKKyAgICAgICAgICAgIEV4aXRWYWx1ZSBleGl0VmFsdWUgPSBleGl0VmFs
dWVGb3JBdmFpbGFiaWxpdHkoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eSk7CisgICAgICAg
ICAgICBpZiAoZXhpdFZhbHVlLmhhc0luZGV4SW5TdGFja21hcExvY2F0aW9ucygpKQorICAgICAg
ICAgICAgICAgIGV4aXRWYWx1ZS5hZGp1c3RTdGFja21hcExvY2F0aW9uc0luZGV4QnlPZmZzZXQo
b2Zmc2V0T2ZFeGl0QXJndW1lbnRzSW5TdGFja21hcExvY2F0aW9ucyk7CisgICAgICAgICAgICBl
eGl0RGVzY3JpcHRvci5tX3ZhbHVlc1tpXSA9IGV4aXRWYWx1ZTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgZm9yIChhdXRvIGhlYXBQYWlyIDogYXZhaWxhYmlsaXR5TWFwLm1faGVhcCkg
ewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGhlYXBQYWlyLmtleS5iYXNlKCk7CiAgICAgICAg
ICAgICBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uID0gbWFw
LmdldChub2RlKTsKKyAgICAgICAgICAgIEV4aXRWYWx1ZSBleGl0VmFsdWUgPSBleGl0VmFsdWVG
b3JBdmFpbGFiaWxpdHkoYXJndW1lbnRzLCBtYXAsIGhlYXBQYWlyLnZhbHVlKTsKKyAgICAgICAg
ICAgIGlmIChleGl0VmFsdWUuaGFzSW5kZXhJblN0YWNrbWFwTG9jYXRpb25zKCkpCisgICAgICAg
ICAgICAgICAgZXhpdFZhbHVlLmFkanVzdFN0YWNrbWFwTG9jYXRpb25zSW5kZXhCeU9mZnNldChv
ZmZzZXRPZkV4aXRBcmd1bWVudHNJblN0YWNrbWFwTG9jYXRpb25zKTsKICAgICAgICAgICAgIG1h
dGVyaWFsaXphdGlvbi0+YWRkKAogICAgICAgICAgICAgICAgIGhlYXBQYWlyLmtleS5kZXNjcmlw
dG9yKCksCi0gICAgICAgICAgICAgICAgZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50
cywgbWFwLCBoZWFwUGFpci52YWx1ZSkpOworICAgICAgICAgICAgICAgIGV4aXRWYWx1ZSk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVk
KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkocmV2
aXNpb24gMTkyMjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjUgKzQxLDY3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKIE9TUkV4aXREZXNjcmlwdG9yOjpP
U1JFeGl0RGVzY3JpcHRvcigKLSAgICBFeGl0S2luZCBleGl0S2luZCwgRGF0YUZvcm1hdCBwcm9m
aWxlRGF0YUZvcm1hdCwKKyAgICBFeGl0S2luZCBleGl0S2luZCwgRXhjZXB0aW9uVHlwZSBleGNl
cHRpb25UeXBlLCBEYXRhRm9ybWF0IHByb2ZpbGVEYXRhRm9ybWF0LAogICAgIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sCiAg
ICAgQ29kZU9yaWdpbiBvcmlnaW5Gb3JQcm9maWxlLCB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
cywKICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2FscykKICAgICA6IG1fa2luZChleGl0S2luZCkK
KyAgICAsIG1fZXhjZXB0aW9uVHlwZShleGNlcHRpb25UeXBlKQogICAgICwgbV9jb2RlT3JpZ2lu
KGNvZGVPcmlnaW4pCiAgICAgLCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZShvcmlnaW5Gb3JQ
cm9maWxlKQogICAgICwgbV9wcm9maWxlRGF0YUZvcm1hdChwcm9maWxlRGF0YUZvcm1hdCkKICAg
ICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKICAgICAsIG1fdmFsdWVzKG51bWJlck9m
QXJndW1lbnRzLCBudW1iZXJPZkxvY2FscykKICAgICAsIG1faXNJbnZhbGlkYXRpb25Qb2ludChm
YWxzZSkKLSAgICAsIG1faXNFeGNlcHRpb25IYW5kbGVyKGZhbHNlKQotICAgICwgbV93aWxsQXJy
aXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQoZmFsc2UpCi0gICAgLCBtX2lzRXhjZXB0aW9u
RnJvbUpTQ2FsbChmYWxzZSkKLSAgICAsIG1faXNFeGNlcHRpb25Gcm9tR2V0QnlJZChmYWxzZSkK
LSAgICAsIG1faXNFeGNlcHRpb25Gcm9tTGF6eVNsb3dQYXRoKGZhbHNlKQogewogfQogCitib29s
IE9TUkV4aXREZXNjcmlwdG9yOjp3aWxsQXJyaXZlQXRFeGl0RnJvbUluZGlyZWN0RXhjZXB0aW9u
Q2hlY2soKSBjb25zdAoreworICAgIHN3aXRjaCAobV9leGNlcHRpb25UeXBlKSB7CisgICAgY2Fz
ZSBFeGNlcHRpb25UeXBlOjpKU0NhbGw6CisgICAgY2FzZSBFeGNlcHRpb25UeXBlOjpHZXRCeUlk
OgorICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6UHV0QnlJZDoKKyAgICBjYXNlIEV4Y2VwdGlvblR5
cGU6OkxhenlTbG93UGF0aDoKKyAgICBjYXNlIEV4Y2VwdGlvblR5cGU6OlN1YkdlbmVyYXRvcjoK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitib29sIE9T
UkV4aXREZXNjcmlwdG9yOjptaWdodEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fZXhjZXB0aW9uVHlwZSkgeworICAgIGNhc2UgRXhjZXB0
aW9uVHlwZTo6SlNDYWxsOgorICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6R2V0QnlJZDoKKyAgICBj
YXNlIEV4Y2VwdGlvblR5cGU6OlB1dEJ5SWQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBPU1JFeGl0RGVzY3JpcHRvcjo6bWlnaHRBcnJpdmVB
dE9TUkV4aXRGcm9tQ2FsbE9wZXJhdGlvbigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2V4Y2Vw
dGlvblR5cGUpIHsKKyAgICBjYXNlIEV4Y2VwdGlvblR5cGU6OkdldEJ5SWQ6CisgICAgY2FzZSBF
eGNlcHRpb25UeXBlOjpQdXRCeUlkOgorICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6U3ViR2VuZXJh
dG9yOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jv
b2wgT1NSRXhpdERlc2NyaXB0b3I6OmlzRXhjZXB0aW9uSGFuZGxlcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZXhjZXB0aW9uVHlwZSAhPSBFeGNlcHRpb25UeXBlOjpOb25lOworfQorCiB2b2lk
IE9TUkV4aXREZXNjcmlwdG9yOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVy
ZW5jZXMmIHRyYWNrZWRSZWZlcmVuY2VzKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFs
dWVzLnNpemUoKTsgaS0tOykKQEAgLTc1LDcgKzExNyw3IEBAIE9TUkV4aXQ6Ok9TUkV4aXQoT1NS
RXhpdERlc2NyaXB0b3ImIGRlc2MKICAgICAsIG1fZGVzY3JpcHRvcihkZXNjcmlwdG9yKQogICAg
ICwgbV9zdGFja21hcFJlY29yZEluZGV4KHN0YWNrbWFwUmVjb3JkSW5kZXgpCiB7Ci0gICAgbV9p
c0V4Y2VwdGlvbkhhbmRsZXIgPSBkZXNjcmlwdG9yLm1faXNFeGNlcHRpb25IYW5kbGVyOworICAg
IG1faXNFeGNlcHRpb25IYW5kbGVyID0gZGVzY3JpcHRvci5pc0V4Y2VwdGlvbkhhbmRsZXIoKTsK
IH0KIAogQ29kZUxvY2F0aW9uSnVtcCBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENv
ZGVCbG9jayogZnRsQ29kZUJsb2NrKSBjb25zdApAQCAtODgsNyArMTMwLDcgQEAgQ29kZUxvY2F0
aW9uSnVtcCBPU1JFeGl0Ojpjb2RlTG9jYXRpb25GbwogCiB2b2lkIE9TUkV4aXQ6OmdhdGhlclJl
Z2lzdGVyc1RvU3BpbGxGb3JDYWxsSWZFeGNlcHRpb24oU3RhY2tNYXBzJiBzdGFja21hcHMsIFN0
YWNrTWFwczo6UmVjb3JkJiByZWNvcmQpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9kZXNjcmlw
dG9yLm1faXNFeGNlcHRpb25Gcm9tSlNDYWxsKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2Rlc2Ny
aXB0b3IubV9leGNlcHRpb25UeXBlID09IEV4Y2VwdGlvblR5cGU6OkpTQ2FsbCk7CiAKICAgICBS
ZWdpc3RlclNldCB2b2xhdGlsZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lz
dGVyc0ZvckpTQ2FsbCgpOwogCkBAIC0xMjIsNyArMTY0LDcgQEAgdm9pZCBPU1JFeGl0OjpnYXRo
ZXJSZWdpc3RlcnNUb1NwaWxsRm9yQwogCiB2b2lkIE9TUkV4aXQ6OnNwaWxsUmVnaXN0ZXJzVG9T
cGlsbFNsb3QoQ0NhbGxIZWxwZXJzJiBqaXQsIGludDMyX3Qgc3RhY2tTcGlsbFNsb3QpCiB7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQobV9kZXNjcmlwdG9yLm1faXNFeGNlcHRpb25Gcm9tSlNDYWxsIHx8
IG1fZGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uRnJvbUdldEJ5SWQpOworICAgIFJFTEVBU0VfQVNT
RVJUKG1fZGVzY3JpcHRvci5tX2V4Y2VwdGlvblR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6SlNDYWxs
IHx8IG1fZGVzY3JpcHRvci5tX2V4Y2VwdGlvblR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6R2V0QnlJ
ZCk7CiAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgIGZvciAoR1BSUmVnIHJlZyA9IE1hY3Jv
QXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fzc2VtYmxlcjo6bGFzdFJl
Z2lzdGVyKCk7IHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpuZXh0UmVnaXN0ZXIocmVnKSkgewogICAg
ICAgICBpZiAocmVnaXN0ZXJzVG9QcmVzZXJ2ZUZvckNhbGxUaGF0TWlnaHRUaHJvdy5nZXQocmVn
KSkgewpAQCAtMTQwLDcgKzE4Miw3IEBAIHZvaWQgT1NSRXhpdDo6c3BpbGxSZWdpc3RlcnNUb1Nw
aWxsU2xvdCgKIAogdm9pZCBPU1JFeGl0OjpyZWNvdmVyUmVnaXN0ZXJzRnJvbVNwaWxsU2xvdChD
Q2FsbEhlbHBlcnMmIGppdCwgaW50MzJfdCBzdGFja1NwaWxsU2xvdCkKIHsKLSAgICBSRUxFQVNF
X0FTU0VSVChtX2Rlc2NyaXB0b3IubV9pc0V4Y2VwdGlvbkZyb21KU0NhbGwgfHwgbV9kZXNjcmlw
dG9yLm1faXNFeGNlcHRpb25Gcm9tR2V0QnlJZCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kZXNj
cmlwdG9yLm1pZ2h0QXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQoKSB8fCBtX2Rlc2Ny
aXB0b3IubWlnaHRBcnJpdmVBdE9TUkV4aXRGcm9tQ2FsbE9wZXJhdGlvbigpKTsKICAgICB1bnNp
Z25lZCBjb3VudCA9IDA7CiAgICAgZm9yIChHUFJSZWcgcmVnID0gTWFjcm9Bc3NlbWJsZXI6OmZp
cnN0UmVnaXN0ZXIoKTsgcmVnIDw9IE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKTsgcmVn
ID0gTWFjcm9Bc3NlbWJsZXI6Om5leHRSZWdpc3RlcihyZWcpKSB7CiAgICAgICAgIGlmIChyZWdp
c3RlcnNUb1ByZXNlcnZlRm9yQ2FsbFRoYXRNaWdodFRocm93LmdldChyZWcpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkocmV2aXNpb24gMTkyMjc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzNiwxMyArMTM2LDI5IEBAIG5hbWVzcGFjZSBGVEwgewogLy8gICBpbnRyaW5zaWNzIChvciBt
ZXRhLWRhdGEsIG9yIHNvbWV0aGluZykgdG8gaW5mb3JtIHRoZSBiYWNrZW5kIHRoYXQgaXQncyBz
YWZlIHRvCiAvLyAgIG1ha2UgdGhlIHByZWRpY2F0ZSBwYXNzZWQgdG8gJ2V4aXRJZigpJyBtb3Jl
IHRydXRoeS4KIAorZW51bSBjbGFzcyBFeGNlcHRpb25UeXBlIHsKKyAgICBOb25lLAorICAgIEND
YWxsRXhjZXB0aW9uLAorICAgIEpTQ2FsbCwKKyAgICBHZXRCeUlkLAorICAgIFB1dEJ5SWQsCisg
ICAgTGF6eVNsb3dQYXRoLAorICAgIFN1YkdlbmVyYXRvcgorfTsKKwogc3RydWN0IE9TUkV4aXRE
ZXNjcmlwdG9yIHsKICAgICBPU1JFeGl0RGVzY3JpcHRvcigKLSAgICAgICAgRXhpdEtpbmQsIERh
dGFGb3JtYXQgcHJvZmlsZURhdGFGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUs
CisgICAgICAgIEV4aXRLaW5kLCBFeGNlcHRpb25UeXBlLCBEYXRhRm9ybWF0IHByb2ZpbGVEYXRh
Rm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLAogICAgICAgICBDb2RlT3JpZ2lu
LCBDb2RlT3JpZ2luIG9yaWdpbkZvclByb2ZpbGUsCiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2Fscyk7CiAKKyAgICBib29sIHdpbGxBcnJp
dmVBdEV4aXRGcm9tSW5kaXJlY3RFeGNlcHRpb25DaGVjaygpIGNvbnN0OworICAgIGJvb2wgbWln
aHRBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJpY1Vud2luZCgpIGNvbnN0OworICAgIGJvb2wgbWln
aHRBcnJpdmVBdE9TUkV4aXRGcm9tQ2FsbE9wZXJhdGlvbigpIGNvbnN0OworICAgIGJvb2wgaXNF
eGNlcHRpb25IYW5kbGVyKCkgY29uc3Q7CisKICAgICBFeGl0S2luZCBtX2tpbmQ7CisgICAgRXhj
ZXB0aW9uVHlwZSBtX2V4Y2VwdGlvblR5cGU7CiAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47
CiAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKICAgICBDb2RlT3Jp
Z2luIG1fc2VtYW50aWNDb2RlT3JpZ2luRm9yQ2FsbEZyYW1lSGVhZGVyOwpAQCAtMTYxLDExICsx
NzcsNiBAQCBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3IgewogICAgIHVpbnQzMl90IG1fc3RhY2tt
YXBJRDsKICAgICBIYW5kbGVySW5mbyBtX2Jhc2VsaW5lRXhjZXB0aW9uSGFuZGxlcjsKICAgICBi
b29sIG1faXNJbnZhbGlkYXRpb25Qb2ludCA6IDE7Ci0gICAgYm9vbCBtX2lzRXhjZXB0aW9uSGFu
ZGxlciA6IDE7Ci0gICAgYm9vbCBtX3dpbGxBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJpY1Vud2lu
ZCA6IDE7Ci0gICAgYm9vbCBtX2lzRXhjZXB0aW9uRnJvbUpTQ2FsbCA6IDE7Ci0gICAgYm9vbCBt
X2lzRXhjZXB0aW9uRnJvbUdldEJ5SWQgOiAxOwotICAgIGJvb2wgbV9pc0V4Y2VwdGlvbkZyb21M
YXp5U2xvd1BhdGggOiAxOwogICAgIAogICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0
IFRyYWNrZWRSZWZlcmVuY2VzJik7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgJKHJldmlzaW9uIDE5MjI3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBPU1JFeGl0Q29tcGls
YXRpb25JbmZvIHsKICAgICB9CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fdGh1
bmtMYWJlbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9nZXRBbmRQdXRCeUlkQ2FsbE9w
ZXJhdGlvbkV4Y2VwdGlvbk9TUkV4aXRFbnRyYW5jZTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9jYWxsT3BlcmF0aW9uRXhjZXB0aW9uT1NSRXhpdEVudHJhbmNlOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fdGh1bmtKdW1wOwogICAgIENvZGVMb2NhdGlvbkxhYmVs
IG1fdGh1bmtBZGRyZXNzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDE5MjI3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQ3LDggKzU0Nyw4IEBAIGV4dGVybiAiQyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQoRXhl
Y1MKICAgICAgICAgZGF0YUxvZygiICAgIEV4aXQgc3RhY2ttYXAgSUQ6ICIsIGV4aXQubV9kZXNj
cmlwdG9yLm1fc3RhY2ttYXBJRCwgIlxuIik7CiAgICAgICAgIGRhdGFMb2coIiAgICBDdXJyZW50
IGNhbGwgc2l0ZSBpbmRleDogIiwgZXhlYy0+Y2FsbFNpdGVJbmRleCgpLmJpdHMoKSwgIlxuIik7
CiAgICAgICAgIGRhdGFMb2coIiAgICBFeGl0IGlzIGV4Y2VwdGlvbiBoYW5kbGVyOiAiLCBleGl0
Lm1faXNFeGNlcHRpb25IYW5kbGVyLAotICAgICAgICAgICAgIiB3aWxsIGFycml2ZSBhdCBleGl0
IGZyb20gZ2VuZXJpY1Vud2luZCgpOiAiLCBleGl0Lm1fZGVzY3JpcHRvci5tX3dpbGxBcnJpdmVB
dE9TUkV4aXRGcm9tR2VuZXJpY1Vud2luZCwgCi0gICAgICAgICAgICAiIHdpbGwgYXJyaXZlIGF0
IGV4aXQgZnJvbSBsYXp5IHNsb3cgcGF0aDogIiwgZXhpdC5tX2Rlc2NyaXB0b3IubV9pc0V4Y2Vw
dGlvbkZyb21MYXp5U2xvd1BhdGgsICJcbiIpOworICAgICAgICAgICAgIiBtaWdodCBhcnJpdmUg
YXQgZXhpdCBmcm9tIGdlbmVyaWNVbndpbmQoKTogIiwgZXhpdC5tX2Rlc2NyaXB0b3IubWlnaHRB
cnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJpY1Vud2luZCgpLCAKKyAgICAgICAgICAgICIgd2lsbCBh
cnJpdmUgYXQgZXhpdCBmcm9tIGxhenkgc2xvdyBwYXRoOiAiLCBleGl0Lm1fZGVzY3JpcHRvci5t
X2V4Y2VwdGlvblR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6TGF6eVNsb3dQYXRoLCAiXG4iKTsKICAg
ICAgICAgZGF0YUxvZygiICAgIEV4aXQgdmFsdWVzOiAiLCBleGl0Lm1fZGVzY3JpcHRvci5tX3Zh
bHVlcywgIlxuIik7CiAgICAgICAgIGlmICghZXhpdC5tX2Rlc2NyaXB0b3IubV9tYXRlcmlhbGl6
YXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgZGF0YUxvZygiICAgIE1hdGVyaWFsaXph
dGlvbnM6XG4iKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265256</attachid>
            <date>2015-11-10 18:04:35 -0800</date>
            <delta_ts>2015-11-13 12:48:27 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>39164</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMjg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBA
CisyMDE1LTExLTEwICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IHN1YiBJQyBkb2VzIG5vdCBwcm9wZXJseSBoYW5kbGUgZXhjZXB0aW9uIGhhbmRsaW5nIG5vdyB0
aGF0IHRyeS9jYXRjaCBpcyBjb21waWxlZCBpbiB0aGUgRlRMCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwODAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgcHJvcGVy
IGV4Y2VwdGlvbiBoYW5kbGluZyBmb3IgQXJpdGhTdWJzIHdpdGggYmluYXJ5VXNlS2luZCBhcwor
ICAgICAgICBVbnR5cGVkVXNlIGluc2lkZSB0cnkvY2F0Y2guICBXZSBpbXBsZW1lbnQgdGhpcyBp
biBhIHZlcnkgc2ltaWxhciB3YXkgYXMgd2UgaW1wbGVtZW50IAorICAgICAgICBleGNlcHRpb24g
aGFuZGxpbmcgZnJvbSBHZXRCeUlkL1B1dEJ5SWQvTGF6eVNsb3dQYXRocyBjYWxsT3BlcmF0aW9u
IGNhbGxzLiBXZSBkbyB0aGUgbmVlZGVkIAorICAgICAgICBzcGlsbGluZyBpZiB0aGUgcmVzdWx0
IGlzIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHRoZSBsZWZ0L3JpZ2h0IHJlZ2lzdGVyIGJlY2F1c2Ug
aW4gdGhlIGV2ZW50CisgICAgICAgIG9mIGFuIGV4Y2VwdGlvbiwgd2UgZG9uJ3Qgd2FudCB0byBk
byB2YWx1ZSByZWNvdmVyeSBvbiB0aGUgZ2FyYmFnZSByZXN1bHQsIHdlCisgICAgICAgIHdhbnQg
dG8gZG8gaXQgb24gdGhlIG9yaWdpbmFsIGxocy9yaHMgb2YgdGhlIG9wZXJhdGlvbi4KKworICAg
ICAgICBUaGlzIHBhdGNoIGFsc28gZG9lcyBzb21lIHJlZmFjdG9yaW5nLiBObyBsb25nZXIgZG9l
cyBPU1JFeGl0RGVzY3JpcHRvcgorICAgICAgICBoYXZlIGEgbG9uZyBsaXN0IG9mIGJvb2xlYW5z
IHRoYXQgY29ycmVzcG9uZCB0byBkaWZmZXJlbnQgT1NSIGV4aXQgdHlwZXMuCisgICAgICAgIEl0
IG5vdyBqdXN0IGhhcyBhbiBlbnVtIHByb3BlcnR5IGNhbGxlZCBFeGNlcHRpb25UeXBlIHRoYXQg
dGVsbHMgdXMKKyAgICAgICAgd2hhdCB0eXBlIG9mIGV4Y2VwdGlvbiBoYW5kbGVyIHRoZSBPU1Ig
ZXhpdCBpcy4gVGhlbiwgd2UgY2FuIGp1c3QgYXNrCisgICAgICAgIGludGVyZXN0aW5nIHF1ZXN0
aW9ucyBhYm91dCB0aGUgT1NSIGV4aXQgYW5kIGdldCBhbnN3ZXJzIGJhc2VkIG9uIGl0cworICAg
ICAgICBFeGNlcHRpb25UeXBlIHByb3BlcnR5LgorCisgICAgICAgICogZnRsL0ZUTENvbXBpbGUu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6Om1tQWxsb2NhdGVEYXRhU2VjdGlvbik6CisgICAgICAg
ICogZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpFeGNlcHRpb25IYW5kbGVyTWFuYWdlcjo6YWRkTmV3RXhpdCk6CisgICAgICAgIChKU0M6OkZU
TDo6RXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OmNhbGxPcGVyYXRpb25FeGNlcHRpb25UYXJnZXQp
OgorICAgICAgICAoSlNDOjpGVEw6OkV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpsYXp5U2xvd1Bh
dGhFeGNlcHRpb25UYXJnZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4Y2VwdGlvbkhhbmRsZXJN
YW5hZ2VyOjpnZXRCeUlkT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhjZXB0aW9uSGFu
ZGxlck1hbmFnZXI6OnN1Yk9TUkV4aXQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4Y2VwdGlvbkhh
bmRsZXJNYW5hZ2VyOjpnZXRDYWxsT1NSRXhpdENvbW1vbik6CisgICAgICAgIChKU0M6OkZUTDo6
RXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OmdldE9yUHV0QnlJZENhbGxPcGVyYXRpb25FeGNlcHRp
b25UYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFu
YWdlci5oOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OkV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKToKKyAgICAgICAgKiBm
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0xMVk06Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlQXJpdGhBZGRPclN1Yik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSW52YWxpZGF0aW9uUG9p
bnQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmdldEJ5SWQpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmxhenlTbG93UGF0aCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y2FsbENoZWNrKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjphcHBlbmRPU1JFeGl0QXJndW1lbnRz
Rm9yUGF0Y2hwb2ludElmV2lsbENhdGNoRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9MTFZNOjplbWl0QnJhbmNoVG9PU1JFeGl0SWZXaWxsQ2F0Y2hFeGNlcHRp
b24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06Omxvd0Jsb2NrKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjphcHBlbmRPU1JFeGl0RGVz
Y3JpcHRvcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6YXBwZW5k
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6YnVpbGRF
eGl0QXJndW1lbnRzKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6T1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKToKKyAgICAgICAg
KEpTQzo6RlRMOjpPU1JFeGl0RGVzY3JpcHRvcjo6d2lsbEFycml2ZUF0RXhpdEZyb21JbmRpcmVj
dEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0RGVzY3JpcHRvcjo6
bWlnaHRBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJpY1Vud2luZCk6CisgICAgICAgIChKU0M6OkZU
TDo6T1NSRXhpdERlc2NyaXB0b3I6Om1pZ2h0QXJyaXZlQXRPU1JFeGl0RnJvbUNhbGxPcGVyYXRp
b24pOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjppc0V4Y2VwdGlvbkhh
bmRsZXIpOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjp2YWxpZGF0ZVJl
ZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAg
ICAoSlNDOjpGVEw6Ok9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2gpOgorICAgICAgICAo
SlNDOjpGVEw6Ok9TUkV4aXQ6OmdhdGhlclJlZ2lzdGVyc1RvU3BpbGxGb3JDYWxsSWZFeGNlcHRp
b24pOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXQ6OnNwaWxsUmVnaXN0ZXJzVG9TcGlsbFNs
b3QpOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXQ6OnJlY292ZXJSZWdpc3RlcnNGcm9tU3Bp
bGxTbG90KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOgorICAgICAgICAqIGZ0bC9GVExP
U1JFeGl0Q29tcGlsYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdENvbXBp
bGF0aW9uSW5mbzo6T1NSRXhpdENvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZUZUTE9TUkV4aXQp
OgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9mdGwtdHJ5LWNhdGNoLWFyaXRoLXN1Yi1leGNlcHRp
b24uanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGxldC5vLnZhbHVlT2Yp
OgorICAgICAgICAoYmF6KToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorCiAyMDE1
LTExLTEwICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIENyZWF0
ZSBhbiBGVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlciBhYnN0cmFjdGlvbgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxOTIyNzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01ODQsMjEgKzU4NCwzNiBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01h
cHMoCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBzdGF0ZS5q
aXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKLSAgICAgICAgICAgIGlmIChleGl0RGVzY3JpcHRvci5t
X3dpbGxBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJpY1Vud2luZCB8fCBleGl0RGVzY3JpcHRvci5t
X2lzRXhjZXB0aW9uRnJvbUxhenlTbG93UGF0aCkgeworICAgICAgICAgICAgaWYgKGV4aXREZXNj
cmlwdG9yLndpbGxBcnJpdmVBdEV4aXRGcm9tSW5kaXJlY3RFeGNlcHRpb25DaGVjaygpKSB7CiAg
ICAgICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlW2pd
LnJlY29yZDsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChleGl0Lm1fZGVzY3JpcHRv
ci5tX3NlbWFudGljQ29kZU9yaWdpbkZvckNhbGxGcmFtZUhlYWRlci5pc1NldCgpKTsKICAgICAg
ICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBzdGF0ZS5qaXRDb2RlLT5j
b21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChleGl0Lm1fZGVzY3JpcHRvci5tX3NlbWFudGlj
Q29kZU9yaWdpbkZvckNhbGxGcmFtZUhlYWRlcik7CiAgICAgICAgICAgICAgICAgZXhpdC5tX2V4
Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGVJbmRleDsKICAgICAgICAgICAg
ICAgICBleGNlcHRpb25IYW5kbGVyTWFuYWdlci5hZGROZXdFeGl0KGl0ZXItPnZhbHVlW2pdLmlu
ZGV4LCBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSAtIDEpOwogCi0gICAgICAgICAgICAg
ICAgaWYgKGV4aXREZXNjcmlwdG9yLm1faXNFeGNlcHRpb25Gcm9tSlNDYWxsKQorICAgICAgICAg
ICAgICAgIC8vIFN1YnMgYW5kIEdldEJ5SWRzIGhhdmUgYW4gaW50ZXJldGluZyByZWdpc3RlciBw
cmVzZXJ2YXRpb24gc3RvcnksCisgICAgICAgICAgICAgICAgLy8gc2VlIGNvbW1lbnQgYmVsb3cg
YXQgR2V0QnlJZCB0byByZWFkIGFib3V0IGl0LgorICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgLy8gV2Ugc2V0IHRoZSByZWdpc3RlcnMgbmVlZGluZyBzcGlsbGFnZSBoZXJlIGJl
Y2F1c2UgdGhleSBuZWVkIHRvIGJlIHNldAorICAgICAgICAgICAgICAgIC8vIGJlZm9yZSB3ZSBn
ZW5lcmF0ZSBPU1IgZXhpdHMgc28gdGhlIGV4aXQga25vd3MgdG8gZG8gdGhlIHByb3BlciByZWNv
dmVyeS4KKyAgICAgICAgICAgICAgICBpZiAoZXhpdERlc2NyaXB0b3IubV9leGNlcHRpb25UeXBl
ID09IEV4Y2VwdGlvblR5cGU6OkpTQ2FsbCkgeworICAgICAgICAgICAgICAgICAgICAvLyBDYWxs
IHBhdGNocG9pbnRzIG1pZ2h0IGhhdmUgdmFsdWVzIHdlIHdhbnQgdG8gZG8gdmFsdWUgcmVjb3Zl
cnkKKyAgICAgICAgICAgICAgICAgICAgLy8gb24gaW5zaWRlIHZvbGF0aWxlIHJlZ2lzdGVycy4g
V2UgbmVlZCB0byBjb2xsZWN0IHRoZSB2b2xhdGlsZQorICAgICAgICAgICAgICAgICAgICAvLyBy
ZWdpc3RlcnMgd2Ugd2FudCB0byBkbyB2YWx1ZSByZWNvdmVyeSBvbiBoZXJlIGJlY2F1c2UgdGhl
eSBtdXN0CisgICAgICAgICAgICAgICAgICAgIC8vIGJlIHByZXNlcnZlZCB0byB0aGUgc3RhY2sg
YmVmb3JlIHRoZSBjYWxsLCB0aGF0IHdheSB0aGUgT1NSIGV4aXQKKyAgICAgICAgICAgICAgICAg
ICAgLy8gZXhjZXB0aW9uIGhhbmRsZXIgY2FuIHJlY292ZXIgdGhlbSBpbnRvIHRoZSBwcm9wZXIg
cmVnaXN0ZXJzLgogICAgICAgICAgICAgICAgICAgICBleGl0LmdhdGhlclJlZ2lzdGVyc1RvU3Bp
bGxGb3JDYWxsSWZFeGNlcHRpb24oc3RhY2ttYXBzLCByZWNvcmQpOwotICAgICAgICAgICAgICAg
IGlmIChleGl0RGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uRnJvbUdldEJ5SWQpIHsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGV4aXREZXNjcmlwdG9yLm1fZXhjZXB0aW9uVHlwZSA9PSBFeGNl
cHRpb25UeXBlOjpHZXRCeUlkKSB7CiAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQg
PSByZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUigpOwogICAgICAgICAgICAgICAgICAgICBH
UFJSZWcgYmFzZSA9IHJlY29yZC5sb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgaGFzIGFuIGludGVyZXN0aW5nIHN0b3J5LCBzZWUgY29tbWVudCBi
ZWxvdyBkZXNjcmliaW5nIGl0LgotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IGJh
c2UpCisgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlID09IHJlc3VsdCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4aXQucmVnaXN0ZXJzVG9QcmVzZXJ2ZUZvckNhbGxUaGF0TWlnaHRUaHJv
dy5zZXQoYmFzZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChleGl0RGVzY3JpcHRvci5t
X2V4Y2VwdGlvblR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6U3ViR2VuZXJhdG9yKSB7CisgICAgICAg
ICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQ
UigpOworICAgICAgICAgICAgICAgICAgICBHUFJSZWcgbGVmdCA9IHJlY29yZC5sb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCk7CisgICAgICAgICAgICAgICAgICAgIEdQUlJlZyByaWdodCA9IHJlY29y
ZC5sb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQgPT0gbGVmdCB8fCByZXN1bHQgPT0gcmlnaHQpCisgICAgICAgICAgICAgICAgICAgICAgICBl
eGl0LnJlZ2lzdGVyc1RvUHJlc2VydmVGb3JDYWxsVGhhdE1pZ2h0VGhyb3cuc2V0KHJlc3VsdCk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC02MjksNyAr
NjQ0LDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAg
ICAgICAgaW5mby5tX3RodW5rQWRkcmVzcyA9IGxpbmtCdWZmZXItPmxvY2F0aW9uT2YoaW5mby5t
X3RodW5rTGFiZWwpOwogICAgICAgICAgICAgZXhpdC5tX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBs
aW5rQnVmZmVyLT5vZmZzZXRPZihpbmZvLm1fdGh1bmtKdW1wKTsKIAotICAgICAgICAgICAgaWYg
KGV4aXQubV9kZXNjcmlwdG9yLm1fd2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5k
KSB7CisgICAgICAgICAgICBpZiAoZXhpdC5tX2Rlc2NyaXB0b3IubWlnaHRBcnJpdmVBdE9TUkV4
aXRGcm9tR2VuZXJpY1Vud2luZCgpKSB7CiAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8gbmV3
SGFuZGxlciA9IGV4aXQubV9kZXNjcmlwdG9yLm1fYmFzZWxpbmVFeGNlcHRpb25IYW5kbGVyOwog
ICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuc3RhcnQgPSBleGl0Lm1fZXhjZXB0aW9uSGFuZGxl
ckNhbGxTaXRlSW5kZXguYml0cygpOwogICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuZW5kID0g
ZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUluZGV4LmJpdHMoKSArIDE7CkBAIC02NjIs
NyArNjc3LDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogCiAg
ICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCwgQ29kZUxvY2F0
aW9uTGFiZWw+PiBleGNlcHRpb25KdW1wc1RvTGluazsKICAgICAgICAgYXV0byBhZGROZXdFeGNl
cHRpb25KdW1wSWZOZWNlc3NhcnkgPSBbJl0gKHVpbnQzMl90IHJlY29yZEluZGV4KSB7Ci0gICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25UYXJnZXQgPSBleGNlcHRpb25IYW5k
bGVyTWFuYWdlci5nZXRPclB1dEJ5SWRDYWxsT3BlcmF0aW9uRXhjZXB0aW9uVGFyZ2V0KHJlY29y
ZEluZGV4KTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdldCA9
IGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNhbGxPcGVyYXRpb25FeGNlcHRpb25UYXJnZXQocmVj
b3JkSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFleGNlcHRpb25UYXJnZXQpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZXhjZXB0aW9uSnVtcHNUb0xpbmsuYXBw
ZW5kKApAQCAtODIyLDggKzgzNywxNSBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25T
dGFja01hcHMoCiAgICAgICAgICAgICAgICAgR1BSUmVnIHJpZ2h0ID0gcmVjb3JkLmxvY2F0aW9u
c1syXS5kaXJlY3RHUFIoKTsKIAogICAgICAgICAgICAgICAgIGFyaXRoU3ViLm1fc2xvd1BhdGhT
dGFydHMuYXBwZW5kKHNsb3dQYXRoSklULmxhYmVsKCkpOworICAgICAgICAgICAgICAgIGJvb2wg
YWRkZWRVbmlxdWVFeGNlcHRpb25KdW1wID0gYWRkTmV3RXhjZXB0aW9uSnVtcElmTmVjZXNzYXJ5
KGl0ZXItPnZhbHVlW2ldLmluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IGxl
ZnQgfHwgcmVzdWx0ID09IHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc2l0
dWF0aW9uIGhhcyBhIHJlYWxseSBpbnRlcmVzdGluZyByZWdpc3RlciBwcmVzZXJ2YXRpb24gc3Rv
cnkuCisgICAgICAgICAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGFib3ZlIGZvciBHZXRCeUlk
cy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKE9TUkV4aXQqIGV4aXQgPSBleGNlcHRpb25IYW5k
bGVyTWFuYWdlci5zdWJPU1JFeGl0KGl0ZXItPnZhbHVlW2ldLmluZGV4KSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGV4aXQtPnNwaWxsUmVnaXN0ZXJzVG9TcGlsbFNsb3Qoc2xvd1BhdGhKSVQs
IGpzQ2FsbFRoYXRNaWdodFRocm93U3BpbGxPZmZzZXQpOworICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQ
YXRoSklULCBjb2RlT3JpZ2luLCAmZXhjZXB0aW9uVGFyZ2V0LAorICAgICAgICAgICAgICAgIGNh
bGxPcGVyYXRpb24oc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2RlT3JpZ2lu
LCBhZGRlZFVuaXF1ZUV4Y2VwdGlvbkp1bXAgPyAmZXhjZXB0aW9uSnVtcHNUb0xpbmsubGFzdCgp
LmZpcnN0IDogJmV4Y2VwdGlvblRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
VmFsdWVTdWIsIHJlc3VsdCwgbGVmdCwgcmlnaHQpLmNhbGwoKTsKIAogICAgICAgICAgICAgICAg
IGFyaXRoU3ViLm1fc2xvd1BhdGhEb25lLmFwcGVuZChzbG93UGF0aEpJVC5qdW1wKCkpOwpAQCAt
OTk3LDcgKzEwMTksNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMo
CiAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBqaXRDb2RlLT5vc3JFeGl0W2V4aXRJbmRleF07CiAg
ICAgICAgIFZlY3Rvcjxjb25zdCB2b2lkKj4gY29kZUFkZHJlc3NlczsKIAotICAgICAgICBpZiAo
ZXhpdC5tX2Rlc2NyaXB0b3IubV93aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQg
fHwgZXhpdC5tX2Rlc2NyaXB0b3IubV9pc0V4Y2VwdGlvbkZyb21MYXp5U2xvd1BhdGgpIC8vIFRo
aXMgaXMgcmVhY2hlZCBieSBhIGp1bXAgZnJvbSBnZW5lcmljVW53aW5kIG9yIGEganVtcCBmcm9t
IGEgbGF6eSBzbG93IHBhdGguCisgICAgICAgIGlmIChleGl0Lm1fZGVzY3JpcHRvci53aWxsQXJy
aXZlQXRFeGl0RnJvbUluZGlyZWN0RXhjZXB0aW9uQ2hlY2soKSkgLy8gVGhpcyBqdW1wIGRvZXNu
J3QgaGFwcGVuIGRpcmVjdGx5IGZyb20gYSBwYXRjaHBvaW50L3N0YWNrbWFwIHdlIGNvbXBpbGUu
IEl0IGhhcHBlbnMgaW5kaXJlY3RseSB0aHJvdWdoIGFuIGV4Y2VwdGlvbiBjaGVjayBzb21ld2hl
cmUuCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIFN0YWNrTWFwczo6
UmVjb3JkJiByZWNvcmQgPSBqaXRDb2RlLT5zdGFja21hcHMucmVjb3Jkc1tleGl0Lm1fc3RhY2tt
YXBSZWNvcmRJbmRleF07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2Vw
dGlvbkhhbmRsZXJNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTkyMjc0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDIwICs0MSwyMCBAQCB2b2lkIEV4Y2VwdGlvbkhhbmRs
ZXJNYW5hZ2VyOjphZGROZXdFeGl0CiB7CiAgICAgbV9tYXAuYWRkKHN0YWNrbWFwUmVjb3JkSW5k
ZXgsIG9zckV4aXRJbmRleCk7CiAgICAgT1NSRXhpdCYgZXhpdCA9IG1fc3RhdGUuaml0Q29kZS0+
b3NyRXhpdFtvc3JFeGl0SW5kZXhdOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQubV9kZXNjcmlw
dG9yLm1fd2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kIHx8IGV4aXQubV9kZXNj
cmlwdG9yLm1faXNFeGNlcHRpb25Gcm9tTGF6eVNsb3dQYXRoKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChleGl0Lm1fZGVzY3JpcHRvci53aWxsQXJyaXZlQXRFeGl0RnJvbUluZGlyZWN0RXhjZXB0aW9u
Q2hlY2soKSk7CiB9CiAKLUNvZGVMb2NhdGlvbkxhYmVsIEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2Vy
OjpnZXRPclB1dEJ5SWRDYWxsT3BlcmF0aW9uRXhjZXB0aW9uVGFyZ2V0KHVpbnQzMl90IHN0YWNr
bWFwUmVjb3JkSW5kZXgpCitDb2RlTG9jYXRpb25MYWJlbCBFeGNlcHRpb25IYW5kbGVyTWFuYWdl
cjo6Y2FsbE9wZXJhdGlvbkV4Y2VwdGlvblRhcmdldCh1aW50MzJfdCBzdGFja21hcFJlY29yZElu
ZGV4KQogewogICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQoc3RhY2ttYXBSZWNvcmRJ
bmRleCk7CiAgICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCiAgICAgICAgIHJldHVy
biBDb2RlTG9jYXRpb25MYWJlbCgpOwogCiAgICAgc2l6ZV90IG9zckV4aXRJbmRleCA9IGZpbmRS
ZXN1bHQtPnZhbHVlOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUuaml0Q29kZS0+b3NyRXhp
dFtvc3JFeGl0SW5kZXhdLm1fZGVzY3JpcHRvci5tX3dpbGxBcnJpdmVBdE9TUkV4aXRGcm9tR2Vu
ZXJpY1Vud2luZCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zdGF0ZS5qaXRDb2RlLT5vc3JFeGl0
W29zckV4aXRJbmRleF0ubV9kZXNjcmlwdG9yLm1pZ2h0QXJyaXZlQXRPU1JFeGl0RnJvbUNhbGxP
cGVyYXRpb24oKSk7CiAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fc3RhdGUu
ZmluYWxpemVyLT5vc3JFeGl0W29zckV4aXRJbmRleF07Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5m
by5tX2dldEFuZFB1dEJ5SWRDYWxsT3BlcmF0aW9uRXhjZXB0aW9uT1NSRXhpdEVudHJhbmNlLmlz
U2V0KCkpOwotICAgIHJldHVybiBtX3N0YXRlLmZpbmFsaXplci0+ZXhpdFRodW5rc0xpbmtCdWZm
ZXItPmxvY2F0aW9uT2YoaW5mby5tX2dldEFuZFB1dEJ5SWRDYWxsT3BlcmF0aW9uRXhjZXB0aW9u
T1NSRXhpdEVudHJhbmNlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChpbmZvLm1fY2FsbE9wZXJhdGlv
bkV4Y2VwdGlvbk9TUkV4aXRFbnRyYW5jZS5pc1NldCgpKTsKKyAgICByZXR1cm4gbV9zdGF0ZS5m
aW5hbGl6ZXItPmV4aXRUaHVua3NMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGluZm8ubV9jYWxsT3Bl
cmF0aW9uRXhjZXB0aW9uT1NSRXhpdEVudHJhbmNlKTsKIH0KIAogQ29kZUxvY2F0aW9uTGFiZWwg
RXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OmxhenlTbG93UGF0aEV4Y2VwdGlvblRhcmdldCh1aW50
MzJfdCBzdGFja21hcFJlY29yZEluZGV4KQpAQCAtNjQsNyArNjQsNyBAQCBDb2RlTG9jYXRpb25M
YWJlbCBFeGNlcHRpb25IYW5kbGVyTWFuYWdlCiAgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25M
YWJlbCgpOwogCiAgICAgc2l6ZV90IG9zckV4aXRJbmRleCA9IGZpbmRSZXN1bHQtPnZhbHVlOwot
ICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUuaml0Q29kZS0+b3NyRXhpdFtvc3JFeGl0SW5kZXhd
Lm1fZGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uRnJvbUxhenlTbG93UGF0aCk7CisgICAgUkVMRUFT
RV9BU1NFUlQobV9zdGF0ZS5qaXRDb2RlLT5vc3JFeGl0W29zckV4aXRJbmRleF0ubV9kZXNjcmlw
dG9yLm1fZXhjZXB0aW9uVHlwZSA9PSBFeGNlcHRpb25UeXBlOjpMYXp5U2xvd1BhdGgpOwogICAg
IE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX3N0YXRlLmZpbmFsaXplci0+b3NyRXhp
dFtvc3JFeGl0SW5kZXhdOwogICAgIFJFTEVBU0VfQVNTRVJUKGluZm8ubV90aHVua0xhYmVsLmlz
U2V0KCkpOwogICAgIHJldHVybiBtX3N0YXRlLmZpbmFsaXplci0+ZXhpdFRodW5rc0xpbmtCdWZm
ZXItPmxvY2F0aW9uT2YoaW5mby5tX3RodW5rTGFiZWwpOwpAQCAtNzcsNyArNzcsMTggQEAgT1NS
RXhpdCogRXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OmdldEJ5SQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICBzaXplX3Qgb3NyRXhpdEluZGV4ID0gZmluZFJlc3VsdC0+dmFsdWU7CiAgICAg
T1NSRXhpdCogZXhpdCA9ICZtX3N0YXRlLmppdENvZGUtPm9zckV4aXRbb3NyRXhpdEluZGV4XTsK
LSAgICBSRUxFQVNFX0FTU0VSVChleGl0LT5tX2Rlc2NyaXB0b3IubV9pc0V4Y2VwdGlvbkZyb21H
ZXRCeUlkKTsKKyAgICBSRUxFQVNFX0FTU0VSVChleGl0LT5tX2Rlc2NyaXB0b3IubV9leGNlcHRp
b25UeXBlID09IEV4Y2VwdGlvblR5cGU6OkdldEJ5SWQpOworICAgIHJldHVybiBleGl0OyAKK30K
KworT1NSRXhpdCogRXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OnN1Yk9TUkV4aXQodWludDMyX3Qg
c3RhY2ttYXBSZWNvcmRJbmRleCkKK3sKKyAgICBhdXRvIGZpbmRSZXN1bHQgPSBtX21hcC5maW5k
KHN0YWNrbWFwUmVjb3JkSW5kZXgpOworICAgIGlmIChmaW5kUmVzdWx0ID09IG1fbWFwLmVuZCgp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBzaXplX3Qgb3NyRXhpdEluZGV4ID0gZmlu
ZFJlc3VsdC0+dmFsdWU7CisgICAgT1NSRXhpdCogZXhpdCA9ICZtX3N0YXRlLmppdENvZGUtPm9z
ckV4aXRbb3NyRXhpdEluZGV4XTsKKyAgICBSRUxFQVNFX0FTU0VSVChleGl0LT5tX2Rlc2NyaXB0
b3IubV9leGNlcHRpb25UeXBlID09IEV4Y2VwdGlvblR5cGU6OlN1YkdlbmVyYXRvcik7CiAgICAg
cmV0dXJuIGV4aXQ7IAogfQogCkBAIC04OCw3ICs5OSw3IEBAIE9TUkV4aXQqIEV4Y2VwdGlvbkhh
bmRsZXJNYW5hZ2VyOjpnZXRDYWwKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgc2l6ZV90
IG9zckV4aXRJbmRleCA9IGZpbmRSZXN1bHQtPnZhbHVlOwogICAgIE9TUkV4aXQqIGV4aXQgPSAm
bV9zdGF0ZS5qaXRDb2RlLT5vc3JFeGl0W29zckV4aXRJbmRleF07Ci0gICAgUkVMRUFTRV9BU1NF
UlQoZXhpdC0+bV9kZXNjcmlwdG9yLm1faXNFeGNlcHRpb25Gcm9tSlNDYWxsKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChleGl0LT5tX2Rlc2NyaXB0b3IubV9leGNlcHRpb25UeXBlID09IEV4Y2VwdGlv
blR5cGU6OkpTQ2FsbCk7CiAgICAgcmV0dXJuIGV4aXQ7IAogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5o
CShyZXZpc2lvbiAxOTIyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2Vw
dGlvbkhhbmRsZXJNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEwICs1NywxMSBAQCBw
dWJsaWM6CiAKICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgb25seSBtYWtlIHNlbnNlIHRvIGJlIGNh
bGxlZCBhZnRlciB3ZSd2ZSBnZW5lcmF0ZWQgdGhlIE9TUgogICAgIC8vIGV4aXQgdGh1bmtzIGFu
ZCBhbGxvY2F0ZWQgdGhlIE9TUiBleGl0IHRodW5rcycgbGluayBidWZmZXIuCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgZ2V0T3JQdXRCeUlkQ2FsbE9wZXJhdGlvbkV4Y2VwdGlvblRhcmdldCh1aW50
MzJfdCBzdGFja21hcFJlY29yZEluZGV4KTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBjYWxsT3Bl
cmF0aW9uRXhjZXB0aW9uVGFyZ2V0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgpOwogICAg
IENvZGVMb2NhdGlvbkxhYmVsIGxhenlTbG93UGF0aEV4Y2VwdGlvblRhcmdldCh1aW50MzJfdCBz
dGFja21hcFJlY29yZEluZGV4KTsKIAogICAgIE9TUkV4aXQqIGdldEJ5SWRPU1JFeGl0KHVpbnQz
Ml90IHN0YWNrbWFwUmVjb3JkSW5kZXgpOworICAgIE9TUkV4aXQqIHN1Yk9TUkV4aXQodWludDMy
X3Qgc3RhY2ttYXBSZWNvcmRJbmRleCk7CiAgICAgT1NSRXhpdCogZ2V0Q2FsbE9TUkV4aXQodWlu
dDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCwgY29uc3QgSlNDYWxsJik7CiAgICAgT1NSRXhpdCog
Z2V0Q2FsbE9TUkV4aXQodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCwgY29uc3QgSlNUYWls
Q2FsbCYpOwogICAgIE9TUkV4aXQqIGdldENhbGxPU1JFeGl0KHVpbnQzMl90IHN0YWNrbWFwUmVj
b3JkSW5kZXgsIGNvbnN0IEpTQ2FsbFZhcmFyZ3MmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE5
MjI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMjMgKzUzLDI2IEBAIHZvaWQgRXhpdFRodW5rR2Vu
ZXJhdG9yOjplbWl0VGh1bmsodW5zaWcKICAgICAKICAgICBpbmZvLm1fdGh1bmtMYWJlbCA9IGxh
YmVsKCk7CiAKLSAgICBpZiAoZXhpdC5tX2Rlc2NyaXB0b3IubV93aWxsQXJyaXZlQXRPU1JFeGl0
RnJvbUdlbmVyaWNVbndpbmQpIHsKKyAgICBKdW1wIGp1bXBUb1B1c2hJbmRleEZyb21HZW5lcmlj
VW53aW5kOworICAgIGlmIChleGl0Lm1fZGVzY3JpcHRvci5taWdodEFycml2ZUF0T1NSRXhpdEZy
b21HZW5lcmljVW53aW5kKCkpIHsKICAgICAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNQ2Fs
bGVlU2F2ZXNCdWZmZXIoKTsKICAgICAgICAgbG9hZFB0cih2bSgpLT5hZGRyZXNzT2ZDYWxsRnJh
bWVGb3JDYXRjaCgpLCBmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoLSBzdGF0aWNfY2FzdDxpbnQ2NF90PihtX3N0YXRlLmppdENvZGUtPnN0YWNrbWFw
cy5zdGFja1NpemVGb3JMb2NhbHMoKSkpLCAKICAgICAgICAgICAgIGZyYW1lUG9pbnRlclJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKLSAgICAgICAgaWYgKGV4aXQubV9kZXNjcmlw
dG9yLm1faXNFeGNlcHRpb25Gcm9tSlNDYWxsKQorICAgICAgICBpZiAoZXhpdC5tX2Rlc2NyaXB0
b3IubV9leGNlcHRpb25UeXBlID09IEV4Y2VwdGlvblR5cGU6OkpTQ2FsbCkKICAgICAgICAgICAg
IGV4aXQucmVjb3ZlclJlZ2lzdGVyc0Zyb21TcGlsbFNsb3QoKnRoaXMsIG9zckV4aXRGcm9tR2Vu
ZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKIAotICAgICAgICBKdW1wIHNraXBHZXRBbmRQdXRC
eUlkU2xvd1BhdGhFbnRyYW5jZSA9IGp1bXAoKTsKKyAgICAgICAganVtcFRvUHVzaEluZGV4RnJv
bUdlbmVyaWNVbndpbmQgPSBqdW1wKCk7CisgICAgfQogCi0gICAgICAgIGluZm8ubV9nZXRBbmRQ
dXRCeUlkQ2FsbE9wZXJhdGlvbkV4Y2VwdGlvbk9TUkV4aXRFbnRyYW5jZSA9IGxhYmVsKCk7Ci0g
ICAgICAgIGlmIChleGl0Lm1fZGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uRnJvbUdldEJ5SWQpCi0g
ICAgICAgICAgICBleGl0LnJlY292ZXJSZWdpc3RlcnNGcm9tU3BpbGxTbG90KCp0aGlzLCBvc3JF
eGl0RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xvdCk7Ci0gICAgICAgIAotICAgICAgICBz
a2lwR2V0QW5kUHV0QnlJZFNsb3dQYXRoRW50cmFuY2UubGluayh0aGlzKTsKKyAgICBpZiAoZXhp
dC5tX2Rlc2NyaXB0b3IubWlnaHRBcnJpdmVBdE9TUkV4aXRGcm9tQ2FsbE9wZXJhdGlvbigpKSB7
CisgICAgICAgIGluZm8ubV9jYWxsT3BlcmF0aW9uRXhjZXB0aW9uT1NSRXhpdEVudHJhbmNlID0g
bGFiZWwoKTsKKyAgICAgICAgZXhpdC5yZWNvdmVyUmVnaXN0ZXJzRnJvbVNwaWxsU2xvdCgqdGhp
cywgb3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3RhY2tTcGlsbFNsb3QpOwogICAgIH0KKyAgICAK
KyAgICBpZiAoZXhpdC5tX2Rlc2NyaXB0b3IubWlnaHRBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJp
Y1Vud2luZCgpKQorICAgICAgICBqdW1wVG9QdXNoSW5kZXhGcm9tR2VuZXJpY1Vud2luZC5saW5r
KHRoaXMpOwogCiAgICAgcHVzaFRvU2F2ZUltbWVkaWF0ZVdpdGhvdXRUb3VjaGluZ1JlZ2lzdGVy
cyhUcnVzdGVkSW1tMzIoaW5kZXgpKTsKICAgICBpbmZvLm1fdGh1bmtKdW1wID0gcGF0Y2hhYmxl
SnVtcCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAJKHJldmlzaW9uIDE5MjI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsMTcgKzIwOCwx
OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TnVtYmVyT2ZDYXRj
aFNwaWxscyA9IHN0ZDo6bWF4KG1heE51bWJlck9mQ2F0Y2hTcGlsbHMsIG1fZ3JhcGgubG9jYWxz
TGl2ZUluQnl0ZWNvZGUob3BDYXRjaE9yaWdpbikuYml0Q291bnQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBjYXNlIEFyaXRoU3ViOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWQ6CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOiB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0byBmbHVzaCBvbmUgdGhpbmcgZm9yIEdldEJ5SWRzIHdo
ZW4gdGhlIGJhc2UgYW5kIHJlc3VsdAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIGFz
c2lnbmVkIHRoZSBzYW1lIHJlZ2lzdGVyLiBGb3IgYSBtb3JlIGNvbXByZWhlbnNpdmUgb3ZlcnZp
ZXcsIGxvb2sKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoZSBjb21tZW50IGluIEZU
TENvbXBpbGUuY3BwCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0byBm
bHVzaCBvbmUgdGhpbmcgZm9yIEdldEJ5SWRzL0FyaXRoU3VicyB3aGVuIHRoZSBiYXNlIGFuZCBy
ZXN1bHQgb3IgdGhlIGxlZnQvcmlnaHQgYW5kIHRoZSByZXN1bHQKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGFyZSBhc3NpZ25lZCB0aGUgc2FtZSByZWdpc3Rlci4gRm9yIGEgbW9yZSBjb21w
cmVoZW5zaXZlIG92ZXJ2aWV3LCBsb29rIGF0IHRoZSBjb21tZW50IGluIEZUTENvbXBpbGUuY3Bw
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBBcml0aFN1YiAmJiBu
b2RlLT5iaW5hcnlVc2VLaW5kKCkgIT0gVW50eXBlZFVzZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsgLy8gV2Ugb25seSBjb21waWxlIHBhdGNocG9pbnRzIGZvciBBcml0aFN1
YiBVbnR5cGVkVXNlLgogICAgICAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBvcENhdGNo
T3JpZ2luOwogICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8qIGV4Y2VwdGlvbkhh
bmRsZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHdpbGxDYXRjaEV4Y2VwdGlvbiA9
IG1fZ3JhcGgud2lsbENhdGNoRXhjZXB0aW9uSW5NYWNoaW5lRnJhbWUobm9kZS0+b3JpZ2luLmZv
ckV4aXQsIG9wQ2F0Y2hPcmlnaW4sIGV4Y2VwdGlvbkhhbmRsZXIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHdpbGxDYXRjaEV4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbnVtYmVyT2ZHZXRCeUlkU3BpbGxzID0gMTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhOdW1iZXJPZkNhdGNoU3BpbGxzID0gc3RkOjpt
YXgobWF4TnVtYmVyT2ZDYXRjaFNwaWxscywgbnVtYmVyT2ZHZXRCeUlkU3BpbGxzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG51bWJlck9mR2V0QnlJ
ZE9yU3ViU3BpbGxzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhOdW1iZXJP
ZkNhdGNoU3BpbGxzID0gc3RkOjptYXgobWF4TnVtYmVyT2ZDYXRjaFNwaWxscywgbnVtYmVyT2ZH
ZXRCeUlkT3JTdWJTcGlsbHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE1NDMsMTAg
KzE1NDUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0pTVmFs
dWUobV9ub2RlLT5jaGlsZDIoKSk7CiAKICAgICAgICAgICAgIC8vIEFyZ3VtZW50czogaWQsIGJ5
dGVzLCB0YXJnZXQsIG51bUFyZ3MsIGFyZ3MuLi4KLSAgICAgICAgICAgIExWYWx1ZSBjYWxsID0g
bV9vdXQuY2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5z
aWMoKSwKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291
dC5jb25zdEludDMyKHNpemVPZkFyaXRoU3ViKCkpLAotICAgICAgICAgICAgICAgIGNvbnN0TnVs
bChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigyKSwgbGVmdCwgcmlnaHQpOworICAgICAg
ICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QgYXJndW1lbnRzOworICAgICAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpKTsKKyAgICAgICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMihzaXplT2ZBcml0aFN1YigpKSk7CisgICAg
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNvbnN0TnVsbChtX291dC5yZWY4KSk7CisgICAgICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoMikpOworICAgICAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChsZWZ0KTsKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQocmln
aHQpOworCisgICAgICAgICAgICBhcHBlbmRPU1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hwb2ludElm
V2lsbENhdGNoRXhjZXB0aW9uKGFyZ3VtZW50cywgRXhjZXB0aW9uVHlwZTo6U3ViR2VuZXJhdG9y
LCAzKTsgLy8gbGVmdCwgcmlnaHQsIGFuZCByZXN1bHQgc2hvdyB1cCBpbiB0aGUgc3RhY2ttYXAg
bG9jYXRpb25zLgorCisgICAgICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwobV9vdXQu
cGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICBzZXRJ
bnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CiAK
ICAgICAgICAgICAgIG1fZnRsU3RhdGUuYXJpdGhTdWJzLmFwcGVuZChBcml0aFN1YkRlc2NyaXB0
b3Ioc3RhY2ttYXBJRCwgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMsCkBAIC0yMzY1LDcgKzIzNzQs
NyBAQCBwcml2YXRlOgogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGJhc2UpOyAKICAgICAgICAg
YXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CiAKLSAgICAgICAgYXBwZW5kT1NSRXhpdEFyZ3VtZW50
c0ZvclBhdGNocG9pbnRJZldpbGxDYXRjaEV4Y2VwdGlvbihhcmd1bWVudHMsIExMVk1BbnlSZWdD
YWxsQ29udiwgMik7IC8vIDIgYXJndW1lbnRzIHNob3cgdXAgaW4gdGhlIHN0YWNrbWFwIGxvY2F0
aW9uczogdGhlIGJhc2UgYW5kIHRoZSB2YWx1ZS4KKyAgICAgICAgYXBwZW5kT1NSRXhpdEFyZ3Vt
ZW50c0ZvclBhdGNocG9pbnRJZldpbGxDYXRjaEV4Y2VwdGlvbihhcmd1bWVudHMsIEV4Y2VwdGlv
blR5cGU6OlB1dEJ5SWQsIDIpOyAvLyAyIGFyZ3VtZW50cyBzaG93IHVwIGluIHRoZSBzdGFja21h
cCBsb2NhdGlvbnM6IHRoZSBiYXNlIGFuZCB0aGUgdmFsdWUuCiAKICAgICAgICAgYXJndW1lbnRz
Lmluc2VydCgwLCBtX291dC5jb25zdEludDMyKDIpKTsgCiAgICAgICAgIGFyZ3VtZW50cy5pbnNl
cnQoMCwgY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsgCkBAIC00NTg5LDcgKzQ1OTgsNyBAQCBwcml2
YXRlOgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFkZGluZzsgKytpKQogICAg
ICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5pbnQ2NCkpOwogCi0gICAg
ICAgIGFwcGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRp
b24oYXJndW1lbnRzLCBMTFZNV2ViS2l0SlNDYWxsQ29udiwgMCk7IC8vIE5vIGNhbGwgYXJndW1l
bnRzIHNob3cgdXAgaW4gdGhlIHN0YWNrbWFwIGxvY2F0aW9ucy4KKyAgICAgICAgYXBwZW5kT1NS
RXhpdEFyZ3VtZW50c0ZvclBhdGNocG9pbnRJZldpbGxDYXRjaEV4Y2VwdGlvbihhcmd1bWVudHMs
IEV4Y2VwdGlvblR5cGU6OkpTQ2FsbCwgMCk7IC8vIE5vIGNhbGwgYXJndW1lbnRzIHNob3cgdXAg
aW4gdGhlIHN0YWNrbWFwIGxvY2F0aW9ucy4KIAogICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAs
IG1fb3V0LmNvbnN0SW50MzIoMSArIGFsaWduZWRGcmFtZVNpemUgLSBKU1N0YWNrOjpDYWxsZXJG
cmFtZUFuZFBDU2l6ZSkpOwogICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIGNvbnN0TnVsbCht
X291dC5yZWY4KSk7CkBAIC00NjcyLDcgKzQ2ODEsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NF
UlQodGhpc0FyZyk7CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQodGhpc0FyZyk7CiAKLSAgICAg
ICAgYXBwZW5kT1NSRXhpdEFyZ3VtZW50c0ZvclBhdGNocG9pbnRJZldpbGxDYXRjaEV4Y2VwdGlv
bihhcmd1bWVudHMsIExMVk1DQ2FsbENvbnYsIDApOyAvLyBObyBjYWxsIGFyZ3VtZW50cyBzaG93
IHVwIGluIHN0YWNrbWFwIGxvY2F0aW9ucy4KKyAgICAgICAgYXBwZW5kT1NSRXhpdEFyZ3VtZW50
c0ZvclBhdGNocG9pbnRJZldpbGxDYXRjaEV4Y2VwdGlvbihhcmd1bWVudHMsIEV4Y2VwdGlvblR5
cGU6OkpTQ2FsbCwgMCk7IC8vIE5vIGNhbGwgYXJndW1lbnRzIHNob3cgdXAgaW4gc3RhY2ttYXAg
bG9jYXRpb25zLgogCiAgICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQz
MigyICsgISFqc0FyZ3VtZW50cykpOwogICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIGNvbnN0
TnVsbChtX291dC5yZWY4KSk7CkBAIC01MDU0LDExICs1MDYzLDggQEAgcHJpdmF0ZToKIAogICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9vcmlnaW4uZXhpdE9LKTsKICAgICAg
ICAgCi0gICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLmFwcGVu
ZChPU1JFeGl0RGVzY3JpcHRvcigKLSAgICAgICAgICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9u
LCBEYXRhRm9ybWF0Tm9uZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpLAotICAgICAg
ICAgICAgbV9vcmlnaW4uZm9yRXhpdCwgbV9vcmlnaW4uc2VtYW50aWMsCi0gICAgICAgICAgICBh
dmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAotICAgICAgICAg
ICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOworCisgICAg
ICAgIGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCBFeGNl
cHRpb25UeXBlOjpOb25lLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKICAgICAgICAg
CiAgICAgICAgIE9TUkV4aXREZXNjcmlwdG9yJiBleGl0RGVzY3JpcHRvciA9IG1fZnRsU3RhdGUu
aml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLmxhc3QoKTsKICAgICAgICAgCkBAIC02MjQxLDcg
KzYyNDcsNyBAQCBwcml2YXRlOgogICAgICAgICBTdGFja21hcEFyZ3VtZW50TGlzdCBhcmd1bWVu
dHM7CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoYmFzZSk7CiAKLSAgICAgICAgYXBwZW5kT1NS
RXhpdEFyZ3VtZW50c0ZvclBhdGNocG9pbnRJZldpbGxDYXRjaEV4Y2VwdGlvbihhcmd1bWVudHMs
IExMVk1BbnlSZWdDYWxsQ29udiwgMiwgZmFsc2UsIHRydWUpOyAvLyAyIGFyZ3VtZW50cyBzaG93
IHVwIGluIHRoZSBzdGFja21hcCBsb2NhdGlvbnM6IHRoZSByZXN1bHQgYW5kIHRoZSBiYXNlLgor
ICAgICAgICBhcHBlbmRPU1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hwb2ludElmV2lsbENhdGNoRXhj
ZXB0aW9uKGFyZ3VtZW50cywgRXhjZXB0aW9uVHlwZTo6R2V0QnlJZCwgMik7IC8vIDIgYXJndW1l
bnRzIHNob3cgdXAgaW4gdGhlIHN0YWNrbWFwIGxvY2F0aW9uczogdGhlIHJlc3VsdCBhbmQgdGhl
IGJhc2UuCiAKICAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5jb25zdEludDMyKDEp
KTsgCiAgICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsK
QEAgLTc1OTYsNyArNzYwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQo
bV9vdXQuY29uc3RJbnQzMih1c2VyQXJndW1lbnRzLnNpemUoKSkpOwogICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kVmVjdG9yKHVzZXJBcmd1bWVudHMpOwogCi0gICAgICAgIGFwcGVuZE9TUkV4aXRB
cmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oYXJndW1lbnRzLCBMTFZN
QW55UmVnQ2FsbENvbnYsIHVzZXJBcmd1bWVudHMuc2l6ZSgpICsgMSwgdHJ1ZSk7IC8vIEFsbCB0
aGUgYXJndW1lbnRzIHBsdXMgdGhlIHJlc3VsdCBzaG93IHVwIGluIHRoZSBzdGFja21hcCBsb2Nh
dGlvbnMuCisgICAgICAgIGFwcGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxs
Q2F0Y2hFeGNlcHRpb24oYXJndW1lbnRzLCBFeGNlcHRpb25UeXBlOjpMYXp5U2xvd1BhdGgsIHVz
ZXJBcmd1bWVudHMuc2l6ZSgpICsgMSk7IC8vIEFsbCB0aGUgYXJndW1lbnRzIHBsdXMgdGhlIHJl
c3VsdCBzaG93IHVwIGluIHRoZSBzdGFja21hcCBsb2NhdGlvbnMuCiAKICAgICAgICAgTFZhbHVl
IGNhbGwgPSBtX291dC5jYWxsKG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLCBhcmd1
bWVudHMpOwogICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExM
Vk1BbnlSZWdDYWxsQ29udik7CkBAIC04ODQ1LDcgKzg4NTEsNyBAQCBwcml2YXRlOgogICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOwogICAgIH0KIAotICAgIHZvaWQgYXBwZW5k
T1NSRXhpdEFyZ3VtZW50c0ZvclBhdGNocG9pbnRJZldpbGxDYXRjaEV4Y2VwdGlvbihTdGFja21h
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBMQ2FsbENvbnYgY2FsbGluZ0NvbnZlbnRpb24sIHVu
c2lnbmVkIG9mZnNldE9mRXhpdEFyZ3VtZW50cywgYm9vbCBpc0xhenlTbG93UGF0aCA9IGZhbHNl
LCBib29sIGlzR2V0QnlkSWQgPSBmYWxzZSkKKyAgICB2b2lkIGFwcGVuZE9TUkV4aXRBcmd1bWVu
dHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oU3RhY2ttYXBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgRXhjZXB0aW9uVHlwZSBleGNlcHRpb25UeXBlLCB1bnNpZ25lZCBvZmZzZXRP
ZkV4aXRBcmd1bWVudHMpCiAgICAgewogICAgICAgICBDb2RlT3JpZ2luIG9wQ2F0Y2hPcmlnaW47
CiAgICAgICAgIEhhbmRsZXJJbmZvKiBleGNlcHRpb25IYW5kbGVyOwpAQCAtODg1MywyNyArODg1
OSwxNSBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIXdpbGxDYXRjaEV4Y2VwdGlvbikKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihVbmNvdW50
YWJsZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbi53aXRoRm9yRXhpdEFuZEV4aXRPSyhv
cENhdGNoT3JpZ2luLCB0cnVlKSk7CisgICAgICAgIGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKFVu
Y291bnRhYmxlLCBleGNlcHRpb25UeXBlLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luLndp
dGhGb3JFeGl0QW5kRXhpdE9LKG9wQ2F0Y2hPcmlnaW4sIHRydWUpKTsKICAgICAgICAgT1NSRXhp
dERlc2NyaXB0b3ImIGV4aXREZXNjcmlwdG9yID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0
RGVzY3JpcHRvcnMubGFzdCgpOwogICAgICAgICBleGl0RGVzY3JpcHRvci5tX3NlbWFudGljQ29k
ZU9yaWdpbkZvckNhbGxGcmFtZUhlYWRlciA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNp
dGUoKTsKLSAgICAgICAgZXhpdERlc2NyaXB0b3IubV9pc0V4Y2VwdGlvbkhhbmRsZXIgPSB0cnVl
OwotICAgICAgICBleGl0RGVzY3JpcHRvci5tX3dpbGxBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJp
Y1Vud2luZCA9ICFpc0xhenlTbG93UGF0aDsKLSAgICAgICAgZXhpdERlc2NyaXB0b3IubV9pc0V4
Y2VwdGlvbkZyb21MYXp5U2xvd1BhdGggPSBpc0xhenlTbG93UGF0aDsKLSAgICAgICAgZXhpdERl
c2NyaXB0b3IubV9pc0V4Y2VwdGlvbkZyb21KU0NhbGwgPSBjYWxsaW5nQ29udmVudGlvbiA9PSBM
TFZNV2ViS2l0SlNDYWxsQ29udiB8fCBjYWxsaW5nQ29udmVudGlvbiA9PSBMTFZNQ0NhbGxDb252
OwotICAgICAgICBleGl0RGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uRnJvbUdldEJ5SWQgPSBpc0dl
dEJ5ZElkOwogICAgICAgICBleGl0RGVzY3JpcHRvci5tX2Jhc2VsaW5lRXhjZXB0aW9uSGFuZGxl
ciA9ICpleGNlcHRpb25IYW5kbGVyOwogICAgICAgICBleGl0RGVzY3JpcHRvci5tX3N0YWNrbWFw
SUQgPSBtX3N0YWNrbWFwSURzIC0gMTsKIAogICAgICAgICBTdGFja21hcEFyZ3VtZW50TGlzdCBm
cmVzaExpc3Q7Ci0gICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRvciwgZnJl
c2hMaXN0LCBub1ZhbHVlKCksIGV4aXREZXNjcmlwdG9yLm1fY29kZU9yaWdpbik7CisgICAgICAg
IGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRvciwgZnJlc2hMaXN0LCBub1ZhbHVlKCks
IGV4aXREZXNjcmlwdG9yLm1fY29kZU9yaWdpbiwgb2Zmc2V0T2ZFeGl0QXJndW1lbnRzKTsKICAg
ICAgICAgYXJndW1lbnRzLmFwcGVuZFZlY3RvcihmcmVzaExpc3QpOwotCi0gICAgICAgIGlmIChv
ZmZzZXRPZkV4aXRBcmd1bWVudHMpIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZXhpdERlc2NyaXB0b3IubV92YWx1ZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICBpZiAoZXhpdERlc2NyaXB0b3IubV92YWx1ZXNbaV0uaGFzSW5kZXhJblN0YWNrbWFwTG9jYXRp
b25zKCkpCi0gICAgICAgICAgICAgICAgICAgIGV4aXREZXNjcmlwdG9yLm1fdmFsdWVzW2ldLmFk
anVzdFN0YWNrbWFwTG9jYXRpb25zSW5kZXhCeU9mZnNldChvZmZzZXRPZkV4aXRBcmd1bWVudHMp
OwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgfQogCiAgICAgYm9vbCBlbWl0QnJhbmNo
VG9PU1JFeGl0SWZXaWxsQ2F0Y2hFeGNlcHRpb24oTFZhbHVlIGhhZEV4Y2VwdGlvbikKQEAgLTg4
OTMsMTAgKzg4ODcsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fYmxvY2tzLmdldChi
bG9jayk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihFeGl0S2lu
ZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBOb2RlT3Jp
Z2luIG9yaWdpbikKKyAgICB2b2lkIGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKEV4aXRLaW5kIGtp
bmQsIEV4Y2VwdGlvblR5cGUgZXhjZXB0aW9uVHlwZSwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUs
IE5vZGUqIGhpZ2hWYWx1ZSwgTm9kZU9yaWdpbiBvcmlnaW4pCiAgICAgewogICAgICAgICBtX2Z0
bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9ycy5hcHBlbmQoT1NSRXhpdERlc2NyaXB0
b3IoCi0gICAgICAgICAgICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCisgICAgICAgICAgICBraW5kLCBl
eGNlcHRpb25UeXBlLCBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCiAgICAgICAgICAgICBvcmlnaW4uZm9yRXhpdCwg
b3JpZ2luLnNlbWFudGljLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
bnVtYmVyT2ZBcmd1bWVudHMoKSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9j
YWxzLm51bWJlck9mTG9jYWxzKCkpKTsKQEAgLTg5MzYsOSArODkzMCw4IEBAIHByaXZhdGU6CiAg
ICAgICAgIGlmIChmYWlsQ29uZGl0aW9uID09IG1fb3V0LmJvb2xlYW5GYWxzZSkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihraW5kLCBsb3dW
YWx1ZSwgaGlnaFZhbHVlLCBvcmlnaW4pOworICAgICAgICBhcHBlbmRPU1JFeGl0RGVzY3JpcHRv
cihraW5kLCBpc0V4Y2VwdGlvbkhhbmRsZXIgPyBFeGNlcHRpb25UeXBlOjpDQ2FsbEV4Y2VwdGlv
biA6IEV4Y2VwdGlvblR5cGU6Ok5vbmUsIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIG9yaWdpbik7CiAg
ICAgICAgIE9TUkV4aXREZXNjcmlwdG9yJiBleGl0RGVzY3JpcHRvciA9IG1fZnRsU3RhdGUuaml0
Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLmxhc3QoKTsKLSAgICAgICAgZXhpdERlc2NyaXB0b3Iu
bV9pc0V4Y2VwdGlvbkhhbmRsZXIgPSBpc0V4Y2VwdGlvbkhhbmRsZXI7CiAKICAgICAgICAgaWYg
KGZhaWxDb25kaXRpb24gPT0gbV9vdXQuYm9vbGVhblRydWUpIHsKICAgICAgICAgICAgIGVtaXRP
U1JFeGl0Q2FsbChleGl0RGVzY3JpcHRvciwgbG93VmFsdWUpOwpAQCAtODk3NSw3ICs4OTY4LDcg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGJ1aWxkRXhpdEFyZ3VtZW50cygKICAgICAgICAg
T1NSRXhpdERlc2NyaXB0b3ImIGV4aXREZXNjcmlwdG9yLCBTdGFja21hcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwKLSAgICAgICAgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKQorICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVkIG9mZnNl
dE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2NhdGlvbnMgPSAwKQogICAgIHsKICAgICAgICAg
aWYgKCEhbG93VmFsdWUpCiAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGxvd1ZhbHVlLnZh
bHVlKCkpOwpAQCAtOTAxMCwxNiArOTAwMywyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLCBtX25vZGUsCiAgICAgICAgICAgICAgICAgICAgICghKGF2YWlsYWJpbGl0
eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQpLCBjb2RlT3JpZ2luKSkpIHx8IG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NS
RW50cnlNb2RlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgZXhp
dERlc2NyaXB0b3IubV92YWx1ZXNbaV0gPSBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHkoYXJndW1l
bnRzLCBtYXAsIGF2YWlsYWJpbGl0eSk7CisgICAgICAgICAgICBFeGl0VmFsdWUgZXhpdFZhbHVl
ID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkp
OworICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2ttYXBMb2NhdGlvbnMo
KSkKKyAgICAgICAgICAgICAgICBleGl0VmFsdWUuYWRqdXN0U3RhY2ttYXBMb2NhdGlvbnNJbmRl
eEJ5T2Zmc2V0KG9mZnNldE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2NhdGlvbnMpOworICAg
ICAgICAgICAgZXhpdERlc2NyaXB0b3IubV92YWx1ZXNbaV0gPSBleGl0VmFsdWU7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGZvciAoYXV0byBoZWFwUGFpciA6IGF2YWlsYWJpbGl0eU1h
cC5tX2hlYXApIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBoZWFwUGFpci5rZXkuYmFzZSgp
OwogICAgICAgICAgICAgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXph
dGlvbiA9IG1hcC5nZXQobm9kZSk7CisgICAgICAgICAgICBFeGl0VmFsdWUgZXhpdFZhbHVlID0g
ZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBoZWFwUGFpci52YWx1ZSk7
CisgICAgICAgICAgICBpZiAoZXhpdFZhbHVlLmhhc0luZGV4SW5TdGFja21hcExvY2F0aW9ucygp
KQorICAgICAgICAgICAgICAgIGV4aXRWYWx1ZS5hZGp1c3RTdGFja21hcExvY2F0aW9uc0luZGV4
QnlPZmZzZXQob2Zmc2V0T2ZFeGl0QXJndW1lbnRzSW5TdGFja21hcExvY2F0aW9ucyk7CiAgICAg
ICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmFkZCgKICAgICAgICAgICAgICAgICBoZWFwUGFpci5r
ZXkuZGVzY3JpcHRvcigpLAotICAgICAgICAgICAgICAgIGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0
eShhcmd1bWVudHMsIG1hcCwgaGVhcFBhaXIudmFsdWUpKTsKKyAgICAgICAgICAgICAgICBleGl0
VmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0
aW9uRW5hYmxlZCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dC5jcHAJKHJldmlzaW9uIDE5MjI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDI1ICs0MSw2NyBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CiB1c2luZyBuYW1lc3BhY2UgREZHOwogCiBPU1JFeGl0RGVz
Y3JpcHRvcjo6T1NSRXhpdERlc2NyaXB0b3IoCi0gICAgRXhpdEtpbmQgZXhpdEtpbmQsIERhdGFG
b3JtYXQgcHJvZmlsZURhdGFGb3JtYXQsCisgICAgRXhpdEtpbmQgZXhpdEtpbmQsIEV4Y2VwdGlv
blR5cGUgZXhjZXB0aW9uVHlwZSwgRGF0YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1hdCwKICAgICBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLAogICAgIENvZGVPcmlnaW4gb3JpZ2luRm9yUHJvZmlsZSwgdW5zaWduZWQgbnVtYmVy
T2ZBcmd1bWVudHMsCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMpCiAgICAgOiBtX2tpbmQo
ZXhpdEtpbmQpCisgICAgLCBtX2V4Y2VwdGlvblR5cGUoZXhjZXB0aW9uVHlwZSkKICAgICAsIG1f
Y29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUo
b3JpZ2luRm9yUHJvZmlsZSkKICAgICAsIG1fcHJvZmlsZURhdGFGb3JtYXQocHJvZmlsZURhdGFG
b3JtYXQpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpCiAgICAgLCBtX3ZhbHVl
cyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMpCiAgICAgLCBtX2lzSW52YWxpZGF0
aW9uUG9pbnQoZmFsc2UpCi0gICAgLCBtX2lzRXhjZXB0aW9uSGFuZGxlcihmYWxzZSkKLSAgICAs
IG1fd2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKGZhbHNlKQotICAgICwgbV9p
c0V4Y2VwdGlvbkZyb21KU0NhbGwoZmFsc2UpCi0gICAgLCBtX2lzRXhjZXB0aW9uRnJvbUdldEJ5
SWQoZmFsc2UpCi0gICAgLCBtX2lzRXhjZXB0aW9uRnJvbUxhenlTbG93UGF0aChmYWxzZSkKIHsK
IH0KIAorYm9vbCBPU1JFeGl0RGVzY3JpcHRvcjo6d2lsbEFycml2ZUF0RXhpdEZyb21JbmRpcmVj
dEV4Y2VwdGlvbkNoZWNrKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fZXhjZXB0aW9uVHlwZSkg
eworICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6SlNDYWxsOgorICAgIGNhc2UgRXhjZXB0aW9uVHlw
ZTo6R2V0QnlJZDoKKyAgICBjYXNlIEV4Y2VwdGlvblR5cGU6OlB1dEJ5SWQ6CisgICAgY2FzZSBF
eGNlcHRpb25UeXBlOjpMYXp5U2xvd1BhdGg6CisgICAgY2FzZSBFeGNlcHRpb25UeXBlOjpTdWJH
ZW5lcmF0b3I6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworYm9vbCBPU1JFeGl0RGVzY3JpcHRvcjo6bWlnaHRBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJp
Y1Vud2luZCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2V4Y2VwdGlvblR5cGUpIHsKKyAgICBj
YXNlIEV4Y2VwdGlvblR5cGU6OkpTQ2FsbDoKKyAgICBjYXNlIEV4Y2VwdGlvblR5cGU6OkdldEJ5
SWQ6CisgICAgY2FzZSBFeGNlcHRpb25UeXBlOjpQdXRCeUlkOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgT1NSRXhpdERlc2NyaXB0b3I6Om1p
Z2h0QXJyaXZlQXRPU1JFeGl0RnJvbUNhbGxPcGVyYXRpb24oKSBjb25zdAoreworICAgIHN3aXRj
aCAobV9leGNlcHRpb25UeXBlKSB7CisgICAgY2FzZSBFeGNlcHRpb25UeXBlOjpHZXRCeUlkOgor
ICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6UHV0QnlJZDoKKyAgICBjYXNlIEV4Y2VwdGlvblR5cGU6
OlN1YkdlbmVyYXRvcjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCitib29sIE9TUkV4aXREZXNjcmlwdG9yOjppc0V4Y2VwdGlvbkhhbmRsZXIoKSBjb25z
dAoreworICAgIHJldHVybiBtX2V4Y2VwdGlvblR5cGUgIT0gRXhjZXB0aW9uVHlwZTo6Tm9uZTsK
K30KKwogdm9pZCBPU1JFeGl0RGVzY3JpcHRvcjo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRy
YWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkUmVmZXJlbmNlcykKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX3ZhbHVlcy5zaXplKCk7IGktLTspCkBAIC03NSw3ICsxMTcsNyBAQCBPU1JFeGl0OjpP
U1JFeGl0KE9TUkV4aXREZXNjcmlwdG9yJiBkZXNjCiAgICAgLCBtX2Rlc2NyaXB0b3IoZGVzY3Jp
cHRvcikKICAgICAsIG1fc3RhY2ttYXBSZWNvcmRJbmRleChzdGFja21hcFJlY29yZEluZGV4KQog
ewotICAgIG1faXNFeGNlcHRpb25IYW5kbGVyID0gZGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uSGFu
ZGxlcjsKKyAgICBtX2lzRXhjZXB0aW9uSGFuZGxlciA9IGRlc2NyaXB0b3IuaXNFeGNlcHRpb25I
YW5kbGVyKCk7CiB9CiAKIENvZGVMb2NhdGlvbkp1bXAgT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9y
UmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVCbG9jaykgY29uc3QKQEAgLTg4LDcgKzEzMCw3IEBA
IENvZGVMb2NhdGlvbkp1bXAgT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm8KIAogdm9pZCBPU1JFeGl0
OjpnYXRoZXJSZWdpc3RlcnNUb1NwaWxsRm9yQ2FsbElmRXhjZXB0aW9uKFN0YWNrTWFwcyYgc3Rh
Y2ttYXBzLCBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkKQogewotICAgIFJFTEVBU0VfQVNTRVJU
KG1fZGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uRnJvbUpTQ2FsbCk7CisgICAgUkVMRUFTRV9BU1NF
UlQobV9kZXNjcmlwdG9yLm1fZXhjZXB0aW9uVHlwZSA9PSBFeGNlcHRpb25UeXBlOjpKU0NhbGwp
OwogCiAgICAgUmVnaXN0ZXJTZXQgdm9sYXRpbGVSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6dm9s
YXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKTsKIApAQCAtMTIyLDcgKzE2NCw3IEBAIHZvaWQgT1NS
RXhpdDo6Z2F0aGVyUmVnaXN0ZXJzVG9TcGlsbEZvckMKIAogdm9pZCBPU1JFeGl0OjpzcGlsbFJl
Z2lzdGVyc1RvU3BpbGxTbG90KENDYWxsSGVscGVycyYgaml0LCBpbnQzMl90IHN0YWNrU3BpbGxT
bG90KQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fZGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uRnJv
bUpTQ2FsbCB8fCBtX2Rlc2NyaXB0b3IubV9pc0V4Y2VwdGlvbkZyb21HZXRCeUlkKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChtX2Rlc2NyaXB0b3IubWlnaHRBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJp
Y1Vud2luZCgpIHx8IG1fZGVzY3JpcHRvci5taWdodEFycml2ZUF0T1NSRXhpdEZyb21DYWxsT3Bl
cmF0aW9uKCkpOwogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBmb3IgKEdQUlJlZyByZWcg
PSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9Bc3NlbWJsZXI6
Omxhc3RSZWdpc3RlcigpOyByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6bmV4dFJlZ2lzdGVyKHJlZykp
IHsKICAgICAgICAgaWYgKHJlZ2lzdGVyc1RvUHJlc2VydmVGb3JDYWxsVGhhdE1pZ2h0VGhyb3cu
Z2V0KHJlZykpIHsKQEAgLTE0MCw3ICsxODIsNyBAQCB2b2lkIE9TUkV4aXQ6OnNwaWxsUmVnaXN0
ZXJzVG9TcGlsbFNsb3QoCiAKIHZvaWQgT1NSRXhpdDo6cmVjb3ZlclJlZ2lzdGVyc0Zyb21TcGls
bFNsb3QoQ0NhbGxIZWxwZXJzJiBqaXQsIGludDMyX3Qgc3RhY2tTcGlsbFNsb3QpCiB7Ci0gICAg
UkVMRUFTRV9BU1NFUlQobV9kZXNjcmlwdG9yLm1faXNFeGNlcHRpb25Gcm9tSlNDYWxsIHx8IG1f
ZGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uRnJvbUdldEJ5SWQpOworICAgIFJFTEVBU0VfQVNTRVJU
KG1fZGVzY3JpcHRvci5taWdodEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKCkgfHwg
bV9kZXNjcmlwdG9yLm1pZ2h0QXJyaXZlQXRPU1JFeGl0RnJvbUNhbGxPcGVyYXRpb24oKSk7CiAg
ICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgIGZvciAoR1BSUmVnIHJlZyA9IE1hY3JvQXNzZW1i
bGVyOjpmaXJzdFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVy
KCk7IHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpuZXh0UmVnaXN0ZXIocmVnKSkgewogICAgICAgICBp
ZiAocmVnaXN0ZXJzVG9QcmVzZXJ2ZUZvckNhbGxUaGF0TWlnaHRUaHJvdy5nZXQocmVnKSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHJldmlzaW9uIDE5MjI3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzYsMTMgKzEzNiwyOSBAQCBuYW1lc3BhY2UgRlRMIHsKIC8vICAgaW50cmluc2lj
cyAob3IgbWV0YS1kYXRhLCBvciBzb21ldGhpbmcpIHRvIGluZm9ybSB0aGUgYmFja2VuZCB0aGF0
IGl0J3Mgc2FmZSB0bwogLy8gICBtYWtlIHRoZSBwcmVkaWNhdGUgcGFzc2VkIHRvICdleGl0SWYo
KScgbW9yZSB0cnV0aHkuCiAKK2VudW0gY2xhc3MgRXhjZXB0aW9uVHlwZSB7CisgICAgTm9uZSwK
KyAgICBDQ2FsbEV4Y2VwdGlvbiwKKyAgICBKU0NhbGwsCisgICAgR2V0QnlJZCwKKyAgICBQdXRC
eUlkLAorICAgIExhenlTbG93UGF0aCwKKyAgICBTdWJHZW5lcmF0b3IKK307CisKIHN0cnVjdCBP
U1JFeGl0RGVzY3JpcHRvciB7CiAgICAgT1NSRXhpdERlc2NyaXB0b3IoCi0gICAgICAgIEV4aXRL
aW5kLCBEYXRhRm9ybWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlLAorICAgICAgICBFeGl0S2luZCwgRXhjZXB0aW9uVHlwZSwgRGF0YUZvcm1hdCBwcm9m
aWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwKICAgICAgICAgQ29k
ZU9yaWdpbiwgQ29kZU9yaWdpbiBvcmlnaW5Gb3JQcm9maWxlLAogICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMpOwogCisgICAgYm9vbCB3
aWxsQXJyaXZlQXRFeGl0RnJvbUluZGlyZWN0RXhjZXB0aW9uQ2hlY2soKSBjb25zdDsKKyAgICBi
b29sIG1pZ2h0QXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQoKSBjb25zdDsKKyAgICBi
b29sIG1pZ2h0QXJyaXZlQXRPU1JFeGl0RnJvbUNhbGxPcGVyYXRpb24oKSBjb25zdDsKKyAgICBi
b29sIGlzRXhjZXB0aW9uSGFuZGxlcigpIGNvbnN0OworCiAgICAgRXhpdEtpbmQgbV9raW5kOwor
ICAgIEV4Y2VwdGlvblR5cGUgbV9leGNlcHRpb25UeXBlOwogICAgIENvZGVPcmlnaW4gbV9jb2Rl
T3JpZ2luOwogICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CiAgICAg
Q29kZU9yaWdpbiBtX3NlbWFudGljQ29kZU9yaWdpbkZvckNhbGxGcmFtZUhlYWRlcjsKQEAgLTE2
MSwxMSArMTc3LDYgQEAgc3RydWN0IE9TUkV4aXREZXNjcmlwdG9yIHsKICAgICB1aW50MzJfdCBt
X3N0YWNrbWFwSUQ7CiAgICAgSGFuZGxlckluZm8gbV9iYXNlbGluZUV4Y2VwdGlvbkhhbmRsZXI7
CiAgICAgYm9vbCBtX2lzSW52YWxpZGF0aW9uUG9pbnQgOiAxOwotICAgIGJvb2wgbV9pc0V4Y2Vw
dGlvbkhhbmRsZXIgOiAxOwotICAgIGJvb2wgbV93aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVy
aWNVbndpbmQgOiAxOwotICAgIGJvb2wgbV9pc0V4Y2VwdGlvbkZyb21KU0NhbGwgOiAxOwotICAg
IGJvb2wgbV9pc0V4Y2VwdGlvbkZyb21HZXRCeUlkIDogMTsKLSAgICBib29sIG1faXNFeGNlcHRp
b25Gcm9tTGF6eVNsb3dQYXRoIDogMTsKICAgICAKICAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNl
cyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCShyZXZpc2lv
biAxOTIyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxh
dGlvbkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBzdHJ1Y3QgT1NSRXhp
dENvbXBpbGF0aW9uSW5mbyB7CiAgICAgfQogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBtX3RodW5rTGFiZWw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZ2V0QW5kUHV0QnlJ
ZENhbGxPcGVyYXRpb25FeGNlcHRpb25PU1JFeGl0RW50cmFuY2U7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fY2FsbE9wZXJhdGlvbkV4Y2VwdGlvbk9TUkV4aXRFbnRyYW5jZTsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3RodW5rSnVtcDsKICAgICBDb2RlTG9jYXRp
b25MYWJlbCBtX3RodW5rQWRkcmVzczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxOTIyNzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU0Nyw4ICs1NDcsOCBAQCBleHRlcm4gIkMiIHZvaWQqIGNvbXBpbGVGVExPU1JF
eGl0KEV4ZWNTCiAgICAgICAgIGRhdGFMb2coIiAgICBFeGl0IHN0YWNrbWFwIElEOiAiLCBleGl0
Lm1fZGVzY3JpcHRvci5tX3N0YWNrbWFwSUQsICJcbiIpOwogICAgICAgICBkYXRhTG9nKCIgICAg
Q3VycmVudCBjYWxsIHNpdGUgaW5kZXg6ICIsIGV4ZWMtPmNhbGxTaXRlSW5kZXgoKS5iaXRzKCks
ICJcbiIpOwogICAgICAgICBkYXRhTG9nKCIgICAgRXhpdCBpcyBleGNlcHRpb24gaGFuZGxlcjog
IiwgZXhpdC5tX2lzRXhjZXB0aW9uSGFuZGxlciwKLSAgICAgICAgICAgICIgd2lsbCBhcnJpdmUg
YXQgZXhpdCBmcm9tIGdlbmVyaWNVbndpbmQoKTogIiwgZXhpdC5tX2Rlc2NyaXB0b3IubV93aWxs
QXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQsIAotICAgICAgICAgICAgIiB3aWxsIGFy
cml2ZSBhdCBleGl0IGZyb20gbGF6eSBzbG93IHBhdGg6ICIsIGV4aXQubV9kZXNjcmlwdG9yLm1f
aXNFeGNlcHRpb25Gcm9tTGF6eVNsb3dQYXRoLCAiXG4iKTsKKyAgICAgICAgICAgICIgbWlnaHQg
YXJyaXZlIGF0IGV4aXQgZnJvbSBnZW5lcmljVW53aW5kKCk6ICIsIGV4aXQubV9kZXNjcmlwdG9y
Lm1pZ2h0QXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQoKSwgCisgICAgICAgICAgICAi
IHdpbGwgYXJyaXZlIGF0IGV4aXQgZnJvbSBsYXp5IHNsb3cgcGF0aDogIiwgZXhpdC5tX2Rlc2Ny
aXB0b3IubV9leGNlcHRpb25UeXBlID09IEV4Y2VwdGlvblR5cGU6OkxhenlTbG93UGF0aCwgIlxu
Iik7CiAgICAgICAgIGRhdGFMb2coIiAgICBFeGl0IHZhbHVlczogIiwgZXhpdC5tX2Rlc2NyaXB0
b3IubV92YWx1ZXMsICJcbiIpOwogICAgICAgICBpZiAoIWV4aXQubV9kZXNjcmlwdG9yLm1fbWF0
ZXJpYWxpemF0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBNYXRl
cmlhbGl6YXRpb25zOlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2Z0bC10cnktY2F0Y2gtYXJpdGgtc3ViLWV4Y2VwdGlvbi5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0bC10cnktY2F0Y2gtYXJpdGgtc3Vi
LWV4Y2VwdGlvbi5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvZnRsLXRyeS1jYXRjaC1hcml0aC1zdWItZXhjZXB0aW9uLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTkgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInVoIG9oIik7Cit9CisKK2xldCBmbGFnID0gZmFsc2U7
CitsZXQgbyA9IHsKKyAgICB2YWx1ZU9mKCkgeworICAgICAgICBpZiAoZmxhZykKKyAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiYnkgYnkiKTsKKyAgICAgICAgcmV0dXJuIDEzLjU7CisgICAg
fQorfTsKK25vSW5saW5lKG8udmFsdWVPZik7CisKK2Z1bmN0aW9uIGJheigpIHsgcmV0dXJuIDEu
NTsgfQorbm9JbmxpbmUoYmF6KTsKKworZnVuY3Rpb24gZm9vKHgsIG8pIHsKKyAgICBsZXQgciA9
IGJheigpOworICAgIHRyeSB7CisgICAgICAgIHIgPSB4IC0gbyAtIHI7CisgICAgfSBjYXRjaChl
KSB7IH0KKyAgICByZXR1cm4gcjsKK30KK25vSW5saW5lKGZvbyk7CisKK2xldCB4ID0gMjAuNTsK
K2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGFzc2VydChmb28oeCwgbykg
PT09IDUuNSk7Cit9CitmbGFnID0gdHJ1ZTsKK2Fzc2VydChmb28oeCwgbykgPT09IDEuNSk7CisK
KworZnVuY3Rpb24gYmFyKHgsIG8pIHsKKyAgICBsZXQgY2F1Z2h0RXhjZXB0aW9uID0gZmFsc2U7
CisgICAgdmFyIHIgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIC8vIFRoaXMgdGVzdHMgYWxp
YXNpbmcgb2YgbGVmdC9yaWdodCB3aXRoIHJlc3VsdCByZWdpc3RlciBpbiBhIFN1YkdlbmVyYXRv
cgorICAgICAgICAvLyBhbmQgZW5zdXJlcyB0aGF0IHRoZSBzdWIgd2lsbCBzcGlsbCB0aGUgcmVn
aXN0ZXIgcHJvcGVybHkgYW5kIHRoYXQgd2UgdmFsdWUKKyAgICAgICAgLy8gcmVjb3ZlciBwcm9w
ZXJseS4KKyAgICAgICAgciA9IHggLSBvOworICAgIH0gY2F0Y2goZSkgeworICAgICAgICBjYXVn
aHRFeGNlcHRpb24gPSB0cnVlOworICAgICAgICBhc3NlcnQociA9PT0gbnVsbCk7CisgICAgfQor
ICAgIGlmICghY2F1Z2h0RXhjZXB0aW9uKQorICAgICAgICBhc3NlcnQociA9PT0gNyk7CisgICAg
cmV0dXJuIGNhdWdodEV4Y2VwdGlvbjsKK30gCitub0lubGluZShiYXIpOworCitmbGFnID0gZmFs
c2U7Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICBhc3NlcnQoYmFyKHgs
IG8pID09PSBmYWxzZSk7Cit9CitmbGFnID0gdHJ1ZTsKK2Fzc2VydChiYXIoeCwgbykgPT09IHRy
dWUpOwo=
</data>
<flag name="review"
          id="290317"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265490</attachid>
            <date>2015-11-13 12:48:27 -0800</date>
            <delta_ts>2015-11-13 13:36:20 -0800</delta_ts>
            <desc>patch for landing.</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>40181</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyNDM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBA
CisyMDE1LTExLTEzICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IHN1YiBJQyBkb2VzIG5vdCBwcm9wZXJseSBoYW5kbGUgZXhjZXB0aW9uIGhhbmRsaW5nIG5vdyB0
aGF0IHRyeS9jYXRjaCBpcyBjb21waWxlZCBpbiB0aGUgRlRMCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEwODAKKworICAgICAgICBSZXZpZXdlZCBi
eSBHZW9mZnJleSBHYXJlbi4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgcHJvcGVy
IGV4Y2VwdGlvbiBoYW5kbGluZyBmb3IgQXJpdGhTdWJzIHdpdGggYmluYXJ5VXNlS2luZCBhcwor
ICAgICAgICBVbnR5cGVkVXNlIGluc2lkZSB0cnkvY2F0Y2guICBXZSBpbXBsZW1lbnQgdGhpcyBp
biBhIHZlcnkgc2ltaWxhciB3YXkgYXMgd2UgaW1wbGVtZW50IAorICAgICAgICBleGNlcHRpb24g
aGFuZGxpbmcgZnJvbSBHZXRCeUlkL1B1dEJ5SWQvTGF6eVNsb3dQYXRocyBjYWxsT3BlcmF0aW9u
IGNhbGxzLiBXZSBkbyB0aGUgbmVlZGVkIAorICAgICAgICBzcGlsbGluZyBpZiB0aGUgcmVzdWx0
IGlzIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHRoZSBsZWZ0L3JpZ2h0IHJlZ2lzdGVyIGJlY2F1c2Ug
aW4gdGhlIGV2ZW50CisgICAgICAgIG9mIGFuIGV4Y2VwdGlvbiwgd2UgZG9uJ3Qgd2FudCB0byBk
byB2YWx1ZSByZWNvdmVyeSBvbiB0aGUgZ2FyYmFnZSByZXN1bHQsIHdlCisgICAgICAgIHdhbnQg
dG8gZG8gaXQgb24gdGhlIG9yaWdpbmFsIGxocy9yaHMgb2YgdGhlIG9wZXJhdGlvbi4KKworICAg
ICAgICBUaGlzIHBhdGNoIGFsc28gZG9lcyBzb21lIHJlZmFjdG9yaW5nLiBObyBsb25nZXIgZG9l
cyBPU1JFeGl0RGVzY3JpcHRvcgorICAgICAgICBoYXZlIGEgbG9uZyBsaXN0IG9mIGJvb2xlYW5z
IHRoYXQgY29ycmVzcG9uZCB0byBkaWZmZXJlbnQgT1NSIGV4aXQgdHlwZXMuCisgICAgICAgIEl0
IG5vdyBqdXN0IGhhcyBhbiBlbnVtIHByb3BlcnR5IGNhbGxlZCBFeGNlcHRpb25UeXBlIHRoYXQg
dGVsbHMgdXMKKyAgICAgICAgd2hhdCB0eXBlIG9mIGV4Y2VwdGlvbiBoYW5kbGVyIHRoZSBPU1Ig
ZXhpdCBpcy4gVGhlbiwgd2UgY2FuIGp1c3QgYXNrCisgICAgICAgIGludGVyZXN0aW5nIHF1ZXN0
aW9ucyBhYm91dCB0aGUgT1NSIGV4aXQgYW5kIGdldCBhbnN3ZXJzIGJhc2VkIG9uIGl0cworICAg
ICAgICBFeGNlcHRpb25UeXBlIHByb3BlcnR5LgorCisgICAgICAgICogZnRsL0ZUTENvbXBpbGUu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6Om1tQWxsb2NhdGVEYXRhU2VjdGlvbik6CisgICAgICAg
ICogZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpFeGNlcHRpb25IYW5kbGVyTWFuYWdlcjo6YWRkTmV3RXhpdCk6CisgICAgICAgIChKU0M6OkZU
TDo6RXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OmNhbGxPcGVyYXRpb25FeGNlcHRpb25UYXJnZXQp
OgorICAgICAgICAoSlNDOjpGVEw6OkV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpsYXp5U2xvd1Bh
dGhFeGNlcHRpb25UYXJnZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4Y2VwdGlvbkhhbmRsZXJN
YW5hZ2VyOjpnZXRCeUlkT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhjZXB0aW9uSGFu
ZGxlck1hbmFnZXI6OnN1Yk9TUkV4aXQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4Y2VwdGlvbkhh
bmRsZXJNYW5hZ2VyOjpnZXRDYWxsT1NSRXhpdENvbW1vbik6CisgICAgICAgIChKU0M6OkZUTDo6
RXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OmdldE9yUHV0QnlJZENhbGxPcGVyYXRpb25FeGNlcHRp
b25UYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFu
YWdlci5oOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OkV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKToKKyAgICAgICAgKiBm
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0xMVk06Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlQXJpdGhBZGRPclN1Yik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSW52YWxpZGF0aW9uUG9p
bnQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmdldEJ5SWQpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmxhenlTbG93UGF0aCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y2FsbENoZWNrKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjphcHBlbmRPU1JFeGl0QXJndW1lbnRz
Rm9yUGF0Y2hwb2ludElmV2lsbENhdGNoRXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9MTFZNOjplbWl0QnJhbmNoVG9PU1JFeGl0SWZXaWxsQ2F0Y2hFeGNlcHRp
b24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06Omxvd0Jsb2NrKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjphcHBlbmRPU1JFeGl0RGVz
Y3JpcHRvcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6YXBwZW5k
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6YnVpbGRF
eGl0QXJndW1lbnRzKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6T1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKToKKyAgICAgICAg
KEpTQzo6RlRMOjpPU1JFeGl0RGVzY3JpcHRvcjo6d2lsbEFycml2ZUF0RXhpdEZyb21JbmRpcmVj
dEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0RGVzY3JpcHRvcjo6
bWlnaHRBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJpY1Vud2luZCk6CisgICAgICAgIChKU0M6OkZU
TDo6T1NSRXhpdERlc2NyaXB0b3I6Om1pZ2h0QXJyaXZlQXRPU1JFeGl0RnJvbUNhbGxPcGVyYXRp
b24pOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpuZWVkc1JlZ2lzdGVy
UmVjb3ZlcnlPbkdlbmVyaWNVbndpbmRPU1JFeGl0UGF0aCk6CisgICAgICAgIChKU0M6OkZUTDo6
T1NSRXhpdERlc2NyaXB0b3I6OmlzRXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6OkZU
TDo6T1NSRXhpdERlc2NyaXB0b3I6OnZhbGlkYXRlUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6
OkZUTDo6T1NSRXhpdDo6T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6Y29k
ZUxvY2F0aW9uRm9yUmVwYXRjaCk6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6Z2F0aGVy
UmVnaXN0ZXJzVG9TcGlsbEZvckNhbGxJZkV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6
T1NSRXhpdDo6c3BpbGxSZWdpc3RlcnNUb1NwaWxsU2xvdCk6CisgICAgICAgIChKU0M6OkZUTDo6
T1NSRXhpdDo6cmVjb3ZlclJlZ2lzdGVyc0Zyb21TcGlsbFNsb3QpOgorICAgICAgICAqIGZ0bC9G
VExPU1JFeGl0Lmg6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaDoK
KyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0Q29tcGlsYXRpb25JbmZvOjpPU1JFeGl0Q29tcGls
YXRpb25JbmZvKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpjb21waWxlRlRMT1NSRXhpdCk6CisgICAgICAgICogdGVzdHMvc3RyZXNz
L2Z0bC10cnktY2F0Y2gtYXJpdGgtc3ViLWV4Y2VwdGlvbi5qczogQWRkZWQuCisgICAgICAgIChh
c3NlcnQpOgorICAgICAgICAobGV0Lm8udmFsdWVPZik6CisgICAgICAgIChiYXopOgorICAgICAg
ICAoZm9vKToKKyAgICAgICAgKGJhcik6CisKIDIwMTUtMTEtMTMgIENhaXRsaW4gUG90dGVyICA8
Y2FpdHBvdHRlcjg4QGdtYWlsLmNvbT4KIAogICAgICAgICBBbGxvdyBhbnkgTGVmdEhhbmRTaWRl
RXhwcmVzc2lvbiBhcyBhIHZhbGlkIEFzc2lnbm1lbnRFbGVtZW50CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE5MjQzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYz
OSwyMSArNjM5LDM2IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IHN0YXRlLmppdENv
ZGUtPm9zckV4aXQubGFzdCgpOwotICAgICAgICAgICAgaWYgKGV4aXREZXNjcmlwdG9yLm1fd2ls
bEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kIHx8IGV4aXREZXNjcmlwdG9yLm1faXNF
eGNlcHRpb25Gcm9tTGF6eVNsb3dQYXRoKSB7CisgICAgICAgICAgICBpZiAoZXhpdERlc2NyaXB0
b3Iud2lsbEFycml2ZUF0RXhpdEZyb21JbmRpcmVjdEV4Y2VwdGlvbkNoZWNrKCkpIHsKICAgICAg
ICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbal0ucmVj
b3JkOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQubV9kZXNjcmlwdG9yLm1f
c2VtYW50aWNDb2RlT3JpZ2luRm9yQ2FsbEZyYW1lSGVhZGVyLmlzU2V0KCkpOwogICAgICAgICAg
ICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IHN0YXRlLmppdENvZGUtPmNvbW1v
bi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KGV4aXQubV9kZXNjcmlwdG9yLm1fc2VtYW50aWNDb2Rl
T3JpZ2luRm9yQ2FsbEZyYW1lSGVhZGVyKTsKICAgICAgICAgICAgICAgICBleGl0Lm1fZXhjZXB0
aW9uSGFuZGxlckNhbGxTaXRlSW5kZXggPSBjYWxsU2l0ZUluZGV4OwogICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmFkZE5ld0V4aXQoaXRlci0+dmFsdWVbal0uaW5kZXgs
IHN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpIC0gMSk7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoZXhpdERlc2NyaXB0b3IubV9pc0V4Y2VwdGlvbkZyb21KU0NhbGwpCisgICAgICAgICAgICAg
ICAgLy8gU3VicyBhbmQgR2V0QnlJZHMgaGF2ZSBhbiBpbnRlcmVzdGluZyByZWdpc3RlciBwcmVz
ZXJ2YXRpb24gc3RvcnksCisgICAgICAgICAgICAgICAgLy8gc2VlIGNvbW1lbnQgYmVsb3cgYXQg
R2V0QnlJZCB0byByZWFkIGFib3V0IGl0LgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgLy8gV2Ugc2V0IHRoZSByZWdpc3RlcnMgbmVlZGluZyBzcGlsbGFnZSBoZXJlIGJlY2F1
c2UgdGhleSBuZWVkIHRvIGJlIHNldAorICAgICAgICAgICAgICAgIC8vIGJlZm9yZSB3ZSBnZW5l
cmF0ZSBPU1IgZXhpdHMgc28gdGhlIGV4aXQga25vd3MgdG8gZG8gdGhlIHByb3BlciByZWNvdmVy
eS4KKyAgICAgICAgICAgICAgICBpZiAoZXhpdERlc2NyaXB0b3IubV9leGNlcHRpb25UeXBlID09
IEV4Y2VwdGlvblR5cGU6OkpTQ2FsbCkgeworICAgICAgICAgICAgICAgICAgICAvLyBDYWxsIHBh
dGNocG9pbnRzIG1pZ2h0IGhhdmUgdmFsdWVzIHdlIHdhbnQgdG8gZG8gdmFsdWUgcmVjb3ZlcnkK
KyAgICAgICAgICAgICAgICAgICAgLy8gb24gaW5zaWRlIHZvbGF0aWxlIHJlZ2lzdGVycy4gV2Ug
bmVlZCB0byBjb2xsZWN0IHRoZSB2b2xhdGlsZQorICAgICAgICAgICAgICAgICAgICAvLyByZWdp
c3RlcnMgd2Ugd2FudCB0byBkbyB2YWx1ZSByZWNvdmVyeSBvbiBoZXJlIGJlY2F1c2UgdGhleSBt
dXN0CisgICAgICAgICAgICAgICAgICAgIC8vIGJlIHByZXNlcnZlZCB0byB0aGUgc3RhY2sgYmVm
b3JlIHRoZSBjYWxsLCB0aGF0IHdheSB0aGUgT1NSIGV4aXQKKyAgICAgICAgICAgICAgICAgICAg
Ly8gZXhjZXB0aW9uIGhhbmRsZXIgY2FuIHJlY292ZXIgdGhlbSBpbnRvIHRoZSBwcm9wZXIgcmVn
aXN0ZXJzLgogICAgICAgICAgICAgICAgICAgICBleGl0LmdhdGhlclJlZ2lzdGVyc1RvU3BpbGxG
b3JDYWxsSWZFeGNlcHRpb24oc3RhY2ttYXBzLCByZWNvcmQpOwotICAgICAgICAgICAgICAgIGlm
IChleGl0RGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uRnJvbUdldEJ5SWQpIHsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGV4aXREZXNjcmlwdG9yLm1fZXhjZXB0aW9uVHlwZSA9PSBFeGNlcHRp
b25UeXBlOjpHZXRCeUlkKSB7CiAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBy
ZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUigpOwogICAgICAgICAgICAgICAgICAgICBHUFJS
ZWcgYmFzZSA9IHJlY29yZC5sb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaGFzIGFuIGludGVyZXN0aW5nIHN0b3J5LCBzZWUgY29tbWVudCBiZWxv
dyBkZXNjcmliaW5nIGl0LgotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IGJhc2Up
CisgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlID09IHJlc3VsdCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4aXQucmVnaXN0ZXJzVG9QcmVzZXJ2ZUZvckNhbGxUaGF0TWlnaHRUaHJvdy5z
ZXQoYmFzZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChleGl0RGVzY3JpcHRvci5tX2V4
Y2VwdGlvblR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6U3ViR2VuZXJhdG9yKSB7CisgICAgICAgICAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUigp
OworICAgICAgICAgICAgICAgICAgICBHUFJSZWcgbGVmdCA9IHJlY29yZC5sb2NhdGlvbnNbMV0u
ZGlyZWN0R1BSKCk7CisgICAgICAgICAgICAgICAgICAgIEdQUlJlZyByaWdodCA9IHJlY29yZC5s
b2NhdGlvbnNbMl0uZGlyZWN0R1BSKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQg
PT0gbGVmdCB8fCByZXN1bHQgPT0gcmlnaHQpCisgICAgICAgICAgICAgICAgICAgICAgICBleGl0
LnJlZ2lzdGVyc1RvUHJlc2VydmVGb3JDYWxsVGhhdE1pZ2h0VGhyb3cuc2V0KHJlc3VsdCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC02ODQsNyArNjk5
LDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAg
ICAgaW5mby5tX3RodW5rQWRkcmVzcyA9IGxpbmtCdWZmZXItPmxvY2F0aW9uT2YoaW5mby5tX3Ro
dW5rTGFiZWwpOwogICAgICAgICAgICAgZXhpdC5tX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5r
QnVmZmVyLT5vZmZzZXRPZihpbmZvLm1fdGh1bmtKdW1wKTsKIAotICAgICAgICAgICAgaWYgKGV4
aXQubV9kZXNjcmlwdG9yLm1fd2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKSB7
CisgICAgICAgICAgICBpZiAoZXhpdC5tX2Rlc2NyaXB0b3IubWlnaHRBcnJpdmVBdE9TUkV4aXRG
cm9tR2VuZXJpY1Vud2luZCgpKSB7CiAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8gbmV3SGFu
ZGxlciA9IGV4aXQubV9kZXNjcmlwdG9yLm1fYmFzZWxpbmVFeGNlcHRpb25IYW5kbGVyOwogICAg
ICAgICAgICAgICAgIG5ld0hhbmRsZXIuc3RhcnQgPSBleGl0Lm1fZXhjZXB0aW9uSGFuZGxlckNh
bGxTaXRlSW5kZXguYml0cygpOwogICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuZW5kID0gZXhp
dC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUluZGV4LmJpdHMoKSArIDE7CkBAIC03MTcsNyAr
NzMyLDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogCiAgICAg
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCwgQ29kZUxvY2F0aW9u
TGFiZWw+PiBleGNlcHRpb25KdW1wc1RvTGluazsKICAgICAgICAgYXV0byBhZGROZXdFeGNlcHRp
b25KdW1wSWZOZWNlc3NhcnkgPSBbJl0gKHVpbnQzMl90IHJlY29yZEluZGV4KSB7Ci0gICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25UYXJnZXQgPSBleGNlcHRpb25IYW5kbGVy
TWFuYWdlci5nZXRPclB1dEJ5SWRDYWxsT3BlcmF0aW9uRXhjZXB0aW9uVGFyZ2V0KHJlY29yZElu
ZGV4KTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdldCA9IGV4
Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNhbGxPcGVyYXRpb25FeGNlcHRpb25UYXJnZXQocmVjb3Jk
SW5kZXgpOwogICAgICAgICAgICAgaWYgKCFleGNlcHRpb25UYXJnZXQpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZXhjZXB0aW9uSnVtcHNUb0xpbmsuYXBwZW5k
KApAQCAtODc3LDggKzg5MiwxNSBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFj
a01hcHMoCiAgICAgICAgICAgICAgICAgR1BSUmVnIHJpZ2h0ID0gcmVjb3JkLmxvY2F0aW9uc1sy
XS5kaXJlY3RHUFIoKTsKIAogICAgICAgICAgICAgICAgIGFyaXRoU3ViLm1fc2xvd1BhdGhTdGFy
dHMuYXBwZW5kKHNsb3dQYXRoSklULmxhYmVsKCkpOworICAgICAgICAgICAgICAgIGJvb2wgYWRk
ZWRVbmlxdWVFeGNlcHRpb25KdW1wID0gYWRkTmV3RXhjZXB0aW9uSnVtcElmTmVjZXNzYXJ5KGl0
ZXItPnZhbHVlW2ldLmluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IGxlZnQg
fHwgcmVzdWx0ID09IHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc2l0dWF0
aW9uIGhhcyBhIHJlYWxseSBpbnRlcmVzdGluZyByZWdpc3RlciBwcmVzZXJ2YXRpb24gc3Rvcnku
CisgICAgICAgICAgICAgICAgICAgIC8vIFNlZSBjb21tZW50IGFib3ZlIGZvciBHZXRCeUlkcy4K
KyAgICAgICAgICAgICAgICAgICAgaWYgKE9TUkV4aXQqIGV4aXQgPSBleGNlcHRpb25IYW5kbGVy
TWFuYWdlci5zdWJPU1JFeGl0KGl0ZXItPnZhbHVlW2ldLmluZGV4KSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGV4aXQtPnNwaWxsUmVnaXN0ZXJzVG9TcGlsbFNsb3Qoc2xvd1BhdGhKSVQsIGpz
Q2FsbFRoYXRNaWdodFRocm93U3BpbGxPZmZzZXQpOworICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRo
SklULCBjb2RlT3JpZ2luLCAmZXhjZXB0aW9uVGFyZ2V0LAorICAgICAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24oc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2RlT3JpZ2luLCBh
ZGRlZFVuaXF1ZUV4Y2VwdGlvbkp1bXAgPyAmZXhjZXB0aW9uSnVtcHNUb0xpbmsubGFzdCgpLmZp
cnN0IDogJmV4Y2VwdGlvblRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uVmFs
dWVTdWIsIHJlc3VsdCwgbGVmdCwgcmlnaHQpLmNhbGwoKTsKIAogICAgICAgICAgICAgICAgIGFy
aXRoU3ViLm1fc2xvd1BhdGhEb25lLmFwcGVuZChzbG93UGF0aEpJVC5qdW1wKCkpOwpAQCAtMTA1
OCw3ICsxMDgwLDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAog
ICAgICAgICBPU1JFeGl0JiBleGl0ID0gaml0Q29kZS0+b3NyRXhpdFtleGl0SW5kZXhdOwogICAg
ICAgICBWZWN0b3I8Y29uc3Qgdm9pZCo+IGNvZGVBZGRyZXNzZXM7CiAKLSAgICAgICAgaWYgKGV4
aXQubV9kZXNjcmlwdG9yLm1fd2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kIHx8
IGV4aXQubV9kZXNjcmlwdG9yLm1faXNFeGNlcHRpb25Gcm9tTGF6eVNsb3dQYXRoKSAvLyBUaGlz
IGlzIHJlYWNoZWQgYnkgYSBqdW1wIGZyb20gZ2VuZXJpY1Vud2luZCBvciBhIGp1bXAgZnJvbSBh
IGxhenkgc2xvdyBwYXRoLgorICAgICAgICBpZiAoZXhpdC5tX2Rlc2NyaXB0b3Iud2lsbEFycml2
ZUF0RXhpdEZyb21JbmRpcmVjdEV4Y2VwdGlvbkNoZWNrKCkpIC8vIFRoaXMganVtcCBkb2Vzbid0
IGhhcHBlbiBkaXJlY3RseSBmcm9tIGEgcGF0Y2hwb2ludC9zdGFja21hcCB3ZSBjb21waWxlLiBJ
dCBoYXBwZW5zIGluZGlyZWN0bHkgdGhyb3VnaCBhbiBleGNlcHRpb24gY2hlY2sgc29tZXdoZXJl
LgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBTdGFja01hcHM6OlJl
Y29yZCYgcmVjb3JkID0gaml0Q29kZS0+c3RhY2ttYXBzLnJlY29yZHNbZXhpdC5tX3N0YWNrbWFw
UmVjb3JkSW5kZXhdOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRp
b25IYW5kbGVyTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5jcHAJKHJldmlzaW9uIDE5MjQzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMCArNDEsMjAgQEAgdm9pZCBFeGNlcHRpb25IYW5kbGVy
TWFuYWdlcjo6YWRkTmV3RXhpdAogewogICAgIG1fbWFwLmFkZChzdGFja21hcFJlY29yZEluZGV4
LCBvc3JFeGl0SW5kZXgpOwogICAgIE9TUkV4aXQmIGV4aXQgPSBtX3N0YXRlLmppdENvZGUtPm9z
ckV4aXRbb3NyRXhpdEluZGV4XTsKLSAgICBSRUxFQVNFX0FTU0VSVChleGl0Lm1fZGVzY3JpcHRv
ci5tX3dpbGxBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJpY1Vud2luZCB8fCBleGl0Lm1fZGVzY3Jp
cHRvci5tX2lzRXhjZXB0aW9uRnJvbUxhenlTbG93UGF0aCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
ZXhpdC5tX2Rlc2NyaXB0b3Iud2lsbEFycml2ZUF0RXhpdEZyb21JbmRpcmVjdEV4Y2VwdGlvbkNo
ZWNrKCkpOwogfQogCi1Db2RlTG9jYXRpb25MYWJlbCBFeGNlcHRpb25IYW5kbGVyTWFuYWdlcjo6
Z2V0T3JQdXRCeUlkQ2FsbE9wZXJhdGlvbkV4Y2VwdGlvblRhcmdldCh1aW50MzJfdCBzdGFja21h
cFJlY29yZEluZGV4KQorQ29kZUxvY2F0aW9uTGFiZWwgRXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6
OmNhbGxPcGVyYXRpb25FeGNlcHRpb25UYXJnZXQodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRl
eCkKIHsKICAgICBhdXRvIGZpbmRSZXN1bHQgPSBtX21hcC5maW5kKHN0YWNrbWFwUmVjb3JkSW5k
ZXgpOwogICAgIGlmIChmaW5kUmVzdWx0ID09IG1fbWFwLmVuZCgpKQogICAgICAgICByZXR1cm4g
Q29kZUxvY2F0aW9uTGFiZWwoKTsKIAogICAgIHNpemVfdCBvc3JFeGl0SW5kZXggPSBmaW5kUmVz
dWx0LT52YWx1ZTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlLmppdENvZGUtPm9zckV4aXRb
b3NyRXhpdEluZGV4XS5tX2Rlc2NyaXB0b3IubV93aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVy
aWNVbndpbmQpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhdGUuaml0Q29kZS0+b3NyRXhpdFtv
c3JFeGl0SW5kZXhdLm1fZGVzY3JpcHRvci5taWdodEFycml2ZUF0T1NSRXhpdEZyb21DYWxsT3Bl
cmF0aW9uKCkpOwogICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX3N0YXRlLmZp
bmFsaXplci0+b3NyRXhpdFtvc3JFeGl0SW5kZXhdOwotICAgIFJFTEVBU0VfQVNTRVJUKGluZm8u
bV9nZXRBbmRQdXRCeUlkQ2FsbE9wZXJhdGlvbkV4Y2VwdGlvbk9TUkV4aXRFbnRyYW5jZS5pc1Nl
dCgpKTsKLSAgICByZXR1cm4gbV9zdGF0ZS5maW5hbGl6ZXItPmV4aXRUaHVua3NMaW5rQnVmZmVy
LT5sb2NhdGlvbk9mKGluZm8ubV9nZXRBbmRQdXRCeUlkQ2FsbE9wZXJhdGlvbkV4Y2VwdGlvbk9T
UkV4aXRFbnRyYW5jZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaW5mby5tX2NhbGxPcGVyYXRpb25F
eGNlcHRpb25PU1JFeGl0RW50cmFuY2UuaXNTZXQoKSk7CisgICAgcmV0dXJuIG1fc3RhdGUuZmlu
YWxpemVyLT5leGl0VGh1bmtzTGlua0J1ZmZlci0+bG9jYXRpb25PZihpbmZvLm1fY2FsbE9wZXJh
dGlvbkV4Y2VwdGlvbk9TUkV4aXRFbnRyYW5jZSk7CiB9CiAKIENvZGVMb2NhdGlvbkxhYmVsIEV4
Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpsYXp5U2xvd1BhdGhFeGNlcHRpb25UYXJnZXQodWludDMy
X3Qgc3RhY2ttYXBSZWNvcmRJbmRleCkKQEAgLTY0LDcgKzY0LDcgQEAgQ29kZUxvY2F0aW9uTGFi
ZWwgRXhjZXB0aW9uSGFuZGxlck1hbmFnZQogICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFi
ZWwoKTsKIAogICAgIHNpemVfdCBvc3JFeGl0SW5kZXggPSBmaW5kUmVzdWx0LT52YWx1ZTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlLmppdENvZGUtPm9zckV4aXRbb3NyRXhpdEluZGV4XS5t
X2Rlc2NyaXB0b3IubV9pc0V4Y2VwdGlvbkZyb21MYXp5U2xvd1BhdGgpOworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fc3RhdGUuaml0Q29kZS0+b3NyRXhpdFtvc3JFeGl0SW5kZXhdLm1fZGVzY3JpcHRv
ci5tX2V4Y2VwdGlvblR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6TGF6eVNsb3dQYXRoKTsKICAgICBP
U1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9zdGF0ZS5maW5hbGl6ZXItPm9zckV4aXRb
b3NyRXhpdEluZGV4XTsKICAgICBSRUxFQVNFX0FTU0VSVChpbmZvLm1fdGh1bmtMYWJlbC5pc1Nl
dCgpKTsKICAgICByZXR1cm4gbV9zdGF0ZS5maW5hbGl6ZXItPmV4aXRUaHVua3NMaW5rQnVmZmVy
LT5sb2NhdGlvbk9mKGluZm8ubV90aHVua0xhYmVsKTsKQEAgLTc3LDcgKzc3LDE4IEBAIE9TUkV4
aXQqIEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpnZXRCeUkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgc2l6ZV90IG9zckV4aXRJbmRleCA9IGZpbmRSZXN1bHQtPnZhbHVlOwogICAgIE9T
UkV4aXQqIGV4aXQgPSAmbV9zdGF0ZS5qaXRDb2RlLT5vc3JFeGl0W29zckV4aXRJbmRleF07Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoZXhpdC0+bV9kZXNjcmlwdG9yLm1faXNFeGNlcHRpb25Gcm9tR2V0
QnlJZCk7CisgICAgUkVMRUFTRV9BU1NFUlQoZXhpdC0+bV9kZXNjcmlwdG9yLm1fZXhjZXB0aW9u
VHlwZSA9PSBFeGNlcHRpb25UeXBlOjpHZXRCeUlkKTsKKyAgICByZXR1cm4gZXhpdDsgCit9CisK
K09TUkV4aXQqIEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpzdWJPU1JFeGl0KHVpbnQzMl90IHN0
YWNrbWFwUmVjb3JkSW5kZXgpCit7CisgICAgYXV0byBmaW5kUmVzdWx0ID0gbV9tYXAuZmluZChz
dGFja21hcFJlY29yZEluZGV4KTsKKyAgICBpZiAoZmluZFJlc3VsdCA9PSBtX21hcC5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgc2l6ZV90IG9zckV4aXRJbmRleCA9IGZpbmRS
ZXN1bHQtPnZhbHVlOworICAgIE9TUkV4aXQqIGV4aXQgPSAmbV9zdGF0ZS5qaXRDb2RlLT5vc3JF
eGl0W29zckV4aXRJbmRleF07CisgICAgUkVMRUFTRV9BU1NFUlQoZXhpdC0+bV9kZXNjcmlwdG9y
Lm1fZXhjZXB0aW9uVHlwZSA9PSBFeGNlcHRpb25UeXBlOjpTdWJHZW5lcmF0b3IpOwogICAgIHJl
dHVybiBleGl0OyAKIH0KIApAQCAtODgsNyArOTksNyBAQCBPU1JFeGl0KiBFeGNlcHRpb25IYW5k
bGVyTWFuYWdlcjo6Z2V0Q2FsCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHNpemVfdCBv
c3JFeGl0SW5kZXggPSBmaW5kUmVzdWx0LT52YWx1ZTsKICAgICBPU1JFeGl0KiBleGl0ID0gJm1f
c3RhdGUuaml0Q29kZS0+b3NyRXhpdFtvc3JFeGl0SW5kZXhdOwotICAgIFJFTEVBU0VfQVNTRVJU
KGV4aXQtPm1fZGVzY3JpcHRvci5tX2lzRXhjZXB0aW9uRnJvbUpTQ2FsbCk7CisgICAgUkVMRUFT
RV9BU1NFUlQoZXhpdC0+bV9kZXNjcmlwdG9yLm1fZXhjZXB0aW9uVHlwZSA9PSBFeGNlcHRpb25U
eXBlOjpKU0NhbGwpOwogICAgIHJldHVybiBleGl0OyAKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaAko
cmV2aXNpb24gMTkyNDM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRp
b25IYW5kbGVyTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMCArNTcsMTEgQEAgcHVi
bGljOgogCiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIG9ubHkgbWFrZSBzZW5zZSB0byBiZSBjYWxs
ZWQgYWZ0ZXIgd2UndmUgZ2VuZXJhdGVkIHRoZSBPU1IKICAgICAvLyBleGl0IHRodW5rcyBhbmQg
YWxsb2NhdGVkIHRoZSBPU1IgZXhpdCB0aHVua3MnIGxpbmsgYnVmZmVyLgotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGdldE9yUHV0QnlJZENhbGxPcGVyYXRpb25FeGNlcHRpb25UYXJnZXQodWludDMy
X3Qgc3RhY2ttYXBSZWNvcmRJbmRleCk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbE9wZXJh
dGlvbkV4Y2VwdGlvblRhcmdldCh1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4KTsKICAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYXp5U2xvd1BhdGhFeGNlcHRpb25UYXJnZXQodWludDMyX3Qgc3Rh
Y2ttYXBSZWNvcmRJbmRleCk7CiAKICAgICBPU1JFeGl0KiBnZXRCeUlkT1NSRXhpdCh1aW50MzJf
dCBzdGFja21hcFJlY29yZEluZGV4KTsKKyAgICBPU1JFeGl0KiBzdWJPU1JFeGl0KHVpbnQzMl90
IHN0YWNrbWFwUmVjb3JkSW5kZXgpOwogICAgIE9TUkV4aXQqIGdldENhbGxPU1JFeGl0KHVpbnQz
Ml90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIGNvbnN0IEpTQ2FsbCYpOwogICAgIE9TUkV4aXQqIGdl
dENhbGxPU1JFeGl0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIGNvbnN0IEpTVGFpbENh
bGwmKTsKICAgICBPU1JFeGl0KiBnZXRDYWxsT1NSRXhpdCh1aW50MzJfdCBzdGFja21hcFJlY29y
ZEluZGV4LCBjb25zdCBKU0NhbGxWYXJhcmdzJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxOTI0
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDIzICs1MywyNiBAQCB2b2lkIEV4aXRUaHVua0dlbmVy
YXRvcjo6ZW1pdFRodW5rKHVuc2lnCiAgICAgCiAgICAgaW5mby5tX3RodW5rTGFiZWwgPSBsYWJl
bCgpOwogCi0gICAgaWYgKGV4aXQubV9kZXNjcmlwdG9yLm1fd2lsbEFycml2ZUF0T1NSRXhpdEZy
b21HZW5lcmljVW53aW5kKSB7CisgICAgSnVtcCBqdW1wVG9QdXNoSW5kZXhGcm9tR2VuZXJpY1Vu
d2luZDsKKyAgICBpZiAoZXhpdC5tX2Rlc2NyaXB0b3IubWlnaHRBcnJpdmVBdE9TUkV4aXRGcm9t
R2VuZXJpY1Vud2luZCgpKSB7CiAgICAgICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUNhbGxl
ZVNhdmVzQnVmZmVyKCk7CiAgICAgICAgIGxvYWRQdHIodm0oKS0+YWRkcmVzc09mQ2FsbEZyYW1l
Rm9yQ2F0Y2goKSwgZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKC0gc3RhdGljX2Nhc3Q8aW50NjRfdD4obV9zdGF0ZS5qaXRDb2RlLT5zdGFja21hcHMu
c3RhY2tTaXplRm9yTG9jYWxzKCkpKSwgCiAgICAgICAgICAgICBmcmFtZVBvaW50ZXJSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCi0gICAgICAgIGlmIChleGl0Lm1fZGVzY3JpcHRv
ci5tX2lzRXhjZXB0aW9uRnJvbUpTQ2FsbCkKKyAgICAgICAgaWYgKGV4aXQubV9kZXNjcmlwdG9y
Lm5lZWRzUmVnaXN0ZXJSZWNvdmVyeU9uR2VuZXJpY1Vud2luZE9TUkV4aXRQYXRoKCkpCiAgICAg
ICAgICAgICBleGl0LnJlY292ZXJSZWdpc3RlcnNGcm9tU3BpbGxTbG90KCp0aGlzLCBvc3JFeGl0
RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xvdCk7CiAKLSAgICAgICAgSnVtcCBza2lwR2V0
QW5kUHV0QnlJZFNsb3dQYXRoRW50cmFuY2UgPSBqdW1wKCk7CisgICAgICAgIGp1bXBUb1B1c2hJ
bmRleEZyb21HZW5lcmljVW53aW5kID0ganVtcCgpOworICAgIH0KIAotICAgICAgICBpbmZvLm1f
Z2V0QW5kUHV0QnlJZENhbGxPcGVyYXRpb25FeGNlcHRpb25PU1JFeGl0RW50cmFuY2UgPSBsYWJl
bCgpOwotICAgICAgICBpZiAoZXhpdC5tX2Rlc2NyaXB0b3IubV9pc0V4Y2VwdGlvbkZyb21HZXRC
eUlkKQotICAgICAgICAgICAgZXhpdC5yZWNvdmVyUmVnaXN0ZXJzRnJvbVNwaWxsU2xvdCgqdGhp
cywgb3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3RhY2tTcGlsbFNsb3QpOwotICAgICAgICAKLSAg
ICAgICAgc2tpcEdldEFuZFB1dEJ5SWRTbG93UGF0aEVudHJhbmNlLmxpbmsodGhpcyk7CisgICAg
aWYgKGV4aXQubV9kZXNjcmlwdG9yLm1pZ2h0QXJyaXZlQXRPU1JFeGl0RnJvbUNhbGxPcGVyYXRp
b24oKSkgeworICAgICAgICBpbmZvLm1fY2FsbE9wZXJhdGlvbkV4Y2VwdGlvbk9TUkV4aXRFbnRy
YW5jZSA9IGxhYmVsKCk7CisgICAgICAgIGV4aXQucmVjb3ZlclJlZ2lzdGVyc0Zyb21TcGlsbFNs
b3QoKnRoaXMsIG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKICAgICB9
CisgICAgCisgICAgaWYgKGV4aXQubV9kZXNjcmlwdG9yLm1pZ2h0QXJyaXZlQXRPU1JFeGl0RnJv
bUdlbmVyaWNVbndpbmQoKSkKKyAgICAgICAganVtcFRvUHVzaEluZGV4RnJvbUdlbmVyaWNVbndp
bmQubGluayh0aGlzKTsKIAogICAgIHB1c2hUb1NhdmVJbW1lZGlhdGVXaXRob3V0VG91Y2hpbmdS
ZWdpc3RlcnMoVHJ1c3RlZEltbTMyKGluZGV4KSk7CiAgICAgaW5mby5tX3RodW5rSnVtcCA9IHBh
dGNoYWJsZUp1bXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxOTI0MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDE3
ICsyMDgsMTkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE51bWJl
ck9mQ2F0Y2hTcGlsbHMgPSBzdGQ6Om1heChtYXhOdW1iZXJPZkNhdGNoU3BpbGxzLCBtX2dyYXBo
LmxvY2Fsc0xpdmVJbkJ5dGVjb2RlKG9wQ2F0Y2hPcmlnaW4pLmJpdENvdW50KCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBBcml0aFN1YjoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRC
eUlkOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRGbHVzaDogewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gZmx1c2ggb25lIHRoaW5nIGZvciBHZXRC
eUlkcyB3aGVuIHRoZSBiYXNlIGFuZCByZXN1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFyZSBhc3NpZ25lZCB0aGUgc2FtZSByZWdpc3Rlci4gRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZl
IG92ZXJ2aWV3LCBsb29rCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGUgY29tbWVu
dCBpbiBGVExDb21waWxlLmNwcAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbWF5IGhh
dmUgdG8gZmx1c2ggb25lIHRoaW5nIGZvciBHZXRCeUlkcy9Bcml0aFN1YnMgd2hlbiB0aGUgYmFz
ZSBhbmQgcmVzdWx0IG9yIHRoZSBsZWZ0L3JpZ2h0IGFuZCB0aGUgcmVzdWx0CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhcmUgYXNzaWduZWQgdGhlIHNhbWUgcmVnaXN0ZXIuIEZvciBhIG1v
cmUgY29tcHJlaGVuc2l2ZSBvdmVydmlldywgbG9vayBhdCB0aGUgY29tbWVudCBpbiBGVExDb21w
aWxlLmNwcAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQXJpdGhT
dWIgJiYgbm9kZS0+YmluYXJ5VXNlS2luZCgpICE9IFVudHlwZWRVc2UpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7IC8vIFdlIG9ubHkgY29tcGlsZSBwYXRjaHBvaW50cyBmb3Ig
QXJpdGhTdWIgVW50eXBlZFVzZS4KICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4g
b3BDYXRjaE9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvKiBleGNl
cHRpb25IYW5kbGVyOwogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3aWxsQ2F0Y2hFeGNl
cHRpb24gPSBtX2dyYXBoLndpbGxDYXRjaEV4Y2VwdGlvbkluTWFjaGluZUZyYW1lKG5vZGUtPm9y
aWdpbi5mb3JFeGl0LCBvcENhdGNoT3JpZ2luLCBleGNlcHRpb25IYW5kbGVyKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh3aWxsQ2F0Y2hFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG51bWJlck9mR2V0QnlJZFNwaWxscyA9
IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TnVtYmVyT2ZDYXRjaFNwaWxscyA9
IHN0ZDo6bWF4KG1heE51bWJlck9mQ2F0Y2hTcGlsbHMsIG51bWJlck9mR2V0QnlJZFNwaWxscyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBudW1iZXJP
ZkdldEJ5SWRPclN1YlNwaWxscyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4
TnVtYmVyT2ZDYXRjaFNwaWxscyA9IHN0ZDo6bWF4KG1heE51bWJlck9mQ2F0Y2hTcGlsbHMsIG51
bWJlck9mR2V0QnlJZE9yU3ViU3BpbGxzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0x
NTQzLDEwICsxNTQ1LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOwogCiAgICAgICAgICAgICAvLyBBcmd1bWVudHM6
IGlkLCBieXRlcywgdGFyZ2V0LCBudW1BcmdzLCBhcmdzLi4uCi0gICAgICAgICAgICBMVmFsdWUg
Y2FsbCA9IG1fb3V0LmNhbGwoCi0gICAgICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludEludDY0
SW50cmluc2ljKCksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElE
KSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZBcml0aFN1YigpKSwKLSAgICAgICAgICAgICAgICBj
b25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMiksIGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0IGFyZ3VtZW50czsKKyAgICAgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSk7CisgICAgICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mQXJpdGhTdWIoKSkp
OworICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjb25zdE51bGwobV9vdXQucmVmOCkpOwor
ICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKDIpKTsKKyAgICAg
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobGVmdCk7CisgICAgICAgICAgICBhcmd1bWVudHMuYXBw
ZW5kKHJpZ2h0KTsKKworICAgICAgICAgICAgYXBwZW5kT1NSRXhpdEFyZ3VtZW50c0ZvclBhdGNo
cG9pbnRJZldpbGxDYXRjaEV4Y2VwdGlvbihhcmd1bWVudHMsIEV4Y2VwdGlvblR5cGU6OlN1Ykdl
bmVyYXRvciwgMyk7IC8vIGxlZnQsIHJpZ2h0LCBhbmQgcmVzdWx0IHNob3cgdXAgaW4gdGhlIHN0
YWNrbWFwIGxvY2F0aW9ucy4KKworICAgICAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxs
KG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLCBhcmd1bWVudHMpOwogICAgICAgICAg
ICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVnQ2FsbENv
bnYpOwogCiAgICAgICAgICAgICBtX2Z0bFN0YXRlLmFyaXRoU3Vicy5hcHBlbmQoQXJpdGhTdWJE
ZXNjcmlwdG9yKHN0YWNrbWFwSUQsIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLApAQCAtMjM2NSw3
ICsyMzc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChiYXNlKTsgCiAg
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwogCi0gICAgICAgIGFwcGVuZE9TUkV4aXRB
cmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oYXJndW1lbnRzLCBMTFZN
QW55UmVnQ2FsbENvbnYsIDIpOyAvLyAyIGFyZ3VtZW50cyBzaG93IHVwIGluIHRoZSBzdGFja21h
cCBsb2NhdGlvbnM6IHRoZSBiYXNlIGFuZCB0aGUgdmFsdWUuCisgICAgICAgIGFwcGVuZE9TUkV4
aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oYXJndW1lbnRzLCBF
eGNlcHRpb25UeXBlOjpQdXRCeUlkLCAyKTsgLy8gMiBhcmd1bWVudHMgc2hvdyB1cCBpbiB0aGUg
c3RhY2ttYXAgbG9jYXRpb25zOiB0aGUgYmFzZSBhbmQgdGhlIHZhbHVlLgogCiAgICAgICAgIGFy
Z3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQzMigyKSk7IAogICAgICAgICBhcmd1bWVu
dHMuaW5zZXJ0KDAsIGNvbnN0TnVsbChtX291dC5yZWY4KSk7IApAQCAtNDU4OSw3ICs0NTk4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhZGRpbmc7ICsr
aSkKICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsK
IAotICAgICAgICBhcHBlbmRPU1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hwb2ludElmV2lsbENhdGNo
RXhjZXB0aW9uKGFyZ3VtZW50cywgTExWTVdlYktpdEpTQ2FsbENvbnYsIDApOyAvLyBObyBjYWxs
IGFyZ3VtZW50cyBzaG93IHVwIGluIHRoZSBzdGFja21hcCBsb2NhdGlvbnMuCisgICAgICAgIGFw
cGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oYXJn
dW1lbnRzLCBFeGNlcHRpb25UeXBlOjpKU0NhbGwsIDApOyAvLyBObyBjYWxsIGFyZ3VtZW50cyBz
aG93IHVwIGluIHRoZSBzdGFja21hcCBsb2NhdGlvbnMuCiAKICAgICAgICAgYXJndW1lbnRzLmlu
c2VydCgwLCBtX291dC5jb25zdEludDMyKDEgKyBhbGlnbmVkRnJhbWVTaXplIC0gSlNTdGFjazo6
Q2FsbGVyRnJhbWVBbmRQQ1NpemUpKTsKICAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBjb25z
dE51bGwobV9vdXQucmVmOCkpOwpAQCAtNDY3Miw3ICs0NjgxLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgQVNTRVJUKHRoaXNBcmcpOwogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHRoaXNBcmcpOwog
Ci0gICAgICAgIGFwcGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hF
eGNlcHRpb24oYXJndW1lbnRzLCBMTFZNQ0NhbGxDb252LCAwKTsgLy8gTm8gY2FsbCBhcmd1bWVu
dHMgc2hvdyB1cCBpbiBzdGFja21hcCBsb2NhdGlvbnMuCisgICAgICAgIGFwcGVuZE9TUkV4aXRB
cmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oYXJndW1lbnRzLCBFeGNl
cHRpb25UeXBlOjpKU0NhbGwsIDApOyAvLyBObyBjYWxsIGFyZ3VtZW50cyBzaG93IHVwIGluIHN0
YWNrbWFwIGxvY2F0aW9ucy4KIAogICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNv
bnN0SW50MzIoMiArICEhanNBcmd1bWVudHMpKTsKICAgICAgICAgYXJndW1lbnRzLmluc2VydCgw
LCBjb25zdE51bGwobV9vdXQucmVmOCkpOwpAQCAtNTA1NCwxMSArNTA2Myw4IEBAIHByaXZhdGU6
CiAKICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fb3JpZ2luLmV4aXRPSyk7
CiAgICAgICAgIAotICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9y
cy5hcHBlbmQoT1NSRXhpdERlc2NyaXB0b3IoCi0gICAgICAgICAgICBVbmNvdW50YWJsZUludmFs
aWRhdGlvbiwgRGF0YUZvcm1hdE5vbmUsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUoKSwK
LSAgICAgICAgICAgIG1fb3JpZ2luLmZvckV4aXQsIG1fb3JpZ2luLnNlbWFudGljLAotICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpKTsK
KworICAgICAgICBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihVbmNvdW50YWJsZUludmFsaWRhdGlv
biwgRXhjZXB0aW9uVHlwZTo6Tm9uZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7CiAg
ICAgICAgIAogICAgICAgICBPU1JFeGl0RGVzY3JpcHRvciYgZXhpdERlc2NyaXB0b3IgPSBtX2Z0
bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9ycy5sYXN0KCk7CiAgICAgICAgIApAQCAt
NjI0MSw3ICs2MjQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3Qg
YXJndW1lbnRzOwogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGJhc2UpOwogCi0gICAgICAgIGFw
cGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oYXJn
dW1lbnRzLCBMTFZNQW55UmVnQ2FsbENvbnYsIDIsIGZhbHNlLCB0cnVlKTsgLy8gMiBhcmd1bWVu
dHMgc2hvdyB1cCBpbiB0aGUgc3RhY2ttYXAgbG9jYXRpb25zOiB0aGUgcmVzdWx0IGFuZCB0aGUg
YmFzZS4KKyAgICAgICAgYXBwZW5kT1NSRXhpdEFyZ3VtZW50c0ZvclBhdGNocG9pbnRJZldpbGxD
YXRjaEV4Y2VwdGlvbihhcmd1bWVudHMsIEV4Y2VwdGlvblR5cGU6OkdldEJ5SWQsIDIpOyAvLyAy
IGFyZ3VtZW50cyBzaG93IHVwIGluIHRoZSBzdGFja21hcCBsb2NhdGlvbnM6IHRoZSByZXN1bHQg
YW5kIHRoZSBiYXNlLgogCiAgICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJ
bnQzMigxKSk7IAogICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIGNvbnN0TnVsbChtX291dC5y
ZWY4KSk7CkBAIC03NTk2LDcgKzc2MDIsNyBAQCBwcml2YXRlOgogICAgICAgICBhcmd1bWVudHMu
YXBwZW5kKG1fb3V0LmNvbnN0SW50MzIodXNlckFyZ3VtZW50cy5zaXplKCkpKTsKICAgICAgICAg
YXJndW1lbnRzLmFwcGVuZFZlY3Rvcih1c2VyQXJndW1lbnRzKTsKIAotICAgICAgICBhcHBlbmRP
U1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hwb2ludElmV2lsbENhdGNoRXhjZXB0aW9uKGFyZ3VtZW50
cywgTExWTUFueVJlZ0NhbGxDb252LCB1c2VyQXJndW1lbnRzLnNpemUoKSArIDEsIHRydWUpOyAv
LyBBbGwgdGhlIGFyZ3VtZW50cyBwbHVzIHRoZSByZXN1bHQgc2hvdyB1cCBpbiB0aGUgc3RhY2tt
YXAgbG9jYXRpb25zLgorICAgICAgICBhcHBlbmRPU1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hwb2lu
dElmV2lsbENhdGNoRXhjZXB0aW9uKGFyZ3VtZW50cywgRXhjZXB0aW9uVHlwZTo6TGF6eVNsb3dQ
YXRoLCB1c2VyQXJndW1lbnRzLnNpemUoKSArIDEpOyAvLyBBbGwgdGhlIGFyZ3VtZW50cyBwbHVz
IHRoZSByZXN1bHQgc2hvdyB1cCBpbiB0aGUgc3RhY2ttYXAgbG9jYXRpb25zLgogCiAgICAgICAg
IExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbChtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMo
KSwgYXJndW1lbnRzKTsKICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihj
YWxsLCBMTFZNQW55UmVnQ2FsbENvbnYpOwpAQCAtODg0NSw3ICs4ODUxLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKICAgICB9CiAKLSAgICB2b2lk
IGFwcGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24o
U3RhY2ttYXBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgTENhbGxDb252IGNhbGxpbmdDb252ZW50
aW9uLCB1bnNpZ25lZCBvZmZzZXRPZkV4aXRBcmd1bWVudHMsIGJvb2wgaXNMYXp5U2xvd1BhdGgg
PSBmYWxzZSwgYm9vbCBpc0dldEJ5ZElkID0gZmFsc2UpCisgICAgdm9pZCBhcHBlbmRPU1JFeGl0
QXJndW1lbnRzRm9yUGF0Y2hwb2ludElmV2lsbENhdGNoRXhjZXB0aW9uKFN0YWNrbWFwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIEV4Y2VwdGlvblR5cGUgZXhjZXB0aW9uVHlwZSwgdW5zaWduZWQg
b2Zmc2V0T2ZFeGl0QXJndW1lbnRzKQogICAgIHsKICAgICAgICAgQ29kZU9yaWdpbiBvcENhdGNo
T3JpZ2luOwogICAgICAgICBIYW5kbGVySW5mbyogZXhjZXB0aW9uSGFuZGxlcjsKQEAgLTg4NTMs
MjcgKzg4NTksMTUgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCF3aWxsQ2F0Y2hFeGNlcHRpb24p
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXBwZW5kT1NSRXhpdERlc2NyaXB0b3Io
VW5jb3VudGFibGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4ud2l0aEZvckV4aXRBbmRF
eGl0T0sob3BDYXRjaE9yaWdpbiwgdHJ1ZSkpOworICAgICAgICBhcHBlbmRPU1JFeGl0RGVzY3Jp
cHRvcihVbmNvdW50YWJsZSwgZXhjZXB0aW9uVHlwZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29y
aWdpbi53aXRoRm9yRXhpdEFuZEV4aXRPSyhvcENhdGNoT3JpZ2luLCB0cnVlKSk7CiAgICAgICAg
IE9TUkV4aXREZXNjcmlwdG9yJiBleGl0RGVzY3JpcHRvciA9IG1fZnRsU3RhdGUuaml0Q29kZS0+
b3NyRXhpdERlc2NyaXB0b3JzLmxhc3QoKTsKICAgICAgICAgZXhpdERlc2NyaXB0b3IubV9zZW1h
bnRpY0NvZGVPcmlnaW5Gb3JDYWxsRnJhbWVIZWFkZXIgPSBjb2RlT3JpZ2luRGVzY3JpcHRpb25P
ZkNhbGxTaXRlKCk7Ci0gICAgICAgIGV4aXREZXNjcmlwdG9yLm1faXNFeGNlcHRpb25IYW5kbGVy
ID0gdHJ1ZTsKLSAgICAgICAgZXhpdERlc2NyaXB0b3IubV93aWxsQXJyaXZlQXRPU1JFeGl0RnJv
bUdlbmVyaWNVbndpbmQgPSAhaXNMYXp5U2xvd1BhdGg7Ci0gICAgICAgIGV4aXREZXNjcmlwdG9y
Lm1faXNFeGNlcHRpb25Gcm9tTGF6eVNsb3dQYXRoID0gaXNMYXp5U2xvd1BhdGg7Ci0gICAgICAg
IGV4aXREZXNjcmlwdG9yLm1faXNFeGNlcHRpb25Gcm9tSlNDYWxsID0gY2FsbGluZ0NvbnZlbnRp
b24gPT0gTExWTVdlYktpdEpTQ2FsbENvbnYgfHwgY2FsbGluZ0NvbnZlbnRpb24gPT0gTExWTUND
YWxsQ29udjsKLSAgICAgICAgZXhpdERlc2NyaXB0b3IubV9pc0V4Y2VwdGlvbkZyb21HZXRCeUlk
ID0gaXNHZXRCeWRJZDsKICAgICAgICAgZXhpdERlc2NyaXB0b3IubV9iYXNlbGluZUV4Y2VwdGlv
bkhhbmRsZXIgPSAqZXhjZXB0aW9uSGFuZGxlcjsKICAgICAgICAgZXhpdERlc2NyaXB0b3IubV9z
dGFja21hcElEID0gbV9zdGFja21hcElEcyAtIDE7CiAKICAgICAgICAgU3RhY2ttYXBBcmd1bWVu
dExpc3QgZnJlc2hMaXN0OwotICAgICAgICBidWlsZEV4aXRBcmd1bWVudHMoZXhpdERlc2NyaXB0
b3IsIGZyZXNoTGlzdCwgbm9WYWx1ZSgpLCBleGl0RGVzY3JpcHRvci5tX2NvZGVPcmlnaW4pOwor
ICAgICAgICBidWlsZEV4aXRBcmd1bWVudHMoZXhpdERlc2NyaXB0b3IsIGZyZXNoTGlzdCwgbm9W
YWx1ZSgpLCBleGl0RGVzY3JpcHRvci5tX2NvZGVPcmlnaW4sIG9mZnNldE9mRXhpdEFyZ3VtZW50
cyk7CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmRWZWN0b3IoZnJlc2hMaXN0KTsKLQotICAgICAg
ICBpZiAob2Zmc2V0T2ZFeGl0QXJndW1lbnRzKSB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGV4aXREZXNjcmlwdG9yLm1fdmFsdWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGV4aXREZXNjcmlwdG9yLm1fdmFsdWVzW2ldLmhhc0luZGV4SW5TdGFja21h
cExvY2F0aW9ucygpKQotICAgICAgICAgICAgICAgICAgICBleGl0RGVzY3JpcHRvci5tX3ZhbHVl
c1tpXS5hZGp1c3RTdGFja21hcExvY2F0aW9uc0luZGV4QnlPZmZzZXQob2Zmc2V0T2ZFeGl0QXJn
dW1lbnRzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgIH0KIAogICAgIGJvb2wgZW1p
dEJyYW5jaFRvT1NSRXhpdElmV2lsbENhdGNoRXhjZXB0aW9uKExWYWx1ZSBoYWRFeGNlcHRpb24p
CkBAIC04ODkzLDEwICs4ODg3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX2Jsb2Nr
cy5nZXQoYmxvY2spOwogICAgIH0KIAotICAgIHZvaWQgYXBwZW5kT1NSRXhpdERlc2NyaXB0b3Io
RXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwg
Tm9kZU9yaWdpbiBvcmlnaW4pCisgICAgdm9pZCBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihFeGl0
S2luZCBraW5kLCBFeGNlcHRpb25UeXBlIGV4Y2VwdGlvblR5cGUsIEZvcm1hdHRlZFZhbHVlIGxv
d1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIE5vZGVPcmlnaW4gb3JpZ2luKQogICAgIHsKICAgICAg
ICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuYXBwZW5kKE9TUkV4aXRE
ZXNjcmlwdG9yKAotICAgICAgICAgICAga2luZCwgbG93VmFsdWUuZm9ybWF0KCksIG1fZ3JhcGgu
bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdoVmFsdWUpLAorICAgICAgICAgICAg
a2luZCwgZXhjZXB0aW9uVHlwZSwgbG93VmFsdWUuZm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdoVmFsdWUpLAogICAgICAgICAgICAgb3JpZ2luLmZv
ckV4aXQsIG9yaWdpbi5zZW1hbnRpYywKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1f
bG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAo
KS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7CkBAIC04OTM2LDkgKzg5MzAsOCBAQCBwcml2
YXRlOgogICAgICAgICBpZiAoZmFpbENvbmRpdGlvbiA9PSBtX291dC5ib29sZWFuRmFsc2UpCiAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXBwZW5kT1NSRXhpdERlc2NyaXB0b3Ioa2lu
ZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgb3JpZ2luKTsKKyAgICAgICAgYXBwZW5kT1NSRXhpdERl
c2NyaXB0b3Ioa2luZCwgaXNFeGNlcHRpb25IYW5kbGVyID8gRXhjZXB0aW9uVHlwZTo6Q0NhbGxF
eGNlcHRpb24gOiBFeGNlcHRpb25UeXBlOjpOb25lLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBvcmln
aW4pOwogICAgICAgICBPU1JFeGl0RGVzY3JpcHRvciYgZXhpdERlc2NyaXB0b3IgPSBtX2Z0bFN0
YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9ycy5sYXN0KCk7Ci0gICAgICAgIGV4aXREZXNj
cmlwdG9yLm1faXNFeGNlcHRpb25IYW5kbGVyID0gaXNFeGNlcHRpb25IYW5kbGVyOwogCiAgICAg
ICAgIGlmIChmYWlsQ29uZGl0aW9uID09IG1fb3V0LmJvb2xlYW5UcnVlKSB7CiAgICAgICAgICAg
ICBlbWl0T1NSRXhpdENhbGwoZXhpdERlc2NyaXB0b3IsIGxvd1ZhbHVlKTsKQEAgLTg5NzUsNyAr
ODk2OCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBidWlsZEV4aXRBcmd1bWVudHMoCiAg
ICAgICAgIE9TUkV4aXREZXNjcmlwdG9yJiBleGl0RGVzY3JpcHRvciwgU3RhY2ttYXBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsCi0gICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbikKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCB1bnNpZ25l
ZCBvZmZzZXRPZkV4aXRBcmd1bWVudHNJblN0YWNrbWFwTG9jYXRpb25zID0gMCkKICAgICB7CiAg
ICAgICAgIGlmICghIWxvd1ZhbHVlKQogICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dW
YWx1ZS52YWx1ZSgpKTsKQEAgLTkwMTAsMTYgKzkwMDMsMjEgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaCwgbV9ub2RlLAogICAgICAgICAgICAgICAgICAgICAoIShhdmFp
bGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKSwgY29kZU9yaWdpbikpKSB8fCBtX2dyYXBoLm1fcGxhbi5tb2RlID09IEZU
TEZvck9TUkVudHJ5TW9kZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGV4aXREZXNjcmlwdG9yLm1fdmFsdWVzW2ldID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5
KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkpOworICAgICAgICAgICAgRXhpdFZhbHVlIGV4
aXRWYWx1ZSA9IGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgYXZhaWxh
YmlsaXR5KTsKKyAgICAgICAgICAgIGlmIChleGl0VmFsdWUuaGFzSW5kZXhJblN0YWNrbWFwTG9j
YXRpb25zKCkpCisgICAgICAgICAgICAgICAgZXhpdFZhbHVlLmFkanVzdFN0YWNrbWFwTG9jYXRp
b25zSW5kZXhCeU9mZnNldChvZmZzZXRPZkV4aXRBcmd1bWVudHNJblN0YWNrbWFwTG9jYXRpb25z
KTsKKyAgICAgICAgICAgIGV4aXREZXNjcmlwdG9yLm1fdmFsdWVzW2ldID0gZXhpdFZhbHVlOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKGF1dG8gaGVhcFBhaXIgOiBhdmFpbGFi
aWxpdHlNYXAubV9oZWFwKSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gaGVhcFBhaXIua2V5
LmJhc2UoKTsKICAgICAgICAgICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRl
cmlhbGl6YXRpb24gPSBtYXAuZ2V0KG5vZGUpOworICAgICAgICAgICAgRXhpdFZhbHVlIGV4aXRW
YWx1ZSA9IGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgaGVhcFBhaXIu
dmFsdWUpOworICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2ttYXBMb2Nh
dGlvbnMoKSkKKyAgICAgICAgICAgICAgICBleGl0VmFsdWUuYWRqdXN0U3RhY2ttYXBMb2NhdGlv
bnNJbmRleEJ5T2Zmc2V0KG9mZnNldE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2NhdGlvbnMp
OwogICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5hZGQoCiAgICAgICAgICAgICAgICAgaGVh
cFBhaXIua2V5LmRlc2NyaXB0b3IoKSwKLSAgICAgICAgICAgICAgICBleGl0VmFsdWVGb3JBdmFp
bGFiaWxpdHkoYXJndW1lbnRzLCBtYXAsIGhlYXBQYWlyLnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgZXhpdFZhbHVlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2VD
b21waWxhdGlvbkVuYWJsZWQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXQuY3BwCShyZXZpc2lvbiAxOTI0MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyNSArNDEsODIgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogdXNpbmcgbmFtZXNwYWNlIERGRzsKIAogT1NS
RXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKAotICAgIEV4aXRLaW5kIGV4aXRLaW5k
LCBEYXRhRm9ybWF0IHByb2ZpbGVEYXRhRm9ybWF0LAorICAgIEV4aXRLaW5kIGV4aXRLaW5kLCBF
eGNlcHRpb25UeXBlIGV4Y2VwdGlvblR5cGUsIERhdGFGb3JtYXQgcHJvZmlsZURhdGFGb3JtYXQs
CiAgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwKICAgICBDb2RlT3JpZ2luIG9yaWdpbkZvclByb2ZpbGUsIHVuc2lnbmVk
IG51bWJlck9mQXJndW1lbnRzLAogICAgIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKQogICAgIDog
bV9raW5kKGV4aXRLaW5kKQorICAgICwgbV9leGNlcHRpb25UeXBlKGV4Y2VwdGlvblR5cGUpCiAg
ICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAsIG1fY29kZU9yaWdpbkZvckV4aXRQ
cm9maWxlKG9yaWdpbkZvclByb2ZpbGUpCiAgICAgLCBtX3Byb2ZpbGVEYXRhRm9ybWF0KHByb2Zp
bGVEYXRhRm9ybWF0KQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlKQogICAgICwg
bV92YWx1ZXMobnVtYmVyT2ZBcmd1bWVudHMsIG51bWJlck9mTG9jYWxzKQogICAgICwgbV9pc0lu
dmFsaWRhdGlvblBvaW50KGZhbHNlKQotICAgICwgbV9pc0V4Y2VwdGlvbkhhbmRsZXIoZmFsc2Up
Ci0gICAgLCBtX3dpbGxBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJpY1Vud2luZChmYWxzZSkKLSAg
ICAsIG1faXNFeGNlcHRpb25Gcm9tSlNDYWxsKGZhbHNlKQotICAgICwgbV9pc0V4Y2VwdGlvbkZy
b21HZXRCeUlkKGZhbHNlKQotICAgICwgbV9pc0V4Y2VwdGlvbkZyb21MYXp5U2xvd1BhdGgoZmFs
c2UpCiB7CiB9CiAKK2Jvb2wgT1NSRXhpdERlc2NyaXB0b3I6OndpbGxBcnJpdmVBdEV4aXRGcm9t
SW5kaXJlY3RFeGNlcHRpb25DaGVjaygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2V4Y2VwdGlv
blR5cGUpIHsKKyAgICBjYXNlIEV4Y2VwdGlvblR5cGU6OkpTQ2FsbDoKKyAgICBjYXNlIEV4Y2Vw
dGlvblR5cGU6OkdldEJ5SWQ6CisgICAgY2FzZSBFeGNlcHRpb25UeXBlOjpQdXRCeUlkOgorICAg
IGNhc2UgRXhjZXB0aW9uVHlwZTo6TGF6eVNsb3dQYXRoOgorICAgIGNhc2UgRXhjZXB0aW9uVHlw
ZTo6U3ViR2VuZXJhdG9yOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK2Jvb2wgT1NSRXhpdERlc2NyaXB0b3I6Om1pZ2h0QXJyaXZlQXRPU1JFeGl0RnJv
bUdlbmVyaWNVbndpbmQoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9leGNlcHRpb25UeXBlKSB7
CisgICAgY2FzZSBFeGNlcHRpb25UeXBlOjpKU0NhbGw6CisgICAgY2FzZSBFeGNlcHRpb25UeXBl
OjpHZXRCeUlkOgorICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6UHV0QnlJZDoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitib29sIE9TUkV4aXREZXNjcmlw
dG9yOjptaWdodEFycml2ZUF0T1NSRXhpdEZyb21DYWxsT3BlcmF0aW9uKCkgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKG1fZXhjZXB0aW9uVHlwZSkgeworICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6R2V0
QnlJZDoKKyAgICBjYXNlIEV4Y2VwdGlvblR5cGU6OlB1dEJ5SWQ6CisgICAgY2FzZSBFeGNlcHRp
b25UeXBlOjpTdWJHZW5lcmF0b3I6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworYm9vbCBPU1JFeGl0RGVzY3JpcHRvcjo6bmVlZHNSZWdpc3RlclJlY292
ZXJ5T25HZW5lcmljVW53aW5kT1NSRXhpdFBhdGgoKSBjb25zdAoreworICAgIC8vIENhbGxzL1B1
dEJ5SWRzL0dldEJ5SWRzIGFsbCBoYXZlIGEgZ2VuZXJpYyB1bndpbmQgb3NyIGV4aXQgcGF0aHMu
CisgICAgLy8gQnV0LCBHZXRCeUlkIGFuZCBQdXRCeUlkIElDcyB3aWxsIGRvIHJlZ2lzdGVyIHJl
Y292ZXJ5IHRoZW1zZWx2ZXMKKyAgICAvLyBiZWNhdXNlIHRoZXkncmUgcmVzcG9uc2libGUgZm9y
IHNwaWxsaW5nIG5lY2Vzc2FyeSByZWdpc3RlcnMsIHNvCisgICAgLy8gdGhleSBhbHNvIG11c3Qg
cmVjb3ZlciByZWdpc3RlcnMgdGhlbXNlbHZlcy4KKyAgICAvLyBDYWxscyBkb24ndCB3b3JrIHRo
aXMgd2F5LiBXZSBjb21waWxlIENhbGxzIGFzIHBhdGNocG9pbnRzIGluIExMVk0uCisgICAgLy8g
QSBjYWxsIHBhdGNocG9pbnQgbWlnaHQgcGFzcyB1cyB2b2xhdGlsZSByZWdpc3RlcnMgZm9yIGxv
Y2F0aW9ucworICAgIC8vIHdlIHdpbGwgZG8gdmFsdWUgcmVjb3Zlcnkgb24uIFRoZXJlZm9yZSwg
YmVmb3JlIHdlIG1ha2UgdGhlIGNhbGwsCisgICAgLy8gd2UgbXVzdCBzcGlsbCB0aGVzZSByZWdp
c3RlcnMuIE90aGVyd2lzZSwgdGhlIGNhbGwgd2lsbCBjbG9iYmVyIHRoZW0uCisgICAgLy8gVGhl
cmVmb3JlLCB0aGUgY29ycmVzcG9uZGluZyBPU1IgZXhpdCBmb3IgdGhlIGNhbGwgd2lsbCBuZWVk
IHRvCisgICAgLy8gcmVjb3ZlciB0aGUgc3BpbGxlZCByZWdpc3RlcnMuCisgICAgcmV0dXJuIG1f
ZXhjZXB0aW9uVHlwZSA9PSBFeGNlcHRpb25UeXBlOjpKU0NhbGw7Cit9CisKK2Jvb2wgT1NSRXhp
dERlc2NyaXB0b3I6OmlzRXhjZXB0aW9uSGFuZGxlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
ZXhjZXB0aW9uVHlwZSAhPSBFeGNlcHRpb25UeXBlOjpOb25lOworfQorCiB2b2lkIE9TUkV4aXRE
ZXNjcmlwdG9yOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmIHRy
YWNrZWRSZWZlcmVuY2VzKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFsdWVzLnNpemUo
KTsgaS0tOykKQEAgLTc1LDcgKzEzMiw3IEBAIE9TUkV4aXQ6Ok9TUkV4aXQoT1NSRXhpdERlc2Ny
aXB0b3ImIGRlc2MKICAgICAsIG1fZGVzY3JpcHRvcihkZXNjcmlwdG9yKQogICAgICwgbV9zdGFj
a21hcFJlY29yZEluZGV4KHN0YWNrbWFwUmVjb3JkSW5kZXgpCiB7Ci0gICAgbV9pc0V4Y2VwdGlv
bkhhbmRsZXIgPSBkZXNjcmlwdG9yLm1faXNFeGNlcHRpb25IYW5kbGVyOworICAgIG1faXNFeGNl
cHRpb25IYW5kbGVyID0gZGVzY3JpcHRvci5pc0V4Y2VwdGlvbkhhbmRsZXIoKTsKIH0KIAogQ29k
ZUxvY2F0aW9uSnVtcCBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayog
ZnRsQ29kZUJsb2NrKSBjb25zdApAQCAtODgsNyArMTQ1LDcgQEAgQ29kZUxvY2F0aW9uSnVtcCBP
U1JFeGl0Ojpjb2RlTG9jYXRpb25GbwogCiB2b2lkIE9TUkV4aXQ6OmdhdGhlclJlZ2lzdGVyc1Rv
U3BpbGxGb3JDYWxsSWZFeGNlcHRpb24oU3RhY2tNYXBzJiBzdGFja21hcHMsIFN0YWNrTWFwczo6
UmVjb3JkJiByZWNvcmQpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9kZXNjcmlwdG9yLm1faXNF
eGNlcHRpb25Gcm9tSlNDYWxsKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2Rlc2NyaXB0b3IubV9l
eGNlcHRpb25UeXBlID09IEV4Y2VwdGlvblR5cGU6OkpTQ2FsbCk7CiAKICAgICBSZWdpc3RlclNl
dCB2b2xhdGlsZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpT
Q2FsbCgpOwogCkBAIC0xMjIsNyArMTc5LDcgQEAgdm9pZCBPU1JFeGl0OjpnYXRoZXJSZWdpc3Rl
cnNUb1NwaWxsRm9yQwogCiB2b2lkIE9TUkV4aXQ6OnNwaWxsUmVnaXN0ZXJzVG9TcGlsbFNsb3Qo
Q0NhbGxIZWxwZXJzJiBqaXQsIGludDMyX3Qgc3RhY2tTcGlsbFNsb3QpCiB7Ci0gICAgUkVMRUFT
RV9BU1NFUlQobV9kZXNjcmlwdG9yLm1faXNFeGNlcHRpb25Gcm9tSlNDYWxsIHx8IG1fZGVzY3Jp
cHRvci5tX2lzRXhjZXB0aW9uRnJvbUdldEJ5SWQpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZGVz
Y3JpcHRvci5taWdodEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKCkgfHwgbV9kZXNj
cmlwdG9yLm1pZ2h0QXJyaXZlQXRPU1JFeGl0RnJvbUNhbGxPcGVyYXRpb24oKSk7CiAgICAgdW5z
aWduZWQgY291bnQgPSAwOwogICAgIGZvciAoR1BSUmVnIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpm
aXJzdFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCk7IHJl
ZyA9IE1hY3JvQXNzZW1ibGVyOjpuZXh0UmVnaXN0ZXIocmVnKSkgewogICAgICAgICBpZiAocmVn
aXN0ZXJzVG9QcmVzZXJ2ZUZvckNhbGxUaGF0TWlnaHRUaHJvdy5nZXQocmVnKSkgewpAQCAtMTQw
LDcgKzE5Nyw3IEBAIHZvaWQgT1NSRXhpdDo6c3BpbGxSZWdpc3RlcnNUb1NwaWxsU2xvdCgKIAog
dm9pZCBPU1JFeGl0OjpyZWNvdmVyUmVnaXN0ZXJzRnJvbVNwaWxsU2xvdChDQ2FsbEhlbHBlcnMm
IGppdCwgaW50MzJfdCBzdGFja1NwaWxsU2xvdCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2Rl
c2NyaXB0b3IubV9pc0V4Y2VwdGlvbkZyb21KU0NhbGwgfHwgbV9kZXNjcmlwdG9yLm1faXNFeGNl
cHRpb25Gcm9tR2V0QnlJZCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kZXNjcmlwdG9yLm1pZ2h0
QXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQoKSB8fCBtX2Rlc2NyaXB0b3IubWlnaHRB
cnJpdmVBdE9TUkV4aXRGcm9tQ2FsbE9wZXJhdGlvbigpKTsKICAgICB1bnNpZ25lZCBjb3VudCA9
IDA7CiAgICAgZm9yIChHUFJSZWcgcmVnID0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIo
KTsgcmVnIDw9IE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKTsgcmVnID0gTWFjcm9Bc3Nl
bWJsZXI6Om5leHRSZWdpc3RlcihyZWcpKSB7CiAgICAgICAgIGlmIChyZWdpc3RlcnNUb1ByZXNl
cnZlRm9yQ2FsbFRoYXRNaWdodFRocm93LmdldChyZWcpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkocmV2aXNpb24gMTkyNDM3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNiwxMyArMTM2
LDMwIEBAIG5hbWVzcGFjZSBGVEwgewogLy8gICBpbnRyaW5zaWNzIChvciBtZXRhLWRhdGEsIG9y
IHNvbWV0aGluZykgdG8gaW5mb3JtIHRoZSBiYWNrZW5kIHRoYXQgaXQncyBzYWZlIHRvCiAvLyAg
IG1ha2UgdGhlIHByZWRpY2F0ZSBwYXNzZWQgdG8gJ2V4aXRJZigpJyBtb3JlIHRydXRoeS4KIAor
ZW51bSBjbGFzcyBFeGNlcHRpb25UeXBlIHsKKyAgICBOb25lLAorICAgIENDYWxsRXhjZXB0aW9u
LAorICAgIEpTQ2FsbCwKKyAgICBHZXRCeUlkLAorICAgIFB1dEJ5SWQsCisgICAgTGF6eVNsb3dQ
YXRoLAorICAgIFN1YkdlbmVyYXRvcgorfTsKKwogc3RydWN0IE9TUkV4aXREZXNjcmlwdG9yIHsK
ICAgICBPU1JFeGl0RGVzY3JpcHRvcigKLSAgICAgICAgRXhpdEtpbmQsIERhdGFGb3JtYXQgcHJv
ZmlsZURhdGFGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsCisgICAgICAgIEV4
aXRLaW5kLCBFeGNlcHRpb25UeXBlLCBEYXRhRm9ybWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLAogICAgICAgICBDb2RlT3JpZ2luLCBDb2RlT3JpZ2lu
IG9yaWdpbkZvclByb2ZpbGUsCiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1
bnNpZ25lZCBudW1iZXJPZkxvY2Fscyk7CiAKKyAgICBib29sIHdpbGxBcnJpdmVBdEV4aXRGcm9t
SW5kaXJlY3RFeGNlcHRpb25DaGVjaygpIGNvbnN0OworICAgIGJvb2wgbWlnaHRBcnJpdmVBdE9T
UkV4aXRGcm9tR2VuZXJpY1Vud2luZCgpIGNvbnN0OworICAgIGJvb2wgbWlnaHRBcnJpdmVBdE9T
UkV4aXRGcm9tQ2FsbE9wZXJhdGlvbigpIGNvbnN0OworICAgIGJvb2wgbmVlZHNSZWdpc3RlclJl
Y292ZXJ5T25HZW5lcmljVW53aW5kT1NSRXhpdFBhdGgoKSBjb25zdDsKKyAgICBib29sIGlzRXhj
ZXB0aW9uSGFuZGxlcigpIGNvbnN0OworCiAgICAgRXhpdEtpbmQgbV9raW5kOworICAgIEV4Y2Vw
dGlvblR5cGUgbV9leGNlcHRpb25UeXBlOwogICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwog
ICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CiAgICAgQ29kZU9yaWdp
biBtX3NlbWFudGljQ29kZU9yaWdpbkZvckNhbGxGcmFtZUhlYWRlcjsKQEAgLTE2MSwxMSArMTc4
LDYgQEAgc3RydWN0IE9TUkV4aXREZXNjcmlwdG9yIHsKICAgICB1aW50MzJfdCBtX3N0YWNrbWFw
SUQ7CiAgICAgSGFuZGxlckluZm8gbV9iYXNlbGluZUV4Y2VwdGlvbkhhbmRsZXI7CiAgICAgYm9v
bCBtX2lzSW52YWxpZGF0aW9uUG9pbnQgOiAxOwotICAgIGJvb2wgbV9pc0V4Y2VwdGlvbkhhbmRs
ZXIgOiAxOwotICAgIGJvb2wgbV93aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQg
OiAxOwotICAgIGJvb2wgbV9pc0V4Y2VwdGlvbkZyb21KU0NhbGwgOiAxOwotICAgIGJvb2wgbV9p
c0V4Y2VwdGlvbkZyb21HZXRCeUlkIDogMTsKLSAgICBib29sIG1faXNFeGNlcHRpb25Gcm9tTGF6
eVNsb3dQYXRoIDogMTsKICAgICAKICAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBU
cmFja2VkUmVmZXJlbmNlcyYpOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCShyZXZpc2lvbiAxOTI0Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBzdHJ1Y3QgT1NSRXhpdENvbXBpbGF0
aW9uSW5mbyB7CiAgICAgfQogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3RodW5r
TGFiZWw7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fZ2V0QW5kUHV0QnlJZENhbGxPcGVy
YXRpb25FeGNlcHRpb25PU1JFeGl0RW50cmFuY2U7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fY2FsbE9wZXJhdGlvbkV4Y2VwdGlvbk9TUkV4aXRFbnRyYW5jZTsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UGF0Y2hhYmxlSnVtcCBtX3RodW5rSnVtcDsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBt
X3RodW5rQWRkcmVzczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxOTI0MzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU0Nyw4ICs1NDcsOCBAQCBleHRlcm4gIkMiIHZvaWQqIGNvbXBpbGVGVExPU1JFeGl0KEV4ZWNT
CiAgICAgICAgIGRhdGFMb2coIiAgICBFeGl0IHN0YWNrbWFwIElEOiAiLCBleGl0Lm1fZGVzY3Jp
cHRvci5tX3N0YWNrbWFwSUQsICJcbiIpOwogICAgICAgICBkYXRhTG9nKCIgICAgQ3VycmVudCBj
YWxsIHNpdGUgaW5kZXg6ICIsIGV4ZWMtPmNhbGxTaXRlSW5kZXgoKS5iaXRzKCksICJcbiIpOwog
ICAgICAgICBkYXRhTG9nKCIgICAgRXhpdCBpcyBleGNlcHRpb24gaGFuZGxlcjogIiwgZXhpdC5t
X2lzRXhjZXB0aW9uSGFuZGxlciwKLSAgICAgICAgICAgICIgd2lsbCBhcnJpdmUgYXQgZXhpdCBm
cm9tIGdlbmVyaWNVbndpbmQoKTogIiwgZXhpdC5tX2Rlc2NyaXB0b3IubV93aWxsQXJyaXZlQXRP
U1JFeGl0RnJvbUdlbmVyaWNVbndpbmQsIAotICAgICAgICAgICAgIiB3aWxsIGFycml2ZSBhdCBl
eGl0IGZyb20gbGF6eSBzbG93IHBhdGg6ICIsIGV4aXQubV9kZXNjcmlwdG9yLm1faXNFeGNlcHRp
b25Gcm9tTGF6eVNsb3dQYXRoLCAiXG4iKTsKKyAgICAgICAgICAgICIgbWlnaHQgYXJyaXZlIGF0
IGV4aXQgZnJvbSBnZW5lcmljVW53aW5kKCk6ICIsIGV4aXQubV9kZXNjcmlwdG9yLm1pZ2h0QXJy
aXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQoKSwgCisgICAgICAgICAgICAiIHdpbGwgYXJy
aXZlIGF0IGV4aXQgZnJvbSBsYXp5IHNsb3cgcGF0aDogIiwgZXhpdC5tX2Rlc2NyaXB0b3IubV9l
eGNlcHRpb25UeXBlID09IEV4Y2VwdGlvblR5cGU6OkxhenlTbG93UGF0aCwgIlxuIik7CiAgICAg
ICAgIGRhdGFMb2coIiAgICBFeGl0IHZhbHVlczogIiwgZXhpdC5tX2Rlc2NyaXB0b3IubV92YWx1
ZXMsICJcbiIpOwogICAgICAgICBpZiAoIWV4aXQubV9kZXNjcmlwdG9yLm1fbWF0ZXJpYWxpemF0
aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBNYXRlcmlhbGl6YXRp
b25zOlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0bC10
cnktY2F0Y2gtYXJpdGgtc3ViLWV4Y2VwdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0bC10cnktY2F0Y2gtYXJpdGgtc3ViLWV4Y2VwdGlv
bi5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
ZnRsLXRyeS1jYXRjaC1hcml0aC1zdWItZXhjZXB0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTkgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoInVoIG9oIik7Cit9CisKK2xldCBmbGFnID0gZmFsc2U7CitsZXQgbyA9
IHsKKyAgICB2YWx1ZU9mKCkgeworICAgICAgICBpZiAoZmxhZykKKyAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiYnkgYnkiKTsKKyAgICAgICAgcmV0dXJuIDEzLjU7CisgICAgfQorfTsKK25v
SW5saW5lKG8udmFsdWVPZik7CisKK2Z1bmN0aW9uIGJheigpIHsgcmV0dXJuIDEuNTsgfQorbm9J
bmxpbmUoYmF6KTsKKworZnVuY3Rpb24gZm9vKHgsIG8pIHsKKyAgICBsZXQgciA9IGJheigpOwor
ICAgIHRyeSB7CisgICAgICAgIHIgPSB4IC0gbyAtIHI7CisgICAgfSBjYXRjaChlKSB7IH0KKyAg
ICByZXR1cm4gcjsKK30KK25vSW5saW5lKGZvbyk7CisKK2xldCB4ID0gMjAuNTsKK2ZvciAobGV0
IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGFzc2VydChmb28oeCwgbykgPT09IDUuNSk7
Cit9CitmbGFnID0gdHJ1ZTsKK2Fzc2VydChmb28oeCwgbykgPT09IDEuNSk7CisKKworZnVuY3Rp
b24gYmFyKHgsIG8pIHsKKyAgICBsZXQgY2F1Z2h0RXhjZXB0aW9uID0gZmFsc2U7CisgICAgdmFy
IHIgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIC8vIFRoaXMgdGVzdHMgYWxpYXNpbmcgb2Yg
bGVmdC9yaWdodCB3aXRoIHJlc3VsdCByZWdpc3RlciBpbiBhIFN1YkdlbmVyYXRvcgorICAgICAg
ICAvLyBhbmQgZW5zdXJlcyB0aGF0IHRoZSBzdWIgd2lsbCBzcGlsbCB0aGUgcmVnaXN0ZXIgcHJv
cGVybHkgYW5kIHRoYXQgd2UgdmFsdWUKKyAgICAgICAgLy8gcmVjb3ZlciBwcm9wZXJseS4KKyAg
ICAgICAgciA9IHggLSBvOworICAgIH0gY2F0Y2goZSkgeworICAgICAgICBjYXVnaHRFeGNlcHRp
b24gPSB0cnVlOworICAgICAgICBhc3NlcnQociA9PT0gbnVsbCk7CisgICAgfQorICAgIGlmICgh
Y2F1Z2h0RXhjZXB0aW9uKQorICAgICAgICBhc3NlcnQociA9PT0gNyk7CisgICAgcmV0dXJuIGNh
dWdodEV4Y2VwdGlvbjsKK30gCitub0lubGluZShiYXIpOworCitmbGFnID0gZmFsc2U7Citmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICBhc3NlcnQoYmFyKHgsIG8pID09PSBm
YWxzZSk7Cit9CitmbGFnID0gdHJ1ZTsKK2Fzc2VydChiYXIoeCwgbykgPT09IHRydWUpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>