<?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>103589</bug_id>
          
          <creation_ts>2012-11-28 19:43:08 -0800</creation_ts>
          <short_desc>Add an objective-c object graph wrapper and coder for WKConnection message bodies</short_desc>
          <delta_ts>2012-11-28 21:34:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>778615</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-11-28 19:43:08 -0800</bug_when>
    <thetext>Add an objective-c object graph wrapper and coder for WKConnection message bodies</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778620</commentid>
    <comment_count>1</comment_count>
      <attachid>176629</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-11-28 19:56:32 -0800</bug_when>
    <thetext>Created attachment 176629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778625</commentid>
    <comment_count>2</comment_count>
      <attachid>176629</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-11-28 20:11:31 -0800</bug_when>
    <thetext>Comment on attachment 176629
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=176629&amp;action=review

&gt; Source/WebKit2/ChangeLog:3
&gt; +        Add an objective-c object graph wrapper and coder for WKConnection message bodies

Objective-C

&gt; Source/WebKit2/ChangeLog:26
&gt; +        Added. Is an APIObject that wraps an Objective-C object graph.

That&apos;s some weird grammar.

&gt; Source/WebKit2/Shared/mac/ObjCObjectGraph.h:43
&gt; +    id root() const { return m_root.get(); }

rootObject?

&gt; Source/WebKit2/Shared/mac/ObjCObjectGraph.h:53
&gt; +    RetainPtr&lt;id&gt; m_root;

m_rootObject?

&gt; Source/WebKit2/Shared/mac/ObjCObjectGraphCoders.mm:95
&gt; +        if (type == UnknownType) {
&gt; +            encoder &lt;&lt; static_cast&lt;uint32_t&gt;(UnknownType);
&gt; +            return true;
&gt; +        }

Wouldn&apos;t it be better to throw an exception here? We never want to allow unknown types.

&gt; Source/WebKit2/Shared/mac/ObjCObjectGraphCoders.mm:126
&gt; +            NSUInteger size = [dictionary count];
&gt; +            NSArray *keys = [dictionary allKeys];
&gt; +            NSArray *values = [dictionary allValues];
&gt; +
&gt; +            encoder &lt;&lt; static_cast&lt;uint64_t&gt;(size);
&gt; +
&gt; +            for (NSUInteger i = 0; i &lt; size; ++i) {
&gt; +                encoder &lt;&lt; Owner([keys objectAtIndex:i]);
&gt; +                encoder &lt;&lt; Owner([values objectAtIndex:i]);
&gt; +            }

I think you should use the block enumeration method here if possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778666</commentid>
    <comment_count>3</comment_count>
      <attachid>176642</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-11-28 21:24:11 -0800</bug_when>
    <thetext>Created attachment 176642
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778671</commentid>
    <comment_count>4</comment_count>
      <attachid>176642</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-11-28 21:33:03 -0800</bug_when>
    <thetext>Comment on attachment 176642
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=176642&amp;action=review

&gt; Source/WebKit2/Shared/mac/ObjCObjectGraphCoders.mm:94
&gt; +            return true;

No need for the return true here :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778672</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-11-28 21:34:23 -0800</bug_when>
    <thetext>Committed r136095: &lt;http://trac.webkit.org/changeset/136095&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176629</attachid>
            <date>2012-11-28 19:56:32 -0800</date>
            <delta_ts>2012-11-28 21:24:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103589-20121128195406.patch</filename>
            <type>text/plain</type>
            <size>44168</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjA4NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBACisyMDEyLTExLTI4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIGFuIG9iamVjdGl2ZS1jIG9iamVj
dCBncmFwaCB3cmFwcGVyIGFuZCBjb2RlciBmb3IgV0tDb25uZWN0aW9uIG1lc3NhZ2UgYm9kaWVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM1ODkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIGEg
bmV3IHR5cGUgb2YgVXNlck1lc3NhZ2VDb2RlciBmb3Igb2JqZWN0aXZlLWMgb2JqZWN0IGdyYXBo
cyB0aGF0IGFsbG93cyBlbmNvZGluZy9kZWNvZGluZworICAgICAgICBXS0Jyb3dzaW5nQ29udGV4
dENvbnRyb2xsZXIgYWNyb3NzIHRoZSB3aXJlLgorCisgICAgICAgICogU2hhcmVkL0FQSUNsaWVu
dC5oOgorICAgICAgICAoQVBJQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6QVBJQ2xpZW50Ojpj
bGllbnQpOgorICAgICAgICBBZGQgYWNjZXNzb3IgZm9yIHRoZSBDbGllbnRJbnRlcmZhY2UuCisK
KyAgICAgICAgKiBTaGFyZWQvQVBJT2JqZWN0Lmg6CisgICAgICAgIEFkZCBuZXcgVHlwZU9iakNP
YmplY3RHcmFwaCB0eXBlLgorCisgICAgICAgICogU2hhcmVkL21hYy9PYmpDT2JqZWN0R3JhcGgu
aDogQWRkZWQuCisgICAgICAgIChPYmpDT2JqZWN0R3JhcGgpOgorICAgICAgICAoV2ViS2l0OjpP
YmpDT2JqZWN0R3JhcGg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok9iakNPYmplY3RHcmFw
aDo6cm9vdCk6CisgICAgICAgIChXZWJLaXQ6Ok9iakNPYmplY3RHcmFwaDo6T2JqQ09iamVjdEdy
YXBoKToKKyAgICAgICAgKFdlYktpdDo6T2JqQ09iamVjdEdyYXBoOjp0eXBlKToKKyAgICAgICAg
KiBTaGFyZWQvbWFjL09iakNPYmplY3RHcmFwaC5tbTogQWRkZWQuCisgICAgICAgIEFkZGVkLiBJ
cyBhbiBBUElPYmplY3QgdGhhdCB3cmFwcyBhbiBPYmplY3RpdmUtQyBvYmplY3QgZ3JhcGguCisK
KyAgICAgICAgKiBTaGFyZWQvbWFjL09iakNPYmplY3RHcmFwaENvZGVycy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhFbmNvZGVyKToKKyAgICAgICAgKFdlYkNv
bnRleHRPYmpDT2JqZWN0R3JhcGhEZWNvZGVyKToKKyAgICAgICAgKEluamVjdGVkQnVuZGxlT2Jq
Q09iamVjdEdyYXBoRW5jb2Rlcik6CisgICAgICAgIChJbmplY3RlZEJ1bmRsZU9iakNPYmplY3RH
cmFwaERlY29kZXIpOgorICAgICAgICAqIFNoYXJlZC9tYWMvT2JqQ09iamVjdEdyYXBoQ29kZXJz
Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6dHlwZUZyb21PYmplY3QpOgorICAgICAgICAo
T2JqQ09iamVjdEdyYXBoRW5jb2Rlcik6CisgICAgICAgIChXZWJLaXQ6Ok9iakNPYmplY3RHcmFw
aEVuY29kZXI6OmJhc2VFbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpPYmpDT2JqZWN0R3JhcGhF
bmNvZGVyOjpPYmpDT2JqZWN0R3JhcGhFbmNvZGVyKToKKyAgICAgICAgKE9iakNPYmplY3RHcmFw
aERlY29kZXIpOgorICAgICAgICAoV2ViS2l0OjpPYmpDT2JqZWN0R3JhcGhEZWNvZGVyOjpiYXNl
RGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6T2JqQ09iamVjdEdyYXBoRGVjb2Rlcjo6T2JqQ09i
amVjdEdyYXBoRGVjb2Rlcik6CisgICAgICAgIChXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRW5j
b2RlckltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRW5j
b2RlckltcGw6OldlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhFbmNvZGVySW1wbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhFbmNvZGVySW1wbDo6ZW5jb2RlKToK
KyAgICAgICAgKFdlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhEZWNvZGVySW1wbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhEZWNvZGVySW1wbDo6V2ViQ29udGV4
dE9iakNPYmplY3RHcmFwaERlY29kZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4
dE9iakNPYmplY3RHcmFwaERlY29kZXJJbXBsOjpkZWNvZGUpOgorICAgICAgICAoSW5qZWN0ZWRC
dW5kbGVPYmpDT2JqZWN0R3JhcGhFbmNvZGVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OkluamVj
dGVkQnVuZGxlT2JqQ09iamVjdEdyYXBoRW5jb2RlckltcGw6OkluamVjdGVkQnVuZGxlT2JqQ09i
amVjdEdyYXBoRW5jb2RlckltcGwpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU9i
akNPYmplY3RHcmFwaEVuY29kZXJJbXBsOjplbmNvZGUpOgorICAgICAgICAoSW5qZWN0ZWRCdW5k
bGVPYmpDT2JqZWN0R3JhcGhEZWNvZGVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlT2JqQ09iamVjdEdyYXBoRGVjb2RlckltcGw6OkluamVjdGVkQnVuZGxlT2JqQ09iamVj
dEdyYXBoRGVjb2RlckltcGwpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU9iakNP
YmplY3RHcmFwaERlY29kZXJJbXBsOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250
ZXh0T2JqQ09iamVjdEdyYXBoRW5jb2Rlcjo6V2ViQ29udGV4dE9iakNPYmplY3RHcmFwaEVuY29k
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRW5jb2Rlcjo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE9iakNPYmplY3RHcmFwaERlY29k
ZXI6OldlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhEZWNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29udGV4dE9iakNPYmplY3RHcmFwaERlY29kZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJL
aXQ6OkluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdyYXBoRW5jb2Rlcjo6SW5qZWN0ZWRCdW5kbGVP
YmpDT2JqZWN0R3JhcGhFbmNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVP
YmpDT2JqZWN0R3JhcGhFbmNvZGVyOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3Rl
ZEJ1bmRsZU9iakNPYmplY3RHcmFwaERlY29kZXI6OkluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdy
YXBoRGVjb2Rlcik6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdy
YXBoRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgQWRkZWQuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIubW06CisgICAgICAgICgrW1dL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciBfYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckZvclBh
Z2VSZWY6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRleHRD
b250cm9sbGVySW50ZXJuYWwuaDoKKyAgICAgICAgRXhwb3NlIHRoZSBhY2Nlc3NvciB0byBnZXQg
dGhlIFdLUGFnZVJlZiBmcm9tIGEgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyIGFuZCBhZGQg
YSAKKyAgICAgICAgbmV3IG1ldGhvZCB0byBnZXQgYSBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xs
ZXIgZnJvbSBhIFdLUGFnZVJlZi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLQ29u
bmVjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb25uZWN0aW9uIHNlbmRNZXNzYWdlV2l0aE5hbWU6
Ym9keTpdKToKKyAgICAgICAgKGRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgU3dpdGNoIFdL
Q29ubmVjdGlvbiB0byB1c2UgT2JqQ09iamVjdEdyYXBoIHRvIGVuY29kZSB0aGUgbWVzc2FnZUJv
ZHkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dFVzZXJNZXNzYWdlQ29kZXJzLmg6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRVc2VyTWVzc2FnZUVuY29kZXI6OmVuY29kZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXI6OmRlY29kZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVVzZXJN
ZXNzYWdlQ29kZXJzLmg6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3Nh
Z2VFbmNvZGVyOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJN
ZXNzYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgUHJveHkgdG8gT2JqQ09iamVjdEdyYXBo
IGNvZGVycyB3aGVuIHVzZXIgbWVzc2FnZSBlbmNvZGluZy9kZWNvZGluZyBPYmpDT2JqZWN0R3Jh
cGggQVBJT2JqZWN0cy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L21hYy9XS1dlYlByb2Nlc3NQbHVnSW4ubW06CisgICAgICAgICgtW1dLV2ViUHJvY2Vzc1BsdWdJ
bkNvbnRyb2xsZXIgX2Jyb3dzZXJDb250ZXh0Q29udHJvbGxlckZvckJ1bmRsZVBhZ2VSZWY6XSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vz
c1BsdWdJbkludGVybmFsLmg6CisgICAgICAgIEFkZCBtZXRob2QgdG8gZ2V0IFdLV2ViUHJvY2Vz
c1BsdWdJbkNvbnRyb2xsZXIgZnJvbSB0aGUgV0tCdW5kbGVQYWdlUmVmLgorCisgICAgICAgICog
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgbmV3IGZpbGVz
LgorCiAyMDEyLTExLTI4ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtXSzJdW1F0XSBBZGQgZHJhZyZkcm9wIHN1cHBvcnQgdG8gRmxpY2thYmxl
IHdlYlZpZXcKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJQ2xpZW50LmgJKHJldmlzaW9uIDEzNjA4
NykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElDbGllbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTEsNyArNTEsOSBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChjbGllbnQgJiYgY2xpZW50LT52
ZXJzaW9uIDwgY3VycmVudFZlcnNpb24pCiAgICAgICAgICAgICBtZW1jcHkoJm1fY2xpZW50LCBj
bGllbnQsIEFQSUNsaWVudFRyYWl0czxDbGllbnRJbnRlcmZhY2U+OjppbnRlcmZhY2VTaXplc0J5
VmVyc2lvbltjbGllbnQtPnZlcnNpb25dKTsKICAgICB9Ci0gICAgCisKKyAgICBjb25zdCBDbGll
bnRJbnRlcmZhY2UmIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CisKIHByb3Rl
Y3RlZDoKICAgICBDbGllbnRJbnRlcmZhY2UgbV9jbGllbnQ7CiB9OwpJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL0FQSU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9BUElPYmplY3QuaAkocmV2aXNpb24gMTM2MDg3KQorKysgU291cmNlL1dlYktpdDIvU2hh
cmVkL0FQSU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNiArMTMwLDcgQEAgcHVibGlj
OgogCiAgICAgICAgIC8vIFBsYXRmb3JtIHNwZWNpZmljCiAgICAgICAgIFR5cGVFZGl0Q29tbWFu
ZFByb3h5LAorICAgICAgICBUeXBlT2JqQ09iamVjdEdyYXBoLAogICAgICAgICBUeXBlVmlldywK
ICNpZiBVU0UoU09VUCkKICAgICAgICAgVHlwZVNvdXBSZXF1ZXN0TWFuYWdlciwKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvT2JqQ09iamVjdEdyYXBoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9PYmpDT2JqZWN0R3JhcGguaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvT2JqQ09iamVjdEdyYXBoLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE9iakNPYmplY3RHcmFw
aF9oCisjZGVmaW5lIE9iakNPYmplY3RHcmFwaF9oCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIK
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBPYmpDT2JqZWN0R3JhcGggOiBwdWJsaWMgQVBJT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgY29uc3QgVHlwZSBBUElUeXBlID0gVHlwZU9iakNPYmplY3RHcmFwaDsKKworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE9iakNPYmplY3RHcmFwaD4gY3JlYXRlKGlkIHJvb3QpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9iakNPYmplY3RHcmFwaChyb290KSk7CisgICAgfQor
CisgICAgaWQgcm9vdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdC5nZXQoKTsgfQorCitwcml2YXRl
OgorICAgIGV4cGxpY2l0IE9iakNPYmplY3RHcmFwaChpZCByb290KQorICAgICAgICA6IG1fcm9v
dChyb290KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIEFQSVR5cGU7IH0KKworICAgIFJldGFpblB0cjxpZD4gbV9yb290OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBPYmpDT2JqZWN0R3JhcGhfaApJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9PYmpDT2JqZWN0R3JhcGgubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9PYmpDT2JqZWN0R3JhcGgubW0JKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL09iakNPYmplY3RHcmFwaC5tbQkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJPYmpDT2JqZWN0R3JhcGguaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9tYWMvT2JqQ09iamVjdEdyYXBoQ29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9PYmpDT2JqZWN0R3JhcGhDb2RlcnMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvT2JqQ09iamVjdEdyYXBoQ29kZXJzLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE9iakNPYmplY3RH
cmFwaENvZGVyc19oCisjZGVmaW5lIE9iakNPYmplY3RHcmFwaENvZGVyc19oCisKKyNpbmNsdWRl
ICJBcmd1bWVudERlY29kZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNs
dWRlICJPYmpDT2JqZWN0R3JhcGguaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQcm9jZXNzOworY2xhc3MgV2ViUHJvY2Vzc1Byb3h5
OworCitjbGFzcyBXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRW5jb2RlciB7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgV2ViQ29udGV4dE9iakNPYmplY3RHcmFwaEVuY29kZXIoT2JqQ09iamVjdEdy
YXBoKik7CisgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgT2JqQ09iamVjdEdyYXBoKiBtX29iamVjdEdyYXBoOworfTsKKwor
Y2xhc3MgV2ViQ29udGV4dE9iakNPYmplY3RHcmFwaERlY29kZXIgeworcHVibGljOgorICAgIGV4
cGxpY2l0IFdlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhEZWNvZGVyKFJlZlB0cjxPYmpDT2JqZWN0
R3JhcGg+JiwgV2ViUHJvY2Vzc1Byb3h5Kik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciosIFdlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhEZWNvZGVyJik7
CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPE9iakNPYmplY3RHcmFwaD4mIG1fb2JqZWN0R3JhcGg7
CisgICAgV2ViUHJvY2Vzc1Byb3h5KiBtX3Byb2Nlc3M7Cit9OworCisKK2NsYXNzIEluamVjdGVk
QnVuZGxlT2JqQ09iamVjdEdyYXBoRW5jb2RlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSW5q
ZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhFbmNvZGVyKE9iakNPYmplY3RHcmFwaCopOworICAg
IHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OworCitwcml2YXRl
OgorICAgIE9iakNPYmplY3RHcmFwaCogbV9vYmplY3RHcmFwaDsKK307CisKK2NsYXNzIEluamVj
dGVkQnVuZGxlT2JqQ09iamVjdEdyYXBoRGVjb2RlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
SW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhEZWNvZGVyKFJlZlB0cjxPYmpDT2JqZWN0R3Jh
cGg+JiwgV2ViUHJvY2VzcyopOworICAgIHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqLCBJbmplY3RlZEJ1bmRsZU9iakNPYmplY3RHcmFwaERlY29kZXImKTsKKwor
cHJpdmF0ZToKKyAgICBSZWZQdHI8T2JqQ09iamVjdEdyYXBoPiYgbV9vYmplY3RHcmFwaDsKKyAg
ICBXZWJQcm9jZXNzKiBtX3Byb2Nlc3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIE9iakNPYmplY3RHcmFwaENvZGVyc19oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL09iakNPYmplY3RHcmFwaENvZGVycy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbWFjL09iakNPYmplY3RHcmFwaENvZGVycy5tbQkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvT2JqQ09iamVjdEdyYXBoQ29kZXJzLm1tCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJPYmpDT2JqZWN0R3JhcGhDb2RlcnMuaCIKKworI2ltcG9ydCAiQXJn
dW1lbnRDb2RlcnNNYWMuaCIKKworLy8gRm9yIFVJUHJvY2VzcyBzaWRlIGVuY29kaW5nL2RlY29k
aW5nCisjaW1wb3J0ICJXS0FQSUNhc3QuaCIKKyNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0Q29u
dHJvbGxlckludGVybmFsLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIldl
YlByb2Nlc3NQcm94eS5oIgorCisvLyBGb3IgV2ViUHJvY2VzcyBzaWRlIGVuY29kaW5nL2RlY29k
aW5nCisjaW1wb3J0ICJXS0J1bmRsZUFQSUNhc3QuaCIKKyNpbXBvcnQgIldLV2ViUHJvY2Vzc1Bs
dWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlckludGVybmFsLmgiCisjaW1wb3J0ICJXS1dlYlBy
b2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXJQcml2YXRlLmgiCisjaW1wb3J0ICJX
S1dlYlByb2Nlc3NQbHVnSW5JbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViUGFnZS5oIgorI2ltcG9y
dCAiV2ViUHJvY2Vzcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBXZWJLaXROU1R5
cGUgeworICAgIE51bGxUeXBlLAorICAgIE5TRGljdGlvbmFyeVR5cGUsCisgICAgTlNBcnJheVR5
cGUsCisgICAgTlNTdHJpbmdUeXBlLAorICAgIE5TTnVtYmVyVHlwZSwKKyAgICBOU0RhdGVUeXBl
LAorICAgIE5TRGF0YVR5cGUsCisgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyVHlwZSwK
KyAgICBVbmtub3duVHlwZSwKK307CisKK3N0YXRpYyBXZWJLaXROU1R5cGUgdHlwZUZyb21PYmpl
Y3QoaWQgb2JqZWN0KQoreworICAgIEFTU0VSVChvYmplY3QpOworCisgICAgaWYgKFtvYmplY3Qg
aXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pCisgICAgICAgIHJldHVybiBOU0Rp
Y3Rpb25hcnlUeXBlOworICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNs
YXNzXV0pCisgICAgICAgIHJldHVybiBOU1N0cmluZ1R5cGU7CisgICAgaWYgKFtvYmplY3QgaXNL
aW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKQorICAgICAgICByZXR1cm4gTlNBcnJheVR5cGU7
CisgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkKKyAgICAg
ICAgcmV0dXJuIE5TTnVtYmVyVHlwZTsKKyAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltO
U0RhdGUgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIE5TRGF0ZVR5cGU7CisgICAgaWYgKFtvYmpl
Y3QgaXNLaW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV0pCisgICAgICAgIHJldHVybiBOU0RhdGFU
eXBlOworICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W1dLQnJvd3NpbmdDb250ZXh0Q29u
dHJvbGxlciBjbGFzc11dKQorICAgICAgICByZXR1cm4gV0tCcm93c2luZ0NvbnRleHRDb250cm9s
bGVyVHlwZTsKKworICAgIHJldHVybiBVbmtub3duVHlwZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgT3duZXI+CitjbGFzcyBPYmpDT2JqZWN0R3JhcGhFbmNvZGVyIHsKK3B1YmxpYzoKKyAgICBi
b29sIGJhc2VFbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBXZWJLaXRO
U1R5cGUmIHR5cGUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fcm9vdCkgeworICAgICAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oTnVsbFR5cGUpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICB0eXBlID0gdHlwZUZyb21P
YmplY3QobV9yb290KTsKKyAgICAgICAgaWYgKHR5cGUgPT0gVW5rbm93blR5cGUpIHsKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFVua25vd25UeXBlKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSk7CisKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgIGNhc2UgTlNTdHJpbmdUeXBlOiB7CisgICAgICAgICAgICBDb3JlSVBDOjplbmNvZGUo
ZW5jb2Rlciwgc3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4obV9yb290KSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE5TQXJyYXlUeXBlOiB7CisgICAg
ICAgICAgICBOU0FycmF5ICphcnJheSA9IHN0YXRpY19jYXN0PE5TQXJyYXkgKj4obV9yb290KTsK
KworICAgICAgICAgICAgTlNVSW50ZWdlciBzaXplID0gW2FycmF5IGNvdW50XTsKKyAgICAgICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNpemUpOworCisgICAgICAgICAg
ICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICAgICAg
ZW5jb2RlciA8PCBPd25lcihbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE5TRGljdGlvbmFyeVR5cGU6IHsK
KyAgICAgICAgICAgIE5TRGljdGlvbmFyeSogZGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PE5TRGlj
dGlvbmFyeSAqPihtX3Jvb3QpOworCisgICAgICAgICAgICBOU1VJbnRlZ2VyIHNpemUgPSBbZGlj
dGlvbmFyeSBjb3VudF07CisgICAgICAgICAgICBOU0FycmF5ICprZXlzID0gW2RpY3Rpb25hcnkg
YWxsS2V5c107CisgICAgICAgICAgICBOU0FycmF5ICp2YWx1ZXMgPSBbZGljdGlvbmFyeSBhbGxW
YWx1ZXNdOworCisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihz
aXplKTsKKworICAgICAgICAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CisgICAgICAgICAgICAgICAgZW5jb2RlciA8PCBPd25lcihba2V5cyBvYmplY3RBdEluZGV4
OmldKTsKKyAgICAgICAgICAgICAgICBlbmNvZGVyIDw8IE93bmVyKFt2YWx1ZXMgb2JqZWN0QXRJ
bmRleDppXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgTlNOdW1iZXJUeXBlOiB7CisgICAgICAgICAgICBDb3JlSVBD
OjplbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8TlNOdW1iZXIgKj4obV9yb290KSk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE5TRGF0ZVR5cGU6
IHsKKyAgICAgICAgICAgIENvcmVJUEM6OmVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxOU0Rh
dGUgKj4obV9yb290KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIE5TRGF0YVR5cGU6IHsKKyAgICAgICAgICAgIENvcmVJUEM6OmVuY29kZShlbmNv
ZGVyLCBzdGF0aWNfY2FzdDxOU0RhdGEgKj4obV9yb290KSk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgT2JqQ09iamVjdEdyYXBoRW5jb2RlcihpZCByb290KQorICAgICAgICA6IG1fcm9vdChyb290
KQorICAgIHsKKyAgICB9CisKKyAgICBpZCBtX3Jvb3Q7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPd25lcj4KK2NsYXNzIE9iakNPYmplY3RHcmFwaERlY29kZXIgeworcHVibGljOgorICAgIHN0
YXRpYyBib29sIGJhc2VEZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBP
d25lciYgY29kZXIsIFdlYktpdE5TVHlwZSYgdHlwZSkKKyAgICB7CisgICAgICAgIHVpbnQzMl90
IHR5cGVBc1VJbnQzMjsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodHlwZUFzVUludDMy
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB0eXBlID0gc3RhdGljX2Nh
c3Q8V2ViS2l0TlNUeXBlPih0eXBlQXNVSW50MzIpOworCisgICAgICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBjYXNlIE5TU3RyaW5nVHlwZTogeworICAgICAgICAgICAgUmV0YWluUHRyPE5T
U3RyaW5nPiBzdHJpbmc7CisgICAgICAgICAgICBpZiAoIUNvcmVJUEM6OmRlY29kZShkZWNvZGVy
LCBzdHJpbmcpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNv
ZGVyLm1fcm9vdCA9IHN0cmluZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgTlNBcnJheVR5cGU6IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHNpemU7CisgICAg
ICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQ2NChzaXplKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4g
YXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6
c2l6ZV0pOworICAgICAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICAgICAgICAgIFJldGFpblB0cjxpZD4gdmFsdWU7CisgICAgICAgICAgICAgICAg
T3duZXIgbWVzc2FnZUNvZGVyKGNvZGVyLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUobWVzc2FnZUNvZGVyKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDp2YWx1ZS5n
ZXQoKV07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvZGVyLm1fcm9vdCA9IGFycmF5
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBOU0RpY3Rpb25h
cnlUeXBlOiB7CisgICAgICAgICAgICB1aW50NjRfdCBzaXplOworICAgICAgICAgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGVVSW50NjQoc2l6ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gZGljdGlvbmFy
eSA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5
OnNpemVdKTsKKyAgICAgICAgICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAvLyBUcnkgdG8gZGVjb2RlIHRoZSBrZXkgbmFtZS4KKyAgICAg
ICAgICAgICAgICBSZXRhaW5QdHI8aWQ+IGtleTsKKyAgICAgICAgICAgICAgICBPd25lciBrZXlN
ZXNzYWdlQ29kZXIoY29kZXIsIGtleSk7CisgICAgICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUoa2V5TWVzc2FnZUNvZGVyKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgICAgICAgICAgUmV0YWluUHRyPGlkPiB2YWx1ZTsKKyAgICAgICAgICAgICAg
ICBPd25lciB2YWx1ZU1lc3NhZ2VDb2Rlcihjb2RlciwgdmFsdWUpOworICAgICAgICAgICAgICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlKHZhbHVlTWVzc2FnZUNvZGVyKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkuZ2V0KCkg
c2V0T2JqZWN0OnZhbHVlLmdldCgpIGZvcktleTprZXkuZ2V0KCldOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBjb2Rlci5tX3Jvb3QgPSBkaWN0aW9uYXJ5OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBOU051bWJlclR5cGU6IHsKKyAgICAgICAgICAg
IFJldGFpblB0cjxOU051bWJlcj4gbnVtYmVyOworICAgICAgICAgICAgaWYgKCFDb3JlSVBDOjpk
ZWNvZGUoZGVjb2RlciwgbnVtYmVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBjb2Rlci5tX3Jvb3QgPSBudW1iZXI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIE5TRGF0ZVR5cGU6IHsKKyAgICAgICAgICAgIFJldGFpblB0
cjxOU0RhdGU+IGRhdGU7CisgICAgICAgICAgICBpZiAoIUNvcmVJUEM6OmRlY29kZShkZWNvZGVy
LCBkYXRlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjb2Rl
ci5tX3Jvb3QgPSBkYXRlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBOU0RhdGFUeXBlOiB7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhOwor
ICAgICAgICAgICAgaWYgKCFDb3JlSVBDOjpkZWNvZGUoZGVjb2RlciwgZGF0YSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29kZXIubV9yb290ID0gZGF0YTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
cHJvdGVjdGVkOgorICAgIE9iakNPYmplY3RHcmFwaERlY29kZXIoUmV0YWluUHRyPGlkPiYgcm9v
dCkKKyAgICAgICAgOiBtX3Jvb3Qocm9vdCkKKyAgICB7CisgICAgfQorCisgICAgUmV0YWluUHRy
PGlkPiYgbV9yb290OworfTsKKworCisvLyBXZWJDb250ZXh0IEFkZGl0aW9ucworCitjbGFzcyBX
ZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRW5jb2RlckltcGwgOiBwdWJsaWMgT2JqQ09iamVjdEdy
YXBoRW5jb2RlcjxXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRW5jb2RlckltcGw+IHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIE9iakNPYmplY3RHcmFwaEVuY29kZXI8V2ViQ29udGV4dE9iakNPYmpl
Y3RHcmFwaEVuY29kZXJJbXBsPiBCYXNlOworCisgICAgZXhwbGljaXQgV2ViQ29udGV4dE9iakNP
YmplY3RHcmFwaEVuY29kZXJJbXBsKGlkIHJvb3QpCisgICAgICAgIDogQmFzZShyb290KQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBXZWJLaXROU1R5cGUgdHlwZSA9IE51bGxUeXBl
OworICAgICAgICBpZiAoYmFzZUVuY29kZShlbmNvZGVyLCB0eXBlKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBXS0Jyb3dzaW5n
Q29udGV4dENvbnRyb2xsZXJUeXBlOiB7CisgICAgICAgICAgICBXS0Jyb3dzaW5nQ29udGV4dENv
bnRyb2xsZXIgKmJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxXS0Jyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXIgKj4obV9yb290KTsKKworICAgICAgICAgICAgZW5jb2RlciA8
PCB0b0ltcGwoYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5fcGFnZVJlZiktPnBhZ2VJRCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9Cit9OworCisKK2NsYXNzIFdlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhEZWNvZGVySW1w
bCA6IHB1YmxpYyBPYmpDT2JqZWN0R3JhcGhEZWNvZGVyPFdlYkNvbnRleHRPYmpDT2JqZWN0R3Jh
cGhEZWNvZGVySW1wbD4geworcHVibGljOgorICAgIHR5cGVkZWYgT2JqQ09iamVjdEdyYXBoRGVj
b2RlcjxXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRGVjb2RlckltcGw+IEJhc2U7CisKKyAgICBX
ZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRGVjb2RlckltcGwoUmV0YWluUHRyPGlkPiYgcm9vdCwg
V2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQorICAgICAgICA6IEJhc2Uocm9vdCkKKyAgICAgICAg
LCBtX3Byb2Nlc3MocHJvY2VzcykKKyAgICB7CisgICAgfQorCisgICAgV2ViQ29udGV4dE9iakNP
YmplY3RHcmFwaERlY29kZXJJbXBsKFdlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhEZWNvZGVySW1w
bCYgdXNlck1lc3NhZ2VEZWNvZGVyLCBSZXRhaW5QdHI8aWQ+JiByb290KQorICAgICAgICA6IEJh
c2Uocm9vdCkKKyAgICAgICAgLCBtX3Byb2Nlc3ModXNlck1lc3NhZ2VEZWNvZGVyLm1fcHJvY2Vz
cykKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciogZGVjb2RlciwgV2ViQ29udGV4dE9iakNPYmplY3RHcmFwaERlY29kZXJJbXBs
JiBjb2RlcikKKyAgICB7CisgICAgICAgIFdlYktpdE5TVHlwZSB0eXBlID0gTnVsbFR5cGU7Cisg
ICAgICAgIGlmICghQmFzZTo6YmFzZURlY29kZShkZWNvZGVyLCBjb2RlciwgdHlwZSkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGNvZGVyLm1fcm9vdCkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh0eXBlID09IE51bGxUeXBlIHx8IHR5
cGUgPT0gVW5rbm93blR5cGUpIHsKKyAgICAgICAgICAgIGNvZGVyLm1fcm9vdCA9IFtOU051bGwg
bnVsbF07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHN3
aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlclR5
cGU6IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHBhZ2VJRDsKKyAgICAgICAgICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKHBhZ2VJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgICAgICBXZWJQYWdlUHJveHkqIHdlYlBhZ2UgPSBjb2Rlci5tX3Byb2Nlc3MtPndlYlBh
Z2UocGFnZUlEKTsKKyAgICAgICAgICAgIGlmICghd2ViUGFnZSkKKyAgICAgICAgICAgICAgICBj
b2Rlci5tX3Jvb3QgPSBbTlNOdWxsIG51bGxdOworICAgICAgICAgICAgZWxzZSAKKyAgICAgICAg
ICAgICAgICBjb2Rlci5tX3Jvb3QgPSBbV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyIF9icm93
c2luZ0NvbnRleHRDb250cm9sbGVyRm9yUGFnZVJlZjp0b0FQSSh3ZWJQYWdlKV07CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitw
cml2YXRlOgorICAgIFdlYlByb2Nlc3NQcm94eSogbV9wcm9jZXNzOworfTsKKworCisvLyBJbmpl
Y3RlZEJ1bmRsZSBBZGRpdGlvbnMKKworY2xhc3MgSW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3Jh
cGhFbmNvZGVySW1wbCA6IHB1YmxpYyBPYmpDT2JqZWN0R3JhcGhFbmNvZGVyPEluamVjdGVkQnVu
ZGxlT2JqQ09iamVjdEdyYXBoRW5jb2RlckltcGw+IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIE9i
akNPYmplY3RHcmFwaEVuY29kZXI8SW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhFbmNvZGVy
SW1wbD4gQmFzZTsKKworICAgIGV4cGxpY2l0IEluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdyYXBo
RW5jb2RlckltcGwoaWQgcm9vdCkKKyAgICAgICAgOiBCYXNlKHJvb3QpCisgICAgeworICAgIH0K
KworICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29u
c3QKKyAgICB7CisgICAgICAgIFdlYktpdE5TVHlwZSB0eXBlID0gTnVsbFR5cGU7CisgICAgICAg
IGlmIChiYXNlRW5jb2RlKGVuY29kZXIsIHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFdLQnJvd3NpbmdDb250ZXh0Q29u
dHJvbGxlclR5cGU6IHsKKyAgICAgICAgICAgIFdLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250
ZXh0Q29udHJvbGxlciAqYnJvd3NlckNvbnRleHRDb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8V0tX
ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyICo+KG1fcm9vdCk7CisKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgdG9JbXBsKGJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5fYnVu
ZGxlUGFnZVJlZiktPnBhZ2VJRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9OworCitjbGFzcyBJbmplY3RlZEJ1bmRs
ZU9iakNPYmplY3RHcmFwaERlY29kZXJJbXBsIDogcHVibGljIE9iakNPYmplY3RHcmFwaERlY29k
ZXI8SW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhEZWNvZGVySW1wbD4geworcHVibGljOgor
ICAgIHR5cGVkZWYgT2JqQ09iamVjdEdyYXBoRGVjb2RlcjxJbmplY3RlZEJ1bmRsZU9iakNPYmpl
Y3RHcmFwaERlY29kZXJJbXBsPiBCYXNlOworCisgICAgSW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0
R3JhcGhEZWNvZGVySW1wbChSZXRhaW5QdHI8aWQ+JiByb290LCBXZWJQcm9jZXNzKiBwcm9jZXNz
KQorICAgICAgICA6IEJhc2Uocm9vdCkKKyAgICAgICAgLCBtX3Byb2Nlc3MocHJvY2VzcykKKyAg
ICB7CisgICAgfQorCisgICAgSW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhEZWNvZGVySW1w
bChJbmplY3RlZEJ1bmRsZU9iakNPYmplY3RHcmFwaERlY29kZXJJbXBsJiB1c2VyTWVzc2FnZURl
Y29kZXIsIFJldGFpblB0cjxpZD4mIHJvb3QpCisgICAgICAgIDogQmFzZShyb290KQorICAgICAg
ICAsIG1fcHJvY2Vzcyh1c2VyTWVzc2FnZURlY29kZXIubV9wcm9jZXNzKQorICAgIHsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNv
ZGVyLCBJbmplY3RlZEJ1bmRsZU9iakNPYmplY3RHcmFwaERlY29kZXJJbXBsJiBjb2RlcikKKyAg
ICB7CisgICAgICAgIFdlYktpdE5TVHlwZSB0eXBlID0gTnVsbFR5cGU7CisgICAgICAgIGlmICgh
QmFzZTo6YmFzZURlY29kZShkZWNvZGVyLCBjb2RlciwgdHlwZSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGNvZGVyLm1fcm9vdCkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgICAgIGlmICh0eXBlID09IE51bGxUeXBlIHx8IHR5cGUgPT0gVW5rbm93
blR5cGUpIHsKKyAgICAgICAgICAgIGNvZGVyLm1fcm9vdCA9IFtOU051bGwgbnVsbF07CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBjYXNlIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlclR5cGU6IHsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IHBhZ2VJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2Rl
KHBhZ2VJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBX
ZWJQYWdlKiB3ZWJQYWdlID0gY29kZXIubV9wcm9jZXNzLT53ZWJQYWdlKHBhZ2VJRCk7CisgICAg
ICAgICAgICBpZiAoIXdlYlBhZ2UpCisgICAgICAgICAgICAgICAgY29kZXIubV9yb290ID0gW05T
TnVsbCBudWxsXTsKKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgY29kZXIubV9y
b290ID0gW1tXS1dlYlByb2Nlc3NQbHVnSW5Db250cm9sbGVyIF9zaGFyZWRdIF9icm93c2VyQ29u
dGV4dENvbnRyb2xsZXJGb3JCdW5kbGVQYWdlUmVmOnRvQVBJKHdlYlBhZ2UpXTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgV2ViUHJvY2VzcyogbV9wcm9jZXNzOworfTsKKworCisvLyBBZGFwdG9ycwor
CitXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRW5jb2Rlcjo6V2ViQ29udGV4dE9iakNPYmplY3RH
cmFwaEVuY29kZXIoT2JqQ09iamVjdEdyYXBoKiBvYmplY3RHcmFwaCkKKyAgICA6IG1fb2JqZWN0
R3JhcGgob2JqZWN0R3JhcGgpCit7Cit9CisKK3ZvaWQgV2ViQ29udGV4dE9iakNPYmplY3RHcmFw
aEVuY29kZXI6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Cit7CisgICAgZW5jb2RlciA8PCBXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRW5jb2RlckltcGwo
bV9vYmplY3RHcmFwaC0+cm9vdCgpKTsKK30KKworV2ViQ29udGV4dE9iakNPYmplY3RHcmFwaERl
Y29kZXI6OldlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhEZWNvZGVyKFJlZlB0cjxPYmpDT2JqZWN0
R3JhcGg+JiBvYmplY3RHcmFwaCwgV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQorICAgIDogbV9v
YmplY3RHcmFwaChvYmplY3RHcmFwaCkKKyAgICAsIG1fcHJvY2Vzcyhwcm9jZXNzKQoreworfQor
Citib29sIFdlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhEZWNvZGVyOjpkZWNvZGUoQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRGVjb2Rl
ciYgY29kZXIpCit7CisgICAgUmV0YWluUHRyPGlkPiByb290OworICAgIFdlYkNvbnRleHRPYmpD
T2JqZWN0R3JhcGhEZWNvZGVySW1wbCBjb2RlckltcGwocm9vdCwgY29kZXIubV9wcm9jZXNzKTsK
KyAgICBpZiAoIWRlY29kZXItPmRlY29kZShjb2RlckltcGwpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBjb2Rlci5tX29iamVjdEdyYXBoID0gT2JqQ09iamVjdEdyYXBoOjpjcmVhdGUo
cm9vdC5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0luamVjdGVkQnVuZGxlT2JqQ09i
amVjdEdyYXBoRW5jb2Rlcjo6SW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhFbmNvZGVyKE9i
akNPYmplY3RHcmFwaCogb2JqZWN0R3JhcGgpCisgICAgOiBtX29iamVjdEdyYXBoKG9iamVjdEdy
YXBoKQoreworfQorCit2b2lkIEluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdyYXBoRW5jb2Rlcjo6
ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBl
bmNvZGVyIDw8IEluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdyYXBoRW5jb2RlckltcGwobV9vYmpl
Y3RHcmFwaC0+cm9vdCgpKTsKK30KKworSW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhEZWNv
ZGVyOjpJbmplY3RlZEJ1bmRsZU9iakNPYmplY3RHcmFwaERlY29kZXIoUmVmUHRyPE9iakNPYmpl
Y3RHcmFwaD4mIG9iamVjdEdyYXBoLCBXZWJQcm9jZXNzKiBwcm9jZXNzKQorICAgIDogbV9vYmpl
Y3RHcmFwaChvYmplY3RHcmFwaCkKKyAgICAsIG1fcHJvY2Vzcyhwcm9jZXNzKQoreworfQorCiti
b29sIEluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdyYXBoRGVjb2Rlcjo6ZGVjb2RlKENvcmVJUEM6
OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgSW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhE
ZWNvZGVyJiBjb2RlcikKK3sKKyAgICBSZXRhaW5QdHI8aWQ+IHJvb3Q7CisgICAgSW5qZWN0ZWRC
dW5kbGVPYmpDT2JqZWN0R3JhcGhEZWNvZGVySW1wbCBjb2RlckltcGwocm9vdCwgY29kZXIubV9w
cm9jZXNzKTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShjb2RlckltcGwpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBjb2Rlci5tX29iamVjdEdyYXBoID0gT2JqQ09iamVjdEdyYXBo
OjpjcmVhdGUocm9vdC5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHRVc2Vy
TWVzc2FnZUNvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJDb250ZXh0VXNlck1lc3NhZ2VDb2RlcnMuaAkocmV2aXNpb24gMTM2MDg3KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHRVc2VyTWVzc2FnZUNvZGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCwxMCBAQAogI2luY2x1ZGUgIldlYlBhZ2VHcm91cERhdGEuaCIK
ICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKIAorI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRl
ICJPYmpDT2JqZWN0R3JhcGhDb2RlcnMuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogLy8gQWRkcwpAQCAtNjgsNiArNzIsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgZW5jb2Rl
ciA8PCBwYWdlR3JvdXAtPmRhdGEoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cisj
aWYgUExBVEZPUk0oTUFDKQorICAgICAgICBjYXNlIEFQSU9iamVjdDo6VHlwZU9iakNPYmplY3RH
cmFwaDogeworICAgICAgICAgICAgT2JqQ09iamVjdEdyYXBoKiBvYmplY3RHcmFwaCA9IHN0YXRp
Y19jYXN0PE9iakNPYmplY3RHcmFwaCo+KG1fcm9vdCk7CisgICAgICAgICAgICBlbmNvZGVyIDw8
IFdlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhFbmNvZGVyKG9iamVjdEdyYXBoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjcsNiAr
MTM4LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNvZGVyLm1fcm9vdCA9IFdlYlBhZ2VHcm91
cDo6Z2V0KHBhZ2VHcm91cElEKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisjaWYg
UExBVEZPUk0oTUFDKQorICAgICAgICBjYXNlIEFQSU9iamVjdDo6VHlwZU9iakNPYmplY3RHcmFw
aDogeworICAgICAgICAgICAgUmVmUHRyPE9iakNPYmplY3RHcmFwaD4gb2JqZWN0R3JhcGg7Cisg
ICAgICAgICAgICBXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRGVjb2RlciBvYmplY3RHcmFwaERl
Y29kZXIob2JqZWN0R3JhcGgsIGNvZGVyLm1fcHJvY2Vzcyk7CisgICAgICAgICAgICBpZiAoIWRl
Y29kZXItPmRlY29kZShvYmplY3RHcmFwaERlY29kZXIpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGNvZGVyLm1fcm9vdCA9IG9iamVjdEdyYXBoLmdldCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAxMzYwODcpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1NSw2ICs3
NTUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmRDb2xvckNob29zZXIoKTsKICNlbmRpZgogCisg
ICAgY29uc3QgV2ViTG9hZGVyQ2xpZW50JiBsb2FkZXJDbGllbnQoKSB7IHJldHVybiBtX2xvYWRl
ckNsaWVudDsgfQorCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94eShQYWdlQ2xpZW50KiwgUGFz
c1JlZlB0cjxXZWJQcm9jZXNzUHJveHk+LCBXZWJQYWdlR3JvdXAqLCB1aW50NjRfdCBwYWdlSUQp
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29u
dGV4dENvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLm1tCShyZXZpc2lvbiAxMzYwODcp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENv
bnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbXBvcnQgIldL
VVJMUmVxdWVzdC5oIgogI2ltcG9ydCAiV0tVUkxSZXF1ZXN0TlMuaCIKICNpbXBvcnQgIldlYkNv
bnRleHQuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgogCiAjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZS5oIgpAQCAtNTMs
NyArNTQsNiBAQCBzdGF0aWMgaW5saW5lIE5TVVJMICphdXRvcmVsZWFzZWQoV0tVUkxSCiAgICAg
cmV0dXJuIFsoTlNVUkwgKilXS1VSTENvcHlDRlVSTChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB3a1VS
TC5nZXQoKSkgYXV0b3JlbGVhc2VdOwogfQogCi0KIEBpbnRlcmZhY2UgV0tCcm93c2luZ0NvbnRl
eHRDb250cm9sbGVyRGF0YSA6IE5TT2JqZWN0IHsKIEBwdWJsaWMKICAgICAvLyBVbmRlcmx5aW5n
IFdLUGFnZVJlZi4KQEAgLTY4LDEzICs2OCw2IEBAIEBpbnRlcmZhY2UgV0tCcm93c2luZ0NvbnRl
eHRDb250cm9sbGVyRGEKIEBlbmQKIAogCi1AaW50ZXJmYWNlIFdLQnJvd3NpbmdDb250ZXh0Q29u
dHJvbGxlciAoKQotCi1AcHJvcGVydHkocmVhZG9ubHkpIFdLUGFnZVJlZiBfcGFnZVJlZjsKLQot
QGVuZAotCi0KIEBpbXBsZW1lbnRhdGlvbiBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIKIAog
LSAodm9pZClkZWFsbG9jCkBAIC00MTgsNiArNDExLDExIEBAIC0gKGlkKV9pbml0V2l0aFBhZ2VS
ZWY6KFdLUGFnZVJlZilwYWdlUmUKICAgICByZXR1cm4gc2VsZjsKIH0KIAorKyAoV0tCcm93c2lu
Z0NvbnRleHRDb250cm9sbGVyICopX2Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJGb3JQYWdlUmVm
OihXS1BhZ2VSZWYpcGFnZVJlZgoreworICAgIHJldHVybiAoV0tCcm93c2luZ0NvbnRleHRDb250
cm9sbGVyICopV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmxvYWRlckNsaWVudCgpLmNsaWVudCgp
LmNsaWVudEluZm87Cit9CisKICsgKE5TTXV0YWJsZVNldCAqKWN1c3RvbVNjaGVtZXMKIHsKICAg
ICBzdGF0aWMgTlNNdXRhYmxlU2V0ICpjdXN0b21TY2hlbWVzID0gW1tOU011dGFibGVTZXQgYWxs
b2NdIGluaXRdOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRlcm5h
bC5oCShyZXZpc2lvbiAxMzYwODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSwxMiBAQCBAaW50ZXJmYWNlIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAo
CiAKIC8qIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gYXNzb2NpYXRlIHZpZXcuICov
CiAtIChpZClfaW5pdFdpdGhQYWdlUmVmOihXS1BhZ2VSZWYpcGFnZVJlZjsKKworLyogUmV0dXJu
cyBhIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciBhc3NvY2lhdGVkIHdpdGggdGhlIFdLUGFn
ZVJlZi4gKi8KKysgKFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKV9icm93c2luZ0NvbnRl
eHRDb250cm9sbGVyRm9yUGFnZVJlZjooV0tQYWdlUmVmKXBhZ2VSZWY7CisKK0Bwcm9wZXJ0eShy
ZWFkb25seSkgV0tQYWdlUmVmIF9wYWdlUmVmOworCiArIChOU011dGFibGVTZXQgKiljdXN0b21T
Y2hlbWVzOwogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S0Nvbm5lY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAxMzYwODcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9XS0Nvbm5lY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3
LDkgKzI3LDcgQEAKICNpbXBvcnQgIldLQ29ubmVjdGlvbi5oIgogI2ltcG9ydCAiV0tDb25uZWN0
aW9uSW50ZXJuYWwuaCIKIAotI2ltcG9ydCAiQXJndW1lbnRDb2RlcnNNYWMuaCIKLSNpbXBvcnQg
IkFyZ3VtZW50RGVjb2Rlci5oIgotI2ltcG9ydCAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW1wb3J0
ICJPYmpDT2JqZWN0R3JhcGguaCIKICNpbXBvcnQgIldLQ29ubmVjdGlvblJlZi5oIgogI2ltcG9y
dCAiV0tEYXRhLmgiCiAjaW1wb3J0ICJXS1JldGFpblB0ci5oIgpAQCAtNjQsMTMgKzYyLDEwIEBA
IC0gKHZvaWQpZGVhbGxvYwogCiAtICh2b2lkKXNlbmRNZXNzYWdlV2l0aE5hbWU6KE5TU3RyaW5n
ICopbWVzc2FnZU5hbWUgYm9keTooaWQpbWVzc2FnZUJvZHkKIHsKLSAgICBPd25QdHI8Q29yZUlQ
Qzo6QXJndW1lbnRFbmNvZGVyPiBtZXNzYWdlRGF0YSA9IENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rl
cjo6Y3JlYXRlKCk7Ci0gICAgZW5jb2RlKCptZXNzYWdlRGF0YSwgbWVzc2FnZUJvZHkpOwotCiAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrTWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZiltZXNzYWdlTmFtZSkpOwotICAgIFdL
UmV0YWluUHRyPFdLRGF0YVJlZj4gd2tNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tEYXRhQ3JlYXRl
KG1lc3NhZ2VEYXRhLT5idWZmZXIoKSwgbWVzc2FnZURhdGEtPmJ1ZmZlclNpemUoKSkpOworICAg
IFJlZlB0cjxPYmpDT2JqZWN0R3JhcGg+IHdrTWVzc2FnZUJvZHkgPSBPYmpDT2JqZWN0R3JhcGg6
OmNyZWF0ZShtZXNzYWdlQm9keSk7CiAKLSAgICBXS0Nvbm5lY3Rpb25Qb3N0TWVzc2FnZShfZGF0
YS0+X2Nvbm5lY3Rpb25SZWYuZ2V0KCksIHdrTWVzc2FnZU5hbWUuZ2V0KCksIHdrTWVzc2FnZUJv
ZHkuZ2V0KCkpOworICAgIFdLQ29ubmVjdGlvblBvc3RNZXNzYWdlKF9kYXRhLT5fY29ubmVjdGlv
blJlZi5nZXQoKSwgd2tNZXNzYWdlTmFtZS5nZXQoKSwgKFdLVHlwZVJlZil3a01lc3NhZ2VCb2R5
LmdldCgpKTsKIH0KIAogI3ByYWdtYSBtYXJrIERlbGVnYXRlcwpAQCAtOTMsMTcgKzg4LDEwIEBA
IHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKFdLQ29ubmVjdGkKIHsKICAgICBXS0Nvbm5l
Y3Rpb24gKmNvbm5lY3Rpb24gPSAoV0tDb25uZWN0aW9uICopY2xpZW50SW5mbzsKICAgICBpZiAo
W2Nvbm5lY3Rpb24uZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihjb25uZWN0
aW9uOmRpZFJlY2VpdmVNZXNzYWdlV2l0aE5hbWU6Ym9keTopXSkgewotICAgICAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGNmTWVzc2FnZU5hbWUgPSBhZG9wdENGKFdLU3RyaW5nQ29weUNGU3Ry
aW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIG1lc3NhZ2VOYW1lKSk7Ci0KLSAgICAgICAgV0tEYXRh
UmVmIG1lc3NhZ2VEYXRhID0gKFdLRGF0YVJlZiltZXNzYWdlQm9keTsKLSAgICAgICAgT3duUHRy
PENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlcj4gZGVjb2RlciA9IENvcmVJUEM6OkFyZ3VtZW50RGVj
b2Rlcjo6Y3JlYXRlKFdLRGF0YUdldEJ5dGVzKG1lc3NhZ2VEYXRhKSwgV0tEYXRhR2V0U2l6ZSht
ZXNzYWdlRGF0YSkpOwotCi0gICAgICAgIFJldGFpblB0cjxpZD4gbWVzc2FnZURpY3Rpb25hcnk7
Ci0gICAgICAgIC8vIEZJWE1FOiBEb24ndCBqdXN0IHNpbGVudGx5IGRyb3AgZGVjb2RpbmcgZmFp
bHVyZXMgb24gdGhlIGdyb3VuZC4KLSAgICAgICAgaWYgKCFkZWNvZGUoZGVjb2Rlci5nZXQoKSwg
bWVzc2FnZURpY3Rpb25hcnkpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBSZXRhaW5Q
dHI8TlNTdHJpbmc+IG5zTWVzc2FnZU5hbWUgPSBhZG9wdE5TKChOU1N0cmluZyAqKVdLU3RyaW5n
Q29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIG1lc3NhZ2VOYW1lKSk7CisgICAgICAg
IFJldGFpblB0cjxpZD4gbnNNZXNzYWdlQm9keSA9ICgoT2JqQ09iamVjdEdyYXBoKiltZXNzYWdl
Qm9keSktPnJvb3QoKTsKIAotICAgICAgICBbY29ubmVjdGlvbi5kZWxlZ2F0ZSBjb25uZWN0aW9u
OmNvbm5lY3Rpb24gZGlkUmVjZWl2ZU1lc3NhZ2VXaXRoTmFtZTooTlNTdHJpbmcgKiljZk1lc3Nh
Z2VOYW1lLmdldCgpIGJvZHk6bWVzc2FnZURpY3Rpb25hcnkuZ2V0KCldOworICAgICAgICBbY29u
bmVjdGlvbi5kZWxlZ2F0ZSBjb25uZWN0aW9uOmNvbm5lY3Rpb24gZGlkUmVjZWl2ZU1lc3NhZ2VX
aXRoTmFtZTpuc01lc3NhZ2VOYW1lLmdldCgpIGJvZHk6bnNNZXNzYWdlQm9keS5nZXQoKV07CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzYwODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgxMSw2ICs4
MTEsMTAgQEAKIAkJQkM4Njk5QjcxMTZBQURBQTAwMkE5MjVCIC8qIFdLVmlld0ludGVybmFsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzg2OTlCNDEx
NkFBREFBMDAyQTkyNUIgLyogV0tWaWV3SW50ZXJuYWwuaCAqLzsgfTsKIAkJQkM4NzgwRkMxMTYx
QzJCODAwQ0MyNzY4IC8qIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODc4MEZCMTE2MUMyQjgwMENDMjc2
OCAvKiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggKi87IH07CiAJCUJDOEE1MDE1MTE3NjVG
NTYwMDc1NzU3MyAvKiBXS1JldGFpblB0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkM4QTUwMTQxMTc2NUY1NjAwNzU3NTczIC8qIFdLUmV0YWluUHRy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQkM4
QUNBMTMxNjY3MEQ4OTAwNEMxOTQxIC8qIE9iakNPYmplY3RHcmFwaC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4QUNBMEYxNjY3MEQ3QTAwNEMxOTQx
IC8qIE9iakNPYmplY3RHcmFwaC5oICovOyB9OworCQlCQzhBQ0ExNDE2NjcwRDg5MDA0QzE5NDEg
LyogT2JqQ09iamVjdEdyYXBoLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkM4QUNBMTAxNjY3MEQ3QjAwNEMxOTQxIC8qIE9iakNPYmplY3RHcmFwaC5t
bSAqLzsgfTsKKwkJQkM4QUNBMTUxNjY3MEQ4OTAwNEMxOTQxIC8qIE9iakNPYmplY3RHcmFwaENv
ZGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4
QUNBMTExNjY3MEQ3RTAwNEMxOTQxIC8qIE9iakNPYmplY3RHcmFwaENvZGVycy5oICovOyB9Owor
CQlCQzhBQ0ExNjE2NjcwRDg5MDA0QzE5NDEgLyogT2JqQ09iamVjdEdyYXBoQ29kZXJzLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4QUNBMTIxNjY3
MEQ4MzAwNEMxOTQxIC8qIE9iakNPYmplY3RHcmFwaENvZGVycy5tbSAqLzsgfTsKIAkJQkM4RjJG
MkExNjI3M0EyQzAwNUZBQ0I1IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29u
dHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDOEYyRjI4MTYyNzNBMkIwMDVGQUNCNSAvKiBXS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29u
dGV4dENvbnRyb2xsZXIubW0gKi87IH07CiAJCUJDOEYyRjJCMTYyNzNBMkMwMDVGQUNCNSAvKiBX
S1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOEYyRjI5MTYyNzNBMkMwMDVGQUNC
NSAvKiBXS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCUJDOEYyRjJFMTYyNzNB
Q0MwMDVGQUNCNSAvKiBXS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXJJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkM4RjJGMkQxNjI3M0FDQjAwNUZBQ0I1IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250
ZXh0Q29udHJvbGxlckludGVybmFsLmggKi87IH07CkBAIC0yMDc1LDYgKzIwNzksMTAgQEAKIAkJ
QkM4N0RGQTkxMDE4MTAxNDAwNTY0MjE2IC8qIGxpYmljdWNvcmUuZHlsaWIgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5
bGliIjsgbmFtZSA9IGxpYmljdWNvcmUuZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9saWJpY3Vjb3Jl
LmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQlCQzhBNTAxMDExNzY1QUY3
MDA3NTc1NzMgLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBuYW1lID0g
SW5mby5wbGlzdDsgcGF0aCA9IFdlYlByb2Nlc3MvSW5mby5wbGlzdDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkM4QTUwMTQxMTc2NUY1NjAwNzU3NTczIC8qIFdLUmV0YWluUHRyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUmV0YWluUHRyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDOEFDQTBGMTY2NzBEN0EwMDRDMTk0MSAvKiBPYmpDT2Jq
ZWN0R3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqQ09iamVjdEdy
YXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDOEFDQTEwMTY2NzBEN0IwMDRD
MTk0MSAvKiBPYmpDT2JqZWN0R3JhcGgubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBPYmpDT2JqZWN0R3JhcGgubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUJDOEFDQTExMTY2NzBEN0UwMDRDMTk0MSAvKiBPYmpDT2JqZWN0R3JhcGhDb2RlcnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT2JqQ09iamVjdEdyYXBoQ29kZXJzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDOEFDQTEyMTY2NzBEODMwMDRDMTk0MSAv
KiBPYmpDT2JqZWN0R3JhcGhDb2RlcnMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBPYmpDT2JqZWN0R3JhcGhDb2RlcnMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDOEYyRjI4MTYyNzNBMkIwMDVGQUNCNSAvKiBXS1dlYlByb2Nlc3NQbHVnSW5C
cm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEYyRjI5MTYyNzNBMkMwMDVGQUNCNSAv
KiBXS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRD
b250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEYyRjJEMTYyNzNB
Q0IwMDVGQUNCNSAvKiBXS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXJJ
bnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYlByb2Nlc3NQ
bHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzc3NSw2ICszNzgzLDEwIEBACiAJCUJDMTExQjVBMTEyRjYyODIwMDMz
N0JBQiAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCUJDOEFDQTBGMTY2NzBEN0EwMDRDMTk0MSAvKiBPYmpDT2JqZWN0R3JhcGguaCAqLywKKwkJ
CQlCQzhBQ0ExMDE2NjcwRDdCMDA0QzE5NDEgLyogT2JqQ09iamVjdEdyYXBoLm1tICovLAorCQkJ
CUJDOEFDQTExMTY2NzBEN0UwMDRDMTk0MSAvKiBPYmpDT2JqZWN0R3JhcGhDb2RlcnMuaCAqLywK
KwkJCQlCQzhBQ0ExMjE2NjcwRDgzMDA0QzE5NDEgLyogT2JqQ09iamVjdEdyYXBoQ29kZXJzLm1t
ICovLAogCQkJCUUxNzlGRDlCMTM0RDM4MDYwMDE1Qjg4MyAvKiBBcmd1bWVudENvZGVyc01hYy5o
ICovLAogCQkJCUUxNzlGRDlFMTM0RDM4MjUwMDE1Qjg4MyAvKiBBcmd1bWVudENvZGVyc01hYy5t
bSAqLywKIAkJCQlFMUEzMTczMTEzNENFQTZDMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5o
ICovLApAQCAtMzc4OSwxMCArMzgwMSwxMCBAQAogCQkJCUMwMkJGRjFEMTI1MTUwMkUwMDlDQ0JF
QSAvKiBOYXRpdmVXZWJLZXlib2FyZEV2ZW50TWFjLm1tICovLAogCQkJCTMxRUEyNUQwMTM0Rjc4
QjIwMDVCMTQ1MiAvKiBOYXRpdmVXZWJNb3VzZUV2ZW50TWFjLm1tICovLAogCQkJCURGNThDNjM1
MTM3MUFDQTAwMEY5QTM3QyAvKiBOYXRpdmVXZWJXaGVlbEV2ZW50TWFjLm1tICovLAotCQkJCUUx
OTU4MkQyMTUzQ0JGRDcwMEI2MDg3NSAvKiBQREZLaXRJbXBvcnRzLmggKi8sCi0JCQkJRTE5NTgy
RDQxNTNDQzA1MzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMubW0gKi8sCiAJCQkJQzU3NEE1N0Yx
MkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oICovLAogCQkJCUM1NzRBNTgwMTJF
NjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMubW0gKi8sCisJCQkJRTE5NTgyRDIxNTND
QkZENzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMuaCAqLywKKwkJCQlFMTk1ODJENDE1M0NDMDUz
MDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5tbSAqLywKIAkJCQlCQ0Y1MDVFNTEyNDMwNDdCMDA1
OTU1QUUgLyogUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaCAqLywKIAkJCQlCQ0Y1MDVFNjEyNDMw
NDdCMDA1OTU1QUUgLyogUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8ubW0gKi8sCiAJCQkJRTFDQzFC
OEYxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50SW5mb01hYy5tbSAqLywKQEAgLTUwMDIsNiArNTAx
NCw4IEBACiAJCQkJMjk4NEY1ODkxNjRCQTA5NTAwNEJDMEM2IC8qIEN1c3RvbVByb3RvY29sTWFu
YWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUYwNjBFMDE2NTQzMTdGMDBGMzI4
MUIgLyogV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3
NTk0NEIxNjU3MDgwNDAwREQ3NzFEIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlck1lc3NhZ2VzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlCQzhBQ0ExMzE2NjcwRDg5MDA0QzE5NDEgLyogT2JqQ09iamVj
dEdyYXBoLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzhBQ0ExNTE2NjcwRDg5MDA0QzE5NDEgLyog
T2JqQ09iamVjdEdyYXBoQ29kZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU5NTYsNiArNTk3MCw4
IEBACiAJCQkJMjk4NEY1ODgxNjRCQTA5NTAwNEJDMEM2IC8qIEN1c3RvbVByb3RvY29sTWFuYWdl
ck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYwNjBFMTE2NTQzMTg1
MDBGMzI4MUIgLyogV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTE3NTk0NEExNjU3MDgwNDAwREQ3NzFEIC8qIE5ldHdvcmtSZXNvdXJjZUxv
YWRlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzhBQ0ExNDE2Njcw
RDg5MDA0QzE5NDEgLyogT2JqQ09iamVjdEdyYXBoLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQkM4
QUNBMTYxNjY3MEQ4OTAwNEMxOTQxIC8qIE9iakNPYmplY3RHcmFwaENvZGVycy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlQ29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdl
Q29kZXJzLmgJKHJldmlzaW9uIDEzNjA4NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUNvZGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMywxMCBAQAogI2luY2x1ZGUgIldlYlBhZ2VHcm91cFByb3h5Lmgi
CiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUg
Ik9iakNPYmplY3RHcmFwaENvZGVycy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiAvLyBBZGRzCkBAIC03MSw2ICs3NSwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBlbmNvZGVy
IDw8IHBhZ2VHcm91cC0+cGFnZUdyb3VwSUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICBjYXNlIEFQSU9iamVjdDo6VHlwZU9iakNP
YmplY3RHcmFwaDogeworICAgICAgICAgICAgT2JqQ09iamVjdEdyYXBoKiBvYmplY3RHcmFwaCA9
IHN0YXRpY19jYXN0PE9iakNPYmplY3RHcmFwaCo+KG1fcm9vdCk7CisgICAgICAgICAgICBlbmNv
ZGVyIDw8IEluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdyYXBoRW5jb2RlcihvYmplY3RHcmFwaCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMTI4LDYgKzEzOSwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjb2Rlci5tX3Jvb3QgPSBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJQYWdlR3JvdXAocGFnZUdyb3VwRGF0YSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgY2FzZSBB
UElPYmplY3Q6OlR5cGVPYmpDT2JqZWN0R3JhcGg6IHsKKyAgICAgICAgICAgIFJlZlB0cjxPYmpD
T2JqZWN0R3JhcGg+IG9iamVjdEdyYXBoOworICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGVPYmpD
T2JqZWN0R3JhcGhEZWNvZGVyIG9iamVjdEdyYXBoRGVjb2RlcihvYmplY3RHcmFwaCwgJldlYlBy
b2Nlc3M6OnNoYXJlZCgpKTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKG9iamVj
dEdyYXBoRGVjb2RlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgY29kZXIubV9yb290ID0gb2JqZWN0R3JhcGguZ2V0KCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW4ubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vz
c1BsdWdJbi5tbQkocmV2aXNpb24gMTM2MDg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbi5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTIzLDYgKzEyMywxMiBAQCAtIChpZClfaW5pdFdpdGhQcmluY2lwYWxDbGFzc0lu
c3RhbmNlOihpCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKKy0gKFdLV2ViUHJvY2Vzc1BsdWdJbkJy
b3dzZXJDb250ZXh0Q29udHJvbGxlciAqKV9icm93c2VyQ29udGV4dENvbnRyb2xsZXJGb3JCdW5k
bGVQYWdlUmVmOihXS0J1bmRsZVBhZ2VSZWYpcGFnZVJlZgoreworICAgIEFTU0VSVChfYnVuZGxl
UGFnZVdyYXBwZXJDYWNoZS5jb250YWlucyhwYWdlUmVmKSk7CisgICAgcmV0dXJuIF9idW5kbGVQ
YWdlV3JhcHBlckNhY2hlLmdldChwYWdlUmVmKS5nZXQoKTsKK30KKwogQGVuZAogCiBAaW1wbGVt
ZW50YXRpb24gV0tXZWJQcm9jZXNzUGx1Z0luQ29udHJvbGxlcgpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbklu
dGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkludGVybmFsLmgJKHJldmlzaW9uIDEz
NjA4NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21h
Yy9XS1dlYlByb2Nlc3NQbHVnSW5JbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICsz
Miw4IEBAIEBpbnRlcmZhY2UgV0tXZWJQcm9jZXNzUGx1Z0luQ29udHJvbGxlciAKICsgKFdLV2Vi
UHJvY2Vzc1BsdWdJbkNvbnRyb2xsZXIgKilfc2hhcmVkOwogLSAoaWQpX2luaXRXaXRoUHJpbmNp
cGFsQ2xhc3NJbnN0YW5jZTooaWQ8V0tXZWJQcm9jZXNzUGx1Z0luPilwcmluY2lwYWxDbGFzc0lu
c3RhbmNlIGJ1bmRsZVJlZjooV0tCdW5kbGVSZWYpYnVuZGxlUmVmOwogCistIChXS1dlYlByb2Nl
c3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIgKilfYnJvd3NlckNvbnRleHRDb250cm9s
bGVyRm9yQnVuZGxlUGFnZVJlZjooV0tCdW5kbGVQYWdlUmVmKXBhZ2VSZWY7CisKIEBlbmQKIAog
I2VuZGlmIC8vIGRlZmluZWQoX19MUDY0X18pICYmIGRlZmluZWQoX19jbGFuZ19fKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176642</attachid>
            <date>2012-11-28 21:24:11 -0800</date>
            <delta_ts>2012-11-28 21:33:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103589-20121128212147.patch</filename>
            <type>text/plain</type>
            <size>44250</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjA4NykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBACisyMDEyLTExLTI4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIGFuIG9iamMgb2JqZWN0IGdyYXBo
IHdyYXBwZXIgYW5kIGNvZGVyIGZvciBXS0Nvbm5lY3Rpb24gbWVzc2FnZSBib2RpZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzU4OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYSBuZXcgdHlw
ZSBvZiBVc2VyTWVzc2FnZUNvZGVyIGZvciBvYmpjIG9iamVjdCBncmFwaHMgdGhhdCBhbGxvd3Mg
ZW5jb2RpbmcvZGVjb2RpbmcKKyAgICAgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyIGFj
cm9zcyB0aGUgd2lyZS4KKworICAgICAgICAqIFNoYXJlZC9BUElDbGllbnQuaDoKKyAgICAgICAg
KEFQSUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OkFQSUNsaWVudDo6Y2xpZW50KToKKyAgICAg
ICAgQWRkIGFjY2Vzc29yIGZvciB0aGUgQ2xpZW50SW50ZXJmYWNlLgorCisgICAgICAgICogU2hh
cmVkL0FQSU9iamVjdC5oOgorICAgICAgICBBZGQgbmV3IFR5cGVPYmpDT2JqZWN0R3JhcGggdHlw
ZS4KKworICAgICAgICAqIFNoYXJlZC9tYWMvT2JqQ09iamVjdEdyYXBoLmg6IEFkZGVkLgorICAg
ICAgICAoT2JqQ09iamVjdEdyYXBoKToKKyAgICAgICAgKFdlYktpdDo6T2JqQ09iamVjdEdyYXBo
OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpPYmpDT2JqZWN0R3JhcGg6OnJvb3QpOgorICAg
ICAgICAoV2ViS2l0OjpPYmpDT2JqZWN0R3JhcGg6Ok9iakNPYmplY3RHcmFwaCk6CisgICAgICAg
IChXZWJLaXQ6Ok9iakNPYmplY3RHcmFwaDo6dHlwZSk6CisgICAgICAgICogU2hhcmVkL21hYy9P
YmpDT2JqZWN0R3JhcGgubW06IEFkZGVkLgorICAgICAgICBXcmFwcyAKKworICAgICAgICAqIFNo
YXJlZC9tYWMvT2JqQ09iamVjdEdyYXBoQ29kZXJzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29u
dGV4dE9iakNPYmplY3RHcmFwaEVuY29kZXIpOgorICAgICAgICAoV2ViQ29udGV4dE9iakNPYmpl
Y3RHcmFwaERlY29kZXIpOgorICAgICAgICAoSW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhF
bmNvZGVyKToKKyAgICAgICAgKEluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdyYXBoRGVjb2Rlcik6
CisgICAgICAgICogU2hhcmVkL21hYy9PYmpDT2JqZWN0R3JhcGhDb2RlcnMubW06IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0Ojp0eXBlRnJvbU9iamVjdCk6CisgICAgICAgIChPYmpDT2JqZWN0R3Jh
cGhFbmNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6T2JqQ09iamVjdEdyYXBoRW5jb2Rlcjo6YmFz
ZUVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok9iakNPYmplY3RHcmFwaEVuY29kZXI6Ok9iakNP
YmplY3RHcmFwaEVuY29kZXIpOgorICAgICAgICAoT2JqQ09iamVjdEdyYXBoRGVjb2Rlcik6Cisg
ICAgICAgIChXZWJLaXQ6Ok9iakNPYmplY3RHcmFwaERlY29kZXI6OmJhc2VEZWNvZGUpOgorICAg
ICAgICAoV2ViS2l0OjpPYmpDT2JqZWN0R3JhcGhEZWNvZGVyOjpPYmpDT2JqZWN0R3JhcGhEZWNv
ZGVyKToKKyAgICAgICAgKFdlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhFbmNvZGVySW1wbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhFbmNvZGVySW1wbDo6V2Vi
Q29udGV4dE9iakNPYmplY3RHcmFwaEVuY29kZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29udGV4dE9iakNPYmplY3RHcmFwaEVuY29kZXJJbXBsOjplbmNvZGUpOgorICAgICAgICAoV2Vi
Q29udGV4dE9iakNPYmplY3RHcmFwaERlY29kZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q29udGV4dE9iakNPYmplY3RHcmFwaERlY29kZXJJbXBsOjpXZWJDb250ZXh0T2JqQ09iamVjdEdy
YXBoRGVjb2RlckltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0T2JqQ09iamVjdEdy
YXBoRGVjb2RlckltcGw6OmRlY29kZSk6CisgICAgICAgIChJbmplY3RlZEJ1bmRsZU9iakNPYmpl
Y3RHcmFwaEVuY29kZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVPYmpD
T2JqZWN0R3JhcGhFbmNvZGVySW1wbDo6SW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhFbmNv
ZGVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdyYXBo
RW5jb2RlckltcGw6OmVuY29kZSk6CisgICAgICAgIChJbmplY3RlZEJ1bmRsZU9iakNPYmplY3RH
cmFwaERlY29kZXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVPYmpDT2Jq
ZWN0R3JhcGhEZWNvZGVySW1wbDo6SW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhEZWNvZGVy
SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdyYXBoRGVj
b2RlckltcGw6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRPYmpDT2JqZWN0
R3JhcGhFbmNvZGVyOjpXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRW5jb2Rlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhFbmNvZGVyOjplbmNvZGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRGVjb2Rlcjo6V2ViQ29udGV4
dE9iakNPYmplY3RHcmFwaERlY29kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0T2Jq
Q09iamVjdEdyYXBoRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRC
dW5kbGVPYmpDT2JqZWN0R3JhcGhFbmNvZGVyOjpJbmplY3RlZEJ1bmRsZU9iakNPYmplY3RHcmFw
aEVuY29kZXIpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU9iakNPYmplY3RHcmFw
aEVuY29kZXI6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlT2JqQ09i
amVjdEdyYXBoRGVjb2Rlcjo6SW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhEZWNvZGVyKToK
KyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhEZWNvZGVyOjpk
ZWNvZGUpOgorICAgICAgICBBZGRlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbToKKyAgICAgICAgKCtbV0tCcm93c2luZ0NvbnRl
eHRDb250cm9sbGVyIF9icm93c2luZ0NvbnRleHRDb250cm9sbGVyRm9yUGFnZVJlZjpdKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRl
cm5hbC5oOgorICAgICAgICBFeHBvc2UgdGhlIGFjY2Vzc29yIHRvIGdldCB0aGUgV0tQYWdlUmVm
IGZyb20gYSBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgYW5kIGFkZCBhIAorICAgICAgICBu
ZXcgbWV0aG9kIHRvIGdldCBhIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciBmcm9tIGEgV0tQ
YWdlUmVmLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tDb25uZWN0aW9uLm1tOgor
ICAgICAgICAoLVtXS0Nvbm5lY3Rpb24gc2VuZE1lc3NhZ2VXaXRoTmFtZTpib2R5Ol0pOgorICAg
ICAgICAoZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICBTd2l0Y2ggV0tDb25uZWN0aW9uIHRv
IHVzZSBPYmpDT2JqZWN0R3JhcGggdG8gZW5jb2RlIHRoZSBtZXNzYWdlQm9keS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0VXNlck1lc3NhZ2VDb2RlcnMuaDoKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29udGV4dFVzZXJNZXNzYWdlRW5jb2Rlcjo6ZW5jb2RlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VDb2RlcnMu
aDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXI6OmVu
Y29kZSk6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VEZWNvZGVy
OjpkZWNvZGUpOgorICAgICAgICBQcm94eSB0byBPYmpDT2JqZWN0R3JhcGggY29kZXJzIHdoZW4g
dXNlciBtZXNzYWdlIGVuY29kaW5nL2RlY29kaW5nIE9iakNPYmplY3RHcmFwaCBBUElPYmplY3Rz
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJv
Y2Vzc1BsdWdJbi5tbToKKyAgICAgICAgKC1bV0tXZWJQcm9jZXNzUGx1Z0luQ29udHJvbGxlciBf
YnJvd3NlckNvbnRleHRDb250cm9sbGVyRm9yQnVuZGxlUGFnZVJlZjpdKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luSW50ZXJu
YWwuaDoKKyAgICAgICAgQWRkIG1ldGhvZCB0byBnZXQgV0tXZWJQcm9jZXNzUGx1Z0luQ29udHJv
bGxlciBmcm9tIHRoZSBXS0J1bmRsZVBhZ2VSZWYuCisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBuZXcgZmlsZXMuCisKIDIwMTItMTEt
MjggIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W1dLMl1bUXRdIEFkZCBkcmFnJmRyb3Agc3VwcG9ydCB0byBGbGlja2FibGUgd2ViVmlldwpJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9BUElDbGllbnQuaAkocmV2aXNpb24gMTM2MDg3KQorKysgU291cmNl
L1dlYktpdDIvU2hhcmVkL0FQSUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw5
IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGNsaWVudCAmJiBjbGllbnQtPnZlcnNpb24gPCBjdXJy
ZW50VmVyc2lvbikKICAgICAgICAgICAgIG1lbWNweSgmbV9jbGllbnQsIGNsaWVudCwgQVBJQ2xp
ZW50VHJhaXRzPENsaWVudEludGVyZmFjZT46OmludGVyZmFjZVNpemVzQnlWZXJzaW9uW2NsaWVu
dC0+dmVyc2lvbl0pOwogICAgIH0KLSAgICAKKworICAgIGNvbnN0IENsaWVudEludGVyZmFjZSYg
Y2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KKwogcHJvdGVjdGVkOgogICAgIENs
aWVudEludGVyZmFjZSBtX2NsaWVudDsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
QVBJT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSU9iamVj
dC5oCShyZXZpc2lvbiAxMzYwODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw2ICsxMzAsNyBAQCBwdWJsaWM6CiAKICAgICAgICAg
Ly8gUGxhdGZvcm0gc3BlY2lmaWMKICAgICAgICAgVHlwZUVkaXRDb21tYW5kUHJveHksCisgICAg
ICAgIFR5cGVPYmpDT2JqZWN0R3JhcGgsCiAgICAgICAgIFR5cGVWaWV3LAogI2lmIFVTRShTT1VQ
KQogICAgICAgICBUeXBlU291cFJlcXVlc3RNYW5hZ2VyLApJbmRleDogU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9PYmpDT2JqZWN0R3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL09iakNPYmplY3RHcmFwaC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9PYmpDT2JqZWN0R3JhcGguaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgT2JqQ09iamVjdEdyYXBoX2gKKyNkZWZpbmUg
T2JqQ09iamVjdEdyYXBoX2gKKworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE9iakNPYmplY3RH
cmFwaCA6IHB1YmxpYyBBUElPYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBUeXBl
IEFQSVR5cGUgPSBUeXBlT2JqQ09iamVjdEdyYXBoOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
T2JqQ09iamVjdEdyYXBoPiBjcmVhdGUoaWQgcm9vdE9iamVjdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgT2JqQ09iamVjdEdyYXBoKHJvb3RPYmplY3QpKTsKKyAgICB9CisK
KyAgICBpZCByb290T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yb290T2JqZWN0LmdldCgpOyB9
CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgT2JqQ09iamVjdEdyYXBoKGlkIHJvb3RPYmplY3Qp
CisgICAgICAgIDogbV9yb290T2JqZWN0KHJvb3RPYmplY3QpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gQVBJVHlwZTsgfQorCisgICAgUmV0
YWluUHRyPGlkPiBtX3Jvb3RPYmplY3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIE9iakNPYmplY3RHcmFwaF9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL09iakNPYmplY3RHcmFwaC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbWFjL09iakNPYmplY3RHcmFwaC5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9tYWMvT2JqQ09iamVjdEdyYXBoLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iakNPYmpl
Y3RHcmFwaC5oIgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9PYmpDT2JqZWN0R3Jh
cGhDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL09iakNP
YmplY3RHcmFwaENvZGVycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9PYmpDT2JqZWN0R3JhcGhDb2RlcnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgT2JqQ09iamVjdEdyYXBoQ29kZXJzX2gKKyNkZWZpbmUg
T2JqQ09iamVjdEdyYXBoQ29kZXJzX2gKKworI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgor
I2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgorI2luY2x1ZGUgIk9iakNPYmplY3RHcmFwaC5o
IgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYlByb2Nlc3M7CitjbGFzcyBXZWJQcm9jZXNzUHJveHk7CisKK2NsYXNzIFdlYkNvbnRleHRP
YmpDT2JqZWN0R3JhcGhFbmNvZGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJDb250ZXh0
T2JqQ09iamVjdEdyYXBoRW5jb2RlcihPYmpDT2JqZWN0R3JhcGgqKTsKKyAgICB2b2lkIGVuY29k
ZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBPYmpD
T2JqZWN0R3JhcGgqIG1fb2JqZWN0R3JhcGg7Cit9OworCitjbGFzcyBXZWJDb250ZXh0T2JqQ09i
amVjdEdyYXBoRGVjb2RlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2ViQ29udGV4dE9iakNP
YmplY3RHcmFwaERlY29kZXIoUmVmUHRyPE9iakNPYmplY3RHcmFwaD4mLCBXZWJQcm9jZXNzUHJv
eHkqKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwg
V2ViQ29udGV4dE9iakNPYmplY3RHcmFwaERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBSZWZQ
dHI8T2JqQ09iamVjdEdyYXBoPiYgbV9vYmplY3RHcmFwaDsKKyAgICBXZWJQcm9jZXNzUHJveHkq
IG1fcHJvY2VzczsKK307CisKKworY2xhc3MgSW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhF
bmNvZGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbmplY3RlZEJ1bmRsZU9iakNPYmplY3RH
cmFwaEVuY29kZXIoT2JqQ09iamVjdEdyYXBoKik7CisgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6
QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgT2JqQ09iamVjdEdyYXBo
KiBtX29iamVjdEdyYXBoOworfTsKKworY2xhc3MgSW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3Jh
cGhEZWNvZGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbmplY3RlZEJ1bmRsZU9iakNPYmpl
Y3RHcmFwaERlY29kZXIoUmVmUHRyPE9iakNPYmplY3RHcmFwaD4mLCBXZWJQcm9jZXNzKik7Cisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIEluamVjdGVk
QnVuZGxlT2JqQ09iamVjdEdyYXBoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIFJlZlB0cjxP
YmpDT2JqZWN0R3JhcGg+JiBtX29iamVjdEdyYXBoOworICAgIFdlYlByb2Nlc3MqIG1fcHJvY2Vz
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gT2JqQ09iamVjdEdy
YXBoQ29kZXJzX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvT2JqQ09iamVjdEdy
YXBoQ29kZXJzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvT2Jq
Q09iamVjdEdyYXBoQ29kZXJzLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hh
cmVkL21hYy9PYmpDT2JqZWN0R3JhcGhDb2RlcnMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9iakNP
YmplY3RHcmFwaENvZGVycy5oIgorCisjaW1wb3J0ICJBcmd1bWVudENvZGVyc01hYy5oIgorCisv
LyBGb3IgVUlQcm9jZXNzIHNpZGUgZW5jb2RpbmcvZGVjb2RpbmcKKyNpbXBvcnQgIldLQVBJQ2Fz
dC5oIgorI2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaCIKKyNp
bXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCisKKy8v
IEZvciBXZWJQcm9jZXNzIHNpZGUgZW5jb2RpbmcvZGVjb2RpbmcKKyNpbXBvcnQgIldLQnVuZGxl
QVBJQ2FzdC5oIgorI2ltcG9ydCAiV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250
cm9sbGVySW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250
ZXh0Q29udHJvbGxlclByaXZhdGUuaCIKKyNpbXBvcnQgIldLV2ViUHJvY2Vzc1BsdWdJbkludGVy
bmFsLmgiCisjaW1wb3J0ICJXZWJQYWdlLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitlbnVtIFdlYktpdE5TVHlwZSB7CisgICAgTnVsbFR5cGUsCisg
ICAgTlNEaWN0aW9uYXJ5VHlwZSwKKyAgICBOU0FycmF5VHlwZSwKKyAgICBOU1N0cmluZ1R5cGUs
CisgICAgTlNOdW1iZXJUeXBlLAorICAgIE5TRGF0ZVR5cGUsCisgICAgTlNEYXRhVHlwZSwKKyAg
ICBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJUeXBlLAorICAgIFVua25vd25UeXBlLAorfTsK
Kworc3RhdGljIFdlYktpdE5TVHlwZSB0eXBlRnJvbU9iamVjdChpZCBvYmplY3QpCit7CisgICAg
QVNTRVJUKG9iamVjdCk7CisKKyAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU0RpY3Rp
b25hcnkgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIE5TRGljdGlvbmFyeVR5cGU7CisgICAgaWYg
KFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJu
IE5TU3RyaW5nVHlwZTsKKyAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU0FycmF5IGNs
YXNzXV0pCisgICAgICAgIHJldHVybiBOU0FycmF5VHlwZTsKKyAgICBpZiAoW29iamVjdCBpc0tp
bmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKQorICAgICAgICByZXR1cm4gTlNOdW1iZXJUeXBl
OworICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TRGF0ZSBjbGFzc11dKQorICAgICAg
ICByZXR1cm4gTlNEYXRlVHlwZTsKKyAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU0Rh
dGEgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIE5TRGF0YVR5cGU7CisgICAgaWYgKFtvYmplY3Qg
aXNLaW5kT2ZDbGFzczpbV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyIGNsYXNzXV0pCisgICAg
ICAgIHJldHVybiBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJUeXBlOworCisgICAgcmV0dXJu
IFVua25vd25UeXBlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBPd25lcj4KK2NsYXNzIE9iakNP
YmplY3RHcmFwaEVuY29kZXIgeworcHVibGljOgorICAgIGJvb2wgYmFzZUVuY29kZShDb3JlSVBD
OjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIFdlYktpdE5TVHlwZSYgdHlwZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICghbV9yb290KSB7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHVpbnQzMl90PihOdWxsVHlwZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHR5cGUgPSB0eXBlRnJvbU9iamVjdChtX3Jvb3QpOworICAgICAg
ICBpZiAodHlwZSA9PSBVbmtub3duVHlwZSkgeworICAgICAgICAgICAgW05TRXhjZXB0aW9uIHJh
aXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkNhbiBub3QgZW5jb2RlIG9i
amVjdHMgb2YgY2xhc3MgdHlwZSAnJUAnIiwgTlNTdHJpbmdGcm9tQ2xhc3MoW21fcm9vdCBjbGFz
c10pXTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSk7CisKKyAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIGNhc2UgTlNTdHJpbmdUeXBlOiB7CisgICAgICAgICAgICBDb3JlSVBD
OjplbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8TlNTdHJpbmcgKj4obV9yb290KSk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE5TQXJyYXlUeXBl
OiB7CisgICAgICAgICAgICBOU0FycmF5ICphcnJheSA9IHN0YXRpY19jYXN0PE5TQXJyYXkgKj4o
bV9yb290KTsKKworICAgICAgICAgICAgTlNVSW50ZWdlciBzaXplID0gW2FycmF5IGNvdW50XTsK
KyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNpemUpOworCisg
ICAgICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAg
ICAgICAgICAgZW5jb2RlciA8PCBPd25lcihbYXJyYXkgb2JqZWN0QXRJbmRleDppXSk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE5TRGljdGlvbmFy
eVR5cGU6IHsKKyAgICAgICAgICAgIE5TRGljdGlvbmFyeSogZGljdGlvbmFyeSA9IHN0YXRpY19j
YXN0PE5TRGljdGlvbmFyeSAqPihtX3Jvb3QpOworCisgICAgICAgICAgICBOU1VJbnRlZ2VyIHNp
emUgPSBbZGljdGlvbmFyeSBjb3VudF07CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihzaXplKTsKKworICAgICAgICAgICAgTlNBcnJheSAqa2V5cyA9IFtkaWN0
aW9uYXJ5IGFsbEtleXNdOworICAgICAgICAgICAgTlNBcnJheSAqdmFsdWVzID0gW2RpY3Rpb25h
cnkgYWxsVmFsdWVzXTsKKyAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICAgICAgICAgIGVuY29kZXIgPDwgT3duZXIoW2tleXMgb2JqZWN0
QXRJbmRleDppXSk7CisgICAgICAgICAgICAgICAgZW5jb2RlciA8PCBPd25lcihbdmFsdWVzIG9i
amVjdEF0SW5kZXg6aV0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE5TTnVtYmVyVHlwZTogeworICAgICAgICAgICAg
Q29yZUlQQzo6ZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PE5TTnVtYmVyICo+KG1fcm9vdCkp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBOU0Rh
dGVUeXBlOiB7CisgICAgICAgICAgICBDb3JlSVBDOjplbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nh
c3Q8TlNEYXRlICo+KG1fcm9vdCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBOU0RhdGFUeXBlOiB7CisgICAgICAgICAgICBDb3JlSVBDOjplbmNv
ZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8TlNEYXRhICo+KG1fcm9vdCkpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworcHJvdGVj
dGVkOgorICAgIE9iakNPYmplY3RHcmFwaEVuY29kZXIoaWQgcm9vdCkKKyAgICAgICAgOiBtX3Jv
b3Qocm9vdCkKKyAgICB7CisgICAgfQorCisgICAgaWQgbV9yb290OworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgT3duZXI+CitjbGFzcyBPYmpDT2JqZWN0R3JhcGhEZWNvZGVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgYm9vbCBiYXNlRGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVj
b2RlciwgT3duZXImIGNvZGVyLCBXZWJLaXROU1R5cGUmIHR5cGUpCisgICAgeworICAgICAgICB1
aW50MzJfdCB0eXBlQXNVSW50MzI7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHR5cGVB
c1VJbnQzMikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdHlwZSA9IHN0
YXRpY19jYXN0PFdlYktpdE5TVHlwZT4odHlwZUFzVUludDMyKTsKKworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgY2FzZSBOU1N0cmluZ1R5cGU6IHsKKyAgICAgICAgICAgIFJldGFp
blB0cjxOU1N0cmluZz4gc3RyaW5nOworICAgICAgICAgICAgaWYgKCFDb3JlSVBDOjpkZWNvZGUo
ZGVjb2Rlciwgc3RyaW5nKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBjb2Rlci5tX3Jvb3QgPSBzdHJpbmc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIE5TQXJyYXlUeXBlOiB7CisgICAgICAgICAgICB1aW50NjRfdCBzaXpl
OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50NjQoc2l6ZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxl
QXJyYXk+IGFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENh
cGFjaXR5OnNpemVdKTsKKyAgICAgICAgICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBSZXRhaW5QdHI8aWQ+IHZhbHVlOworICAgICAgICAg
ICAgICAgIE93bmVyIG1lc3NhZ2VDb2Rlcihjb2RlciwgdmFsdWUpOworICAgICAgICAgICAgICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlKG1lc3NhZ2VDb2RlcikpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6
dmFsdWUuZ2V0KCldOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb2Rlci5tX3Jvb3Qg
PSBhcnJheTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTlNE
aWN0aW9uYXJ5VHlwZTogeworICAgICAgICAgICAgdWludDY0X3Qgc2l6ZTsKKyAgICAgICAgICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDY0KHNpemUpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGRp
Y3Rpb25hcnkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eTpzaXplXSk7CisgICAgICAgICAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGRlY29kZSB0aGUga2V5IG5hbWUu
CisgICAgICAgICAgICAgICAgUmV0YWluUHRyPGlkPiBrZXk7CisgICAgICAgICAgICAgICAgT3du
ZXIga2V5TWVzc2FnZUNvZGVyKGNvZGVyLCBrZXkpOworICAgICAgICAgICAgICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKGtleU1lc3NhZ2VDb2RlcikpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgICAgIFJldGFpblB0cjxpZD4gdmFsdWU7CisgICAgICAg
ICAgICAgICAgT3duZXIgdmFsdWVNZXNzYWdlQ29kZXIoY29kZXIsIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh2YWx1ZU1lc3NhZ2VDb2RlcikpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5
LmdldCgpIHNldE9iamVjdDp2YWx1ZS5nZXQoKSBmb3JLZXk6a2V5LmdldCgpXTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY29kZXIubV9yb290ID0gZGljdGlvbmFyeTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTlNOdW1iZXJUeXBlOiB7CisgICAg
ICAgICAgICBSZXRhaW5QdHI8TlNOdW1iZXI+IG51bWJlcjsKKyAgICAgICAgICAgIGlmICghQ29y
ZUlQQzo6ZGVjb2RlKGRlY29kZXIsIG51bWJlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgY29kZXIubV9yb290ID0gbnVtYmVyOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBOU0RhdGVUeXBlOiB7CisgICAgICAgICAgICBS
ZXRhaW5QdHI8TlNEYXRlPiBkYXRlOworICAgICAgICAgICAgaWYgKCFDb3JlSVBDOjpkZWNvZGUo
ZGVjb2RlciwgZGF0ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgY29kZXIubV9yb290ID0gZGF0ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgTlNEYXRhVHlwZTogeworICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4g
ZGF0YTsKKyAgICAgICAgICAgIGlmICghQ29yZUlQQzo6ZGVjb2RlKGRlY29kZXIsIGRhdGEpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNvZGVyLm1fcm9vdCA9
IGRhdGE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKK3Byb3RlY3RlZDoKKyAgICBPYmpDT2JqZWN0R3JhcGhEZWNvZGVyKFJldGFpblB0cjxp
ZD4mIHJvb3QpCisgICAgICAgIDogbV9yb290KHJvb3QpCisgICAgeworICAgIH0KKworICAgIFJl
dGFpblB0cjxpZD4mIG1fcm9vdDsKK307CisKKworLy8gV2ViQ29udGV4dCBBZGRpdGlvbnMKKwor
Y2xhc3MgV2ViQ29udGV4dE9iakNPYmplY3RHcmFwaEVuY29kZXJJbXBsIDogcHVibGljIE9iakNP
YmplY3RHcmFwaEVuY29kZXI8V2ViQ29udGV4dE9iakNPYmplY3RHcmFwaEVuY29kZXJJbXBsPiB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBPYmpDT2JqZWN0R3JhcGhFbmNvZGVyPFdlYkNvbnRleHRP
YmpDT2JqZWN0R3JhcGhFbmNvZGVySW1wbD4gQmFzZTsKKworICAgIGV4cGxpY2l0IFdlYkNvbnRl
eHRPYmpDT2JqZWN0R3JhcGhFbmNvZGVySW1wbChpZCByb290KQorICAgICAgICA6IEJhc2Uocm9v
dCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgV2ViS2l0TlNUeXBlIHR5cGUgPSBO
dWxsVHlwZTsKKyAgICAgICAgaWYgKGJhc2VFbmNvZGUoZW5jb2RlciwgdHlwZSkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgV0tC
cm93c2luZ0NvbnRleHRDb250cm9sbGVyVHlwZTogeworICAgICAgICAgICAgV0tCcm93c2luZ0Nv
bnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHRDb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICo+KG1fcm9vdCk7CisKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgdG9JbXBsKGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuX3BhZ2VSZWYpLT5wYWdl
SUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorfTsKKworCitjbGFzcyBXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRGVj
b2RlckltcGwgOiBwdWJsaWMgT2JqQ09iamVjdEdyYXBoRGVjb2RlcjxXZWJDb250ZXh0T2JqQ09i
amVjdEdyYXBoRGVjb2RlckltcGw+IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIE9iakNPYmplY3RH
cmFwaERlY29kZXI8V2ViQ29udGV4dE9iakNPYmplY3RHcmFwaERlY29kZXJJbXBsPiBCYXNlOwor
CisgICAgV2ViQ29udGV4dE9iakNPYmplY3RHcmFwaERlY29kZXJJbXBsKFJldGFpblB0cjxpZD4m
IHJvb3QsIFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKKyAgICAgICAgOiBCYXNlKHJvb3QpCisg
ICAgICAgICwgbV9wcm9jZXNzKHByb2Nlc3MpCisgICAgeworICAgIH0KKworICAgIFdlYkNvbnRl
eHRPYmpDT2JqZWN0R3JhcGhEZWNvZGVySW1wbChXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRGVj
b2RlckltcGwmIHVzZXJNZXNzYWdlRGVjb2RlciwgUmV0YWluUHRyPGlkPiYgcm9vdCkKKyAgICAg
ICAgOiBCYXNlKHJvb3QpCisgICAgICAgICwgbV9wcm9jZXNzKHVzZXJNZXNzYWdlRGVjb2Rlci5t
X3Byb2Nlc3MpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBD
OjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFdlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhEZWNv
ZGVySW1wbCYgY29kZXIpCisgICAgeworICAgICAgICBXZWJLaXROU1R5cGUgdHlwZSA9IE51bGxU
eXBlOworICAgICAgICBpZiAoIUJhc2U6OmJhc2VEZWNvZGUoZGVjb2RlciwgY29kZXIsIHR5cGUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChjb2Rlci5tX3Jvb3Qp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAodHlwZSA9PSBOdWxsVHlw
ZSB8fCB0eXBlID09IFVua25vd25UeXBlKSB7CisgICAgICAgICAgICBjb2Rlci5tX3Jvb3QgPSBb
TlNOdWxsIG51bGxdOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBXS0Jyb3dzaW5nQ29udGV4dENvbnRy
b2xsZXJUeXBlOiB7CisgICAgICAgICAgICB1aW50NjRfdCBwYWdlSUQ7CisgICAgICAgICAgICBp
ZiAoIWRlY29kZXItPmRlY29kZShwYWdlSUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAgICAgV2ViUGFnZVByb3h5KiB3ZWJQYWdlID0gY29kZXIubV9wcm9jZXNz
LT53ZWJQYWdlKHBhZ2VJRCk7CisgICAgICAgICAgICBpZiAoIXdlYlBhZ2UpCisgICAgICAgICAg
ICAgICAgY29kZXIubV9yb290ID0gW05TTnVsbCBudWxsXTsKKyAgICAgICAgICAgIGVsc2UgCisg
ICAgICAgICAgICAgICAgY29kZXIubV9yb290ID0gW1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxl
ciBfYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckZvclBhZ2VSZWY6dG9BUEkod2ViUGFnZSldOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBXZWJQcm9jZXNzUHJveHkqIG1fcHJvY2VzczsKK307CisKKwor
Ly8gSW5qZWN0ZWRCdW5kbGUgQWRkaXRpb25zCisKK2NsYXNzIEluamVjdGVkQnVuZGxlT2JqQ09i
amVjdEdyYXBoRW5jb2RlckltcGwgOiBwdWJsaWMgT2JqQ09iamVjdEdyYXBoRW5jb2RlcjxJbmpl
Y3RlZEJ1bmRsZU9iakNPYmplY3RHcmFwaEVuY29kZXJJbXBsPiB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBPYmpDT2JqZWN0R3JhcGhFbmNvZGVyPEluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdyYXBo
RW5jb2RlckltcGw+IEJhc2U7CisKKyAgICBleHBsaWNpdCBJbmplY3RlZEJ1bmRsZU9iakNPYmpl
Y3RHcmFwaEVuY29kZXJJbXBsKGlkIHJvb3QpCisgICAgICAgIDogQmFzZShyb290KQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CisgICAgeworICAgICAgICBXZWJLaXROU1R5cGUgdHlwZSA9IE51bGxUeXBlOwor
ICAgICAgICBpZiAoYmFzZUVuY29kZShlbmNvZGVyLCB0eXBlKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBXS0Jyb3dzaW5nQ29u
dGV4dENvbnRyb2xsZXJUeXBlOiB7CisgICAgICAgICAgICBXS1dlYlByb2Nlc3NQbHVnSW5Ccm93
c2VyQ29udGV4dENvbnRyb2xsZXIgKmJyb3dzZXJDb250ZXh0Q29udHJvbGxlciA9IHN0YXRpY19j
YXN0PFdLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlciAqPihtX3Jvb3Qp
OworCisgICAgICAgICAgICBlbmNvZGVyIDw8IHRvSW1wbChicm93c2VyQ29udGV4dENvbnRyb2xs
ZXIuX2J1bmRsZVBhZ2VSZWYpLT5wYWdlSUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfTsKKworY2xhc3MgSW5qZWN0
ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhEZWNvZGVySW1wbCA6IHB1YmxpYyBPYmpDT2JqZWN0R3Jh
cGhEZWNvZGVyPEluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdyYXBoRGVjb2RlckltcGw+IHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIE9iakNPYmplY3RHcmFwaERlY29kZXI8SW5qZWN0ZWRCdW5kbGVP
YmpDT2JqZWN0R3JhcGhEZWNvZGVySW1wbD4gQmFzZTsKKworICAgIEluamVjdGVkQnVuZGxlT2Jq
Q09iamVjdEdyYXBoRGVjb2RlckltcGwoUmV0YWluUHRyPGlkPiYgcm9vdCwgV2ViUHJvY2Vzcyog
cHJvY2VzcykKKyAgICAgICAgOiBCYXNlKHJvb3QpCisgICAgICAgICwgbV9wcm9jZXNzKHByb2Nl
c3MpCisgICAgeworICAgIH0KKworICAgIEluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdyYXBoRGVj
b2RlckltcGwoSW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhEZWNvZGVySW1wbCYgdXNlck1l
c3NhZ2VEZWNvZGVyLCBSZXRhaW5QdHI8aWQ+JiByb290KQorICAgICAgICA6IEJhc2Uocm9vdCkK
KyAgICAgICAgLCBtX3Byb2Nlc3ModXNlck1lc3NhZ2VEZWNvZGVyLm1fcHJvY2VzcykKKyAgICB7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rl
ciogZGVjb2RlciwgSW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhEZWNvZGVySW1wbCYgY29k
ZXIpCisgICAgeworICAgICAgICBXZWJLaXROU1R5cGUgdHlwZSA9IE51bGxUeXBlOworICAgICAg
ICBpZiAoIUJhc2U6OmJhc2VEZWNvZGUoZGVjb2RlciwgY29kZXIsIHR5cGUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChjb2Rlci5tX3Jvb3QpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAodHlwZSA9PSBOdWxsVHlwZSB8fCB0eXBlID09
IFVua25vd25UeXBlKSB7CisgICAgICAgICAgICBjb2Rlci5tX3Jvb3QgPSBbTlNOdWxsIG51bGxd
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgY2FzZSBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJUeXBlOiB7
CisgICAgICAgICAgICB1aW50NjRfdCBwYWdlSUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIt
PmRlY29kZShwYWdlSUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICAgICAgV2ViUGFnZSogd2ViUGFnZSA9IGNvZGVyLm1fcHJvY2Vzcy0+d2ViUGFnZShwYWdlSUQp
OworICAgICAgICAgICAgaWYgKCF3ZWJQYWdlKQorICAgICAgICAgICAgICAgIGNvZGVyLm1fcm9v
dCA9IFtOU051bGwgbnVsbF07CisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgIGNv
ZGVyLm1fcm9vdCA9IFtbV0tXZWJQcm9jZXNzUGx1Z0luQ29udHJvbGxlciBfc2hhcmVkXSBfYnJv
d3NlckNvbnRleHRDb250cm9sbGVyRm9yQnVuZGxlUGFnZVJlZjp0b0FQSSh3ZWJQYWdlKV07Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCitwcml2YXRlOgorICAgIFdlYlByb2Nlc3MqIG1fcHJvY2VzczsKK307CisKKworLy8gQWRh
cHRvcnMKKworV2ViQ29udGV4dE9iakNPYmplY3RHcmFwaEVuY29kZXI6OldlYkNvbnRleHRPYmpD
T2JqZWN0R3JhcGhFbmNvZGVyKE9iakNPYmplY3RHcmFwaCogb2JqZWN0R3JhcGgpCisgICAgOiBt
X29iamVjdEdyYXBoKG9iamVjdEdyYXBoKQoreworfQorCit2b2lkIFdlYkNvbnRleHRPYmpDT2Jq
ZWN0R3JhcGhFbmNvZGVyOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAoreworICAgIGVuY29kZXIgPDwgV2ViQ29udGV4dE9iakNPYmplY3RHcmFwaEVuY29k
ZXJJbXBsKG1fb2JqZWN0R3JhcGgtPnJvb3RPYmplY3QoKSk7Cit9CisKK1dlYkNvbnRleHRPYmpD
T2JqZWN0R3JhcGhEZWNvZGVyOjpXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRGVjb2RlcihSZWZQ
dHI8T2JqQ09iamVjdEdyYXBoPiYgb2JqZWN0R3JhcGgsIFdlYlByb2Nlc3NQcm94eSogcHJvY2Vz
cykKKyAgICA6IG1fb2JqZWN0R3JhcGgob2JqZWN0R3JhcGgpCisgICAgLCBtX3Byb2Nlc3MocHJv
Y2VzcykKK3sKK30KKworYm9vbCBXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRGVjb2Rlcjo6ZGVj
b2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2ViQ29udGV4dE9iakNPYmpl
Y3RHcmFwaERlY29kZXImIGNvZGVyKQoreworICAgIFJldGFpblB0cjxpZD4gcm9vdDsKKyAgICBX
ZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRGVjb2RlckltcGwgY29kZXJJbXBsKHJvb3QsIGNvZGVy
Lm1fcHJvY2Vzcyk7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY29kZXJJbXBsKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgY29kZXIubV9vYmplY3RHcmFwaCA9IE9iakNPYmplY3RH
cmFwaDo6Y3JlYXRlKHJvb3QuZ2V0KCkpOworICAgIHJldHVybiB0cnVlOworfQorCitJbmplY3Rl
ZEJ1bmRsZU9iakNPYmplY3RHcmFwaEVuY29kZXI6OkluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdy
YXBoRW5jb2RlcihPYmpDT2JqZWN0R3JhcGgqIG9iamVjdEdyYXBoKQorICAgIDogbV9vYmplY3RH
cmFwaChvYmplY3RHcmFwaCkKK3sKK30KKwordm9pZCBJbmplY3RlZEJ1bmRsZU9iakNPYmplY3RH
cmFwaEVuY29kZXI6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Cit7CisgICAgZW5jb2RlciA8PCBJbmplY3RlZEJ1bmRsZU9iakNPYmplY3RHcmFwaEVuY29k
ZXJJbXBsKG1fb2JqZWN0R3JhcGgtPnJvb3RPYmplY3QoKSk7Cit9CisKK0luamVjdGVkQnVuZGxl
T2JqQ09iamVjdEdyYXBoRGVjb2Rlcjo6SW5qZWN0ZWRCdW5kbGVPYmpDT2JqZWN0R3JhcGhEZWNv
ZGVyKFJlZlB0cjxPYmpDT2JqZWN0R3JhcGg+JiBvYmplY3RHcmFwaCwgV2ViUHJvY2VzcyogcHJv
Y2VzcykKKyAgICA6IG1fb2JqZWN0R3JhcGgob2JqZWN0R3JhcGgpCisgICAgLCBtX3Byb2Nlc3Mo
cHJvY2VzcykKK3sKK30KKworYm9vbCBJbmplY3RlZEJ1bmRsZU9iakNPYmplY3RHcmFwaERlY29k
ZXI6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEluamVjdGVkQnVu
ZGxlT2JqQ09iamVjdEdyYXBoRGVjb2RlciYgY29kZXIpCit7CisgICAgUmV0YWluUHRyPGlkPiBy
b290OworICAgIEluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdyYXBoRGVjb2RlckltcGwgY29kZXJJ
bXBsKHJvb3QsIGNvZGVyLm1fcHJvY2Vzcyk7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY29k
ZXJJbXBsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29kZXIubV9vYmplY3RHcmFw
aCA9IE9iakNPYmplY3RHcmFwaDo6Y3JlYXRlKHJvb3QuZ2V0KCkpOworICAgIHJldHVybiB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJDb250ZXh0VXNlck1lc3NhZ2VDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dFVzZXJNZXNzYWdlQ29kZXJzLmgJKHJldmlzaW9u
IDEzNjA4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0VXNlck1lc3Nh
Z2VDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTAgQEAKICNpbmNsdWRlICJX
ZWJQYWdlR3JvdXBEYXRhLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAKKyNpZiBQTEFU
Rk9STShNQUMpCisjaW5jbHVkZSAiT2JqQ09iamVjdEdyYXBoQ29kZXJzLmgiCisjZW5kaWYKKwog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIC8vIEFkZHMKQEAgLTY4LDYgKzcyLDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGVuY29kZXIgPDwgcGFnZUdyb3VwLT5kYXRhKCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgY2FzZSBBUElPYmpl
Y3Q6OlR5cGVPYmpDT2JqZWN0R3JhcGg6IHsKKyAgICAgICAgICAgIE9iakNPYmplY3RHcmFwaCog
b2JqZWN0R3JhcGggPSBzdGF0aWNfY2FzdDxPYmpDT2JqZWN0R3JhcGgqPihtX3Jvb3QpOworICAg
ICAgICAgICAgZW5jb2RlciA8PCBXZWJDb250ZXh0T2JqQ09iamVjdEdyYXBoRW5jb2RlcihvYmpl
Y3RHcmFwaCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTI3LDYgKzEzOCwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjb2Rlci5t
X3Jvb3QgPSBXZWJQYWdlR3JvdXA6OmdldChwYWdlR3JvdXBJRCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgY2FzZSBBUElPYmplY3Q6
OlR5cGVPYmpDT2JqZWN0R3JhcGg6IHsKKyAgICAgICAgICAgIFJlZlB0cjxPYmpDT2JqZWN0R3Jh
cGg+IG9iamVjdEdyYXBoOworICAgICAgICAgICAgV2ViQ29udGV4dE9iakNPYmplY3RHcmFwaERl
Y29kZXIgb2JqZWN0R3JhcGhEZWNvZGVyKG9iamVjdEdyYXBoLCBjb2Rlci5tX3Byb2Nlc3MpOwor
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUob2JqZWN0R3JhcGhEZWNvZGVyKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjb2Rlci5tX3Jvb3QgPSBv
YmplY3RHcmFwaC5nZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMTM2
MDg3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03NTUsNiArNzU1LDggQEAgcHVibGljOgogICAgIHZvaWQgZW5kQ29sb3JDaG9v
c2VyKCk7CiAjZW5kaWYKIAorICAgIGNvbnN0IFdlYkxvYWRlckNsaWVudCYgbG9hZGVyQ2xpZW50
KCkgeyByZXR1cm4gbV9sb2FkZXJDbGllbnQ7IH0KKwogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJv
eHkoUGFnZUNsaWVudCosIFBhc3NSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiwgV2ViUGFnZUdyb3Vw
KiwgdWludDY0X3QgcGFnZUlEKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5t
bQkocmV2aXNpb24gMTM2MDg3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICsz
Nyw3IEBACiAjaW1wb3J0ICJXS1VSTFJlcXVlc3QuaCIKICNpbXBvcnQgIldLVVJMUmVxdWVzdE5T
LmgiCiAjaW1wb3J0ICJXZWJDb250ZXh0LmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKICNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRMb2Fk
RGVsZWdhdGUuaCIKQEAgLTUzLDcgKzU0LDYgQEAgc3RhdGljIGlubGluZSBOU1VSTCAqYXV0b3Jl
bGVhc2VkKFdLVVJMUgogICAgIHJldHVybiBbKE5TVVJMICopV0tVUkxDb3B5Q0ZVUkwoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgd2tVUkwuZ2V0KCkpIGF1dG9yZWxlYXNlXTsKIH0KIAotCiBAaW50ZXJm
YWNlIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRhdGEgOiBOU09iamVjdCB7CiBAcHVibGlj
CiAgICAgLy8gVW5kZXJseWluZyBXS1BhZ2VSZWYuCkBAIC02OCwxMyArNjgsNiBAQCBAaW50ZXJm
YWNlIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckRhCiBAZW5kCiAKIAotQGludGVyZmFjZSBX
S0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKCkKLQotQHByb3BlcnR5KHJlYWRvbmx5KSBXS1Bh
Z2VSZWYgX3BhZ2VSZWY7Ci0KLUBlbmQKLQotCiBAaW1wbGVtZW50YXRpb24gV0tCcm93c2luZ0Nv
bnRleHRDb250cm9sbGVyCiAKIC0gKHZvaWQpZGVhbGxvYwpAQCAtNDE4LDYgKzQxMSwxMSBAQCAt
IChpZClfaW5pdFdpdGhQYWdlUmVmOihXS1BhZ2VSZWYpcGFnZVJlCiAgICAgcmV0dXJuIHNlbGY7
CiB9CiAKKysgKFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKV9icm93c2luZ0NvbnRleHRD
b250cm9sbGVyRm9yUGFnZVJlZjooV0tQYWdlUmVmKXBhZ2VSZWYKK3sKKyAgICByZXR1cm4gKFdL
QnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKVdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5sb2Fk
ZXJDbGllbnQoKS5jbGllbnQoKS5jbGllbnRJbmZvOworfQorCiArIChOU011dGFibGVTZXQgKilj
dXN0b21TY2hlbWVzCiB7CiAgICAgc3RhdGljIE5TTXV0YWJsZVNldCAqY3VzdG9tU2NoZW1lcyA9
IFtbTlNNdXRhYmxlU2V0IGFsbG9jXSBpbml0XTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckludGVybmFsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRl
eHRDb250cm9sbGVySW50ZXJuYWwuaAkocmV2aXNpb24gMTM2MDg3KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMTIgQEAgQGludGVyZmFjZSBXS0Jyb3dzaW5n
Q29udGV4dENvbnRyb2xsZXIgKAogCiAvKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9t
IGFzc29jaWF0ZSB2aWV3LiAqLwogLSAoaWQpX2luaXRXaXRoUGFnZVJlZjooV0tQYWdlUmVmKXBh
Z2VSZWY7CisKKy8qIFJldHVybnMgYSBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgYXNzb2Np
YXRlZCB3aXRoIHRoZSBXS1BhZ2VSZWYuICovCisrIChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xs
ZXIgKilfYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckZvclBhZ2VSZWY6KFdLUGFnZVJlZilwYWdl
UmVmOworCitAcHJvcGVydHkocmVhZG9ubHkpIFdLUGFnZVJlZiBfcGFnZVJlZjsKKwogKyAoTlNN
dXRhYmxlU2V0ICopY3VzdG9tU2NoZW1lczsKIAogQGVuZApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tDb25uZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLQ29ubmVjdGlvbi5tbQkocmV2aXNpb24gMTM2MDg3
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tDb25uZWN0aW9uLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw3IEBACiAjaW1wb3J0ICJXS0Nvbm5lY3Rpb24uaCIK
ICNpbXBvcnQgIldLQ29ubmVjdGlvbkludGVybmFsLmgiCiAKLSNpbXBvcnQgIkFyZ3VtZW50Q29k
ZXJzTWFjLmgiCi0jaW1wb3J0ICJBcmd1bWVudERlY29kZXIuaCIKLSNpbXBvcnQgIkFyZ3VtZW50
RW5jb2Rlci5oIgorI2ltcG9ydCAiT2JqQ09iamVjdEdyYXBoLmgiCiAjaW1wb3J0ICJXS0Nvbm5l
Y3Rpb25SZWYuaCIKICNpbXBvcnQgIldLRGF0YS5oIgogI2ltcG9ydCAiV0tSZXRhaW5QdHIuaCIK
QEAgLTY0LDEzICs2MiwxMCBAQCAtICh2b2lkKWRlYWxsb2MKIAogLSAodm9pZClzZW5kTWVzc2Fn
ZVdpdGhOYW1lOihOU1N0cmluZyAqKW1lc3NhZ2VOYW1lIGJvZHk6KGlkKW1lc3NhZ2VCb2R5CiB7
Ci0gICAgT3duUHRyPENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rlcj4gbWVzc2FnZURhdGEgPSBDb3Jl
SVBDOjpBcmd1bWVudEVuY29kZXI6OmNyZWF0ZSgpOwotICAgIGVuY29kZSgqbWVzc2FnZURhdGEs
IG1lc3NhZ2VCb2R5KTsKLQogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a01lc3NhZ2VO
YW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpbWVz
c2FnZU5hbWUpKTsKLSAgICBXS1JldGFpblB0cjxXS0RhdGFSZWY+IHdrTWVzc2FnZUJvZHkgPSBh
ZG9wdFdLKFdLRGF0YUNyZWF0ZShtZXNzYWdlRGF0YS0+YnVmZmVyKCksIG1lc3NhZ2VEYXRhLT5i
dWZmZXJTaXplKCkpKTsKKyAgICBSZWZQdHI8T2JqQ09iamVjdEdyYXBoPiB3a01lc3NhZ2VCb2R5
ID0gT2JqQ09iamVjdEdyYXBoOjpjcmVhdGUobWVzc2FnZUJvZHkpOwogCi0gICAgV0tDb25uZWN0
aW9uUG9zdE1lc3NhZ2UoX2RhdGEtPl9jb25uZWN0aW9uUmVmLmdldCgpLCB3a01lc3NhZ2VOYW1l
LmdldCgpLCB3a01lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0Nvbm5lY3Rpb25Qb3N0TWVzc2Fn
ZShfZGF0YS0+X2Nvbm5lY3Rpb25SZWYuZ2V0KCksIHdrTWVzc2FnZU5hbWUuZ2V0KCksIChXS1R5
cGVSZWYpd2tNZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKICNwcmFnbWEgbWFyayBEZWxlZ2F0ZXMK
QEAgLTkzLDE3ICs4OCwxMCBAQCBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShXS0Nvbm5l
Y3RpCiB7CiAgICAgV0tDb25uZWN0aW9uICpjb25uZWN0aW9uID0gKFdLQ29ubmVjdGlvbiAqKWNs
aWVudEluZm87CiAgICAgaWYgKFtjb25uZWN0aW9uLmRlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoY29ubmVjdGlvbjpkaWRSZWNlaXZlTWVzc2FnZVdpdGhOYW1lOmJvZHk6KV0p
IHsKLSAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZk1lc3NhZ2VOYW1lID0gYWRvcHRD
RihXS1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtZXNzYWdlTmFtZSkp
OwotCi0gICAgICAgIFdLRGF0YVJlZiBtZXNzYWdlRGF0YSA9IChXS0RhdGFSZWYpbWVzc2FnZUJv
ZHk7Ci0gICAgICAgIE93blB0cjxDb3JlSVBDOjpBcmd1bWVudERlY29kZXI+IGRlY29kZXIgPSBD
b3JlSVBDOjpBcmd1bWVudERlY29kZXI6OmNyZWF0ZShXS0RhdGFHZXRCeXRlcyhtZXNzYWdlRGF0
YSksIFdLRGF0YUdldFNpemUobWVzc2FnZURhdGEpKTsKLQotICAgICAgICBSZXRhaW5QdHI8aWQ+
IG1lc3NhZ2VEaWN0aW9uYXJ5OwotICAgICAgICAvLyBGSVhNRTogRG9uJ3QganVzdCBzaWxlbnRs
eSBkcm9wIGRlY29kaW5nIGZhaWx1cmVzIG9uIHRoZSBncm91bmQuCi0gICAgICAgIGlmICghZGVj
b2RlKGRlY29kZXIuZ2V0KCksIG1lc3NhZ2VEaWN0aW9uYXJ5KSkKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBuc01lc3NhZ2VOYW1lID0gYWRvcHROUygo
TlNTdHJpbmcgKilXS1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtZXNz
YWdlTmFtZSkpOworICAgICAgICBSZXRhaW5QdHI8aWQ+IG5zTWVzc2FnZUJvZHkgPSAoKE9iakNP
YmplY3RHcmFwaCopbWVzc2FnZUJvZHkpLT5yb290T2JqZWN0KCk7CiAKLSAgICAgICAgW2Nvbm5l
Y3Rpb24uZGVsZWdhdGUgY29ubmVjdGlvbjpjb25uZWN0aW9uIGRpZFJlY2VpdmVNZXNzYWdlV2l0
aE5hbWU6KE5TU3RyaW5nICopY2ZNZXNzYWdlTmFtZS5nZXQoKSBib2R5Om1lc3NhZ2VEaWN0aW9u
YXJ5LmdldCgpXTsKKyAgICAgICAgW2Nvbm5lY3Rpb24uZGVsZWdhdGUgY29ubmVjdGlvbjpjb25u
ZWN0aW9uIGRpZFJlY2VpdmVNZXNzYWdlV2l0aE5hbWU6bnNNZXNzYWdlTmFtZS5nZXQoKSBib2R5
Om5zTWVzc2FnZUJvZHkuZ2V0KCldOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTM2MDg3
KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC04MTEsNiArODExLDEwIEBACiAJCUJDODY5OUI3MTE2QUFEQUEwMDJB
OTI1QiAvKiBXS1ZpZXdJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM4Njk5QjQxMTZBQURBQTAwMkE5MjVCIC8qIFdLVmlld0ludGVybmFs
LmggKi87IH07CiAJCUJDODc4MEZDMTE2MUMyQjgwMENDMjc2OCAvKiBQbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzg3ODBGQjExNjFDMkI4MDBDQzI3NjggLyogUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5o
ICovOyB9OwogCQlCQzhBNTAxNTExNzY1RjU2MDA3NTc1NzMgLyogV0tSZXRhaW5QdHIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOEE1MDE0MTE3NjVG
NTYwMDc1NzU3MyAvKiBXS1JldGFpblB0ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUJDOEFDQTEzMTY2NzBEODkwMDRDMTk0MSAvKiBPYmpDT2Jq
ZWN0R3JhcGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDOEFDQTBGMTY2NzBEN0EwMDRDMTk0MSAvKiBPYmpDT2JqZWN0R3JhcGguaCAqLzsgfTsKKwkJ
QkM4QUNBMTQxNjY3MEQ4OTAwNEMxOTQxIC8qIE9iakNPYmplY3RHcmFwaC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOEFDQTEwMTY2NzBEN0IwMDRD
MTk0MSAvKiBPYmpDT2JqZWN0R3JhcGgubW0gKi87IH07CisJCUJDOEFDQTE1MTY2NzBEODkwMDRD
MTk0MSAvKiBPYmpDT2JqZWN0R3JhcGhDb2RlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOEFDQTExMTY2NzBEN0UwMDRDMTk0MSAvKiBPYmpDT2Jq
ZWN0R3JhcGhDb2RlcnMuaCAqLzsgfTsKKwkJQkM4QUNBMTYxNjY3MEQ4OTAwNEMxOTQxIC8qIE9i
akNPYmplY3RHcmFwaENvZGVycy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDOEFDQTEyMTY2NzBEODMwMDRDMTk0MSAvKiBPYmpDT2JqZWN0R3JhcGhD
b2RlcnMubW0gKi87IH07CiAJCUJDOEYyRjJBMTYyNzNBMkMwMDVGQUNCNSAvKiBXS1dlYlByb2Nl
c3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzhGMkYyODE2MjczQTJCMDA1RkFDQjUgLyogV0tX
ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tICovOyB9OwogCQlCQzhG
MkYyQjE2MjczQTJDMDA1RkFDQjUgLyogV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzhGMkYyOTE2MjczQTJDMDA1RkFDQjUgLyogV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNv
bnRleHRDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCAp
OyB9OyB9OwogCQlCQzhGMkYyRTE2MjczQUNDMDA1RkFDQjUgLyogV0tXZWJQcm9jZXNzUGx1Z0lu
QnJvd3NlckNvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOEYyRjJEMTYyNzNBQ0IwMDVGQUNCNSAvKiBXS1dl
YlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oICovOyB9OwpA
QCAtMjA3NSw2ICsyMDc5LDEwIEBACiAJCUJDODdERkE5MTAxODEwMTQwMDU2NDIxNiAvKiBsaWJp
Y3Vjb3JlLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJpY3Vjb3JlLmR5bGliOyBw
YXRoID0gL3Vzci9saWIvbGliaWN1Y29yZS5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+
IjsgfTsKIAkJQkM4QTUwMTAxMTc2NUFGNzAwNzU3NTczIC8qIEluZm8ucGxpc3QgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnBsaXN0LnhtbDsgbmFtZSA9IEluZm8ucGxpc3Q7IHBhdGggPSBXZWJQcm9jZXNzL0lu
Zm8ucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEE1MDE0MTE3NjVGNTYw
MDc1NzU3MyAvKiBXS1JldGFpblB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS1JldGFpblB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzhBQ0EwRjE2
NjcwRDdBMDA0QzE5NDEgLyogT2JqQ09iamVjdEdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE9iakNPYmplY3RHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCQzhBQ0ExMDE2NjcwRDdCMDA0QzE5NDEgLyogT2JqQ09iamVjdEdyYXBoLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gT2JqQ09iamVjdEdyYXBoLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzhBQ0ExMTE2NjcwRDdFMDA0QzE5NDEgLyog
T2JqQ09iamVjdEdyYXBoQ29kZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE9iakNPYmplY3RHcmFwaENvZGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
QzhBQ0ExMjE2NjcwRDgzMDA0QzE5NDEgLyogT2JqQ09iamVjdEdyYXBoQ29kZXJzLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gT2JqQ09iamVjdEdyYXBoQ29kZXJz
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzhGMkYyODE2MjczQTJCMDA1RkFD
QjUgLyogV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJQcm9jZXNzUGx1Z0luQnJv
d3NlckNvbnRleHRDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
QzhGMkYyOTE2MjczQTJDMDA1RkFDQjUgLyogV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRl
eHRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2ViUHJv
Y2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQzhGMkYyRDE2MjczQUNCMDA1RkFDQjUgLyogV0tXZWJQcm9jZXNzUGx1Z0lu
QnJvd3NlckNvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVySW50
ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3NzUsNiArMzc4MywxMCBA
QAogCQlCQzExMUI1QTExMkY2MjgyMDAzMzdCQUIgLyogbWFjICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlCQzhBQ0EwRjE2NjcwRDdBMDA0QzE5NDEgLyog
T2JqQ09iamVjdEdyYXBoLmggKi8sCisJCQkJQkM4QUNBMTAxNjY3MEQ3QjAwNEMxOTQxIC8qIE9i
akNPYmplY3RHcmFwaC5tbSAqLywKKwkJCQlCQzhBQ0ExMTE2NjcwRDdFMDA0QzE5NDEgLyogT2Jq
Q09iamVjdEdyYXBoQ29kZXJzLmggKi8sCisJCQkJQkM4QUNBMTIxNjY3MEQ4MzAwNEMxOTQxIC8q
IE9iakNPYmplY3RHcmFwaENvZGVycy5tbSAqLywKIAkJCQlFMTc5RkQ5QjEzNEQzODA2MDAxNUI4
ODMgLyogQXJndW1lbnRDb2RlcnNNYWMuaCAqLywKIAkJCQlFMTc5RkQ5RTEzNEQzODI1MDAxNUI4
ODMgLyogQXJndW1lbnRDb2RlcnNNYWMubW0gKi8sCiAJCQkJRTFBMzE3MzExMzRDRUE2QzAwN0M5
QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCAqLywKQEAgLTM3ODksMTAgKzM4MDEsMTAgQEAKIAkJ
CQlDMDJCRkYxRDEyNTE1MDJFMDA5Q0NCRUEgLyogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudE1hYy5t
bSAqLywKIAkJCQkzMUVBMjVEMDEzNEY3OEIyMDA1QjE0NTIgLyogTmF0aXZlV2ViTW91c2VFdmVu
dE1hYy5tbSAqLywKIAkJCQlERjU4QzYzNTEzNzFBQ0EwMDBGOUEzN0MgLyogTmF0aXZlV2ViV2hl
ZWxFdmVudE1hYy5tbSAqLywKLQkJCQlFMTk1ODJEMjE1M0NCRkQ3MDBCNjA4NzUgLyogUERGS2l0
SW1wb3J0cy5oICovLAotCQkJCUUxOTU4MkQ0MTUzQ0MwNTMwMEI2MDg3NSAvKiBQREZLaXRJbXBv
cnRzLm1tICovLAogCQkJCUM1NzRBNTdGMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlw
ZXMuaCAqLywKIAkJCQlDNTc0QTU4MDEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVz
Lm1tICovLAorCQkJCUUxOTU4MkQyMTUzQ0JGRDcwMEI2MDg3NSAvKiBQREZLaXRJbXBvcnRzLmgg
Ki8sCisJCQkJRTE5NTgyRDQxNTNDQzA1MzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMubW0gKi8s
CiAJCQkJQkNGNTA1RTUxMjQzMDQ3QjAwNTk1NUFFIC8qIFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZv
LmggKi8sCiAJCQkJQkNGNTA1RTYxMjQzMDQ3QjAwNTk1NUFFIC8qIFBsYXRmb3JtQ2VydGlmaWNh
dGVJbmZvLm1tICovLAogCQkJCUUxQ0MxQjhGMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm9N
YWMubW0gKi8sCkBAIC01MDAyLDYgKzUwMTQsOCBAQAogCQkJCTI5ODRGNTg5MTY0QkEwOTUwMDRC
QzBDNiAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTFGMDYwRTAxNjU0MzE3RjAwRjMyODFCIC8qIFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxNzU5NDRCMTY1NzA4MDQwMERENzcxRCAvKiBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkM4QUNBMTMxNjY3
MEQ4OTAwNEMxOTQxIC8qIE9iakNPYmplY3RHcmFwaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkM4
QUNBMTUxNjY3MEQ4OTAwNEMxOTQxIC8qIE9iakNPYmplY3RHcmFwaENvZGVycy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC01OTU2LDYgKzU5NzAsOCBAQAogCQkJCTI5ODRGNTg4MTY0QkEwOTUwMDRCQzBD
NiAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODFCIC8qIFdlYlJlc291cmNlTG9hZGVyTWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNzU5NDRBMTY1NzA4MDQwMERE
NzcxRCAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQkM4QUNBMTQxNjY3MEQ4OTAwNEMxOTQxIC8qIE9iakNPYmplY3RHcmFwaC5t
bSBpbiBTb3VyY2VzICovLAorCQkJCUJDOEFDQTE2MTY2NzBEODkwMDRDMTk0MSAvKiBPYmpDT2Jq
ZWN0R3JhcGhDb2RlcnMubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUNvZGVycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUNvZGVycy5oCShyZXZpc2lvbiAxMzYwODcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlVXNl
ck1lc3NhZ2VDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMTAgQEAKICNpbmNs
dWRlICJXZWJQYWdlR3JvdXBQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKIAorI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJPYmpDT2JqZWN0R3JhcGhDb2RlcnMuaCIKKyNlbmRp
ZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogLy8gQWRkcwpAQCAtNzEsNiArNzUsMTMgQEAgcHVi
bGljOgogICAgICAgICAgICAgZW5jb2RlciA8PCBwYWdlR3JvdXAtPnBhZ2VHcm91cElEKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAg
Y2FzZSBBUElPYmplY3Q6OlR5cGVPYmpDT2JqZWN0R3JhcGg6IHsKKyAgICAgICAgICAgIE9iakNP
YmplY3RHcmFwaCogb2JqZWN0R3JhcGggPSBzdGF0aWNfY2FzdDxPYmpDT2JqZWN0R3JhcGgqPiht
X3Jvb3QpOworICAgICAgICAgICAgZW5jb2RlciA8PCBJbmplY3RlZEJ1bmRsZU9iakNPYmplY3RH
cmFwaEVuY29kZXIob2JqZWN0R3JhcGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyNlbmRpZgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEyOCw2ICsxMzksMTYgQEAgcHVibGljOgogICAg
ICAgICAgICAgY29kZXIubV9yb290ID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUGFnZUdyb3Vw
KHBhZ2VHcm91cERhdGEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgICAgIGNhc2UgQVBJT2JqZWN0OjpUeXBlT2JqQ09iamVjdEdyYXBoOiB7
CisgICAgICAgICAgICBSZWZQdHI8T2JqQ09iamVjdEdyYXBoPiBvYmplY3RHcmFwaDsKKyAgICAg
ICAgICAgIEluamVjdGVkQnVuZGxlT2JqQ09iamVjdEdyYXBoRGVjb2RlciBvYmplY3RHcmFwaERl
Y29kZXIob2JqZWN0R3JhcGgsICZXZWJQcm9jZXNzOjpzaGFyZWQoKSk7CisgICAgICAgICAgICBp
ZiAoIWRlY29kZXItPmRlY29kZShvYmplY3RHcmFwaERlY29kZXIpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNvZGVyLm1fcm9vdCA9IG9iamVjdEdyYXBoLmdl
dCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1
Z0luLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW4ubW0JKHJldmlzaW9uIDEzNjA4NykKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlBy
b2Nlc3NQbHVnSW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMyw2ICsxMjMsMTIgQEAgLSAoaWQp
X2luaXRXaXRoUHJpbmNpcGFsQ2xhc3NJbnN0YW5jZTooaQogICAgIHJldHVybiBzZWxmOwogfQog
CistIChXS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIgKilfYnJvd3Nl
ckNvbnRleHRDb250cm9sbGVyRm9yQnVuZGxlUGFnZVJlZjooV0tCdW5kbGVQYWdlUmVmKXBhZ2VS
ZWYKK3sKKyAgICBBU1NFUlQoX2J1bmRsZVBhZ2VXcmFwcGVyQ2FjaGUuY29udGFpbnMocGFnZVJl
ZikpOworICAgIHJldHVybiBfYnVuZGxlUGFnZVdyYXBwZXJDYWNoZS5nZXQocGFnZVJlZikuZ2V0
KCk7Cit9CisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLV2ViUHJvY2Vzc1BsdWdJbkNvbnRy
b2xsZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L21hYy9XS1dlYlByb2Nlc3NQbHVnSW5JbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVn
SW5JbnRlcm5hbC5oCShyZXZpc2lvbiAxMzYwODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luSW50ZXJuYWwuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQCBAaW50ZXJmYWNlIFdLV2ViUHJvY2Vzc1Bs
dWdJbkNvbnRyb2xsZXIgCiArIChXS1dlYlByb2Nlc3NQbHVnSW5Db250cm9sbGVyICopX3NoYXJl
ZDsKIC0gKGlkKV9pbml0V2l0aFByaW5jaXBhbENsYXNzSW5zdGFuY2U6KGlkPFdLV2ViUHJvY2Vz
c1BsdWdJbj4pcHJpbmNpcGFsQ2xhc3NJbnN0YW5jZSBidW5kbGVSZWY6KFdLQnVuZGxlUmVmKWJ1
bmRsZVJlZjsKIAorLSAoV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVy
ICopX2Jyb3dzZXJDb250ZXh0Q29udHJvbGxlckZvckJ1bmRsZVBhZ2VSZWY6KFdLQnVuZGxlUGFn
ZVJlZilwYWdlUmVmOworCiBAZW5kCiAKICNlbmRpZiAvLyBkZWZpbmVkKF9fTFA2NF9fKSAmJiBk
ZWZpbmVkKF9fY2xhbmdfXykK
</data>
<flag name="review"
          id="192492"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>