<?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>39039</bug_id>
          
          <creation_ts>2010-05-12 19:49:56 -0700</creation_ts>
          <short_desc>Provide support for separate bytecode/JIT code translations for call/construct usage</short_desc>
          <delta_ts>2010-05-12 21:02:14 -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>PC</rep_platform>
          <op_sys>OS X 10.5</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="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>225062</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-12 19:49:56 -0700</bug_when>
    <thetext>This will allow us to produce code generated specifically for use as a constructor, not for general function use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225065</commentid>
    <comment_count>1</comment_count>
      <attachid>55929</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-12 19:58:29 -0700</bug_when>
    <thetext>Created attachment 55929
The patch

No performance impact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225068</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-12 20:04:54 -0700</bug_when>
    <thetext>Attachment 55929 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
JavaScriptCore/jit/JITStubs.h:407:  cti_vm_lazyLinkConstruct is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 22 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>225087</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-12 21:02:14 -0700</bug_when>
    <thetext>Transmitting file data ......................
Committed revision 59339.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55929</attachid>
            <date>2010-05-12 19:58:29 -0700</date>
            <delta_ts>2010-05-12 20:12:47 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>patch.segregateconstruct.txt</filename>
            <type>text/plain</type>
            <size>74584</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5MzM1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTMgQEAKKzIwMTAtMDUtMTIgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zOTAzOQorICAgICAgICBQcm92aWRlIHN1cHBvcnQgZm9yIHNlcGFyYXRlIGJ5
dGVjb2RlL0pJVCBjb2RlIHRyYW5zbGF0aW9ucyBmb3IgY2FsbC9jb25zdHJ1Y3QgdXNhZ2UKKyAg
ICAgICAgVGhpcyB3aWxsIGFsbG93IHVzIHRvIHByb2R1Y2UgY29kZSBnZW5lcmF0ZWQgc3BlY2lm
aWNhbGx5IGZvciB1c2UgYXMgYSBjb25zdHJ1Y3Rvciwgbm90IGZvciBnZW5lcmFsIGZ1bmN0aW9u
IHVzZS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmxpbmtD
YWxsZXJzKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpnZXRCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpn
ZXRKSVRDb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleGVjdXRhYmxlUG9vbCk6Cisg
ICAgICAgIChKU0M6Okdsb2JhbENvZGVCbG9jazo6R2xvYmFsQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OkZ1bmN0aW9uQ29kZUJsb2NrKToKKyAgICAgICAgKiBp
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpl
eGVjdXRlQ2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0
KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByZXBhcmVGb3JSZXBlYXRDYWxsKToKKyAg
ICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6cHJpdmF0ZUV4ZWN1dGUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVy
Lmg6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6dW5saW5rQ2Fs
bE9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rQ29uc3RydWN0KToKKyAgICAg
ICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxT
bG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKToKKyAgICAgICAgKiBqaXQv
SklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNU
SU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAg
ICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGppdC9KSVRTdHVicy5o
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKToKKyAg
ICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlWaXJ0dWFsQ29uc3RydWN0KToKKyAgICAgICAgKEpT
Qzo6KToKKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oOgorICAgICAgICAoSlND
OjpTcGVjaWFsaXplZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAgICAgICogcnVudGltZS9Bcmd1
bWVudHMuaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjb3B5UmVnaXN0ZXJzKToKKyAg
ICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6aXNOdW1l
cmljQ29tcGFyZUZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgor
ICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6On5GdW5jdGlvbkV4ZWN1dGFibGUpOgor
ICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0KToKKyAgICAg
ICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmdlbmVyYXRlSklUQ29kZSk6CisgICAgICAgIChKU0M6
OlByb2dyYW1FeGVjdXRhYmxlOjpnZW5lcmF0ZUpJVENvZGUpOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkV4ZWN1dGFibGU6OmdlbmVyYXRlSklUQ29kZUZvckNhbGwpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkV4ZWN1dGFibGU6OmdlbmVyYXRlSklUQ29kZUZvckNvbnN0cnVjdCk6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6bWFya0FnZ3JlZ2F0ZSk6CisgICAgICAgIChKU0M6
OkZ1bmN0aW9uRXhlY3V0YWJsZTo6cmVwYXJzZUV4Y2VwdGlvbkluZm8pOgorICAgICAgICAoSlND
OjpFdmFsRXhlY3V0YWJsZTo6cmVwYXJzZUV4Y2VwdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkV4ZWN1dGFibGU6OnJlY29tcGlsZSk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRh
YmxlLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpFeGVjdXRhYmxlQmFzZSk6Cisg
ICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjppc0hvc3RGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OkV4ZWN1dGFibGVCYXNlOjpnZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCk6CisgICAgICAgIChK
U0M6OkV4ZWN1dGFibGVCYXNlOjpnZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KToKKyAgICAg
ICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6TmF0aXZlRXhlY3V0YWJsZSk6CisgICAgICAgIChK
U0M6OkV2YWxFeGVjdXRhYmxlOjpqaXRDb2RlKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1
dGFibGU6OmppdENvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmJ5dGVj
b2RlRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6aXNHZW5lcmF0
ZWRGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpnZW5lcmF0ZWRC
eXRlY29kZUZvckNhbGwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmJ5dGVj
b2RlRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjppc0dl
bmVyYXRlZEZvckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6
Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4
ZWN1dGFibGU6OnN5bWJvbFRhYmxlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxl
OjpGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6
OmppdENvZGVGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpqaXRD
b2RlRm9yQ29uc3RydWN0KToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgorICAg
ICAgICAoSlNDOjpKU0FjdGl2YXRpb246OkpTQWN0aXZhdGlvbkRhdGE6OkpTQWN0aXZhdGlvbkRh
dGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpT
RnVuY3Rpb246On5KU0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y2FsbCk6
CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNvbnN0cnVjdCk6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Om51bWVyaWND
b21wYXJlRnVuY3Rpb24pOgorCiAyMDEwLTA1LTEyICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEg
RmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRXJpYyBTZWlkZWwuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDU5MzM1KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMzMCwxMCArMTMzMCwxMSBAQCB2b2lkIENvZGVCbG9jazo6
ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlmCiB9CiAKLUNvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIFBhc3NSZWZQ
dHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQs
IFN5bWJvbFRhYmxlKiBzeW1UYWIpCitDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBQYXNzUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xU
YWJsZSogc3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3IpCiAgICAgOiBtX251bUNhbGxlZVJlZ2lz
dGVycygwKQogICAgICwgbV9udW1WYXJzKDApCiAgICAgLCBtX251bVBhcmFtZXRlcnMoMCkKKyAg
ICAsIG1faXNDb25zdHJ1Y3Rvcihpc0NvbnN0cnVjdG9yKQogICAgICwgbV9vd25lckV4ZWN1dGFi
bGUob3duZXJFeGVjdXRhYmxlKQogICAgICwgbV9nbG9iYWxEYXRhKDApCiAjaWZuZGVmIE5ERUJV
RwpAQCAtMTQwNSw3ICsxNDA2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnVubGlua0NhbGxlcnMoKQog
ICAgIHNpemVfdCBzaXplID0gbV9saW5rZWRDYWxsZXJMaXN0LnNpemUoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBDYWxsTGlua0luZm8qIGN1cnJl
bnRDYWxsZXIgPSBtX2xpbmtlZENhbGxlckxpc3RbaV07Ci0gICAgICAgIEpJVDo6dW5saW5rQ2Fs
bChjdXJyZW50Q2FsbGVyKTsKKyAgICAgICAgSklUOjp1bmxpbmtDYWxsT3JDb25zdHJ1Y3QoY3Vy
cmVudENhbGxlcik7CiAgICAgICAgIGN1cnJlbnRDYWxsZXItPnNldFVubGlua2VkKCk7CiAgICAg
fQogICAgIG1fbGlua2VkQ2FsbGVyTGlzdC5jbGVhcigpOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDU5MzM1KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3Miw3ICsyNzIsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgRmFzdEFsbG9jQmFzZSB7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgcHJvdGVjdGVkOgotICAgICAgICBDb2RlQmxv
Y2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlKTsKKyAgICAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgQ29kZVR5cGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBz
b3VyY2VPZmZzZXQsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgYm9vbCBpc0NvbnN0cnVjdG9y
KTsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkNvZGVCbG9jaygpOwogCkBAIC0zNTAs
NyArMzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGdldEJ5dGVjb2Rl
SW5kZXgoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cykKICAgICAgICAgewogICAgICAgICAgICAgcmVwYXJzZUZvckV4Y2VwdGlvbkluZm9JZk5lY2Vz
c2FyeShjYWxsRnJhbWUpOwotICAgICAgICAgICAgcmV0dXJuIGJpbmFyeUNob3A8Q2FsbFJldHVy
bk9mZnNldFRvQnl0ZWNvZGVJbmRleCwgdW5zaWduZWQsIGdldENhbGxSZXR1cm5PZmZzZXQ+KGNh
bGxSZXR1cm5JbmRleFZlY3RvcigpLmJlZ2luKCksIGNhbGxSZXR1cm5JbmRleFZlY3RvcigpLnNp
emUoKSwgb3duZXJFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGUoKS5vZmZzZXRPZihyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpKS0+Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIHJldHVybiBi
aW5hcnlDaG9wPENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlSW5kZXgsIHVuc2lnbmVkLCBnZXRD
YWxsUmV0dXJuT2Zmc2V0PihjYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5iZWdpbigpLCBjYWxsUmV0
dXJuSW5kZXhWZWN0b3IoKS5zaXplKCksIGdldEpJVENvZGUoKS5vZmZzZXRPZihyZXR1cm5BZGRy
ZXNzLnZhbHVlKCkpKS0+Ynl0ZWNvZGVJbmRleDsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgYm9vbCBmdW5jdGlvblJlZ2lzdGVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQsIGludCYgZnVuY3Rpb25SZWdpc3RlckluZGV4KTsKQEAgLTM2OCw4ICszNjgsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgSklU
Q29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG93bmVyRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRK
SVRDb2RlKCk7IH0KLSAgICAgICAgRXhlY3V0YWJsZVBvb2wqIGV4ZWN1dGFibGVQb29sKCkgeyBy
ZXR1cm4gb3duZXJFeGVjdXRhYmxlKCktPmdldEV4ZWN1dGFibGVQb29sKCk7IH0KKyAgICAgICAg
SklUQ29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG1faXNDb25zdHJ1Y3RvciA/IG93bmVyRXhl
Y3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCkgOiBvd25lckV4ZWN1dGFi
bGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKTsgfQorICAgICAgICBFeGVjdXRhYmxlUG9v
bCogZXhlY3V0YWJsZVBvb2woKSB7IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZVBv
b2woKTsgfQogI2VuZGlmCiAKICAgICAgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlKCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4ZWN1dGFibGU7IH0KQEAgLTQ4OSw2ICs0ODks
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaW50IG1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwog
ICAgICAgICBpbnQgbV9udW1WYXJzOwogICAgICAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOworICAg
ICAgICBib29sIG1faXNDb25zdHJ1Y3RvcjsKIAogICAgIHByaXZhdGU6CiAjaWYgIWRlZmluZWQo
TkRFQlVHKSB8fCBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQpAQCAtNTc5LDcgKzU4MCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxv
Y2sgewogICAgIHB1YmxpYzoKICAgICAgICAgR2xvYmFsQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIFBhc3NSZWZQdHI8U291cmNl
UHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1
dGFibGUsIGNvZGVUeXBlLCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCAmbV91bnNoYXJl
ZFN5bWJvbFRhYmxlKQorICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBj
b2RlVHlwZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgJm1fdW5zaGFyZWRTeW1ib2xU
YWJsZSwgZmFsc2UpCiAgICAgICAgICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkK
ICAgICAgICAgewogICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QtPmNvZGVCbG9ja3MoKS5hZGQo
dGhpcyk7CkBAIC02MzUsOCArNjM2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGFz
IHdlIG5lZWQgdG8gaW5pdGlhbGlzZSB0aGUgQ29kZUJsb2NrIGJlZm9yZSB3ZSBjb3VsZCBpbml0
aWFsaXNlIGFueSBSZWZQdHIgdG8gaG9sZCB0aGUgc2hhcmVkCiAgICAgICAgIC8vIHN5bWJvbCB0
YWJsZSwgc28gd2UganVzdCBwYXNzIGFzIGEgcmF3IHBvaW50ZXIgd2l0aCBhIHJlZiBjb3VudCBv
ZiAxLiAgV2UgdGhlbiBtYW51YWxseSBkZXJlZgogICAgICAgICAvLyBpbiB0aGUgZGVzdHJ1Y3Rv
ci4KLSAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2soRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBz
b3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0KQotICAgICAgICAgICAgOiBDb2Rl
QmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9m
ZnNldCwgbmV3IFNoYXJlZFN5bWJvbFRhYmxlKQorICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayhG
dW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIFBh
c3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VP
ZmZzZXQsIGJvb2wgaXNDb25zdHJ1Y3RvcikKKyAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVy
RXhlY3V0YWJsZSwgY29kZVR5cGUsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIG5ldyBT
aGFyZWRTeW1ib2xUYWJsZSwgaXNDb25zdHJ1Y3RvcikKICAgICAgICAgewogICAgICAgICB9CiAg
ICAgICAgIH5GdW5jdGlvbkNvZGVCbG9jaygpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiA1OTMzNSkKKysrIEphdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzA3LDcgKzcw
Nyw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWMKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNGdW5j
dGlvbiogZnVuY3Rpb24sIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSogZXhjZXB0aW9uKQorSlNWYWx1ZSBJ
bnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1
dGFibGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNPYmpl
Y3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluLCBKU1ZhbHVlKiBleGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKCFzY29wZUNoYWluLT5nbG9i
YWxEYXRhLT5leGNlcHRpb24pOwogCkBAIC03MzUsNyArNzM1LDcgQEAgSlNWYWx1ZSBJbnRlcnBy
ZXRlcjo6ZXhlY3V0ZShGdW5jdGlvbkV4ZQogICAgIGZvciAoQXJnTGlzdDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBhcmdzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgbmV3Q2FsbEZy
YW1lLT5yKCsrZHN0KSA9ICppdDsKIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gJmZ1bmN0
aW9uRXhlY3V0YWJsZS0+Ynl0ZWNvZGUoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKKyAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9ICZmdW5jdGlvbkV4ZWN1dGFibGUtPmJ5dGVjb2RlRm9yQ2FsbChj
YWxsRnJhbWUsIHNjb3BlQ2hhaW4pOwogICAgIG5ld0NhbGxGcmFtZSA9IHNsaWRlUmVnaXN0ZXJX
aW5kb3dGb3JDYWxsKGNvZGVCbG9jaywgJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIGFy
Z2MgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUsIGFyZ2MpOwogICAgIGlmIChV
TkxJS0VMWSghbmV3Q2FsbEZyYW1lKSkgewogICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3Rh
Y2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CkBAIC03NTUsNyArNzU1LDY5IEBAIEpTVmFsdWUg
SW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRnVuY3Rpb25FeGUKIAogICAgICAgICBtX3JlZW50cnlEZXB0
aCsrOwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9uRXhlY3V0YWJs
ZS0+aml0Q29kZShuZXdDYWxsRnJhbWUsIHNjb3BlQ2hhaW4pLmV4ZWN1dGUoJm1fcmVnaXN0ZXJG
aWxlLCBuZXdDYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2JhbERhdGEsIGV4Y2VwdGlvbik7Cisg
ICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+aml0Q29kZUZvckNhbGwobmV3Q2Fs
bEZyYW1lLCBzY29wZUNoYWluKS5leGVjdXRlKCZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1l
LCBzY29wZUNoYWluLT5nbG9iYWxEYXRhLCBleGNlcHRpb24pOworI2Vsc2UKKyAgICAgICAgcmVz
dWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFt
ZSwgZXhjZXB0aW9uKTsKKyNlbmRpZgorICAgICAgICBtX3JlZW50cnlEZXB0aC0tOworICAgIH0K
KworICAgIGlmICgqcHJvZmlsZXIpCisgICAgICAgICgqcHJvZmlsZXIpLT5kaWRFeGVjdXRlKGNh
bGxGcmFtZSwgZnVuY3Rpb24pOworCisgICAgbV9yZWdpc3RlckZpbGUuc2hyaW5rKG9sZEVuZCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNv
bnN0cnVjdChGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU09iamVjdCogdGhpc09iaiwgY29u
c3QgQXJnTGlzdCYgYXJncywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUqIGV4
Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoIXNjb3BlQ2hhaW4tPmdsb2JhbERhdGEtPmV4Y2VwdGlv
bik7CisKKyAgICBpZiAobV9yZWVudHJ5RGVwdGggPj0gTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVw
dGgpIHsKKyAgICAgICAgaWYgKG1fcmVlbnRyeURlcHRoID49IGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLm1heFJlZW50cnlEZXB0aCkgeworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN0
YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJhbWUpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgUmVnaXN0ZXIqIG9sZEVuZCA9IG1fcmVnaXN0ZXJG
aWxlLmVuZCgpOworICAgIGludCBhcmdjID0gMSArIGFyZ3Muc2l6ZSgpOyAvLyBpbXBsaWNpdCAi
dGhpcyIgcGFyYW1ldGVyCisKKyAgICBpZiAoIW1fcmVnaXN0ZXJGaWxlLmdyb3cob2xkRW5kICsg
YXJnYykpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihj
YWxsRnJhbWUpOworICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgfQorCisgICAgRHluYW1p
Y0dsb2JhbE9iamVjdFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKGNhbGxGcmFtZSwgc2NvcGVDaGFp
bi0+Z2xvYmFsT2JqZWN0KTsKKworICAgIENhbGxGcmFtZSogbmV3Q2FsbEZyYW1lID0gQ2FsbEZy
YW1lOjpjcmVhdGUob2xkRW5kKTsKKyAgICBzaXplX3QgZHN0ID0gMDsKKyAgICBuZXdDYWxsRnJh
bWUtPnIoMCkgPSBKU1ZhbHVlKHRoaXNPYmopOworICAgIEFyZ0xpc3Q6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGFyZ3MuZW5kKCk7CisgICAgZm9yIChBcmdMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGFyZ3MuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBuZXdDYWxsRnJhbWUtPnIo
Kytkc3QpID0gKml0OworCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmZnVuY3Rpb25FeGVj
dXRhYmxlLT5ieXRlY29kZUZvckNvbnN0cnVjdChjYWxsRnJhbWUsIHNjb3BlQ2hhaW4pOworICAg
IG5ld0NhbGxGcmFtZSA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGNvZGVCbG9jaywgJm1f
cmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIGFyZ2MgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFt
ZUhlYWRlclNpemUsIGFyZ2MpOworICAgIGlmIChVTkxJS0VMWSghbmV3Q2FsbEZyYW1lKSkgewor
ICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7
CisgICAgICAgIG1fcmVnaXN0ZXJGaWxlLnNocmluayhvbGRFbmQpOworICAgICAgICByZXR1cm4g
anNOdWxsKCk7CisgICAgfQorICAgIC8vIGEgMCBjb2RlQmxvY2sgaW5kaWNhdGVzIGEgYnVpbHQt
aW4gY2FsbGVyCisgICAgbmV3Q2FsbEZyYW1lLT5pbml0KGNvZGVCbG9jaywgMCwgc2NvcGVDaGFp
biwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxhZygpLCAwLCBhcmdjLCBmdW5jdGlvbik7
CisKKyAgICBQcm9maWxlcioqIHByb2ZpbGVyID0gUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJl
ZmVyZW5jZSgpOworICAgIGlmICgqcHJvZmlsZXIpCisgICAgICAgICgqcHJvZmlsZXIpLT53aWxs
RXhlY3V0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKKworICAgIEpTVmFsdWUgcmVzdWx0OworICAg
IHsKKyAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVy
LmdldCgpKTsKKworICAgICAgICBtX3JlZW50cnlEZXB0aCsrOworI2lmIEVOQUJMRShKSVQpCisg
ICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+aml0Q29kZUZvckNvbnN0cnVjdChu
ZXdDYWxsRnJhbWUsIHNjb3BlQ2hhaW4pLmV4ZWN1dGUoJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxs
RnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2JhbERhdGEsIGV4Y2VwdGlvbik7CiAjZWxzZQogICAgICAg
ICByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsICZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2Fs
bEZyYW1lLCBleGNlcHRpb24pOwogI2VuZGlmCkBAIC03OTMsNyArODU1LDcgQEAgQ2FsbEZyYW1l
Q2xvc3VyZSBJbnRlcnByZXRlcjo6cHJlcGFyZUZvcgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
YXJnYzsgKytpKQogICAgICAgICBuZXdDYWxsRnJhbWUtPnIoKytkc3QpID0ganNVbmRlZmluZWQo
KTsKICAgICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZGdW5jdGlvbkV4ZWN1dGFibGUt
PmJ5dGVjb2RlKGNhbGxGcmFtZSwgc2NvcGVDaGFpbik7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSAmRnVuY3Rpb25FeGVjdXRhYmxlLT5ieXRlY29kZUZvckNhbGwoY2FsbEZyYW1lLCBzY29w
ZUNoYWluKTsKICAgICBuZXdDYWxsRnJhbWUgPSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChj
b2RlQmxvY2ssICZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBhcmdjICsgUmVnaXN0ZXJG
aWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplLCBhcmdjKTsKICAgICBpZiAoVU5MSUtFTFkoIW5ld0Nh
bGxGcmFtZSkpIHsKICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJv
cihjYWxsRnJhbWUpOwpAQCAtODAzLDcgKzg2NSw3IEBAIENhbGxGcmFtZUNsb3N1cmUgSW50ZXJw
cmV0ZXI6OnByZXBhcmVGb3IKICAgICAvLyBhIDAgY29kZUJsb2NrIGluZGljYXRlcyBhIGJ1aWx0
LWluIGNhbGxlcgogICAgIG5ld0NhbGxGcmFtZS0+aW5pdChjb2RlQmxvY2ssIDAsIHNjb3BlQ2hh
aW4sIGNhbGxGcmFtZS0+YWRkSG9zdENhbGxGcmFtZUZsYWcoKSwgMCwgYXJnYywgZnVuY3Rpb24p
OwogI2lmIEVOQUJMRShKSVQpCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlLT5qaXRDb2RlKG5ld0Nh
bGxGcmFtZSwgc2NvcGVDaGFpbik7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlLT5qaXRDb2RlRm9y
Q2FsbChuZXdDYWxsRnJhbWUsIHNjb3BlQ2hhaW4pOwogI2VuZGlmCiAKICAgICBDYWxsRnJhbWVD
bG9zdXJlIHJlc3VsdCA9IHsgY2FsbEZyYW1lLCBuZXdDYWxsRnJhbWUsIGZ1bmN0aW9uLCBGdW5j
dGlvbkV4ZWN1dGFibGUsIHNjb3BlQ2hhaW4tPmdsb2JhbERhdGEsIG9sZEVuZCwgc2NvcGVDaGFp
biwgY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMsIGFyZ2MgfTsKQEAgLTgyMyw3ICs4ODUsNyBA
QCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKENhbGxGcmFtZUNsCiAgICAgICAgIAogICAg
ICAgICBtX3JlZW50cnlEZXB0aCsrOwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHJlc3VsdCA9
IGNsb3N1cmUuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlKCkuZXhlY3V0ZSgm
bV9yZWdpc3RlckZpbGUsIGNsb3N1cmUubmV3Q2FsbEZyYW1lLCBjbG9zdXJlLmdsb2JhbERhdGEs
IGV4Y2VwdGlvbik7CisgICAgICAgIHJlc3VsdCA9IGNsb3N1cmUuZnVuY3Rpb25FeGVjdXRhYmxl
LT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLmV4ZWN1dGUoJm1fcmVnaXN0ZXJGaWxlLCBjbG9z
dXJlLm5ld0NhbGxGcmFtZSwgY2xvc3VyZS5nbG9iYWxEYXRhLCBleGNlcHRpb24pOwogI2Vsc2UK
ICAgICAgICAgcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3RlckZpbGUs
IGNsb3N1cmUubmV3Q2FsbEZyYW1lLCBleGNlcHRpb24pOwogI2VuZGlmCkBAIC0zNTA3LDcgKzM1
NjksNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBD
YWxsVHlwZUpTKSB7CiAgICAgICAgICAgICBTY29wZUNoYWluTm9kZSogY2FsbERhdGFTY29wZUNo
YWluID0gY2FsbERhdGEuanMuc2NvcGVDaGFpbjsKLSAgICAgICAgICAgIENvZGVCbG9jayogbmV3
Q29kZUJsb2NrID0gJmNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Ynl0ZWNvZGUoY2Fs
bEZyYW1lLCBjYWxsRGF0YVNjb3BlQ2hhaW4pOworICAgICAgICAgICAgQ29kZUJsb2NrKiBuZXdD
b2RlQmxvY2sgPSAmY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5ieXRlY29kZUZvckNh
bGwoY2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlQ2hhaW4pOwogCiAgICAgICAgICAgICBDYWxsRnJh
bWUqIHByZXZpb3VzQ2FsbEZyYW1lID0gY2FsbEZyYW1lOwogCkBAIC0zNjYxLDcgKzM3MjMsNyBA
QCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAKICAgICAgICAgaWYgKGNhbGxUeXBlID09
IENhbGxUeXBlSlMpIHsKICAgICAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBjYWxsRGF0YVNjb3Bl
Q2hhaW4gPSBjYWxsRGF0YS5qcy5zY29wZUNoYWluOwotICAgICAgICAgICAgQ29kZUJsb2NrKiBu
ZXdDb2RlQmxvY2sgPSAmY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5ieXRlY29kZShj
YWxsRnJhbWUsIGNhbGxEYXRhU2NvcGVDaGFpbik7CisgICAgICAgICAgICBDb2RlQmxvY2sqIG5l
d0NvZGVCbG9jayA9ICZjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmJ5dGVjb2RlRm9y
Q2FsbChjYWxsRnJhbWUsIGNhbGxEYXRhU2NvcGVDaGFpbik7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIENhbGxGcmFtZSogcHJldmlvdXNDYWxsRnJhbWUgPSBjYWxsRnJhbWU7CiAgICAgICAg
ICAgICAKQEAgLTM5MDksNyArMzk3MSw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAKICAgICAg
ICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUpTKSB7CiAgICAgICAgICAgICBT
Y29wZUNoYWluTm9kZSogY2FsbERhdGFTY29wZUNoYWluID0gY29uc3RydWN0RGF0YS5qcy5zY29w
ZUNoYWluOwotICAgICAgICAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSAmY29uc3RydWN0
RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmJ5dGVjb2RlKGNhbGxGcmFtZSwgY2FsbERhdGFT
Y29wZUNoYWluKTsKKyAgICAgICAgICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmNvbnN0
cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5ieXRlY29kZUZvckNvbnN0cnVjdChjYWxs
RnJhbWUsIGNhbGxEYXRhU2NvcGVDaGFpbik7CiAKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlOwogICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBjYWxsRnJhbWUtPnIocHJv
dG8pLmpzVmFsdWUoKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuaAkocmV2aXNpb24gNTkzMzUpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBib29sIGlzT3Bjb2RlKE9wY29kZSk7CiAgICAgICAgIAogICAgICAgICBKU1Zh
bHVlIGV4ZWN1dGUoUHJvZ3JhbUV4ZWN1dGFibGUqLCBDYWxsRnJhbWUqLCBTY29wZUNoYWluTm9k
ZSosIEpTT2JqZWN0KiB0aGlzT2JqLCBKU1ZhbHVlKiBleGNlcHRpb24pOwotICAgICAgICBKU1Zh
bHVlIGV4ZWN1dGUoRnVuY3Rpb25FeGVjdXRhYmxlKiwgQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbios
IEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBTY29wZUNoYWluTm9kZSos
IEpTVmFsdWUqIGV4Y2VwdGlvbik7CisgICAgICAgIEpTVmFsdWUgZXhlY3V0ZUNhbGwoRnVuY3Rp
b25FeGVjdXRhYmxlKiwgQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiosIEpTT2JqZWN0KiB0aGlzT2Jq
LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBTY29wZUNoYWluTm9kZSosIEpTVmFsdWUqIGV4Y2VwdGlv
bik7CisgICAgICAgIEpTVmFsdWUgZXhlY3V0ZUNvbnN0cnVjdChGdW5jdGlvbkV4ZWN1dGFibGUq
LCBDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MsIFNjb3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZSogZXhjZXB0aW9uKTsKICAgICAgICAg
SlNWYWx1ZSBleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiBldmFsTm9kZSwgQ2FsbEZyYW1lKiBleGVj
LCBKU09iamVjdCogdGhpc09iaiwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUq
IGV4Y2VwdGlvbik7CiAKICAgICAgICAgSlNWYWx1ZSByZXRyaWV2ZUFyZ3VtZW50cyhDYWxsRnJh
bWUqLCBKU0Z1bmN0aW9uKikgY29uc3Q7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gNTkz
MzUpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg3
LDcgKzU4Nyw3IEBAIHZvaWQgSklUOjplbWl0UHV0VmFyaWFibGVPYmplY3RSZWdpc3RlcigKICNl
bmRpZgogCiAjaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9DQUxMKQotdm9pZCBKSVQ6OnVubGlua0Nh
bGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCit2b2lkIEpJVDo6dW5saW5rQ2FsbE9yQ29u
c3RydWN0KENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQogewogICAgIC8vIFdoZW4gdGhlIEpT
RnVuY3Rpb24gaXMgZGVsZXRlZCB0aGUgcG9pbnRlciBlbWJlZGRlZCBpbiB0aGUgaW5zdHJ1Y3Rp
b24gc3RyZWFtIHdpbGwgbm8gbG9uZ2VyIGJlIHZhbGlkCiAgICAgLy8gKGFuZCwgaWYgYSBuZXcg
SlNGdW5jdGlvbiBoYXBwZW5lZCB0byBiZSBjb25zdHJ1Y3RlZCBhdCB0aGUgc2FtZSBsb2NhdGlv
biwgd2UgY291bGQgZ2V0IGEgZmFsc2UgcG9zaXRpdmUKQEAgLTYxOSw2ICs2MTksMjYgQEAgdm9p
ZCBKSVQ6OmxpbmtDYWxsKEpTRnVuY3Rpb24qIGNhbGxlZSwgQwogICAgIC8vIHBhdGNoIHRoZSBj
YWxsIHNvIHdlIGRvIG5vdCBjb250aW51ZSB0byB0cnkgdG8gbGluay4KICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+
aml0U3R1YnMuY3RpVmlydHVhbENhbGwoKSk7CiB9CisKK3ZvaWQgSklUOjpsaW5rQ29uc3RydWN0
KEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2ssIENvZGVCbG9j
ayogY2FsbGVlQ29kZUJsb2NrLCBKSVRDb2RlJiBjb2RlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbywgaW50IGNhbGxlckFyZ0NvdW50LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit7Cisg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CisKKyAgICAv
LyBDdXJyZW50bHkgd2Ugb25seSBsaW5rIGNhbGxzIHdpdGggdGhlIGV4YWN0IG51bWJlciBvZiBh
cmd1bWVudHMuCisgICAgLy8gSWYgdGhpcyBpcyBhIG5hdGl2ZSBjYWxsIGNhbGxlZUNvZGVCbG9j
ayBpcyBudWxsIHNvIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyB1bmltcG9ydGFudAorICAg
IGlmICghY2FsbGVlQ29kZUJsb2NrIHx8IChjYWxsZXJBcmdDb3VudCA9PSBjYWxsZWVDb2RlQmxv
Y2stPm1fbnVtUGFyYW1ldGVycykpIHsKKyAgICAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8tPmlz
TGlua2VkKCkpOworICAgIAorICAgICAgICBpZiAoY2FsbGVlQ29kZUJsb2NrKQorICAgICAgICAg
ICAgY2FsbGVlQ29kZUJsb2NrLT5hZGRDYWxsZXIoY2FsbExpbmtJbmZvKTsKKyAgICAKKyAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKGNhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2luLCBjYWxs
ZWUpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmhvdFBhdGhP
dGhlciwgY29kZS5hZGRyZXNzRm9yQ2FsbCgpKTsKKyAgICB9CisKKyAgICAvLyBwYXRjaCB0aGUg
Y2FsbCBzbyB3ZSBkbyBub3QgY29udGludWUgdG8gdHJ5IHRvIGxpbmsuCisgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGdsb2JhbERhdGEt
PmppdFN0dWJzLmN0aVZpcnR1YWxDb25zdHJ1Y3QoKSk7Cit9CiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VF9PUFRJTUlaRV9DQUxMKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJl
dmlzaW9uIDU5MzM1KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzQsNyArMjM0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAg
ICBzdGF0aWMgdm9pZCBsaW5rQ2FsbChKU0Z1bmN0aW9uKiBjYWxsZWUsIENvZGVCbG9jayogY2Fs
bGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgSklUQ29kZSYsIENhbGxM
aW5rSW5mbyosIGludCBjYWxsZXJBcmdDb3VudCwgSlNHbG9iYWxEYXRhKik7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHVubGlua0NhbGwoQ2FsbExpbmtJbmZvKik7CisgICAgICAgIHN0YXRpYyB2b2lk
IGxpbmtDb25zdHJ1Y3QoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlckNvZGVC
bG9jaywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIEpJVENvZGUmLCBDYWxsTGlua0luZm8q
LCBpbnQgY2FsbGVyQXJnQ291bnQsIEpTR2xvYmFsRGF0YSopOworICAgICAgICBzdGF0aWMgdm9p
ZCB1bmxpbmtDYWxsT3JDb25zdHJ1Y3QoQ2FsbExpbmtJbmZvKik7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBzdHJ1Y3QgSlNSSW5mbyB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZp
c2lvbiA1OTMzNSkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjY3LDcgKzI2Nyw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlE
IG9wY29kZUkKICAgICBhZGRQdHIoSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIG1vdmUoSW1t
MzIoYXJnQ291bnQpLCByZWdUMSk7CiAKLSAgICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+
aml0U3R1YnMuY3RpVmlydHVhbENhbGwoKSk7CisgICAgZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9
PSBvcF9jb25zdHJ1Y3QgPyBtX2dsb2JhbERhdGEtPmppdFN0dWJzLmN0aVZpcnR1YWxDb25zdHJ1
Y3QoKSA6IG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMuY3RpVmlydHVhbENhbGwoKSk7CiAKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKQogICAgICAgICB3YXNFdmFsLmxpbmsodGhpcyk7
CkBAIC00MDAsNyArNDAwLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShJbnN0
cnVjdAogICAgIGFkZFB0cihJbW0zMihyZWdpc3Rlck9mZnNldCAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgbW92ZShJbW0zMihh
cmdDb3VudCksIHJlZ1QxKTsKIAotICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwo
bV9nbG9iYWxEYXRhLT5qaXRTdHVicy5jdGlWaXJ0dWFsQ2FsbExpbmsoKSk7CisgICAgbV9jYWxs
U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVy
bkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX2ds
b2JhbERhdGEtPmppdFN0dWJzLmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkgOiBtX2dsb2JhbERh
dGEtPmppdFN0dWJzLmN0aVZpcnR1YWxDYWxsTGluaygpKTsKIAogICAgIC8vIFB1dCB0aGUgcmV0
dXJuIHZhbHVlIGluIGRzdC4KICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOzsKQEAg
LTU2Myw3ICs1NjMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJ
CiAgICAgYWRkUHRyKEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBtb3ZlKEltbTMyKGFyZ0Nv
dW50KSwgcmVnVDEpOwogCi0gICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmppdFN0dWJz
LmN0aVZpcnR1YWxDYWxsKCkpOworICAgIGVtaXROYWtlZENhbGwob3Bjb2RlSUQgPT0gb3BfY29u
c3RydWN0ID8gbV9nbG9iYWxEYXRhLT5qaXRTdHVicy5jdGlWaXJ0dWFsQ29uc3RydWN0KCkgOiBt
X2dsb2JhbERhdGEtPmppdFN0dWJzLmN0aVZpcnR1YWxDYWxsKCkpOwogCiAgICAgaWYgKG9wY29k
ZUlEID09IG9wX2NhbGxfZXZhbCkKICAgICAgICAgd2FzRXZhbC5saW5rKHRoaXMpOwpAQCAtNjkx
LDcgKzY5MSw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoSW5zdHJ1Y3QKIAog
ICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKIAotICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtl
ZENhbGwobV9nbG9iYWxEYXRhLT5qaXRTdHVicy5jdGlWaXJ0dWFsQ2FsbExpbmsoKSk7CisgICAg
bV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2Fs
bFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3Qg
PyBtX2dsb2JhbERhdGEtPmppdFN0dWJzLmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkgOiBtX2ds
b2JhbERhdGEtPmppdFN0dWJzLmN0aVZpcnR1YWxDYWxsTGluaygpKTsKIAogICAgIC8vIFB1dCB0
aGUgcmV0dXJuIHZhbHVlIGluIGRzdC4KICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gNTkz
MzUpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzIsOSArNzIsNDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGlu
ZVRyYW1wbwogICAgIExhYmVsIHZpcnR1YWxDYWxsTGlua0JlZ2luID0gYWxpZ24oKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1
dGFibGUpKSwgcmVnVDIpOwogCi0gICAgSnVtcCBpc05hdGl2ZUZ1bmMyID0gYnJhbmNoMzIoRXF1
YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1f
bnVtUGFyYW1ldGVycykpLCBJbW0zMigwKSk7CisgICAgSnVtcCBpc05hdGl2ZUZ1bmMxID0gYnJh
bmNoMzIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1
dGFibGUsIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwpKSwgSW1tMzIoMCkpOwogCi0gICAgSnVtcCBo
YXNDb2RlQmxvY2syID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIEFkZHJlc3MocmVnVDIsIE9CSkVD
VF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVycykpLCBJbW0zMigw
KSk7CisgICAgSnVtcCBoYXNDb2RlQmxvY2sxID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIEFkZHJl
c3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1l
dGVyc0ZvckNhbGwpKSwgSW1tMzIoMCkpOworICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVy
Q2FsbChyZWdUMyk7CisgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgQ2FsbCBj
YWxsSlNGdW5jdGlvbjEgPSBjYWxsKCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKKyAgICBlbWl0
R2V0SklUU3R1YkFyZygyLCByZWdUMSk7IC8vIGFyZ0NvdW50CisgICAgcmVzdG9yZVJldHVybkFk
ZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOworICAgIGhhc0NvZGVCbG9jazEubGluayh0aGlzKTsK
KworICAgIC8vIENoZWNrIGFyZ0NvdW50IG1hdGNoZXMgY2FsbGVlIGFyaXR5LgorICAgIEp1bXAg
YXJpdHlDaGVja09rYXkxID0gYnJhbmNoMzIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9P
RkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwpKSwgcmVn
VDEpOworICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7CisgICAgZW1p
dFB1dEpJVFN0dWJBcmcocmVnVDMsIDEpOyAvLyByZXR1cm4gYWRkcmVzcworICAgIHJlc3RvcmVB
cmd1bWVudFJlZmVyZW5jZSgpOworICAgIENhbGwgY2FsbEFyaXR5Q2hlY2sxID0gY2FsbCgpOwor
ICAgIG1vdmUocmVnVDEsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBlbWl0R2V0SklUU3R1YkFy
ZygyLCByZWdUMSk7IC8vIGFyZ0NvdW50CisgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVS
ZXR1cm4ocmVnVDMpOworICAgIGFyaXR5Q2hlY2tPa2F5MS5saW5rKHRoaXMpOworCisgICAgaXNO
YXRpdmVGdW5jMS5saW5rKHRoaXMpOworCisgICAgY29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxs
RnJhbWUoKTsKKworICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7Cisg
ICAgZW1pdFB1dEpJVFN0dWJBcmcocmVnVDMsIDEpOyAvLyByZXR1cm4gYWRkcmVzcworICAgIHJl
c3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIENhbGwgY2FsbExhenlMaW5rQ2FsbDEgPSBj
YWxsKCk7CisgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOworICAg
IGp1bXAocmVnVDApOworCisgICAgLy8gVmlydHVhbENvbnN0cnVjdExpbmsgVHJhbXBvbGluZQor
ICAgIC8vIHJlZ1QwIGhvbGRzIGNhbGxlZSwgcmVnVDEgaG9sZHMgYXJnQ291bnQuICByZWdUMiB3
aWxsIGhvbGQgdGhlIEZ1bmN0aW9uRXhlY3V0YWJsZS4KKyAgICBMYWJlbCB2aXJ0dWFsQ29uc3Ry
dWN0TGlua0JlZ2luID0gYWxpZ24oKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVD
VF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOworCisgICAgSnVt
cCBpc05hdGl2ZUZ1bmMyID0gYnJhbmNoMzIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9P
RkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCkp
LCBJbW0zMigwKSk7CisKKyAgICBKdW1wIGhhc0NvZGVCbG9jazIgPSBicmFuY2gzMihHcmVhdGVy
VGhhbiwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwg
bV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0KSksIEltbTMyKDApKTsKICAgICBwcmVzZXJ2ZVJl
dHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwogICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5j
ZSgpOwogICAgIENhbGwgY2FsbEpTRnVuY3Rpb24yID0gY2FsbCgpOwpAQCAtODQsNyArMTIyLDcg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIGhhc0NvZGVC
bG9jazIubGluayh0aGlzKTsKIAogICAgIC8vIENoZWNrIGFyZ0NvdW50IG1hdGNoZXMgY2FsbGVl
IGFyaXR5LgotICAgIEp1bXAgYXJpdHlDaGVja09rYXkyID0gYnJhbmNoMzIoRXF1YWwsIEFkZHJl
c3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1l
dGVycykpLCByZWdUMSk7CisgICAgSnVtcCBhcml0eUNoZWNrT2theTIgPSBicmFuY2gzMihFcXVh
bCwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9u
dW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0KSksIHJlZ1QxKTsKICAgICBwcmVzZXJ2ZVJldHVybkFk
ZHJlc3NBZnRlckNhbGwocmVnVDMpOwogICAgIGVtaXRQdXRKSVRTdHViQXJnKHJlZ1QzLCAxKTsg
Ly8gcmV0dXJuIGFkZHJlc3MKICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKQEAgLTEw
MSw3ICsxMzksNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAg
ICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKICAgICBlbWl0UHV0SklU
U3R1YkFyZyhyZWdUMywgMSk7IC8vIHJldHVybiBhZGRyZXNzCiAgICAgcmVzdG9yZUFyZ3VtZW50
UmVmZXJlbmNlKCk7Ci0gICAgQ2FsbCBjYWxsTGF6eUxpbmtDYWxsID0gY2FsbCgpOworICAgIENh
bGwgY2FsbExhenlMaW5rQ2FsbDIgPSBjYWxsKCk7CiAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NC
ZWZvcmVSZXR1cm4ocmVnVDMpOwogICAgIGp1bXAocmVnVDApOwogI2VuZGlmIC8vIEVOQUJMRShK
SVRfT1BUSU1JWkVfQ0FMTCkKQEAgLTExMSwyMyArMTQ5LDIzIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBMYWJlbCB2aXJ0dWFsQ2FsbEJlZ2luID0gYWxp
Z24oKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0
aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOwogCi0gICAgSnVtcCBpc05hdGl2ZUZ1bmMzID0g
YnJhbmNoMzIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4
ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVycykpLCBJbW0zMigwKSk7CisgICAgSnVtcCBpc05hdGl2
ZUZ1bmMzID0gYnJhbmNoMzIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihG
dW5jdGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwpKSwgSW1tMzIoMCkpOwog
Ci0gICAgSnVtcCBoYXNDb2RlQmxvY2szID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIEFkZHJlc3Mo
cmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVy
cykpLCBJbW0zMigwKSk7CisgICAgSnVtcCBoYXNDb2RlQmxvY2szID0gYnJhbmNoMzIoR3JlYXRl
clRoYW4sIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUs
IG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwpKSwgSW1tMzIoMCkpOwogICAgIHByZXNlcnZlUmV0dXJu
QWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7CiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7
Ci0gICAgQ2FsbCBjYWxsSlNGdW5jdGlvbjEgPSBjYWxsKCk7CisgICAgQ2FsbCBjYWxsSlNGdW5j
dGlvbjMgPSBjYWxsKCk7CiAgICAgZW1pdEdldEpJVFN0dWJBcmcoMiwgcmVnVDEpOyAvLyBhcmdD
b3VudAogICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1
dGFibGUpKSwgcmVnVDIpOwogICAgIGhhc0NvZGVCbG9jazMubGluayh0aGlzKTsKIAogICAgIC8v
IENoZWNrIGFyZ0NvdW50IG1hdGNoZXMgY2FsbGVlIGFyaXR5LgotICAgIEp1bXAgYXJpdHlDaGVj
a09rYXkzID0gYnJhbmNoMzIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihG
dW5jdGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVycykpLCByZWdUMSk7CisgICAgSnVtcCBh
cml0eUNoZWNrT2theTMgPSBicmFuY2gzMihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09G
RlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCkpLCByZWdU
MSk7CiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKICAgICBlbWl0
UHV0SklUU3R1YkFyZyhyZWdUMywgMSk7IC8vIHJldHVybiBhZGRyZXNzCiAgICAgcmVzdG9yZUFy
Z3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgQ2FsbCBjYWxsQXJpdHlDaGVjazEgPSBjYWxsKCk7Cisg
ICAgQ2FsbCBjYWxsQXJpdHlDaGVjazMgPSBjYWxsKCk7CiAgICAgbW92ZShyZWdUMSwgY2FsbEZy
YW1lUmVnaXN0ZXIpOwogICAgIGVtaXRHZXRKSVRTdHViQXJnKDIsIHJlZ1QxKTsgLy8gYXJnQ291
bnQKICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7CkBAIC0xMzcs
NyArMTc1LDQxIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAg
ICBpc05hdGl2ZUZ1bmMzLmxpbmsodGhpcyk7CiAKICAgICBjb21waWxlT3BDYWxsSW5pdGlhbGl6
ZUNhbGxGcmFtZSgpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9G
KEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9qaXRDb2RlKSksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1faml0Q29k
ZUZvckNhbGwpKSwgcmVnVDApOworICAgIGp1bXAocmVnVDApOworCisgICAgLy8gVmlydHVhbENv
bnN0cnVjdCBUcmFtcG9saW5lCisgICAgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLCByZWdUMSBob2xk
cyBhcmdDb3VudC4gIHJlZ1QyIHdpbGwgaG9sZCB0aGUgRnVuY3Rpb25FeGVjdXRhYmxlLgorICAg
IExhYmVsIHZpcnR1YWxDb25zdHJ1Y3RCZWdpbiA9IGFsaWduKCk7CisgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJl
Z1QyKTsKKworICAgIEp1bXAgaXNOYXRpdmVGdW5jNCA9IGJyYW5jaDMyKEVxdWFsLCBBZGRyZXNz
KHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX251bVBhcmFtZXRl
cnNGb3JDb25zdHJ1Y3QpKSwgSW1tMzIoMCkpOworCisgICAgSnVtcCBoYXNDb2RlQmxvY2s0ID0g
YnJhbmNoMzIoR3JlYXRlclRoYW4sIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5j
dGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCkpLCBJbW0zMigwKSk7
CisgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKKyAgICByZXN0b3Jl
QXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBDYWxsIGNhbGxKU0Z1bmN0aW9uNCA9IGNhbGwoKTsK
KyAgICBlbWl0R2V0SklUU3R1YkFyZygyLCByZWdUMSk7IC8vIGFyZ0NvdW50CisgICAgcmVzdG9y
ZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMik7
CisgICAgaGFzQ29kZUJsb2NrNC5saW5rKHRoaXMpOworCisgICAgLy8gQ2hlY2sgYXJnQ291bnQg
bWF0Y2hlcyBjYWxsZWUgYXJpdHkuCisgICAgSnVtcCBhcml0eUNoZWNrT2theTQgPSBicmFuY2gz
MihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJs
ZSwgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0KSksIHJlZ1QxKTsKKyAgICBwcmVzZXJ2ZVJl
dHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOworICAgIGVtaXRQdXRKSVRTdHViQXJnKHJlZ1Qz
LCAxKTsgLy8gcmV0dXJuIGFkZHJlc3MKKyAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsK
KyAgICBDYWxsIGNhbGxBcml0eUNoZWNrNCA9IGNhbGwoKTsKKyAgICBtb3ZlKHJlZ1QxLCBjYWxs
RnJhbWVSZWdpc3Rlcik7CisgICAgZW1pdEdldEpJVFN0dWJBcmcoMiwgcmVnVDEpOyAvLyBhcmdD
b3VudAorICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1
dGFibGUpKSwgcmVnVDIpOworICAgIGFyaXR5Q2hlY2tPa2F5NC5saW5rKHRoaXMpOworCisgICAg
aXNOYXRpdmVGdW5jNC5saW5rKHRoaXMpOworCisgICAgY29tcGlsZU9wQ2FsbEluaXRpYWxpemVD
YWxsRnJhbWUoKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihG
dW5jdGlvbkV4ZWN1dGFibGUsIG1faml0Q29kZUZvckNvbnN0cnVjdCkpLCByZWdUMCk7CiAgICAg
anVtcChyZWdUMCk7CiAKICNpZiBDUFUoWDg2KSB8fCBDUFUoQVJNX1RSQURJVElPTkFMKQpAQCAt
Mzg2LDI0ICs0NTgsMzEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1w
bwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczJDYWxsLCBGdW5jdGlv
blB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhzdHJpbmdfZmFpbHVyZUNhc2VzM0NhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRf
c3RyaW5nX2ZhaWwpKTsKICNlbmRpZgotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEFyaXR5Q2hl
Y2sxLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9hcml0eUNoZWNrKSk7Ci0gICAgcGF0Y2hCdWZm
ZXIubGluayhjYWxsSlNGdW5jdGlvbjEsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX0pTRnVuY3Rp
b24pKTsKICNpZiBFTkFCTEUoSklUX09QVElNSVpFX0NBTEwpCi0gICAgcGF0Y2hCdWZmZXIubGlu
ayhjYWxsQXJpdHlDaGVjazIsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spKTsK
LSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxKU0Z1bmN0aW9uMiwgRnVuY3Rpb25QdHIoY3RpX29w
X2NhbGxfSlNGdW5jdGlvbikpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbExhenlMaW5rQ2Fs
bCwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ2FsbCkpOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoY2FsbEFyaXR5Q2hlY2sxLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9hcml0eUNoZWNrKSk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsSlNGdW5jdGlvbjEsIEZ1bmN0aW9uUHRyKGN0aV9v
cF9jYWxsX2ppdENvbXBpbGUpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxMYXp5TGlua0Nh
bGwxLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDYWxsKSk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhjYWxsQXJpdHlDaGVjazIsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfYXJpdHlD
aGVjaykpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEpTRnVuY3Rpb24yLCBGdW5jdGlvblB0
cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNh
bGxMYXp5TGlua0NhbGwyLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDb25zdHJ1Y3QpKTsK
ICNlbmRpZgorICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEFyaXR5Q2hlY2szLCBGdW5jdGlvblB0
cihjdGlfb3BfY2FsbF9hcml0eUNoZWNrKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsSlNG
dW5jdGlvbjMsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX2ppdENvbXBpbGUpKTsKKyAgICBwYXRj
aEJ1ZmZlci5saW5rKGNhbGxBcml0eUNoZWNrNCwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVj
dF9hcml0eUNoZWNrKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsSlNGdW5jdGlvbjQsIEZ1
bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29tcGlsZSkpOwogCiAgICAgQ29kZVJlZiBm
aW5hbENvZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAqZXhlY3V0YWJsZVBv
b2wgPSBmaW5hbENvZGUubV9leGVjdXRhYmxlUG9vbDsKIAogICAgIHRyYW1wb2xpbmVzLT5jdGlW
aXJ0dWFsQ2FsbCA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHZpcnR1YWxDYWxsQmVnaW4pOwor
ICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0ID0gdHJhbXBvbGluZUF0KGZpbmFs
Q29kZSwgdmlydHVhbENvbnN0cnVjdEJlZ2luKTsKICAgICB0cmFtcG9saW5lcy0+Y3RpTmF0aXZl
Q2FsbFRodW5rID0gYWRvcHRSZWYobmV3IE5hdGl2ZUV4ZWN1dGFibGUoSklUQ29kZShKSVRDb2Rl
OjpIb3N0RnVuY3Rpb24odHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgbmF0aXZlQ2FsbFRodW5rKSkp
KSk7CiAjaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9QUk9QRVJUWV9BQ0NFU1MpCiAgICAgdHJhbXBv
bGluZXMtPmN0aVN0cmluZ0xlbmd0aFRyYW1wb2xpbmUgPSB0cmFtcG9saW5lQXQoZmluYWxDb2Rl
LCBzdHJpbmdMZW5ndGhCZWdpbik7CiAjZW5kaWYKICNpZiBFTkFCTEUoSklUX09QVElNSVpFX0NB
TEwpCiAgICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsTGluayA9IHRyYW1wb2xpbmVBdChm
aW5hbENvZGUsIHZpcnR1YWxDYWxsTGlua0JlZ2luKTsKKyAgICB0cmFtcG9saW5lcy0+Y3RpVmly
dHVhbENvbnN0cnVjdExpbmsgPSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCB2aXJ0dWFsQ29uc3Ry
dWN0TGlua0JlZ2luKTsKICNlbmRpZgogI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfTU9EKQogICAg
IHRyYW1wb2xpbmVzLT5jdGlTb2Z0TW9kdWxvID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgc29m
dE1vZEJlZ2luKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDU5
MzM1KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Nyw5ICs3Nyw0NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJh
bXBvCiAgICAgTGFiZWwgdmlydHVhbENhbGxMaW5rQmVnaW4gPSBhbGlnbigpOwogICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJs
ZSkpLCByZWdUMik7CiAKLSAgICBKdW1wIGlzTmF0aXZlRnVuYzIgPSBicmFuY2gzMihFcXVhbCwg
QWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9udW1Q
YXJhbWV0ZXJzKSksIEltbTMyKDApKTsKKyAgICBKdW1wIGlzTmF0aXZlRnVuYzEgPSBicmFuY2gz
MihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJs
ZSwgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCkpLCBJbW0zMigwKSk7CiAKLSAgICBKdW1wIGhhc0Nv
ZGVCbG9jazIgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09G
RlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9udW1QYXJhbWV0ZXJzKSksIEltbTMyKDApKTsK
KyAgICBKdW1wIGhhc0NvZGVCbG9jazEgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwgQWRkcmVzcyhy
ZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9udW1QYXJhbWV0ZXJz
Rm9yQ2FsbCkpLCBJbW0zMigwKSk7CisgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxs
KHJlZ1QzKTsKKyAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBDYWxsIGNhbGxK
U0Z1bmN0aW9uMSA9IGNhbGwoKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9P
RkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOworICAgIGVtaXRHZXRK
SVRTdHViQXJnKDIsIHJlZ1QxKTsgLy8gYXJnQ291bnQKKyAgICByZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihyZWdUMyk7CisgICAgaGFzQ29kZUJsb2NrMS5saW5rKHRoaXMpOworCisg
ICAgLy8gQ2hlY2sgYXJnQ291bnQgbWF0Y2hlcyBjYWxsZWUgYXJpdHkuCisgICAgSnVtcCBhcml0
eUNoZWNrT2theTEgPSBicmFuY2gzMihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNF
VE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCkpLCByZWdUMSk7
CisgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKKyAgICBlbWl0UHV0
SklUU3R1YkFyZyhyZWdUMywgMSk7IC8vIHJldHVybiBhZGRyZXNzCisgICAgcmVzdG9yZUFyZ3Vt
ZW50UmVmZXJlbmNlKCk7CisgICAgQ2FsbCBjYWxsQXJpdHlDaGVjazEgPSBjYWxsKCk7CisgICAg
bW92ZShyZWdUMSwgY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIGVtaXRHZXRKSVRTdHViQXJnKDIs
IHJlZ1QxKTsgLy8gYXJnQ291bnQKKyAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihyZWdUMyk7CisgICAgYXJpdHlDaGVja09rYXkxLmxpbmsodGhpcyk7CisKKyAgICBpc05hdGl2
ZUZ1bmMxLmxpbmsodGhpcyk7CisKKyAgICBjb21waWxlT3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFt
ZSgpOworICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7CisgICAgZW1p
dFB1dEpJVFN0dWJBcmcocmVnVDMsIDEpOyAvLyByZXR1cm4gYWRkcmVzcworICAgIHJlc3RvcmVB
cmd1bWVudFJlZmVyZW5jZSgpOworICAgIENhbGwgY2FsbExhenlMaW5rQ2FsbDEgPSBjYWxsKCk7
CisgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOworICAgIGp1bXAo
cmVnVDApOworCisgICAgLy8gVmlydHVhbENvbnN0cnVjdExpbmsgVHJhbXBvbGluZQorICAgIC8v
IHJlZ1QwIGhvbGRzIGNhbGxlZSwgcmVnVDEgaG9sZHMgYXJnQ291bnQuICByZWdUMiB3aWxsIGhv
bGQgdGhlIEZ1bmN0aW9uRXhlY3V0YWJsZS4KKyAgICBMYWJlbCB2aXJ0dWFsQ29uc3RydWN0TGlu
a0JlZ2luID0gYWxpZ24oKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZT
RVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOworCisgICAgSnVtcCBpc05h
dGl2ZUZ1bmMyID0gYnJhbmNoMzIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRP
RihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCkpLCBJbW0z
MigwKSk7CisKKyAgICBKdW1wIGhhc0NvZGVCbG9jazIgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwg
QWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9udW1Q
YXJhbWV0ZXJzRm9yQ29uc3RydWN0KSksIEltbTMyKDApKTsKICAgICBwcmVzZXJ2ZVJldHVybkFk
ZHJlc3NBZnRlckNhbGwocmVnVDMpOwogICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwog
ICAgIENhbGwgY2FsbEpTRnVuY3Rpb24yID0gY2FsbCgpOwpAQCAtODksNyArMTI2LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIGhhc0NvZGVCbG9jazIu
bGluayh0aGlzKTsKIAogICAgIC8vIENoZWNrIGFyZ0NvdW50IG1hdGNoZXMgY2FsbGVlIGFyaXR5
LgotICAgIEp1bXAgYXJpdHlDaGVja09rYXkyID0gYnJhbmNoMzIoRXF1YWwsIEFkZHJlc3MocmVn
VDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVycykp
LCByZWdUMSk7CisgICAgSnVtcCBhcml0eUNoZWNrT2theTIgPSBicmFuY2gzMihFcXVhbCwgQWRk
cmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9udW1QYXJh
bWV0ZXJzRm9yQ29uc3RydWN0KSksIHJlZ1QxKTsKICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwocmVnVDMpOwogICAgIGVtaXRQdXRKSVRTdHViQXJnKHJlZ1QzLCAxKTsgLy8gcmV0
dXJuIGFkZHJlc3MKICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKQEAgLTEwNSw3ICsx
NDIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgcHJl
c2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKICAgICBlbWl0UHV0SklUU3R1YkFy
ZyhyZWdUMywgMSk7IC8vIHJldHVybiBhZGRyZXNzCiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJl
bmNlKCk7Ci0gICAgQ2FsbCBjYWxsTGF6eUxpbmtDYWxsID0gY2FsbCgpOworICAgIENhbGwgY2Fs
bExhenlMaW5rQ2FsbDIgPSBjYWxsKCk7CiAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVS
ZXR1cm4ocmVnVDMpOwogICAgIGp1bXAocmVnVDApOwogCkBAIC0xMTQsMjMgKzE1MSwyMyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgTGFiZWwgdmlydHVh
bENhbGxCZWdpbiA9IGFsaWduKCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKIAotICAgIEp1bXAg
aXNOYXRpdmVGdW5jMyA9IGJyYW5jaDMyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZG
U0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX251bVBhcmFtZXRlcnMpKSwgSW1tMzIoMCkpOwor
ICAgIEp1bXAgaXNOYXRpdmVGdW5jMyA9IGJyYW5jaDMyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBP
QkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX251bVBhcmFtZXRlcnNGb3JDYWxs
KSksIEltbTMyKDApKTsKIAotICAgIEp1bXAgaGFzQ29kZUJsb2NrMyA9IGJyYW5jaDMyKEdyZWF0
ZXJUaGFuLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxl
LCBtX251bVBhcmFtZXRlcnMpKSwgSW1tMzIoMCkpOworICAgIEp1bXAgaGFzQ29kZUJsb2NrMyA9
IGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVu
Y3Rpb25FeGVjdXRhYmxlLCBtX251bVBhcmFtZXRlcnNGb3JDYWxsKSksIEltbTMyKDApKTsKICAg
ICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwogICAgIHJlc3RvcmVBcmd1
bWVudFJlZmVyZW5jZSgpOwotICAgIENhbGwgY2FsbEpTRnVuY3Rpb24xID0gY2FsbCgpOworICAg
IENhbGwgY2FsbEpTRnVuY3Rpb24zID0gY2FsbCgpOwogICAgIGVtaXRHZXRKSVRTdHViQXJnKDIs
IHJlZ1QxKTsgLy8gYXJnQ291bnQKICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihyZWdUMyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNG
dW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKICAgICBoYXNDb2RlQmxvY2szLmxpbmso
dGhpcyk7CiAgICAgCiAgICAgLy8gQ2hlY2sgYXJnQ291bnQgbWF0Y2hlcyBjYWxsZWUgYXJpdHku
Ci0gICAgSnVtcCBhcml0eUNoZWNrT2theTMgPSBicmFuY2gzMihFcXVhbCwgQWRkcmVzcyhyZWdU
MiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9udW1QYXJhbWV0ZXJzKSks
IHJlZ1QxKTsKKyAgICBKdW1wIGFyaXR5Q2hlY2tPa2F5MyA9IGJyYW5jaDMyKEVxdWFsLCBBZGRy
ZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX251bVBhcmFt
ZXRlcnNGb3JDYWxsKSksIHJlZ1QxKTsKICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNh
bGwocmVnVDMpOwogICAgIGVtaXRQdXRKSVRTdHViQXJnKHJlZ1QzLCAxKTsgLy8gcmV0dXJuIGFk
ZHJlc3MKICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBDYWxsIGNhbGxBcml0
eUNoZWNrMSA9IGNhbGwoKTsKKyAgICBDYWxsIGNhbGxBcml0eUNoZWNrMyA9IGNhbGwoKTsKICAg
ICBtb3ZlKHJlZ1QxLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgZW1pdEdldEpJVFN0dWJBcmco
MiwgcmVnVDEpOyAvLyBhcmdDb3VudAogICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0
dXJuKHJlZ1QzKTsKQEAgLTE0MCw5ICsxNzcsNDQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
Q1RJTWFjaGluZVRyYW1wbwogICAgIGlzTmF0aXZlRnVuYzMubGluayh0aGlzKTsKIAogICAgIGNv
bXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2ppdENvZGUpKSwgcmVn
VDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9u
RXhlY3V0YWJsZSwgbV9qaXRDb2RlRm9yQ2FsbCkpLCByZWdUMCk7CiAgICAganVtcChyZWdUMCk7
CiAKKyAgICAvLyBWaXJ0dWFsQ29uc3RydWN0IFRyYW1wb2xpbmUKKyAgICAvLyByZWdUMCBob2xk
cyBjYWxsZWUsIHJlZ1QxIGhvbGRzIGFyZ0NvdW50LiAgcmVnVDIgd2lsbCBob2xkIHRoZSBGdW5j
dGlvbkV4ZWN1dGFibGUuCisgICAgTGFiZWwgdmlydHVhbENvbnN0cnVjdEJlZ2luID0gYWxpZ24o
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9u
LCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOworCisgICAgSnVtcCBpc05hdGl2ZUZ1bmM0ID0gYnJh
bmNoMzIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1
dGFibGUsIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCkpLCBJbW0zMigwKSk7CisKKyAgICBK
dW1wIGhhc0NvZGVCbG9jazQgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwgQWRkcmVzcyhyZWdUMiwg
T0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9udW1QYXJhbWV0ZXJzRm9yQ29u
c3RydWN0KSksIEltbTMyKDApKTsKKyAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwo
cmVnVDMpOworICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIENhbGwgY2FsbEpT
RnVuY3Rpb240ID0gY2FsbCgpOworICAgIGVtaXRHZXRKSVRTdHViQXJnKDIsIHJlZ1QxKTsgLy8g
YXJnQ291bnQKKyAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9l
eGVjdXRhYmxlKSksIHJlZ1QyKTsKKyAgICBoYXNDb2RlQmxvY2s0LmxpbmsodGhpcyk7CisgICAg
CisgICAgLy8gQ2hlY2sgYXJnQ291bnQgbWF0Y2hlcyBjYWxsZWUgYXJpdHkuCisgICAgSnVtcCBh
cml0eUNoZWNrT2theTQgPSBicmFuY2gzMihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09G
RlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0KSks
IHJlZ1QxKTsKKyAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOworICAg
IGVtaXRQdXRKSVRTdHViQXJnKHJlZ1QzLCAxKTsgLy8gcmV0dXJuIGFkZHJlc3MKKyAgICByZXN0
b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBDYWxsIGNhbGxBcml0eUNoZWNrNCA9IGNhbGwo
KTsKKyAgICBtb3ZlKHJlZ1QxLCBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgZW1pdEdldEpJVFN0
dWJBcmcoMiwgcmVnVDEpOyAvLyBhcmdDb3VudAorICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZT
RVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOworICAgIGFyaXR5Q2hlY2tP
a2F5NC5saW5rKHRoaXMpOworCisgICAgaXNOYXRpdmVGdW5jNC5saW5rKHRoaXMpOworCisgICAg
Y29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUoKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1faml0Q29kZUZvckNv
bnN0cnVjdCkpLCByZWdUMCk7CisgICAganVtcChyZWdUMCk7CisKKyAgICAvLyBOYXRpdkNhbGwg
VHJhbXBvbGluZQogICAgIExhYmVsIG5hdGl2ZUNhbGxUaHVuayA9IGFsaWduKCk7CiAgICAgcHJl
c2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QwKTsKICAgICBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIocmVnVDAsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpOyAvLyBQdXNoIHJldHVybiBh
ZGRyZXNzCkBAIC00NDMsMTkgKzUxNSwyNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElN
YWNoaW5lVHJhbXBvCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2VzMkNh
bGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKICAgICBwYXRj
aEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMzQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29w
X2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwogI2VuZGlmCi0gICAgcGF0Y2hCdWZmZXIubGluayhj
YWxsQXJpdHlDaGVjazEsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spKTsKLSAg
ICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxKU0Z1bmN0aW9uMSwgRnVuY3Rpb25QdHIoY3RpX29wX2Nh
bGxfSlNGdW5jdGlvbikpOwogI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfQ0FMTCkKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKGNhbGxBcml0eUNoZWNrMiwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfYXJp
dHlDaGVjaykpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEpTRnVuY3Rpb24yLCBGdW5jdGlv
blB0cihjdGlfb3BfY2FsbF9KU0Z1bmN0aW9uKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxs
TGF6eUxpbmtDYWxsLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDYWxsKSk7CisgICAgcGF0
Y2hCdWZmZXIubGluayhjYWxsQXJpdHlDaGVjazEsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX2Fy
aXR5Q2hlY2spKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxKU0Z1bmN0aW9uMSwgRnVuY3Rp
b25QdHIoY3RpX29wX2NhbGxfaml0Q29tcGlsZSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bExhenlMaW5rQ2FsbDEsIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0NhbGwpKTsKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKGNhbGxBcml0eUNoZWNrMiwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0
cnVjdF9hcml0eUNoZWNrKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsSlNGdW5jdGlvbjIs
IEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29tcGlsZSkpOworICAgIHBhdGNoQnVm
ZmVyLmxpbmsoY2FsbExhenlMaW5rQ2FsbDIsIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0Nv
bnN0cnVjdCkpOwogI2VuZGlmCisgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQXJpdHlDaGVjazMs
IEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKGNhbGxKU0Z1bmN0aW9uMywgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfaml0Q29tcGlsZSkp
OworICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEFyaXR5Q2hlY2s0LCBGdW5jdGlvblB0cihjdGlf
b3BfY29uc3RydWN0X2FyaXR5Q2hlY2spKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxKU0Z1
bmN0aW9uNCwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9qaXRDb21waWxlKSk7CiAKICAg
ICBDb2RlUmVmIGZpbmFsQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgICpl
eGVjdXRhYmxlUG9vbCA9IGZpbmFsQ29kZS5tX2V4ZWN1dGFibGVQb29sOwogCiAgICAgdHJhbXBv
bGluZXMtPmN0aVZpcnR1YWxDYWxsTGluayA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHZpcnR1
YWxDYWxsTGlua0JlZ2luKTsKKyAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENvbnN0cnVjdExp
bmsgPSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCB2aXJ0dWFsQ29uc3RydWN0TGlua0JlZ2luKTsK
ICAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENhbGwgPSB0cmFtcG9saW5lQXQoZmluYWxDb2Rl
LCB2aXJ0dWFsQ2FsbEJlZ2luKTsKKyAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENvbnN0cnVj
dCA9IHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIHZpcnR1YWxDb25zdHJ1Y3RCZWdpbik7CiAgICAg
dHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNhbGxUaHVuayA9IGFkb3B0UmVmKG5ldyBOYXRpdmVFeGVj
dXRhYmxlKEpJVENvZGUoSklUQ29kZTo6SG9zdEZ1bmN0aW9uKHRyYW1wb2xpbmVBdChmaW5hbENv
ZGUsIG5hdGl2ZUNhbGxUaHVuaykpKSkpOwogI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfTU9EKQog
ICAgIHRyYW1wb2xpbmVzLT5jdGlTb2Z0TW9kdWxvID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwg
c29mdE1vZEJlZ2luKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDU5MzM1KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYsNyArMzM2LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIEp1bXAgbm9u
Q2VsbCA9IGp1bXAoKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2UgYXJyYXkgY2hl
Y2sKICAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MCksIEltbVB0cihtX2dsb2JhbERhdGEtPmpzU3RyaW5nVlB0cikpOwotICAgIGVtaXROYWtlZENh
bGwobV9nbG9iYWxEYXRhLT5nZXRUaHVuayhzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLT5n
ZW5lcmF0ZWRKSVRDb2RlKCkuYWRkcmVzc0ZvckNhbGwoKSk7CisgICAgZW1pdE5ha2VkQ2FsbCht
X2dsb2JhbERhdGEtPmdldFRodW5rKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvciktPmdlbmVy
YXRlZEpJVENvZGVGb3JDYWxsKCkuYWRkcmVzc0ZvckNhbGwoKSk7CiAgICAgSnVtcCBmYWlsZWQg
PSBicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwg
cmVnVDApOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9n
ZXRfYnlfdmFsKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHJldmlzaW9uIDU5MzM1KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBKdW1wIG5vbkNlbGwgPSBqdW1wKCk7CiAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCiAgICAgSnVtcCBub3RT
dHJpbmcgPSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDApLCBJbW1QdHIobV9nbG9i
YWxEYXRhLT5qc1N0cmluZ1ZQdHIpKTsKLSAgICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+
Z2V0VGh1bmsoc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKS0+Z2VuZXJhdGVkSklUQ29kZSgp
LmFkZHJlc3NGb3JDYWxsKCkpOworICAgIGVtaXROYWtlZENhbGwobV9nbG9iYWxEYXRhLT5nZXRU
aHVuayhzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2Fs
bCgpLmFkZHJlc3NGb3JDYWxsKCkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVzdFB0ciha
ZXJvLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X3ZhbCkp
OwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA1OTMzNSkKKysrIEphdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NzcsNyArMTc3
Nyw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfbmV3X2YKICAgICByZXR1
cm4gc3RhY2tGcmFtZS5hcmdzWzBdLmZ1bmN0aW9uKCktPm1ha2Uoc3RhY2tGcmFtZS5jYWxsRnJh
bWUsIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5zY29wZUNoYWluKCkpOwogfQogCi1ERUZJTkVfU1RV
Ql9GVU5DVElPTih2b2lkKiwgb3BfY2FsbF9KU0Z1bmN0aW9uKQorREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCosIG9wX2NhbGxfaml0Q29tcGlsZSkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJB
TUUoc3RhY2tGcmFtZSk7CiAKQEAgLTE3OTAsNyArMTc5MCwyNSBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTih2b2lkKiwgb3BfY2FsbF9KU0Z1CiAgICAgQVNTRVJUKCFmdW5jdGlvbi0+aXNIb3N0RnVu
Y3Rpb24oKSk7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24t
PmpzRXhlY3V0YWJsZSgpOwogICAgIFNjb3BlQ2hhaW5Ob2RlKiBjYWxsRGF0YVNjb3BlQ2hhaW4g
PSBmdW5jdGlvbi0+c2NvcGUoKS5ub2RlKCk7Ci0gICAgZXhlY3V0YWJsZS0+aml0Q29kZShzdGFj
a0ZyYW1lLmNhbGxGcmFtZSwgY2FsbERhdGFTY29wZUNoYWluKTsKKyAgICBleGVjdXRhYmxlLT5q
aXRDb2RlRm9yQ2FsbChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgY2FsbERhdGFTY29wZUNoYWluKTsK
KworICAgIHJldHVybiBmdW5jdGlvbjsKK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCos
IG9wX2NvbnN0cnVjdF9qaXRDb21waWxlKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShz
dGFja0ZyYW1lKTsKKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKKyAgICBBU1NFUlQoc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKS5nZXRDYWxsRGF0YShj
YWxsRGF0YSkgPT0gQ2FsbFR5cGVKUyk7CisjZW5kaWYKKworICAgIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uID0gYXNGdW5jdGlvbihzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpKTsKKyAgICBBU1NF
UlQoIWZ1bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCk7CisgICAgU2NvcGVDaGFpbk5v
ZGUqIGNhbGxEYXRhU2NvcGVDaGFpbiA9IGZ1bmN0aW9uLT5zY29wZSgpLm5vZGUoKTsKKyAgICBl
eGVjdXRhYmxlLT5qaXRDb2RlRm9yQ29uc3RydWN0KHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBjYWxs
RGF0YVNjb3BlQ2hhaW4pOwogCiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQpAQCAtMTgwMiw3ICsx
ODIwLDU0IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKFZvaWRQdHJQYWlyLCBvcF9jYWwKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogICAgIEpTRnVuY3Rp
b24qIGNhbGxlZSA9IGFzRnVuY3Rpb24oc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSk7CiAg
ICAgQVNTRVJUKCFjYWxsZWUtPmlzSG9zdEZ1bmN0aW9uKCkpOwotICAgIENvZGVCbG9jayogbmV3
Q29kZUJsb2NrID0gJmNhbGxlZS0+anNFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEJ5dGVjb2RlKCk7
CisgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSAmY2FsbGVlLT5qc0V4ZWN1dGFibGUoKS0+
Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7CisgICAgaW50IGFyZ0NvdW50ID0gc3RhY2tGcmFt
ZS5hcmdzWzJdLmludDMyKCk7CisKKyAgICBBU1NFUlQoYXJnQ291bnQgIT0gbmV3Q29kZUJsb2Nr
LT5tX251bVBhcmFtZXRlcnMpOworCisgICAgQ2FsbEZyYW1lKiBvbGRDYWxsRnJhbWUgPSBjYWxs
RnJhbWUtPmNhbGxlckZyYW1lKCk7CisKKyAgICBpZiAoYXJnQ291bnQgPiBuZXdDb2RlQmxvY2st
Pm1fbnVtUGFyYW1ldGVycykgeworICAgICAgICBzaXplX3QgbnVtUGFyYW1ldGVycyA9IG5ld0Nv
ZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzOworICAgICAgICBSZWdpc3RlciogciA9IGNhbGxGcmFt
ZS0+cmVnaXN0ZXJzKCkgKyBudW1QYXJhbWV0ZXJzOworCisgICAgICAgIFJlZ2lzdGVyKiBhcmd2
ID0gciAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIG51bVBhcmFtZXRlcnMg
LSBhcmdDb3VudDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1QYXJhbWV0ZXJz
OyArK2kpCisgICAgICAgICAgICBhcmd2W2kgKyBhcmdDb3VudF0gPSBhcmd2W2ldOworCisgICAg
ICAgIGNhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKHIpOworICAgICAgICBjYWxsRnJhbWUt
PnNldENhbGxlckZyYW1lKG9sZENhbGxGcmFtZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2l6
ZV90IG9taXR0ZWRBcmdDb3VudCA9IG5ld0NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gYXJn
Q291bnQ7CisgICAgICAgIFJlZ2lzdGVyKiByID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIG9t
aXR0ZWRBcmdDb3VudDsKKyAgICAgICAgUmVnaXN0ZXIqIG5ld0VuZCA9IHIgKyBuZXdDb2RlQmxv
Y2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOworICAgICAgICBpZiAoIXN0YWNrRnJhbWUucmVnaXN0
ZXJGaWxlLT5ncm93KG5ld0VuZCkpIHsKKyAgICAgICAgICAgIC8vIFJld2luZCB0byB0aGUgcHJl
dmlvdXMgY2FsbCBmcmFtZSBiZWNhdXNlIG9wX2NhbGwgYWxyZWFkeSBvcHRpbWlzdGljYWxseQor
ICAgICAgICAgICAgLy8gbW92ZWQgdGhlIGNhbGwgZnJhbWUgZm9yd2FyZC4KKyAgICAgICAgICAg
IHN0YWNrRnJhbWUuY2FsbEZyYW1lID0gb2xkQ2FsbEZyYW1lOworICAgICAgICAgICAgdGhyb3dT
dGFja092ZXJmbG93RXJyb3Iob2xkQ2FsbEZyYW1lLCBzdGFja0ZyYW1lLmdsb2JhbERhdGEsIHN0
YWNrRnJhbWUuYXJnc1sxXS5yZXR1cm5BZGRyZXNzKCksIFNUVUJfUkVUVVJOX0FERFJFU1MpOwor
ICAgICAgICAgICAgUkVUVVJOX1BPSU5URVJfUEFJUigwLCAwKTsKKyAgICAgICAgfQorCisgICAg
ICAgIFJlZ2lzdGVyKiBhcmd2ID0gciAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZSAtIG9taXR0ZWRBcmdDb3VudDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbWl0
dGVkQXJnQ291bnQ7ICsraSkKKyAgICAgICAgICAgIGFyZ3ZbaV0gPSBqc1VuZGVmaW5lZCgpOwor
CisgICAgICAgIGNhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3JlYXRlKHIpOworICAgICAgICBjYWxs
RnJhbWUtPnNldENhbGxlckZyYW1lKG9sZENhbGxGcmFtZSk7CisgICAgfQorCisgICAgUkVUVVJO
X1BPSU5URVJfUEFJUihjYWxsZWUsIGNhbGxGcmFtZSk7Cit9CisKK0RFRklORV9TVFVCX0ZVTkNU
SU9OKFZvaWRQdHJQYWlyLCBvcF9jb25zdHJ1Y3RfYXJpdHlDaGVjaykKK3sKKyAgICBTVFVCX0lO
SVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGFzRnVuY3Rp
b24oc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSk7CisgICAgQVNTRVJUKCFjYWxsZWUtPmlz
SG9zdEZ1bmN0aW9uKCkpOworICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmNhbGxlZS0+
anNFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEJ5dGVjb2RlRm9yQ29uc3RydWN0KCk7CiAgICAgaW50
IGFyZ0NvdW50ID0gc3RhY2tGcmFtZS5hcmdzWzJdLmludDMyKCk7CiAKICAgICBBU1NFUlQoYXJn
Q291bnQgIT0gbmV3Q29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpOwpAQCAtMTg0OCwxMSArMTkx
MywxMSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgdm1fbGF6eUxpbmtDCiAgICAgU1RV
Ql9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9
IGFzRnVuY3Rpb24oc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSk7CiAgICAgRXhlY3V0YWJs
ZUJhc2UqIGV4ZWN1dGFibGUgPSBjYWxsZWUtPmV4ZWN1dGFibGUoKTsKLSAgICBKSVRDb2RlJiBq
aXRDb2RlID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZSgpOworICAgIEpJVENvZGUmIGpp
dENvZGUgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOwogICAgIAogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKICAgICBpZiAoIWV4ZWN1dGFibGUtPmlzSG9zdEZ1
bmN0aW9uKCkpCi0gICAgICAgIGNvZGVCbG9jayA9ICZzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihleGVjdXRhYmxlKS0+Ynl0ZWNvZGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIGNhbGxl
ZS0+c2NvcGUoKS5ub2RlKCkpOworICAgICAgICBjb2RlQmxvY2sgPSAmc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmJ5dGVjb2RlRm9yQ2FsbChzdGFja0ZyYW1l
LmNhbGxGcmFtZSwgY2FsbGVlLT5zY29wZSgpLm5vZGUoKSk7CiAgICAgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8gPSAmc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVC
bG9jaygpLT5nZXRDYWxsTGlua0luZm8oc3RhY2tGcmFtZS5hcmdzWzFdLnJldHVybkFkZHJlc3Mo
KSk7CiAKICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKQEAgLTE4NjIsNiArMTky
NywyNiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgdm1fbGF6eUxpbmtDCiAKICAgICBy
ZXR1cm4gaml0Q29kZS5hZGRyZXNzRm9yQ2FsbCgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiB9CisK
K0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCB2bV9sYXp5TGlua0NvbnN0cnVjdCkKK3sKKyAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CisgICAgSlNGdW5jdGlvbiogY2Fs
bGVlID0gYXNGdW5jdGlvbihzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpKTsKKyAgICBFeGVj
dXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOworICAgIEpJVENv
ZGUmIGppdENvZGUgPSBleGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCk7
CisgICAgCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOworICAgIGlmICghZXhlY3V0YWJs
ZS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgY29kZUJsb2NrID0gJnN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5ieXRlY29kZUZvckNvbnN0cnVjdChzdGFj
a0ZyYW1lLmNhbGxGcmFtZSwgY2FsbGVlLT5zY29wZSgpLm5vZGUoKSk7CisgICAgQ2FsbExpbmtJ
bmZvKiBjYWxsTGlua0luZm8gPSAmc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNhbGxlckZyYW1lKCkt
PmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oc3RhY2tGcmFtZS5hcmdzWzFdLnJldHVybkFk
ZHJlc3MoKSk7CisKKyAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKKyAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CisgICAgZWxzZQorICAgICAgICBKSVQ6OmxpbmtDb25z
dHJ1Y3QoY2FsbGVlLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJs
b2NrKCksIGNvZGVCbG9jaywgaml0Q29kZSwgY2FsbExpbmtJbmZvLCBzdGFja0ZyYW1lLmFyZ3Nb
Ml0uaW50MzIoKSwgc3RhY2tGcmFtZS5nbG9iYWxEYXRhKTsKKworICAgIHJldHVybiBqaXRDb2Rl
LmFkZHJlc3NGb3JDYWxsKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKK30KICNlbmRpZiAvLyAhRU5B
QkxFKEpJVF9PUFRJTUlaRV9DQUxMKQogCiBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCos
IG9wX3B1c2hfYWN0aXZhdGlvbikKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA1
OTMzNSkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBA
IC03OCw3ICs3OCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0cnVjdCBUcmFtcG9saW5lU3Ry
dWN0dXJlIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVN0cmluZ0xlbmd0aFRy
YW1wb2xpbmU7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlWaXJ0dWFsQ2FsbExp
bms7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlWaXJ0dWFsQ29uc3RydWN0TGlu
azsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVZpcnR1YWxDYWxsOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpVmlydHVhbENvbnN0cnVjdDsKICAgICAgICAgUmVm
UHRyPE5hdGl2ZUV4ZWN1dGFibGU+IGN0aU5hdGl2ZUNhbGxUaHVuazsKICAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGN0aVNvZnRNb2R1bG87CiAgICAgfTsKQEAgLTI3NCw3ICsyNzYsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpU3Ry
aW5nTGVuZ3RoVHJhbXBvbGluZSgpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVyZS5jdGlT
dHJpbmdMZW5ndGhUcmFtcG9saW5lOyB9CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
dGlWaXJ0dWFsQ2FsbExpbmsoKSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpVmly
dHVhbENhbGxMaW5rOyB9CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlWaXJ0dWFs
Q29uc3RydWN0TGluaygpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVyZS5jdGlWaXJ0dWFs
Q29uc3RydWN0TGluazsgfQogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpVmlydHVh
bENhbGwoKSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpVmlydHVhbENhbGw7IH0K
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVZpcnR1YWxDb25zdHJ1Y3QoKSB7IHJl
dHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpVmlydHVhbENvbnN0cnVjdDsgfQogICAgICAg
ICBOYXRpdmVFeGVjdXRhYmxlKiBjdGlOYXRpdmVDYWxsVGh1bmsoKSB7IHJldHVybiBtX3RyYW1w
b2xpbmVTdHJ1Y3R1cmUuY3RpTmF0aXZlQ2FsbFRodW5rLmdldCgpOyB9CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjdGlTb2Z0TW9kdWxvKCkgeyByZXR1cm4gbV90cmFtcG9saW5lU3Ry
dWN0dXJlLmN0aVNvZnRNb2R1bG87IH0KIApAQCAtMzY0LDYgKzM2OCw3IEBAIGV4dGVybiAiQyIg
ewogICAgIEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fcmVh
bGxvYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3Iq
IEpJVF9TVFVCIGN0aV9vcF9nZXRfcG5hbWVzKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAg
Vm9pZFB0clBhaXIgSklUX1NUVUIgY3RpX29wX2NhbGxfYXJpdHlDaGVjayhTVFVCX0FSR1NfREVD
TEFSQVRJT04pOworICAgIFZvaWRQdHJQYWlyIEpJVF9TVFVCIGN0aV9vcF9jb25zdHJ1Y3RfYXJp
dHlDaGVjayhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIGludCBKSVRfU1RVQiBjdGlfb3Bf
ZXEoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBpbnQgSklUX1NUVUIgY3RpX29wX2VxX3N0
cmluZ3MoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBpbnQgSklUX1NUVUIgY3RpX29wX2ps
ZXNzKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CkBAIC0zOTMsMTEgKzM5OCwxMyBAQCBleHRlcm4g
IkMiIHsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF90ZWFyX29mZl9hY3RpdmF0aW9uKFNUVUJf
QVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGVhcl9vZmZfYXJn
dW1lbnRzKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfcmVn
aXN0ZXJfZmlsZV9jaGVjayhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwotICAgIHZvaWQqIEpJVF9T
VFVCIGN0aV9vcF9jYWxsX0pTRnVuY3Rpb24oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2
b2lkKiBKSVRfU1RVQiBjdGlfb3BfY2FsbF9qaXRDb21waWxlKFNUVUJfQVJHU19ERUNMQVJBVElP
Tik7CisgICAgdm9pZCogSklUX1NUVUIgY3RpX29wX2NvbnN0cnVjdF9qaXRDb21waWxlKFNUVUJf
QVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCogSklUX1NUVUIgY3RpX29wX3N3aXRjaF9jaGFy
KFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCogSklUX1NUVUIgY3RpX29wX3N3aXRj
aF9pbW0oU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkKiBKSVRfU1RVQiBjdGlfb3Bf
c3dpdGNoX3N0cmluZyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQqIEpJVF9TVFVC
IGN0aV92bV9sYXp5TGlua0NhbGwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkKiBK
SVRfU1RVQiBjdGlfdm1fbGF6eUxpbmtDb25zdHJ1Y3QoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsK
IH0gLy8gZXh0ZXJuICJDIgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkocmV2aXNpb24gNTkzMzUpCisrKyBKYXZhU2Ny
aXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAs
NyArMTMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFBhc3NSZWZQdHI8TmF0aXZlRXhl
Y3V0YWJsZT4gZmluYWxpemUoKQogICAgICAgICB7CiAgICAgICAgICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKHRoaXMsIG1fcG9vbC5nZXQoKSk7Ci0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKG1fZmFpbHVyZXMsIENvZGVMb2NhdGlvbkxhYmVsKG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMu
Y3RpTmF0aXZlQ2FsbFRodW5rKCktPmdlbmVyYXRlZEpJVENvZGUoKS5hZGRyZXNzRm9yQ2FsbCgp
KSk7CisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZmFpbHVyZXMsIENvZGVMb2NhdGlv
bkxhYmVsKG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMuY3RpTmF0aXZlQ2FsbFRodW5rKCktPmdlbmVy
YXRlZEpJVENvZGVGb3JDYWxsKCkuYWRkcmVzc0ZvckNhbGwoKSkpOwogICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBOYXRpdmVFeGVjdXRhYmxlKHBhdGNoQnVmZmVyLmZpbmFsaXplQ29k
ZSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1l
bnRzLmgJKHJldmlzaW9uIDU5MzM1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVu
dHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDggKzIyMCw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHsKICAgICAgICAgQVNTRVJUKCFkKCktPnJlZ2lzdGVyQXJyYXkpOwogCi0gICAgICAgIHNp
emVfdCBudW1QYXJhbWV0ZXJzTWludXNUaGlzID0gZCgpLT5mdW5jdGlvbkV4ZWN1dGFibGUtPmdl
bmVyYXRlZEJ5dGVjb2RlKCkubV9udW1QYXJhbWV0ZXJzIC0gMTsKLSAgICAgICAgc2l6ZV90IG51
bVZhcnMgPSBkKCktPmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGUoKS5tX251
bVZhcnM7CisgICAgICAgIHNpemVfdCBudW1QYXJhbWV0ZXJzTWludXNUaGlzID0gZCgpLT5mdW5j
dGlvbkV4ZWN1dGFibGUtPnBhcmFtZXRlckNvdW50KCk7CisgICAgICAgIHNpemVfdCBudW1WYXJz
ID0gZCgpLT5mdW5jdGlvbkV4ZWN1dGFibGUtPnZhcmlhYmxlQ291bnQoKTsKICAgICAgICAgc2l6
ZV90IG51bUxvY2FscyA9IG51bVZhcnMgKyBudW1QYXJhbWV0ZXJzTWludXNUaGlzOwogCiAgICAg
ICAgIGlmICghbnVtTG9jYWxzKQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVBy
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDU5MzM1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDEwICs3NiwxMCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1bmN0CiAjaWYgRU5BQkxFKEpJVCkKICAg
ICAvLyBJZiB0aGUgSklUIGlzIGVuYWJsZWQgdGhlbiB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBp
bnZhcmlhbnQgdGhhdCBldmVyeQogICAgIC8vIGZ1bmN0aW9uIHdpdGggYSBDb2RlQmxvY2sgYWxz
byBoYXMgSklUIGNvZGUuCi0gICAgY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5qaXRD
b2RlKGV4ZWMsIGNhbGxEYXRhLmpzLnNjb3BlQ2hhaW4pOwotICAgIENvZGVCbG9jayYgY29kZUJs
b2NrID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZSgp
OworICAgIGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+aml0Q29kZUZvckNhbGwoZXhl
YywgY2FsbERhdGEuanMuc2NvcGVDaGFpbik7CisgICAgQ29kZUJsb2NrJiBjb2RlQmxvY2sgPSBj
YWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVjb2RlRm9yQ2FsbCgp
OwogI2Vsc2UKLSAgICBDb2RlQmxvY2smIGNvZGVCbG9jayA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9u
RXhlY3V0YWJsZS0+Ynl0ZWNvZGUoZXhlYywgY2FsbERhdGEuanMuc2NvcGVDaGFpbik7CisgICAg
Q29kZUJsb2NrJiBjb2RlQmxvY2sgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmJ5
dGVjb2RlRm9yQ2FsbChleGVjLCBjYWxsRGF0YS5qcy5zY29wZUNoYWluKTsKICNlbmRpZgogCiAg
ICAgcmV0dXJuIGNvZGVCbG9jay5pc051bWVyaWNDb21wYXJlRnVuY3Rpb24oKTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gNTkzMzUpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3
ICs1Nyw4IEBAIFByb2dyYW1FeGVjdXRhYmxlOjp+UHJvZ3JhbUV4ZWN1dGFibGUoKQogCiBGdW5j
dGlvbkV4ZWN1dGFibGU6On5GdW5jdGlvbkV4ZWN1dGFibGUoKQogewotICAgIGRlbGV0ZSBtX2Nv
ZGVCbG9jazsKKyAgICBkZWxldGUgbV9jb2RlQmxvY2tGb3JDYWxsOworICAgIGRlbGV0ZSBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdDsKIH0KIAogSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21w
aWxlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQpAQCAt
MTEyLDcgKzExMyw3IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZShFeGUK
ICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGUoRXhl
Y1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQordm9pZCBGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluTm9kZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY29wZUNoYWlu
Tm9kZS0+Z2xvYmFsRGF0YTsKICAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGds
b2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZ2xvYmFsRGF0YSwgMCwg
MCwgbV9zb3VyY2UpOwpAQCAtMTI0LDEzICsxMjUsMzggQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNvbXBpbGUoRXhlY1N0YQogICAgIFNjb3BlQ2hhaW4gc2NvcGVDaGFpbihzY29wZUNoYWlu
Tm9kZSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW4uZ2xv
YmFsT2JqZWN0KCk7CiAKLSAgICBBU1NFUlQoIW1fY29kZUJsb2NrKTsKLSAgICBtX2NvZGVCbG9j
ayA9IG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUsIHNvdXJjZSgpLnBy
b3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCkpOwotICAgIE93blB0cjxCeXRlY29kZUdl
bmVyYXRvcj4gZ2VuZXJhdG9yKG5ldyBCeXRlY29kZUdlbmVyYXRvcihib2R5LmdldCgpLCBnbG9i
YWxPYmplY3QtPmRlYnVnZ2VyKCksIHNjb3BlQ2hhaW4sIG1fY29kZUJsb2NrLT5zeW1ib2xUYWJs
ZSgpLCBtX2NvZGVCbG9jaykpOwotICAgIGdlbmVyYXRvci0+Z2VuZXJhdGUoKTsKLSAgICBtX251
bVBhcmFtZXRlcnMgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzOwotICAgIEFTU0VSVCht
X251bVBhcmFtZXRlcnMpOwotICAgIG1fbnVtVmFyaWFibGVzID0gbV9jb2RlQmxvY2stPm1fbnVt
VmFyczsKKyAgICBBU1NFUlQoIW1fY29kZUJsb2NrRm9yQ2FsbCk7CisgICAgbV9jb2RlQmxvY2tG
b3JDYWxsID0gbmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgc291cmNl
KCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSwgZmFsc2UpOworICAgIE93blB0
cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKG5ldyBCeXRlY29kZUdlbmVyYXRvcihib2R5
LmdldCgpLCBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIHNjb3BlQ2hhaW4sIG1fY29kZUJsb2Nr
Rm9yQ2FsbC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDYWxsKSk7CisgICAgZ2VuZXJh
dG9yLT5nZW5lcmF0ZSgpOworICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBtX2NvZGVCbG9j
a0ZvckNhbGwtPm1fbnVtUGFyYW1ldGVyczsKKyAgICBBU1NFUlQobV9udW1QYXJhbWV0ZXJzRm9y
Q2FsbCk7CisgICAgbV9udW1WYXJpYWJsZXMgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPm1fbnVtVmFy
czsKKyAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1ib2xU
YWJsZSgpOworCisgICAgYm9keS0+ZGVzdHJveURhdGEoKTsKK30KKwordm9pZCBGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW5Ob2RlKQoreworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHNjb3Bl
Q2hhaW5Ob2RlLT5nbG9iYWxEYXRhOworICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBib2R5
ID0gZ2xvYmFsRGF0YS0+cGFyc2VyLT5wYXJzZTxGdW5jdGlvbkJvZHlOb2RlPihnbG9iYWxEYXRh
LCAwLCAwLCBtX3NvdXJjZSk7CisgICAgaWYgKG1fZm9yY2VVc2VzQXJndW1lbnRzKQorICAgICAg
ICBib2R5LT5zZXRVc2VzQXJndW1lbnRzKCk7CisgICAgYm9keS0+ZmluaXNoUGFyc2luZyhtX3Bh
cmFtZXRlcnMsIG1fbmFtZSk7CisgICAgcmVjb3JkUGFyc2UoYm9keS0+ZmVhdHVyZXMoKSwgYm9k
eS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkpOworCisgICAgU2NvcGVDaGFpbiBzY29wZUNo
YWluKHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
c2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKTsKKworICAgIEFTU0VSVCghbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QpOworICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gbmV3IEZ1bmN0aW9uQ29k
ZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCku
c3RhcnRPZmZzZXQoKSwgdHJ1ZSk7CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5l
cmF0b3IobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGJvZHkuZ2V0KCksIGdsb2JhbE9iamVjdC0+ZGVi
dWdnZXIoKSwgc2NvcGVDaGFpbiwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnN5bWJvbFRhYmxl
KCksIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KSk7CisgICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZSgp
OworICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9IG1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0LT5tX251bVBhcmFtZXRlcnM7CisgICAgQVNTRVJUKG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0
cnVjdCk7CisgICAgbV9udW1WYXJpYWJsZXMgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+bV9u
dW1WYXJzOworICAgIG1fc3ltYm9sVGFibGUgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c2hh
cmVkU3ltYm9sVGFibGUoKTsKIAogICAgIGJvZHktPmRlc3Ryb3lEYXRhKCk7CiB9CkBAIC0xNDAs
NyArMTY2LDcgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGUoRXhlY1N0YQogdm9p
ZCBFdmFsRXhlY3V0YWJsZTo6Z2VuZXJhdGVKSVRDb2RlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQogewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
JmJ5dGVjb2RlKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKLSAgICBtX2ppdENvZGUgPSBKSVQ6OmNv
bXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgbV9qaXRD
b2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgY29k
ZUJsb2NrKTsKIAogI2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgIGlmICghQnl0ZWNv
ZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJhdGVkQ29kZSgpKQpAQCAtMTUxLDcgKzE3Nyw3IEBAIHZv
aWQgRXZhbEV4ZWN1dGFibGU6OmdlbmVyYXRlSklUQ29kZShFeGUKIHZvaWQgUHJvZ3JhbUV4ZWN1
dGFibGU6OmdlbmVyYXRlSklUQ29kZShFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBz
Y29wZUNoYWluTm9kZSkKIHsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZieXRlY29kZShl
eGVjLCBzY29wZUNoYWluTm9kZSk7Ci0gICAgbV9qaXRDb2RlID0gSklUOjpjb21waWxlKHNjb3Bl
Q2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgIG1faml0Q29kZUZvckNhbGwg
PSBKSVQ6OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIGNvZGVCbG9jayk7CiAK
ICNpZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9y
OjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKQEAgLTE1OSwxMCArMTg1LDIxIEBAIHZvaWQgUHJvZ3Jh
bUV4ZWN1dGFibGU6OmdlbmVyYXRlSklUQ29kZSgKICNlbmRpZgogfQogCi12b2lkIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Z2VuZXJhdGVKSVRDb2RlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5v
ZGUqIHNjb3BlQ2hhaW5Ob2RlKQordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmdlbmVyYXRlSklU
Q29kZUZvckNhbGwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5v
ZGUpCiB7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmYnl0ZWNvZGUoZXhlYywgc2NvcGVD
aGFpbk5vZGUpOwotICAgIG1faml0Q29kZSA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+
Z2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZieXRl
Y29kZUZvckNhbGwoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgIG1faml0Q29kZUZvckNhbGwg
PSBKSVQ6OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisK
KyNpZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9y
OjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKKyAgICAgICAgY29kZUJsb2NrLT5kaXNjYXJkQnl0ZWNv
ZGUoKTsKKyNlbmRpZgorfQorCit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Z2VuZXJhdGVKSVRD
b2RlRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW5Ob2RlKQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gJmJ5dGVjb2RlRm9yQ29uc3Ry
dWN0KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBK
SVQ6OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIGNvZGVCbG9jayk7CiAKICNp
ZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpk
dW1wc0dlbmVyYXRlZENvZGUoKSkKQEAgLTE3NCw4ICsyMTEsMTAgQEAgdm9pZCBGdW5jdGlvbkV4
ZWN1dGFibGU6OmdlbmVyYXRlSklUQ29kZQogCiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6bWFy
a0FnZ3JlZ2F0ZShNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKLSAgICBpZiAobV9jb2RlQmxvY2sp
Ci0gICAgICAgIG1fY29kZUJsb2NrLT5tYXJrQWdncmVnYXRlKG1hcmtTdGFjayk7CisgICAgaWYg
KG1fY29kZUJsb2NrRm9yQ2FsbCkKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5tYXJrQWdn
cmVnYXRlKG1hcmtTdGFjayk7CisgICAgaWYgKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KQorICAg
ICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwog
fQogCiBFeGNlcHRpb25JbmZvKiBGdW5jdGlvbkV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRpb25J
bmZvKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5O
b2RlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKQEAgLTE4OCw3ICsyMjcsNyBAQCBFeGNlcHRpb25J
bmZvKiBGdW5jdGlvbkV4ZWN1dGFibGU6OnJlcGFyCiAgICAgU2NvcGVDaGFpbiBzY29wZUNoYWlu
KHNjb3BlQ2hhaW5Ob2RlKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2Nv
cGVDaGFpbi5nbG9iYWxPYmplY3QoKTsKIAotICAgIE93blB0cjxDb2RlQmxvY2s+IG5ld0NvZGVC
bG9jayhuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBzb3VyY2UoKS5w
cm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpKSk7CisgICAgT3duUHRyPENvZGVCbG9j
az4gbmV3Q29kZUJsb2NrKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUs
IHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCksIGNvZGVCbG9jay0+
bV9pc0NvbnN0cnVjdG9yKSk7CiAgICAgZ2xvYmFsRGF0YS0+ZnVuY3Rpb25Db2RlQmxvY2tCZWlu
Z1JlcGFyc2VkID0gbmV3Q29kZUJsb2NrLmdldCgpOwogCiAgICAgT3duUHRyPEJ5dGVjb2RlR2Vu
ZXJhdG9yPiBnZW5lcmF0b3IobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKG5ld0Z1bmN0aW9uQm9keS5n
ZXQoKSwgZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBzY29wZUNoYWluLCBuZXdDb2RlQmxvY2st
PnN5bWJvbFRhYmxlKCksIG5ld0NvZGVCbG9jay5nZXQoKSkpOwpAQCAtMTk5LDcgKzIzOCw3IEBA
IEV4Y2VwdGlvbkluZm8qIEZ1bmN0aW9uRXhlY3V0YWJsZTo6cmVwYXIKIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgSklUQ29kZSBuZXdKSVRDb2RlID0gSklUOjpjb21waWxlKGdsb2JhbERhdGEsIG5l
d0NvZGVCbG9jay5nZXQoKSk7Ci0gICAgQVNTRVJUKG5ld0pJVENvZGUuc2l6ZSgpID09IGdlbmVy
YXRlZEpJVENvZGUoKS5zaXplKCkpOworICAgIEFTU0VSVChjb2RlQmxvY2stPm1faXNDb25zdHJ1
Y3RvciA/IG5ld0pJVENvZGUuc2l6ZSgpID09IGdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3Qo
KS5zaXplKCkgOiBuZXdKSVRDb2RlLnNpemUoKSA9PSBnZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgp
LnNpemUoKSk7CiAjZW5kaWYKIAogICAgIGdsb2JhbERhdGEtPmZ1bmN0aW9uQ29kZUJsb2NrQmVp
bmdSZXBhcnNlZCA9IDA7CkBAIC0yMjQsNyArMjYzLDcgQEAgRXhjZXB0aW9uSW5mbyogRXZhbEV4
ZWN1dGFibGU6OnJlcGFyc2VFeAogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBKSVRDb2RlIG5ld0pJ
VENvZGUgPSBKSVQ6OmNvbXBpbGUoZ2xvYmFsRGF0YSwgbmV3Q29kZUJsb2NrLmdldCgpKTsKLSAg
ICBBU1NFUlQobmV3SklUQ29kZS5zaXplKCkgPT0gZ2VuZXJhdGVkSklUQ29kZSgpLnNpemUoKSk7
CisgICAgQVNTRVJUKG5ld0pJVENvZGUuc2l6ZSgpID09IGdlbmVyYXRlZEpJVENvZGVGb3JDYWxs
KCkuc2l6ZSgpKTsKICNlbmRpZgogCiAgICAgcmV0dXJuIG5ld0NvZGVCbG9jay0+ZXh0cmFjdEV4
Y2VwdGlvbkluZm8oKTsKQEAgLTIzMiwxMSArMjcxLDE1IEBAIEV4Y2VwdGlvbkluZm8qIEV2YWxF
eGVjdXRhYmxlOjpyZXBhcnNlRXgKIAogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnJlY29tcGls
ZShFeGVjU3RhdGUqKQogewotICAgIGRlbGV0ZSBtX2NvZGVCbG9jazsKLSAgICBtX2NvZGVCbG9j
ayA9IDA7Ci0gICAgbV9udW1QYXJhbWV0ZXJzID0gTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVE
OworICAgIGRlbGV0ZSBtX2NvZGVCbG9ja0ZvckNhbGw7CisgICAgbV9jb2RlQmxvY2tGb3JDYWxs
ID0gMDsKKyAgICBkZWxldGUgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CisgICAgbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QgPSAwOworICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBOVU1fUEFS
QU1FVEVSU19OT1RfQ09NUElMRUQ7CisgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0g
TlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOwogI2lmIEVOQUJMRShKSVQpCi0gICAgbV9qaXRD
b2RlID0gSklUQ29kZSgpOworICAgIG1faml0Q29kZUZvckNhbGwgPSBKSVRDb2RlKCk7CisgICAg
bV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gSklUQ29kZSgpOwogI2VuZGlmCiB9CiAKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA1OTMzNSkKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBEZWJ1
Z2dlcjsKICAgICBjbGFzcyBFdmFsQ29kZUJsb2NrOworICAgIGNsYXNzIEZ1bmN0aW9uQ29kZUJs
b2NrOwogICAgIGNsYXNzIFByb2dyYW1Db2RlQmxvY2s7CiAgICAgY2xhc3MgU2NvcGVDaGFpbk5v
ZGU7CiAKQEAgLTUwLDMyICs1MSw0MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAKICAgICBwdWJs
aWM6CiAgICAgICAgIEV4ZWN1dGFibGVCYXNlKGludCBudW1QYXJhbWV0ZXJzKQotICAgICAgICAg
ICAgOiBtX251bVBhcmFtZXRlcnMobnVtUGFyYW1ldGVycykKKyAgICAgICAgICAgIDogbV9udW1Q
YXJhbWV0ZXJzRm9yQ2FsbChudW1QYXJhbWV0ZXJzKQorICAgICAgICAgICAgLCBtX251bVBhcmFt
ZXRlcnNGb3JDb25zdHJ1Y3QobnVtUGFyYW1ldGVycykKICAgICAgICAgewogICAgICAgICB9CiAK
ICAgICAgICAgdmlydHVhbCB+RXhlY3V0YWJsZUJhc2UoKSB7fQogCi0gICAgICAgIGJvb2wgaXNI
b3N0RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX251bVBhcmFtZXRlcnMgPT0gTlVNX1BBUkFN
RVRFUlNfSVNfSE9TVDsgfQorICAgICAgICBib29sIGlzSG9zdEZ1bmN0aW9uKCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUKChtX251bVBhcmFtZXRlcnNGb3JDYWxsID09IE5V
TV9QQVJBTUVURVJTX0lTX0hPU1QpID09IChtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3QgPT0g
TlVNX1BBUkFNRVRFUlNfSVNfSE9TVCkpOworICAgICAgICAgICAgcmV0dXJuIG1fbnVtUGFyYW1l
dGVyc0ZvckNhbGwgPT0gTlVNX1BBUkFNRVRFUlNfSVNfSE9TVDsKKyAgICAgICAgfQogCiAgICAg
cHJvdGVjdGVkOgotICAgICAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOworICAgICAgICBpbnQgbV9u
dW1QYXJhbWV0ZXJzRm9yQ2FsbDsKKyAgICAgICAgaW50IG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0
cnVjdDsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgcHVibGljOgotICAgICAgICBKSVRDb2RlJiBn
ZW5lcmF0ZWRKSVRDb2RlKCkKKyAgICAgICAgSklUQ29kZSYgZ2VuZXJhdGVkSklUQ29kZUZvckNh
bGwoKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlKTsKLSAgICAgICAg
ICAgIHJldHVybiBtX2ppdENvZGU7CisgICAgICAgICAgICBBU1NFUlQobV9qaXRDb2RlRm9yQ2Fs
bCk7CisgICAgICAgICAgICByZXR1cm4gbV9qaXRDb2RlRm9yQ2FsbDsKICAgICAgICAgfQogCi0g
ICAgICAgIEV4ZWN1dGFibGVQb29sKiBnZXRFeGVjdXRhYmxlUG9vbCgpCisgICAgICAgIEpJVENv
ZGUmIGdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3QoKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gbV9qaXRDb2RlLmdldEV4ZWN1dGFibGVQb29sKCk7CisgICAgICAgICAgICBBU1NF
UlQobV9qaXRDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAgIHJldHVybiBtX2ppdENvZGVG
b3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgSklUQ29k
ZSBtX2ppdENvZGU7CisgICAgICAgIEpJVENvZGUgbV9qaXRDb2RlRm9yQ2FsbDsKKyAgICAgICAg
SklUQ29kZSBtX2ppdENvZGVGb3JDb25zdHJ1Y3Q7CiAjZW5kaWYKICAgICB9OwogCkBAIC04NSwx
MiArOTQsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUoRXhl
Y1N0YXRlKiBleGVjKQogICAgICAgICAgICAgOiBFeGVjdXRhYmxlQmFzZShOVU1fUEFSQU1FVEVS
U19JU19IT1NUKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2ppdENvZGUgPSBleGVjLT5nbG9i
YWxEYXRhKCkuaml0U3R1YnMuY3RpTmF0aXZlQ2FsbFRodW5rKCktPm1faml0Q29kZTsKKyAgICAg
ICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBleGVjLT5nbG9iYWxEYXRhKCkuaml0U3R1YnMuY3Rp
TmF0aXZlQ2FsbFRodW5rKCktPm1faml0Q29kZUZvckNhbGw7CisgICAgICAgICAgICBtX2ppdENv
ZGVGb3JDb25zdHJ1Y3QgPSBleGVjLT5nbG9iYWxEYXRhKCkuaml0U3R1YnMuY3RpTmF0aXZlQ2Fs
bFRodW5rKCktPm1faml0Q29kZUZvckNhbGw7IC8vIEZJWE1FOiB0aGlzIHRodW5rIHNob3VsZCBo
YXZlIGEgY29uc3RydWN0IGZvcm0KICAgICAgICAgfQogICAgICAgICBOYXRpdmVFeGVjdXRhYmxl
KEpJVENvZGUgdGh1bmspCiAgICAgICAgICAgICA6IEV4ZWN1dGFibGVCYXNlKE5VTV9QQVJBTUVU
RVJTX0lTX0hPU1QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1faml0Q29kZSA9IHRodW5rOwor
ICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IHRodW5rOworICAgICAgICAgICAgbV9qaXRD
b2RlRm9yQ29uc3RydWN0ID0gdGh1bms7CiAgICAgICAgIH0KIAogICAgICAgICB+TmF0aXZlRXhl
Y3V0YWJsZSgpOwpAQCAtMTkyLDkgKzIwMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1Ymxp
YzoKICAgICAgICAgSklUQ29kZSYgaml0Q29kZShFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluTm9kZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX2ppdENv
ZGUpCisgICAgICAgICAgICBpZiAoIW1faml0Q29kZUZvckNhbGwpCiAgICAgICAgICAgICAgICAg
Z2VuZXJhdGVKSVRDb2RlKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKLSAgICAgICAgICAgIHJldHVy
biBtX2ppdENvZGU7CisgICAgICAgICAgICByZXR1cm4gbV9qaXRDb2RlRm9yQ2FsbDsKICAgICAg
ICAgfQogCiAgICAgcHJpdmF0ZToKQEAgLTIzOCw5ICsyNDksOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIEpJVENvZGUmIGppdENvZGUoRXhlY1N0YXRlKiBleGVjLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICghbV9qaXRDb2RlKQorICAgICAgICAgICAgaWYgKCFtX2ppdENvZGVGb3JDYWxsKQogICAgICAg
ICAgICAgICAgIGdlbmVyYXRlSklUQ29kZShleGVjLCBzY29wZUNoYWluTm9kZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbV9qaXRDb2RlOworICAgICAgICAgICAgcmV0dXJuIG1faml0Q29kZUZvckNh
bGw7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CkBAIC0yNjgsMjkgKzI3OSw0OSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhl
YywgdGhpcywgc2NvcGVDaGFpbik7CiAgICAgICAgIH0KIAotICAgICAgICBDb2RlQmxvY2smIGJ5
dGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKSAK
KyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2smIGJ5dGVjb2RlRm9yQ2FsbChFeGVjU3RhdGUqIGV4
ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkgCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICBpZiAoIW1fY29kZUJsb2Nr
Rm9yQ2FsbCkKKyAgICAgICAgICAgICAgICBjb21waWxlRm9yQ2FsbChleGVjLCBzY29wZUNoYWlu
Tm9kZSk7CisgICAgICAgICAgICByZXR1cm4gKm1fY29kZUJsb2NrRm9yQ2FsbDsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDYWxsKCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ2FsbDsKKyAgICAgICAgfQorCisgICAg
ICAgIEZ1bmN0aW9uQ29kZUJsb2NrJiBnZW5lcmF0ZWRCeXRlY29kZUZvckNhbGwoKQorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2tGb3JDYWxsKTsKKyAgICAgICAgICAg
IHJldHVybiAqbV9jb2RlQmxvY2tGb3JDYWxsOworICAgICAgICB9CisKKyAgICAgICAgRnVuY3Rp
b25Db2RlQmxvY2smIGJ5dGVjb2RlRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKSAKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJU
KHNjb3BlQ2hhaW5Ob2RlKTsKLSAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2spCi0gICAgICAg
ICAgICAgICAgY29tcGlsZShleGVjLCBzY29wZUNoYWluTm9kZSk7Ci0gICAgICAgICAgICByZXR1
cm4gKm1fY29kZUJsb2NrOworICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dCkKKyAgICAgICAgICAgICAgICBjb21waWxlRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlQ2hhaW5O
b2RlKTsKKyAgICAgICAgICAgIHJldHVybiAqbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAg
ICAgIH0KIAotICAgICAgICBib29sIGlzR2VuZXJhdGVkKCkgY29uc3QKKyAgICAgICAgYm9vbCBp
c0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBtX2NvZGVCbG9jazsKKyAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdDsKICAgICAgICAgfQogCi0gICAgICAgIENvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUo
KQorICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGVGb3JDb25zdHJ1
Y3QoKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2spOwotICAgICAg
ICAgICAgcmV0dXJuICptX2NvZGVCbG9jazsKKyAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdCk7CisgICAgICAgICAgICByZXR1cm4gKm1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0OwogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSgpIHsgcmV0
dXJuIG1fbmFtZTsgfQogICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmFtZXRlcnMtPnNpemUoKTsgfQogICAgICAgICBzaXplX3QgdmFyaWFibGVDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtVmFyaWFibGVzOyB9CiAgICAgICAgIFVTdHJpbmcgcGFy
YW1TdHJpbmcoKSBjb25zdDsKKyAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9zeW1ib2xUYWJsZTsgfQogCiAgICAgICAgIHZvaWQgcmVjb21w
aWxlKEV4ZWNTdGF0ZSopOwogICAgICAgICBFeGNlcHRpb25JbmZvKiByZXBhcnNlRXhjZXB0aW9u
SW5mbyhKU0dsb2JhbERhdGEqLCBTY29wZUNoYWluTm9kZSosIENvZGVCbG9jayopOwpAQCAtMzAy
LDkgKzMzMywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIDogU2NyaXB0RXhlY3V0
YWJsZShnbG9iYWxEYXRhLCBzb3VyY2UpCiAgICAgICAgICAgICAsIG1fZm9yY2VVc2VzQXJndW1l
bnRzKGZvcmNlVXNlc0FyZ3VtZW50cykKICAgICAgICAgICAgICwgbV9wYXJhbWV0ZXJzKHBhcmFt
ZXRlcnMpCi0gICAgICAgICAgICAsIG1fY29kZUJsb2NrKDApCisgICAgICAgICAgICAsIG1fY29k
ZUJsb2NrRm9yQ2FsbCgwKQorICAgICAgICAgICAgLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCgw
KQogICAgICAgICAgICAgLCBtX25hbWUobmFtZSkKICAgICAgICAgICAgICwgbV9udW1WYXJpYWJs
ZXMoMCkKKyAgICAgICAgICAgICwgbV9zeW1ib2xUYWJsZSgwKQogICAgICAgICB7CiAgICAgICAg
ICAgICBtX2ZpcnN0TGluZSA9IGZpcnN0TGluZTsKICAgICAgICAgICAgIG1fbGFzdExpbmUgPSBs
YXN0TGluZTsKQEAgLTMxNCwzMyArMzQ3LDQ2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgOiBTY3JpcHRFeGVjdXRhYmxlKGV4ZWMsIHNvdXJjZSkKICAgICAgICAgICAgICwgbV9mb3Jj
ZVVzZXNBcmd1bWVudHMoZm9yY2VVc2VzQXJndW1lbnRzKQogICAgICAgICAgICAgLCBtX3BhcmFt
ZXRlcnMocGFyYW1ldGVycykKLSAgICAgICAgICAgICwgbV9jb2RlQmxvY2soMCkKKyAgICAgICAg
ICAgICwgbV9jb2RlQmxvY2tGb3JDYWxsKDApCisgICAgICAgICAgICAsIG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0KDApCiAgICAgICAgICAgICAsIG1fbmFtZShuYW1lKQogICAgICAgICAgICAgLCBt
X251bVZhcmlhYmxlcygwKQorICAgICAgICAgICAgLCBtX3N5bWJvbFRhYmxlKDApCiAgICAgICAg
IHsKICAgICAgICAgICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOwogICAgICAgICAgICAgbV9s
YXN0TGluZSA9IGxhc3RMaW5lOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBjb21waWxlKEV4
ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZvaWQgY29tcGlsZUZvckNhbGwo
RXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgdm9pZCBjb21waWxlRm9yQ29u
c3RydWN0KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAKICAgICAgICAgYm9vbCBtX2Zv
cmNlVXNlc0FyZ3VtZW50czsKICAgICAgICAgUmVmUHRyPEZ1bmN0aW9uUGFyYW1ldGVycz4gbV9w
YXJhbWV0ZXJzOwotICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgICAgICBGdW5j
dGlvbkNvZGVCbG9jayogbV9jb2RlQmxvY2tGb3JDYWxsOworICAgICAgICBGdW5jdGlvbkNvZGVC
bG9jayogbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIElkZW50aWZpZXIgbV9uYW1l
OwogICAgICAgICBzaXplX3QgbV9udW1WYXJpYWJsZXM7CisgICAgICAgIFNoYXJlZFN5bWJvbFRh
YmxlKiBtX3N5bWJvbFRhYmxlOwogCiAjaWYgRU5BQkxFKEpJVCkKICAgICBwdWJsaWM6Ci0gICAg
ICAgIEpJVENvZGUmIGppdENvZGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbk5vZGUpCisgICAgICAgIEpJVENvZGUmIGppdENvZGVGb3JDYWxsKEV4ZWNTdGF0ZSog
ZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoIW1faml0Q29kZSkKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZUpJVENvZGUoZXhl
Yywgc2NvcGVDaGFpbk5vZGUpOwotICAgICAgICAgICAgcmV0dXJuIG1faml0Q29kZTsKKyAgICAg
ICAgICAgIGlmICghbV9qaXRDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZUpJ
VENvZGVGb3JDYWxsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICAgICAgICAgIHJldHVybiBt
X2ppdENvZGVGb3JDYWxsOworICAgICAgICB9CisKKyAgICAgICAgSklUQ29kZSYgaml0Q29kZUZv
ckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9k
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2ppdENvZGVGb3JDb25zdHJ1Y3QpCisg
ICAgICAgICAgICAgICAgZ2VuZXJhdGVKSVRDb2RlRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlQ2hh
aW5Ob2RlKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ppdENvZGVGb3JDb25zdHJ1Y3Q7CiAgICAg
ICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgZ2VuZXJhdGVKSVRDb2RlKEV4ZWNT
dGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZvaWQgZ2VuZXJhdGVKSVRDb2RlRm9y
Q2FsbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2b2lkIGdlbmVyYXRl
SklUQ29kZUZvckNvbnN0cnVjdChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwogI2VuZGlm
CiAgICAgfTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCShyZXZp
c2lvbiA1OTMzNSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTczLDEyICs3MywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2
YXRlOgogICAgICAgICBzdHJ1Y3QgSlNBY3RpdmF0aW9uRGF0YSA6IHB1YmxpYyBKU1ZhcmlhYmxl
T2JqZWN0RGF0YSB7CiAgICAgICAgICAgICBKU0FjdGl2YXRpb25EYXRhKE5vbk51bGxQYXNzUmVm
UHRyPEZ1bmN0aW9uRXhlY3V0YWJsZT4gX2Z1bmN0aW9uRXhlY3V0YWJsZSwgUmVnaXN0ZXIqIHJl
Z2lzdGVycykKLSAgICAgICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3REYXRhKF9mdW5jdGlv
bkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVjb2RlKCkuc3ltYm9sVGFibGUoKSwgcmVnaXN0ZXJz
KQorICAgICAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdERhdGEoX2Z1bmN0aW9uRXhlY3V0
YWJsZS0+c3ltYm9sVGFibGUoKSwgcmVnaXN0ZXJzKQogICAgICAgICAgICAgICAgICwgZnVuY3Rp
b25FeGVjdXRhYmxlKF9mdW5jdGlvbkV4ZWN1dGFibGUpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgLy8gV2UgaGF2ZSB0byBtYW51YWxseSByZWYgYW5kIGRlcmVmIHRoZSBzeW1ib2wg
dGFibGUgYXMgSlNWYXJpYWJsZU9iamVjdERhdGEKICAgICAgICAgICAgICAgICAvLyBkb2Vzbid0
IGtub3cgYWJvdXQgU2hhcmVkU3ltYm9sVGFibGUKLSAgICAgICAgICAgICAgICBmdW5jdGlvbkV4
ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVjb2RlKCkuc2hhcmVkU3ltYm9sVGFibGUoKS0+cmVmKCk7
CisgICAgICAgICAgICAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5zeW1ib2xUYWJsZSgpLT5yZWYo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH5KU0FjdGl2YXRpb25EYXRhKCkKICAgICAg
ICAgICAgIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNp
b24gNTkzMzUpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDYsOCArMTA2LDEwIEBAIEpTRnVuY3Rpb246On5KU0Z1bmN0aW9uKCkK
ICAgICBpZiAoIWlzSG9zdEZ1bmN0aW9uKCkpIHsKICNpZiBFTkFCTEUoSklUX09QVElNSVpFX0NB
TEwpCiAgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGUpOwotICAgICAgICBpZiAoanNFeGVjdXRh
YmxlKCktPmlzR2VuZXJhdGVkKCkpCi0gICAgICAgICAgICBqc0V4ZWN1dGFibGUoKS0+Z2VuZXJh
dGVkQnl0ZWNvZGUoKS51bmxpbmtDYWxsZXJzKCk7CisgICAgICAgIGlmIChqc0V4ZWN1dGFibGUo
KS0+aXNHZW5lcmF0ZWRGb3JDYWxsKCkpCisgICAgICAgICAgICBqc0V4ZWN1dGFibGUoKS0+Z2Vu
ZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCkudW5saW5rQ2FsbGVycygpOworICAgICAgICBpZiAoanNF
eGVjdXRhYmxlKCktPmlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkpCisgICAgICAgICAgICBqc0V4
ZWN1dGFibGUoKS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDb25zdHJ1Y3QoKS51bmxpbmtDYWxsZXJz
KCk7CiAjZW5kaWYKICAgICAgICAgc2NvcGVDaGFpbigpLn5TY29wZUNoYWluKCk7IC8vIEZJWE1F
OiBEb24ndCB3ZSBuZWVkIHRvIGRvIHRoaXMgaW4gdGhlIGludGVycHJldGVyIHRvbz8KICAgICB9
CkBAIC0xMzYsNyArMTM4LDcgQEAgQ2FsbFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoQ2Fs
bERhdAogSlNWYWx1ZSBKU0Z1bmN0aW9uOjpjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQVNTRVJUKCFpc0hvc3RGdW5j
dGlvbigpKTsKLSAgICByZXR1cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZShqc0V4ZWN1
dGFibGUoKSwgZXhlYywgdGhpcywgdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKSwgYXJncywg
c2NvcGVDaGFpbigpLm5vZGUoKSwgZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKTsKKyAgICByZXR1cm4g
ZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZUNhbGwoanNFeGVjdXRhYmxlKCksIGV4ZWMsIHRo
aXMsIHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyksIGFyZ3MsIHNjb3BlQ2hhaW4oKS5ub2Rl
KCksIGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSk7CiB9CiAKIEpTVmFsdWUgSlNGdW5jdGlvbjo6YXJn
dW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRl
bnRpZmllciYpCkBAIC0yNzcsNyArMjc5LDcgQEAgSlNPYmplY3QqIEpTRnVuY3Rpb246OmNvbnN0
cnVjdChFeGVjU3RhdAogICAgICAgICBzdHJ1Y3R1cmUgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPmVtcHR5T2JqZWN0U3RydWN0dXJlKCk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBu
ZXcgKGV4ZWMpIEpTT2JqZWN0KHN0cnVjdHVyZSk7CiAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGV4
ZWMtPmludGVycHJldGVyKCktPmV4ZWN1dGUoanNFeGVjdXRhYmxlKCksIGV4ZWMsIHRoaXMsIHRo
aXNPYmosIGFyZ3MsIHNjb3BlQ2hhaW4oKS5ub2RlKCksIGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlQ29uc3Ry
dWN0KGpzRXhlY3V0YWJsZSgpLCBleGVjLCB0aGlzLCB0aGlzT2JqLCBhcmdzLCBzY29wZUNoYWlu
KCkubm9kZSgpLCBleGVjLT5leGNlcHRpb25TbG90KCkpOwogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSB8fCAhcmVzdWx0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aGlzT2JqOwog
ICAgIHJldHVybiBhc09iamVjdChyZXN1bHQpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gNTkzMzUpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Niw3ICsyNDYsNyBAQCBj
b25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBKU0dsb2JhbERhdGE6CiAgICAgaWYgKCFsYXp5TnVt
ZXJpY0NvbXBhcmVGdW5jdGlvbi5zaXplKCkgJiYgIWluaXRpYWxpemluZ0xhenlOdW1lcmljQ29t
cGFyZUZ1bmN0aW9uKSB7CiAgICAgICAgIGluaXRpYWxpemluZ0xhenlOdW1lcmljQ29tcGFyZUZ1
bmN0aW9uID0gdHJ1ZTsKICAgICAgICAgUmVmUHRyPEZ1bmN0aW9uRXhlY3V0YWJsZT4gZnVuY3Rp
b24gPSBGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2RlKElkZW50aWZpZXIoZXhlYywg
Im51bWVyaWNDb21wYXJlIiksIGV4ZWMsIDAsIG1ha2VTb3VyY2UoVVN0cmluZygiKGZ1bmN0aW9u
ICh2MSwgdjIpIHsgcmV0dXJuIHYxIC0gdjI7IH0pIikpLCAwLCAwKTsKLSAgICAgICAgbGF6eU51
bWVyaWNDb21wYXJlRnVuY3Rpb24gPSBmdW5jdGlvbi0+Ynl0ZWNvZGUoZXhlYywgZXhlYy0+c2Nv
cGVDaGFpbigpKS5pbnN0cnVjdGlvbnMoKTsKKyAgICAgICAgbGF6eU51bWVyaWNDb21wYXJlRnVu
Y3Rpb24gPSBmdW5jdGlvbi0+Ynl0ZWNvZGVGb3JDYWxsKGV4ZWMsIGV4ZWMtPnNjb3BlQ2hhaW4o
KSkuaW5zdHJ1Y3Rpb25zKCk7CiAgICAgICAgIGluaXRpYWxpemluZ0xhenlOdW1lcmljQ29tcGFy
ZUZ1bmN0aW9uID0gZmFsc2U7CiAgICAgfQogCg==
</data>
<flag name="review"
          id="40242"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>