<?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>68215</bug_id>
          
          <creation_ts>2011-09-15 20:08:58 -0700</creation_ts>
          <short_desc>DFG JIT does not optimize method_check</short_desc>
          <delta_ts>2011-09-15 23:34:22 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>468259</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-15 20:08:58 -0700</bug_when>
    <thetext>The DFG JIT emits a lot of code for method_check even though it has a plethora of profiling information that it could use (both from the meta-data in MethodCallLinkInfo and ValueProfile&apos;s) to determine how to optimize method_check down to a small number of instructions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468262</commentid>
    <comment_count>1</comment_count>
      <attachid>107590</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-15 20:14:46 -0700</bug_when>
    <thetext>Created attachment 107590
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468264</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-15 20:17:44 -0700</bug_when>
    <thetext>Attachment 107590 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/dfg/DFGSpeculativeJIT.cpp:53:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:239:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 2 in 20 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>468266</commentid>
    <comment_count>3</comment_count>
      <attachid>107592</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-15 20:21:17 -0700</bug_when>
    <thetext>Created attachment 107592
the patch - fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468330</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-15 23:34:22 -0700</bug_when>
    <thetext>Landed in r95273.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107590</attachid>
            <date>2011-09-15 20:14:46 -0700</date>
            <delta_ts>2011-09-15 20:21:17 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>checkmethod_patch_1.diff</filename>
            <type>text/plain</type>
            <size>38718</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUyNjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTUgQEAK
KzIwMTEtMDktMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IG9wdGltaXplIG1ldGhvZF9jaGVjaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgyMTUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE1ldGhvZENhbGxMaW5rSW5mbyBh
bmQgU3RydWN0dXJlU3R1YkluZm8gYXJlIG5vdyBzZWFyY2hhYmxlIGJ5CisgICAgICAgIGJ5dGVj
b2RlSW5kZXgsIHNvIHRoYXQgREZHOjpCeXRlQ29kZVBhcnNlciBjYW4gdXNlIHRoYXQgaW5mb3Jt
YXRpb24KKyAgICAgICAgdG8gZGV0ZXJtaW5lIGhvdyB0byBvcHRpbWl6ZSBHZXRNZXRob2QuCisg
ICAgICAgIAorICAgICAgICBBIG5ldyBub2RlIG9wIGhhcyBiZWVuIGFkZGVkIHRvIERGRzogQ2hl
Y2tNZXRob2QuIFRoaXMgaXMgYSB2YXJpYW50CisgICAgICAgIG9mIEdldE1ldGhvZCB0aGF0IGhh
cyBiZWVuIG9wdGltaXplZCBmb3IgdGhlIGNhc2UgdGhhdCBHZXRNZXRob2QKKyAgICAgICAgYWx3
YXlzIHRha2VzIHRoZSBmYXN0IHBhdGguIENoZWNrTWV0aG9kIHJlc3VsdHMgaW4gb25seSBhIHZl
cnkKKyAgICAgICAgc21hbGwgYW1vdW50IG9mIGNvZGUgKHR3byBsb2FkcyBhbmQgdHdvIGJyYW5j
aGVzIGluIHRoZSB3b3JzdCBjYXNlLAorICAgICAgICBvbmUgbG9hZCBhbmQgb25lIGJyYW5jaCBp
biB0aGUgYmVzdCBjYXNlKS4gQ2hlY2tNZXRob2QgYmVoYXZlcyBhcworICAgICAgICBpZiBpdCB3
ZXJlIGEgY29uc3RhbnQuICAKKyAgICAgICAgCisgICAgICAgIEludHJvZHVjZWQgdGhlIG5vdGlv
biB0aGF0IGEgREZHIG5vZGUgdGhhdCBpcyBub3QgSlNDb25zdGFudAorICAgICAgICBiZWhhdmVz
IGFzIGEgY29uc3RhbnQuIENoZWNrTWV0aG9kIHVzZXMgdGhpcyBmdW5jdGlvbmFsaXR5LgorICAg
ICAgICAKKyAgICAgICAgVGhpcyBpcyBhIDMlIHNwZWVkLXVwIG9uIEtyYWtlbiwgYW5kIGEgc21h
bGwgc3BlZWQtdXAgb24gVjguCisgICAgICAgIEFwcGVhcnMgdG8gYmUgbmV1dHJhbCBvbiBTdW5T
cGlkZXIuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6
Z2V0U3RydWN0dXJlU3R1YkluZm9CeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Z2V0TWV0
aG9kQ2FsbExpbmtJbmZvQnl0ZWNvZGVJbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvUHJlZGlj
dGVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OnByZWRpY3Rpb25Gcm9tQ2VsbCk6CisgICAgICAg
IChKU0M6OnByZWRpY3Rpb25Gcm9tVmFsdWUpOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3Rl
ZFR5cGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAg
ICAqIGRmZy9ERkdBbGlhc1RyYWNrZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBbGlhc1RyYWNr
ZXI6OnJlY29yZEdldE1ldGhvZCk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Omdl
dE1ldGhvZENoZWNrUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmdldFBy
ZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0NvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6aXNKU0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6dmFsdWVPZkpTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1
ZU9mSW50MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZOdW1i
ZXJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZCb29sZWFuQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1ZU9mSlNDb25zdGFudE5vZGUp
OgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpmaWxsSW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29kZUdlbmVyYXRvcjo6ZmlsbERvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29k
ZUdlbmVyYXRvcjo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5l
cmF0b3I6OmlzS25vd25Ob3RJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2Vu
ZXJhdG9yOjppc0tub3duTm90TnVtYmVyKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVy
YXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNpbGVudFNwaWxs
RlBSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpzaWxlbnRGaWxsR1BS
KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpzaWxlbnRGaWxsRlBSKToK
KyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpmaWxsTnVtZXJpY1RvRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6ZmlsbEludDMyVG9JbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21w
aWxlcjo6ZmlsbFRvSlMpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6aGFzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0lk
ZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc01ldGhvZENoZWNrRGF0YSk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bWV0aG9kQ2hlY2tEYXRhSW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OnZhbHVlT2ZKU0NvbnN0YW50KToKKyAgICAgICAgKiBkZmcvREZH
UHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRl
Tm9kZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4pOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBqaXQv
SklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICog
aml0L0pJVC5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm86OlBy
b3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgIChKU0M6Ok1ldGhvZENhbGxDb21w
aWxhdGlvbkluZm86Ok1ldGhvZENhbGxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAqIGppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tZXRob2Rf
Y2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0aCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAqIGppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21ldGhvZF9j
aGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgICogcnVudGltZS9KU0Nl
bGwuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpKU0NlbGw6OnN0cnVjdHVyZUFkZHJlc3MpOgor
CiAyMDExLTA5LTE1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAK
ICAgICAgICAgVW56aXAgaW5pdGlhbGl6YXRpb24gbGlzdHMgYW5kIGNvbnN0cnVjdG9ycyBpbiBK
U0NlbGwgaGllcmFyY2h5ICg3LzcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NTI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDYgKzE1Myw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgc2VlbiA9IHRydWU7CiAgICAgICAgIH0KIAor
ICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OwogICAgICAgICBDb2RlTG9jYXRpb25DYWxs
IGNhbGxSZXR1cm5Mb2NhdGlvbjsKICAgICAgICAgSklUV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
Y2FjaGVkU3RydWN0dXJlOwogICAgICAgICBKSVRXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBjYWNo
ZWRQcm90b3R5cGVTdHJ1Y3R1cmU7CkBAIC0xOTcsNiArMTk4LDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICByZXR1cm4gc3RydWN0dXJlU3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5l
eGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIAorICAgIGlubGluZSB1bnNpZ25lZCBnZXRTdHJ1
Y3R1cmVTdHViSW5mb0J5dGVjb2RlSW5kZXgoU3RydWN0dXJlU3R1YkluZm8qIHN0cnVjdHVyZVN0
dWJJbmZvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4OworICAgIH0KKwogICAgIGlubGluZSB2b2lkKiBnZXRDYWxsTGlua0luZm9SZXR1cm5M
b2NhdGlvbihDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKICAgICB7CiAgICAgICAgIHJldHVy
biBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwpA
QCAtMjA3LDYgKzIxMywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1ldGhv
ZENhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAg
ICAgfQogCisgICAgaW5saW5lIHVuc2lnbmVkIGdldE1ldGhvZENhbGxMaW5rSW5mb0J5dGVjb2Rl
SW5kZXgoTWV0aG9kQ2FsbExpbmtJbmZvKiBtZXRob2RDYWxsTGlua0luZm8pCisgICAgeworICAg
ICAgICByZXR1cm4gbWV0aG9kQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIH0KKwog
ICAgIGlubGluZSB1bnNpZ25lZCBnZXRDYWxsUmV0dXJuT2Zmc2V0KENhbGxSZXR1cm5PZmZzZXRU
b0J5dGVjb2RlT2Zmc2V0KiBwYykKICAgICB7CiAgICAgICAgIHJldHVybiBwYy0+Y2FsbFJldHVy
bk9mZnNldDsKQEAgLTI3MSw2ICsyODIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICByZXR1cm4gKihiaW5hcnlTZWFyY2g8U3RydWN0dXJlU3R1YkluZm8sIHZvaWQqLCBnZXRTdHJ1
Y3R1cmVTdHViSW5mb1JldHVybkxvY2F0aW9uPihtX3N0cnVjdHVyZVN0dWJJbmZvcy5iZWdpbigp
LCBtX3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOwog
ICAgICAgICB9CiAKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIGdldFN0dWJJbmZvKHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFy
eVNlYXJjaDxTdHJ1Y3R1cmVTdHViSW5mbywgdW5zaWduZWQsIGdldFN0cnVjdHVyZVN0dWJJbmZv
Qnl0ZWNvZGVJbmRleD4obV9zdHJ1Y3R1cmVTdHViSW5mb3MuYmVnaW4oKSwgbV9zdHJ1Y3R1cmVT
dHViSW5mb3Muc2l6ZSgpLCBieXRlY29kZUluZGV4KSk7CisgICAgICAgIH0KKwogICAgICAgICBD
YWxsTGlua0luZm8mIGdldENhbGxMaW5rSW5mbyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxDYWxsTGlu
a0luZm8sIHZvaWQqLCBnZXRDYWxsTGlua0luZm9SZXR1cm5Mb2NhdGlvbj4obV9jYWxsTGlua0lu
Zm9zLmJlZ2luKCksIG1fY2FsbExpbmtJbmZvcy5zaXplKCksIHJldHVybkFkZHJlc3MudmFsdWUo
KSkpOwpAQCAtMjgxLDYgKzI5NywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiAqKGJpbmFyeVNlYXJjaDxNZXRob2RDYWxsTGlua0luZm8sIHZvaWQqLCBnZXRNZXRob2RD
YWxsTGlua0luZm9SZXR1cm5Mb2NhdGlvbj4obV9tZXRob2RDYWxsTGlua0luZm9zLmJlZ2luKCks
IG1fbWV0aG9kQ2FsbExpbmtJbmZvcy5zaXplKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOwog
ICAgICAgICB9CiAKKyAgICAgICAgTWV0aG9kQ2FsbExpbmtJbmZvJiBnZXRNZXRob2RDYWxsTGlu
a0luZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICooYmluYXJ5U2VhcmNoPE1ldGhvZENhbGxMaW5rSW5mbywgdW5zaWduZWQsIGdldE1ldGhv
ZENhbGxMaW5rSW5mb0J5dGVjb2RlSW5kZXg+KG1fbWV0aG9kQ2FsbExpbmtJbmZvcy5iZWdpbigp
LCBtX21ldGhvZENhbGxMaW5rSW5mb3Muc2l6ZSgpLCBieXRlY29kZUluZGV4KSk7CisgICAgICAg
IH0KKwogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9yYXJlRGF0YSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5j
cHAJKHJldmlzaW9uIDk1MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1By
ZWRpY3RlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwyOSArODIsMzMgQEAgY29uc3Qg
Y2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZAogfQogI2VuZGlmCiAKK1ByZWRpY3Rl
ZFR5cGUgcHJlZGljdGlvbkZyb21DZWxsKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mbyA9IGNlbGwtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKTsKKyAgICAK
KyAgICBpZiAoY2xhc3NJbmZvID09ICZKU0ZpbmFsT2JqZWN0OjpzX2luZm8pCisgICAgICAgIHJl
dHVybiBQcmVkaWN0RmluYWxPYmplY3Q7CisgICAgCisgICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNB
cnJheTo6c19pbmZvKQorICAgICAgICByZXR1cm4gUHJlZGljdEFycmF5OworICAgIAorICAgIGlm
IChjbGFzc0luZm8gPT0gJkpTU3RyaW5nOjpzX2luZm8pCisgICAgICAgIHJldHVybiBQcmVkaWN0
U3RyaW5nOworICAgIAorICAgIGlmIChjbGFzc0luZm8tPmlzU3ViQ2xhc3NPZigmSlNPYmplY3Q6
OnNfaW5mbykpCisgICAgICAgIHJldHVybiBQcmVkaWN0T2JqZWN0T3RoZXI7CisgICAgCisgICAg
cmV0dXJuIFByZWRpY3RDZWxsT3RoZXI7Cit9CisKIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZy
b21WYWx1ZShKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCiAgICAg
ICAgIHJldHVybiBQcmVkaWN0SW50MzI7CiAgICAgaWYgKHZhbHVlLmlzRG91YmxlKCkpCiAgICAg
ICAgIHJldHVybiBQcmVkaWN0RG91YmxlOwotICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgewotICAg
ICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUoKS0+Y2xhc3NJbmZvKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY2xhc3NJbmZvID09ICZK
U0ZpbmFsT2JqZWN0OjpzX2luZm8pCi0gICAgICAgICAgICByZXR1cm4gUHJlZGljdEZpbmFsT2Jq
ZWN0OwotICAgICAgICAKLSAgICAgICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNBcnJheTo6c19pbmZv
KQotICAgICAgICAgICAgcmV0dXJuIFByZWRpY3RBcnJheTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChjbGFzc0luZm8gPT0gJkpTU3RyaW5nOjpzX2luZm8pCi0gICAgICAgICAgICByZXR1cm4gUHJl
ZGljdFN0cmluZzsKLSAgICAgICAgCi0gICAgICAgIGlmIChjbGFzc0luZm8tPmlzU3ViQ2xhc3NP
ZigmSlNPYmplY3Q6OnNfaW5mbykpCi0gICAgICAgICAgICByZXR1cm4gUHJlZGljdE9iamVjdE90
aGVyOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFByZWRpY3RDZWxsT3RoZXI7Ci0gICAgfQor
ICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIHByZWRpY3Rpb25Gcm9tQ2Vs
bCh2YWx1ZS5hc0NlbGwoKSk7CiAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQogICAgICAgICBy
ZXR1cm4gUHJlZGljdEJvb2xlYW47CiAgICAgcmV0dXJuIFByZWRpY3RPdGhlcjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAkocmV2aXNp
b24gOTUyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDcgQEAgaW5saW5lIFByZWRpY3RlZFR5
cGUgbWFrZVByZWRpY3Rpb24oUHJlZAogICAgIHJldHVybiB0eXBlIHwgKHNvdXJjZSA9PSBTdHJv
bmdQcmVkaWN0aW9uID8gU3Ryb25nUHJlZGljdGlvblRhZyA6IDApOwogfQogCitQcmVkaWN0ZWRU
eXBlIHByZWRpY3Rpb25Gcm9tQ2VsbChKU0NlbGwqKTsKIFByZWRpY3RlZFR5cGUgcHJlZGljdGlv
bkZyb21WYWx1ZShKU1ZhbHVlKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2
aXNpb24gOTUyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB7CiAgICAgICAgICAgICBzZWVuID0gdHJ1ZTsKICAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBpbnQ4X3Qg
YWNjZXNzVHlwZTsKICAgICAgICAgaW50OF90IHNlZW47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmgJKHJldmlzaW9uIDk1MjYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
ODUsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCByZWNvcmRHZXRNZXRob2QoTm9k
ZUluZGV4IGdldE1ldGhvZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoZ2V0TWV0aG9k
LCBtX2dyYXBoW2dldE1ldGhvZF0ub3AgPT0gR2V0TWV0aG9kKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChnZXRNZXRob2QsIG1fZ3JhcGhbZ2V0TWV0aG9kXS5vcCA9PSBHZXRNZXRob2QgfHwgbV9n
cmFwaFtnZXRNZXRob2RdLm9wID09IENoZWNrTWV0aG9kKTsKICAgICAgICAgbV9jYW5kaWRhdGVB
bGlhc0dldEJ5VmFsID0gTm9Ob2RlOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk1MjYyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkyMCwxMSArOTIwLDMzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBn
ZXQoZ2V0SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXIgPSBnZXRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBnZXRNZXRob2QgPSBhZGRUb0dyYXBoKEdldE1ldGhvZCwgT3BJ
bmZvKGlkZW50aWZpZXIpLCBPcEluZm8oUHJlZGljdE5vbmUpLCBiYXNlKTsKLSAgICAgICAgICAg
IHNldChnZXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldE1ldGhvZCk7Ci0gICAgICAgICAg
ICBzdHJvbmdseVByZWRpY3QoZ2V0TWV0aG9kKTsKLSAgICAgICAgICAgIGFsaWFzZXMucmVjb3Jk
R2V0TWV0aG9kKGdldE1ldGhvZCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBD
aGVjayBpZiB0aGUgbWV0aG9kX2NoZWNrIHdhcyBtb25vbW9ycGhpYy4gSWYgc28sIGVtaXQgYSBD
aGVja1hZWk1ldGhvZAorICAgICAgICAgICAgLy8gbm9kZSwgd2hpY2ggaXMgYSBsb3QgbW9yZSBl
ZmZpY2llbnQuCisgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBtX3By
b2ZpbGVkQmxvY2stPmdldFN0dWJJbmZvKG1fY3VycmVudEluZGV4KTsKKyAgICAgICAgICAgIE1l
dGhvZENhbGxMaW5rSW5mbyYgbWV0aG9kQ2FsbCA9IG1fcHJvZmlsZWRCbG9jay0+Z2V0TWV0aG9k
Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKG1ldGhvZENhbGwuc2VlbiAmJiAhIW1ldGhvZENhbGwuY2FjaGVkU3RydWN0dXJlICYmICFz
dHViSW5mby5zZWVuKSB7CisgICAgICAgICAgICAgICAgLy8gSXQncyBtb25vbW9ycGhpYyBhcyBm
YXIgYXMgd2UgY2FuIHRlbGwsIHNpbmNlIHRoZSBtZXRob2RfY2hlY2sgd2FzIGxpbmtlZAorICAg
ICAgICAgICAgICAgIC8vIGJ1dCB0aGUgc2xvdyBwYXRoIChpLmUuIHRoZSBub3JtYWwgZ2V0X2J5
X2lkKSBuZXZlciBmaXJlZC4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCBjaGVja01ldGhvZCA9IGFkZFRvR3JhcGgoQ2hlY2tNZXRob2QsIE9wSW5mbyhpZGVudGlmaWVy
KSwgT3BJbmZvKG1fZ3JhcGgubV9tZXRob2RDaGVja0RhdGEuc2l6ZSgpKSwgYmFzZSk7CisgICAg
ICAgICAgICAgICAgc2V0KGdldEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgY2hlY2tNZXRob2Qp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE1ldGhvZENoZWNrRGF0YSBtZXRo
b2RDaGVja0RhdGE7CisgICAgICAgICAgICAgICAgbWV0aG9kQ2hlY2tEYXRhLnN0cnVjdHVyZSA9
IG1ldGhvZENhbGwuY2FjaGVkU3RydWN0dXJlLmdldCgpOworICAgICAgICAgICAgICAgIG1ldGhv
ZENoZWNrRGF0YS5wcm90b3R5cGVTdHJ1Y3R1cmUgPSBtZXRob2RDYWxsLmNhY2hlZFByb3RvdHlw
ZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAgICAgICBtZXRob2RDaGVja0RhdGEuZnVuY3Rp
b24gPSBtZXRob2RDYWxsLmNhY2hlZEZ1bmN0aW9uLmdldCgpOworICAgICAgICAgICAgICAgIG1l
dGhvZENoZWNrRGF0YS5wcm90b3R5cGUgPSBtZXRob2RDYWxsLmNhY2hlZFByb3RvdHlwZS5nZXQo
KTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fbWV0aG9kQ2hlY2tEYXRhLmFwcGVuZChtZXRo
b2RDaGVja0RhdGEpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFsaWFzZXMu
cmVjb3JkR2V0TWV0aG9kKGNoZWNrTWV0aG9kKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgTm9kZUluZGV4IGdldE1ldGhvZCA9IGFkZFRvR3JhcGgoR2V0TWV0aG9kLCBP
cEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhQcmVkaWN0Tm9uZSksIGJhc2UpOworICAgICAgICAg
ICAgICAgIHNldChnZXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldE1ldGhvZCk7CisgICAg
ICAgICAgICAgICAgc3Ryb25nbHlQcmVkaWN0KGdldE1ldGhvZCk7CisgICAgICAgICAgICAgICAg
YWxpYXNlcy5yZWNvcmRHZXRNZXRob2QoZ2V0TWV0aG9kKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gT1BDT0RFX0xFTkdUSChvcF9t
ZXRob2RfY2hlY2spICsgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpOwogICAgICAgICAgICAg
Y29udGludWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2
aXNpb24gOTUyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUlu
ZGV4IG5vZGVJbmRleCwgQ28KICAgICBpZiAob3AgPT0gSlNDb25zdGFudCkgewogICAgICAgICBw
cmludGYoIiVzJCV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS5jb25zdGFudE51bWJl
cigpKTsKICAgICAgICAgaWYgKGNvZGVCbG9jaykgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG5vZGUudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2ssIG5vZGVJbmRleCk7CiAgICAg
ICAgICAgICBwcmludGYoIiA9ICVzIiwgdmFsdWUuZGVzY3JpcHRpb24oKSk7CiAgICAgICAgIH0K
ICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CkBAIC0xNDMsMTAgKzE0MywxNCBAQCB2b2lkIEdy
YXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgaWYgKCFza2lwcGVkKSB7CiAg
ICAgICAgIGlmIChub2RlLmhhc0xvY2FsKCkpCiAgICAgICAgICAgICBwcmludGYoIiAgcHJlZGlj
dGluZyAlcyIsIHByZWRpY3Rpb25Ub1N0cmluZyhnZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSkp
KTsKLSAgICAgICAgaWYgKG5vZGUuaGFzVmFyTnVtYmVyKCkpCisgICAgICAgIGVsc2UgaWYgKG5v
ZGUuaGFzVmFyTnVtYmVyKCkpCiAgICAgICAgICAgICBwcmludGYoIiAgcHJlZGljdGluZyAlcyIs
IHByZWRpY3Rpb25Ub1N0cmluZyhnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGUudmFyTnVtYmVy
KCkpKSk7Ci0gICAgICAgIGlmIChub2RlLmhhc1ByZWRpY3Rpb24oKSkKKyAgICAgICAgZWxzZSBp
ZiAobm9kZS5oYXNQcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICBwcmludGYoIiAgcHJlZGljdGlu
ZyAlcyIsIHByZWRpY3Rpb25Ub1N0cmluZyhub2RlLmdldFByZWRpY3Rpb24oKSkpOworICAgICAg
ICBlbHNlIGlmIChub2RlLmhhc01ldGhvZENoZWNrRGF0YSgpKSB7CisgICAgICAgICAgICBNZXRo
b2RDaGVja0RhdGEmIG1ldGhvZENoZWNrRGF0YSA9IG1fbWV0aG9kQ2hlY2tEYXRhW25vZGUubWV0
aG9kQ2hlY2tEYXRhSW5kZXgoKV07CisgICAgICAgICAgICBwcmludGYoIiAgcHJlZGljdGluZyBm
dW5jdGlvbiAlcCIsIG1ldGhvZENoZWNrRGF0YS5mdW5jdGlvbik7CisgICAgICAgIH0KICAgICB9
CiAgICAgCiAgICAgcHJpbnRmKCJcbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAkocmV2aXNpb24gOTUyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDE1IEBAIHN0cnVjdCBWYXJpYWJs
ZVJlY29yZCB7CiAgICAgTm9kZUluZGV4IHZhbHVlOwogfTsKIAorc3RydWN0IE1ldGhvZENoZWNr
RGF0YSB7CisgICAgLy8gSXQgaXMgc2FmZSB0byByZWZlciB0byB0aGVzZSBkaXJlY3RseSBiZWNh
dXNlIHRoZXkgYXJlIHNoYWRvd2VkIGJ5CisgICAgLy8gdGhlIG9sZCBKSVQncyBDb2RlQmxvY2sn
cyBNZXRob2RDYWxsTGlua0luZm8uCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisgICAgU3Ry
dWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmU7CisgICAgSlNPYmplY3QqIGZ1bmN0aW9uOworICAg
IEpTT2JqZWN0KiBwcm90b3R5cGU7Cit9OworCiB0eXBlZGVmIFZlY3RvciA8QmxvY2tJbmRleCwg
Mj4gUHJlZGVjZXNzb3JMaXN0OwogCiBzdHJ1Y3QgQmFzaWNCbG9jayB7CkBAIC0xNzEsNiArMTgw
LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMuZ2V0R2xvYmFsVmFy
UHJlZGljdGlvbih2YXJOdW1iZXIpOwogICAgIH0KICAgICAKKyAgICBQcmVkaWN0ZWRUeXBlIGdl
dE1ldGhvZENoZWNrUHJlZGljdGlvbihOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb25Gcm9tQ2VsbChtX21ldGhvZENoZWNrRGF0YVtub2Rl
Lm1ldGhvZENoZWNrRGF0YUluZGV4KCldLmZ1bmN0aW9uKSwgU3Ryb25nUHJlZGljdGlvbik7Cisg
ICAgfQorICAgIAogICAgIFByZWRpY3RlZFR5cGUgZ2V0UHJlZGljdGlvbihOb2RlJiBub2RlKQog
ICAgIHsKICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZub2RlOwpAQCAtMTkyLDYgKzIwNiw4IEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKICAg
ICAgICAgICAgIHJldHVybiBub2RlUHRyLT5nZXRQcmVkaWN0aW9uKCk7CisgICAgICAgIGNhc2Ug
Q2hlY2tNZXRob2Q6CisgICAgICAgICAgICByZXR1cm4gZ2V0TWV0aG9kQ2hlY2tQcmVkaWN0aW9u
KCpub2RlUHRyKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBQcmVkaWN0
Tm9uZTsKICAgICAgICAgfQpAQCAtMjAwLDExICsyMTYsMTEgQEAgcHVibGljOgogICAgIC8vIEhl
bHBlciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCiAgICAgYm9vbCBpc0Nv
bnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9k
ZUluZGV4KS5pc0NvbnN0YW50KCk7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmhhc0Nv
bnN0YW50KCk7CiAgICAgfQogICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5k
ZXgpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0NvbnN0YW50KCk7Cisg
ICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmhhc0NvbnN0YW50KCk7CiAgICAgfQogICAgIGJv
b2wgaXNJbnQzMkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUlu
ZGV4KQogICAgIHsKQEAgLTIyNSwxOSArMjQxLDIxIEBAIHB1YmxpYzoKICAgICAvLyBIZWxwZXIg
bWV0aG9kcyBnZXQgY29uc3RhbnQgdmFsdWVzIGZyb20gbm9kZXMuCiAgICAgSlNWYWx1ZSB2YWx1
ZU9mSlNDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRleCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLnZhbHVlT2ZKU0NvbnN0YW50KGNv
ZGVCbG9jayk7CisgICAgICAgIGlmIChhdChub2RlSW5kZXgpLmhhc01ldGhvZENoZWNrRGF0YSgp
KQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUobV9tZXRob2RDaGVja0RhdGFbYXQobm9kZUlu
ZGV4KS5tZXRob2RDaGVja0RhdGFJbmRleCgpXS5mdW5jdGlvbik7CisgICAgICAgIHJldHVybiB2
YWx1ZU9mSlNDb25zdGFudE5vZGUoY29kZUJsb2NrLCBub2RlSW5kZXgpOwogICAgIH0KICAgICBp
bnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5k
ZXggbm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkudmFsdWVP
ZkludDMyQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0
YW50Tm9kZShjb2RlQmxvY2ssIG5vZGVJbmRleCkuYXNJbnQzMigpOwogICAgIH0KICAgICBkb3Vi
bGUgdmFsdWVPZk51bWJlckNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXgg
bm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkudmFsdWVPZk51
bWJlckNvbnN0YW50KGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFu
dE5vZGUoY29kZUJsb2NrLCBub2RlSW5kZXgpLnVuY2hlY2tlZEdldE51bWJlcigpOwogICAgIH0K
ICAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5v
ZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS52
YWx1ZU9mQm9vbGVhbkNvbnN0YW50KGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybiB2YWx1ZU9m
SlNDb25zdGFudE5vZGUoY29kZUJsb2NrLCBub2RlSW5kZXgpLmdldEJvb2xlYW4oKTsKICAgICB9
CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0yNDgsNyArMjY2LDEzIEBAIHB1YmxpYzoKIAogICAgIFZl
Y3RvcjwgT3duUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPE5vZGVJ
bmRleCwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CisgICAgVmVjdG9yPE1ldGhvZENoZWNrRGF0YT4g
bV9tZXRob2RDaGVja0RhdGE7CiBwcml2YXRlOgorICAgIAorICAgIEpTVmFsdWUgdmFsdWVPZkpT
Q29uc3RhbnROb2RlKENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleCArIGF0KG5vZGVJbmRleCkuY29uc3RhbnROdW1iZXIoKSkuZ2V0
KCk7CisgICAgfQogCiAgICAgLy8gV2hlbiBhIG5vZGUncyByZWZDb3VudCBnb2VzIGZyb20gMCB0
byAxLCBpdCBtdXN0IChsb2dpY2FsbHkpIHJlY3Vyc2l2ZWx5IHJlZiBhbGwgb2YgaXRzIGNoaWxk
cmVuLCBhbmQgdmljZSB2ZXJzYS4KICAgICB2b2lkIHJlZkNoaWxkcmVuKE5vZGVJbmRleCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDk1MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBHUFJS
ZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbEludGVnZXIoTm9kCiAgICAgaWYgKGluZm8ucmVnaXN0
ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewogICAgICAgICBHUFJSZWcgZ3ByID0gYWxs
b2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYg
KG5vZGUuaGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgIGlmIChpc0lu
dDMyQ29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIp
OwpAQCAtMTI0LDcgKzEyNCw3IEBAIEZQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91Ymxl
KE5vZGUKICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7
CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLmlz
Q29uc3RhbnQoKSkgeworICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CiAgICAgICAg
ICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogc2hvdWxkIG5vdCBiZSByZWFjaGFibGU/CiAgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4
KSksIGdwcik7CkBAIC0yNDksNyArMjQ5LDcgQEAgR1BSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZp
bGxKU1ZhbHVlKE5vZAogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKICAgICAgICAgR1BSUmVn
IGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYgKG5vZGUuaXNDb25zdGFudCgpKSB7Cisg
ICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgIGlmIChpc0ludDMy
Q29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Z3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFs
dWUgPSBqc051bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKQEAgLTQwNCw3
ICs0MDQsNyBAQCBib29sIEpJVENvZGVHZW5lcmF0b3I6OmlzS25vd25Ob3RJbnRlZ2VyCiAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07
CiAgICAgCiAgICAgcmV0dXJuIGluZm8uaXNKU0RvdWJsZSgpIHx8IGluZm8uaXNKU0NlbGwoKSB8
fCBpbmZvLmlzSlNCb29sZWFuKCkKLSAgICAgICAgfHwgKG5vZGUuaXNDb25zdGFudCgpICYmICF2
YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlzSW50MzIoKSk7CisgICAgICAgIHx8IChub2Rl
Lmhhc0NvbnN0YW50KCkgJiYgIXZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNJbnQzMigp
KTsKIH0KIAogYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjppc0tub3duTm90TnVtYmVyKE5vZGVJbmRl
eCBub2RlSW5kZXgpCkBAIC00MTQsNyArNDE0LDcgQEAgYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjpp
c0tub3duTm90TnVtYmVyKAogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9u
SW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogICAgIAogICAgIHJldHVybiAoIWluZm8uaXNKU0RvdWJs
ZSgpICYmICFpbmZvLmlzSlNJbnRlZ2VyKCkgJiYgIWluZm8uaXNVbmtub3duSlMoKSkKLSAgICAg
ICAgfHwgKG5vZGUuaXNDb25zdGFudCgpICYmICFpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkp
OworICAgICAgICB8fCAobm9kZS5oYXNDb25zdGFudCgpICYmICFpc051bWJlckNvbnN0YW50KG5v
ZGVJbmRleCkpOwogfQogCiBib29sIEpJVENvZGVHZW5lcmF0b3I6OmlzS25vd25Cb29sZWFuKE5v
ZGVJbmRleCBub2RlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gOTUyNjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjM4
LDEyICsyMzgsMTIgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBp
ZiAoIWluZm8ubmVlZHNTcGlsbCgpKSB7CiAgICAgICAgICAgICAvLyBpdCdzIGVpdGhlciBhIGNv
bnN0YW50IG9yIGl0J3MgYWxyZWFkeSBiZWVuIHNwaWxsZWQKLSAgICAgICAgICAgIEFTU0VSVCht
X2ppdC5ncmFwaCgpW2luZm8ubm9kZUluZGV4KCldLmlzQ29uc3RhbnQoKSB8fCBpbmZvLnNwaWxs
Rm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpOworICAgICAgICAgICAgQVNTRVJUKG1faml0Lmdy
YXBoKClbaW5mby5ub2RlSW5kZXgoKV0uaGFzQ29uc3RhbnQoKSB8fCBpbmZvLnNwaWxsRm9ybWF0
KCkgIT0gRGF0YUZvcm1hdE5vbmUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICAvLyBpdCdzIG5laXRoZXIgYSBjb25zdGFudCBub3IgaGFzIGl0IGJl
ZW4gc3BpbGxlZC4KLSAgICAgICAgQVNTRVJUKCFtX2ppdC5ncmFwaCgpW2luZm8ubm9kZUluZGV4
KCldLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVCghbV9qaXQuZ3JhcGgoKVtpbmZvLm5v
ZGVJbmRleCgpXS5oYXNDb25zdGFudCgpKTsKICAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSk7CiAKICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUoaW5m
by5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwpAQCAtMjYyLDcgKzI2
Miw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGlu
Zm8ucmVnaXN0ZXJGb3JtYXQoKTsKIAogICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0
YUZvcm1hdEludGVnZXIpIHsKLSAgICAgICAgICAgIGlmIChub2RlLmlzQ29uc3RhbnQoKSkgewor
ICAgICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgICAgIEFT
U0VSVChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSwgaW5mby5ncHIoKSk7
CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTI3MCw3ICsyNzAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobm9kZS5pc0NvbnN0YW50
KCkpCisgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBtX2ppdC5t
b3ZlKHZhbHVlT2ZKU0NvbnN0YW50QXNJbW1QdHIobm9kZUluZGV4KSwgaW5mby5ncHIoKSk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZv
cm1hdEpTIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsKTsKQEAgLTI4Nyw3ICsy
ODcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25v
ZGVJbmRleF07CiAgICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZv
cm1hdERvdWJsZSk7CiAKLSAgICAgICAgaWYgKG5vZGUuaXNDb25zdGFudCgpKSB7CisgICAgICAg
IGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpc051bWJlckNv
bnN0YW50KG5vZGVJbmRleCkpOwogICAgICAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6
SW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRl
eCkpKSwgY2FuVHJhbXBsZSk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUoY2Fu
VHJhbXBsZSwgaW5mby5mcHIoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTUyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMs
NyBAQCB2b2lkIEpJVENvbXBpbGVyOjpmaWxsTnVtZXJpY1RvRG91YmxlKE5vCiB7CiAgICAgTm9k
ZSYgbm9kZSA9IGdyYXBoKClbbm9kZUluZGV4XTsKIAotICAgIGlmIChub2RlLmlzQ29uc3RhbnQo
KSkgeworICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgQVNTRVJUKGlzTnVt
YmVyQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgIG1vdmUoTWFjcm9Bc3NlbWJsZXI6Oklt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldERvdWJsZVRvSW50cHRyKHZh
bHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSkpLCB0ZW1wb3JhcnkpOwogICAgICAgICBt
b3ZlUHRyVG9Eb3VibGUodGVtcG9yYXJ5LCBmcHIpOwpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpmaWxsSW50MzJUb0ludGVnZXIoTm9kCiB7CiAgICAgTm9kZSYgbm9kZSA9IGdy
YXBoKClbbm9kZUluZGV4XTsKIAotICAgIGlmIChub2RlLmlzQ29uc3RhbnQoKSkgeworICAgIGlm
IChub2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChu
b2RlSW5kZXgpKTsKICAgICAgICAgbW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZklu
dDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGdwcik7CiAgICAgfSBlbHNlIHsKQEAgLTgxLDcgKzgx
LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6ZmlsbFRvSlMoTm9kZUluZGV4IG5vZAogewogICAgIE5v
ZGUmIG5vZGUgPSBncmFwaCgpW25vZGVJbmRleF07CiAKLSAgICBpZiAobm9kZS5pc0NvbnN0YW50
KCkpIHsKKyAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgIGlmIChpc0ludDMy
Q29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNO
dW1iZXIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICBtb3Zl
KE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NTI2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzEsNiArMTcxLDcgQEAgcHJpdmF0ZToKICAgICBtYWNybyhQdXRCeUlkLCBOb2RlTXVzdEdlbmVy
YXRlKSBcCiAgICAgbWFjcm8oUHV0QnlJZERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAg
IG1hY3JvKEdldE1ldGhvZCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAg
IG1hY3JvKENoZWNrTWV0aG9kLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgbWFjcm8oR2V0R2xvYmFsVmFyLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oUHV0R2xvYmFsVmFyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXApAQCAt
Mjk3LDYgKzI5OCwxMSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICByZXR1cm4gb3Ag
PT0gSlNDb25zdGFudDsKICAgICB9CisgICAgCisgICAgYm9vbCBoYXNDb25zdGFudCgpCisgICAg
eworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpIHx8IGhhc01ldGhvZENoZWNrRGF0YSgpOwor
ICAgIH0KIAogICAgIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKCkKICAgICB7CkBAIC0zMDQsMTEg
KzMxMCw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvOwogICAgIH0K
ICAgICAKLSAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2Nr
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCArIGNvbnN0YW50TnVtYmVyKCkpLmdldCgpOwotICAgIH0K
LSAgICAKICAgICBib29sIGlzSW50MzJDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAg
ICB7CiAgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQoY29k
ZUJsb2NrKS5pc0ludDMyKCk7CkBAIC0zMzQsMjQgKzMzNSw2IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2sp
LmlzQm9vbGVhbigpOwogICAgIH0KICAgICAKLSAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0
YW50KENvZGVCbG9jayogY29kZUJsb2NrKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSW50MzJD
b25zdGFudChjb2RlQmxvY2spKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KGNv
ZGVCbG9jaykuYXNJbnQzMigpOwotICAgIH0KLSAgICAKLSAgICBkb3VibGUgdmFsdWVPZk51bWJl
ckNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlz
TnVtYmVyQ29uc3RhbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25z
dGFudChjb2RlQmxvY2spLnVuY2hlY2tlZEdldE51bWJlcigpOwotICAgIH0KLSAgICAKLSAgICBi
b29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgewot
ICAgICAgICBBU1NFUlQoaXNCb29sZWFuQ29uc3RhbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2spLmdldEJvb2xlYW4oKTsKLSAgICB9Ci0K
ICAgICBib29sIGhhc0xvY2FsKCkKICAgICB7CiAgICAgICAgIHJldHVybiBvcCA9PSBHZXRMb2Nh
bCB8fCBvcCA9PSBTZXRMb2NhbDsKQEAgLTM2NCwxMiArMzQ3LDIxIEBAIHN0cnVjdCBOb2RlIHsK
ICAgICB9CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgLy8gSWYgd2Ugd2FudCB0byB1c2Ug
dGhpcyBpbiBwcm9kdWN0aW9uIGNvZGUsIHNob3VsZCBtYWtlIGl0IGZhc3RlciAtCi0gICAgLy8g
ZS5nLiBtYWtlIGhhc0lkZW50aWZpZXIgYSBmbGFnIGluIHRoZSBiaXRmaWVsZC4KICAgICBib29s
IGhhc0lkZW50aWZpZXIoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wID09IEdldEJ5SWQgfHwg
b3AgPT0gUHV0QnlJZCB8fCBvcCA9PSBQdXRCeUlkRGlyZWN0IHx8IG9wID09IEdldE1ldGhvZAot
ICAgICAgICAgICAgfHwgb3AgPT0gUmVzb2x2ZSB8fCBvcCA9PSBSZXNvbHZlQmFzZSB8fCBvcCA9
PSBSZXNvbHZlQmFzZVN0cmljdFB1dDsKKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBj
YXNlIEdldEJ5SWQ6CisgICAgICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAgY2FzZSBQdXRCeUlk
RGlyZWN0OgorICAgICAgICBjYXNlIEdldE1ldGhvZDoKKyAgICAgICAgY2FzZSBDaGVja01ldGhv
ZDoKKyAgICAgICAgY2FzZSBSZXNvbHZlOgorICAgICAgICBjYXNlIFJlc29sdmVCYXNlOgorICAg
ICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
ICAgICB9CiAjZW5kaWYKIApAQCAtMzc4LDcgKzM3MCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgQVNTRVJUKGhhc0lkZW50aWZpZXIoKSk7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzsKICAg
ICB9Ci0KKyAgICAKICAgICBib29sIGhhc1Zhck51bWJlcigpCiAgICAgewogICAgICAgICByZXR1
cm4gb3AgPT0gR2V0R2xvYmFsVmFyIHx8IG9wID09IFB1dEdsb2JhbFZhcjsKQEAgLTQ4MCw2ICs0
NzIsMTcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1f
b3BJbmZvMiwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CiAgICAgfQogICAg
IAorICAgIGJvb2wgaGFzTWV0aG9kQ2hlY2tEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBv
cCA9PSBDaGVja01ldGhvZDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbWV0aG9kQ2hlY2tE
YXRhSW5kZXgoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc01ldGhvZENoZWNrRGF0YSgpKTsK
KyAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsKKyAgICB9CisgICAgCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlcigpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzUmVzdWx0KCkp
OwpAQCAtNTY5LDYgKzU3MiwxNCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfSBjaGlsZHJlbjsKIAog
cHJpdmF0ZToKKyAgICAvLyBUaGlzIGlzIHByaXZhdGUgYmVjYXVzZSBpdCBvbmx5IHdvcmtzIGZv
ciB0aGUgSlNDb25zdGFudCBvcC4gVGhlIERGRyBpcyB3cml0dGVuIHVuZGVyIHRoZQorICAgIC8v
IGFzc3VtcHRpb24gdGhhdCAidmFsdWVPZkpTQ29uc3RhbnQiIGNhbiBjb3JyZWN0bHkgcmV0dXJu
IGEgY29uc3RhbnQgZm9yIGFueSBERkcgbm9kZSBmb3IKKyAgICAvLyB3aGljaCBoYXNDb25zdGFu
dCgpIGlzIHRydWUuCisgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFudE51bWJlcigpKS5nZXQoKTsK
KyAgICB9CisKICAgICAvLyBUaGUgdmlydHVhbCByZWdpc3RlciBudW1iZXIgKHNwaWxsIGxvY2F0
aW9uKSBhc3NvY2lhdGVkIHdpdGggdGhpcyAuCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1fdmlydHVh
bFJlZ2lzdGVyOwogICAgIC8vIFRoZSBudW1iZXIgb2YgdXNlcyBvZiB0aGUgcmVzdWx0IG9mIHRo
aXMgb3BlcmF0aW9uICgrMSBmb3IgJ211c3QgZ2VuZXJhdGUnIG5vZGVzLCB3aGljaCBoYXZlIHNp
ZGUtZWZmZWN0cykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFn
YXRvci5jcHAJKHJldmlzaW9uIDk1MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgSlNDb25z
dGFudDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0
aW9uKHByZWRpY3Rpb25Gcm9tVmFsdWUobm9kZS52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9j
aykpLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRp
Y3Rpb24obWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbkZyb21WYWx1ZShtX2dyYXBoLnZhbHVlT2ZK
U0NvbnN0YW50KG1fY29kZUJsb2NrLCBtX2NvbXBpbGVJbmRleCkpLCBTdHJvbmdQcmVkaWN0aW9u
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0yMzYs
NiArMjM2LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVk
aWN0aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDaGVja01ldGhvZDogeworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVVzZShub2RlLmNoaWxkMSgpLCBQcmVkaWN0T2JqZWN0VW5rbm93
biB8IFN0cm9uZ1ByZWRpY3Rpb25UYWcpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVk
aWN0aW9uKG1fZ3JhcGguZ2V0TWV0aG9kQ2hlY2tQcmVkaWN0aW9uKG5vZGUpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNl
IENvbnN0cnVjdDogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk1MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQy
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogCiAgICAgc3dp
dGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7
Ci0gICAgICAgIGlmIChub2RlLmlzQ29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0YW50KG5vZGVJ
bmRleCkpIHsKKyAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0
YW50KG5vZGVJbmRleCkpIHsKICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKCk7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAg
ICAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwpAQCAtNTAsNyArNTAsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIAogICAgICAgICBHUFJSZWcg
Z3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS5pc0NvbnN0YW50KCkpIHsKKyAg
ICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgbV9ncHJzLnJldGFp
bihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAg
IEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgp
KSwgZ3ByKTsKQEAgLTIzNiw3ICsyMzYsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVEb3ViCiAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0
Tm9uZSkgewogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAo
bm9kZS5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewog
ICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7CiAgICAgICAgICAg
ICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50
ZXJwcmV0RG91YmxlVG9JbnRwdHIoc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlSW5kZXgpKSkpKSwgZ3ByKTsKQEAgLTM2MCw3ICszNjAsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTog
ewogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS5p
c0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewogICAgICAg
ICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKICAg
ICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgICAgICAgICAgbV9ncHJz
LnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKQEAgLTQy
NSw3ICs0MjUsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAg
ICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUo
KTsKIAotICAgICAgICBpZiAobm9kZS5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKG5vZGUu
aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpT
Q29uc3RhbnQobm9kZUluZGV4KTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQm9vbGVhbigp
KSB7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckNvbnN0YW50KTsKQEAgLTEzOTYsNiArMTM5NiwyNSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIENoZWNrTWV0aG9kOiB7CisgICAg
ICAgIE1ldGhvZENoZWNrRGF0YSYgbWV0aG9kQ2hlY2tEYXRhID0gbV9qaXQuZ3JhcGgoKS5tX21l
dGhvZENoZWNrRGF0YVtub2RlLm1ldGhvZENoZWNrRGF0YUluZGV4KCldOworICAgICAgICAKKyAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7IC8vIHRoaXMgbmVlZHMgdG8gYmUgYSBz
ZXBhcmF0ZSByZWdpc3RlciwgdW5mb3J0dW5hdGVseS4KKyAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRD
b21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVj
a0RhdGEuc3RydWN0dXJlKSkpOworICAgICAgICBpZiAobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlw
ZSAhPSBtX2ppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCktPm1ldGhvZENhbGxEdW1teSgp
KSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1l
dGhvZENoZWNrRGF0YS5wcm90b3R5cGUtPnN0cnVjdHVyZUFkZHJlc3MoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSKSwgSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlwZVN0cnVjdHVyZSkpKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CisgICAgICAg
IGluaXRDb25zdGFudEluZm8obV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9
CiAKICAgICBjYXNlIFB1dEJ5SWQ6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHJldmlzaW9uIDk1MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MjgsNiArNjI4LDggQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21w
aWxlKENvZGVQdHIqIGZ1bgogICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZlN0cnVjdHVyZVN0
dWJJbmZvcyhtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUoKSk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9j
ay0+c3RydWN0dXJlU3R1YkluZm8oaSk7CisgICAgICAgIEFTU0VSVChtX3Byb3BlcnR5QWNjZXNz
Q29tcGlsYXRpb25JbmZvW2ldLmJ5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKTsKKyAgICAgICAgaW5mby5ieXRlY29kZUluZGV4ID0gbV9wcm9wZXJ0
eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1tpXS5ieXRlY29kZUluZGV4OwogICAgICAgICBpbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vz
c0NvbXBpbGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pOwogICAgICAgICBpbmZvLmhv
dFBhdGhCZWdpbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFjY2Vzc0NvbXBp
bGF0aW9uSW5mb1tpXS5ob3RQYXRoQmVnaW4pOwogICAgIH0KQEAgLTY0Myw2ICs2NDUsNyBAQCBK
SVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAgICAgbV9jb2RlQmxvY2st
PmFkZE1ldGhvZENhbGxMaW5rSW5mb3MobWV0aG9kQ2FsbENvdW50KTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbWV0aG9kQ2FsbENvdW50OyArK2kpIHsKICAgICAgICAgTWV0aG9kQ2Fs
bExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPm1ldGhvZENhbGxMaW5rSW5mbyhpKTsKKyAg
ICAgICAgaW5mby5ieXRlY29kZUluZGV4ID0gbV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvW2ld
LmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgIGluZm8uY2FjaGVkU3RydWN0dXJlLnNldExvY2F0aW9u
KHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvW2ldLnN0
cnVjdHVyZVRvQ29tcGFyZSkpOwogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IG1f
Y29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhtX21ldGhvZENhbGxDb21waWxhdGlvbkluZm9b
aV0ucHJvcGVydHlBY2Nlc3NJbmRleCkuY2FsbFJldHVybkxvY2F0aW9uOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gOTUyNjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsOCArMTQ2LDE2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgUHJvcGVydHlTdHViQ29tcGlsYXRp
b25JbmZvIHsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOwogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgaG90UGF0aEJlZ2luOworICAgICAgICAKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisg
ICAgICAgIFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbygpCisgICAgICAgICAgICA6IGJ5dGVj
b2RlSW5kZXgoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICB7
CisgICAgICAgIH0KKyNlbmRpZgogICAgIH07CiAKICAgICBzdHJ1Y3QgU3RydWN0dXJlU3R1YkNv
bXBpbGF0aW9uSW5mbyB7CkBAIC0xNTgsMTEgKzE2NiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICB9OwogCiAgICAgc3RydWN0IE1ldGhvZENhbGxDb21waWxhdGlvbkluZm8gewotICAgICAgICBN
ZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvKHVuc2lnbmVkIHByb3BlcnR5QWNjZXNzSW5kZXgpCi0g
ICAgICAgICAgICA6IHByb3BlcnR5QWNjZXNzSW5kZXgocHJvcGVydHlBY2Nlc3NJbmRleCkKKyAg
ICAgICAgTWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mbyh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1
bnNpZ25lZCBwcm9wZXJ0eUFjY2Vzc0luZGV4KQorICAgICAgICAgICAgOiBieXRlY29kZUluZGV4
KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICAsIHByb3BlcnR5QWNjZXNzSW5kZXgocHJvcGVy
dHlBY2Nlc3NJbmRleCkKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1
Y3R1cmVUb0NvbXBhcmU7CiAgICAgICAgIHVuc2lnbmVkIHByb3BlcnR5QWNjZXNzSW5kZXg7CiAg
ICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gOTUyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDgsNyArMTA4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbWV0aG9kX2NoZWNrKEluc3RydWN0aQog
ICAgIGN1cnJlbnRJbnN0cnVjdGlvbiArPSBPUENPREVfTEVOR1RIKG9wX21ldGhvZF9jaGVjayk7
CiAgICAgCiAgICAgLy8gRG8gdGhlIG1ldGhvZCBjaGVjayAtIGNoZWNrIHRoZSBvYmplY3QgJiBp
dHMgcHJvdG90eXBlJ3Mgc3RydWN0dXJlIGlubGluZSAodGhpcyBpcyB0aGUgY29tbW9uIGNhc2Up
LgotICAgIG1fbWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoTWV0aG9kQ2FsbENvbXBp
bGF0aW9uSW5mbyhtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNpemUoKSkpOworICAg
IG1fbWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoTWV0aG9kQ2FsbENvbXBpbGF0aW9u
SW5mbyhtX2J5dGVjb2RlT2Zmc2V0LCBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLnNp
emUoKSkpOwogICAgIE1ldGhvZENhbGxDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX21ldGhvZENh
bGxDb21waWxhdGlvbkluZm8ubGFzdCgpOwogICAgIAogICAgIGludCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwpAQCAtMzI1LDYgKzMyNSw3IEBAIHZvaWQgSklUOjpjb21w
aWxlR2V0QnlJZEhvdFBhdGgoKQogICAgIAogICAgIExhYmVsIGhvdFBhdGhCZWdpbih0aGlzKTsK
ICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmFwcGVuZChQcm9wZXJ0eVN0dWJD
b21waWxhdGlvbkluZm8oKSk7CisgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5s
YXN0KCkuYnl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgbV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mby5sYXN0KCkuaG90UGF0aEJlZ2luID0gaG90UGF0aEJlZ2luOwog
ICAgIAogICAgIERhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CkBAIC00MDEsNiArNDAy
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIAogICAg
IExhYmVsIGhvdFBhdGhCZWdpbih0aGlzKTsKICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRp
b25JbmZvLmFwcGVuZChQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oKSk7CisgICAgbV9wcm9w
ZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5sYXN0KCkuYnl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNv
ZGVPZmZzZXQ7CiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5sYXN0KCkuaG90
UGF0aEJlZ2luID0gaG90UGF0aEJlZ2luOwogICAgIAogICAgIC8vIEl0IGlzIGltcG9ydGFudCB0
aGF0IHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gcGxhbnRzIGEgMzJiaXQgaW1tZWRpYXRlLCBp
biBvcmRlciB0aGF0IGl0IGNhbiBiZSBwYXRjaGVkIG92ZXIuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gOTUyNjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX21ldGhvZF9j
aGVjayhJbnN0cnVjdGkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdU
MCk7CiAKICAgICAvLyBEbyB0aGUgbWV0aG9kIGNoZWNrIC0gY2hlY2sgdGhlIG9iamVjdCAmIGl0
cyBwcm90b3R5cGUncyBzdHJ1Y3R1cmUgaW5saW5lICh0aGlzIGlzIHRoZSBjb21tb24gY2FzZSku
Ci0gICAgbV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChNZXRob2RDYWxsQ29tcGls
YXRpb25JbmZvKG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uc2l6ZSgpKSk7CisgICAg
bV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChNZXRob2RDYWxsQ29tcGlsYXRpb25J
bmZvKG1fYnl0ZWNvZGVPZmZzZXQsIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uc2l6
ZSgpKSk7CiAgICAgTWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fbWV0aG9kQ2Fs
bENvbXBpbGF0aW9uSW5mby5sYXN0KCk7CiAKICAgICBKdW1wIG5vdENlbGwgPSBlbWl0SnVtcElm
Tm90SlNDZWxsKHJlZ1QwKTsKQEAgLTM2Niw2ICszNjYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdl
dEJ5SWRIb3RQYXRoKGludCBiYXNlCiAKICAgICBMYWJlbCBob3RQYXRoQmVnaW4odGhpcyk7CiAg
ICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQoUHJvcGVydHlTdHViQ29t
cGlsYXRpb25JbmZvKCkpOworICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8ubGFz
dCgpLmJ5dGVjb2RlSW5kZXggPSBtX2J5dGVjb2RlT2Zmc2V0OwogICAgIG1fcHJvcGVydHlBY2Nl
c3NDb21waWxhdGlvbkluZm8ubGFzdCgpLmhvdFBhdGhCZWdpbiA9IGhvdFBhdGhCZWdpbjsKIAog
ICAgIERhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CkBAIC00NDQsNiArNDQ1LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogCiAgICAgTGFiZWwgaG90
UGF0aEJlZ2luKHRoaXMpOwogICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBw
ZW5kKFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbygpKTsKKyAgICBtX3Byb3BlcnR5QWNjZXNz
Q29tcGlsYXRpb25JbmZvLmxhc3QoKS5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZU9mZnNldDsK
ICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmxhc3QoKS5ob3RQYXRoQmVnaW4g
PSBob3RQYXRoQmVnaW47CiAKICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgZm9sbG93
aW5nIGluc3RydWN0aW9uIHBsYW50cyBhIDMyYml0IGltbWVkaWF0ZSwgaW4gb3JkZXIgdGhhdCBp
dCBjYW4gYmUgcGF0Y2hlZCBvdmVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmgJKHJldmlzaW9uIDk1MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlND
ZWxsLCBtX3N0cnVjdHVyZSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQqIHN0
cnVjdHVyZUFkZHJlc3MoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJm1fc3RydWN0
dXJlOworICAgICAgICB9CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAgICAgICAgU3Ry
dWN0dXJlKiB1bnZhbGlkYXRlZFN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlLnVudmFs
aWRhdGVkR2V0KCk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107592</attachid>
            <date>2011-09-15 20:21:17 -0700</date>
            <delta_ts>2011-09-15 21:23:48 -0700</delta_ts>
            <desc>the patch - fix style</desc>
            <filename>checkmethod_patch_2.diff</filename>
            <type>text/plain</type>
            <size>41477</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUyNjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTUgQEAK
KzIwMTEtMDktMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IG9wdGltaXplIG1ldGhvZF9jaGVjaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgyMTUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE1ldGhvZENhbGxMaW5rSW5mbyBh
bmQgU3RydWN0dXJlU3R1YkluZm8gYXJlIG5vdyBzZWFyY2hhYmxlIGJ5CisgICAgICAgIGJ5dGVj
b2RlSW5kZXgsIHNvIHRoYXQgREZHOjpCeXRlQ29kZVBhcnNlciBjYW4gdXNlIHRoYXQgaW5mb3Jt
YXRpb24KKyAgICAgICAgdG8gZGV0ZXJtaW5lIGhvdyB0byBvcHRpbWl6ZSBHZXRNZXRob2QuCisg
ICAgICAgIAorICAgICAgICBBIG5ldyBub2RlIG9wIGhhcyBiZWVuIGFkZGVkIHRvIERGRzogQ2hl
Y2tNZXRob2QuIFRoaXMgaXMgYSB2YXJpYW50CisgICAgICAgIG9mIEdldE1ldGhvZCB0aGF0IGhh
cyBiZWVuIG9wdGltaXplZCBmb3IgdGhlIGNhc2UgdGhhdCBHZXRNZXRob2QKKyAgICAgICAgYWx3
YXlzIHRha2VzIHRoZSBmYXN0IHBhdGguIENoZWNrTWV0aG9kIHJlc3VsdHMgaW4gb25seSBhIHZl
cnkKKyAgICAgICAgc21hbGwgYW1vdW50IG9mIGNvZGUgKHR3byBsb2FkcyBhbmQgdHdvIGJyYW5j
aGVzIGluIHRoZSB3b3JzdCBjYXNlLAorICAgICAgICBvbmUgbG9hZCBhbmQgb25lIGJyYW5jaCBp
biB0aGUgYmVzdCBjYXNlKS4gQ2hlY2tNZXRob2QgYmVoYXZlcyBhcworICAgICAgICBpZiBpdCB3
ZXJlIGEgY29uc3RhbnQuICAKKyAgICAgICAgCisgICAgICAgIEludHJvZHVjZWQgdGhlIG5vdGlv
biB0aGF0IGEgREZHIG5vZGUgdGhhdCBpcyBub3QgSlNDb25zdGFudAorICAgICAgICBiZWhhdmVz
IGFzIGEgY29uc3RhbnQuIENoZWNrTWV0aG9kIHVzZXMgdGhpcyBmdW5jdGlvbmFsaXR5LgorICAg
ICAgICAKKyAgICAgICAgVGhpcyBpcyBhIDMlIHNwZWVkLXVwIG9uIEtyYWtlbiwgYW5kIGEgc21h
bGwgc3BlZWQtdXAgb24gVjguCisgICAgICAgIEFwcGVhcnMgdG8gYmUgbmV1dHJhbCBvbiBTdW5T
cGlkZXIuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6
Z2V0U3RydWN0dXJlU3R1YkluZm9CeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Z2V0TWV0
aG9kQ2FsbExpbmtJbmZvQnl0ZWNvZGVJbmRleCk6CisgICAgICAgICogYnl0ZWNvZGUvUHJlZGlj
dGVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OnByZWRpY3Rpb25Gcm9tQ2VsbCk6CisgICAgICAg
IChKU0M6OnByZWRpY3Rpb25Gcm9tVmFsdWUpOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3Rl
ZFR5cGUuaDoKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAg
ICAqIGRmZy9ERkdBbGlhc1RyYWNrZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBbGlhc1RyYWNr
ZXI6OnJlY29yZEdldE1ldGhvZCk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Omdl
dE1ldGhvZENoZWNrUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmdldFBy
ZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0NvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6aXNKU0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6dmFsdWVPZkpTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1
ZU9mSW50MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZOdW1i
ZXJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZCb29sZWFuQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1ZU9mSlNDb25zdGFudE5vZGUp
OgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpmaWxsSW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29kZUdlbmVyYXRvcjo6ZmlsbERvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29k
ZUdlbmVyYXRvcjo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5l
cmF0b3I6OmlzS25vd25Ob3RJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2Vu
ZXJhdG9yOjppc0tub3duTm90TnVtYmVyKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVy
YXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNpbGVudFNwaWxs
RlBSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpzaWxlbnRGaWxsR1BS
KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpzaWxlbnRGaWxsRlBSKToK
KyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpmaWxsTnVtZXJpY1RvRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6ZmlsbEludDMyVG9JbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21w
aWxlcjo6ZmlsbFRvSlMpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6aGFzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0lk
ZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc01ldGhvZENoZWNrRGF0YSk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bWV0aG9kQ2hlY2tEYXRhSW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OnZhbHVlT2ZKU0NvbnN0YW50KToKKyAgICAgICAgKiBkZmcvREZH
UHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRl
Tm9kZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4pOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBqaXQv
SklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICog
aml0L0pJVC5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm86OlBy
b3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgIChKU0M6Ok1ldGhvZENhbGxDb21w
aWxhdGlvbkluZm86Ok1ldGhvZENhbGxDb21waWxhdGlvbkluZm8pOgorICAgICAgICAqIGppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tZXRob2Rf
Y2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0aCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAqIGppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21ldGhvZF9j
aGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgICogcnVudGltZS9KU0Nl
bGwuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpKU0NlbGw6OnN0cnVjdHVyZUFkZHJlc3MpOgor
CiAyMDExLTA5LTE1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAK
ICAgICAgICAgVW56aXAgaW5pdGlhbGl6YXRpb24gbGlzdHMgYW5kIGNvbnN0cnVjdG9ycyBpbiBK
U0NlbGwgaGllcmFyY2h5ICg3LzcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NTI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDYgKzE1Myw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgc2VlbiA9IHRydWU7CiAgICAgICAgIH0KIAor
ICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OwogICAgICAgICBDb2RlTG9jYXRpb25DYWxs
IGNhbGxSZXR1cm5Mb2NhdGlvbjsKICAgICAgICAgSklUV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
Y2FjaGVkU3RydWN0dXJlOwogICAgICAgICBKSVRXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBjYWNo
ZWRQcm90b3R5cGVTdHJ1Y3R1cmU7CkBAIC0xOTcsNiArMTk4LDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICByZXR1cm4gc3RydWN0dXJlU3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5l
eGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIAorICAgIGlubGluZSB1bnNpZ25lZCBnZXRTdHJ1
Y3R1cmVTdHViSW5mb0J5dGVjb2RlSW5kZXgoU3RydWN0dXJlU3R1YkluZm8qIHN0cnVjdHVyZVN0
dWJJbmZvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4OworICAgIH0KKwogICAgIGlubGluZSB2b2lkKiBnZXRDYWxsTGlua0luZm9SZXR1cm5M
b2NhdGlvbihDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKICAgICB7CiAgICAgICAgIHJldHVy
biBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOwpA
QCAtMjA3LDYgKzIxMywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1ldGhv
ZENhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAg
ICAgfQogCisgICAgaW5saW5lIHVuc2lnbmVkIGdldE1ldGhvZENhbGxMaW5rSW5mb0J5dGVjb2Rl
SW5kZXgoTWV0aG9kQ2FsbExpbmtJbmZvKiBtZXRob2RDYWxsTGlua0luZm8pCisgICAgeworICAg
ICAgICByZXR1cm4gbWV0aG9kQ2FsbExpbmtJbmZvLT5ieXRlY29kZUluZGV4OworICAgIH0KKwog
ICAgIGlubGluZSB1bnNpZ25lZCBnZXRDYWxsUmV0dXJuT2Zmc2V0KENhbGxSZXR1cm5PZmZzZXRU
b0J5dGVjb2RlT2Zmc2V0KiBwYykKICAgICB7CiAgICAgICAgIHJldHVybiBwYy0+Y2FsbFJldHVy
bk9mZnNldDsKQEAgLTI3MSw2ICsyODIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICByZXR1cm4gKihiaW5hcnlTZWFyY2g8U3RydWN0dXJlU3R1YkluZm8sIHZvaWQqLCBnZXRTdHJ1
Y3R1cmVTdHViSW5mb1JldHVybkxvY2F0aW9uPihtX3N0cnVjdHVyZVN0dWJJbmZvcy5iZWdpbigp
LCBtX3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOwog
ICAgICAgICB9CiAKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIGdldFN0dWJJbmZvKHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFy
eVNlYXJjaDxTdHJ1Y3R1cmVTdHViSW5mbywgdW5zaWduZWQsIGdldFN0cnVjdHVyZVN0dWJJbmZv
Qnl0ZWNvZGVJbmRleD4obV9zdHJ1Y3R1cmVTdHViSW5mb3MuYmVnaW4oKSwgbV9zdHJ1Y3R1cmVT
dHViSW5mb3Muc2l6ZSgpLCBieXRlY29kZUluZGV4KSk7CisgICAgICAgIH0KKwogICAgICAgICBD
YWxsTGlua0luZm8mIGdldENhbGxMaW5rSW5mbyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxDYWxsTGlu
a0luZm8sIHZvaWQqLCBnZXRDYWxsTGlua0luZm9SZXR1cm5Mb2NhdGlvbj4obV9jYWxsTGlua0lu
Zm9zLmJlZ2luKCksIG1fY2FsbExpbmtJbmZvcy5zaXplKCksIHJldHVybkFkZHJlc3MudmFsdWUo
KSkpOwpAQCAtMjgxLDYgKzI5NywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiAqKGJpbmFyeVNlYXJjaDxNZXRob2RDYWxsTGlua0luZm8sIHZvaWQqLCBnZXRNZXRob2RD
YWxsTGlua0luZm9SZXR1cm5Mb2NhdGlvbj4obV9tZXRob2RDYWxsTGlua0luZm9zLmJlZ2luKCks
IG1fbWV0aG9kQ2FsbExpbmtJbmZvcy5zaXplKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOwog
ICAgICAgICB9CiAKKyAgICAgICAgTWV0aG9kQ2FsbExpbmtJbmZvJiBnZXRNZXRob2RDYWxsTGlu
a0luZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICooYmluYXJ5U2VhcmNoPE1ldGhvZENhbGxMaW5rSW5mbywgdW5zaWduZWQsIGdldE1ldGhv
ZENhbGxMaW5rSW5mb0J5dGVjb2RlSW5kZXg+KG1fbWV0aG9kQ2FsbExpbmtJbmZvcy5iZWdpbigp
LCBtX21ldGhvZENhbGxMaW5rSW5mb3Muc2l6ZSgpLCBieXRlY29kZUluZGV4KSk7CisgICAgICAg
IH0KKwogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9yYXJlRGF0YSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5j
cHAJKHJldmlzaW9uIDk1MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1By
ZWRpY3RlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwyOSArODIsMzMgQEAgY29uc3Qg
Y2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZAogfQogI2VuZGlmCiAKK1ByZWRpY3Rl
ZFR5cGUgcHJlZGljdGlvbkZyb21DZWxsKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mbyA9IGNlbGwtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKTsKKyAgICAK
KyAgICBpZiAoY2xhc3NJbmZvID09ICZKU0ZpbmFsT2JqZWN0OjpzX2luZm8pCisgICAgICAgIHJl
dHVybiBQcmVkaWN0RmluYWxPYmplY3Q7CisgICAgCisgICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNB
cnJheTo6c19pbmZvKQorICAgICAgICByZXR1cm4gUHJlZGljdEFycmF5OworICAgIAorICAgIGlm
IChjbGFzc0luZm8gPT0gJkpTU3RyaW5nOjpzX2luZm8pCisgICAgICAgIHJldHVybiBQcmVkaWN0
U3RyaW5nOworICAgIAorICAgIGlmIChjbGFzc0luZm8tPmlzU3ViQ2xhc3NPZigmSlNPYmplY3Q6
OnNfaW5mbykpCisgICAgICAgIHJldHVybiBQcmVkaWN0T2JqZWN0T3RoZXI7CisgICAgCisgICAg
cmV0dXJuIFByZWRpY3RDZWxsT3RoZXI7Cit9CisKIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZy
b21WYWx1ZShKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCiAgICAg
ICAgIHJldHVybiBQcmVkaWN0SW50MzI7CiAgICAgaWYgKHZhbHVlLmlzRG91YmxlKCkpCiAgICAg
ICAgIHJldHVybiBQcmVkaWN0RG91YmxlOwotICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgewotICAg
ICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUoKS0+Y2xhc3NJbmZvKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY2xhc3NJbmZvID09ICZK
U0ZpbmFsT2JqZWN0OjpzX2luZm8pCi0gICAgICAgICAgICByZXR1cm4gUHJlZGljdEZpbmFsT2Jq
ZWN0OwotICAgICAgICAKLSAgICAgICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNBcnJheTo6c19pbmZv
KQotICAgICAgICAgICAgcmV0dXJuIFByZWRpY3RBcnJheTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChjbGFzc0luZm8gPT0gJkpTU3RyaW5nOjpzX2luZm8pCi0gICAgICAgICAgICByZXR1cm4gUHJl
ZGljdFN0cmluZzsKLSAgICAgICAgCi0gICAgICAgIGlmIChjbGFzc0luZm8tPmlzU3ViQ2xhc3NP
ZigmSlNPYmplY3Q6OnNfaW5mbykpCi0gICAgICAgICAgICByZXR1cm4gUHJlZGljdE9iamVjdE90
aGVyOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFByZWRpY3RDZWxsT3RoZXI7Ci0gICAgfQor
ICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIHByZWRpY3Rpb25Gcm9tQ2Vs
bCh2YWx1ZS5hc0NlbGwoKSk7CiAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQogICAgICAgICBy
ZXR1cm4gUHJlZGljdEJvb2xlYW47CiAgICAgcmV0dXJuIFByZWRpY3RPdGhlcjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAkocmV2aXNp
b24gOTUyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDcgQEAgaW5saW5lIFByZWRpY3RlZFR5
cGUgbWFrZVByZWRpY3Rpb24oUHJlZAogICAgIHJldHVybiB0eXBlIHwgKHNvdXJjZSA9PSBTdHJv
bmdQcmVkaWN0aW9uID8gU3Ryb25nUHJlZGljdGlvblRhZyA6IDApOwogfQogCitQcmVkaWN0ZWRU
eXBlIHByZWRpY3Rpb25Gcm9tQ2VsbChKU0NlbGwqKTsKIFByZWRpY3RlZFR5cGUgcHJlZGljdGlv
bkZyb21WYWx1ZShKU1ZhbHVlKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2
aXNpb24gOTUyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB7CiAgICAgICAgICAgICBzZWVuID0gdHJ1ZTsKICAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleDsKIAogICAgICAgICBpbnQ4X3Qg
YWNjZXNzVHlwZTsKICAgICAgICAgaW50OF90IHNlZW47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmgJKHJldmlzaW9uIDk1MjYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
ODUsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCByZWNvcmRHZXRNZXRob2QoTm9k
ZUluZGV4IGdldE1ldGhvZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoZ2V0TWV0aG9k
LCBtX2dyYXBoW2dldE1ldGhvZF0ub3AgPT0gR2V0TWV0aG9kKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChnZXRNZXRob2QsIG1fZ3JhcGhbZ2V0TWV0aG9kXS5vcCA9PSBHZXRNZXRob2QgfHwgbV9n
cmFwaFtnZXRNZXRob2RdLm9wID09IENoZWNrTWV0aG9kKTsKICAgICAgICAgbV9jYW5kaWRhdGVB
bGlhc0dldEJ5VmFsID0gTm9Ob2RlOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk1MjYyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkyMCwxMSArOTIwLDMzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBn
ZXQoZ2V0SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXIgPSBnZXRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBnZXRNZXRob2QgPSBhZGRUb0dyYXBoKEdldE1ldGhvZCwgT3BJ
bmZvKGlkZW50aWZpZXIpLCBPcEluZm8oUHJlZGljdE5vbmUpLCBiYXNlKTsKLSAgICAgICAgICAg
IHNldChnZXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldE1ldGhvZCk7Ci0gICAgICAgICAg
ICBzdHJvbmdseVByZWRpY3QoZ2V0TWV0aG9kKTsKLSAgICAgICAgICAgIGFsaWFzZXMucmVjb3Jk
R2V0TWV0aG9kKGdldE1ldGhvZCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBD
aGVjayBpZiB0aGUgbWV0aG9kX2NoZWNrIHdhcyBtb25vbW9ycGhpYy4gSWYgc28sIGVtaXQgYSBD
aGVja1hZWk1ldGhvZAorICAgICAgICAgICAgLy8gbm9kZSwgd2hpY2ggaXMgYSBsb3QgbW9yZSBl
ZmZpY2llbnQuCisgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBtX3By
b2ZpbGVkQmxvY2stPmdldFN0dWJJbmZvKG1fY3VycmVudEluZGV4KTsKKyAgICAgICAgICAgIE1l
dGhvZENhbGxMaW5rSW5mbyYgbWV0aG9kQ2FsbCA9IG1fcHJvZmlsZWRCbG9jay0+Z2V0TWV0aG9k
Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKG1ldGhvZENhbGwuc2VlbiAmJiAhIW1ldGhvZENhbGwuY2FjaGVkU3RydWN0dXJlICYmICFz
dHViSW5mby5zZWVuKSB7CisgICAgICAgICAgICAgICAgLy8gSXQncyBtb25vbW9ycGhpYyBhcyBm
YXIgYXMgd2UgY2FuIHRlbGwsIHNpbmNlIHRoZSBtZXRob2RfY2hlY2sgd2FzIGxpbmtlZAorICAg
ICAgICAgICAgICAgIC8vIGJ1dCB0aGUgc2xvdyBwYXRoIChpLmUuIHRoZSBub3JtYWwgZ2V0X2J5
X2lkKSBuZXZlciBmaXJlZC4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCBjaGVja01ldGhvZCA9IGFkZFRvR3JhcGgoQ2hlY2tNZXRob2QsIE9wSW5mbyhpZGVudGlmaWVy
KSwgT3BJbmZvKG1fZ3JhcGgubV9tZXRob2RDaGVja0RhdGEuc2l6ZSgpKSwgYmFzZSk7CisgICAg
ICAgICAgICAgICAgc2V0KGdldEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgY2hlY2tNZXRob2Qp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE1ldGhvZENoZWNrRGF0YSBtZXRo
b2RDaGVja0RhdGE7CisgICAgICAgICAgICAgICAgbWV0aG9kQ2hlY2tEYXRhLnN0cnVjdHVyZSA9
IG1ldGhvZENhbGwuY2FjaGVkU3RydWN0dXJlLmdldCgpOworICAgICAgICAgICAgICAgIG1ldGhv
ZENoZWNrRGF0YS5wcm90b3R5cGVTdHJ1Y3R1cmUgPSBtZXRob2RDYWxsLmNhY2hlZFByb3RvdHlw
ZVN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAgICAgICBtZXRob2RDaGVja0RhdGEuZnVuY3Rp
b24gPSBtZXRob2RDYWxsLmNhY2hlZEZ1bmN0aW9uLmdldCgpOworICAgICAgICAgICAgICAgIG1l
dGhvZENoZWNrRGF0YS5wcm90b3R5cGUgPSBtZXRob2RDYWxsLmNhY2hlZFByb3RvdHlwZS5nZXQo
KTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fbWV0aG9kQ2hlY2tEYXRhLmFwcGVuZChtZXRo
b2RDaGVja0RhdGEpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFsaWFzZXMu
cmVjb3JkR2V0TWV0aG9kKGNoZWNrTWV0aG9kKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgTm9kZUluZGV4IGdldE1ldGhvZCA9IGFkZFRvR3JhcGgoR2V0TWV0aG9kLCBP
cEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhQcmVkaWN0Tm9uZSksIGJhc2UpOworICAgICAgICAg
ICAgICAgIHNldChnZXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldE1ldGhvZCk7CisgICAg
ICAgICAgICAgICAgc3Ryb25nbHlQcmVkaWN0KGdldE1ldGhvZCk7CisgICAgICAgICAgICAgICAg
YWxpYXNlcy5yZWNvcmRHZXRNZXRob2QoZ2V0TWV0aG9kKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gT1BDT0RFX0xFTkdUSChvcF9t
ZXRob2RfY2hlY2spICsgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpOwogICAgICAgICAgICAg
Y29udGludWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2
aXNpb24gOTUyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUlu
ZGV4IG5vZGVJbmRleCwgQ28KICAgICBpZiAob3AgPT0gSlNDb25zdGFudCkgewogICAgICAgICBw
cmludGYoIiVzJCV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS5jb25zdGFudE51bWJl
cigpKTsKICAgICAgICAgaWYgKGNvZGVCbG9jaykgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG5vZGUudmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2ssIG5vZGVJbmRleCk7CiAgICAg
ICAgICAgICBwcmludGYoIiA9ICVzIiwgdmFsdWUuZGVzY3JpcHRpb24oKSk7CiAgICAgICAgIH0K
ICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CkBAIC0xNDMsMTAgKzE0MywxNCBAQCB2b2lkIEdy
YXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgaWYgKCFza2lwcGVkKSB7CiAg
ICAgICAgIGlmIChub2RlLmhhc0xvY2FsKCkpCiAgICAgICAgICAgICBwcmludGYoIiAgcHJlZGlj
dGluZyAlcyIsIHByZWRpY3Rpb25Ub1N0cmluZyhnZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSkp
KTsKLSAgICAgICAgaWYgKG5vZGUuaGFzVmFyTnVtYmVyKCkpCisgICAgICAgIGVsc2UgaWYgKG5v
ZGUuaGFzVmFyTnVtYmVyKCkpCiAgICAgICAgICAgICBwcmludGYoIiAgcHJlZGljdGluZyAlcyIs
IHByZWRpY3Rpb25Ub1N0cmluZyhnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGUudmFyTnVtYmVy
KCkpKSk7Ci0gICAgICAgIGlmIChub2RlLmhhc1ByZWRpY3Rpb24oKSkKKyAgICAgICAgZWxzZSBp
ZiAobm9kZS5oYXNQcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICBwcmludGYoIiAgcHJlZGljdGlu
ZyAlcyIsIHByZWRpY3Rpb25Ub1N0cmluZyhub2RlLmdldFByZWRpY3Rpb24oKSkpOworICAgICAg
ICBlbHNlIGlmIChub2RlLmhhc01ldGhvZENoZWNrRGF0YSgpKSB7CisgICAgICAgICAgICBNZXRo
b2RDaGVja0RhdGEmIG1ldGhvZENoZWNrRGF0YSA9IG1fbWV0aG9kQ2hlY2tEYXRhW25vZGUubWV0
aG9kQ2hlY2tEYXRhSW5kZXgoKV07CisgICAgICAgICAgICBwcmludGYoIiAgcHJlZGljdGluZyBm
dW5jdGlvbiAlcCIsIG1ldGhvZENoZWNrRGF0YS5mdW5jdGlvbik7CisgICAgICAgIH0KICAgICB9
CiAgICAgCiAgICAgcHJpbnRmKCJcbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAkocmV2aXNpb24gOTUyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDE1IEBAIHN0cnVjdCBWYXJpYWJs
ZVJlY29yZCB7CiAgICAgTm9kZUluZGV4IHZhbHVlOwogfTsKIAorc3RydWN0IE1ldGhvZENoZWNr
RGF0YSB7CisgICAgLy8gSXQgaXMgc2FmZSB0byByZWZlciB0byB0aGVzZSBkaXJlY3RseSBiZWNh
dXNlIHRoZXkgYXJlIHNoYWRvd2VkIGJ5CisgICAgLy8gdGhlIG9sZCBKSVQncyBDb2RlQmxvY2sn
cyBNZXRob2RDYWxsTGlua0luZm8uCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisgICAgU3Ry
dWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmU7CisgICAgSlNPYmplY3QqIGZ1bmN0aW9uOworICAg
IEpTT2JqZWN0KiBwcm90b3R5cGU7Cit9OworCiB0eXBlZGVmIFZlY3RvciA8QmxvY2tJbmRleCwg
Mj4gUHJlZGVjZXNzb3JMaXN0OwogCiBzdHJ1Y3QgQmFzaWNCbG9jayB7CkBAIC0xNzEsNiArMTgw
LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMuZ2V0R2xvYmFsVmFy
UHJlZGljdGlvbih2YXJOdW1iZXIpOwogICAgIH0KICAgICAKKyAgICBQcmVkaWN0ZWRUeXBlIGdl
dE1ldGhvZENoZWNrUHJlZGljdGlvbihOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb25Gcm9tQ2VsbChtX21ldGhvZENoZWNrRGF0YVtub2Rl
Lm1ldGhvZENoZWNrRGF0YUluZGV4KCldLmZ1bmN0aW9uKSwgU3Ryb25nUHJlZGljdGlvbik7Cisg
ICAgfQorICAgIAogICAgIFByZWRpY3RlZFR5cGUgZ2V0UHJlZGljdGlvbihOb2RlJiBub2RlKQog
ICAgIHsKICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZub2RlOwpAQCAtMTkyLDYgKzIwNiw4IEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKICAg
ICAgICAgICAgIHJldHVybiBub2RlUHRyLT5nZXRQcmVkaWN0aW9uKCk7CisgICAgICAgIGNhc2Ug
Q2hlY2tNZXRob2Q6CisgICAgICAgICAgICByZXR1cm4gZ2V0TWV0aG9kQ2hlY2tQcmVkaWN0aW9u
KCpub2RlUHRyKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBQcmVkaWN0
Tm9uZTsKICAgICAgICAgfQpAQCAtMjAwLDExICsyMTYsMTEgQEAgcHVibGljOgogICAgIC8vIEhl
bHBlciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCiAgICAgYm9vbCBpc0Nv
bnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9k
ZUluZGV4KS5pc0NvbnN0YW50KCk7CisgICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmhhc0Nv
bnN0YW50KCk7CiAgICAgfQogICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5k
ZXgpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS5pc0NvbnN0YW50KCk7Cisg
ICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLmhhc0NvbnN0YW50KCk7CiAgICAgfQogICAgIGJv
b2wgaXNJbnQzMkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUlu
ZGV4KQogICAgIHsKQEAgLTIyNSwxOSArMjQxLDIxIEBAIHB1YmxpYzoKICAgICAvLyBIZWxwZXIg
bWV0aG9kcyBnZXQgY29uc3RhbnQgdmFsdWVzIGZyb20gbm9kZXMuCiAgICAgSlNWYWx1ZSB2YWx1
ZU9mSlNDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRleCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhdChub2RlSW5kZXgpLnZhbHVlT2ZKU0NvbnN0YW50KGNv
ZGVCbG9jayk7CisgICAgICAgIGlmIChhdChub2RlSW5kZXgpLmhhc01ldGhvZENoZWNrRGF0YSgp
KQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUobV9tZXRob2RDaGVja0RhdGFbYXQobm9kZUlu
ZGV4KS5tZXRob2RDaGVja0RhdGFJbmRleCgpXS5mdW5jdGlvbik7CisgICAgICAgIHJldHVybiB2
YWx1ZU9mSlNDb25zdGFudE5vZGUoY29kZUJsb2NrLCBub2RlSW5kZXgpOwogICAgIH0KICAgICBp
bnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5k
ZXggbm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkudmFsdWVP
ZkludDMyQ29uc3RhbnQoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0
YW50Tm9kZShjb2RlQmxvY2ssIG5vZGVJbmRleCkuYXNJbnQzMigpOwogICAgIH0KICAgICBkb3Vi
bGUgdmFsdWVPZk51bWJlckNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXgg
bm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG5vZGVJbmRleCkudmFsdWVPZk51
bWJlckNvbnN0YW50KGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFu
dE5vZGUoY29kZUJsb2NrLCBub2RlSW5kZXgpLnVuY2hlY2tlZEdldE51bWJlcigpOwogICAgIH0K
ICAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5v
ZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KS52
YWx1ZU9mQm9vbGVhbkNvbnN0YW50KGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybiB2YWx1ZU9m
SlNDb25zdGFudE5vZGUoY29kZUJsb2NrLCBub2RlSW5kZXgpLmdldEJvb2xlYW4oKTsKICAgICB9
CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0yNDgsNyArMjY2LDEzIEBAIHB1YmxpYzoKIAogICAgIFZl
Y3RvcjwgT3duUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPE5vZGVJ
bmRleCwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CisgICAgVmVjdG9yPE1ldGhvZENoZWNrRGF0YT4g
bV9tZXRob2RDaGVja0RhdGE7CiBwcml2YXRlOgorICAgIAorICAgIEpTVmFsdWUgdmFsdWVPZkpT
Q29uc3RhbnROb2RlKENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleCArIGF0KG5vZGVJbmRleCkuY29uc3RhbnROdW1iZXIoKSkuZ2V0
KCk7CisgICAgfQogCiAgICAgLy8gV2hlbiBhIG5vZGUncyByZWZDb3VudCBnb2VzIGZyb20gMCB0
byAxLCBpdCBtdXN0IChsb2dpY2FsbHkpIHJlY3Vyc2l2ZWx5IHJlZiBhbGwgb2YgaXRzIGNoaWxk
cmVuLCBhbmQgdmljZSB2ZXJzYS4KICAgICB2b2lkIHJlZkNoaWxkcmVuKE5vZGVJbmRleCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDk1MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBHUFJS
ZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbEludGVnZXIoTm9kCiAgICAgaWYgKGluZm8ucmVnaXN0
ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewogICAgICAgICBHUFJSZWcgZ3ByID0gYWxs
b2NhdGUoKTsKIAotICAgICAgICBpZiAobm9kZS5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYg
KG5vZGUuaGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgIGlmIChpc0lu
dDMyQ29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIp
OwpAQCAtMTI0LDcgKzEyNCw3IEBAIEZQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91Ymxl
KE5vZGUKICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7
CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLmlz
Q29uc3RhbnQoKSkgeworICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CiAgICAgICAg
ICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogc2hvdWxkIG5vdCBiZSByZWFjaGFibGU/CiAgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4
KSksIGdwcik7CkBAIC0yNDksNyArMjQ5LDcgQEAgR1BSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZp
bGxKU1ZhbHVlKE5vZAogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKICAgICAgICAgR1BSUmVn
IGdwciA9IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgaWYgKG5vZGUuaXNDb25zdGFudCgpKSB7Cisg
ICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgIGlmIChpc0ludDMy
Q29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Z3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFs
dWUgPSBqc051bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKQEAgLTQwNCw3
ICs0MDQsNyBAQCBib29sIEpJVENvZGVHZW5lcmF0b3I6OmlzS25vd25Ob3RJbnRlZ2VyCiAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07
CiAgICAgCiAgICAgcmV0dXJuIGluZm8uaXNKU0RvdWJsZSgpIHx8IGluZm8uaXNKU0NlbGwoKSB8
fCBpbmZvLmlzSlNCb29sZWFuKCkKLSAgICAgICAgfHwgKG5vZGUuaXNDb25zdGFudCgpICYmICF2
YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlzSW50MzIoKSk7CisgICAgICAgIHx8IChub2Rl
Lmhhc0NvbnN0YW50KCkgJiYgIXZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNJbnQzMigp
KTsKIH0KIAogYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjppc0tub3duTm90TnVtYmVyKE5vZGVJbmRl
eCBub2RlSW5kZXgpCkBAIC00MTQsNyArNDE0LDcgQEAgYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjpp
c0tub3duTm90TnVtYmVyKAogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9u
SW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogICAgIAogICAgIHJldHVybiAoIWluZm8uaXNKU0RvdWJs
ZSgpICYmICFpbmZvLmlzSlNJbnRlZ2VyKCkgJiYgIWluZm8uaXNVbmtub3duSlMoKSkKLSAgICAg
ICAgfHwgKG5vZGUuaXNDb25zdGFudCgpICYmICFpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkp
OworICAgICAgICB8fCAobm9kZS5oYXNDb25zdGFudCgpICYmICFpc051bWJlckNvbnN0YW50KG5v
ZGVJbmRleCkpOwogfQogCiBib29sIEpJVENvZGVHZW5lcmF0b3I6OmlzS25vd25Cb29sZWFuKE5v
ZGVJbmRleCBub2RlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gOTUyNjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjM4
LDEyICsyMzgsMTIgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBp
ZiAoIWluZm8ubmVlZHNTcGlsbCgpKSB7CiAgICAgICAgICAgICAvLyBpdCdzIGVpdGhlciBhIGNv
bnN0YW50IG9yIGl0J3MgYWxyZWFkeSBiZWVuIHNwaWxsZWQKLSAgICAgICAgICAgIEFTU0VSVCht
X2ppdC5ncmFwaCgpW2luZm8ubm9kZUluZGV4KCldLmlzQ29uc3RhbnQoKSB8fCBpbmZvLnNwaWxs
Rm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpOworICAgICAgICAgICAgQVNTRVJUKG1faml0Lmdy
YXBoKClbaW5mby5ub2RlSW5kZXgoKV0uaGFzQ29uc3RhbnQoKSB8fCBpbmZvLnNwaWxsRm9ybWF0
KCkgIT0gRGF0YUZvcm1hdE5vbmUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICAvLyBpdCdzIG5laXRoZXIgYSBjb25zdGFudCBub3IgaGFzIGl0IGJl
ZW4gc3BpbGxlZC4KLSAgICAgICAgQVNTRVJUKCFtX2ppdC5ncmFwaCgpW2luZm8ubm9kZUluZGV4
KCldLmlzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVCghbV9qaXQuZ3JhcGgoKVtpbmZvLm5v
ZGVJbmRleCgpXS5oYXNDb25zdGFudCgpKTsKICAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSk7CiAKICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUoaW5m
by5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwpAQCAtMjYyLDcgKzI2
Miw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGlu
Zm8ucmVnaXN0ZXJGb3JtYXQoKTsKIAogICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0
YUZvcm1hdEludGVnZXIpIHsKLSAgICAgICAgICAgIGlmIChub2RlLmlzQ29uc3RhbnQoKSkgewor
ICAgICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgICAgIEFT
U0VSVChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSwgaW5mby5ncHIoKSk7
CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTI3MCw3ICsyNzAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobm9kZS5pc0NvbnN0YW50
KCkpCisgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICBtX2ppdC5t
b3ZlKHZhbHVlT2ZKU0NvbnN0YW50QXNJbW1QdHIobm9kZUluZGV4KSwgaW5mby5ncHIoKSk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZv
cm1hdEpTIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsKTsKQEAgLTI4Nyw3ICsy
ODcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25v
ZGVJbmRleF07CiAgICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZv
cm1hdERvdWJsZSk7CiAKLSAgICAgICAgaWYgKG5vZGUuaXNDb25zdGFudCgpKSB7CisgICAgICAg
IGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpc051bWJlckNv
bnN0YW50KG5vZGVJbmRleCkpOwogICAgICAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6
SW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRl
eCkpKSwgY2FuVHJhbXBsZSk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUoY2Fu
VHJhbXBsZSwgaW5mby5mcHIoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTUyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMs
NyBAQCB2b2lkIEpJVENvbXBpbGVyOjpmaWxsTnVtZXJpY1RvRG91YmxlKE5vCiB7CiAgICAgTm9k
ZSYgbm9kZSA9IGdyYXBoKClbbm9kZUluZGV4XTsKIAotICAgIGlmIChub2RlLmlzQ29uc3RhbnQo
KSkgeworICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgQVNTRVJUKGlzTnVt
YmVyQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgIG1vdmUoTWFjcm9Bc3NlbWJsZXI6Oklt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldERvdWJsZVRvSW50cHRyKHZh
bHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSkpLCB0ZW1wb3JhcnkpOwogICAgICAgICBt
b3ZlUHRyVG9Eb3VibGUodGVtcG9yYXJ5LCBmcHIpOwpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpmaWxsSW50MzJUb0ludGVnZXIoTm9kCiB7CiAgICAgTm9kZSYgbm9kZSA9IGdy
YXBoKClbbm9kZUluZGV4XTsKIAotICAgIGlmIChub2RlLmlzQ29uc3RhbnQoKSkgeworICAgIGlm
IChub2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChu
b2RlSW5kZXgpKTsKICAgICAgICAgbW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZklu
dDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGdwcik7CiAgICAgfSBlbHNlIHsKQEAgLTgxLDcgKzgx
LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6ZmlsbFRvSlMoTm9kZUluZGV4IG5vZAogewogICAgIE5v
ZGUmIG5vZGUgPSBncmFwaCgpW25vZGVJbmRleF07CiAKLSAgICBpZiAobm9kZS5pc0NvbnN0YW50
KCkpIHsKKyAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgIGlmIChpc0ludDMy
Q29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNO
dW1iZXIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICBtb3Zl
KE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NTI2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzEsNiArMTcxLDcgQEAgcHJpdmF0ZToKICAgICBtYWNybyhQdXRCeUlkLCBOb2RlTXVzdEdlbmVy
YXRlKSBcCiAgICAgbWFjcm8oUHV0QnlJZERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAg
IG1hY3JvKEdldE1ldGhvZCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAg
IG1hY3JvKENoZWNrTWV0aG9kLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgbWFjcm8oR2V0R2xvYmFsVmFyLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oUHV0R2xvYmFsVmFyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXApAQCAt
Mjk3LDYgKzI5OCwxMSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICByZXR1cm4gb3Ag
PT0gSlNDb25zdGFudDsKICAgICB9CisgICAgCisgICAgYm9vbCBoYXNDb25zdGFudCgpCisgICAg
eworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpIHx8IGhhc01ldGhvZENoZWNrRGF0YSgpOwor
ICAgIH0KIAogICAgIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKCkKICAgICB7CkBAIC0zMDQsMTEg
KzMxMCw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvOwogICAgIH0K
ICAgICAKLSAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2Nr
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCArIGNvbnN0YW50TnVtYmVyKCkpLmdldCgpOwotICAgIH0K
LSAgICAKICAgICBib29sIGlzSW50MzJDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAg
ICB7CiAgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQoY29k
ZUJsb2NrKS5pc0ludDMyKCk7CkBAIC0zMzQsMjQgKzMzNSw2IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2sp
LmlzQm9vbGVhbigpOwogICAgIH0KICAgICAKLSAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0
YW50KENvZGVCbG9jayogY29kZUJsb2NrKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSW50MzJD
b25zdGFudChjb2RlQmxvY2spKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KGNv
ZGVCbG9jaykuYXNJbnQzMigpOwotICAgIH0KLSAgICAKLSAgICBkb3VibGUgdmFsdWVPZk51bWJl
ckNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlz
TnVtYmVyQ29uc3RhbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25z
dGFudChjb2RlQmxvY2spLnVuY2hlY2tlZEdldE51bWJlcigpOwotICAgIH0KLSAgICAKLSAgICBi
b29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgewot
ICAgICAgICBBU1NFUlQoaXNCb29sZWFuQ29uc3RhbnQoY29kZUJsb2NrKSk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2spLmdldEJvb2xlYW4oKTsKLSAgICB9Ci0K
ICAgICBib29sIGhhc0xvY2FsKCkKICAgICB7CiAgICAgICAgIHJldHVybiBvcCA9PSBHZXRMb2Nh
bCB8fCBvcCA9PSBTZXRMb2NhbDsKQEAgLTM2NCwxMiArMzQ3LDIxIEBAIHN0cnVjdCBOb2RlIHsK
ICAgICB9CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgLy8gSWYgd2Ugd2FudCB0byB1c2Ug
dGhpcyBpbiBwcm9kdWN0aW9uIGNvZGUsIHNob3VsZCBtYWtlIGl0IGZhc3RlciAtCi0gICAgLy8g
ZS5nLiBtYWtlIGhhc0lkZW50aWZpZXIgYSBmbGFnIGluIHRoZSBiaXRmaWVsZC4KICAgICBib29s
IGhhc0lkZW50aWZpZXIoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wID09IEdldEJ5SWQgfHwg
b3AgPT0gUHV0QnlJZCB8fCBvcCA9PSBQdXRCeUlkRGlyZWN0IHx8IG9wID09IEdldE1ldGhvZAot
ICAgICAgICAgICAgfHwgb3AgPT0gUmVzb2x2ZSB8fCBvcCA9PSBSZXNvbHZlQmFzZSB8fCBvcCA9
PSBSZXNvbHZlQmFzZVN0cmljdFB1dDsKKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBj
YXNlIEdldEJ5SWQ6CisgICAgICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAgY2FzZSBQdXRCeUlk
RGlyZWN0OgorICAgICAgICBjYXNlIEdldE1ldGhvZDoKKyAgICAgICAgY2FzZSBDaGVja01ldGhv
ZDoKKyAgICAgICAgY2FzZSBSZXNvbHZlOgorICAgICAgICBjYXNlIFJlc29sdmVCYXNlOgorICAg
ICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
ICAgICB9CiAjZW5kaWYKIApAQCAtMzc4LDcgKzM3MCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgQVNTRVJUKGhhc0lkZW50aWZpZXIoKSk7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzsKICAg
ICB9Ci0KKyAgICAKICAgICBib29sIGhhc1Zhck51bWJlcigpCiAgICAgewogICAgICAgICByZXR1
cm4gb3AgPT0gR2V0R2xvYmFsVmFyIHx8IG9wID09IFB1dEdsb2JhbFZhcjsKQEAgLTQ4MCw2ICs0
NzIsMTcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1f
b3BJbmZvMiwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CiAgICAgfQogICAg
IAorICAgIGJvb2wgaGFzTWV0aG9kQ2hlY2tEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBv
cCA9PSBDaGVja01ldGhvZDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbWV0aG9kQ2hlY2tE
YXRhSW5kZXgoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc01ldGhvZENoZWNrRGF0YSgpKTsK
KyAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsKKyAgICB9CisgICAgCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlcigpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzUmVzdWx0KCkp
OwpAQCAtNTY5LDYgKzU3MiwxNCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfSBjaGlsZHJlbjsKIAog
cHJpdmF0ZToKKyAgICAvLyBUaGlzIGlzIHByaXZhdGUgYmVjYXVzZSBpdCBvbmx5IHdvcmtzIGZv
ciB0aGUgSlNDb25zdGFudCBvcC4gVGhlIERGRyBpcyB3cml0dGVuIHVuZGVyIHRoZQorICAgIC8v
IGFzc3VtcHRpb24gdGhhdCAidmFsdWVPZkpTQ29uc3RhbnQiIGNhbiBjb3JyZWN0bHkgcmV0dXJu
IGEgY29uc3RhbnQgZm9yIGFueSBERkcgbm9kZSBmb3IKKyAgICAvLyB3aGljaCBoYXNDb25zdGFu
dCgpIGlzIHRydWUuCisgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFudE51bWJlcigpKS5nZXQoKTsK
KyAgICB9CisKICAgICAvLyBUaGUgdmlydHVhbCByZWdpc3RlciBudW1iZXIgKHNwaWxsIGxvY2F0
aW9uKSBhc3NvY2lhdGVkIHdpdGggdGhpcyAuCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1fdmlydHVh
bFJlZ2lzdGVyOwogICAgIC8vIFRoZSBudW1iZXIgb2YgdXNlcyBvZiB0aGUgcmVzdWx0IG9mIHRo
aXMgb3BlcmF0aW9uICgrMSBmb3IgJ211c3QgZ2VuZXJhdGUnIG5vZGVzLCB3aGljaCBoYXZlIHNp
ZGUtZWZmZWN0cykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFn
YXRvci5jcHAJKHJldmlzaW9uIDk1MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgSlNDb25z
dGFudDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0
aW9uKHByZWRpY3Rpb25Gcm9tVmFsdWUobm9kZS52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9j
aykpLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRp
Y3Rpb24obWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbkZyb21WYWx1ZShtX2dyYXBoLnZhbHVlT2ZK
U0NvbnN0YW50KG1fY29kZUJsb2NrLCBtX2NvbXBpbGVJbmRleCkpLCBTdHJvbmdQcmVkaWN0aW9u
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0yMzYs
NiArMjM2LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVk
aWN0aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDaGVja01ldGhvZDogeworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVVzZShub2RlLmNoaWxkMSgpLCBQcmVkaWN0T2JqZWN0VW5rbm93
biB8IFN0cm9uZ1ByZWRpY3Rpb25UYWcpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVk
aWN0aW9uKG1fZ3JhcGguZ2V0TWV0aG9kQ2hlY2tQcmVkaWN0aW9uKG5vZGUpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNl
IENvbnN0cnVjdDogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk1MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQy
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogCiAgICAgc3dp
dGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7
Ci0gICAgICAgIGlmIChub2RlLmlzQ29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0YW50KG5vZGVJ
bmRleCkpIHsKKyAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0
YW50KG5vZGVJbmRleCkpIHsKICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKCk7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAg
ICAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwpAQCAtNTAsMzQgKzUwLDM0IEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgCiAgICAgICAgIEdQUlJl
ZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLmlzQ29uc3RhbnQoKSkgewor
ICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBtX2dwcnMucmV0
YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAg
ICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKICAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRl
eCkpLCBncHIpOwogICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOwogICAgICAgICAg
ICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4g
Z3ByOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1h
dCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKLSAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAm
IERhdGFGb3JtYXRKUyk7Ci0KLSAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLQotICAgICAgICAgICAgaWYgKHNwaWxsRm9y
bWF0ID09IERhdGFGb3JtYXRKU0ludGVnZXIpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSBr
bm93IHRoaXMgd2FzIHNwaWxsZWQgYXMgYW4gaW50ZWdlciB3ZSBjYW4gZmlsbCB3aXRob3V0IGNo
ZWNraW5nLgotICAgICAgICAgICAgICAgIGlmIChzdHJpY3QpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlciks
IGdwcik7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBncHI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
KSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1h
dEpTSW50ZWdlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEpT
SW50ZWdlcjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZv
cm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKKyAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICYg
RGF0YUZvcm1hdEpTKTsKKyAgICAgICAgCisgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKKyAgICAgICAgCisgICAgICAgIGlmIChz
cGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyKSB7CisgICAgICAgICAgICAvLyBJZiB3
ZSBrbm93IHRoaXMgd2FzIHNwaWxsZWQgYXMgYW4gaW50ZWdlciB3ZSBjYW4gZmlsbCB3aXRob3V0
IGNoZWNraW5nLgorICAgICAgICAgICAgaWYgKHN0cmljdCkgeworICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIp
OworICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgICAgICByZXR1
cm4gZ3ByOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAgICAgICAgICAgaW5m
by5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICAgICAgcmV0
dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEpTSW50ZWdlcjsKKyAgICAgICAgICAgIHJldHVybiBncHI7
CiAgICAgICAgIH0KKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogCiAgICAgICAgIC8vIEZpbGwgYXMgSlNWYWx1ZSwg
YW5kIGZhbGwgdGhyb3VnaC4KICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3Jt
YXRKU0ludGVnZXIpOwpAQCAtMjM2LDcgKzIzNiw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZURvdWIKICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFG
b3JtYXROb25lKSB7CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAg
IGlmIChub2RlLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgp
KSB7CiAgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHsKICAgICAg
ICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAgICAgICAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVpbnRlcnByZXREb3VibGVUb0ludHB0cihzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlT2ZJbnQz
MkNvbnN0YW50KG5vZGVJbmRleCkpKSkpLCBncHIpOwpAQCAtMjU5LDE0ICsyNTksMTQgQEAgRlBS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oKTsKICAgICAgICAgICAgIHJl
dHVybiBmcHJBbGxvY2F0ZSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgRGF0YUZv
cm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKLSAgICAgICAgICAgIEFTU0VS
VChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7Ci0gICAgICAgICAgICBtX2dwcnMucmV0YWlu
KGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdw
cik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgc3BpbGxGb3JtYXQpOwotICAg
ICAgICAgICAgdW5sb2NrKGdwcik7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERhdGFG
b3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7CisgICAgICAgIEFTU0VSVChz
cGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2
aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKKyAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgc3BpbGxGb3JtYXQpOworICAgICAgICB1bmxvY2soZ3By
KTsKICAgICB9CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewpAQCAtMzYw
LDcgKzM2MCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAg
ICBjYXNlIERhdGFGb3JtYXROb25lOiB7CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgp
OwogCi0gICAgICAgIGlmIChub2RlLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAobm9kZS5o
YXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlND
b25zdGFudChub2RlSW5kZXgpOwogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkpIHsK
ICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGls
bE9yZGVyQ29uc3RhbnQpOwpAQCAtNDI1LDcgKzQyNSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CiAgICAgICAg
IEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCi0gICAgICAgIGlmIChub2RlLmlzQ29uc3RhbnQo
KSkgeworICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwogICAgICAgICAgICAg
aWYgKGpzVmFsdWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWlu
KGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwpAQCAtMTM5Niw2ICsx
Mzk2LDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNh
c2UgQ2hlY2tNZXRob2Q6IHsKKyAgICAgICAgTWV0aG9kQ2hlY2tEYXRhJiBtZXRob2RDaGVja0Rh
dGEgPSBtX2ppdC5ncmFwaCgpLm1fbWV0aG9kQ2hlY2tEYXRhW25vZGUubWV0aG9kQ2hlY2tEYXRh
SW5kZXgoKV07CisgICAgICAgIAorICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsg
Ly8gdGhpcyBuZWVkcyB0byBiZSBhIHNlcGFyYXRlIHJlZ2lzdGVyLCB1bmZvcnR1bmF0ZWx5Lgor
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5zdHJ1Y3R1cmUpKSk7CisgICAgICAgIGlmICht
ZXRob2RDaGVja0RhdGEucHJvdG90eXBlICE9IG1faml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmpl
Y3QoKS0+bWV0aG9kQ2FsbER1bW15KCkpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlwZS0+c3RydWN0dXJl
QWRkcmVzcygpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVja0RhdGEu
cHJvdG90eXBlU3RydWN0dXJlKSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1c2VD
aGlsZHJlbihub2RlKTsKKyAgICAgICAgaW5pdENvbnN0YW50SW5mbyhtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgUHV0QnlJZDogewogICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gOTUyNjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyOCw2ICs2MjgsOCBAQCBK
SVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAgICAgbV9jb2RlQmxvY2st
PnNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlv
bkluZm8uc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCk7ICsraSkgewogICAgICAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhpKTsKKyAgICAgICAg
QVNTRVJUKG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9baV0uYnl0ZWNvZGVJbmRleCAh
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgICAgICBpbmZvLmJ5
dGVjb2RlSW5kZXggPSBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmJ5dGVjb2Rl
SW5kZXg7CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZihtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmNhbGxSZXR1cm5Mb2Nh
dGlvbik7CiAgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZihtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7CiAgICAg
fQpAQCAtNjQzLDYgKzY0NSw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRy
KiBmdW4KICAgICBtX2NvZGVCbG9jay0+YWRkTWV0aG9kQ2FsbExpbmtJbmZvcyhtZXRob2RDYWxs
Q291bnQpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtZXRob2RDYWxsQ291bnQ7ICsr
aSkgewogICAgICAgICBNZXRob2RDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+bWV0
aG9kQ2FsbExpbmtJbmZvKGkpOworICAgICAgICBpbmZvLmJ5dGVjb2RlSW5kZXggPSBtX21ldGhv
ZENhbGxDb21waWxhdGlvbkluZm9baV0uYnl0ZWNvZGVJbmRleDsKICAgICAgICAgaW5mby5jYWNo
ZWRTdHJ1Y3R1cmUuc2V0TG9jYXRpb24ocGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX21ldGhvZENh
bGxDb21waWxhdGlvbkluZm9baV0uc3RydWN0dXJlVG9Db21wYXJlKSk7CiAgICAgICAgIGluZm8u
Y2FsbFJldHVybkxvY2F0aW9uID0gbV9jb2RlQmxvY2stPnN0cnVjdHVyZVN0dWJJbmZvKG1fbWV0
aG9kQ2FsbENvbXBpbGF0aW9uSW5mb1tpXS5wcm9wZXJ0eUFjY2Vzc0luZGV4KS5jYWxsUmV0dXJu
TG9jYXRpb247CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiA5
NTI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0Niw4ICsxNDYsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfTsKIAogICAgIHN0cnVj
dCBQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8geworICAgICAgICB1bnNpZ25lZCBieXRlY29k
ZUluZGV4OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsUmV0dXJuTG9jYXRpb247
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBob3RQYXRoQmVnaW47CisgICAgICAgIAor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZv
KCkKKyAgICAgICAgICAgIDogYnl0ZWNvZGVJbmRleChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkpCisgICAgICAgIHsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgfTsKIAogICAg
IHN0cnVjdCBTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvIHsKQEAgLTE1OCwxMSArMTY2LDEz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBzdHJ1Y3QgTWV0aG9kQ2FsbENvbXBp
bGF0aW9uSW5mbyB7Ci0gICAgICAgIE1ldGhvZENhbGxDb21waWxhdGlvbkluZm8odW5zaWduZWQg
cHJvcGVydHlBY2Nlc3NJbmRleCkKLSAgICAgICAgICAgIDogcHJvcGVydHlBY2Nlc3NJbmRleChw
cm9wZXJ0eUFjY2Vzc0luZGV4KQorICAgICAgICBNZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvKHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIHByb3BlcnR5QWNjZXNzSW5kZXgpCisgICAg
ICAgICAgICA6IGJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgICwgcHJv
cGVydHlBY2Nlc3NJbmRleChwcm9wZXJ0eUFjY2Vzc0luZGV4KQogICAgICAgICB7CiAgICAgICAg
IH0KIAorICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4OwogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKICAgICAgICAgdW5zaWduZWQg
cHJvcGVydHlBY2Nlc3NJbmRleDsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiA5NTI2
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9t
ZXRob2RfY2hlY2soSW5zdHJ1Y3RpCiAgICAgY3VycmVudEluc3RydWN0aW9uICs9IE9QQ09ERV9M
RU5HVEgob3BfbWV0aG9kX2NoZWNrKTsKICAgICAKICAgICAvLyBEbyB0aGUgbWV0aG9kIGNoZWNr
IC0gY2hlY2sgdGhlIG9iamVjdCAmIGl0cyBwcm90b3R5cGUncyBzdHJ1Y3R1cmUgaW5saW5lICh0
aGlzIGlzIHRoZSBjb21tb24gY2FzZSkuCi0gICAgbV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZv
LmFwcGVuZChNZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvKG1fcHJvcGVydHlBY2Nlc3NDb21waWxh
dGlvbkluZm8uc2l6ZSgpKSk7CisgICAgbV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVu
ZChNZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIG1fcHJvcGVydHlB
Y2Nlc3NDb21waWxhdGlvbkluZm8uc2l6ZSgpKSk7CiAgICAgTWV0aG9kQ2FsbENvbXBpbGF0aW9u
SW5mbyYgaW5mbyA9IG1fbWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mby5sYXN0KCk7CiAgICAgCiAg
ICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC0zMjUsNiAr
MzI1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0aCgpCiAgICAgCiAgICAgTGFi
ZWwgaG90UGF0aEJlZ2luKHRoaXMpOwogICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbklu
Zm8uYXBwZW5kKFByb3BlcnR5U3R1YkNvbXBpbGF0aW9uSW5mbygpKTsKKyAgICBtX3Byb3BlcnR5
QWNjZXNzQ29tcGlsYXRpb25JbmZvLmxhc3QoKS5ieXRlY29kZUluZGV4ID0gbV9ieXRlY29kZU9m
ZnNldDsKICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmxhc3QoKS5ob3RQYXRo
QmVnaW4gPSBob3RQYXRoQmVnaW47CiAgICAgCiAgICAgRGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRv
Q29tcGFyZTsKQEAgLTQwMSw2ICs0MDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQo
SW5zdHJ1Y3Rpb24qCiAgICAgCiAgICAgTGFiZWwgaG90UGF0aEJlZ2luKHRoaXMpOwogICAgIG1f
cHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8uYXBwZW5kKFByb3BlcnR5U3R1YkNvbXBpbGF0
aW9uSW5mbygpKTsKKyAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvLmxhc3QoKS5i
eXRlY29kZUluZGV4ID0gbV9ieXRlY29kZU9mZnNldDsKICAgICBtX3Byb3BlcnR5QWNjZXNzQ29t
cGlsYXRpb25JbmZvLmxhc3QoKS5ob3RQYXRoQmVnaW4gPSBob3RQYXRoQmVnaW47CiAgICAgCiAg
ICAgLy8gSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbiBwbGFu
dHMgYSAzMmJpdCBpbW1lZGlhdGUsIGluIG9yZGVyIHRoYXQgaXQgY2FuIGJlIHBhdGNoZWQgb3Zl
ci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCShyZXZpc2lvbiA5NTI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNyArMjg5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbWV0aG9kX2NoZWNrKEluc3RydWN0aQogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKIAogICAgIC8vIERvIHRoZSBtZXRob2QgY2hlY2sg
LSBjaGVjayB0aGUgb2JqZWN0ICYgaXRzIHByb3RvdHlwZSdzIHN0cnVjdHVyZSBpbmxpbmUgKHRo
aXMgaXMgdGhlIGNvbW1vbiBjYXNlKS4KLSAgICBtX21ldGhvZENhbGxDb21waWxhdGlvbkluZm8u
YXBwZW5kKE1ldGhvZENhbGxDb21waWxhdGlvbkluZm8obV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0
aW9uSW5mby5zaXplKCkpKTsKKyAgICBtX21ldGhvZENhbGxDb21waWxhdGlvbkluZm8uYXBwZW5k
KE1ldGhvZENhbGxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgbV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mby5zaXplKCkpKTsKICAgICBNZXRob2RDYWxsQ29tcGlsYXRpb25J
bmZvJiBpbmZvID0gbV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvLmxhc3QoKTsKIAogICAgIEp1
bXAgbm90Q2VsbCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApOwpAQCAtMzY2LDYgKzM2Niw3
IEBAIHZvaWQgSklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50IGJhc2UKIAogICAgIExhYmVs
IGhvdFBhdGhCZWdpbih0aGlzKTsKICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZv
LmFwcGVuZChQcm9wZXJ0eVN0dWJDb21waWxhdGlvbkluZm8oKSk7CisgICAgbV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mby5sYXN0KCkuYnl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVPZmZz
ZXQ7CiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mby5sYXN0KCkuaG90UGF0aEJl
Z2luID0gaG90UGF0aEJlZ2luOwogCiAgICAgRGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFy
ZTsKQEAgLTQ0NCw2ICs0NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1
Y3Rpb24qCiAKICAgICBMYWJlbCBob3RQYXRoQmVnaW4odGhpcyk7CiAgICAgbV9wcm9wZXJ0eUFj
Y2Vzc0NvbXBpbGF0aW9uSW5mby5hcHBlbmQoUHJvcGVydHlTdHViQ29tcGlsYXRpb25JbmZvKCkp
OworICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8ubGFzdCgpLmJ5dGVjb2RlSW5k
ZXggPSBtX2J5dGVjb2RlT2Zmc2V0OwogICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbklu
Zm8ubGFzdCgpLmhvdFBhdGhCZWdpbiA9IGhvdFBhdGhCZWdpbjsKIAogICAgIC8vIEl0IGlzIGlt
cG9ydGFudCB0aGF0IHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gcGxhbnRzIGEgMzJiaXQgaW1t
ZWRpYXRlLCBpbiBvcmRlciB0aGF0IGl0IGNhbiBiZSBwYXRjaGVkIG92ZXIuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gOTUyNjIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4
LDYgKzEzOCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fc3RydWN0dXJlKTsKICAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCogc3RydWN0dXJlQWRkcmVzcygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAmbV9zdHJ1Y3R1cmU7CisgICAgICAgIH0KIAogI2lmIEVOQUJMRShHQ19W
QUxJREFUSU9OKQogICAgICAgICBTdHJ1Y3R1cmUqIHVudmFsaWRhdGVkU3RydWN0dXJlKCkgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRHZXQoKTsgfQo=
</data>
<flag name="review"
          id="104318"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>