<?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>124183</bug_id>
          
          <creation_ts>2013-11-11 21:33:16 -0800</creation_ts>
          <short_desc>Make IDBTransaction tasks asynchronous</short_desc>
          <delta_ts>2013-11-11 22:35:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>philn</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>949535</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-11 21:33:16 -0800</bug_when>
    <thetext>Make IDBTransaction tasks asynchronous

This is almost zero change in behavior for now, but makes it much easier to continue fleshing out an asynchronous layer between the frontend/backend and the backing store.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949537</commentid>
    <comment_count>1</comment_count>
      <attachid>216632</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-11 21:51:43 -0800</bug_when>
    <thetext>Created attachment 216632
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949538</commentid>
    <comment_count>2</comment_count>
      <attachid>216632</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-11 21:56:33 -0800</bug_when>
    <thetext>Comment on attachment 216632
Patch v1 

Attachment 216632 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/21249597</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949539</commentid>
    <comment_count>3</comment_count>
      <attachid>216632</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-11-11 21:59:23 -0800</bug_when>
    <thetext>Comment on attachment 216632
Patch v1 

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

&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackend.cpp:44
&gt; +class CallbackCaller {

I feel like there&apos;s a name for this.

&gt; Source/WebCore/Modules/indexeddb/IDBOperation.h:29
&gt; +#include &lt;Functional&gt;

capital F, really?

&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.cpp:245
&gt; +    // Take take a self reference to keep this object alive so that tasks can

Take take

&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.cpp:254
&gt; +        {

not sure if this belongs here or on the previous line.

&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.cpp:41
&gt; +class CallbackCaller {

déjà vu?

&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.cpp:382
&gt; +void IDBDatabaseBackend::VersionChangeOperation::perform(std::function&lt;void()&gt; completionCallback)

Wonder if your std::function deserves a typedef too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949542</commentid>
    <comment_count>4</comment_count>
      <attachid>216633</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-11 22:11:46 -0800</bug_when>
    <thetext>Created attachment 216633
Patch v2 - Whoops on the &lt;Functional&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949556</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-11 22:35:37 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/159095</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216632</attachid>
            <date>2013-11-11 21:51:43 -0800</date>
            <delta_ts>2013-11-11 22:11:46 -0800</delta_ts>
            <desc>Patch v1 </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>39664</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4M2ExMzhiLi5hOWU2YzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsODEg
QEAKIDIwMTMtMTEtMTEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIE1ha2UgSURCVHJhbnNhY3Rpb24gdGFza3MgYXN5bmNocm9ub3VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQxODMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGFuIGFsbW9zdCB6ZXJv
LWNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICBUaGUgb25lIHRoaW5nIHRoYXQgaXMgZGlm
ZmVyZW50IGlzIHRoYXQgcHJldmlvdXNseSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kcyB3b3VsZCBz
eW5jaHJvbm91c2x5CisgICAgICAgIHJ1biB0aHJvdWdoIHRoZWlyIGVudGlyZSBzZXQgb2YgSURC
T3BlcmF0aW9u4oCZcyB3aXRob3V0IGV2ZXIgcmV0dXJuaW5nIGNvbnRyb2wgdG8gdGhlIHJ1bmxv
b3AuCisKKyAgICAgICAgTm93LCB0aGV5IHN0YXJ0IG9uZSB0YXNrIGFuZCB0aGVuIHdhaXQgZm9y
IGl0cyBjb21wbGV0aW9uIHRvIHNjaGVkdWxlIHRoZSBzdGFydCBvZiB0aGUgbmV4dCB0YXNrLgor
CisgICAgICAgIENoYW5nZSBJREJPcGVyYXRpb27igJlzIHBlcmZvcm0oKSB0byB0YWtlIGEgY29t
cGxldGlvbiBoYW5kbGVyIHNvIGl0IGNhbiBiZSBhc3luY2hyb25vdXMuCisgICAgICAgIEFkZCBh
biBJREJTeW5jaHJvbm91c09wZXJhdGlvbiBjbGFzcyB0byBoYW5kbGUgIkFib3J0IiB0YXNrcywg
d2hpY2ggbmV2ZXIgbmVlZCB0byBwZXJmb3JtIGkvbworICAgICAgICBhbmQgdGhlcmVmb3JlIGNh
biBiZSBlbnRpcmVseSBzeW5jaHJvbm91cy4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJPcGVyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlN5bmNocm9ub3VzT3BlcmF0aW9u
Ojp+SURCU3luY2hyb25vdXNPcGVyYXRpb24pOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZDo6c2NoZWR1bGVUYXNrKTogIkFib3J0IHRhc2tzIiBhcmUgbm93IElEQlN5
bmNocm9ub3VzT3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZDo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kOjp0
YXNrVGltZXJGaXJlZCk6IEluc3RlYWQgb2YgcnVubmluZyB0aHJvdWdoIHRoZSBlbnRpcmUgc2V0
IG9mIHRhc2tzLAorICAgICAgICAgIHBlcmZvcm0gYSBzaW5nbGUgdGFzayBhc3luY2hyb25vdXNs
eS4gVGhlIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgdGhlIHRhc2sgd2lsbCByZXNldCB0aGUgdGFz
ayB0aW1lcgorICAgICAgICAgIHRvIGFzeW5jaHJvbm91c2x5IHN0YXJ0IHRoZSBuZXh0IHRhc2su
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlVGFzayk6ICJB
Ym9ydCB0YXNrcyIgYXJlIG5vdyBJREJTeW5jaHJvbm91c09wZXJhdGlvbnMuCisKKyAgICAgICAg
VXBkYXRlIGFsbCBvcGVyYXRpb25zIHRvIHRha2UgY29tcGxldGlvbiBoYW5kbGVycy4KKyAgICAg
ICAgRm9yIG5vdywgcGVyZm9ybSB0aGluZ3Mgc3luY2hyb25vdXNseSBsaWtlIGJlZm9yZSwgY2Fs
bGluZyB0aGUgY29tcGxldGlvbiBoYW5kbGVyIHdoZW4gY29tcGxldGUuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YWxsYmFja0NhbGxlcjo6Q2FsbGJhY2tDYWxsZXIpOiBIZWxwZXIgY2xhc3MgdG8gbWFrZSBzdXJl
IGNvbXBsZXRpb24gY2FsbGJhY2tzIGFyZSBhbHdheXMgY2FsbGVkIGFzeW5jaHJvbm91c2x5Lgor
ICAgICAgICAoV2ViQ29yZTo6Q2FsbGJhY2tDYWxsZXI6On5DYWxsYmFja0NhbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kOjpDdXJzb3JBZHZh
bmNlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2Vu
ZDo6Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpwZXJmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmQ6OkN1cnNvckl0ZXJhdGlvbk9w
ZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kOjpD
dXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybSk6CisKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbGxiYWNrQ2FsbGVyOjpDYWxsYmFja0NhbGxlcik6IEhlbHBlciBj
bGFzcyB0byBtYWtlIHN1cmUgY29tcGxldGlvbiBjYWxsYmFja3MgYXJlIGFsd2F5cyBjYWxsZWQg
YXN5bmNocm9ub3VzbHkuCisgICAgICAgIChXZWJDb3JlOjpDYWxsYmFja0NhbGxlcjo6fkNhbGxi
YWNrQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZUluZGV4T3BlcmF0aW9uOjpwZXJm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpQdXRPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6U2V0SW5kZXhl
c1JlYWR5T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JP
cGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q291bnRPcGVyYXRpb246OnBl
cmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlUmFuZ2VPcGVyYXRpb246OnBlcmZvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpwZXJm
b3JtKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0
aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRp
b246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNp
b25DaGFuZ2VPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVPYmpl
Y3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRl
T2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R2V0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UHV0T3BlcmF0aW9uOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVsZXRlUmFuZ2VPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGVh
ck9wZXJhdGlvbjo6Y3JlYXRlKToKKworMjAxMy0xMS0xMSAgQnJhZHkgRWlkc29uICA8YmVpZHNv
bkBhcHBsZS5jb20+CisKICAgICAgICAgTWFrZSBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiBi
ZSBSZWZDb3VudGVkCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjQxNjgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kLmNwcAppbmRleCAyN2Q2NDdlLi41YmRiNGZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmNw
cApAQCAtNDEsMTMgKzQxLDI4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ2Fs
bGJhY2tDYWxsZXIgeworcHVibGljOgorICAgIENhbGxiYWNrQ2FsbGVyKHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPiBjYWxsYmFjaykKKyAgICAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgIHsg
fQorCisgICAgfkNhbGxiYWNrQ2FsbGVyKCkKKyAgICB7CisgICAgICAgIG1fY2FsbGJhY2soKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IG1fY2FsbGJhY2s7
Cit9OworCiBjbGFzcyBJREJDdXJzb3JCYWNrZW5kOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24g
OiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJ
REJPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciwg
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uKGN1cnNvciwga2V5LCBjYWxsYmFja3Mp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24o
Y3Vyc29yLCBrZXksIGNhbGxiYWNrcykpOwogICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bSgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOwogcHJpdmF0ZToK
ICAgICBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24oUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5k
PiBjdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCiAgICAgICAgIDogbV9jdXJzb3IoY3Vyc29yKQpAQCAtNjMsMTEgKzc4LDEx
IEBAIHByaXZhdGU6CiAKIGNsYXNzIElEQkN1cnNvckJhY2tlbmQ6OkN1cnNvckFkdmFuY2VPcGVy
YXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1
cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVm
UHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbihjdXJzb3IsIGNvdW50LCBjYWxsYmFja3Mp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uKGN1
cnNvciwgY291bnQsIGNhbGxiYWNrcykpOwogICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bSgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOwogcHJpdmF0ZToK
ICAgICBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4g
Y3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQogICAgICAgICA6IG1fY3Vyc29yKGN1cnNvcikKQEAgLTgzLDExICs5OCwxMSBAQCBw
cml2YXRlOgogCiBjbGFzcyBJREJDdXJzb3JCYWNrZW5kOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlv
bk9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2Vu
ZD4gY3Vyc29yLCBpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShQYXNz
UmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciwgaW50IG51bWJlclRvRmV0Y2gsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uKGN1cnNvciwgbnVtYmVy
VG9GZXRjaCwgY2FsbGJhY2tzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3Vyc29y
UHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb24oY3Vyc29yLCBudW1iZXJUb0ZldGNoLCBjYWxsYmFj
a3MpKTsKICAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsK
KyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlv
bkNhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKIHByaXZhdGU6CiAgICAgQ3Vyc29yUHJlZmV0Y2hJ
dGVyYXRpb25PcGVyYXRpb24oUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBjdXJzb3IsIGlu
dCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAg
ICAgICA6IG1fY3Vyc29yKGN1cnNvcikKQEAgLTEzMyw4ICsxNDgsMTAgQEAgdm9pZCBJREJDdXJz
b3JCYWNrZW5kOjphZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBwcnAKICAgICBtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3Vyc29yQWR2YW5j
ZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGNvdW50LCBjYWxsYmFja3MpKTsKIH0KIAotdm9pZCBJ
REJDdXJzb3JCYWNrZW5kOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpwZXJmb3JtKCkKK3ZvaWQg
SURCQ3Vyc29yQmFja2VuZDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogeworICAgIENhbGxiYWNrQ2FsbGVy
IGNhbGxiYWNrQ2FsbGVyKGNvbXBsZXRpb25DYWxsYmFjayk7CisKICAgICBMT0coU3RvcmFnZUFQ
SSwgIkN1cnNvckFkdmFuY2VPcGVyYXRpb24iKTsKICAgICBpZiAoIW1fY3Vyc29yLT5tX2N1cnNv
ciB8fCAhbV9jdXJzb3ItPm1fY3Vyc29yLT5hZHZhbmNlKG1fY291bnQpKSB7CiAgICAgICAgIG1f
Y3Vyc29yLT5tX2N1cnNvciA9IDA7CkBAIC0xNDUsOCArMTYyLDEwIEBAIHZvaWQgSURCQ3Vyc29y
QmFja2VuZDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6cGVyZm9ybSgpCiAgICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2VzcyhtX2N1cnNvci0+a2V5KCksIG1fY3Vyc29yLT5wcmltYXJ5S2V5KCksIG1f
Y3Vyc29yLT52YWx1ZSgpKTsKIH0KIAotdm9pZCBJREJDdXJzb3JCYWNrZW5kOjpDdXJzb3JJdGVy
YXRpb25PcGVyYXRpb246OnBlcmZvcm0oKQordm9pZCBJREJDdXJzb3JCYWNrZW5kOjpDdXJzb3JJ
dGVyYXRpb25PcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRp
b25DYWxsYmFjaykKIHsKKyAgICBDYWxsYmFja0NhbGxlciBjYWxsYmFja0NhbGxlcihjb21wbGV0
aW9uQ2FsbGJhY2spOworCiAgICAgTE9HKFN0b3JhZ2VBUEksICJDdXJzb3JJdGVyYXRpb25PcGVy
YXRpb24iKTsKICAgICBpZiAoIW1fY3Vyc29yLT5tX2N1cnNvciB8fCAhbV9jdXJzb3ItPm1fY3Vy
c29yLT5jb250aW51ZUZ1bmN0aW9uKG1fa2V5LmdldCgpKSkgewogICAgICAgICBtX2N1cnNvci0+
bV9jdXJzb3IgPSAwOwpAQCAtMTcyLDggKzE5MSwxMCBAQCB2b2lkIElEQkN1cnNvckJhY2tlbmQ6
OnByZWZldGNoQ29udGludWUoaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
YwogICAgIG1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhtX3Rhc2tUeXBlLCBDdXJzb3JQcmVm
ZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG51bWJlclRvRmV0Y2gsIGNhbGxi
YWNrcykpOwogfQogCi12b2lkIElEQkN1cnNvckJhY2tlbmQ6OkN1cnNvclByZWZldGNoSXRlcmF0
aW9uT3BlcmF0aW9uOjpwZXJmb3JtKCkKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZDo6Q3Vyc29yUHJl
ZmV0Y2hJdGVyYXRpb25PcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNv
bXBsZXRpb25DYWxsYmFjaykKIHsKKyAgICBDYWxsYmFja0NhbGxlciBjYWxsYmFja0NhbGxlcihj
b21wbGV0aW9uQ2FsbGJhY2spOworCiAgICAgTE9HKFN0b3JhZ2VBUEksICJDdXJzb3JQcmVmZXRj
aEl0ZXJhdGlvbk9wZXJhdGlvbiIpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiBmb3Vu
ZEtleXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
cGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZXJhdGlv
bi5oCmluZGV4IGEzMGMwNjguLjU4MjFhNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9wZXJhdGlvbi5oCkBAIC0yNiwxMyArMjYsMjEgQEAKICNpZm5kZWYg
SURCT3BlcmF0aW9uX2gKICNkZWZpbmUgSURCT3BlcmF0aW9uX2gKIAorI2luY2x1ZGUgPEZ1bmN0
aW9uYWw+CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBJREJPcGVyYXRpb24geworY2xhc3MgSURCT3BlcmF0aW9uIDogcHVibGlj
IFJlZkNvdW50ZWQ8SURCT3BlcmF0aW9uPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCT3Bl
cmF0aW9uKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworfTsKKworY2xhc3MgSURCU3luY2hyb25vdXNP
cGVyYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gewor
cHVibGljOgorICAgIHZpcnR1YWwgfklEQlN5bmNocm9ub3VzT3BlcmF0aW9uKCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm0oKSA9IDA7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAppbmRl
eCBmYjNmZDk5Li41ZGQ1OTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKQEAgLTc0LDcgKzc0LDcg
QEAgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjp+SURCVHJhbnNhY3Rpb25CYWNrZW5kKCkKICAgICBB
U1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7CiB9CiAKLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kOjpzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0eXBlLCBQYXNz
T3duUHRyPElEQk9wZXJhdGlvbj4gdGFzaywgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGFib3J0
VGFzaykKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZVRhc2soSURCRGF0YWJh
c2VCYWNrZW5kOjpUYXNrVHlwZSB0eXBlLCBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4gdGFzaywg
UGFzc1JlZlB0cjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gYWJvcnRUYXNrKQogewogICAgIGlm
IChtX3N0YXRlID09IEZpbmlzaGVkKQogICAgICAgICByZXR1cm47CkBAIC0xMTksNyArMTE5LDcg
QEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4gZXJyb3IpCiAKICAgICAvLyBSdW4gdGhlIGFib3J0IHRhc2tzLCBpZiBhbnkuCiAg
ICAgd2hpbGUgKCFtX2Fib3J0VGFza1F1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBPd25QdHI8
SURCT3BlcmF0aW9uPiB0YXNrKG1fYWJvcnRUYXNrUXVldWUudGFrZUZpcnN0KCkpOworICAgICAg
ICBSZWZQdHI8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IHRhc2sobV9hYm9ydFRhc2tRdWV1ZS50
YWtlRmlyc3QoKSk7CiAgICAgICAgIHRhc2stPnBlcmZvcm0oKTsKICAgICB9CiAKQEAgLTIzNSwy
NiArMjM1LDI3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpjb21taXQoKQogdm9pZCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9u
QmFja2VuZD4qKQogewogICAgIExPRyhTdG9yYWdlQVBJLCAiSURCVHJhbnNhY3Rpb25CYWNrZW5k
Ojp0YXNrVGltZXJGaXJlZCIpOwotICAgIEFTU0VSVCghaXNUYXNrUXVldWVFbXB0eSgpKTsKIAog
ICAgIGlmIChtX3N0YXRlID09IFN0YXJ0UGVuZGluZykgewogICAgICAgICBtX2JhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uLT5iZWdpbigpOwogICAgICAgICBtX3N0YXRlID0gUnVubmluZzsKICAgICB9
CiAKLSAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVh
c2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCi0gICAgLy8gdGFza3MuIFRha2UgdGFrZSBhIHNlbGYg
cmVmZXJlbmNlIHRvIGtlZXAgdGhpcyBvYmplY3QgYWxpdmUgc28gdGhhdAotICAgIC8vIHRoZSBs
b29wIHRlcm1pbmF0aW9uIGNvbmRpdGlvbnMgY2FuIGJlIGNoZWNrZWQuCi0gICAgUmVmPElEQlRy
YW5zYWN0aW9uQmFja2VuZD4gcHJvdGVjdCgqdGhpcyk7CisgICAgLy8gVGhlIGxhc3QgcmVmZXJl
bmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIGEgdGFz
ay4KKyAgICAvLyBUYWtlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIHRoaXMgb2JqZWN0
IGFsaXZlIHNvIHRoYXQgdGFza3MgY2FuCisgICAgLy8gc3VjY2Vzc2Z1bGx5IG1ha2UgdGhlaXIg
Y29tcGxldGlvbiBjYWxsYmFja3MuCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4g
c2VsZih0aGlzKTsKIAogICAgIFRhc2tRdWV1ZSogdGFza1F1ZXVlID0gbV9wZW5kaW5nUHJlZW1w
dGl2ZUV2ZW50cyA/ICZtX3ByZWVtcHRpdmVUYXNrUXVldWUgOiAmbV90YXNrUXVldWU7Ci0gICAg
d2hpbGUgKCF0YXNrUXVldWUtPmlzRW1wdHkoKSAmJiBtX3N0YXRlICE9IEZpbmlzaGVkKSB7Cisg
ICAgaWYgKCF0YXNrUXVldWUtPmlzRW1wdHkoKSAmJiBtX3N0YXRlICE9IEZpbmlzaGVkKSB7CiAg
ICAgICAgIEFTU0VSVChtX3N0YXRlID09IFJ1bm5pbmcpOwotICAgICAgICBPd25QdHI8SURCT3Bl
cmF0aW9uPiB0YXNrKHRhc2tRdWV1ZS0+dGFrZUZpcnN0KCkpOwotICAgICAgICB0YXNrLT5wZXJm
b3JtKCk7CisgICAgICAgIFJlZlB0cjxJREJPcGVyYXRpb24+IHRhc2sodGFza1F1ZXVlLT50YWtl
Rmlyc3QoKSk7CisgICAgICAgIHRhc2stPnBlcmZvcm0oW3NlbGYsIHRoaXMsIHRhc2tdKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV90YXNrVGltZXIuc3RhcnRPbmVTaG90KDApOworICAgICAg
ICB9KTsKIAotICAgICAgICAvLyBFdmVudCBpdHNlbGYgbWF5IGNoYW5nZSB3aGljaCBxdWV1ZSBz
aG91bGQgYmUgcHJvY2Vzc2VkIG5leHQuCi0gICAgICAgIHRhc2tRdWV1ZSA9IG1fcGVuZGluZ1By
ZWVtcHRpdmVFdmVudHMgPyAmbV9wcmVlbXB0aXZlVGFza1F1ZXVlIDogJm1fdGFza1F1ZXVlOwor
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcg
dGFza3MsIHdlIGhhdmVuJ3QgYWxyZWFkeSBjb21taXR0ZWQvYWJvcnRlZCwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
LmgKaW5kZXggYWM3MjA2Ny4uMjgxZDFmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgKQEAgLTU2LDggKzU2
LDggQEAgcHVibGljOgogICAgIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUoKSBjb25z
dCAgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgc2NvcGUo
KSBjb25zdCAgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlkczsgfQogCi0gICAgdm9pZCBzY2hlZHVs
ZVRhc2soUGFzc093blB0cjxJREJPcGVyYXRpb24+IHRhc2ssIFBhc3NPd25QdHI8SURCT3BlcmF0
aW9uPiBhYm9ydFRhc2sgPSBudWxscHRyKSB7IHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tl
bmQ6Ok5vcm1hbFRhc2ssIHRhc2ssIGFib3J0VGFzayk7IH0KLSAgICB2b2lkIHNjaGVkdWxlVGFz
ayhJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4s
IFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBhYm9ydFRhc2sgPSBudWxscHRyKTsKKyAgICB2b2lk
IHNjaGVkdWxlVGFzayhQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4gdGFzaywgUGFzc1JlZlB0cjxJ
REJTeW5jaHJvbm91c09wZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cikgeyBzY2hlZHVsZVRh
c2soSURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrLCB0YXNrLCBhYm9ydFRhc2spOyB9Cisg
ICAgdm9pZCBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgUGFzc1Jl
ZlB0cjxJREJPcGVyYXRpb24+LCBQYXNzUmVmUHRyPElEQlN5bmNocm9ub3VzT3BlcmF0aW9uPiBh
Ym9ydFRhc2sgPSBudWxscHRyKTsKIAogICAgIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1
cnNvckJhY2tlbmQqKTsKICAgICB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJh
Y2tlbmQqKTsKQEAgLTExMSwxMCArMTExLDEwIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKICAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kPiBtX2RhdGFiYXNlOwogCi0gICAgdHlwZWRlZiBEZXF1ZTxPd25QdHI8SURCT3BlcmF0aW9u
Pj4gVGFza1F1ZXVlOworICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRyPElEQk9wZXJhdGlvbj4+IFRh
c2tRdWV1ZTsKICAgICBUYXNrUXVldWUgbV90YXNrUXVldWU7CiAgICAgVGFza1F1ZXVlIG1fcHJl
ZW1wdGl2ZVRhc2tRdWV1ZTsKLSAgICBUYXNrUXVldWUgbV9hYm9ydFRhc2tRdWV1ZTsKKyAgICBE
ZXF1ZTxSZWZQdHI8SURCU3luY2hyb25vdXNPcGVyYXRpb24+PiBtX2Fib3J0VGFza1F1ZXVlOwog
CiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlPiBtX2JhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMu
Y3BwCmluZGV4IGQ2OTY2MjMuLmUzMGU2NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9w
ZXJhdGlvbnMuY3BwCkBAIC0zOCw4ICszOCwyNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXZvaWQgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oKQorY2xhc3MgQ2FsbGJh
Y2tDYWxsZXIgeworcHVibGljOgorICAgIENhbGxiYWNrQ2FsbGVyKHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPiBjYWxsYmFjaykKKyAgICAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgIHsgfQor
CisgICAgfkNhbGxiYWNrQ2FsbGVyKCkKKyAgICB7CisgICAgICAgIG1fY2FsbGJhY2soKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IG1fY2FsbGJhY2s7Cit9
OworCit2b2lkIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiB7CisgICAgQ2FsbGJhY2tDYWxsZXIgY2Fs
bGJhY2tDYWxsZXIoY29tcGxldGlvbkNhbGxiYWNrKTsKKwogICAgIExPRyhTdG9yYWdlQVBJLCAi
Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKICAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5j
cmVhdGVPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmlkKCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5p
ZCwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5rZXlQ
YXRoLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVudCkpIHsKICAgICAgICAgUmVm
UHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5h
bCBlcnJvciBjcmVhdGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBtX29iamVjdFN0b3JlTWV0YWRh
dGEubmFtZS51dGY4KCkuZGF0YSgpKSk7CkBAIC00OCw4ICs2NSwxMCBAQCB2b2lkIENyZWF0ZU9i
amVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKCkKICAgICB9CiB9CiAKLXZvaWQgQ3JlYXRlSW5k
ZXhPcGVyYXRpb246OnBlcmZvcm0oKQordm9pZCBDcmVhdGVJbmRleE9wZXJhdGlvbjo6cGVyZm9y
bShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogeworICAgIENhbGxi
YWNrQ2FsbGVyIGNhbGxiYWNrQ2FsbGVyKGNvbXBsZXRpb25DYWxsYmFjayk7CisKICAgICBMT0co
U3RvcmFnZUFQSSwgIkNyZWF0ZUluZGV4T3BlcmF0aW9uIik7CiAgICAgaWYgKCFtX2JhY2tpbmdT
dG9yZS0+Y3JlYXRlSW5kZXgobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0b3JlSWQsIG1faW5k
ZXhNZXRhZGF0YS5pZCwgbV9pbmRleE1ldGFkYXRhLm5hbWUsIG1faW5kZXhNZXRhZGF0YS5rZXlQ
YXRoLCBtX2luZGV4TWV0YWRhdGEudW5pcXVlLCBtX2luZGV4TWV0YWRhdGEubXVsdGlFbnRyeSkp
IHsKICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRl
cm5hbCBlcnJvciB3aGVuIHRyeWluZyB0byBjcmVhdGUgaW5kZXggJyVzJy4iLCBtX2luZGV4TWV0
YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSkpOwpAQCAtNjMsOCArODIsMTAgQEAgdm9pZCBDcmVh
dGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKICAgICBtX3RyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLnJlbW92ZUluZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkKTsKIH0KIAotdm9p
ZCBEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSgpCit2b2lkIERlbGV0ZUluZGV4T3BlcmF0
aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiB7
CisgICAgQ2FsbGJhY2tDYWxsZXIgY2FsbGJhY2tDYWxsZXIoY29tcGxldGlvbkNhbGxiYWNrKTsK
KwogICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRlSW5kZXhPcGVyYXRpb24iKTsKICAgICBib29s
IG9rID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4KG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmpl
Y3RTdG9yZUlkLCBtX2luZGV4TWV0YWRhdGEuaWQpOwogICAgIGlmICghb2spIHsKQEAgLTc5LDgg
KzEwMCwxMCBAQCB2b2lkIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQogICAg
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuYWRkSW5kZXgobV9vYmplY3RTdG9yZUlkLCBtX2lu
ZGV4TWV0YWRhdGEsIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCk7CiB9CiAKLXZvaWQgR2V0
T3BlcmF0aW9uOjpwZXJmb3JtKCkKK3ZvaWQgR2V0T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiB7CisgICAgQ2FsbGJhY2tDYWxsZXIg
Y2FsbGJhY2tDYWxsZXIoY29tcGxldGlvbkNhbGxiYWNrKTsKKwogICAgIExPRyhTdG9yYWdlQVBJ
LCAiR2V0T3BlcmF0aW9uIik7CiAKICAgICBSZWZQdHI8SURCS2V5PiBrZXk7CkBAIC0xNzIsOCAr
MTk1LDEwIEBAIHZvaWQgR2V0T3BlcmF0aW9uOjpwZXJmb3JtKCkKICAgICBtX2NhbGxiYWNrcy0+
b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IodmFsdWUpKTsKIH0KIAotdm9pZCBQ
dXRPcGVyYXRpb246OnBlcmZvcm0oKQordm9pZCBQdXRPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpm
dW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKKyAgICBDYWxsYmFja0NhbGxl
ciBjYWxsYmFja0NhbGxlcihjb21wbGV0aW9uQ2FsbGJhY2spOworCiAgICAgTE9HKFN0b3JhZ2VB
UEksICJQdXRPcGVyYXRpb24iKTsKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+bW9kZSgpICE9
IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25seSk7CiAgICAgQVNTRVJUKG1faW5kZXhJZHMu
c2l6ZSgpID09IG1faW5kZXhLZXlzLnNpemUoKSk7CkBAIC0yNDMsMTUgKzI2OCwxOSBAQCB2b2lk
IFB1dE9wZXJhdGlvbjo6cGVyZm9ybSgpCiAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXku
cmVsZWFzZSgpKTsKIH0KIAotdm9pZCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0o
KQordm9pZCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKKyAgICBDYWxsYmFja0NhbGxlciBjYWxsYmFj
a0NhbGxlcihjb21wbGV0aW9uQ2FsbGJhY2spOworCiAgICAgTE9HKFN0b3JhZ2VBUEksICJTZXRJ
bmRleGVzUmVhZHlPcGVyYXRpb24iKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5k
ZXhDb3VudDsgKytpKQogICAgICAgICBtX3RyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVByZWVtcHRp
dmVFdmVudCgpOwogfQogCi12b2lkIE9wZW5DdXJzb3JPcGVyYXRpb246OnBlcmZvcm0oKQordm9p
ZCBPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21w
bGV0aW9uQ2FsbGJhY2spCiB7CisgICAgQ2FsbGJhY2tDYWxsZXIgY2FsbGJhY2tDYWxsZXIoY29t
cGxldGlvbkNhbGxiYWNrKTsKKwogICAgIExPRyhTdG9yYWdlQVBJLCAiT3BlbkN1cnNvck9wZXJh
dGlvbiIpOwogCiAgICAgLy8gVGhlIGZyb250ZW5kIGhhcyBiZWd1biBpbmRleGluZywgc28gdGhp
cyBwYXVzZXMgdGhlIHRyYW5zYWN0aW9uCkBAIC0yODQsOCArMzEzLDEwIEBAIHZvaWQgT3BlbkN1
cnNvck9wZXJhdGlvbjo6cGVyZm9ybSgpCiAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJz
b3IsIGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZhbHVlKCkp
OwogfQogCi12b2lkIENvdW50T3BlcmF0aW9uOjpwZXJmb3JtKCkKK3ZvaWQgQ291bnRPcGVyYXRp
b246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsK
KyAgICBDYWxsYmFja0NhbGxlciBjYWxsYmFja0NhbGxlcihjb21wbGV0aW9uQ2FsbGJhY2spOwor
CiAgICAgTE9HKFN0b3JhZ2VBUEksICJDb3VudE9wZXJhdGlvbiIpOwogICAgIHVpbnQzMl90IGNv
dW50ID0gMDsKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNr
aW5nU3RvcmVDdXJzb3I7CkBAIC0zMDYsOCArMzM3LDEwIEBAIHZvaWQgQ291bnRPcGVyYXRpb246
OnBlcmZvcm0oKQogICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOwogfQogCi12b2lk
IERlbGV0ZVJhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKCkKK3ZvaWQgRGVsZXRlUmFuZ2VPcGVyYXRp
b246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsK
KyAgICBDYWxsYmFja0NhbGxlciBjYWxsYmFja0NhbGxlcihjb21wbGV0aW9uQ2FsbGJhY2spOwor
CiAgICAgTE9HKFN0b3JhZ2VBUEksICJEZWxldGVSYW5nZU9wZXJhdGlvbiIpOwogICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1f
YmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5
UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CiAgICAgaWYgKGJhY2tpbmdTdG9y
ZUN1cnNvcikgewpAQCAtMzIyLDggKzM1NSwxMCBAQCB2b2lkIERlbGV0ZVJhbmdlT3BlcmF0aW9u
OjpwZXJmb3JtKCkKICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7CiB9CiAKLXZvaWQgQ2xl
YXJPcGVyYXRpb246OnBlcmZvcm0oKQordm9pZCBDbGVhck9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogeworICAgIENhbGxiYWNrQ2Fs
bGVyIGNhbGxiYWNrQ2FsbGVyKGNvbXBsZXRpb25DYWxsYmFjayk7CisKICAgICBMT0coU3RvcmFn
ZUFQSSwgIk9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb24iKTsKICAgICBpZiAoIW1fYmFja2luZ1N0
b3JlLT5jbGVhck9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkKSkgewogICAgICAgICBtX2NhbGxi
YWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgIkVycm9yIGNsZWFyaW5nIG9iamVjdCBzdG9yZSIpKTsKQEAgLTMz
Miw4ICszNjcsMTAgQEAgdm9pZCBDbGVhck9wZXJhdGlvbjo6cGVyZm9ybSgpCiAgICAgbV9jYWxs
YmFja3MtPm9uU3VjY2VzcygpOwogfQogCi12b2lkIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
OjpwZXJmb3JtKCkKK3ZvaWQgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKKyAgICBDYWxsYmFja0Nh
bGxlciBjYWxsYmFja0NhbGxlcihjb21wbGV0aW9uQ2FsbGJhY2spOworCiAgICAgTE9HKFN0b3Jh
Z2VBUEksICJEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOwogICAgIGJvb2wgb2sgPSBtX2Jh
Y2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0
b3JlTWV0YWRhdGEuaWQpOwogICAgIGlmICghb2spIHsKQEAgLTM0Miw4ICszNzksMTAgQEAgdm9p
ZCBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybSgpCiAgICAgfQogfQogCi12b2lk
IElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybSgpCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogeworICAgIENhbGxiYWNr
Q2FsbGVyIGNhbGxiYWNrQ2FsbGVyKGNvbXBsZXRpb25DYWxsYmFjayk7CisKICAgICBMT0coU3Rv
cmFnZUFQSSwgIlZlcnNpb25DaGFuZ2VPcGVyYXRpb24iKTsKICAgICBJREJEYXRhYmFzZUJhY2tl
bmQmIGRhdGFiYXNlID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBpbnQ2NF90IGRh
dGFiYXNlSWQgPSBkYXRhYmFzZS5pZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9u
cy5oCmluZGV4IDE0YmRmNjcuLmI4NDYyYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVy
YXRpb25zLmgKQEAgLTM2LDExICszNiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNr
aW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRh
dGEpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNr
aW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRh
dGEpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlTWV0YWRhdGEp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlv
bih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CiAgICAg
fQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVh
bCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgT1ZF
UlJJREUgRklOQUw7CiBwcml2YXRlOgogICAgIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKElE
QlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFj
ZSogYmFja2luZ1N0b3JlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9y
ZU1ldGFkYXRhKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCkBAIC01Niwx
MSArNTYsMTEgQEAgcHJpdmF0ZToKIAogY2xhc3MgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24g
OiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJ
REJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tp
bmdTdG9yZSwgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUs
IG9iamVjdFN0b3JlTWV0YWRhdGEpKTsKICAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
KSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKIHByaXZhdGU6CiAgICAg
RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCiAgICAgICAgIDogbV90cmFu
c2FjdGlvbih0cmFuc2FjdGlvbikKQEAgLTc2LDExICs3NiwxMSBAQCBwcml2YXRlOgogCiBjbGFz
cyBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURC
T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+
IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3Mp
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rp
b25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZl
cnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCB0cmFu
c2FjdGlvbklkLCB2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbih0cmFuc2FjdGlv
biwgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcykp
OwogICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOworICAg
IHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJh
Y2spIE9WRVJSSURFIEZJTkFMOwogcHJpdmF0ZToKICAgICBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9u
KElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKICAgICAg
ICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQpAQCAtOTgsMTEgKzk4LDExIEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tz
OwogfTsKIAotY2xhc3MgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJ
REJPcGVyYXRpb24geworY2xhc3MgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1
YmxpYyBJREJTeW5jaHJvbm91c09wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlN5
bmNocm9ub3VzT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmpl
Y3RTdG9yZUlkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRlT2JqZWN0U3Rv
cmVBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCkpOwogICAgIH0KICAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOwogcHJpdmF0ZToKQEAgLTEx
NiwxMSArMTE2LDExIEBAIHByaXZhdGU6CiAgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3Jl
SWQ7CiB9OwogCi1jbGFzcyBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGlj
IElEQk9wZXJhdGlvbiB7CitjbGFzcyBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDog
cHVibGljIElEQlN5bmNocm9ub3VzT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5z
YWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSkKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5z
YWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEm
IG9iamVjdFN0b3JlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVP
YmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZSkpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24o
dHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtKCkgT1ZFUlJJREUgRklOQUw7CiBwcml2YXRlOgpAQCAtMTM0LDExICsxMzQsMTEgQEAgcHJp
dmF0ZToKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsK
IH07CiAKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0
aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQ6OlZl
cnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJTeW5jaHJvbm91c09wZXJhdGlv
biB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUo
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgU3RyaW5nJiBwcmV2aW91
c1ZlcnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRWZXJzaW9uKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPElEQlN5bmNocm9ub3VzT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5k
KiB0cmFuc2FjdGlvbiwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJl
dmlvdXNJbnRWZXJzaW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBWZXJz
aW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIHByZXZpb3VzVmVyc2lvbiwgcHJl
dmlvdXNJbnRWZXJzaW9uKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVmVyc2lvbkNo
YW5nZUFib3J0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBwcmV2aW91c1ZlcnNpb24sIHByZXZpb3Vz
SW50VmVyc2lvbikpOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJSSURF
IEZJTkFMOwogcHJpdmF0ZToKQEAgLTE1NiwxMSArMTU2LDExIEBAIHByaXZhdGU6CiAKIGNsYXNz
IENyZWF0ZUluZGV4T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3Rv
cmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhN
ZXRhZGF0YSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJU
cmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2Uq
IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFk
YXRhJiBpbmRleE1ldGFkYXRhKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
cmVhdGVJbmRleE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBvYmplY3RTdG9y
ZUlkLCBpbmRleE1ldGFkYXRhKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRl
SW5kZXhPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhNZXRhZGF0YSkpOwogICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJS
SURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgp
PiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOwogcHJpdmF0ZToKICAgICBDcmVhdGVJ
bmRleE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBJREJCYWNr
aW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQogICAgICAgICA6IG1fdHJhbnNh
Y3Rpb24odHJhbnNhY3Rpb24pCkBAIC0xNzYsMTEgKzE3NiwxMSBAQCBwcml2YXRlOgogICAgIGNv
bnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwogfTsKIAotY2xhc3MgQ3JlYXRl
SW5kZXhBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24geworY2xhc3MgQ3JlYXRl
SW5kZXhBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJTeW5jaHJvbm91c09wZXJhdGlvbiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJh
bnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCU3luY2hyb25vdXNPcGVyYXRp
b24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZUluZGV4
QWJvcnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKTsKICAg
ICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKIHByaXZhdGU6
CkBAIC0xOTgsMTEgKzE5OCwxMSBAQCBwcml2YXRlOgogCiBjbGFzcyBEZWxldGVJbmRleE9wZXJh
dGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rp
b24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5k
KiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0
YSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlSW5kZXhPcGVyYXRp
b24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0
YSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERlbGV0ZUluZGV4T3BlcmF0aW9uKHRy
YW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsK
ICAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNr
KSBPVkVSUklERSBGSU5BTDsKIHByaXZhdGU6CiAgICAgRGVsZXRlSW5kZXhPcGVyYXRpb24oSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNl
KiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRh
ZGF0YSYgaW5kZXhNZXRhZGF0YSkKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
KQpAQCAtMjE4LDExICsyMTgsMTEgQEAgcHJpdmF0ZToKICAgICBjb25zdCBJREJJbmRleE1ldGFk
YXRhIG1faW5kZXhNZXRhZGF0YTsKIH07CiAKLWNsYXNzIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRp
b24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK2NsYXNzIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRp
b24gOiBwdWJsaWMgSURCU3luY2hyb25vdXNPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCog
dHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0
YSYgaW5kZXhNZXRhZGF0YSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJTeW5jaHJvbm91c09w
ZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlSW5kZXhBYm9ydE9wZXJh
dGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24odHJhbnNhY3Rp
b24sIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKICAgICB9CiAgICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKIHByaXZhdGU6CkBAIC0yNDAsMTEgKzI0MCwx
MSBAQCBwcml2YXRlOgogCiBjbGFzcyBHZXRPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9u
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJ
REJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZh
Y2UqIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3Bl
cmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRh
dGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJz
b3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdT
dG9yZSwgbWV0YWRhdGEsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjdXJzb3JU
eXBlLCBjYWxsYmFja3MpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZXRPcGVyYXRp
b24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwgbWV0YWRhdGEsIG9iamVjdFN0b3JlSWQsIGlu
ZGV4SWQsIGtleVJhbmdlLCBjdXJzb3JUeXBlLCBjYWxsYmFja3MpKTsKICAgICB9Ci0gICAgdmly
dHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERSBGSU5B
TDsKIHByaXZhdGU6CiAgICAgR2V0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJh
bnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6
OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQpAQCAtMjc2LDExICsyNzYs
MTEgQEAgcHJpdmF0ZToKIAogY2xhc3MgUHV0T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlv
biB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUo
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwg
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1v
ZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2
NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUs
IGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0
U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNv
bnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFB1dE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRl
eElkcywgaW5kZXhLZXlzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHV0T3BlcmF0
aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlLCB2
YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpKTsKICAg
ICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBP
VkVSUklERSBGSU5BTDsKIHByaXZhdGU6CiAgICAgUHV0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9u
QmFja2VuZCogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0
b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mIHZhbHVlLCBQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElk
cywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKICAgICAgICAgOiBtX3RyYW5z
YWN0aW9uKHRyYW5zYWN0aW9uKQpAQCAtMzEwLDExICszMTAsMTEgQEAgcHJpdmF0ZToKIAogY2xh
c3MgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgc2l6ZV90IGluZGV4Q291bnQpCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0
cmFuc2FjdGlvbiwgc2l6ZV90IGluZGV4Q291bnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgaW5kZXhDb3Vu
dCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldEluZGV4ZXNSZWFkeU9wZXJhdGlv
bih0cmFuc2FjdGlvbiwgaW5kZXhDb3VudCkpOwogICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybSgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOwogcHJpdmF0ZToK
ICAgICBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFu
c2FjdGlvbiwgc2l6ZV90IGluZGV4Q291bnQpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFu
c2FjdGlvbikKQEAgLTMyOCwxMSArMzI4LDExIEBAIHByaXZhdGU6CiAKIGNsYXNzIE9wZW5DdXJz
b3JPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRy
YW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9u
IGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNl
QmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJh
bnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBi
YWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVk
REI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJz
b3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBPcGVuQ3Vyc29yT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNv
clR5cGUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBPcGVuQ3Vyc29yT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5
cGUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKICAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZv
cm0oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKIHByaXZhdGU6CiAg
ICAgT3BlbkN1cnNvck9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9u
LCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlv
biwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6
VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAg
ICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKQEAgLTM2MiwxMSArMzYyLDExIEBA
IHByaXZhdGU6CiAKIGNsYXNzIENvdW50T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNl
KiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
Qk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIElE
QkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ291bnRPcGVyYXRpb24odHJhbnNhY3Rp
b24sIGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5
UmFuZ2UsIGNhbGxiYWNrcykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvdW50T3Bl
cmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKICAgICB9Ci0gICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKIHBy
aXZhdGU6CiAgICAgQ291bnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCkBAIC0zOTAsMTEgKzM5
MCwxMSBAQCBwcml2YXRlOgogCiBjbGFzcyBEZWxldGVSYW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJ
REJPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlv
bj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdT
dG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3Bl
cmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgRGVsZXRlUmFuZ2VPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9y
ZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERlbGV0ZVJhbmdlT3BlcmF0aW9uKHRyYW5zYWN0aW9u
LCBiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxs
YmFja3MpKTsKICAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5B
TDsKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vz
c0NhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKIHByaXZhdGU6CiAgICAgRGVsZXRlUmFuZ2VPcGVy
YXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0
aW9uKQpAQCAtNDE2LDExICs0MTYsMTEgQEAgcHJpdmF0ZToKIAogY2xhc3MgQ2xlYXJPcGVyYXRp
b24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9u
LCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJh
bnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBi
YWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBDbGVhck9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFja3MpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDbGVhck9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFja3MpKTsKICAgICB9Ci0gICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKIHBy
aXZhdGU6CiAgICAgQ2xlYXJPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCg==
</data>
<flag name="review"
          id="239630"
          type_id="1"
          status="+"
          setter="thorton"
    />
    <flag name="commit-queue"
          id="239631"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216633</attachid>
            <date>2013-11-11 22:11:46 -0800</date>
            <delta_ts>2013-11-11 22:11:46 -0800</delta_ts>
            <desc>Patch v2 - Whoops on the &lt;Functional&gt;</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>39650</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4M2ExMzhiLi5hOWU2YzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsODEg
QEAKIDIwMTMtMTEtMTEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIE1ha2UgSURCVHJhbnNhY3Rpb24gdGFza3MgYXN5bmNocm9ub3VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQxODMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGFuIGFsbW9zdCB6ZXJv
LWNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICBUaGUgb25lIHRoaW5nIHRoYXQgaXMgZGlm
ZmVyZW50IGlzIHRoYXQgcHJldmlvdXNseSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kcyB3b3VsZCBz
eW5jaHJvbm91c2x5CisgICAgICAgIHJ1biB0aHJvdWdoIHRoZWlyIGVudGlyZSBzZXQgb2YgSURC
T3BlcmF0aW9u4oCZcyB3aXRob3V0IGV2ZXIgcmV0dXJuaW5nIGNvbnRyb2wgdG8gdGhlIHJ1bmxv
b3AuCisKKyAgICAgICAgTm93LCB0aGV5IHN0YXJ0IG9uZSB0YXNrIGFuZCB0aGVuIHdhaXQgZm9y
IGl0cyBjb21wbGV0aW9uIHRvIHNjaGVkdWxlIHRoZSBzdGFydCBvZiB0aGUgbmV4dCB0YXNrLgor
CisgICAgICAgIENoYW5nZSBJREJPcGVyYXRpb27igJlzIHBlcmZvcm0oKSB0byB0YWtlIGEgY29t
cGxldGlvbiBoYW5kbGVyIHNvIGl0IGNhbiBiZSBhc3luY2hyb25vdXMuCisgICAgICAgIEFkZCBh
biBJREJTeW5jaHJvbm91c09wZXJhdGlvbiBjbGFzcyB0byBoYW5kbGUgIkFib3J0IiB0YXNrcywg
d2hpY2ggbmV2ZXIgbmVlZCB0byBwZXJmb3JtIGkvbworICAgICAgICBhbmQgdGhlcmVmb3JlIGNh
biBiZSBlbnRpcmVseSBzeW5jaHJvbm91cy4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJPcGVyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlN5bmNocm9ub3VzT3BlcmF0aW9u
Ojp+SURCU3luY2hyb25vdXNPcGVyYXRpb24pOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZDo6c2NoZWR1bGVUYXNrKTogIkFib3J0IHRhc2tzIiBhcmUgbm93IElEQlN5
bmNocm9ub3VzT3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZDo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kOjp0
YXNrVGltZXJGaXJlZCk6IEluc3RlYWQgb2YgcnVubmluZyB0aHJvdWdoIHRoZSBlbnRpcmUgc2V0
IG9mIHRhc2tzLAorICAgICAgICAgIHBlcmZvcm0gYSBzaW5nbGUgdGFzayBhc3luY2hyb25vdXNs
eS4gVGhlIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgdGhlIHRhc2sgd2lsbCByZXNldCB0aGUgdGFz
ayB0aW1lcgorICAgICAgICAgIHRvIGFzeW5jaHJvbm91c2x5IHN0YXJ0IHRoZSBuZXh0IHRhc2su
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlVGFzayk6ICJB
Ym9ydCB0YXNrcyIgYXJlIG5vdyBJREJTeW5jaHJvbm91c09wZXJhdGlvbnMuCisKKyAgICAgICAg
VXBkYXRlIGFsbCBvcGVyYXRpb25zIHRvIHRha2UgY29tcGxldGlvbiBoYW5kbGVycy4KKyAgICAg
ICAgRm9yIG5vdywgcGVyZm9ybSB0aGluZ3Mgc3luY2hyb25vdXNseSBsaWtlIGJlZm9yZSwgY2Fs
bGluZyB0aGUgY29tcGxldGlvbiBoYW5kbGVyIHdoZW4gY29tcGxldGUuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YWxsYmFja0NhbGxlcjo6Q2FsbGJhY2tDYWxsZXIpOiBIZWxwZXIgY2xhc3MgdG8gbWFrZSBzdXJl
IGNvbXBsZXRpb24gY2FsbGJhY2tzIGFyZSBhbHdheXMgY2FsbGVkIGFzeW5jaHJvbm91c2x5Lgor
ICAgICAgICAoV2ViQ29yZTo6Q2FsbGJhY2tDYWxsZXI6On5DYWxsYmFja0NhbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kOjpDdXJzb3JBZHZh
bmNlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2Vu
ZDo6Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpwZXJmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmQ6OkN1cnNvckl0ZXJhdGlvbk9w
ZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kOjpD
dXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybSk6CisKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbGxiYWNrQ2FsbGVyOjpDYWxsYmFja0NhbGxlcik6IEhlbHBlciBj
bGFzcyB0byBtYWtlIHN1cmUgY29tcGxldGlvbiBjYWxsYmFja3MgYXJlIGFsd2F5cyBjYWxsZWQg
YXN5bmNocm9ub3VzbHkuCisgICAgICAgIChXZWJDb3JlOjpDYWxsYmFja0NhbGxlcjo6fkNhbGxi
YWNrQ2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZUluZGV4T3BlcmF0aW9uOjpwZXJm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpQdXRPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6U2V0SW5kZXhl
c1JlYWR5T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JP
cGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q291bnRPcGVyYXRpb246OnBl
cmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlUmFuZ2VPcGVyYXRpb246OnBlcmZvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpwZXJm
b3JtKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0
aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRp
b246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNp
b25DaGFuZ2VPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVPYmpl
Y3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRl
T2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R2V0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UHV0T3BlcmF0aW9uOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVsZXRlUmFuZ2VPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGVh
ck9wZXJhdGlvbjo6Y3JlYXRlKToKKworMjAxMy0xMS0xMSAgQnJhZHkgRWlkc29uICA8YmVpZHNv
bkBhcHBsZS5jb20+CisKICAgICAgICAgTWFrZSBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiBi
ZSBSZWZDb3VudGVkCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjQxNjgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kLmNwcAppbmRleCAyN2Q2NDdlLi41YmRiNGZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kLmNw
cApAQCAtNDEsMTMgKzQxLDI4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ2Fs
bGJhY2tDYWxsZXIgeworcHVibGljOgorICAgIENhbGxiYWNrQ2FsbGVyKHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPiBjYWxsYmFjaykKKyAgICAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgIHsg
fQorCisgICAgfkNhbGxiYWNrQ2FsbGVyKCkKKyAgICB7CisgICAgICAgIG1fY2FsbGJhY2soKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IG1fY2FsbGJhY2s7
Cit9OworCiBjbGFzcyBJREJDdXJzb3JCYWNrZW5kOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24g
OiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJ
REJPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciwg
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uKGN1cnNvciwga2V5LCBjYWxsYmFja3Mp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24o
Y3Vyc29yLCBrZXksIGNhbGxiYWNrcykpOwogICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bSgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOwogcHJpdmF0ZToK
ICAgICBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24oUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5k
PiBjdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCiAgICAgICAgIDogbV9jdXJzb3IoY3Vyc29yKQpAQCAtNjMsMTEgKzc4LDEx
IEBAIHByaXZhdGU6CiAKIGNsYXNzIElEQkN1cnNvckJhY2tlbmQ6OkN1cnNvckFkdmFuY2VPcGVy
YXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1
cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVm
UHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbihjdXJzb3IsIGNvdW50LCBjYWxsYmFja3Mp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uKGN1
cnNvciwgY291bnQsIGNhbGxiYWNrcykpOwogICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bSgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOwogcHJpdmF0ZToK
ICAgICBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4g
Y3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQogICAgICAgICA6IG1fY3Vyc29yKGN1cnNvcikKQEAgLTgzLDExICs5OCwxMSBAQCBw
cml2YXRlOgogCiBjbGFzcyBJREJDdXJzb3JCYWNrZW5kOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlv
bk9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2Vu
ZD4gY3Vyc29yLCBpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShQYXNz
UmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciwgaW50IG51bWJlclRvRmV0Y2gsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uKGN1cnNvciwgbnVtYmVy
VG9GZXRjaCwgY2FsbGJhY2tzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3Vyc29y
UHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb24oY3Vyc29yLCBudW1iZXJUb0ZldGNoLCBjYWxsYmFj
a3MpKTsKICAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsK
KyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlv
bkNhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKIHByaXZhdGU6CiAgICAgQ3Vyc29yUHJlZmV0Y2hJ
dGVyYXRpb25PcGVyYXRpb24oUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBjdXJzb3IsIGlu
dCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAg
ICAgICA6IG1fY3Vyc29yKGN1cnNvcikKQEAgLTEzMyw4ICsxNDgsMTAgQEAgdm9pZCBJREJDdXJz
b3JCYWNrZW5kOjphZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBwcnAKICAgICBtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3Vyc29yQWR2YW5j
ZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGNvdW50LCBjYWxsYmFja3MpKTsKIH0KIAotdm9pZCBJ
REJDdXJzb3JCYWNrZW5kOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpwZXJmb3JtKCkKK3ZvaWQg
SURCQ3Vyc29yQmFja2VuZDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogeworICAgIENhbGxiYWNrQ2FsbGVy
IGNhbGxiYWNrQ2FsbGVyKGNvbXBsZXRpb25DYWxsYmFjayk7CisKICAgICBMT0coU3RvcmFnZUFQ
SSwgIkN1cnNvckFkdmFuY2VPcGVyYXRpb24iKTsKICAgICBpZiAoIW1fY3Vyc29yLT5tX2N1cnNv
ciB8fCAhbV9jdXJzb3ItPm1fY3Vyc29yLT5hZHZhbmNlKG1fY291bnQpKSB7CiAgICAgICAgIG1f
Y3Vyc29yLT5tX2N1cnNvciA9IDA7CkBAIC0xNDUsOCArMTYyLDEwIEBAIHZvaWQgSURCQ3Vyc29y
QmFja2VuZDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6cGVyZm9ybSgpCiAgICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2VzcyhtX2N1cnNvci0+a2V5KCksIG1fY3Vyc29yLT5wcmltYXJ5S2V5KCksIG1f
Y3Vyc29yLT52YWx1ZSgpKTsKIH0KIAotdm9pZCBJREJDdXJzb3JCYWNrZW5kOjpDdXJzb3JJdGVy
YXRpb25PcGVyYXRpb246OnBlcmZvcm0oKQordm9pZCBJREJDdXJzb3JCYWNrZW5kOjpDdXJzb3JJ
dGVyYXRpb25PcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRp
b25DYWxsYmFjaykKIHsKKyAgICBDYWxsYmFja0NhbGxlciBjYWxsYmFja0NhbGxlcihjb21wbGV0
aW9uQ2FsbGJhY2spOworCiAgICAgTE9HKFN0b3JhZ2VBUEksICJDdXJzb3JJdGVyYXRpb25PcGVy
YXRpb24iKTsKICAgICBpZiAoIW1fY3Vyc29yLT5tX2N1cnNvciB8fCAhbV9jdXJzb3ItPm1fY3Vy
c29yLT5jb250aW51ZUZ1bmN0aW9uKG1fa2V5LmdldCgpKSkgewogICAgICAgICBtX2N1cnNvci0+
bV9jdXJzb3IgPSAwOwpAQCAtMTcyLDggKzE5MSwxMCBAQCB2b2lkIElEQkN1cnNvckJhY2tlbmQ6
OnByZWZldGNoQ29udGludWUoaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
YwogICAgIG1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhtX3Rhc2tUeXBlLCBDdXJzb3JQcmVm
ZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG51bWJlclRvRmV0Y2gsIGNhbGxi
YWNrcykpOwogfQogCi12b2lkIElEQkN1cnNvckJhY2tlbmQ6OkN1cnNvclByZWZldGNoSXRlcmF0
aW9uT3BlcmF0aW9uOjpwZXJmb3JtKCkKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZDo6Q3Vyc29yUHJl
ZmV0Y2hJdGVyYXRpb25PcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNv
bXBsZXRpb25DYWxsYmFjaykKIHsKKyAgICBDYWxsYmFja0NhbGxlciBjYWxsYmFja0NhbGxlcihj
b21wbGV0aW9uQ2FsbGJhY2spOworCiAgICAgTE9HKFN0b3JhZ2VBUEksICJDdXJzb3JQcmVmZXRj
aEl0ZXJhdGlvbk9wZXJhdGlvbiIpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiBmb3Vu
ZEtleXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
cGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZXJhdGlv
bi5oCmluZGV4IGEzMGMwNjguLmQ4OGQyY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9wZXJhdGlvbi5oCkBAIC0yNiwxMyArMjYsMjEgQEAKICNpZm5kZWYg
SURCT3BlcmF0aW9uX2gKICNkZWZpbmUgSURCT3BlcmF0aW9uX2gKIAorI2luY2x1ZGUgPGZ1bmN0
aW9uYWw+CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBJREJPcGVyYXRpb24geworY2xhc3MgSURCT3BlcmF0aW9uIDogcHVibGlj
IFJlZkNvdW50ZWQ8SURCT3BlcmF0aW9uPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCT3Bl
cmF0aW9uKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworfTsKKworY2xhc3MgSURCU3luY2hyb25vdXNP
cGVyYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gewor
cHVibGljOgorICAgIHZpcnR1YWwgfklEQlN5bmNocm9ub3VzT3BlcmF0aW9uKCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm0oKSA9IDA7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAppbmRl
eCBmYjNmZDk5Li43Yzc0NTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKQEAgLTc0LDcgKzc0LDcg
QEAgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjp+SURCVHJhbnNhY3Rpb25CYWNrZW5kKCkKICAgICBB
U1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7CiB9CiAKLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kOjpzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0eXBlLCBQYXNz
T3duUHRyPElEQk9wZXJhdGlvbj4gdGFzaywgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGFib3J0
VGFzaykKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZVRhc2soSURCRGF0YWJh
c2VCYWNrZW5kOjpUYXNrVHlwZSB0eXBlLCBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4gdGFzaywg
UGFzc1JlZlB0cjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gYWJvcnRUYXNrKQogewogICAgIGlm
IChtX3N0YXRlID09IEZpbmlzaGVkKQogICAgICAgICByZXR1cm47CkBAIC0xMTksNyArMTE5LDcg
QEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4gZXJyb3IpCiAKICAgICAvLyBSdW4gdGhlIGFib3J0IHRhc2tzLCBpZiBhbnkuCiAg
ICAgd2hpbGUgKCFtX2Fib3J0VGFza1F1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBPd25QdHI8
SURCT3BlcmF0aW9uPiB0YXNrKG1fYWJvcnRUYXNrUXVldWUudGFrZUZpcnN0KCkpOworICAgICAg
ICBSZWZQdHI8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IHRhc2sobV9hYm9ydFRhc2tRdWV1ZS50
YWtlRmlyc3QoKSk7CiAgICAgICAgIHRhc2stPnBlcmZvcm0oKTsKICAgICB9CiAKQEAgLTIzNSwy
NiArMjM1LDI2IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpjb21taXQoKQogdm9pZCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9u
QmFja2VuZD4qKQogewogICAgIExPRyhTdG9yYWdlQVBJLCAiSURCVHJhbnNhY3Rpb25CYWNrZW5k
Ojp0YXNrVGltZXJGaXJlZCIpOwotICAgIEFTU0VSVCghaXNUYXNrUXVldWVFbXB0eSgpKTsKIAog
ICAgIGlmIChtX3N0YXRlID09IFN0YXJ0UGVuZGluZykgewogICAgICAgICBtX2JhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uLT5iZWdpbigpOwogICAgICAgICBtX3N0YXRlID0gUnVubmluZzsKICAgICB9
CiAKLSAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVh
c2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCi0gICAgLy8gdGFza3MuIFRha2UgdGFrZSBhIHNlbGYg
cmVmZXJlbmNlIHRvIGtlZXAgdGhpcyBvYmplY3QgYWxpdmUgc28gdGhhdAotICAgIC8vIHRoZSBs
b29wIHRlcm1pbmF0aW9uIGNvbmRpdGlvbnMgY2FuIGJlIGNoZWNrZWQuCi0gICAgUmVmPElEQlRy
YW5zYWN0aW9uQmFja2VuZD4gcHJvdGVjdCgqdGhpcyk7CisgICAgLy8gVGhlIGxhc3QgcmVmZXJl
bmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIGEgdGFz
ay4KKyAgICAvLyBUYWtlIGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCB0aGlzIG9iamVjdCBhbGl2
ZSBzbyB0aGF0IHRhc2tzIGNhbgorICAgIC8vIHN1Y2Nlc3NmdWxseSBtYWtlIHRoZWlyIGNvbXBs
ZXRpb24gY2FsbGJhY2tzLgorICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHNlbGYo
dGhpcyk7CiAKICAgICBUYXNrUXVldWUqIHRhc2tRdWV1ZSA9IG1fcGVuZGluZ1ByZWVtcHRpdmVF
dmVudHMgPyAmbV9wcmVlbXB0aXZlVGFza1F1ZXVlIDogJm1fdGFza1F1ZXVlOwotICAgIHdoaWxl
ICghdGFza1F1ZXVlLT5pc0VtcHR5KCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCkgeworICAgIGlm
ICghdGFza1F1ZXVlLT5pc0VtcHR5KCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCkgewogICAgICAg
ICBBU1NFUlQobV9zdGF0ZSA9PSBSdW5uaW5nKTsKLSAgICAgICAgT3duUHRyPElEQk9wZXJhdGlv
bj4gdGFzayh0YXNrUXVldWUtPnRha2VGaXJzdCgpKTsKLSAgICAgICAgdGFzay0+cGVyZm9ybSgp
OworICAgICAgICBSZWZQdHI8SURCT3BlcmF0aW9uPiB0YXNrKHRhc2tRdWV1ZS0+dGFrZUZpcnN0
KCkpOworICAgICAgICB0YXNrLT5wZXJmb3JtKFtzZWxmLCB0aGlzLCB0YXNrXSgpIHsKKyAgICAg
ICAgICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICAgICAgfSk7CiAKLSAgICAg
ICAgLy8gRXZlbnQgaXRzZWxmIG1heSBjaGFuZ2Ugd2hpY2ggcXVldWUgc2hvdWxkIGJlIHByb2Nl
c3NlZCBuZXh0LgotICAgICAgICB0YXNrUXVldWUgPSBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRz
ID8gJm1fcHJlZW1wdGl2ZVRhc2tRdWV1ZSA6ICZtX3Rhc2tRdWV1ZTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIC8vIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIHRhc2tzLCB3ZSBoYXZl
bid0IGFscmVhZHkgY29tbWl0dGVkL2Fib3J0ZWQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5oCmluZGV4IGFjNzIw
NjcuLjI4MWQxZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5oCkBAIC01Niw4ICs1Niw4IEBAIHB1YmxpYzoK
ICAgICBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKCkgY29uc3QgIHsgcmV0dXJuIG1f
bW9kZTsgfQogICAgIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIHNjb3BlKCkgY29uc3QgIHsgcmV0
dXJuIG1fb2JqZWN0U3RvcmVJZHM7IH0KIAotICAgIHZvaWQgc2NoZWR1bGVUYXNrKFBhc3NPd25Q
dHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gYWJvcnRUYXNr
ID0gbnVsbHB0cikgeyBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNr
LCB0YXNrLCBhYm9ydFRhc2spOyB9Ci0gICAgdm9pZCBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VC
YWNrZW5kOjpUYXNrVHlwZSwgUGFzc093blB0cjxJREJPcGVyYXRpb24+LCBQYXNzT3duUHRyPElE
Qk9wZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cik7CisgICAgdm9pZCBzY2hlZHVsZVRhc2so
UGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IHRhc2ssIFBhc3NSZWZQdHI8SURCU3luY2hyb25vdXNP
cGVyYXRpb24+IGFib3J0VGFzayA9IG51bGxwdHIpIHsgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNl
QmFja2VuZDo6Tm9ybWFsVGFzaywgdGFzaywgYWJvcnRUYXNrKTsgfQorICAgIHZvaWQgc2NoZWR1
bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIFBhc3NSZWZQdHI8SURCT3BlcmF0
aW9uPiwgUGFzc1JlZlB0cjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVs
bHB0cik7CiAKICAgICB2b2lkIHJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kKik7
CiAgICAgdm9pZCB1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kKik7CkBAIC0x
MTEsMTAgKzExMSwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNr
cz4gbV9jYWxsYmFja3M7CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gbV9kYXRhYmFz
ZTsKIAotICAgIHR5cGVkZWYgRGVxdWU8T3duUHRyPElEQk9wZXJhdGlvbj4+IFRhc2tRdWV1ZTsK
KyAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxJREJPcGVyYXRpb24+PiBUYXNrUXVldWU7CiAgICAg
VGFza1F1ZXVlIG1fdGFza1F1ZXVlOwogICAgIFRhc2tRdWV1ZSBtX3ByZWVtcHRpdmVUYXNrUXVl
dWU7Ci0gICAgVGFza1F1ZXVlIG1fYWJvcnRUYXNrUXVldWU7CisgICAgRGVxdWU8UmVmUHRyPElE
QlN5bmNocm9ub3VzT3BlcmF0aW9uPj4gbV9hYm9ydFRhc2tRdWV1ZTsKIAogICAgIFJlZlB0cjxJ
REJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZT4gbV9iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcAppbmRleCBkNjk2
NjIzLi5lMzBlNjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcApA
QCAtMzgsOCArMzgsMjUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIENyZWF0ZU9i
amVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKCkKK2NsYXNzIENhbGxiYWNrQ2FsbGVyIHsKK3B1
YmxpYzoKKyAgICBDYWxsYmFja0NhbGxlcihzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY2FsbGJhY2sp
CisgICAgICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICB7IH0KKworICAgIH5DYWxsYmFj
a0NhbGxlcigpCisgICAgeworICAgICAgICBtX2NhbGxiYWNrKCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBtX2NhbGxiYWNrOworfTsKKwordm9pZCBDcmVh
dGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29t
cGxldGlvbkNhbGxiYWNrKQogeworICAgIENhbGxiYWNrQ2FsbGVyIGNhbGxiYWNrQ2FsbGVyKGNv
bXBsZXRpb25DYWxsYmFjayk7CisKICAgICBMT0coU3RvcmFnZUFQSSwgIkNyZWF0ZU9iamVjdFN0
b3JlT3BlcmF0aW9uIik7CiAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3Rv
cmUobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQsIG1fb2JqZWN0U3Rv
cmVNZXRhZGF0YS5uYW1lLCBtX29iamVjdFN0b3JlTWV0YWRhdGEua2V5UGF0aCwgbV9vYmplY3RT
dG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQpKSB7CiAgICAgICAgIFJlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgY3JlYXRp
bmcgb2JqZWN0IHN0b3JlICclcycuIiwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUudXRmOCgp
LmRhdGEoKSkpOwpAQCAtNDgsOCArNjUsMTAgQEAgdm9pZCBDcmVhdGVPYmplY3RTdG9yZU9wZXJh
dGlvbjo6cGVyZm9ybSgpCiAgICAgfQogfQogCi12b2lkIENyZWF0ZUluZGV4T3BlcmF0aW9uOjpw
ZXJmb3JtKCkKK3ZvaWQgQ3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlv
bjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKKyAgICBDYWxsYmFja0NhbGxlciBjYWxs
YmFja0NhbGxlcihjb21wbGV0aW9uQ2FsbGJhY2spOworCiAgICAgTE9HKFN0b3JhZ2VBUEksICJD
cmVhdGVJbmRleE9wZXJhdGlvbiIpOwogICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmNyZWF0ZUlu
ZGV4KG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4TWV0YWRhdGEuaWQs
IG1faW5kZXhNZXRhZGF0YS5uYW1lLCBtX2luZGV4TWV0YWRhdGEua2V5UGF0aCwgbV9pbmRleE1l
dGFkYXRhLnVuaXF1ZSwgbV9pbmRleE1ldGFkYXRhLm11bHRpRW50cnkpKSB7CiAgICAgICAgIG1f
dHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igd2hl
biB0cnlpbmcgdG8gY3JlYXRlIGluZGV4ICclcycuIiwgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRm
OCgpLmRhdGEoKSkpKTsKQEAgLTYzLDggKzgyLDEwIEBAIHZvaWQgQ3JlYXRlSW5kZXhBYm9ydE9w
ZXJhdGlvbjo6cGVyZm9ybSgpCiAgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5yZW1vdmVJ
bmRleChtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCk7CiB9CiAKLXZvaWQgRGVsZXRlSW5kZXhP
cGVyYXRpb246OnBlcmZvcm0oKQordm9pZCBEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogeworICAgIENhbGxiYWNr
Q2FsbGVyIGNhbGxiYWNrQ2FsbGVyKGNvbXBsZXRpb25DYWxsYmFjayk7CisKICAgICBMT0coU3Rv
cmFnZUFQSSwgIkRlbGV0ZUluZGV4T3BlcmF0aW9uIik7CiAgICAgYm9vbCBvayA9IG1fYmFja2lu
Z1N0b3JlLT5kZWxldGVJbmRleChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmlkKCksIG1fb2JqZWN0U3RvcmVJZCwgbV9p
bmRleE1ldGFkYXRhLmlkKTsKICAgICBpZiAoIW9rKSB7CkBAIC03OSw4ICsxMDAsMTAgQEAgdm9p
ZCBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKICAgICBtX3RyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLmFkZEluZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRhLCBJ
REJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOwogfQogCi12b2lkIEdldE9wZXJhdGlvbjo6cGVy
Zm9ybSgpCit2b2lkIEdldE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
Y29tcGxldGlvbkNhbGxiYWNrKQogeworICAgIENhbGxiYWNrQ2FsbGVyIGNhbGxiYWNrQ2FsbGVy
KGNvbXBsZXRpb25DYWxsYmFjayk7CisKICAgICBMT0coU3RvcmFnZUFQSSwgIkdldE9wZXJhdGlv
biIpOwogCiAgICAgUmVmUHRyPElEQktleT4ga2V5OwpAQCAtMTcyLDggKzE5NSwxMCBAQCB2b2lk
IEdldE9wZXJhdGlvbjo6cGVyZm9ybSgpCiAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTaGFy
ZWRCdWZmZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSk7CiB9CiAKLXZvaWQgUHV0T3BlcmF0aW9uOjpw
ZXJmb3JtKCkKK3ZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgp
PiBjb21wbGV0aW9uQ2FsbGJhY2spCiB7CisgICAgQ2FsbGJhY2tDYWxsZXIgY2FsbGJhY2tDYWxs
ZXIoY29tcGxldGlvbkNhbGxiYWNrKTsKKwogICAgIExPRyhTdG9yYWdlQVBJLCAiUHV0T3BlcmF0
aW9uIik7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uUmVhZE9ubHkpOwogICAgIEFTU0VSVChtX2luZGV4SWRzLnNpemUoKSA9PSBtX2lu
ZGV4S2V5cy5zaXplKCkpOwpAQCAtMjQzLDE1ICsyNjgsMTkgQEAgdm9pZCBQdXRPcGVyYXRpb246
OnBlcmZvcm0oKQogICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5LnJlbGVhc2UoKSk7CiB9
CiAKLXZvaWQgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpwZXJmb3JtKCkKK3ZvaWQgU2V0SW5k
ZXhlc1JlYWR5T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0
aW9uQ2FsbGJhY2spCiB7CisgICAgQ2FsbGJhY2tDYWxsZXIgY2FsbGJhY2tDYWxsZXIoY29tcGxl
dGlvbkNhbGxiYWNrKTsKKwogICAgIExPRyhTdG9yYWdlQVBJLCAiU2V0SW5kZXhlc1JlYWR5T3Bl
cmF0aW9uIik7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4Q291bnQ7ICsraSkK
ICAgICAgICAgbV90cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKTsKIH0K
IAotdm9pZCBPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKCkKK3ZvaWQgT3BlbkN1cnNvck9w
ZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNr
KQogeworICAgIENhbGxiYWNrQ2FsbGVyIGNhbGxiYWNrQ2FsbGVyKGNvbXBsZXRpb25DYWxsYmFj
ayk7CisKICAgICBMT0coU3RvcmFnZUFQSSwgIk9wZW5DdXJzb3JPcGVyYXRpb24iKTsKIAogICAg
IC8vIFRoZSBmcm9udGVuZCBoYXMgYmVndW4gaW5kZXhpbmcsIHNvIHRoaXMgcGF1c2VzIHRoZSB0
cmFuc2FjdGlvbgpAQCAtMjg0LDggKzMxMywxMCBAQCB2b2lkIE9wZW5DdXJzb3JPcGVyYXRpb246
OnBlcmZvcm0oKQogICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLCBjdXJzb3ItPmtl
eSgpLCBjdXJzb3ItPnByaW1hcnlLZXkoKSwgY3Vyc29yLT52YWx1ZSgpKTsKIH0KIAotdm9pZCBD
b3VudE9wZXJhdGlvbjo6cGVyZm9ybSgpCit2b2lkIENvdW50T3BlcmF0aW9uOjpwZXJmb3JtKHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiB7CisgICAgQ2FsbGJhY2tD
YWxsZXIgY2FsbGJhY2tDYWxsZXIoY29tcGxldGlvbkNhbGxiYWNrKTsKKwogICAgIExPRyhTdG9y
YWdlQVBJLCAiQ291bnRPcGVyYXRpb24iKTsKICAgICB1aW50MzJfdCBjb3VudCA9IDA7CiAgICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29y
OwpAQCAtMzA2LDggKzMzNywxMCBAQCB2b2lkIENvdW50T3BlcmF0aW9uOjpwZXJmb3JtKCkKICAg
ICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50KTsKIH0KIAotdm9pZCBEZWxldGVSYW5nZU9w
ZXJhdGlvbjo6cGVyZm9ybSgpCit2b2lkIERlbGV0ZVJhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiB7CisgICAgQ2FsbGJhY2tD
YWxsZXIgY2FsbGJhY2tDYWxsZXIoY29tcGxldGlvbkNhbGxiYWNrKTsKKwogICAgIExPRyhTdG9y
YWdlQVBJLCAiRGVsZXRlUmFuZ2VPcGVyYXRpb24iKTsKICAgICBSZWZQdHI8SURCQmFja2luZ1N0
b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+
b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBJ
bmRleGVkREI6OkN1cnNvck5leHQpOwogICAgIGlmIChiYWNraW5nU3RvcmVDdXJzb3IpIHsKQEAg
LTMyMiw4ICszNTUsMTAgQEAgdm9pZCBEZWxldGVSYW5nZU9wZXJhdGlvbjo6cGVyZm9ybSgpCiAg
ICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwogfQogCi12b2lkIENsZWFyT3BlcmF0aW9uOjpw
ZXJmb3JtKCkKK3ZvaWQgQ2xlYXJPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKKyAgICBDYWxsYmFja0NhbGxlciBjYWxsYmFja0Nh
bGxlcihjb21wbGV0aW9uQ2FsbGJhY2spOworCiAgICAgTE9HKFN0b3JhZ2VBUEksICJPYmplY3RT
dG9yZUNsZWFyT3BlcmF0aW9uIik7CiAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y2xlYXJPYmpl
Y3RTdG9yZShtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFi
YXNlSWQsIG1fb2JqZWN0U3RvcmVJZCkpIHsKICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJy
b3IsICJFcnJvciBjbGVhcmluZyBvYmplY3Qgc3RvcmUiKSk7CkBAIC0zMzIsOCArMzY3LDEwIEBA
IHZvaWQgQ2xlYXJPcGVyYXRpb246OnBlcmZvcm0oKQogICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoKTsKIH0KIAotdm9pZCBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybSgpCit2
b2lkIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiB7CisgICAgQ2FsbGJhY2tDYWxsZXIgY2FsbGJhY2tD
YWxsZXIoY29tcGxldGlvbkNhbGxiYWNrKTsKKwogICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRl
T2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKICAgICBib29sIG9rID0gbV9iYWNraW5nU3RvcmUtPmRl
bGV0ZU9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLmlk
KTsKICAgICBpZiAoIW9rKSB7CkBAIC0zNDIsOCArMzc5LDEwIEBAIHZvaWQgRGVsZXRlT2JqZWN0
U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oKQogICAgIH0KIH0KIAotdm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb246OnBlcmZvcm0oKQordm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKKyAgICBDYWxsYmFja0NhbGxlciBjYWxsYmFj
a0NhbGxlcihjb21wbGV0aW9uQ2FsbGJhY2spOworCiAgICAgTE9HKFN0b3JhZ2VBUEksICJWZXJz
aW9uQ2hhbmdlT3BlcmF0aW9uIik7CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kJiBkYXRhYmFzZSA9
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgaW50NjRfdCBkYXRhYmFzZUlkID0gZGF0
YWJhc2UuaWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaAppbmRleCAxNGJk
ZjY3Li5iODQ2MmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oCkBAIC0z
NiwxMSArMzYsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDcmVhdGVPYmplY3RT
dG9yZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCog
dHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCog
dHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbih0cmFu
c2FjdGlvbiwgYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24odHJhbnNhY3Rpb24s
IGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOwogICAgIH0KLSAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybSgpIE9WRVJSSURFIEZJTkFMOworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
KHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOwog
cHJpdmF0ZToKICAgICBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9y
ZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKICAg
ICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQpAQCAtNTYsMTEgKzU2LDExIEBAIHBy
aXZhdGU6CiAKIGNsYXNzIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQk9w
ZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBj
cmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlTWV0YWRhdGEpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBj
cmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlTWV0YWRhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERl
bGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIG9iamVj
dFN0b3JlTWV0YWRhdGEpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEZWxldGVPYmpl
Y3RTdG9yZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1l
dGFkYXRhKSk7CiAgICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklO
QUw7CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nl
c3NDYWxsYmFjaykgT1ZFUlJJREUgRklOQUw7CiBwcml2YXRlOgogICAgIERlbGV0ZU9iamVjdFN0
b3JlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNh
Y3Rpb24pCkBAIC03NiwxMSArNzYsMTEgQEAgcHJpdmF0ZToKIAogY2xhc3MgSURCRGF0YWJhc2VC
YWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJh
bnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJh
bnNhY3Rpb24sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb25JZCwgdmVy
c2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcykpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFZlcnNpb25DaGFuZ2VPcGVyYXRpb24odHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9u
SWQsIHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpKTsKICAgICB9Ci0gICAg
dmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERSBG
SU5BTDsKIHByaXZhdGU6CiAgICAgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgdmVy
c2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCiAgICAgICAgIDogbV90cmFuc2Fj
dGlvbih0cmFuc2FjdGlvbikKQEAgLTk4LDExICs5OCwxMSBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKIH07CiAKLWNsYXNz
IENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsK
K2NsYXNzIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCU3luY2hy
b25vdXNPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJh
dGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJTeW5jaHJvbm91c09wZXJh
dGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRl
T2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQpKTsKICAgICB9CiAgICAgdmlydHVhbCB2b2lk
IHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKIHByaXZhdGU6CkBAIC0xMTYsMTEgKzExNiwxMSBA
QCBwcml2YXRlOgogICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwogfTsKIAotY2xh
c3MgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24g
eworY2xhc3MgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJTeW5j
aHJvbm91c09wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3Bl
cmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQq
IHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlT2JqZWN0U3RvcmVBYm9y
dE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBv
YmplY3RTdG9yZSkpOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgpIE9WRVJSSURF
IEZJTkFMOwogcHJpdmF0ZToKQEAgLTEzNCwxMSArMTM0LDExIEBAIHByaXZhdGU6CiAgICAgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7CiB9OwogCi1jbGFzcyBJ
REJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJ
REJPcGVyYXRpb24geworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlQWJv
cnRPcGVyYXRpb24gOiBwdWJsaWMgSURCU3luY2hyb25vdXNPcGVyYXRpb24gewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9u
QmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgcHJldmlvdXNWZXJzaW9uLCBpbnQ2
NF90IHByZXZpb3VzSW50VmVyc2lvbikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJTeW5jaHJv
bm91c09wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24s
IGNvbnN0IFN0cmluZyYgcHJldmlvdXNWZXJzaW9uLCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lv
bikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVmVyc2lvbkNoYW5nZUFib3J0
T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBwcmV2aW91c1ZlcnNpb24sIHByZXZpb3VzSW50VmVyc2lv
bikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJh
dGlvbih0cmFuc2FjdGlvbiwgcHJldmlvdXNWZXJzaW9uLCBwcmV2aW91c0ludFZlcnNpb24pKTsK
ICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKIHByaXZh
dGU6CkBAIC0xNTYsMTEgKzE1NiwxMSBAQCBwcml2YXRlOgogCiBjbGFzcyBDcmVhdGVJbmRleE9w
ZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNh
Y3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRh
ZGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlSW5kZXhPcGVy
YXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRh
ZGF0YSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZUluZGV4T3BlcmF0aW9u
KHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEp
KTsKICAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklERSBGSU5BTDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxi
YWNrKSBPVkVSUklERSBGSU5BTDsKIHByaXZhdGU6CiAgICAgQ3JlYXRlSW5kZXhPcGVyYXRpb24o
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhN
ZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0
aW9uKQpAQCAtMTc2LDExICsxNzYsMTEgQEAgcHJpdmF0ZToKICAgICBjb25zdCBJREJJbmRleE1l
dGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKIH07CiAKLWNsYXNzIENyZWF0ZUluZGV4QWJvcnRPcGVy
YXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKK2NsYXNzIENyZWF0ZUluZGV4QWJvcnRPcGVy
YXRpb24gOiBwdWJsaWMgSURCU3luY2hyb25vdXNPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlN5bmNocm9ub3VzT3BlcmF0aW9uPiBjcmVhdGUoSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0
ZUluZGV4QWJvcnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQsIGluZGV4SWQp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9u
KHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSk7CiAgICAgfQogICAgIHZpcnR1
YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7CiBwcml2YXRlOgpAQCAtMTk4LDExICsx
OTgsMTEgQEAgcHJpdmF0ZToKIAogY2xhc3MgRGVsZXRlSW5kZXhPcGVyYXRpb24gOiBwdWJsaWMg
SURCT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRp
b24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24s
IElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZUluZGV4T3BlcmF0aW9uKHRyYW5zYWN0aW9u
LCBiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBEZWxldGVJbmRleE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFj
a2luZ1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CiAgICAgfQotICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgT1ZFUlJJREUgRklO
QUw7CiBwcml2YXRlOgogICAgIERlbGV0ZUluZGV4T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3Jl
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0
YWRhdGEpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKQEAgLTIxOCwxMSAr
MjE4LDExIEBAIHByaXZhdGU6CiAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0
YWRhdGE7CiB9OwogCi1jbGFzcyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGljIElE
Qk9wZXJhdGlvbiB7CitjbGFzcyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGljIElE
QlN5bmNocm9ub3VzT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJ
REJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRh
dGEpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGNyZWF0
ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24odHJhbnNhY3Rp
b24sIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9y
ZUlkLCBpbmRleE1ldGFkYXRhKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkg
T1ZFUlJJREUgRklOQUw7CiBwcml2YXRlOgpAQCAtMjQwLDExICsyNDAsMTEgQEAgcHJpdmF0ZToK
IAogY2xhc3MgR2V0T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3Rv
cmUsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRl
KElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZSogYmFja2luZ1N0b3JlLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgR2V0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIG1ldGFkYXRh
LCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY3Vyc29yVHlwZSwgY2FsbGJhY2tz
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2V0T3BlcmF0aW9uKHRyYW5zYWN0aW9u
LCBiYWNraW5nU3RvcmUsIG1ldGFkYXRhLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5n
ZSwgY3Vyc29yVHlwZSwgY2FsbGJhY2tzKSk7CiAgICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5j
dGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgT1ZFUlJJREUgRklOQUw7CiBwcml2YXRlOgog
ICAgIEdldE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBJREJC
YWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCRGF0YWJhc2VNZXRh
ZGF0YSYgbWV0YWRhdGEsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1
cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAgICAgICAgIDog
bV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKQEAgLTI3NiwxMSArMjc2LDExIEBAIHByaXZhdGU6
CiAKIGNsYXNzIFB1dE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9u
QmFja2VuZCogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0
b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURC
S2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRz
LCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rp
b24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFi
YXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5k
ZXhLZXlzPiYgaW5kZXhLZXlzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQ
dXRPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMsIGluZGV4S2V5
cykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFB1dE9wZXJhdGlvbih0cmFuc2FjdGlv
biwgYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0
TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlzKSk7CiAgICAgfQotICAgIHZpcnR1
YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHBlcmZv
cm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgT1ZFUlJJREUgRklOQUw7
CiBwcml2YXRlOgogICAgIFB1dE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5z
YWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBk
YXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+JiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURC
RGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3Rv
cjxJbmRleEtleXM+JiBpbmRleEtleXMpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbikKQEAgLTMxMCwxMSArMzEwLDExIEBAIHByaXZhdGU6CiAKIGNsYXNzIFNldEluZGV4ZXNS
ZWFkeU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCog
dHJhbnNhY3Rpb24sIHNpemVfdCBpbmRleENvdW50KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
Qk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIHNp
emVfdCBpbmRleENvdW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTZXRJ
bmRleGVzUmVhZHlPcGVyYXRpb24odHJhbnNhY3Rpb24sIGluZGV4Q291bnQpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24odHJhbnNhY3Rpb24s
IGluZGV4Q291bnQpKTsKICAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBPVkVSUklE
RSBGSU5BTDsKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
c3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKIHByaXZhdGU6CiAgICAgU2V0SW5kZXhl
c1JlYWR5T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIHNpemVf
dCBpbmRleENvdW50KQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCkBAIC0z
MjgsMTEgKzMyOCwxMSBAQCBwcml2YXRlOgogCiBjbGFzcyBPcGVuQ3Vyc29yT3BlcmF0aW9uIDog
cHVibGljIElEQk9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURC
T3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIElu
ZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tU
eXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0
YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT3BlbkN1cnNv
ck9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JUeXBlLCB0YXNrVHlw
ZSwgY2FsbGJhY2tzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT3BlbkN1cnNvck9w
ZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwg
Y2FsbGJhY2tzKSk7CiAgICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUg
RklOQUw7CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1
Y2Nlc3NDYWxsYmFjaykgT1ZFUlJJREUgRklOQUw7CiBwcml2YXRlOgogICAgIE9wZW5DdXJzb3JP
cGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0
b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6
Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tU
eXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgICAgICA6IG1fdHJh
bnNhY3Rpb24odHJhbnNhY3Rpb24pCkBAIC0zNjIsMTEgKzM2MiwxMSBAQCBwcml2YXRlOgogCiBj
bGFzcyBDb3VudE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3Jl
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IGNy
ZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJ
bnRlcmZhY2UqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IENvdW50T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3Rv
cmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFj
a3MpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb3VudE9wZXJhdGlvbih0cmFuc2Fj
dGlvbiwgYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBr
ZXlSYW5nZSwgY2FsbGJhY2tzKSk7CiAgICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkg
T1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgT1ZFUlJJREUgRklOQUw7CiBwcml2YXRlOgogICAgIENv
dW50T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICAgICAg
OiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQpAQCAtMzkwLDExICszOTAsMTEgQEAgcHJpdmF0
ZToKIAogY2xhc3MgRGVsZXRlUmFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJU
cmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2Uq
IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRl
KElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERl
bGV0ZVJhbmdlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBEZWxldGVSYW5nZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3Jl
LCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7CiAgICAg
fQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgT1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVh
bCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgT1ZF
UlJJREUgRklOQUw7CiBwcml2YXRlOgogICAgIERlbGV0ZVJhbmdlT3BlcmF0aW9uKElEQlRyYW5z
YWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFj
a2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKQEAgLTQxNiwx
MSArNDE2LDExIEBAIHByaXZhdGU6CiAKIGNsYXNzIENsZWFyT3BlcmF0aW9uIDogcHVibGljIElE
Qk9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCT3BlcmF0aW9u
PiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0
b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q2xlYXJPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgY2FsbGJhY2tzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xl
YXJPcGVyYXRpb24odHJhbnNhY3Rpb24sIGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgY2FsbGJhY2tzKSk7CiAgICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkg
T1ZFUlJJREUgRklOQUw7CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgT1ZFUlJJREUgRklOQUw7CiBwcml2YXRlOgogICAgIENs
ZWFyT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAg
ICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>