<?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>63879</bug_id>
          
          <creation_ts>2011-07-03 15:33:31 -0700</creation_ts>
          <short_desc>Reduce code duplication for op_jless, op_jlesseq, op_jnless, op_jnlesseq.</short_desc>
          <delta_ts>2011-07-03 22:59:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (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>
          
          <blocked>63881</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>431754</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-07-03 15:33:31 -0700</bug_when>
    <thetext>There is a lot of copy &amp; paste code here; we can reduce duplication by making a shared implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431755</commentid>
    <comment_count>1</comment_count>
      <attachid>99584</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-07-03 15:34:10 -0700</bug_when>
    <thetext>Created attachment 99584
Preliminare patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431759</commentid>
    <comment_count>2</comment_count>
      <attachid>99585</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-07-03 16:35:21 -0700</bug_when>
    <thetext>Created attachment 99585
The patch

SunSpider shows a small progression, likely just noise, but this patch will optimize op_loop_if_lesseq!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431767</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-03 18:31:07 -0700</bug_when>
    <thetext>Attachment 99585 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/jit/JIT.h:723:  The parameter name &quot;condition&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/JIT.h:723:  emit_compareAndJump is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/jit/JIT.h:724:  The parameter name &quot;condition&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/JIT.h:724:  The parameter name &quot;iter&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/JIT.h:724:  emit_compareAndJumpSlow is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/jit/JITArithmetic32_64.cpp:87:  JIT::emit_compareAndJump is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/jit/JITArithmetic32_64.cpp:138:  JIT::emit_compareAndJumpSlow is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/jit/JITArithmetic.cpp:318:  JIT::emit_compareAndJump is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/jit/JITArithmetic.cpp:362:  JIT::emit_compareAndJumpSlow is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 9 in 5 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>431817</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-07-03 22:59:32 -0700</bug_when>
    <thetext>Fixed in r90352</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99584</attachid>
            <date>2011-07-03 15:34:10 -0700</date>
            <delta_ts>2011-07-03 16:35:21 -0700</delta_ts>
            <desc>Preliminare patch</desc>
            <filename>lessJITChanges.patch</filename>
            <type>text/plain</type>
            <size>46965</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDg5MjEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDExIEBAIHB1
YmxpYzoKICAgICAgICAgYnJhbmNoMzIoY29uZCwgbGVmdCwgcmlnaHQpLmxpbmtUbyh0YXJnZXQs
IHRoaXMpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNoMzIoUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBUcnVzdGVkSW1tMzIgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAg
IHJldHVybiBicmFuY2gzMihjb21tdXRlKGNvbmQpLCByaWdodCwgbGVmdCk7CisgICAgfQorCiAg
ICAgdm9pZCBicmFuY2gxNihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0
LCBSZWdpc3RlcklEIHJpZ2h0LCBMYWJlbCB0YXJnZXQpCiAgICAgewogICAgICAgICBicmFuY2gx
Nihjb25kLCBsZWZ0LCByaWdodCkubGlua1RvKHRhcmdldCwgdGhpcyk7CkBAIC0xNDAsNiArMTQ1
LDM1IEBAIHB1YmxpYzoKICAgICAgICAganVtcCgpLmxpbmtUbyh0YXJnZXQsIHRoaXMpOwogICAg
IH0KIAorICAgIC8vIENvbW11dGUgYSByZWxhdGlvbmFsIGNvbmRpdGlvbiwgcmV0dXJucyBhIG5l
dyBjb25kaXRpb24gdGhhdCB3aWxsIHByb2R1Y2UKKyAgICAvLyB0aGUgc2FtZSByZXN1bHRzIGdp
dmVuIHRoZSBzYW1lIGlucHV0cyBidXQgd2l0aCB0aGVpciBwb3NpdGlvbnMgZXhjaGFuZ2VkLgor
ICAgIHN0YXRpYyBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbW11dGUoUmVsYXRpb25hbENvbmRpdGlv
biBjb25kaXRpb24pCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbikgeworICAgICAg
ICBjYXNlIEFib3ZlOgorICAgICAgICAgICAgcmV0dXJuIEJlbG93OworICAgICAgICBjYXNlIEFi
b3ZlT3JFcXVhbDoKKyAgICAgICAgICAgIHJldHVybiBCZWxvd09yRXF1YWw7CisgICAgICAgIGNh
c2UgQmVsb3c6CisgICAgICAgICAgICByZXR1cm4gQWJvdmU7CisgICAgICAgIGNhc2UgQmVsb3dP
ckVxdWFsOgorICAgICAgICAgICAgcmV0dXJuIEFib3ZlT3JFcXVhbDsKKyAgICAgICAgY2FzZSBH
cmVhdGVyVGhhbjoKKyAgICAgICAgICAgIHJldHVybiBMZXNzVGhhbjsKKyAgICAgICAgY2FzZSBH
cmVhdGVyVGhhbk9yRXF1YWw6CisgICAgICAgICAgICByZXR1cm4gTGVzc1RoYW5PckVxdWFsOwor
ICAgICAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICAgICAgcmV0dXJuIEdyZWF0ZXJUaGFuOwor
ICAgICAgICBjYXNlIExlc3NUaGFuT3JFcXVhbDoKKyAgICAgICAgICAgIHJldHVybiBHcmVhdGVy
VGhhbk9yRXF1YWw7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIEFTU0VSVChjb25kaXRpb24gPT0gRXF1YWwgfHwgY29uZGl0aW9uID09
IE5vdEVxdWFsKTsKKyAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjsKKyAgICB9CisgICAgCiAKICAg
ICAvLyBQdHIgbWV0aG9kcwogICAgIC8vIE9uIDMyLWJpdCBwbGF0Zm9ybXMgKGkuZS4geDg2KSwg
dGhlc2UgbWV0aG9kcyBkaXJlY3RseSBtYXAgb250byB0aGVpciAzMi1iaXQgZXF1aXZhbGVudHMu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiA4OTIxMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkod29ya2luZyBj
b3B5KQpAQCAtODM5LDE1ICs4MzksNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKdW1wKG1f
YXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAgICAgCi0gICAgSnVt
cCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBsZWZ0LCBS
ZWdpc3RlcklEIHJpZ2h0KQotICAgIHsKLSAgICAgICAgaWYgKCgoY29uZCA9PSBFcXVhbCkgfHwg
KGNvbmQgPT0gTm90RXF1YWwpKSAmJiAhbGVmdC5tX3ZhbHVlKQotICAgICAgICAgICAgbV9hc3Nl
bWJsZXIudGVzdGxfcnIocmlnaHQsIHJpZ2h0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV9hc3NlbWJsZXIuY21wbF9pcihsZWZ0Lm1fdmFsdWUsIHJpZ2h0KTsKLSAgICAgICAgcmV0dXJu
IEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb21tdXRlKGNvbmQpKSkpOwotICAg
IH0KLSAgICAKICAgICBKdW1wIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBsZWZ0LCBBZGRyZXNzIHJpZ2h0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIu
Y21wbF9tcihyaWdodC5vZmZzZXQsIHJpZ2h0LmJhc2UsIGxlZnQpOwpAQCAtMTE5NiwyNSArMTE4
Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbGF0aW9uYWxDb25k
aXRpb24+KGNvbmQgXiAxKTsKICAgICB9CiAKLSAgICAvLyBDb21tdXRlIGEgcmVsYXRpb25hbCBj
b25kaXRpb24sIHJldHVybnMgYSBuZXcgY29uZGl0aW9uIHRoYXQgd2lsbCBwcm9kdWNlCi0gICAg
Ly8gdGhlIHNhbWUgcmVzdWx0cyBnaXZlbiB0aGUgc2FtZSBpbnB1dHMgYnV0IHdpdGggdGhlaXIg
cG9zaXRpb25zIGV4Y2hhbmdlZC4KLSAgICBzdGF0aWMgUmVsYXRpb25hbENvbmRpdGlvbiBjb21t
dXRlKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCkKLSAgICB7Ci0gICAgICAgIC8vIEVxdWFsaXR5
IGlzIGNvbW11dGF0aXZlIQotICAgICAgICBpZiAoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5v
dEVxdWFsKQotICAgICAgICAgICAgcmV0dXJuIGNvbmQ7Ci0KLSAgICAgICAgLy8gQmFzZWQgb24g
dGhlIHZhbHVlcyBvZiB4ODYgY29uZGl0aW9uIGNvZGVzLCByZW1hcCA+IHdpdGggPCBhbmQgPj0g
d2l0aCA8PQotICAgICAgICBpZiAoY29uZCA+PSBMZXNzVGhhbikgewotICAgICAgICAgICAgQVNT
RVJUKGNvbmQgPT0gTGVzc1RoYW4gfHwgY29uZCA9PSBMZXNzVGhhbk9yRXF1YWwgfHwgY29uZCA9
PSBHcmVhdGVyVGhhbiB8fCBjb25kID09IEdyZWF0ZXJUaGFuT3JFcXVhbCk7Ci0gICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVsYXRpb25hbENvbmRpdGlvbj4oWDg2QXNzZW1ibGVyOjpD
b25kaXRpb25MICsgWDg2QXNzZW1ibGVyOjpDb25kaXRpb25HIC0gY29uZCk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBBcyBhYm92ZSwgZm9yIHVuc2lnbmVkIGNvbmRpdGlvbnMuCi0gICAgICAg
IEFTU0VSVChjb25kID09IEJlbG93IHx8IGNvbmQgPT0gQmVsb3dPckVxdWFsIHx8IGNvbmQgPT0g
QWJvdmUgfHwgY29uZCA9PSBBYm92ZU9yRXF1YWwpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UmVsYXRpb25hbENvbmRpdGlvbj4oWDg2QXNzZW1ibGVyOjpDb25kaXRpb25CICsgWDg2QXNz
ZW1ibGVyOjpDb25kaXRpb25BIC0gY29uZCk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgbm9wKCkK
ICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiA4OTIxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxNyw2ICs3MTcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICNk
ZWZpbmUgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0VfRk9SX1BVVChuYW1lLCBkc3QpIGRvIHsg
ZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKCk7IH0gd2hpbGUgKGZhbHNlKQogI2VuZGlmCiAKKyAg
ICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wKE9wY29kZUlELCB1bnNpZ25lZCBvcDEsIHVu
c2lnbmVkIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
bik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3codW5zaWduZWQgb3AxLCB1
bnNpZ25lZCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwg
aW50IChKSVRfU1RVQiAqc3R1YikoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSwgYm9vbCBpbnZlcnQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpOworCiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9hZGQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdGFuZChJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0bm90KEluc3RydWN0aW9uKik7
CkBAIC03NTksNyArNzYyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9qbmVxX3B0cihJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfam5sZXNzKElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qbGVzcyhJbnN0cnVjdGlvbiopOwot
ICAgICAgICB2b2lkIGVtaXRfb3Bfamxlc3NlcShJbnN0cnVjdGlvbiosIGJvb2wgaW52ZXJ0ID0g
ZmFsc2UpOworICAgICAgICB2b2lkIGVtaXRfb3Bfamxlc3NlcShJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3Bfam5sZXNzZXEoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX2pzcihJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfanRydWUoSW5z
dHJ1Y3Rpb24qKTsKQEAgLTg1NSw3ICs4NTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzKEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2psZXNzKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfamxlc3NlcShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3Nl
cShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1ZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb2FkX3ZhcmFyZ3Mo
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC0xMDM3
LDYgKzEwNDAsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVtaXRTbG93X29wX2psZXNz
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQgSklU
OjplbWl0X29wX2xvb3BfaWZfbGVzc2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CisgICAgeworICAgICAgICBlbWl0VGltZW91dENoZWNrKCk7CisgICAgICAgIGVtaXRfb3Bfamxl
c3NlcShjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIH0KKworICAgIGlubGluZSB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbG9vcF9pZl9sZXNzZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKKyAgICB7CisgICAgICAg
IGVtaXRTbG93X29wX2psZXNzZXEoY3VycmVudEluc3RydWN0aW9uLCBpdGVyKTsKKyAgICB9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAJKHJldmlz
aW9uIDg5MjEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCwxMDEgKzg0LDggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lZ2F0ZShJbnN0cnVjdGlvbgogICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChPcGNvZGVJRCBvcGNvZGUsIHVuc2lnbmVk
IG9wMSwgdW5zaWduZWQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uKQogewotICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwotCi0gICAgSnVtcExpc3Qgbm90SW50MzJPcDE7Ci0gICAgSnVtcExpc3Qgbm90SW50MzJP
cDI7Ci0KLSAgICAvLyBDaGFyYWN0ZXIgbGVzcy4KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bW1lZGlhdGVDaGFyKG9wMSkpIHsKLSAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDAp
OwotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAg
ICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKGZhaWx1cmVzKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihM
ZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQo
b3AxKSktPnRyeUdldFZhbHVlKClbMF0pKSwgdGFyZ2V0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVDaGFyKG9wMikpIHsKLSAgICAg
ICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwotICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwot
ICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJp
bmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGZhaWx1cmVz
KTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QwLCBJ
bW0zMihhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQob3AyKSktPnRyeUdldFZhbHVlKClbMF0p
KSwgdGFyZ2V0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbW1lZGlhdGVJbnQob3AxKSkgewotICAgICAgICAvLyBJbnQzMiBsZXNzLgotICAgICAg
ICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgICAgIG5vdEludDMyT3AyLmFwcGVu
ZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZykpKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBJ
bW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKLSAgICB9
IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikpIHsKLSAgICAgICAg
ZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwotICAgICAgICBub3RJbnQzMk9wMS5hcHBlbmQo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
KSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMCwg
SW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpKSksIHRhcmdldCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgZW1pdExvYWQyKG9wMSwgcmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1Qz
LCByZWdUMik7Ci0gICAgICAgIG5vdEludDMyT3AxLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKLSAgICAgICAgbm90SW50
MzJPcDIuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSkpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JF
cXVhbCwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKLSAgICB9Ci0KLSAgICBpZiAoIXN1cHBvcnRz
RmxvYXRpbmdQb2ludCgpKSB7Ci0gICAgICAgIGFkZFNsb3dDYXNlKG5vdEludDMyT3AxKTsKLSAg
ICAgICAgYWRkU2xvd0Nhc2Uobm90SW50MzJPcDIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIEp1bXAgZW5kID0ganVtcCgpOwotCi0gICAgLy8gRG91YmxlIGxlc3MuCi0gICAgZW1pdEJp
bmFyeURvdWJsZU9wKG9wX2pubGVzcywgdGFyZ2V0LCBvcDEsIG9wMiwgT3BlcmFuZFR5cGVzKCks
IG5vdEludDMyT3AxLCBub3RJbnQzMk9wMiwgIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50
KG9wMSksIGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkgfHwgIWlzT3BlcmFuZENv
bnN0YW50SW1tZWRpYXRlSW50KG9wMikpOwotICAgIGVuZC5saW5rKHRoaXMpOwotfQotCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgdW5zaWduZWQg
b3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBvcDIg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHRhcmdldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbW1lZGlhdGVDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVDaGFy
KG9wMikpIHsKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghc3VwcG9ydHNGbG9hdGluZ1Bv
aW50KCkpIHsKLSAgICAgICAgICAgIGlmICghaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQo
b3AxKSAmJiAhaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkKLSAgICAgICAgICAg
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGludDMyIGNoZWNrCi0gICAgICAgICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIGludDMyIGNoZWNrCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAoIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkpIHsKLSAgICAgICAg
ICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGRvdWJsZSBjaGVjawotICAgICAgICAgICAg
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gaW50MzIgY2hlY2sKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpIHx8ICFpc09w
ZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKQotICAgICAgICAgICAgICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsgLy8gZG91YmxlIGNoZWNrCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBKSVRT
dHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfamxlc3MpOwotICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KG9wMSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AyKTsKLSAgICBzdHViQ2Fs
bC5jYWxsKCk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1Qw
KSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKLQogICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1bXBMaXN0IG5v
dEludDMyT3AyOwogCkBAIC0xODksNyArOTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhJ
bnN0cnVjdGlvbiogY3VyCiAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwogICAgICAgICBlbWl0
TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1cmVzKTsKICAgICAgICAgYWRk
U2xvd0Nhc2UoZmFpbHVyZXMpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEdyZWF0ZXJUaGFu
LCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkpLT50cnlHZXRW
YWx1ZSgpWzBdKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShj
b25kaXRpb24pLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkp
LT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlQ2hhcihvcDIpKSB7CkBAIC0xOTgsMjIg
KzEwNSwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhJbnN0cnVjdGlvbiogY3VyCiAgICAg
ICAgIEp1bXBMaXN0IGZhaWx1cmVzOwogICAgICAgICBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhy
ZWdUMCwgcmVnVDAsIGZhaWx1cmVzKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZmFpbHVyZXMpOwot
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgSW1tMzIoYXNTdHJpbmco
Z2V0Q29uc3RhbnRPcGVyYW5kKG9wMikpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoYXNTdHJpbmco
Z2V0Q29uc3RhbnRPcGVyYW5kKG9wMikpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9IAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0
ZUludChvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAg
ICAgbm90SW50MzJPcDIuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEdyZWF0
ZXJUaGFuLCByZWdUMiwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpKSks
IHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCBy
ZWdUMiwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpKSksIHRhcmdldCk7
CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKSB7CiAg
ICAgICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICAgICAgbm90SW50MzJPcDEu
YXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Oklu
dDMyVGFnKSkpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgSW1t
MzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpKSksIHRhcmdldCk7CisgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVy
YW5kKG9wMikuYXNJbnQzMigpKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZW1p
dExvYWQyKG9wMSwgcmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgICAgIG5v
dEludDMyT3AxLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZykpKTsKICAgICAgICAgbm90SW50MzJPcDIuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwotICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgcmVnVDIpLCB0YXJnZXQpOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0
KTsKICAgICB9CiAKICAgICBpZiAoIXN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CkBAIC0yMjQs
MTYgKzEzMSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhJbnN0cnVjdGlvbiogY3VyCiAg
ICAgSnVtcCBlbmQgPSBqdW1wKCk7CiAKICAgICAvLyBEb3VibGUgbGVzcy4KLSAgICBlbWl0Qmlu
YXJ5RG91YmxlT3Aob3Bfamxlc3MsIHRhcmdldCwgb3AxLCBvcDIsIE9wZXJhbmRUeXBlcygpLCBu
b3RJbnQzMk9wMSwgbm90SW50MzJPcDIsICFpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChv
cDEpLCBpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpIHx8ICFpc09wZXJhbmRDb25z
dGFudEltbWVkaWF0ZUludChvcDIpKTsKKyAgICBlbWl0QmluYXJ5RG91YmxlT3Aob3Bjb2RlLCB0
YXJnZXQsIG9wMSwgb3AyLCBPcGVyYW5kVHlwZXMoKSwgbm90SW50MzJPcDEsIG5vdEludDMyT3Ay
LCAhaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSwgaXNPcGVyYW5kQ29uc3RhbnRJ
bW1lZGlhdGVJbnQob3AxKSB8fCAhaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSk7
CiAgICAgZW5kLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KHVuc2lnbmVk
IG9wMSwgdW5zaWduZWQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIERvdWJsZUNvbmRpdGlvbiwgaW50
IChKSVRfU1RVQiAqc3R1YikoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSwgYm9vbCBpbnZlcnQsIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgdW5zaWduZWQgb3Ax
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBvcDIgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgCiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW1tZWRpYXRlQ2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlQ2hh
cihvcDIpKSB7CiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwpAQCAtMjUzLDExMSArMTU2LDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9q
bGVzcyhJbnN0cnVjdGlvbioKICAgICAgICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IGRvdWJsZSBjaGVjawogICAgICAgICB9CiAgICAgfQotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGN0aV9vcF9qbGVzcyk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AxKTsKLSAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDIpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qbGVzc2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJvb2wgaW52ZXJ0KQotewotICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwotCi0gICAgSnVtcExpc3Qgbm90SW50MzJPcDE7Ci0gICAgSnVtcExpc3Qg
bm90SW50MzJPcDI7Ci0KLSAgICAvLyBDaGFyYWN0ZXIgbGVzcy4KLSAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbW1lZGlhdGVDaGFyKG9wMSkpIHsKLSAgICAgICAgZW1pdExvYWQob3AyLCByZWdU
MSwgcmVnVDApOwotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotICAgICAgICBKdW1wTGlzdCBmYWls
dXJlczsKLSAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBmYWls
dXJlcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGZhaWx1cmVzKTsKLSAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihpbnZlcnQgPyBMZXNzVGhhbiA6IEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDAsIElt
bTMyKGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChvcDEpKS0+dHJ5R2V0VmFsdWUoKVswXSkp
LCB0YXJnZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEltbWVkaWF0ZUNoYXIob3AyKSkgewotICAgICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Ci0gICAgICAgIEp1bXBMaXN0IGZhaWx1cmVz
OwotICAgICAgICBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1cmVz
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZmFpbHVyZXMpOwotICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGludmVydCA/IEdyZWF0ZXJUaGFuIDogTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIo
YXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRh
cmdldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW1tZWRpYXRlSW50KG9wMSkpIHsKLSAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIp
OwotICAgICAgICBub3RJbnQzMk9wMi5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoaW52ZXJ0ID8gTGVzc1RoYW4gOiBHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QyLCBJbW0zMihn
ZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKLSAgICB9IGVsc2Ug
aWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikpIHsKLSAgICAgICAgZW1pdExv
YWQob3AxLCByZWdUMSwgcmVnVDApOwotICAgICAgICBub3RJbnQzMk9wMS5hcHBlbmQoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0g
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoaW52ZXJ0ID8gR3JlYXRlclRoYW4gOiBMZXNzVGhhbk9y
RXF1YWwsIHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkpKSwg
dGFyZ2V0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbWl0TG9hZDIob3AxLCByZWdUMSwgcmVn
VDAsIG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICAgICAgbm90SW50MzJPcDEuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwot
ICAgICAgICBub3RJbnQzMk9wMi5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
aW52ZXJ0ID8gR3JlYXRlclRoYW4gOiBMZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCByZWdUMiksIHRh
cmdldCk7Ci0gICAgfQotCi0gICAgaWYgKCFzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewotICAg
ICAgICBhZGRTbG93Q2FzZShub3RJbnQzMk9wMSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKG5vdElu
dDMyT3AyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBKdW1wIGVuZCA9IGp1bXAoKTsK
LQotICAgIC8vIERvdWJsZSBsZXNzLgotICAgIGVtaXRCaW5hcnlEb3VibGVPcChpbnZlcnQgPyBv
cF9qbmxlc3NlcSA6IG9wX2psZXNzZXEsIHRhcmdldCwgb3AxLCBvcDIsIE9wZXJhbmRUeXBlcygp
LCBub3RJbnQzMk9wMSwgbm90SW50MzJPcDIsICFpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUlu
dChvcDEpLCBpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpIHx8ICFpc09wZXJhbmRD
b25zdGFudEltbWVkaWF0ZUludChvcDIpKTsKLSAgICBlbmQubGluayh0aGlzKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgYm9vbCBpbnZlcnQpCi17
Ci0gICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVu
c2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3Rh
bnRJbW1lZGlhdGVDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAg
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghc3Vw
cG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKLSAgICAgICAgICAgIGlmICghaXNPcGVyYW5kQ29uc3Rh
bnRJbW1lZGlhdGVJbnQob3AxKSAmJiAhaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3Ay
KSkKLSAgICAgICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGludDMyIGNoZWNrCi0g
ICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGludDMyIGNoZWNrCi0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9w
MSkpIHsKLSAgICAgICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGRvdWJsZSBjaGVj
awotICAgICAgICAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gaW50MzIgY2hlY2sKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUlu
dChvcDEpIHx8ICFpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKQotICAgICAgICAg
ICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZG91YmxlIGNoZWNrCi0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfamxlc3NlcSk7Cisg
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgc3R1Yik7CiAgICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQob3AxKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDIpOwogICAgIHN0dWJDYWxs
LmNhbGwoKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVy
byA6IE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfam5s
ZXNzZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29wX2ps
ZXNzZXEoY3VycmVudEluc3RydWN0aW9uLCB0cnVlKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pubGVzc2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgZW1pdFNsb3dfb3Bfamxlc3NlcShj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIHRydWUpOwotfQotCiAvLyBMZWZ0U2hpZnQgKDw8KQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9sc2hpZnQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAko
cmV2aXNpb24gODkyMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0
aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAKICNpZiBFTkFCTEUoSklUKQotI2lmIFVTRShKU1ZBTFVFNjQpCiAjaW5jbHVkZSAiSklU
LmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKQEAgLTQ3LDYgKzQ2LDgwIEBAIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewogCit2b2lkIEpJVDo6ZW1pdF9vcF9qbGVz
cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIG9wMSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgb3AyID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1pdF9jb21wYXJlQW5kSnVtcChv
cF9qbGVzcywgb3AxLCBvcDIsIHRhcmdldCwgTGVzc1RoYW4pOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9qbGVzc2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5z
aWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25l
ZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRh
cmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wKG9wX2psZXNzZXEsIG9wMSwgb3AyLCB0YXJnZXQsIExlc3NUaGFuT3JFcXVhbCk7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2pubGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CisgICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OworCisgICAgZW1pdF9jb21wYXJlQW5kSnVtcChvcF9qbmxlc3MsIG9wMSwgb3AyLCB0YXJnZXQs
IEdyZWF0ZXJUaGFuT3JFcXVhbCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2pubGVzc2VxKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQgb3AxID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wKG9wX2pu
bGVzc2VxLCBvcDEsIG9wMiwgdGFyZ2V0LCBHcmVhdGVyVGhhbik7Cit9CisKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIHVuc2lnbmVkIG9wMSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgb3AyID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3co
b3AxLCBvcDIsIHRhcmdldCwgRG91YmxlTGVzc1RoYW4sIGN0aV9vcF9qbGVzcywgZmFsc2UsIGl0
ZXIpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
eworICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Cisg
ICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1
bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cob3AxLCBvcDIsIHRhcmdldCwgRG91YmxlTGVzc1RoYW5P
ckVxdWFsLCBjdGlfb3Bfamxlc3NlcSwgZmFsc2UsIGl0ZXIpOworfQorCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfam5sZXNzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgdW5zaWduZWQgb3AxID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhv
cDEsIG9wMiwgdGFyZ2V0LCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgY3Rp
X29wX2psZXNzLCB0cnVlLCBpdGVyKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVz
c2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhvcDEsIG9wMiwgdGFy
Z2V0LCBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBjdGlfb3Bfamxlc3NlcSwgdHJ1ZSwg
aXRlcik7Cit9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9sc2hp
ZnQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICB1bnNpZ25lZCByZXN1
bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwpAQCAtMjQyLDE2NSArMzE1LDgg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Vyc2hpZnQoSW5zdHJ1Y3RpbwogICAgIHN0dWJDYWxs
LmNhbGwoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7Ci0KLSAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZv
bGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgotICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0
byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCi0gICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRl
IHRvIGludCBpbW1lZGlhdGUKLSAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0
ZQotCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlQ2hhcihvcDEpKSB7Ci0gICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7Ci0gICAgICAgIGFkZFNsb3dD
YXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApKTsKLSAgICAgICAgSnVtcExpc3QgZmFpbHVy
ZXM7Ci0gICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwgZmFpbHVy
ZXMpOwotICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0Q29uc3RhbnRP
cGVyYW5kKG9wMSkpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlQ2hhcihvcDIpKSB7
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgICAgIGFk
ZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApKTsKLSAgICAgICAgSnVtcExpc3Qg
ZmFpbHVyZXM7Ci0gICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwg
ZmFpbHVyZXMpOwotICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0
Q29uc3RhbnRPcGVyYW5kKG9wMikpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50
KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7Ci0gICAg
ICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KG9wMik7
Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMCwgSW1t
MzIob3AyaW1tKSksIHRhcmdldCk7Ci0gICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudElt
bWVkaWF0ZUludChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBy
ZWdUMSk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVn
VDEpOwotICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0
ZUludChvcDEpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVn
VDEsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKLSAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7Ci0KLSAgICAgICAgYWRkSnVt
cChicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7Ci0g
ICAgfQotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17
Ci0gICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVu
c2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICAv
LyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUg
c2xvdyBwYXRoOgotICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGNvbnN0YW50IGlu
dCBpbW1lZGlhdGUKLSAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRpbmct
cG9pbnQgbnVtYmVyCi0gICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRpbmct
cG9pbnQgbnVtYmVyLgotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUNoYXIob3Ax
KSB8fCBpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUNoYXIob3AyKSkgewotICAgICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgICAgIEpJ
VFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbGVzcyk7Ci0gICAgICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KG9wMSwgcmVnVDApOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChv
cDIsIHJlZ1QxKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmVnVDApLCB0YXJnZXQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikp
IHsKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotCi0gICAgICAgIGlmIChzdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkgewotICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGVtaXRKdW1wSWZOb3RJ
bW1lZGlhdGVOdW1iZXIocmVnVDApOwotICAgICAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVnVDApOwotICAgICAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJl
Z1QwKTsKLQotICAgICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRDb25zdGFudE9wZXJhbmQo
b3AyKS5hc0ludDMyKCk7OwotCi0gICAgICAgICAgICBtb3ZlKEltbTMyKG9wMmltbSksIHJlZ1Qx
KTsKLSAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKLQot
ICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFu
T3JFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QxLCBmcFJlZ1QwKSwgdGFyZ2V0KTsKLQotICAgICAg
ICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2pubGVzcykp
OwotCi0gICAgICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2psZXNzKTsKLSAgICAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQocmVnVDApOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDIs
IHJlZ1QyKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoWmVybywgcmVnVDApLCB0YXJnZXQpOwotCi0gICAgfSBlbHNlIGlm
IChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpKSB7Ci0gICAgICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsKLQotICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKLSAg
ICAgICAgICAgIEp1bXAgZmFpbDEgPSBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1Qx
KTsKLSAgICAgICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAg
ICAgICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7Ci0KLSAgICAgICAgICAg
IGludDMyX3Qgb3AxaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpOzsKLQot
ICAgICAgICAgICAgbW92ZShJbW0zMihvcDFpbW0pLCByZWdUMCk7Ci0gICAgICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7Ci0KLSAgICAgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwg
ZnBSZWdUMSwgZnBSZWdUMCksIHRhcmdldCk7Ci0KLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9qbmxlc3MpKTsKLQotICAgICAgICAgICAgZmFp
bDEubGluayh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGN0aV9vcF9qbGVzcyk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMSwg
cmVnVDIpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7Ci0gICAgICAgIHN0
dWJDYWxsLmNhbGwoKTsKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QwKSwgdGFyZ2V0KTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsKLQotICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKLSAgICAg
ICAgICAgIEp1bXAgZmFpbDEgPSBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QwKTsK
LSAgICAgICAgICAgIEp1bXAgZmFpbDIgPSBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJl
Z1QxKTsKLSAgICAgICAgICAgIEp1bXAgZmFpbDMgPSBlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdl
cihyZWdUMSk7Ci0gICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdU
MCk7Ci0gICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7Ci0g
ICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwotICAgICAgICAgICAg
bW92ZVB0clRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKLQotICAgICAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBm
cFJlZ1QxLCBmcFJlZ1QwKSwgdGFyZ2V0KTsKLQotICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2pubGVzcykpOwotCi0gICAgICAgICAgICBmYWls
MS5saW5rKHRoaXMpOwotICAgICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKLSAgICAgICAgICAg
IGZhaWwzLmxpbmsodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7Ci0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbGVzcyk7Ci0g
ICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQocmVnVDEpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCksIHRhcmdldCk7Ci0gICAgfQot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoT3Bjb2RlSUQsIHVuc2lnbmVkIG9w
MSwgdW5zaWduZWQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQogewotICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OwotCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2Fz
ZXMgaW4gdGhlIGZhc3QgcGF0aDoKICAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQg
aW50IGltbWVkaWF0ZQogICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1t
ZWRpYXRlCkBAIC00MTIsNyArMzI4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoSW5zdHJ1
Y3Rpb24qIGN1cgogICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKICAgICAgICAgZW1pdExvYWRD
aGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7CiAgICAgICAgIGFkZFNsb3dD
YXNlKGZhaWx1cmVzKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihHcmVhdGVyVGhhbiwgcmVn
VDAsIEltbTMyKGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChvcDEpKS0+dHJ5R2V0VmFsdWUo
KVswXSkpLCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0
aW9uKSwgcmVnVDAsIEltbTMyKGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChvcDEpKS0+dHJ5
R2V0VmFsdWUoKVswXSkpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlm
IChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUNoYXIob3AyKSkgewpAQCAtNDIxLDM0ICszMzcs
MzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoSW5zdHJ1Y3Rpb24qIGN1cgogICAgICAgICBK
dW1wTGlzdCBmYWlsdXJlczsKICAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAs
IHJlZ1QwLCBmYWlsdXJlcyk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGZhaWx1cmVzKTsKLSAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIEltbTMyKGFzU3RyaW5nKGdldENv
bnN0YW50T3BlcmFuZChvcDIpKS0+dHJ5R2V0VmFsdWUoKVswXSkpLCB0YXJnZXQpOworICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKGFzU3RyaW5nKGdldENv
bnN0YW50T3BlcmFuZChvcDIpKS0+dHJ5R2V0VmFsdWUoKVswXSkpLCB0YXJnZXQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChv
cDIpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CiAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDApOwogICAgICAg
ICBpbnQzMl90IG9wMmltbSA9IGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChvcDIpOwot
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgSW1tMzIob3AyaW1tKSks
IHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1t
MzIob3AyaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudElt
bWVkaWF0ZUludChvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBy
ZWdUMSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVn
VDEpOwogICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0
ZUludChvcDEpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCByZWdUMSwg
SW1tMzIob3AxaW1tKSksIHRhcmdldCk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0
ZShjb25kaXRpb24pLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdU
MSk7CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDAp
OwogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsK
IAotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgcmVnVDEpLCB0YXJn
ZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxKSwg
dGFyZ2V0KTsKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KHVuc2lnbmVkIG9wMSwg
dW5zaWduZWQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24s
IGludCAoSklUX1NUVUIgKnN0dWIpKFNUVUJfQVJHU19ERUNMQVJBVElPTiksIGJvb2wgaW52ZXJ0
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIHVuc2lnbmVk
IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgb3Ay
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCiAgICAgLy8gV2UgZ2VuZXJhdGUg
aW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKICAg
ICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCiAg
ICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgpA
QCAtNDU4LDExICszNzAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKEluc3RydWN0
aW9uKgogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgICAgICBKSVRTdHViQ2FsbCBz
dHViQ2FsbCh0aGlzLCBjdGlfb3Bfamxlc3MpOworICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2Fs
bCh0aGlzLCBzdHViKTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AxLCByZWdUMCk7
CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMiwgcmVnVDEpOwogICAgICAgICBzdHVi
Q2FsbC5jYWxsKCk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25a
ZXJvLCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC00NzksMTggKzM5MSwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfamxlc3MoSW5zdHJ1Y3Rpb24qCiAgICAgICAgICAgICBtb3ZlKEltbTMyKG9wMmltbSksIHJl
Z1QxKTsKICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsK
IAotICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NU
aGFuLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaERvdWJsZShjb25kaXRpb24sIGZwUmVnVDAsIGZwUmVnVDEpLCB0YXJnZXQp
OwogCiAgICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgo
b3Bfam5sZXNzKSk7CiAKICAgICAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CiAgICAgICAgIH0K
IAotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfamxlc3MpOworICAg
ICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBzdHViKTsKICAgICAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQocmVnVDApOwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDIsIHJl
Z1QyKTsKICAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJlZ1QwKSwg
dGFyZ2V0KTsKIAogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQo
b3AxKSkgewogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CkBAIC01MDUsMTY4ICs0MTcsMTQg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKEluc3RydWN0aW9uKgogICAgICAgICAgICAg
bW92ZShJbW0zMihvcDFpbW0pLCByZWdUMCk7CiAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShyZWdUMCwgZnBSZWdUMCk7CiAKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaERvdWJsZShEb3VibGVMZXNzVGhhbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7Cisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hEb3VibGUoY29uZGl0aW9uLCBmcFJl
Z1QwLCBmcFJlZ1QxKSwgdGFyZ2V0KTsKIAogICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
anVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2pubGVzcykpOwogCiAgICAgICAgICAgICBmYWlsMS5s
aW5rKHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhp
cywgY3RpX29wX2psZXNzKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AxLCByZWdU
Mik7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QxKTsKLSAgICAgICAgc3R1YkNh
bGwuY2FsbCgpOwotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVy
bywgcmVnVDApLCB0YXJnZXQpOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOwotCi0gICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewotICAgICAg
ICAgICAgSnVtcCBmYWlsMSA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApOwot
ICAgICAgICAgICAgSnVtcCBmYWlsMiA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVn
VDEpOwotICAgICAgICAgICAgSnVtcCBmYWlsMyA9IGVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2Vy
KHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1Qw
KTsKLSAgICAgICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAg
ICAgICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7Ci0gICAgICAgICAgICBt
b3ZlUHRyVG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOwotCi0gICAgICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW4sIGZwUmVnVDAsIGZwUmVnVDEpLCB0
YXJnZXQpOwotCi0gICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9M
RU5HVEgob3Bfam5sZXNzKSk7Ci0KLSAgICAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7Ci0gICAg
ICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwotICAgICAgICAgICAgZmFpbDMubGluayh0aGlzKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICAgICAgSklUU3R1
YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2psZXNzKTsKLSAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQocmVnVDApOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7Ci0g
ICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2psZXNzZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgYm9vbCBpbnZl
cnQpCi17Ci0gICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLSAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwot
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0K
LSAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBp
biB0aGUgZmFzdCBwYXRoOgotICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFudCBpbnQg
aW1tZWRpYXRlCi0gICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlh
dGUKLSAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQotCi0gICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW1tZWRpYXRlQ2hhcihvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZO
b3RKU0NlbGwocmVnVDApKTsKLSAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAgIGVt
aXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwgZmFpbHVyZXMpOwotICAgICAgICBh
ZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoaW52ZXJ0ID8g
TGVzc1RoYW4gOiBHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihhc1N0cmluZyhnZXRD
b25zdGFudE9wZXJhbmQob3AxKSktPnRyeUdldFZhbHVlKClbMF0pKSwgdGFyZ2V0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVDaGFy
KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAg
ICAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMCkpOwotICAgICAgICBK
dW1wTGlzdCBmYWlsdXJlczsKLSAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAs
IHJlZ1QwLCBmYWlsdXJlcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGZhaWx1cmVzKTsKLSAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihpbnZlcnQgPyBHcmVhdGVyVGhhbiA6IExlc3NUaGFuT3JFcXVh
bCwgcmVnVDAsIEltbTMyKGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChvcDIpKS0+dHJ5R2V0
VmFsdWUoKVswXSkpLCB0YXJnZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElt
bWVkaWF0ZUludGVnZXIocmVnVDApOwotICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldENvbnN0
YW50T3BlcmFuZEltbWVkaWF0ZUludChvcDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGlu
dmVydCA/IEdyZWF0ZXJUaGFuIDogTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIob3AyaW1t
KSksIHRhcmdldCk7Ci0gICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUlu
dChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0g
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwotICAg
ICAgICBpbnQzMl90IG9wMWltbSA9IGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChvcDEp
OwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGludmVydCA/IExlc3NUaGFuIDogR3JlYXRlclRo
YW5PckVxdWFsLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7
Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDApOwot
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKLQot
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGludmVydCA/IEdyZWF0ZXJUaGFuIDogTGVzc1RoYW5P
ckVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwotICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2psZXNzZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgYm9vbCBpbnZlcnQpCi17Ci0gICAgdW5z
aWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25l
ZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHRh
cmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICAvLyBXZSBnZW5l
cmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRo
OgotICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGNvbnN0YW50IGludCBpbW1lZGlh
dGUKLSAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQgbnVt
YmVyCi0gICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVt
YmVyLgotCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlQ2hhcihvcDEpIHx8IGlz
T3BlcmFuZENvbnN0YW50SW1tZWRpYXRlQ2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICAgICAgSklUU3R1YkNh
bGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2psZXNzZXEpOwotICAgICAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChvcDEsIHJlZ1QwKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AyLCBy
ZWdUMSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZWdUMCksIHRhcmdldCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1l
ZGlhdGVJbnQob3AyKSkgewotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0KLSAgICAgICAg
aWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Ci0gICAgICAgICAgICBKdW1wIGZhaWwxID0g
ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMCk7Ci0gICAgICAgICAgICBhZGRQdHIo
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAgICAgICBtb3ZlUHRyVG9Eb3Vi
bGUocmVnVDAsIGZwUmVnVDApOwotCi0gICAgICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldENv
bnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKTs7Ci0KLSAgICAgICAgICAgIG1vdmUoSW1tMzIo
b3AyaW1tKSwgcmVnVDEpOwotICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDEs
IGZwUmVnVDEpOwotCi0gICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hEb3VibGUo
aW52ZXJ0ID8gRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCA6IERvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbCwgZnBSZWdUMSwgZnBSZWdUMCksIHRhcmdldCk7Ci0KLSAgICAgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9qbmxlc3NlcSkpOwotCi0gICAgICAg
ICAgICBmYWlsMS5saW5rKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX29wX2psZXNzZXEpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1
bWVudChyZWdUMCk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMiwgcmVnVDIpOwot
ICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwotCi0gICAg
fSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpKSB7Ci0gICAgICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsKLQotICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50
KCkpIHsKLSAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVt
YmVyKHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJl
Z1QxKTsKLSAgICAgICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7Ci0KLSAg
ICAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQz
MigpOzsKLQotICAgICAgICAgICAgbW92ZShJbW0zMihvcDFpbW0pLCByZWdUMCk7Ci0gICAgICAg
ICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7Ci0KLSAgICAgICAgICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaERvdWJsZShpbnZlcnQgPyBEb3VibGVMZXNzVGhhbk9y
VW5vcmRlcmVkIDogRG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBmcFJlZ1QxLCBmcFJlZ1QwKSwg
dGFyZ2V0KTsKLQotICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVf
TEVOR1RIKG9wX2pubGVzc2VxKSk7Ci0KLSAgICAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfamxl
c3NlcSk7CisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIHN0dWIpOwogICAgICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDEsIHJlZ1QyKTsKICAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQocmVnVDEpOwogICAgICAgICBzdHViQ2FsbC5jYWxsKCk7CkBAIC02ODQsOSArNDQy
LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoSW5zdHJ1Y3RpbwogICAgICAgICAg
ICAgbW92ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKICAgICAgICAgICAgIG1vdmVQdHJU
b0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CiAKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaERvdWJsZShpbnZlcnQgPyBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkIDogRG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsLCBmcFJlZ1QxLCBmcFJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaERvdWJsZShjb25kaXRpb24sIGZwUmVnVDAsIGZw
UmVnVDEpLCB0YXJnZXQpOwogCi0gICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCks
IE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzZXEpKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9qbmxlc3MpKTsKIAogICAgICAgICAgICAgZmFp
bDEubGluayh0aGlzKTsKICAgICAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7CkBAIC02OTQsNyAr
NDUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoSW5zdHJ1Y3RpbwogICAgICAg
ICB9CiAKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgICAgICBKSVRTdHViQ2FsbCBz
dHViQ2FsbCh0aGlzLCBjdGlfb3Bfamxlc3NlcSk7CisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJD
YWxsKHRoaXMsIHN0dWIpOwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CiAg
ICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QxKTsKICAgICAgICAgc3R1YkNhbGwuY2Fs
bCgpOwpAQCAtNzAyLDE2ICs0NjAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShJ
bnN0cnVjdGlvCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3Bfamxlc3NlcShjdXJyZW50
SW5zdHJ1Y3Rpb24sIHRydWUpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBlbWl0U2xvd19vcF9qbGVzc2VxKGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgdHJ1ZSk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIHVuc2lnbmVkIHJlc3VsdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC0xMjM4LDcgKzk4Niw4IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9zdWIoSW5zdHJ1Y3Rpb24qIGMKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIEVORDogT1BfQURELCBPUF9TVUIsIE9QX01VTCAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gKi8KIAorI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCi0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKICNlbmRpZiAvLyBFTkFCTEUo
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAkocmV2aXNpb24gODkyMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Myw1MSArNDgzLDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfam1wKEluc3RydWN0aW9uKiBjdXJyZQogICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2lmX2xlc3NlcShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOwotCi0gICAgZW1pdFRpbWVvdXRDaGVjaygpOwotCi0gICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkpIHsKLSAgICAgICAgZW1pdExvYWQob3Ay
LCByZWdUMSwgcmVnVDApOwotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKLSAgICAgICAgYWRkSnVt
cChicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9w
ZXJhbmQob3AxKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKSB7Ci0gICAgICAg
IGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0g
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIoZ2V0
Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpKSksIHRhcmdldCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBlbWl0TG9hZDIob3AxLCByZWdUMSwgcmVnVDAsIG9wMiwgcmVnVDMs
IHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKLSAgICBh
ZGRKdW1wKGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaWZfbGVzc2VxKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
LSAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAg
IHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAg
ICBpZiAoIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkgJiYgIWlzT3BlcmFuZENv
bnN0YW50SW1tZWRpYXRlSW50KG9wMikpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
aW50MzIgY2hlY2sKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGludDMyIGNoZWNrCi0KLSAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbG9vcF9pZl9sZXNzZXEpOwotICAg
IHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3Ay
KTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEpJVFN0dWJD
YWxsKHRoaXMsIGN0aV9vcF9uZXdfb2JqZWN0KS5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CShyZXZpc2lvbiA4OTIxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOCwyNiArMzI4LDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfam1wKEluc3RydWN0aW9uKiBjdXJyZQogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwog
fQogCi12b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2lmX2xlc3NlcShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGVtaXRUaW1lb3V0Q2hlY2soKTsKLQotICAgIHVuc2lnbmVk
IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgb3Ay
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEltbWVkaWF0ZUludChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCByZWdUMCk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVn
ZXIocmVnVDApOwotICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldENvbnN0YW50T3BlcmFuZElt
bWVkaWF0ZUludChvcDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKExlc3NUaGFuT3JFcXVh
bCwgcmVnVDAsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKLSAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7Ci0gICAgICAgIGFk
ZEp1bXAoYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwot
ICAgIH0KLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9uZXdfb2Jq
ZWN0KS5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwpAQCAtMTI0MywyOCAr
MTIyMyw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90b19wcmltaXRpdmUoSW5zdHIKICAgICBz
dHViQ2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9pZl9sZXNzZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICB1
bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVuc2ln
bmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikpIHsKLSAgICAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbG9vcF9p
Zl9sZXNzZXEpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7Ci0gICAgICAg
IHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJl
Z1QyKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwot
ICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbG9vcF9pZl9sZXNzZXEp
OwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7Ci0gICAgICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KHJlZ1QxKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwot
ICAgIH0KLX0KLQogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25vdChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewog
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCShyZXZpc2lvbiA4OTIxMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcwLDE5ICsxMzcwLDYgQEAgREVGSU5F
X1NUVUJfRlVOQ1RJT04odm9pZCosIHJlZ2lzdGVyX2ZpbAogICAgIHJldHVybiBjYWxsRnJhbWU7
CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKGludCwgb3BfbG9vcF9pZl9sZXNzZXEpCi17Ci0g
ICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgSlNWYWx1ZSBzcmMx
ID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHNyYzIgPSBzdGFj
a0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOwotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3Rh
Y2tGcmFtZS5jYWxsRnJhbWU7Ci0KLSAgICBib29sIHJlc3VsdCA9IGpzTGVzc0VxKGNhbGxGcmFt
ZSwgc3JjMSwgc3JjMik7Ci0gICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCiBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX25l
d19vYmplY3QpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gODkyMTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
Niw3ICszOTYsNiBAQCBleHRlcm4gIkMiIHsKICAgICBpbnQgSklUX1NUVUIgY3RpX29wX2psZXNz
ZXEoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBpbnQgSklUX1NUVUIgY3RpX29wX2p0cnVl
KFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgaW50IEpJVF9TVFVCIGN0aV9vcF9sb2FkX3Zh
cmFyZ3MoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKLSAgICBpbnQgSklUX1NUVUIgY3RpX29wX2xv
b3BfaWZfbGVzc2VxKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgaW50IEpJVF9TVFVCIGN0
aV90aW1lb3V0X2NoZWNrKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgaW50IEpJVF9TVFVC
IGN0aV9oYXNfcHJvcGVydHkoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkIEpJVF9T
VFVCIGN0aV9vcF9jaGVja19oYXNfaW5zdGFuY2UoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99585</attachid>
            <date>2011-07-03 16:35:21 -0700</date>
            <delta_ts>2011-07-03 19:02:27 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>63879.patch</filename>
            <type>text/plain</type>
            <size>49132</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTAzNDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAK
KzIwMTEtMDctMDMgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzg3OQor
ICAgICAgICBSZWR1Y2UgY29kZSBkdXBsaWNhdGlvbiBmb3Igb3Bfamxlc3MsIG9wX2psZXNzZXEs
IG9wX2pubGVzcywgb3Bfam5sZXNzZXEuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBUaGVyZSBpcyBhIGxvdCBvZiBjb3B5ICYgcGFzdGUg
Y29kZSBoZXJlOyB3ZSBjYW4gcmVkdWNlIGR1cGxpY2F0aW9uIGJ5IG1ha2luZworICAgICAgICBh
IHNoYXJlZCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoMzIpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6Y29tbXV0ZSk6CisgICAgICAgICAgICAtIE1ha2UgdGhl
c2UgZnVuY3Rpb24gcGxhdGZvcm0gYWdub3N0aWMuCisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgICAgICAtIE1vdmVkIGJyYW5jaDMyL2NvbW11
dGUgdXAgdG8gTWFjcm9Bc3NlbWJsZXIuCisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfbG9vcF9pZl9sZXNzZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2xvb3BfaWZfbGVzc2VxKToKKyAgICAgICAgICAgIC0gQWRkIGFuIGltcGxlbWVu
dGF0aW9uIG1hdGNoaW5nIHRoYXQgZm9yIG9wX2xvb3BfaWZfbGVzcywgd2hpY2gganVzdCBjYWxs
cyBvcF9qbGVzcy4KKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9qbGVzcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbGVz
c2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pubGVzcyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9qbmxlc3NlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
amxlc3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pubGVzcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3Bfam5sZXNzZXEpOgorICAgICAgICAgICAgLSBDb21tb24gaW1wbG1lbnRhdGlvbnMg
b2YgdGhlc2UgbWV0aG9kcyBmb3IgSlNWQUxVRTY0ICYgSlNWQUxVRTMyXzY0LgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgICAgIC0gSW50ZXJuYWwgaW1wbG1lbWVudGF0
aW9uIG9mIGpsZXNzIGV0YyBmb3IgSlNWQUxVRTY0LgorICAgICAgICAqIGppdC9KSVRBcml0aG1l
dGljMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgICAg
IC0gSW50ZXJuYWwgaW1wbG1lbWVudGF0aW9uIG9mIGpsZXNzIGV0YyBmb3IgSlNWQUxVRTMyXzY0
LgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAqIGppdC9K
SVRTdHVicy5oOgorICAgICAgICAgICAgLSBSZW1vdmUgb2xkIGltcGxlbWVudGF0aW9uIG9mIGVt
aXRfb3BfbG9vcF9pZl9sZXNzZXEuCisKIDIwMTEtMDYtMzAgIEdhdmluIEJhcnJhY2xvdWdoICA8
YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5oCShyZXZpc2lvbiA5MDM0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDYgKzEyNSwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIGJyYW5jaDMyKGNvbmQsIGxlZnQsIHJpZ2h0KS5saW5rVG8odGFyZ2V0
LCB0aGlzKTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCwgVHJ1c3RlZEltbTMyIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAg
ICByZXR1cm4gYnJhbmNoMzIoY29tbXV0ZShjb25kKSwgcmlnaHQsIGxlZnQpOworICAgIH0KKwog
ICAgIHZvaWQgYnJhbmNoMTYoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVm
dCwgUmVnaXN0ZXJJRCByaWdodCwgTGFiZWwgdGFyZ2V0KQogICAgIHsKICAgICAgICAgYnJhbmNo
MTYoY29uZCwgbGVmdCwgcmlnaHQpLmxpbmtUbyh0YXJnZXQsIHRoaXMpOwpAQCAtMTQwLDYgKzE0
NSwzNSBAQCBwdWJsaWM6CiAgICAgICAgIGp1bXAoKS5saW5rVG8odGFyZ2V0LCB0aGlzKTsKICAg
ICB9CiAKKyAgICAvLyBDb21tdXRlIGEgcmVsYXRpb25hbCBjb25kaXRpb24sIHJldHVybnMgYSBu
ZXcgY29uZGl0aW9uIHRoYXQgd2lsbCBwcm9kdWNlCisgICAgLy8gdGhlIHNhbWUgcmVzdWx0cyBn
aXZlbiB0aGUgc2FtZSBpbnB1dHMgYnV0IHdpdGggdGhlaXIgcG9zaXRpb25zIGV4Y2hhbmdlZC4K
KyAgICBzdGF0aWMgUmVsYXRpb25hbENvbmRpdGlvbiBjb21tdXRlKFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kaXRpb24pIHsKKyAgICAg
ICAgY2FzZSBBYm92ZToKKyAgICAgICAgICAgIHJldHVybiBCZWxvdzsKKyAgICAgICAgY2FzZSBB
Ym92ZU9yRXF1YWw6CisgICAgICAgICAgICByZXR1cm4gQmVsb3dPckVxdWFsOworICAgICAgICBj
YXNlIEJlbG93OgorICAgICAgICAgICAgcmV0dXJuIEFib3ZlOworICAgICAgICBjYXNlIEJlbG93
T3JFcXVhbDoKKyAgICAgICAgICAgIHJldHVybiBBYm92ZU9yRXF1YWw7CisgICAgICAgIGNhc2Ug
R3JlYXRlclRoYW46CisgICAgICAgICAgICByZXR1cm4gTGVzc1RoYW47CisgICAgICAgIGNhc2Ug
R3JlYXRlclRoYW5PckVxdWFsOgorICAgICAgICAgICAgcmV0dXJuIExlc3NUaGFuT3JFcXVhbDsK
KyAgICAgICAgY2FzZSBMZXNzVGhhbjoKKyAgICAgICAgICAgIHJldHVybiBHcmVhdGVyVGhhbjsK
KyAgICAgICAgY2FzZSBMZXNzVGhhbk9yRXF1YWw6CisgICAgICAgICAgICByZXR1cm4gR3JlYXRl
clRoYW5PckVxdWFsOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBBU1NFUlQoY29uZGl0aW9uID09IEVxdWFsIHx8IGNvbmRpdGlvbiA9
PSBOb3RFcXVhbCk7CisgICAgICAgIHJldHVybiBjb25kaXRpb247CisgICAgfQorICAgIAogCiAg
ICAgLy8gUHRyIG1ldGhvZHMKICAgICAvLyBPbiAzMi1iaXQgcGxhdGZvcm1zIChpLmUuIHg4Niks
IHRoZXNlIG1ldGhvZHMgZGlyZWN0bHkgbWFwIG9udG8gdGhlaXIgMzItYml0IGVxdWl2YWxlbnRz
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gOTAzNDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg0NCwxNSArODQ0LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSnVtcCht
X2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQogICAgIAotICAgIEp1
bXAgYnJhbmNoMzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgbGVmdCwg
UmVnaXN0ZXJJRCByaWdodCkKLSAgICB7Ci0gICAgICAgIGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8
IChjb25kID09IE5vdEVxdWFsKSkgJiYgIWxlZnQubV92YWx1ZSkKLSAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnRlc3RsX3JyKHJpZ2h0LCByaWdodCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmNtcGxfaXIobGVmdC5tX3ZhbHVlLCByaWdodCk7Ci0gICAgICAgIHJldHVy
biBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29tbXV0ZShjb25kKSkpKTsKLSAg
ICB9Ci0gICAgCiAgICAgSnVtcCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJl
Z2lzdGVySUQgbGVmdCwgQWRkcmVzcyByaWdodCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVy
LmNtcGxfbXIocmlnaHQub2Zmc2V0LCByaWdodC5iYXNlLCBsZWZ0KTsKQEAgLTEyMDEsMjUgKzEx
OTIsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZWxhdGlvbmFsQ29u
ZGl0aW9uPihjb25kIF4gMSk7CiAgICAgfQogCi0gICAgLy8gQ29tbXV0ZSBhIHJlbGF0aW9uYWwg
Y29uZGl0aW9uLCByZXR1cm5zIGEgbmV3IGNvbmRpdGlvbiB0aGF0IHdpbGwgcHJvZHVjZQotICAg
IC8vIHRoZSBzYW1lIHJlc3VsdHMgZ2l2ZW4gdGhlIHNhbWUgaW5wdXRzIGJ1dCB3aXRoIHRoZWly
IHBvc2l0aW9ucyBleGNoYW5nZWQuCi0gICAgc3RhdGljIFJlbGF0aW9uYWxDb25kaXRpb24gY29t
bXV0ZShSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQpCi0gICAgewotICAgICAgICAvLyBFcXVhbGl0
eSBpcyBjb21tdXRhdGl2ZSEKLSAgICAgICAgaWYgKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBO
b3RFcXVhbCkKLSAgICAgICAgICAgIHJldHVybiBjb25kOwotCi0gICAgICAgIC8vIEJhc2VkIG9u
IHRoZSB2YWx1ZXMgb2YgeDg2IGNvbmRpdGlvbiBjb2RlcywgcmVtYXAgPiB3aXRoIDwgYW5kID49
IHdpdGggPD0KLSAgICAgICAgaWYgKGNvbmQgPj0gTGVzc1RoYW4pIHsKLSAgICAgICAgICAgIEFT
U0VSVChjb25kID09IExlc3NUaGFuIHx8IGNvbmQgPT0gTGVzc1RoYW5PckVxdWFsIHx8IGNvbmQg
PT0gR3JlYXRlclRoYW4gfHwgY29uZCA9PSBHcmVhdGVyVGhhbk9yRXF1YWwpOwotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbGF0aW9uYWxDb25kaXRpb24+KFg4NkFzc2VtYmxlcjo6
Q29uZGl0aW9uTCArIFg4NkFzc2VtYmxlcjo6Q29uZGl0aW9uRyAtIGNvbmQpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gQXMgYWJvdmUsIGZvciB1bnNpZ25lZCBjb25kaXRpb25zLgotICAgICAg
ICBBU1NFUlQoY29uZCA9PSBCZWxvdyB8fCBjb25kID09IEJlbG93T3JFcXVhbCB8fCBjb25kID09
IEFib3ZlIHx8IGNvbmQgPT0gQWJvdmVPckVxdWFsKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFJlbGF0aW9uYWxDb25kaXRpb24+KFg4NkFzc2VtYmxlcjo6Q29uZGl0aW9uQiArIFg4NkFz
c2VtYmxlcjo6Q29uZGl0aW9uQSAtIGNvbmQpOwotICAgIH0KLSAgICAKICAgICB2b2lkIG5vcCgp
CiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkocmV2aXNpb24gOTAzNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MjAsNiArNzIwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAj
ZGVmaW5lIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFX0ZPUl9QVVQobmFtZSwgZHN0KSBkbyB7
IGVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpOyB9IHdoaWxlIChmYWxzZSkKICNlbmRpZgogCisg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcChPcGNvZGVJRCwgdW5zaWduZWQgb3AxLCB1
bnNpZ25lZCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24pOworICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KHVuc2lnbmVkIG9wMSwg
dW5zaWduZWQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24s
IGludCAoSklUX1NUVUIgKnN0dWIpKFNUVUJfQVJHU19ERUNMQVJBVElPTiksIGJvb2wgaW52ZXJ0
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKTsKKwogICAgICAgICB2b2lk
IGVtaXRfb3BfYWRkKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdG5vdChJbnN0cnVjdGlvbiop
OwpAQCAtNzYyLDcgKzc2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRf
b3Bfam5lcV9wdHIoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2pubGVzcyhJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfamxlc3MoSW5zdHJ1Y3Rpb24qKTsK
LSAgICAgICAgdm9pZCBlbWl0X29wX2psZXNzZXEoSW5zdHJ1Y3Rpb24qLCBib29sIGludmVydCA9
IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2psZXNzZXEoSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2pubGVzc2VxKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9qc3IoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2p0cnVlKElu
c3RydWN0aW9uKik7CkBAIC04NTgsNyArODYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfamZhbHNlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2pubGVzcyhJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qbGVzcyhJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbGVzc2VxKEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzZXEoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNz
ZXEoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9hZF92YXJhcmdz
KEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtMTA0
MCw2ICsxMDQzLDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBlbWl0U2xvd19vcF9qbGVz
cyhjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIpOwogICAgIH0KIAorICAgIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdF9vcF9sb29wX2lmX2xlc3NlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQorICAgIHsKKyAgICAgICAgZW1pdFRpbWVvdXRDaGVjaygpOworICAgICAgICBlbWl0X29wX2ps
ZXNzZXEoY3VycmVudEluc3RydWN0aW9uKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2xvb3BfaWZfbGVzc2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCisgICAgeworICAgICAg
ICBlbWl0U2xvd19vcF9qbGVzc2VxKGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlcik7CisgICAgfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwCShyZXZp
c2lvbiA5MDM0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMTAxICs4NCw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9uZWdhdGUoSW5zdHJ1Y3Rpb24KICAgICBzdHViQ2FsbC5jYWxsKGRzdCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0X29wX2pubGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoT3Bjb2RlSUQgb3Bjb2RlLCB1bnNpZ25l
ZCBvcDEsIHVuc2lnbmVkIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbikKIHsKLSAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLQotICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwotICAgIEp1bXBMaXN0IG5vdEludDMy
T3AyOwotCi0gICAgLy8gQ2hhcmFjdGVyIGxlc3MuCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW1tZWRpYXRlQ2hhcihvcDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1Qw
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKLSAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0g
ICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwgZmFpbHVyZXMpOwot
ICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
TGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5k
KG9wMSkpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlQ2hhcihvcDIpKSB7Ci0gICAg
ICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsK
LSAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3Ry
aW5nKHJlZ1QwLCByZWdUMCwgZmFpbHVyZXMpOwotICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJl
cyk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMCwg
SW1tMzIoYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikpLT50cnlHZXRWYWx1ZSgpWzBd
KSksIHRhcmdldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW1tZWRpYXRlSW50KG9wMSkpIHsKLSAgICAgICAgLy8gSW50MzIgbGVzcy4KLSAgICAg
ICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwotICAgICAgICBub3RJbnQzMk9wMi5hcHBl
bmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJU
YWcpKSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwg
SW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpKSksIHRhcmdldCk7Ci0gICAg
fSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKSB7Ci0gICAgICAg
IGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgbm90SW50MzJPcDEuYXBwZW5k
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSkpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDAs
IEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKSkpLCB0YXJnZXQpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGVtaXRMb2FkMihvcDEsIHJlZ1QxLCByZWdUMCwgb3AyLCByZWdU
MywgcmVnVDIpOwotICAgICAgICBub3RJbnQzMk9wMS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAgICAgIG5vdElu
dDMyT3AyLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZykpKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihHcmVhdGVyVGhhbk9y
RXF1YWwsIHJlZ1QwLCByZWdUMiksIHRhcmdldCk7Ci0gICAgfQotCi0gICAgaWYgKCFzdXBwb3J0
c0Zsb2F0aW5nUG9pbnQoKSkgewotICAgICAgICBhZGRTbG93Q2FzZShub3RJbnQzMk9wMSk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKG5vdEludDMyT3AyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBKdW1wIGVuZCA9IGp1bXAoKTsKLQotICAgIC8vIERvdWJsZSBsZXNzLgotICAgIGVtaXRC
aW5hcnlEb3VibGVPcChvcF9qbmxlc3MsIHRhcmdldCwgb3AxLCBvcDIsIE9wZXJhbmRUeXBlcygp
LCBub3RJbnQzMk9wMSwgbm90SW50MzJPcDIsICFpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUlu
dChvcDEpLCBpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpIHx8ICFpc09wZXJhbmRD
b25zdGFudEltbWVkaWF0ZUludChvcDIpKTsKLSAgICBlbmQubGluayh0aGlzKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIHVuc2lnbmVk
IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgb3Ay
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW1tZWRpYXRlQ2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlQ2hh
cihvcDIpKSB7Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50
KG9wMSkgJiYgIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikpCi0gICAgICAgICAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbnQzMiBjaGVjawotICAgICAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbnQzMiBjaGVjawotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgaWYgKCFpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpKSB7Ci0gICAgICAg
ICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBkb3VibGUgY2hlY2sKLSAgICAgICAgICAg
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGludDMyIGNoZWNrCi0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSB8fCAhaXNP
cGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkKLSAgICAgICAgICAgICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7IC8vIGRvdWJsZSBjaGVjawotICAgICAgICB9Ci0gICAgfQotCi0gICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2psZXNzKTsKLSAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChvcDEpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMik7Ci0gICAgc3R1YkNh
bGwuY2FsbCgpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MCksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2psZXNzKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7Ci0KICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAgICBKdW1wTGlzdCBu
b3RJbnQzMk9wMjsKIApAQCAtMTg5LDcgKzk2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3Mo
SW5zdHJ1Y3Rpb24qIGN1cgogICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKICAgICAgICAgZW1p
dExvYWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7CiAgICAgICAgIGFk
ZFNsb3dDYXNlKGZhaWx1cmVzKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihHcmVhdGVyVGhh
biwgcmVnVDAsIEltbTMyKGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChvcDEpKS0+dHJ5R2V0
VmFsdWUoKVswXSkpLCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUo
Y29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChvcDEp
KS0+dHJ5R2V0VmFsdWUoKVswXSkpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUNoYXIob3AyKSkgewpAQCAtMTk4LDIy
ICsxMDUsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoSW5zdHJ1Y3Rpb24qIGN1cgogICAg
ICAgICBKdW1wTGlzdCBmYWlsdXJlczsKICAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmco
cmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGZhaWx1cmVzKTsK
LSAgICAgICAgYWRkSnVtcChicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIEltbTMyKGFzU3RyaW5n
KGdldENvbnN0YW50T3BlcmFuZChvcDIpKS0+dHJ5R2V0VmFsdWUoKVswXSkpLCB0YXJnZXQpOwor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKGFzU3RyaW5n
KGdldENvbnN0YW50T3BlcmFuZChvcDIpKS0+dHJ5R2V0VmFsdWUoKVswXSkpLCB0YXJnZXQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfSAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlh
dGVJbnQob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAg
ICAgIG5vdEludDMyT3AyLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihHcmVh
dGVyVGhhbiwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSkp
LCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwg
cmVnVDIsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSkpLCB0YXJnZXQp
OwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewog
ICAgICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgICAgIG5vdEludDMyT3Ax
LmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZykpKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIElt
bTMyKGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKSkpLCB0YXJnZXQpOworICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKGdldENvbnN0YW50T3Bl
cmFuZChvcDIpLmFzSW50MzIoKSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGVt
aXRMb2FkMihvcDEsIHJlZ1QxLCByZWdUMCwgb3AyLCByZWdUMywgcmVnVDIpOwogICAgICAgICBu
b3RJbnQzMk9wMS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpKSk7CiAgICAgICAgIG5vdEludDMyT3AyLmFwcGVuZChicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKLSAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsK
KyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMiksIHRhcmdl
dCk7CiAgICAgfQogCiAgICAgaWYgKCFzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewpAQCAtMjI0
LDE2ICsxMzEsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoSW5zdHJ1Y3Rpb24qIGN1cgog
ICAgIEp1bXAgZW5kID0ganVtcCgpOwogCiAgICAgLy8gRG91YmxlIGxlc3MuCi0gICAgZW1pdEJp
bmFyeURvdWJsZU9wKG9wX2psZXNzLCB0YXJnZXQsIG9wMSwgb3AyLCBPcGVyYW5kVHlwZXMoKSwg
bm90SW50MzJPcDEsIG5vdEludDMyT3AyLCAhaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQo
b3AxKSwgaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSB8fCAhaXNPcGVyYW5kQ29u
c3RhbnRJbW1lZGlhdGVJbnQob3AyKSk7CisgICAgZW1pdEJpbmFyeURvdWJsZU9wKG9wY29kZSwg
dGFyZ2V0LCBvcDEsIG9wMiwgT3BlcmFuZFR5cGVzKCksIG5vdEludDMyT3AxLCBub3RJbnQzMk9w
MiwgIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSksIGlzT3BlcmFuZENvbnN0YW50
SW1tZWRpYXRlSW50KG9wMSkgfHwgIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikp
OwogICAgIGVuZC5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3Mo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyh1bnNpZ25l
ZCBvcDEsIHVuc2lnbmVkIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBEb3VibGVDb25kaXRpb24sIGlu
dCAoSklUX1NUVUIgKnN0dWIpKFNUVUJfQVJHU19ERUNMQVJBVElPTiksIGJvb2wgaW52ZXJ0LCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIHVuc2lnbmVkIG9w
MSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgb3AyID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIAogICAgIGlmIChpc09wZXJhbmRD
b25zdGFudEltbWVkaWF0ZUNoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUNo
YXIob3AyKSkgewogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsKQEAgLTI1MywxMTEgKzE1NiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amxlc3MoSW5zdHJ1Y3Rpb24qCiAgICAgICAgICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyBkb3VibGUgY2hlY2sKICAgICAgICAgfQogICAgIH0KLSAgICBKSVRTdHViQ2FsbCBzdHViQ2Fs
bCh0aGlzLCBjdGlfb3Bfamxlc3MpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMSk7Ci0g
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AyKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBib29sIGludmVydCkKLXsKLSAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKLQotICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwotICAgIEp1bXBMaXN0
IG5vdEludDMyT3AyOwotCi0gICAgLy8gQ2hhcmFjdGVyIGxlc3MuCi0gICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW1tZWRpYXRlQ2hhcihvcDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMiwgcmVn
VDEsIHJlZ1QwKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKLSAgICAgICAgSnVtcExpc3QgZmFp
bHVyZXM7Ci0gICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwgZmFp
bHVyZXMpOwotICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoaW52ZXJ0ID8gTGVzc1RoYW4gOiBHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QwLCBJ
bW0zMihhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQob3AxKSktPnRyeUdldFZhbHVlKClbMF0p
KSwgdGFyZ2V0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbW1lZGlhdGVDaGFyKG9wMikpIHsKLSAgICAgICAgZW1pdExvYWQob3AxLCByZWdUMSwg
cmVnVDApOwotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotICAgICAgICBKdW1wTGlzdCBmYWlsdXJl
czsKLSAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJl
cyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGZhaWx1cmVzKTsKLSAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihpbnZlcnQgPyBHcmVhdGVyVGhhbiA6IExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMy
KGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChvcDIpKS0+dHJ5R2V0VmFsdWUoKVswXSkpLCB0
YXJnZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dEltbWVkaWF0ZUludChvcDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1Qy
KTsKLSAgICAgICAgbm90SW50MzJPcDIuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwotICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGludmVydCA/IExlc3NUaGFuIDogR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMiwgSW1tMzIo
Z2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpKSksIHRhcmdldCk7Ci0gICAgfSBlbHNl
IGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKSB7Ci0gICAgICAgIGVtaXRM
b2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgbm90SW50MzJPcDEuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwot
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGludmVydCA/IEdyZWF0ZXJUaGFuIDogTGVzc1RoYW5P
ckVxdWFsLCByZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpKSks
IHRhcmdldCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdExvYWQyKG9wMSwgcmVnVDEsIHJl
Z1QwLCBvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgICAgIG5vdEludDMyT3AxLmFwcGVuZChicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsK
LSAgICAgICAgbm90SW50MzJPcDIuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGludmVydCA/IEdyZWF0ZXJUaGFuIDogTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgcmVnVDIpLCB0
YXJnZXQpOwotICAgIH0KLQotICAgIGlmICghc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKLSAg
ICAgICAgYWRkU2xvd0Nhc2Uobm90SW50MzJPcDEpOwotICAgICAgICBhZGRTbG93Q2FzZShub3RJ
bnQzMk9wMik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgSnVtcCBlbmQgPSBqdW1wKCk7
Ci0KLSAgICAvLyBEb3VibGUgbGVzcy4KLSAgICBlbWl0QmluYXJ5RG91YmxlT3AoaW52ZXJ0ID8g
b3Bfam5sZXNzZXEgOiBvcF9qbGVzc2VxLCB0YXJnZXQsIG9wMSwgb3AyLCBPcGVyYW5kVHlwZXMo
KSwgbm90SW50MzJPcDEsIG5vdEludDMyT3AyLCAhaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJ
bnQob3AxKSwgaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSB8fCAhaXNPcGVyYW5k
Q29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSk7Ci0gICAgZW5kLmxpbmsodGhpcyk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIGJvb2wgaW52ZXJ0KQot
ewotICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1
bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlQ2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0
YW50SW1tZWRpYXRlQ2hhcihvcDIpKSB7Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0g
ICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzT3BlcmFuZENvbnN0
YW50SW1tZWRpYXRlSW50KG9wMSkgJiYgIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9w
MikpCi0gICAgICAgICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbnQzMiBjaGVjawot
ICAgICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbnQzMiBjaGVjawotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaWYgKCFpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChv
cDEpKSB7Ci0gICAgICAgICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBkb3VibGUgY2hl
Y2sKLSAgICAgICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGludDMyIGNoZWNrCi0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJ
bnQob3AxKSB8fCAhaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkKLSAgICAgICAg
ICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGRvdWJsZSBjaGVjawotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2psZXNzZXEpOwor
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIHN0dWIpOwogICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KG9wMSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AyKTsKICAgICBzdHViQ2Fs
bC5jYWxsKCk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFpl
cm8gOiBOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2pu
bGVzc2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9q
bGVzc2VxKGN1cnJlbnRJbnN0cnVjdGlvbiwgdHJ1ZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xv
d19vcF9qbmxlc3NlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGVtaXRTbG93X29wX2psZXNzZXEo
Y3VycmVudEluc3RydWN0aW9uLCBpdGVyLCB0cnVlKTsKLX0KLQogLy8gTGVmdFNoaWZ0ICg8PCkK
IAogdm9pZCBKSVQ6OmVtaXRfb3BfbHNoaWZ0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJ
KHJldmlzaW9uIDkwMzQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogCiAjaWYgRU5BQkxFKEpJVCkKLSNpZiBVU0UoSlNWQUxVRTY0KQogI2luY2x1ZGUgIkpJ
VC5oIgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCkBAIC00Nyw2ICs0Niw4MCBAQCB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgSlNDIHsKIAordm9pZCBKSVQ6OmVtaXRfb3Bfamxl
c3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBvcDEg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIG9wMiA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVtaXRfY29tcGFyZUFuZEp1bXAo
b3Bfamxlc3MsIG9wMSwgb3AyLCB0YXJnZXQsIExlc3NUaGFuKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3Bfamxlc3NlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVu
c2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWdu
ZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0
YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcChvcF9qbGVzc2VxLCBvcDEsIG9wMiwgdGFyZ2V0LCBMZXNzVGhhbk9yRXF1YWwp
OworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKKworICAgIGVtaXRfY29tcGFyZUFuZEp1bXAob3Bfam5sZXNzLCBvcDEsIG9wMiwgdGFyZ2V0
LCBHcmVhdGVyVGhhbk9yRXF1YWwpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIG9wMSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgb3AyID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1pdF9jb21wYXJlQW5kSnVtcChvcF9q
bmxlc3NlcSwgb3AxLCBvcDIsIHRhcmdldCwgR3JlYXRlclRoYW4pOworfQorCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfamxlc3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICB1bnNpZ25lZCBvcDEgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
KG9wMSwgb3AyLCB0YXJnZXQsIERvdWJsZUxlc3NUaGFuLCBjdGlfb3Bfamxlc3MsIGZhbHNlLCBp
dGVyKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3sKKyAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwor
ICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAg
dW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KG9wMSwgb3AyLCB0YXJnZXQsIERvdWJsZUxlc3NUaGFu
T3JFcXVhbCwgY3RpX29wX2psZXNzZXEsIGZhbHNlLCBpdGVyKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pubGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIHVuc2lnbmVkIG9wMSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgb3AyID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3co
b3AxLCBvcDIsIHRhcmdldCwgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGN0
aV9vcF9qbGVzcywgdHJ1ZSwgaXRlcik7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxl
c3NlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOworCisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cob3AxLCBvcDIsIHRh
cmdldCwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgY3RpX29wX2psZXNzZXEsIHRydWUs
IGl0ZXIpOworfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3BfbHNo
aWZ0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgdW5zaWduZWQgcmVz
dWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKQEAgLTI0MiwxNjUgKzMxNSw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF91cnNoaWZ0KEluc3RydWN0aW8KICAgICBzdHViQ2Fs
bC5jYWxsKGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2pubGVzcyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwotCi0gICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBm
b2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKLSAgICAvLyAtIGludCBpbW1lZGlhdGUg
dG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQotICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0
ZSB0byBpbnQgaW1tZWRpYXRlCi0gICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlh
dGUKLQotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUNoYXIob3AxKSkgewotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwotICAgICAgICBhZGRTbG93
Q2FzZShlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKSk7Ci0gICAgICAgIEp1bXBMaXN0IGZhaWx1
cmVzOwotICAgICAgICBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1
cmVzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZmFpbHVyZXMpOwotICAgICAgICBhZGRKdW1wKGJy
YW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKGFzU3RyaW5nKGdldENvbnN0YW50
T3BlcmFuZChvcDEpKS0+dHJ5R2V0VmFsdWUoKVswXSkpLCB0YXJnZXQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUNoYXIob3AyKSkg
ewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwotICAgICAgICBh
ZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKSk7Ci0gICAgICAgIEp1bXBMaXN0
IGZhaWx1cmVzOwotICAgICAgICBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAs
IGZhaWx1cmVzKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoZmFpbHVyZXMpOwotICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKGFzU3RyaW5nKGdl
dENvbnN0YW50T3BlcmFuZChvcDIpKS0+dHJ5R2V0VmFsdWUoKVswXSkpLCB0YXJnZXQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUlu
dChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0g
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDApOwotICAg
ICAgICBpbnQzMl90IG9wMmltbSA9IGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChvcDIp
OwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDAsIElt
bTMyKG9wMmltbSkpLCB0YXJnZXQpOwotICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bW1lZGlhdGVJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmVnVDEpOwotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJl
Z1QxKTsKLSAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlh
dGVJbnQob3AxKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJl
Z1QxLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7Ci0gICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwotCi0gICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwot
ICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQot
ewotICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1
bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAg
Ly8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhl
IHNsb3cgcGF0aDoKLSAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBp
bnQgaW1tZWRpYXRlCi0gICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5n
LXBvaW50IG51bWJlcgotICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5n
LXBvaW50IG51bWJlci4KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVDaGFyKG9w
MSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVDaGFyKG9wMikpIHsKLSAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgICAgICBK
SVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfamxlc3MpOwotICAgICAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChvcDEsIHJlZ1QwKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
b3AyLCByZWdUMSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIp
KSB7Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLQotICAgICAgICBpZiAoc3VwcG9ydHNG
bG9hdGluZ1BvaW50KCkpIHsKLSAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBlbWl0SnVtcElmTm90
SW1tZWRpYXRlTnVtYmVyKHJlZ1QwKTsKLSAgICAgICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMCwgZnBS
ZWdUMCk7Ci0KLSAgICAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5k
KG9wMikuYXNJbnQzMigpOzsKLQotICAgICAgICAgICAgbW92ZShJbW0zMihvcDJpbW0pLCByZWdU
MSk7Ci0gICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7Ci0K
LSAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhh
bk9yRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCksIHRhcmdldCk7Ci0KLSAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9qbmxlc3Mp
KTsKLQotICAgICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAg
IEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbGVzcyk7Ci0gICAgICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3Ay
LCByZWdUMik7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKLQotICAgIH0gZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSkgewotICAgICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7Ci0KLSAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Ci0g
ICAgICAgICAgICBKdW1wIGZhaWwxID0gZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdU
MSk7Ci0gICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7Ci0g
ICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOwotCi0gICAgICAgICAg
ICBpbnQzMl90IG9wMWltbSA9IGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKTs7Ci0K
LSAgICAgICAgICAgIG1vdmUoSW1tMzIob3AxaW1tKSwgcmVnVDApOwotICAgICAgICAgICAgY29u
dmVydEludDMyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwotCi0gICAgICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQs
IGZwUmVnVDEsIGZwUmVnVDApLCB0YXJnZXQpOwotCi0gICAgICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzKSk7Ci0KLSAgICAgICAgICAgIGZh
aWwxLmxpbmsodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2Fs
bCh0aGlzLCBjdGlfb3Bfamxlc3MpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDEs
IHJlZ1QyKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOwotICAgICAgICBz
dHViQ2FsbC5jYWxsKCk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMiha
ZXJvLCByZWdUMCksIHRhcmdldCk7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7Ci0KLSAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Ci0gICAg
ICAgICAgICBKdW1wIGZhaWwxID0gZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMCk7
Ci0gICAgICAgICAgICBKdW1wIGZhaWwyID0gZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihy
ZWdUMSk7Ci0gICAgICAgICAgICBKdW1wIGZhaWwzID0gZW1pdEp1bXBJZkltbWVkaWF0ZUludGVn
ZXIocmVnVDEpOwotICAgICAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVn
VDApOwotICAgICAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDEpOwot
ICAgICAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgICAg
IG1vdmVQdHJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7Ci0KLSAgICAgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwg
ZnBSZWdUMSwgZnBSZWdUMCksIHRhcmdldCk7Ci0KLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9qbmxlc3MpKTsKLQotICAgICAgICAgICAgZmFp
bDEubGluayh0aGlzKTsKLSAgICAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7Ci0gICAgICAgICAg
ICBmYWlsMy5saW5rKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwotICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfamxlc3MpOwot
ICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7Ci0gICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KHJlZ1QxKTsKLSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmVnVDApLCB0YXJnZXQpOwotICAgIH0K
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKE9wY29kZUlELCB1bnNpZ25lZCBv
cDEsIHVuc2lnbmVkIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbikKIHsKLSAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOwotICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKLQogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNh
c2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGNvbnN0YW50
IGludCBpbW1lZGlhdGUKICAgICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gaW50IGlt
bWVkaWF0ZQpAQCAtNDEyLDcgKzMyOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2psZXNzKEluc3Ry
dWN0aW9uKiBjdXIKICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7CiAgICAgICAgIGVtaXRMb2Fk
Q2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwgZmFpbHVyZXMpOwogICAgICAgICBhZGRTbG93
Q2FzZShmYWlsdXJlcyk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoR3JlYXRlclRoYW4sIHJl
Z1QwLCBJbW0zMihhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQob3AxKSktPnRyeUdldFZhbHVl
KClbMF0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRp
dGlvbiksIHJlZ1QwLCBJbW0zMihhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQob3AxKSktPnRy
eUdldFZhbHVlKClbMF0pKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVDaGFyKG9wMikpIHsKQEAgLTQyMSwzNCArMzM3
LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX2psZXNzKEluc3RydWN0aW9uKiBjdXIKICAgICAgICAg
SnVtcExpc3QgZmFpbHVyZXM7CiAgICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1Qw
LCByZWdUMCwgZmFpbHVyZXMpOwogICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBJbW0zMihhc1N0cmluZyhnZXRD
b25zdGFudE9wZXJhbmQob3AyKSktPnRyeUdldFZhbHVlKClbMF0pKSwgdGFyZ2V0KTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihhc1N0cmluZyhnZXRD
b25zdGFudE9wZXJhbmQob3AyKSktPnRyeUdldFZhbHVlKClbMF0pKSwgdGFyZ2V0KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQo
b3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwogICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKICAgICAg
ICAgaW50MzJfdCBvcDJpbW0gPSBnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQob3AyKTsK
LSAgICAgICAgYWRkSnVtcChicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIEltbTMyKG9wMmltbSkp
LCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIElt
bTMyKG9wMmltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bW1lZGlhdGVJbnQob3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmVnVDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJl
Z1QxKTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlh
dGVJbnQob3AxKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihHcmVhdGVyVGhhbiwgcmVnVDEs
IEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11
dGUoY29uZGl0aW9uKSwgcmVnVDEsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVn
VDEpOwogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1Qw
KTsKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7
CiAKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIHJlZ1QxKSwgdGFy
Z2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSks
IHRhcmdldCk7CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyh1bnNpZ25lZCBvcDEs
IHVuc2lnbmVkIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9u
LCBpbnQgKEpJVF9TVFVCICpzdHViKShTVFVCX0FSR1NfREVDTEFSQVRJT04pLCBib29sIGludmVy
dCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICB1bnNpZ25l
ZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIG9w
MiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQogICAgIC8vIFdlIGdlbmVyYXRl
IGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CiAg
ICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQog
ICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIK
QEAgLTQ1OCwxMSArMzcwLDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhJbnN0cnVj
dGlvbioKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7CiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICAgICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX29wX2psZXNzKTsKKyAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgc3R1Yik7CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMSwgcmVnVDAp
OwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDIsIHJlZ1QxKTsKICAgICAgICAgc3R1
YkNhbGwuY2FsbCgpOwotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmVnVDApLCB0YXJnZXQpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtNDc5LDE4ICszOTEsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2psZXNzKEluc3RydWN0aW9uKgogICAgICAgICAgICAgbW92ZShJbW0zMihvcDJpbW0pLCBy
ZWdUMSk7CiAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7
CiAKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaERvdWJsZShEb3VibGVMZXNz
VGhhbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hEb3VibGUoY29uZGl0aW9uLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0
KTsKIAogICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RI
KG9wX2pubGVzcykpOwogCiAgICAgICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICB9
CiAKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2psZXNzKTsKKyAg
ICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgc3R1Yik7CiAgICAgICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KHJlZ1QwKTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AyLCBy
ZWdUMik7CiAgICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZWdUMCks
IHRhcmdldCk7CiAKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50
KG9wMSkpIHsKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwpAQCAtNTA1LDE2OCArNDE3LDE0
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzcyhJbnN0cnVjdGlvbioKICAgICAgICAgICAg
IG1vdmUoSW1tMzIob3AxaW1tKSwgcmVnVDApOwogICAgICAgICAgICAgY29udmVydEludDMyVG9E
b3VibGUocmVnVDAsIGZwUmVnVDApOwogCi0gICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW4sIGZwUmVnVDAsIGZwUmVnVDEpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgZnBS
ZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CiAKICAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90
KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9qbmxlc3MpKTsKIAogICAgICAgICAgICAgZmFpbDEu
bGluayh0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRo
aXMsIGN0aV9vcF9qbGVzcyk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMSwgcmVn
VDIpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7Ci0gICAgICAgIHN0dWJD
YWxsLmNhbGwoKTsKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblpl
cm8sIHJlZ1QwKSwgdGFyZ2V0KTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsKLQotICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKLSAgICAg
ICAgICAgIEp1bXAgZmFpbDEgPSBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QwKTsK
LSAgICAgICAgICAgIEp1bXAgZmFpbDIgPSBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJl
Z1QxKTsKLSAgICAgICAgICAgIEp1bXAgZmFpbDMgPSBlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdl
cihyZWdUMSk7Ci0gICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdU
MCk7Ci0gICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7Ci0g
ICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwotICAgICAgICAgICAg
bW92ZVB0clRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKLQotICAgICAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuLCBmcFJlZ1QwLCBmcFJlZ1QxKSwg
dGFyZ2V0KTsKLQotICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVf
TEVOR1RIKG9wX2pubGVzcykpOwotCi0gICAgICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwotICAg
ICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKLSAgICAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7
Ci0gICAgICAgIH0KLQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbGVzcyk7Ci0gICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KHJlZ1QwKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOwot
ICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7Ci0gICAgfQotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9qbGVzc2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGJvb2wgaW52
ZXJ0KQotewotICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
LSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwot
Ci0gICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMg
aW4gdGhlIGZhc3QgcGF0aDoKLSAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50
IGltbWVkaWF0ZQotICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRp
YXRlCi0gICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKLQotICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUNoYXIob3AxKSkgewotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwotICAgICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElm
Tm90SlNDZWxsKHJlZ1QwKSk7Ci0gICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwotICAgICAgICBl
bWl0TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1cmVzKTsKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZmFpbHVyZXMpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGludmVydCA/
IExlc3NUaGFuIDogR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0
Q29uc3RhbnRPcGVyYW5kKG9wMSkpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlQ2hh
cihvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApKTsKLSAgICAgICAg
SnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1Qw
LCByZWdUMCwgZmFpbHVyZXMpOwotICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoaW52ZXJ0ID8gR3JlYXRlclRoYW4gOiBMZXNzVGhhbk9yRXF1
YWwsIHJlZ1QwLCBJbW0zMihhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQob3AyKSktPnRyeUdl
dFZhbHVlKClbMF0pKSwgdGFyZ2V0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKLSAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRDb25z
dGFudE9wZXJhbmRJbW1lZGlhdGVJbnQob3AyKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihp
bnZlcnQgPyBHcmVhdGVyVGhhbiA6IExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG9wMmlt
bSkpLCB0YXJnZXQpOwotICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJ
bnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwot
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKLSAg
ICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQob3Ax
KTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihpbnZlcnQgPyBMZXNzVGhhbiA6IEdyZWF0ZXJU
aGFuT3JFcXVhbCwgcmVnVDEsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEp
OwotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsK
LSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7Ci0K
LSAgICAgICAgYWRkSnVtcChicmFuY2gzMihpbnZlcnQgPyBHcmVhdGVyVGhhbiA6IExlc3NUaGFu
T3JFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbGVzc2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIGJvb2wgaW52ZXJ0KQotewotICAgIHVu
c2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWdu
ZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0
YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgLy8gV2UgZ2Vu
ZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0
aDoKLSAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRp
YXRlCi0gICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51
bWJlcgotICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51
bWJlci4KLQotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUNoYXIob3AxKSB8fCBp
c09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUNoYXIob3AyKSkgewotICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgICAgIEpJVFN0dWJD
YWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbGVzc2VxKTsKLSAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQob3AxLCByZWdUMCk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMiwg
cmVnVDEpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmVnVDApLCB0YXJnZXQp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1t
ZWRpYXRlSW50KG9wMikpIHsKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotCi0gICAgICAg
IGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewotICAgICAgICAgICAgSnVtcCBmYWlsMSA9
IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApOwotICAgICAgICAgICAgYWRkUHRy
KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOwotICAgICAgICAgICAgbW92ZVB0clRvRG91
YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKLQotICAgICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRD
b25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCk7OwotCi0gICAgICAgICAgICBtb3ZlKEltbTMy
KG9wMmltbSksIHJlZ1QxKTsKLSAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1Qx
LCBmcFJlZ1QxKTsKLQotICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91Ymxl
KGludmVydCA/IERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQgOiBEb3VibGVHcmVhdGVyVGhhbk9y
RXF1YWwsIGZwUmVnVDEsIGZwUmVnVDApLCB0YXJnZXQpOwotCi0gICAgICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzZXEpKTsKLQotICAgICAg
ICAgICAgZmFpbDEubGluayh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEpJVFN0dWJDYWxs
IHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbGVzc2VxKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQocmVnVDApOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDIsIHJlZ1QyKTsK
LSAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKLQotICAg
IH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSkgewotICAgICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0KLSAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2lu
dCgpKSB7Ci0gICAgICAgICAgICBKdW1wIGZhaWwxID0gZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51
bWJlcihyZWdUMSk7Ci0gICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCBy
ZWdUMSk7Ci0gICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOwotCi0g
ICAgICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50
MzIoKTs7Ci0KLSAgICAgICAgICAgIG1vdmUoSW1tMzIob3AxaW1tKSwgcmVnVDApOwotICAgICAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwotCi0gICAgICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hEb3VibGUoaW52ZXJ0ID8gRG91YmxlTGVzc1RoYW5P
clVub3JkZXJlZCA6IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwgZnBSZWdUMSwgZnBSZWdUMCks
IHRhcmdldCk7Ci0KLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RF
X0xFTkdUSChvcF9qbmxlc3NlcSkpOwotCi0gICAgICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2ps
ZXNzZXEpOworICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBzdHViKTsKICAgICAg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AxLCByZWdUMik7CiAgICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KHJlZ1QxKTsKICAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwpAQCAtNjg0LDkgKzQ0
Miw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKEluc3RydWN0aW8KICAgICAgICAg
ICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CiAgICAgICAgICAgICBtb3ZlUHRy
VG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOwogCi0gICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hEb3VibGUoaW52ZXJ0ID8gRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCA6IERvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbCwgZnBSZWdUMSwgZnBSZWdUMCksIHRhcmdldCk7CisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hEb3VibGUoY29uZGl0aW9uLCBmcFJlZ1QwLCBm
cFJlZ1QxKSwgdGFyZ2V0KTsKIAotICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgp
LCBPUENPREVfTEVOR1RIKG9wX2pubGVzc2VxKSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzKSk7CiAKICAgICAgICAgICAgIGZh
aWwxLmxpbmsodGhpcyk7CiAgICAgICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwpAQCAtNjk0LDcg
KzQ1Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKEluc3RydWN0aW8KICAgICAg
ICAgfQogCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICAgICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX29wX2psZXNzZXEpOworICAgICAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBzdHViKTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwog
ICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7CiAgICAgICAgIHN0dWJDYWxsLmNh
bGwoKTsKQEAgLTcwMiwxNiArNDYwLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzZXEo
SW5zdHJ1Y3RpbwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29wX2psZXNzZXEoY3VycmVu
dEluc3RydWN0aW9uLCB0cnVlKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzc2Vx
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgZW1pdFNsb3dfb3Bfamxlc3NlcShjdXJyZW50SW5zdHJ1
Y3Rpb24sIGl0ZXIsIHRydWUpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRhbmQoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICB1bnNpZ25lZCByZXN1bHQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwpAQCAtMTIzOCw3ICs5ODYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfc3ViKEluc3RydWN0aW9uKiBjCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBPUF9NVUwgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCiAKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAJKHJldmlzaW9uIDkwMzQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODMsNTEgKzQ4Myw2IEBAIHZvaWQg
SklUOjplbWl0X29wX2ptcChJbnN0cnVjdGlvbiogY3VycmUKICAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9pZl9sZXNzZXEoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRUaW1lb3V0Q2hlY2soKTsKLQotICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9w
MiwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRP
cGVyYW5kKG9wMSkuYXNJbnQzMigpKSksIHRhcmdldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewotICAgICAg
ICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwot
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKGdl
dENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKSkpLCB0YXJnZXQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgZW1pdExvYWQyKG9wMSwgcmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1Qz
LCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAg
YWRkSnVtcChicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QwLCByZWdUMiksIHRhcmdldCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2lmX2xlc3NlcShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotewotICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0g
ICAgaWYgKCFpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpICYmICFpc09wZXJhbmRD
b25zdGFudEltbWVkaWF0ZUludChvcDIpKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IGludDMyIGNoZWNrCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbnQzMiBjaGVjawotCi0g
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2xvb3BfaWZfbGVzc2VxKTsKLSAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDEpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9w
Mik7Ci0gICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX25l
d19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBKSVRTdHVi
Q2FsbCh0aGlzLCBjdGlfb3BfbmV3X29iamVjdCkuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkocmV2aXNpb24gOTAzNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsMjYgKzMyOCw2IEBAIHZvaWQgSklUOjplbWl0
X29wX2ptcChJbnN0cnVjdGlvbiogY3VycmUKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9pZl9sZXNzZXEoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0VGltZW91dENoZWNrKCk7Ci0KLSAgICB1bnNpZ25l
ZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIG9w
MiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgcmVnVDApOwotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRl
Z2VyKHJlZ1QwKTsKLSAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRDb25zdGFudE9wZXJhbmRJ
bW1lZGlhdGVJbnQob3AyKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihMZXNzVGhhbk9yRXF1
YWwsIHJlZ1QwLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7Ci0gICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwotICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsK
LSAgICB9Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlfb3BfbmV3X29i
amVjdCkuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKQEAgLTEyNDMsMjgg
KzEyMjMsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdG9fcHJpbWl0aXZlKEluc3RyCiAgICAg
c3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaWZfbGVzc2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
dW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNp
Z25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKSB7Ci0gICAgICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsKLSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2xvb3Bf
aWZfbGVzc2VxKTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwotICAgICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCBy
ZWdUMik7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsK
LSAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2xvb3BfaWZfbGVzc2Vx
KTsKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwotICAgICAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChyZWdUMSk7Ci0gICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsK
LSAgICB9Ci19Ci0KIHZvaWQgSklUOjplbWl0U2xvd19vcF9ub3QoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkocmV2aXNpb24gOTAzNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3MCwxOSArMTM3MCw2IEBAIERFRklO
RV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCByZWdpc3Rlcl9maWwKICAgICByZXR1cm4gY2FsbEZyYW1l
OwogfQogCi1ERUZJTkVfU1RVQl9GVU5DVElPTihpbnQsIG9wX2xvb3BfaWZfbGVzc2VxKQotewot
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIEpTVmFsdWUgc3Jj
MSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBzcmMyID0gc3Rh
Y2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0
YWNrRnJhbWUuY2FsbEZyYW1lOwotCi0gICAgYm9vbCByZXN1bHQgPSBqc0xlc3NFcShjYWxsRnJh
bWUsIHNyYzEsIHNyYzIpOwotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQogREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9u
ZXdfb2JqZWN0KQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDkwMzQ2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTYsNyArMzk2LDYgQEAgZXh0ZXJuICJDIiB7CiAgICAgaW50IEpJVF9TVFVCIGN0aV9vcF9qbGVz
c2VxKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgaW50IEpJVF9TVFVCIGN0aV9vcF9qdHJ1
ZShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIGludCBKSVRfU1RVQiBjdGlfb3BfbG9hZF92
YXJhcmdzKFNUVUJfQVJHU19ERUNMQVJBVElPTik7Ci0gICAgaW50IEpJVF9TVFVCIGN0aV9vcF9s
b29wX2lmX2xlc3NlcShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIGludCBKSVRfU1RVQiBj
dGlfdGltZW91dF9jaGVjayhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIGludCBKSVRfU1RV
QiBjdGlfaGFzX3Byb3BlcnR5KFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRf
U1RVQiBjdGlfb3BfY2hlY2tfaGFzX2luc3RhbmNlKFNUVUJfQVJHU19ERUNMQVJBVElPTik7Cg==
</data>
<flag name="review"
          id="94106"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>