<?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>95793</bug_id>
          
          <creation_ts>2012-09-04 16:03:39 -0700</creation_ts>
          <short_desc>Improve the initialization of empty strings</short_desc>
          <delta_ts>2022-10-09 08:55:49 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>abarth</cc>
    
    <cc>ahmad.saleem792</cc>
    
    <cc>andersca</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>japhet</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>ntim</cc>
    
    <cc>skyul</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>711530</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-04 16:03:39 -0700</bug_when>
    <thetext>In many cases, emptyString() is not generating code as compact as it should be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711699</commentid>
    <comment_count>1</comment_count>
      <attachid>162154</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-04 21:21:39 -0700</bug_when>
    <thetext>Created attachment 162154
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711709</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-04 21:46:00 -0700</bug_when>
    <thetext>I&apos;m confused.  This just seems to be making emptyString() more expensive?  When is this a win?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711710</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-04 21:46:57 -0700</bug_when>
    <thetext>Hmm... You attempt to explain in the ChangeLog.  Perhaps in my tired state I just don&apos;t understand. :)  will try re-reading tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711716</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-04 22:03:03 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Hmm... You attempt to explain in the ChangeLog.  Perhaps in my tired state I just don&apos;t understand. :)  will try re-reading tomorrow.

I probably need a better ChangeLog if that is not clear :)

So previously if you did:
    String foo = emptyString();

Because the return type was const String&amp;, it was really:
    String foo;
    const String&amp; temp = emptyString();
    if (!temp.isNull())
        temp.ref();
    foo.m_impl &lt;= temp; // assignment, no ref :)


The ideas here are:
1) Get rid of the branch, just ref().
2) Do that in the function, not on the call site.

This is why the code is so much more compact for the callers with the patch. Compared to String(&quot;&quot;), it is only one less instruction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711799</commentid>
    <comment_count>5</comment_count>
      <attachid>162154</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-05 00:48:38 -0700</bug_when>
    <thetext>Comment on attachment 162154
Patch

Stricto sensu, this is relying on a compiler optimization.

I should make the solution explicit with rvalue reference, and that will also solve the problem of operator=.

I&apos;ll make an update tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713714</commentid>
    <comment_count>6</comment_count>
      <attachid>162154</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-06 14:32:01 -0700</bug_when>
    <thetext>Comment on attachment 162154
Patch

&gt; I should make the solution explicit with rvalue reference, and that will also solve the problem of operator=.

I tried that, it does not make any difference for the compiler. I am pleasantly surprised how smart the compiler is with this.
Using r-value adds risks and complexity, so I prefer the current version.

Putting the original patch back for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807756</commentid>
    <comment_count>7</comment_count>
      <attachid>162154</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-15 15:40:41 -0800</bug_when>
    <thetext>Comment on attachment 162154
Patch

When do we ever need this emptyString() rather than emptyStringRef(). Can’t we just change emptyString() to do exactly what emptyStringRef() does?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807759</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-15 15:41:52 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; When do we ever need this emptyString() rather than emptyStringRef(). Can’t we just change emptyString() to do exactly what emptyStringRef() does?

Oh, I see you discussing that with Eric. This seems really tricky. It’s hard to know when to use each function. Is there a better solution?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807821</commentid>
    <comment_count>9</comment_count>
      <attachid>162154</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-15 16:51:16 -0800</bug_when>
    <thetext>Comment on attachment 162154
Patch

It&apos;s difficult for me to believe that these will be used consistently correctly.  But overall this patch looks like a good thing.  I think I&apos;d prefer if we just had emptyString() which returns a ref, but if you believe this to be a real perf/size win, then it&apos;s worth it. You should obviously be aware that your hard-work of tuning is very likely to be stale immediately. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807847</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-01-15 17:28:46 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 162154 [details])
&gt; It&apos;s difficult for me to believe that these will be used consistently correctly.  But overall this patch looks like a good thing.  I think I&apos;d prefer if we just had emptyString() which returns a ref, but if you believe this to be a real perf/size win, then it&apos;s worth it. You should obviously be aware that your hard-work of tuning is very likely to be stale immediately. :)

Thanks Eric.

I am sure you are right, this can easily go badly.
I&apos;ll rebase this when I am back working on memory improvement for ARM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807863</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-15 17:46:05 -0800</bug_when>
    <thetext>You might also consider naming emptyString() to emptyStringByValue() and using it only in the couple cases which matter, otherwise the normal emptyString() is a ref and is the &quot;expected&quot; function for the naive contributor to use. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1904334</commentid>
    <comment_count>12</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-10-09 05:51:17 -0700</bug_when>
    <thetext>I checked via bugID on Webkit GitHub and noted that this r+ patch didn&apos;t landed. Do we need this now? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1904357</commentid>
    <comment_count>13</comment_count>
    <who name="Tim Nguyen (:ntim)">ntim</who>
    <bug_when>2022-10-09 08:55:49 -0700</bug_when>
    <thetext>(In reply to Ahmad Saleem from comment #12)
&gt; I checked via bugID on Webkit GitHub and noted that this r+ patch didn&apos;t
&gt; landed. Do we need this now? Thanks!

Chris has landed some changes that covers this area, you can check if each individual file in the patch was covered, and post a new patch if not.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162154</attachid>
            <date>2012-09-04 21:21:39 -0700</date>
            <delta_ts>2013-01-15 16:51:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95793-20120904212121.patch</filename>
            <type>text/plain</type>
            <size>49226</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
NWQzZTA0YmEyYzIwYjYzMWRkYjI5ZDk2NTEyYzA3NWNmOWNlZmUyLi4xZmMxNjM1NDJmNjg3OTFk
MTM4YjQ0ZWYwMjY2ZWFkYTZlYjhlYjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwzNCBAQAogMjAxMi0wOS0wNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KIAorICAgICAgICBJbXByb3ZlIHRoZSBpbml0aWFsaXphdGlvbiBvZiBlbXB0eSBzdHJp
bmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTc5
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5n
ZSB0aGUgb2J2aW91cyB1c2VzIG9mIGVtcHR5IFN0cmluZy4KKworICAgICAgICAqIHByb2ZpbGVy
L0NhbGxJZGVudGlmaWVyLmg6CisgICAgICAgIChKU0M6OkNhbGxJZGVudGlmaWVyOjpDYWxsSWRl
bnRpZmllcik6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlND
OjpQcm9maWxlcjo6d2lsbEV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6ZGlkRXhl
Y3V0ZSk6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpleGNlcHRpb25VbndpbmQpOgorICAgICAg
ICAqIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpFcnJvclByb3Rv
dHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6
CisgICAgICAgIChKU0M6OmdldENhbGN1bGF0ZWREaXNwbGF5TmFtZSk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojpy
ZXNldCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdFJlZ0V4cCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNDb21waWxlKToKKyAgICAgICAg
KiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY01hdGNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU2VhcmNoKToKKworMjAx
Mi0wOS0wNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KKwogICAgICAg
ICBJbXByb3ZlIEpTQyB1c2Ugb2YgU3RyaW5ncyBhZnRlciB0aGUgVVN0cmluZy0+U3RyaW5nIGNo
YW5nZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2
MzMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwppbmRleCBjOTdiMzJkYWI2NTQ3NjZhYzVhODIzMWJmMjNiOGE2ODVlNDE4YmI3Li43NmI3
OTE2MzEzNjIwYjg1MDBjNTNiY2I0NTVhNTQxOTI4MjYzNWE2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBA
CisyMDEyLTA5LTA0ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisg
ICAgICAgIEltcHJvdmUgdGhlIGluaXRpYWxpemF0aW9uIG9mIGVtcHR5IHN0cmluZ3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NzkzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNseSwgZW1w
dHlTdHJpbmcoKSB3YXMgcmV0dXJuaW5nIGEgY29uc3QgcmVmZXJlbmNlIHRvIFN0cmluZy4KKwor
ICAgICAgICBJbiB0aGUgdmFzdCBtYWpvcml0eSBvZiBjYXNlcywgd2UgY29uc3RydWN0IGEgbmV3
IFN0cmluZyBpbnN0YW5jZSBmcm9tIHRoYXQgdmFsdWUuCisKKyAgICAgICAgVGhpcyBoYWQgdGhl
IHVuZm9ydHVuYXRlIHNpZGUgZWZmZWN0cyBvZiBncm93aW5nIHRoZSBhc3NlbWJseSBvbiBlYWNo
IGNhbGwgc2l0ZQorICAgICAgICBiZWNhdXNlIGl0IGhhZCB0byBkbyB0aGUgZm9sbG93aW5nIHdo
ZW4gY3JlYXRpbmcgYSBuZXcgU3RyaW5nOgorICAgICAgICAtTG9hZCB0aGUgdmFsdWUgYXQgdGhl
IGFkZHJlc3MgcG9pbnRlZCBieSB0aGUgcmVmZXJlbmNlLgorICAgICAgICAtTG9hZCB0aGUgY291
bnRlci4KKyAgICAgICAgLUluY3JlbWVudCB0aGUgY291bnRlci4KKyAgICAgICAgLVN0b3JlIHRo
ZSBuZXcgY291bnRlciB2YWx1ZS4KKworICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMgZW1wdHlT
dHJpbmcoKSB0byByZXR1cm4gYSBuZXcgU3RyaW5nIHdpdGggdGhlIGV4cGVjdGVkIHJlZmVyZW5j
ZSBjb3VudC4gVGhpcyBtb3ZlIHRoZQorICAgICAgICByZWYnaW5nIGFzbSB0byB0aGUgZnVuY3Rp
b24sIG1ha2luZyBlYWNoIGNhbGwgc2l0ZSBtb3JlIGNvbXBhY3QuCisgICAgICAgIEZvciB0aGUg
ZmV3IGNhc2Ugd2hlcmUgYSByZWZlcmVuY2UgaXMgbmVlZGVkLCB0aGUgbmV3IGZ1bmN0aW9uIGVt
cHR5U3RyaW5nUmVmKCkgaW1wbGVtZW50cyB0aGUgb2xkIGJlaGF2aW9yLgorCisgICAgICAgICog
d3RmL3RleHQvV1RGU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6ZW1wdHlTdHJpbmcpOgorICAg
ICAgICBJbmNyZWFzaW5nIHRoZSByZWYgY291bnQgaXMgZG9uZSBtYW51YWxseSB0byBhdm9pZCB0
aGUgdGVzdCBmb3IgdGhlIG51bGwgdmFsdWUuIElmIHdlIHBhc3NlZCBlbXB0eVN0cmluZ0ltcGwg
ZGlyZWN0bHkKKyAgICAgICAgdG8gdGhlIFN0cmluZyBjb25zdHJ1Y3RvciwgdGhlIGNvbXBpbGVy
IGluc2VydHMgYSBudWxsIHRlc3QgZnJvbSBSZWZQdHIuCisgICAgICAgIEJ5IGluY3JlYXNpbmcg
dGhlIHJlZiBjb3VudCBvdXJzZWxmLCB3ZSByZWR1Y2UgdGhlIGZ1bmN0aW9uIHRvIGEgc2luZ2xl
IGJyYW5jaCBmb3IgdGhlIHN0YXRpYy4KKworICAgICAgICAoV1RGOjplbXB0eVN0cmluZ1JlZik6
CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisKIDIwMTItMDktMDQgIFpvbHRhbiBI
b3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRXh0ZW5kIHRoZSBjb3ZlcmFn
ZSBvZiB0aGUgQ3VzdG9tIEFsbG9jYXRpb24gRnJhbWV3b3JrIGluIFdURiBhbmQgaW4gSmF2YVNj
cmlwdENvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNzc2ZTcwMTk1ZDIzNjM5OTNlOWVjYThiZDIxOTNjMjE0
ZGIwYTZjLi5lZDY1NTg3M2VhZjZkOTllM2I3NWI4NDU3YTBiZTJhOGY2NWIzODc1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTA0IEBACisyMDEyLTA5LTA0ICBCZW5qYW1pbiBQb3VsYWluICA8YnBv
dWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIEltcHJvdmUgdGhlIGluaXRpYWxpemF0aW9uIG9m
IGVtcHR5IHN0cmluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk1NzkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVwbGFjZSBlbXB0eVN0cmluZygpIGJ5IGVtcHR5U3RyaW5nUmVmKCkgd2hlbiBuZWNl
c3NhcnkvYWR2YW50YWdlb3VzLgorCisgICAgICAgIEFsc28gYWRkZWQgd2FybmluZ3MgZm9yIHN0
cmFuZ2UgdXNlIG9mIEtVUkwuIExlc3MgY29kZSBzaG91bGQgcmVseSBvbiBzdHJpbmcgdmFsdWVz
IGZvcgorICAgICAgICBpbnZhbGlkIFVSTHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJl
ZHVjZXMgdGhlIGJpbmFyeSBieSAya2Igb24gTWFjIHg4Nl82NC4KKworICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFT
b3VyY2U6OmFkZFNvdXJjZUJ1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9T
b3VyY2VCdWZmZXJMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlckxpc3Q6
OmdlbmVyYXRlVW5pcXVlSWQpOgorICAgICAgICBNZWRpYVNvdXJjZSBhbmQgU291cmNlQnVmZmVy
TGlzdCBoYXZlIGJlZW4gbW9kaWZpZWQgdG9nZXRoZXIgdG8gdXNlIGEgbnVsbCBTdHJpbmcgaW5z
dGVhZAorICAgICAgICBvZiBhbiBlbXB0eSBzdHJpbmcgZm9yIHRoZSBzcGVjaWFsIGNhc2UuCisg
ICAgICAgIE1lZGlhU291cmNlOjphZGRTb3VyY2VCdWZmZXIoKSBpcyB0aGUgb25seSBjYWxsZXIg
b2YgU291cmNlQnVmZmVyTGlzdDo6Z2VuZXJhdGVVbmlxdWVJZCgpLgorCisgICAgICAgICogTW9k
dWxlcy9zcGVlY2gvU3BlZWNoUmVjb2duaXRpb25FcnJvci5oOgorICAgICAgICAoV2ViQ29yZTo6
U3BlZWNoUmVjb2duaXRpb25FcnJvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OmFjdGlvblZlcmIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHA6CisgICAgICAgIENvbW1vbklkZW50aWZpZXJzIGhhcyBhbiBpbnN0YW5jZSBv
ZiB0aGUgZW1wdHkgaWRlbnRpZmllciwgdXNlIHRoYXQgZGlyZWN0bHkgdG8gcHJldmVudAorICAg
ICAgICBhbnkgbWVtb3J5IGFsbG9jYXRpb24uCisKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2Vy
aWFsaXplcjo6Q2xvbmVTZXJpYWxpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFs
aXplcjo6d3JpdGUpOgorICAgICAgICAoQ2xvbmVTZXJpYWxpemVyKToKKyAgICAgICAgKiBjc3Mv
Q1NTUGFyc2VyTW9kZS5oOgorICAgICAgICAoQ1NTUGFyc2VyQ29udGV4dCk6CisgICAgICAgICog
ZG9tL0NoYXJhY3RlckRhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6
c2V0RGF0YSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpjcmVhdGVBdHRyaWJ1dGVOUyk6IEF0dHI6OkNyZWF0ZSgpIHRha2VzIGFuIEF0
b21pY1N0cmluZy4gVGhlIG1vc3QgZWZmaWNpZW50CisgICAgICAgIGNvbnN0cnVjdGlvbiBpcyB0
byB1c2UgdGhlIGVtcHR5QXRvbSB0byBhdm9pZCBxdWVyeWluZyB0aGUgaGFzaG1hcC4KKworICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmluaXRTZWN1cml0eUNvbnRleHQpOgorICAgICAgICAq
IGRvbS9Eb2N1bWVudE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtl
cjo6ZGVzY3JpcHRpb24pOgorICAgICAgICAqIGRvbS9JY29uVVJMLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okljb25VUkw6OmRlZmF1bHRJY29uVVJMKToKKyAgICAgICAgKiBkb20vTWljcm9EYXRh
SXRlbUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWljcm9EYXRhSXRlbUxpc3Q6OnVuZGVm
aW5lZEl0ZW1UeXBlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmNhbmNlbENvbXBvc2l0aW9uKToKKyAgICAgICAgKiBodG1sL0Zvcm1D
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Db250cm9sU3RhdGU6OnNlcmlh
bGl6ZVRvKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxBbmNob3JFbGVtZW50OjpzZWFyY2gpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHJpbmdGb3JOZXR3b3JrU3RhdGUpOiBVc2UgQVND
SUlMaXRlcmFsKCkgZm9yIHRoZSBub24tZW1wdHkgY2FzZXMuCisgICAgICAgICogaHRtbC9IVE1M
TWVkaWFFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjphZGRU
ZXh0VHJhY2spOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6Omluc2VydGVk
SW50byk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg6
CisgICAgICAgIChDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOgorICAgICAgICAqIGh0bWwvdHJh
Y2svVGV4dFRyYWNrQ3VlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhvcml6b250YWxLZXl3b3Jk
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6YWxpZ24pOgorICAgICAgICAqIGh0
bWwvdHJhY2svV2ViVlRUVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViVlRUVG9rZW5pemVyOjpuZXh0VG9rZW4pOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6aW5pdCk6
CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmxvZ1BsdWdpblJlcXVlc3QpOgorICAgICAgICAqIGxvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdl
YkFyY2hpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRl
KToKKyAgICAgICAgKiBwYWdlL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmRlcHJlY2F0ZWRIZWFkZXIpOgorICAgICAg
ICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6Y3Jl
YXRlV2luZG93KToKKyAgICAgICAgKiBwYWdlL0xvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxvY2F0aW9uOjpwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2F0aW9uOjpzZWFyY2gp
OgorICAgICAgICAoV2ViQ29yZTo6TG9jYXRpb246Omhhc2gpOgorICAgICAgICAqIHBsYXRmb3Jt
L0tVUkxXVEZVUkwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6c3RyaW5nKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp3cml0ZUltYWdlVG9EYXRhT2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TWV0
cmljc0J1aWxkZXI6OmFkdmFuY2VTaW1wbGVUZXh0KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojpz
dGFydGVkQWN0aXZlSW50ZXJ2YWwpOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50OjpyZW1vdmVkRnJvbSk6
CisgICAgICAgICogc3ZnL1NWR1N0cmluZ0xpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U3RyaW5nTGlzdDo6cmVzZXQpOgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtOjp0cmFuc2Zvcm1UeXBlUHJlZml4Rm9yUGFyc2lu
Zyk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJMb2NhdGlvbjo6c2VhcmNoKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckxv
Y2F0aW9uOjpoYXNoKToKKwogMjAxMi0wOS0wNCAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmVncmVzc2lvbihyMTI3MTYzKTogSGVhcC11c2UtYWZ0ZXItZnJl
ZSBpbiBXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6aGFzU2VsZlBhaW50aW5nTGF5ZXIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9DYWxsSWRlbnRpZmll
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL0NhbGxJZGVudGlmaWVyLmgKaW5k
ZXggYmY5ZjkwNGIwYjljZWM0MWRhMGQzZjYwMWU3NDc4MWMwMWNmYzZhZS4uNzRhMTU1ZWYzZjBl
MzUzMDI5ZGUyM2M1ZDZjNTVhYzIyODIyZDUwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL0NhbGxJZGVudGlmaWVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL0NhbGxJZGVudGlmaWVyLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgQ2FsbElkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHVybCwgaW50IGxpbmVOdW1iZXIpCiAgICAgICAgICAgICA6IG1fbmFtZShuYW1l
KQotICAgICAgICAgICAgLCBtX3VybCghdXJsLmlzTnVsbCgpID8gdXJsIDogIiIpCisgICAgICAg
ICAgICAsIG1fdXJsKCF1cmwuaXNOdWxsKCkgPyB1cmwgOiBlbXB0eVN0cmluZygpKQogICAgICAg
ICAgICAgLCBtX2xpbmVOdW1iZXIobGluZU51bWJlcikKICAgICAgICAgewogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcAppbmRleCA5NjQyYTA2
ODQ3NzdiM2I0YTMzMWIwZDJiZDIyM2RkM2NkNzY3NzA4Li5lNGMwNjEyODJjNjZkNDc0MTJlNjI0
Yzk2OWYyMmE3YmE5YThlMzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlci5jcHAKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIFByb2ZpbGVyOjp3aWxsRXhlY3V0
ZShFeGVjU3RhdGUqIGNhbGxlckNhbGxGcmFtZSwgSlNWYWx1ZSBmdW5jdGlvbikKIHsKICAgICBB
U1NFUlQoIW1fY3VycmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7CiAKLSAgICBkaXNwYXRjaEZ1bmN0
aW9uVG9Qcm9maWxlcyhjYWxsZXJDYWxsRnJhbWUsIG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmls
ZUdlbmVyYXRvcjo6d2lsbEV4ZWN1dGUsIGNyZWF0ZUNhbGxJZGVudGlmaWVyKGNhbGxlckNhbGxG
cmFtZSwgZnVuY3Rpb24sICIiLCAwKSwgY2FsbGVyQ2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPnByb2ZpbGVHcm91cCgpKTsKKyAgICBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyhj
YWxsZXJDYWxsRnJhbWUsIG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRvcjo6d2ls
bEV4ZWN1dGUsIGNyZWF0ZUNhbGxJZGVudGlmaWVyKGNhbGxlckNhbGxGcmFtZSwgZnVuY3Rpb24s
IGVtcHR5U3RyaW5nUmVmKCksIDApLCBjYWxsZXJDYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+cHJvZmlsZUdyb3VwKCkpOwogfQogCiB2b2lkIFByb2ZpbGVyOjp3aWxsRXhlY3V0ZShF
eGVjU3RhdGUqIGNhbGxlckNhbGxGcmFtZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBz
dGFydGluZ0xpbmVOdW1iZXIpCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9pZCBQcm9maWxlcjo6ZGlk
RXhlY3V0ZShFeGVjU3RhdGUqIGNhbGxlckNhbGxGcmFtZSwgSlNWYWx1ZSBmdW5jdGlvbikKIHsK
ICAgICBBU1NFUlQoIW1fY3VycmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7CiAKLSAgICBkaXNwYXRj
aEZ1bmN0aW9uVG9Qcm9maWxlcyhjYWxsZXJDYWxsRnJhbWUsIG1fY3VycmVudFByb2ZpbGVzLCAm
UHJvZmlsZUdlbmVyYXRvcjo6ZGlkRXhlY3V0ZSwgY3JlYXRlQ2FsbElkZW50aWZpZXIoY2FsbGVy
Q2FsbEZyYW1lLCBmdW5jdGlvbiwgIiIsIDApLCBjYWxsZXJDYWxsRnJhbWUtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+cHJvZmlsZUdyb3VwKCkpOworICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1Byb2Zp
bGVzKGNhbGxlckNhbGxGcmFtZSwgbV9jdXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9y
OjpkaWRFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRpZmllcihjYWxsZXJDYWxsRnJhbWUsIGZ1bmN0
aW9uLCBlbXB0eVN0cmluZ1JlZigpLCAwKSwgY2FsbGVyQ2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPnByb2ZpbGVHcm91cCgpKTsKIH0KIAogdm9pZCBQcm9maWxlcjo6ZGlkRXhlY3V0
ZShFeGVjU3RhdGUqIGNhbGxlckNhbGxGcmFtZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGlu
dCBzdGFydGluZ0xpbmVOdW1iZXIpCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBQcm9maWxlcjo6
ZXhjZXB0aW9uVW53aW5kKEV4ZWNTdGF0ZSogaGFuZGxlckNhbGxGcmFtZSkKIHsKICAgICBBU1NF
UlQoIW1fY3VycmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7CiAKLSAgICBkaXNwYXRjaEZ1bmN0aW9u
VG9Qcm9maWxlcyhoYW5kbGVyQ2FsbEZyYW1lLCBtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVH
ZW5lcmF0b3I6OmV4Y2VwdGlvblVud2luZCwgY3JlYXRlQ2FsbElkZW50aWZpZXIoaGFuZGxlckNh
bGxGcmFtZSwgSlNWYWx1ZSgpLCAiIiwgMCksIGhhbmRsZXJDYWxsRnJhbWUtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+cHJvZmlsZUdyb3VwKCkpOworICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1Byb2Zp
bGVzKGhhbmRsZXJDYWxsRnJhbWUsIG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRv
cjo6ZXhjZXB0aW9uVW53aW5kLCBjcmVhdGVDYWxsSWRlbnRpZmllcihoYW5kbGVyQ2FsbEZyYW1l
LCBKU1ZhbHVlKCksIGVtcHR5U3RyaW5nUmVmKCksIDApLCBoYW5kbGVyQ2FsbEZyYW1lLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgpKTsKIH0KIAogQ2FsbElkZW50aWZpZXIg
UHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBm
dW5jdGlvblZhbHVlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRTb3VyY2VVUkwsIGludCBkZWZhdWx0
TGluZU51bWJlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9yUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJv
dG90eXBlLmNwcAppbmRleCA2YzlkNmRmMDRkMzdkNGFlYTY3MTBkZjdmNDY2OWRjMTlhMjk5YTAx
Li40MGE0MjhkMWQ0NzFhMzNjMmFmYjAxNzNkZTA5YjU1N2YyZGNlYWJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCkBAIC01Nyw3ICs1
Nyw3IEBAIEVycm9yUHJvdG90eXBlOjpFcnJvclByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogCiB2b2lkIEVycm9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KikKIHsKLSAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksICIiKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihleGVjLT5nbG9iYWxEYXRhKCksIGVtcHR5U3RyaW5nKCkpOwogICAgIEFTU0VSVChpbmhlcml0
cygmc19pbmZvKSk7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBTdHJpbmcoQVNDSUlM
aXRlcmFsKCJFcnJvciIpKSksIERvbnRFbnVtKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKaW5kZXggOWQ4NDNjNzc0YWIyZjdhYzc5NDEzYjZhY2Rl
MmQ1Nzk4ZjFjMmEzMi4uZGExMTk2YTcyZTM2NGQ5ZTNkYzk4ZTA2ODA4OGI1NzE0ODNhNThkMiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKQEAgLTQ2
MCw3ICs0NjAsNyBAQCBTdHJpbmcgZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBKU09iamVjdCogb2JqZWN0KQogICAgICAgICByZXR1cm4gZnVuY3Rpb24tPmNh
bGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUpOwogICAgIGlmIChJbnRlcm5hbEZ1bmN0aW9u
KiBmdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KG9iamVjdCkpCiAg
ICAgICAgIHJldHVybiBmdW5jdGlvbi0+Y2FsY3VsYXRlZERpc3BsYXlOYW1lKGNhbGxGcmFtZSk7
Ci0gICAgcmV0dXJuICIiOworICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAppbmRleCBkMDRhNzAzMTM5NjBmMTg1MDlmMDdlZGJiNWE3NWVmNjczNzE3OGIw
Li4wMjA2ZGVhMGUwYzkzMTg1MDQ4ZWExZGUzNGUzM2M3MmRhMzhmYWVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0yNDUsNyAr
MjQ1LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgbV9kYXRlUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIERhdGVQcm90
b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBEYXRlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAg
ICBtX2RhdGVTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgRGF0ZUluc3Rh
bmNlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2RhdGVQcm90
b3R5cGUuZ2V0KCkpKTsKIAotICAgIFJlZ0V4cCogZW1wdHlSZWdleCA9IFJlZ0V4cDo6Y3JlYXRl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgIiIsIE5vRmxhZ3MpOworICAgIFJlZ0V4cCogZW1wdHlSZWdl
eCA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZW1wdHlTdHJpbmdSZWYoKSwg
Tm9GbGFncyk7CiAgICAgCiAgICAgbV9yZWdFeHBQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgUmVnRXhwUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgUmVnRXhwUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVj
dFByb3RvdHlwZS5nZXQoKSksIGVtcHR5UmVnZXgpKTsKICAgICBtX3JlZ0V4cFN0cnVjdHVyZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBPYmplY3Q6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fcmVnRXhwUHJvdG90eXBlLmdldCgpKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5j
cHAKaW5kZXggMTI0OGZiNGRhZWEwMTQ5NzRjMTMyYTA4OTM0MzVlYTY5MjMzZWI3Ni4uOGYzZmYy
YzJhY2VmODQxYTI5OWY3MGQyZDA4NmRiN2U0YTU2NWI1ZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcApAQCAtMjcxLDcgKzI3
MSw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBCiAgICAgICAgIHJldHVybiBhc09iamVjdChh
cmcwKTsKICAgICB9CiAKLSAgICBTdHJpbmcgcGF0dGVybiA9IGFyZzAuaXNVbmRlZmluZWQoKSA/
IFN0cmluZygiIikgOiBhcmcwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICBTdHJp
bmcgcGF0dGVybiA9IGFyZzAuaXNVbmRlZmluZWQoKSA/IGVtcHR5U3RyaW5nKCkgOiBhcmcwLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwUHJvdG90eXBlLmNwcAppbmRleCAzYzc0MmEwZDMwNTE1MDdhMzE1YTg3YjRmZDM1
MjcyODk0Y2JkMWEzLi43ZWJlOWJkNzJiNTYwZWMxY2M1NmM4Yjg4YTM1MWFjYWY2MjNjOTM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5j
cHAKQEAgLTEwOSw3ICsxMDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvRnVuY0NvbXBpbGUoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDYW5u
b3Qgc3VwcGx5IGZsYWdzIHdoZW4gY29uc3RydWN0aW5nIG9uZSBSZWdFeHAgZnJvbSBhbm90aGVy
LiIpKSk7CiAgICAgICAgIHJlZ0V4cCA9IGFzUmVnRXhwT2JqZWN0KGFyZzApLT5yZWdFeHAoKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICFleGVjLT5hcmd1bWVudENv
dW50KCkgPyBTdHJpbmcoIiIpIDogYXJnMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Cisg
ICAgICAgIFN0cmluZyBwYXR0ZXJuID0gIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGVtcHR5U3Ry
aW5nKCkgOiBhcmcwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ1Byb3RvdHlwZS5jcHAKaW5kZXggNzM2MzNhNjBiMzM0MTNjZjA1YTYzYTAxMGE4ZDJkZTY4
MzAzMjRjMS4uZGY0OGNhM2M3NGZhYjM1Nzc3M2FiYWYwNDg0M2Y2NGZkZTlkMTgyOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCkBA
IC04MzYsNyArODM2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNNYXRjaChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRo
ZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgogICAgICAgICAg
KiAgUGVyIEVDTUEgMTUuMTAuNC4xLCBpZiBhMCBpcyB1bmRlZmluZWQgc3Vic3RpdHV0ZSB0aGUg
ZW1wdHkgc3RyaW5nLgogICAgICAgICAgKi8KLSAgICAgICAgcmVnRXhwID0gUmVnRXhwOjpjcmVh
dGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCIiKSA6IGEw
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgTm9GbGFncyk7CisgICAgICAgIHJlZ0V4cCA9
IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYTAuaXNVbmRlZmluZWQoKSA/IGVt
cHR5U3RyaW5nUmVmKCkgOiBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIE5vRmxhZ3Mp
OwogICAgICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCByZWdFeHAtPmVycm9yTWVz
c2FnZSgpKSk7CiAgICAgfQpAQCAtODg3LDcgKzg4Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU2VhcmNoKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAg
ICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBuZXcgUmVnRXhw
KHJlZ2V4cCkuCiAgICAgICAgICAqICBQZXIgRUNNQSAxNS4xMC40LjEsIGlmIGEwIGlzIHVuZGVm
aW5lZCBzdWJzdGl0dXRlIHRoZSBlbXB0eSBzdHJpbmcuCiAgICAgICAgICAqLwotICAgICAgICBy
ZWcgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGEwLmlzVW5kZWZpbmVkKCkg
PyBTdHJpbmcoIiIpIDogYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBOb0ZsYWdzKTsK
KyAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC5pc1Vu
ZGVmaW5lZCgpID8gZW1wdHlTdHJpbmdSZWYoKSA6IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSwgTm9GbGFncyk7CiAgICAgICAgIGlmICghcmVnLT5pc1ZhbGlkKCkpCiAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIHJlZy0+
ZXJyb3JNZXNzYWdlKCkpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1dURlN0cmluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKaW5kZXgg
MDdhZmNjN2QwODliYjVjZDEwZTEyY2FhNGU0NzAzYTg1MmNlMWYwOC4uZTQ4OTE2YjMxYzQzM2Uz
NTU5ZTNmNWYwMTBiZWY5MzdhYWVjMWFlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4
dC9XVEZTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcApA
QCAtMTA2Nyw3ICsxMDY3LDE0IEBAIGZsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0KGNvbnN0IFVDaGFy
KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIHBhcnNlZExlbmd0aCkKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvRG91YmxlVHlwZTxVQ2hhciwgQWxsb3dUcmFpbGluZ0p1bms+
KGRhdGEsIGxlbmd0aCwgMCwgcGFyc2VkTGVuZ3RoKSk7CiB9CiAKLWNvbnN0IFN0cmluZyYgZW1w
dHlTdHJpbmcoKQorU3RyaW5nIGVtcHR5U3RyaW5nKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nSW1w
bCogZW1wdHlTdHJpbmdJbXBsID0gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICBlbXB0eVN0cmlu
Z0ltcGwtPnJlZigpOworICAgIHJldHVybiBTdHJpbmcoYWRvcHRSZWYoZW1wdHlTdHJpbmdJbXBs
KSk7Cit9CisKK2NvbnN0IFN0cmluZyYgZW1wdHlTdHJpbmdSZWYoKQogewogICAgIERFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCBlbXB0eVN0cmluZywgKFN0cmluZ0ltcGw6OmVtcHR5KCkpKTsK
ICAgICByZXR1cm4gZW1wdHlTdHJpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1dURlN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAppbmRleCA5MWQ2
ZDczMTAzNDhmOGFiMDUwNjQyZTkyOTk1NzM4Y2I5MTQ5OGU3Li42MjU1MjBiZGZhMDMzMTIwNDM1
ODRlYmU2OGFiYThkYzdmOTUxZTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dU
RlN0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKQEAgLTY1MSwx
NCArNjUxLDE4IEBAIHByaXZhdGU6CiAgICAgY29uc3QgY2hhciogbV9jaGFyYWN0ZXJzOwogfTsK
IAorLy8gRW1wdHkgU3RyaW5nICJDb25zdHJ1Y3RvciIuCitXVEZfRVhQT1JUX1NUUklOR19BUEkg
U3RyaW5nIGVtcHR5U3RyaW5nKCk7CisKIC8vIFNoYXJlZCBnbG9iYWwgZW1wdHkgc3RyaW5nLgot
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIGNvbnN0IFN0cmluZyYgZW1wdHlTdHJpbmcoKTsKK1dURl9F
WFBPUlRfU1RSSU5HX0FQSSBjb25zdCBTdHJpbmcmIGVtcHR5U3RyaW5nUmVmKCk7CiAKIH0KIAog
dXNpbmcgV1RGOjpDU3RyaW5nOwogdXNpbmcgV1RGOjpTdHJpbmc7CiB1c2luZyBXVEY6OmVtcHR5
U3RyaW5nOwordXNpbmcgV1RGOjplbXB0eVN0cmluZ1JlZjsKIHVzaW5nIFdURjo6YXBwZW5kOwog
dXNpbmcgV1RGOjphcHBlbmROdW1iZXI7CiB1c2luZyBXVEY6OmNoYXJhY3RlcnNBcmVBbGxBU0NJ
STsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFT
b3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJj
ZS5jcHAKaW5kZXggMzRmYTE1Y2E5OGQ2YTNkOWJhZTMwNmRjYjYzNzhlNmM4MTg1N2I3OC4uZTY0
ZDZmZDRjMTZkM2I3ZmRkOGE2NDE1NmZmYjU1MGE3NWU0OTVhZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKQEAgLTExMyw3ICsx
MTMsNyBAQCBTb3VyY2VCdWZmZXIqIE1lZGlhU291cmNlOjphZGRTb3VyY2VCdWZmZXIoY29uc3Qg
U3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYwogCiAgICAgLy8gNS4gQ3JlYXRlIGEgbmV3
IFNvdXJjZUJ1ZmZlciBvYmplY3QgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgogICAgIFN0cmlu
ZyBpZCA9IG1fc291cmNlQnVmZmVycy0+Z2VuZXJhdGVVbmlxdWVJZCgpOwotICAgIGlmIChpZCA9
PSBlbXB0eVN0cmluZygpKSB7CisgICAgaWYgKGlkLmlzTnVsbCgpKSB7CiAgICAgICAgIGVjID0g
UVVPVEFfRVhDRUVERURfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmNw
cAppbmRleCA1ODM3MjRiYTE1NTk1ODRiZTUzZjdmZGFjODlkMzE1MjYwYWM4ODViLi4xNmNlMWM4
NTAwNjE2MDY5NDVhN2I5NzY2ODM2ZDI1NzYxNzQxYWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5jcHAKQEAgLTkz
LDcgKzkzLDcgQEAgU3RyaW5nIFNvdXJjZUJ1ZmZlckxpc3Q6OmdlbmVyYXRlVW5pcXVlSWQoKQog
CiAgICAgd2hpbGUgKGNvbnRhaW5zKG5leHRTb3VyY2VCdWZmZXJJZCkpIHsKICAgICAgICAgaWYg
KG5leHRTb3VyY2VCdWZmZXJJZCA9PSBtX2xhc3RTb3VyY2VCdWZmZXJJZCkKLSAgICAgICAgICAg
IHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAg
ICAgICBuZXh0U291cmNlQnVmZmVySWQrKzsKICAgICB9CiAgICAgbV9sYXN0U291cmNlQnVmZmVy
SWQgPSBuZXh0U291cmNlQnVmZmVySWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkVycm9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3NwZWVjaC9TcGVlY2hSZWNvZ25pdGlvbkVycm9yLmgKaW5kZXggYjg5OGIzZmI2M2JmZDkw
NzUxYjZkM2ZjOGFmZGYyOTg2OWY3NzkzNy4uMWZiMDRjOTM3OTA4Y2MwZDIwNjFhMDYzMmI5MGUy
MTM4OTMzMjljNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3Bl
ZWNoUmVjb2duaXRpb25FcnJvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNo
L1NwZWVjaFJlY29nbml0aW9uRXJyb3IuaApAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAg
fTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uRXJyb3I+IGNyZWF0
ZShDb2RlLCBjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTcGVlY2hSZWNv
Z25pdGlvbkVycm9yPiBjcmVhdGUoKSB7IHJldHVybiBjcmVhdGUoT1RIRVIsIGVtcHR5U3RyaW5n
KCkpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25FcnJvcj4gY3Jl
YXRlKCkgeyByZXR1cm4gY3JlYXRlKE9USEVSLCBlbXB0eVN0cmluZ1JlZigpKTsgfQogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uRXJyb3I+IGNyZWF0ZShjb25zdCBBdG9t
aWNTdHJpbmcmLCBjb25zdCBTcGVlY2hSZWNvZ25pdGlvbkVycm9ySW5pdCYpOwogCiAgICAgdW5z
aWduZWQgc2hvcnQgY29kZSgpIHsgcmV0dXJuIG1fY29kZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCAzM2NmYmQxYzAx
OWU5MDg1YmJkMWE5NjBlMDkxYTAzMzIyMDZmNDQ2Li5kYTE3NGEzNjk1ZTVkMmQ5MjVmMDQ2MzJl
OWJjM2JiM2QwNTAzMDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuaApAQCAtNzQ2LDcgKzc0Niw3IEBAIHByb3RlY3RlZDoKIAog
I2lmICFIQVZFKEFDQ0VTU0lCSUxJVFkpCiBpbmxpbmUgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjaGls
ZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KLWlubGluZSBjb25zdCBTdHJpbmcmIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OmFjdGlvblZlcmIoKSBjb25zdCB7IHJldHVybiBlbXB0eVN0cmluZygp
OyB9CitpbmxpbmUgY29uc3QgU3RyaW5nJiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY3Rpb25WZXJi
KCkgY29uc3QgeyByZXR1cm4gZW1wdHlTdHJpbmdSZWYoKTsgfQogaW5saW5lIGludCBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpsaW5lRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29u
c3QgeyByZXR1cm4gLTE7IH0KIGlubGluZSB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnVwZGF0
ZUJhY2tpbmdTdG9yZSgpIHsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCAxNjA5YmQ3ZTZlNDNhMjJi
MDZkOTdiZTU4ZDFiOGNjZDI2ZjI3NmQwLi41ZDY2NTMyYjFmMmMwZTlkZDY1ZGRlMTdlN2Q3YjEw
YzJhYTljYmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTM4Niw3ICszODYsNiBAQCBwcml2YXRlOgogICAgICAg
ICA6IENsb25lQmFzZShleGVjKQogICAgICAgICAsIG1fYnVmZmVyKG91dCkKICAgICAgICAgLCBt
X2Jsb2JVUkxzKGJsb2JVUkxzKQotICAgICAgICAsIG1fZW1wdHlJZGVudGlmaWVyKGV4ZWMsIGVt
cHR5U3RyaW5nKCkpCiAgICAgewogICAgICAgICB3cml0ZShDdXJyZW50VmVyc2lvbik7CiAgICAg
ICAgIGZpbGxUcmFuc2Zlck1hcChtZXNzYWdlUG9ydHMsIG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9y
dHMpOwpAQCAtODIxLDcgKzgyMCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB3cml0ZShjb25zdCBT
dHJpbmcmIHN0cikKICAgICB7CiAgICAgICAgIGlmIChzdHIuaXNOdWxsKCkpCi0gICAgICAgICAg
ICB3cml0ZShtX2VtcHR5SWRlbnRpZmllcik7CisgICAgICAgICAgICB3cml0ZShtX2V4ZWMtPmds
b2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICB3cml0ZShJZGVudGlmaWVyKG1fZXhlYywgc3RyKSk7CiAgICAgfQpAQCAt
ODQ2LDcgKzg0NSw2IEBAIHByaXZhdGU6CiAgICAgT2JqZWN0UG9vbCBtX3RyYW5zZmVycmVkQXJy
YXlCdWZmZXJzOwogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIHVpbnQz
Ml90LCBJZGVudGlmaWVyUmVwSGFzaD4gU3RyaW5nQ29uc3RhbnRQb29sOwogICAgIFN0cmluZ0Nv
bnN0YW50UG9vbCBtX2NvbnN0YW50UG9vbDsKLSAgICBJZGVudGlmaWVyIG1fZW1wdHlJZGVudGlm
aWVyOwogfTsKIAogU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOjpzZXJp
YWxpemUoSlNWYWx1ZSBpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXJNb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyTW9kZS5oCmluZGV4IDUyMjhl
OTgxMmQ5ZjIyYTllOGNiMTVhMDc2MDMzOWVkZjEwNzZlMzQuLmY2ZGM3NjM4MDQ0MmRjOTlkMjgy
ZDI5OTA3NjQ4ODc5YWJmN2FiYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXJNb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlck1vZGUuaApAQCAt
NTYsNyArNTYsNyBAQCBpbmxpbmUgYm9vbCBpc1N0cmljdFBhcnNlck1vZGUoQ1NTUGFyc2VyTW9k
ZSBjc3NQYXJzZXJNb2RlKQogCiBzdHJ1Y3QgQ1NTUGFyc2VyQ29udGV4dCB7CiAgICAgQ1NTUGFy
c2VyQ29udGV4dChDU1NQYXJzZXJNb2RlLCBjb25zdCBLVVJMJiBiYXNlVVJMID0gS1VSTCgpKTsK
LSAgICBDU1NQYXJzZXJDb250ZXh0KERvY3VtZW50KiwgY29uc3QgS1VSTCYgYmFzZVVSTCA9IEtV
UkwoKSwgY29uc3QgU3RyaW5nJiBjaGFyc2V0ID0gZW1wdHlTdHJpbmcoKSk7CisgICAgQ1NTUGFy
c2VyQ29udGV4dChEb2N1bWVudCosIGNvbnN0IEtVUkwmIGJhc2VVUkwgPSBLVVJMKCksIGNvbnN0
IFN0cmluZyYgY2hhcnNldCA9IGVtcHR5U3RyaW5nUmVmKCkpOwogCiAgICAgS1VSTCBiYXNlVVJM
OwogICAgIFN0cmluZyBjaGFyc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0No
YXJhY3RlckRhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCmlu
ZGV4IDhjOTMwZDhmMjcxMTJjNmY2YWNhOTE2ZDhkNWU0ZTYyNWNlNTI1YjYuLmZmNjIxNzU2N2Ex
ZTZiNmQ0YjE4NGI0YjA5M2Y2YjgxMGEyYWZjYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVy
RGF0YS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIENo
YXJhY3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5nJiBkYXRhLCBFeGNlcHRpb25Db2RlJikK
IHsKLSAgICBjb25zdCBTdHJpbmcmIG5vbk51bGxEYXRhID0gIWRhdGEuaXNOdWxsKCkgPyBkYXRh
IDogZW1wdHlTdHJpbmcoKTsKKyAgICBjb25zdCBTdHJpbmcmIG5vbk51bGxEYXRhID0gIWRhdGEu
aXNOdWxsKCkgPyBkYXRhIDogZW1wdHlTdHJpbmdSZWYoKTsKICAgICBpZiAobV9kYXRhID09IG5v
bk51bGxEYXRhKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4
IDQ0NjU3NTEzNzE0ZDgyY2I5YTI5YTkwNTlmMzA1MDY1ZjQ5NWQ3NWYuLmMzM2JiNjVlMjA3Y2Y3
ZDFhZDkyYjQ5MDUxZGVlZjc5Nzc1NGE0NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAt
NDczMiw3ICs0NzMyLDcgQEAgUGFzc1JlZlB0cjxBdHRyPiBEb2N1bWVudDo6Y3JlYXRlQXR0cmli
dXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFMKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogCi0gICAgcmV0dXJuIEF0dHI6OmNyZWF0ZSh0aGlzLCBxTmFtZSwgZW1wdHlT
dHJpbmcoKSk7CisgICAgcmV0dXJuIEF0dHI6OmNyZWF0ZSh0aGlzLCBxTmFtZSwgZW1wdHlBdG9t
KTsKIH0KIAogI2lmIEVOQUJMRShTVkcpCkBAIC01MDAzLDcgKzUwMDMsOCBAQCB2b2lkIERvY3Vt
ZW50Ojppbml0U2VjdXJpdHlDb250ZXh0KCkKICAgICBpZiAoIW1fZnJhbWUpIHsKICAgICAgICAg
Ly8gTm8gc291cmNlIGZvciBhIHNlY3VyaXR5IGNvbnRleHQuCiAgICAgICAgIC8vIFRoaXMgY2Fu
IG9jY3VyIHZpYSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudCgpLgotICAg
ICAgICBtX2Nvb2tpZVVSTCA9IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBlbXB0eVN0cmluZygpKTsK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgY29uc3RydWN0b3IgbG9va3Mgd3JvbmcuIEFuIGVtcHR5
IFVSTCBpcyBhbiBpbnZhbGlkIFVSTC4gSW52YWxpZCBVUkxzIHNob3VsZCBiZSBjcmVhdGVkIHdp
dGggS1VSTCgpLCBub3QgdXNpbmcgUGFyc2VkVVJMU3RyaW5nLgorICAgICAgICBtX2Nvb2tpZVVS
TCA9IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBlbXB0eVN0cmluZ1JlZigpKTsKICAgICAgICAgc2V0
U2VjdXJpdHlPcmlnaW4oU2VjdXJpdHlPcmlnaW46OmNyZWF0ZVVuaXF1ZSgpKTsKICAgICAgICAg
c2V0Q29udGVudFNlY3VyaXR5UG9saWN5KENvbnRlbnRTZWN1cml0eVBvbGljeTo6Y3JlYXRlKHRo
aXMpKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50TWFya2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5jcHAK
aW5kZXggNTNkNDNlNGVhYjU2MDZhNmNjNjVjNzhiM2Y3ZmVhM2IzMzQxY2YwZS4uMzRiNDk5ZjU5
ZmY4Njk3ZTA3YjkyYzQyNzU5MDI2M2U2NDc1YzU3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50TWFya2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRNYXJrZXIuY3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgY29uc3QgU3RyaW5nJiBEb2N1bWVudE1h
cmtlcjo6ZGVzY3JpcHRpb24oKSBjb25zdAogewogICAgIGlmIChEb2N1bWVudE1hcmtlckRlc2Ny
aXB0aW9uKiBkZXRhaWxzID0gdG9Eb2N1bWVudE1hcmtlckRlc2NyaXB0aW9uKG1fZGV0YWlscy5n
ZXQoKSkpCiAgICAgICAgIHJldHVybiBkZXRhaWxzLT5kZXNjcmlwdGlvbigpOwotICAgIHJldHVy
biBlbXB0eVN0cmluZygpOworICAgIHJldHVybiBlbXB0eVN0cmluZ1JlZigpOwogfQogCiBib29s
IERvY3VtZW50TWFya2VyOjphY3RpdmVNYXRjaCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vSWNvblVSTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSWNvblVSTC5jcHAK
aW5kZXggMDNiYjNiZjMwMjhjMDRlYjE1NjI2MDM2ZjBmMzkwM2JhZjVjODNkZC4uOGQxMmEwZGM3
ZGMxNTY2NzQ0Njk3ZGU4MmJkMTNkMTI1ODk3ZmJmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0ljb25VUkwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9JY29uVVJMLmNwcApA
QCAtMzUsNyArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEljb25VUkwgSWNvblVSTDo6
ZGVmYXVsdEljb25VUkwoY29uc3QgS1VSTCYgdXJsLCBJY29uVHlwZSB0eXBlKQogewotICAgIElj
b25VUkwgcmVzdWx0KHVybCwgZW1wdHlTdHJpbmcoKSwgZW1wdHlTdHJpbmcoKSwgdHlwZSk7Cisg
ICAgY29uc3QgU3RyaW5nJiBlbXB0eSA9IGVtcHR5U3RyaW5nKCk7CisgICAgSWNvblVSTCByZXN1
bHQodXJsLCBlbXB0eSwgZW1wdHksIHR5cGUpOwogICAgIHJlc3VsdC5tX2lzRGVmYXVsdEljb24g
PSB0cnVlOwogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTWljcm9EYXRhSXRlbUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL01pY3JvRGF0
YUl0ZW1MaXN0LmNwcAppbmRleCA5MWFiOTgyNjdhM2M2MWI3YWEyMzdmNTY4Y2JmY2M1NzE0OWUz
N2VkLi5lZDgyNDA0YTMyZDdjZGRkOTNlNTEwMjA4MmFjZTQ0YjNhMjQ2Yjg4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTWljcm9EYXRhSXRlbUxpc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9NaWNyb0RhdGFJdGVtTGlzdC5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKIAogY29uc3QgU3RyaW5nJiBNaWNyb0RhdGFJdGVtTGlzdDo6
dW5kZWZpbmVkSXRlbVR5cGUoKQogewotICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgIHJl
dHVybiBlbXB0eVN0cmluZ1JlZigpOwogfQogCiBNaWNyb0RhdGFJdGVtTGlzdDo6TWljcm9EYXRh
SXRlbUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiB0eXBlTmFt
ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggODM0MmFmOWYyNWRjY2MxZDBhNGI4
YTRjNzg5MDEwZTBlOTZhZmUzZC4uZjhmMDI2ODVmZGM5YzdhMDA2YTE3Y2Q1YzJkMTFhNTdjOTk2
OTkwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMTM2Miw3ICsxMzYyLDcgQEAg
dm9pZCBFZGl0b3I6OmNhbmNlbENvbXBvc2l0aW9uKCkKIHsKICAgICBpZiAoIW1fY29tcG9zaXRp
b25Ob2RlKQogICAgICAgICByZXR1cm47Ci0gICAgc2V0Q29tcG9zaXRpb24oZW1wdHlTdHJpbmco
KSwgQ2FuY2VsQ29tcG9zaXRpb24pOworICAgIHNldENvbXBvc2l0aW9uKGVtcHR5U3RyaW5nUmVm
KCksIENhbmNlbENvbXBvc2l0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OmNvbmZpcm1Db21wb3Np
dGlvbihjb25zdCBTdHJpbmcmIHRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0Zvcm1Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIu
Y3BwCmluZGV4IDQ5NDEyYmU0MzdhOWM4ZWNjYzY0NjU4YzA2ZjQ1ZWY0NTIwN2E1NzcuLmMyZDI5
MGU0NThiNGU5OTI4OTk0NzE0NmZhZWM1ODFhMmMyNDQzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvRm9ybUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Rm9ybUNvbnRyb2xsZXIuY3BwCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgRm9ybUNvbnRyb2xTdGF0
ZTo6c2VyaWFsaXplVG8oVmVjdG9yPFN0cmluZz4mIHN0YXRlVmVjdG9yKSBjb25zdAogICAgIEFT
U0VSVCghaXNGYWlsdXJlKCkpOwogICAgIHN0YXRlVmVjdG9yLmFwcGVuZChTdHJpbmc6Om51bWJl
cihtX3ZhbHVlcy5zaXplKCkpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFsdWVz
LnNpemUoKTsgKytpKQotICAgICAgICBzdGF0ZVZlY3Rvci5hcHBlbmQobV92YWx1ZXNbaV0uaXNO
dWxsKCkgPyBlbXB0eVN0cmluZygpIDogbV92YWx1ZXNbaV0pOworICAgICAgICBzdGF0ZVZlY3Rv
ci5hcHBlbmQobV92YWx1ZXNbaV0uaXNOdWxsKCkgPyBlbXB0eVN0cmluZ1JlZigpIDogbV92YWx1
ZXNbaV0pOwogfQogCiBGb3JtQ29udHJvbFN0YXRlIEZvcm1Db250cm9sU3RhdGU6OmRlc2VyaWFs
aXplKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdGF0ZVZlY3Rvciwgc2l6ZV90JiBpbmRleCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKaW5kZXggYzMyOTlmYzZlZDYz
MGUzZjMwYzgxMWFhNzIwYzg5MmZkNDRlZDE5Mi4uZWQxM2IyOTM2N2IxZmY1OGE5YzRlZTZjMmNi
MmVlNDVlY2Y5OWNkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9y
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5j
cHAKQEAgLTMxNiw3ICszMTYsNyBAQCBTdHJpbmcgSFRNTEFuY2hvckVsZW1lbnQ6OnRhcmdldCgp
IGNvbnN0CiBTdHJpbmcgSFRNTEFuY2hvckVsZW1lbnQ6Omhhc2goKSBjb25zdAogewogICAgIFN0
cmluZyBmcmFnbWVudElkZW50aWZpZXIgPSBocmVmKCkuZnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0g
ICAgcmV0dXJuIGZyYWdtZW50SWRlbnRpZmllci5pc0VtcHR5KCkgPyBlbXB0eVN0cmluZygpIDog
IiMiICsgZnJhZ21lbnRJZGVudGlmaWVyOworICAgIHJldHVybiBmcmFnbWVudElkZW50aWZpZXIu
aXNFbXB0eSgpID8gZW1wdHlTdHJpbmcoKSA6IG1ha2VTdHJpbmcoJyMnLCBmcmFnbWVudElkZW50
aWZpZXIpOwogfQogCiB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpzZXRIYXNoKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6c2V0
UHJvdG9jb2woY29uc3QgU3RyaW5nJiB2YWx1ZSkKIFN0cmluZyBIVE1MQW5jaG9yRWxlbWVudDo6
c2VhcmNoKCkgY29uc3QKIHsKICAgICBTdHJpbmcgcXVlcnkgPSBocmVmKCkucXVlcnkoKTsKLSAg
ICByZXR1cm4gcXVlcnkuaXNFbXB0eSgpID8gZW1wdHlTdHJpbmcoKSA6ICI/IiArIHF1ZXJ5Owor
ICAgIHJldHVybiBxdWVyeS5pc0VtcHR5KCkgPyBlbXB0eVN0cmluZygpIDogbWFrZVN0cmluZygn
PycsIHF1ZXJ5KTsKIH0KIAogU3RyaW5nIEhUTUxBbmNob3JFbGVtZW50OjpvcmlnaW4oKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggN2M4NzNmNWEw
NDMzYjJiMTIxMTZiYWYwZmEzMDBmYjYwOGNhMzlmMS4uN2UyOGFjNzJkZjBjYjcyMTRiZDNiZTQ0
OTk1MjQwOTA4OGI5NWQzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
Y3BwCkBAIC0xNTE3LDEzICsxNTE3LDEzIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQ
bGF5ZXJOZXR3b3JrU3RhdGVDaGFuZ2VkKE1lZGlhUGxheWVyKikKIHN0YXRpYyBTdHJpbmcgc3Ry
aW5nRm9yTmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgc3RhdGUpCiB7CiAg
ICAgc3dpdGNoIChzdGF0ZSkgewotICAgIGNhc2UgTWVkaWFQbGF5ZXI6OkVtcHR5OiByZXR1cm4g
IkVtcHR5IjsKLSAgICBjYXNlIE1lZGlhUGxheWVyOjpJZGxlOiByZXR1cm4gIklkbGUiOwotICAg
IGNhc2UgTWVkaWFQbGF5ZXI6OkxvYWRpbmc6IHJldHVybiAiTG9hZGluZyI7Ci0gICAgY2FzZSBN
ZWRpYVBsYXllcjo6TG9hZGVkOiByZXR1cm4gIkxvYWRlZCI7Ci0gICAgY2FzZSBNZWRpYVBsYXll
cjo6Rm9ybWF0RXJyb3I6IHJldHVybiAiRm9ybWF0RXJyb3IiOwotICAgIGNhc2UgTWVkaWFQbGF5
ZXI6Ok5ldHdvcmtFcnJvcjogcmV0dXJuICJOZXR3b3JrRXJyb3IiOwotICAgIGNhc2UgTWVkaWFQ
bGF5ZXI6OkRlY29kZUVycm9yOiByZXR1cm4gIkRlY29kZUVycm9yIjsKKyAgICBjYXNlIE1lZGlh
UGxheWVyOjpFbXB0eTogcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRW1wdHkiKTsKKyAgICBjYXNlIE1l
ZGlhUGxheWVyOjpJZGxlOiByZXR1cm4gQVNDSUlMaXRlcmFsKCJJZGxlIik7CisgICAgY2FzZSBN
ZWRpYVBsYXllcjo6TG9hZGluZzogcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiTG9hZGluZyIpOworICAg
IGNhc2UgTWVkaWFQbGF5ZXI6OkxvYWRlZDogcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiTG9hZGVkIik7
CisgICAgY2FzZSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3I6IHJldHVybiBBU0NJSUxpdGVyYWwo
IkZvcm1hdEVycm9yIik7CisgICAgY2FzZSBNZWRpYVBsYXllcjo6TmV0d29ya0Vycm9yOiByZXR1
cm4gQVNDSUlMaXRlcmFsKCJOZXR3b3JrRXJyb3IiKTsKKyAgICBjYXNlIE1lZGlhUGxheWVyOjpE
ZWNvZGVFcnJvcjogcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRGVjb2RlRXJyb3IiKTsKICAgICBkZWZh
dWx0OiByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5oCmluZGV4IDFmMzBiMjk2ZTY0NzJmYzUzYjk1M2Y0MjliNDZlMjExMDZm
OTE1OTIuLmE4MGVjNjIwYTA3NWI5OTUyNTQ3YTQ0ZmNkZmZmMWNlY2UwOWQyY2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBAIC0yMDgsOCArMjA4LDEyIEBAIHB1Ymxp
YzoKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBQYXNzUmVmUHRyPFRleHRUcmFjaz4g
YWRkVGV4dFRyYWNrKGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiBsYWJlbCwgY29u
c3QgU3RyaW5nJiBsYW5ndWFnZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8VGV4
dFRyYWNrPiBhZGRUZXh0VHJhY2soY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIGxh
YmVsLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRkVGV4dFRyYWNrKGtpbmQsIGxhYmVs
LCBlbXB0eVN0cmluZygpLCBlYyk7IH0KLSAgICBQYXNzUmVmUHRyPFRleHRUcmFjaz4gYWRkVGV4
dFRyYWNrKGNvbnN0IFN0cmluZyYga2luZCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFk
ZFRleHRUcmFjayhraW5kLCBlbXB0eVN0cmluZygpLCBlbXB0eVN0cmluZygpLCBlYyk7IH0KKyAg
ICBQYXNzUmVmUHRyPFRleHRUcmFjaz4gYWRkVGV4dFRyYWNrKGNvbnN0IFN0cmluZyYga2luZCwg
Y29uc3QgU3RyaW5nJiBsYWJlbCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFkZFRleHRU
cmFjayhraW5kLCBsYWJlbCwgZW1wdHlTdHJpbmdSZWYoKSwgZWMpOyB9CisgICAgUGFzc1JlZlB0
cjxUZXh0VHJhY2s+IGFkZFRleHRUcmFjayhjb25zdCBTdHJpbmcmIGtpbmQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorICAgIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBlbXB0eSA9IGVtcHR5U3RyaW5n
UmVmKCk7CisgICAgICAgIHJldHVybiBhZGRUZXh0VHJhY2soa2luZCwgZW1wdHksIGVtcHR5LCBl
Yyk7CisgICAgfQogCiAgICAgVGV4dFRyYWNrTGlzdCogdGV4dFRyYWNrcygpOwogICAgIEN1ZUxp
c3QgY3VycmVudGx5QWN0aXZlQ3VlcygpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudGx5QWN0aXZl
Q3VlczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmNwcAppbmRleCAyZWM1ZjA5YjFmZmM1NWUxNzU1NGViMWMyZjA2OTUzNGQ2YjNmYzU1
Li43NjRjZGQzMDdiMTY4YWJlYjJkYzU0ODk5YjFkNjk1ZjRkMWVmZDc1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtNzYs
NyArNzYsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjppbnNlcnRlZEludG8oQ29udAogICAgIGlmICghaW5zZXJ0aW9uUG9p
bnQtPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CiAgICAgU3Ry
aW5nIGluaXRpYWxWYWx1ZSA9IHZhbHVlKCk7Ci0gICAgc2V0VGV4dEFzT2ZMYXN0Rm9ybUNvbnRy
b2xDaGFuZ2VFdmVudChpbml0aWFsVmFsdWUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogaW5p
dGlhbFZhbHVlKTsKKyAgICBzZXRUZXh0QXNPZkxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KGlu
aXRpYWxWYWx1ZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nUmVmKCkgOiBpbml0aWFsVmFsdWUpOwog
ICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCmluZGV4IGJmYTlhODhiOTAw
ZTI2ZDE2MDc1ODA4YzBmYjU4NmRmOWZjNTZmYzUuLmMwOTE0YTBiYTIxZDFiN2FjNDUzNWI5ZjIw
ZjA0ZTU5YzFlOTRlNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBAIC0xODAsNyArMTgwLDcgQEAgcHVibGljOgog
I2VuZGlmCiAKICAgICB2b2lkIGRyYXdJbWFnZUZyb21SZWN0KEhUTUxJbWFnZUVsZW1lbnQqLCBm
bG9hdCBzeCA9IDAsIGZsb2F0IHN5ID0gMCwgZmxvYXQgc3cgPSAwLCBmbG9hdCBzaCA9IDAsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkeCA9IDAsIGZsb2F0IGR5ID0gMCwgZmxv
YXQgZHcgPSAwLCBmbG9hdCBkaCA9IDAsIGNvbnN0IFN0cmluZyYgY29tcG9zaXRlT3BlcmF0aW9u
ID0gZW1wdHlTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkeCA9
IDAsIGZsb2F0IGR5ID0gMCwgZmxvYXQgZHcgPSAwLCBmbG9hdCBkaCA9IDAsIGNvbnN0IFN0cmlu
ZyYgY29tcG9zaXRlT3BlcmF0aW9uID0gZW1wdHlTdHJpbmdSZWYoKSk7CiAKICAgICB2b2lkIHNl
dEFscGhhKGZsb2F0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9U
ZXh0VHJhY2tDdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUu
Y3BwCmluZGV4IDI5OWZjMWI3YzJlZGE2NDYzMjMwNTRhYWVlMmRjMzhjYzc0OTEwMGQuLmZmYzgz
NjMxNThhOTdjYjYxMjA4NDk0MGNjYjdlOTk1OGQ4ZDg3NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgc3RhdGljIGNvbnN0
IFN0cmluZyYgZW5kS2V5d29yZCgpCiAKIHN0YXRpYyBjb25zdCBTdHJpbmcmIGhvcml6b250YWxL
ZXl3b3JkKCkKIHsKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gZW1wdHlT
dHJpbmdSZWYoKTsKIH0KIAogc3RhdGljIGNvbnN0IFN0cmluZyYgdmVydGljYWxHcm93aW5nTGVm
dEtleXdvcmQoKQpAQCAtMjk1LDcgKzI5NSw3IEBAIGNvbnN0IFN0cmluZyYgVGV4dFRyYWNrQ3Vl
Ojp2ZXJ0aWNhbCgpIGNvbnN0CiAgICAgICAgIHJldHVybiB2ZXJ0aWNhbEdyb3dpbmdSaWdodEtl
eXdvcmQoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZ1Jl
ZigpOwogICAgIH0KIH0KIApAQCAtNDA0LDcgKzQwNCw3IEBAIGNvbnN0IFN0cmluZyYgVGV4dFRy
YWNrQ3VlOjphbGlnbigpIGNvbnN0CiAgICAgICAgIHJldHVybiBlbmRLZXl3b3JkKCk7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmdSZWYoKTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUVG9rZW5pemVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUVG9rZW5pemVyLmNwcAppbmRl
eCBlNDVmMWVkNmQ4MWVlYmFjNzEzYzVkYzA5Yzg5NDJlM2FlNzg4Y2FhLi5kNTJmMDRiYWFiN2Ri
OWQ5OGU1Y2UxMDZkNzgyMTJmMTk1ODYxOTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwCkBAIC01Miw2ICs1Miw3IEBAIGlubGluZSBib29sIE1h
cmt1cFRva2VuaXplckJhc2U8V2ViVlRUVG9rZW4sIFdlYlZUVFRva2VuaXplclN0YXRlPjo6c2hv
dWxkU2tpcE51CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy8vIEZJWE1FOiBXVEY6OlN0cmluZyBo
YXMgYSBtdWNoIGJldHRlciBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzLgogaW5saW5lIGJvb2wgdmVj
dG9yRXF1YWxzU3RyaW5nKGNvbnN0IFZlY3RvcjxVQ2hhciwgMzI+JiB2ZWN0b3IsIGNvbnN0IFN0
cmluZyYgc3RyaW5nKQogewogICAgIGlmICh2ZWN0b3Iuc2l6ZSgpICE9IHN0cmluZy5sZW5ndGgo
KSkKQEAgLTg4LDcgKzg5LDcgQEAgYm9vbCBXZWJWVFRUb2tlbml6ZXI6Om5leHRUb2tlbihTZWdt
ZW50ZWRTdHJpbmcmIHNvdXJjZSwgV2ViVlRUVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgV0VC
VlRUX0FEVkFOQ0VfVE8oRXNjYXBlU3RhdGUpOwogICAgICAgICB9IGVsc2UgaWYgKGNjID09ICc8
JykgewogICAgICAgICAgICAgaWYgKG1fdG9rZW4tPnR5cGUoKSA9PSBXZWJWVFRUb2tlblR5cGVz
OjpVbmluaXRpYWxpemVkCi0gICAgICAgICAgICAgICAgfHwgdmVjdG9yRXF1YWxzU3RyaW5nKG1f
dG9rZW4tPmNoYXJhY3RlcnMoKSwgZW1wdHlTdHJpbmcoKSkpCisgICAgICAgICAgICAgICAgfHwg
dmVjdG9yRXF1YWxzU3RyaW5nKG1fdG9rZW4tPmNoYXJhY3RlcnMoKSwgZW1wdHlTdHJpbmdSZWYo
KSkpCiAgICAgICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oVGFnU3RhdGUpOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW4oc291cmNl
LCBXZWJWVFRUb2tlbml6ZXJTdGF0ZTo6VGFnU3RhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAKaW5kZXggZmZhMDBhZDMzZjdlNTQ1ZTA5ZjUyMWRkNDhiMjg2YjA3NmQyZmI4
Ni4uNjFlOTI5ZjUwZGI3Y2Y1Nzk4ZGQ1ODRhNGEwZThkZjBlMGU3N2U0NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0yNTIsMTAgKzI1MiwxMSBAQCB2b2lkIEZyYW1l
TG9hZGVyOjppbml0KCkKICAgICAvLyBUaGlzIHNvbWV3aGF0IG9kZCBzZXQgb2Ygc3RlcHMgZ2l2
ZXMgdGhlIGZyYW1lIGFuIGluaXRpYWwgZW1wdHkgZG9jdW1lbnQuCiAgICAgLy8gSXQgd291bGQg
YmUgYmV0dGVyIGlmIHRoaXMgY291bGQgYmUgZG9uZSB3aXRoIGV2ZW4gZmV3ZXIgc3RlcHMuCiAg
ICAgbV9zdGF0ZU1hY2hpbmUuYWR2YW5jZVRvKEZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lOjpDcmVh
dGluZ0luaXRpYWxFbXB0eURvY3VtZW50KTsKLSAgICBzZXRQb2xpY3lEb2N1bWVudExvYWRlciht
X2NsaWVudC0+Y3JlYXRlRG9jdW1lbnRMb2FkZXIoUmVzb3VyY2VSZXF1ZXN0KEtVUkwoUGFyc2Vk
VVJMU3RyaW5nLCBlbXB0eVN0cmluZygpKSksIFN1YnN0aXR1dGVEYXRhKCkpLmdldCgpKTsKKyAg
ICAvLyBGSVhNRTogVGhlIEtVUkwgY29uc3RydWN0aW9ucyBsb29rcyB3cm9uZy4gQW4gZW1wdHkg
VVJMIGlzIGFuIGludmFsaWQgVVJMLiBJbnZhbGlkIFVSTHMgc2hvdWxkIGJlIGNyZWF0ZWQgd2l0
aCBLVVJMKCksIG5vdCB1c2luZyBQYXJzZWRVUkxTdHJpbmcuCisgICAgc2V0UG9saWN5RG9jdW1l
bnRMb2FkZXIobV9jbGllbnQtPmNyZWF0ZURvY3VtZW50TG9hZGVyKFJlc291cmNlUmVxdWVzdChL
VVJMKFBhcnNlZFVSTFN0cmluZywgZW1wdHlTdHJpbmdSZWYoKSkpLCBTdWJzdGl0dXRlRGF0YSgp
KS5nZXQoKSk7CiAgICAgc2V0UHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcihtX3BvbGljeURvY3Vt
ZW50TG9hZGVyLmdldCgpKTsKICAgICBzZXRTdGF0ZShGcmFtZVN0YXRlUHJvdmlzaW9uYWwpOwot
ICAgIG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlci0+c2V0UmVzcG9uc2UoUmVzb3VyY2VSZXNw
b25zZShLVVJMKCksICJ0ZXh0L2h0bWwiLCAwLCBTdHJpbmcoKSwgU3RyaW5nKCkpKTsKKyAgICBt
X3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPnNldFJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2Uo
S1VSTCgpLCBBU0NJSUxpdGVyYWwoInRleHQvaHRtbCIpLCAwLCBTdHJpbmcoKSwgU3RyaW5nKCkp
KTsKICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPmZpbmlzaGVkTG9hZGluZygpOwog
ICAgIEFTU0VSVCghbV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgbV9kb2N1bWVudExvYWRlci0+
d3JpdGVyKCktPmJlZ2luKEtVUkwoKSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJm
cmFtZUxvYWRlci5jcHAKaW5kZXggYzNiMzhhODdjODQ4N2M0MGEwYzNjM2VjOTllNTY5Y2Y2ZWQx
Zjg2Yy4uODU3ZjRiMGNjMzJlNWVjNTNjZTNiODkyZGY3OGExMjM1YTUxOTYxNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCkBAIC0yMDIsNyArMjAyLDcgQEAgc3Rh
dGljIHZvaWQgbG9nUGx1Z2luUmVxdWVzdChQYWdlKiBwYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBTdHJpbmcmIHUKICAgICBjbGllbnQtPmxvZ0RpYWdub3N0aWNNZXNzYWdlKHN1
Y2Nlc3MgPyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnBsdWdpbkxvYWRlZEtleSgpIDogRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpwbHVnaW5Mb2FkaW5nRmFpbGVkS2V5KCksIG5ld01JTUVUeXBlLCBE
aWFnbm9zdGljTG9nZ2luZ0tleXM6Om5vb3BLZXkoKSk7CiAgICAgCiAgICAgaWYgKCFwYWdlLT5o
YXNTZWVuQW55UGx1Z2luKCkpCi0gICAgICAgIGNsaWVudC0+bG9nRGlhZ25vc3RpY01lc3NhZ2Uo
RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpwYWdlQ29udGFpbnNBdExlYXN0T25lUGx1Z2luS2V5KCks
IGVtcHR5U3RyaW5nKCksIERpYWdub3N0aWNMb2dnaW5nS2V5czo6bm9vcEtleSgpKTsKKyAgICAg
ICAgY2xpZW50LT5sb2dEaWFnbm9zdGljTWVzc2FnZShEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnBh
Z2VDb250YWluc0F0TGVhc3RPbmVQbHVnaW5LZXkoKSwgZW1wdHlTdHJpbmdSZWYoKSwgRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpub29wS2V5KCkpOwogICAgIAogICAgIGlmICghcGFnZS0+aGFzU2Vl
blBsdWdpbihuZXdNSU1FVHlwZSkpCiAgICAgICAgIGNsaWVudC0+bG9nRGlhZ25vc3RpY01lc3Nh
Z2UoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpwYWdlQ29udGFpbnNQbHVnaW5LZXkoKSwgbmV3TUlN
RVR5cGUsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6bm9vcEtleSgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKaW5kZXgg
OTQyNDUyNjUwYjE1NTMzMjBkZDk2MjU0NDQwOGRjMzhjYjIwOTdlMC4uYmJiNzIxZjhiZGMwODgy
MmI4NDEzODkzN2M1YjRmZjc1MGIzNGJhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKQEAgLTUxNywxMCArNTE3LDEy
IEBAIFBhc3NSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRl
KGNvbnN0IFN0cmluZyYgbWFya3VwU3RyaW5nCiAgICAgCiAgICAgLy8gaXQncyBwb3NzaWJsZSB0
byBoYXZlIGEgcmVzcG9uc2Ugd2l0aG91dCBhIFVSTCBoZXJlCiAgICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzU0NTQ5MzU+Ci0gICAgaWYgKHJlc3BvbnNlVVJMLmlzTnVsbCgpKQotICAgICAgICByZXNw
b25zZVVSTCA9IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBlbXB0eVN0cmluZygpKTsKLSAgICAgICAg
Ci0gICAgUGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IG1haW5SZXNvdXJjZSA9IEFyY2hpdmVS
ZXNvdXJjZTo6Y3JlYXRlKHV0ZjhCdWZmZXIobWFya3VwU3RyaW5nKSwgcmVzcG9uc2VVUkwsIHJl
c3BvbnNlLm1pbWVUeXBlKCksICJVVEYtOCIsIGZyYW1lLT50cmVlKCktPnVuaXF1ZU5hbWUoKSk7
CisgICAgaWYgKHJlc3BvbnNlVVJMLmlzTnVsbCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGNvbnN0cnVjdG9yIGxvb2tzIHdyb25nLiBBbiBlbXB0eSBVUkwgaXMgYW4gaW52YWxpZCBVUkwu
IEludmFsaWQgVVJMcyBzaG91bGQgYmUgY3JlYXRlZCB3aXRoIEtVUkwoKSwgbm90IHVzaW5nIFBh
cnNlZFVSTFN0cmluZy4KKyAgICAgICAgcmVzcG9uc2VVUkwgPSBLVVJMKFBhcnNlZFVSTFN0cmlu
ZywgZW1wdHlTdHJpbmdSZWYoKSk7CisgICAgfQorCisgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJj
ZT4gbWFpblJlc291cmNlID0gQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUodXRmOEJ1ZmZlcihtYXJr
dXBTdHJpbmcpLCByZXNwb25zZVVSTCwgcmVzcG9uc2UubWltZVR5cGUoKSwgQVNDSUlMaXRlcmFs
KCJVVEYtOCIpLCBmcmFtZS0+dHJlZSgpLT51bmlxdWVOYW1lKCkpOwogCiAgICAgVmVjdG9yPFBh
c3NSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gPiBzdWJmcmFtZUFyY2hpdmVzOwogICAgIFZlY3Rv
cjxQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gPiBzdWJyZXNvdXJjZXM7CkBAIC01ODYsNyAr
NTg4LDcgQEAgUGFzc1JlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcmNoaXZlOjpj
cmVhdGUoY29uc3QgU3RyaW5nJiBtYXJrdXBTdHJpbmcKICAgICAgICAgfQogICAgIH0KIAotICAg
IHJldHVybiBjcmVhdGUobWFpblJlc291cmNlLCBzdWJyZXNvdXJjZXMsIHN1YmZyYW1lQXJjaGl2
ZXMpOworICAgIHJldHVybiBjcmVhdGUobWFpblJlc291cmNlLnJlbGVhc2UoKSwgc3VicmVzb3Vy
Y2VzLCBzdWJmcmFtZUFyY2hpdmVzKTsKIH0KIAogUGFzc1JlZlB0cjxMZWdhY3lXZWJBcmNoaXZl
PiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAppbmRleCAxYmY5
MDdmNTU2ODMyZTYwZmI0MThmNjllNTY1ZmYwMjJjZTUzZGJkLi5hZjMwOTljODZmMjMwZTE1NjZi
ZTdhMmIxOGU2M2Y3YzgzMTZmNWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nv
bnRlbnRTZWN1cml0eVBvbGljeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZW50
U2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0xMjY4LDcgKzEyNjgsNyBAQCB2b2lkIENvbnRlbnRTZWN1
cml0eVBvbGljeTo6c2V0T3ZlcnJpZGVBbGxvd0lubGluZVN0eWxlKGJvb2wgdmFsdWUpCiAKIGNv
bnN0IFN0cmluZyYgQ29udGVudFNlY3VyaXR5UG9saWN5OjpkZXByZWNhdGVkSGVhZGVyKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9wb2xpY2llcy5pc0VtcHR5KCkgPyBlbXB0eVN0cmluZygpIDog
bV9wb2xpY2llc1swXS0+aGVhZGVyKCk7CisgICAgcmV0dXJuIG1fcG9saWNpZXMuaXNFbXB0eSgp
ID8gZW1wdHlTdHJpbmdSZWYoKSA6IG1fcG9saWNpZXNbMF0tPmhlYWRlcigpOwogfQogCiBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRlclR5cGUgQ29udGVudFNlY3VyaXR5UG9saWN5OjpkZXBy
ZWNhdGVkSGVhZGVyVHlwZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXgg
ZDc4N2E2NWJkNmQ4MGM1NTBmOGQxMmEwZDRmMTMxZjc4NjFkMTdhZC4uMDVhY2RkM2JjOWM5YzVk
ZTY0MTYwMDY3NThiM2I5MDM5ODBkODJhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApA
QCAtMTc5Myw3ICsxNzkzLDggQEAgRnJhbWUqIERPTVdpbmRvdzo6Y3JlYXRlV2luZG93KGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW0KICAgICAvLyBGb3Ig
d2hhdGV2ZXIgcmVhc29uLCBGaXJlZm94IHVzZXMgdGhlIGZpcnN0IGZyYW1lIHRvIGRldGVybWlu
ZSB0aGUgb3V0Z29pbmdSZWZlcnJlci4gV2UgcmVwbGljYXRlIHRoYXQgYmVoYXZpb3IgaGVyZS4K
ICAgICBTdHJpbmcgcmVmZXJyZXIgPSBmaXJzdEZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZl
cnJlcigpOwogCi0gICAgS1VSTCBjb21wbGV0ZWRVUkwgPSB1cmxTdHJpbmcuaXNFbXB0eSgpID8g
S1VSTChQYXJzZWRVUkxTdHJpbmcsIGVtcHR5U3RyaW5nKCkpIDogZmlyc3RGcmFtZS0+ZG9jdW1l
bnQoKS0+Y29tcGxldGVVUkwodXJsU3RyaW5nKTsKKyAgICAvLyBGSVhNRTogVGhlIEtVUkwgY29u
c3RydWN0b3IgbG9va3Mgd3JvbmcuIEFuIGVtcHR5IFVSTCBpcyBhbiBpbnZhbGlkIFVSTC4gSW52
YWxpZCBVUkxzIHNob3VsZCBiZSBjcmVhdGVkIHdpdGggS1VSTCgpLCBub3QgdXNpbmcgUGFyc2Vk
VVJMU3RyaW5nLgorICAgIEtVUkwgY29tcGxldGVkVVJMID0gdXJsU3RyaW5nLmlzRW1wdHkoKSA/
IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBlbXB0eVN0cmluZ1JlZigpKSA6IGZpcnN0RnJhbWUtPmRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKHVybFN0cmluZyk7CiAgICAgaWYgKCFjb21wbGV0ZWRVUkwu
aXNFbXB0eSgpICYmICFjb21wbGV0ZWRVUkwuaXNWYWxpZCgpKSB7CiAgICAgICAgIC8vIERvbid0
IGV4cG9zZSBjbGllbnQgY29kZSB0byBpbnZhbGlkIFVSTHMuCiAgICAgICAgIGFjdGl2ZVdpbmRv
dy0+cHJpbnRFcnJvck1lc3NhZ2UoIlVuYWJsZSB0byBvcGVuIGEgd2luZG93IHdpdGggaW52YWxp
ZCBVUkwgJyIgKyBjb21wbGV0ZWRVUkwuc3RyaW5nKCkgKyAiJy5cbiIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xv
Y2F0aW9uLmNwcAppbmRleCAzNmIzNWM0ZGVlM2ZkZDc4NjAwMjhiODYyZjQ2NDhhOTU0ODNkZGE4
Li43YTRjM2RhZjg0ZmUxMmU2MWExZGFmN2YzMzI3OTUxMGJhZmMwNGY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0xvY2F0aW9uLmNwcApAQCAtOTYsNyArOTYsNyBAQCBTdHJpbmcgTG9jYXRpb246OnBvcnQoKSBj
b25zdAogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBjb25zdCBLVVJMJiB1cmwgPSB0
aGlzLT51cmwoKTsKLSAgICByZXR1cm4gdXJsLmhhc1BvcnQoKSA/IFN0cmluZzo6bnVtYmVyKHVy
bC5wb3J0KCkpIDogIiI7CisgICAgcmV0dXJuIHVybC5oYXNQb3J0KCkgPyBTdHJpbmc6Om51bWJl
cih1cmwucG9ydCgpKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKIFN0cmluZyBMb2NhdGlvbjo6cGF0
aG5hbWUoKSBjb25zdApAQCAtMTE0LDcgKzExNCw3IEBAIFN0cmluZyBMb2NhdGlvbjo6c2VhcmNo
KCkgY29uc3QKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgY29uc3QgS1VSTCYgdXJs
ID0gdGhpcy0+dXJsKCk7Ci0gICAgcmV0dXJuIHVybC5xdWVyeSgpLmlzRW1wdHkoKSA/IGVtcHR5
U3RyaW5nKCkgOiAiPyIgKyB1cmwucXVlcnkoKTsKKyAgICByZXR1cm4gdXJsLnF1ZXJ5KCkuaXNF
bXB0eSgpID8gZW1wdHlTdHJpbmcoKSA6IG1ha2VTdHJpbmcoJz8nLCB1cmwucXVlcnkoKSk7CiB9
CiAKIFN0cmluZyBMb2NhdGlvbjo6b3JpZ2luKCkgY29uc3QKQEAgLTE0MCw3ICsxNDAsNyBAQCBT
dHJpbmcgTG9jYXRpb246Omhhc2goKSBjb25zdAogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
ICAgICBjb25zdCBTdHJpbmcmIGZyYWdtZW50SWRlbnRpZmllciA9IHVybCgpLmZyYWdtZW50SWRl
bnRpZmllcigpOwotICAgIHJldHVybiBmcmFnbWVudElkZW50aWZpZXIuaXNFbXB0eSgpID8gZW1w
dHlTdHJpbmcoKSA6ICIjIiArIGZyYWdtZW50SWRlbnRpZmllcjsKKyAgICByZXR1cm4gZnJhZ21l
bnRJZGVudGlmaWVyLmlzRW1wdHkoKSA/IGVtcHR5U3RyaW5nKCkgOiBtYWtlU3RyaW5nKCcjJywg
ZnJhZ21lbnRJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBMb2NhdGlvbjo6c2V0SHJlZihjb25zdCBT
dHJpbmcmIHVybCwgRE9NV2luZG93KiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyogZmlyc3RXaW5k
b3cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMV1RGVVJMLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkxXVEZVUkwuY3BwCmluZGV4IGFlMmRhMWQxNWY1
OTI1MjQzNzhjN2FjZDAyMTZkYzg5MDMwOWMxMjAuLmRlMjIyZjg0NmU0OWM2ZmNjZjYyNTI4NjQ2
ZjBjZmRmYWYzMjJjYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkxX
VEZVUkwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkxXVEZVUkwuY3BwCkBA
IC0xMTMsNyArMTEzLDcgQEAgYm9vbCBLVVJMOjppc1ZhbGlkKCkgY29uc3QKIGNvbnN0IFN0cmlu
ZyYgS1VSTDo6c3RyaW5nKCkgY29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybiBudWxsQXRvbSgpOworICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmdSZWYoKTsKIAogICAg
IGlmIChpc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBtX3VybEltcGwtPm1fcGFyc2VkVVJMLnNw
ZWMoKS5zdHJpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZENocm9taXVtLmNwcAppbmRleCBiMDY1MjM3YjljMjViMWU5NjJhYjk2ZGNm
YWNiM2U1NDgxYTM5ZDQyLi40ODk1YjhmMzljMzNkZDQ1NzFmNTA2NmExOTQ5MGQ3ZDBjMTFjNzQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW0uY3BwCkBAIC0zODEsNyArMzgxLDcgQEAgc3RhdGljIHZvaWQgd3JpdGVJbWFn
ZVRvRGF0YU9iamVjdChDaHJvbWl1bURhdGFPYmplY3QqIGRhdGFPYmplY3QsIEVsZW1lbnQqIGVs
ZW0KIAogICAgIFN0cmluZyBleHRlbnNpb24gPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJy
ZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSgKICAgICAgICAgY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCku
bWltZVR5cGUoKSk7Ci0gICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uLmlzRW1wdHkoKSA/IGVtcHR5
U3RyaW5nKCkgOiAiLiIgKyBleHRlbnNpb247CisgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uLmlz
RW1wdHkoKSA/IGVtcHR5U3RyaW5nKCkgOiBtYWtlU3RyaW5nKCcuJywgZXh0ZW5zaW9uKTsKIAog
ICAgIENsaXBib2FyZENocm9taXVtOjp2YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lLCBleHRlbnNp
b24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRN
ZXRyaWNzQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRN
ZXRyaWNzQnVpbGRlci5jcHAKaW5kZXggNWFjODVjYmJlODQ3NzEwZmQ1YWUxZTIyZmYzZjMzNjIx
MTZhODVjMi4uZjlmMThjZjBkMWFlOGFmNTg1NTFmMDkxMTBjMzMxMGU4NTVhZTYyZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWls
ZGVyLmNwcApAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFNWR1RleHRNZXRyaWNzQnVpbGRlcjo6YWR2
YW5jZVNpbXBsZVRleHQoKQogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgbV9jdXJyZW50TWV0
cmljcyA9IFNWR1RleHRNZXRyaWNzKG1fdGV4dCwgbV90ZXh0UG9zaXRpb24sIG1ldHJpY3NMZW5n
dGgsIGN1cnJlbnRXaWR0aCwgbV9zaW1wbGVXaWR0aEl0ZXJhdG9yLT5sYXN0R2x5cGhOYW1lKCkp
OwogI2Vsc2UKLSAgICBtX2N1cnJlbnRNZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3MobV90ZXh0LCBt
X3RleHRQb3NpdGlvbiwgbWV0cmljc0xlbmd0aCwgY3VycmVudFdpZHRoLCBlbXB0eVN0cmluZygp
KTsKKyAgICBtX2N1cnJlbnRNZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3MobV90ZXh0LCBtX3RleHRQ
b3NpdGlvbiwgbWV0cmljc0xlbmd0aCwgY3VycmVudFdpZHRoLCBlbXB0eVN0cmluZ1JlZigpKTsK
ICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9u
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAK
aW5kZXggNmFjZTYxYmVlOWRkOTA1M2E4YmFjM2UwZTRkZWY5NTc1MTZmYjEzYi4uZGM5M2M4NDJh
ZTAyM2FiZGNhYTdmZjRmNmM0OTYxNjZlNTA0MmJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRpb25FbGVtZW50LmNwcApAQCAtNTQ5LDExICs1NDksMTEgQEAgdm9pZCBTVkdBbmlt
YXRpb25FbGVtZW50OjpzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKQogICAgIGVsc2UgaWYgKGFuaW1h
dGlvbk1vZGUgPT0gVG9BbmltYXRpb24pIHsKICAgICAgICAgLy8gRm9yIHRvLWFuaW1hdGlvbnMg
dGhlIGZyb20gdmFsdWUgaXMgdGhlIGN1cnJlbnQgYWNjdW11bGF0ZWQgdmFsdWUgZnJvbSBsb3dl
ciBwcmlvcml0eSBhbmltYXRpb25zLgogICAgICAgICAvLyBUaGUgdmFsdWUgaXMgbm90IHN0YXRp
YyBhbmQgaXMgZGV0ZXJtaW5lZCBkdXJpbmcgdGhlIGFuaW1hdGlvbi4KLSAgICAgICAgbV9hbmlt
YXRpb25WYWxpZCA9IGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhlbXB0eVN0cmluZygpLCB0byk7
CisgICAgICAgIG1fYW5pbWF0aW9uVmFsaWQgPSBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoZW1w
dHlTdHJpbmdSZWYoKSwgdG8pOwogICAgIH0gZWxzZSBpZiAoYW5pbWF0aW9uTW9kZSA9PSBGcm9t
QnlBbmltYXRpb24pCiAgICAgICAgIG1fYW5pbWF0aW9uVmFsaWQgPSBjYWxjdWxhdGVGcm9tQW5k
QnlWYWx1ZXMoZnJvbSwgYnkpOwogICAgIGVsc2UgaWYgKGFuaW1hdGlvbk1vZGUgPT0gQnlBbmlt
YXRpb24pCi0gICAgICAgIG1fYW5pbWF0aW9uVmFsaWQgPSBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1
ZXMoZW1wdHlTdHJpbmcoKSwgYnkpOworICAgICAgICBtX2FuaW1hdGlvblZhbGlkID0gY2FsY3Vs
YXRlRnJvbUFuZEJ5VmFsdWVzKGVtcHR5U3RyaW5nUmVmKCksIGJ5KTsKICAgICBlbHNlIGlmIChh
bmltYXRpb25Nb2RlID09IFZhbHVlc0FuaW1hdGlvbikgewogICAgICAgICBtX2FuaW1hdGlvblZh
bGlkID0gbV92YWx1ZXMuc2l6ZSgpID49IDEKICAgICAgICAgICAgICYmIChjYWxjTW9kZSA9PSBD
YWxjTW9kZVBhY2VkIHx8ICFmYXN0SGFzQXR0cmlidXRlKFNWR05hbWVzOjprZXlUaW1lc0F0dHIp
IHx8IGZhc3RIYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmtleVBvaW50c0F0dHIpIHx8IChtX3ZhbHVl
cy5zaXplKCkgPT0gbV9rZXlUaW1lcy5zaXplKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9u
dEZhY2VFbGVtZW50LmNwcAppbmRleCA3YzY3NjQ4NWY3ZDAxMjI3OWI5NjE5Y2YxZDE1ZTAyYWEy
YTE0ZWQzLi5mODE1YTJhODI3ZDViMjVhMDEyYjMyYWNkOGQ2OTFkYzE3ZDZmZmEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcApAQCAtMzMxLDcgKzMzMSw3IEBA
IHZvaWQgU1ZHRm9udEZhY2VFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlKiByb290
UGFyZW50KQogCiAgICAgaWYgKHJvb3RQYXJlbnQtPmluRG9jdW1lbnQoKSkgewogICAgICAgICBk
b2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnVucmVnaXN0ZXJTVkdGb250RmFjZUVs
ZW1lbnQodGhpcyk7Ci0gICAgICAgIG1fZm9udEZhY2VSdWxlLT5tdXRhYmxlUHJvcGVydGllcygp
LT5wYXJzZURlY2xhcmF0aW9uKGVtcHR5U3RyaW5nKCksIDApOworICAgICAgICBtX2ZvbnRGYWNl
UnVsZS0+bXV0YWJsZVByb3BlcnRpZXMoKS0+cGFyc2VEZWNsYXJhdGlvbihlbXB0eVN0cmluZ1Jl
ZigpLCAwKTsKIAogICAgICAgICBkb2N1bWVudCgpLT5zdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZl
clJlY2FsY1N0eWxlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
U3RyaW5nTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RyaW5nTGlzdC5jcHAKaW5k
ZXggYTBkOWUzYjE5M2NhZDcxYzRmMjRmYWRjMzRlMzE3MGViNmMzZmMxMS4uY2I2NjY2Mzk5NmNl
YjM4OTQ1NzQ3MGI3N2RhYWRmY2JkNGJhMWZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1N0cmluZ0xpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHJpbmdM
aXN0LmNwcApAQCAtNDIsNyArNDIsNyBAQCB2b2lkIFNWR1N0cmluZ0xpc3Q6OnJlc2V0KGNvbnN0
IFN0cmluZyYgc3RyaW5nKQogCiAgICAgLy8gQWRkIGVtcHR5IHN0cmluZywgaWYgbGlzdCBpcyBl
bXB0eS4KICAgICBpZiAoaXNFbXB0eSgpKQotICAgICAgICBhcHBlbmQoZW1wdHlTdHJpbmcoKSk7
CisgICAgICAgIGFwcGVuZChlbXB0eVN0cmluZ1JlZigpKTsKIH0KIAogdm9pZCBTVkdTdHJpbmdM
aXN0OjpwYXJzZShjb25zdCBTdHJpbmcmIGRhdGEsIFVDaGFyIGRlbGltaXRlcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RyYW5zZm9ybS5jcHAKaW5kZXggZTEzNjM2NmU4MDEzZjUxZDFiYTM0ZDk4YzFhY2Iy
ZGFkYTFlYzkxZS4uYjlkYmEwNGRjZjRiOWMwZjEzZWE5NGUzODhlZWQyMjg1MDM5NmY4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybS5jcHAKQEAgLTEzNSw3ICsxMzUsNyBAQCBjb25zdCBT
dHJpbmcmIFNWR1RyYW5zZm9ybTo6dHJhbnNmb3JtVHlwZVByZWZpeEZvclBhcnNpbmcoU1ZHVHJh
bnNmb3JtVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgU1ZHX1RS
QU5TRk9STV9VTktOT1dOOgotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nUmVmKCk7CiAgICAgY2FzZSBTVkdfVFJBTlNGT1JNX01BVFJJWDog
ewogICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgbWF0cml4U3RyaW5nLCAoQVND
SUlMaXRlcmFsKCJtYXRyaXgoIikpKTsKICAgICAgICAgcmV0dXJuIG1hdHJpeFN0cmluZzsKQEAg
LTE2Myw3ICsxNjMsNyBAQCBjb25zdCBTdHJpbmcmIFNWR1RyYW5zZm9ybTo6dHJhbnNmb3JtVHlw
ZVByZWZpeEZvclBhcnNpbmcoU1ZHVHJhbnNmb3JtVHlwZSB0eXBlKQogICAgIH0KIAogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgIHJldHVy
biBlbXB0eVN0cmluZ1JlZigpOwogfQogCiBTdHJpbmcgU1ZHVHJhbnNmb3JtOjp2YWx1ZUFzU3Ry
aW5nKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTG9j
YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5jcHAKaW5k
ZXggZWI3NmE4Yjc4Y2Q1MzZjODJkZWViNTQzMzIzOGNjMTMzOTY2NjZmMC4uOTdiMzM2MTkzNDkw
OGY3YjMyYjRmYjNlMmMwMDk1YTg1NTI0ZmQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJMb2NhdGlvbi5jcHAKQEAgLTY2LDEyICs2NiwxMiBAQCBTdHJpbmcgV29ya2VyTG9jYXRp
b246OnBhdGhuYW1lKCkgY29uc3QKIAogU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpzZWFyY2goKSBj
b25zdAogewotICAgIHJldHVybiBtX3VybC5xdWVyeSgpLmlzRW1wdHkoKSA/IGVtcHR5U3RyaW5n
KCkgOiAiPyIgKyBtX3VybC5xdWVyeSgpOworICAgIHJldHVybiBtX3VybC5xdWVyeSgpLmlzRW1w
dHkoKSA/IGVtcHR5U3RyaW5nKCkgOiBtYWtlU3RyaW5nKCc/JywgbV91cmwucXVlcnkoKSk7CiB9
CiAKIFN0cmluZyBXb3JrZXJMb2NhdGlvbjo6aGFzaCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
dXJsLmZyYWdtZW50SWRlbnRpZmllcigpLmlzRW1wdHkoKSA/IGVtcHR5U3RyaW5nKCkgOiAiIyIg
KyBtX3VybC5mcmFnbWVudElkZW50aWZpZXIoKTsKKyAgICByZXR1cm4gbV91cmwuZnJhZ21lbnRJ
ZGVudGlmaWVyKCkuaXNFbXB0eSgpID8gZW1wdHlTdHJpbmcoKSA6IG1ha2VTdHJpbmcoJyMnLCBt
X3VybC5mcmFnbWVudElkZW50aWZpZXIoKSk7CiB9CiAKIAo=
</data>
<flag name="review"
          id="173752"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>