<?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>30155</bug_id>
          
          <creation_ts>2009-10-07 01:08:38 -0700</creation_ts>
          <short_desc>Factor PolicyChecker out of FrameLoader</short_desc>
          <delta_ts>2009-10-07 20:17:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>29947</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>michaeln</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>152979</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-07 01:08:38 -0700</bug_when>
    <thetext>The job of this class is to manage the policy callbacks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152984</commentid>
    <comment_count>1</comment_count>
      <attachid>40770</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-07 01:15:33 -0700</bug_when>
    <thetext>Created attachment 40770
LoaderPolicy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152993</commentid>
    <comment_count>2</comment_count>
      <attachid>40774</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-07 01:55:18 -0700</bug_when>
    <thetext>Created attachment 40774
LoaderPolicy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153088</commentid>
    <comment_count>3</comment_count>
      <attachid>40774</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-07 09:54:47 -0700</bug_when>
    <thetext>Comment on attachment 40774
LoaderPolicy

It&apos;s great to do this.

I&apos;m don&apos;t think the object should be named &quot;loader policy&quot;, because the object is not a policy. I think it&apos;s a &quot;policy xxx&quot; where &quot;xxx&quot; needs to be some other noun. PolicyChecker perhaps? I know it&apos;s elegant to have this have a single word name, &quot;policy&quot;, but I don&apos;t think it makes enough logical sense.

&gt; +    // Is the activeDocumentLoader always us?
&gt; +    ASSERT(frameLoader()-&gt;activeDocumentLoader());

What is &quot;us&quot; here? This is the main resource loader, not a document loader. I suppose you mean the document loader that&apos;s asking for this main resource load, so maybe I&apos;m just being too picky.

&gt; +        // FIXME: Seriously?  This is why we can&apos;t have nice things.

This code was definitely controversial when first created. I don&apos;t want to rain on the fun, but I don&apos;t think the comment adds much. A more sober comment might carry some information that could help future programmers. It&apos;s obvious to you what&apos;s wrong, but might not be to them. Your point is that loading a document should be possible without having to create a Frame and a FrameView, I suppose. Or perhaps without so much fakery and so many function calls? As I said, the point should be obvious, but it&apos;s not, even to me!

I&apos;m going to say review+ but I have serious reservations about the name of this new object, and I&apos;m not entirely sure I understand the boundaries of what does and does not go in the object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153096</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-07 10:07:42 -0700</bug_when>
    <thetext>&gt; I&apos;m don&apos;t think the object should be named &quot;loader policy&quot;, because the object
&gt; is not a policy. I think it&apos;s a &quot;policy xxx&quot; where &quot;xxx&quot; needs to be some other
&gt; noun. PolicyChecker perhaps? I know it&apos;s elegant to have this have a single
&gt; word name, &quot;policy&quot;, but I don&apos;t think it makes enough logical sense.

I was tempted to use PolicyChecker too, but there&apos;s already an object named PolicyCheck.  Maybe I should rename PolicyCheck to PolicyCallback?

&gt; &gt; +    // Is the activeDocumentLoader always us?
&gt; &gt; +    ASSERT(frameLoader()-&gt;activeDocumentLoader());
&gt; 
&gt; What is &quot;us&quot; here? This is the main resource loader, not a document loader. I
&gt; suppose you mean the document loader that&apos;s asking for this main resource load,
&gt; so maybe I&apos;m just being too picky.

I&apos;ll remove this comment.  I was wondering if there was a more direct way to get to this object than via the frame loader.

&gt; &gt; +        // FIXME: Seriously?  This is why we can&apos;t have nice things.
&gt; 
&gt; This code was definitely controversial when first created. I don&apos;t want to rain
&gt; on the fun, but I don&apos;t think the comment adds much.

Yeah, I&apos;ll remove this comment.   We might have to do something abou that code eventually, but the comment isn&apos;t helping the situation.

&gt; A more sober comment might
&gt; carry some information that could help future programmers. It&apos;s obvious to you
&gt; what&apos;s wrong, but might not be to them. Your point is that loading a document
&gt; should be possible without having to create a Frame and a FrameView, I suppose.
&gt; Or perhaps without so much fakery and so many function calls? As I said, the
&gt; point should be obvious, but it&apos;s not, even to me!

The problem with that code is a lot of downstream code in the loader has to be aware that it might be living in a fake page / frame.   For example, when we detect mixed content, we send a notification to the FrameLoaderClient that we loaded some insecure content.  However, if we do that in the fake page, no one is listening...

&gt; I&apos;m going to say review+ but I have serious reservations about the name of this
&gt; new object, and I&apos;m not entirely sure I understand the boundaries of what does
&gt; and does not go in the object.

This object is in charge of managing the state associated with the FrameLoaderClient::*decide* methods.  So, it knows which decisions are in flight and what kind of decisions they are.  It can also mutate this state, for example by stopping or canceling them.  I&apos;d like to make the API slightly tighter.  You&apos;ll notice that most of the call sites make a series of calls into m_policy.  Ideally, they&apos;d make one call that encapsulates what policy they&apos;d like to check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153155</commentid>
    <comment_count>5</comment_count>
      <attachid>40814</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-07 12:50:25 -0700</bug_when>
    <thetext>Created attachment 40814
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153161</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-07 13:04:27 -0700</bug_when>
    <thetext>My plan is to land the above patch, which incorporates Darin&apos;s comments.  Let me know if you&apos;d like another chance to comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153242</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-07 20:17:23 -0700</bug_when>
    <thetext>Committed r49284: &lt;http://trac.webkit.org/changeset/49284&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40770</attachid>
            <date>2009-10-07 01:15:33 -0700</date>
            <delta_ts>2009-10-07 01:55:14 -0700</delta_ts>
            <desc>LoaderPolicy</desc>
            <filename>bug-30155-20091007011532.patch</filename>
            <type>text/plain</type>
            <size>50532</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzEwZTM0Zi4uZDQxMDkwMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NCBAQAorMjAwOS0xMC0wNyAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZhY3RvciBMb2FkZXJQb2xpY3kgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDE1NQorCisgICAg
ICAgIFRoaXMgcGF0Y2ggc2VwYXJhdGVzIExvYWRlclBvbGljeSBmcm9tIEZyYW1lTG9hZGVyLiAg
TG9hZGVyIHBvbGljeSBpcworICAgICAgICBpbiBjaGFuZ2Ugb2YgbWFuYWdpbmcgdGhlIEZyYW1l
TG9hZGVyQ2xpZW50IGNhbGxiYWNrcy4gIElkZWFsbHksIGl0CisgICAgICAgIHNob3VsZG4ndCBr
bm93IGFueXRoaW5nIGFib3V0IEZyYW1lTG9hZGVyLCBidXQgSSBjb3VsZG4ndCBxdWl0ZSByZW1v
dmUKKyAgICAgICAgYWxsIGtub3dsZWRnZSAoYWx0aG91Z2ggd2UgbWlnaHQgYmUgYWJsZSB0byBk
byBtb3JlIGxhdGVyKS4gIEluIGEKKyAgICAgICAgZnV0dXJlIHBhdGNoLCBJJ2xsIG1vdmUgTG9h
ZGVyUG9saWN5IGludG8gYSBzZXBhcmF0ZSBmaWxlLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFVSTCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
bG9hZFdpdGhEb2N1bWVudExvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJQb2xpY3k6
OmhhbmRsZVVuaW1wbGVtZW50YWJsZVBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJQ
b2xpY3k6OmNhbm5vdFNob3dNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJQb2xp
Y3k6OkxvYWRlclBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJQb2xpY3k6OmNoZWNr
TmF2aWdhdGlvblBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJQb2xpY3k6OmNoZWNr
Q29udGVudFBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2hvdWxkUmVs
b2FkVG9IYW5kbGVVbnJlYWNoYWJsZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6c3RvcEFsbExvYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyUG9saWN5OjpjYW5j
ZWxDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJQb2xpY3k6OnN0b3BDaGVjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpMb2FkZXJQb2xpY3k6OmNvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5
KToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlclBvbGljeTo6Y29udGludWVMb2FkQWZ0ZXJXaWxs
U3VibWl0Rm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y29udGludWVMb2Fk
QWZ0ZXJXaWxsU3VibWl0Rm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9h
ZFBvc3RSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjb250aW51ZUZy
YWdtZW50U2Nyb2xsQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6Okxv
YWRlclBvbGljeTo6Y2hlY2tOZXdXaW5kb3dQb2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6TG9h
ZGVyUG9saWN5Ojpjb250aW51ZUFmdGVyTmV3V2luZG93UG9saWN5KToKKyAgICAgICAgKFdlYkNv
cmU6OkxvYWRlclBvbGljeTo6Y29udGludWVBZnRlck5hdmlnYXRpb25Qb2xpY3kpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGlj
eSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpM
b2FkZXJQb2xpY3k6OmxvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlclBvbGljeTo6
c2V0TG9hZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyUG9saWN5OjpkZWxlZ2F0ZUlz
RGVjaWRpbmdOYXZpZ2F0aW9uUG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlclBvbGlj
eTo6ZGVsZWdhdGVJc0hhbmRsaW5nVW5pbXBsZW1lbnRhYmxlUG9saWN5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpwb2xpY3kpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRl
ckNsaWVudC5oOgorICAgICAgICAqIGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TWFpblJlc291cmNlTG9hZGVyOjpkaWRDYW5jZWwpOgorICAgICAgICAo
V2ViQ29yZTo6TWFpblJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TWFpblJlc291cmNlTG9hZGVyOjpjb250aW51ZUFmdGVyQ29udGVudFBvbGljeSk6
CisgICAgICAgIChXZWJDb3JlOjpNYWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25z
ZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ltYWdlOjpkYXRhQ2hhbmdlZCk6CisKIDIwMDktMTAtMDYgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCmluZGV4IDk5NjZkNDEuLjhhOTA5NzYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAKQEAgLTE2NiwxMiArMTY2LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5SZWZlclRv
UGFyZW50RnJhbWVFbmNvZGluZyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IEZyYW1lCiBGcmFt
ZUxvYWRlcjo6RnJhbWVMb2FkZXIoRnJhbWUqIGZyYW1lLCBGcmFtZUxvYWRlckNsaWVudCogY2xp
ZW50KQogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAs
IG1fcG9saWN5KGZyYW1lKQogICAgICwgbV9zdGF0ZShGcmFtZVN0YXRlQ29tbWl0dGVkUGFnZSkK
ICAgICAsIG1fbG9hZFR5cGUoRnJhbWVMb2FkVHlwZVN0YW5kYXJkKQotICAgICwgbV9wb2xpY3lM
b2FkVHlwZShGcmFtZUxvYWRUeXBlU3RhbmRhcmQpCiAgICAgLCBtX2RlbGVnYXRlSXNIYW5kbGlu
Z1Byb3Zpc2lvbmFsTG9hZEVycm9yKGZhbHNlKQotICAgICwgbV9kZWxlZ2F0ZUlzRGVjaWRpbmdO
YXZpZ2F0aW9uUG9saWN5KGZhbHNlKQotICAgICwgbV9kZWxlZ2F0ZUlzSGFuZGxpbmdVbmltcGxl
bWVudGFibGVQb2xpY3koZmFsc2UpCiAgICAgLCBtX2ZpcnN0TGF5b3V0RG9uZShmYWxzZSkKICAg
ICAsIG1fcXVpY2tSZWRpcmVjdENvbWluZyhmYWxzZSkKICAgICAsIG1fc2VudFJlZGlyZWN0Tm90
aWZpY2F0aW9uKGZhbHNlKQpAQCAtMTk3OCw3ICsxOTc2LDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6
bG9hZFVSTChjb25zdCBLVVJMJiBuZXdVUkwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGNvbnN0
IFN0cmkKICAgICBOYXZpZ2F0aW9uQWN0aW9uIGFjdGlvbihuZXdVUkwsIG5ld0xvYWRUeXBlLCBp
c0Zvcm1TdWJtaXNzaW9uLCBldmVudCk7CiAKICAgICBpZiAoIXRhcmdldEZyYW1lICYmICFmcmFt
ZU5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNoZWNrTmV3V2luZG93UG9saWN5KGFjdGlvbiwg
cmVxdWVzdCwgZm9ybVN0YXRlLnJlbGVhc2UoKSwgZnJhbWVOYW1lKTsKKyAgICAgICAgcG9saWN5
KCktPmNoZWNrTmV3V2luZG93UG9saWN5KGFjdGlvbiwgRnJhbWVMb2FkZXI6OmNhbGxDb250aW51
ZUxvYWRBZnRlck5ld1dpbmRvd1BvbGljeSwKKyAgICAgICAgICAgIHJlcXVlc3QsIGZvcm1TdGF0
ZS5yZWxlYXNlKCksIGZyYW1lTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE5
OTEsOSArMTk5MCw5IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRVUkwoY29uc3QgS1VSTCYgbmV3
VVJMLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBjb25zdCBTdHJpCiAgICAgLy8gd29yayBwcm9w
ZXJseS4KICAgICBpZiAoc2hvdWxkU2Nyb2xsVG9BbmNob3IoaXNGb3JtU3VibWlzc2lvbiwgbmV3
TG9hZFR5cGUsIG5ld1VSTCkpIHsKICAgICAgICAgb2xkRG9jdW1lbnRMb2FkZXItPnNldFRyaWdn
ZXJpbmdBY3Rpb24oYWN0aW9uKTsKLSAgICAgICAgc3RvcFBvbGljeUNoZWNrKCk7Ci0gICAgICAg
IG1fcG9saWN5TG9hZFR5cGUgPSBuZXdMb2FkVHlwZTsKLSAgICAgICAgY2hlY2tOYXZpZ2F0aW9u
UG9saWN5KHJlcXVlc3QsIG9sZERvY3VtZW50TG9hZGVyLmdldCgpLCBmb3JtU3RhdGUucmVsZWFz
ZSgpLAorICAgICAgICBwb2xpY3koKS0+c3RvcENoZWNrKCk7CisgICAgICAgIHBvbGljeSgpLT5z
ZXRMb2FkVHlwZShuZXdMb2FkVHlwZSk7CisgICAgICAgIHBvbGljeSgpLT5jaGVja05hdmlnYXRp
b25Qb2xpY3kocmVxdWVzdCwgb2xkRG9jdW1lbnRMb2FkZXIuZ2V0KCksIGZvcm1TdGF0ZS5yZWxl
YXNlKCksCiAgICAgICAgICAgICBjYWxsQ29udGludWVGcmFnbWVudFNjcm9sbEFmdGVyTmF2aWdh
dGlvblBvbGljeSwgdGhpcyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gbXVzdCBncmFiIHRo
aXMgbm93LCBzaW5jZSB0aGlzIGxvYWQgbWF5IHN0b3AgdGhlIHByZXZpb3VzIGxvYWQgYW5kIGNs
ZWFyIHRoaXMgZmxhZwpAQCAtMjA0Miw3ICsyMDQxLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9h
ZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1l
LAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY2hlY2tOZXdXaW5kb3dQb2xpY3koTmF2
aWdhdGlvbkFjdGlvbihyZXF1ZXN0LnVybCgpLCBOYXZpZ2F0aW9uVHlwZU90aGVyKSwgcmVxdWVz
dCwgMCwgZnJhbWVOYW1lKTsKKyAgICBwb2xpY3koKS0+Y2hlY2tOZXdXaW5kb3dQb2xpY3koTmF2
aWdhdGlvbkFjdGlvbihyZXF1ZXN0LnVybCgpLCBOYXZpZ2F0aW9uVHlwZU90aGVyKSwgRnJhbWVM
b2FkZXI6OmNhbGxDb250aW51ZUxvYWRBZnRlck5ld1dpbmRvd1BvbGljeSwgcmVxdWVzdCwgMCwg
ZnJhbWVOYW1lKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFdpdGhOYXZpZ2F0aW9uQWN0
aW9uKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgTmF2aWdhdGlvbkFjdGlv
biYgYWN0aW9uLCBib29sIGxvY2tIaXN0b3J5LCBGcmFtZUxvYWRUeXBlIHR5cGUsIFBhc3NSZWZQ
dHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUpCkBAIC0yMTAwLDMwICsyMDk5LDMwIEBAIHZvaWQgRnJh
bWVMb2FkZXI6OmxvYWRXaXRoRG9jdW1lbnRMb2FkZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwg
RnJhbWVMb2FkVHlwZSB0CiAgICAgaWYgKG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNoZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fcG9saWN5TG9hZFR5cGUgPSB0eXBlOworICAgIHBvbGlj
eSgpLT5zZXRMb2FkVHlwZSh0eXBlKTsKICAgICBSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUg
PSBwcnBGb3JtU3RhdGU7CiAgICAgYm9vbCBpc0Zvcm1TdWJtaXNzaW9uID0gZm9ybVN0YXRlOwog
CiAgICAgY29uc3QgS1VSTCYgbmV3VVJMID0gbG9hZGVyLT5yZXF1ZXN0KCkudXJsKCk7CiAKLSAg
ICBpZiAoc2hvdWxkU2Nyb2xsVG9BbmNob3IoaXNGb3JtU3VibWlzc2lvbiwgbV9wb2xpY3lMb2Fk
VHlwZSwgbmV3VVJMKSkgeworICAgIGlmIChzaG91bGRTY3JvbGxUb0FuY2hvcihpc0Zvcm1TdWJt
aXNzaW9uLCBwb2xpY3koKS0+bG9hZFR5cGUoKSwgbmV3VVJMKSkgewogICAgICAgICBSZWZQdHI8
RG9jdW1lbnRMb2FkZXI+IG9sZERvY3VtZW50TG9hZGVyID0gbV9kb2N1bWVudExvYWRlcjsKLSAg
ICAgICAgTmF2aWdhdGlvbkFjdGlvbiBhY3Rpb24obmV3VVJMLCBtX3BvbGljeUxvYWRUeXBlLCBp
c0Zvcm1TdWJtaXNzaW9uKTsKKyAgICAgICAgTmF2aWdhdGlvbkFjdGlvbiBhY3Rpb24obmV3VVJM
LCBwb2xpY3koKS0+bG9hZFR5cGUoKSwgaXNGb3JtU3VibWlzc2lvbik7CiAKICAgICAgICAgb2xk
RG9jdW1lbnRMb2FkZXItPnNldFRyaWdnZXJpbmdBY3Rpb24oYWN0aW9uKTsKLSAgICAgICAgc3Rv
cFBvbGljeUNoZWNrKCk7Ci0gICAgICAgIGNoZWNrTmF2aWdhdGlvblBvbGljeShsb2FkZXItPnJl
cXVlc3QoKSwgb2xkRG9jdW1lbnRMb2FkZXIuZ2V0KCksIGZvcm1TdGF0ZSwKKyAgICAgICAgcG9s
aWN5KCktPnN0b3BDaGVjaygpOworICAgICAgICBwb2xpY3koKS0+Y2hlY2tOYXZpZ2F0aW9uUG9s
aWN5KGxvYWRlci0+cmVxdWVzdCgpLCBvbGREb2N1bWVudExvYWRlci5nZXQoKSwgZm9ybVN0YXRl
LAogICAgICAgICAgICAgY2FsbENvbnRpbnVlRnJhZ21lbnRTY3JvbGxBZnRlck5hdmlnYXRpb25Q
b2xpY3ksIHRoaXMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChGcmFtZSogcGFyZW50ID0g
bV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKICAgICAgICAgICAgIGxvYWRlci0+c2V0T3ZlcnJp
ZGVFbmNvZGluZyhwYXJlbnQtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5vdmVycmlkZUVu
Y29kaW5nKCkpOwogCi0gICAgICAgIHN0b3BQb2xpY3lDaGVjaygpOworICAgICAgICBwb2xpY3ko
KS0+c3RvcENoZWNrKCk7CiAgICAgICAgIHNldFBvbGljeURvY3VtZW50TG9hZGVyKGxvYWRlcik7
CiAgICAgICAgIGlmIChsb2FkZXItPnRyaWdnZXJpbmdBY3Rpb24oKS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBsb2FkZXItPnNldFRyaWdnZXJpbmdBY3Rpb24oTmF2aWdhdGlvbkFjdGlvbihuZXdV
UkwsIG1fcG9saWN5TG9hZFR5cGUsIGlzRm9ybVN1Ym1pc3Npb24pKTsKKyAgICAgICAgICAgIGxv
YWRlci0+c2V0VHJpZ2dlcmluZ0FjdGlvbihOYXZpZ2F0aW9uQWN0aW9uKG5ld1VSTCwgcG9saWN5
KCktPmxvYWRUeXBlKCksIGlzRm9ybVN1Ym1pc3Npb24pKTsKIAotICAgICAgICBjaGVja05hdmln
YXRpb25Qb2xpY3kobG9hZGVyLT5yZXF1ZXN0KCksIGxvYWRlciwgZm9ybVN0YXRlLAorICAgICAg
ICBwb2xpY3koKS0+Y2hlY2tOYXZpZ2F0aW9uUG9saWN5KGxvYWRlci0+cmVxdWVzdCgpLCBsb2Fk
ZXIsIGZvcm1TdGF0ZSwKICAgICAgICAgICAgIGNhbGxDb250aW51ZUxvYWRBZnRlck5hdmlnYXRp
b25Qb2xpY3ksIHRoaXMpOwogICAgIH0KIH0KQEAgLTIxNjQsMTYgKzIxNjMsMTYgQEAgYm9vbCBG
cmFtZUxvYWRlcjo6d2lsbExvYWRNZWRpYUVsZW1lbnRVUkwoS1VSTCYgdXJsKQogICAgIHJldHVy
biBlcnJvci5pc051bGwoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6aGFuZGxlVW5pbXBsZW1l
bnRhYmxlUG9saWN5KGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQordm9pZCBMb2FkZXJQb2xp
Y3k6OmhhbmRsZVVuaW1wbGVtZW50YWJsZVBvbGljeShjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJv
cikKIHsKICAgICBtX2RlbGVnYXRlSXNIYW5kbGluZ1VuaW1wbGVtZW50YWJsZVBvbGljeSA9IHRy
dWU7Ci0gICAgbV9jbGllbnQtPmRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koZXJyb3Ip
OworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hVbmFibGVUb0ltcGxl
bWVudFBvbGljeShlcnJvcik7CiAgICAgbV9kZWxlZ2F0ZUlzSGFuZGxpbmdVbmltcGxlbWVudGFi
bGVQb2xpY3kgPSBmYWxzZTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6Y2Fubm90U2hvd01JTUVU
eXBlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQordm9pZCBMb2FkZXJQb2xpY3k6
OmNhbm5vdFNob3dNSU1FVHlwZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsK
LSAgICBoYW5kbGVVbmltcGxlbWVudGFibGVQb2xpY3kobV9jbGllbnQtPmNhbm5vdFNob3dNSU1F
VHlwZUVycm9yKHJlc3BvbnNlKSk7CisgICAgaGFuZGxlVW5pbXBsZW1lbnRhYmxlUG9saWN5KG1f
ZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y2Fubm90U2hvd01JTUVUeXBlRXJyb3IocmVzcG9u
c2UpKTsKIH0KIAogUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlcjo6aW50ZXJydXB0aW9uRm9yUG9s
aWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQpAQCAtMjE4MSwz
MyArMjE4MCwyNCBAQCBSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyOjppbnRlcnJ1cHRpb25Gb3JQ
b2xpY3lDaGFuZ2VFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlcwogICAgIHJldHVybiBtX2NsaWVu
dC0+aW50ZXJydXB0Rm9yUG9saWN5Q2hhbmdlRXJyb3IocmVxdWVzdCk7CiB9CiAKLXZvaWQgRnJh
bWVMb2FkZXI6OmNoZWNrTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5l
d1JlcXVlc3QsIE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lk
KiBhcmd1bWVudCkKK0xvYWRlclBvbGljeTo6TG9hZGVyUG9saWN5KEZyYW1lKiBmcmFtZSkKKyAg
ICA6IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2RlbGVnYXRlSXNEZWNpZGluZ05hdmlnYXRpb25Q
b2xpY3koZmFsc2UpCisgICAgLCBtX2RlbGVnYXRlSXNIYW5kbGluZ1VuaW1wbGVtZW50YWJsZVBv
bGljeShmYWxzZSkKKyAgICAsIG1fbG9hZFR5cGUoRnJhbWVMb2FkVHlwZVN0YW5kYXJkKQogewot
ICAgIGNoZWNrTmF2aWdhdGlvblBvbGljeShuZXdSZXF1ZXN0LCBhY3RpdmVEb2N1bWVudExvYWRl
cigpLCAwLCBmdW5jdGlvbiwgYXJndW1lbnQpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpjaGVj
a0NvbnRlbnRQb2xpY3koY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgQ29udGVudFBvbGljeURlY2lz
aW9uRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50KQordm9pZCBMb2FkZXJQb2xpY3k6
OmNoZWNrTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3Qs
IE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVu
dCkKIHsKLSAgICBBU1NFUlQoYWN0aXZlRG9jdW1lbnRMb2FkZXIoKSk7Ci0gICAgCi0gICAgLy8g
QWx3YXlzIHNob3cgY29udGVudCB3aXRoIHZhbGlkIHN1YnN0aXR1dGUgZGF0YS4KLSAgICBpZiAo
YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+c3Vic3RpdHV0ZURhdGEoKS5pc1ZhbGlkKCkpIHsKLSAg
ICAgICAgZnVuY3Rpb24oYXJndW1lbnQsIFBvbGljeVVzZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSNpZiBFTkFCTEUoRlRQRElSKQotICAgIC8vIFJlc3BlY3QgdGhlIGhpZGRlbiBGVFAg
RGlyZWN0b3J5IExpc3RpbmcgcHJlZiBzbyBpdCBjYW4gYmUgdGVzdGVkIGV2ZW4gaWYgdGhlIHBv
bGljeSBkZWxlZ2F0ZSBtaWdodCBvdGhlcndpc2UgZGlzYWxsb3cgaXQKLSAgICBTZXR0aW5ncyog
c2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwotICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0
aW5ncy0+Zm9yY2VGVFBEaXJlY3RvcnlMaXN0aW5ncygpICYmIE1JTUVUeXBlID09ICJhcHBsaWNh
dGlvbi94LWZ0cC1kaXJlY3RvcnkiKSB7Ci0gICAgICAgIGZ1bmN0aW9uKGFyZ3VtZW50LCBQb2xp
Y3lVc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCisgICAgY2hlY2tOYXZpZ2F0
aW9uUG9saWN5KG5ld1JlcXVlc3QsIG1fZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExv
YWRlcigpLCAwLCBmdW5jdGlvbiwgYXJndW1lbnQpOworfQogCit2b2lkIExvYWRlclBvbGljeTo6
Y2hlY2tDb250ZW50UG9saWN5KGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIENvbnRlbnRQb2xpY3lE
ZWNpc2lvbkZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCkKK3sKICAgICBtX3BvbGlj
eUNoZWNrLnNldChmdW5jdGlvbiwgYXJndW1lbnQpOwotICAgIG1fY2xpZW50LT5kaXNwYXRjaERl
Y2lkZVBvbGljeUZvck1JTUVUeXBlKCZGcmFtZUxvYWRlcjo6Y29udGludWVBZnRlckNvbnRlbnRQ
b2xpY3ksCi0gICAgICAgIE1JTUVUeXBlLCBhY3RpdmVEb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0
KCkpOworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hEZWNpZGVQb2xp
Y3lGb3JNSU1FVHlwZSgmTG9hZGVyUG9saWN5Ojpjb250aW51ZUFmdGVyQ29udGVudFBvbGljeSwK
KyAgICAgICAgTUlNRVR5cGUsIG1fZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRl
cigpLT5yZXF1ZXN0KCkpOwogfQogCiBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRSZWxvYWRUb0hh
bmRsZVVucmVhY2hhYmxlVVJMKERvY3VtZW50TG9hZGVyKiBkb2NMb2FkZXIpCkBAIC0yMjE3LDcg
KzIyMDcsNyBAQCBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRSZWxvYWRUb0hhbmRsZVVucmVhY2hh
YmxlVVJMKERvY3VtZW50TG9hZGVyKiBkb2NMb2FkZXIpCiAgICAgaWYgKHVucmVhY2hhYmxlVVJM
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFpc0JhY2tGb3J3
YXJkTG9hZFR5cGUobV9wb2xpY3lMb2FkVHlwZSkpCisgICAgaWYgKCFpc0JhY2tGb3J3YXJkTG9h
ZFR5cGUocG9saWN5KCktPmxvYWRUeXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAvLyBXZSBvbmx5IHRyZWF0IHVucmVhY2hhYmxlVVJMcyBzcGVjaWFsbHkgZHVyaW5nIHRoZSBk
ZWxlZ2F0ZSBjYWxsYmFja3MKQEAgLTIyMjYsNyArMjIxNiw3IEBAIGJvb2wgRnJhbWVMb2FkZXI6
OnNob3VsZFJlbG9hZFRvSGFuZGxlVW5yZWFjaGFibGVVUkwoRG9jdW1lbnRMb2FkZXIqIGRvY0xv
YWRlcikKICAgICAvLyBjYXNlIGhhbmRsZXMgbWFsZm9ybWVkIFVSTHMgYW5kIHVua25vd24gc2No
ZW1lcy4gTG9hZGluZyBhbHRlcm5hdGUgY29udGVudAogICAgIC8vIGF0IG90aGVyIHRpbWVzIGJl
aGF2ZXMgbGlrZSBhIHN0YW5kYXJkIGxvYWQuCiAgICAgRG9jdW1lbnRMb2FkZXIqIGNvbXBhcmVE
b2N1bWVudExvYWRlciA9IDA7Ci0gICAgaWYgKG1fZGVsZWdhdGVJc0RlY2lkaW5nTmF2aWdhdGlv
blBvbGljeSB8fCBtX2RlbGVnYXRlSXNIYW5kbGluZ1VuaW1wbGVtZW50YWJsZVBvbGljeSkKKyAg
ICBpZiAocG9saWN5KCktPmRlbGVnYXRlSXNEZWNpZGluZ05hdmlnYXRpb25Qb2xpY3koKSB8fCBw
b2xpY3koKS0+ZGVsZWdhdGVJc0hhbmRsaW5nVW5pbXBsZW1lbnRhYmxlUG9saWN5KCkpCiAgICAg
ICAgIGNvbXBhcmVEb2N1bWVudExvYWRlciA9IG1fcG9saWN5RG9jdW1lbnRMb2FkZXIuZ2V0KCk7
CiAgICAgZWxzZSBpZiAobV9kZWxlZ2F0ZUlzSGFuZGxpbmdQcm92aXNpb25hbExvYWRFcnJvcikK
ICAgICAgICAgY29tcGFyZURvY3VtZW50TG9hZGVyID0gbV9wcm92aXNpb25hbERvY3VtZW50TG9h
ZGVyLmdldCgpOwpAQCAtMjM4MSw3ICsyMzcxLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3RvcEFs
bExvYWRlcnMoRGF0YWJhc2VQb2xpY3kgZGF0YWJhc2VQb2xpY3kpCiAKICAgICBtX2luU3RvcEFs
bExvYWRlcnMgPSB0cnVlOwogCi0gICAgc3RvcFBvbGljeUNoZWNrKCk7CisgICAgcG9saWN5KCkt
PnN0b3BDaGVjaygpOwogCiAgICAgc3RvcExvYWRpbmdTdWJmcmFtZXMoKTsKICAgICBpZiAobV9w
cm92aXNpb25hbERvY3VtZW50TG9hZGVyKQpAQCAtMjg2MSw5ICsyODUxLDkgQEAgU3RyaW5nIEZy
YW1lTG9hZGVyOjpnZW5lcmF0ZWRNSU1FVHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVS
TFNjaGVtZSkKICAgICByZXR1cm4gbV9jbGllbnQtPmdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2No
ZW1lKFVSTFNjaGVtZSk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmNhbmNlbENvbnRlbnRQb2xp
Y3lDaGVjaygpCit2b2lkIExvYWRlclBvbGljeTo6Y2FuY2VsQ2hlY2soKQogewotICAgIG1fY2xp
ZW50LT5jYW5jZWxQb2xpY3lDaGVjaygpOworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQo
KS0+Y2FuY2VsUG9saWN5Q2hlY2soKTsKICAgICBtX3BvbGljeUNoZWNrLmNsZWFyKCk7CiB9CiAK
QEAgLTI5ODYsOSArMjk3Niw5IEBAIENhY2hlUG9saWN5IEZyYW1lTG9hZGVyOjpzdWJyZXNvdXJj
ZUNhY2hlUG9saWN5KCkgY29uc3QKICAgICByZXR1cm4gQ2FjaGVQb2xpY3lWZXJpZnk7CiB9CiAK
LXZvaWQgRnJhbWVMb2FkZXI6OnN0b3BQb2xpY3lDaGVjaygpCit2b2lkIExvYWRlclBvbGljeTo6
c3RvcENoZWNrKCkKIHsKLSAgICBtX2NsaWVudC0+Y2FuY2VsUG9saWN5Q2hlY2soKTsKKyAgICBt
X2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNhbmNlbFBvbGljeUNoZWNrKCk7CiAgICAgUG9s
aWN5Q2hlY2sgY2hlY2sgPSBtX3BvbGljeUNoZWNrOwogICAgIG1fcG9saWN5Q2hlY2suY2xlYXIo
KTsKICAgICBjaGVjay5jYW5jZWwoKTsKQEAgLTMwOTIsMTQgKzMwODIsMjEgQEAgdm9pZCBGcmFt
ZUxvYWRlcjo6Y2hlY2tMb2FkQ29tcGxldGVGb3JUaGlzRnJhbWUoKQogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpjb250aW51ZUFmdGVyQ29udGVudFBv
bGljeShQb2xpY3lBY3Rpb24gcG9saWN5KQordm9pZCBMb2FkZXJQb2xpY3k6OmNvbnRpbnVlQWZ0
ZXJDb250ZW50UG9saWN5KFBvbGljeUFjdGlvbiBwb2xpY3kpCiB7CiAgICAgUG9saWN5Q2hlY2sg
Y2hlY2sgPSBtX3BvbGljeUNoZWNrOwogICAgIG1fcG9saWN5Q2hlY2suY2xlYXIoKTsKICAgICBj
aGVjay5jYWxsKHBvbGljeSk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFm
dGVyV2lsbFN1Ym1pdEZvcm0oUG9saWN5QWN0aW9uKQordm9pZCBMb2FkZXJQb2xpY3k6OmNvbnRp
bnVlTG9hZEFmdGVyV2lsbFN1Ym1pdEZvcm0oUG9saWN5QWN0aW9uKQoreworICAgIC8vIFNlZSBo
ZWFkZXIgZmlsZSBmb3IgYW4gZXhwbGFpbmF0aW9uIG9mIHdoeSB0aGlzIGZ1bmN0aW9uCisgICAg
Ly8gaXNuJ3QgbGlrZSB0aGUgb3RoZXJzLgorICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jb250aW51
ZUxvYWRBZnRlcldpbGxTdWJtaXRGb3JtKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXI6OmNvbnRp
bnVlTG9hZEFmdGVyV2lsbFN1Ym1pdEZvcm0oKQogewogICAgIGlmICghbV9wcm92aXNpb25hbERv
Y3VtZW50TG9hZGVyKQogICAgICAgICByZXR1cm47CkBAIC0zMzk2LDcgKzMzOTMsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpsb2FkUG9zdFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBpblJl
cXVlc3QsIGNvbnN0IFN0cmluZwogICAgICAgICBpZiAoRnJhbWUqIHRhcmdldEZyYW1lID0gZm9y
bVN0YXRlID8gMCA6IGZpbmRGcmFtZUZvck5hdmlnYXRpb24oZnJhbWVOYW1lKSkKICAgICAgICAg
ICAgIHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+bG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9uKHdvcmtp
bmdSZXNvdXJjZVJlcXVlc3QsIGFjdGlvbiwgbG9ja0hpc3RvcnksIGxvYWRUeXBlLCBmb3JtU3Rh
dGUucmVsZWFzZSgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2hlY2tOZXdXaW5kb3dQ
b2xpY3koYWN0aW9uLCB3b3JraW5nUmVzb3VyY2VSZXF1ZXN0LCBmb3JtU3RhdGUucmVsZWFzZSgp
LCBmcmFtZU5hbWUpOworICAgICAgICAgICAgcG9saWN5KCktPmNoZWNrTmV3V2luZG93UG9saWN5
KGFjdGlvbiwgRnJhbWVMb2FkZXI6OmNhbGxDb250aW51ZUxvYWRBZnRlck5ld1dpbmRvd1BvbGlj
eSwgd29ya2luZ1Jlc291cmNlUmVxdWVzdCwgZm9ybVN0YXRlLnJlbGVhc2UoKSwgZnJhbWVOYW1l
KTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9uKHdvcmtpbmdS
ZXNvdXJjZVJlcXVlc3QsIGFjdGlvbiwgbG9ja0hpc3RvcnksIGxvYWRUeXBlLCBmb3JtU3RhdGUu
cmVsZWFzZSgpKTsgICAgCiB9CkBAIC0zNTM1LDcgKzM1MzIsNyBAQCB2b2lkIEZyYW1lTG9hZGVy
OjpjYWxsQ29udGludWVGcmFnbWVudFNjcm9sbEFmdGVyTmF2aWdhdGlvblBvbGljeSh2b2lkKiBh
cmd1bWVudAogCiB2b2lkIEZyYW1lTG9hZGVyOjpjb250aW51ZUZyYWdtZW50U2Nyb2xsQWZ0ZXJO
YXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG91
bGRDb250aW51ZSkKIHsKLSAgICBib29sIGlzUmVkaXJlY3QgPSBtX3F1aWNrUmVkaXJlY3RDb21p
bmcgfHwgbV9wb2xpY3lMb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVkaXJlY3RXaXRoTG9ja2Vk
QmFja0ZvcndhcmRMaXN0OworICAgIGJvb2wgaXNSZWRpcmVjdCA9IG1fcXVpY2tSZWRpcmVjdENv
bWluZyB8fCBwb2xpY3koKS0+bG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlUmVkaXJlY3RXaXRo
TG9ja2VkQmFja0ZvcndhcmRMaXN0OwogICAgIG1fcXVpY2tSZWRpcmVjdENvbWluZyA9IGZhbHNl
OwogCiAgICAgaWYgKCFzaG91bGRDb250aW51ZSkKQEAgLTM1OTEsMTYgKzM1ODgsMTUgQEAgYm9v
bCBGcmFtZUxvYWRlcjo6c2hvdWxkU2Nyb2xsVG9BbmNob3IoYm9vbCBpc0Zvcm1TdWJtaXNzaW9u
LCBGcmFtZUxvYWRUeXBlIGxvYWQKICAgICAgICAgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPmlz
RnJhbWVTZXQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6Y2hlY2tOZXdXaW5kb3dQb2xpY3ko
Y29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgYWN0aW9uLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsCi0gICAgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSwgY29uc3QgU3RyaW5n
JiBmcmFtZU5hbWUpCit2b2lkIExvYWRlclBvbGljeTo6Y2hlY2tOZXdXaW5kb3dQb2xpY3koY29u
c3QgTmF2aWdhdGlvbkFjdGlvbiYgYWN0aW9uLCBOZXdXaW5kb3dQb2xpY3lEZWNpc2lvbkZ1bmN0
aW9uIGZ1bmN0aW9uLAorICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUGFzc1Jl
ZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUpCiB7Ci0g
ICAgbV9wb2xpY3lDaGVjay5zZXQocmVxdWVzdCwgZm9ybVN0YXRlLCBmcmFtZU5hbWUsCi0gICAg
ICAgIGNhbGxDb250aW51ZUxvYWRBZnRlck5ld1dpbmRvd1BvbGljeSwgdGhpcyk7Ci0gICAgbV9j
bGllbnQtPmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKCZGcmFtZUxvYWRl
cjo6Y29udGludWVBZnRlck5ld1dpbmRvd1BvbGljeSwKKyAgICBtX3BvbGljeUNoZWNrLnNldChy
ZXF1ZXN0LCBmb3JtU3RhdGUsIGZyYW1lTmFtZSwgZnVuY3Rpb24sIHRoaXMpOworICAgIG1fZnJh
bWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dB
Y3Rpb24oJkxvYWRlclBvbGljeTo6Y29udGludWVBZnRlck5ld1dpbmRvd1BvbGljeSwKICAgICAg
ICAgYWN0aW9uLCByZXF1ZXN0LCBmb3JtU3RhdGUsIGZyYW1lTmFtZSk7CiB9CiAKLXZvaWQgRnJh
bWVMb2FkZXI6OmNvbnRpbnVlQWZ0ZXJOZXdXaW5kb3dQb2xpY3koUG9saWN5QWN0aW9uIHBvbGlj
eSkKK3ZvaWQgTG9hZGVyUG9saWN5Ojpjb250aW51ZUFmdGVyTmV3V2luZG93UG9saWN5KFBvbGlj
eUFjdGlvbiBwb2xpY3kpCiB7CiAgICAgUG9saWN5Q2hlY2sgY2hlY2sgPSBtX3BvbGljeUNoZWNr
OwogICAgIG1fcG9saWN5Q2hlY2suY2xlYXIoKTsKQEAgLTM2MTAsNyArMzYwNiw3IEBAIHZvaWQg
RnJhbWVMb2FkZXI6OmNvbnRpbnVlQWZ0ZXJOZXdXaW5kb3dQb2xpY3koUG9saWN5QWN0aW9uIHBv
bGljeSkKICAgICAgICAgICAgIGNoZWNrLmNsZWFyUmVxdWVzdCgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgUG9saWN5RG93bmxvYWQ6Ci0gICAgICAgICAgICBtX2NsaWVudC0+
c3RhcnREb3dubG9hZChjaGVjay5yZXF1ZXN0KCkpOworICAgICAgICAgICAgbV9mcmFtZS0+bG9h
ZGVyKCktPmNsaWVudCgpLT5zdGFydERvd25sb2FkKGNoZWNrLnJlcXVlc3QoKSk7CiAgICAgICAg
ICAgICBjaGVjay5jbGVhclJlcXVlc3QoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFBvbGljeVVzZToKQEAgLTM2MjAsNyArMzYxNiw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNv
bnRpbnVlQWZ0ZXJOZXdXaW5kb3dQb2xpY3koUG9saWN5QWN0aW9uIHBvbGljeSkKICAgICBjaGVj
ay5jYWxsKHBvbGljeSA9PSBQb2xpY3lVc2UpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpjaGVj
a05hdmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBEb2N1bWVu
dExvYWRlciogbG9hZGVyLAordm9pZCBMb2FkZXJQb2xpY3k6OmNoZWNrTmF2aWdhdGlvblBvbGlj
eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIs
CiAgICAgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSwgTmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50KQogewogICAgIE5hdmlnYXRp
b25BY3Rpb24gYWN0aW9uID0gbG9hZGVyLT50cmlnZ2VyaW5nQWN0aW9uKCk7CkBAIC0zNjI4LDcg
KzM2MjQsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja05hdmlnYXRpb25Qb2xpY3koY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBEb2N1bWVudAogICAgICAgICBhY3Rpb24gPSBOYXZp
Z2F0aW9uQWN0aW9uKHJlcXVlc3QudXJsKCksIE5hdmlnYXRpb25UeXBlT3RoZXIpOwogICAgICAg
ICBsb2FkZXItPnNldFRyaWdnZXJpbmdBY3Rpb24oYWN0aW9uKTsKICAgICB9Ci0gICAgICAgIAor
CiAgICAgLy8gRG9uJ3QgYXNrIG1vcmUgdGhhbiBvbmNlIGZvciB0aGUgc2FtZSByZXF1ZXN0IG9y
IGlmIHdlIGFyZSBsb2FkaW5nIGFuIGVtcHR5IFVSTC4KICAgICAvLyBUaGlzIGF2b2lkcyBjb25m
dXNpb24gb24gdGhlIHBhcnQgb2YgdGhlIGNsaWVudC4KICAgICBpZiAoZXF1YWxJZ25vcmluZ0hl
YWRlckZpZWxkcyhyZXF1ZXN0LCBsb2FkZXItPmxhc3RDaGVja2VkUmVxdWVzdCgpKSB8fCAoIXJl
cXVlc3QuaXNOdWxsKCkgJiYgcmVxdWVzdC51cmwoKS5pc0VtcHR5KCkpKSB7CkBAIC0zNjQwLDgg
KzM2MzYsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja05hdmlnYXRpb25Qb2xpY3koY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBEb2N1bWVudAogICAgIC8vIFdlIGFyZSBhbHdheXMg
d2lsbGluZyB0byBzaG93IGFsdGVybmF0ZSBjb250ZW50IGZvciB1bnJlYWNoYWJsZSBVUkxzOwog
ICAgIC8vIHRyZWF0IGl0IGxpa2UgYSByZWxvYWQgc28gaXQgbWFpbnRhaW5zIHRoZSByaWdodCBz
dGF0ZSBmb3IgYi9mIGxpc3QuCiAgICAgaWYgKGxvYWRlci0+c3Vic3RpdHV0ZURhdGEoKS5pc1Zh
bGlkKCkgJiYgIWxvYWRlci0+c3Vic3RpdHV0ZURhdGEoKS5mYWlsaW5nVVJMKCkuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGlmIChpc0JhY2tGb3J3YXJkTG9hZFR5cGUobV9wb2xpY3lMb2FkVHlwZSkp
Ci0gICAgICAgICAgICBtX3BvbGljeUxvYWRUeXBlID0gRnJhbWVMb2FkVHlwZVJlbG9hZDsKKyAg
ICAgICAgaWYgKGlzQmFja0ZvcndhcmRMb2FkVHlwZShtX2xvYWRUeXBlKSkKKyAgICAgICAgICAg
IG1fbG9hZFR5cGUgPSBGcmFtZUxvYWRUeXBlUmVsb2FkOwogICAgICAgICBmdW5jdGlvbihhcmd1
bWVudCwgcmVxdWVzdCwgMCwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNjUx
LDMxICszNjQ3LDMxIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrTmF2aWdhdGlvblBvbGljeShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIERvY3VtZW50CiAgICAgbV9wb2xpY3lDaGVj
ay5zZXQocmVxdWVzdCwgZm9ybVN0YXRlLmdldCgpLCBmdW5jdGlvbiwgYXJndW1lbnQpOwogCiAg
ICAgbV9kZWxlZ2F0ZUlzRGVjaWRpbmdOYXZpZ2F0aW9uUG9saWN5ID0gdHJ1ZTsKLSAgICBtX2Ns
aWVudC0+ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKCZGcmFtZUxvYWRl
cjo6Y29udGludWVBZnRlck5hdmlnYXRpb25Qb2xpY3ksCisgICAgbV9mcmFtZS0+bG9hZGVyKCkt
PmNsaWVudCgpLT5kaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oJkxvYWRl
clBvbGljeTo6Y29udGludWVBZnRlck5hdmlnYXRpb25Qb2xpY3ksCiAgICAgICAgIGFjdGlvbiwg
cmVxdWVzdCwgZm9ybVN0YXRlKTsKICAgICBtX2RlbGVnYXRlSXNEZWNpZGluZ05hdmlnYXRpb25Q
b2xpY3kgPSBmYWxzZTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6Y29udGludWVBZnRlck5hdmln
YXRpb25Qb2xpY3koUG9saWN5QWN0aW9uIHBvbGljeSkKK3ZvaWQgTG9hZGVyUG9saWN5Ojpjb250
aW51ZUFmdGVyTmF2aWdhdGlvblBvbGljeShQb2xpY3lBY3Rpb24gcG9saWN5KQogewogICAgIFBv
bGljeUNoZWNrIGNoZWNrID0gbV9wb2xpY3lDaGVjazsKICAgICBtX3BvbGljeUNoZWNrLmNsZWFy
KCk7CiAKICAgICBib29sIHNob3VsZENvbnRpbnVlID0gcG9saWN5ID09IFBvbGljeVVzZTsKLSAg
ICAKKwogICAgIHN3aXRjaCAocG9saWN5KSB7CiAgICAgICAgIGNhc2UgUG9saWN5SWdub3JlOgog
ICAgICAgICAgICAgY2hlY2suY2xlYXJSZXF1ZXN0KCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBQb2xpY3lEb3dubG9hZDoKLSAgICAgICAgICAgIG1fY2xpZW50LT5zdGFydERv
d25sb2FkKGNoZWNrLnJlcXVlc3QoKSk7CisgICAgICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+
Y2xpZW50KCktPnN0YXJ0RG93bmxvYWQoY2hlY2sucmVxdWVzdCgpKTsKICAgICAgICAgICAgIGNo
ZWNrLmNsZWFyUmVxdWVzdCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUG9s
aWN5VXNlOiB7CiAgICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChjaGVjay5yZXF1
ZXN0KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY2xpZW50LT5jYW5IYW5k
bGVSZXF1ZXN0KHJlcXVlc3QpKSB7Ci0gICAgICAgICAgICAgICAgaGFuZGxlVW5pbXBsZW1lbnRh
YmxlUG9saWN5KG1fY2xpZW50LT5jYW5ub3RTaG93VVJMRXJyb3IoY2hlY2sucmVxdWVzdCgpKSk7
CisKKyAgICAgICAgICAgIGlmICghbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jYW5IYW5k
bGVSZXF1ZXN0KHJlcXVlc3QpKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlVW5pbXBsZW1lbnRh
YmxlUG9saWN5KG1fZnJhbWUtPmxvYWRlcigpLT5jYW5ub3RTaG93VVJMRXJyb3IoY2hlY2sucmVx
dWVzdCgpKSk7CiAgICAgICAgICAgICAgICAgY2hlY2suY2xlYXJSZXF1ZXN0KCk7CiAgICAgICAg
ICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTM3MjAs
NyArMzcxNiw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlv
blBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzCiAgICAgICAgIC8vIElmIHRoZSBu
YXZpZ2F0aW9uIHJlcXVlc3QgY2FtZSBmcm9tIHRoZSBiYWNrL2ZvcndhcmQgbWVudSwgYW5kIHdl
IHB1bnQgb24gaXQsIHdlIGhhdmUgdGhlIAogICAgICAgICAvLyBwcm9ibGVtIHRoYXQgd2UgaGF2
ZSBvcHRpbWlzdGljYWxseSBtb3ZlZCB0aGUgYi9mIGN1cnNvciBhbHJlYWR5LCBzbyBtb3ZlIGl0
IGJhY2suICBGb3Igc2FuaXR5LCAKICAgICAgICAgLy8gd2Ugb25seSBkbyB0aGlzIHdoZW4gcHVu
dGluZyBhIG5hdmlnYXRpb24gZm9yIHRoZSB0YXJnZXQgZnJhbWUgb3IgdG9wLWxldmVsIGZyYW1l
LiAgCi0gICAgICAgIGlmICgoaXNUYXJnZXRJdGVtIHx8IGlzTG9hZGluZ01haW5GcmFtZSgpKSAm
JiBpc0JhY2tGb3J3YXJkTG9hZFR5cGUobV9wb2xpY3lMb2FkVHlwZSkpCisgICAgICAgIGlmICgo
aXNUYXJnZXRJdGVtIHx8IGlzTG9hZGluZ01haW5GcmFtZSgpKSAmJiBpc0JhY2tGb3J3YXJkTG9h
ZFR5cGUocG9saWN5KCktPmxvYWRUeXBlKCkpKQogICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBtX2ZyYW1lLT5wYWdlKCkpIHsKICAgICAgICAgICAgICAgICBGcmFtZSogbWFpbkZyYW1lID0g
cGFnZS0+bWFpbkZyYW1lKCk7CiAgICAgICAgICAgICAgICAgaWYgKEhpc3RvcnlJdGVtKiByZXNl
dEl0ZW0gPSBtYWluRnJhbWUtPmxvYWRlcigpLT5tX2N1cnJlbnRIaXN0b3J5SXRlbS5nZXQoKSkg
ewpAQCAtMzczMiw3ICszNzI4LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29udGludWVMb2FkQWZ0
ZXJOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3MKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIEZyYW1lTG9hZFR5cGUgdHlwZSA9IG1fcG9saWN5TG9hZFR5
cGU7CisgICAgRnJhbWVMb2FkVHlwZSB0eXBlID0gcG9saWN5KCktPmxvYWRUeXBlKCk7CiAgICAg
c3RvcEFsbExvYWRlcnMoKTsKICAgICAKICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNjI1MDg1Nj4g
LSBJbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgb24gcGFnZXMgd2l0aCBtdWx0aXBsZSBmcmFtZXMs
IHN0b3BBbGxMb2FkZXJzKCkKQEAgLTM3NTcsNyArMzc1Myw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBQYXNzCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChmb3JtU3RhdGUpCi0gICAgICAgIG1f
Y2xpZW50LT5kaXNwYXRjaFdpbGxTdWJtaXRGb3JtKCZGcmFtZUxvYWRlcjo6Y29udGludWVMb2Fk
QWZ0ZXJXaWxsU3VibWl0Rm9ybSwgZm9ybVN0YXRlKTsKKyAgICAgICAgbV9jbGllbnQtPmRpc3Bh
dGNoV2lsbFN1Ym1pdEZvcm0oJkxvYWRlclBvbGljeTo6Y29udGludWVMb2FkQWZ0ZXJXaWxsU3Vi
bWl0Rm9ybSwgZm9ybVN0YXRlKTsKICAgICBlbHNlCiAgICAgICAgIGNvbnRpbnVlTG9hZEFmdGVy
V2lsbFN1Ym1pdEZvcm0oKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmggYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCmluZGV4IGE0M2RmMzUuLjhjOTll
ZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKKysrIGIvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuaApAQCAtNzgsNiArNzgsNTMgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgYm9vbCBpc0JhY2tGb3J3YXJkTG9hZFR5cGUoRnJhbWVMb2FkVHlwZSk7CiAK
KyAgICBjbGFzcyBMb2FkZXJQb2xpY3kgOiBwdWJsaWMgTm9uY29weWFibGUgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgTG9hZGVyUG9saWN5KEZyYW1lKik7CisKKyAgICAgICAgdm9pZCBjaGVja05h
dmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgRG9jdW1lbnRMb2FkZXIqLCBQ
YXNzUmVmUHRyPEZvcm1TdGF0ZT4sIE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkZ1bmN0aW9uLCB2
b2lkKiBhcmd1bWVudCk7CisgICAgICAgIHZvaWQgY2hlY2tOYXZpZ2F0aW9uUG9saWN5KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkZ1bmN0aW9uLCB2b2lk
KiBhcmd1bWVudCk7CisgICAgICAgIHZvaWQgY2hlY2tOZXdXaW5kb3dQb2xpY3koY29uc3QgTmF2
aWdhdGlvbkFjdGlvbiYsIE5ld1dpbmRvd1BvbGljeURlY2lzaW9uRnVuY3Rpb24sIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJiBmcmFt
ZU5hbWUpOworICAgICAgICB2b2lkIGNoZWNrQ29udGVudFBvbGljeShjb25zdCBTdHJpbmcmIE1J
TUVUeXBlLCBDb250ZW50UG9saWN5RGVjaXNpb25GdW5jdGlvbiwgdm9pZCogYXJndW1lbnQpOwor
CisgICAgICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgZGlmZmVyZW50LiAgVGhleSBjb3VsZCB1c2Ug
YmV0dGVyIG5hbWVzLgorICAgICAgICB2b2lkIGNhbmNlbENoZWNrKCk7CisgICAgICAgIHZvaWQg
c3RvcENoZWNrKCk7CisKKyAgICAgICAgdm9pZCBjYW5ub3RTaG93TUlNRVR5cGUoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOworCisgICAgICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUoKSBjb25z
dCB7IHJldHVybiBtX2xvYWRUeXBlOyB9CisgICAgICAgIHZvaWQgc2V0TG9hZFR5cGUoRnJhbWVM
b2FkVHlwZSBsb2FkVHlwZSkgeyBtX2xvYWRUeXBlID0gbG9hZFR5cGU7IH0KKworICAgICAgICBi
b29sIGRlbGVnYXRlSXNEZWNpZGluZ05hdmlnYXRpb25Qb2xpY3koKSBjb25zdCB7IHJldHVybiBt
X2RlbGVnYXRlSXNEZWNpZGluZ05hdmlnYXRpb25Qb2xpY3k7IH0KKyAgICAgICAgYm9vbCBkZWxl
Z2F0ZUlzSGFuZGxpbmdVbmltcGxlbWVudGFibGVQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX2Rl
bGVnYXRlSXNIYW5kbGluZ1VuaW1wbGVtZW50YWJsZVBvbGljeTsgfQorCisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGZ1bmN0aW9uIGlzIGEgY2hlYXQuICBCYXNpY2FsbHksIHRoaXMgaXMganVzdCBh
biBhc3luY2hyb25vdWMgY2FsbGJhY2sKKyAgICAgICAgLy8gZnJvbSB0aGUgRnJhbWVMb2FkZXJD
bGllbnQsIGJ1dCB0aGlzIGNhbGxiYWNrIHVzZXMgdGhlIHBvbGljeSB0eXBlcyBhbmQgc28gaGFz
IHRvCisgICAgICAgIC8vIGxpdmUgb24gdGhpcyBvYmplY3QuICBJbiB0aGUgbG9uZyB0ZXJtLCB3
ZSBzaG91bGQgY3JlYXRlIGEgdHlwZSBmb3Igbm9uLXBvbGljeQorICAgICAgICAvLyBjYWxsYmFj
a3MgZnJvbSB0aGUgRnJhbWVMb2FkZXJDbGllbnQgYW5kIHJlbW92ZSB0aGlzIHZlc3RpZ2UuICBJ
IGp1c3QgZG9uJ3QgaGF2ZQorICAgICAgICAvLyB0aGUgaGVhcnQgdG8gaGFjayBvbiBhbGwgdGhl
IHBsYXRmb3JtcyB0byBtYWtlIHRoYXQgaGFwcGVuIHJpZ2h0IG5vdy4KKyAgICAgICAgdm9pZCBj
b250aW51ZUxvYWRBZnRlcldpbGxTdWJtaXRGb3JtKFBvbGljeUFjdGlvbik7CisKKyAgICBwcml2
YXRlOgorICAgICAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KFBvbGljeUFj
dGlvbik7CisgICAgICAgIHZvaWQgY29udGludWVBZnRlck5ld1dpbmRvd1BvbGljeShQb2xpY3lB
Y3Rpb24pOworICAgICAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5KFBvbGljeUFj
dGlvbik7CisKKyAgICAgICAgdm9pZCBoYW5kbGVVbmltcGxlbWVudGFibGVQb2xpY3koY29uc3Qg
UmVzb3VyY2VFcnJvciYpOworCisgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworCisgICAgICAgIGJv
b2wgbV9kZWxlZ2F0ZUlzRGVjaWRpbmdOYXZpZ2F0aW9uUG9saWN5OworICAgICAgICBib29sIG1f
ZGVsZWdhdGVJc0hhbmRsaW5nVW5pbXBsZW1lbnRhYmxlUG9saWN5OworCisgICAgICAgIC8vIFRo
aXMgaWRlbnRpZmllcyB0aGUgdHlwZSBvZiBuYXZpZ2F0aW9uIGFjdGlvbiB3aGljaCBwcm9tcHRl
ZCB0aGlzIGxvYWQuIE5vdGUgCisgICAgICAgIC8vIHRoYXQgV2ViS2l0IGNvbnZleXMgdGhpcyB2
YWx1ZSBhcyB0aGUgV2ViQWN0aW9uTmF2aWdhdGlvblR5cGVLZXkgdmFsdWUKKyAgICAgICAgLy8g
b24gbmF2aWdhdGlvbiBhY3Rpb24gZGVsZWdhdGUgY2FsbGJhY2tzLgorICAgICAgICBGcmFtZUxv
YWRUeXBlIG1fbG9hZFR5cGU7CisgICAgICAgIFBvbGljeUNoZWNrIG1fcG9saWN5Q2hlY2s7Cisg
ICAgfTsKKwogICAgIGNsYXNzIEZyYW1lTG9hZGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIEZyYW1lTG9hZGVyKEZyYW1lKiwgRnJhbWVMb2FkZXJDbGllbnQq
KTsKQEAgLTg3LDYgKzEzNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBGcmFt
ZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CiAKKyAgICAgICAgTG9hZGVyUG9s
aWN5KiBwb2xpY3koKSB7IHJldHVybiAmbV9wb2xpY3k7IH0KKwogICAgICAgICAvLyBGSVhNRTog
VGhpcyBpcyBub3QgY29vbCwgcGVvcGxlLiBUaGVyZSBhcmUgdG9vIG1hbnkgZGlmZmVyZW50IGZ1
bmN0aW9ucyB0aGF0IGFsbCBzdGFydCBsb2Fkcy4KICAgICAgICAgLy8gV2Ugc2hvdWxkIGFpbSB0
byBjb25zb2xpZGF0ZSB0aGVzZSBpbnRvIGEgc21hbGxlciBzZXQgb2YgZnVuY3Rpb25zLCBhbmQg
dHJ5IHRvIHJldXNlIG1vcmUgb2YKICAgICAgICAgLy8gdGhlIGxvZ2ljIGJ5IGV4dHJhY3Rpbmcg
Y29tbW9uIGNvZGUgcGF0aHMuCkBAIC0xNjIsOCArMjExLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBSZXNvdXJjZUVycm9yIGZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJikgY29uc3Q7CiAgICAgICAgIFJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9y
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGNvbnN0OwogICAgICAgICBSZXNvdXJjZUVycm9yIGNh
bm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdDsKLQotICAgICAg
ICB2b2lkIGNhbm5vdFNob3dNSU1FVHlwZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAg
ICAgIFJlc291cmNlRXJyb3IgaW50ZXJydXB0aW9uRm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICAgICAgYm9vbCBpc0hvc3RlZEJ5T2JqZWN0RWxlbWVu
dCgpIGNvbnN0OwpAQCAtMTcyLDEwICsyMTksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIGJvb2wgcmVwcmVzZW50YXRpb25FeGlzdHNGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiBV
UkxTY2hlbWUpOwogICAgICAgICBTdHJpbmcgZ2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUo
Y29uc3QgU3RyaW5nJiBVUkxTY2hlbWUpOwogCi0gICAgICAgIHZvaWQgY2hlY2tOYXZpZ2F0aW9u
UG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkZ1
bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCk7Ci0gICAgICAgIHZvaWQgY2hlY2tDb250
ZW50UG9saWN5KGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIENvbnRlbnRQb2xpY3lEZWNpc2lvbkZ1
bmN0aW9uLCB2b2lkKiBhcmd1bWVudCk7Ci0gICAgICAgIHZvaWQgY2FuY2VsQ29udGVudFBvbGlj
eUNoZWNrKCk7Ci0KICAgICAgICAgdm9pZCByZWxvYWQoYm9vbCBlbmRUb0VuZFJlbG9hZCA9IGZh
bHNlKTsKICAgICAgICAgdm9pZCByZWxvYWRXaXRoT3ZlcnJpZGVFbmNvZGluZyhjb25zdCBTdHJp
bmcmIG92ZXJyaWRlRW5jb2RpbmcpOwogCkBAIC0zMzMsNiArMzc2LDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGllbnRSZWRpcmVjdGVkKGNvbnN0IEtVUkwmLCBkb3Vi
bGUgZGVsYXksIGRvdWJsZSBmaXJlRGF0ZSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKICAg
ICAgICAgdm9pZCBjbGllbnRSZWRpcmVjdENhbmNlbGxlZE9yRmluaXNoZWQoYm9vbCBjYW5jZWxX
aXRoTG9hZEluUHJvZ3Jlc3MpOwogCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHB1YmxpYyBi
ZWNhdXNlIHRoaXMgYXN5bmNocm9ub3VzIGNhbGxiYWNrIGZyb20gdGhlIEZyYW1lTG9hZGVyQ2xp
ZW50CisgICAgICAgIC8vIHVzZXMgdGhlIHBvbGljeSBtYWNoaW5lcnkgKGFuZCB0aGVyZWZvcmUg
aXMgY2FsbGVkIHZpYSB0aGUgTG9hZGVyUG9saWN5KS4gIE9uY2Ugd2UKKyAgICAgICAgLy8gaW50
cm9kdWNlIGEgcHJvcGVyIGNhbGxiYWNrIHR5cGUgZm9yIHRoaXMgZnVuY3Rpb24sIHdlIHNob3Vs
ZCBtYWtlIGl0IHByaXZhdGUgYWdhaW4uCisgICAgICAgIHZvaWQgY29udGludWVMb2FkQWZ0ZXJX
aWxsU3VibWl0Rm9ybSgpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgUGFzc1JlZlB0cjxIaXN0
b3J5SXRlbT4gY3JlYXRlSGlzdG9yeUl0ZW0oYm9vbCB1c2VPcmlnaW5hbCk7CiAgICAgICAgIFBh
c3NSZWZQdHI8SGlzdG9yeUl0ZW0+IGNyZWF0ZUhpc3RvcnlJdGVtVHJlZShGcmFtZSogdGFyZ2V0
RnJhbWUsIGJvb2wgY2xpcEF0VGFyZ2V0KTsKQEAgLTM5MSwyNSArNDM5LDE3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHNldExvYWRUeXBlKEZyYW1lTG9hZFR5cGUpOwog
Ci0gICAgICAgIHZvaWQgY2hlY2tOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIERvY3VtZW50TG9hZGVyKiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBOYXZpZ2F0aW9uUG9s
aWN5RGVjaXNpb25GdW5jdGlvbiwgdm9pZCogYXJndW1lbnQpOwotICAgICAgICB2b2lkIGNoZWNr
TmV3V2luZG93UG9saWN5KGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lKTsK
LQotICAgICAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KFBvbGljeUFjdGlv
bik7Ci0gICAgICAgIHZvaWQgY29udGludWVBZnRlck5ld1dpbmRvd1BvbGljeShQb2xpY3lBY3Rp
b24pOwotICAgICAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5KFBvbGljeUFjdGlv
bik7Ci0gICAgICAgIHZvaWQgY29udGludWVMb2FkQWZ0ZXJXaWxsU3VibWl0Rm9ybShQb2xpY3lB
Y3Rpb24gPSBQb2xpY3lVc2UpOwotCiAgICAgICAgIHN0YXRpYyB2b2lkIGNhbGxDb250aW51ZUxv
YWRBZnRlck5hdmlnYXRpb25Qb2xpY3kodm9pZCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBh
c3NSZWZQdHI8Rm9ybVN0YXRlPiwgYm9vbCBzaG91bGRDb250aW51ZSk7Ci0gICAgICAgIHZvaWQg
Y29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgYm9vbCBzaG91bGRDb250aW51ZSk7CiAgICAgICAgIHN0
YXRpYyB2b2lkIGNhbGxDb250aW51ZUxvYWRBZnRlck5ld1dpbmRvd1BvbGljeSh2b2lkKiwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcm
IGZyYW1lTmFtZSwgYm9vbCBzaG91bGRDb250aW51ZSk7Ci0gICAgICAgIHZvaWQgY29udGludWVM
b2FkQWZ0ZXJOZXdXaW5kb3dQb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0
cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBzaG91bGRDb250aW51
ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNhbGxDb250aW51ZUZyYWdtZW50U2Nyb2xsQWZ0ZXJO
YXZpZ2F0aW9uUG9saWN5KHZvaWQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRy
PEZvcm1TdGF0ZT4sIGJvb2wgc2hvdWxkQ29udGludWUpOworCisgICAgICAgIHZvaWQgY29udGlu
dWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3NS
ZWZQdHI8Rm9ybVN0YXRlPiwgYm9vbCBzaG91bGRDb250aW51ZSk7CisgICAgICAgIHZvaWQgY29u
dGludWVMb2FkQWZ0ZXJOZXdXaW5kb3dQb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFz
c1JlZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBzaG91bGRD
b250aW51ZSk7CiAgICAgICAgIHZvaWQgY29udGludWVGcmFnbWVudFNjcm9sbEFmdGVyTmF2aWdh
dGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNob3VsZENvbnRpbnVlKTsK
KwogICAgICAgICBib29sIHNob3VsZFNjcm9sbFRvQW5jaG9yKGJvb2wgaXNGb3JtU3VibWlzc2lv
biwgRnJhbWVMb2FkVHlwZSwgY29uc3QgS1VSTCYpOwogICAgICAgICB2b2lkIGFkZEhpc3RvcnlJ
dGVtRm9yRnJhZ21lbnRTY3JvbGwoKTsKIAotICAgICAgICB2b2lkIHN0b3BQb2xpY3lDaGVjaygp
OwotCiAgICAgICAgIHZvaWQgY2hlY2tMb2FkQ29tcGxldGVGb3JUaGlzRnJhbWUoKTsKIAogICAg
ICAgICB2b2lkIHNldERvY3VtZW50TG9hZGVyKERvY3VtZW50TG9hZGVyKik7CkBAIC00MjYsNyAr
NDY2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGNsZWFyKGJvb2wgY2xl
YXJXaW5kb3dQcm9wZXJ0aWVzID0gdHJ1ZSwgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMgPSB0cnVl
LCBib29sIGNsZWFyRnJhbWVWaWV3ID0gdHJ1ZSk7CiAKICAgICAgICAgYm9vbCBzaG91bGRSZWxv
YWRUb0hhbmRsZVVucmVhY2hhYmxlVVJMKERvY3VtZW50TG9hZGVyKik7Ci0gICAgICAgIHZvaWQg
aGFuZGxlVW5pbXBsZW1lbnRhYmxlUG9saWN5KGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIAogICAg
ICAgICB2b2lkIGRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpOwogICAgICAgICB2b2lkIGRpc3BhdGNo
QXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwpAQCAtNDgzLDYgKzUy
Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAg
ICAgIEZyYW1lTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKIAorICAgICAgICBMb2FkZXJQb2xpY3kg
bV9wb2xpY3k7CisKICAgICAgICAgRnJhbWVTdGF0ZSBtX3N0YXRlOwogICAgICAgICBGcmFtZUxv
YWRUeXBlIG1fbG9hZFR5cGU7CiAKQEAgLTQ5NCwxNSArNTM1LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IG1fcHJvdmlzaW9uYWxEb2N1bWVu
dExvYWRlcjsKICAgICAgICAgUmVmUHRyPERvY3VtZW50TG9hZGVyPiBtX3BvbGljeURvY3VtZW50
TG9hZGVyOwogCi0gICAgICAgIC8vIFRoaXMgaWRlbnRpZmllcyB0aGUgdHlwZSBvZiBuYXZpZ2F0
aW9uIGFjdGlvbiB3aGljaCBwcm9tcHRlZCB0aGlzIGxvYWQuIE5vdGUgCi0gICAgICAgIC8vIHRo
YXQgV2ViS2l0IGNvbnZleXMgdGhpcyB2YWx1ZSBhcyB0aGUgV2ViQWN0aW9uTmF2aWdhdGlvblR5
cGVLZXkgdmFsdWUKLSAgICAgICAgLy8gb24gbmF2aWdhdGlvbiBhY3Rpb24gZGVsZWdhdGUgY2Fs
bGJhY2tzLgotICAgICAgICBGcmFtZUxvYWRUeXBlIG1fcG9saWN5TG9hZFR5cGU7Ci0gICAgICAg
IFBvbGljeUNoZWNrIG1fcG9saWN5Q2hlY2s7Ci0KICAgICAgICAgYm9vbCBtX2RlbGVnYXRlSXNI
YW5kbGluZ1Byb3Zpc2lvbmFsTG9hZEVycm9yOwotICAgICAgICBib29sIG1fZGVsZWdhdGVJc0Rl
Y2lkaW5nTmF2aWdhdGlvblBvbGljeTsKLSAgICAgICAgYm9vbCBtX2RlbGVnYXRlSXNIYW5kbGlu
Z1VuaW1wbGVtZW50YWJsZVBvbGljeTsKIAogICAgICAgICBib29sIG1fZmlyc3RMYXlvdXREb25l
OwogICAgICAgICBib29sIG1fcXVpY2tSZWRpcmVjdENvbWluZzsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmggYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ckNsaWVudC5oCmluZGV4IDViYTRiMTAuLjJiZmViZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJD
bGllbnQuaApAQCAtNzIsNyArNzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
U3RyaW5nOwogICAgIGNsYXNzIFdpZGdldDsKIAotICAgIHR5cGVkZWYgdm9pZCAoRnJhbWVMb2Fk
ZXI6OipGcmFtZVBvbGljeUZ1bmN0aW9uKShQb2xpY3lBY3Rpb24pOworICAgIHR5cGVkZWYgdm9p
ZCAoTG9hZGVyUG9saWN5OjoqRnJhbWVQb2xpY3lGdW5jdGlvbikoUG9saWN5QWN0aW9uKTsKIAog
ICAgIGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50IHsKICAgICBwdWJsaWM6CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvTWFp
blJlc291cmNlTG9hZGVyLmNwcAppbmRleCBhM2U5MGZkLi43N2U3YzlhIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVy
L01haW5SZXNvdXJjZUxvYWRlci5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBNYWluUmVzb3Vy
Y2VMb2FkZXI6OmRpZENhbmNlbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICBSZWZQ
dHI8TWFpblJlc291cmNlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOwogCiAgICAgaWYgKG1fd2FpdGlu
Z0ZvckNvbnRlbnRQb2xpY3kpIHsKLSAgICAgICAgZnJhbWVMb2FkZXIoKS0+Y2FuY2VsQ29udGVu
dFBvbGljeUNoZWNrKCk7CisgICAgICAgIGZyYW1lTG9hZGVyKCktPnBvbGljeSgpLT5jYW5jZWxD
aGVjaygpOwogICAgICAgICBBU1NFUlQobV93YWl0aW5nRm9yQ29udGVudFBvbGljeSk7CiAgICAg
ICAgIG1fd2FpdGluZ0ZvckNvbnRlbnRQb2xpY3kgPSBmYWxzZTsKICAgICAgICAgZGVyZWYoKTsg
Ly8gYmFsYW5jZXMgcmVmIGluIGRpZFJlY2VpdmVSZXNwb25zZQpAQCAtMTgyLDcgKzE4Miw3IEBA
IHZvaWQgTWFpblJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0
JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvCiAgICAgLy8gc3luY2hyb25vdXNseSBmb3IgdGhlc2Ug
cmVkaXJlY3QgY2FzZXMuCiAgICAgaWYgKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpKSB7CiAg
ICAgICAgIHJlZigpOyAvLyBiYWxhbmNlZCBieSBkZXJlZiBpbiBjb250aW51ZUFmdGVyTmF2aWdh
dGlvblBvbGljeQotICAgICAgICBmcmFtZUxvYWRlcigpLT5jaGVja05hdmlnYXRpb25Qb2xpY3ko
bmV3UmVxdWVzdCwgY2FsbENvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5LCB0aGlzKTsKKyAg
ICAgICAgZnJhbWVMb2FkZXIoKS0+cG9saWN5KCktPmNoZWNrTmF2aWdhdGlvblBvbGljeShuZXdS
ZXF1ZXN0LCBjYWxsQ29udGludWVBZnRlck5hdmlnYXRpb25Qb2xpY3ksIHRoaXMpOwogICAgIH0K
IH0KIApAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpjb250aW51
ZUFmdGVyQ29udGVudFBvbGljeShQb2xpY3lBY3Rpb24gY29udGVudFBvbGljeSwKICAgICAgICAg
Ly8gUHJldmVudCByZW1vdGUgd2ViIGFyY2hpdmVzIGZyb20gbG9hZGluZyBiZWNhdXNlIHRoZXkg
Y2FuIGNsYWltIHRvIGJlIGZyb20gYW55IGRvbWFpbiBhbmQgdGh1cyBhdm9pZCBjcm9zcy1kb21h
aW4gc2VjdXJpdHkgY2hlY2tzICg0MTIwMjU1KS4KICAgICAgICAgYm9vbCBpc1JlbW90ZVdlYkFy
Y2hpdmUgPSBlcXVhbElnbm9yaW5nQ2FzZSgiYXBwbGljYXRpb24veC13ZWJhcmNoaXZlIiwgbWlt
ZVR5cGUpICYmICFtX3N1YnN0aXR1dGVEYXRhLmlzVmFsaWQoKSAmJiAhdXJsLmlzTG9jYWxGaWxl
KCk7CiAgICAgICAgIGlmICghZnJhbWVMb2FkZXIoKS0+Y2FuU2hvd01JTUVUeXBlKG1pbWVUeXBl
KSB8fCBpc1JlbW90ZVdlYkFyY2hpdmUpIHsKLSAgICAgICAgICAgIGZyYW1lTG9hZGVyKCktPmNh
bm5vdFNob3dNSU1FVHlwZShyKTsKKyAgICAgICAgICAgIGZyYW1lTG9hZGVyKCktPnBvbGljeSgp
LT5jYW5ub3RTaG93TUlNRVR5cGUocik7CiAgICAgICAgICAgICAvLyBDaGVjayByZWFjaGVkVGVy
bWluYWxTdGF0ZSBzaW5jZSB0aGUgbG9hZCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gY2FuY2VsbGVk
IGluc2lkZSBvZiBfaGFuZGxlVW5pbXBsZW1lbnRhYmxlUG9saWN5V2l0aEVycm9yQ29kZTo6Lgog
ICAgICAgICAgICAgaWYgKCFyZWFjaGVkVGVybWluYWxTdGF0ZSgpKQogICAgICAgICAgICAgICAg
IHN0b3BMb2FkaW5nRm9yUG9saWN5Q2hhbmdlKCk7CkBAIC0zMjAsNyArMzIwLDI2IEBAIHZvaWQg
TWFpblJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcikKICAgICBBU1NFUlQoIW1fd2FpdGluZ0ZvckNvbnRlbnRQb2xpY3kpOwogICAgIG1f
d2FpdGluZ0ZvckNvbnRlbnRQb2xpY3kgPSB0cnVlOwogICAgIHJlZigpOyAvLyBiYWxhbmNlZCBi
eSBkZXJlZiBpbiBjb250aW51ZUFmdGVyQ29udGVudFBvbGljeSBhbmQgZGlkQ2FuY2VsCi0gICAg
ZnJhbWVMb2FkZXIoKS0+Y2hlY2tDb250ZW50UG9saWN5KG1fcmVzcG9uc2UubWltZVR5cGUoKSwg
Y2FsbENvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5LCB0aGlzKTsKKworICAgIC8vIElzIHRoZSBh
Y3RpdmVEb2N1bWVudExvYWRlciBhbHdheXMgdXM/CisgICAgQVNTRVJUKGZyYW1lTG9hZGVyKCkt
PmFjdGl2ZURvY3VtZW50TG9hZGVyKCkpOworCisgICAgLy8gQWx3YXlzIHNob3cgY29udGVudCB3
aXRoIHZhbGlkIHN1YnN0aXR1dGUgZGF0YS4KKyAgICBpZiAoZnJhbWVMb2FkZXIoKS0+YWN0aXZl
RG9jdW1lbnRMb2FkZXIoKS0+c3Vic3RpdHV0ZURhdGEoKS5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
Y2FsbENvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5KHRoaXMsIFBvbGljeVVzZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoRlRQRElSKQorICAgIC8vIFJlc3BlY3QgdGhl
IGhpZGRlbiBGVFAgRGlyZWN0b3J5IExpc3RpbmcgcHJlZiBzbyBpdCBjYW4gYmUgdGVzdGVkIGV2
ZW4gaWYgdGhlIHBvbGljeSBkZWxlZ2F0ZSBtaWdodCBvdGhlcndpc2UgZGlzYWxsb3cgaXQKKyAg
ICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOworICAgIGlmIChzZXR0
aW5ncyAmJiBzZXR0aW5ncy0+Zm9yY2VGVFBEaXJlY3RvcnlMaXN0aW5ncygpICYmIG1fcmVzcG9u
c2UubWltZVR5cGUoKSA9PSAiYXBwbGljYXRpb24veC1mdHAtZGlyZWN0b3J5IikgeworICAgICAg
ICBjYWxsQ29udGludWVBZnRlckNvbnRlbnRQb2xpY3kodGhpcywgUG9saWN5VXNlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgZnJhbWVMb2FkZXIoKS0+cG9saWN5KCkt
PmNoZWNrQ29udGVudFBvbGljeShtX3Jlc3BvbnNlLm1pbWVUeXBlKCksIGNhbGxDb250aW51ZUFm
dGVyQ29udGVudFBvbGljeSwgdGhpcyk7CiB9CiAKIHZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpk
aWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBsb25nIGxvbmcgbGVu
Z3RoUmVjZWl2ZWQsIGJvb2wgYWxsQXRPbmNlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2UuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCmlu
ZGV4IGJiNjhiODIuLjhmNWY3M2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlLmNwcAorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTI0
NCwxOSArMjQ0LDIwIEBAIGJvb2wgU1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJl
Y2VpdmVkKQogICAgICAgICBtX2Nocm9tZUNsaWVudC5zZXQobmV3IFNWR0ltYWdlQ2hyb21lQ2xp
ZW50KHRoaXMpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGlzIFNWRyBlbmRz
IHVwIGxvYWRpbmcgaXRzZWxmLCB3ZSBtaWdodCBsZWFrIHRoZSB3b3JsZC4KLSAgICAgICAgLy8g
VEhlIGNvbW1lbnQgc2FpZCB0aGF0IHRoZSBDYWNoZSBjb2RlIGRvZXMgbm90IGtub3cgYWJvdXQg
Q2FjaGVkSW1hZ2VzCisgICAgICAgIC8vIFRoZSBjb21tZW50IHNhaWQgdGhhdCB0aGUgQ2FjaGUg
Y29kZSBkb2VzIG5vdCBrbm93IGFib3V0IENhY2hlZEltYWdlcwogICAgICAgICAvLyBob2xkaW5n
IEZyYW1lcyBhbmQgd29uJ3Qga25vdyB0byBicmVhayB0aGUgY3ljbGUuIEJ1dCAKICAgICAgICAg
bV9wYWdlLnNldChuZXcgUGFnZShtX2Nocm9tZUNsaWVudC5nZXQoKSwgZHVtbXlDb250ZXh0TWVu
dUNsaWVudCwgZHVtbXlFZGl0b3JDbGllbnQsIGR1bW15RHJhZ0NsaWVudCwgZHVtbXlJbnNwZWN0
b3JDbGllbnQsIGR1bW15UGx1Z2luSGFsdGVyQ2xpZW50KSk7CiAgICAgICAgIG1fcGFnZS0+c2V0
dGluZ3MoKS0+c2V0SmF2YVNjcmlwdEVuYWJsZWQoZmFsc2UpOwogICAgICAgICBtX3BhZ2UtPnNl
dHRpbmdzKCktPnNldFBsdWdpbnNFbmFibGVkKGZhbHNlKTsKIAorICAgICAgICAvLyBGSVhNRTog
U2VyaW91c2x5PyAgVGhpcyBpcyB3aHkgd2UgY2FuJ3QgaGF2ZSBuaWNlIHRoaW5ncy4KICAgICAg
ICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IEZyYW1lOjpjcmVhdGUobV9wYWdlLmdldCgpLCAwLCBk
dW1teUZyYW1lTG9hZGVyQ2xpZW50KTsKICAgICAgICAgZnJhbWUtPnNldFZpZXcoRnJhbWVWaWV3
OjpjcmVhdGUoZnJhbWUuZ2V0KCkpKTsKICAgICAgICAgZnJhbWUtPmluaXQoKTsKICAgICAgICAg
UmVzb3VyY2VSZXF1ZXN0IGZha2VSZXF1ZXN0KEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAiIikpOwog
ICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOwogICAgICAgICBs
b2FkZXItPmxvYWQoZmFrZVJlcXVlc3QsIGZhbHNlKTsgLy8gTWFrZSBzdXJlIHRoZSBEb2N1bWVu
dExvYWRlciBpcyBjcmVhdGVkCi0gICAgICAgIGxvYWRlci0+Y2FuY2VsQ29udGVudFBvbGljeUNo
ZWNrKCk7IC8vIGNhbmNlbCBhbnkgcG9saWN5IGNoZWNrcworICAgICAgICBsb2FkZXItPnBvbGlj
eSgpLT5jYW5jZWxDaGVjaygpOyAvLyBjYW5jZWwgYW55IHBvbGljeSBjaGVja3MKICAgICAgICAg
bG9hZGVyLT5jb21taXRQcm92aXNpb25hbExvYWQoMCk7CiAgICAgICAgIGxvYWRlci0+c2V0UmVz
cG9uc2VNSU1FVHlwZSgiaW1hZ2Uvc3ZnK3htbCIpOwogICAgICAgICBsb2FkZXItPmJlZ2luKEtV
UkwoKSk7IC8vIGNyZWF0ZSB0aGUgZW1wdHkgZG9jdW1lbnQKZGlmZiAtLWdpdCBhL1dlYktpdC9n
dGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggZmU2NjQ0MC4uZmM4Yzhi
ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAwOS0xMC0wNyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3
ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEZhY3RvciBMb2FkZXJQb2xpY3kgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDE1NQorCisgICAgICAgIE1vdmUg
dGhlIHBvbGljeSBjYWxsYmFjayB0byB0aGUgcG9saWN5IG9iamVjdC4KKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAoV2Vi
S2l0OjpGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZSk6
CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGlj
eUZvck5ld1dpbmRvd0FjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgorCiAyMDA5LTEwLTA2
ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBF
cmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEd0ay5jcHAKaW5kZXggNmE4NjIzNS4uMmVhOWJmNSAxMDA2NDQKLS0tIGEvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTEyOSw3ICsx
MjksNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKEZy
YW1lUG9saWN5RnVuY3Rpb24gcG9saWN5RnVuY3RpbwogICAgIEFTU0VSVChwb2xpY3lGdW5jdGlv
bik7CiAgICAgaWYgKCFwb2xpY3lGdW5jdGlvbikKICAgICAgICAgcmV0dXJuOwotICAgIChjb3Jl
KG1fZnJhbWUpLT5sb2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lVc2UpOworICAgIChj
b3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+cG9saWN5KCktPipwb2xpY3lGdW5jdGlvbikoUG9saWN5
VXNlKTsKIH0KIAogCkBAIC0yODAsNyArMjgwLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6
ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZShGcmFtZVBvbGljeUZ1bmN0aW9uIHBvbGkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHJlc291cmNlUmVxdWVzdC5pc051bGwoKSkgewot
ICAgICAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPipwb2xpY3lGdW5jdGlvbikoUG9saWN5
SWdub3JlKTsKKyAgICAgICAgKGNvcmUobV9mcmFtZSktPmxvYWRlcigpLT5wb2xpY3koKS0+KnBv
bGljeUZ1bmN0aW9uKShQb2xpY3lJZ25vcmUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0zNDcsNyArMzQ3LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQ
b2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKHJlc291cmNlUmVxdWVzdC5pc051bGwoKSkgewotICAgICAgICAoY29yZSht
X2ZyYW1lKS0+bG9hZGVyKCktPipwb2xpY3lGdW5jdGlvbikoUG9saWN5SWdub3JlKTsKKyAgICAg
ICAgKGNvcmUobV9mcmFtZSktPmxvYWRlcigpLT5wb2xpY3koKS0+KnBvbGljeUZ1bmN0aW9uKShQ
b2xpY3lJZ25vcmUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNzAsNyArMzcwLDcg
QEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5k
b3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGkKICAgICAvLyBGSVhNRTogSSB0aGluayBRdCB2ZXJz
aW9uIG1hcnNoYWxzIHRoaXMgdG8gYW5vdGhlciB0aHJlYWQgc28gd2hlbiB3ZQogICAgIC8vIGhh
dmUgbXVsdGktdGhyZWFkZWQgZG93bmxvYWQsIHdlIG1pZ2h0IG5lZWQgdG8gZG8gdGhlIHNhbWUK
ICAgICBpZiAoIWlzSGFuZGxlZCkKLSAgICAgICAgKGNvcmUobV9mcmFtZSktPmxvYWRlcigpLT4q
cG9saWN5RnVuY3Rpb24pKFBvbGljeVVzZSk7CisgICAgICAgIChjb3JlKG1fZnJhbWUpLT5sb2Fk
ZXIoKS0+cG9saWN5KCktPipwb2xpY3lGdW5jdGlvbikoUG9saWN5VXNlKTsKIH0KIAogdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9u
KEZyYW1lUG9saWN5RnVuY3Rpb24gcG9saWN5RnVuY3Rpb24sIGNvbnN0IE5hdmlnYXRpb25BY3Rp
b24mIGFjdGlvbiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIFBhc3NS
ZWZQdHI8Rm9ybVN0YXRlPikKQEAgLTM4MCw3ICszODAsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lG
dW5jdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAocmVzb3VyY2VSZXF1ZXN0LmlzTnVsbCgp
KSB7Ci0gICAgICAgIChjb3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQ
b2xpY3lJZ25vcmUpOworICAgICAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPnBvbGljeSgp
LT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeUlnbm9yZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTM5Nyw3ICszOTcsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lGdW5jdAogICAgIGdfc2ln
bmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAibmF2aWdhdGlvbi1yZXF1ZXN0ZWQiLCBtX2ZyYW1l
LCByZXF1ZXN0LCAmcmVzcG9uc2UpOwogCiAgICAgaWYgKHJlc3BvbnNlID09IFdFQktJVF9OQVZJ
R0FUSU9OX1JFU1BPTlNFX0lHTk9SRSkgewotICAgICAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVy
KCktPipwb2xpY3lGdW5jdGlvbikoUG9saWN5SWdub3JlKTsKKyAgICAgICAgKGNvcmUobV9mcmFt
ZSktPmxvYWRlcigpLT5wb2xpY3koKS0+KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lJZ25vcmUpOwog
ICAgICAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cgYi9XZWJLaXQvaGFpa3UvQ2hhbmdl
TG9nCmluZGV4IGY0NmEyNTAuLmVkYzExYjMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9oYWlrdS9DaGFu
Z2VMb2cKKysrIGIvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDA5
LTEwLTA3ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmFjdG9yIExvYWRlclBvbGljeSBvdXQg
b2YgRnJhbWVMb2FkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMwMTU1CisKKyAgICAgICAgTW92ZSB0aGUgcG9saWN5IGNhbGxiYWNrIHRvIHRoZSBw
b2xpY3kgb2JqZWN0LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpk
aXNwYXRjaFdpbGxTdWJtaXRGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdX
aW5kb3dBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6
ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKwogMjAwOS0wOS0xNyAg
S2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCmRpZmYgLS1naXQgYS9XZWJLaXQvaGFpa3Uv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHAgYi9XZWJLaXQvaGFpa3Uv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5jcHAKaW5kZXggZDI2ODNjMC4u
Y2RhNjQxZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3UuY3BwCisrKyBiL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEhhaWt1LmNwcApAQCAtMjgwLDcgKzI4MCw3IEBAIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShGcmFtZVBvbGljeUZ1bmN0aW9u
IGZ1bmN0aW9uCiAgICAgLy8gRklYTUU6IFNlbmQgYW4gZXZlbnQgdG8gYWxsb3cgZm9yIGFsZXJ0
cyBhbmQgY2FuY2VsbGF0aW9uLgogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOworICAgIChtX2Zy
YW1lLT5sb2FkZXIoKS0+cG9saWN5KCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKIH0KIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZExvYWRNYWluUmVzb3VyY2UoRG9j
dW1lbnRMb2FkZXIqKQpAQCAtNjM1LDcgKzYzNSw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZShGcmFtZVBvbGljeUZ1bmN0aW9u
CiAgICAgICAgIHJldHVybjsKIAogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgKG1fZnJhbWUt
PmxvYWRlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CisgICAgKG1fZnJhbWUtPmxvYWRlcigp
LT5wb2xpY3koKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1l
UG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sCkBAIC02NTAsMTIgKzY1MCwxMiBAQCB2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9u
KEZyYW1lUG9saWN5RgogICAgICAgICBCTWVzc2FnZSBtZXNzYWdlKE5FV19XSU5ET1dfUkVRVUVT
VEVEKTsKICAgICAgICAgbWVzc2FnZS5BZGRTdHJpbmcoInVybCIsIHJlcXVlc3QudXJsKCkuc3Ry
aW5nKCkpOwogICAgICAgICBpZiAobV9tZXNzZW5nZXItPlNlbmRNZXNzYWdlKCZtZXNzYWdlKSkg
ewotICAgICAgICAgICAgKG1fZnJhbWUtPmxvYWRlcigpLT4qZnVuY3Rpb24pKFBvbGljeUlnbm9y
ZSk7CisgICAgICAgICAgICAobV9mcmFtZS0+bG9hZGVyKCktPnBvbGljeSgpLT4qZnVuY3Rpb24p
KFBvbGljeUlnbm9yZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICAobV9mcmFtZS0+bG9hZGVyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKKyAgICAobV9m
cmFtZS0+bG9hZGVyKCktPnBvbGljeSgpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CiB9CiAKIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sCkBAIC02NzEsNyArNjcxLDcg
QEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3kKICAgICAgICAgbWVzc2FnZS5BZGRTdHJpbmcoInVy
bCIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpOwogICAgICAgICBtX21lc3Nlbmdlci0+U2VuZE1l
c3NhZ2UoJm1lc3NhZ2UpOwogCi0gICAgICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+KmZ1bmN0aW9u
KShQb2xpY3lVc2UpOworICAgICAgICAobV9mcmFtZS0+bG9hZGVyKCktPnBvbGljeSgpLT4qZnVu
Y3Rpb24pKFBvbGljeVVzZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL0No
YW5nZUxvZyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDM4NGI3ZWUuLjFmM2UyNDcgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMTAtMDcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
YWN0b3IgTG9hZGVyUG9saWN5IG91dCBvZiBGcmFtZUxvYWRlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAxNTUKKworICAgICAgICBNb3ZlIHRoZSBw
b2xpY3kgY2FsbGJhY2sgdG8gdGhlIHBvbGljeSBvYmplY3QuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVy
Q2xpZW50OjpyZWNlaXZlZFBvbGljeURlY2lzb24pOgorCiAyMDA5LTEwLTA2ICBBZGFtIEJhcnRo
ICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwu
CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50Lm1tIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5t
bQppbmRleCA3NjQxMzBhLi4zMWI3ZjQ5IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KQEAgLTcxOCw3ICs3MTgsNyBAQCB2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKEZyYW1lUG9saWN5RnVu
Y3Rpb24gZnVuY3Rpb24sCiB7CiAgICAgaWQgPFdlYkZvcm1EZWxlZ2F0ZT4gZm9ybURlbGVnYXRl
ID0gW2dldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSkgX2Zvcm1EZWxlZ2F0ZV07CiAgICAgaWYg
KCFmb3JtRGVsZWdhdGUpIHsKLSAgICAgICAgKGNvcmUobV93ZWJGcmFtZS5nZXQoKSktPmxvYWRl
cigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CisgICAgICAgIChjb3JlKG1fd2ViRnJhbWUuZ2V0
KCkpLT5sb2FkZXIoKS0+cG9saWN5KCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMTE5Nyw3ICsxMTk3LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6cmVjZWl2ZWRQb2xpY3lEZWNpc29uKFBvbGljeUFjdGlvbiBhY3Rpb24pCiAgICAg
bV9wb2xpY3lMaXN0ZW5lciA9IG5pbDsKICAgICBtX3BvbGljeUZ1bmN0aW9uID0gMDsKIAotICAg
IChjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpLT5sb2FkZXIoKS0+KmZ1bmN0aW9uKShhY3Rpb24pOwor
ICAgIChjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpLT5sb2FkZXIoKS0+cG9saWN5KCktPipmdW5jdGlv
bikoYWN0aW9uKTsKIH0KIAogU3RyaW5nIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp1c2VyQWdlbnQo
Y29uc3QgS1VSTCYgdXJsKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktp
dC9xdC9DaGFuZ2VMb2cKaW5kZXggNGZkNzQ1YS4uMDExNzk2OSAxMDA2NDQKLS0tIGEvV2ViS2l0
L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMDktMTAtMDcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGYWN0b3IgTG9hZGVyUG9saWN5
IG91dCBvZiBGcmFtZUxvYWRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzAxNTUKKworICAgICAgICBNb3ZlIHRoZSBwb2xpY3kgY2FsbGJhY2sgdG8g
dGhlIHBvbGljeSBvYmplY3QuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNh
bGxQb2xpY3lGdW5jdGlvbik6CisKIDIwMDktMTAtMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBh
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcCBiL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAppbmRleCBjMmIzNWZm
Li5iM2JkZTgzIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRRdC5jcHAKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50UXQuY3BwCkBAIC0xODcsNyArMTg3LDcgQEAgUVdlYkZyYW1lKiBGcmFtZUxvYWRlckNs
aWVudFF0Ojp3ZWJGcmFtZSgpIGNvbnN0CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6Y2Fs
bFBvbGljeUZ1bmN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sIFBvbGljeUFjdGlv
biBhY3Rpb24pCiB7Ci0gICAgKG1fZnJhbWUtPmxvYWRlcigpLT4qZnVuY3Rpb24pKGFjdGlvbik7
CisgICAgKG1fZnJhbWUtPmxvYWRlcigpLT5wb2xpY3koKS0+KmZ1bmN0aW9uKShhY3Rpb24pOwog
fQogCiBib29sIEZyYW1lTG9hZGVyQ2xpZW50UXQ6Omhhc1dlYlZpZXcoKSBjb25zdApkaWZmIC0t
Z2l0IGEvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCBj
NDBlM2Q0Li41NzJjZTVhIDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9X
ZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDA5LTEwLTA3ICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRmFjdG9yIExvYWRlclBvbGljeSBvdXQgb2YgRnJhbWVMb2FkZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMTU1CisK
KyAgICAgICAgTW92ZSB0aGUgcG9saWN5IGNhbGxiYWNrIHRvIHRoZSBwb2xpY3kgb2JqZWN0Lgor
CisgICAgICAgICogV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViRnJhbWU6OmRpc3BhdGNoV2ls
bFN1Ym1pdEZvcm0pOgorICAgICAgICAoV2ViRnJhbWU6OnJlY2VpdmVkUG9saWN5RGVjaXNpb24p
OgorICAgICAgICAoV2ViRnJhbWU6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUpOgor
ICAgICAgICAoV2ViRnJhbWU6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9u
KToKKyAgICAgICAgKFdlYkZyYW1lOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24pOgorCiAyMDA5LTEwLTA2ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJLaXQvd2lu
L1dlYkZyYW1lLmNwcCBiL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCmluZGV4IDQ0ZWZlODMuLmJm
NDJlNDIgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCisrKyBiL1dlYktpdC93
aW4vV2ViRnJhbWUuY3BwCkBAIC0xMzQxLDcgKzEzNDEsNyBAQCB2b2lkIFdlYkZyYW1lOjpkaXNw
YXRjaFdpbGxTdWJtaXRGb3JtKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sIFBhc3NSZWZQ
dHI8RgogICAgIENPTVB0cjxJV2ViRm9ybURlbGVnYXRlPiBmb3JtRGVsZWdhdGU7CiAKICAgICBp
ZiAoRkFJTEVEKGQtPndlYlZpZXctPmZvcm1EZWxlZ2F0ZSgmZm9ybURlbGVnYXRlKSkpIHsKLSAg
ICAgICAgKGNvcmVGcmFtZS0+bG9hZGVyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKKyAgICAg
ICAgKGNvcmVGcmFtZS0+bG9hZGVyKCktPnBvbGljeSgpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzNjAsNyArMTM2MCw3IEBAIHZvaWQgV2Vi
RnJhbWU6OmRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlv
biwgUGFzc1JlZlB0cjxGCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBBZGQgYSBz
YW5lIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KLSAgICAoY29yZUZyYW1lLT5sb2FkZXIoKS0+KmZ1
bmN0aW9uKShQb2xpY3lVc2UpOworICAgIChjb3JlRnJhbWUtPmxvYWRlcigpLT5wb2xpY3koKS0+
KmZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQogCiB2b2lkIFdlYkZyYW1lOjpyZXZlcnRUb1Byb3Zp
c2lvbmFsU3RhdGUoRG9jdW1lbnRMb2FkZXIqKQpAQCAtMTUyNiw3ICsxNTI2LDcgQEAgdm9pZCBX
ZWJGcmFtZTo6cmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihQb2xpY3lBY3Rpb24gYWN0aW9uKQogICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHRoaXMpOwogICAgIEFTU0VSVChjb3JlRnJhbWUpOwog
Ci0gICAgKGNvcmVGcmFtZS0+bG9hZGVyKCktPipmdW5jdGlvbikoYWN0aW9uKTsKKyAgICAoY29y
ZUZyYW1lLT5sb2FkZXIoKS0+cG9saWN5KCktPipmdW5jdGlvbikoYWN0aW9uKTsKIH0KIAogdm9p
ZCBXZWJGcmFtZTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZShGcmFtZVBvbGljeUZ1
bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCkBAIC0xNTQzLDcgKzE1NDMsNyBAQCB2b2lkIFdlYkZyYW1lOjpkaXNw
YXRjaERlY2lkZVBvbGljeUZvck1JTUVUeXBlKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24s
IGNvbgogICAgIGlmIChTVUNDRUVERUQocG9saWN5RGVsZWdhdGUtPmRlY2lkZVBvbGljeUZvck1J
TUVUeXBlKGQtPndlYlZpZXcsIEJTdHJpbmcobWltZVR5cGUpLCB1cmxSZXF1ZXN0LmdldCgpLCB0
aGlzLCBzZXRVcFBvbGljeUxpc3RlbmVyKGZ1bmN0aW9uKS5nZXQoKSkpKQogICAgICAgICByZXR1
cm47CiAKLSAgICAoY29yZUZyYW1lLT5sb2FkZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOwor
ICAgIChjb3JlRnJhbWUtPmxvYWRlcigpLT5wb2xpY3koKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2Up
OwogfQogCiB2b2lkIFdlYkZyYW1lOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0Fj
dGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9u
JiBhY3Rpb24sIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUGFzc1JlZlB0cjxGb3Jt
U3RhdGU+IGZvcm1TdGF0ZSwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUpCkBAIC0xNTYxLDcgKzE1
NjEsNyBAQCB2b2lkIFdlYkZyYW1lOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0Fj
dGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aQogICAgIGlmIChTVUNDRUVERUQocG9saWN5
RGVsZWdhdGUtPmRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihkLT53ZWJWaWV3LCBhY3Rp
b25JbmZvcm1hdGlvbi5nZXQoKSwgdXJsUmVxdWVzdC5nZXQoKSwgQlN0cmluZyhmcmFtZU5hbWUp
LCBzZXRVcFBvbGljeUxpc3RlbmVyKGZ1bmN0aW9uKS5nZXQoKSkpKQogICAgICAgICByZXR1cm47
CiAKLSAgICAoY29yZUZyYW1lLT5sb2FkZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOworICAg
IChjb3JlRnJhbWUtPmxvYWRlcigpLT5wb2xpY3koKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOwog
fQogCiB2b2lkIFdlYkZyYW1lOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b24oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYg
YWN0aW9uLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybVN0
YXRlPiBmb3JtU3RhdGUpCkBAIC0xNTc5LDcgKzE1NzksNyBAQCB2b2lkIFdlYkZyYW1lOjpkaXNw
YXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiBm
dW5jdAogICAgIGlmIChTVUNDRUVERUQocG9saWN5RGVsZWdhdGUtPmRlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb24oZC0+d2ViVmlldywgYWN0aW9uSW5mb3JtYXRpb24uZ2V0KCksIHVybFJl
cXVlc3QuZ2V0KCksIHRoaXMsIHNldFVwUG9saWN5TGlzdGVuZXIoZnVuY3Rpb24pLmdldCgpKSkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIChjb3JlRnJhbWUtPmxvYWRlcigpLT4qZnVuY3Rpb24p
KFBvbGljeVVzZSk7CisgICAgKGNvcmVGcmFtZS0+bG9hZGVyKCktPnBvbGljeSgpLT4qZnVuY3Rp
b24pKFBvbGljeVVzZSk7CiB9CiAKIHZvaWQgV2ViRnJhbWU6OmRpc3BhdGNoVW5hYmxlVG9JbXBs
ZW1lbnRQb2xpY3koY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCmRpZmYgLS1naXQgYS9XZWJL
aXQvd3gvQ2hhbmdlTG9nIGIvV2ViS2l0L3d4L0NoYW5nZUxvZwppbmRleCAyNTA5NmE4Li44MmI3
ZmMyIDEwMDY0NAotLS0gYS9XZWJLaXQvd3gvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC93eC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAwOS0xMC0wNyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3
ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEZhY3RvciBMb2FkZXJQb2xpY3kgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDE1NQorCisgICAgICAgIE1vdmUg
dGhlIHBvbGljeSBjYWxsYmFjayB0byB0aGUgcG9saWN5IG9iamVjdC4KKworICAgICAgICAqIFdl
YktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudFd4OjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50V3g6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTUlNRVR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRXeDo6ZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnRXeDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKwog
MjAwOS0wOS0yNSAgS2V2aW4gT2xsaXZpZXIgIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KIAog
ICAgICAgICB3eCBidWlsZCBmaXguIEFkZCBFbXB0eVBsdWdpbkhhbHRlckNsaWVudCB3aGVuIGNy
ZWF0aW5nIHRoZSBQYWdlLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRXeC5jcHAgYi9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFd4LmNwcAppbmRleCA1OTRlMGMzLi41ZTk3YTNkIDEwMDY0NAotLS0gYS9XZWJLaXQv
d3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcAorKysgYi9XZWJLaXQvd3gv
V2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcApAQCAtMzQwLDcgKzM0MCw3IEBA
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnRXeDo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShGcmFtZVBv
bGljeUZ1bmN0aW9uIGZ1bmN0aW9uLAogICAgIC8vIEZJWE1FOiBTZW5kIGFuIGV2ZW50IHRvIGFs
bG93IGZvciBhbGVydHMgYW5kIGNhbmNlbGxhdGlvbgogICAgIGlmICghbV93ZWJGcmFtZSkKICAg
ICAgICAgcmV0dXJuOwotICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lV
c2UpOworICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+cG9saWN5KCktPipmdW5jdGlvbikoUG9saWN5
VXNlKTsKIH0KIAogCkBAIC03MDksNyArNzA5LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFd4
OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck1JTUVUeXBlKEZyYW1lUG9saWN5RnVuY3Rpb24gZnUK
ICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgKG1fZnJh
bWUtPmxvYWRlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CisgICAgKG1fZnJhbWUtPmxvYWRl
cigpLT5wb2xpY3koKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQogCiB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50V3g6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1l
UG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgY29uc3QgU3Ry
aW5nJiB0YXJnZXROYW1lKQpAQCAtNzI0LDEyICs3MjQsMTIgQEAgdm9pZCBGcmFtZUxvYWRlckNs
aWVudFd4OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihGcmFtZVBvbGlj
eUZ1bmMKICAgICAgICAgaWYgKG1fd2ViVmlldy0+R2V0RXZlbnRIYW5kbGVyKCktPlByb2Nlc3NF
dmVudCh3a0V2ZW50KSkgewogICAgICAgICAgICAgLy8gaWYgdGhlIGFwcCBoYW5kbGVzIGFuZCBk
b2Vzbid0IHNraXAgdGhlIGV2ZW50LCAKICAgICAgICAgICAgIC8vIGZyb20gV2ViS2l0J3MgcGVy
c3BlY3RpdmUgdHJlYXQgaXQgYXMgYmxvY2tlZCAvIGlnbm9yZWQKLSAgICAgICAgICAgIChtX2Zy
YW1lLT5sb2FkZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lJZ25vcmUpOworICAgICAgICAgICAgKG1f
ZnJhbWUtPmxvYWRlcigpLT5wb2xpY3koKS0+KmZ1bmN0aW9uKShQb2xpY3lJZ25vcmUpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIChtX2ZyYW1lLT5s
b2FkZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOworICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+
cG9saWN5KCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNs
aWVudFd4OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xp
Y3lGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgYWN0aW9uLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPikKQEAgLTc0
NCw5ICs3NDQsOSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6OmRpc3BhdGNoRGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bgogICAgICAgICAKICAgICAgICAg
bV93ZWJWaWV3LT5HZXRFdmVudEhhbmRsZXIoKS0+UHJvY2Vzc0V2ZW50KHdrRXZlbnQpOwogICAg
ICAgICBpZiAod2tFdmVudC5Jc0NhbmNlbGxlZCgpKQotICAgICAgICAgICAgKG1fZnJhbWUtPmxv
YWRlcigpLT4qZnVuY3Rpb24pKFBvbGljeUlnbm9yZSk7CisgICAgICAgICAgICAobV9mcmFtZS0+
bG9hZGVyKCktPnBvbGljeSgpLT4qZnVuY3Rpb24pKFBvbGljeUlnbm9yZSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2Up
OworICAgICAgICAgICAgKG1fZnJhbWUtPmxvYWRlcigpLT5wb2xpY3koKS0+KmZ1bmN0aW9uKShQ
b2xpY3lVc2UpOwogICAgICAgICAKICAgICB9CiB9
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40774</attachid>
            <date>2009-10-07 01:55:18 -0700</date>
            <delta_ts>2009-10-07 12:49:04 -0700</delta_ts>
            <desc>LoaderPolicy</desc>
            <filename>bug-30155-20091007015517.patch</filename>
            <type>text/plain</type>
            <size>50740</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzEwZTM0Zi4uZDQxMDkwMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NCBAQAorMjAwOS0xMC0wNyAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZhY3RvciBMb2FkZXJQb2xpY3kgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDE1NQorCisgICAg
ICAgIFRoaXMgcGF0Y2ggc2VwYXJhdGVzIExvYWRlclBvbGljeSBmcm9tIEZyYW1lTG9hZGVyLiAg
TG9hZGVyIHBvbGljeSBpcworICAgICAgICBpbiBjaGFuZ2Ugb2YgbWFuYWdpbmcgdGhlIEZyYW1l
TG9hZGVyQ2xpZW50IGNhbGxiYWNrcy4gIElkZWFsbHksIGl0CisgICAgICAgIHNob3VsZG4ndCBr
bm93IGFueXRoaW5nIGFib3V0IEZyYW1lTG9hZGVyLCBidXQgSSBjb3VsZG4ndCBxdWl0ZSByZW1v
dmUKKyAgICAgICAgYWxsIGtub3dsZWRnZSAoYWx0aG91Z2ggd2UgbWlnaHQgYmUgYWJsZSB0byBk
byBtb3JlIGxhdGVyKS4gIEluIGEKKyAgICAgICAgZnV0dXJlIHBhdGNoLCBJJ2xsIG1vdmUgTG9h
ZGVyUG9saWN5IGludG8gYSBzZXBhcmF0ZSBmaWxlLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFVSTCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
bG9hZFdpdGhEb2N1bWVudExvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJQb2xpY3k6
OmhhbmRsZVVuaW1wbGVtZW50YWJsZVBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJQ
b2xpY3k6OmNhbm5vdFNob3dNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJQb2xp
Y3k6OkxvYWRlclBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJQb2xpY3k6OmNoZWNr
TmF2aWdhdGlvblBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJQb2xpY3k6OmNoZWNr
Q29udGVudFBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2hvdWxkUmVs
b2FkVG9IYW5kbGVVbnJlYWNoYWJsZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6c3RvcEFsbExvYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyUG9saWN5OjpjYW5j
ZWxDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXJQb2xpY3k6OnN0b3BDaGVjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpMb2FkZXJQb2xpY3k6OmNvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5
KToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlclBvbGljeTo6Y29udGludWVMb2FkQWZ0ZXJXaWxs
U3VibWl0Rm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y29udGludWVMb2Fk
QWZ0ZXJXaWxsU3VibWl0Rm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9h
ZFBvc3RSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjb250aW51ZUZy
YWdtZW50U2Nyb2xsQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6Okxv
YWRlclBvbGljeTo6Y2hlY2tOZXdXaW5kb3dQb2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6TG9h
ZGVyUG9saWN5Ojpjb250aW51ZUFmdGVyTmV3V2luZG93UG9saWN5KToKKyAgICAgICAgKFdlYkNv
cmU6OkxvYWRlclBvbGljeTo6Y29udGludWVBZnRlck5hdmlnYXRpb25Qb2xpY3kpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGlj
eSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpM
b2FkZXJQb2xpY3k6OmxvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlclBvbGljeTo6
c2V0TG9hZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyUG9saWN5OjpkZWxlZ2F0ZUlz
RGVjaWRpbmdOYXZpZ2F0aW9uUG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlclBvbGlj
eTo6ZGVsZWdhdGVJc0hhbmRsaW5nVW5pbXBsZW1lbnRhYmxlUG9saWN5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpwb2xpY3kpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRl
ckNsaWVudC5oOgorICAgICAgICAqIGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TWFpblJlc291cmNlTG9hZGVyOjpkaWRDYW5jZWwpOgorICAgICAgICAo
V2ViQ29yZTo6TWFpblJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TWFpblJlc291cmNlTG9hZGVyOjpjb250aW51ZUFmdGVyQ29udGVudFBvbGljeSk6
CisgICAgICAgIChXZWJDb3JlOjpNYWluUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25z
ZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ltYWdlOjpkYXRhQ2hhbmdlZCk6CisKIDIwMDktMTAtMDYgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCmluZGV4IDk5NjZkNDEuLjhhOTA5NzYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAKQEAgLTE2NiwxMiArMTY2LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5SZWZlclRv
UGFyZW50RnJhbWVFbmNvZGluZyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IEZyYW1lCiBGcmFt
ZUxvYWRlcjo6RnJhbWVMb2FkZXIoRnJhbWUqIGZyYW1lLCBGcmFtZUxvYWRlckNsaWVudCogY2xp
ZW50KQogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAs
IG1fcG9saWN5KGZyYW1lKQogICAgICwgbV9zdGF0ZShGcmFtZVN0YXRlQ29tbWl0dGVkUGFnZSkK
ICAgICAsIG1fbG9hZFR5cGUoRnJhbWVMb2FkVHlwZVN0YW5kYXJkKQotICAgICwgbV9wb2xpY3lM
b2FkVHlwZShGcmFtZUxvYWRUeXBlU3RhbmRhcmQpCiAgICAgLCBtX2RlbGVnYXRlSXNIYW5kbGlu
Z1Byb3Zpc2lvbmFsTG9hZEVycm9yKGZhbHNlKQotICAgICwgbV9kZWxlZ2F0ZUlzRGVjaWRpbmdO
YXZpZ2F0aW9uUG9saWN5KGZhbHNlKQotICAgICwgbV9kZWxlZ2F0ZUlzSGFuZGxpbmdVbmltcGxl
bWVudGFibGVQb2xpY3koZmFsc2UpCiAgICAgLCBtX2ZpcnN0TGF5b3V0RG9uZShmYWxzZSkKICAg
ICAsIG1fcXVpY2tSZWRpcmVjdENvbWluZyhmYWxzZSkKICAgICAsIG1fc2VudFJlZGlyZWN0Tm90
aWZpY2F0aW9uKGZhbHNlKQpAQCAtMTk3OCw3ICsxOTc2LDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6
bG9hZFVSTChjb25zdCBLVVJMJiBuZXdVUkwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGNvbnN0
IFN0cmkKICAgICBOYXZpZ2F0aW9uQWN0aW9uIGFjdGlvbihuZXdVUkwsIG5ld0xvYWRUeXBlLCBp
c0Zvcm1TdWJtaXNzaW9uLCBldmVudCk7CiAKICAgICBpZiAoIXRhcmdldEZyYW1lICYmICFmcmFt
ZU5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNoZWNrTmV3V2luZG93UG9saWN5KGFjdGlvbiwg
cmVxdWVzdCwgZm9ybVN0YXRlLnJlbGVhc2UoKSwgZnJhbWVOYW1lKTsKKyAgICAgICAgcG9saWN5
KCktPmNoZWNrTmV3V2luZG93UG9saWN5KGFjdGlvbiwgRnJhbWVMb2FkZXI6OmNhbGxDb250aW51
ZUxvYWRBZnRlck5ld1dpbmRvd1BvbGljeSwKKyAgICAgICAgICAgIHJlcXVlc3QsIGZvcm1TdGF0
ZS5yZWxlYXNlKCksIGZyYW1lTmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE5
OTEsOSArMTk5MCw5IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRVUkwoY29uc3QgS1VSTCYgbmV3
VVJMLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBjb25zdCBTdHJpCiAgICAgLy8gd29yayBwcm9w
ZXJseS4KICAgICBpZiAoc2hvdWxkU2Nyb2xsVG9BbmNob3IoaXNGb3JtU3VibWlzc2lvbiwgbmV3
TG9hZFR5cGUsIG5ld1VSTCkpIHsKICAgICAgICAgb2xkRG9jdW1lbnRMb2FkZXItPnNldFRyaWdn
ZXJpbmdBY3Rpb24oYWN0aW9uKTsKLSAgICAgICAgc3RvcFBvbGljeUNoZWNrKCk7Ci0gICAgICAg
IG1fcG9saWN5TG9hZFR5cGUgPSBuZXdMb2FkVHlwZTsKLSAgICAgICAgY2hlY2tOYXZpZ2F0aW9u
UG9saWN5KHJlcXVlc3QsIG9sZERvY3VtZW50TG9hZGVyLmdldCgpLCBmb3JtU3RhdGUucmVsZWFz
ZSgpLAorICAgICAgICBwb2xpY3koKS0+c3RvcENoZWNrKCk7CisgICAgICAgIHBvbGljeSgpLT5z
ZXRMb2FkVHlwZShuZXdMb2FkVHlwZSk7CisgICAgICAgIHBvbGljeSgpLT5jaGVja05hdmlnYXRp
b25Qb2xpY3kocmVxdWVzdCwgb2xkRG9jdW1lbnRMb2FkZXIuZ2V0KCksIGZvcm1TdGF0ZS5yZWxl
YXNlKCksCiAgICAgICAgICAgICBjYWxsQ29udGludWVGcmFnbWVudFNjcm9sbEFmdGVyTmF2aWdh
dGlvblBvbGljeSwgdGhpcyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gbXVzdCBncmFiIHRo
aXMgbm93LCBzaW5jZSB0aGlzIGxvYWQgbWF5IHN0b3AgdGhlIHByZXZpb3VzIGxvYWQgYW5kIGNs
ZWFyIHRoaXMgZmxhZwpAQCAtMjA0Miw3ICsyMDQxLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9h
ZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1l
LAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY2hlY2tOZXdXaW5kb3dQb2xpY3koTmF2
aWdhdGlvbkFjdGlvbihyZXF1ZXN0LnVybCgpLCBOYXZpZ2F0aW9uVHlwZU90aGVyKSwgcmVxdWVz
dCwgMCwgZnJhbWVOYW1lKTsKKyAgICBwb2xpY3koKS0+Y2hlY2tOZXdXaW5kb3dQb2xpY3koTmF2
aWdhdGlvbkFjdGlvbihyZXF1ZXN0LnVybCgpLCBOYXZpZ2F0aW9uVHlwZU90aGVyKSwgRnJhbWVM
b2FkZXI6OmNhbGxDb250aW51ZUxvYWRBZnRlck5ld1dpbmRvd1BvbGljeSwgcmVxdWVzdCwgMCwg
ZnJhbWVOYW1lKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFdpdGhOYXZpZ2F0aW9uQWN0
aW9uKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgTmF2aWdhdGlvbkFjdGlv
biYgYWN0aW9uLCBib29sIGxvY2tIaXN0b3J5LCBGcmFtZUxvYWRUeXBlIHR5cGUsIFBhc3NSZWZQ
dHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUpCkBAIC0yMTAwLDMwICsyMDk5LDMwIEBAIHZvaWQgRnJh
bWVMb2FkZXI6OmxvYWRXaXRoRG9jdW1lbnRMb2FkZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwg
RnJhbWVMb2FkVHlwZSB0CiAgICAgaWYgKG1fdW5sb2FkRXZlbnRCZWluZ0Rpc3BhdGNoZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fcG9saWN5TG9hZFR5cGUgPSB0eXBlOworICAgIHBvbGlj
eSgpLT5zZXRMb2FkVHlwZSh0eXBlKTsKICAgICBSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUg
PSBwcnBGb3JtU3RhdGU7CiAgICAgYm9vbCBpc0Zvcm1TdWJtaXNzaW9uID0gZm9ybVN0YXRlOwog
CiAgICAgY29uc3QgS1VSTCYgbmV3VVJMID0gbG9hZGVyLT5yZXF1ZXN0KCkudXJsKCk7CiAKLSAg
ICBpZiAoc2hvdWxkU2Nyb2xsVG9BbmNob3IoaXNGb3JtU3VibWlzc2lvbiwgbV9wb2xpY3lMb2Fk
VHlwZSwgbmV3VVJMKSkgeworICAgIGlmIChzaG91bGRTY3JvbGxUb0FuY2hvcihpc0Zvcm1TdWJt
aXNzaW9uLCBwb2xpY3koKS0+bG9hZFR5cGUoKSwgbmV3VVJMKSkgewogICAgICAgICBSZWZQdHI8
RG9jdW1lbnRMb2FkZXI+IG9sZERvY3VtZW50TG9hZGVyID0gbV9kb2N1bWVudExvYWRlcjsKLSAg
ICAgICAgTmF2aWdhdGlvbkFjdGlvbiBhY3Rpb24obmV3VVJMLCBtX3BvbGljeUxvYWRUeXBlLCBp
c0Zvcm1TdWJtaXNzaW9uKTsKKyAgICAgICAgTmF2aWdhdGlvbkFjdGlvbiBhY3Rpb24obmV3VVJM
LCBwb2xpY3koKS0+bG9hZFR5cGUoKSwgaXNGb3JtU3VibWlzc2lvbik7CiAKICAgICAgICAgb2xk
RG9jdW1lbnRMb2FkZXItPnNldFRyaWdnZXJpbmdBY3Rpb24oYWN0aW9uKTsKLSAgICAgICAgc3Rv
cFBvbGljeUNoZWNrKCk7Ci0gICAgICAgIGNoZWNrTmF2aWdhdGlvblBvbGljeShsb2FkZXItPnJl
cXVlc3QoKSwgb2xkRG9jdW1lbnRMb2FkZXIuZ2V0KCksIGZvcm1TdGF0ZSwKKyAgICAgICAgcG9s
aWN5KCktPnN0b3BDaGVjaygpOworICAgICAgICBwb2xpY3koKS0+Y2hlY2tOYXZpZ2F0aW9uUG9s
aWN5KGxvYWRlci0+cmVxdWVzdCgpLCBvbGREb2N1bWVudExvYWRlci5nZXQoKSwgZm9ybVN0YXRl
LAogICAgICAgICAgICAgY2FsbENvbnRpbnVlRnJhZ21lbnRTY3JvbGxBZnRlck5hdmlnYXRpb25Q
b2xpY3ksIHRoaXMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChGcmFtZSogcGFyZW50ID0g
bV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKICAgICAgICAgICAgIGxvYWRlci0+c2V0T3ZlcnJp
ZGVFbmNvZGluZyhwYXJlbnQtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5vdmVycmlkZUVu
Y29kaW5nKCkpOwogCi0gICAgICAgIHN0b3BQb2xpY3lDaGVjaygpOworICAgICAgICBwb2xpY3ko
KS0+c3RvcENoZWNrKCk7CiAgICAgICAgIHNldFBvbGljeURvY3VtZW50TG9hZGVyKGxvYWRlcik7
CiAgICAgICAgIGlmIChsb2FkZXItPnRyaWdnZXJpbmdBY3Rpb24oKS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBsb2FkZXItPnNldFRyaWdnZXJpbmdBY3Rpb24oTmF2aWdhdGlvbkFjdGlvbihuZXdV
UkwsIG1fcG9saWN5TG9hZFR5cGUsIGlzRm9ybVN1Ym1pc3Npb24pKTsKKyAgICAgICAgICAgIGxv
YWRlci0+c2V0VHJpZ2dlcmluZ0FjdGlvbihOYXZpZ2F0aW9uQWN0aW9uKG5ld1VSTCwgcG9saWN5
KCktPmxvYWRUeXBlKCksIGlzRm9ybVN1Ym1pc3Npb24pKTsKIAotICAgICAgICBjaGVja05hdmln
YXRpb25Qb2xpY3kobG9hZGVyLT5yZXF1ZXN0KCksIGxvYWRlciwgZm9ybVN0YXRlLAorICAgICAg
ICBwb2xpY3koKS0+Y2hlY2tOYXZpZ2F0aW9uUG9saWN5KGxvYWRlci0+cmVxdWVzdCgpLCBsb2Fk
ZXIsIGZvcm1TdGF0ZSwKICAgICAgICAgICAgIGNhbGxDb250aW51ZUxvYWRBZnRlck5hdmlnYXRp
b25Qb2xpY3ksIHRoaXMpOwogICAgIH0KIH0KQEAgLTIxNjQsMTYgKzIxNjMsMTYgQEAgYm9vbCBG
cmFtZUxvYWRlcjo6d2lsbExvYWRNZWRpYUVsZW1lbnRVUkwoS1VSTCYgdXJsKQogICAgIHJldHVy
biBlcnJvci5pc051bGwoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6aGFuZGxlVW5pbXBsZW1l
bnRhYmxlUG9saWN5KGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQordm9pZCBMb2FkZXJQb2xp
Y3k6OmhhbmRsZVVuaW1wbGVtZW50YWJsZVBvbGljeShjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJv
cikKIHsKICAgICBtX2RlbGVnYXRlSXNIYW5kbGluZ1VuaW1wbGVtZW50YWJsZVBvbGljeSA9IHRy
dWU7Ci0gICAgbV9jbGllbnQtPmRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koZXJyb3Ip
OworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hVbmFibGVUb0ltcGxl
bWVudFBvbGljeShlcnJvcik7CiAgICAgbV9kZWxlZ2F0ZUlzSGFuZGxpbmdVbmltcGxlbWVudGFi
bGVQb2xpY3kgPSBmYWxzZTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6Y2Fubm90U2hvd01JTUVU
eXBlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQordm9pZCBMb2FkZXJQb2xpY3k6
OmNhbm5vdFNob3dNSU1FVHlwZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsK
LSAgICBoYW5kbGVVbmltcGxlbWVudGFibGVQb2xpY3kobV9jbGllbnQtPmNhbm5vdFNob3dNSU1F
VHlwZUVycm9yKHJlc3BvbnNlKSk7CisgICAgaGFuZGxlVW5pbXBsZW1lbnRhYmxlUG9saWN5KG1f
ZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y2Fubm90U2hvd01JTUVUeXBlRXJyb3IocmVzcG9u
c2UpKTsKIH0KIAogUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlcjo6aW50ZXJydXB0aW9uRm9yUG9s
aWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQpAQCAtMjE4MSwz
MyArMjE4MCwyNCBAQCBSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyOjppbnRlcnJ1cHRpb25Gb3JQ
b2xpY3lDaGFuZ2VFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlcwogICAgIHJldHVybiBtX2NsaWVu
dC0+aW50ZXJydXB0Rm9yUG9saWN5Q2hhbmdlRXJyb3IocmVxdWVzdCk7CiB9CiAKLXZvaWQgRnJh
bWVMb2FkZXI6OmNoZWNrTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5l
d1JlcXVlc3QsIE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lk
KiBhcmd1bWVudCkKK0xvYWRlclBvbGljeTo6TG9hZGVyUG9saWN5KEZyYW1lKiBmcmFtZSkKKyAg
ICA6IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2RlbGVnYXRlSXNEZWNpZGluZ05hdmlnYXRpb25Q
b2xpY3koZmFsc2UpCisgICAgLCBtX2RlbGVnYXRlSXNIYW5kbGluZ1VuaW1wbGVtZW50YWJsZVBv
bGljeShmYWxzZSkKKyAgICAsIG1fbG9hZFR5cGUoRnJhbWVMb2FkVHlwZVN0YW5kYXJkKQogewot
ICAgIGNoZWNrTmF2aWdhdGlvblBvbGljeShuZXdSZXF1ZXN0LCBhY3RpdmVEb2N1bWVudExvYWRl
cigpLCAwLCBmdW5jdGlvbiwgYXJndW1lbnQpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpjaGVj
a0NvbnRlbnRQb2xpY3koY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgQ29udGVudFBvbGljeURlY2lz
aW9uRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50KQordm9pZCBMb2FkZXJQb2xpY3k6
OmNoZWNrTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3Qs
IE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVu
dCkKIHsKLSAgICBBU1NFUlQoYWN0aXZlRG9jdW1lbnRMb2FkZXIoKSk7Ci0gICAgCi0gICAgLy8g
QWx3YXlzIHNob3cgY29udGVudCB3aXRoIHZhbGlkIHN1YnN0aXR1dGUgZGF0YS4KLSAgICBpZiAo
YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+c3Vic3RpdHV0ZURhdGEoKS5pc1ZhbGlkKCkpIHsKLSAg
ICAgICAgZnVuY3Rpb24oYXJndW1lbnQsIFBvbGljeVVzZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSNpZiBFTkFCTEUoRlRQRElSKQotICAgIC8vIFJlc3BlY3QgdGhlIGhpZGRlbiBGVFAg
RGlyZWN0b3J5IExpc3RpbmcgcHJlZiBzbyBpdCBjYW4gYmUgdGVzdGVkIGV2ZW4gaWYgdGhlIHBv
bGljeSBkZWxlZ2F0ZSBtaWdodCBvdGhlcndpc2UgZGlzYWxsb3cgaXQKLSAgICBTZXR0aW5ncyog
c2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwotICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0
aW5ncy0+Zm9yY2VGVFBEaXJlY3RvcnlMaXN0aW5ncygpICYmIE1JTUVUeXBlID09ICJhcHBsaWNh
dGlvbi94LWZ0cC1kaXJlY3RvcnkiKSB7Ci0gICAgICAgIGZ1bmN0aW9uKGFyZ3VtZW50LCBQb2xp
Y3lVc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCisgICAgY2hlY2tOYXZpZ2F0
aW9uUG9saWN5KG5ld1JlcXVlc3QsIG1fZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExv
YWRlcigpLCAwLCBmdW5jdGlvbiwgYXJndW1lbnQpOworfQogCit2b2lkIExvYWRlclBvbGljeTo6
Y2hlY2tDb250ZW50UG9saWN5KGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIENvbnRlbnRQb2xpY3lE
ZWNpc2lvbkZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCkKK3sKICAgICBtX3BvbGlj
eUNoZWNrLnNldChmdW5jdGlvbiwgYXJndW1lbnQpOwotICAgIG1fY2xpZW50LT5kaXNwYXRjaERl
Y2lkZVBvbGljeUZvck1JTUVUeXBlKCZGcmFtZUxvYWRlcjo6Y29udGludWVBZnRlckNvbnRlbnRQ
b2xpY3ksCi0gICAgICAgIE1JTUVUeXBlLCBhY3RpdmVEb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0
KCkpOworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hEZWNpZGVQb2xp
Y3lGb3JNSU1FVHlwZSgmTG9hZGVyUG9saWN5Ojpjb250aW51ZUFmdGVyQ29udGVudFBvbGljeSwK
KyAgICAgICAgTUlNRVR5cGUsIG1fZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRl
cigpLT5yZXF1ZXN0KCkpOwogfQogCiBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRSZWxvYWRUb0hh
bmRsZVVucmVhY2hhYmxlVVJMKERvY3VtZW50TG9hZGVyKiBkb2NMb2FkZXIpCkBAIC0yMjE3LDcg
KzIyMDcsNyBAQCBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRSZWxvYWRUb0hhbmRsZVVucmVhY2hh
YmxlVVJMKERvY3VtZW50TG9hZGVyKiBkb2NMb2FkZXIpCiAgICAgaWYgKHVucmVhY2hhYmxlVVJM
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFpc0JhY2tGb3J3
YXJkTG9hZFR5cGUobV9wb2xpY3lMb2FkVHlwZSkpCisgICAgaWYgKCFpc0JhY2tGb3J3YXJkTG9h
ZFR5cGUocG9saWN5KCktPmxvYWRUeXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAvLyBXZSBvbmx5IHRyZWF0IHVucmVhY2hhYmxlVVJMcyBzcGVjaWFsbHkgZHVyaW5nIHRoZSBk
ZWxlZ2F0ZSBjYWxsYmFja3MKQEAgLTIyMjYsNyArMjIxNiw3IEBAIGJvb2wgRnJhbWVMb2FkZXI6
OnNob3VsZFJlbG9hZFRvSGFuZGxlVW5yZWFjaGFibGVVUkwoRG9jdW1lbnRMb2FkZXIqIGRvY0xv
YWRlcikKICAgICAvLyBjYXNlIGhhbmRsZXMgbWFsZm9ybWVkIFVSTHMgYW5kIHVua25vd24gc2No
ZW1lcy4gTG9hZGluZyBhbHRlcm5hdGUgY29udGVudAogICAgIC8vIGF0IG90aGVyIHRpbWVzIGJl
aGF2ZXMgbGlrZSBhIHN0YW5kYXJkIGxvYWQuCiAgICAgRG9jdW1lbnRMb2FkZXIqIGNvbXBhcmVE
b2N1bWVudExvYWRlciA9IDA7Ci0gICAgaWYgKG1fZGVsZWdhdGVJc0RlY2lkaW5nTmF2aWdhdGlv
blBvbGljeSB8fCBtX2RlbGVnYXRlSXNIYW5kbGluZ1VuaW1wbGVtZW50YWJsZVBvbGljeSkKKyAg
ICBpZiAocG9saWN5KCktPmRlbGVnYXRlSXNEZWNpZGluZ05hdmlnYXRpb25Qb2xpY3koKSB8fCBw
b2xpY3koKS0+ZGVsZWdhdGVJc0hhbmRsaW5nVW5pbXBsZW1lbnRhYmxlUG9saWN5KCkpCiAgICAg
ICAgIGNvbXBhcmVEb2N1bWVudExvYWRlciA9IG1fcG9saWN5RG9jdW1lbnRMb2FkZXIuZ2V0KCk7
CiAgICAgZWxzZSBpZiAobV9kZWxlZ2F0ZUlzSGFuZGxpbmdQcm92aXNpb25hbExvYWRFcnJvcikK
ICAgICAgICAgY29tcGFyZURvY3VtZW50TG9hZGVyID0gbV9wcm92aXNpb25hbERvY3VtZW50TG9h
ZGVyLmdldCgpOwpAQCAtMjM4MSw3ICsyMzcxLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3RvcEFs
bExvYWRlcnMoRGF0YWJhc2VQb2xpY3kgZGF0YWJhc2VQb2xpY3kpCiAKICAgICBtX2luU3RvcEFs
bExvYWRlcnMgPSB0cnVlOwogCi0gICAgc3RvcFBvbGljeUNoZWNrKCk7CisgICAgcG9saWN5KCkt
PnN0b3BDaGVjaygpOwogCiAgICAgc3RvcExvYWRpbmdTdWJmcmFtZXMoKTsKICAgICBpZiAobV9w
cm92aXNpb25hbERvY3VtZW50TG9hZGVyKQpAQCAtMjg2MSw5ICsyODUxLDkgQEAgU3RyaW5nIEZy
YW1lTG9hZGVyOjpnZW5lcmF0ZWRNSU1FVHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVS
TFNjaGVtZSkKICAgICByZXR1cm4gbV9jbGllbnQtPmdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2No
ZW1lKFVSTFNjaGVtZSk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmNhbmNlbENvbnRlbnRQb2xp
Y3lDaGVjaygpCit2b2lkIExvYWRlclBvbGljeTo6Y2FuY2VsQ2hlY2soKQogewotICAgIG1fY2xp
ZW50LT5jYW5jZWxQb2xpY3lDaGVjaygpOworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQo
KS0+Y2FuY2VsUG9saWN5Q2hlY2soKTsKICAgICBtX3BvbGljeUNoZWNrLmNsZWFyKCk7CiB9CiAK
QEAgLTI5ODYsOSArMjk3Niw5IEBAIENhY2hlUG9saWN5IEZyYW1lTG9hZGVyOjpzdWJyZXNvdXJj
ZUNhY2hlUG9saWN5KCkgY29uc3QKICAgICByZXR1cm4gQ2FjaGVQb2xpY3lWZXJpZnk7CiB9CiAK
LXZvaWQgRnJhbWVMb2FkZXI6OnN0b3BQb2xpY3lDaGVjaygpCit2b2lkIExvYWRlclBvbGljeTo6
c3RvcENoZWNrKCkKIHsKLSAgICBtX2NsaWVudC0+Y2FuY2VsUG9saWN5Q2hlY2soKTsKKyAgICBt
X2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNhbmNlbFBvbGljeUNoZWNrKCk7CiAgICAgUG9s
aWN5Q2hlY2sgY2hlY2sgPSBtX3BvbGljeUNoZWNrOwogICAgIG1fcG9saWN5Q2hlY2suY2xlYXIo
KTsKICAgICBjaGVjay5jYW5jZWwoKTsKQEAgLTMwOTIsMTQgKzMwODIsMjEgQEAgdm9pZCBGcmFt
ZUxvYWRlcjo6Y2hlY2tMb2FkQ29tcGxldGVGb3JUaGlzRnJhbWUoKQogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpjb250aW51ZUFmdGVyQ29udGVudFBv
bGljeShQb2xpY3lBY3Rpb24gcG9saWN5KQordm9pZCBMb2FkZXJQb2xpY3k6OmNvbnRpbnVlQWZ0
ZXJDb250ZW50UG9saWN5KFBvbGljeUFjdGlvbiBwb2xpY3kpCiB7CiAgICAgUG9saWN5Q2hlY2sg
Y2hlY2sgPSBtX3BvbGljeUNoZWNrOwogICAgIG1fcG9saWN5Q2hlY2suY2xlYXIoKTsKICAgICBj
aGVjay5jYWxsKHBvbGljeSk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFm
dGVyV2lsbFN1Ym1pdEZvcm0oUG9saWN5QWN0aW9uKQordm9pZCBMb2FkZXJQb2xpY3k6OmNvbnRp
bnVlTG9hZEFmdGVyV2lsbFN1Ym1pdEZvcm0oUG9saWN5QWN0aW9uKQoreworICAgIC8vIFNlZSBo
ZWFkZXIgZmlsZSBmb3IgYW4gZXhwbGFpbmF0aW9uIG9mIHdoeSB0aGlzIGZ1bmN0aW9uCisgICAg
Ly8gaXNuJ3QgbGlrZSB0aGUgb3RoZXJzLgorICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jb250aW51
ZUxvYWRBZnRlcldpbGxTdWJtaXRGb3JtKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXI6OmNvbnRp
bnVlTG9hZEFmdGVyV2lsbFN1Ym1pdEZvcm0oKQogewogICAgIGlmICghbV9wcm92aXNpb25hbERv
Y3VtZW50TG9hZGVyKQogICAgICAgICByZXR1cm47CkBAIC0zMzk2LDcgKzMzOTMsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpsb2FkUG9zdFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBpblJl
cXVlc3QsIGNvbnN0IFN0cmluZwogICAgICAgICBpZiAoRnJhbWUqIHRhcmdldEZyYW1lID0gZm9y
bVN0YXRlID8gMCA6IGZpbmRGcmFtZUZvck5hdmlnYXRpb24oZnJhbWVOYW1lKSkKICAgICAgICAg
ICAgIHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+bG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9uKHdvcmtp
bmdSZXNvdXJjZVJlcXVlc3QsIGFjdGlvbiwgbG9ja0hpc3RvcnksIGxvYWRUeXBlLCBmb3JtU3Rh
dGUucmVsZWFzZSgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2hlY2tOZXdXaW5kb3dQ
b2xpY3koYWN0aW9uLCB3b3JraW5nUmVzb3VyY2VSZXF1ZXN0LCBmb3JtU3RhdGUucmVsZWFzZSgp
LCBmcmFtZU5hbWUpOworICAgICAgICAgICAgcG9saWN5KCktPmNoZWNrTmV3V2luZG93UG9saWN5
KGFjdGlvbiwgRnJhbWVMb2FkZXI6OmNhbGxDb250aW51ZUxvYWRBZnRlck5ld1dpbmRvd1BvbGlj
eSwgd29ya2luZ1Jlc291cmNlUmVxdWVzdCwgZm9ybVN0YXRlLnJlbGVhc2UoKSwgZnJhbWVOYW1l
KTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZFdpdGhOYXZpZ2F0aW9uQWN0aW9uKHdvcmtpbmdS
ZXNvdXJjZVJlcXVlc3QsIGFjdGlvbiwgbG9ja0hpc3RvcnksIGxvYWRUeXBlLCBmb3JtU3RhdGUu
cmVsZWFzZSgpKTsgICAgCiB9CkBAIC0zNTM1LDcgKzM1MzIsNyBAQCB2b2lkIEZyYW1lTG9hZGVy
OjpjYWxsQ29udGludWVGcmFnbWVudFNjcm9sbEFmdGVyTmF2aWdhdGlvblBvbGljeSh2b2lkKiBh
cmd1bWVudAogCiB2b2lkIEZyYW1lTG9hZGVyOjpjb250aW51ZUZyYWdtZW50U2Nyb2xsQWZ0ZXJO
YXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzaG91
bGRDb250aW51ZSkKIHsKLSAgICBib29sIGlzUmVkaXJlY3QgPSBtX3F1aWNrUmVkaXJlY3RDb21p
bmcgfHwgbV9wb2xpY3lMb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVkaXJlY3RXaXRoTG9ja2Vk
QmFja0ZvcndhcmRMaXN0OworICAgIGJvb2wgaXNSZWRpcmVjdCA9IG1fcXVpY2tSZWRpcmVjdENv
bWluZyB8fCBwb2xpY3koKS0+bG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlUmVkaXJlY3RXaXRo
TG9ja2VkQmFja0ZvcndhcmRMaXN0OwogICAgIG1fcXVpY2tSZWRpcmVjdENvbWluZyA9IGZhbHNl
OwogCiAgICAgaWYgKCFzaG91bGRDb250aW51ZSkKQEAgLTM1OTEsMTYgKzM1ODgsMTUgQEAgYm9v
bCBGcmFtZUxvYWRlcjo6c2hvdWxkU2Nyb2xsVG9BbmNob3IoYm9vbCBpc0Zvcm1TdWJtaXNzaW9u
LCBGcmFtZUxvYWRUeXBlIGxvYWQKICAgICAgICAgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPmlz
RnJhbWVTZXQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6Y2hlY2tOZXdXaW5kb3dQb2xpY3ko
Y29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgYWN0aW9uLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsCi0gICAgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSwgY29uc3QgU3RyaW5n
JiBmcmFtZU5hbWUpCit2b2lkIExvYWRlclBvbGljeTo6Y2hlY2tOZXdXaW5kb3dQb2xpY3koY29u
c3QgTmF2aWdhdGlvbkFjdGlvbiYgYWN0aW9uLCBOZXdXaW5kb3dQb2xpY3lEZWNpc2lvbkZ1bmN0
aW9uIGZ1bmN0aW9uLAorICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUGFzc1Jl
ZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSwgY29uc3QgU3RyaW5nJiBmcmFtZU5hbWUpCiB7Ci0g
ICAgbV9wb2xpY3lDaGVjay5zZXQocmVxdWVzdCwgZm9ybVN0YXRlLCBmcmFtZU5hbWUsCi0gICAg
ICAgIGNhbGxDb250aW51ZUxvYWRBZnRlck5ld1dpbmRvd1BvbGljeSwgdGhpcyk7Ci0gICAgbV9j
bGllbnQtPmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKCZGcmFtZUxvYWRl
cjo6Y29udGludWVBZnRlck5ld1dpbmRvd1BvbGljeSwKKyAgICBtX3BvbGljeUNoZWNrLnNldChy
ZXF1ZXN0LCBmb3JtU3RhdGUsIGZyYW1lTmFtZSwgZnVuY3Rpb24sIHRoaXMpOworICAgIG1fZnJh
bWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dB
Y3Rpb24oJkxvYWRlclBvbGljeTo6Y29udGludWVBZnRlck5ld1dpbmRvd1BvbGljeSwKICAgICAg
ICAgYWN0aW9uLCByZXF1ZXN0LCBmb3JtU3RhdGUsIGZyYW1lTmFtZSk7CiB9CiAKLXZvaWQgRnJh
bWVMb2FkZXI6OmNvbnRpbnVlQWZ0ZXJOZXdXaW5kb3dQb2xpY3koUG9saWN5QWN0aW9uIHBvbGlj
eSkKK3ZvaWQgTG9hZGVyUG9saWN5Ojpjb250aW51ZUFmdGVyTmV3V2luZG93UG9saWN5KFBvbGlj
eUFjdGlvbiBwb2xpY3kpCiB7CiAgICAgUG9saWN5Q2hlY2sgY2hlY2sgPSBtX3BvbGljeUNoZWNr
OwogICAgIG1fcG9saWN5Q2hlY2suY2xlYXIoKTsKQEAgLTM2MTAsNyArMzYwNiw3IEBAIHZvaWQg
RnJhbWVMb2FkZXI6OmNvbnRpbnVlQWZ0ZXJOZXdXaW5kb3dQb2xpY3koUG9saWN5QWN0aW9uIHBv
bGljeSkKICAgICAgICAgICAgIGNoZWNrLmNsZWFyUmVxdWVzdCgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgUG9saWN5RG93bmxvYWQ6Ci0gICAgICAgICAgICBtX2NsaWVudC0+
c3RhcnREb3dubG9hZChjaGVjay5yZXF1ZXN0KCkpOworICAgICAgICAgICAgbV9mcmFtZS0+bG9h
ZGVyKCktPmNsaWVudCgpLT5zdGFydERvd25sb2FkKGNoZWNrLnJlcXVlc3QoKSk7CiAgICAgICAg
ICAgICBjaGVjay5jbGVhclJlcXVlc3QoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFBvbGljeVVzZToKQEAgLTM2MjAsNyArMzYxNiw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNv
bnRpbnVlQWZ0ZXJOZXdXaW5kb3dQb2xpY3koUG9saWN5QWN0aW9uIHBvbGljeSkKICAgICBjaGVj
ay5jYWxsKHBvbGljeSA9PSBQb2xpY3lVc2UpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpjaGVj
a05hdmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBEb2N1bWVu
dExvYWRlciogbG9hZGVyLAordm9pZCBMb2FkZXJQb2xpY3k6OmNoZWNrTmF2aWdhdGlvblBvbGlj
eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIs
CiAgICAgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSwgTmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50KQogewogICAgIE5hdmlnYXRp
b25BY3Rpb24gYWN0aW9uID0gbG9hZGVyLT50cmlnZ2VyaW5nQWN0aW9uKCk7CkBAIC0zNjI4LDcg
KzM2MjQsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja05hdmlnYXRpb25Qb2xpY3koY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBEb2N1bWVudAogICAgICAgICBhY3Rpb24gPSBOYXZp
Z2F0aW9uQWN0aW9uKHJlcXVlc3QudXJsKCksIE5hdmlnYXRpb25UeXBlT3RoZXIpOwogICAgICAg
ICBsb2FkZXItPnNldFRyaWdnZXJpbmdBY3Rpb24oYWN0aW9uKTsKICAgICB9Ci0gICAgICAgIAor
CiAgICAgLy8gRG9uJ3QgYXNrIG1vcmUgdGhhbiBvbmNlIGZvciB0aGUgc2FtZSByZXF1ZXN0IG9y
IGlmIHdlIGFyZSBsb2FkaW5nIGFuIGVtcHR5IFVSTC4KICAgICAvLyBUaGlzIGF2b2lkcyBjb25m
dXNpb24gb24gdGhlIHBhcnQgb2YgdGhlIGNsaWVudC4KICAgICBpZiAoZXF1YWxJZ25vcmluZ0hl
YWRlckZpZWxkcyhyZXF1ZXN0LCBsb2FkZXItPmxhc3RDaGVja2VkUmVxdWVzdCgpKSB8fCAoIXJl
cXVlc3QuaXNOdWxsKCkgJiYgcmVxdWVzdC51cmwoKS5pc0VtcHR5KCkpKSB7CkBAIC0zNjQwLDgg
KzM2MzYsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja05hdmlnYXRpb25Qb2xpY3koY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBEb2N1bWVudAogICAgIC8vIFdlIGFyZSBhbHdheXMg
d2lsbGluZyB0byBzaG93IGFsdGVybmF0ZSBjb250ZW50IGZvciB1bnJlYWNoYWJsZSBVUkxzOwog
ICAgIC8vIHRyZWF0IGl0IGxpa2UgYSByZWxvYWQgc28gaXQgbWFpbnRhaW5zIHRoZSByaWdodCBz
dGF0ZSBmb3IgYi9mIGxpc3QuCiAgICAgaWYgKGxvYWRlci0+c3Vic3RpdHV0ZURhdGEoKS5pc1Zh
bGlkKCkgJiYgIWxvYWRlci0+c3Vic3RpdHV0ZURhdGEoKS5mYWlsaW5nVVJMKCkuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGlmIChpc0JhY2tGb3J3YXJkTG9hZFR5cGUobV9wb2xpY3lMb2FkVHlwZSkp
Ci0gICAgICAgICAgICBtX3BvbGljeUxvYWRUeXBlID0gRnJhbWVMb2FkVHlwZVJlbG9hZDsKKyAg
ICAgICAgaWYgKGlzQmFja0ZvcndhcmRMb2FkVHlwZShtX2xvYWRUeXBlKSkKKyAgICAgICAgICAg
IG1fbG9hZFR5cGUgPSBGcmFtZUxvYWRUeXBlUmVsb2FkOwogICAgICAgICBmdW5jdGlvbihhcmd1
bWVudCwgcmVxdWVzdCwgMCwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNjUx
LDMxICszNjQ3LDMxIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrTmF2aWdhdGlvblBvbGljeShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIERvY3VtZW50CiAgICAgbV9wb2xpY3lDaGVj
ay5zZXQocmVxdWVzdCwgZm9ybVN0YXRlLmdldCgpLCBmdW5jdGlvbiwgYXJndW1lbnQpOwogCiAg
ICAgbV9kZWxlZ2F0ZUlzRGVjaWRpbmdOYXZpZ2F0aW9uUG9saWN5ID0gdHJ1ZTsKLSAgICBtX2Ns
aWVudC0+ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKCZGcmFtZUxvYWRl
cjo6Y29udGludWVBZnRlck5hdmlnYXRpb25Qb2xpY3ksCisgICAgbV9mcmFtZS0+bG9hZGVyKCkt
PmNsaWVudCgpLT5kaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oJkxvYWRl
clBvbGljeTo6Y29udGludWVBZnRlck5hdmlnYXRpb25Qb2xpY3ksCiAgICAgICAgIGFjdGlvbiwg
cmVxdWVzdCwgZm9ybVN0YXRlKTsKICAgICBtX2RlbGVnYXRlSXNEZWNpZGluZ05hdmlnYXRpb25Q
b2xpY3kgPSBmYWxzZTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6Y29udGludWVBZnRlck5hdmln
YXRpb25Qb2xpY3koUG9saWN5QWN0aW9uIHBvbGljeSkKK3ZvaWQgTG9hZGVyUG9saWN5Ojpjb250
aW51ZUFmdGVyTmF2aWdhdGlvblBvbGljeShQb2xpY3lBY3Rpb24gcG9saWN5KQogewogICAgIFBv
bGljeUNoZWNrIGNoZWNrID0gbV9wb2xpY3lDaGVjazsKICAgICBtX3BvbGljeUNoZWNrLmNsZWFy
KCk7CiAKICAgICBib29sIHNob3VsZENvbnRpbnVlID0gcG9saWN5ID09IFBvbGljeVVzZTsKLSAg
ICAKKwogICAgIHN3aXRjaCAocG9saWN5KSB7CiAgICAgICAgIGNhc2UgUG9saWN5SWdub3JlOgog
ICAgICAgICAgICAgY2hlY2suY2xlYXJSZXF1ZXN0KCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBQb2xpY3lEb3dubG9hZDoKLSAgICAgICAgICAgIG1fY2xpZW50LT5zdGFydERv
d25sb2FkKGNoZWNrLnJlcXVlc3QoKSk7CisgICAgICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+
Y2xpZW50KCktPnN0YXJ0RG93bmxvYWQoY2hlY2sucmVxdWVzdCgpKTsKICAgICAgICAgICAgIGNo
ZWNrLmNsZWFyUmVxdWVzdCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUG9s
aWN5VXNlOiB7CiAgICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChjaGVjay5yZXF1
ZXN0KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY2xpZW50LT5jYW5IYW5k
bGVSZXF1ZXN0KHJlcXVlc3QpKSB7Ci0gICAgICAgICAgICAgICAgaGFuZGxlVW5pbXBsZW1lbnRh
YmxlUG9saWN5KG1fY2xpZW50LT5jYW5ub3RTaG93VVJMRXJyb3IoY2hlY2sucmVxdWVzdCgpKSk7
CisKKyAgICAgICAgICAgIGlmICghbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jYW5IYW5k
bGVSZXF1ZXN0KHJlcXVlc3QpKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlVW5pbXBsZW1lbnRh
YmxlUG9saWN5KG1fZnJhbWUtPmxvYWRlcigpLT5jYW5ub3RTaG93VVJMRXJyb3IoY2hlY2sucmVx
dWVzdCgpKSk7CiAgICAgICAgICAgICAgICAgY2hlY2suY2xlYXJSZXF1ZXN0KCk7CiAgICAgICAg
ICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTM3MjAs
NyArMzcxNiw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlv
blBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzCiAgICAgICAgIC8vIElmIHRoZSBu
YXZpZ2F0aW9uIHJlcXVlc3QgY2FtZSBmcm9tIHRoZSBiYWNrL2ZvcndhcmQgbWVudSwgYW5kIHdl
IHB1bnQgb24gaXQsIHdlIGhhdmUgdGhlIAogICAgICAgICAvLyBwcm9ibGVtIHRoYXQgd2UgaGF2
ZSBvcHRpbWlzdGljYWxseSBtb3ZlZCB0aGUgYi9mIGN1cnNvciBhbHJlYWR5LCBzbyBtb3ZlIGl0
IGJhY2suICBGb3Igc2FuaXR5LCAKICAgICAgICAgLy8gd2Ugb25seSBkbyB0aGlzIHdoZW4gcHVu
dGluZyBhIG5hdmlnYXRpb24gZm9yIHRoZSB0YXJnZXQgZnJhbWUgb3IgdG9wLWxldmVsIGZyYW1l
LiAgCi0gICAgICAgIGlmICgoaXNUYXJnZXRJdGVtIHx8IGlzTG9hZGluZ01haW5GcmFtZSgpKSAm
JiBpc0JhY2tGb3J3YXJkTG9hZFR5cGUobV9wb2xpY3lMb2FkVHlwZSkpCisgICAgICAgIGlmICgo
aXNUYXJnZXRJdGVtIHx8IGlzTG9hZGluZ01haW5GcmFtZSgpKSAmJiBpc0JhY2tGb3J3YXJkTG9h
ZFR5cGUocG9saWN5KCktPmxvYWRUeXBlKCkpKQogICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBtX2ZyYW1lLT5wYWdlKCkpIHsKICAgICAgICAgICAgICAgICBGcmFtZSogbWFpbkZyYW1lID0g
cGFnZS0+bWFpbkZyYW1lKCk7CiAgICAgICAgICAgICAgICAgaWYgKEhpc3RvcnlJdGVtKiByZXNl
dEl0ZW0gPSBtYWluRnJhbWUtPmxvYWRlcigpLT5tX2N1cnJlbnRIaXN0b3J5SXRlbS5nZXQoKSkg
ewpAQCAtMzczMiw3ICszNzI4LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29udGludWVMb2FkQWZ0
ZXJOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3MKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIEZyYW1lTG9hZFR5cGUgdHlwZSA9IG1fcG9saWN5TG9hZFR5
cGU7CisgICAgRnJhbWVMb2FkVHlwZSB0eXBlID0gcG9saWN5KCktPmxvYWRUeXBlKCk7CiAgICAg
c3RvcEFsbExvYWRlcnMoKTsKICAgICAKICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNjI1MDg1Nj4g
LSBJbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgb24gcGFnZXMgd2l0aCBtdWx0aXBsZSBmcmFtZXMs
IHN0b3BBbGxMb2FkZXJzKCkKQEAgLTM3NTcsNyArMzc1Myw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBQYXNzCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChmb3JtU3RhdGUpCi0gICAgICAgIG1f
Y2xpZW50LT5kaXNwYXRjaFdpbGxTdWJtaXRGb3JtKCZGcmFtZUxvYWRlcjo6Y29udGludWVMb2Fk
QWZ0ZXJXaWxsU3VibWl0Rm9ybSwgZm9ybVN0YXRlKTsKKyAgICAgICAgbV9jbGllbnQtPmRpc3Bh
dGNoV2lsbFN1Ym1pdEZvcm0oJkxvYWRlclBvbGljeTo6Y29udGludWVMb2FkQWZ0ZXJXaWxsU3Vi
bWl0Rm9ybSwgZm9ybVN0YXRlKTsKICAgICBlbHNlCiAgICAgICAgIGNvbnRpbnVlTG9hZEFmdGVy
V2lsbFN1Ym1pdEZvcm0oKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmggYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCmluZGV4IGE0M2RmMzUuLjhjOTll
ZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKKysrIGIvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuaApAQCAtNzgsNiArNzgsNTMgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgYm9vbCBpc0JhY2tGb3J3YXJkTG9hZFR5cGUoRnJhbWVMb2FkVHlwZSk7CiAK
KyAgICBjbGFzcyBMb2FkZXJQb2xpY3kgOiBwdWJsaWMgTm9uY29weWFibGUgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgTG9hZGVyUG9saWN5KEZyYW1lKik7CisKKyAgICAgICAgdm9pZCBjaGVja05h
dmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgRG9jdW1lbnRMb2FkZXIqLCBQ
YXNzUmVmUHRyPEZvcm1TdGF0ZT4sIE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkZ1bmN0aW9uLCB2
b2lkKiBhcmd1bWVudCk7CisgICAgICAgIHZvaWQgY2hlY2tOYXZpZ2F0aW9uUG9saWN5KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkZ1bmN0aW9uLCB2b2lk
KiBhcmd1bWVudCk7CisgICAgICAgIHZvaWQgY2hlY2tOZXdXaW5kb3dQb2xpY3koY29uc3QgTmF2
aWdhdGlvbkFjdGlvbiYsIE5ld1dpbmRvd1BvbGljeURlY2lzaW9uRnVuY3Rpb24sIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJiBmcmFt
ZU5hbWUpOworICAgICAgICB2b2lkIGNoZWNrQ29udGVudFBvbGljeShjb25zdCBTdHJpbmcmIE1J
TUVUeXBlLCBDb250ZW50UG9saWN5RGVjaXNpb25GdW5jdGlvbiwgdm9pZCogYXJndW1lbnQpOwor
CisgICAgICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgZGlmZmVyZW50LiAgVGhleSBjb3VsZCB1c2Ug
YmV0dGVyIG5hbWVzLgorICAgICAgICB2b2lkIGNhbmNlbENoZWNrKCk7CisgICAgICAgIHZvaWQg
c3RvcENoZWNrKCk7CisKKyAgICAgICAgdm9pZCBjYW5ub3RTaG93TUlNRVR5cGUoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOworCisgICAgICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUoKSBjb25z
dCB7IHJldHVybiBtX2xvYWRUeXBlOyB9CisgICAgICAgIHZvaWQgc2V0TG9hZFR5cGUoRnJhbWVM
b2FkVHlwZSBsb2FkVHlwZSkgeyBtX2xvYWRUeXBlID0gbG9hZFR5cGU7IH0KKworICAgICAgICBi
b29sIGRlbGVnYXRlSXNEZWNpZGluZ05hdmlnYXRpb25Qb2xpY3koKSBjb25zdCB7IHJldHVybiBt
X2RlbGVnYXRlSXNEZWNpZGluZ05hdmlnYXRpb25Qb2xpY3k7IH0KKyAgICAgICAgYm9vbCBkZWxl
Z2F0ZUlzSGFuZGxpbmdVbmltcGxlbWVudGFibGVQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX2Rl
bGVnYXRlSXNIYW5kbGluZ1VuaW1wbGVtZW50YWJsZVBvbGljeTsgfQorCisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGZ1bmN0aW9uIGlzIGEgY2hlYXQuICBCYXNpY2FsbHksIHRoaXMgaXMganVzdCBh
biBhc3luY2hyb25vdWMgY2FsbGJhY2sKKyAgICAgICAgLy8gZnJvbSB0aGUgRnJhbWVMb2FkZXJD
bGllbnQsIGJ1dCB0aGlzIGNhbGxiYWNrIHVzZXMgdGhlIHBvbGljeSB0eXBlcyBhbmQgc28gaGFz
IHRvCisgICAgICAgIC8vIGxpdmUgb24gdGhpcyBvYmplY3QuICBJbiB0aGUgbG9uZyB0ZXJtLCB3
ZSBzaG91bGQgY3JlYXRlIGEgdHlwZSBmb3Igbm9uLXBvbGljeQorICAgICAgICAvLyBjYWxsYmFj
a3MgZnJvbSB0aGUgRnJhbWVMb2FkZXJDbGllbnQgYW5kIHJlbW92ZSB0aGlzIHZlc3RpZ2UuICBJ
IGp1c3QgZG9uJ3QgaGF2ZQorICAgICAgICAvLyB0aGUgaGVhcnQgdG8gaGFjayBvbiBhbGwgdGhl
IHBsYXRmb3JtcyB0byBtYWtlIHRoYXQgaGFwcGVuIHJpZ2h0IG5vdy4KKyAgICAgICAgdm9pZCBj
b250aW51ZUxvYWRBZnRlcldpbGxTdWJtaXRGb3JtKFBvbGljeUFjdGlvbik7CisKKyAgICBwcml2
YXRlOgorICAgICAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KFBvbGljeUFj
dGlvbik7CisgICAgICAgIHZvaWQgY29udGludWVBZnRlck5ld1dpbmRvd1BvbGljeShQb2xpY3lB
Y3Rpb24pOworICAgICAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5KFBvbGljeUFj
dGlvbik7CisKKyAgICAgICAgdm9pZCBoYW5kbGVVbmltcGxlbWVudGFibGVQb2xpY3koY29uc3Qg
UmVzb3VyY2VFcnJvciYpOworCisgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworCisgICAgICAgIGJv
b2wgbV9kZWxlZ2F0ZUlzRGVjaWRpbmdOYXZpZ2F0aW9uUG9saWN5OworICAgICAgICBib29sIG1f
ZGVsZWdhdGVJc0hhbmRsaW5nVW5pbXBsZW1lbnRhYmxlUG9saWN5OworCisgICAgICAgIC8vIFRo
aXMgaWRlbnRpZmllcyB0aGUgdHlwZSBvZiBuYXZpZ2F0aW9uIGFjdGlvbiB3aGljaCBwcm9tcHRl
ZCB0aGlzIGxvYWQuIE5vdGUgCisgICAgICAgIC8vIHRoYXQgV2ViS2l0IGNvbnZleXMgdGhpcyB2
YWx1ZSBhcyB0aGUgV2ViQWN0aW9uTmF2aWdhdGlvblR5cGVLZXkgdmFsdWUKKyAgICAgICAgLy8g
b24gbmF2aWdhdGlvbiBhY3Rpb24gZGVsZWdhdGUgY2FsbGJhY2tzLgorICAgICAgICBGcmFtZUxv
YWRUeXBlIG1fbG9hZFR5cGU7CisgICAgICAgIFBvbGljeUNoZWNrIG1fcG9saWN5Q2hlY2s7Cisg
ICAgfTsKKwogICAgIGNsYXNzIEZyYW1lTG9hZGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIEZyYW1lTG9hZGVyKEZyYW1lKiwgRnJhbWVMb2FkZXJDbGllbnQq
KTsKQEAgLTg3LDYgKzEzNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBGcmFt
ZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CiAKKyAgICAgICAgTG9hZGVyUG9s
aWN5KiBwb2xpY3koKSB7IHJldHVybiAmbV9wb2xpY3k7IH0KKwogICAgICAgICAvLyBGSVhNRTog
VGhpcyBpcyBub3QgY29vbCwgcGVvcGxlLiBUaGVyZSBhcmUgdG9vIG1hbnkgZGlmZmVyZW50IGZ1
bmN0aW9ucyB0aGF0IGFsbCBzdGFydCBsb2Fkcy4KICAgICAgICAgLy8gV2Ugc2hvdWxkIGFpbSB0
byBjb25zb2xpZGF0ZSB0aGVzZSBpbnRvIGEgc21hbGxlciBzZXQgb2YgZnVuY3Rpb25zLCBhbmQg
dHJ5IHRvIHJldXNlIG1vcmUgb2YKICAgICAgICAgLy8gdGhlIGxvZ2ljIGJ5IGV4dHJhY3Rpbmcg
Y29tbW9uIGNvZGUgcGF0aHMuCkBAIC0xNjIsOCArMjExLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBSZXNvdXJjZUVycm9yIGZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJikgY29uc3Q7CiAgICAgICAgIFJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9y
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGNvbnN0OwogICAgICAgICBSZXNvdXJjZUVycm9yIGNh
bm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdDsKLQotICAgICAg
ICB2b2lkIGNhbm5vdFNob3dNSU1FVHlwZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAg
ICAgIFJlc291cmNlRXJyb3IgaW50ZXJydXB0aW9uRm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICAgICAgYm9vbCBpc0hvc3RlZEJ5T2JqZWN0RWxlbWVu
dCgpIGNvbnN0OwpAQCAtMTcyLDEwICsyMTksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIGJvb2wgcmVwcmVzZW50YXRpb25FeGlzdHNGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiBV
UkxTY2hlbWUpOwogICAgICAgICBTdHJpbmcgZ2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUo
Y29uc3QgU3RyaW5nJiBVUkxTY2hlbWUpOwogCi0gICAgICAgIHZvaWQgY2hlY2tOYXZpZ2F0aW9u
UG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbkZ1
bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCk7Ci0gICAgICAgIHZvaWQgY2hlY2tDb250
ZW50UG9saWN5KGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIENvbnRlbnRQb2xpY3lEZWNpc2lvbkZ1
bmN0aW9uLCB2b2lkKiBhcmd1bWVudCk7Ci0gICAgICAgIHZvaWQgY2FuY2VsQ29udGVudFBvbGlj
eUNoZWNrKCk7Ci0KICAgICAgICAgdm9pZCByZWxvYWQoYm9vbCBlbmRUb0VuZFJlbG9hZCA9IGZh
bHNlKTsKICAgICAgICAgdm9pZCByZWxvYWRXaXRoT3ZlcnJpZGVFbmNvZGluZyhjb25zdCBTdHJp
bmcmIG92ZXJyaWRlRW5jb2RpbmcpOwogCkBAIC0zMzMsNiArMzc2LDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGllbnRSZWRpcmVjdGVkKGNvbnN0IEtVUkwmLCBkb3Vi
bGUgZGVsYXksIGRvdWJsZSBmaXJlRGF0ZSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKICAg
ICAgICAgdm9pZCBjbGllbnRSZWRpcmVjdENhbmNlbGxlZE9yRmluaXNoZWQoYm9vbCBjYW5jZWxX
aXRoTG9hZEluUHJvZ3Jlc3MpOwogCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHB1YmxpYyBi
ZWNhdXNlIHRoaXMgYXN5bmNocm9ub3VzIGNhbGxiYWNrIGZyb20gdGhlIEZyYW1lTG9hZGVyQ2xp
ZW50CisgICAgICAgIC8vIHVzZXMgdGhlIHBvbGljeSBtYWNoaW5lcnkgKGFuZCB0aGVyZWZvcmUg
aXMgY2FsbGVkIHZpYSB0aGUgTG9hZGVyUG9saWN5KS4gIE9uY2Ugd2UKKyAgICAgICAgLy8gaW50
cm9kdWNlIGEgcHJvcGVyIGNhbGxiYWNrIHR5cGUgZm9yIHRoaXMgZnVuY3Rpb24sIHdlIHNob3Vs
ZCBtYWtlIGl0IHByaXZhdGUgYWdhaW4uCisgICAgICAgIHZvaWQgY29udGludWVMb2FkQWZ0ZXJX
aWxsU3VibWl0Rm9ybSgpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgUGFzc1JlZlB0cjxIaXN0
b3J5SXRlbT4gY3JlYXRlSGlzdG9yeUl0ZW0oYm9vbCB1c2VPcmlnaW5hbCk7CiAgICAgICAgIFBh
c3NSZWZQdHI8SGlzdG9yeUl0ZW0+IGNyZWF0ZUhpc3RvcnlJdGVtVHJlZShGcmFtZSogdGFyZ2V0
RnJhbWUsIGJvb2wgY2xpcEF0VGFyZ2V0KTsKQEAgLTM5MSwyNSArNDM5LDE3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHNldExvYWRUeXBlKEZyYW1lTG9hZFR5cGUpOwog
Ci0gICAgICAgIHZvaWQgY2hlY2tOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIERvY3VtZW50TG9hZGVyKiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBOYXZpZ2F0aW9uUG9s
aWN5RGVjaXNpb25GdW5jdGlvbiwgdm9pZCogYXJndW1lbnQpOwotICAgICAgICB2b2lkIGNoZWNr
TmV3V2luZG93UG9saWN5KGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lKTsK
LQotICAgICAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KFBvbGljeUFjdGlv
bik7Ci0gICAgICAgIHZvaWQgY29udGludWVBZnRlck5ld1dpbmRvd1BvbGljeShQb2xpY3lBY3Rp
b24pOwotICAgICAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5KFBvbGljeUFjdGlv
bik7Ci0gICAgICAgIHZvaWQgY29udGludWVMb2FkQWZ0ZXJXaWxsU3VibWl0Rm9ybShQb2xpY3lB
Y3Rpb24gPSBQb2xpY3lVc2UpOwotCiAgICAgICAgIHN0YXRpYyB2b2lkIGNhbGxDb250aW51ZUxv
YWRBZnRlck5hdmlnYXRpb25Qb2xpY3kodm9pZCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBh
c3NSZWZQdHI8Rm9ybVN0YXRlPiwgYm9vbCBzaG91bGRDb250aW51ZSk7Ci0gICAgICAgIHZvaWQg
Y29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgYm9vbCBzaG91bGRDb250aW51ZSk7CiAgICAgICAgIHN0
YXRpYyB2b2lkIGNhbGxDb250aW51ZUxvYWRBZnRlck5ld1dpbmRvd1BvbGljeSh2b2lkKiwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcm
IGZyYW1lTmFtZSwgYm9vbCBzaG91bGRDb250aW51ZSk7Ci0gICAgICAgIHZvaWQgY29udGludWVM
b2FkQWZ0ZXJOZXdXaW5kb3dQb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0
cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBzaG91bGRDb250aW51
ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNhbGxDb250aW51ZUZyYWdtZW50U2Nyb2xsQWZ0ZXJO
YXZpZ2F0aW9uUG9saWN5KHZvaWQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRy
PEZvcm1TdGF0ZT4sIGJvb2wgc2hvdWxkQ29udGludWUpOworCisgICAgICAgIHZvaWQgY29udGlu
dWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3NS
ZWZQdHI8Rm9ybVN0YXRlPiwgYm9vbCBzaG91bGRDb250aW51ZSk7CisgICAgICAgIHZvaWQgY29u
dGludWVMb2FkQWZ0ZXJOZXdXaW5kb3dQb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFz
c1JlZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBzaG91bGRD
b250aW51ZSk7CiAgICAgICAgIHZvaWQgY29udGludWVGcmFnbWVudFNjcm9sbEFmdGVyTmF2aWdh
dGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNob3VsZENvbnRpbnVlKTsK
KwogICAgICAgICBib29sIHNob3VsZFNjcm9sbFRvQW5jaG9yKGJvb2wgaXNGb3JtU3VibWlzc2lv
biwgRnJhbWVMb2FkVHlwZSwgY29uc3QgS1VSTCYpOwogICAgICAgICB2b2lkIGFkZEhpc3RvcnlJ
dGVtRm9yRnJhZ21lbnRTY3JvbGwoKTsKIAotICAgICAgICB2b2lkIHN0b3BQb2xpY3lDaGVjaygp
OwotCiAgICAgICAgIHZvaWQgY2hlY2tMb2FkQ29tcGxldGVGb3JUaGlzRnJhbWUoKTsKIAogICAg
ICAgICB2b2lkIHNldERvY3VtZW50TG9hZGVyKERvY3VtZW50TG9hZGVyKik7CkBAIC00MjYsNyAr
NDY2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGNsZWFyKGJvb2wgY2xl
YXJXaW5kb3dQcm9wZXJ0aWVzID0gdHJ1ZSwgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMgPSB0cnVl
LCBib29sIGNsZWFyRnJhbWVWaWV3ID0gdHJ1ZSk7CiAKICAgICAgICAgYm9vbCBzaG91bGRSZWxv
YWRUb0hhbmRsZVVucmVhY2hhYmxlVVJMKERvY3VtZW50TG9hZGVyKik7Ci0gICAgICAgIHZvaWQg
aGFuZGxlVW5pbXBsZW1lbnRhYmxlUG9saWN5KGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIAogICAg
ICAgICB2b2lkIGRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpOwogICAgICAgICB2b2lkIGRpc3BhdGNo
QXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwpAQCAtNDgzLDYgKzUy
Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAg
ICAgIEZyYW1lTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKIAorICAgICAgICBMb2FkZXJQb2xpY3kg
bV9wb2xpY3k7CisKICAgICAgICAgRnJhbWVTdGF0ZSBtX3N0YXRlOwogICAgICAgICBGcmFtZUxv
YWRUeXBlIG1fbG9hZFR5cGU7CiAKQEAgLTQ5NCwxNSArNTM1LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IG1fcHJvdmlzaW9uYWxEb2N1bWVu
dExvYWRlcjsKICAgICAgICAgUmVmUHRyPERvY3VtZW50TG9hZGVyPiBtX3BvbGljeURvY3VtZW50
TG9hZGVyOwogCi0gICAgICAgIC8vIFRoaXMgaWRlbnRpZmllcyB0aGUgdHlwZSBvZiBuYXZpZ2F0
aW9uIGFjdGlvbiB3aGljaCBwcm9tcHRlZCB0aGlzIGxvYWQuIE5vdGUgCi0gICAgICAgIC8vIHRo
YXQgV2ViS2l0IGNvbnZleXMgdGhpcyB2YWx1ZSBhcyB0aGUgV2ViQWN0aW9uTmF2aWdhdGlvblR5
cGVLZXkgdmFsdWUKLSAgICAgICAgLy8gb24gbmF2aWdhdGlvbiBhY3Rpb24gZGVsZWdhdGUgY2Fs
bGJhY2tzLgotICAgICAgICBGcmFtZUxvYWRUeXBlIG1fcG9saWN5TG9hZFR5cGU7Ci0gICAgICAg
IFBvbGljeUNoZWNrIG1fcG9saWN5Q2hlY2s7Ci0KICAgICAgICAgYm9vbCBtX2RlbGVnYXRlSXNI
YW5kbGluZ1Byb3Zpc2lvbmFsTG9hZEVycm9yOwotICAgICAgICBib29sIG1fZGVsZWdhdGVJc0Rl
Y2lkaW5nTmF2aWdhdGlvblBvbGljeTsKLSAgICAgICAgYm9vbCBtX2RlbGVnYXRlSXNIYW5kbGlu
Z1VuaW1wbGVtZW50YWJsZVBvbGljeTsKIAogICAgICAgICBib29sIG1fZmlyc3RMYXlvdXREb25l
OwogICAgICAgICBib29sIG1fcXVpY2tSZWRpcmVjdENvbWluZzsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmggYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ckNsaWVudC5oCmluZGV4IDViYTRiMTAuLmYxYzU4ZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJD
bGllbnQuaApAQCAtNTgsNiArNTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
SFRNTFBsdWdJbkVsZW1lbnQ7CiAgICAgY2xhc3MgSW50U2l6ZTsKICAgICBjbGFzcyBLVVJMOwor
ICAgIGNsYXNzIExvYWRlclBvbGljeTsKICAgICBjbGFzcyBOYXZpZ2F0aW9uQWN0aW9uOwogICAg
IGNsYXNzIFBsdWdpblZpZXc7CiAgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKQEAgLTcyLDcgKzcz
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFN0cmluZzsKICAgICBjbGFzcyBX
aWRnZXQ7CiAKLSAgICB0eXBlZGVmIHZvaWQgKEZyYW1lTG9hZGVyOjoqRnJhbWVQb2xpY3lGdW5j
dGlvbikoUG9saWN5QWN0aW9uKTsKKyAgICB0eXBlZGVmIHZvaWQgKExvYWRlclBvbGljeTo6KkZy
YW1lUG9saWN5RnVuY3Rpb24pKFBvbGljeUFjdGlvbik7CiAKICAgICBjbGFzcyBGcmFtZUxvYWRl
ckNsaWVudCB7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvTWFpblJl
c291cmNlTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAK
aW5kZXggYTNlOTBmZC4uNzdlN2M5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvTWFpblJl
c291cmNlTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIu
Y3BwCkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgTWFpblJlc291cmNlTG9hZGVyOjpkaWRDYW5jZWwo
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiAgICAgUmVmUHRyPE1haW5SZXNvdXJjZUxvYWRl
cj4gcHJvdGVjdCh0aGlzKTsKIAogICAgIGlmIChtX3dhaXRpbmdGb3JDb250ZW50UG9saWN5KSB7
Ci0gICAgICAgIGZyYW1lTG9hZGVyKCktPmNhbmNlbENvbnRlbnRQb2xpY3lDaGVjaygpOworICAg
ICAgICBmcmFtZUxvYWRlcigpLT5wb2xpY3koKS0+Y2FuY2VsQ2hlY2soKTsKICAgICAgICAgQVNT
RVJUKG1fd2FpdGluZ0ZvckNvbnRlbnRQb2xpY3kpOwogICAgICAgICBtX3dhaXRpbmdGb3JDb250
ZW50UG9saWN5ID0gZmFsc2U7CiAgICAgICAgIGRlcmVmKCk7IC8vIGJhbGFuY2VzIHJlZiBpbiBk
aWRSZWNlaXZlUmVzcG9uc2UKQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIE1haW5SZXNvdXJjZUxv
YWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3Qg
UmVzbwogICAgIC8vIHN5bmNocm9ub3VzbHkgZm9yIHRoZXNlIHJlZGlyZWN0IGNhc2VzLgogICAg
IGlmICghcmVkaXJlY3RSZXNwb25zZS5pc051bGwoKSkgewogICAgICAgICByZWYoKTsgLy8gYmFs
YW5jZWQgYnkgZGVyZWYgaW4gY29udGludWVBZnRlck5hdmlnYXRpb25Qb2xpY3kKLSAgICAgICAg
ZnJhbWVMb2FkZXIoKS0+Y2hlY2tOYXZpZ2F0aW9uUG9saWN5KG5ld1JlcXVlc3QsIGNhbGxDb250
aW51ZUFmdGVyTmF2aWdhdGlvblBvbGljeSwgdGhpcyk7CisgICAgICAgIGZyYW1lTG9hZGVyKCkt
PnBvbGljeSgpLT5jaGVja05hdmlnYXRpb25Qb2xpY3kobmV3UmVxdWVzdCwgY2FsbENvbnRpbnVl
QWZ0ZXJOYXZpZ2F0aW9uUG9saWN5LCB0aGlzKTsKICAgICB9CiB9CiAKQEAgLTIwNSw3ICsyMDUs
NyBAQCB2b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6Y29udGludWVBZnRlckNvbnRlbnRQb2xpY3ko
UG9saWN5QWN0aW9uIGNvbnRlbnRQb2xpY3ksCiAgICAgICAgIC8vIFByZXZlbnQgcmVtb3RlIHdl
YiBhcmNoaXZlcyBmcm9tIGxvYWRpbmcgYmVjYXVzZSB0aGV5IGNhbiBjbGFpbSB0byBiZSBmcm9t
IGFueSBkb21haW4gYW5kIHRodXMgYXZvaWQgY3Jvc3MtZG9tYWluIHNlY3VyaXR5IGNoZWNrcyAo
NDEyMDI1NSkuCiAgICAgICAgIGJvb2wgaXNSZW1vdGVXZWJBcmNoaXZlID0gZXF1YWxJZ25vcmlu
Z0Nhc2UoImFwcGxpY2F0aW9uL3gtd2ViYXJjaGl2ZSIsIG1pbWVUeXBlKSAmJiAhbV9zdWJzdGl0
dXRlRGF0YS5pc1ZhbGlkKCkgJiYgIXVybC5pc0xvY2FsRmlsZSgpOwogICAgICAgICBpZiAoIWZy
YW1lTG9hZGVyKCktPmNhblNob3dNSU1FVHlwZShtaW1lVHlwZSkgfHwgaXNSZW1vdGVXZWJBcmNo
aXZlKSB7Ci0gICAgICAgICAgICBmcmFtZUxvYWRlcigpLT5jYW5ub3RTaG93TUlNRVR5cGUocik7
CisgICAgICAgICAgICBmcmFtZUxvYWRlcigpLT5wb2xpY3koKS0+Y2Fubm90U2hvd01JTUVUeXBl
KHIpOwogICAgICAgICAgICAgLy8gQ2hlY2sgcmVhY2hlZFRlcm1pbmFsU3RhdGUgc2luY2UgdGhl
IGxvYWQgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGNhbmNlbGxlZCBpbnNpZGUgb2YgX2hhbmRsZVVu
aW1wbGVtZW50YWJsZVBvbGljeVdpdGhFcnJvckNvZGU6Oi4KICAgICAgICAgICAgIGlmICghcmVh
Y2hlZFRlcm1pbmFsU3RhdGUoKSkKICAgICAgICAgICAgICAgICBzdG9wTG9hZGluZ0ZvclBvbGlj
eUNoYW5nZSgpOwpAQCAtMzIwLDcgKzMyMCwyNiBAQCB2b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHIpCiAgICAgQVNTRVJU
KCFtX3dhaXRpbmdGb3JDb250ZW50UG9saWN5KTsKICAgICBtX3dhaXRpbmdGb3JDb250ZW50UG9s
aWN5ID0gdHJ1ZTsKICAgICByZWYoKTsgLy8gYmFsYW5jZWQgYnkgZGVyZWYgaW4gY29udGludWVB
ZnRlckNvbnRlbnRQb2xpY3kgYW5kIGRpZENhbmNlbAotICAgIGZyYW1lTG9hZGVyKCktPmNoZWNr
Q29udGVudFBvbGljeShtX3Jlc3BvbnNlLm1pbWVUeXBlKCksIGNhbGxDb250aW51ZUFmdGVyQ29u
dGVudFBvbGljeSwgdGhpcyk7CisKKyAgICAvLyBJcyB0aGUgYWN0aXZlRG9jdW1lbnRMb2FkZXIg
YWx3YXlzIHVzPworICAgIEFTU0VSVChmcmFtZUxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRl
cigpKTsKKworICAgIC8vIEFsd2F5cyBzaG93IGNvbnRlbnQgd2l0aCB2YWxpZCBzdWJzdGl0dXRl
IGRhdGEuCisgICAgaWYgKGZyYW1lTG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnN1
YnN0aXR1dGVEYXRhKCkuaXNWYWxpZCgpKSB7CisgICAgICAgIGNhbGxDb250aW51ZUFmdGVyQ29u
dGVudFBvbGljeSh0aGlzLCBQb2xpY3lVc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisj
aWYgRU5BQkxFKEZUUERJUikKKyAgICAvLyBSZXNwZWN0IHRoZSBoaWRkZW4gRlRQIERpcmVjdG9y
eSBMaXN0aW5nIHByZWYgc28gaXQgY2FuIGJlIHRlc3RlZCBldmVuIGlmIHRoZSBwb2xpY3kgZGVs
ZWdhdGUgbWlnaHQgb3RoZXJ3aXNlIGRpc2FsbG93IGl0CisgICAgU2V0dGluZ3MqIHNldHRpbmdz
ID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmZv
cmNlRlRQRGlyZWN0b3J5TGlzdGluZ3MoKSAmJiBtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0gImFw
cGxpY2F0aW9uL3gtZnRwLWRpcmVjdG9yeSIpIHsKKyAgICAgICAgY2FsbENvbnRpbnVlQWZ0ZXJD
b250ZW50UG9saWN5KHRoaXMsIFBvbGljeVVzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYKKworICAgIGZyYW1lTG9hZGVyKCktPnBvbGljeSgpLT5jaGVja0NvbnRlbnRQb2xpY3ko
bV9yZXNwb25zZS5taW1lVHlwZSgpLCBjYWxsQ29udGludWVBZnRlckNvbnRlbnRQb2xpY3ksIHRo
aXMpOwogfQogCiB2b2lkIE1haW5SZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3Qg
Y2hhciogZGF0YSwgaW50IGxlbmd0aCwgbG9uZyBsb25nIGxlbmd0aFJlY2VpdmVkLCBib29sIGFs
bEF0T25jZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBi
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAppbmRleCBiYjY4YjgyLi44ZjVmNzNk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKKysrIGIvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCkBAIC0yNDQsMTkgKzI0NCwyMCBAQCBib29s
IFNWR0ltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICAgICAgbV9j
aHJvbWVDbGllbnQuc2V0KG5ldyBTVkdJbWFnZUNocm9tZUNsaWVudCh0aGlzKSk7CiAgICAgICAg
IAogICAgICAgICAvLyBGSVhNRTogSWYgdGhpcyBTVkcgZW5kcyB1cCBsb2FkaW5nIGl0c2VsZiwg
d2UgbWlnaHQgbGVhayB0aGUgd29ybGQuCi0gICAgICAgIC8vIFRIZSBjb21tZW50IHNhaWQgdGhh
dCB0aGUgQ2FjaGUgY29kZSBkb2VzIG5vdCBrbm93IGFib3V0IENhY2hlZEltYWdlcworICAgICAg
ICAvLyBUaGUgY29tbWVudCBzYWlkIHRoYXQgdGhlIENhY2hlIGNvZGUgZG9lcyBub3Qga25vdyBh
Ym91dCBDYWNoZWRJbWFnZXMKICAgICAgICAgLy8gaG9sZGluZyBGcmFtZXMgYW5kIHdvbid0IGtu
b3cgdG8gYnJlYWsgdGhlIGN5Y2xlLiBCdXQgCiAgICAgICAgIG1fcGFnZS5zZXQobmV3IFBhZ2Uo
bV9jaHJvbWVDbGllbnQuZ2V0KCksIGR1bW15Q29udGV4dE1lbnVDbGllbnQsIGR1bW15RWRpdG9y
Q2xpZW50LCBkdW1teURyYWdDbGllbnQsIGR1bW15SW5zcGVjdG9yQ2xpZW50LCBkdW1teVBsdWdp
bkhhbHRlckNsaWVudCkpOwogICAgICAgICBtX3BhZ2UtPnNldHRpbmdzKCktPnNldEphdmFTY3Jp
cHRFbmFibGVkKGZhbHNlKTsKICAgICAgICAgbV9wYWdlLT5zZXR0aW5ncygpLT5zZXRQbHVnaW5z
RW5hYmxlZChmYWxzZSk7CiAKKyAgICAgICAgLy8gRklYTUU6IFNlcmlvdXNseT8gIFRoaXMgaXMg
d2h5IHdlIGNhbid0IGhhdmUgbmljZSB0aGluZ3MuCiAgICAgICAgIFJlZlB0cjxGcmFtZT4gZnJh
bWUgPSBGcmFtZTo6Y3JlYXRlKG1fcGFnZS5nZXQoKSwgMCwgZHVtbXlGcmFtZUxvYWRlckNsaWVu
dCk7CiAgICAgICAgIGZyYW1lLT5zZXRWaWV3KEZyYW1lVmlldzo6Y3JlYXRlKGZyYW1lLmdldCgp
KSk7CiAgICAgICAgIGZyYW1lLT5pbml0KCk7CiAgICAgICAgIFJlc291cmNlUmVxdWVzdCBmYWtl
UmVxdWVzdChLVVJMKFBhcnNlZFVSTFN0cmluZywgIiIpKTsKICAgICAgICAgRnJhbWVMb2FkZXIq
IGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKICAgICAgICAgbG9hZGVyLT5sb2FkKGZha2VSZXF1
ZXN0LCBmYWxzZSk7IC8vIE1ha2Ugc3VyZSB0aGUgRG9jdW1lbnRMb2FkZXIgaXMgY3JlYXRlZAot
ICAgICAgICBsb2FkZXItPmNhbmNlbENvbnRlbnRQb2xpY3lDaGVjaygpOyAvLyBjYW5jZWwgYW55
IHBvbGljeSBjaGVja3MKKyAgICAgICAgbG9hZGVyLT5wb2xpY3koKS0+Y2FuY2VsQ2hlY2soKTsg
Ly8gY2FuY2VsIGFueSBwb2xpY3kgY2hlY2tzCiAgICAgICAgIGxvYWRlci0+Y29tbWl0UHJvdmlz
aW9uYWxMb2FkKDApOwogICAgICAgICBsb2FkZXItPnNldFJlc3BvbnNlTUlNRVR5cGUoImltYWdl
L3N2Zyt4bWwiKTsKICAgICAgICAgbG9hZGVyLT5iZWdpbihLVVJMKCkpOyAvLyBjcmVhdGUgdGhl
IGVtcHR5IGRvY3VtZW50CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCmluZGV4IGZlNjY0NDAuLmZjOGM4YmQgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMDktMTAtMDcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGYWN0b3IgTG9hZGVyUG9s
aWN5IG91dCBvZiBGcmFtZUxvYWRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzAxNTUKKworICAgICAgICBNb3ZlIHRoZSBwb2xpY3kgY2FsbGJhY2sg
dG8gdGhlIHBvbGljeSBvYmplY3QuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaFdpbGxTdWJtaXRGb3JtKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUpOgorICAgICAgICAoV2ViS2l0OjpG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24p
OgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKwogMjAwOS0xMC0wNiAgWGFuIExvcGV6ICA8eGxvcGV6
QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1n
aXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBi
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCmluZGV4
IDZhODYyMzUuLjJlYTliZjUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShGcmFtZVBvbGljeUZ1bmN0aW9uIHBv
bGljeUZ1bmN0aW8KICAgICBBU1NFUlQocG9saWN5RnVuY3Rpb24pOwogICAgIGlmICghcG9saWN5
RnVuY3Rpb24pCiAgICAgICAgIHJldHVybjsKLSAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCkt
Pipwb2xpY3lGdW5jdGlvbikoUG9saWN5VXNlKTsKKyAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVy
KCktPnBvbGljeSgpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeVVzZSk7CiB9CiAKIApAQCAtMjgw
LDcgKzI4MCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5
Rm9yTUlNRVR5cGUoRnJhbWVQb2xpY3lGdW5jdGlvbiBwb2xpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChyZXNvdXJjZVJlcXVlc3QuaXNOdWxsKCkpIHsKLSAgICAgICAgKGNvcmUobV9mcmFt
ZSktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeUlnbm9yZSk7CisgICAgICAgIChj
b3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+cG9saWN5KCktPipwb2xpY3lGdW5jdGlvbikoUG9saWN5
SWdub3JlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzQ3LDcgKzM0Nyw3IEBAIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0
aW9uKEZyYW1lUG9saWN5RnVuY3RpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChyZXNvdXJj
ZVJlcXVlc3QuaXNOdWxsKCkpIHsKLSAgICAgICAgKGNvcmUobV9mcmFtZSktPmxvYWRlcigpLT4q
cG9saWN5RnVuY3Rpb24pKFBvbGljeUlnbm9yZSk7CisgICAgICAgIChjb3JlKG1fZnJhbWUpLT5s
b2FkZXIoKS0+cG9saWN5KCktPipwb2xpY3lGdW5jdGlvbikoUG9saWN5SWdub3JlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzcwLDcgKzM3MCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1lUG9saWN5
RnVuY3RpCiAgICAgLy8gRklYTUU6IEkgdGhpbmsgUXQgdmVyc2lvbiBtYXJzaGFscyB0aGlzIHRv
IGFub3RoZXIgdGhyZWFkIHNvIHdoZW4gd2UKICAgICAvLyBoYXZlIG11bHRpLXRocmVhZGVkIGRv
d25sb2FkLCB3ZSBtaWdodCBuZWVkIHRvIGRvIHRoZSBzYW1lCiAgICAgaWYgKCFpc0hhbmRsZWQp
Ci0gICAgICAgIChjb3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQb2xp
Y3lVc2UpOworICAgICAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPnBvbGljeSgpLT4qcG9s
aWN5RnVuY3Rpb24pKFBvbGljeVVzZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9u
IHBvbGljeUZ1bmN0aW9uLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiBhY3Rpb24sIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pCkBA
IC0zODAsNyArMzgwLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuY3QKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKHJlc291cmNlUmVxdWVzdC5pc051bGwoKSkgewotICAgICAgICAoY29yZSht
X2ZyYW1lKS0+bG9hZGVyKCktPipwb2xpY3lGdW5jdGlvbikoUG9saWN5SWdub3JlKTsKKyAgICAg
ICAgKGNvcmUobV9mcmFtZSktPmxvYWRlcigpLT5wb2xpY3koKS0+KnBvbGljeUZ1bmN0aW9uKShQ
b2xpY3lJZ25vcmUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zOTcsNyArMzk3LDcg
QEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuY3QKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2Vi
VmlldywgIm5hdmlnYXRpb24tcmVxdWVzdGVkIiwgbV9mcmFtZSwgcmVxdWVzdCwgJnJlc3BvbnNl
KTsKIAogICAgIGlmIChyZXNwb25zZSA9PSBXRUJLSVRfTkFWSUdBVElPTl9SRVNQT05TRV9JR05P
UkUpIHsKLSAgICAgICAgKGNvcmUobV9mcmFtZSktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24p
KFBvbGljeUlnbm9yZSk7CisgICAgICAgIChjb3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+cG9saWN5
KCktPipwb2xpY3lGdW5jdGlvbikoUG9saWN5SWdub3JlKTsKICAgICAgICAgZ19vYmplY3RfdW5y
ZWYocmVxdWVzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJLaXQv
aGFpa3UvQ2hhbmdlTG9nIGIvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZwppbmRleCBmNDZhMjUwLi5l
ZGMxMWIzIDEwMDY0NAotLS0gYS9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9o
YWlrdS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAwOS0xMC0wNyAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZhY3RvciBMb2FkZXJQb2xpY3kgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDE1NQorCisgICAg
ICAgIE1vdmUgdGhlIHBvbGljeSBjYWxsYmFjayB0byB0aGUgcG9saWN5IG9iamVjdC4KKworICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERl
Y2lkZVBvbGljeUZvck1JTUVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisKIDIwMDktMDktMTcgIEtlbm5ldGggUm9oZGUgQ2hyaXN0
aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9u
IEhhdXNtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50SGFpa3UuY3BwIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50SGFpa3UuY3BwCmluZGV4IGQyNjgzYzAuLmNkYTY0MWUgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmNwcAor
KysgYi9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5j
cHAKQEAgLTI4MCw3ICsyODAsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3Bh
dGNoV2lsbFN1Ym1pdEZvcm0oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbgogICAgIC8vIEZJ
WE1FOiBTZW5kIGFuIGV2ZW50IHRvIGFsbG93IGZvciBhbGVydHMgYW5kIGNhbmNlbGxhdGlvbi4K
ICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICAobV9mcmFtZS0+bG9hZGVy
KCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKKyAgICAobV9mcmFtZS0+bG9hZGVyKCktPnBvbGlj
eSgpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6ZGlzcGF0Y2hEaWRMb2FkTWFpblJlc291cmNlKERvY3VtZW50TG9hZGVyKikKQEAgLTYz
NSw3ICs2MzUsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGVjaWRl
UG9saWN5Rm9yTUlNRVR5cGUoRnJhbWVQb2xpY3lGdW5jdGlvbgogICAgICAgICByZXR1cm47CiAK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+KmZ1bmN0aW9u
KShQb2xpY3lVc2UpOworICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+cG9saWN5KCktPipmdW5jdGlv
bikoUG9saWN5VXNlKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRj
aERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0
aW9uLApAQCAtNjUwLDEyICs2NTAsMTIgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpk
aXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUYKICAgICAg
ICAgQk1lc3NhZ2UgbWVzc2FnZShORVdfV0lORE9XX1JFUVVFU1RFRCk7CiAgICAgICAgIG1lc3Nh
Z2UuQWRkU3RyaW5nKCJ1cmwiLCByZXF1ZXN0LnVybCgpLnN0cmluZygpKTsKICAgICAgICAgaWYg
KG1fbWVzc2VuZ2VyLT5TZW5kTWVzc2FnZSgmbWVzc2FnZSkpIHsKLSAgICAgICAgICAgIChtX2Zy
YW1lLT5sb2FkZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lJZ25vcmUpOworICAgICAgICAgICAgKG1f
ZnJhbWUtPmxvYWRlcigpLT5wb2xpY3koKS0+KmZ1bmN0aW9uKShQb2xpY3lJZ25vcmUpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgKG1fZnJhbWUtPmxvYWRl
cigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CisgICAgKG1fZnJhbWUtPmxvYWRlcigpLT5wb2xp
Y3koKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFtZVBvbGlj
eUZ1bmN0aW9uIGZ1bmN0aW9uLApAQCAtNjcxLDcgKzY3MSw3IEBAIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1l
UG9saWN5CiAgICAgICAgIG1lc3NhZ2UuQWRkU3RyaW5nKCJ1cmwiLCByZXF1ZXN0LnVybCgpLnN0
cmluZygpKTsKICAgICAgICAgbV9tZXNzZW5nZXItPlNlbmRNZXNzYWdlKCZtZXNzYWdlKTsKIAot
ICAgICAgICAobV9mcmFtZS0+bG9hZGVyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKKyAgICAg
ICAgKG1fZnJhbWUtPmxvYWRlcigpLT5wb2xpY3koKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFj
L0NoYW5nZUxvZwppbmRleCAzODRiN2VlLi4xZjNlMjQ3IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFj
L0NoYW5nZUxvZworKysgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisy
MDA5LTEwLTA3ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmFjdG9yIExvYWRlclBvbGljeSBv
dXQgb2YgRnJhbWVMb2FkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMwMTU1CisKKyAgICAgICAgTW92ZSB0aGUgcG9saWN5IGNhbGxiYWNrIHRvIHRo
ZSBwb2xpY3kgb2JqZWN0LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQubW06CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxs
U3VibWl0Rm9ybSk6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVjZWl2ZWRQb2xp
Y3lEZWNpc29uKToKKwogMjAwOS0xMC0wNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbSBiL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KaW5kZXggNzY0MTMwYS4uMzFi
N2Y0OSAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5tbQorKysgYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVy
Q2xpZW50Lm1tCkBAIC03MTgsNyArNzE4LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLAogewog
ICAgIGlkIDxXZWJGb3JtRGVsZWdhdGU+IGZvcm1EZWxlZ2F0ZSA9IFtnZXRXZWJWaWV3KG1fd2Vi
RnJhbWUuZ2V0KCkpIF9mb3JtRGVsZWdhdGVdOwogICAgIGlmICghZm9ybURlbGVnYXRlKSB7Ci0g
ICAgICAgIChjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpLT5sb2FkZXIoKS0+KmZ1bmN0aW9uKShQb2xp
Y3lVc2UpOworICAgICAgICAoY29yZShtX3dlYkZyYW1lLmdldCgpKS0+bG9hZGVyKCktPnBvbGlj
eSgpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTExOTcsNyArMTE5Nyw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJlY2VpdmVkUG9s
aWN5RGVjaXNvbihQb2xpY3lBY3Rpb24gYWN0aW9uKQogICAgIG1fcG9saWN5TGlzdGVuZXIgPSBu
aWw7CiAgICAgbV9wb2xpY3lGdW5jdGlvbiA9IDA7CiAKLSAgICAoY29yZShtX3dlYkZyYW1lLmdl
dCgpKS0+bG9hZGVyKCktPipmdW5jdGlvbikoYWN0aW9uKTsKKyAgICAoY29yZShtX3dlYkZyYW1l
LmdldCgpKS0+bG9hZGVyKCktPnBvbGljeSgpLT4qZnVuY3Rpb24pKGFjdGlvbik7CiB9CiAKIFN0
cmluZyBXZWJGcmFtZUxvYWRlckNsaWVudDo6dXNlckFnZW50KGNvbnN0IEtVUkwmIHVybCkKZGlm
ZiAtLWdpdCBhL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4
IDRmZDc0NWEuLjAxMTc5NjkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDA5LTEwLTA3ICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRmFjdG9yIExvYWRlclBvbGljeSBvdXQgb2YgRnJhbWVMb2FkZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMTU1CisK
KyAgICAgICAgTW92ZSB0aGUgcG9saWN5IGNhbGxiYWNrIHRvIHRoZSBwb2xpY3kgb2JqZWN0Lgor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpjYWxsUG9saWN5RnVuY3Rpb24pOgor
CiAyMDA5LTEwLTA2ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKaW5kZXggYzJiMzVmZi4uYjNiZGU4MyAxMDA2NDQKLS0t
IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCisrKyBi
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcApAQCAtMTg3
LDcgKzE4Nyw3IEBAIFFXZWJGcmFtZSogRnJhbWVMb2FkZXJDbGllbnRRdDo6d2ViRnJhbWUoKSBj
b25zdAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNhbGxQb2xpY3lGdW5jdGlvbihGcmFt
ZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBQb2xpY3lBY3Rpb24gYWN0aW9uKQogewotICAgICht
X2ZyYW1lLT5sb2FkZXIoKS0+KmZ1bmN0aW9uKShhY3Rpb24pOworICAgIChtX2ZyYW1lLT5sb2Fk
ZXIoKS0+cG9saWN5KCktPipmdW5jdGlvbikoYWN0aW9uKTsKIH0KIAogYm9vbCBGcmFtZUxvYWRl
ckNsaWVudFF0OjpoYXNXZWJWaWV3KCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYktpdC93aW4vQ2hh
bmdlTG9nIGIvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggYzQwZTNkNC4uNTcyY2U1YSAxMDA2
NDQKLS0tIGEvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3dpbi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOSBAQAorMjAwOS0xMC0wNyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZh
Y3RvciBMb2FkZXJQb2xpY3kgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDE1NQorCisgICAgICAgIE1vdmUgdGhlIHBv
bGljeSBjYWxsYmFjayB0byB0aGUgcG9saWN5IG9iamVjdC4KKworICAgICAgICAqIFdlYkZyYW1l
LmNwcDoKKyAgICAgICAgKFdlYkZyYW1lOjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKToKKyAgICAg
ICAgKFdlYkZyYW1lOjpyZWNlaXZlZFBvbGljeURlY2lzaW9uKToKKyAgICAgICAgKFdlYkZyYW1l
OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck1JTUVUeXBlKToKKyAgICAgICAgKFdlYkZyYW1lOjpk
aXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbik6CisgICAgICAgIChXZWJGcmFt
ZTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKwogMjAwOS0xMC0w
NiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAgYi9XZWJL
aXQvd2luL1dlYkZyYW1lLmNwcAppbmRleCA0NGVmZTgzLi5iZjQyZTQyIDEwMDY0NAotLS0gYS9X
ZWJLaXQvd2luL1dlYkZyYW1lLmNwcAorKysgYi9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcApAQCAt
MTM0MSw3ICsxMzQxLDcgQEAgdm9pZCBXZWJGcmFtZTo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShG
cmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBQYXNzUmVmUHRyPEYKICAgICBDT01QdHI8SVdl
YkZvcm1EZWxlZ2F0ZT4gZm9ybURlbGVnYXRlOwogCiAgICAgaWYgKEZBSUxFRChkLT53ZWJWaWV3
LT5mb3JtRGVsZWdhdGUoJmZvcm1EZWxlZ2F0ZSkpKSB7Ci0gICAgICAgIChjb3JlRnJhbWUtPmxv
YWRlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CisgICAgICAgIChjb3JlRnJhbWUtPmxvYWRl
cigpLT5wb2xpY3koKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0xMzYwLDcgKzEzNjAsNyBAQCB2b2lkIFdlYkZyYW1lOjpkaXNwYXRjaFdpbGxT
dWJtaXRGb3JtKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sIFBhc3NSZWZQdHI8RgogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogQWRkIGEgc2FuZSBkZWZhdWx0IGltcGxlbWVu
dGF0aW9uCi0gICAgKGNvcmVGcmFtZS0+bG9hZGVyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsK
KyAgICAoY29yZUZyYW1lLT5sb2FkZXIoKS0+cG9saWN5KCktPipmdW5jdGlvbikoUG9saWN5VXNl
KTsKIH0KIAogdm9pZCBXZWJGcmFtZTo6cmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKERvY3VtZW50
TG9hZGVyKikKQEAgLTE1MjYsNyArMTUyNiw3IEBAIHZvaWQgV2ViRnJhbWU6OnJlY2VpdmVkUG9s
aWN5RGVjaXNpb24oUG9saWN5QWN0aW9uIGFjdGlvbikKICAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZSh0aGlzKTsKICAgICBBU1NFUlQoY29yZUZyYW1lKTsKIAotICAgIChjb3JlRnJhbWUtPmxv
YWRlcigpLT4qZnVuY3Rpb24pKGFjdGlvbik7CisgICAgKGNvcmVGcmFtZS0+bG9hZGVyKCktPnBv
bGljeSgpLT4qZnVuY3Rpb24pKGFjdGlvbik7CiB9CiAKIHZvaWQgV2ViRnJhbWU6OmRpc3BhdGNo
RGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUoRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQpAQCAt
MTU0Myw3ICsxNTQzLDcgQEAgdm9pZCBXZWJGcmFtZTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JN
SU1FVHlwZShGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBjb24KICAgICBpZiAoU1VDQ0VF
REVEKHBvbGljeURlbGVnYXRlLT5kZWNpZGVQb2xpY3lGb3JNSU1FVHlwZShkLT53ZWJWaWV3LCBC
U3RyaW5nKG1pbWVUeXBlKSwgdXJsUmVxdWVzdC5nZXQoKSwgdGhpcywgc2V0VXBQb2xpY3lMaXN0
ZW5lcihmdW5jdGlvbikuZ2V0KCkpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgKGNvcmVGcmFt
ZS0+bG9hZGVyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKKyAgICAoY29yZUZyYW1lLT5sb2Fk
ZXIoKS0+cG9saWN5KCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKIH0KIAogdm9pZCBXZWJGcmFt
ZTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5j
dGlvbiBmdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgYWN0aW9uLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUsIGNv
bnN0IFN0cmluZyYgZnJhbWVOYW1lKQpAQCAtMTU2MSw3ICsxNTYxLDcgQEAgdm9pZCBXZWJGcmFt
ZTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5j
dGlvbiBmdW5jdGkKICAgICBpZiAoU1VDQ0VFREVEKHBvbGljeURlbGVnYXRlLT5kZWNpZGVQb2xp
Y3lGb3JOZXdXaW5kb3dBY3Rpb24oZC0+d2ViVmlldywgYWN0aW9uSW5mb3JtYXRpb24uZ2V0KCks
IHVybFJlcXVlc3QuZ2V0KCksIEJTdHJpbmcoZnJhbWVOYW1lKSwgc2V0VXBQb2xpY3lMaXN0ZW5l
cihmdW5jdGlvbikuZ2V0KCkpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgKGNvcmVGcmFtZS0+
bG9hZGVyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKKyAgICAoY29yZUZyYW1lLT5sb2FkZXIo
KS0+cG9saWN5KCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKIH0KIAogdm9pZCBXZWJGcmFtZTo6
ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rp
b24gZnVuY3Rpb24sIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIGFjdGlvbiwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlKQpAQCAt
MTU3OSw3ICsxNTc5LDcgQEAgdm9pZCBXZWJGcmFtZTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3QKICAgICBpZiAoU1VDQ0VF
REVEKHBvbGljeURlbGVnYXRlLT5kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKGQtPndl
YlZpZXcsIGFjdGlvbkluZm9ybWF0aW9uLmdldCgpLCB1cmxSZXF1ZXN0LmdldCgpLCB0aGlzLCBz
ZXRVcFBvbGljeUxpc3RlbmVyKGZ1bmN0aW9uKS5nZXQoKSkpKQogICAgICAgICByZXR1cm47CiAK
LSAgICAoY29yZUZyYW1lLT5sb2FkZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOworICAgIChj
b3JlRnJhbWUtPmxvYWRlcigpLT5wb2xpY3koKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQog
CiB2b2lkIFdlYkZyYW1lOjpkaXNwYXRjaFVuYWJsZVRvSW1wbGVtZW50UG9saWN5KGNvbnN0IFJl
c291cmNlRXJyb3ImIGVycm9yKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3d4L0NoYW5nZUxvZyBiL1dl
YktpdC93eC9DaGFuZ2VMb2cKaW5kZXggMjUwOTZhOC4uODJiN2ZjMiAxMDA2NDQKLS0tIGEvV2Vi
S2l0L3d4L0NoYW5nZUxvZworKysgYi9XZWJLaXQvd3gvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMDktMTAtMDcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGYWN0b3IgTG9hZGVyUG9s
aWN5IG91dCBvZiBGcmFtZUxvYWRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzAxNTUKKworICAgICAgICBNb3ZlIHRoZSBwb2xpY3kgY2FsbGJhY2sg
dG8gdGhlIHBvbGljeSBvYmplY3QuCisKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRXeDo6
ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNs
aWVudFd4OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck1JTUVUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50V3g6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93
QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50V3g6OmRpc3BhdGNo
RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisKIDIwMDktMDktMjUgIEtldmluIE9s
bGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgd3ggYnVpbGQgZml4
LiBBZGQgRW1wdHlQbHVnaW5IYWx0ZXJDbGllbnQgd2hlbiBjcmVhdGluZyB0aGUgUGFnZS4KZGlm
ZiAtLWdpdCBhL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3Bw
IGIvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHAKaW5kZXgg
NTk0ZTBjMy4uNWU5N2EzZCAxMDA2NDQKLS0tIGEvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRXeC5jcHAKKysrIGIvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRXeC5jcHAKQEAgLTM0MCw3ICszNDAsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50V3g6OmRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlv
biwKICAgICAvLyBGSVhNRTogU2VuZCBhbiBldmVudCB0byBhbGxvdyBmb3IgYWxlcnRzIGFuZCBj
YW5jZWxsYXRpb24KICAgICBpZiAoIW1fd2ViRnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICAo
bV9mcmFtZS0+bG9hZGVyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKKyAgICAobV9mcmFtZS0+
bG9hZGVyKCktPnBvbGljeSgpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CiB9CiAKIApAQCAtNzA5
LDcgKzcwOSw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRXeDo6ZGlzcGF0Y2hEZWNpZGVQb2xp
Y3lGb3JNSU1FVHlwZShGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1CiAgICAgICAgIHJldHVybjsKICAg
ICAKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+KmZ1bmN0
aW9uKShQb2xpY3lVc2UpOworICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+cG9saWN5KCktPipmdW5j
dGlvbikoUG9saWN5VXNlKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFd4OjpkaXNwYXRj
aERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0
aW9uLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGNvbnN0IFN0cmluZyYgdGFyZ2V0TmFtZSkKQEAg
LTcyNCwxMiArNzI0LDEyIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRXeDo6ZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jCiAgICAgICAgIGlmICht
X3dlYlZpZXctPkdldEV2ZW50SGFuZGxlcigpLT5Qcm9jZXNzRXZlbnQod2tFdmVudCkpIHsKICAg
ICAgICAgICAgIC8vIGlmIHRoZSBhcHAgaGFuZGxlcyBhbmQgZG9lc24ndCBza2lwIHRoZSBldmVu
dCwgCiAgICAgICAgICAgICAvLyBmcm9tIFdlYktpdCdzIHBlcnNwZWN0aXZlIHRyZWF0IGl0IGFz
IGJsb2NrZWQgLyBpZ25vcmVkCi0gICAgICAgICAgICAobV9mcmFtZS0+bG9hZGVyKCktPipmdW5j
dGlvbikoUG9saWN5SWdub3JlKTsKKyAgICAgICAgICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+cG9s
aWN5KCktPipmdW5jdGlvbikoUG9saWN5SWdub3JlKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICAobV9mcmFtZS0+bG9hZGVyKCktPipmdW5jdGlvbiko
UG9saWN5VXNlKTsKKyAgICAobV9mcmFtZS0+bG9hZGVyKCktPnBvbGljeSgpLT4qZnVuY3Rpb24p
KFBvbGljeVVzZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRXeDo6ZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24s
IGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIGFjdGlvbiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pCkBAIC03NDQsOSArNzQ0LDkgQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudFd4OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b24oRnJhbWVQb2xpY3lGdW4KICAgICAgICAgCiAgICAgICAgIG1fd2ViVmlldy0+R2V0RXZlbnRI
YW5kbGVyKCktPlByb2Nlc3NFdmVudCh3a0V2ZW50KTsKICAgICAgICAgaWYgKHdrRXZlbnQuSXND
YW5jZWxsZWQoKSkKLSAgICAgICAgICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+KmZ1bmN0aW9uKShQ
b2xpY3lJZ25vcmUpOworICAgICAgICAgICAgKG1fZnJhbWUtPmxvYWRlcigpLT5wb2xpY3koKS0+
KmZ1bmN0aW9uKShQb2xpY3lJZ25vcmUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICAobV9m
cmFtZS0+bG9hZGVyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKKyAgICAgICAgICAgIChtX2Zy
YW1lLT5sb2FkZXIoKS0+cG9saWN5KCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKICAgICAgICAg
CiAgICAgfQogfQ==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40814</attachid>
            <date>2009-10-07 12:50:25 -0700</date>
            <delta_ts>2009-10-07 12:50:25 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>bug-30155-20091007125023.patch</filename>
            <type>text/plain</type>
            <size>50891</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzEwZTM0Zi4uM2QyMzgwNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NCBAQAorMjAwOS0xMC0wNyAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgor
CisgICAgICAgIEZhY3RvciBQb2xpY3lDaGVja2VyIG91dCBvZiBGcmFtZUxvYWRlcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAxNTUKKworICAgICAg
ICBUaGlzIHBhdGNoIHNlcGFyYXRlcyBQb2xpY3lDaGVja2VyIGZyb20gRnJhbWVMb2FkZXIuICBM
b2FkZXIgcG9saWN5IGlzCisgICAgICAgIGluIGNoYW5nZSBvZiBtYW5hZ2luZyB0aGUgRnJhbWVM
b2FkZXJDbGllbnQgY2FsbGJhY2tzLiAgSWRlYWxseSwgaXQKKyAgICAgICAgc2hvdWxkbid0IGtu
b3cgYW55dGhpbmcgYWJvdXQgRnJhbWVMb2FkZXIsIGJ1dCBJIGNvdWxkbid0IHF1aXRlIHJlbW92
ZQorICAgICAgICBhbGwga25vd2xlZGdlIChhbHRob3VnaCB3ZSBtaWdodCBiZSBhYmxlIHRvIGRv
IG1vcmUgbGF0ZXIpLiAgSW4gYQorICAgICAgICBmdXR1cmUgcGF0Y2gsIEknbGwgbW92ZSBQb2xp
Y3lDaGVja2VyIGludG8gYSBzZXBhcmF0ZSBmaWxlLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFVSTCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
bG9hZFdpdGhEb2N1bWVudExvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQb2xpY3lDaGVja2Vy
OjpoYW5kbGVVbmltcGxlbWVudGFibGVQb2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6UG9saWN5
Q2hlY2tlcjo6Y2Fubm90U2hvd01JTUVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvbGljeUNo
ZWNrZXI6OlBvbGljeUNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6UG9saWN5Q2hlY2tlcjo6
Y2hlY2tOYXZpZ2F0aW9uUG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OlBvbGljeUNoZWNrZXI6
OmNoZWNrQ29udGVudFBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2hv
dWxkUmVsb2FkVG9IYW5kbGVVbnJlYWNoYWJsZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlcjo6c3RvcEFsbExvYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UG9saWN5Q2hlY2tl
cjo6Y2FuY2VsQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6UG9saWN5Q2hlY2tlcjo6c3RvcENo
ZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBvbGljeUNoZWNrZXI6OmNvbnRpbnVlQWZ0ZXJDb250
ZW50UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OlBvbGljeUNoZWNrZXI6OmNvbnRpbnVlTG9h
ZEFmdGVyV2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNv
bnRpbnVlTG9hZEFmdGVyV2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OmxvYWRQb3N0UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
Y29udGludWVGcmFnbWVudFNjcm9sbEFmdGVyTmF2aWdhdGlvblBvbGljeSk6CisgICAgICAgIChX
ZWJDb3JlOjpQb2xpY3lDaGVja2VyOjpjaGVja05ld1dpbmRvd1BvbGljeSk6CisgICAgICAgIChX
ZWJDb3JlOjpQb2xpY3lDaGVja2VyOjpjb250aW51ZUFmdGVyTmV3V2luZG93UG9saWN5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBvbGljeUNoZWNrZXI6OmNvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9s
aWN5KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjb250aW51ZUxvYWRBZnRlck5h
dmlnYXRpb25Qb2xpY3kpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6UG9saWN5Q2hlY2tlcjo6bG9hZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
UG9saWN5Q2hlY2tlcjo6c2V0TG9hZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9saWN5Q2hl
Y2tlcjo6ZGVsZWdhdGVJc0RlY2lkaW5nTmF2aWdhdGlvblBvbGljeSk6CisgICAgICAgIChXZWJD
b3JlOjpQb2xpY3lDaGVja2VyOjpkZWxlZ2F0ZUlzSGFuZGxpbmdVbmltcGxlbWVudGFibGVQb2xp
Y3kpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnBvbGljeSk6CisgICAgICAgICog
bG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogbG9hZGVyL01haW5SZXNvdXJj
ZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWluUmVzb3VyY2VMb2FkZXI6OmRpZENh
bmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpNYWluUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpNYWluUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVlQWZ0
ZXJDb250ZW50UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5SZXNvdXJjZUxvYWRlcjo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKwogMjAwOS0xMC0w
NiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAg
Yi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggOTk2NmQ0MS4uZGJjZDRlOSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtMTY2LDEyICsxNjYsMTAgQEAgc3RhdGljIGlubGlu
ZSBib29sIGNhblJlZmVyVG9QYXJlbnRGcmFtZUVuY29kaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwg
Y29uc3QgRnJhbWUKIEZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcihGcmFtZSogZnJhbWUsIEZyYW1l
TG9hZGVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV9jbGll
bnQoY2xpZW50KQorICAgICwgbV9wb2xpY3koZnJhbWUpCiAgICAgLCBtX3N0YXRlKEZyYW1lU3Rh
dGVDb21taXR0ZWRQYWdlKQogICAgICwgbV9sb2FkVHlwZShGcmFtZUxvYWRUeXBlU3RhbmRhcmQp
Ci0gICAgLCBtX3BvbGljeUxvYWRUeXBlKEZyYW1lTG9hZFR5cGVTdGFuZGFyZCkKICAgICAsIG1f
ZGVsZWdhdGVJc0hhbmRsaW5nUHJvdmlzaW9uYWxMb2FkRXJyb3IoZmFsc2UpCi0gICAgLCBtX2Rl
bGVnYXRlSXNEZWNpZGluZ05hdmlnYXRpb25Qb2xpY3koZmFsc2UpCi0gICAgLCBtX2RlbGVnYXRl
SXNIYW5kbGluZ1VuaW1wbGVtZW50YWJsZVBvbGljeShmYWxzZSkKICAgICAsIG1fZmlyc3RMYXlv
dXREb25lKGZhbHNlKQogICAgICwgbV9xdWlja1JlZGlyZWN0Q29taW5nKGZhbHNlKQogICAgICwg
bV9zZW50UmVkaXJlY3ROb3RpZmljYXRpb24oZmFsc2UpCkBAIC0xOTc4LDcgKzE5NzYsOCBAQCB2
b2lkIEZyYW1lTG9hZGVyOjpsb2FkVVJMKGNvbnN0IEtVUkwmIG5ld1VSTCwgY29uc3QgU3RyaW5n
JiByZWZlcnJlciwgY29uc3QgU3RyaQogICAgIE5hdmlnYXRpb25BY3Rpb24gYWN0aW9uKG5ld1VS
TCwgbmV3TG9hZFR5cGUsIGlzRm9ybVN1Ym1pc3Npb24sIGV2ZW50KTsKIAogICAgIGlmICghdGFy
Z2V0RnJhbWUgJiYgIWZyYW1lTmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgY2hlY2tOZXdXaW5k
b3dQb2xpY3koYWN0aW9uLCByZXF1ZXN0LCBmb3JtU3RhdGUucmVsZWFzZSgpLCBmcmFtZU5hbWUp
OworICAgICAgICBwb2xpY3lDaGVja2VyKCktPmNoZWNrTmV3V2luZG93UG9saWN5KGFjdGlvbiwg
RnJhbWVMb2FkZXI6OmNhbGxDb250aW51ZUxvYWRBZnRlck5ld1dpbmRvd1BvbGljeSwKKyAgICAg
ICAgICAgIHJlcXVlc3QsIGZvcm1TdGF0ZS5yZWxlYXNlKCksIGZyYW1lTmFtZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTE5OTEsOSArMTk5MCw5IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OmxvYWRVUkwoY29uc3QgS1VSTCYgbmV3VVJMLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBjb25z
dCBTdHJpCiAgICAgLy8gd29yayBwcm9wZXJseS4KICAgICBpZiAoc2hvdWxkU2Nyb2xsVG9BbmNo
b3IoaXNGb3JtU3VibWlzc2lvbiwgbmV3TG9hZFR5cGUsIG5ld1VSTCkpIHsKICAgICAgICAgb2xk
RG9jdW1lbnRMb2FkZXItPnNldFRyaWdnZXJpbmdBY3Rpb24oYWN0aW9uKTsKLSAgICAgICAgc3Rv
cFBvbGljeUNoZWNrKCk7Ci0gICAgICAgIG1fcG9saWN5TG9hZFR5cGUgPSBuZXdMb2FkVHlwZTsK
LSAgICAgICAgY2hlY2tOYXZpZ2F0aW9uUG9saWN5KHJlcXVlc3QsIG9sZERvY3VtZW50TG9hZGVy
LmdldCgpLCBmb3JtU3RhdGUucmVsZWFzZSgpLAorICAgICAgICBwb2xpY3lDaGVja2VyKCktPnN0
b3BDaGVjaygpOworICAgICAgICBwb2xpY3lDaGVja2VyKCktPnNldExvYWRUeXBlKG5ld0xvYWRU
eXBlKTsKKyAgICAgICAgcG9saWN5Q2hlY2tlcigpLT5jaGVja05hdmlnYXRpb25Qb2xpY3kocmVx
dWVzdCwgb2xkRG9jdW1lbnRMb2FkZXIuZ2V0KCksIGZvcm1TdGF0ZS5yZWxlYXNlKCksCiAgICAg
ICAgICAgICBjYWxsQ29udGludWVGcmFnbWVudFNjcm9sbEFmdGVyTmF2aWdhdGlvblBvbGljeSwg
dGhpcyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gbXVzdCBncmFiIHRoaXMgbm93LCBzaW5j
ZSB0aGlzIGxvYWQgbWF5IHN0b3AgdGhlIHByZXZpb3VzIGxvYWQgYW5kIGNsZWFyIHRoaXMgZmxh
ZwpAQCAtMjA0Miw3ICsyMDQxLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lLAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgY2hlY2tOZXdXaW5kb3dQb2xpY3koTmF2aWdhdGlvbkFjdGlv
bihyZXF1ZXN0LnVybCgpLCBOYXZpZ2F0aW9uVHlwZU90aGVyKSwgcmVxdWVzdCwgMCwgZnJhbWVO
YW1lKTsKKyAgICBwb2xpY3lDaGVja2VyKCktPmNoZWNrTmV3V2luZG93UG9saWN5KE5hdmlnYXRp
b25BY3Rpb24ocmVxdWVzdC51cmwoKSwgTmF2aWdhdGlvblR5cGVPdGhlciksIEZyYW1lTG9hZGVy
OjpjYWxsQ29udGludWVMb2FkQWZ0ZXJOZXdXaW5kb3dQb2xpY3ksIHJlcXVlc3QsIDAsIGZyYW1l
TmFtZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRXaXRoTmF2aWdhdGlvbkFjdGlvbihj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIGFj
dGlvbiwgYm9vbCBsb2NrSGlzdG9yeSwgRnJhbWVMb2FkVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEZv
cm1TdGF0ZT4gZm9ybVN0YXRlKQpAQCAtMjEwMCwzMCArMjA5OSwzMCBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpsb2FkV2l0aERvY3VtZW50TG9hZGVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIEZyYW1l
TG9hZFR5cGUgdAogICAgIGlmIChtX3VubG9hZEV2ZW50QmVpbmdEaXNwYXRjaGVkKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3BvbGljeUxvYWRUeXBlID0gdHlwZTsKKyAgICBwb2xpY3lDaGVj
a2VyKCktPnNldExvYWRUeXBlKHR5cGUpOwogICAgIFJlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0
ZSA9IHBycEZvcm1TdGF0ZTsKICAgICBib29sIGlzRm9ybVN1Ym1pc3Npb24gPSBmb3JtU3RhdGU7
CiAKICAgICBjb25zdCBLVVJMJiBuZXdVUkwgPSBsb2FkZXItPnJlcXVlc3QoKS51cmwoKTsKIAot
ICAgIGlmIChzaG91bGRTY3JvbGxUb0FuY2hvcihpc0Zvcm1TdWJtaXNzaW9uLCBtX3BvbGljeUxv
YWRUeXBlLCBuZXdVUkwpKSB7CisgICAgaWYgKHNob3VsZFNjcm9sbFRvQW5jaG9yKGlzRm9ybVN1
Ym1pc3Npb24sIHBvbGljeUNoZWNrZXIoKS0+bG9hZFR5cGUoKSwgbmV3VVJMKSkgewogICAgICAg
ICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IG9sZERvY3VtZW50TG9hZGVyID0gbV9kb2N1bWVudExv
YWRlcjsKLSAgICAgICAgTmF2aWdhdGlvbkFjdGlvbiBhY3Rpb24obmV3VVJMLCBtX3BvbGljeUxv
YWRUeXBlLCBpc0Zvcm1TdWJtaXNzaW9uKTsKKyAgICAgICAgTmF2aWdhdGlvbkFjdGlvbiBhY3Rp
b24obmV3VVJMLCBwb2xpY3lDaGVja2VyKCktPmxvYWRUeXBlKCksIGlzRm9ybVN1Ym1pc3Npb24p
OwogCiAgICAgICAgIG9sZERvY3VtZW50TG9hZGVyLT5zZXRUcmlnZ2VyaW5nQWN0aW9uKGFjdGlv
bik7Ci0gICAgICAgIHN0b3BQb2xpY3lDaGVjaygpOwotICAgICAgICBjaGVja05hdmlnYXRpb25Q
b2xpY3kobG9hZGVyLT5yZXF1ZXN0KCksIG9sZERvY3VtZW50TG9hZGVyLmdldCgpLCBmb3JtU3Rh
dGUsCisgICAgICAgIHBvbGljeUNoZWNrZXIoKS0+c3RvcENoZWNrKCk7CisgICAgICAgIHBvbGlj
eUNoZWNrZXIoKS0+Y2hlY2tOYXZpZ2F0aW9uUG9saWN5KGxvYWRlci0+cmVxdWVzdCgpLCBvbGRE
b2N1bWVudExvYWRlci5nZXQoKSwgZm9ybVN0YXRlLAogICAgICAgICAgICAgY2FsbENvbnRpbnVl
RnJhZ21lbnRTY3JvbGxBZnRlck5hdmlnYXRpb25Qb2xpY3ksIHRoaXMpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChGcmFtZSogcGFyZW50ID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkK
ICAgICAgICAgICAgIGxvYWRlci0+c2V0T3ZlcnJpZGVFbmNvZGluZyhwYXJlbnQtPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpLT5vdmVycmlkZUVuY29kaW5nKCkpOwogCi0gICAgICAgIHN0b3BQ
b2xpY3lDaGVjaygpOworICAgICAgICBwb2xpY3lDaGVja2VyKCktPnN0b3BDaGVjaygpOwogICAg
ICAgICBzZXRQb2xpY3lEb2N1bWVudExvYWRlcihsb2FkZXIpOwogICAgICAgICBpZiAobG9hZGVy
LT50cmlnZ2VyaW5nQWN0aW9uKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgbG9hZGVyLT5zZXRU
cmlnZ2VyaW5nQWN0aW9uKE5hdmlnYXRpb25BY3Rpb24obmV3VVJMLCBtX3BvbGljeUxvYWRUeXBl
LCBpc0Zvcm1TdWJtaXNzaW9uKSk7CisgICAgICAgICAgICBsb2FkZXItPnNldFRyaWdnZXJpbmdB
Y3Rpb24oTmF2aWdhdGlvbkFjdGlvbihuZXdVUkwsIHBvbGljeUNoZWNrZXIoKS0+bG9hZFR5cGUo
KSwgaXNGb3JtU3VibWlzc2lvbikpOwogCi0gICAgICAgIGNoZWNrTmF2aWdhdGlvblBvbGljeShs
b2FkZXItPnJlcXVlc3QoKSwgbG9hZGVyLCBmb3JtU3RhdGUsCisgICAgICAgIHBvbGljeUNoZWNr
ZXIoKS0+Y2hlY2tOYXZpZ2F0aW9uUG9saWN5KGxvYWRlci0+cmVxdWVzdCgpLCBsb2FkZXIsIGZv
cm1TdGF0ZSwKICAgICAgICAgICAgIGNhbGxDb250aW51ZUxvYWRBZnRlck5hdmlnYXRpb25Qb2xp
Y3ksIHRoaXMpOwogICAgIH0KIH0KQEAgLTIxNjQsMTYgKzIxNjMsMTYgQEAgYm9vbCBGcmFtZUxv
YWRlcjo6d2lsbExvYWRNZWRpYUVsZW1lbnRVUkwoS1VSTCYgdXJsKQogICAgIHJldHVybiBlcnJv
ci5pc051bGwoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6aGFuZGxlVW5pbXBsZW1lbnRhYmxl
UG9saWN5KGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQordm9pZCBQb2xpY3lDaGVja2VyOjpo
YW5kbGVVbmltcGxlbWVudGFibGVQb2xpY3koY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7
CiAgICAgbV9kZWxlZ2F0ZUlzSGFuZGxpbmdVbmltcGxlbWVudGFibGVQb2xpY3kgPSB0cnVlOwot
ICAgIG1fY2xpZW50LT5kaXNwYXRjaFVuYWJsZVRvSW1wbGVtZW50UG9saWN5KGVycm9yKTsKKyAg
ICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQ
b2xpY3koZXJyb3IpOwogICAgIG1fZGVsZWdhdGVJc0hhbmRsaW5nVW5pbXBsZW1lbnRhYmxlUG9s
aWN5ID0gZmFsc2U7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmNhbm5vdFNob3dNSU1FVHlwZShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3ZvaWQgUG9saWN5Q2hlY2tlcjo6Y2Fu
bm90U2hvd01JTUVUeXBlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAg
IGhhbmRsZVVuaW1wbGVtZW50YWJsZVBvbGljeShtX2NsaWVudC0+Y2Fubm90U2hvd01JTUVUeXBl
RXJyb3IocmVzcG9uc2UpKTsKKyAgICBoYW5kbGVVbmltcGxlbWVudGFibGVQb2xpY3kobV9mcmFt
ZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jYW5ub3RTaG93TUlNRVR5cGVFcnJvcihyZXNwb25zZSkp
OwogfQogCiBSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyOjppbnRlcnJ1cHRpb25Gb3JQb2xpY3lD
aGFuZ2VFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCkBAIC0yMTgxLDMzICsy
MTgwLDI0IEBAIFJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXI6OmludGVycnVwdGlvbkZvclBvbGlj
eUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzCiAgICAgcmV0dXJuIG1fY2xpZW50LT5p
bnRlcnJ1cHRGb3JQb2xpY3lDaGFuZ2VFcnJvcihyZXF1ZXN0KTsKIH0KIAotdm9pZCBGcmFtZUxv
YWRlcjo6Y2hlY2tOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVx
dWVzdCwgTmF2aWdhdGlvblBvbGljeURlY2lzaW9uRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGFy
Z3VtZW50KQorUG9saWN5Q2hlY2tlcjo6UG9saWN5Q2hlY2tlcihGcmFtZSogZnJhbWUpCisgICAg
OiBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9kZWxlZ2F0ZUlzRGVjaWRpbmdOYXZpZ2F0aW9uUG9s
aWN5KGZhbHNlKQorICAgICwgbV9kZWxlZ2F0ZUlzSGFuZGxpbmdVbmltcGxlbWVudGFibGVQb2xp
Y3koZmFsc2UpCisgICAgLCBtX2xvYWRUeXBlKEZyYW1lTG9hZFR5cGVTdGFuZGFyZCkKIHsKLSAg
ICBjaGVja05hdmlnYXRpb25Qb2xpY3kobmV3UmVxdWVzdCwgYWN0aXZlRG9jdW1lbnRMb2FkZXIo
KSwgMCwgZnVuY3Rpb24sIGFyZ3VtZW50KTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6Y2hlY2tD
b250ZW50UG9saWN5KGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIENvbnRlbnRQb2xpY3lEZWNpc2lv
bkZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCkKK3ZvaWQgUG9saWN5Q2hlY2tlcjo6
Y2hlY2tOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwg
TmF2aWdhdGlvblBvbGljeURlY2lzaW9uRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50
KQogewotICAgIEFTU0VSVChhY3RpdmVEb2N1bWVudExvYWRlcigpKTsKLSAgICAKLSAgICAvLyBB
bHdheXMgc2hvdyBjb250ZW50IHdpdGggdmFsaWQgc3Vic3RpdHV0ZSBkYXRhLgotICAgIGlmIChh
Y3RpdmVEb2N1bWVudExvYWRlcigpLT5zdWJzdGl0dXRlRGF0YSgpLmlzVmFsaWQoKSkgewotICAg
ICAgICBmdW5jdGlvbihhcmd1bWVudCwgUG9saWN5VXNlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotI2lmIEVOQUJMRShGVFBESVIpCi0gICAgLy8gUmVzcGVjdCB0aGUgaGlkZGVuIEZUUCBE
aXJlY3RvcnkgTGlzdGluZyBwcmVmIHNvIGl0IGNhbiBiZSB0ZXN0ZWQgZXZlbiBpZiB0aGUgcG9s
aWN5IGRlbGVnYXRlIG1pZ2h0IG90aGVyd2lzZSBkaXNhbGxvdyBpdAotICAgIFNldHRpbmdzKiBz
ZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7Ci0gICAgaWYgKHNldHRpbmdzICYmIHNldHRp
bmdzLT5mb3JjZUZUUERpcmVjdG9yeUxpc3RpbmdzKCkgJiYgTUlNRVR5cGUgPT0gImFwcGxpY2F0
aW9uL3gtZnRwLWRpcmVjdG9yeSIpIHsKLSAgICAgICAgZnVuY3Rpb24oYXJndW1lbnQsIFBvbGlj
eVVzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKKyAgICBjaGVja05hdmlnYXRp
b25Qb2xpY3kobmV3UmVxdWVzdCwgbV9mcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9h
ZGVyKCksIDAsIGZ1bmN0aW9uLCBhcmd1bWVudCk7Cit9CiAKK3ZvaWQgUG9saWN5Q2hlY2tlcjo6
Y2hlY2tDb250ZW50UG9saWN5KGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIENvbnRlbnRQb2xpY3lE
ZWNpc2lvbkZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCkKK3sKICAgICBtX3BvbGlj
eUNoZWNrLnNldChmdW5jdGlvbiwgYXJndW1lbnQpOwotICAgIG1fY2xpZW50LT5kaXNwYXRjaERl
Y2lkZVBvbGljeUZvck1JTUVUeXBlKCZGcmFtZUxvYWRlcjo6Y29udGludWVBZnRlckNvbnRlbnRQ
b2xpY3ksCi0gICAgICAgIE1JTUVUeXBlLCBhY3RpdmVEb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0
KCkpOworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hEZWNpZGVQb2xp
Y3lGb3JNSU1FVHlwZSgmUG9saWN5Q2hlY2tlcjo6Y29udGludWVBZnRlckNvbnRlbnRQb2xpY3ks
CisgICAgICAgIE1JTUVUeXBlLCBtX2ZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2Fk
ZXIoKS0+cmVxdWVzdCgpKTsKIH0KIAogYm9vbCBGcmFtZUxvYWRlcjo6c2hvdWxkUmVsb2FkVG9I
YW5kbGVVbnJlYWNoYWJsZVVSTChEb2N1bWVudExvYWRlciogZG9jTG9hZGVyKQpAQCAtMjIxNyw3
ICsyMjA3LDcgQEAgYm9vbCBGcmFtZUxvYWRlcjo6c2hvdWxkUmVsb2FkVG9IYW5kbGVVbnJlYWNo
YWJsZVVSTChEb2N1bWVudExvYWRlciogZG9jTG9hZGVyKQogICAgIGlmICh1bnJlYWNoYWJsZVVS
TC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghaXNCYWNrRm9y
d2FyZExvYWRUeXBlKG1fcG9saWN5TG9hZFR5cGUpKQorICAgIGlmICghaXNCYWNrRm9yd2FyZExv
YWRUeXBlKHBvbGljeUNoZWNrZXIoKS0+bG9hZFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIC8vIFdlIG9ubHkgdHJlYXQgdW5yZWFjaGFibGVVUkxzIHNwZWNpYWxseSBkdXJp
bmcgdGhlIGRlbGVnYXRlIGNhbGxiYWNrcwpAQCAtMjIyNiw3ICsyMjE2LDcgQEAgYm9vbCBGcmFt
ZUxvYWRlcjo6c2hvdWxkUmVsb2FkVG9IYW5kbGVVbnJlYWNoYWJsZVVSTChEb2N1bWVudExvYWRl
ciogZG9jTG9hZGVyKQogICAgIC8vIGNhc2UgaGFuZGxlcyBtYWxmb3JtZWQgVVJMcyBhbmQgdW5r
bm93biBzY2hlbWVzLiBMb2FkaW5nIGFsdGVybmF0ZSBjb250ZW50CiAgICAgLy8gYXQgb3RoZXIg
dGltZXMgYmVoYXZlcyBsaWtlIGEgc3RhbmRhcmQgbG9hZC4KICAgICBEb2N1bWVudExvYWRlciog
Y29tcGFyZURvY3VtZW50TG9hZGVyID0gMDsKLSAgICBpZiAobV9kZWxlZ2F0ZUlzRGVjaWRpbmdO
YXZpZ2F0aW9uUG9saWN5IHx8IG1fZGVsZWdhdGVJc0hhbmRsaW5nVW5pbXBsZW1lbnRhYmxlUG9s
aWN5KQorICAgIGlmIChwb2xpY3lDaGVja2VyKCktPmRlbGVnYXRlSXNEZWNpZGluZ05hdmlnYXRp
b25wb2xpY3lDaGVja2VyKCkgfHwgcG9saWN5Q2hlY2tlcigpLT5kZWxlZ2F0ZUlzSGFuZGxpbmdV
bmltcGxlbWVudGFibGVQb2xpY3koKSkKICAgICAgICAgY29tcGFyZURvY3VtZW50TG9hZGVyID0g
bV9wb2xpY3lEb2N1bWVudExvYWRlci5nZXQoKTsKICAgICBlbHNlIGlmIChtX2RlbGVnYXRlSXNI
YW5kbGluZ1Byb3Zpc2lvbmFsTG9hZEVycm9yKQogICAgICAgICBjb21wYXJlRG9jdW1lbnRMb2Fk
ZXIgPSBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIuZ2V0KCk7CkBAIC0yMzgxLDcgKzIzNzEs
NyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wQWxsTG9hZGVycyhEYXRhYmFzZVBvbGljeSBkYXRh
YmFzZVBvbGljeSkKIAogICAgIG1faW5TdG9wQWxsTG9hZGVycyA9IHRydWU7CiAKLSAgICBzdG9w
UG9saWN5Q2hlY2soKTsKKyAgICBwb2xpY3lDaGVja2VyKCktPnN0b3BDaGVjaygpOwogCiAgICAg
c3RvcExvYWRpbmdTdWJmcmFtZXMoKTsKICAgICBpZiAobV9wcm92aXNpb25hbERvY3VtZW50TG9h
ZGVyKQpAQCAtMjg2MSw5ICsyODUxLDkgQEAgU3RyaW5nIEZyYW1lTG9hZGVyOjpnZW5lcmF0ZWRN
SU1FVHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVtZSkKICAgICByZXR1cm4g
bV9jbGllbnQtPmdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKFVSTFNjaGVtZSk7CiB9CiAK
LXZvaWQgRnJhbWVMb2FkZXI6OmNhbmNlbENvbnRlbnRQb2xpY3lDaGVjaygpCit2b2lkIFBvbGlj
eUNoZWNrZXI6OmNhbmNlbENoZWNrKCkKIHsKLSAgICBtX2NsaWVudC0+Y2FuY2VsUG9saWN5Q2hl
Y2soKTsKKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNhbmNlbFBvbGljeUNoZWNr
KCk7CiAgICAgbV9wb2xpY3lDaGVjay5jbGVhcigpOwogfQogCkBAIC0yOTg2LDkgKzI5NzYsOSBA
QCBDYWNoZVBvbGljeSBGcmFtZUxvYWRlcjo6c3VicmVzb3VyY2VDYWNoZVBvbGljeSgpIGNvbnN0
CiAgICAgcmV0dXJuIENhY2hlUG9saWN5VmVyaWZ5OwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpz
dG9wUG9saWN5Q2hlY2soKQordm9pZCBQb2xpY3lDaGVja2VyOjpzdG9wQ2hlY2soKQogewotICAg
IG1fY2xpZW50LT5jYW5jZWxQb2xpY3lDaGVjaygpOworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5j
bGllbnQoKS0+Y2FuY2VsUG9saWN5Q2hlY2soKTsKICAgICBQb2xpY3lDaGVjayBjaGVjayA9IG1f
cG9saWN5Q2hlY2s7CiAgICAgbV9wb2xpY3lDaGVjay5jbGVhcigpOwogICAgIGNoZWNrLmNhbmNl
bCgpOwpAQCAtMzA5MiwxNCArMzA4MiwyMSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja0xvYWRD
b21wbGV0ZUZvclRoaXNGcmFtZSgpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZv
aWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5KFBvbGljeUFjdGlvbiBw
b2xpY3kpCit2b2lkIFBvbGljeUNoZWNrZXI6OmNvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5KFBv
bGljeUFjdGlvbiBwb2xpY3kpCiB7CiAgICAgUG9saWN5Q2hlY2sgY2hlY2sgPSBtX3BvbGljeUNo
ZWNrOwogICAgIG1fcG9saWN5Q2hlY2suY2xlYXIoKTsKICAgICBjaGVjay5jYWxsKHBvbGljeSk7
CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyV2lsbFN1Ym1pdEZvcm0o
UG9saWN5QWN0aW9uKQordm9pZCBQb2xpY3lDaGVja2VyOjpjb250aW51ZUxvYWRBZnRlcldpbGxT
dWJtaXRGb3JtKFBvbGljeUFjdGlvbikKK3sKKyAgICAvLyBTZWUgaGVhZGVyIGZpbGUgZm9yIGFu
IGV4cGxhaW5hdGlvbiBvZiB3aHkgdGhpcyBmdW5jdGlvbgorICAgIC8vIGlzbid0IGxpa2UgdGhl
IG90aGVycy4KKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y29udGludWVMb2FkQWZ0ZXJXaWxsU3Vi
bWl0Rm9ybSgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyOjpjb250aW51ZUxvYWRBZnRlcldpbGxT
dWJtaXRGb3JtKCkKIHsKICAgICBpZiAoIW1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcikKICAg
ICAgICAgcmV0dXJuOwpAQCAtMzM5Niw3ICszMzkzLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9h
ZFBvc3RSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgaW5SZXF1ZXN0LCBjb25zdCBTdHJp
bmcKICAgICAgICAgaWYgKEZyYW1lKiB0YXJnZXRGcmFtZSA9IGZvcm1TdGF0ZSA/IDAgOiBmaW5k
RnJhbWVGb3JOYXZpZ2F0aW9uKGZyYW1lTmFtZSkpCiAgICAgICAgICAgICB0YXJnZXRGcmFtZS0+
bG9hZGVyKCktPmxvYWRXaXRoTmF2aWdhdGlvbkFjdGlvbih3b3JraW5nUmVzb3VyY2VSZXF1ZXN0
LCBhY3Rpb24sIGxvY2tIaXN0b3J5LCBsb2FkVHlwZSwgZm9ybVN0YXRlLnJlbGVhc2UoKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNoZWNrTmV3V2luZG93UG9saWN5KGFjdGlvbiwgd29y
a2luZ1Jlc291cmNlUmVxdWVzdCwgZm9ybVN0YXRlLnJlbGVhc2UoKSwgZnJhbWVOYW1lKTsKKyAg
ICAgICAgICAgIHBvbGljeUNoZWNrZXIoKS0+Y2hlY2tOZXdXaW5kb3dQb2xpY3koYWN0aW9uLCBG
cmFtZUxvYWRlcjo6Y2FsbENvbnRpbnVlTG9hZEFmdGVyTmV3V2luZG93UG9saWN5LCB3b3JraW5n
UmVzb3VyY2VSZXF1ZXN0LCBmb3JtU3RhdGUucmVsZWFzZSgpLCBmcmFtZU5hbWUpOwogICAgIH0g
ZWxzZQogICAgICAgICBsb2FkV2l0aE5hdmlnYXRpb25BY3Rpb24od29ya2luZ1Jlc291cmNlUmVx
dWVzdCwgYWN0aW9uLCBsb2NrSGlzdG9yeSwgbG9hZFR5cGUsIGZvcm1TdGF0ZS5yZWxlYXNlKCkp
OyAgICAKIH0KQEAgLTM1MzUsNyArMzUzMiw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNhbGxDb250
aW51ZUZyYWdtZW50U2Nyb2xsQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KHZvaWQqIGFyZ3VtZW50CiAK
IHZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlRnJhZ21lbnRTY3JvbGxBZnRlck5hdmlnYXRpb25Q
b2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNob3VsZENvbnRpbnVl
KQogewotICAgIGJvb2wgaXNSZWRpcmVjdCA9IG1fcXVpY2tSZWRpcmVjdENvbWluZyB8fCBtX3Bv
bGljeUxvYWRUeXBlID09IEZyYW1lTG9hZFR5cGVSZWRpcmVjdFdpdGhMb2NrZWRCYWNrRm9yd2Fy
ZExpc3Q7CisgICAgYm9vbCBpc1JlZGlyZWN0ID0gbV9xdWlja1JlZGlyZWN0Q29taW5nIHx8IHBv
bGljeUNoZWNrZXIoKS0+bG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlUmVkaXJlY3RXaXRoTG9j
a2VkQmFja0ZvcndhcmRMaXN0OwogICAgIG1fcXVpY2tSZWRpcmVjdENvbWluZyA9IGZhbHNlOwog
CiAgICAgaWYgKCFzaG91bGRDb250aW51ZSkKQEAgLTM1OTEsMTYgKzM1ODgsMTUgQEAgYm9vbCBG
cmFtZUxvYWRlcjo6c2hvdWxkU2Nyb2xsVG9BbmNob3IoYm9vbCBpc0Zvcm1TdWJtaXNzaW9uLCBG
cmFtZUxvYWRUeXBlIGxvYWQKICAgICAgICAgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPmlzRnJh
bWVTZXQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6Y2hlY2tOZXdXaW5kb3dQb2xpY3koY29u
c3QgTmF2aWdhdGlvbkFjdGlvbiYgYWN0aW9uLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsCi0gICAgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSwgY29uc3QgU3RyaW5nJiBm
cmFtZU5hbWUpCit2b2lkIFBvbGljeUNoZWNrZXI6OmNoZWNrTmV3V2luZG93UG9saWN5KGNvbnN0
IE5hdmlnYXRpb25BY3Rpb24mIGFjdGlvbiwgTmV3V2luZG93UG9saWN5RGVjaXNpb25GdW5jdGlv
biBmdW5jdGlvbiwKKyAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQ
dHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUsIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lKQogewotICAg
IG1fcG9saWN5Q2hlY2suc2V0KHJlcXVlc3QsIGZvcm1TdGF0ZSwgZnJhbWVOYW1lLAotICAgICAg
ICBjYWxsQ29udGludWVMb2FkQWZ0ZXJOZXdXaW5kb3dQb2xpY3ksIHRoaXMpOwotICAgIG1fY2xp
ZW50LT5kaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbigmRnJhbWVMb2FkZXI6
OmNvbnRpbnVlQWZ0ZXJOZXdXaW5kb3dQb2xpY3ksCisgICAgbV9wb2xpY3lDaGVjay5zZXQocmVx
dWVzdCwgZm9ybVN0YXRlLCBmcmFtZU5hbWUsIGZ1bmN0aW9uLCB0aGlzKTsKKyAgICBtX2ZyYW1l
LT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0
aW9uKCZQb2xpY3lDaGVja2VyOjpjb250aW51ZUFmdGVyTmV3V2luZG93UG9saWN5LAogICAgICAg
ICBhY3Rpb24sIHJlcXVlc3QsIGZvcm1TdGF0ZSwgZnJhbWVOYW1lKTsKIH0KIAotdm9pZCBGcmFt
ZUxvYWRlcjo6Y29udGludWVBZnRlck5ld1dpbmRvd1BvbGljeShQb2xpY3lBY3Rpb24gcG9saWN5
KQordm9pZCBQb2xpY3lDaGVja2VyOjpjb250aW51ZUFmdGVyTmV3V2luZG93UG9saWN5KFBvbGlj
eUFjdGlvbiBwb2xpY3kpCiB7CiAgICAgUG9saWN5Q2hlY2sgY2hlY2sgPSBtX3BvbGljeUNoZWNr
OwogICAgIG1fcG9saWN5Q2hlY2suY2xlYXIoKTsKQEAgLTM2MTAsNyArMzYwNiw3IEBAIHZvaWQg
RnJhbWVMb2FkZXI6OmNvbnRpbnVlQWZ0ZXJOZXdXaW5kb3dQb2xpY3koUG9saWN5QWN0aW9uIHBv
bGljeSkKICAgICAgICAgICAgIGNoZWNrLmNsZWFyUmVxdWVzdCgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgUG9saWN5RG93bmxvYWQ6Ci0gICAgICAgICAgICBtX2NsaWVudC0+
c3RhcnREb3dubG9hZChjaGVjay5yZXF1ZXN0KCkpOworICAgICAgICAgICAgbV9mcmFtZS0+bG9h
ZGVyKCktPmNsaWVudCgpLT5zdGFydERvd25sb2FkKGNoZWNrLnJlcXVlc3QoKSk7CiAgICAgICAg
ICAgICBjaGVjay5jbGVhclJlcXVlc3QoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFBvbGljeVVzZToKQEAgLTM2MjAsNyArMzYxNiw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNv
bnRpbnVlQWZ0ZXJOZXdXaW5kb3dQb2xpY3koUG9saWN5QWN0aW9uIHBvbGljeSkKICAgICBjaGVj
ay5jYWxsKHBvbGljeSA9PSBQb2xpY3lVc2UpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpjaGVj
a05hdmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBEb2N1bWVu
dExvYWRlciogbG9hZGVyLAordm9pZCBQb2xpY3lDaGVja2VyOjpjaGVja05hdmlnYXRpb25Qb2xp
Y3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBEb2N1bWVudExvYWRlciogbG9hZGVy
LAogICAgIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUsIE5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbkZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmd1bWVudCkKIHsKICAgICBOYXZpZ2F0
aW9uQWN0aW9uIGFjdGlvbiA9IGxvYWRlci0+dHJpZ2dlcmluZ0FjdGlvbigpOwpAQCAtMzYyOCw3
ICszNjI0LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2hlY2tOYXZpZ2F0aW9uUG9saWN5KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgRG9jdW1lbnQKICAgICAgICAgYWN0aW9uID0gTmF2
aWdhdGlvbkFjdGlvbihyZXF1ZXN0LnVybCgpLCBOYXZpZ2F0aW9uVHlwZU90aGVyKTsKICAgICAg
ICAgbG9hZGVyLT5zZXRUcmlnZ2VyaW5nQWN0aW9uKGFjdGlvbik7CiAgICAgfQotICAgICAgICAK
KwogICAgIC8vIERvbid0IGFzayBtb3JlIHRoYW4gb25jZSBmb3IgdGhlIHNhbWUgcmVxdWVzdCBv
ciBpZiB3ZSBhcmUgbG9hZGluZyBhbiBlbXB0eSBVUkwuCiAgICAgLy8gVGhpcyBhdm9pZHMgY29u
ZnVzaW9uIG9uIHRoZSBwYXJ0IG9mIHRoZSBjbGllbnQuCiAgICAgaWYgKGVxdWFsSWdub3JpbmdI
ZWFkZXJGaWVsZHMocmVxdWVzdCwgbG9hZGVyLT5sYXN0Q2hlY2tlZFJlcXVlc3QoKSkgfHwgKCFy
ZXF1ZXN0LmlzTnVsbCgpICYmIHJlcXVlc3QudXJsKCkuaXNFbXB0eSgpKSkgewpAQCAtMzY0MCw4
ICszNjM2LDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2hlY2tOYXZpZ2F0aW9uUG9saWN5KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgRG9jdW1lbnQKICAgICAvLyBXZSBhcmUgYWx3YXlz
IHdpbGxpbmcgdG8gc2hvdyBhbHRlcm5hdGUgY29udGVudCBmb3IgdW5yZWFjaGFibGUgVVJMczsK
ICAgICAvLyB0cmVhdCBpdCBsaWtlIGEgcmVsb2FkIHNvIGl0IG1haW50YWlucyB0aGUgcmlnaHQg
c3RhdGUgZm9yIGIvZiBsaXN0LgogICAgIGlmIChsb2FkZXItPnN1YnN0aXR1dGVEYXRhKCkuaXNW
YWxpZCgpICYmICFsb2FkZXItPnN1YnN0aXR1dGVEYXRhKCkuZmFpbGluZ1VSTCgpLmlzRW1wdHko
KSkgewotICAgICAgICBpZiAoaXNCYWNrRm9yd2FyZExvYWRUeXBlKG1fcG9saWN5TG9hZFR5cGUp
KQotICAgICAgICAgICAgbV9wb2xpY3lMb2FkVHlwZSA9IEZyYW1lTG9hZFR5cGVSZWxvYWQ7Cisg
ICAgICAgIGlmIChpc0JhY2tGb3J3YXJkTG9hZFR5cGUobV9sb2FkVHlwZSkpCisgICAgICAgICAg
ICBtX2xvYWRUeXBlID0gRnJhbWVMb2FkVHlwZVJlbG9hZDsKICAgICAgICAgZnVuY3Rpb24oYXJn
dW1lbnQsIHJlcXVlc3QsIDAsIHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzY1
MSwzMSArMzY0NywzMSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja05hdmlnYXRpb25Qb2xpY3ko
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBEb2N1bWVudAogICAgIG1fcG9saWN5Q2hl
Y2suc2V0KHJlcXVlc3QsIGZvcm1TdGF0ZS5nZXQoKSwgZnVuY3Rpb24sIGFyZ3VtZW50KTsKIAog
ICAgIG1fZGVsZWdhdGVJc0RlY2lkaW5nTmF2aWdhdGlvblBvbGljeSA9IHRydWU7Ci0gICAgbV9j
bGllbnQtPmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbigmRnJhbWVMb2Fk
ZXI6OmNvbnRpbnVlQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5LAorICAgIG1fZnJhbWUtPmxvYWRlcigp
LT5jbGllbnQoKS0+ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKCZQb2xp
Y3lDaGVja2VyOjpjb250aW51ZUFmdGVyTmF2aWdhdGlvblBvbGljeSwKICAgICAgICAgYWN0aW9u
LCByZXF1ZXN0LCBmb3JtU3RhdGUpOwogICAgIG1fZGVsZWdhdGVJc0RlY2lkaW5nTmF2aWdhdGlv
blBvbGljeSA9IGZhbHNlOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpjb250aW51ZUFmdGVyTmF2
aWdhdGlvblBvbGljeShQb2xpY3lBY3Rpb24gcG9saWN5KQordm9pZCBQb2xpY3lDaGVja2VyOjpj
b250aW51ZUFmdGVyTmF2aWdhdGlvblBvbGljeShQb2xpY3lBY3Rpb24gcG9saWN5KQogewogICAg
IFBvbGljeUNoZWNrIGNoZWNrID0gbV9wb2xpY3lDaGVjazsKICAgICBtX3BvbGljeUNoZWNrLmNs
ZWFyKCk7CiAKICAgICBib29sIHNob3VsZENvbnRpbnVlID0gcG9saWN5ID09IFBvbGljeVVzZTsK
LSAgICAKKwogICAgIHN3aXRjaCAocG9saWN5KSB7CiAgICAgICAgIGNhc2UgUG9saWN5SWdub3Jl
OgogICAgICAgICAgICAgY2hlY2suY2xlYXJSZXF1ZXN0KCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBQb2xpY3lEb3dubG9hZDoKLSAgICAgICAgICAgIG1fY2xpZW50LT5zdGFy
dERvd25sb2FkKGNoZWNrLnJlcXVlc3QoKSk7CisgICAgICAgICAgICBtX2ZyYW1lLT5sb2FkZXIo
KS0+Y2xpZW50KCktPnN0YXJ0RG93bmxvYWQoY2hlY2sucmVxdWVzdCgpKTsKICAgICAgICAgICAg
IGNoZWNrLmNsZWFyUmVxdWVzdCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
UG9saWN5VXNlOiB7CiAgICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChjaGVjay5y
ZXF1ZXN0KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY2xpZW50LT5jYW5I
YW5kbGVSZXF1ZXN0KHJlcXVlc3QpKSB7Ci0gICAgICAgICAgICAgICAgaGFuZGxlVW5pbXBsZW1l
bnRhYmxlUG9saWN5KG1fY2xpZW50LT5jYW5ub3RTaG93VVJMRXJyb3IoY2hlY2sucmVxdWVzdCgp
KSk7CisKKyAgICAgICAgICAgIGlmICghbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jYW5I
YW5kbGVSZXF1ZXN0KHJlcXVlc3QpKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlVW5pbXBsZW1l
bnRhYmxlUG9saWN5KG1fZnJhbWUtPmxvYWRlcigpLT5jYW5ub3RTaG93VVJMRXJyb3IoY2hlY2su
cmVxdWVzdCgpKSk7CiAgICAgICAgICAgICAgICAgY2hlY2suY2xlYXJSZXF1ZXN0KCk7CiAgICAg
ICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTM3
MjAsNyArMzcxNiw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdh
dGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzCiAgICAgICAgIC8vIElmIHRo
ZSBuYXZpZ2F0aW9uIHJlcXVlc3QgY2FtZSBmcm9tIHRoZSBiYWNrL2ZvcndhcmQgbWVudSwgYW5k
IHdlIHB1bnQgb24gaXQsIHdlIGhhdmUgdGhlIAogICAgICAgICAvLyBwcm9ibGVtIHRoYXQgd2Ug
aGF2ZSBvcHRpbWlzdGljYWxseSBtb3ZlZCB0aGUgYi9mIGN1cnNvciBhbHJlYWR5LCBzbyBtb3Zl
IGl0IGJhY2suICBGb3Igc2FuaXR5LCAKICAgICAgICAgLy8gd2Ugb25seSBkbyB0aGlzIHdoZW4g
cHVudGluZyBhIG5hdmlnYXRpb24gZm9yIHRoZSB0YXJnZXQgZnJhbWUgb3IgdG9wLWxldmVsIGZy
YW1lLiAgCi0gICAgICAgIGlmICgoaXNUYXJnZXRJdGVtIHx8IGlzTG9hZGluZ01haW5GcmFtZSgp
KSAmJiBpc0JhY2tGb3J3YXJkTG9hZFR5cGUobV9wb2xpY3lMb2FkVHlwZSkpCisgICAgICAgIGlm
ICgoaXNUYXJnZXRJdGVtIHx8IGlzTG9hZGluZ01haW5GcmFtZSgpKSAmJiBpc0JhY2tGb3J3YXJk
TG9hZFR5cGUocG9saWN5Q2hlY2tlcigpLT5sb2FkVHlwZSgpKSkKICAgICAgICAgICAgIGlmIChQ
YWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKSB7CiAgICAgICAgICAgICAgICAgRnJhbWUqIG1h
aW5GcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOwogICAgICAgICAgICAgICAgIGlmIChIaXN0b3J5
SXRlbSogcmVzZXRJdGVtID0gbWFpbkZyYW1lLT5sb2FkZXIoKS0+bV9jdXJyZW50SGlzdG9yeUl0
ZW0uZ2V0KCkpIHsKQEAgLTM3MzIsNyArMzcyOCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbnRp
bnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNz
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBGcmFtZUxvYWRUeXBlIHR5cGUgPSBtX3Bv
bGljeUxvYWRUeXBlOworICAgIEZyYW1lTG9hZFR5cGUgdHlwZSA9IHBvbGljeUNoZWNrZXIoKS0+
bG9hZFR5cGUoKTsKICAgICBzdG9wQWxsTG9hZGVycygpOwogICAgIAogICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS82MjUwODU2PiAtIEluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyBvbiBwYWdlcyB3aXRo
IG11bHRpcGxlIGZyYW1lcywgc3RvcEFsbExvYWRlcnMoKQpAQCAtMzc1Nyw3ICszNzUzLDcgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6Y29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIFBhc3MKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGZvcm1T
dGF0ZSkKLSAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0oJkZyYW1lTG9h
ZGVyOjpjb250aW51ZUxvYWRBZnRlcldpbGxTdWJtaXRGb3JtLCBmb3JtU3RhdGUpOworICAgICAg
ICBtX2NsaWVudC0+ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybSgmUG9saWN5Q2hlY2tlcjo6Y29udGlu
dWVMb2FkQWZ0ZXJXaWxsU3VibWl0Rm9ybSwgZm9ybVN0YXRlKTsKICAgICBlbHNlCiAgICAgICAg
IGNvbnRpbnVlTG9hZEFmdGVyV2lsbFN1Ym1pdEZvcm0oKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmggYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCmlu
ZGV4IGE0M2RmMzUuLjA5M2M2NDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaApAQCAtNzgsNiArNzgsNTMg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgYm9vbCBpc0JhY2tGb3J3YXJkTG9hZFR5cGUo
RnJhbWVMb2FkVHlwZSk7CiAKKyAgICBjbGFzcyBQb2xpY3lDaGVja2VyIDogcHVibGljIE5vbmNv
cHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBvbGljeUNoZWNrZXIoRnJhbWUqKTsKKwor
ICAgICAgICB2b2lkIGNoZWNrTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBEb2N1bWVudExvYWRlciosIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgTmF2aWdhdGlvblBvbGlj
eURlY2lzaW9uRnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50KTsKKyAgICAgICAgdm9pZCBjaGVja05h
dmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgTmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uRnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50KTsKKyAgICAgICAgdm9pZCBjaGVja05ld1dp
bmRvd1BvbGljeShjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgTmV3V2luZG93UG9saWN5RGVjaXNp
b25GdW5jdGlvbiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+
LCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSk7CisgICAgICAgIHZvaWQgY2hlY2tDb250ZW50UG9s
aWN5KGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIENvbnRlbnRQb2xpY3lEZWNpc2lvbkZ1bmN0aW9u
LCB2b2lkKiBhcmd1bWVudCk7CisKKyAgICAgICAgLy8gRklYTUU6IFRoZXNlIGFyZSBkaWZmZXJl
bnQuICBUaGV5IGNvdWxkIHVzZSBiZXR0ZXIgbmFtZXMuCisgICAgICAgIHZvaWQgY2FuY2VsQ2hl
Y2soKTsKKyAgICAgICAgdm9pZCBzdG9wQ2hlY2soKTsKKworICAgICAgICB2b2lkIGNhbm5vdFNo
b3dNSU1FVHlwZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisKKyAgICAgICAgRnJhbWVMb2Fk
VHlwZSBsb2FkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZFR5cGU7IH0KKyAgICAgICAgdm9p
ZCBzZXRMb2FkVHlwZShGcmFtZUxvYWRUeXBlIGxvYWRUeXBlKSB7IG1fbG9hZFR5cGUgPSBsb2Fk
VHlwZTsgfQorCisgICAgICAgIGJvb2wgZGVsZWdhdGVJc0RlY2lkaW5nTmF2aWdhdGlvblBvbGlj
eSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZWdhdGVJc0RlY2lkaW5nTmF2aWdhdGlvblBvbGljeTsg
fQorICAgICAgICBib29sIGRlbGVnYXRlSXNIYW5kbGluZ1VuaW1wbGVtZW50YWJsZVBvbGljeSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGVsZWdhdGVJc0hhbmRsaW5nVW5pbXBsZW1lbnRhYmxlUG9saWN5
OyB9CisKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgYSBjaGVhdC4gIEJhc2lj
YWxseSwgdGhpcyBpcyBqdXN0IGFuIGFzeW5jaHJvbm91YyBjYWxsYmFjaworICAgICAgICAvLyBm
cm9tIHRoZSBGcmFtZUxvYWRlckNsaWVudCwgYnV0IHRoaXMgY2FsbGJhY2sgdXNlcyB0aGUgcG9s
aWN5IHR5cGVzIGFuZCBzbyBoYXMgdG8KKyAgICAgICAgLy8gbGl2ZSBvbiB0aGlzIG9iamVjdC4g
IEluIHRoZSBsb25nIHRlcm0sIHdlIHNob3VsZCBjcmVhdGUgYSB0eXBlIGZvciBub24tcG9saWN5
CisgICAgICAgIC8vIGNhbGxiYWNrcyBmcm9tIHRoZSBGcmFtZUxvYWRlckNsaWVudCBhbmQgcmVt
b3ZlIHRoaXMgdmVzdGlnZS4gIEkganVzdCBkb24ndCBoYXZlCisgICAgICAgIC8vIHRoZSBoZWFy
dCB0byBoYWNrIG9uIGFsbCB0aGUgcGxhdGZvcm1zIHRvIG1ha2UgdGhhdCBoYXBwZW4gcmlnaHQg
bm93LgorICAgICAgICB2b2lkIGNvbnRpbnVlTG9hZEFmdGVyV2lsbFN1Ym1pdEZvcm0oUG9saWN5
QWN0aW9uKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY29udGludWVBZnRlck5hdmln
YXRpb25Qb2xpY3koUG9saWN5QWN0aW9uKTsKKyAgICAgICAgdm9pZCBjb250aW51ZUFmdGVyTmV3
V2luZG93UG9saWN5KFBvbGljeUFjdGlvbik7CisgICAgICAgIHZvaWQgY29udGludWVBZnRlckNv
bnRlbnRQb2xpY3koUG9saWN5QWN0aW9uKTsKKworICAgICAgICB2b2lkIGhhbmRsZVVuaW1wbGVt
ZW50YWJsZVBvbGljeShjb25zdCBSZXNvdXJjZUVycm9yJik7CisKKyAgICAgICAgRnJhbWUqIG1f
ZnJhbWU7CisKKyAgICAgICAgYm9vbCBtX2RlbGVnYXRlSXNEZWNpZGluZ05hdmlnYXRpb25Qb2xp
Y3k7CisgICAgICAgIGJvb2wgbV9kZWxlZ2F0ZUlzSGFuZGxpbmdVbmltcGxlbWVudGFibGVQb2xp
Y3k7CisKKyAgICAgICAgLy8gVGhpcyBpZGVudGlmaWVzIHRoZSB0eXBlIG9mIG5hdmlnYXRpb24g
YWN0aW9uIHdoaWNoIHByb21wdGVkIHRoaXMgbG9hZC4gTm90ZSAKKyAgICAgICAgLy8gdGhhdCBX
ZWJLaXQgY29udmV5cyB0aGlzIHZhbHVlIGFzIHRoZSBXZWJBY3Rpb25OYXZpZ2F0aW9uVHlwZUtl
eSB2YWx1ZQorICAgICAgICAvLyBvbiBuYXZpZ2F0aW9uIGFjdGlvbiBkZWxlZ2F0ZSBjYWxsYmFj
a3MuCisgICAgICAgIEZyYW1lTG9hZFR5cGUgbV9sb2FkVHlwZTsKKyAgICAgICAgUG9saWN5Q2hl
Y2sgbV9wb2xpY3lDaGVjazsKKyAgICB9OworCiAgICAgY2xhc3MgRnJhbWVMb2FkZXIgOiBwdWJs
aWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRnJhbWVMb2FkZXIoRnJhbWUq
LCBGcmFtZUxvYWRlckNsaWVudCopOwpAQCAtODcsNiArMTM0LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0K
IAorICAgICAgICBQb2xpY3lDaGVja2VyKiBwb2xpY3lDaGVja2VyKCkgeyByZXR1cm4gJm1fcG9s
aWN5Q2hlY2tlcjsgfQorCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBjb29sLCBwZW9w
bGUuIFRoZXJlIGFyZSB0b28gbWFueSBkaWZmZXJlbnQgZnVuY3Rpb25zIHRoYXQgYWxsIHN0YXJ0
IGxvYWRzLgogICAgICAgICAvLyBXZSBzaG91bGQgYWltIHRvIGNvbnNvbGlkYXRlIHRoZXNlIGlu
dG8gYSBzbWFsbGVyIHNldCBvZiBmdW5jdGlvbnMsIGFuZCB0cnkgdG8gcmV1c2UgbW9yZSBvZgog
ICAgICAgICAvLyB0aGUgbG9naWMgYnkgZXh0cmFjdGluZyBjb21tb24gY29kZSBwYXRocy4KQEAg
LTE2Miw4ICsyMTEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlc291cmNlRXJy
b3IgZmlsZURvZXNOb3RFeGlzdEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBjb25zdDsK
ICAgICAgICAgUmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JikgY29uc3Q7CiAgICAgICAgIFJlc291cmNlRXJyb3IgY2Fubm90U2hvd1VSTEVycm9yKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgY2Fubm90U2hvd01JTUVU
eXBlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgUmVzb3VyY2VFcnJvciBpbnRl
cnJ1cHRpb25Gb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIAog
ICAgICAgICBib29sIGlzSG9zdGVkQnlPYmplY3RFbGVtZW50KCkgY29uc3Q7CkBAIC0xNzIsMTAg
KzIxOSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCByZXByZXNlbnRhdGlv
bkV4aXN0c0ZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVtZSk7CiAgICAgICAgIFN0
cmluZyBnZW5lcmF0ZWRNSU1FVHlwZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVt
ZSk7CiAKLSAgICAgICAgdm9pZCBjaGVja05hdmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgTmF2aWdhdGlvblBvbGljeURlY2lzaW9uRnVuY3Rpb24gZnVuY3Rpb24sIHZvaWQq
IGFyZ3VtZW50KTsKLSAgICAgICAgdm9pZCBjaGVja0NvbnRlbnRQb2xpY3koY29uc3QgU3RyaW5n
JiBNSU1FVHlwZSwgQ29udGVudFBvbGljeURlY2lzaW9uRnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50
KTsKLSAgICAgICAgdm9pZCBjYW5jZWxDb250ZW50UG9saWN5Q2hlY2soKTsKLQogICAgICAgICB2
b2lkIHJlbG9hZChib29sIGVuZFRvRW5kUmVsb2FkID0gZmFsc2UpOwogICAgICAgICB2b2lkIHJl
bG9hZFdpdGhPdmVycmlkZUVuY29kaW5nKGNvbnN0IFN0cmluZyYgb3ZlcnJpZGVFbmNvZGluZyk7
CiAKQEAgLTMzMyw2ICszNzYsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IGNsaWVudFJlZGlyZWN0ZWQoY29uc3QgS1VSTCYsIGRvdWJsZSBkZWxheSwgZG91YmxlIGZpcmVE
YXRlLCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpOwogICAgICAgICB2b2lkIGNsaWVudFJlZGly
ZWN0Q2FuY2VsbGVkT3JGaW5pc2hlZChib29sIGNhbmNlbFdpdGhMb2FkSW5Qcm9ncmVzcyk7CiAK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgcHVibGljIGJlY2F1c2UgdGhpcyBhc3luY2hyb25v
dXMgY2FsbGJhY2sgZnJvbSB0aGUgRnJhbWVMb2FkZXJDbGllbnQKKyAgICAgICAgLy8gdXNlcyB0
aGUgcG9saWN5IG1hY2hpbmVyeSAoYW5kIHRoZXJlZm9yZSBpcyBjYWxsZWQgdmlhIHRoZSBQb2xp
Y3lDaGVja2VyKS4gIE9uY2Ugd2UKKyAgICAgICAgLy8gaW50cm9kdWNlIGEgcHJvcGVyIGNhbGxi
YWNrIHR5cGUgZm9yIHRoaXMgZnVuY3Rpb24sIHdlIHNob3VsZCBtYWtlIGl0IHByaXZhdGUgYWdh
aW4uCisgICAgICAgIHZvaWQgY29udGludWVMb2FkQWZ0ZXJXaWxsU3VibWl0Rm9ybSgpOworCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY3JlYXRlSGlzdG9y
eUl0ZW0oYm9vbCB1c2VPcmlnaW5hbCk7CiAgICAgICAgIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+
IGNyZWF0ZUhpc3RvcnlJdGVtVHJlZShGcmFtZSogdGFyZ2V0RnJhbWUsIGJvb2wgY2xpcEF0VGFy
Z2V0KTsKQEAgLTM5MSwyNSArNDM5LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICB2b2lkIHNldExvYWRUeXBlKEZyYW1lTG9hZFR5cGUpOwogCi0gICAgICAgIHZvaWQgY2hlY2tO
YXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIERvY3VtZW50TG9hZGVyKiwg
UGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25GdW5jdGlvbiwg
dm9pZCogYXJndW1lbnQpOwotICAgICAgICB2b2lkIGNoZWNrTmV3V2luZG93UG9saWN5KGNvbnN0
IE5hdmlnYXRpb25BY3Rpb24mLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZv
cm1TdGF0ZT4sIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lKTsKLQotICAgICAgICB2b2lkIGNvbnRp
bnVlQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KFBvbGljeUFjdGlvbik7Ci0gICAgICAgIHZvaWQgY29u
dGludWVBZnRlck5ld1dpbmRvd1BvbGljeShQb2xpY3lBY3Rpb24pOwotICAgICAgICB2b2lkIGNv
bnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5KFBvbGljeUFjdGlvbik7Ci0gICAgICAgIHZvaWQgY29u
dGludWVMb2FkQWZ0ZXJXaWxsU3VibWl0Rm9ybShQb2xpY3lBY3Rpb24gPSBQb2xpY3lVc2UpOwot
CiAgICAgICAgIHN0YXRpYyB2b2lkIGNhbGxDb250aW51ZUxvYWRBZnRlck5hdmlnYXRpb25Qb2xp
Y3kodm9pZCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwg
Ym9vbCBzaG91bGRDb250aW51ZSk7Ci0gICAgICAgIHZvaWQgY29udGludWVMb2FkQWZ0ZXJOYXZp
Z2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRl
PiwgYm9vbCBzaG91bGRDb250aW51ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNhbGxDb250aW51
ZUxvYWRBZnRlck5ld1dpbmRvd1BvbGljeSh2b2lkKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
UGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBzaG91
bGRDb250aW51ZSk7Ci0gICAgICAgIHZvaWQgY29udGludWVMb2FkQWZ0ZXJOZXdXaW5kb3dQb2xp
Y3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBT
dHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBzaG91bGRDb250aW51ZSk7CiAgICAgICAgIHN0YXRpYyB2
b2lkIGNhbGxDb250aW51ZUZyYWdtZW50U2Nyb2xsQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KHZvaWQq
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGJvb2wgc2hv
dWxkQ29udGludWUpOworCisgICAgICAgIHZvaWQgY29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9u
UG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgYm9v
bCBzaG91bGRDb250aW51ZSk7CisgICAgICAgIHZvaWQgY29udGludWVMb2FkQWZ0ZXJOZXdXaW5k
b3dQb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBj
b25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBzaG91bGRDb250aW51ZSk7CiAgICAgICAgIHZv
aWQgY29udGludWVGcmFnbWVudFNjcm9sbEFmdGVyTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBib29sIHNob3VsZENvbnRpbnVlKTsKKwogICAgICAgICBib29sIHNob3Vs
ZFNjcm9sbFRvQW5jaG9yKGJvb2wgaXNGb3JtU3VibWlzc2lvbiwgRnJhbWVMb2FkVHlwZSwgY29u
c3QgS1VSTCYpOwogICAgICAgICB2b2lkIGFkZEhpc3RvcnlJdGVtRm9yRnJhZ21lbnRTY3JvbGwo
KTsKIAotICAgICAgICB2b2lkIHN0b3BQb2xpY3lDaGVjaygpOwotCiAgICAgICAgIHZvaWQgY2hl
Y2tMb2FkQ29tcGxldGVGb3JUaGlzRnJhbWUoKTsKIAogICAgICAgICB2b2lkIHNldERvY3VtZW50
TG9hZGVyKERvY3VtZW50TG9hZGVyKik7CkBAIC00MjYsNyArNDY2LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIGNsZWFyKGJvb2wgY2xlYXJXaW5kb3dQcm9wZXJ0aWVzID0g
dHJ1ZSwgYm9vbCBjbGVhclNjcmlwdE9iamVjdHMgPSB0cnVlLCBib29sIGNsZWFyRnJhbWVWaWV3
ID0gdHJ1ZSk7CiAKICAgICAgICAgYm9vbCBzaG91bGRSZWxvYWRUb0hhbmRsZVVucmVhY2hhYmxl
VVJMKERvY3VtZW50TG9hZGVyKik7Ci0gICAgICAgIHZvaWQgaGFuZGxlVW5pbXBsZW1lbnRhYmxl
UG9saWN5KGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIAogICAgICAgICB2b2lkIGRpc3BhdGNoRGlk
Q29tbWl0TG9hZCgpOwogICAgICAgICB2b2lkIGRpc3BhdGNoQXNzaWduSWRlbnRpZmllclRvSW5p
dGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpOwpAQCAtNDgzLDYgKzUyMiw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAgICAgIEZyYW1lTG9hZGVyQ2xpZW50
KiBtX2NsaWVudDsKIAorICAgICAgICBQb2xpY3lDaGVja2VyIG1fcG9saWN5Q2hlY2tlcjsKKwog
ICAgICAgICBGcmFtZVN0YXRlIG1fc3RhdGU7CiAgICAgICAgIEZyYW1lTG9hZFR5cGUgbV9sb2Fk
VHlwZTsKIApAQCAtNDk0LDE1ICs1MzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IFJlZlB0cjxEb2N1bWVudExvYWRlcj4gbV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyOwogICAg
ICAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IG1fcG9saWN5RG9jdW1lbnRMb2FkZXI7CiAKLSAg
ICAgICAgLy8gVGhpcyBpZGVudGlmaWVzIHRoZSB0eXBlIG9mIG5hdmlnYXRpb24gYWN0aW9uIHdo
aWNoIHByb21wdGVkIHRoaXMgbG9hZC4gTm90ZSAKLSAgICAgICAgLy8gdGhhdCBXZWJLaXQgY29u
dmV5cyB0aGlzIHZhbHVlIGFzIHRoZSBXZWJBY3Rpb25OYXZpZ2F0aW9uVHlwZUtleSB2YWx1ZQot
ICAgICAgICAvLyBvbiBuYXZpZ2F0aW9uIGFjdGlvbiBkZWxlZ2F0ZSBjYWxsYmFja3MuCi0gICAg
ICAgIEZyYW1lTG9hZFR5cGUgbV9wb2xpY3lMb2FkVHlwZTsKLSAgICAgICAgUG9saWN5Q2hlY2sg
bV9wb2xpY3lDaGVjazsKLQogICAgICAgICBib29sIG1fZGVsZWdhdGVJc0hhbmRsaW5nUHJvdmlz
aW9uYWxMb2FkRXJyb3I7Ci0gICAgICAgIGJvb2wgbV9kZWxlZ2F0ZUlzRGVjaWRpbmdOYXZpZ2F0
aW9uUG9saWN5OwotICAgICAgICBib29sIG1fZGVsZWdhdGVJc0hhbmRsaW5nVW5pbXBsZW1lbnRh
YmxlUG9saWN5OwogCiAgICAgICAgIGJvb2wgbV9maXJzdExheW91dERvbmU7CiAgICAgICAgIGJv
b2wgbV9xdWlja1JlZGlyZWN0Q29taW5nOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXJDbGllbnQuaCBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKaW5k
ZXggNWJhNGIxMC4uMjA0MmIzMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXJDbGllbnQuaAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCkBAIC02
MCw2ICs2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBLVVJMOwogICAgIGNs
YXNzIE5hdmlnYXRpb25BY3Rpb247CiAgICAgY2xhc3MgUGx1Z2luVmlldzsKKyAgICBjbGFzcyBQ
b2xpY3lDaGVja2VyOwogICAgIGNsYXNzIFJlc291cmNlRXJyb3I7CiAgICAgY2xhc3MgUmVzb3Vy
Y2VIYW5kbGU7CiAgICAgY2xhc3MgUmVzb3VyY2VMb2FkZXI7CkBAIC03Miw3ICs3Myw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTdHJpbmc7CiAgICAgY2xhc3MgV2lkZ2V0Owog
Ci0gICAgdHlwZWRlZiB2b2lkIChGcmFtZUxvYWRlcjo6KkZyYW1lUG9saWN5RnVuY3Rpb24pKFBv
bGljeUFjdGlvbik7CisgICAgdHlwZWRlZiB2b2lkIChQb2xpY3lDaGVja2VyOjoqRnJhbWVQb2xp
Y3lGdW5jdGlvbikoUG9saWN5QWN0aW9uKTsKIAogICAgIGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50
IHsKICAgICBwdWJsaWM6CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VM
b2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAppbmRleCBh
M2U5MGZkLi5lN2JkYmNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VM
b2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKQEAg
LTkzLDcgKzkzLDcgQEAgdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmRpZENhbmNlbChjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICBSZWZQdHI8TWFpblJlc291cmNlTG9hZGVyPiBwcm90
ZWN0KHRoaXMpOwogCiAgICAgaWYgKG1fd2FpdGluZ0ZvckNvbnRlbnRQb2xpY3kpIHsKLSAgICAg
ICAgZnJhbWVMb2FkZXIoKS0+Y2FuY2VsQ29udGVudFBvbGljeUNoZWNrKCk7CisgICAgICAgIGZy
YW1lTG9hZGVyKCktPnBvbGljeUNoZWNrZXIoKS0+Y2FuY2VsQ2hlY2soKTsKICAgICAgICAgQVNT
RVJUKG1fd2FpdGluZ0ZvckNvbnRlbnRQb2xpY3kpOwogICAgICAgICBtX3dhaXRpbmdGb3JDb250
ZW50UG9saWN5ID0gZmFsc2U7CiAgICAgICAgIGRlcmVmKCk7IC8vIGJhbGFuY2VzIHJlZiBpbiBk
aWRSZWNlaXZlUmVzcG9uc2UKQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIE1haW5SZXNvdXJjZUxv
YWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3Qg
UmVzbwogICAgIC8vIHN5bmNocm9ub3VzbHkgZm9yIHRoZXNlIHJlZGlyZWN0IGNhc2VzLgogICAg
IGlmICghcmVkaXJlY3RSZXNwb25zZS5pc051bGwoKSkgewogICAgICAgICByZWYoKTsgLy8gYmFs
YW5jZWQgYnkgZGVyZWYgaW4gY29udGludWVBZnRlck5hdmlnYXRpb25Qb2xpY3kKLSAgICAgICAg
ZnJhbWVMb2FkZXIoKS0+Y2hlY2tOYXZpZ2F0aW9uUG9saWN5KG5ld1JlcXVlc3QsIGNhbGxDb250
aW51ZUFmdGVyTmF2aWdhdGlvblBvbGljeSwgdGhpcyk7CisgICAgICAgIGZyYW1lTG9hZGVyKCkt
PnBvbGljeUNoZWNrZXIoKS0+Y2hlY2tOYXZpZ2F0aW9uUG9saWN5KG5ld1JlcXVlc3QsIGNhbGxD
b250aW51ZUFmdGVyTmF2aWdhdGlvblBvbGljeSwgdGhpcyk7CiAgICAgfQogfQogCkBAIC0yMDUs
NyArMjA1LDcgQEAgdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVlQWZ0ZXJDb250ZW50
UG9saWN5KFBvbGljeUFjdGlvbiBjb250ZW50UG9saWN5LAogICAgICAgICAvLyBQcmV2ZW50IHJl
bW90ZSB3ZWIgYXJjaGl2ZXMgZnJvbSBsb2FkaW5nIGJlY2F1c2UgdGhleSBjYW4gY2xhaW0gdG8g
YmUgZnJvbSBhbnkgZG9tYWluIGFuZCB0aHVzIGF2b2lkIGNyb3NzLWRvbWFpbiBzZWN1cml0eSBj
aGVja3MgKDQxMjAyNTUpLgogICAgICAgICBib29sIGlzUmVtb3RlV2ViQXJjaGl2ZSA9IGVxdWFs
SWdub3JpbmdDYXNlKCJhcHBsaWNhdGlvbi94LXdlYmFyY2hpdmUiLCBtaW1lVHlwZSkgJiYgIW1f
c3Vic3RpdHV0ZURhdGEuaXNWYWxpZCgpICYmICF1cmwuaXNMb2NhbEZpbGUoKTsKICAgICAgICAg
aWYgKCFmcmFtZUxvYWRlcigpLT5jYW5TaG93TUlNRVR5cGUobWltZVR5cGUpIHx8IGlzUmVtb3Rl
V2ViQXJjaGl2ZSkgewotICAgICAgICAgICAgZnJhbWVMb2FkZXIoKS0+Y2Fubm90U2hvd01JTUVU
eXBlKHIpOworICAgICAgICAgICAgZnJhbWVMb2FkZXIoKS0+cG9saWN5Q2hlY2tlcigpLT5jYW5u
b3RTaG93TUlNRVR5cGUocik7CiAgICAgICAgICAgICAvLyBDaGVjayByZWFjaGVkVGVybWluYWxT
dGF0ZSBzaW5jZSB0aGUgbG9hZCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gY2FuY2VsbGVkIGluc2lk
ZSBvZiBfaGFuZGxlVW5pbXBsZW1lbnRhYmxlUG9saWN5V2l0aEVycm9yQ29kZTo6LgogICAgICAg
ICAgICAgaWYgKCFyZWFjaGVkVGVybWluYWxTdGF0ZSgpKQogICAgICAgICAgICAgICAgIHN0b3BM
b2FkaW5nRm9yUG9saWN5Q2hhbmdlKCk7CkBAIC0zMjAsNyArMzIwLDI1IEBAIHZvaWQgTWFpblJl
c291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cikKICAgICBBU1NFUlQoIW1fd2FpdGluZ0ZvckNvbnRlbnRQb2xpY3kpOwogICAgIG1fd2FpdGlu
Z0ZvckNvbnRlbnRQb2xpY3kgPSB0cnVlOwogICAgIHJlZigpOyAvLyBiYWxhbmNlZCBieSBkZXJl
ZiBpbiBjb250aW51ZUFmdGVyQ29udGVudFBvbGljeSBhbmQgZGlkQ2FuY2VsCi0gICAgZnJhbWVM
b2FkZXIoKS0+Y2hlY2tDb250ZW50UG9saWN5KG1fcmVzcG9uc2UubWltZVR5cGUoKSwgY2FsbENv
bnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5LCB0aGlzKTsKKworICAgIEFTU0VSVChmcmFtZUxvYWRl
cigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpKTsKKworICAgIC8vIEFsd2F5cyBzaG93IGNvbnRl
bnQgd2l0aCB2YWxpZCBzdWJzdGl0dXRlIGRhdGEuCisgICAgaWYgKGZyYW1lTG9hZGVyKCktPmFj
dGl2ZURvY3VtZW50TG9hZGVyKCktPnN1YnN0aXR1dGVEYXRhKCkuaXNWYWxpZCgpKSB7CisgICAg
ICAgIGNhbGxDb250aW51ZUFmdGVyQ29udGVudFBvbGljeSh0aGlzLCBQb2xpY3lVc2UpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKEZUUERJUikKKyAgICAvLyBSZXNwZWN0
IHRoZSBoaWRkZW4gRlRQIERpcmVjdG9yeSBMaXN0aW5nIHByZWYgc28gaXQgY2FuIGJlIHRlc3Rl
ZCBldmVuIGlmIHRoZSBwb2xpY3kgZGVsZWdhdGUgbWlnaHQgb3RoZXJ3aXNlIGRpc2FsbG93IGl0
CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBpZiAo
c2V0dGluZ3MgJiYgc2V0dGluZ3MtPmZvcmNlRlRQRGlyZWN0b3J5TGlzdGluZ3MoKSAmJiBtX3Jl
c3BvbnNlLm1pbWVUeXBlKCkgPT0gImFwcGxpY2F0aW9uL3gtZnRwLWRpcmVjdG9yeSIpIHsKKyAg
ICAgICAgY2FsbENvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5KHRoaXMsIFBvbGljeVVzZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGZyYW1lTG9hZGVyKCktPnBvbGlj
eUNoZWNrZXIoKS0+Y2hlY2tDb250ZW50UG9saWN5KG1fcmVzcG9uc2UubWltZVR5cGUoKSwgY2Fs
bENvbnRpbnVlQWZ0ZXJDb250ZW50UG9saWN5LCB0aGlzKTsKIH0KIAogdm9pZCBNYWluUmVzb3Vy
Y2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGxv
bmcgbG9uZyBsZW5ndGhSZWNlaXZlZCwgYm9vbCBhbGxBdE9uY2UpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHAKaW5kZXggYmI2OGI4Mi4uZGM2MzU4MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmNwcApAQCAtMjQ0LDcgKzI0NCw3IEBAIGJvb2wgU1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wg
YWxsRGF0YVJlY2VpdmVkKQogICAgICAgICBtX2Nocm9tZUNsaWVudC5zZXQobmV3IFNWR0ltYWdl
Q2hyb21lQ2xpZW50KHRoaXMpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGlz
IFNWRyBlbmRzIHVwIGxvYWRpbmcgaXRzZWxmLCB3ZSBtaWdodCBsZWFrIHRoZSB3b3JsZC4KLSAg
ICAgICAgLy8gVEhlIGNvbW1lbnQgc2FpZCB0aGF0IHRoZSBDYWNoZSBjb2RlIGRvZXMgbm90IGtu
b3cgYWJvdXQgQ2FjaGVkSW1hZ2VzCisgICAgICAgIC8vIFRoZSBjb21tZW50IHNhaWQgdGhhdCB0
aGUgQ2FjaGUgY29kZSBkb2VzIG5vdCBrbm93IGFib3V0IENhY2hlZEltYWdlcwogICAgICAgICAv
LyBob2xkaW5nIEZyYW1lcyBhbmQgd29uJ3Qga25vdyB0byBicmVhayB0aGUgY3ljbGUuIEJ1dCAK
ICAgICAgICAgbV9wYWdlLnNldChuZXcgUGFnZShtX2Nocm9tZUNsaWVudC5nZXQoKSwgZHVtbXlD
b250ZXh0TWVudUNsaWVudCwgZHVtbXlFZGl0b3JDbGllbnQsIGR1bW15RHJhZ0NsaWVudCwgZHVt
bXlJbnNwZWN0b3JDbGllbnQsIGR1bW15UGx1Z2luSGFsdGVyQ2xpZW50KSk7CiAgICAgICAgIG1f
cGFnZS0+c2V0dGluZ3MoKS0+c2V0SmF2YVNjcmlwdEVuYWJsZWQoZmFsc2UpOwpAQCAtMjU2LDcg
KzI1Niw3IEBAIGJvb2wgU1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVk
KQogICAgICAgICBSZXNvdXJjZVJlcXVlc3QgZmFrZVJlcXVlc3QoS1VSTChQYXJzZWRVUkxTdHJp
bmcsICIiKSk7CiAgICAgICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7
CiAgICAgICAgIGxvYWRlci0+bG9hZChmYWtlUmVxdWVzdCwgZmFsc2UpOyAvLyBNYWtlIHN1cmUg
dGhlIERvY3VtZW50TG9hZGVyIGlzIGNyZWF0ZWQKLSAgICAgICAgbG9hZGVyLT5jYW5jZWxDb250
ZW50UG9saWN5Q2hlY2soKTsgLy8gY2FuY2VsIGFueSBwb2xpY3kgY2hlY2tzCisgICAgICAgIGxv
YWRlci0+cG9saWN5Q2hlY2tlcigpLT5jYW5jZWxDaGVjaygpOyAvLyBjYW5jZWwgYW55IHBvbGlj
eSBjaGVja3MKICAgICAgICAgbG9hZGVyLT5jb21taXRQcm92aXNpb25hbExvYWQoMCk7CiAgICAg
ICAgIGxvYWRlci0+c2V0UmVzcG9uc2VNSU1FVHlwZSgiaW1hZ2Uvc3ZnK3htbCIpOwogICAgICAg
ICBsb2FkZXItPmJlZ2luKEtVUkwoKSk7IC8vIGNyZWF0ZSB0aGUgZW1wdHkgZG9jdW1lbnQKZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5k
ZXggZmU2NjQ0MC4uMjIwNWQzNyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysr
IGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAwOS0xMC0wNyAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgorCisgICAgICAgIEZhY3RvciBQb2xpY3lDaGVja2VyIG91dCBvZiBGcmFtZUxvYWRl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAxNTUK
KworICAgICAgICBNb3ZlIHRoZSBwb2xpY3kgY2FsbGJhY2sgdG8gdGhlIHBvbGljeSBvYmplY3Qu
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTdWJtaXRGb3Jt
KToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9s
aWN5Rm9yTUlNRVR5cGUpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9u
KToKKwogMjAwOS0xMC0wNiAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCmluZGV4IDZhODYyMzUuLjFjZjlhZWUgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsu
Y3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsu
Y3BwCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hX
aWxsU3VibWl0Rm9ybShGcmFtZVBvbGljeUZ1bmN0aW9uIHBvbGljeUZ1bmN0aW8KICAgICBBU1NF
UlQocG9saWN5RnVuY3Rpb24pOwogICAgIGlmICghcG9saWN5RnVuY3Rpb24pCiAgICAgICAgIHJl
dHVybjsKLSAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPipwb2xpY3lGdW5jdGlvbikoUG9s
aWN5VXNlKTsKKyAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPnBvbGljeUNoZWNrZXIoKS0+
KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQogCiAKQEAgLTI4MCw3ICsyODAsNyBAQCB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck1JTUVUeXBlKEZy
YW1lUG9saWN5RnVuY3Rpb24gcG9saQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAocmVzb3Vy
Y2VSZXF1ZXN0LmlzTnVsbCgpKSB7Ci0gICAgICAgIChjb3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+
KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lJZ25vcmUpOworICAgICAgICAoY29yZShtX2ZyYW1lKS0+
bG9hZGVyKCktPnBvbGljeUNoZWNrZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lJZ25vcmUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNDcsNyArMzQ3LDcgQEAgdm9pZCBGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJh
bWVQb2xpY3lGdW5jdGkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHJlc291cmNlUmVxdWVz
dC5pc051bGwoKSkgewotICAgICAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPipwb2xpY3lG
dW5jdGlvbikoUG9saWN5SWdub3JlKTsKKyAgICAgICAgKGNvcmUobV9mcmFtZSktPmxvYWRlcigp
LT5wb2xpY3lDaGVja2VyKCktPipwb2xpY3lGdW5jdGlvbikoUG9saWN5SWdub3JlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzcwLDcgKzM3MCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1lUG9saWN5
RnVuY3RpCiAgICAgLy8gRklYTUU6IEkgdGhpbmsgUXQgdmVyc2lvbiBtYXJzaGFscyB0aGlzIHRv
IGFub3RoZXIgdGhyZWFkIHNvIHdoZW4gd2UKICAgICAvLyBoYXZlIG11bHRpLXRocmVhZGVkIGRv
d25sb2FkLCB3ZSBtaWdodCBuZWVkIHRvIGRvIHRoZSBzYW1lCiAgICAgaWYgKCFpc0hhbmRsZWQp
Ci0gICAgICAgIChjb3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQb2xp
Y3lVc2UpOworICAgICAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPnBvbGljeUNoZWNrZXIo
KS0+KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lG
dW5jdGlvbiBwb2xpY3lGdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgYWN0aW9uLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgUGFzc1JlZlB0cjxGb3JtU3Rh
dGU+KQpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNo
RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0CiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChyZXNvdXJjZVJlcXVlc3QuaXNOdWxsKCkpIHsKLSAgICAgICAg
KGNvcmUobV9mcmFtZSktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeUlnbm9yZSk7
CisgICAgICAgIChjb3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+cG9saWN5Q2hlY2tlcigpLT4qcG9s
aWN5RnVuY3Rpb24pKFBvbGljeUlnbm9yZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTM5Nyw3ICszOTcsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lGdW5jdAogICAgIGdfc2lnbmFsX2Vt
aXRfYnlfbmFtZSh3ZWJWaWV3LCAibmF2aWdhdGlvbi1yZXF1ZXN0ZWQiLCBtX2ZyYW1lLCByZXF1
ZXN0LCAmcmVzcG9uc2UpOwogCiAgICAgaWYgKHJlc3BvbnNlID09IFdFQktJVF9OQVZJR0FUSU9O
X1JFU1BPTlNFX0lHTk9SRSkgewotICAgICAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPipw
b2xpY3lGdW5jdGlvbikoUG9saWN5SWdub3JlKTsKKyAgICAgICAgKGNvcmUobV9mcmFtZSktPmxv
YWRlcigpLT5wb2xpY3lDaGVja2VyKCktPipwb2xpY3lGdW5jdGlvbikoUG9saWN5SWdub3JlKTsK
ICAgICAgICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CmRpZmYgLS1naXQgYS9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9nIGIvV2ViS2l0L2hhaWt1L0NoYW5n
ZUxvZwppbmRleCBmNDZhMjUwLi40NTdlM2Y0IDEwMDY0NAotLS0gYS9XZWJLaXQvaGFpa3UvQ2hh
bmdlTG9nCisrKyBiL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAw
OS0xMC0wNyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEZhY3RvciBQb2xpY3lDaGVja2VyIG91dCBv
ZiBGcmFtZUxvYWRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzAxNTUKKworICAgICAgICBNb3ZlIHRoZSBwb2xpY3kgY2FsbGJhY2sgdG8gdGhlIHBv
bGljeSBvYmplY3QuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRp
c3BhdGNoV2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dp
bmRvd0FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpk
aXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgorCiAyMDA5LTA5LTE3ICBL
ZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAtLWdpdCBhL1dlYktpdC9oYWlrdS9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmNwcCBiL1dlYktpdC9oYWlrdS9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmNwcAppbmRleCBkMjY4M2MwLi5h
OGJhMTZmIDEwMDY0NAotLS0gYS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdS5jcHAKKysrIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50SGFpa3UuY3BwCkBAIC0yODAsNyArMjgwLDcgQEAgdm9pZCBGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKEZyYW1lUG9saWN5RnVuY3Rpb24g
ZnVuY3Rpb24KICAgICAvLyBGSVhNRTogU2VuZCBhbiBldmVudCB0byBhbGxvdyBmb3IgYWxlcnRz
IGFuZCBjYW5jZWxsYXRpb24uCiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm47Ci0g
ICAgKG1fZnJhbWUtPmxvYWRlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CisgICAgKG1fZnJh
bWUtPmxvYWRlcigpLT5wb2xpY3lDaGVja2VyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKIH0K
IAogdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZExvYWRNYWluUmVzb3Vy
Y2UoRG9jdW1lbnRMb2FkZXIqKQpAQCAtNjM1LDcgKzYzNSw3IEBAIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZShGcmFtZVBvbGljeUZ1
bmN0aW9uCiAgICAgICAgIHJldHVybjsKIAogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgKG1f
ZnJhbWUtPmxvYWRlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CisgICAgKG1fZnJhbWUtPmxv
YWRlcigpLT5wb2xpY3lDaGVja2VyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKIH0KIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRv
d0FjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLApAQCAtNjUwLDEyICs2NTAsMTIg
QEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5l
d1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUYKICAgICAgICAgQk1lc3NhZ2UgbWVzc2FnZShORVdf
V0lORE9XX1JFUVVFU1RFRCk7CiAgICAgICAgIG1lc3NhZ2UuQWRkU3RyaW5nKCJ1cmwiLCByZXF1
ZXN0LnVybCgpLnN0cmluZygpKTsKICAgICAgICAgaWYgKG1fbWVzc2VuZ2VyLT5TZW5kTWVzc2Fn
ZSgmbWVzc2FnZSkpIHsKLSAgICAgICAgICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+KmZ1bmN0aW9u
KShQb2xpY3lJZ25vcmUpOworICAgICAgICAgICAgKG1fZnJhbWUtPmxvYWRlcigpLT5wb2xpY3lD
aGVja2VyKCktPipmdW5jdGlvbikoUG9saWN5SWdub3JlKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+KmZ1bmN0aW9uKShQ
b2xpY3lVc2UpOworICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+cG9saWN5Q2hlY2tlcigpLT4qZnVu
Y3Rpb24pKFBvbGljeVVzZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlz
cGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24g
ZnVuY3Rpb24sCkBAIC02NzEsNyArNjcxLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1
OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3kKICAg
ICAgICAgbWVzc2FnZS5BZGRTdHJpbmcoInVybCIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpOwog
ICAgICAgICBtX21lc3Nlbmdlci0+U2VuZE1lc3NhZ2UoJm1lc3NhZ2UpOwogCi0gICAgICAgICht
X2ZyYW1lLT5sb2FkZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOworICAgICAgICAobV9mcmFt
ZS0+bG9hZGVyKCktPnBvbGljeUNoZWNrZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0No
YW5nZUxvZwppbmRleCAzODRiN2VlLi5kZDlmM2Q0IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0No
YW5nZUxvZworKysgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDA5
LTEwLTA3ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgRmFjdG9yIFBvbGljeUNoZWNrZXIgb3V0IG9m
IEZyYW1lTG9hZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMDE1NQorCisgICAgICAgIE1vdmUgdGhlIHBvbGljeSBjYWxsYmFjayB0byB0aGUgcG9s
aWN5IG9iamVjdC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50Lm1tOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFN1Ym1p
dEZvcm0pOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJlY2VpdmVkUG9saWN5RGVj
aXNvbik6CisKIDIwMDktMTAtMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0gYi9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCmluZGV4IDc2NDEzMGEuLmMxNjA1YjIg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQubW0KKysrIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5tbQpAQCAtNzE4LDcgKzcxOCw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoV2lsbFN1Ym1pdEZvcm0oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwKIHsKICAgICBp
ZCA8V2ViRm9ybURlbGVnYXRlPiBmb3JtRGVsZWdhdGUgPSBbZ2V0V2ViVmlldyhtX3dlYkZyYW1l
LmdldCgpKSBfZm9ybURlbGVnYXRlXTsKICAgICBpZiAoIWZvcm1EZWxlZ2F0ZSkgewotICAgICAg
ICAoY29yZShtX3dlYkZyYW1lLmdldCgpKS0+bG9hZGVyKCktPipmdW5jdGlvbikoUG9saWN5VXNl
KTsKKyAgICAgICAgKGNvcmUobV93ZWJGcmFtZS5nZXQoKSktPmxvYWRlcigpLT5wb2xpY3lDaGVj
a2VyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtMTE5Nyw3ICsxMTk3LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVjZWl2ZWRQ
b2xpY3lEZWNpc29uKFBvbGljeUFjdGlvbiBhY3Rpb24pCiAgICAgbV9wb2xpY3lMaXN0ZW5lciA9
IG5pbDsKICAgICBtX3BvbGljeUZ1bmN0aW9uID0gMDsKIAotICAgIChjb3JlKG1fd2ViRnJhbWUu
Z2V0KCkpLT5sb2FkZXIoKS0+KmZ1bmN0aW9uKShhY3Rpb24pOworICAgIChjb3JlKG1fd2ViRnJh
bWUuZ2V0KCkpLT5sb2FkZXIoKS0+cG9saWN5Q2hlY2tlcigpLT4qZnVuY3Rpb24pKGFjdGlvbik7
CiB9CiAKIFN0cmluZyBXZWJGcmFtZUxvYWRlckNsaWVudDo6dXNlckFnZW50KGNvbnN0IEtVUkwm
IHVybCkKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdl
TG9nCmluZGV4IDRmZDc0NWEuLmQ4NzkwYmYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDA5LTEwLTA3
ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCisKKyAgICAgICAgRmFjdG9yIFBvbGljeUNoZWNrZXIgb3V0IG9mIEZyYW1l
TG9hZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
MDE1NQorCisgICAgICAgIE1vdmUgdGhlIHBvbGljeSBjYWxsYmFjayB0byB0aGUgcG9saWN5IG9i
amVjdC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6Y2FsbFBvbGljeUZ1bmN0
aW9uKToKKwogMjAwOS0xMC0wNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwIGIvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCmluZGV4IGMyYjM1ZmYuLjY2NWYxNmEgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNw
cAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAK
QEAgLTE4Nyw3ICsxODcsNyBAQCBRV2ViRnJhbWUqIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OndlYkZy
YW1lKCkgY29uc3QKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpjYWxsUG9saWN5RnVuY3Rp
b24oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwgUG9saWN5QWN0aW9uIGFjdGlvbikKIHsK
LSAgICAobV9mcmFtZS0+bG9hZGVyKCktPipmdW5jdGlvbikoYWN0aW9uKTsKKyAgICAobV9mcmFt
ZS0+bG9hZGVyKCktPnBvbGljeUNoZWNrZXIoKS0+KmZ1bmN0aW9uKShhY3Rpb24pOwogfQogCiBi
b29sIEZyYW1lTG9hZGVyQ2xpZW50UXQ6Omhhc1dlYlZpZXcoKSBjb25zdApkaWZmIC0tZ2l0IGEv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCBjNDBlM2Q0
Li5lNmRkNzNlIDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9XZWJLaXQv
d2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDA5LTEwLTA3ICBBZGFtIEJhcnRoICA8
YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisK
KyAgICAgICAgRmFjdG9yIFBvbGljeUNoZWNrZXIgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDE1NQorCisgICAgICAg
IE1vdmUgdGhlIHBvbGljeSBjYWxsYmFjayB0byB0aGUgcG9saWN5IG9iamVjdC4KKworICAgICAg
ICAqIFdlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkZyYW1lOjpkaXNwYXRjaFdpbGxTdWJtaXRG
b3JtKToKKyAgICAgICAgKFdlYkZyYW1lOjpyZWNlaXZlZFBvbGljeURlY2lzaW9uKToKKyAgICAg
ICAgKFdlYkZyYW1lOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck1JTUVUeXBlKToKKyAgICAgICAg
KFdlYkZyYW1lOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbik6CisgICAg
ICAgIChXZWJGcmFtZTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToK
KwogMjAwOS0xMC0wNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3dpbi9XZWJGcmFt
ZS5jcHAgYi9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAppbmRleCA0NGVmZTgzLi42YmRmNTFlIDEw
MDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAorKysgYi9XZWJLaXQvd2luL1dlYkZy
YW1lLmNwcApAQCAtMTM0MSw3ICsxMzQxLDcgQEAgdm9pZCBXZWJGcmFtZTo6ZGlzcGF0Y2hXaWxs
U3VibWl0Rm9ybShGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBQYXNzUmVmUHRyPEYKICAg
ICBDT01QdHI8SVdlYkZvcm1EZWxlZ2F0ZT4gZm9ybURlbGVnYXRlOwogCiAgICAgaWYgKEZBSUxF
RChkLT53ZWJWaWV3LT5mb3JtRGVsZWdhdGUoJmZvcm1EZWxlZ2F0ZSkpKSB7Ci0gICAgICAgIChj
b3JlRnJhbWUtPmxvYWRlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CisgICAgICAgIChjb3Jl
RnJhbWUtPmxvYWRlcigpLT5wb2xpY3lDaGVja2VyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTM2MCw3ICsxMzYwLDcgQEAgdm9pZCBXZWJG
cmFtZTo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9u
LCBQYXNzUmVmUHRyPEYKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IEFkZCBhIHNh
bmUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgotICAgIChjb3JlRnJhbWUtPmxvYWRlcigpLT4qZnVu
Y3Rpb24pKFBvbGljeVVzZSk7CisgICAgKGNvcmVGcmFtZS0+bG9hZGVyKCktPnBvbGljeUNoZWNr
ZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQogCiB2b2lkIFdlYkZyYW1lOjpyZXZlcnRU
b1Byb3Zpc2lvbmFsU3RhdGUoRG9jdW1lbnRMb2FkZXIqKQpAQCAtMTUyNiw3ICsxNTI2LDcgQEAg
dm9pZCBXZWJGcmFtZTo6cmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihQb2xpY3lBY3Rpb24gYWN0aW9u
KQogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHRoaXMpOwogICAgIEFTU0VSVChjb3JlRnJh
bWUpOwogCi0gICAgKGNvcmVGcmFtZS0+bG9hZGVyKCktPipmdW5jdGlvbikoYWN0aW9uKTsKKyAg
ICAoY29yZUZyYW1lLT5sb2FkZXIoKS0+cG9saWN5Q2hlY2tlcigpLT4qZnVuY3Rpb24pKGFjdGlv
bik7CiB9CiAKIHZvaWQgV2ViRnJhbWU6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUo
RnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQpAQCAtMTU0Myw3ICsxNTQzLDcgQEAgdm9pZCBX
ZWJGcmFtZTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZShGcmFtZVBvbGljeUZ1bmN0
aW9uIGZ1bmN0aW9uLCBjb24KICAgICBpZiAoU1VDQ0VFREVEKHBvbGljeURlbGVnYXRlLT5kZWNp
ZGVQb2xpY3lGb3JNSU1FVHlwZShkLT53ZWJWaWV3LCBCU3RyaW5nKG1pbWVUeXBlKSwgdXJsUmVx
dWVzdC5nZXQoKSwgdGhpcywgc2V0VXBQb2xpY3lMaXN0ZW5lcihmdW5jdGlvbikuZ2V0KCkpKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgKGNvcmVGcmFtZS0+bG9hZGVyKCktPipmdW5jdGlvbiko
UG9saWN5VXNlKTsKKyAgICAoY29yZUZyYW1lLT5sb2FkZXIoKS0+cG9saWN5Q2hlY2tlcigpLT4q
ZnVuY3Rpb24pKFBvbGljeVVzZSk7CiB9CiAKIHZvaWQgV2ViRnJhbWU6OmRpc3BhdGNoRGVjaWRl
UG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sIGNv
bnN0IE5hdmlnYXRpb25BY3Rpb24mIGFjdGlvbiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlLCBjb25zdCBTdHJpbmcmIGZyYW1l
TmFtZSkKQEAgLTE1NjEsNyArMTU2MSw3IEBAIHZvaWQgV2ViRnJhbWU6OmRpc3BhdGNoRGVjaWRl
UG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3RpCiAgICAg
aWYgKFNVQ0NFRURFRChwb2xpY3lEZWxlZ2F0ZS0+ZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0
aW9uKGQtPndlYlZpZXcsIGFjdGlvbkluZm9ybWF0aW9uLmdldCgpLCB1cmxSZXF1ZXN0LmdldCgp
LCBCU3RyaW5nKGZyYW1lTmFtZSksIHNldFVwUG9saWN5TGlzdGVuZXIoZnVuY3Rpb24pLmdldCgp
KSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIChjb3JlRnJhbWUtPmxvYWRlcigpLT4qZnVuY3Rp
b24pKFBvbGljeVVzZSk7CisgICAgKGNvcmVGcmFtZS0+bG9hZGVyKCktPnBvbGljeUNoZWNrZXIo
KS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQogCiB2b2lkIFdlYkZyYW1lOjpkaXNwYXRjaERl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlv
biwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgYWN0aW9uLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUpCkBAIC0xNTc5LDcgKzE1
NzksNyBAQCB2b2lkIFdlYkZyYW1lOjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdAogICAgIGlmIChTVUNDRUVERUQocG9saWN5
RGVsZWdhdGUtPmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oZC0+d2ViVmlldywgYWN0
aW9uSW5mb3JtYXRpb24uZ2V0KCksIHVybFJlcXVlc3QuZ2V0KCksIHRoaXMsIHNldFVwUG9saWN5
TGlzdGVuZXIoZnVuY3Rpb24pLmdldCgpKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIChjb3Jl
RnJhbWUtPmxvYWRlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CisgICAgKGNvcmVGcmFtZS0+
bG9hZGVyKCktPnBvbGljeUNoZWNrZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQogCiB2
b2lkIFdlYkZyYW1lOjpkaXNwYXRjaFVuYWJsZVRvSW1wbGVtZW50UG9saWN5KGNvbnN0IFJlc291
cmNlRXJyb3ImIGVycm9yKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3d4L0NoYW5nZUxvZyBiL1dlYktp
dC93eC9DaGFuZ2VMb2cKaW5kZXggMjUwOTZhOC4uNzZmNDUzMyAxMDA2NDQKLS0tIGEvV2ViS2l0
L3d4L0NoYW5nZUxvZworKysgYi9XZWJLaXQvd3gvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMDktMTAtMDcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBGYWN0b3IgUG9saWN5Q2hlY2tlciBv
dXQgb2YgRnJhbWVMb2FkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMwMTU1CisKKyAgICAgICAgTW92ZSB0aGUgcG9saWN5IGNhbGxiYWNrIHRvIHRo
ZSBwb2xpY3kgb2JqZWN0LgorCisgICAgICAgICogV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50V3g6OmRpc3Bh
dGNoV2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRX
eDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudFd4OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFd4OjpkaXNwYXRjaERlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgorCiAyMDA5LTA5LTI1ICBLZXZpbiBPbGxpdmll
ciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAgICAgICAgIHd4IGJ1aWxkIGZpeC4gQWRk
IEVtcHR5UGx1Z2luSGFsdGVyQ2xpZW50IHdoZW4gY3JlYXRpbmcgdGhlIFBhZ2UuCmRpZmYgLS1n
aXQgYS9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcCBiL1dl
YktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCmluZGV4IDU5NGUw
YzMuLjBhNWVlYWYgMTAwNjQ0Ci0tLSBhL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50V3guY3BwCisrKyBiL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50V3guY3BwCkBAIC0zNDAsNyArMzQwLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFd4
OjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sCiAg
ICAgLy8gRklYTUU6IFNlbmQgYW4gZXZlbnQgdG8gYWxsb3cgZm9yIGFsZXJ0cyBhbmQgY2FuY2Vs
bGF0aW9uCiAgICAgaWYgKCFtX3dlYkZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgKG1fZnJh
bWUtPmxvYWRlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CisgICAgKG1fZnJhbWUtPmxvYWRl
cigpLT5wb2xpY3lDaGVja2VyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKIH0KIAogCkBAIC03
MDksNyArNzA5LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFd4OjpkaXNwYXRjaERlY2lkZVBv
bGljeUZvck1JTUVUeXBlKEZyYW1lUG9saWN5RnVuY3Rpb24gZnUKICAgICAgICAgcmV0dXJuOwog
ICAgIAogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgKG1fZnJhbWUtPmxvYWRlcigpLT4qZnVu
Y3Rpb24pKFBvbGljeVVzZSk7CisgICAgKG1fZnJhbWUtPmxvYWRlcigpLT5wb2xpY3lDaGVja2Vy
KCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFd4
OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUZ1bmN0
aW9uIGZ1bmN0aW9uLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGNvbnN0IFN0cmluZyYgdGFyZ2V0
TmFtZSkKQEAgLTcyNCwxMiArNzI0LDEyIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRXeDo6ZGlz
cGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jCiAgICAg
ICAgIGlmIChtX3dlYlZpZXctPkdldEV2ZW50SGFuZGxlcigpLT5Qcm9jZXNzRXZlbnQod2tFdmVu
dCkpIHsKICAgICAgICAgICAgIC8vIGlmIHRoZSBhcHAgaGFuZGxlcyBhbmQgZG9lc24ndCBza2lw
IHRoZSBldmVudCwgCiAgICAgICAgICAgICAvLyBmcm9tIFdlYktpdCdzIHBlcnNwZWN0aXZlIHRy
ZWF0IGl0IGFzIGJsb2NrZWQgLyBpZ25vcmVkCi0gICAgICAgICAgICAobV9mcmFtZS0+bG9hZGVy
KCktPipmdW5jdGlvbikoUG9saWN5SWdub3JlKTsKKyAgICAgICAgICAgIChtX2ZyYW1lLT5sb2Fk
ZXIoKS0+cG9saWN5Q2hlY2tlcigpLT4qZnVuY3Rpb24pKFBvbGljeUlnbm9yZSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgKG1fZnJhbWUtPmxvYWRl
cigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CisgICAgKG1fZnJhbWUtPmxvYWRlcigpLT5wb2xp
Y3lDaGVja2VyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRl
ckNsaWVudFd4OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQ
b2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgYWN0aW9uLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPikKQEAg
LTc0NCw5ICs3NDQsOSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6OmRpc3BhdGNoRGVjaWRl
UG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bgogICAgICAgICAKICAgICAg
ICAgbV93ZWJWaWV3LT5HZXRFdmVudEhhbmRsZXIoKS0+UHJvY2Vzc0V2ZW50KHdrRXZlbnQpOwog
ICAgICAgICBpZiAod2tFdmVudC5Jc0NhbmNlbGxlZCgpKQotICAgICAgICAgICAgKG1fZnJhbWUt
PmxvYWRlcigpLT4qZnVuY3Rpb24pKFBvbGljeUlnbm9yZSk7CisgICAgICAgICAgICAobV9mcmFt
ZS0+bG9hZGVyKCktPnBvbGljeUNoZWNrZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lJZ25vcmUpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAobV9mcmFtZS0+bG9hZGVyKCktPipmdW5jdGlvbiko
UG9saWN5VXNlKTsKKyAgICAgICAgICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+cG9saWN5Q2hlY2tl
cigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CiAgICAgICAgIAogICAgIH0KIH0=
</data>

          </attachment>
      

    </bug>

</bugzilla>