<?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>26857</bug_id>
          
          <creation_ts>2009-06-30 13:42:22 -0700</creation_ts>
          <short_desc>[Chromium] Upstream V8Binding</short_desc>
          <delta_ts>2009-07-07 14:09:50 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>129151</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-06-30 13:42:22 -0700</bug_when>
    <thetext>See summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129152</commentid>
    <comment_count>1</comment_count>
      <attachid>32090</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-06-30 13:51:25 -0700</bug_when>
    <thetext>Created attachment 32090
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129181</commentid>
    <comment_count>2</comment_count>
      <attachid>32090</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-30 14:41:57 -0700</bug_when>
    <thetext>Comment on attachment 32090
patch

Seems strange that valueToStringWithNullOrUndefinedCheck is the odd-man out here.  All the rest are toWebCoreString() instead of valueTo*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129239</commentid>
    <comment_count>3</comment_count>
      <attachid>32090</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-30 19:45:31 -0700</bug_when>
    <thetext>Comment on attachment 32090
patch

Clearing the flag, Nate&apos;s working on a bigger/better naming convention. Oh, and it&apos;s also faster. Because obviously fastness is important.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129316</commentid>
    <comment_count>4</comment_count>
      <attachid>32130</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-07-01 11:12:10 -0700</bug_when>
    <thetext>Created attachment 32130
patch2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129415</commentid>
    <comment_count>5</comment_count>
      <attachid>32159</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-07-01 16:44:47 -0700</bug_when>
    <thetext>Created attachment 32159
patch3

Forgot to edit CodeGeneratorV8.pm upstream in previous patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129461</commentid>
    <comment_count>6</comment_count>
      <attachid>32159</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-01 22:46:40 -0700</bug_when>
    <thetext>Comment on attachment 32159
patch3

A few things to address.


&gt; Index: WebCore/bindings/v8/V8Binding.cpp
&gt; +class WebCoreStringResource: public v8::String::ExternalStringResource {

Add a space after WebCoreStringResource.

&gt; +public:
&gt; +    explicit WebCoreStringResource(const String&amp; string)
&gt; +        : m_impl(string.impl()) { }

The { } should go on separate lines at this point.

&gt; +
&gt; +    virtual ~WebCoreStringResource() {}

Add space in {}


&gt; +String v8StringToWebCoreString(v8::Handle&lt;v8::String&gt; v8String, bool externalize)
&gt; +{
&gt; +    WebCoreStringResource* stringResource = static_cast&lt;WebCoreStringResource*&gt;(v8String-&gt;GetExternalStringResource());
&gt; +    if (stringResource)
&gt; +        return stringResource-&gt;webcoreString();
&gt; +
&gt; +    int length = v8String-&gt;Length();
&gt; +    if (length == 0) {

Comparison to 0.


&gt; +String v8ValueToWebCoreString(v8::Handle&lt;v8::Value&gt; object)
&gt; +{
&gt; +    if (object-&gt;IsString()) {
&gt; +        v8::Handle&lt;v8::String&gt; v8String = v8::Handle&lt;v8::String&gt;::Cast(object);
&gt; +        String webCoreString = v8StringToWebCoreString(v8String, true);
&gt; +        return webCoreString;

This seems overly verbose plus it may inhibit return value optimization.

I&apos;d suggest just doing:
        return v8StringToWebCoreString(v8String, true);



&gt; +    } else if (object-&gt;IsInt32()) {
&gt; +        int value = object-&gt;Int32Value();
&gt; +        // Most numbers used are &lt;= 100. Even if they aren&apos;t used there&apos;s very little in using the space.
&gt; +        const int kLowNumbers = 100;
&gt; +        static AtomicString lowNumbers[kLowNumbers + 1];

Consider using DEFINE_STATIC_LOCAL



&gt; Property changes on: WebCore/bindings/v8/V8Binding.cpp
&gt; ___________________________________________________________________
&gt; Added: svn:executable
&gt;    + *

This should be fixed.



&gt; Index: WebCore/bindings/v8/V8Binding.h
&gt; +#include &quot;config.h&quot;

Don&apos;t include config.h in header files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129573</commentid>
    <comment_count>7</comment_count>
      <attachid>32198</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-07-02 14:27:18 -0700</bug_when>
    <thetext>Created attachment 32198
patch4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129595</commentid>
    <comment_count>8</comment_count>
      <attachid>32198</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-02 15:16:25 -0700</bug_when>
    <thetext>Comment on attachment 32198
patch4

A few last things to address:

&gt; Index: WebCore/bindings/v8/V8Binding.cpp
&gt; +class WebCoreStringResource : public v8::String::ExternalStringResource {
&gt; +public:
&gt; +    explicit WebCoreStringResource(const String&amp; string)
&gt; +        : m_impl(string.impl()) { }

The { } should go on separate lines (since you have initializers).


&gt; +String v8StringToWebCoreString(v8::Handle&lt;v8::String&gt; v8String, bool externalize)
&gt; +{
...
&gt; +
&gt; +    int length = v8String-&gt;Length();
&gt; +    if (length) {

if (!length)



&gt; +String v8ValueToWebCoreString(v8::Handle&lt;v8::Value&gt; object)
&gt; +{
...
&gt; +        return webCoreString;
&gt; +    } else {

This else should go away since there is a &quot;return&quot; finishing the previous block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129635</commentid>
    <comment_count>9</comment_count>
      <attachid>32212</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-07-02 17:00:56 -0700</bug_when>
    <thetext>Created attachment 32212
patch5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130051</commentid>
    <comment_count>10</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-07-06 16:21:01 -0700</bug_when>
    <thetext>Rolled back in r45574 because it was going to be breaking the Chromium canary for too long, will resubmit tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130257</commentid>
    <comment_count>11</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-07-07 13:09:34 -0700</bug_when>
    <thetext>Re-landed at r45603.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32090</attachid>
            <date>2009-06-30 13:51:25 -0700</date>
            <delta_ts>2009-06-30 19:45:31 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>29345</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTM5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMDktMDYtMzAgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
cHN0cmVhbSBWOEJpbmRpbmcgYW5kIHVwZGF0ZWQgZnVjbnRpb24gbmFtZXMuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2ODU3CisKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRW
YWx1ZTo6dG9TdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHA6IFVw
c3RyZWFtZWQgZnJvbSBzcmMuY2hyb21pdW0ub3JnLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
QmluZGluZy5oOiBVcHN0cmVhbWVkIGZyb20gc3JjLmNocm9taXVtLm9yZy4KKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
TGF6eUV2ZW50TGlzdGVuZXI6OmdldExpc3RlbmVyRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlQ29uc29sZU1lc3Nh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Y29tcGlsZVNjcmlwdCk6CisgICAgICAg
IChXZWJDb3JlOjpWOFByb3h5Ojpzb3VyY2VOYW1lKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9X
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxl
Q29uc29sZU1lc3NhZ2UpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEF0dHJDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfU0VUVEVSKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExC
QUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZh
c0VsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNM
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVFbGVtZW50Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX1NFVFRFUik6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cmVtb3ZlRWxlbWVudCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9y
Q29udHJvbGxlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RF
Q0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZXRUaW1lb3V0T3JJbnRlcnZhbCk6CisKIDIwMDktMDYtMzAgIEFkYW0gTGFuZ2xl
eSAgPGFnbEBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDQ1MzkzKQorKysg
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDcgKzQ5LDcgQEAgYm9vbCBTY3JpcHRWYWx1ZTo6Z2V0U3RyaW5nKFN0cmluZyYgcmVzdQogCiBT
dHJpbmcgU2NyaXB0VmFsdWU6OnRvU3RyaW5nKFNjcmlwdFN0YXRlKikgY29uc3QKIHsKLSAgICBy
ZXR1cm4gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhtX3ZhbHVlKTsKKyAgICByZXR1cm4g
dmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2sobV92YWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlY4QmluZGluZy5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiQ1N0
cmluZy5oIgorI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgIlN0cmluZ0J1ZmZlci5oIgorCisjaW5jbHVkZSA8djguaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBXZWJDb3JlU3RyaW5nUmVzb3VyY2UgaXMgYSBoZWxwZXIg
Y2xhc3MgZm9yIHY4RXh0ZXJuYWxTdHJpbmcuIEl0IGlzIHVzZWQKKy8vIHRvIG1hbmFnZSB0aGUg
bGlmZS1jeWNsZSBvZiB0aGUgdW5kZXJseWluZyBidWZmZXIgb2YgdGhlIGV4dGVybmFsIHN0cmlu
Zy4KK2NsYXNzIFdlYkNvcmVTdHJpbmdSZXNvdXJjZTogcHVibGljIHY4OjpTdHJpbmc6OkV4dGVy
bmFsU3RyaW5nUmVzb3VyY2UgeworcHVibGljOgorICAgIGV4cGxpY2l0IFdlYkNvcmVTdHJpbmdS
ZXNvdXJjZShjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICAgICAgOiBtX2ltcGwoc3RyaW5nLmlt
cGwoKSkgeyB9CisKKyAgICB2aXJ0dWFsIH5XZWJDb3JlU3RyaW5nUmVzb3VyY2UoKSB7fQorCisg
ICAgY29uc3QgdWludDE2X3QqIGRhdGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihtX2ltcGwuY2hhcmFjdGVycygpKTsKKyAg
ICB9CisKKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmxlbmd0aCgp
OyB9CisKKyAgICBTdHJpbmcgd2ViY29yZVN0cmluZygpIHsgcmV0dXJuIG1faW1wbDsgfQorCitw
cml2YXRlOgorICAgIC8vIEEgc2hhbGxvdyBjb3B5IG9mIHRoZSBzdHJpbmcuIEtlZXBzIHRoZSBz
dHJpbmcgYnVmZmVyIGFsaXZlIHVudGlsIHRoZSBWOCBlbmdpbmUgZ2FyYmFnZSBjb2xsZWN0cyBp
dC4KKyAgICBTdHJpbmcgbV9pbXBsOworfTsKKworU3RyaW5nIHY4U3RyaW5nVG9XZWJDb3JlU3Ry
aW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcsIGJvb2wgZXh0ZXJuYWxpemUpCit7
CisgICAgV2ViQ29yZVN0cmluZ1Jlc291cmNlKiBzdHJpbmdSZXNvdXJjZSA9IHN0YXRpY19jYXN0
PFdlYkNvcmVTdHJpbmdSZXNvdXJjZSo+KHY4U3RyaW5nLT5HZXRFeHRlcm5hbFN0cmluZ1Jlc291
cmNlKCkpOworICAgIGlmIChzdHJpbmdSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIHN0cmluZ1Jl
c291cmNlLT53ZWJjb3JlU3RyaW5nKCk7CisKKyAgICBpbnQgbGVuZ3RoID0gdjhTdHJpbmctPkxl
bmd0aCgpOworICAgIGlmIChsZW5ndGggPT0gMCkgeworICAgICAgICAvLyBBdm9pZCB0cnlpbmcg
dG8gbW9ycGggZW1wdHkgc3RyaW5ncywgYXMgdGhleSBkbyBub3QgaGF2ZSBlbm91Z2ggcm9vbSB0
byBjb250YWluIHRoZSBleHRlcm5hbCByZWZlcmVuY2UuCisgICAgICAgIHJldHVybiBTdHJpbmdJ
bXBsOjplbXB0eSgpOworICAgIH0KKworICAgIFVDaGFyKiBidWZmZXI7CisgICAgU3RyaW5nIHJl
c3VsdCA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAg
djhTdHJpbmctPldyaXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihidWZmZXIpLCAwLCBs
ZW5ndGgpOworCisgICAgaWYgKGV4dGVybmFsaXplKSB7CisgICAgICAgIFdlYkNvcmVTdHJpbmdS
ZXNvdXJjZSogcmVzb3VyY2UgPSBuZXcgV2ViQ29yZVN0cmluZ1Jlc291cmNlKHJlc3VsdCk7Cisg
ICAgICAgIGlmICghdjhTdHJpbmctPk1ha2VFeHRlcm5hbChyZXNvdXJjZSkpIHsKKyAgICAgICAg
ICAgIC8vIEluIGNhc2Ugb2YgYSBmYWlsdXJlIGRlbGV0ZSB0aGUgZXh0ZXJuYWwgcmVzb3VyY2Ug
YXMgaXQgd2FzIG5vdCB1c2VkLgorICAgICAgICAgICAgZGVsZXRlIHJlc291cmNlOworICAgICAg
ICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0cmluZyB2OFZhbHVlVG9XZWJD
b3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCit7CisgICAgaWYgKG9iamVj
dC0+SXNTdHJpbmcoKSkgeworICAgICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5n
ID0gdjg6OkhhbmRsZTx2ODo6U3RyaW5nPjo6Q2FzdChvYmplY3QpOworICAgICAgICBTdHJpbmcg
d2ViQ29yZVN0cmluZyA9IHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKHY4U3RyaW5nLCB0cnVlKTsK
KyAgICAgICAgcmV0dXJuIHdlYkNvcmVTdHJpbmc7CisgICAgfSBlbHNlIGlmIChvYmplY3QtPklz
SW50MzIoKSkgeworICAgICAgICBpbnQgdmFsdWUgPSBvYmplY3QtPkludDMyVmFsdWUoKTsKKyAg
ICAgICAgLy8gTW9zdCBudW1iZXJzIHVzZWQgYXJlIDw9IDEwMC4gRXZlbiBpZiB0aGV5IGFyZW4n
dCB1c2VkIHRoZXJlJ3MgdmVyeSBsaXR0bGUgaW4gdXNpbmcgdGhlIHNwYWNlLgorICAgICAgICBj
b25zdCBpbnQga0xvd051bWJlcnMgPSAxMDA7CisgICAgICAgIHN0YXRpYyBBdG9taWNTdHJpbmcg
bG93TnVtYmVyc1trTG93TnVtYmVycyArIDFdOworICAgICAgICBTdHJpbmcgd2ViQ29yZVN0cmlu
ZzsKKyAgICAgICAgaWYgKDAgPD0gdmFsdWUgJiYgdmFsdWUgPD0ga0xvd051bWJlcnMpIHsKKyAg
ICAgICAgICAgIHdlYkNvcmVTdHJpbmcgPSBsb3dOdW1iZXJzW3ZhbHVlXTsKKyAgICAgICAgICAg
IGlmICghd2ViQ29yZVN0cmluZykgeworICAgICAgICAgICAgICAgIEF0b21pY1N0cmluZyB2YWx1
ZVN0cmluZyA9IEF0b21pY1N0cmluZyhTdHJpbmc6Om51bWJlcih2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIGxvd051bWJlcnNbdmFsdWVdID0gdmFsdWVTdHJpbmc7CisgICAgICAgICAgICAgICAg
d2ViQ29yZVN0cmluZyA9IHZhbHVlU3RyaW5nOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgCisgICAgICAgICAgICB3ZWJDb3JlU3RyaW5nID0gU3RyaW5nOjpudW1iZXIodmFsdWUpOwor
ICAgICAgICByZXR1cm4gd2ViQ29yZVN0cmluZzsKKyAgICB9IGVsc2UgeworICAgICAgICB2ODo6
VHJ5Q2F0Y2ggYmxvY2s7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcg
PSBvYmplY3QtPlRvU3RyaW5nKCk7CisgICAgICAgIC8vIENoZWNrIGZvciBlbXB0eSBoYW5kbGVz
IHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhbiBleGNlcHRpb24KKyAgICAgICAgLy8gaXMgdGhy
b3duIGFzIHBhcnQgb2YgaW52b2tpbmcgdG9TdHJpbmcgb24gdGhlIG9iamVjdGVjdC4KKyAgICAg
ICAgaWYgKHY4U3RyaW5nLklzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmdJbXBs
OjplbXB0eSgpOworICAgICAgICByZXR1cm4gdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmcodjhTdHJp
bmcsIGZhbHNlKTsKKyAgICB9Cit9CisKK0F0b21pY1N0cmluZyB2OFN0cmluZ1RvQXRvbWljV2Vi
Q29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nKQoreworICAgIFN0cmlu
ZyBzdHJpbmcgPSB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZyh2OFN0cmluZywgdHJ1ZSk7CisgICAg
cmV0dXJuIEF0b21pY1N0cmluZyhzdHJpbmcpOworfQorCitBdG9taWNTdHJpbmcgdjhWYWx1ZVRv
QXRvbWljV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhTdHJpbmcpCit7Cisg
ICAgU3RyaW5nIHN0cmluZyA9IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcodjhTdHJpbmcpOworICAg
IHJldHVybiBBdG9taWNTdHJpbmcoc3RyaW5nKTsKK30KKwordjg6OkhhbmRsZTx2ODo6U3RyaW5n
PiB2OFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmluZy5sZW5n
dGgoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpTdHJpbmc6OkVtcHR5KCk7CisgICAgcmV0dXJuIHY4
OjpTdHJpbmc6Ok5ld0V4dGVybmFsKG5ldyBXZWJDb3JlU3RyaW5nUmVzb3VyY2Uoc3RyaW5nKSk7
Cit9CisKK3Y4OjpMb2NhbDx2ODo6U3RyaW5nPiB2OEV4dGVybmFsU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQoreworICAgIGlmICghc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4g
djg6OlN0cmluZzo6RW1wdHkoKTsKKyAgICByZXR1cm4gdjg6OlN0cmluZzo6TmV3RXh0ZXJuYWwo
bmV3IFdlYkNvcmVTdHJpbmdSZXNvdXJjZShzdHJpbmcpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCShyZXZpc2lvbiA0NTM5MykKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE2
ICszMSw3MyBAQAogI2lmbmRlZiBWOEJpbmRpbmdfaAogI2RlZmluZSBWOEJpbmRpbmdfaAogCi0v
LyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBmb3J3YXJkaW5nIGhlYWRlciB1bnRpbCBhbGwg
YmluZGluZ3MgaGF2ZSBtaWdyYXRlZAotLy8gb3ZlciBhbmQgdjhfYmluZGluZyBhY3R1YWxseSBi
ZWNvbWVzIFY4QmluZGluZy4KLSNpbmNsdWRlICJ2OF9iaW5kaW5nLmgiCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJNYXRoRXh0cmFzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKworI2luY2x1ZGUgPHY4Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIC8v
IEZJWE1FOiBSZW1vdmUgb25jZSBtaWdyYXRpb24gaXMgY29tcGxldGUuCisgICAgLy8gQ29udmVy
dCB2OCB0eXBlcyB0byBhIFdlYkNvcmU6OlN0cmluZy4gSWYgdGhlIFY4IHN0cmluZyBpcyBub3Qg
YWxyZWFkeQorICAgIC8vIGFuIGV4dGVybmFsIHN0cmluZyB0aGVuIGl0IGlzIHRyYW5zZm9ybWVk
IGludG8gYW4gZXh0ZXJuYWwgc3RyaW5nIGF0IHRoaXMKKyAgICAvLyBwb2ludCB0byBhdm9pZCBy
ZXBlYXRlZCBjb252ZXJzaW9ucy4KKyAgICBTdHJpbmcgdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmco
djg6OkhhbmRsZTx2ODo6U3RyaW5nPiwgYm9vbCBleHRlcm5hbGl6ZSk7CisgICAgU3RyaW5nIHY4
VmFsdWVUb1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKworICAgIC8vIENv
bnZlcnQgdjggdHlwZXMgdG8gYSBXZWJDb3JlOjpBdG9taWNTdHJpbmcuCisgICAgQXRvbWljU3Ry
aW5nIHY4U3RyaW5nVG9BdG9taWNXZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4p
OworICAgIEF0b21pY1N0cmluZyB2OFZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5nKHY4OjpIYW5k
bGU8djg6OlZhbHVlPik7CisKKyAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgVjggc3RyaW5n
LgorICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcoY29uc3QgU3RyaW5nJik7CisK
KyAgICAvLyBSZXR1cm4gYSBWOCBleHRlcm5hbCBzdHJpbmcgdGhhdCBzaGFyZXMgdGhlIHVuZGVy
bHlpbmcgYnVmZmVyIHdpdGggdGhlIGdpdmVuCisgICAgLy8gV2ViQ29yZSBzdHJpbmcuIFRoZSBy
ZWZlcmVuY2UgY291bnRpbmcgbWVjaGFuaXNtIGlzIHVzZWQgdG8ga2VlcCB0aGUKKyAgICAvLyB1
bmRlcmx5aW5nIGJ1ZmZlciBhbGl2ZSB3aGlsZSB0aGUgc3RyaW5nIGlzIHN0aWxsIGxpdmUgaW4g
dGhlIFY4IGVuZ2luZS4KKyAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4gdjhFeHRlcm5hbFN0cmlu
Zyhjb25zdCBTdHJpbmcmKTsKKworICAgIC8vIENvbnZlcnQgYSB2YWx1ZSB0byBhIDMyLWJpdCBp
bnRlZ2VyLiAgVGhlIGNvbnZlcnNpb24gZmFpbHMgaWYgdGhlCisgICAgLy8gdmFsdWUgY2Fubm90
IGJlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyIG9yIGNvbnZlcnRzIHRvIG5hbiBvciB0byBhbiBp
bmZpbml0eS4KKyAgICBpbmxpbmUgaW50IHRvSW50MzIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZh
bHVlLCBib29sJiBvaykKKyAgICB7CisgICAgICAgIG9rID0gdHJ1ZTsKKworICAgICAgICAvLyBG
YXN0IGNhc2UuICBUaGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCBpbnRlZ2VyLgorICAgICAg
ICBpZiAodmFsdWUtPklzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS0+SW50MzJW
YWx1ZSgpOworCisgICAgICAgIC8vIENhbiB0aGUgdmFsdWUgYmUgY29udmVydGVkIHRvIGEgbnVt
YmVyPworICAgICAgICB2ODo6TG9jYWw8djg6Ok51bWJlcj4gbnVtYmVyT2JqZWN0ID0gdmFsdWUt
PlRvTnVtYmVyKCk7CisgICAgICAgIGlmIChudW1iZXJPYmplY3QuSXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBEb2VzIHRoZSB2YWx1ZSBjb252ZXJ0IHRvIG5hbiBvciB0byBhbiBpbmZpbml0
eT8KKyAgICAgICAgZG91YmxlIG51bWJlclZhbHVlID0gbnVtYmVyT2JqZWN0LT5WYWx1ZSgpOwor
ICAgICAgICBpZiAoaXNuYW4obnVtYmVyVmFsdWUpIHx8IGlzaW5mKG51bWJlclZhbHVlKSkgewor
ICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9
CisKKyAgICAgICAgLy8gQ2FuIHRoZSB2YWx1ZSBiZSBjb252ZXJ0ZWQgdG8gYSAzMi1iaXQgaW50
ZWdlcj8KKyAgICAgICAgdjg6OkxvY2FsPHY4OjpJbnQzMj4gaW50VmFsdWUgPSB2YWx1ZS0+VG9J
bnQzMigpOworICAgICAgICBpZiAoaW50VmFsdWUuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICBv
ayA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICAv
LyBSZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgaW50MzIgY29udmVyc2lvbi4KKyAgICAgICAgcmV0
dXJuIGludFZhbHVlLT5WYWx1ZSgpOworICAgIH0KKworICAgIC8vIENvbnZlcnQgYSB2YWx1ZSB0
byBhIDMyLWJpdCBpbnRlZ2VyIGFzc3VtaW5nIHRoZSBjb252ZXJzaW9uIGNhbm5vdCBmYWlsLgog
ICAgIGlubGluZSBpbnQgdG9JbnQzMih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiAgICAg
ewotICAgICAgICByZXR1cm4gVG9JbnQzMih2YWx1ZSk7CisgICAgICAgIGJvb2wgb2s7CisgICAg
ICAgIHJldHVybiB0b0ludDMyKHZhbHVlLCBvayk7CiAgICAgfQogCiAgICAgaW5saW5lIGZsb2F0
IHRvRmxvYXQodjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUpCkBAIC00OCwyMiArMTA1LDE3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2
YWx1ZS0+TnVtYmVyVmFsdWUoKSk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFJlbW92ZSBvbmNl
IG1pZ3JhdGlvbiBpcyBjb21wbGV0ZS4KLSAgICBpbmxpbmUgU3RyaW5nIHRvV2ViQ29yZVN0cmlu
Zyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqKQorICAgIC8vIEZJWE1FOiBEcm9wIHRoaXMgaW4g
ZmF2b3Igb2YgdGhlIHR5cGUgc3BlY2lmaWMgdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyB3aGVuIHdl
IHJld29yayB0aGUgY29kZSBnZW5lcmF0aW9uLgorICAgIGlubGluZSBTdHJpbmcgdG9XZWJDb3Jl
U3RyaW5nKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCiAgICAgewotICAgICAgICByZXR1
cm4gVG9XZWJDb3JlU3RyaW5nKG9iaik7CisgICAgICAgIHJldHVybiB2OFZhbHVlVG9XZWJDb3Jl
U3RyaW5nKG9iamVjdCk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIG1pZ3Jh
dGlvbiBpcyBjb21wbGV0ZS4KKyAgICAvLyBUaGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoaXMgZnVu
Y3Rpb24gaXMgc3RpbGwgb3duZWQgYnkgdGhlIGFyZ3VtZW50CisgICAgLy8gYW5kIHdpbGwgYmUg
ZGVhbGxvY2F0ZWQgd2hlbiB0aGUgYXJndW1lbnQgaXMgZGVhbGxvY2F0ZWQuCiAgICAgaW5saW5l
IGNvbnN0IHVpbnQxNl90KiBmcm9tV2ViQ29yZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKICAg
ICB7Ci0gICAgICAgIHJldHVybiBGcm9tV2ViQ29yZVN0cmluZyhzdHIpOwotICAgIH0KLQotICAg
IC8vIEZJWE1FOiBSZW5hbWUgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2sgb25jZSBtaWdyYXRp
b24gaXMgY29tcGxldGUuCi0gICAgaW5saW5lIFN0cmluZyB0b1dlYkNvcmVTdHJpbmdXaXRoTnVs
bENoZWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayh2YWx1ZSk7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oc3RyLmNoYXJhY3RlcnMoKSk7CiAgICAgfQog
CiAgICAgaW5saW5lIGJvb2wgaXNVbmRlZmluZWRPck51bGwodjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlKQpAQCAtNzUsNyArMTI3LDQwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB7CiAg
ICAgICAgIHJldHVybiB2YWx1ZSA/IHY4OjpUcnVlKCkgOiB2ODo6RmFsc2UoKTsKICAgICB9Cisg
ICAKKyAgICBpbmxpbmUgU3RyaW5nIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkp
IAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICByZXR1cm4gdjhWYWx1ZVRv
V2ViQ29yZVN0cmluZyh2YWx1ZSk7CisgICAgfQogCi19CisgICAgaW5saW5lIFN0cmluZyB2YWx1
ZVRvU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkgfHwgdmFsdWUtPklzVW5k
ZWZpbmVkKCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB0
b1dlYkNvcmVTdHJpbmcodmFsdWUpOworICAgIH0KKyAKKyAgICBpbmxpbmUgdjg6OkhhbmRsZTx2
ODo6U3RyaW5nPiB2OFVuZGV0ZWN0YWJsZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKKyAgICB7
CisgICAgICAgIHJldHVybiB2ODo6U3RyaW5nOjpOZXdVbmRldGVjdGFibGUoZnJvbVdlYkNvcmVT
dHJpbmcoc3RyKSwgc3RyLmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JOdWxsKGNvbnN0IFN0cmluZyYgc3RyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0ci5pc051bGwoKSA/IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2ODo6TnVs
bCgpKSA6IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2OFN0cmluZyhzdHIpKTsKKyAgICB9CisKKyAg
ICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JVbmRlZmluZWQoY29uc3Qg
U3RyaW5nJiBzdHIpCisgICAgeworICAgICAgICByZXR1cm4gc3RyLmlzTnVsbCgpID8gdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KHY4OjpVbmRlZmluZWQoKSkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4o
djhTdHJpbmcoc3RyKSk7CisgICAgfQorCisgICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2OFN0cmluZ09yRmFsc2UoY29uc3QgU3RyaW5nJiBzdHIpCisgICAgeworICAgICAgICByZXR1
cm4gc3RyLmlzTnVsbCgpID8gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4OjpGYWxzZSgpKSA6IHY4
OjpIYW5kbGU8djg6OlZhbHVlPih2OFN0cmluZyhzdHIpKTsKKyAgICB9Cit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBWOEJpbmRpbmdfaApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiA0NTM5MykKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMCw3ICsxMTAsNyBAQCB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBWOExhenlFdmVudExpc3Rl
CiAgICAgICAgICAgICBpZiAoIXZhbHVlLklzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIEFT
U0VSVCh2YWx1ZS0+SXNGdW5jdGlvbigpKTsKICAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6
OkZ1bmN0aW9uPiBsaXN0ZW5lckZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNh
c3QodmFsdWUpOwotICAgICAgICAgICAgICAgIGxpc3RlbmVyRnVuY3Rpb24tPlNldE5hbWUodjg6
OlN0cmluZzo6TmV3KEZyb21XZWJDb3JlU3RyaW5nKG1fZnVuY3Rpb25OYW1lKSwgbV9mdW5jdGlv
bk5hbWUubGVuZ3RoKCkpKTsKKyAgICAgICAgICAgICAgICBsaXN0ZW5lckZ1bmN0aW9uLT5TZXRO
YW1lKHY4OjpTdHJpbmc6Ok5ldyhmcm9tV2ViQ29yZVN0cmluZyhtX2Z1bmN0aW9uTmFtZSksIG1f
ZnVuY3Rpb25OYW1lLmxlbmd0aCgpKSk7CiAKICAgICAgICAgICAgICAgICBtX2xpc3RlbmVyID0g
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uPjo6TmV3KGxpc3RlbmVyRnVuY3Rpb24pOwogI2lm
bmRlZiBOREVCVUcKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAkocmV2aXNpb24gNDUzOTMp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MDcsMTEgKzcwNywxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVDb25zb2xlTWVzc2FnZSh2ODo6SGFu
CiAKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGVycm9yTWVzc2FnZVN0cmluZyA9IG1lc3Nh
Z2UtPkdldCgpOwogICAgIEFTU0VSVCghZXJyb3JNZXNzYWdlU3RyaW5nLklzRW1wdHkoKSk7Ci0g
ICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFRvV2ViQ29yZVN0cmluZyhlcnJvck1lc3NhZ2VTdHJp
bmcpOworICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSB0b1dlYkNvcmVTdHJpbmcoZXJyb3JNZXNz
YWdlU3RyaW5nKTsKIAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXNvdXJjZU5hbWUgPSBt
ZXNzYWdlLT5HZXRTY3JpcHRSZXNvdXJjZU5hbWUoKTsKICAgICBib29sIHVzZVVSTCA9IHJlc291
cmNlTmFtZS5Jc0VtcHR5KCkgfHwgIXJlc291cmNlTmFtZS0+SXNTdHJpbmcoKTsKLSAgICBTdHJp
bmcgcmVzb3VyY2VOYW1lU3RyaW5nID0gdXNlVVJMID8gZnJhbWUtPmRvY3VtZW50KCktPnVybCgp
IDogVG9XZWJDb3JlU3RyaW5nKHJlc291cmNlTmFtZSk7CisgICAgU3RyaW5nIHJlc291cmNlTmFt
ZVN0cmluZyA9IHVzZVVSTCA/IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6IHRvV2ViQ29yZVN0
cmluZyhyZXNvdXJjZU5hbWUpOwogICAgIEphdmFTY3JpcHRDb25zb2xlTWVzc2FnZSBjb25zb2xl
TWVzc2FnZShlcnJvck1lc3NhZ2UsIHJlc291cmNlTmFtZVN0cmluZywgbWVzc2FnZS0+R2V0TGlu
ZU51bWJlcigpKTsKICAgICBDb25zb2xlTWVzc2FnZU1hbmFnZXI6OmFkZE1lc3NhZ2UocGFnZSwg
Y29uc29sZU1lc3NhZ2UpOwogfQpAQCAtOTY1LDcgKzk2NSw3IEBAIHZvaWQgVjhQcm94eTo6ZGlz
Y29ubmVjdEV2ZW50TGlzdGVuZXJzKCkKIAogdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBWOFByb3h5
Ojpjb21waWxlU2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5n
JiBmaWxlTmFtZSwgaW50IGJhc2VMaW5lKQogewotICAgIGNvbnN0IHVpbnQxNl90KiBmaWxlTmFt
ZVN0cmluZyA9IEZyb21XZWJDb3JlU3RyaW5nKGZpbGVOYW1lKTsKKyAgICBjb25zdCB1aW50MTZf
dCogZmlsZU5hbWVTdHJpbmcgPSBmcm9tV2ViQ29yZVN0cmluZyhmaWxlTmFtZSk7CiAgICAgdjg6
OkhhbmRsZTx2ODo6U3RyaW5nPiBuYW1lID0gdjg6OlN0cmluZzo6TmV3KGZpbGVOYW1lU3RyaW5n
LCBmaWxlTmFtZS5sZW5ndGgoKSk7CiAgICAgdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4gbGluZSA9
IHY4OjpJbnRlZ2VyOjpOZXcoYmFzZUxpbmUpOwogICAgIHY4OjpTY3JpcHRPcmlnaW4gb3JpZ2lu
KG5hbWUsIGxpbmUpOwpAQCAtMzIxNyw3ICszMjE3LDcgQEAgU3RyaW5nIFY4UHJveHk6OnNvdXJj
ZU5hbWUoKQogICAgIGZyYW1lU291cmNlTmFtZSA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpD
YXN0KHY4VXRpbGl0eUNvbnRleHQtPkdsb2JhbCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJmcmFt
ZVNvdXJjZU5hbWUiKSkpOwogICAgIGlmIChmcmFtZVNvdXJjZU5hbWUuSXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIFRvV2ViQ29yZVN0cmluZyh2ODo6RGVi
dWc6OkNhbGwoZnJhbWVTb3VyY2VOYW1lKSk7CisgICAgcmV0dXJuIHRvV2ViQ29yZVN0cmluZyh2
ODo6RGVidWc6OkNhbGwoZnJhbWVTb3VyY2VOYW1lKSk7CiB9CiAKIHZvaWQgVjhQcm94eTo6cmVn
aXN0ZXJFeHRlbnNpb24odjg6OkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBjb25zdCBTdHJpbmcmIHNj
aGVtZVJlc3RyaWN0aW9uKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcAkocmV2aXNpb24gNDUzOTMpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcxLDExICs3MSwxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVDb25zb2xlTWVzc2FnZSh2
ODo6SGFuCiAgICAgCiAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBlcnJvck1lc3NhZ2VTdHJp
bmcgPSBtZXNzYWdlLT5HZXQoKTsKICAgICBBU1NFUlQoIWVycm9yTWVzc2FnZVN0cmluZy5Jc0Vt
cHR5KCkpOwotICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBUb1dlYkNvcmVTdHJpbmcoZXJyb3JN
ZXNzYWdlU3RyaW5nKTsKKyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gdG9XZWJDb3JlU3RyaW5n
KGVycm9yTWVzc2FnZVN0cmluZyk7CiAgICAgCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJl
c291cmNlTmFtZSA9IG1lc3NhZ2UtPkdldFNjcmlwdFJlc291cmNlTmFtZSgpOwogICAgIGJvb2wg
dXNlVVJMID0gKHJlc291cmNlTmFtZS5Jc0VtcHR5KCkgfHwgIXJlc291cmNlTmFtZS0+SXNTdHJp
bmcoKSk7Ci0gICAgU3RyaW5nIHJlc291cmNlTmFtZVN0cmluZyA9IHVzZVVSTCA/IHdvcmtlckNv
bnRleHQtPnVybCgpIDogVG9XZWJDb3JlU3RyaW5nKHJlc291cmNlTmFtZSk7CisgICAgU3RyaW5n
IHJlc291cmNlTmFtZVN0cmluZyA9IHVzZVVSTCA/IHdvcmtlckNvbnRleHQtPnVybCgpIDogdG9X
ZWJDb3JlU3RyaW5nKHJlc291cmNlTmFtZSk7CiAgICAgCiAgICAgd29ya2VyQ29udGV4dC0+YWRk
TWVzc2FnZShDb25zb2xlRGVzdGluYXRpb24sIEpTTWVzc2FnZVNvdXJjZSwgRXJyb3JNZXNzYWdl
TGV2ZWwsIGVycm9yTWVzc2FnZSwgbWVzc2FnZS0+R2V0TGluZU51bWJlcigpLCByZXNvdXJjZU5h
bWVTdHJpbmcpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBdHRyQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEF0dHJD
dXN0b20uY3BwCShyZXZpc2lvbiA0NTM5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4QXR0ckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogQUNDRVNTT1JfU0VUVEVSKEF0dHJWYWx1ZSkKIHsKICAgICBBdHRyKiBp
bXAgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxBdHRyPihpbmZvLkhvbGRlcigp
KTsKLSAgICBTdHJpbmcgYXR0clZhbHVlID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2
YWx1ZSk7CisgICAgU3RyaW5nIGF0dHJWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNr
KHZhbHVlKTsKICAgICBFbGVtZW50KiBvd25lckVsZW1lbnQgPSBpbXAtPm93bmVyRWxlbWVudCgp
OwogCiAgICAgaWYgKG93bmVyRWxlbWVudCAmJiAhYWxsb3dTZXR0aW5nU3JjVG9KYXZhc2NyaXB0
VVJMKG93bmVyRWxlbWVudCwgaW1wLT5uYW1lKCksIGF0dHJWYWx1ZSkpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiA0NTM5MykKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA1LDEzICsxMDUsMTMgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1Jl
bmRlcmluZ0NvbnRleAogICAgIHN3aXRjaCAoYXJncy5MZW5ndGgoKSkgewogICAgIGNhc2UgMToK
ICAgICAgICAgaWYgKGFyZ3NbMF0tPklzU3RyaW5nKCkpCi0gICAgICAgICAgICBjb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihUb1dlYkNvcmVTdHJpbmcoYXJnc1swXSkpOworICAgICAgICAgICAgY29u
dGV4dC0+c2V0U3Ryb2tlQ29sb3IodG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IodG9GbG9hdChhcmdzWzBd
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKICAgICAgICAgaWYgKGFyZ3NbMF0tPklz
U3RyaW5nKCkpCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihUb1dlYkNvcmVT
dHJpbmcoYXJnc1swXSksIHRvRmxvYXQoYXJnc1sxXSkpOworICAgICAgICAgICAgY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IodG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0p
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IodG9G
bG9hdChhcmdzWzBdKSwgdG9GbG9hdChhcmdzWzFdKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTM1
LDEzICsxMzUsMTMgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleAog
ICAgIHN3aXRjaCAoYXJncy5MZW5ndGgoKSkgewogICAgIGNhc2UgMToKICAgICAgICAgaWYgKGFy
Z3NbMF0tPklzU3RyaW5nKCkpCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoVG9X
ZWJDb3JlU3RyaW5nKGFyZ3NbMF0pKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xv
cih0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSkpOwogICAgICAgICBlbHNlIAogICAgICAgICAgICAg
Y29udGV4dC0+c2V0RmlsbENvbG9yKHRvRmxvYXQoYXJnc1swXSkpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIDI6CiAgICAgICAgIGlmIChhcmdzWzBdLT5Jc1N0cmluZygpKQotICAgICAgICAg
ICAgY29udGV4dC0+c2V0RmlsbENvbG9yKFRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKSwgdG9GbG9h
dChhcmdzWzFdKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IodG9XZWJDb3Jl
U3RyaW5nKGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0pKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHRvRmxvYXQoYXJnc1swXSksIHRvRmxvYXQoYXJn
c1sxXSkpOwogICAgICAgICBicmVhazsKQEAgLTE4NCwxMyArMTg0LDEzIEBAIENBTExCQUNLX0ZV
TkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA0
OgogICAgICAgICBpZiAoYXJnc1szXS0+SXNTdHJpbmcoKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnNldFNoYWRvdyh0b0Zsb2F0KGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0pLCB0b0Zsb2F0KGFy
Z3NbMl0pLCBUb1dlYkNvcmVTdHJpbmcoYXJnc1szXSkpOworICAgICAgICAgICAgY29udGV4dC0+
c2V0U2hhZG93KHRvRmxvYXQoYXJnc1swXSksIHRvRmxvYXQoYXJnc1sxXSksIHRvRmxvYXQoYXJn
c1syXSksIHRvV2ViQ29yZVN0cmluZyhhcmdzWzNdKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFNoYWRvdyh0b0Zsb2F0KGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0p
LCB0b0Zsb2F0KGFyZ3NbMl0pLCB0b0Zsb2F0KGFyZ3NbM10pKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSA1OgogICAgICAgICBpZiAoYXJnc1szXS0+SXNTdHJpbmcoKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnNldFNoYWRvdyh0b0Zsb2F0KGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0pLCB0
b0Zsb2F0KGFyZ3NbMl0pLCBUb1dlYkNvcmVTdHJpbmcoYXJnc1szXSksIHRvRmxvYXQoYXJnc1s0
XSkpOworICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KHRvRmxvYXQoYXJnc1swXSksIHRv
RmxvYXQoYXJnc1sxXSksIHRvRmxvYXQoYXJnc1syXSksIHRvV2ViQ29yZVN0cmluZyhhcmdzWzNd
KSwgdG9GbG9hdChhcmdzWzRdKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbnRleHQt
PnNldFNoYWRvdyh0b0Zsb2F0KGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0pLCB0b0Zsb2F0KGFy
Z3NbMl0pLCB0b0Zsb2F0KGFyZ3NbM10pLCB0b0Zsb2F0KGFyZ3NbNF0pKTsKICAgICAgICAgYnJl
YWs7CkBAIC0yOTEsNyArMjkxLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmlu
Z0NvbnRleAogCiAgICAgaWYgKFY4SFRNTEltYWdlRWxlbWVudDo6SGFzSW5zdGFuY2UoYXJnKSkg
ewogICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZV9lbGVtZW50ID0gVjhQcm94eTo6Y29u
dmVydERPTVdyYXBwZXJUb05vZGU8SFRNTEltYWdlRWxlbWVudD4oYXJnKTsKLSAgICAgICAgY29u
dGV4dC0+ZHJhd0ltYWdlRnJvbVJlY3QoaW1hZ2VfZWxlbWVudCwgIHRvRmxvYXQoYXJnc1sxXSks
IHRvRmxvYXQoYXJnc1syXSksIHRvRmxvYXQoYXJnc1szXSksIHRvRmxvYXQoYXJnc1s0XSksIHRv
RmxvYXQoYXJnc1s1XSksIHRvRmxvYXQoYXJnc1s2XSksIHRvRmxvYXQoYXJnc1s3XSksIHRvRmxv
YXQoYXJnc1s4XSksIFRvV2ViQ29yZVN0cmluZyhhcmdzWzldKSk7CisgICAgICAgIGNvbnRleHQt
PmRyYXdJbWFnZUZyb21SZWN0KGltYWdlX2VsZW1lbnQsICB0b0Zsb2F0KGFyZ3NbMV0pLCB0b0Zs
b2F0KGFyZ3NbMl0pLCB0b0Zsb2F0KGFyZ3NbM10pLCB0b0Zsb2F0KGFyZ3NbNF0pLCB0b0Zsb2F0
KGFyZ3NbNV0pLCB0b0Zsb2F0KGFyZ3NbNl0pLCB0b0Zsb2F0KGFyZ3NbN10pLCB0b0Zsb2F0KGFy
Z3NbOF0pLCB0b1dlYkNvcmVTdHJpbmcoYXJnc1s5XSkpOwogICAgIH0gZWxzZQogICAgICAgICBW
OFByb3h5Ojp0aHJvd0Vycm9yKFY4UHJveHk6OlR5cGVFcnJvciwgImRyYXdJbWFnZUZyb21SZWN0
OiBJbnZhbGlkIHR5cGUgb2YgYXJndW1lbnRzIik7CiAKQEAgLTM0NSw3ICszNDUsNyBAQCBDQUxM
QkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4CiAgICAgICAgIHJldHVybiBub3RI
YW5kbGVkQnlJbnRlcmNlcHRvcigpOwogICAgIH0KIAotICAgIFN0cmluZyB0ZXh0ID0gVG9XZWJD
b3JlU3RyaW5nKGFyZ3NbMF0pOworICAgIFN0cmluZyB0ZXh0ID0gdG9XZWJDb3JlU3RyaW5nKGFy
Z3NbMF0pOwogICAgIGZsb2F0IHggPSB0b0Zsb2F0KGFyZ3NbMV0pOwogICAgIGZsb2F0IHkgPSB0
b0Zsb2F0KGFyZ3NbMl0pOwogCkBAIC0zNzEsNyArMzcxLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KENhbnZhc1JlbmRlcmluZ0NvbnRleAogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJj
ZXB0b3IoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgdGV4dCA9IFRvV2ViQ29yZVN0cmluZyhhcmdz
WzBdKTsKKyAgICBTdHJpbmcgdGV4dCA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAgICBm
bG9hdCB4ID0gdG9GbG9hdChhcmdzWzFdKTsKICAgICBmbG9hdCB5ID0gdG9GbG9hdChhcmdzWzJd
KTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0
b20uY3BwCShyZXZpc2lvbiA0NTM5MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgQ0FMTEJB
Q0tfRlVOQ19ERUNMKEVsZW1lbnRTZXRBdHRyaWJ1dGVOUwogewogICAgIElOQ19TVEFUUygiRE9N
LkVsZW1lbnQuc2V0QXR0cmlidXRlTlMoKSIpOwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBWOFBy
b3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxFbGVtZW50PihhcmdzLkhvbGRlcigpKTsKLSAg
ICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdz
WzBdKTsKKyAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hl
Y2soYXJnc1swXSk7CiAgICAgU3RyaW5nIHF1YWxpZmllZE5hbWUgPSB0b1dlYkNvcmVTdHJpbmco
YXJnc1sxXSk7CiAgICAgU3RyaW5nIHZhbHVlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMl0pOwog
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxD
YW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNDUzOTMpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNyArNDMsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woSFRNTENhbnZhc0VsZW1lbnRH
ZXRDCiAgICAgSU5DX1NUQVRTKCJET00uSFRNTENhbnZhc0VsZW1lbnQuY29udGV4dCIpOwogICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIEhUTUxD
YW52YXNFbGVtZW50KiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1M
Q2FudmFzRWxlbWVudD4oaG9sZGVyKTsKLSAgICBTdHJpbmcgY29udGV4dElkID0gVG9XZWJDb3Jl
U3RyaW5nKGFyZ3NbMF0pOworICAgIFN0cmluZyBjb250ZXh0SWQgPSB0b1dlYkNvcmVTdHJpbmco
YXJnc1swXSk7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiByZXN1bHQgPSBpbXAtPmdl
dENvbnRleHQoY29udGV4dElkKTsKICAgICByZXR1cm4gVjhQcm94eTo6Y29udmVydFRvVjhPYmpl
Y3QoVjhDbGFzc0luZGV4OjpDQU5WQVNSRU5ERVJJTkdDT05URVhUMkQsIHJlc3VsdCk7CiB9Cklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZUVsZW1lbnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZyYW1l
RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1MzkzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBBQ0NFU1NPUl9TRVRURVIoSFRNTEZy
YW1lRWxlbWVudFNyYykKIHsKICAgICBIVE1MRnJhbWVFbGVtZW50KiBmcmFtZSA9IFY4UHJveHk6
OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxGcmFtZUVsZW1lbnQ+KGluZm8uSG9sZGVyKCkp
OwotICAgIFN0cmluZyBzcmNWYWx1ZSA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sodmFs
dWUpOworICAgIFN0cmluZyBzcmNWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKHZh
bHVlKTsKIAogICAgIGlmICghYWxsb3dTZXR0aW5nRnJhbWVTcmNUb0phdmFzY3JpcHRVcmwoZnJh
bWUsIHNyY1ZhbHVlKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTEsNyArNTEsNyBAQCBBQ0NFU1NP
Ul9TRVRURVIoSFRNTEZyYW1lRWxlbWVudFNyYykKIEFDQ0VTU09SX1NFVFRFUihIVE1MRnJhbWVF
bGVtZW50TG9jYXRpb24pCiB7CiAgICAgSFRNTEZyYW1lRWxlbWVudCogZnJhbWUgPSBWOFByb3h5
Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MRnJhbWVFbGVtZW50PihpbmZvLkhvbGRlcigp
KTsKLSAgICBTdHJpbmcgbG9jYXRpb25WYWx1ZSA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hl
Y2sodmFsdWUpOworICAgIFN0cmluZyBsb2NhdGlvblZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhO
dWxsQ2hlY2sodmFsdWUpOwogCiAgICAgaWYgKCFhbGxvd1NldHRpbmdGcmFtZVNyY1RvSmF2YXNj
cmlwdFVybChmcmFtZSwgbG9jYXRpb25WYWx1ZSkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25z
Q29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1MzkzKQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw3ICs2Nyw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChIVE1MT3B0aW9uc0NvbGxl
Y3Rpb24KICAgICBlbHNlIHsKICAgICAgICAgYm9vbCBvazsKICAgICAgICAgdjg6OlRyeUNhdGNo
IHRyeV9jYXRjaDsKLSAgICAgICAgaW50IGluZGV4ID0gVG9JbnQzMihhcmdzWzFdLCBvayk7Cisg
ICAgICAgIGludCBpbmRleCA9IHRvSW50MzIoYXJnc1sxXSwgb2spOwogCiAgICAgICAgIGlmICh0
cnlfY2F0Y2guSGFzQ2F1Z2h0KCkpCiAgICAgICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
U2VsZWN0RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1MzkzKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDcgKzU2LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlbW92ZUVsZW1lbnQo
SFRNTAogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIGltcC0+
cmVtb3ZlKFRvSW50MzIoYXJnc1swXSkpOworICAgIGltcC0+cmVtb3ZlKHRvSW50MzIoYXJnc1sw
XSkpOwogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JDb250cm9sbGVyQ3Vz
dG9tLmNwcAkocmV2aXNpb24gNDUzOTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyAr
MTA0LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJTZQogICAgIGlm
ICghbm9kZSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyB0
YXJnZXQgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbMV0pOworICAgIFN0cmlu
ZyB0YXJnZXQgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzFdKTsKICAgICBpZiAo
dGFyZ2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIApAQCAt
MTU2LDcgKzE1Niw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250cm9sbGVyU2UK
ICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CiAKLSAgICBTdHJpbmcga2V5ID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdz
WzBdKTsKKyAgICBTdHJpbmcga2V5ID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1sw
XSk7CiAgICAgaWYgKGtleS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CiAKQEAgLTE5Miw3ICsxOTIsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQ29u
dHJvbGxlclNlCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQogICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwogCi0gICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxs
Q2hlY2soYXJnc1swXSk7CisgICAgU3RyaW5nIGtleSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENo
ZWNrKGFyZ3NbMF0pOwogICAgIGlmIChrZXkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwogCkBAIC0yMDMsNyArMjAzLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKElu
c3BlY3RvckNvbnRyb2xsZXJTZQogICAgICAgICAvLyBEbyBub3RoaW5nLiBUaGUgc2V0dGluZyBp
cyBhbHJlYWR5IE5vVHlwZS4KICAgICAgICAgQVNTRVJUKHNldHRpbmcudHlwZSgpID09IEluc3Bl
Y3RvckNvbnRyb2xsZXI6OlNldHRpbmc6Ok5vVHlwZSk7CiAgICAgfSBlbHNlIGlmICh2YWx1ZS0+
SXNTdHJpbmcoKSkKLSAgICAgICAgc2V0dGluZy5zZXQodG9XZWJDb3JlU3RyaW5nV2l0aE51bGxD
aGVjayh2YWx1ZSkpOworICAgICAgICBzZXR0aW5nLnNldCh2YWx1ZVRvU3RyaW5nV2l0aE51bGxD
aGVjayh2YWx1ZSkpOwogICAgIGVsc2UgaWYgKHZhbHVlLT5Jc051bWJlcigpKQogICAgICAgICBz
ZXR0aW5nLnNldCh2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7CiAgICAgZWxzZSBpZiAodmFsdWUtPklz
Qm9vbGVhbigpKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2Fj
dGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1MzkzKQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDcgKzU0LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFNRTFRyYW5zYWN0aW9uRXhl
Y3V0ZQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFN0cmlu
ZyBzdGF0ZW1lbnQgPSBUb1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CisgICAgU3RyaW5nIHN0YXRl
bWVudCA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKIAogICAgIFZlY3RvcjxTUUxWYWx1ZT4g
c3FsVmFsdWVzOwogCkBAIC03NSw3ICs3NSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChTUUxUcmFu
c2FjdGlvbkV4ZWN1dGUKICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLT5Jc051bWJlcigpKQog
ICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQoU1FMVmFsdWUodmFsdWUtPk51bWJlclZh
bHVlKCkpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBw
ZW5kKFNRTFZhbHVlKFRvV2ViQ29yZVN0cmluZyh2YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICBz
cWxWYWx1ZXMuYXBwZW5kKFNRTFZhbHVlKHRvV2ViQ29yZVN0cmluZyh2YWx1ZSkpKTsKICAgICAg
ICAgfQogICAgIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJD
b250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA0NTM5MykKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNSw3ICsxMDUsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gU2V0VGltZW91dE9y
SW50ZXJ2CiAgICAgaW50IHRpbWVySWQ7CiAKICAgICBpZiAoZnVuY3Rpb24tPklzU3RyaW5nKCkp
IHsKLSAgICAgICAgV2ViQ29yZTo6U3RyaW5nIHN0cmluZ0Z1bmN0aW9uID0gVG9XZWJDb3JlU3Ry
aW5nKGZ1bmN0aW9uKTsKKyAgICAgICAgV2ViQ29yZTo6U3RyaW5nIHN0cmluZ0Z1bmN0aW9uID0g
dG9XZWJDb3JlU3RyaW5nKGZ1bmN0aW9uKTsKICAgICAgICAgdGltZXJJZCA9IERPTVRpbWVyOjpp
bnN0YWxsKHdvcmtlckNvbnRleHQsIG5ldyBTY2hlZHVsZWRBY3Rpb24oc3RyaW5nRnVuY3Rpb24s
IHdvcmtlckNvbnRleHQtPnVybCgpKSwgdGltZW91dCwgc2luZ2xlU2hvdCk7CiAgICAgfSBlbHNl
IGlmIChmdW5jdGlvbi0+SXNGdW5jdGlvbigpKSB7CiAgICAgICAgIHNpemVfdCBwYXJhbUNvdW50
ID0gYXJndW1lbnRDb3VudCA+PSAyID8gYXJndW1lbnRDb3VudCAtIDIgOiAwOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32130</attachid>
            <date>2009-07-01 11:12:10 -0700</date>
            <delta_ts>2009-07-01 16:44:47 -0700</delta_ts>
            <desc>patch2</desc>
            <filename>patch2.txt</filename>
            <type>text/plain</type>
            <size>31818</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTQ0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMDktMDctMDEgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
cHN0cmVhbSBWOEJpbmRpbmcgYW5kIHVwZGF0ZSBzb21lIGZ1bmN0aW9uIG5hbWVzLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjg1NworCisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcDogVXBzdHJlYW1lZCBmcm9tIHNyYy5jaHJv
bWl1bS5vcmcuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6IFVwc3RyZWFtZWQg
ZnJvbSBzcmMuY2hyb21pdW0ub3JnLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50
TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhMYXp5RXZlbnRMaXN0ZW5lcjo6Z2V0
TGlzdGVuZXJGdW5jdGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpoYW5kbGVDb25zb2xlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWOFByb3h5Ojpjb21waWxlU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnNv
dXJjZU5hbWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVDb25zb2xlTWVzc2FnZSk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpOQU1FRF9QUk9QRVJUWV9TRVRURVIpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWOEN1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFD
S19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJRnJhbWVF
bGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX1NFVFRFUik6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cmVtb3ZlRWxlbWVudCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tf
RlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNldFRpbWVvdXRPckludGVydmFsKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorCiAyMDA5LTA3LTAxICBEYXZp
ZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0
Y2hlci4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4
QmluZGluZy5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgorI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorI2luY2x1ZGUgIlN0cmluZ0J1ZmZlci5oIgorCisjaW5jbHVkZSA8djguaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBXZWJDb3JlU3RyaW5nUmVzb3VyY2UgaXMgYSBoZWxwZXIgY2xh
c3MgZm9yIHY4RXh0ZXJuYWxTdHJpbmcuIEl0IGlzIHVzZWQKKy8vIHRvIG1hbmFnZSB0aGUgbGlm
ZS1jeWNsZSBvZiB0aGUgdW5kZXJseWluZyBidWZmZXIgb2YgdGhlIGV4dGVybmFsIHN0cmluZy4K
K2NsYXNzIFdlYkNvcmVTdHJpbmdSZXNvdXJjZTogcHVibGljIHY4OjpTdHJpbmc6OkV4dGVybmFs
U3RyaW5nUmVzb3VyY2UgeworcHVibGljOgorICAgIGV4cGxpY2l0IFdlYkNvcmVTdHJpbmdSZXNv
dXJjZShjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICAgICAgOiBtX2ltcGwoc3RyaW5nLmltcGwo
KSkgeyB9CisKKyAgICB2aXJ0dWFsIH5XZWJDb3JlU3RyaW5nUmVzb3VyY2UoKSB7fQorCisgICAg
Y29uc3QgdWludDE2X3QqIGRhdGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihtX2ltcGwuY2hhcmFjdGVycygpKTsKKyAgICB9
CisKKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmxlbmd0aCgpOyB9
CisKKyAgICBTdHJpbmcgd2ViY29yZVN0cmluZygpIHsgcmV0dXJuIG1faW1wbDsgfQorCitwcml2
YXRlOgorICAgIC8vIEEgc2hhbGxvdyBjb3B5IG9mIHRoZSBzdHJpbmcuIEtlZXBzIHRoZSBzdHJp
bmcgYnVmZmVyIGFsaXZlIHVudGlsIHRoZSBWOCBlbmdpbmUgZ2FyYmFnZSBjb2xsZWN0cyBpdC4K
KyAgICBTdHJpbmcgbV9pbXBsOworfTsKKworU3RyaW5nIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5n
KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcsIGJvb2wgZXh0ZXJuYWxpemUpCit7Cisg
ICAgV2ViQ29yZVN0cmluZ1Jlc291cmNlKiBzdHJpbmdSZXNvdXJjZSA9IHN0YXRpY19jYXN0PFdl
YkNvcmVTdHJpbmdSZXNvdXJjZSo+KHY4U3RyaW5nLT5HZXRFeHRlcm5hbFN0cmluZ1Jlc291cmNl
KCkpOworICAgIGlmIChzdHJpbmdSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIHN0cmluZ1Jlc291
cmNlLT53ZWJjb3JlU3RyaW5nKCk7CisKKyAgICBpbnQgbGVuZ3RoID0gdjhTdHJpbmctPkxlbmd0
aCgpOworICAgIGlmIChsZW5ndGggPT0gMCkgeworICAgICAgICAvLyBBdm9pZCB0cnlpbmcgdG8g
bW9ycGggZW1wdHkgc3RyaW5ncywgYXMgdGhleSBkbyBub3QgaGF2ZSBlbm91Z2ggcm9vbSB0byBj
b250YWluIHRoZSBleHRlcm5hbCByZWZlcmVuY2UuCisgICAgICAgIHJldHVybiBTdHJpbmdJbXBs
OjplbXB0eSgpOworICAgIH0KKworICAgIFVDaGFyKiBidWZmZXI7CisgICAgU3RyaW5nIHJlc3Vs
dCA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAgdjhT
dHJpbmctPldyaXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihidWZmZXIpLCAwLCBsZW5n
dGgpOworCisgICAgaWYgKGV4dGVybmFsaXplKSB7CisgICAgICAgIFdlYkNvcmVTdHJpbmdSZXNv
dXJjZSogcmVzb3VyY2UgPSBuZXcgV2ViQ29yZVN0cmluZ1Jlc291cmNlKHJlc3VsdCk7CisgICAg
ICAgIGlmICghdjhTdHJpbmctPk1ha2VFeHRlcm5hbChyZXNvdXJjZSkpIHsKKyAgICAgICAgICAg
IC8vIEluIGNhc2Ugb2YgYSBmYWlsdXJlIGRlbGV0ZSB0aGUgZXh0ZXJuYWwgcmVzb3VyY2UgYXMg
aXQgd2FzIG5vdCB1c2VkLgorICAgICAgICAgICAgZGVsZXRlIHJlc291cmNlOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0cmluZyB2OFZhbHVlVG9XZWJDb3Jl
U3RyaW5nKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCit7CisgICAgaWYgKG9iamVjdC0+
SXNTdHJpbmcoKSkgeworICAgICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nID0g
djg6OkhhbmRsZTx2ODo6U3RyaW5nPjo6Q2FzdChvYmplY3QpOworICAgICAgICBTdHJpbmcgd2Vi
Q29yZVN0cmluZyA9IHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKHY4U3RyaW5nLCB0cnVlKTsKKyAg
ICAgICAgcmV0dXJuIHdlYkNvcmVTdHJpbmc7CisgICAgfSBlbHNlIGlmIChvYmplY3QtPklzSW50
MzIoKSkgeworICAgICAgICBpbnQgdmFsdWUgPSBvYmplY3QtPkludDMyVmFsdWUoKTsKKyAgICAg
ICAgLy8gTW9zdCBudW1iZXJzIHVzZWQgYXJlIDw9IDEwMC4gRXZlbiBpZiB0aGV5IGFyZW4ndCB1
c2VkIHRoZXJlJ3MgdmVyeSBsaXR0bGUgaW4gdXNpbmcgdGhlIHNwYWNlLgorICAgICAgICBjb25z
dCBpbnQga0xvd051bWJlcnMgPSAxMDA7CisgICAgICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgbG93
TnVtYmVyc1trTG93TnVtYmVycyArIDFdOworICAgICAgICBTdHJpbmcgd2ViQ29yZVN0cmluZzsK
KyAgICAgICAgaWYgKDAgPD0gdmFsdWUgJiYgdmFsdWUgPD0ga0xvd051bWJlcnMpIHsKKyAgICAg
ICAgICAgIHdlYkNvcmVTdHJpbmcgPSBsb3dOdW1iZXJzW3ZhbHVlXTsKKyAgICAgICAgICAgIGlm
ICghd2ViQ29yZVN0cmluZykgeworICAgICAgICAgICAgICAgIEF0b21pY1N0cmluZyB2YWx1ZVN0
cmluZyA9IEF0b21pY1N0cmluZyhTdHJpbmc6Om51bWJlcih2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIGxvd051bWJlcnNbdmFsdWVdID0gdmFsdWVTdHJpbmc7CisgICAgICAgICAgICAgICAgd2Vi
Q29yZVN0cmluZyA9IHZhbHVlU3RyaW5nOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
CisgICAgICAgICAgICB3ZWJDb3JlU3RyaW5nID0gU3RyaW5nOjpudW1iZXIodmFsdWUpOworICAg
ICAgICByZXR1cm4gd2ViQ29yZVN0cmluZzsKKyAgICB9IGVsc2UgeworICAgICAgICB2ODo6VHJ5
Q2F0Y2ggYmxvY2s7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcgPSBv
YmplY3QtPlRvU3RyaW5nKCk7CisgICAgICAgIC8vIENoZWNrIGZvciBlbXB0eSBoYW5kbGVzIHRv
IGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhbiBleGNlcHRpb24KKyAgICAgICAgLy8gaXMgdGhyb3du
IGFzIHBhcnQgb2YgaW52b2tpbmcgdG9TdHJpbmcgb24gdGhlIG9iamVjdGVjdC4KKyAgICAgICAg
aWYgKHY4U3RyaW5nLklzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpl
bXB0eSgpOworICAgICAgICByZXR1cm4gdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmcodjhTdHJpbmcs
IGZhbHNlKTsKKyAgICB9Cit9CisKK0F0b21pY1N0cmluZyB2OFN0cmluZ1RvQXRvbWljV2ViQ29y
ZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nKQoreworICAgIFN0cmluZyBz
dHJpbmcgPSB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZyh2OFN0cmluZywgdHJ1ZSk7CisgICAgcmV0
dXJuIEF0b21pY1N0cmluZyhzdHJpbmcpOworfQorCitBdG9taWNTdHJpbmcgdjhWYWx1ZVRvQXRv
bWljV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhTdHJpbmcpCit7CisgICAg
U3RyaW5nIHN0cmluZyA9IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcodjhTdHJpbmcpOworICAgIHJl
dHVybiBBdG9taWNTdHJpbmcoc3RyaW5nKTsKK30KKwordjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2
OFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmluZy5sZW5ndGgo
KSkKKyAgICAgICAgcmV0dXJuIHY4OjpTdHJpbmc6OkVtcHR5KCk7CisgICAgcmV0dXJuIHY4OjpT
dHJpbmc6Ok5ld0V4dGVybmFsKG5ldyBXZWJDb3JlU3RyaW5nUmVzb3VyY2Uoc3RyaW5nKSk7Cit9
CisKK3Y4OjpMb2NhbDx2ODo6U3RyaW5nPiB2OEV4dGVybmFsU3RyaW5nKGNvbnN0IFN0cmluZyYg
c3RyaW5nKQoreworICAgIGlmICghc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gdjg6
OlN0cmluZzo6RW1wdHkoKTsKKyAgICByZXR1cm4gdjg6OlN0cmluZzo6TmV3RXh0ZXJuYWwobmV3
IFdlYkNvcmVTdHJpbmdSZXNvdXJjZShzdHJpbmcpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcu
Y3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEJpbmRpbmcuaAkocmV2aXNpb24gNDU0NDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4QmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNiArMzEsNzggQEAKICNpZm5kZWYg
VjhCaW5kaW5nX2gKICNkZWZpbmUgVjhCaW5kaW5nX2gKIAotLy8gRklYTUU6IFRoaXMgaXMgYSB0
ZW1wb3JhcnkgZm9yd2FyZGluZyBoZWFkZXIgdW50aWwgYWxsIGJpbmRpbmdzIGhhdmUgbWlncmF0
ZWQKLS8vIG92ZXIgYW5kIHY4X2JpbmRpbmcgYWN0dWFsbHkgYmVjb21lcyBWOEJpbmRpbmcuCi0j
aW5jbHVkZSAidjhfYmluZGluZy5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
TWF0aEV4dHJhcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlIDx2
OC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIG9uY2Ug
bWlncmF0aW9uIGlzIGNvbXBsZXRlLgorICAgIC8vIENvbnZlcnQgdjggdHlwZXMgdG8gYSBXZWJD
b3JlOjpTdHJpbmcuIElmIHRoZSBWOCBzdHJpbmcgaXMgbm90IGFscmVhZHkKKyAgICAvLyBhbiBl
eHRlcm5hbCBzdHJpbmcgdGhlbiBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIGV4dGVybmFsIHN0
cmluZyBhdCB0aGlzCisgICAgLy8gcG9pbnQgdG8gYXZvaWQgcmVwZWF0ZWQgY29udmVyc2lvbnMu
CisgICAgU3RyaW5nIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmlu
Zz4sIGJvb2wgZXh0ZXJuYWxpemUpOworICAgIFN0cmluZyB2OFZhbHVlVG9XZWJDb3JlU3RyaW5n
KHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CisKKyAgICAvLyBDb252ZXJ0IHY4IHR5cGVzIHRvIGEg
V2ViQ29yZTo6QXRvbWljU3RyaW5nLgorICAgIEF0b21pY1N0cmluZyB2OFN0cmluZ1RvQXRvbWlj
V2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+KTsKKyAgICBBdG9taWNTdHJpbmcg
djhWYWx1ZVRvQXRvbWljV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOworCisg
ICAgLy8gQ29udmVydCBhIHN0cmluZyB0byBhIFY4IHN0cmluZy4KKyAgICB2ODo6SGFuZGxlPHY4
OjpTdHJpbmc+IHY4U3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisgICAgaW5saW5lIFN0cmluZyB0
b1N0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAgICAgIHJldHVybiBzdHJp
bmc7CisgICAgfQorCisgICAgLy8gUmV0dXJuIGEgVjggZXh0ZXJuYWwgc3RyaW5nIHRoYXQgc2hh
cmVzIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciB3aXRoIHRoZSBnaXZlbgorICAgIC8vIFdlYkNvcmUg
c3RyaW5nLiBUaGUgcmVmZXJlbmNlIGNvdW50aW5nIG1lY2hhbmlzbSBpcyB1c2VkIHRvIGtlZXAg
dGhlCisgICAgLy8gdW5kZXJseWluZyBidWZmZXIgYWxpdmUgd2hpbGUgdGhlIHN0cmluZyBpcyBz
dGlsbCBsaXZlIGluIHRoZSBWOCBlbmdpbmUuCisgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4
RXh0ZXJuYWxTdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBDb252ZXJ0IGEgdmFsdWUg
dG8gYSAzMi1iaXQgaW50ZWdlci4gIFRoZSBjb252ZXJzaW9uIGZhaWxzIGlmIHRoZQorICAgIC8v
IHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciBvciBjb252ZXJ0cyB0byBu
YW4gb3IgdG8gYW4gaW5maW5pdHkuCisgICAgaW5saW5lIGludCB0b0ludDMyKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgb2spCisgICAgeworICAgICAgICBvayA9IHRydWU7CisK
KyAgICAgICAgLy8gRmFzdCBjYXNlLiAgVGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgaW50
ZWdlci4KKyAgICAgICAgaWYgKHZhbHVlLT5Jc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4g
dmFsdWUtPkludDMyVmFsdWUoKTsKKworICAgICAgICAvLyBDYW4gdGhlIHZhbHVlIGJlIGNvbnZl
cnRlZCB0byBhIG51bWJlcj8KKyAgICAgICAgdjg6OkxvY2FsPHY4OjpOdW1iZXI+IG51bWJlck9i
amVjdCA9IHZhbHVlLT5Ub051bWJlcigpOworICAgICAgICBpZiAobnVtYmVyT2JqZWN0LklzRW1w
dHkoKSkgeworICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gRG9lcyB0aGUgdmFsdWUgY29udmVydCB0byBuYW4gb3Ig
dG8gYW4gaW5maW5pdHk/CisgICAgICAgIGRvdWJsZSBudW1iZXJWYWx1ZSA9IG51bWJlck9iamVj
dC0+VmFsdWUoKTsKKyAgICAgICAgaWYgKGlzbmFuKG51bWJlclZhbHVlKSB8fCBpc2luZihudW1i
ZXJWYWx1ZSkpIHsKKyAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENhbiB0aGUgdmFsdWUgYmUgY29udmVydGVkIHRv
IGEgMzItYml0IGludGVnZXI/CisgICAgICAgIHY4OjpMb2NhbDx2ODo6SW50MzI+IGludFZhbHVl
ID0gdmFsdWUtPlRvSW50MzIoKTsKKyAgICAgICAgaWYgKGludFZhbHVlLklzRW1wdHkoKSkgewor
ICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9
CisKKyAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGludDMyIGNvbnZlcnNpb24u
CisgICAgICAgIHJldHVybiBpbnRWYWx1ZS0+VmFsdWUoKTsKKyAgICB9CisKKyAgICAvLyBDb252
ZXJ0IGEgdmFsdWUgdG8gYSAzMi1iaXQgaW50ZWdlciBhc3N1bWluZyB0aGUgY29udmVyc2lvbiBj
YW5ub3QgZmFpbC4KICAgICBpbmxpbmUgaW50IHRvSW50MzIodjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFRvSW50MzIodmFsdWUpOworICAgICAgICBi
b29sIG9rOworICAgICAgICByZXR1cm4gdG9JbnQzMih2YWx1ZSwgb2spOwogICAgIH0KIAogICAg
IGlubGluZSBmbG9hdCB0b0Zsb2F0KHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlKQpAQCAtNDgs
MjIgKzExMCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4odmFsdWUtPk51bWJlclZhbHVlKCkpOwogICAgIH0KIAotICAgIC8vIEZJWE1F
OiBSZW1vdmUgb25jZSBtaWdyYXRpb24gaXMgY29tcGxldGUuCi0gICAgaW5saW5lIFN0cmluZyB0
b1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iaikKKyAgICAvLyBGSVhNRTog
RHJvcCB0aGlzIGluIGZhdm9yIG9mIHRoZSB0eXBlIHNwZWNpZmljIHY4VmFsdWVUb1dlYkNvcmVT
dHJpbmcgd2hlbiB3ZSByZXdvcmsgdGhlIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICBpbmxpbmUgU3Ry
aW5nIHRvV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIFRvV2ViQ29yZVN0cmluZyhvYmopOworICAgICAgICByZXR1cm4gdjhW
YWx1ZVRvV2ViQ29yZVN0cmluZyhvYmplY3QpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBSZW1v
dmUgb25jZSBtaWdyYXRpb24gaXMgY29tcGxldGUuCisgICAgLy8gVGhlIHN0cmluZyByZXR1cm5l
ZCBieSB0aGlzIGZ1bmN0aW9uIGlzIHN0aWxsIG93bmVkIGJ5IHRoZSBhcmd1bWVudAorICAgIC8v
IGFuZCB3aWxsIGJlIGRlYWxsb2NhdGVkIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGRlYWxsb2NhdGVk
LgogICAgIGlubGluZSBjb25zdCB1aW50MTZfdCogZnJvbVdlYkNvcmVTdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHIpCiAgICAgewotICAgICAgICByZXR1cm4gRnJvbVdlYkNvcmVTdHJpbmcoc3RyKTsK
LSAgICB9Ci0KLSAgICAvLyBGSVhNRTogUmVuYW1lIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNr
IG9uY2UgbWlncmF0aW9uIGlzIGNvbXBsZXRlLgotICAgIGlubGluZSBTdHJpbmcgdG9XZWJDb3Jl
U3RyaW5nV2l0aE51bGxDaGVjayh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2sodmFsdWUpOworICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KHN0ci5jaGFyYWN0ZXJz
KCkpOwogICAgIH0KIAogICAgIGlubGluZSBib29sIGlzVW5kZWZpbmVkT3JOdWxsKHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2YWx1ZSkKQEAgLTc1LDcgKzEzMiw0MCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgewogICAgICAgICByZXR1cm4gdmFsdWUgPyB2ODo6VHJ1ZSgpIDogdjg6OkZhbHNl
KCk7CiAgICAgfQorICAgCisgICAgaW5saW5lIFN0cmluZyB0b1dlYkNvcmVTdHJpbmdXaXRoTnVs
bENoZWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZS0+SXNOdWxsKCkpIAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICBy
ZXR1cm4gdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7CisgICAgfQorCisgICAgaW5saW5l
IFN0cmluZyB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2sodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLT5Jc051bGwoKSB8
fCB2YWx1ZS0+SXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICAgICAgcmV0dXJuIHRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7CisgICAgfQorIAorICAgIGlubGlu
ZSB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4VW5kZXRlY3RhYmxlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgc3RyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHY4OjpTdHJpbmc6Ok5ld1VuZGV0ZWN0YWJs
ZShmcm9tV2ViQ29yZVN0cmluZyhzdHIpLCBzdHIubGVuZ3RoKCkpOworICAgIH0KIAotfQorICAg
IGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhTdHJpbmdPck51bGwoY29uc3QgU3RyaW5n
JiBzdHIpCisgICAgeworICAgICAgICByZXR1cm4gc3RyLmlzTnVsbCgpID8gdjg6OkhhbmRsZTx2
ODo6VmFsdWU+KHY4OjpOdWxsKCkpIDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4U3RyaW5nKHN0
cikpOworICAgIH0KKworICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhTdHJpbmdP
clVuZGVmaW5lZChjb25zdCBTdHJpbmcmIHN0cikKKyAgICB7CisgICAgICAgIHJldHVybiBzdHIu
aXNOdWxsKCkgPyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6OlVuZGVmaW5lZCgpKSA6IHY4OjpI
YW5kbGU8djg6OlZhbHVlPih2OFN0cmluZyhzdHIpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JGYWxzZShjb25zdCBTdHJpbmcmIHN0cikKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdHIuaXNOdWxsKCkgPyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4o
djg6OkZhbHNlKCkpIDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4U3RyaW5nKHN0cikpOworICAg
IH0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFY4QmluZGluZ19oCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9u
IDQ1NDQwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3IEBAIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+
IFY4TGF6eUV2ZW50TGlzdGUKICAgICAgICAgICAgIGlmICghdmFsdWUuSXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc0Z1bmN0aW9uKCkpOwogICAgICAgICAgICAg
ICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGxpc3RlbmVyRnVuY3Rpb24gPSB2ODo6TG9jYWw8
djg6OkZ1bmN0aW9uPjo6Q2FzdCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgbGlzdGVuZXJGdW5j
dGlvbi0+U2V0TmFtZSh2ODo6U3RyaW5nOjpOZXcoRnJvbVdlYkNvcmVTdHJpbmcobV9mdW5jdGlv
bk5hbWUpLCBtX2Z1bmN0aW9uTmFtZS5sZW5ndGgoKSkpOworICAgICAgICAgICAgICAgIGxpc3Rl
bmVyRnVuY3Rpb24tPlNldE5hbWUodjg6OlN0cmluZzo6TmV3KGZyb21XZWJDb3JlU3RyaW5nKG1f
ZnVuY3Rpb25OYW1lKSwgbV9mdW5jdGlvbk5hbWUubGVuZ3RoKCkpKTsKIAogICAgICAgICAgICAg
ICAgIG1fbGlzdGVuZXIgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+OjpOZXcobGlzdGVu
ZXJGdW5jdGlvbik7CiAjaWZuZGVmIE5ERUJVRwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9W
OFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3Bw
CShyZXZpc2lvbiA0NTQ0MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcwNywxMSArNzA3LDExIEBAIHN0YXRpYyB2b2lkIGhhbmRsZUNvbnNv
bGVNZXNzYWdlKHY4OjpIYW4KIAogICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gZXJyb3JNZXNz
YWdlU3RyaW5nID0gbWVzc2FnZS0+R2V0KCk7CiAgICAgQVNTRVJUKCFlcnJvck1lc3NhZ2VTdHJp
bmcuSXNFbXB0eSgpKTsKLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gVG9XZWJDb3JlU3RyaW5n
KGVycm9yTWVzc2FnZVN0cmluZyk7CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHRvV2ViQ29y
ZVN0cmluZyhlcnJvck1lc3NhZ2VTdHJpbmcpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHJlc291cmNlTmFtZSA9IG1lc3NhZ2UtPkdldFNjcmlwdFJlc291cmNlTmFtZSgpOwogICAgIGJv
b2wgdXNlVVJMID0gcmVzb3VyY2VOYW1lLklzRW1wdHkoKSB8fCAhcmVzb3VyY2VOYW1lLT5Jc1N0
cmluZygpOwotICAgIFN0cmluZyByZXNvdXJjZU5hbWVTdHJpbmcgPSB1c2VVUkwgPyBmcmFtZS0+
ZG9jdW1lbnQoKS0+dXJsKCkgOiBUb1dlYkNvcmVTdHJpbmcocmVzb3VyY2VOYW1lKTsKKyAgICBT
dHJpbmcgcmVzb3VyY2VOYW1lU3RyaW5nID0gdXNlVVJMID8gZnJhbWUtPmRvY3VtZW50KCktPnVy
bCgpIDogdG9XZWJDb3JlU3RyaW5nKHJlc291cmNlTmFtZSk7CiAgICAgSmF2YVNjcmlwdENvbnNv
bGVNZXNzYWdlIGNvbnNvbGVNZXNzYWdlKGVycm9yTWVzc2FnZSwgcmVzb3VyY2VOYW1lU3RyaW5n
LCBtZXNzYWdlLT5HZXRMaW5lTnVtYmVyKCkpOwogICAgIENvbnNvbGVNZXNzYWdlTWFuYWdlcjo6
YWRkTWVzc2FnZShwYWdlLCBjb25zb2xlTWVzc2FnZSk7CiB9CkBAIC05NjUsNyArOTY1LDcgQEAg
dm9pZCBWOFByb3h5OjpkaXNjb25uZWN0RXZlbnRMaXN0ZW5lcnMoKQogCiB2ODo6SGFuZGxlPHY4
OjpTY3JpcHQ+IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBj
b2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFzZUxpbmUpCiB7Ci0gICAgY29uc3Qg
dWludDE2X3QqIGZpbGVOYW1lU3RyaW5nID0gRnJvbVdlYkNvcmVTdHJpbmcoZmlsZU5hbWUpOwor
ICAgIGNvbnN0IHVpbnQxNl90KiBmaWxlTmFtZVN0cmluZyA9IGZyb21XZWJDb3JlU3RyaW5nKGZp
bGVOYW1lKTsKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IG5hbWUgPSB2ODo6U3RyaW5nOjpO
ZXcoZmlsZU5hbWVTdHJpbmcsIGZpbGVOYW1lLmxlbmd0aCgpKTsKICAgICB2ODo6SGFuZGxlPHY4
OjpJbnRlZ2VyPiBsaW5lID0gdjg6OkludGVnZXI6Ok5ldyhiYXNlTGluZSk7CiAgICAgdjg6OlNj
cmlwdE9yaWdpbiBvcmlnaW4obmFtZSwgbGluZSk7CkBAIC0zMjE3LDcgKzMyMTcsNyBAQCBTdHJp
bmcgVjhQcm94eTo6c291cmNlTmFtZSgpCiAgICAgZnJhbWVTb3VyY2VOYW1lID0gdjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj46OkNhc3QodjhVdGlsaXR5Q29udGV4dC0+R2xvYmFsKCktPkdldCh2ODo6
U3RyaW5nOjpOZXcoImZyYW1lU291cmNlTmFtZSIpKSk7CiAgICAgaWYgKGZyYW1lU291cmNlTmFt
ZS5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gVG9XZWJD
b3JlU3RyaW5nKHY4OjpEZWJ1Zzo6Q2FsbChmcmFtZVNvdXJjZU5hbWUpKTsKKyAgICByZXR1cm4g
dG9XZWJDb3JlU3RyaW5nKHY4OjpEZWJ1Zzo6Q2FsbChmcmFtZVNvdXJjZU5hbWUpKTsKIH0KIAog
dm9pZCBWOFByb3h5OjpyZWdpc3RlckV4dGVuc2lvbih2ODo6RXh0ZW5zaW9uKiBleHRlbnNpb24s
IGNvbnN0IFN0cmluZyYgc2NoZW1lUmVzdHJpY3Rpb24pCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCShyZXZpc2lvbiA0
NTQ0MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTEgKzcxLDExIEBAIHN0YXRpYyB2b2lkIGhhbmRs
ZUNvbnNvbGVNZXNzYWdlKHY4OjpIYW4KICAgICAKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+
IGVycm9yTWVzc2FnZVN0cmluZyA9IG1lc3NhZ2UtPkdldCgpOwogICAgIEFTU0VSVCghZXJyb3JN
ZXNzYWdlU3RyaW5nLklzRW1wdHkoKSk7Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFRvV2Vi
Q29yZVN0cmluZyhlcnJvck1lc3NhZ2VTdHJpbmcpOworICAgIFN0cmluZyBlcnJvck1lc3NhZ2Ug
PSB0b1dlYkNvcmVTdHJpbmcoZXJyb3JNZXNzYWdlU3RyaW5nKTsKICAgICAKICAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gcmVzb3VyY2VOYW1lID0gbWVzc2FnZS0+R2V0U2NyaXB0UmVzb3VyY2VO
YW1lKCk7CiAgICAgYm9vbCB1c2VVUkwgPSAocmVzb3VyY2VOYW1lLklzRW1wdHkoKSB8fCAhcmVz
b3VyY2VOYW1lLT5Jc1N0cmluZygpKTsKLSAgICBTdHJpbmcgcmVzb3VyY2VOYW1lU3RyaW5nID0g
dXNlVVJMID8gd29ya2VyQ29udGV4dC0+dXJsKCkgOiBUb1dlYkNvcmVTdHJpbmcocmVzb3VyY2VO
YW1lKTsKKyAgICBTdHJpbmcgcmVzb3VyY2VOYW1lU3RyaW5nID0gdXNlVVJMID8gd29ya2VyQ29u
dGV4dC0+dXJsKCkgOiB0b1dlYkNvcmVTdHJpbmcocmVzb3VyY2VOYW1lKTsKICAgICAKICAgICB3
b3JrZXJDb250ZXh0LT5hZGRNZXNzYWdlKENvbnNvbGVEZXN0aW5hdGlvbiwgSlNNZXNzYWdlU291
cmNlLCBFcnJvck1lc3NhZ2VMZXZlbCwgZXJyb3JNZXNzYWdlLCBtZXNzYWdlLT5HZXRMaW5lTnVt
YmVyKCksIHJlc291cmNlTmFtZVN0cmluZyk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJ
KHJldmlzaW9uIDQ1NDQwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHls
ZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBA
IE5BTUVEX1BST1BFUlRZX1NFVFRFUihDU1NTdHlsZURlY2xhcmF0aW8KICAgICBpZiAoIXByb3BJ
bmZvKQogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIAotICAgIFN0
cmluZyBwcm9wZXJ0eVZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2sodmFsdWUpOwor
ICAgIFN0cmluZyBwcm9wZXJ0eVZhbHVlID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2
YWx1ZSk7CiAgICAgaWYgKHByb3BJbmZvLT5oYWRQaXhlbE9yUG9zUHJlZml4KQogICAgICAgICBw
cm9wZXJ0eVZhbHVlLmFwcGVuZCgicHgiKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3Vz
dG9tLmNwcAkocmV2aXNpb24gNDU0NDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
NSwxMyArMTA1LDEzIEBAIENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgK
ICAgICBzd2l0Y2ggKGFyZ3MuTGVuZ3RoKCkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIGlmIChh
cmdzWzBdLT5Jc1N0cmluZygpKQotICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Io
VG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9r
ZUNvbG9yKHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHRvRmxvYXQoYXJnc1swXSkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIDI6CiAgICAgICAgIGlmIChhcmdzWzBdLT5Jc1N0cmluZygpKQotICAg
ICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoVG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0p
LCB0b0Zsb2F0KGFyZ3NbMV0pKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9y
KHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKSwgdG9GbG9hdChhcmdzWzFdKSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHRvRmxvYXQoYXJnc1swXSks
IHRvRmxvYXQoYXJnc1sxXSkpOwogICAgICAgICBicmVhazsKQEAgLTEzNSwxMyArMTM1LDEzIEBA
IENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKICAgICBzd2l0Y2ggKGFy
Z3MuTGVuZ3RoKCkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIGlmIChhcmdzWzBdLT5Jc1N0cmlu
ZygpKQotICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKFRvV2ViQ29yZVN0cmluZyhh
cmdzWzBdKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IodG9XZWJDb3JlU3Ry
aW5nKGFyZ3NbMF0pKTsKICAgICAgICAgZWxzZSAKICAgICAgICAgICAgIGNvbnRleHQtPnNldEZp
bGxDb2xvcih0b0Zsb2F0KGFyZ3NbMF0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgog
ICAgICAgICBpZiAoYXJnc1swXS0+SXNTdHJpbmcoKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnNl
dEZpbGxDb2xvcihUb1dlYkNvcmVTdHJpbmcoYXJnc1swXSksIHRvRmxvYXQoYXJnc1sxXSkpOwor
ICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHRvV2ViQ29yZVN0cmluZyhhcmdzWzBd
KSwgdG9GbG9hdChhcmdzWzFdKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbnRleHQt
PnNldEZpbGxDb2xvcih0b0Zsb2F0KGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0pKTsKICAgICAg
ICAgYnJlYWs7CkBAIC0xODQsMTMgKzE4NCwxMyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFz
UmVuZGVyaW5nQ29udGV4CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNDoKICAgICAgICAgaWYg
KGFyZ3NbM10tPklzU3RyaW5nKCkpCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3codG9G
bG9hdChhcmdzWzBdKSwgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSwgVG9XZWJD
b3JlU3RyaW5nKGFyZ3NbM10pKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyh0b0Zs
b2F0KGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0pLCB0b0Zsb2F0KGFyZ3NbMl0pLCB0b1dlYkNv
cmVTdHJpbmcoYXJnc1szXSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb250ZXh0LT5z
ZXRTaGFkb3codG9GbG9hdChhcmdzWzBdKSwgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdz
WzJdKSwgdG9GbG9hdChhcmdzWzNdKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNToKICAg
ICAgICAgaWYgKGFyZ3NbM10tPklzU3RyaW5nKCkpCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRT
aGFkb3codG9GbG9hdChhcmdzWzBdKSwgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJd
KSwgVG9XZWJDb3JlU3RyaW5nKGFyZ3NbM10pLCB0b0Zsb2F0KGFyZ3NbNF0pKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnNldFNoYWRvdyh0b0Zsb2F0KGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0p
LCB0b0Zsb2F0KGFyZ3NbMl0pLCB0b1dlYkNvcmVTdHJpbmcoYXJnc1szXSksIHRvRmxvYXQoYXJn
c1s0XSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3codG9G
bG9hdChhcmdzWzBdKSwgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSwgdG9GbG9h
dChhcmdzWzNdKSwgdG9GbG9hdChhcmdzWzRdKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjkxLDcg
KzI5MSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKIAogICAg
IGlmIChWOEhUTUxJbWFnZUVsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsKICAgICAgICAgSFRN
TEltYWdlRWxlbWVudCogaW1hZ2VfZWxlbWVudCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVy
VG9Ob2RlPEhUTUxJbWFnZUVsZW1lbnQ+KGFyZyk7Ci0gICAgICAgIGNvbnRleHQtPmRyYXdJbWFn
ZUZyb21SZWN0KGltYWdlX2VsZW1lbnQsICB0b0Zsb2F0KGFyZ3NbMV0pLCB0b0Zsb2F0KGFyZ3Nb
Ml0pLCB0b0Zsb2F0KGFyZ3NbM10pLCB0b0Zsb2F0KGFyZ3NbNF0pLCB0b0Zsb2F0KGFyZ3NbNV0p
LCB0b0Zsb2F0KGFyZ3NbNl0pLCB0b0Zsb2F0KGFyZ3NbN10pLCB0b0Zsb2F0KGFyZ3NbOF0pLCBU
b1dlYkNvcmVTdHJpbmcoYXJnc1s5XSkpOworICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VGcm9t
UmVjdChpbWFnZV9lbGVtZW50LCAgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSwg
dG9GbG9hdChhcmdzWzNdKSwgdG9GbG9hdChhcmdzWzRdKSwgdG9GbG9hdChhcmdzWzVdKSwgdG9G
bG9hdChhcmdzWzZdKSwgdG9GbG9hdChhcmdzWzddKSwgdG9GbG9hdChhcmdzWzhdKSwgdG9XZWJD
b3JlU3RyaW5nKGFyZ3NbOV0pKTsKICAgICB9IGVsc2UKICAgICAgICAgVjhQcm94eTo6dGhyb3dF
cnJvcihWOFByb3h5OjpUeXBlRXJyb3IsICJkcmF3SW1hZ2VGcm9tUmVjdDogSW52YWxpZCB0eXBl
IG9mIGFyZ3VtZW50cyIpOwogCkBAIC0zMDgsNyArMzA4LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KENhbnZhc1JlbmRlcmluZ0NvbnRleAogICAgIGlmIChWOEhUTUxJbWFnZUVsZW1lbnQ6Okhhc0lu
c3RhbmNlKGFyZykpIHsKICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VfZWxlbWVudCA9
IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJbWFnZUVsZW1lbnQ+KGFyZyk7
CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBSZWZQdHI8Q2FudmFzUGF0
dGVybj4gcGF0dGVybiA9IGNvbnRleHQtPmNyZWF0ZVBhdHRlcm4oaW1hZ2VfZWxlbWVudCwgdmFs
dWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1sxXSksIGVjKTsKKyAgICAgICAgUmVmUHRyPENh
bnZhc1BhdHRlcm4+IHBhdHRlcm4gPSBjb250ZXh0LT5jcmVhdGVQYXR0ZXJuKGltYWdlX2VsZW1l
bnQsIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1sxXSksIGVjKTsKICAgICAgICAg
aWYgKGVjICE9IDApIHsKICAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7
CiAgICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKQEAgLTMxOSw3
ICszMTksNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4CiAgICAg
aWYgKFY4SFRNTENhbnZhc0VsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsKICAgICAgICAgSFRN
TENhbnZhc0VsZW1lbnQqIGNhbnZhc19lbGVtZW50ID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBw
ZXJUb05vZGU8SFRNTENhbnZhc0VsZW1lbnQ+KGFyZyk7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgICAgICBSZWZQdHI8Q2FudmFzUGF0dGVybj4gcGF0dGVybiA9IGNvbnRleHQt
PmNyZWF0ZVBhdHRlcm4oY2FudmFzX2VsZW1lbnQsIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNr
KGFyZ3NbMV0pLCBlYyk7CisgICAgICAgIFJlZlB0cjxDYW52YXNQYXR0ZXJuPiBwYXR0ZXJuID0g
Y29udGV4dC0+Y3JlYXRlUGF0dGVybihjYW52YXNfZWxlbWVudCwgdG9XZWJDb3JlU3RyaW5nV2l0
aE51bGxDaGVjayhhcmdzWzFdKSwgZWMpOwogICAgICAgICBpZiAoZWMgIT0gMCkgewogICAgICAg
ICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICAgICAgICAgIHJldHVybiBu
b3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwpAQCAtMzQ1LDcgKzM0NSw3IEBAIENBTExCQUNLX0ZV
TkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRC
eUludGVyY2VwdG9yKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHRleHQgPSBUb1dlYkNvcmVTdHJp
bmcoYXJnc1swXSk7CisgICAgU3RyaW5nIHRleHQgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7
CiAgICAgZmxvYXQgeCA9IHRvRmxvYXQoYXJnc1sxXSk7CiAgICAgZmxvYXQgeSA9IHRvRmxvYXQo
YXJnc1syXSk7CiAKQEAgLTM3MSw3ICszNzEsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFz
UmVuZGVyaW5nQ29udGV4CiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigp
OwogICAgIH0KIAotICAgIFN0cmluZyB0ZXh0ID0gVG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwor
ICAgIFN0cmluZyB0ZXh0ID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgIGZsb2F0IHgg
PSB0b0Zsb2F0KGFyZ3NbMV0pOwogICAgIGZsb2F0IHkgPSB0b0Zsb2F0KGFyZ3NbMl0pOwogCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21YUGF0
aE5TUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiA0NTQ0MCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAs
NyArODAsNyBAQCBTdHJpbmcgVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hCiAgICAg
aWYgKHRyeV9jYXRjaC5IYXNDYXVnaHQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0g
ICAgcmV0dXJuIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKHJldHZhbCk7CisgICAgcmV0dXJu
IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2socmV0dmFsKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9N
V2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNDU0NDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw5ICsy
NzcsOSBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93UG9zdE1lc3NhZ2UpCiAgICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPiAyKSB7CiAgICAgICAgIGlmIChWOFByb3h5Ojppc1dyYXBwZXJPZlR5
cGUoYXJnc1sxXSwgVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCkpCiAgICAgICAgICAgICBwb3J0
ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5k
ZXg6Ok1FU1NBR0VQT1JULCBhcmdzWzFdKTsKLSAgICAgICAgdGFyZ2V0T3JpZ2luID0gdmFsdWVU
b1N0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzJdKTsKKyAgICAgICAgdGFyZ2V0
T3JpZ2luID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMl0p
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9TdHJpbmdXaXRo
TnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1sxXSk7CisgICAgICAgIHRhcmdldE9yaWdpbiA9IHRv
V2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzFdKTsKICAgICB9CiAK
ICAgICBpZiAodHJ5Q2F0Y2guSGFzQ2F1Z2h0KCkpCkBAIC01NjIsOSArNTYyLDkgQEAgQ0FMTEJB
Q0tfRlVOQ19ERUNMKERPTVdpbmRvd1Nob3dNb2RhbERpYQogICAgIGlmICghY2FuU2hvd01vZGFs
RGlhbG9nTm93KGZyYW1lKSB8fCAhYWxsb3dQb3BVcCgpKQogICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwogCi0gICAgU3RyaW5nIHVybCA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbE9yVW5k
ZWZpbmVkQ2hlY2soYXJnc1swXSk7CisgICAgU3RyaW5nIHVybCA9IHRvV2ViQ29yZVN0cmluZ1dp
dGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzBdKTsKICAgICB2ODo6TG9jYWw8djg6OlZhbHVl
PiBkaWFsb2dBcmdzID0gYXJnc1sxXTsKLSAgICBTdHJpbmcgZmVhdHVyZUFyZ3MgPSB2YWx1ZVRv
U3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMl0pOworICAgIFN0cmluZyBmZWF0
dXJlQXJncyA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzJd
KTsKIAogICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGZlYXR1cmVzID0gcGFyc2VN
b2RhbERpYWxvZ0ZlYXR1cmVzKGZlYXR1cmVBcmdzKTsKIApAQCAtNjUxLDcgKzY1MSw3IEBAIENB
TExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dPcGVuKQogICAgIGlmICghcGFnZSkKICAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRv
U3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMF0pOworICAgIFN0cmluZyB1cmxT
dHJpbmcgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1swXSk7
CiAgICAgQXRvbWljU3RyaW5nIGZyYW1lTmFtZSA9IChhcmdzWzFdLT5Jc1VuZGVmaW5lZCgpIHx8
IGFyZ3NbMV0tPklzTnVsbCgpKSA/ICJfYmxhbmsiIDogQXRvbWljU3RyaW5nKHRvV2ViQ29yZVN0
cmluZyhhcmdzWzFdKSk7CiAKICAgICAvLyBCZWNhdXNlIEZyYW1lVHJlZTo6ZmluZCgpIHJldHVy
bnMgdHJ1ZSBmb3IgZW1wdHkgc3RyaW5ncywgd2UgbXVzdCBjaGVjawpAQCAtNzAwLDcgKzcwMCw3
IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dPcGVuKQogICAgIC8vIFBhcnNlIHRoZSB2
YWx1ZXMsIGFuZCB0aGVuIHdvcmsgd2l0aCBhIGNvcHkgb2YgdGhlIHBhcnNlZCB2YWx1ZXMKICAg
ICAvLyBzbyB3ZSBjYW4gcmVzdG9yZSB0aGUgdmFsdWVzIHdlIG1heSBub3Qgd2FudCB0byBvdmVy
d3JpdGUgYWZ0ZXIKICAgICAvLyB3ZSBkbyB0aGUgbXVsdGlwbGUgbW9uaXRvciBmaXhlcy4KLSAg
ICBXaW5kb3dGZWF0dXJlcyByYXdGZWF0dXJlcyh2YWx1ZVRvU3RyaW5nV2l0aE51bGxPclVuZGVm
aW5lZENoZWNrKGFyZ3NbMl0pKTsKKyAgICBXaW5kb3dGZWF0dXJlcyByYXdGZWF0dXJlcyh0b1dl
YkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1syXSkpOwogICAgIFdpbmRv
d0ZlYXR1cmVzIHdpbmRvd0ZlYXR1cmVzKHJhd0ZlYXR1cmVzKTsKICAgICBGbG9hdFJlY3Qgc2Ny
ZWVuUmVjdCA9IHNjcmVlbkF2YWlsYWJsZVJlY3QocGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSk7
CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NTQ0MCkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0Myw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChIVE1MQ2FudmFzRWxlbWVu
dEdldEMKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MQ2FudmFzRWxlbWVudC5jb250ZXh0Iik7CiAg
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CiAgICAgSFRN
TENhbnZhc0VsZW1lbnQqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhU
TUxDYW52YXNFbGVtZW50Pihob2xkZXIpOwotICAgIFN0cmluZyBjb250ZXh0SWQgPSBUb1dlYkNv
cmVTdHJpbmcoYXJnc1swXSk7CisgICAgU3RyaW5nIGNvbnRleHRJZCA9IHRvV2ViQ29yZVN0cmlu
ZyhhcmdzWzBdKTsKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIHJlc3VsdCA9IGltcC0+
Z2V0Q29udGV4dChjb250ZXh0SWQpOwogICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0VG9WOE9i
amVjdChWOENsYXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgcmVzdWx0KTsKIH0K
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElGcmFtZUVsZW1lbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElG
cmFtZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NTQ0MCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEFDQ0VTU09SX1NFVFRFUihI
VE1MSUZyYW1lRWxlbWVudFNyYykKIHsKICAgICBIVE1MSUZyYW1lRWxlbWVudCogaWZyYW1lID0g
VjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTElGcmFtZUVsZW1lbnQ+KGluZm8u
SG9sZGVyKCkpOwotICAgIFN0cmluZyB2ID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2sodmFs
dWUpOworICAgIFN0cmluZyB2ID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2YWx1ZSk7
CiAKICAgICBpZiAoIWFsbG93U2V0dGluZ0ZyYW1lU3JjVG9KYXZhc2NyaXB0VXJsKGlmcmFtZSwg
dikpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlz
aW9uIDQ1NDQwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uc0Nv
bGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIENBTExC
QUNLX0ZVTkNfREVDTChIVE1MT3B0aW9uc0NvbGxlY3Rpb24KICAgICBlbHNlIHsKICAgICAgICAg
Ym9vbCBvazsKICAgICAgICAgdjg6OlRyeUNhdGNoIHRyeV9jYXRjaDsKLSAgICAgICAgaW50IGlu
ZGV4ID0gVG9JbnQzMihhcmdzWzFdLCBvayk7CisgICAgICAgIGludCBpbmRleCA9IHRvSW50MzIo
YXJnc1sxXSwgb2spOwogCiAgICAgICAgIGlmICh0cnlfY2F0Y2guSGFzQ2F1Z2h0KCkpCiAgICAg
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDQ1NDQwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0
RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHJlbW92ZUVsZW1lbnQoSFRNTAogICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwogICAgIH0KIAotICAgIGltcC0+cmVtb3ZlKFRvSW50MzIoYXJnc1swXSkpOwor
ICAgIGltcC0+cmVtb3ZlKHRvSW50MzIoYXJnc1swXSkpOwogICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNh
Y3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiA0NTQ0MCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw3ICs1NCw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChTUUxUcmFuc2FjdGlvbkV4
ZWN1dGUKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTdHJp
bmcgc3RhdGVtZW50ID0gVG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOworICAgIFN0cmluZyBzdGF0
ZW1lbnQgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAKICAgICBWZWN0b3I8U1FMVmFsdWU+
IHNxbFZhbHVlczsKIApAQCAtNzUsNyArNzUsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woU1FMVHJh
bnNhY3Rpb25FeGVjdXRlCiAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS0+SXNOdW1iZXIoKSkK
ICAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKFNRTFZhbHVlKHZhbHVlLT5OdW1iZXJW
YWx1ZSgpKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3FsVmFsdWVzLmFw
cGVuZChTUUxWYWx1ZShUb1dlYkNvcmVTdHJpbmcodmFsdWUpKSk7CisgICAgICAgICAgICAgICAg
c3FsVmFsdWVzLmFwcGVuZChTUUxWYWx1ZSh0b1dlYkNvcmVTdHJpbmcodmFsdWUpKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2Vy
Q29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNDU0NDApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFNldFRpbWVvdXRP
ckludGVydgogICAgIGludCB0aW1lcklkOwogCiAgICAgaWYgKGZ1bmN0aW9uLT5Jc1N0cmluZygp
KSB7Ci0gICAgICAgIFdlYkNvcmU6OlN0cmluZyBzdHJpbmdGdW5jdGlvbiA9IFRvV2ViQ29yZVN0
cmluZyhmdW5jdGlvbik7CisgICAgICAgIFdlYkNvcmU6OlN0cmluZyBzdHJpbmdGdW5jdGlvbiA9
IHRvV2ViQ29yZVN0cmluZyhmdW5jdGlvbik7CiAgICAgICAgIHRpbWVySWQgPSBET01UaW1lcjo6
aW5zdGFsbCh3b3JrZXJDb250ZXh0LCBuZXcgU2NoZWR1bGVkQWN0aW9uKHN0cmluZ0Z1bmN0aW9u
LCB3b3JrZXJDb250ZXh0LT51cmwoKSksIHRpbWVvdXQsIHNpbmdsZVNob3QpOwogICAgIH0gZWxz
ZSBpZiAoZnVuY3Rpb24tPklzRnVuY3Rpb24oKSkgewogICAgICAgICBzaXplX3QgcGFyYW1Db3Vu
dCA9IGFyZ3VtZW50Q291bnQgPj0gMiA/IGFyZ3VtZW50Q291bnQgLSAyIDogMDsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0
b20uY3BwCShyZXZpc2lvbiA0NTQ0MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsMTAgKzM0NSwx
MCBAQCBDQUxMQkFDS19GVU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RPcGVuKQogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIFN0cmluZyB1c2VyLCBwYXNzd2Q7CiAgICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPj0gNCAmJiAhYXJnc1szXS0+SXNVbmRlZmluZWQoKSkgewotICAgICAgICB1c2VyID0g
dmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1szXSk7CisgICAgICAgIHVzZXIgPSB0b1dl
YkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbM10pOwogCiAgICAgICAgIGlmIChhcmdzLkxl
bmd0aCgpID49IDUgJiYgIWFyZ3NbNF0tPklzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgICAgIHBh
c3N3ZCA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbNF0pOworICAgICAgICAgICAg
cGFzc3dkID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzRdKTsKICAgICAgICAg
ICAgIHhtbEh0dHBSZXF1ZXN0LT5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYywgdXNlciwgcGFzc3dk
LCBlYyk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPm9wZW4o
bWV0aG9kLCB1cmwsIGFzeW5jLCB1c2VyLCBlYyk7CkBAIC0zODQsNyArMzg0LDcgQEAgQ0FMTEJB
Q0tfRlVOQ19ERUNMKFhNTEh0dHBSZXF1ZXN0U2VuZCkKICAgICAgICAgICAgIEFTU0VSVChkb2N1
bWVudCk7CiAgICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2VuZChkb2N1bWVudCwgZWMpOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5zZW5kKHZhbHVlVG9T
dHJpbmdXaXRoTnVsbENoZWNrKGFyZyksIGVjKTsKKyAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0
LT5zZW5kKHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJnKSwgZWMpOwogICAgIH0KIAog
ICAgIGlmIChlYykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32159</attachid>
            <date>2009-07-01 16:44:47 -0700</date>
            <delta_ts>2009-07-02 14:27:18 -0700</delta_ts>
            <desc>patch3</desc>
            <filename>patch3.txt</filename>
            <type>text/plain</type>
            <size>34243</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTQ0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMDktMDctMDEgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
cHN0cmVhbSBWOEJpbmRpbmcgYW5kIHVwZGF0ZSBzb21lIGZ1bmN0aW9uIG5hbWVzLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjg1NworCisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06IFVwZGF0ZSBmdW5jdGlv
biBuYW1lcyBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlcy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OEJpbmRpbmcuY3BwOiBVcHN0cmVhbWVkIGZyb20gc3JjLmNocm9taXVtLm9yZy4KKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOEJpbmRpbmcuaDogVXBzdHJlYW1lZCBmcm9tIHNyYy5jaHJvbWl1bS5v
cmcuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWOExhenlFdmVudExpc3RlbmVyOjpnZXRMaXN0ZW5lckZ1bmN0aW9uKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhh
bmRsZUNvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNvbXBpbGVT
Y3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6c291cmNlTmFtZSk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmhhbmRsZUNvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5BTUVEX1BST1BFUlRZX1NFVFRFUik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNB
TExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9t
WFBhdGhOU1Jlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tWFBhdGhOU1Jl
c29sdmVyOjpsb29rdXBOYW1lc3BhY2VVUkkpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5D
X0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfU0VUVEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVF
bGVtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2V0VGltZW91dE9ySW50ZXJ2YWwpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNB
TExCQUNLX0ZVTkNfREVDTCk6CisKIDIwMDktMDctMDEgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA0NTQ0MCkK
KysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcg
Y29weSkKQEAgLTU2Miw3ICs1NjIsNyBAQCBFTkQKICAgICAgICAgICAgICRnZXR0ZXJTdHJpbmcg
PSAiaW1wX2luc3RhbmNlIjsKICAgICAgICAgfQogICAgICAgICBpZiAoJG5hdGl2ZVR5cGUgZXEg
IlN0cmluZyIpIHsKLSAgICAgICAgICAgICRnZXR0ZXJTdHJpbmcgPSAiVG9TdHJpbmcoJGdldHRl
clN0cmluZykiOworICAgICAgICAgICAgJGdldHRlclN0cmluZyA9ICJ0b1N0cmluZygkZ2V0dGVy
U3RyaW5nKSI7CiAgICAgICAgIH0KIAogICAgICAgICBteSAkcmVzdWx0OwpAQCAtMTA1Myw3ICsx
MDUzLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBpbXBsRml4ZWRI
ZWFkZXIsCiAgICAgICAgICAiI2luY2x1ZGUgXCJjb25maWcuaFwiXG4iIC4KICAgICAgICAgICIj
aW5jbHVkZSBcIlY4UHJveHkuaFwiXG4iIC4KLSAgICAgICAgICIjaW5jbHVkZSBcInY4X2JpbmRp
bmcuaFwiXG5cbiIgLgorICAgICAgICAgIiNpbmNsdWRlIFwiVjhCaW5kaW5nLmhcIlxuXG4iIC4K
ICAgICAgICAgICIjdW5kZWYgTE9HXG5cbiIpOwogCiAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5n
OwpAQCAtMTc5OSwxNSArMTc5OSwxNSBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgcmV0dXJu
ICJzdGF0aWNfY2FzdDwkdHlwZT4oJHZhbHVlLT5OdW1iZXJWYWx1ZSgpKSIgaWYgJHR5cGUgZXEg
ImZsb2F0IiBvciAkdHlwZSBlcSAiZG91YmxlIjsKICAgICByZXR1cm4gIiR2YWx1ZS0+TnVtYmVy
VmFsdWUoKSIgaWYgJHR5cGUgZXEgIlNWR051bWJlciI7CiAKLSAgICByZXR1cm4gIlRvSW50MzIo
JHZhbHVlJHttYXliZU9rUGFyYW19KSIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGxvbmciIG9yICR0
eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIgb3IgJHR5cGUgZXEgImxvbmciOworICAgIHJldHVybiAi
dG9JbnQzMigkdmFsdWUke21heWJlT2tQYXJhbX0pIiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9u
ZyIgb3IgJHR5cGUgZXEgInVuc2lnbmVkIHNob3J0IiBvciAkdHlwZSBlcSAibG9uZyI7CiAgICAg
cmV0dXJuICJzdGF0aWNfY2FzdDxSYW5nZTo6Q29tcGFyZUhvdz4oJHZhbHVlLT5JbnQzMlZhbHVl
KCkpIiBpZiAkdHlwZSBlcSAiQ29tcGFyZUhvdyI7CiAgICAgcmV0dXJuICJzdGF0aWNfY2FzdDxT
VkdQYWludDo6U1ZHUGFpbnRUeXBlPigkdmFsdWUtPlRvSW50MzIoKS0+SW50MzJWYWx1ZSgpKSIg
aWYgJHR5cGUgZXEgIlNWR1BhaW50VHlwZSI7CiAKLSAgICByZXR1cm4gIlRvV2ViQ29yZVN0cmlu
ZygkdmFsdWUpIiBpZiAkdHlwZSBlcSAiQXRvbWljU3RyaW5nIiBvciAkdHlwZSBlcSAiRE9NVXNl
ckRhdGEiOworICAgIHJldHVybiAidG9XZWJDb3JlU3RyaW5nKCR2YWx1ZSkiIGlmICR0eXBlIGVx
ICJBdG9taWNTdHJpbmciIG9yICR0eXBlIGVxICJET01Vc2VyRGF0YSI7CiAgICAgaWYgKCR0eXBl
IGVxICJET01TdHJpbmciKSB7Ci0gICAgICAgIHJldHVybiAidmFsdWVUb1N0cmluZ1dpdGhOdWxs
Q2hlY2soJHZhbHVlKSIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZl
cnROdWxsVG9OdWxsU3RyaW5nIn07Ci0gICAgICAgIHJldHVybiAidmFsdWVUb1N0cmluZ1dpdGhO
dWxsT3JVbmRlZmluZWRDaGVjaygkdmFsdWUpIiBpZiAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZyJ9OwotICAgICAgICBy
ZXR1cm4gIlRvV2ViQ29yZVN0cmluZygkdmFsdWUpIjsKKyAgICAgICAgcmV0dXJuICJ0b1dlYkNv
cmVTdHJpbmdXaXRoTnVsbENoZWNrKCR2YWx1ZSkiIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDb252ZXJ0TnVsbFRvTnVsbFN0cmluZyJ9OworICAgICAgICByZXR1cm4gInRv
V2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjaygkdmFsdWUpIiBpZiAkc2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0
cmluZyJ9OworICAgICAgICByZXR1cm4gInRvV2ViQ29yZVN0cmluZygkdmFsdWUpIjsKICAgICB9
CiAKICAgICBpZiAoJHR5cGUgZXEgIk5vZGVGaWx0ZXIiKSB7CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4QmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEJpbmRpbmcuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRp
bmcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKworI2luY2x1ZGUgIkF0
b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJNYXRoRXh0cmFz
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdCdWZmZXIu
aCIKKworI2luY2x1ZGUgPHY4Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gV2ViQ29y
ZVN0cmluZ1Jlc291cmNlIGlzIGEgaGVscGVyIGNsYXNzIGZvciB2OEV4dGVybmFsU3RyaW5nLiBJ
dCBpcyB1c2VkCisvLyB0byBtYW5hZ2UgdGhlIGxpZmUtY3ljbGUgb2YgdGhlIHVuZGVybHlpbmcg
YnVmZmVyIG9mIHRoZSBleHRlcm5hbCBzdHJpbmcuCitjbGFzcyBXZWJDb3JlU3RyaW5nUmVzb3Vy
Y2U6IHB1YmxpYyB2ODo6U3RyaW5nOjpFeHRlcm5hbFN0cmluZ1Jlc291cmNlIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBXZWJDb3JlU3RyaW5nUmVzb3VyY2UoY29uc3QgU3RyaW5nJiBzdHJpbmcp
CisgICAgICAgIDogbV9pbXBsKHN0cmluZy5pbXBsKCkpIHsgfQorCisgICAgdmlydHVhbCB+V2Vi
Q29yZVN0cmluZ1Jlc291cmNlKCkge30KKworICAgIGNvbnN0IHVpbnQxNl90KiBkYXRhKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90
Kj4obV9pbXBsLmNoYXJhY3RlcnMoKSk7CisgICAgfQorCisgICAgc2l6ZV90IGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1faW1wbC5sZW5ndGgoKTsgfQorCisgICAgU3RyaW5nIHdlYmNvcmVTdHJp
bmcoKSB7IHJldHVybiBtX2ltcGw7IH0KKworcHJpdmF0ZToKKyAgICAvLyBBIHNoYWxsb3cgY29w
eSBvZiB0aGUgc3RyaW5nLiBLZWVwcyB0aGUgc3RyaW5nIGJ1ZmZlciBhbGl2ZSB1bnRpbCB0aGUg
VjggZW5naW5lIGdhcmJhZ2UgY29sbGVjdHMgaXQuCisgICAgU3RyaW5nIG1faW1wbDsKK307CisK
K1N0cmluZyB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4
U3RyaW5nLCBib29sIGV4dGVybmFsaXplKQoreworICAgIFdlYkNvcmVTdHJpbmdSZXNvdXJjZSog
c3RyaW5nUmVzb3VyY2UgPSBzdGF0aWNfY2FzdDxXZWJDb3JlU3RyaW5nUmVzb3VyY2UqPih2OFN0
cmluZy0+R2V0RXh0ZXJuYWxTdHJpbmdSZXNvdXJjZSgpKTsKKyAgICBpZiAoc3RyaW5nUmVzb3Vy
Y2UpCisgICAgICAgIHJldHVybiBzdHJpbmdSZXNvdXJjZS0+d2ViY29yZVN0cmluZygpOworCisg
ICAgaW50IGxlbmd0aCA9IHY4U3RyaW5nLT5MZW5ndGgoKTsKKyAgICBpZiAobGVuZ3RoID09IDAp
IHsKKyAgICAgICAgLy8gQXZvaWQgdHJ5aW5nIHRvIG1vcnBoIGVtcHR5IHN0cmluZ3MsIGFzIHRo
ZXkgZG8gbm90IGhhdmUgZW5vdWdoIHJvb20gdG8gY29udGFpbiB0aGUgZXh0ZXJuYWwgcmVmZXJl
bmNlLgorICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICB9CisKKyAgICBV
Q2hhciogYnVmZmVyOworICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQobGVuZ3RoLCBidWZmZXIpOworICAgIHY4U3RyaW5nLT5Xcml0ZShyZWludGVycHJldF9j
YXN0PHVpbnQxNl90Kj4oYnVmZmVyKSwgMCwgbGVuZ3RoKTsKKworICAgIGlmIChleHRlcm5hbGl6
ZSkgeworICAgICAgICBXZWJDb3JlU3RyaW5nUmVzb3VyY2UqIHJlc291cmNlID0gbmV3IFdlYkNv
cmVTdHJpbmdSZXNvdXJjZShyZXN1bHQpOworICAgICAgICBpZiAoIXY4U3RyaW5nLT5NYWtlRXh0
ZXJuYWwocmVzb3VyY2UpKSB7CisgICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGEgZmFpbHVyZSBk
ZWxldGUgdGhlIGV4dGVybmFsIHJlc291cmNlIGFzIGl0IHdhcyBub3QgdXNlZC4KKyAgICAgICAg
ICAgIGRlbGV0ZSByZXNvdXJjZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitTdHJpbmcgdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gb2JqZWN0KQoreworICAgIGlmIChvYmplY3QtPklzU3RyaW5nKCkpIHsKKyAgICAgICAgdjg6
OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZyA9IHY4OjpIYW5kbGU8djg6OlN0cmluZz46OkNh
c3Qob2JqZWN0KTsKKyAgICAgICAgU3RyaW5nIHdlYkNvcmVTdHJpbmcgPSB2OFN0cmluZ1RvV2Vi
Q29yZVN0cmluZyh2OFN0cmluZywgdHJ1ZSk7CisgICAgICAgIHJldHVybiB3ZWJDb3JlU3RyaW5n
OworICAgIH0gZWxzZSBpZiAob2JqZWN0LT5Jc0ludDMyKCkpIHsKKyAgICAgICAgaW50IHZhbHVl
ID0gb2JqZWN0LT5JbnQzMlZhbHVlKCk7CisgICAgICAgIC8vIE1vc3QgbnVtYmVycyB1c2VkIGFy
ZSA8PSAxMDAuIEV2ZW4gaWYgdGhleSBhcmVuJ3QgdXNlZCB0aGVyZSdzIHZlcnkgbGl0dGxlIGlu
IHVzaW5nIHRoZSBzcGFjZS4KKyAgICAgICAgY29uc3QgaW50IGtMb3dOdW1iZXJzID0gMTAwOwor
ICAgICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGxvd051bWJlcnNba0xvd051bWJlcnMgKyAxXTsK
KyAgICAgICAgU3RyaW5nIHdlYkNvcmVTdHJpbmc7CisgICAgICAgIGlmICgwIDw9IHZhbHVlICYm
IHZhbHVlIDw9IGtMb3dOdW1iZXJzKSB7CisgICAgICAgICAgICB3ZWJDb3JlU3RyaW5nID0gbG93
TnVtYmVyc1t2YWx1ZV07CisgICAgICAgICAgICBpZiAoIXdlYkNvcmVTdHJpbmcpIHsKKyAgICAg
ICAgICAgICAgICBBdG9taWNTdHJpbmcgdmFsdWVTdHJpbmcgPSBBdG9taWNTdHJpbmcoU3RyaW5n
OjpudW1iZXIodmFsdWUpKTsKKyAgICAgICAgICAgICAgICBsb3dOdW1iZXJzW3ZhbHVlXSA9IHZh
bHVlU3RyaW5nOworICAgICAgICAgICAgICAgIHdlYkNvcmVTdHJpbmcgPSB2YWx1ZVN0cmluZzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgd2ViQ29yZVN0cmlu
ZyA9IFN0cmluZzo6bnVtYmVyKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHdlYkNvcmVTdHJpbmc7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgdjg6OlRyeUNhdGNoIGJsb2NrOworICAgICAgICB2ODo6
SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nID0gb2JqZWN0LT5Ub1N0cmluZygpOworICAgICAg
ICAvLyBDaGVjayBmb3IgZW1wdHkgaGFuZGxlcyB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYW4g
ZXhjZXB0aW9uCisgICAgICAgIC8vIGlzIHRocm93biBhcyBwYXJ0IG9mIGludm9raW5nIHRvU3Ry
aW5nIG9uIHRoZSBvYmplY3RlY3QuCisgICAgICAgIGlmICh2OFN0cmluZy5Jc0VtcHR5KCkpCisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICAgICAgcmV0dXJuIHY4
U3RyaW5nVG9XZWJDb3JlU3RyaW5nKHY4U3RyaW5nLCBmYWxzZSk7CisgICAgfQorfQorCitBdG9t
aWNTdHJpbmcgdjhTdHJpbmdUb0F0b21pY1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3Ry
aW5nPiB2OFN0cmluZykKK3sKKyAgICBTdHJpbmcgc3RyaW5nID0gdjhTdHJpbmdUb1dlYkNvcmVT
dHJpbmcodjhTdHJpbmcsIHRydWUpOworICAgIHJldHVybiBBdG9taWNTdHJpbmcoc3RyaW5nKTsK
K30KKworQXRvbWljU3RyaW5nIHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmcodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHY4U3RyaW5nKQoreworICAgIFN0cmluZyBzdHJpbmcgPSB2OFZhbHVlVG9X
ZWJDb3JlU3RyaW5nKHY4U3RyaW5nKTsKKyAgICByZXR1cm4gQXRvbWljU3RyaW5nKHN0cmluZyk7
Cit9CisKK3Y4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJp
bmcpCit7CisgICAgaWYgKCFzdHJpbmcubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB2ODo6U3Ry
aW5nOjpFbXB0eSgpOworICAgIHJldHVybiB2ODo6U3RyaW5nOjpOZXdFeHRlcm5hbChuZXcgV2Vi
Q29yZVN0cmluZ1Jlc291cmNlKHN0cmluZykpOworfQorCit2ODo6TG9jYWw8djg6OlN0cmluZz4g
djhFeHRlcm5hbFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmlu
Zy5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpTdHJpbmc6OkVtcHR5KCk7CisgICAgcmV0
dXJuIHY4OjpTdHJpbmc6Ok5ld0V4dGVybmFsKG5ldyBXZWJDb3JlU3RyaW5nUmVzb3VyY2Uoc3Ry
aW5nKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHJldmlzaW9u
IDQ1NDQwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTYgKzMxLDc4IEBACiAjaWZuZGVmIFY4QmluZGluZ19oCiAjZGVmaW5lIFY4Qmlu
ZGluZ19oCiAKLS8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGZvcndhcmRpbmcgaGVhZGVy
IHVudGlsIGFsbCBiaW5kaW5ncyBoYXZlIG1pZ3JhdGVkCi0vLyBvdmVyIGFuZCB2OF9iaW5kaW5n
IGFjdHVhbGx5IGJlY29tZXMgVjhCaW5kaW5nLgotI2luY2x1ZGUgInY4X2JpbmRpbmcuaCIKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSA8djguaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi0gICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIG1pZ3JhdGlvbiBpcyBjb21wbGV0ZS4KKyAg
ICAvLyBDb252ZXJ0IHY4IHR5cGVzIHRvIGEgV2ViQ29yZTo6U3RyaW5nLiBJZiB0aGUgVjggc3Ry
aW5nIGlzIG5vdCBhbHJlYWR5CisgICAgLy8gYW4gZXh0ZXJuYWwgc3RyaW5nIHRoZW4gaXQgaXMg
dHJhbnNmb3JtZWQgaW50byBhbiBleHRlcm5hbCBzdHJpbmcgYXQgdGhpcworICAgIC8vIHBvaW50
IHRvIGF2b2lkIHJlcGVhdGVkIGNvbnZlcnNpb25zLgorICAgIFN0cmluZyB2OFN0cmluZ1RvV2Vi
Q29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+LCBib29sIGV4dGVybmFsaXplKTsKKyAg
ICBTdHJpbmcgdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwor
CisgICAgLy8gQ29udmVydCB2OCB0eXBlcyB0byBhIFdlYkNvcmU6OkF0b21pY1N0cmluZy4KKyAg
ICBBdG9taWNTdHJpbmcgdjhTdHJpbmdUb0F0b21pY1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2
ODo6U3RyaW5nPik7CisgICAgQXRvbWljU3RyaW5nIHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJp
bmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKworICAgIC8vIENvbnZlcnQgYSBzdHJpbmcgdG8g
YSBWOCBzdHJpbmcuCisgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZyhjb25zdCBT
dHJpbmcmKTsKKworICAgIGlubGluZSBTdHJpbmcgdG9TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJp
bmcpCisgICAgeworICAgICAgICByZXR1cm4gc3RyaW5nOworICAgIH0KKworICAgIC8vIFJldHVy
biBhIFY4IGV4dGVybmFsIHN0cmluZyB0aGF0IHNoYXJlcyB0aGUgdW5kZXJseWluZyBidWZmZXIg
d2l0aCB0aGUgZ2l2ZW4KKyAgICAvLyBXZWJDb3JlIHN0cmluZy4gVGhlIHJlZmVyZW5jZSBjb3Vu
dGluZyBtZWNoYW5pc20gaXMgdXNlZCB0byBrZWVwIHRoZQorICAgIC8vIHVuZGVybHlpbmcgYnVm
ZmVyIGFsaXZlIHdoaWxlIHRoZSBzdHJpbmcgaXMgc3RpbGwgbGl2ZSBpbiB0aGUgVjggZW5naW5l
LgorICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiB2OEV4dGVybmFsU3RyaW5nKGNvbnN0IFN0cmlu
ZyYpOworCisgICAgLy8gQ29udmVydCBhIHZhbHVlIHRvIGEgMzItYml0IGludGVnZXIuICBUaGUg
Y29udmVyc2lvbiBmYWlscyBpZiB0aGUKKyAgICAvLyB2YWx1ZSBjYW5ub3QgYmUgY29udmVydGVk
IHRvIGFuIGludGVnZXIgb3IgY29udmVydHMgdG8gbmFuIG9yIHRvIGFuIGluZmluaXR5LgorICAg
IGlubGluZSBpbnQgdG9JbnQzMih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wmIG9r
KQorICAgIHsKKyAgICAgICAgb2sgPSB0cnVlOworCisgICAgICAgIC8vIEZhc3QgY2FzZS4gIFRo
ZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0IGludGVnZXIuCisgICAgICAgIGlmICh2YWx1ZS0+
SXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLT5JbnQzMlZhbHVlKCk7CisKKyAg
ICAgICAgLy8gQ2FuIHRoZSB2YWx1ZSBiZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXI/CisgICAgICAg
IHY4OjpMb2NhbDx2ODo6TnVtYmVyPiBudW1iZXJPYmplY3QgPSB2YWx1ZS0+VG9OdW1iZXIoKTsK
KyAgICAgICAgaWYgKG51bWJlck9iamVjdC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG9rID0g
ZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERv
ZXMgdGhlIHZhbHVlIGNvbnZlcnQgdG8gbmFuIG9yIHRvIGFuIGluZmluaXR5PworICAgICAgICBk
b3VibGUgbnVtYmVyVmFsdWUgPSBudW1iZXJPYmplY3QtPlZhbHVlKCk7CisgICAgICAgIGlmIChp
c25hbihudW1iZXJWYWx1ZSkgfHwgaXNpbmYobnVtYmVyVmFsdWUpKSB7CisgICAgICAgICAgICBv
ayA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICAv
LyBDYW4gdGhlIHZhbHVlIGJlIGNvbnZlcnRlZCB0byBhIDMyLWJpdCBpbnRlZ2VyPworICAgICAg
ICB2ODo6TG9jYWw8djg6OkludDMyPiBpbnRWYWx1ZSA9IHZhbHVlLT5Ub0ludDMyKCk7CisgICAg
ICAgIGlmIChpbnRWYWx1ZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG9rID0gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJldHVybiB0aGUg
cmVzdWx0IG9mIHRoZSBpbnQzMiBjb252ZXJzaW9uLgorICAgICAgICByZXR1cm4gaW50VmFsdWUt
PlZhbHVlKCk7CisgICAgfQorCisgICAgLy8gQ29udmVydCBhIHZhbHVlIHRvIGEgMzItYml0IGlu
dGVnZXIgYXNzdW1pbmcgdGhlIGNvbnZlcnNpb24gY2Fubm90IGZhaWwuCiAgICAgaW5saW5lIGlu
dCB0b0ludDMyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBUb0ludDMyKHZhbHVlKTsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgcmV0dXJuIHRv
SW50MzIodmFsdWUsIG9rKTsKICAgICB9CiAKICAgICBpbmxpbmUgZmxvYXQgdG9GbG9hdCh2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSkKQEAgLTQ4LDIyICsxMTAsMTcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLT5OdW1iZXJW
YWx1ZSgpKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIG9uY2UgbWlncmF0aW9uIGlz
IGNvbXBsZXRlLgotICAgIGlubGluZSBTdHJpbmcgdG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBvYmopCisgICAgLy8gRklYTUU6IERyb3AgdGhpcyBpbiBmYXZvciBvZiB0aGUg
dHlwZSBzcGVjaWZpYyB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nIHdoZW4gd2UgcmV3b3JrIHRoZSBj
b2RlIGdlbmVyYXRpb24uCisgICAgaW5saW5lIFN0cmluZyB0b1dlYkNvcmVTdHJpbmcodjg6Okhh
bmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBUb1dlYkNvcmVT
dHJpbmcob2JqKTsKKyAgICAgICAgcmV0dXJuIHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcob2JqZWN0
KTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIG9uY2UgbWlncmF0aW9uIGlzIGNvbXBs
ZXRlLgorICAgIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBzdGls
bCBvd25lZCBieSB0aGUgYXJndW1lbnQKKyAgICAvLyBhbmQgd2lsbCBiZSBkZWFsbG9jYXRlZCB3
aGVuIHRoZSBhcmd1bWVudCBpcyBkZWFsbG9jYXRlZC4KICAgICBpbmxpbmUgY29uc3QgdWludDE2
X3QqIGZyb21XZWJDb3JlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIEZyb21XZWJDb3JlU3RyaW5nKHN0cik7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFJl
bmFtZSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayBvbmNlIG1pZ3JhdGlvbiBpcyBjb21wbGV0
ZS4KLSAgICBpbmxpbmUgU3RyaW5nIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sodjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9TdHJp
bmdXaXRoTnVsbENoZWNrKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDE2X3QqPihzdHIuY2hhcmFjdGVycygpKTsKICAgICB9CiAKICAgICBpbmxpbmUg
Ym9vbCBpc1VuZGVmaW5lZE9yTnVsbCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCkBAIC03
NSw3ICsxMzIsNDAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHsKICAgICAgICAgcmV0dXJu
IHZhbHVlID8gdjg6OlRydWUoKSA6IHY4OjpGYWxzZSgpOwogICAgIH0KKyAgIAorICAgIGlubGlu
ZSBTdHJpbmcgdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUtPklzTnVsbCgpKSAKKyAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHY4VmFsdWVUb1dlYkNvcmVTdHJp
bmcodmFsdWUpOworICAgIH0KKworICAgIGlubGluZSBTdHJpbmcgdG9XZWJDb3JlU3RyaW5nV2l0
aE51bGxPclVuZGVmaW5lZENoZWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkgfHwgdmFsdWUtPklzVW5kZWZpbmVkKCkpCisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB0b1dlYkNvcmVTdHJp
bmcodmFsdWUpOworICAgIH0KKyAKKyAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2
OFVuZGV0ZWN0YWJsZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKKyAgICB7CisgICAgICAgIHJl
dHVybiB2ODo6U3RyaW5nOjpOZXdVbmRldGVjdGFibGUoZnJvbVdlYkNvcmVTdHJpbmcoc3RyKSwg
c3RyLmxlbmd0aCgpKTsKKyAgICB9CiAKLX0KKyAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHY4U3RyaW5nT3JOdWxsKGNvbnN0IFN0cmluZyYgc3RyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0ci5pc051bGwoKSA/IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2ODo6TnVsbCgpKSA6IHY4
OjpIYW5kbGU8djg6OlZhbHVlPih2OFN0cmluZyhzdHIpKTsKKyAgICB9CisKKyAgICBpbmxpbmUg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JVbmRlZmluZWQoY29uc3QgU3RyaW5nJiBz
dHIpCisgICAgeworICAgICAgICByZXR1cm4gc3RyLmlzTnVsbCgpID8gdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KHY4OjpVbmRlZmluZWQoKSkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjhTdHJpbmco
c3RyKSk7CisgICAgfQorCisgICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFN0cmlu
Z09yRmFsc2UoY29uc3QgU3RyaW5nJiBzdHIpCisgICAgeworICAgICAgICByZXR1cm4gc3RyLmlz
TnVsbCgpID8gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4OjpGYWxzZSgpKSA6IHY4OjpIYW5kbGU8
djg6OlZhbHVlPih2OFN0cmluZyhzdHIpKTsKKyAgICB9Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBWOEJpbmRpbmdfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOExh
enlFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
TGF6eUV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiA0NTQ0MCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsx
MTAsNyBAQCB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBWOExhenlFdmVudExpc3RlCiAgICAgICAg
ICAgICBpZiAoIXZhbHVlLklzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1
ZS0+SXNGdW5jdGlvbigpKTsKICAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9u
PiBsaXN0ZW5lckZ1bmN0aW9uID0gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QodmFsdWUp
OwotICAgICAgICAgICAgICAgIGxpc3RlbmVyRnVuY3Rpb24tPlNldE5hbWUodjg6OlN0cmluZzo6
TmV3KEZyb21XZWJDb3JlU3RyaW5nKG1fZnVuY3Rpb25OYW1lKSwgbV9mdW5jdGlvbk5hbWUubGVu
Z3RoKCkpKTsKKyAgICAgICAgICAgICAgICBsaXN0ZW5lckZ1bmN0aW9uLT5TZXROYW1lKHY4OjpT
dHJpbmc6Ok5ldyhmcm9tV2ViQ29yZVN0cmluZyhtX2Z1bmN0aW9uTmFtZSksIG1fZnVuY3Rpb25O
YW1lLmxlbmd0aCgpKSk7CiAKICAgICAgICAgICAgICAgICBtX2xpc3RlbmVyID0gdjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uPjo6TmV3KGxpc3RlbmVyRnVuY3Rpb24pOwogI2lmbmRlZiBOREVC
VUcKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAkocmV2aXNpb24gNDU0NDApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDcsMTEgKzcw
NywxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVDb25zb2xlTWVzc2FnZSh2ODo6SGFuCiAKICAgICB2
ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGVycm9yTWVzc2FnZVN0cmluZyA9IG1lc3NhZ2UtPkdldCgp
OwogICAgIEFTU0VSVCghZXJyb3JNZXNzYWdlU3RyaW5nLklzRW1wdHkoKSk7Ci0gICAgU3RyaW5n
IGVycm9yTWVzc2FnZSA9IFRvV2ViQ29yZVN0cmluZyhlcnJvck1lc3NhZ2VTdHJpbmcpOworICAg
IFN0cmluZyBlcnJvck1lc3NhZ2UgPSB0b1dlYkNvcmVTdHJpbmcoZXJyb3JNZXNzYWdlU3RyaW5n
KTsKIAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXNvdXJjZU5hbWUgPSBtZXNzYWdlLT5H
ZXRTY3JpcHRSZXNvdXJjZU5hbWUoKTsKICAgICBib29sIHVzZVVSTCA9IHJlc291cmNlTmFtZS5J
c0VtcHR5KCkgfHwgIXJlc291cmNlTmFtZS0+SXNTdHJpbmcoKTsKLSAgICBTdHJpbmcgcmVzb3Vy
Y2VOYW1lU3RyaW5nID0gdXNlVVJMID8gZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogVG9XZWJD
b3JlU3RyaW5nKHJlc291cmNlTmFtZSk7CisgICAgU3RyaW5nIHJlc291cmNlTmFtZVN0cmluZyA9
IHVzZVVSTCA/IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6IHRvV2ViQ29yZVN0cmluZyhyZXNv
dXJjZU5hbWUpOwogICAgIEphdmFTY3JpcHRDb25zb2xlTWVzc2FnZSBjb25zb2xlTWVzc2FnZShl
cnJvck1lc3NhZ2UsIHJlc291cmNlTmFtZVN0cmluZywgbWVzc2FnZS0+R2V0TGluZU51bWJlcigp
KTsKICAgICBDb25zb2xlTWVzc2FnZU1hbmFnZXI6OmFkZE1lc3NhZ2UocGFnZSwgY29uc29sZU1l
c3NhZ2UpOwogfQpAQCAtOTY1LDcgKzk2NSw3IEBAIHZvaWQgVjhQcm94eTo6ZGlzY29ubmVjdEV2
ZW50TGlzdGVuZXJzKCkKIAogdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBWOFByb3h5Ojpjb21waWxl
U2NyaXB0KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSwgaW50IGJhc2VMaW5lKQogewotICAgIGNvbnN0IHVpbnQxNl90KiBmaWxlTmFtZVN0cmluZyA9
IEZyb21XZWJDb3JlU3RyaW5nKGZpbGVOYW1lKTsKKyAgICBjb25zdCB1aW50MTZfdCogZmlsZU5h
bWVTdHJpbmcgPSBmcm9tV2ViQ29yZVN0cmluZyhmaWxlTmFtZSk7CiAgICAgdjg6OkhhbmRsZTx2
ODo6U3RyaW5nPiBuYW1lID0gdjg6OlN0cmluZzo6TmV3KGZpbGVOYW1lU3RyaW5nLCBmaWxlTmFt
ZS5sZW5ndGgoKSk7CiAgICAgdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4gbGluZSA9IHY4OjpJbnRl
Z2VyOjpOZXcoYmFzZUxpbmUpOwogICAgIHY4OjpTY3JpcHRPcmlnaW4gb3JpZ2luKG5hbWUsIGxp
bmUpOwpAQCAtMzIxNyw3ICszMjE3LDcgQEAgU3RyaW5nIFY4UHJveHk6OnNvdXJjZU5hbWUoKQog
ICAgIGZyYW1lU291cmNlTmFtZSA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KHY4VXRp
bGl0eUNvbnRleHQtPkdsb2JhbCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJmcmFtZVNvdXJjZU5h
bWUiKSkpOwogICAgIGlmIChmcmFtZVNvdXJjZU5hbWUuSXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIFRvV2ViQ29yZVN0cmluZyh2ODo6RGVidWc6OkNhbGwo
ZnJhbWVTb3VyY2VOYW1lKSk7CisgICAgcmV0dXJuIHRvV2ViQ29yZVN0cmluZyh2ODo6RGVidWc6
OkNhbGwoZnJhbWVTb3VyY2VOYW1lKSk7CiB9CiAKIHZvaWQgVjhQcm94eTo6cmVnaXN0ZXJFeHRl
bnNpb24odjg6OkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBjb25zdCBTdHJpbmcmIHNjaGVtZVJlc3Ry
aWN0aW9uKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmNwcAkocmV2aXNpb24gNDU0NDApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcx
LDExICs3MSwxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVDb25zb2xlTWVzc2FnZSh2ODo6SGFuCiAg
ICAgCiAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBlcnJvck1lc3NhZ2VTdHJpbmcgPSBtZXNz
YWdlLT5HZXQoKTsKICAgICBBU1NFUlQoIWVycm9yTWVzc2FnZVN0cmluZy5Jc0VtcHR5KCkpOwot
ICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBUb1dlYkNvcmVTdHJpbmcoZXJyb3JNZXNzYWdlU3Ry
aW5nKTsKKyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gdG9XZWJDb3JlU3RyaW5nKGVycm9yTWVz
c2FnZVN0cmluZyk7CiAgICAgCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc291cmNlTmFt
ZSA9IG1lc3NhZ2UtPkdldFNjcmlwdFJlc291cmNlTmFtZSgpOwogICAgIGJvb2wgdXNlVVJMID0g
KHJlc291cmNlTmFtZS5Jc0VtcHR5KCkgfHwgIXJlc291cmNlTmFtZS0+SXNTdHJpbmcoKSk7Ci0g
ICAgU3RyaW5nIHJlc291cmNlTmFtZVN0cmluZyA9IHVzZVVSTCA/IHdvcmtlckNvbnRleHQtPnVy
bCgpIDogVG9XZWJDb3JlU3RyaW5nKHJlc291cmNlTmFtZSk7CisgICAgU3RyaW5nIHJlc291cmNl
TmFtZVN0cmluZyA9IHVzZVVSTCA/IHdvcmtlckNvbnRleHQtPnVybCgpIDogdG9XZWJDb3JlU3Ry
aW5nKHJlc291cmNlTmFtZSk7CiAgICAgCiAgICAgd29ya2VyQ29udGV4dC0+YWRkTWVzc2FnZShD
b25zb2xlRGVzdGluYXRpb24sIEpTTWVzc2FnZVNvdXJjZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIGVy
cm9yTWVzc2FnZSwgbWVzc2FnZS0+R2V0TGluZU51bWJlcigpLCByZXNvdXJjZU5hbWVTdHJpbmcp
OwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZURlY2xhcmF0
aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiA0NTQ0MCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwMSw3ICsyMDEsNyBAQCBOQU1FRF9QUk9QRVJUWV9TRVRURVIoQ1NT
U3R5bGVEZWNsYXJhdGlvCiAgICAgaWYgKCFwcm9wSW5mbykKICAgICAgICAgcmV0dXJuIG5vdEhh
bmRsZWRCeUludGVyY2VwdG9yKCk7CiAKLSAgICBTdHJpbmcgcHJvcGVydHlWYWx1ZSA9IHZhbHVl
VG9TdHJpbmdXaXRoTnVsbENoZWNrKHZhbHVlKTsKKyAgICBTdHJpbmcgcHJvcGVydHlWYWx1ZSA9
IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sodmFsdWUpOwogICAgIGlmIChwcm9wSW5mby0+
aGFkUGl4ZWxPclBvc1ByZWZpeCkKICAgICAgICAgcHJvcGVydHlWYWx1ZS5hcHBlbmQoInB4Iik7
CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NDQwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTMgKzEwNSwxMyBAQCBDQUxMQkFDS19G
VU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4CiAgICAgc3dpdGNoIChhcmdzLkxlbmd0aCgp
KSB7CiAgICAgY2FzZSAxOgogICAgICAgICBpZiAoYXJnc1swXS0+SXNTdHJpbmcoKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKFRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKSk7
CisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcih0b1dlYkNvcmVTdHJpbmcoYXJn
c1swXSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xv
cih0b0Zsb2F0KGFyZ3NbMF0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgogICAgICAg
ICBpZiAoYXJnc1swXS0+SXNTdHJpbmcoKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9r
ZUNvbG9yKFRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKSwgdG9GbG9hdChhcmdzWzFdKSk7CisgICAg
ICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcih0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSks
IHRvRmxvYXQoYXJnc1sxXSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb250ZXh0LT5z
ZXRTdHJva2VDb2xvcih0b0Zsb2F0KGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0pKTsKICAgICAg
ICAgYnJlYWs7CkBAIC0xMzUsMTMgKzEzNSwxMyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFz
UmVuZGVyaW5nQ29udGV4CiAgICAgc3dpdGNoIChhcmdzLkxlbmd0aCgpKSB7CiAgICAgY2FzZSAx
OgogICAgICAgICBpZiAoYXJnc1swXS0+SXNTdHJpbmcoKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnNldEZpbGxDb2xvcihUb1dlYkNvcmVTdHJpbmcoYXJnc1swXSkpOworICAgICAgICAgICAgY29u
dGV4dC0+c2V0RmlsbENvbG9yKHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKSk7CiAgICAgICAgIGVs
c2UgCiAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IodG9GbG9hdChhcmdzWzBdKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKICAgICAgICAgaWYgKGFyZ3NbMF0tPklzU3Ry
aW5nKCkpCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoVG9XZWJDb3JlU3RyaW5n
KGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0pKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEZp
bGxDb2xvcih0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSksIHRvRmxvYXQoYXJnc1sxXSkpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IodG9GbG9hdChhcmdz
WzBdKSwgdG9GbG9hdChhcmdzWzFdKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTg0LDEzICsxODQs
MTMgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleAogICAgICAgICBi
cmVhazsKICAgICBjYXNlIDQ6CiAgICAgICAgIGlmIChhcmdzWzNdLT5Jc1N0cmluZygpKQotICAg
ICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KHRvRmxvYXQoYXJnc1swXSksIHRvRmxvYXQoYXJn
c1sxXSksIHRvRmxvYXQoYXJnc1syXSksIFRvV2ViQ29yZVN0cmluZyhhcmdzWzNdKSk7CisgICAg
ICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3codG9GbG9hdChhcmdzWzBdKSwgdG9GbG9hdChhcmdz
WzFdKSwgdG9GbG9hdChhcmdzWzJdKSwgdG9XZWJDb3JlU3RyaW5nKGFyZ3NbM10pKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KHRvRmxvYXQoYXJnc1swXSks
IHRvRmxvYXQoYXJnc1sxXSksIHRvRmxvYXQoYXJnc1syXSksIHRvRmxvYXQoYXJnc1szXSkpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIDU6CiAgICAgICAgIGlmIChhcmdzWzNdLT5Jc1N0cmlu
ZygpKQotICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KHRvRmxvYXQoYXJnc1swXSksIHRv
RmxvYXQoYXJnc1sxXSksIHRvRmxvYXQoYXJnc1syXSksIFRvV2ViQ29yZVN0cmluZyhhcmdzWzNd
KSwgdG9GbG9hdChhcmdzWzRdKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3codG9G
bG9hdChhcmdzWzBdKSwgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSwgdG9XZWJD
b3JlU3RyaW5nKGFyZ3NbM10pLCB0b0Zsb2F0KGFyZ3NbNF0pKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KHRvRmxvYXQoYXJnc1swXSksIHRvRmxvYXQoYXJn
c1sxXSksIHRvRmxvYXQoYXJnc1syXSksIHRvRmxvYXQoYXJnc1szXSksIHRvRmxvYXQoYXJnc1s0
XSkpOwogICAgICAgICBicmVhazsKQEAgLTI5MSw3ICsyOTEsNyBAQCBDQUxMQkFDS19GVU5DX0RF
Q0woQ2FudmFzUmVuZGVyaW5nQ29udGV4CiAKICAgICBpZiAoVjhIVE1MSW1hZ2VFbGVtZW50OjpI
YXNJbnN0YW5jZShhcmcpKSB7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlX2VsZW1l
bnQgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MSW1hZ2VFbGVtZW50Pihh
cmcpOwotICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VGcm9tUmVjdChpbWFnZV9lbGVtZW50LCAg
dG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSwgdG9GbG9hdChhcmdzWzNdKSwgdG9G
bG9hdChhcmdzWzRdKSwgdG9GbG9hdChhcmdzWzVdKSwgdG9GbG9hdChhcmdzWzZdKSwgdG9GbG9h
dChhcmdzWzddKSwgdG9GbG9hdChhcmdzWzhdKSwgVG9XZWJDb3JlU3RyaW5nKGFyZ3NbOV0pKTsK
KyAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlRnJvbVJlY3QoaW1hZ2VfZWxlbWVudCwgIHRvRmxv
YXQoYXJnc1sxXSksIHRvRmxvYXQoYXJnc1syXSksIHRvRmxvYXQoYXJnc1szXSksIHRvRmxvYXQo
YXJnc1s0XSksIHRvRmxvYXQoYXJnc1s1XSksIHRvRmxvYXQoYXJnc1s2XSksIHRvRmxvYXQoYXJn
c1s3XSksIHRvRmxvYXQoYXJnc1s4XSksIHRvV2ViQ29yZVN0cmluZyhhcmdzWzldKSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIFY4UHJveHk6OnRocm93RXJyb3IoVjhQcm94eTo6VHlwZUVycm9yLCAi
ZHJhd0ltYWdlRnJvbVJlY3Q6IEludmFsaWQgdHlwZSBvZiBhcmd1bWVudHMiKTsKIApAQCAtMzA4
LDcgKzMwOCw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKICAg
ICBpZiAoVjhIVE1MSW1hZ2VFbGVtZW50OjpIYXNJbnN0YW5jZShhcmcpKSB7CiAgICAgICAgIEhU
TUxJbWFnZUVsZW1lbnQqIGltYWdlX2VsZW1lbnQgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBl
clRvTm9kZTxIVE1MSW1hZ2VFbGVtZW50PihhcmcpOwogICAgICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICAgICAgUmVmUHRyPENhbnZhc1BhdHRlcm4+IHBhdHRlcm4gPSBjb250ZXh0LT5j
cmVhdGVQYXR0ZXJuKGltYWdlX2VsZW1lbnQsIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGFy
Z3NbMV0pLCBlYyk7CisgICAgICAgIFJlZlB0cjxDYW52YXNQYXR0ZXJuPiBwYXR0ZXJuID0gY29u
dGV4dC0+Y3JlYXRlUGF0dGVybihpbWFnZV9lbGVtZW50LCB0b1dlYkNvcmVTdHJpbmdXaXRoTnVs
bENoZWNrKGFyZ3NbMV0pLCBlYyk7CiAgICAgICAgIGlmIChlYyAhPSAwKSB7CiAgICAgICAgICAg
ICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgICAgICAgICAgcmV0dXJuIG5vdEhh
bmRsZWRCeUludGVyY2VwdG9yKCk7CkBAIC0zMTksNyArMzE5LDcgQEAgQ0FMTEJBQ0tfRlVOQ19E
RUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleAogICAgIGlmIChWOEhUTUxDYW52YXNFbGVtZW50OjpI
YXNJbnN0YW5jZShhcmcpKSB7CiAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXNfZWxl
bWVudCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxDYW52YXNFbGVtZW50
PihhcmcpOwogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgUmVmUHRyPENh
bnZhc1BhdHRlcm4+IHBhdHRlcm4gPSBjb250ZXh0LT5jcmVhdGVQYXR0ZXJuKGNhbnZhc19lbGVt
ZW50LCB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzFdKSwgZWMpOworICAgICAgICBS
ZWZQdHI8Q2FudmFzUGF0dGVybj4gcGF0dGVybiA9IGNvbnRleHQtPmNyZWF0ZVBhdHRlcm4oY2Fu
dmFzX2VsZW1lbnQsIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1sxXSksIGVjKTsK
ICAgICAgICAgaWYgKGVjICE9IDApIHsKICAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2Vw
dGlvbihlYyk7CiAgICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsK
QEAgLTM0NSw3ICszNDUsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29u
dGV4CiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogICAgIH0KIAot
ICAgIFN0cmluZyB0ZXh0ID0gVG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOworICAgIFN0cmluZyB0
ZXh0ID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgIGZsb2F0IHggPSB0b0Zsb2F0KGFy
Z3NbMV0pOwogICAgIGZsb2F0IHkgPSB0b0Zsb2F0KGFyZ3NbMl0pOwogCkBAIC0zNzEsNyArMzcx
LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleAogICAgICAgICBy
ZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgdGV4
dCA9IFRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICBTdHJpbmcgdGV4dCA9IHRvV2ViQ29y
ZVN0cmluZyhhcmdzWzBdKTsKICAgICBmbG9hdCB4ID0gdG9GbG9hdChhcmdzWzFdKTsKICAgICBm
bG9hdCB5ID0gdG9GbG9hdChhcmdzWzJdKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24g
NDU0NDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQYXRoTlNSZXNv
bHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgU3RyaW5nIFY4Q3VzdG9t
WFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYQogICAgIGlmICh0cnlfY2F0Y2guSGFzQ2F1Z2h0KCkp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVybiB2YWx1ZVRvU3RyaW5nV2l0
aE51bGxDaGVjayhyZXR2YWwpOworICAgIHJldHVybiB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENo
ZWNrKHJldHZhbCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9u
IDQ1NDQwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsOSArMjc3LDkgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KERPTVdpbmRvd1Bvc3RNZXNzYWdlKQogICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMikgewogICAg
ICAgICBpZiAoVjhQcm94eTo6aXNXcmFwcGVyT2ZUeXBlKGFyZ3NbMV0sIFY4Q2xhc3NJbmRleDo6
TUVTU0FHRVBPUlQpKQogICAgICAgICAgICAgcG9ydCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxNZXNzYWdlUG9ydD4oVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgYXJnc1sxXSk7
Ci0gICAgICAgIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVk
Q2hlY2soYXJnc1syXSk7CisgICAgICAgIHRhcmdldE9yaWdpbiA9IHRvV2ViQ29yZVN0cmluZ1dp
dGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzJdKTsKICAgICB9IGVsc2UgewotICAgICAgICB0
YXJnZXRPcmlnaW4gPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3Nb
MV0pOworICAgICAgICB0YXJnZXRPcmlnaW4gPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5k
ZWZpbmVkQ2hlY2soYXJnc1sxXSk7CiAgICAgfQogCiAgICAgaWYgKHRyeUNhdGNoLkhhc0NhdWdo
dCgpKQpAQCAtNTYyLDkgKzU2Miw5IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dTaG93
TW9kYWxEaWEKICAgICBpZiAoIWNhblNob3dNb2RhbERpYWxvZ05vdyhmcmFtZSkgfHwgIWFsbG93
UG9wVXAoKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyB1
cmwgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMF0pOworICAg
IFN0cmluZyB1cmwgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJn
c1swXSk7CiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZGlhbG9nQXJncyA9IGFyZ3NbMV07Ci0g
ICAgU3RyaW5nIGZlYXR1cmVBcmdzID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRD
aGVjayhhcmdzWzJdKTsKKyAgICBTdHJpbmcgZmVhdHVyZUFyZ3MgPSB0b1dlYkNvcmVTdHJpbmdX
aXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1syXSk7CiAKICAgICBjb25zdCBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBmZWF0dXJlcyA9IHBhcnNlTW9kYWxEaWFsb2dGZWF0dXJlcyhmZWF0dXJl
QXJncyk7CiAKQEAgLTY1MSw3ICs2NTEsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93
T3BlbikKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAK
LSAgICBTdHJpbmcgdXJsU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRD
aGVjayhhcmdzWzBdKTsKKyAgICBTdHJpbmcgdXJsU3RyaW5nID0gdG9XZWJDb3JlU3RyaW5nV2l0
aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMF0pOwogICAgIEF0b21pY1N0cmluZyBmcmFtZU5h
bWUgPSAoYXJnc1sxXS0+SXNVbmRlZmluZWQoKSB8fCBhcmdzWzFdLT5Jc051bGwoKSkgPyAiX2Js
YW5rIiA6IEF0b21pY1N0cmluZyh0b1dlYkNvcmVTdHJpbmcoYXJnc1sxXSkpOwogCiAgICAgLy8g
QmVjYXVzZSBGcmFtZVRyZWU6OmZpbmQoKSByZXR1cm5zIHRydWUgZm9yIGVtcHR5IHN0cmluZ3Ms
IHdlIG11c3QgY2hlY2sKQEAgLTcwMCw3ICs3MDAsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9N
V2luZG93T3BlbikKICAgICAvLyBQYXJzZSB0aGUgdmFsdWVzLCBhbmQgdGhlbiB3b3JrIHdpdGgg
YSBjb3B5IG9mIHRoZSBwYXJzZWQgdmFsdWVzCiAgICAgLy8gc28gd2UgY2FuIHJlc3RvcmUgdGhl
IHZhbHVlcyB3ZSBtYXkgbm90IHdhbnQgdG8gb3ZlcndyaXRlIGFmdGVyCiAgICAgLy8gd2UgZG8g
dGhlIG11bHRpcGxlIG1vbml0b3IgZml4ZXMuCi0gICAgV2luZG93RmVhdHVyZXMgcmF3RmVhdHVy
ZXModmFsdWVUb1N0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzJdKSk7CisgICAg
V2luZG93RmVhdHVyZXMgcmF3RmVhdHVyZXModG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVm
aW5lZENoZWNrKGFyZ3NbMl0pKTsKICAgICBXaW5kb3dGZWF0dXJlcyB3aW5kb3dGZWF0dXJlcyhy
YXdGZWF0dXJlcyk7CiAgICAgRmxvYXRSZWN0IHNjcmVlblJlY3QgPSBzY3JlZW5BdmFpbGFibGVS
ZWN0KHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gNDU0NDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52
YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBDQUxM
QkFDS19GVU5DX0RFQ0woSFRNTENhbnZhc0VsZW1lbnRHZXRDCiAgICAgSU5DX1NUQVRTKCJET00u
SFRNTENhbnZhc0VsZW1lbnQuY29udGV4dCIpOwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBo
b2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBpbXAgPSBWOFBy
b3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MQ2FudmFzRWxlbWVudD4oaG9sZGVyKTsK
LSAgICBTdHJpbmcgY29udGV4dElkID0gVG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOworICAgIFN0
cmluZyBjb250ZXh0SWQgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEKiByZXN1bHQgPSBpbXAtPmdldENvbnRleHQoY29udGV4dElkKTsKICAg
ICByZXR1cm4gVjhQcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpDQU5WQVNS
RU5ERVJJTkdDT05URVhUMkQsIHJlc3VsdCk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxJRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gNDU0NDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJRnJhbWVF
bGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBBQ0NFU1NPUl9TRVRURVIoSFRNTElGcmFtZUVsZW1lbnRTcmMpCiB7CiAg
ICAgSFRNTElGcmFtZUVsZW1lbnQqIGlmcmFtZSA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVy
VG9Ob2RlPEhUTUxJRnJhbWVFbGVtZW50PihpbmZvLkhvbGRlcigpKTsKLSAgICBTdHJpbmcgdiA9
IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKHZhbHVlKTsKKyAgICBTdHJpbmcgdiA9IHRvV2Vi
Q29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sodmFsdWUpOwogCiAgICAgaWYgKCFhbGxvd1NldHRpbmdG
cmFtZVNyY1RvSmF2YXNjcmlwdFVybChpZnJhbWUsIHYpKQogICAgICAgICByZXR1cm47CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0
aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiA0NTQ0MCkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woSFRNTE9wdGlvbnND
b2xsZWN0aW9uCiAgICAgZWxzZSB7CiAgICAgICAgIGJvb2wgb2s7CiAgICAgICAgIHY4OjpUcnlD
YXRjaCB0cnlfY2F0Y2g7Ci0gICAgICAgIGludCBpbmRleCA9IFRvSW50MzIoYXJnc1sxXSwgb2sp
OworICAgICAgICBpbnQgaW5kZXggPSB0b0ludDMyKGFyZ3NbMV0sIG9rKTsKIAogICAgICAgICBp
ZiAodHJ5X2NhdGNoLkhhc0NhdWdodCgpKQogICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1l
bnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NTQ0MCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZW1vdmVFbGVt
ZW50KEhUTUwKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBp
bXAtPnJlbW92ZShUb0ludDMyKGFyZ3NbMF0pKTsKKyAgICBpbXAtPnJlbW92ZSh0b0ludDMyKGFy
Z3NbMF0pKTsKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3VzdG9tLmNw
cAkocmV2aXNpb24gNDU0NDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRy
YW5zYWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBDQUxM
QkFDS19GVU5DX0RFQ0woU1FMVHJhbnNhY3Rpb25FeGVjdXRlCiAgICAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHN0YXRlbWVudCA9IFRvV2ViQ29yZVN0
cmluZyhhcmdzWzBdKTsKKyAgICBTdHJpbmcgc3RhdGVtZW50ID0gdG9XZWJDb3JlU3RyaW5nKGFy
Z3NbMF0pOwogCiAgICAgVmVjdG9yPFNRTFZhbHVlPiBzcWxWYWx1ZXM7CiAKQEAgLTc1LDcgKzc1
LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFNRTFRyYW5zYWN0aW9uRXhlY3V0ZQogICAgICAgICAg
ICAgZWxzZSBpZiAodmFsdWUtPklzTnVtYmVyKCkpCiAgICAgICAgICAgICAgICAgc3FsVmFsdWVz
LmFwcGVuZChTUUxWYWx1ZSh2YWx1ZS0+TnVtYmVyVmFsdWUoKSkpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQoU1FMVmFsdWUoVG9XZWJDb3JlU3Ry
aW5nKHZhbHVlKSkpOworICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQoU1FMVmFsdWUo
dG9XZWJDb3JlU3RyaW5nKHZhbHVlKSkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5j
cHAJKHJldmlzaW9uIDQ1NDQwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3Jr
ZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBTZXRUaW1lb3V0T3JJbnRlcnYKICAgICBpbnQgdGltZXJJZDsK
IAogICAgIGlmIChmdW5jdGlvbi0+SXNTdHJpbmcoKSkgewotICAgICAgICBXZWJDb3JlOjpTdHJp
bmcgc3RyaW5nRnVuY3Rpb24gPSBUb1dlYkNvcmVTdHJpbmcoZnVuY3Rpb24pOworICAgICAgICBX
ZWJDb3JlOjpTdHJpbmcgc3RyaW5nRnVuY3Rpb24gPSB0b1dlYkNvcmVTdHJpbmcoZnVuY3Rpb24p
OwogICAgICAgICB0aW1lcklkID0gRE9NVGltZXI6Omluc3RhbGwod29ya2VyQ29udGV4dCwgbmV3
IFNjaGVkdWxlZEFjdGlvbihzdHJpbmdGdW5jdGlvbiwgd29ya2VyQ29udGV4dC0+dXJsKCkpLCB0
aW1lb3V0LCBzaW5nbGVTaG90KTsKICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uLT5Jc0Z1bmN0aW9u
KCkpIHsKICAgICAgICAgc2l6ZV90IHBhcmFtQ291bnQgPSBhcmd1bWVudENvdW50ID49IDIgPyBh
cmd1bWVudENvdW50IC0gMiA6IDA7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gNDU0NDApCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQ1LDEwICszNDUsMTAgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFhN
TEh0dHBSZXF1ZXN0T3BlbikKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTdHJpbmcg
dXNlciwgcGFzc3dkOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID49IDQgJiYgIWFyZ3NbM10tPklz
VW5kZWZpbmVkKCkpIHsKLSAgICAgICAgdXNlciA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNr
KGFyZ3NbM10pOworICAgICAgICB1c2VyID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhh
cmdzWzNdKTsKIAogICAgICAgICBpZiAoYXJncy5MZW5ndGgoKSA+PSA1ICYmICFhcmdzWzRdLT5J
c1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICBwYXNzd2QgPSB2YWx1ZVRvU3RyaW5nV2l0aE51
bGxDaGVjayhhcmdzWzRdKTsKKyAgICAgICAgICAgIHBhc3N3ZCA9IHRvV2ViQ29yZVN0cmluZ1dp
dGhOdWxsQ2hlY2soYXJnc1s0XSk7CiAgICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC0+b3Blbiht
ZXRob2QsIHVybCwgYXN5bmMsIHVzZXIsIHBhc3N3ZCwgZWMpOwogICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYywgdXNlciwg
ZWMpOwpAQCAtMzg0LDcgKzM4NCw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChYTUxIdHRwUmVxdWVz
dFNlbmQpCiAgICAgICAgICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgICAgICAgICAgeG1sSHR0
cFJlcXVlc3QtPnNlbmQoZG9jdW1lbnQsIGVjKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICB4bWxIdHRwUmVxdWVzdC0+c2VuZCh2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhhcmcpLCBl
Yyk7CisgICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2VuZCh0b1dlYkNvcmVTdHJpbmdXaXRo
TnVsbENoZWNrKGFyZyksIGVjKTsKICAgICB9CiAKICAgICBpZiAoZWMpCg==
</data>
<flag name="review"
          id="16659"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32198</attachid>
            <date>2009-07-02 14:27:18 -0700</date>
            <delta_ts>2009-07-02 17:00:56 -0700</delta_ts>
            <desc>patch4</desc>
            <filename>patch4.txt</filename>
            <type>text/plain</type>
            <size>34010</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTQ4NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMDktMDctMDIgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
cHN0cmVhbSBWOEJpbmRpbmcgYW5kIHVwZGF0ZSBzb21lIGZ1bmN0aW9uIG5hbWVzLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjg1NworCisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06IFVwZGF0ZSBmdW5jdGlv
biBuYW1lcyBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlcy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OEJpbmRpbmcuY3BwOiBVcHN0cmVhbWVkIGZyb20gc3JjLmNocm9taXVtLm9yZy4KKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOEJpbmRpbmcuaDogVXBzdHJlYW1lZCBmcm9tIHNyYy5jaHJvbWl1bS5v
cmcuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWOExhenlFdmVudExpc3RlbmVyOjpnZXRMaXN0ZW5lckZ1bmN0aW9uKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhh
bmRsZUNvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNvbXBpbGVT
Y3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6c291cmNlTmFtZSk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmhhbmRsZUNvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5BTUVEX1BST1BFUlRZX1NFVFRFUik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNB
TExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9t
WFBhdGhOU1Jlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tWFBhdGhOU1Jl
c29sdmVyOjpsb29rdXBOYW1lc3BhY2VVUkkpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5D
X0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfU0VUVEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVF
bGVtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2V0VGltZW91dE9ySW50ZXJ2YWwpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNB
TExCQUNLX0ZVTkNfREVDTCk6CisKIDIwMDktMDctMDIgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNDU0ODYp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5n
IGNvcHkpCkBAIC01NjIsNyArNTYyLDcgQEAgRU5ECiAgICAgICAgICAgICAkZ2V0dGVyU3RyaW5n
ID0gImltcF9pbnN0YW5jZSI7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCRuYXRpdmVUeXBlIGVx
ICJTdHJpbmciKSB7Ci0gICAgICAgICAgICAkZ2V0dGVyU3RyaW5nID0gIlRvU3RyaW5nKCRnZXR0
ZXJTdHJpbmcpIjsKKyAgICAgICAgICAgICRnZXR0ZXJTdHJpbmcgPSAidG9TdHJpbmcoJGdldHRl
clN0cmluZykiOwogICAgICAgICB9CiAKICAgICAgICAgbXkgJHJlc3VsdDsKQEAgLTEwNTMsNyAr
MTA1Myw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbEZpeGVk
SGVhZGVyLAogICAgICAgICAgIiNpbmNsdWRlIFwiY29uZmlnLmhcIlxuIiAuCiAgICAgICAgICAi
I2luY2x1ZGUgXCJWOFByb3h5LmhcIlxuIiAuCi0gICAgICAgICAiI2luY2x1ZGUgXCJ2OF9iaW5k
aW5nLmhcIlxuXG4iIC4KKyAgICAgICAgICIjaW5jbHVkZSBcIlY4QmluZGluZy5oXCJcblxuIiAu
CiAgICAgICAgICAiI3VuZGVmIExPR1xuXG4iKTsKIAogICAgIG15ICRjb25kaXRpb25hbFN0cmlu
ZzsKQEAgLTE3OTksMTUgKzE3OTksMTUgQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAgIHJldHVy
biAic3RhdGljX2Nhc3Q8JHR5cGU+KCR2YWx1ZS0+TnVtYmVyVmFsdWUoKSkiIGlmICR0eXBlIGVx
ICJmbG9hdCIgb3IgJHR5cGUgZXEgImRvdWJsZSI7CiAgICAgcmV0dXJuICIkdmFsdWUtPk51bWJl
clZhbHVlKCkiIGlmICR0eXBlIGVxICJTVkdOdW1iZXIiOwogCi0gICAgcmV0dXJuICJUb0ludDMy
KCR2YWx1ZSR7bWF5YmVPa1BhcmFtfSkiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBsb25nIiBvciAk
dHlwZSBlcSAidW5zaWduZWQgc2hvcnQiIG9yICR0eXBlIGVxICJsb25nIjsKKyAgICByZXR1cm4g
InRvSW50MzIoJHZhbHVlJHttYXliZU9rUGFyYW19KSIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGxv
bmciIG9yICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIgb3IgJHR5cGUgZXEgImxvbmciOwogICAg
IHJldHVybiAic3RhdGljX2Nhc3Q8UmFuZ2U6OkNvbXBhcmVIb3c+KCR2YWx1ZS0+SW50MzJWYWx1
ZSgpKSIgaWYgJHR5cGUgZXEgIkNvbXBhcmVIb3ciOwogICAgIHJldHVybiAic3RhdGljX2Nhc3Q8
U1ZHUGFpbnQ6OlNWR1BhaW50VHlwZT4oJHZhbHVlLT5Ub0ludDMyKCktPkludDMyVmFsdWUoKSki
IGlmICR0eXBlIGVxICJTVkdQYWludFR5cGUiOwogCi0gICAgcmV0dXJuICJUb1dlYkNvcmVTdHJp
bmcoJHZhbHVlKSIgaWYgJHR5cGUgZXEgIkF0b21pY1N0cmluZyIgb3IgJHR5cGUgZXEgIkRPTVVz
ZXJEYXRhIjsKKyAgICByZXR1cm4gInRvV2ViQ29yZVN0cmluZygkdmFsdWUpIiBpZiAkdHlwZSBl
cSAiQXRvbWljU3RyaW5nIiBvciAkdHlwZSBlcSAiRE9NVXNlckRhdGEiOwogICAgIGlmICgkdHlw
ZSBlcSAiRE9NU3RyaW5nIikgewotICAgICAgICByZXR1cm4gInZhbHVlVG9TdHJpbmdXaXRoTnVs
bENoZWNrKCR2YWx1ZSkiIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252
ZXJ0TnVsbFRvTnVsbFN0cmluZyJ9OwotICAgICAgICByZXR1cm4gInZhbHVlVG9TdHJpbmdXaXRo
TnVsbE9yVW5kZWZpbmVkQ2hlY2soJHZhbHVlKSIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkNvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmcifTsKLSAgICAgICAg
cmV0dXJuICJUb1dlYkNvcmVTdHJpbmcoJHZhbHVlKSI7CisgICAgICAgIHJldHVybiAidG9XZWJD
b3JlU3RyaW5nV2l0aE51bGxDaGVjaygkdmFsdWUpIiBpZiAkc2lnbmF0dXJlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ29udmVydE51bGxUb051bGxTdHJpbmcifTsKKyAgICAgICAgcmV0dXJuICJ0
b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soJHZhbHVlKSIgaWYgJHNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxT
dHJpbmcifTsKKyAgICAgICAgcmV0dXJuICJ0b1dlYkNvcmVTdHJpbmcoJHZhbHVlKSI7CiAgICAg
fQogCiAgICAgaWYgKCR0eXBlIGVxICJOb2RlRmlsdGVyIikgewpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
VjhCaW5kaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisKKyNpbmNsdWRlICJB
dG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiTWF0aEV4dHJh
cy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nQnVmZmVy
LmgiCisKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBXZWJDb3JlU3RyaW5nUmVzb3VyY2UgaXMgYSBoZWxw
ZXIgY2xhc3MgZm9yIHY4RXh0ZXJuYWxTdHJpbmcuIEl0IGlzIHVzZWQKKy8vIHRvIG1hbmFnZSB0
aGUgbGlmZS1jeWNsZSBvZiB0aGUgdW5kZXJseWluZyBidWZmZXIgb2YgdGhlIGV4dGVybmFsIHN0
cmluZy4KK2NsYXNzIFdlYkNvcmVTdHJpbmdSZXNvdXJjZSA6IHB1YmxpYyB2ODo6U3RyaW5nOjpF
eHRlcm5hbFN0cmluZ1Jlc291cmNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJDb3JlU3Ry
aW5nUmVzb3VyY2UoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgICAgIDogbV9pbXBsKHN0cmlu
Zy5pbXBsKCkpIHsgfQorCisgICAgdmlydHVhbCB+V2ViQ29yZVN0cmluZ1Jlc291cmNlKCkgeyB9
CisKKyAgICBjb25zdCB1aW50MTZfdCogZGF0YSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KG1faW1wbC5jaGFyYWN0ZXJzKCkp
OworICAgIH0KKworICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2ltcGwubGVu
Z3RoKCk7IH0KKworICAgIFN0cmluZyB3ZWJjb3JlU3RyaW5nKCkgeyByZXR1cm4gbV9pbXBsOyB9
CisKK3ByaXZhdGU6CisgICAgLy8gQSBzaGFsbG93IGNvcHkgb2YgdGhlIHN0cmluZy4gS2VlcHMg
dGhlIHN0cmluZyBidWZmZXIgYWxpdmUgdW50aWwgdGhlIFY4IGVuZ2luZSBnYXJiYWdlIGNvbGxl
Y3RzIGl0LgorICAgIFN0cmluZyBtX2ltcGw7Cit9OworCitTdHJpbmcgdjhTdHJpbmdUb1dlYkNv
cmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZywgYm9vbCBleHRlcm5hbGl6
ZSkKK3sKKyAgICBXZWJDb3JlU3RyaW5nUmVzb3VyY2UqIHN0cmluZ1Jlc291cmNlID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZVN0cmluZ1Jlc291cmNlKj4odjhTdHJpbmctPkdldEV4dGVybmFsU3RyaW5n
UmVzb3VyY2UoKSk7CisgICAgaWYgKHN0cmluZ1Jlc291cmNlKQorICAgICAgICByZXR1cm4gc3Ry
aW5nUmVzb3VyY2UtPndlYmNvcmVTdHJpbmcoKTsKKworICAgIGludCBsZW5ndGggPSB2OFN0cmlu
Zy0+TGVuZ3RoKCk7CisgICAgaWYgKGxlbmd0aCkgeworICAgICAgICAvLyBBdm9pZCB0cnlpbmcg
dG8gbW9ycGggZW1wdHkgc3RyaW5ncywgYXMgdGhleSBkbyBub3QgaGF2ZSBlbm91Z2ggcm9vbSB0
byBjb250YWluIHRoZSBleHRlcm5hbCByZWZlcmVuY2UuCisgICAgICAgIHJldHVybiBTdHJpbmdJ
bXBsOjplbXB0eSgpOworICAgIH0KKworICAgIFVDaGFyKiBidWZmZXI7CisgICAgU3RyaW5nIHJl
c3VsdCA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAg
djhTdHJpbmctPldyaXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihidWZmZXIpLCAwLCBs
ZW5ndGgpOworCisgICAgaWYgKGV4dGVybmFsaXplKSB7CisgICAgICAgIFdlYkNvcmVTdHJpbmdS
ZXNvdXJjZSogcmVzb3VyY2UgPSBuZXcgV2ViQ29yZVN0cmluZ1Jlc291cmNlKHJlc3VsdCk7Cisg
ICAgICAgIGlmICghdjhTdHJpbmctPk1ha2VFeHRlcm5hbChyZXNvdXJjZSkpIHsKKyAgICAgICAg
ICAgIC8vIEluIGNhc2Ugb2YgYSBmYWlsdXJlIGRlbGV0ZSB0aGUgZXh0ZXJuYWwgcmVzb3VyY2Ug
YXMgaXQgd2FzIG5vdCB1c2VkLgorICAgICAgICAgICAgZGVsZXRlIHJlc291cmNlOworICAgICAg
ICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0cmluZyB2OFZhbHVlVG9XZWJD
b3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCit7CisgICAgaWYgKG9iamVj
dC0+SXNTdHJpbmcoKSkgCisgICAgICAgIHJldHVybiB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZyh2
ODo6SGFuZGxlPHY4OjpTdHJpbmc+OjpDYXN0KG9iamVjdCksIHRydWUpOworCisgICAgaWYgKG9i
amVjdC0+SXNJbnQzMigpKSB7CisgICAgICAgIGludCB2YWx1ZSA9IG9iamVjdC0+SW50MzJWYWx1
ZSgpOworICAgICAgICAvLyBNb3N0IG51bWJlcnMgdXNlZCBhcmUgPD0gMTAwLiBFdmVuIGlmIHRo
ZXkgYXJlbid0IHVzZWQgdGhlcmUncyB2ZXJ5IGxpdHRsZSBpbiB1c2luZyB0aGUgc3BhY2UuCisg
ICAgICAgIGNvbnN0IGludCBrTG93TnVtYmVycyA9IDEwMDsKKyAgICAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChBdG9taWNTdHJpbmcqLCBsb3dOdW1iZXJzLCBba0xvd051bWJlcnMgKyAxXSk7Cisg
ICAgICAgIFN0cmluZyB3ZWJDb3JlU3RyaW5nOworICAgICAgICBpZiAoMCA8PSB2YWx1ZSAmJiB2
YWx1ZSA8PSBrTG93TnVtYmVycykgeworICAgICAgICAgICAgd2ViQ29yZVN0cmluZyA9IGxvd051
bWJlcnNbdmFsdWVdOworICAgICAgICAgICAgaWYgKCF3ZWJDb3JlU3RyaW5nKSB7CisgICAgICAg
ICAgICAgICAgQXRvbWljU3RyaW5nIHZhbHVlU3RyaW5nID0gQXRvbWljU3RyaW5nKFN0cmluZzo6
bnVtYmVyKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgbG93TnVtYmVyc1t2YWx1ZV0gPSB2YWx1
ZVN0cmluZzsKKyAgICAgICAgICAgICAgICB3ZWJDb3JlU3RyaW5nID0gdmFsdWVTdHJpbmc7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAgIHdlYkNvcmVTdHJpbmcg
PSBTdHJpbmc6Om51bWJlcih2YWx1ZSk7CisgICAgICAgIHJldHVybiB3ZWJDb3JlU3RyaW5nOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHY4OjpUcnlDYXRjaCBibG9jazsKKyAgICAgICAgdjg6Okhh
bmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZyA9IG9iamVjdC0+VG9TdHJpbmcoKTsKKyAgICAgICAg
Ly8gQ2hlY2sgZm9yIGVtcHR5IGhhbmRsZXMgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuIGV4
Y2VwdGlvbgorICAgICAgICAvLyBpcyB0aHJvd24gYXMgcGFydCBvZiBpbnZva2luZyB0b1N0cmlu
ZyBvbiB0aGUgb2JqZWN0ZWN0LgorICAgICAgICBpZiAodjhTdHJpbmcuSXNFbXB0eSgpKQorICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgICAgIHJldHVybiB2OFN0
cmluZ1RvV2ViQ29yZVN0cmluZyh2OFN0cmluZywgZmFsc2UpOworICAgIH0KK30KKworQXRvbWlj
U3RyaW5nIHY4U3RyaW5nVG9BdG9taWNXZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmlu
Zz4gdjhTdHJpbmcpCit7CisgICAgU3RyaW5nIHN0cmluZyA9IHY4U3RyaW5nVG9XZWJDb3JlU3Ry
aW5nKHY4U3RyaW5nLCB0cnVlKTsKKyAgICByZXR1cm4gQXRvbWljU3RyaW5nKHN0cmluZyk7Cit9
CisKK0F0b21pY1N0cmluZyB2OFZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2OFN0cmluZykKK3sKKyAgICBTdHJpbmcgc3RyaW5nID0gdjhWYWx1ZVRvV2Vi
Q29yZVN0cmluZyh2OFN0cmluZyk7CisgICAgcmV0dXJuIEF0b21pY1N0cmluZyhzdHJpbmcpOwor
fQorCit2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
KQoreworICAgIGlmICghc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gdjg6OlN0cmlu
Zzo6RW1wdHkoKTsKKyAgICByZXR1cm4gdjg6OlN0cmluZzo6TmV3RXh0ZXJuYWwobmV3IFdlYkNv
cmVTdHJpbmdSZXNvdXJjZShzdHJpbmcpKTsKK30KKwordjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4
RXh0ZXJuYWxTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgaWYgKCFzdHJpbmcu
bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB2ODo6U3RyaW5nOjpFbXB0eSgpOworICAgIHJldHVy
biB2ODo6U3RyaW5nOjpOZXdFeHRlcm5hbChuZXcgV2ViQ29yZVN0cmluZ1Jlc291cmNlKHN0cmlu
ZykpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nLmgJKHJldmlzaW9uIDQ1NDg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTYgKzMxLDc2IEBACiAjaWZuZGVmIFY4QmluZGluZ19o
CiAjZGVmaW5lIFY4QmluZGluZ19oCiAKLS8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGZv
cndhcmRpbmcgaGVhZGVyIHVudGlsIGFsbCBiaW5kaW5ncyBoYXZlIG1pZ3JhdGVkCi0vLyBvdmVy
IGFuZCB2OF9iaW5kaW5nIGFjdHVhbGx5IGJlY29tZXMgVjhCaW5kaW5nLgotI2luY2x1ZGUgInY4
X2JpbmRpbmcuaCIKKyNpbmNsdWRlICJNYXRoRXh0cmFzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKworI2luY2x1ZGUgPHY4Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAg
IC8vIEZJWE1FOiBSZW1vdmUgb25jZSBtaWdyYXRpb24gaXMgY29tcGxldGUuCisgICAgLy8gQ29u
dmVydCB2OCB0eXBlcyB0byBhIFdlYkNvcmU6OlN0cmluZy4gSWYgdGhlIFY4IHN0cmluZyBpcyBu
b3QgYWxyZWFkeQorICAgIC8vIGFuIGV4dGVybmFsIHN0cmluZyB0aGVuIGl0IGlzIHRyYW5zZm9y
bWVkIGludG8gYW4gZXh0ZXJuYWwgc3RyaW5nIGF0IHRoaXMKKyAgICAvLyBwb2ludCB0byBhdm9p
ZCByZXBlYXRlZCBjb252ZXJzaW9ucy4KKyAgICBTdHJpbmcgdjhTdHJpbmdUb1dlYkNvcmVTdHJp
bmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiwgYm9vbCBleHRlcm5hbGl6ZSk7CisgICAgU3RyaW5n
IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKworICAgIC8v
IENvbnZlcnQgdjggdHlwZXMgdG8gYSBXZWJDb3JlOjpBdG9taWNTdHJpbmcuCisgICAgQXRvbWlj
U3RyaW5nIHY4U3RyaW5nVG9BdG9taWNXZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmlu
Zz4pOworICAgIEF0b21pY1N0cmluZyB2OFZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5nKHY4OjpI
YW5kbGU8djg6OlZhbHVlPik7CisKKyAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgVjggc3Ry
aW5nLgorICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcoY29uc3QgU3RyaW5nJik7
CisKKyAgICBpbmxpbmUgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQ0KKyAg
ICB7DQorICAgICAgICByZXR1cm4gc3RyaW5nOw0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gYSBW
OCBleHRlcm5hbCBzdHJpbmcgdGhhdCBzaGFyZXMgdGhlIHVuZGVybHlpbmcgYnVmZmVyIHdpdGgg
dGhlIGdpdmVuCisgICAgLy8gV2ViQ29yZSBzdHJpbmcuIFRoZSByZWZlcmVuY2UgY291bnRpbmcg
bWVjaGFuaXNtIGlzIHVzZWQgdG8ga2VlcCB0aGUKKyAgICAvLyB1bmRlcmx5aW5nIGJ1ZmZlciBh
bGl2ZSB3aGlsZSB0aGUgc3RyaW5nIGlzIHN0aWxsIGxpdmUgaW4gdGhlIFY4IGVuZ2luZS4KKyAg
ICB2ODo6TG9jYWw8djg6OlN0cmluZz4gdjhFeHRlcm5hbFN0cmluZyhjb25zdCBTdHJpbmcmKTsK
KworICAgIC8vIENvbnZlcnQgYSB2YWx1ZSB0byBhIDMyLWJpdCBpbnRlZ2VyLiAgVGhlIGNvbnZl
cnNpb24gZmFpbHMgaWYgdGhlCisgICAgLy8gdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBh
biBpbnRlZ2VyIG9yIGNvbnZlcnRzIHRvIG5hbiBvciB0byBhbiBpbmZpbml0eS4KKyAgICBpbmxp
bmUgaW50IHRvSW50MzIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBib29sJiBvaykKKyAg
ICB7CisgICAgICAgIG9rID0gdHJ1ZTsKKworICAgICAgICAvLyBGYXN0IGNhc2UuICBUaGUgdmFs
dWUgaXMgYWxyZWFkeSBhIDMyLWJpdCBpbnRlZ2VyLgorICAgICAgICBpZiAodmFsdWUtPklzSW50
MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS0+SW50MzJWYWx1ZSgpOworCisgICAgICAg
IC8vIENhbiB0aGUgdmFsdWUgYmUgY29udmVydGVkIHRvIGEgbnVtYmVyPworICAgICAgICB2ODo6
TG9jYWw8djg6Ok51bWJlcj4gbnVtYmVyT2JqZWN0ID0gdmFsdWUtPlRvTnVtYmVyKCk7CisgICAg
ICAgIGlmIChudW1iZXJPYmplY3QuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICBvayA9IGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICAvLyBEb2VzIHRo
ZSB2YWx1ZSBjb252ZXJ0IHRvIG5hbiBvciB0byBhbiBpbmZpbml0eT8KKyAgICAgICAgZG91Ymxl
IG51bWJlclZhbHVlID0gbnVtYmVyT2JqZWN0LT5WYWx1ZSgpOworICAgICAgICBpZiAoaXNuYW4o
bnVtYmVyVmFsdWUpIHx8IGlzaW5mKG51bWJlclZhbHVlKSkgeworICAgICAgICAgICAgb2sgPSBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2Fu
IHRoZSB2YWx1ZSBiZSBjb252ZXJ0ZWQgdG8gYSAzMi1iaXQgaW50ZWdlcj8KKyAgICAgICAgdjg6
OkxvY2FsPHY4OjpJbnQzMj4gaW50VmFsdWUgPSB2YWx1ZS0+VG9JbnQzMigpOworICAgICAgICBp
ZiAoaW50VmFsdWUuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3Vs
dCBvZiB0aGUgaW50MzIgY29udmVyc2lvbi4KKyAgICAgICAgcmV0dXJuIGludFZhbHVlLT5WYWx1
ZSgpOworICAgIH0KKworICAgIC8vIENvbnZlcnQgYSB2YWx1ZSB0byBhIDMyLWJpdCBpbnRlZ2Vy
IGFzc3VtaW5nIHRoZSBjb252ZXJzaW9uIGNhbm5vdCBmYWlsLgogICAgIGlubGluZSBpbnQgdG9J
bnQzMih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4g
VG9JbnQzMih2YWx1ZSk7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIHJldHVybiB0b0ludDMy
KHZhbHVlLCBvayk7CiAgICAgfQogCiAgICAgaW5saW5lIGZsb2F0IHRvRmxvYXQodjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdmFsdWUpCkBAIC00OCwyMiArMTA4LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS0+TnVtYmVyVmFsdWUo
KSk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIG1pZ3JhdGlvbiBpcyBjb21w
bGV0ZS4KLSAgICBpbmxpbmUgU3RyaW5nIHRvV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gb2JqKQorICAgIC8vIEZJWE1FOiBEcm9wIHRoaXMgaW4gZmF2b3Igb2YgdGhlIHR5cGUg
c3BlY2lmaWMgdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyB3aGVuIHdlIHJld29yayB0aGUgY29kZSBn
ZW5lcmF0aW9uLgorICAgIGlubGluZSBTdHJpbmcgdG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBvYmplY3QpCiAgICAgewotICAgICAgICByZXR1cm4gVG9XZWJDb3JlU3RyaW5n
KG9iaik7CisgICAgICAgIHJldHVybiB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKG9iamVjdCk7CiAg
ICAgfQogCi0gICAgLy8gRklYTUU6IFJlbW92ZSBvbmNlIG1pZ3JhdGlvbiBpcyBjb21wbGV0ZS4K
KyAgICAvLyBUaGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgc3RpbGwgb3du
ZWQgYnkgdGhlIGFyZ3VtZW50CisgICAgLy8gYW5kIHdpbGwgYmUgZGVhbGxvY2F0ZWQgd2hlbiB0
aGUgYXJndW1lbnQgaXMgZGVhbGxvY2F0ZWQuCiAgICAgaW5saW5lIGNvbnN0IHVpbnQxNl90KiBm
cm9tV2ViQ29yZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKICAgICB7Ci0gICAgICAgIHJldHVy
biBGcm9tV2ViQ29yZVN0cmluZyhzdHIpOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBSZW5hbWUg
dmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2sgb25jZSBtaWdyYXRpb24gaXMgY29tcGxldGUuCi0g
ICAgaW5saW5lIFN0cmluZyB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvU3RyaW5nV2l0
aE51bGxDaGVjayh2YWx1ZSk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQxNl90Kj4oc3RyLmNoYXJhY3RlcnMoKSk7CiAgICAgfQogCiAgICAgaW5saW5lIGJvb2wg
aXNVbmRlZmluZWRPck51bGwodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQpAQCAtNzUsNyAr
MTMwLDQwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB7CiAgICAgICAgIHJldHVybiB2YWx1
ZSA/IHY4OjpUcnVlKCkgOiB2ODo6RmFsc2UoKTsKICAgICB9CisgICAKKyAgICBpbmxpbmUgU3Ry
aW5nIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgCisgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKHZh
bHVlKTsKKyAgICB9CisKKyAgICBpbmxpbmUgU3RyaW5nIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxs
T3JVbmRlZmluZWRDaGVjayh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUtPklzTnVsbCgpIHx8IHZhbHVlLT5Jc1VuZGVmaW5lZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICByZXR1cm4gdG9XZWJDb3JlU3RyaW5nKHZh
bHVlKTsKKyAgICB9CisgCisgICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhVbmRl
dGVjdGFibGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpCisgICAgeworICAgICAgICByZXR1cm4g
djg6OlN0cmluZzo6TmV3VW5kZXRlY3RhYmxlKGZyb21XZWJDb3JlU3RyaW5nKHN0ciksIHN0ci5s
ZW5ndGgoKSk7CisgICAgfQorCisgICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFN0
cmluZ09yTnVsbChjb25zdCBTdHJpbmcmIHN0cikKKyAgICB7CisgICAgICAgIHJldHVybiBzdHIu
aXNOdWxsKCkgPyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6Ok51bGwoKSkgOiB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4odjhTdHJpbmcoc3RyKSk7CisgICAgfQorCisgICAgaW5saW5lIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2OFN0cmluZ09yVW5kZWZpbmVkKGNvbnN0IFN0cmluZyYgc3RyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0ci5pc051bGwoKSA/IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2
ODo6VW5kZWZpbmVkKCkpIDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4U3RyaW5nKHN0cikpOwor
ICAgIH0KIAotfQorICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhTdHJpbmdPckZh
bHNlKGNvbnN0IFN0cmluZyYgc3RyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ci5pc051bGwo
KSA/IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2ODo6RmFsc2UoKSkgOiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4odjhTdHJpbmcoc3RyKSk7CisgICAgfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gVjhCaW5kaW5nX2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZl
bnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlF
dmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gNDU0ODYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcg
QEAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhMYXp5RXZlbnRMaXN0ZQogICAgICAgICAgICAg
aWYgKCF2YWx1ZS5Jc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWUtPklz
RnVuY3Rpb24oKSk7CiAgICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gbGlz
dGVuZXJGdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KHZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBsaXN0ZW5lckZ1bmN0aW9uLT5TZXROYW1lKHY4OjpTdHJpbmc6Ok5ldyhG
cm9tV2ViQ29yZVN0cmluZyhtX2Z1bmN0aW9uTmFtZSksIG1fZnVuY3Rpb25OYW1lLmxlbmd0aCgp
KSk7CisgICAgICAgICAgICAgICAgbGlzdGVuZXJGdW5jdGlvbi0+U2V0TmFtZSh2ODo6U3RyaW5n
OjpOZXcoZnJvbVdlYkNvcmVTdHJpbmcobV9mdW5jdGlvbk5hbWUpLCBtX2Z1bmN0aW9uTmFtZS5s
ZW5ndGgoKSkpOwogCiAgICAgICAgICAgICAgICAgbV9saXN0ZW5lciA9IHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvbj46Ok5ldyhsaXN0ZW5lckZ1bmN0aW9uKTsKICNpZm5kZWYgTkRFQlVHCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHJldmlzaW9uIDQ1NDg2KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9WOFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzA3LDExICs3MDcsMTEg
QEAgc3RhdGljIHZvaWQgaGFuZGxlQ29uc29sZU1lc3NhZ2Uodjg6OkhhbgogCiAgICAgdjg6Okhh
bmRsZTx2ODo6U3RyaW5nPiBlcnJvck1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlLT5HZXQoKTsKICAg
ICBBU1NFUlQoIWVycm9yTWVzc2FnZVN0cmluZy5Jc0VtcHR5KCkpOwotICAgIFN0cmluZyBlcnJv
ck1lc3NhZ2UgPSBUb1dlYkNvcmVTdHJpbmcoZXJyb3JNZXNzYWdlU3RyaW5nKTsKKyAgICBTdHJp
bmcgZXJyb3JNZXNzYWdlID0gdG9XZWJDb3JlU3RyaW5nKGVycm9yTWVzc2FnZVN0cmluZyk7CiAK
ICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzb3VyY2VOYW1lID0gbWVzc2FnZS0+R2V0U2Ny
aXB0UmVzb3VyY2VOYW1lKCk7CiAgICAgYm9vbCB1c2VVUkwgPSByZXNvdXJjZU5hbWUuSXNFbXB0
eSgpIHx8ICFyZXNvdXJjZU5hbWUtPklzU3RyaW5nKCk7Ci0gICAgU3RyaW5nIHJlc291cmNlTmFt
ZVN0cmluZyA9IHVzZVVSTCA/IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6IFRvV2ViQ29yZVN0
cmluZyhyZXNvdXJjZU5hbWUpOworICAgIFN0cmluZyByZXNvdXJjZU5hbWVTdHJpbmcgPSB1c2VV
UkwgPyBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkgOiB0b1dlYkNvcmVTdHJpbmcocmVzb3VyY2VO
YW1lKTsKICAgICBKYXZhU2NyaXB0Q29uc29sZU1lc3NhZ2UgY29uc29sZU1lc3NhZ2UoZXJyb3JN
ZXNzYWdlLCByZXNvdXJjZU5hbWVTdHJpbmcsIG1lc3NhZ2UtPkdldExpbmVOdW1iZXIoKSk7CiAg
ICAgQ29uc29sZU1lc3NhZ2VNYW5hZ2VyOjphZGRNZXNzYWdlKHBhZ2UsIGNvbnNvbGVNZXNzYWdl
KTsKIH0KQEAgLTk2NSw3ICs5NjUsNyBAQCB2b2lkIFY4UHJveHk6OmRpc2Nvbm5lY3RFdmVudExp
c3RlbmVycygpCiAKIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gVjhQcm94eTo6Y29tcGlsZVNjcmlw
dCh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGlu
dCBiYXNlTGluZSkKIHsKLSAgICBjb25zdCB1aW50MTZfdCogZmlsZU5hbWVTdHJpbmcgPSBGcm9t
V2ViQ29yZVN0cmluZyhmaWxlTmFtZSk7CisgICAgY29uc3QgdWludDE2X3QqIGZpbGVOYW1lU3Ry
aW5nID0gZnJvbVdlYkNvcmVTdHJpbmcoZmlsZU5hbWUpOwogICAgIHY4OjpIYW5kbGU8djg6OlN0
cmluZz4gbmFtZSA9IHY4OjpTdHJpbmc6Ok5ldyhmaWxlTmFtZVN0cmluZywgZmlsZU5hbWUubGVu
Z3RoKCkpOwogICAgIHY4OjpIYW5kbGU8djg6OkludGVnZXI+IGxpbmUgPSB2ODo6SW50ZWdlcjo6
TmV3KGJhc2VMaW5lKTsKICAgICB2ODo6U2NyaXB0T3JpZ2luIG9yaWdpbihuYW1lLCBsaW5lKTsK
QEAgLTMyMTcsNyArMzIxNyw3IEBAIFN0cmluZyBWOFByb3h5Ojpzb3VyY2VOYW1lKCkKICAgICBm
cmFtZVNvdXJjZU5hbWUgPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdCh2OFV0aWxpdHlD
b250ZXh0LT5HbG9iYWwoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiZnJhbWVTb3VyY2VOYW1lIikp
KTsKICAgICBpZiAoZnJhbWVTb3VyY2VOYW1lLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgIHJldHVybiBUb1dlYkNvcmVTdHJpbmcodjg6OkRlYnVnOjpDYWxsKGZyYW1l
U291cmNlTmFtZSkpOworICAgIHJldHVybiB0b1dlYkNvcmVTdHJpbmcodjg6OkRlYnVnOjpDYWxs
KGZyYW1lU291cmNlTmFtZSkpOwogfQogCiB2b2lkIFY4UHJveHk6OnJlZ2lzdGVyRXh0ZW5zaW9u
KHY4OjpFeHRlbnNpb24qIGV4dGVuc2lvbiwgY29uc3QgU3RyaW5nJiBzY2hlbWVSZXN0cmljdGlv
bikKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eS5jcHAJKHJldmlzaW9uIDQ1NDg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9X
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxMSAr
NzEsMTEgQEAgc3RhdGljIHZvaWQgaGFuZGxlQ29uc29sZU1lc3NhZ2Uodjg6OkhhbgogICAgIAog
ICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gZXJyb3JNZXNzYWdlU3RyaW5nID0gbWVzc2FnZS0+
R2V0KCk7CiAgICAgQVNTRVJUKCFlcnJvck1lc3NhZ2VTdHJpbmcuSXNFbXB0eSgpKTsKLSAgICBT
dHJpbmcgZXJyb3JNZXNzYWdlID0gVG9XZWJDb3JlU3RyaW5nKGVycm9yTWVzc2FnZVN0cmluZyk7
CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHRvV2ViQ29yZVN0cmluZyhlcnJvck1lc3NhZ2VT
dHJpbmcpOwogICAgIAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXNvdXJjZU5hbWUgPSBt
ZXNzYWdlLT5HZXRTY3JpcHRSZXNvdXJjZU5hbWUoKTsKICAgICBib29sIHVzZVVSTCA9IChyZXNv
dXJjZU5hbWUuSXNFbXB0eSgpIHx8ICFyZXNvdXJjZU5hbWUtPklzU3RyaW5nKCkpOwotICAgIFN0
cmluZyByZXNvdXJjZU5hbWVTdHJpbmcgPSB1c2VVUkwgPyB3b3JrZXJDb250ZXh0LT51cmwoKSA6
IFRvV2ViQ29yZVN0cmluZyhyZXNvdXJjZU5hbWUpOworICAgIFN0cmluZyByZXNvdXJjZU5hbWVT
dHJpbmcgPSB1c2VVUkwgPyB3b3JrZXJDb250ZXh0LT51cmwoKSA6IHRvV2ViQ29yZVN0cmluZyhy
ZXNvdXJjZU5hbWUpOwogICAgIAogICAgIHdvcmtlckNvbnRleHQtPmFkZE1lc3NhZ2UoQ29uc29s
ZURlc3RpbmF0aW9uLCBKU01lc3NhZ2VTb3VyY2UsIEVycm9yTWVzc2FnZUxldmVsLCBlcnJvck1l
c3NhZ2UsIG1lc3NhZ2UtPkdldExpbmVOdW1iZXIoKSwgcmVzb3VyY2VOYW1lU3RyaW5nKTsKIH0K
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NT
dHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNDU0ODYpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDEsNyArMjAxLDcgQEAgTkFNRURfUFJPUEVSVFlfU0VUVEVSKENTU1N0eWxl
RGVjbGFyYXRpbwogICAgIGlmICghcHJvcEluZm8pCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVk
QnlJbnRlcmNlcHRvcigpOwogCi0gICAgU3RyaW5nIHByb3BlcnR5VmFsdWUgPSB2YWx1ZVRvU3Ry
aW5nV2l0aE51bGxDaGVjayh2YWx1ZSk7CisgICAgU3RyaW5nIHByb3BlcnR5VmFsdWUgPSB0b1dl
YkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKHZhbHVlKTsKICAgICBpZiAocHJvcEluZm8tPmhhZFBp
eGVsT3JQb3NQcmVmaXgpCiAgICAgICAgIHByb3BlcnR5VmFsdWUuYXBwZW5kKCJweCIpOwogCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiA0NTQ4NikKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDEzICsxMDUsMTMgQEAgQ0FMTEJBQ0tfRlVOQ19E
RUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleAogICAgIHN3aXRjaCAoYXJncy5MZW5ndGgoKSkgewog
ICAgIGNhc2UgMToKICAgICAgICAgaWYgKGFyZ3NbMF0tPklzU3RyaW5nKCkpCi0gICAgICAgICAg
ICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihUb1dlYkNvcmVTdHJpbmcoYXJnc1swXSkpOworICAg
ICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IodG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0p
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IodG9G
bG9hdChhcmdzWzBdKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKICAgICAgICAgaWYg
KGFyZ3NbMF0tPklzU3RyaW5nKCkpCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xv
cihUb1dlYkNvcmVTdHJpbmcoYXJnc1swXSksIHRvRmxvYXQoYXJnc1sxXSkpOworICAgICAgICAg
ICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IodG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pLCB0b0Zs
b2F0KGFyZ3NbMV0pKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ry
b2tlQ29sb3IodG9GbG9hdChhcmdzWzBdKSwgdG9GbG9hdChhcmdzWzFdKSk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtMTM1LDEzICsxMzUsMTMgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRl
cmluZ0NvbnRleAogICAgIHN3aXRjaCAoYXJncy5MZW5ndGgoKSkgewogICAgIGNhc2UgMToKICAg
ICAgICAgaWYgKGFyZ3NbMF0tPklzU3RyaW5nKCkpCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRG
aWxsQ29sb3IoVG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnNldEZpbGxDb2xvcih0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSkpOwogICAgICAgICBlbHNlIAog
ICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHRvRmxvYXQoYXJnc1swXSkpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIDI6CiAgICAgICAgIGlmIChhcmdzWzBdLT5Jc1N0cmluZygp
KQotICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKFRvV2ViQ29yZVN0cmluZyhhcmdz
WzBdKSwgdG9GbG9hdChhcmdzWzFdKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29s
b3IodG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0pKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHRvRmxvYXQoYXJnc1swXSks
IHRvRmxvYXQoYXJnc1sxXSkpOwogICAgICAgICBicmVhazsKQEAgLTE4NCwxMyArMTg0LDEzIEBA
IENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSA0OgogICAgICAgICBpZiAoYXJnc1szXS0+SXNTdHJpbmcoKSkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnNldFNoYWRvdyh0b0Zsb2F0KGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0p
LCB0b0Zsb2F0KGFyZ3NbMl0pLCBUb1dlYkNvcmVTdHJpbmcoYXJnc1szXSkpOworICAgICAgICAg
ICAgY29udGV4dC0+c2V0U2hhZG93KHRvRmxvYXQoYXJnc1swXSksIHRvRmxvYXQoYXJnc1sxXSks
IHRvRmxvYXQoYXJnc1syXSksIHRvV2ViQ29yZVN0cmluZyhhcmdzWzNdKSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyh0b0Zsb2F0KGFyZ3NbMF0pLCB0b0Zs
b2F0KGFyZ3NbMV0pLCB0b0Zsb2F0KGFyZ3NbMl0pLCB0b0Zsb2F0KGFyZ3NbM10pKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSA1OgogICAgICAgICBpZiAoYXJnc1szXS0+SXNTdHJpbmcoKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyh0b0Zsb2F0KGFyZ3NbMF0pLCB0b0Zsb2F0
KGFyZ3NbMV0pLCB0b0Zsb2F0KGFyZ3NbMl0pLCBUb1dlYkNvcmVTdHJpbmcoYXJnc1szXSksIHRv
RmxvYXQoYXJnc1s0XSkpOworICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KHRvRmxvYXQo
YXJnc1swXSksIHRvRmxvYXQoYXJnc1sxXSksIHRvRmxvYXQoYXJnc1syXSksIHRvV2ViQ29yZVN0
cmluZyhhcmdzWzNdKSwgdG9GbG9hdChhcmdzWzRdKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFNoYWRvdyh0b0Zsb2F0KGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0p
LCB0b0Zsb2F0KGFyZ3NbMl0pLCB0b0Zsb2F0KGFyZ3NbM10pLCB0b0Zsb2F0KGFyZ3NbNF0pKTsK
ICAgICAgICAgYnJlYWs7CkBAIC0yOTEsNyArMjkxLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENh
bnZhc1JlbmRlcmluZ0NvbnRleAogCiAgICAgaWYgKFY4SFRNTEltYWdlRWxlbWVudDo6SGFzSW5z
dGFuY2UoYXJnKSkgewogICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZV9lbGVtZW50ID0g
VjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTEltYWdlRWxlbWVudD4oYXJnKTsK
LSAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlRnJvbVJlY3QoaW1hZ2VfZWxlbWVudCwgIHRvRmxv
YXQoYXJnc1sxXSksIHRvRmxvYXQoYXJnc1syXSksIHRvRmxvYXQoYXJnc1szXSksIHRvRmxvYXQo
YXJnc1s0XSksIHRvRmxvYXQoYXJnc1s1XSksIHRvRmxvYXQoYXJnc1s2XSksIHRvRmxvYXQoYXJn
c1s3XSksIHRvRmxvYXQoYXJnc1s4XSksIFRvV2ViQ29yZVN0cmluZyhhcmdzWzldKSk7CisgICAg
ICAgIGNvbnRleHQtPmRyYXdJbWFnZUZyb21SZWN0KGltYWdlX2VsZW1lbnQsICB0b0Zsb2F0KGFy
Z3NbMV0pLCB0b0Zsb2F0KGFyZ3NbMl0pLCB0b0Zsb2F0KGFyZ3NbM10pLCB0b0Zsb2F0KGFyZ3Nb
NF0pLCB0b0Zsb2F0KGFyZ3NbNV0pLCB0b0Zsb2F0KGFyZ3NbNl0pLCB0b0Zsb2F0KGFyZ3NbN10p
LCB0b0Zsb2F0KGFyZ3NbOF0pLCB0b1dlYkNvcmVTdHJpbmcoYXJnc1s5XSkpOwogICAgIH0gZWxz
ZQogICAgICAgICBWOFByb3h5Ojp0aHJvd0Vycm9yKFY4UHJveHk6OlR5cGVFcnJvciwgImRyYXdJ
bWFnZUZyb21SZWN0OiBJbnZhbGlkIHR5cGUgb2YgYXJndW1lbnRzIik7CiAKQEAgLTMwOCw3ICsz
MDgsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4CiAgICAgaWYg
KFY4SFRNTEltYWdlRWxlbWVudDo6SGFzSW5zdGFuY2UoYXJnKSkgewogICAgICAgICBIVE1MSW1h
Z2VFbGVtZW50KiBpbWFnZV9lbGVtZW50ID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05v
ZGU8SFRNTEltYWdlRWxlbWVudD4oYXJnKTsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgICAgIFJlZlB0cjxDYW52YXNQYXR0ZXJuPiBwYXR0ZXJuID0gY29udGV4dC0+Y3JlYXRl
UGF0dGVybihpbWFnZV9lbGVtZW50LCB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzFd
KSwgZWMpOworICAgICAgICBSZWZQdHI8Q2FudmFzUGF0dGVybj4gcGF0dGVybiA9IGNvbnRleHQt
PmNyZWF0ZVBhdHRlcm4oaW1hZ2VfZWxlbWVudCwgdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVj
ayhhcmdzWzFdKSwgZWMpOwogICAgICAgICBpZiAoZWMgIT0gMCkgewogICAgICAgICAgICAgVjhQ
cm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICAgICAgICAgIHJldHVybiBub3RIYW5kbGVk
QnlJbnRlcmNlcHRvcigpOwpAQCAtMzE5LDcgKzMxOSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChD
YW52YXNSZW5kZXJpbmdDb250ZXgKICAgICBpZiAoVjhIVE1MQ2FudmFzRWxlbWVudDo6SGFzSW5z
dGFuY2UoYXJnKSkgewogICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzX2VsZW1lbnQg
PSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MQ2FudmFzRWxlbWVudD4oYXJn
KTsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIFJlZlB0cjxDYW52YXNQ
YXR0ZXJuPiBwYXR0ZXJuID0gY29udGV4dC0+Y3JlYXRlUGF0dGVybihjYW52YXNfZWxlbWVudCwg
dmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1sxXSksIGVjKTsKKyAgICAgICAgUmVmUHRy
PENhbnZhc1BhdHRlcm4+IHBhdHRlcm4gPSBjb250ZXh0LT5jcmVhdGVQYXR0ZXJuKGNhbnZhc19l
bGVtZW50LCB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbMV0pLCBlYyk7CiAgICAg
ICAgIGlmIChlYyAhPSAwKSB7CiAgICAgICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24o
ZWMpOwogICAgICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CkBAIC0z
NDUsNyArMzQ1LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleAog
ICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKICAgICB9CiAKLSAgICBT
dHJpbmcgdGV4dCA9IFRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICBTdHJpbmcgdGV4dCA9
IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAgICBmbG9hdCB4ID0gdG9GbG9hdChhcmdzWzFd
KTsKICAgICBmbG9hdCB5ID0gdG9GbG9hdChhcmdzWzJdKTsKIApAQCAtMzcxLDcgKzM3MSw3IEBA
IENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKICAgICAgICAgcmV0dXJu
IG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHRleHQgPSBU
b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CisgICAgU3RyaW5nIHRleHQgPSB0b1dlYkNvcmVTdHJp
bmcoYXJnc1swXSk7CiAgICAgZmxvYXQgeCA9IHRvRmxvYXQoYXJnc1sxXSk7CiAgICAgZmxvYXQg
eSA9IHRvRmxvYXQoYXJnc1syXSk7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9uIDQ1NDg2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIFN0cmluZyBWOEN1c3RvbVhQYXRo
TlNSZXNvbHZlcjo6bG9va3VwTmEKICAgICBpZiAodHJ5X2NhdGNoLkhhc0NhdWdodCgpKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4gdmFsdWVUb1N0cmluZ1dpdGhOdWxs
Q2hlY2socmV0dmFsKTsKKyAgICByZXR1cm4gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhy
ZXR2YWwpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiA0NTQ4
NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjc3LDkgKzI3Nyw5IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01X
aW5kb3dQb3N0TWVzc2FnZSkKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDIpIHsKICAgICAgICAg
aWYgKFY4UHJveHk6OmlzV3JhcHBlck9mVHlwZShhcmdzWzFdLCBWOENsYXNzSW5kZXg6Ok1FU1NB
R0VQT1JUKSkKICAgICAgICAgICAgIHBvcnQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIGFyZ3NbMV0pOwotICAg
ICAgICB0YXJnZXRPcmlnaW4gPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNr
KGFyZ3NbMl0pOworICAgICAgICB0YXJnZXRPcmlnaW4gPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVs
bE9yVW5kZWZpbmVkQ2hlY2soYXJnc1syXSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdGFyZ2V0
T3JpZ2luID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzFdKTsK
KyAgICAgICAgdGFyZ2V0T3JpZ2luID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5l
ZENoZWNrKGFyZ3NbMV0pOwogICAgIH0KIAogICAgIGlmICh0cnlDYXRjaC5IYXNDYXVnaHQoKSkK
QEAgLTU2Miw5ICs1NjIsOSBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93U2hvd01vZGFs
RGlhCiAgICAgaWYgKCFjYW5TaG93TW9kYWxEaWFsb2dOb3coZnJhbWUpIHx8ICFhbGxvd1BvcFVw
KCkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICBTdHJpbmcgdXJsID0g
dmFsdWVUb1N0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzBdKTsKKyAgICBTdHJp
bmcgdXJsID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMF0p
OwogICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGRpYWxvZ0FyZ3MgPSBhcmdzWzFdOwotICAgIFN0
cmluZyBmZWF0dXJlQXJncyA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2so
YXJnc1syXSk7CisgICAgU3RyaW5nIGZlYXR1cmVBcmdzID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51
bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMl0pOwogCiAgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gZmVhdHVyZXMgPSBwYXJzZU1vZGFsRGlhbG9nRmVhdHVyZXMoZmVhdHVyZUFyZ3Mp
OwogCkBAIC02NTEsNyArNjUxLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd09wZW4p
CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAg
U3RyaW5nIHVybFN0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2so
YXJnc1swXSk7CisgICAgU3RyaW5nIHVybFN0cmluZyA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxs
T3JVbmRlZmluZWRDaGVjayhhcmdzWzBdKTsKICAgICBBdG9taWNTdHJpbmcgZnJhbWVOYW1lID0g
KGFyZ3NbMV0tPklzVW5kZWZpbmVkKCkgfHwgYXJnc1sxXS0+SXNOdWxsKCkpID8gIl9ibGFuayIg
OiBBdG9taWNTdHJpbmcodG9XZWJDb3JlU3RyaW5nKGFyZ3NbMV0pKTsKIAogICAgIC8vIEJlY2F1
c2UgRnJhbWVUcmVlOjpmaW5kKCkgcmV0dXJucyB0cnVlIGZvciBlbXB0eSBzdHJpbmdzLCB3ZSBt
dXN0IGNoZWNrCkBAIC03MDAsNyArNzAwLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRv
d09wZW4pCiAgICAgLy8gUGFyc2UgdGhlIHZhbHVlcywgYW5kIHRoZW4gd29yayB3aXRoIGEgY29w
eSBvZiB0aGUgcGFyc2VkIHZhbHVlcwogICAgIC8vIHNvIHdlIGNhbiByZXN0b3JlIHRoZSB2YWx1
ZXMgd2UgbWF5IG5vdCB3YW50IHRvIG92ZXJ3cml0ZSBhZnRlcgogICAgIC8vIHdlIGRvIHRoZSBt
dWx0aXBsZSBtb25pdG9yIGZpeGVzLgotICAgIFdpbmRvd0ZlYXR1cmVzIHJhd0ZlYXR1cmVzKHZh
bHVlVG9TdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1syXSkpOworICAgIFdpbmRv
d0ZlYXR1cmVzIHJhd0ZlYXR1cmVzKHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRD
aGVjayhhcmdzWzJdKSk7CiAgICAgV2luZG93RmVhdHVyZXMgd2luZG93RmVhdHVyZXMocmF3RmVh
dHVyZXMpOwogICAgIEZsb2F0UmVjdCBzY3JlZW5SZWN0ID0gc2NyZWVuQXZhaWxhYmxlUmVjdChw
YWdlLT5tYWluRnJhbWUoKS0+dmlldygpKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlz
aW9uIDQ1NDg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxl
bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgQ0FMTEJBQ0tf
RlVOQ19ERUNMKEhUTUxDYW52YXNFbGVtZW50R2V0QwogICAgIElOQ19TVEFUUygiRE9NLkhUTUxD
YW52YXNFbGVtZW50LmNvbnRleHQiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaG9sZGVy
ID0gYXJncy5Ib2xkZXIoKTsKICAgICBIVE1MQ2FudmFzRWxlbWVudCogaW1wID0gVjhQcm94eTo6
Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTENhbnZhc0VsZW1lbnQ+KGhvbGRlcik7Ci0gICAg
U3RyaW5nIGNvbnRleHRJZCA9IFRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICBTdHJpbmcg
Y29udGV4dElkID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCogcmVzdWx0ID0gaW1wLT5nZXRDb250ZXh0KGNvbnRleHRJZCk7CiAgICAgcmV0
dXJuIFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVS
SU5HQ09OVEVYVDJELCByZXN1bHQpOwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhIVE1MSUZyYW1lRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSUZyYW1lRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDQ1NDg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSUZyYW1lRWxlbWVu
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogQUNDRVNTT1JfU0VUVEVSKEhUTUxJRnJhbWVFbGVtZW50U3JjKQogewogICAgIEhU
TUxJRnJhbWVFbGVtZW50KiBpZnJhbWUgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9k
ZTxIVE1MSUZyYW1lRWxlbWVudD4oaW5mby5Ib2xkZXIoKSk7Ci0gICAgU3RyaW5nIHYgPSB2YWx1
ZVRvU3RyaW5nV2l0aE51bGxDaGVjayh2YWx1ZSk7CisgICAgU3RyaW5nIHYgPSB0b1dlYkNvcmVT
dHJpbmdXaXRoTnVsbENoZWNrKHZhbHVlKTsKIAogICAgIGlmICghYWxsb3dTZXR0aW5nRnJhbWVT
cmNUb0phdmFzY3JpcHRVcmwoaWZyYW1lLCB2KSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbnND
b2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNDU0ODYpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY3LDcgKzY3LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxPcHRpb25zQ29sbGVj
dGlvbgogICAgIGVsc2UgewogICAgICAgICBib29sIG9rOwogICAgICAgICB2ODo6VHJ5Q2F0Y2gg
dHJ5X2NhdGNoOwotICAgICAgICBpbnQgaW5kZXggPSBUb0ludDMyKGFyZ3NbMV0sIG9rKTsKKyAg
ICAgICAgaW50IGluZGV4ID0gdG9JbnQzMihhcmdzWzFdLCBvayk7CiAKICAgICAgICAgaWYgKHRy
eV9jYXRjaC5IYXNDYXVnaHQoKSkKICAgICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxTZWxlY3RFbGVtZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxT
ZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNDU0ODYpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTYsNyArNTYsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVtb3ZlRWxlbWVudChI
VE1MCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgaW1wLT5y
ZW1vdmUoVG9JbnQzMihhcmdzWzBdKSk7CisgICAgaW1wLT5yZW1vdmUodG9JbnQzMihhcmdzWzBd
KSk7CiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJl
dmlzaW9uIDQ1NDg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2Fj
dGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgQ0FMTEJBQ0tf
RlVOQ19ERUNMKFNRTFRyYW5zYWN0aW9uRXhlY3V0ZQogICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwogICAgIH0KIAotICAgIFN0cmluZyBzdGF0ZW1lbnQgPSBUb1dlYkNvcmVTdHJpbmco
YXJnc1swXSk7CisgICAgU3RyaW5nIHN0YXRlbWVudCA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBd
KTsKIAogICAgIFZlY3RvcjxTUUxWYWx1ZT4gc3FsVmFsdWVzOwogCkBAIC03NSw3ICs3NSw3IEBA
IENBTExCQUNLX0ZVTkNfREVDTChTUUxUcmFuc2FjdGlvbkV4ZWN1dGUKICAgICAgICAgICAgIGVs
c2UgaWYgKHZhbHVlLT5Jc051bWJlcigpKQogICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBl
bmQoU1FMVmFsdWUodmFsdWUtPk51bWJlclZhbHVlKCkpKTsKICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKFNRTFZhbHVlKFRvV2ViQ29yZVN0cmluZyh2
YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKFNRTFZhbHVlKHRvV2Vi
Q29yZVN0cmluZyh2YWx1ZSkpKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCShy
ZXZpc2lvbiA0NTQ4NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29u
dGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gU2V0VGltZW91dE9ySW50ZXJ2CiAgICAgaW50IHRpbWVySWQ7CiAKICAg
ICBpZiAoZnVuY3Rpb24tPklzU3RyaW5nKCkpIHsKLSAgICAgICAgV2ViQ29yZTo6U3RyaW5nIHN0
cmluZ0Z1bmN0aW9uID0gVG9XZWJDb3JlU3RyaW5nKGZ1bmN0aW9uKTsKKyAgICAgICAgV2ViQ29y
ZTo6U3RyaW5nIHN0cmluZ0Z1bmN0aW9uID0gdG9XZWJDb3JlU3RyaW5nKGZ1bmN0aW9uKTsKICAg
ICAgICAgdGltZXJJZCA9IERPTVRpbWVyOjppbnN0YWxsKHdvcmtlckNvbnRleHQsIG5ldyBTY2hl
ZHVsZWRBY3Rpb24oc3RyaW5nRnVuY3Rpb24sIHdvcmtlckNvbnRleHQtPnVybCgpKSwgdGltZW91
dCwgc2luZ2xlU2hvdCk7CiAgICAgfSBlbHNlIGlmIChmdW5jdGlvbi0+SXNGdW5jdGlvbigpKSB7
CiAgICAgICAgIHNpemVfdCBwYXJhbUNvdW50ID0gYXJndW1lbnRDb3VudCA+PSAyID8gYXJndW1l
bnRDb3VudCAtIDIgOiAwOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxI
dHRwUmVxdWVzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NDg2KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0NSwxMCArMzQ1LDEwIEBAIENBTExCQUNLX0ZVTkNfREVDTChYTUxIdHRw
UmVxdWVzdE9wZW4pCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgU3RyaW5nIHVzZXIs
IHBhc3N3ZDsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+PSA0ICYmICFhcmdzWzNdLT5Jc1VuZGVm
aW5lZCgpKSB7Ci0gICAgICAgIHVzZXIgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhhcmdz
WzNdKTsKKyAgICAgICAgdXNlciA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1sz
XSk7CiAKICAgICAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPj0gNSAmJiAhYXJnc1s0XS0+SXNVbmRl
ZmluZWQoKSkgewotICAgICAgICAgICAgcGFzc3dkID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hl
Y2soYXJnc1s0XSk7CisgICAgICAgICAgICBwYXNzd2QgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVs
bENoZWNrKGFyZ3NbNF0pOwogICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPm9wZW4obWV0aG9k
LCB1cmwsIGFzeW5jLCB1c2VyLCBwYXNzd2QsIGVjKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICB4bWxIdHRwUmVxdWVzdC0+b3BlbihtZXRob2QsIHVybCwgYXN5bmMsIHVzZXIsIGVjKTsK
QEAgLTM4NCw3ICszODQsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RTZW5k
KQogICAgICAgICAgICAgQVNTRVJUKGRvY3VtZW50KTsKICAgICAgICAgICAgIHhtbEh0dHBSZXF1
ZXN0LT5zZW5kKGRvY3VtZW50LCBlYyk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgeG1s
SHR0cFJlcXVlc3QtPnNlbmQodmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soYXJnKSwgZWMpOwor
ICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNlbmQodG9XZWJDb3JlU3RyaW5nV2l0aE51bGxD
aGVjayhhcmcpLCBlYyk7CiAgICAgfQogCiAgICAgaWYgKGVjKQo=
</data>
<flag name="review"
          id="16689"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32212</attachid>
            <date>2009-07-02 17:00:56 -0700</date>
            <delta_ts>2009-07-02 17:06:46 -0700</delta_ts>
            <desc>patch5</desc>
            <filename>patch5.txt</filename>
            <type>text/plain</type>
            <size>33981</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTQ4NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMDktMDctMDIgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
cHN0cmVhbSBWOEJpbmRpbmcgYW5kIHVwZGF0ZSBzb21lIGZ1bmN0aW9uIG5hbWVzLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjg1NworCisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06IFVwZGF0ZSBmdW5jdGlv
biBuYW1lcyBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlcy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OEJpbmRpbmcuY3BwOiBVcHN0cmVhbWVkIGZyb20gc3JjLmNocm9taXVtLm9yZy4KKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOEJpbmRpbmcuaDogVXBzdHJlYW1lZCBmcm9tIHNyYy5jaHJvbWl1bS5v
cmcuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWOExhenlFdmVudExpc3RlbmVyOjpnZXRMaXN0ZW5lckZ1bmN0aW9uKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhh
bmRsZUNvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNvbXBpbGVT
Y3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6c291cmNlTmFtZSk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmhhbmRsZUNvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5BTUVEX1BST1BFUlRZX1NFVFRFUik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNB
TExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9t
WFBhdGhOU1Jlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tWFBhdGhOU1Jl
c29sdmVyOjpsb29rdXBOYW1lc3BhY2VVUkkpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5D
X0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfU0VUVEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVF
bGVtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2V0VGltZW91dE9ySW50ZXJ2YWwpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNB
TExCQUNLX0ZVTkNfREVDTCk6CisKIDIwMDktMDctMDIgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNDU0ODYp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5n
IGNvcHkpCkBAIC01NjIsNyArNTYyLDcgQEAgRU5ECiAgICAgICAgICAgICAkZ2V0dGVyU3RyaW5n
ID0gImltcF9pbnN0YW5jZSI7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCRuYXRpdmVUeXBlIGVx
ICJTdHJpbmciKSB7Ci0gICAgICAgICAgICAkZ2V0dGVyU3RyaW5nID0gIlRvU3RyaW5nKCRnZXR0
ZXJTdHJpbmcpIjsKKyAgICAgICAgICAgICRnZXR0ZXJTdHJpbmcgPSAidG9TdHJpbmcoJGdldHRl
clN0cmluZykiOwogICAgICAgICB9CiAKICAgICAgICAgbXkgJHJlc3VsdDsKQEAgLTEwNTMsNyAr
MTA1Myw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgcHVzaChAaW1wbEZpeGVk
SGVhZGVyLAogICAgICAgICAgIiNpbmNsdWRlIFwiY29uZmlnLmhcIlxuIiAuCiAgICAgICAgICAi
I2luY2x1ZGUgXCJWOFByb3h5LmhcIlxuIiAuCi0gICAgICAgICAiI2luY2x1ZGUgXCJ2OF9iaW5k
aW5nLmhcIlxuXG4iIC4KKyAgICAgICAgICIjaW5jbHVkZSBcIlY4QmluZGluZy5oXCJcblxuIiAu
CiAgICAgICAgICAiI3VuZGVmIExPR1xuXG4iKTsKIAogICAgIG15ICRjb25kaXRpb25hbFN0cmlu
ZzsKQEAgLTE3OTksMTUgKzE3OTksMTUgQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAgIHJldHVy
biAic3RhdGljX2Nhc3Q8JHR5cGU+KCR2YWx1ZS0+TnVtYmVyVmFsdWUoKSkiIGlmICR0eXBlIGVx
ICJmbG9hdCIgb3IgJHR5cGUgZXEgImRvdWJsZSI7CiAgICAgcmV0dXJuICIkdmFsdWUtPk51bWJl
clZhbHVlKCkiIGlmICR0eXBlIGVxICJTVkdOdW1iZXIiOwogCi0gICAgcmV0dXJuICJUb0ludDMy
KCR2YWx1ZSR7bWF5YmVPa1BhcmFtfSkiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBsb25nIiBvciAk
dHlwZSBlcSAidW5zaWduZWQgc2hvcnQiIG9yICR0eXBlIGVxICJsb25nIjsKKyAgICByZXR1cm4g
InRvSW50MzIoJHZhbHVlJHttYXliZU9rUGFyYW19KSIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGxv
bmciIG9yICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCIgb3IgJHR5cGUgZXEgImxvbmciOwogICAg
IHJldHVybiAic3RhdGljX2Nhc3Q8UmFuZ2U6OkNvbXBhcmVIb3c+KCR2YWx1ZS0+SW50MzJWYWx1
ZSgpKSIgaWYgJHR5cGUgZXEgIkNvbXBhcmVIb3ciOwogICAgIHJldHVybiAic3RhdGljX2Nhc3Q8
U1ZHUGFpbnQ6OlNWR1BhaW50VHlwZT4oJHZhbHVlLT5Ub0ludDMyKCktPkludDMyVmFsdWUoKSki
IGlmICR0eXBlIGVxICJTVkdQYWludFR5cGUiOwogCi0gICAgcmV0dXJuICJUb1dlYkNvcmVTdHJp
bmcoJHZhbHVlKSIgaWYgJHR5cGUgZXEgIkF0b21pY1N0cmluZyIgb3IgJHR5cGUgZXEgIkRPTVVz
ZXJEYXRhIjsKKyAgICByZXR1cm4gInRvV2ViQ29yZVN0cmluZygkdmFsdWUpIiBpZiAkdHlwZSBl
cSAiQXRvbWljU3RyaW5nIiBvciAkdHlwZSBlcSAiRE9NVXNlckRhdGEiOwogICAgIGlmICgkdHlw
ZSBlcSAiRE9NU3RyaW5nIikgewotICAgICAgICByZXR1cm4gInZhbHVlVG9TdHJpbmdXaXRoTnVs
bENoZWNrKCR2YWx1ZSkiIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252
ZXJ0TnVsbFRvTnVsbFN0cmluZyJ9OwotICAgICAgICByZXR1cm4gInZhbHVlVG9TdHJpbmdXaXRo
TnVsbE9yVW5kZWZpbmVkQ2hlY2soJHZhbHVlKSIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkNvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmcifTsKLSAgICAgICAg
cmV0dXJuICJUb1dlYkNvcmVTdHJpbmcoJHZhbHVlKSI7CisgICAgICAgIHJldHVybiAidG9XZWJD
b3JlU3RyaW5nV2l0aE51bGxDaGVjaygkdmFsdWUpIiBpZiAkc2lnbmF0dXJlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ29udmVydE51bGxUb051bGxTdHJpbmcifTsKKyAgICAgICAgcmV0dXJuICJ0
b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soJHZhbHVlKSIgaWYgJHNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxT
dHJpbmcifTsKKyAgICAgICAgcmV0dXJuICJ0b1dlYkNvcmVTdHJpbmcoJHZhbHVlKSI7CiAgICAg
fQogCiAgICAgaWYgKCR0eXBlIGVxICJOb2RlRmlsdGVyIikgewpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
VjhCaW5kaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisKKyNpbmNsdWRlICJB
dG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiTWF0aEV4dHJh
cy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nQnVmZmVy
LmgiCisKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBXZWJDb3JlU3RyaW5nUmVzb3VyY2UgaXMgYSBoZWxw
ZXIgY2xhc3MgZm9yIHY4RXh0ZXJuYWxTdHJpbmcuIEl0IGlzIHVzZWQKKy8vIHRvIG1hbmFnZSB0
aGUgbGlmZS1jeWNsZSBvZiB0aGUgdW5kZXJseWluZyBidWZmZXIgb2YgdGhlIGV4dGVybmFsIHN0
cmluZy4KK2NsYXNzIFdlYkNvcmVTdHJpbmdSZXNvdXJjZSA6IHB1YmxpYyB2ODo6U3RyaW5nOjpF
eHRlcm5hbFN0cmluZ1Jlc291cmNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJDb3JlU3Ry
aW5nUmVzb3VyY2UoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgICAgIDogbV9pbXBsKHN0cmlu
Zy5pbXBsKCkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfldlYkNvcmVTdHJpbmdSZXNv
dXJjZSgpIHsgfQorCisgICAgY29uc3QgdWludDE2X3QqIGRhdGEoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihtX2ltcGwuY2hh
cmFjdGVycygpKTsKKyAgICB9CisKKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9pbXBsLmxlbmd0aCgpOyB9CisKKyAgICBTdHJpbmcgd2ViY29yZVN0cmluZygpIHsgcmV0dXJu
IG1faW1wbDsgfQorCitwcml2YXRlOgorICAgIC8vIEEgc2hhbGxvdyBjb3B5IG9mIHRoZSBzdHJp
bmcuIEtlZXBzIHRoZSBzdHJpbmcgYnVmZmVyIGFsaXZlIHVudGlsIHRoZSBWOCBlbmdpbmUgZ2Fy
YmFnZSBjb2xsZWN0cyBpdC4KKyAgICBTdHJpbmcgbV9pbXBsOworfTsKKworU3RyaW5nIHY4U3Ry
aW5nVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcsIGJvb2wg
ZXh0ZXJuYWxpemUpCit7CisgICAgV2ViQ29yZVN0cmluZ1Jlc291cmNlKiBzdHJpbmdSZXNvdXJj
ZSA9IHN0YXRpY19jYXN0PFdlYkNvcmVTdHJpbmdSZXNvdXJjZSo+KHY4U3RyaW5nLT5HZXRFeHRl
cm5hbFN0cmluZ1Jlc291cmNlKCkpOworICAgIGlmIChzdHJpbmdSZXNvdXJjZSkKKyAgICAgICAg
cmV0dXJuIHN0cmluZ1Jlc291cmNlLT53ZWJjb3JlU3RyaW5nKCk7CisKKyAgICBpbnQgbGVuZ3Ro
ID0gdjhTdHJpbmctPkxlbmd0aCgpOworICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgIC8vIEF2
b2lkIHRyeWluZyB0byBtb3JwaCBlbXB0eSBzdHJpbmdzLCBhcyB0aGV5IGRvIG5vdCBoYXZlIGVu
b3VnaCByb29tIHRvIGNvbnRhaW4gdGhlIGV4dGVybmFsIHJlZmVyZW5jZS4KKyAgICAgICAgcmV0
dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgfQorCisgICAgVUNoYXIqIGJ1ZmZlcjsKKyAg
ICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVm
ZmVyKTsKKyAgICB2OFN0cmluZy0+V3JpdGUocmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGJ1
ZmZlciksIDAsIGxlbmd0aCk7CisKKyAgICBpZiAoZXh0ZXJuYWxpemUpIHsKKyAgICAgICAgV2Vi
Q29yZVN0cmluZ1Jlc291cmNlKiByZXNvdXJjZSA9IG5ldyBXZWJDb3JlU3RyaW5nUmVzb3VyY2Uo
cmVzdWx0KTsKKyAgICAgICAgaWYgKCF2OFN0cmluZy0+TWFrZUV4dGVybmFsKHJlc291cmNlKSkg
eworICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBhIGZhaWx1cmUgZGVsZXRlIHRoZSBleHRlcm5h
bCByZXNvdXJjZSBhcyBpdCB3YXMgbm90IHVzZWQuCisgICAgICAgICAgICBkZWxldGUgcmVzb3Vy
Y2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RyaW5nIHY4
VmFsdWVUb1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKK3sKKyAg
ICBpZiAob2JqZWN0LT5Jc1N0cmluZygpKSAKKyAgICAgICAgcmV0dXJuIHY4U3RyaW5nVG9XZWJD
b3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz46OkNhc3Qob2JqZWN0KSwgdHJ1ZSk7CisK
KyAgICBpZiAob2JqZWN0LT5Jc0ludDMyKCkpIHsKKyAgICAgICAgaW50IHZhbHVlID0gb2JqZWN0
LT5JbnQzMlZhbHVlKCk7CisgICAgICAgIC8vIE1vc3QgbnVtYmVycyB1c2VkIGFyZSA8PSAxMDAu
IEV2ZW4gaWYgdGhleSBhcmVuJ3QgdXNlZCB0aGVyZSdzIHZlcnkgbGl0dGxlIGluIHVzaW5nIHRo
ZSBzcGFjZS4KKyAgICAgICAgY29uc3QgaW50IGtMb3dOdW1iZXJzID0gMTAwOworICAgICAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZyosIGxvd051bWJlcnMsIFtrTG93TnVtYmVy
cyArIDFdKTsKKyAgICAgICAgU3RyaW5nIHdlYkNvcmVTdHJpbmc7CisgICAgICAgIGlmICgwIDw9
IHZhbHVlICYmIHZhbHVlIDw9IGtMb3dOdW1iZXJzKSB7CisgICAgICAgICAgICB3ZWJDb3JlU3Ry
aW5nID0gbG93TnVtYmVyc1t2YWx1ZV07CisgICAgICAgICAgICBpZiAoIXdlYkNvcmVTdHJpbmcp
IHsKKyAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgdmFsdWVTdHJpbmcgPSBBdG9taWNTdHJp
bmcoU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKKyAgICAgICAgICAgICAgICBsb3dOdW1iZXJzW3Zh
bHVlXSA9IHZhbHVlU3RyaW5nOworICAgICAgICAgICAgICAgIHdlYkNvcmVTdHJpbmcgPSB2YWx1
ZVN0cmluZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgd2Vi
Q29yZVN0cmluZyA9IFN0cmluZzo6bnVtYmVyKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHdlYkNv
cmVTdHJpbmc7CisgICAgfQorCisgICAgdjg6OlRyeUNhdGNoIGJsb2NrOworICAgIHY4OjpIYW5k
bGU8djg6OlN0cmluZz4gdjhTdHJpbmcgPSBvYmplY3QtPlRvU3RyaW5nKCk7CisgICAgLy8gQ2hl
Y2sgZm9yIGVtcHR5IGhhbmRsZXMgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuIGV4Y2VwdGlv
bgorICAgIC8vIGlzIHRocm93biBhcyBwYXJ0IG9mIGludm9raW5nIHRvU3RyaW5nIG9uIHRoZSBv
YmplY3RlY3QuCisgICAgaWYgKHY4U3RyaW5nLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZ0ltcGw6OmVtcHR5KCk7CisgICAgcmV0dXJuIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKHY4
U3RyaW5nLCBmYWxzZSk7Cit9CisKK0F0b21pY1N0cmluZyB2OFN0cmluZ1RvQXRvbWljV2ViQ29y
ZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nKQoreworICAgIFN0cmluZyBz
dHJpbmcgPSB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZyh2OFN0cmluZywgdHJ1ZSk7CisgICAgcmV0
dXJuIEF0b21pY1N0cmluZyhzdHJpbmcpOworfQorCitBdG9taWNTdHJpbmcgdjhWYWx1ZVRvQXRv
bWljV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhTdHJpbmcpCit7CisgICAg
U3RyaW5nIHN0cmluZyA9IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcodjhTdHJpbmcpOworICAgIHJl
dHVybiBBdG9taWNTdHJpbmcoc3RyaW5nKTsKK30KKwordjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2
OFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmluZy5sZW5ndGgo
KSkKKyAgICAgICAgcmV0dXJuIHY4OjpTdHJpbmc6OkVtcHR5KCk7CisgICAgcmV0dXJuIHY4OjpT
dHJpbmc6Ok5ld0V4dGVybmFsKG5ldyBXZWJDb3JlU3RyaW5nUmVzb3VyY2Uoc3RyaW5nKSk7Cit9
CisKK3Y4OjpMb2NhbDx2ODo6U3RyaW5nPiB2OEV4dGVybmFsU3RyaW5nKGNvbnN0IFN0cmluZyYg
c3RyaW5nKQoreworICAgIGlmICghc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gdjg6
OlN0cmluZzo6RW1wdHkoKTsKKyAgICByZXR1cm4gdjg6OlN0cmluZzo6TmV3RXh0ZXJuYWwobmV3
IFdlYkNvcmVTdHJpbmdSZXNvdXJjZShzdHJpbmcpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCShyZXZpc2lvbiA0NTQ4NikKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE2ICsz
MSw3NiBAQAogI2lmbmRlZiBWOEJpbmRpbmdfaAogI2RlZmluZSBWOEJpbmRpbmdfaAogCi0vLyBG
SVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBmb3J3YXJkaW5nIGhlYWRlciB1bnRpbCBhbGwgYmlu
ZGluZ3MgaGF2ZSBtaWdyYXRlZAotLy8gb3ZlciBhbmQgdjhfYmluZGluZyBhY3R1YWxseSBiZWNv
bWVzIFY4QmluZGluZy4KLSNpbmNsdWRlICJ2OF9iaW5kaW5nLmgiCisjaW5jbHVkZSAiTWF0aEV4
dHJhcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlIDx2OC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIG9uY2UgbWlncmF0
aW9uIGlzIGNvbXBsZXRlLgorICAgIC8vIENvbnZlcnQgdjggdHlwZXMgdG8gYSBXZWJDb3JlOjpT
dHJpbmcuIElmIHRoZSBWOCBzdHJpbmcgaXMgbm90IGFscmVhZHkKKyAgICAvLyBhbiBleHRlcm5h
bCBzdHJpbmcgdGhlbiBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIGV4dGVybmFsIHN0cmluZyBh
dCB0aGlzCisgICAgLy8gcG9pbnQgdG8gYXZvaWQgcmVwZWF0ZWQgY29udmVyc2lvbnMuCisgICAg
U3RyaW5nIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4sIGJv
b2wgZXh0ZXJuYWxpemUpOworICAgIFN0cmluZyB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKHY4OjpI
YW5kbGU8djg6OlZhbHVlPik7CisKKyAgICAvLyBDb252ZXJ0IHY4IHR5cGVzIHRvIGEgV2ViQ29y
ZTo6QXRvbWljU3RyaW5nLgorICAgIEF0b21pY1N0cmluZyB2OFN0cmluZ1RvQXRvbWljV2ViQ29y
ZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+KTsKKyAgICBBdG9taWNTdHJpbmcgdjhWYWx1
ZVRvQXRvbWljV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOworCisgICAgLy8g
Q29udmVydCBhIHN0cmluZyB0byBhIFY4IHN0cmluZy4KKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJp
bmc+IHY4U3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisgICAgaW5saW5lIFN0cmluZyB0b1N0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0cmluZykNCisgICAgew0KKyAgICAgICAgcmV0dXJuIHN0cmluZzsN
CisgICAgfQorCisgICAgLy8gUmV0dXJuIGEgVjggZXh0ZXJuYWwgc3RyaW5nIHRoYXQgc2hhcmVz
IHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciB3aXRoIHRoZSBnaXZlbgorICAgIC8vIFdlYkNvcmUgc3Ry
aW5nLiBUaGUgcmVmZXJlbmNlIGNvdW50aW5nIG1lY2hhbmlzbSBpcyB1c2VkIHRvIGtlZXAgdGhl
CisgICAgLy8gdW5kZXJseWluZyBidWZmZXIgYWxpdmUgd2hpbGUgdGhlIHN0cmluZyBpcyBzdGls
bCBsaXZlIGluIHRoZSBWOCBlbmdpbmUuCisgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4RXh0
ZXJuYWxTdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBDb252ZXJ0IGEgdmFsdWUgdG8g
YSAzMi1iaXQgaW50ZWdlci4gIFRoZSBjb252ZXJzaW9uIGZhaWxzIGlmIHRoZQorICAgIC8vIHZh
bHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciBvciBjb252ZXJ0cyB0byBuYW4g
b3IgdG8gYW4gaW5maW5pdHkuCisgICAgaW5saW5lIGludCB0b0ludDMyKHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2YWx1ZSwgYm9vbCYgb2spCisgICAgeworICAgICAgICBvayA9IHRydWU7CisKKyAg
ICAgICAgLy8gRmFzdCBjYXNlLiAgVGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgaW50ZWdl
ci4KKyAgICAgICAgaWYgKHZhbHVlLT5Jc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFs
dWUtPkludDMyVmFsdWUoKTsKKworICAgICAgICAvLyBDYW4gdGhlIHZhbHVlIGJlIGNvbnZlcnRl
ZCB0byBhIG51bWJlcj8KKyAgICAgICAgdjg6OkxvY2FsPHY4OjpOdW1iZXI+IG51bWJlck9iamVj
dCA9IHZhbHVlLT5Ub051bWJlcigpOworICAgICAgICBpZiAobnVtYmVyT2JqZWN0LklzRW1wdHko
KSkgeworICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRG9lcyB0aGUgdmFsdWUgY29udmVydCB0byBuYW4gb3IgdG8g
YW4gaW5maW5pdHk/CisgICAgICAgIGRvdWJsZSBudW1iZXJWYWx1ZSA9IG51bWJlck9iamVjdC0+
VmFsdWUoKTsKKyAgICAgICAgaWYgKGlzbmFuKG51bWJlclZhbHVlKSB8fCBpc2luZihudW1iZXJW
YWx1ZSkpIHsKKyAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIENhbiB0aGUgdmFsdWUgYmUgY29udmVydGVkIHRvIGEg
MzItYml0IGludGVnZXI/CisgICAgICAgIHY4OjpMb2NhbDx2ODo6SW50MzI+IGludFZhbHVlID0g
dmFsdWUtPlRvSW50MzIoKTsKKyAgICAgICAgaWYgKGludFZhbHVlLklzRW1wdHkoKSkgeworICAg
ICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisK
KyAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGludDMyIGNvbnZlcnNpb24uCisg
ICAgICAgIHJldHVybiBpbnRWYWx1ZS0+VmFsdWUoKTsKKyAgICB9CisKKyAgICAvLyBDb252ZXJ0
IGEgdmFsdWUgdG8gYSAzMi1iaXQgaW50ZWdlciBhc3N1bWluZyB0aGUgY29udmVyc2lvbiBjYW5u
b3QgZmFpbC4KICAgICBpbmxpbmUgaW50IHRvSW50MzIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZh
bHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFRvSW50MzIodmFsdWUpOworICAgICAgICBib29s
IG9rOworICAgICAgICByZXR1cm4gdG9JbnQzMih2YWx1ZSwgb2spOwogICAgIH0KIAogICAgIGlu
bGluZSBmbG9hdCB0b0Zsb2F0KHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlKQpAQCAtNDgsMjIg
KzEwOCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxmbG9hdD4odmFsdWUtPk51bWJlclZhbHVlKCkpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBS
ZW1vdmUgb25jZSBtaWdyYXRpb24gaXMgY29tcGxldGUuCi0gICAgaW5saW5lIFN0cmluZyB0b1dl
YkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iaikKKyAgICAvLyBGSVhNRTogRHJv
cCB0aGlzIGluIGZhdm9yIG9mIHRoZSB0eXBlIHNwZWNpZmljIHY4VmFsdWVUb1dlYkNvcmVTdHJp
bmcgd2hlbiB3ZSByZXdvcmsgdGhlIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICBpbmxpbmUgU3RyaW5n
IHRvV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIFRvV2ViQ29yZVN0cmluZyhvYmopOworICAgICAgICByZXR1cm4gdjhWYWx1
ZVRvV2ViQ29yZVN0cmluZyhvYmplY3QpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBSZW1vdmUg
b25jZSBtaWdyYXRpb24gaXMgY29tcGxldGUuCisgICAgLy8gVGhlIHN0cmluZyByZXR1cm5lZCBi
eSB0aGlzIGZ1bmN0aW9uIGlzIHN0aWxsIG93bmVkIGJ5IHRoZSBhcmd1bWVudAorICAgIC8vIGFu
ZCB3aWxsIGJlIGRlYWxsb2NhdGVkIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGRlYWxsb2NhdGVkLgog
ICAgIGlubGluZSBjb25zdCB1aW50MTZfdCogZnJvbVdlYkNvcmVTdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHIpCiAgICAgewotICAgICAgICByZXR1cm4gRnJvbVdlYkNvcmVTdHJpbmcoc3RyKTsKLSAg
ICB9Ci0KLSAgICAvLyBGSVhNRTogUmVuYW1lIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrIG9u
Y2UgbWlncmF0aW9uIGlzIGNvbXBsZXRlLgotICAgIGlubGluZSBTdHJpbmcgdG9XZWJDb3JlU3Ry
aW5nV2l0aE51bGxDaGVjayh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2sodmFsdWUpOworICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KHN0ci5jaGFyYWN0ZXJzKCkp
OwogICAgIH0KIAogICAgIGlubGluZSBib29sIGlzVW5kZWZpbmVkT3JOdWxsKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2YWx1ZSkKQEAgLTc1LDcgKzEzMCw0MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgewogICAgICAgICByZXR1cm4gdmFsdWUgPyB2ODo6VHJ1ZSgpIDogdjg6OkZhbHNlKCk7
CiAgICAgfQorICAgCisgICAgaW5saW5lIFN0cmluZyB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENo
ZWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1
ZS0+SXNOdWxsKCkpIAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICByZXR1
cm4gdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7CisgICAgfQorCisgICAgaW5saW5lIFN0
cmluZyB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2sodjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLT5Jc051bGwoKSB8fCB2
YWx1ZS0+SXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAg
ICAgcmV0dXJuIHRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7CisgICAgfQorIAorICAgIGlubGluZSB2
ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4VW5kZXRlY3RhYmxlU3RyaW5nKGNvbnN0IFN0cmluZyYg
c3RyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHY4OjpTdHJpbmc6Ok5ld1VuZGV0ZWN0YWJsZShm
cm9tV2ViQ29yZVN0cmluZyhzdHIpLCBzdHIubGVuZ3RoKCkpOworICAgIH0KKworICAgIGlubGlu
ZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhTdHJpbmdPck51bGwoY29uc3QgU3RyaW5nJiBzdHIp
CisgICAgeworICAgICAgICByZXR1cm4gc3RyLmlzTnVsbCgpID8gdjg6OkhhbmRsZTx2ODo6VmFs
dWU+KHY4OjpOdWxsKCkpIDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4U3RyaW5nKHN0cikpOwor
ICAgIH0KKworICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhTdHJpbmdPclVuZGVm
aW5lZChjb25zdCBTdHJpbmcmIHN0cikKKyAgICB7CisgICAgICAgIHJldHVybiBzdHIuaXNOdWxs
KCkgPyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6OlVuZGVmaW5lZCgpKSA6IHY4OjpIYW5kbGU8
djg6OlZhbHVlPih2OFN0cmluZyhzdHIpKTsKKyAgICB9CiAKLX0KKyAgICBpbmxpbmUgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JGYWxzZShjb25zdCBTdHJpbmcmIHN0cikKKyAgICB7
CisgICAgICAgIHJldHVybiBzdHIuaXNOdWxsKCkgPyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6
OkZhbHNlKCkpIDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4U3RyaW5nKHN0cikpOworICAgIH0K
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFY4QmluZGluZ19oCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDQ1
NDg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3IEBAIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4
TGF6eUV2ZW50TGlzdGUKICAgICAgICAgICAgIGlmICghdmFsdWUuSXNFbXB0eSgpKSB7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc0Z1bmN0aW9uKCkpOwogICAgICAgICAgICAgICAg
IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGxpc3RlbmVyRnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6
OkZ1bmN0aW9uPjo6Q2FzdCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgbGlzdGVuZXJGdW5jdGlv
bi0+U2V0TmFtZSh2ODo6U3RyaW5nOjpOZXcoRnJvbVdlYkNvcmVTdHJpbmcobV9mdW5jdGlvbk5h
bWUpLCBtX2Z1bmN0aW9uTmFtZS5sZW5ndGgoKSkpOworICAgICAgICAgICAgICAgIGxpc3RlbmVy
RnVuY3Rpb24tPlNldE5hbWUodjg6OlN0cmluZzo6TmV3KGZyb21XZWJDb3JlU3RyaW5nKG1fZnVu
Y3Rpb25OYW1lKSwgbV9mdW5jdGlvbk5hbWUubGVuZ3RoKCkpKTsKIAogICAgICAgICAgICAgICAg
IG1fbGlzdGVuZXIgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+OjpOZXcobGlzdGVuZXJG
dW5jdGlvbik7CiAjaWZuZGVmIE5ERUJVRwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCShy
ZXZpc2lvbiA0NTQ4NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcwNywxMSArNzA3LDExIEBAIHN0YXRpYyB2b2lkIGhhbmRsZUNvbnNvbGVN
ZXNzYWdlKHY4OjpIYW4KIAogICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gZXJyb3JNZXNzYWdl
U3RyaW5nID0gbWVzc2FnZS0+R2V0KCk7CiAgICAgQVNTRVJUKCFlcnJvck1lc3NhZ2VTdHJpbmcu
SXNFbXB0eSgpKTsKLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gVG9XZWJDb3JlU3RyaW5nKGVy
cm9yTWVzc2FnZVN0cmluZyk7CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHRvV2ViQ29yZVN0
cmluZyhlcnJvck1lc3NhZ2VTdHJpbmcpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJl
c291cmNlTmFtZSA9IG1lc3NhZ2UtPkdldFNjcmlwdFJlc291cmNlTmFtZSgpOwogICAgIGJvb2wg
dXNlVVJMID0gcmVzb3VyY2VOYW1lLklzRW1wdHkoKSB8fCAhcmVzb3VyY2VOYW1lLT5Jc1N0cmlu
ZygpOwotICAgIFN0cmluZyByZXNvdXJjZU5hbWVTdHJpbmcgPSB1c2VVUkwgPyBmcmFtZS0+ZG9j
dW1lbnQoKS0+dXJsKCkgOiBUb1dlYkNvcmVTdHJpbmcocmVzb3VyY2VOYW1lKTsKKyAgICBTdHJp
bmcgcmVzb3VyY2VOYW1lU3RyaW5nID0gdXNlVVJMID8gZnJhbWUtPmRvY3VtZW50KCktPnVybCgp
IDogdG9XZWJDb3JlU3RyaW5nKHJlc291cmNlTmFtZSk7CiAgICAgSmF2YVNjcmlwdENvbnNvbGVN
ZXNzYWdlIGNvbnNvbGVNZXNzYWdlKGVycm9yTWVzc2FnZSwgcmVzb3VyY2VOYW1lU3RyaW5nLCBt
ZXNzYWdlLT5HZXRMaW5lTnVtYmVyKCkpOwogICAgIENvbnNvbGVNZXNzYWdlTWFuYWdlcjo6YWRk
TWVzc2FnZShwYWdlLCBjb25zb2xlTWVzc2FnZSk7CiB9CkBAIC05NjUsNyArOTY1LDcgQEAgdm9p
ZCBWOFByb3h5OjpkaXNjb25uZWN0RXZlbnRMaXN0ZW5lcnMoKQogCiB2ODo6SGFuZGxlPHY4OjpT
Y3JpcHQ+IFY4UHJveHk6OmNvbXBpbGVTY3JpcHQodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2Rl
LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQgYmFzZUxpbmUpCiB7Ci0gICAgY29uc3QgdWlu
dDE2X3QqIGZpbGVOYW1lU3RyaW5nID0gRnJvbVdlYkNvcmVTdHJpbmcoZmlsZU5hbWUpOworICAg
IGNvbnN0IHVpbnQxNl90KiBmaWxlTmFtZVN0cmluZyA9IGZyb21XZWJDb3JlU3RyaW5nKGZpbGVO
YW1lKTsKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IG5hbWUgPSB2ODo6U3RyaW5nOjpOZXco
ZmlsZU5hbWVTdHJpbmcsIGZpbGVOYW1lLmxlbmd0aCgpKTsKICAgICB2ODo6SGFuZGxlPHY4OjpJ
bnRlZ2VyPiBsaW5lID0gdjg6OkludGVnZXI6Ok5ldyhiYXNlTGluZSk7CiAgICAgdjg6OlNjcmlw
dE9yaWdpbiBvcmlnaW4obmFtZSwgbGluZSk7CkBAIC0zMjE3LDcgKzMyMTcsNyBAQCBTdHJpbmcg
VjhQcm94eTo6c291cmNlTmFtZSgpCiAgICAgZnJhbWVTb3VyY2VOYW1lID0gdjg6OkxvY2FsPHY4
OjpGdW5jdGlvbj46OkNhc3QodjhVdGlsaXR5Q29udGV4dC0+R2xvYmFsKCktPkdldCh2ODo6U3Ry
aW5nOjpOZXcoImZyYW1lU291cmNlTmFtZSIpKSk7CiAgICAgaWYgKGZyYW1lU291cmNlTmFtZS5J
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gVG9XZWJDb3Jl
U3RyaW5nKHY4OjpEZWJ1Zzo6Q2FsbChmcmFtZVNvdXJjZU5hbWUpKTsKKyAgICByZXR1cm4gdG9X
ZWJDb3JlU3RyaW5nKHY4OjpEZWJ1Zzo6Q2FsbChmcmFtZVNvdXJjZU5hbWUpKTsKIH0KIAogdm9p
ZCBWOFByb3h5OjpyZWdpc3RlckV4dGVuc2lvbih2ODo6RXh0ZW5zaW9uKiBleHRlbnNpb24sIGNv
bnN0IFN0cmluZyYgc2NoZW1lUmVzdHJpY3Rpb24pCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCShyZXZpc2lvbiA0NTQ4
NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTEgKzcxLDExIEBAIHN0YXRpYyB2b2lkIGhhbmRsZUNv
bnNvbGVNZXNzYWdlKHY4OjpIYW4KICAgICAKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGVy
cm9yTWVzc2FnZVN0cmluZyA9IG1lc3NhZ2UtPkdldCgpOwogICAgIEFTU0VSVCghZXJyb3JNZXNz
YWdlU3RyaW5nLklzRW1wdHkoKSk7Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFRvV2ViQ29y
ZVN0cmluZyhlcnJvck1lc3NhZ2VTdHJpbmcpOworICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSB0
b1dlYkNvcmVTdHJpbmcoZXJyb3JNZXNzYWdlU3RyaW5nKTsKICAgICAKICAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gcmVzb3VyY2VOYW1lID0gbWVzc2FnZS0+R2V0U2NyaXB0UmVzb3VyY2VOYW1l
KCk7CiAgICAgYm9vbCB1c2VVUkwgPSAocmVzb3VyY2VOYW1lLklzRW1wdHkoKSB8fCAhcmVzb3Vy
Y2VOYW1lLT5Jc1N0cmluZygpKTsKLSAgICBTdHJpbmcgcmVzb3VyY2VOYW1lU3RyaW5nID0gdXNl
VVJMID8gd29ya2VyQ29udGV4dC0+dXJsKCkgOiBUb1dlYkNvcmVTdHJpbmcocmVzb3VyY2VOYW1l
KTsKKyAgICBTdHJpbmcgcmVzb3VyY2VOYW1lU3RyaW5nID0gdXNlVVJMID8gd29ya2VyQ29udGV4
dC0+dXJsKCkgOiB0b1dlYkNvcmVTdHJpbmcocmVzb3VyY2VOYW1lKTsKICAgICAKICAgICB3b3Jr
ZXJDb250ZXh0LT5hZGRNZXNzYWdlKENvbnNvbGVEZXN0aW5hdGlvbiwgSlNNZXNzYWdlU291cmNl
LCBFcnJvck1lc3NhZ2VMZXZlbCwgZXJyb3JNZXNzYWdlLCBtZXNzYWdlLT5HZXRMaW5lTnVtYmVy
KCksIHJlc291cmNlTmFtZVN0cmluZyk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHJl
dmlzaW9uIDQ1NDg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZURl
Y2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBAIE5B
TUVEX1BST1BFUlRZX1NFVFRFUihDU1NTdHlsZURlY2xhcmF0aW8KICAgICBpZiAoIXByb3BJbmZv
KQogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIAotICAgIFN0cmlu
ZyBwcm9wZXJ0eVZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2sodmFsdWUpOworICAg
IFN0cmluZyBwcm9wZXJ0eVZhbHVlID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2YWx1
ZSk7CiAgICAgaWYgKHByb3BJbmZvLT5oYWRQaXhlbE9yUG9zUHJlZml4KQogICAgICAgICBwcm9w
ZXJ0eVZhbHVlLmFwcGVuZCgicHgiKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9t
LmNwcAkocmV2aXNpb24gNDU0ODYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwx
MyArMTA1LDEzIEBAIENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKICAg
ICBzd2l0Y2ggKGFyZ3MuTGVuZ3RoKCkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIGlmIChhcmdz
WzBdLT5Jc1N0cmluZygpKQotICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoVG9X
ZWJDb3JlU3RyaW5nKGFyZ3NbMF0pKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNv
bG9yKHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHRvRmxvYXQoYXJnc1swXSkpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIDI6CiAgICAgICAgIGlmIChhcmdzWzBdLT5Jc1N0cmluZygpKQotICAgICAg
ICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoVG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pLCB0
b0Zsb2F0KGFyZ3NbMV0pKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHRv
V2ViQ29yZVN0cmluZyhhcmdzWzBdKSwgdG9GbG9hdChhcmdzWzFdKSk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHRvRmxvYXQoYXJnc1swXSksIHRv
RmxvYXQoYXJnc1sxXSkpOwogICAgICAgICBicmVhazsKQEAgLTEzNSwxMyArMTM1LDEzIEBAIENB
TExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKICAgICBzd2l0Y2ggKGFyZ3Mu
TGVuZ3RoKCkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIGlmIChhcmdzWzBdLT5Jc1N0cmluZygp
KQotICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKFRvV2ViQ29yZVN0cmluZyhhcmdz
WzBdKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IodG9XZWJDb3JlU3RyaW5n
KGFyZ3NbMF0pKTsKICAgICAgICAgZWxzZSAKICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxD
b2xvcih0b0Zsb2F0KGFyZ3NbMF0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgogICAg
ICAgICBpZiAoYXJnc1swXS0+SXNTdHJpbmcoKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnNldEZp
bGxDb2xvcihUb1dlYkNvcmVTdHJpbmcoYXJnc1swXSksIHRvRmxvYXQoYXJnc1sxXSkpOworICAg
ICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKSwg
dG9GbG9hdChhcmdzWzFdKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbnRleHQtPnNl
dEZpbGxDb2xvcih0b0Zsb2F0KGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0pKTsKICAgICAgICAg
YnJlYWs7CkBAIC0xODQsMTMgKzE4NCwxMyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVu
ZGVyaW5nQ29udGV4CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNDoKICAgICAgICAgaWYgKGFy
Z3NbM10tPklzU3RyaW5nKCkpCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3codG9GbG9h
dChhcmdzWzBdKSwgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSwgVG9XZWJDb3Jl
U3RyaW5nKGFyZ3NbM10pKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyh0b0Zsb2F0
KGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0pLCB0b0Zsb2F0KGFyZ3NbMl0pLCB0b1dlYkNvcmVT
dHJpbmcoYXJnc1szXSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb250ZXh0LT5zZXRT
aGFkb3codG9GbG9hdChhcmdzWzBdKSwgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJd
KSwgdG9GbG9hdChhcmdzWzNdKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNToKICAgICAg
ICAgaWYgKGFyZ3NbM10tPklzU3RyaW5nKCkpCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFk
b3codG9GbG9hdChhcmdzWzBdKSwgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSwg
VG9XZWJDb3JlU3RyaW5nKGFyZ3NbM10pLCB0b0Zsb2F0KGFyZ3NbNF0pKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPnNldFNoYWRvdyh0b0Zsb2F0KGFyZ3NbMF0pLCB0b0Zsb2F0KGFyZ3NbMV0pLCB0
b0Zsb2F0KGFyZ3NbMl0pLCB0b1dlYkNvcmVTdHJpbmcoYXJnc1szXSksIHRvRmxvYXQoYXJnc1s0
XSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3codG9GbG9h
dChhcmdzWzBdKSwgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSwgdG9GbG9hdChh
cmdzWzNdKSwgdG9GbG9hdChhcmdzWzRdKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjkxLDcgKzI5
MSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKIAogICAgIGlm
IChWOEhUTUxJbWFnZUVsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsKICAgICAgICAgSFRNTElt
YWdlRWxlbWVudCogaW1hZ2VfZWxlbWVudCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9O
b2RlPEhUTUxJbWFnZUVsZW1lbnQ+KGFyZyk7Ci0gICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUZy
b21SZWN0KGltYWdlX2VsZW1lbnQsICB0b0Zsb2F0KGFyZ3NbMV0pLCB0b0Zsb2F0KGFyZ3NbMl0p
LCB0b0Zsb2F0KGFyZ3NbM10pLCB0b0Zsb2F0KGFyZ3NbNF0pLCB0b0Zsb2F0KGFyZ3NbNV0pLCB0
b0Zsb2F0KGFyZ3NbNl0pLCB0b0Zsb2F0KGFyZ3NbN10pLCB0b0Zsb2F0KGFyZ3NbOF0pLCBUb1dl
YkNvcmVTdHJpbmcoYXJnc1s5XSkpOworICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VGcm9tUmVj
dChpbWFnZV9lbGVtZW50LCAgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSwgdG9G
bG9hdChhcmdzWzNdKSwgdG9GbG9hdChhcmdzWzRdKSwgdG9GbG9hdChhcmdzWzVdKSwgdG9GbG9h
dChhcmdzWzZdKSwgdG9GbG9hdChhcmdzWzddKSwgdG9GbG9hdChhcmdzWzhdKSwgdG9XZWJDb3Jl
U3RyaW5nKGFyZ3NbOV0pKTsKICAgICB9IGVsc2UKICAgICAgICAgVjhQcm94eTo6dGhyb3dFcnJv
cihWOFByb3h5OjpUeXBlRXJyb3IsICJkcmF3SW1hZ2VGcm9tUmVjdDogSW52YWxpZCB0eXBlIG9m
IGFyZ3VtZW50cyIpOwogCkBAIC0zMDgsNyArMzA4LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENh
bnZhc1JlbmRlcmluZ0NvbnRleAogICAgIGlmIChWOEhUTUxJbWFnZUVsZW1lbnQ6Okhhc0luc3Rh
bmNlKGFyZykpIHsKICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VfZWxlbWVudCA9IFY4
UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJbWFnZUVsZW1lbnQ+KGFyZyk7CiAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBSZWZQdHI8Q2FudmFzUGF0dGVy
bj4gcGF0dGVybiA9IGNvbnRleHQtPmNyZWF0ZVBhdHRlcm4oaW1hZ2VfZWxlbWVudCwgdmFsdWVU
b1N0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1sxXSksIGVjKTsKKyAgICAgICAgUmVmUHRyPENhbnZh
c1BhdHRlcm4+IHBhdHRlcm4gPSBjb250ZXh0LT5jcmVhdGVQYXR0ZXJuKGltYWdlX2VsZW1lbnQs
IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1sxXSksIGVjKTsKICAgICAgICAgaWYg
KGVjICE9IDApIHsKICAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CiAg
ICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKQEAgLTMxOSw3ICsz
MTksNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4CiAgICAgaWYg
KFY4SFRNTENhbnZhc0VsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsKICAgICAgICAgSFRNTENh
bnZhc0VsZW1lbnQqIGNhbnZhc19lbGVtZW50ID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJU
b05vZGU8SFRNTENhbnZhc0VsZW1lbnQ+KGFyZyk7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICBSZWZQdHI8Q2FudmFzUGF0dGVybj4gcGF0dGVybiA9IGNvbnRleHQtPmNy
ZWF0ZVBhdHRlcm4oY2FudmFzX2VsZW1lbnQsIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGFy
Z3NbMV0pLCBlYyk7CisgICAgICAgIFJlZlB0cjxDYW52YXNQYXR0ZXJuPiBwYXR0ZXJuID0gY29u
dGV4dC0+Y3JlYXRlUGF0dGVybihjYW52YXNfZWxlbWVudCwgdG9XZWJDb3JlU3RyaW5nV2l0aE51
bGxDaGVjayhhcmdzWzFdKSwgZWMpOwogICAgICAgICBpZiAoZWMgIT0gMCkgewogICAgICAgICAg
ICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICAgICAgICAgIHJldHVybiBub3RI
YW5kbGVkQnlJbnRlcmNlcHRvcigpOwpAQCAtMzQ1LDcgKzM0NSw3IEBAIENBTExCQUNLX0ZVTkNf
REVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUlu
dGVyY2VwdG9yKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHRleHQgPSBUb1dlYkNvcmVTdHJpbmco
YXJnc1swXSk7CisgICAgU3RyaW5nIHRleHQgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAg
ICAgZmxvYXQgeCA9IHRvRmxvYXQoYXJnc1sxXSk7CiAgICAgZmxvYXQgeSA9IHRvRmxvYXQoYXJn
c1syXSk7CiAKQEAgLTM3MSw3ICszNzEsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVu
ZGVyaW5nQ29udGV4CiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwog
ICAgIH0KIAotICAgIFN0cmluZyB0ZXh0ID0gVG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOworICAg
IFN0cmluZyB0ZXh0ID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgIGZsb2F0IHggPSB0
b0Zsb2F0KGFyZ3NbMV0pOwogICAgIGZsb2F0IHkgPSB0b0Zsb2F0KGFyZ3NbMl0pOwogCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21YUGF0aE5T
UmVzb2x2ZXIuY3BwCShyZXZpc2lvbiA0NTQ4NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyAr
ODAsNyBAQCBTdHJpbmcgVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hCiAgICAgaWYg
KHRyeV9jYXRjaC5IYXNDYXVnaHQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAg
cmV0dXJuIHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKHJldHZhbCk7CisgICAgcmV0dXJuIHRv
V2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2socmV0dmFsKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2lu
ZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNDU0ODYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw5ICsyNzcs
OSBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93UG9zdE1lc3NhZ2UpCiAgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPiAyKSB7CiAgICAgICAgIGlmIChWOFByb3h5Ojppc1dyYXBwZXJPZlR5cGUo
YXJnc1sxXSwgVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCkpCiAgICAgICAgICAgICBwb3J0ID0g
VjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6
Ok1FU1NBR0VQT1JULCBhcmdzWzFdKTsKLSAgICAgICAgdGFyZ2V0T3JpZ2luID0gdmFsdWVUb1N0
cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzJdKTsKKyAgICAgICAgdGFyZ2V0T3Jp
Z2luID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMl0pOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9TdHJpbmdXaXRoTnVs
bE9yVW5kZWZpbmVkQ2hlY2soYXJnc1sxXSk7CisgICAgICAgIHRhcmdldE9yaWdpbiA9IHRvV2Vi
Q29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzFdKTsKICAgICB9CiAKICAg
ICBpZiAodHJ5Q2F0Y2guSGFzQ2F1Z2h0KCkpCkBAIC01NjIsOSArNTYyLDkgQEAgQ0FMTEJBQ0tf
RlVOQ19ERUNMKERPTVdpbmRvd1Nob3dNb2RhbERpYQogICAgIGlmICghY2FuU2hvd01vZGFsRGlh
bG9nTm93KGZyYW1lKSB8fCAhYWxsb3dQb3BVcCgpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwogCi0gICAgU3RyaW5nIHVybCA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbE9yVW5kZWZp
bmVkQ2hlY2soYXJnc1swXSk7CisgICAgU3RyaW5nIHVybCA9IHRvV2ViQ29yZVN0cmluZ1dpdGhO
dWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzBdKTsKICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBk
aWFsb2dBcmdzID0gYXJnc1sxXTsKLSAgICBTdHJpbmcgZmVhdHVyZUFyZ3MgPSB2YWx1ZVRvU3Ry
aW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMl0pOworICAgIFN0cmluZyBmZWF0dXJl
QXJncyA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzJdKTsK
IAogICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGZlYXR1cmVzID0gcGFyc2VNb2Rh
bERpYWxvZ0ZlYXR1cmVzKGZlYXR1cmVBcmdzKTsKIApAQCAtNjUxLDcgKzY1MSw3IEBAIENBTExC
QUNLX0ZVTkNfREVDTChET01XaW5kb3dPcGVuKQogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKIAotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvU3Ry
aW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMF0pOworICAgIFN0cmluZyB1cmxTdHJp
bmcgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1swXSk7CiAg
ICAgQXRvbWljU3RyaW5nIGZyYW1lTmFtZSA9IChhcmdzWzFdLT5Jc1VuZGVmaW5lZCgpIHx8IGFy
Z3NbMV0tPklzTnVsbCgpKSA/ICJfYmxhbmsiIDogQXRvbWljU3RyaW5nKHRvV2ViQ29yZVN0cmlu
ZyhhcmdzWzFdKSk7CiAKICAgICAvLyBCZWNhdXNlIEZyYW1lVHJlZTo6ZmluZCgpIHJldHVybnMg
dHJ1ZSBmb3IgZW1wdHkgc3RyaW5ncywgd2UgbXVzdCBjaGVjawpAQCAtNzAwLDcgKzcwMCw3IEBA
IENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dPcGVuKQogICAgIC8vIFBhcnNlIHRoZSB2YWx1
ZXMsIGFuZCB0aGVuIHdvcmsgd2l0aCBhIGNvcHkgb2YgdGhlIHBhcnNlZCB2YWx1ZXMKICAgICAv
LyBzbyB3ZSBjYW4gcmVzdG9yZSB0aGUgdmFsdWVzIHdlIG1heSBub3Qgd2FudCB0byBvdmVyd3Jp
dGUgYWZ0ZXIKICAgICAvLyB3ZSBkbyB0aGUgbXVsdGlwbGUgbW9uaXRvciBmaXhlcy4KLSAgICBX
aW5kb3dGZWF0dXJlcyByYXdGZWF0dXJlcyh2YWx1ZVRvU3RyaW5nV2l0aE51bGxPclVuZGVmaW5l
ZENoZWNrKGFyZ3NbMl0pKTsKKyAgICBXaW5kb3dGZWF0dXJlcyByYXdGZWF0dXJlcyh0b1dlYkNv
cmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1syXSkpOwogICAgIFdpbmRvd0Zl
YXR1cmVzIHdpbmRvd0ZlYXR1cmVzKHJhd0ZlYXR1cmVzKTsKICAgICBGbG9hdFJlY3Qgc2NyZWVu
UmVjdCA9IHNjcmVlbkF2YWlsYWJsZVJlY3QocGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSk7CiAK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENh
bnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NTQ4NikKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw3ICs0Myw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChIVE1MQ2FudmFzRWxlbWVudEdl
dEMKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MQ2FudmFzRWxlbWVudC5jb250ZXh0Iik7CiAgICAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CiAgICAgSFRNTENh
bnZhc0VsZW1lbnQqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxD
YW52YXNFbGVtZW50Pihob2xkZXIpOwotICAgIFN0cmluZyBjb250ZXh0SWQgPSBUb1dlYkNvcmVT
dHJpbmcoYXJnc1swXSk7CisgICAgU3RyaW5nIGNvbnRleHRJZCA9IHRvV2ViQ29yZVN0cmluZyhh
cmdzWzBdKTsKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIHJlc3VsdCA9IGltcC0+Z2V0
Q29udGV4dChjb250ZXh0SWQpOwogICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVj
dChWOENsYXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgcmVzdWx0KTsKIH0KSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElGcmFtZUVsZW1lbnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElGcmFt
ZUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NTQ4NikKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEFDQ0VTU09SX1NFVFRFUihIVE1M
SUZyYW1lRWxlbWVudFNyYykKIHsKICAgICBIVE1MSUZyYW1lRWxlbWVudCogaWZyYW1lID0gVjhQ
cm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTElGcmFtZUVsZW1lbnQ+KGluZm8uSG9s
ZGVyKCkpOwotICAgIFN0cmluZyB2ID0gdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2sodmFsdWUp
OworICAgIFN0cmluZyB2ID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2YWx1ZSk7CiAK
ICAgICBpZiAoIWFsbG93U2V0dGluZ0ZyYW1lU3JjVG9KYXZhc2NyaXB0VXJsKGlmcmFtZSwgdikp
CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9u
IDQ1NDg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uc0NvbGxl
Y3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIENBTExCQUNL
X0ZVTkNfREVDTChIVE1MT3B0aW9uc0NvbGxlY3Rpb24KICAgICBlbHNlIHsKICAgICAgICAgYm9v
bCBvazsKICAgICAgICAgdjg6OlRyeUNhdGNoIHRyeV9jYXRjaDsKLSAgICAgICAgaW50IGluZGV4
ID0gVG9JbnQzMihhcmdzWzFdLCBvayk7CisgICAgICAgIGludCBpbmRleCA9IHRvSW50MzIoYXJn
c1sxXSwgb2spOwogCiAgICAgICAgIGlmICh0cnlfY2F0Y2guSGFzQ2F1Z2h0KCkpCiAgICAgICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAJKHJldmlz
aW9uIDQ1NDg2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxl
bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHJlbW92ZUVsZW1lbnQoSFRNTAogICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwogICAgIH0KIAotICAgIGltcC0+cmVtb3ZlKFRvSW50MzIoYXJnc1swXSkpOworICAg
IGltcC0+cmVtb3ZlKHRvSW50MzIoYXJnc1swXSkpOwogICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rp
b25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiA0NTQ4NikKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NCw3ICs1NCw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChTUUxUcmFuc2FjdGlvbkV4ZWN1
dGUKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTdHJpbmcg
c3RhdGVtZW50ID0gVG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOworICAgIFN0cmluZyBzdGF0ZW1l
bnQgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAKICAgICBWZWN0b3I8U1FMVmFsdWU+IHNx
bFZhbHVlczsKIApAQCAtNzUsNyArNzUsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woU1FMVHJhbnNh
Y3Rpb25FeGVjdXRlCiAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS0+SXNOdW1iZXIoKSkKICAg
ICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKFNRTFZhbHVlKHZhbHVlLT5OdW1iZXJWYWx1
ZSgpKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3FsVmFsdWVzLmFwcGVu
ZChTUUxWYWx1ZShUb1dlYkNvcmVTdHJpbmcodmFsdWUpKSk7CisgICAgICAgICAgICAgICAgc3Fs
VmFsdWVzLmFwcGVuZChTUUxWYWx1ZSh0b1dlYkNvcmVTdHJpbmcodmFsdWUpKSk7CiAgICAgICAg
IH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29u
dGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNDU0ODYpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDUsNyArMTA1LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFNldFRpbWVvdXRPcklu
dGVydgogICAgIGludCB0aW1lcklkOwogCiAgICAgaWYgKGZ1bmN0aW9uLT5Jc1N0cmluZygpKSB7
Ci0gICAgICAgIFdlYkNvcmU6OlN0cmluZyBzdHJpbmdGdW5jdGlvbiA9IFRvV2ViQ29yZVN0cmlu
ZyhmdW5jdGlvbik7CisgICAgICAgIFdlYkNvcmU6OlN0cmluZyBzdHJpbmdGdW5jdGlvbiA9IHRv
V2ViQ29yZVN0cmluZyhmdW5jdGlvbik7CiAgICAgICAgIHRpbWVySWQgPSBET01UaW1lcjo6aW5z
dGFsbCh3b3JrZXJDb250ZXh0LCBuZXcgU2NoZWR1bGVkQWN0aW9uKHN0cmluZ0Z1bmN0aW9uLCB3
b3JrZXJDb250ZXh0LT51cmwoKSksIHRpbWVvdXQsIHNpbmdsZVNob3QpOwogICAgIH0gZWxzZSBp
ZiAoZnVuY3Rpb24tPklzRnVuY3Rpb24oKSkgewogICAgICAgICBzaXplX3QgcGFyYW1Db3VudCA9
IGFyZ3VtZW50Q291bnQgPj0gMiA/IGFyZ3VtZW50Q291bnQgLSAyIDogMDsKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20u
Y3BwCShyZXZpc2lvbiA0NTQ4NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1M
SHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsMTAgKzM0NSwxMCBA
QCBDQUxMQkFDS19GVU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RPcGVuKQogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIFN0cmluZyB1c2VyLCBwYXNzd2Q7CiAgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPj0gNCAmJiAhYXJnc1szXS0+SXNVbmRlZmluZWQoKSkgewotICAgICAgICB1c2VyID0gdmFs
dWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1szXSk7CisgICAgICAgIHVzZXIgPSB0b1dlYkNv
cmVTdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbM10pOwogCiAgICAgICAgIGlmIChhcmdzLkxlbmd0
aCgpID49IDUgJiYgIWFyZ3NbNF0tPklzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgICAgIHBhc3N3
ZCA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbNF0pOworICAgICAgICAgICAgcGFz
c3dkID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzRdKTsKICAgICAgICAgICAg
IHhtbEh0dHBSZXF1ZXN0LT5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYywgdXNlciwgcGFzc3dkLCBl
Yyk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPm9wZW4obWV0
aG9kLCB1cmwsIGFzeW5jLCB1c2VyLCBlYyk7CkBAIC0zODQsNyArMzg0LDcgQEAgQ0FMTEJBQ0tf
RlVOQ19ERUNMKFhNTEh0dHBSZXF1ZXN0U2VuZCkKICAgICAgICAgICAgIEFTU0VSVChkb2N1bWVu
dCk7CiAgICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2VuZChkb2N1bWVudCwgZWMpOwogICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5zZW5kKHZhbHVlVG9TdHJp
bmdXaXRoTnVsbENoZWNrKGFyZyksIGVjKTsKKyAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5z
ZW5kKHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJnKSwgZWMpOwogICAgIH0KIAogICAg
IGlmIChlYykK
</data>
<flag name="review"
          id="16701"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>