<?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>80802</bug_id>
          
          <creation_ts>2012-03-11 19:15:16 -0700</creation_ts>
          <short_desc>Rename OptionsObject to Dictionary</short_desc>
          <delta_ts>2012-03-13 01:50:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>80207</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>benjamin</cc>
    
    <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>jsbell</cc>
    
    <cc>ojan</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>575890</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-11 19:15:16 -0700</bug_when>
    <thetext>For naming consistency with JSDictionary.{h,cpp}, we can rename OptionObject.{h,cpp} with V8Dictionary.{h,cpp}.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575893</commentid>
    <comment_count>1</comment_count>
      <attachid>131272</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-11 19:23:15 -0700</bug_when>
    <thetext>Created attachment 131272
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575904</commentid>
    <comment_count>2</comment_count>
      <attachid>131272</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-11 19:59:22 -0700</bug_when>
    <thetext>Comment on attachment 131272
Patch

Attachment 131272 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11936673</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575919</commentid>
    <comment_count>3</comment_count>
      <attachid>131272</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-11 21:21:11 -0700</bug_when>
    <thetext>Comment on attachment 131272
Patch

Attachment 131272 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/11940684</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576009</commentid>
    <comment_count>4</comment_count>
      <attachid>131272</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-12 01:58:04 -0700</bug_when>
    <thetext>Comment on attachment 131272
Patch

I found this renaming is wrong. As you can see in IDBObjectStore.h and IDBKeyRange.h, WebCore is expecting that OptionsObject.h exists both in JSC and in V8. OptionsObject.h should be a common interface between JSC and V8. So the right fix would be

- to implement bindings/js/OptionsObject.h so that it has the same interface as bindings/v8/OptionsObject.h. bindings/js/OptionsObject.h would be just a wrapper of JSDictionary.
- to rename OptionsObject.{h,cpp} to Dictionary.{h,cpp}, for clarification.

The reason why IDBObjectStore.h and IDBKeyRange.h are not currently causing any build errors is that IndexedDB is enabled in Chromium/V8 only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576165</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-12 08:57:17 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 131272 [details])
&gt; I found this renaming is wrong. As you can see in IDBObjectStore.h and IDBKeyRange.h, WebCore is expecting that OptionsObject.h exists both in JSC and in V8. OptionsObject.h should be a common interface between JSC and V8. So the right fix would be

Can we instead call it &quot;Dictionary.h&quot;? OptionsObject is a bad name for a generic object like this one because it can be used for things other than options.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576471</commentid>
    <comment_count>6</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-03-12 13:39:42 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 131272 [details] [details])
&gt; &gt; I found this renaming is wrong. As you can see in IDBObjectStore.h and IDBKeyRange.h, WebCore is expecting that OptionsObject.h exists both in JSC and in V8. OptionsObject.h should be a common interface between JSC and V8. So the right fix would be
&gt; 
&gt; Can we instead call it &quot;Dictionary.h&quot;? OptionsObject is a bad name for a generic object like this one because it can be used for things other than options.

FYI: https://bugs.webkit.org/show_bug.cgi?id=80207 adds an empty implementation of OptionsObject (patches in that bug are trying to get IDB to compile w/ JSC)

+1 to a name evocative of WebIDL/Dictionary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576762</commentid>
    <comment_count>7</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-12 17:14:34 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Can we instead call it &quot;Dictionary.h&quot;? OptionsObject is a bad name for a generic object like this one because it can be used for things other than options.
&gt; 
&gt; FYI: https://bugs.webkit.org/show_bug.cgi?id=80207 adds an empty implementation of OptionsObject (patches in that bug are trying to get IDB to compile w/ JSC)

OK, please land the patch for 80207 first, to avoid conflict.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576765</commentid>
    <comment_count>8</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-03-12 17:16:07 -0700</bug_when>
    <thetext>Adding benjamin@ who is working on 80207</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577068</commentid>
    <comment_count>9</comment_count>
      <attachid>131552</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-12 23:03:21 -0700</bug_when>
    <thetext>Created attachment 131552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577069</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-12 23:06:56 -0700</bug_when>
    <thetext>Attachment 131552 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:1421:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Total errors found: 1 in 32 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577170</commentid>
    <comment_count>11</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-13 01:49:48 -0700</bug_when>
    <thetext>Ews-bots look fine. Committed manually to avoid style check errors.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131272</attachid>
            <date>2012-03-11 19:23:15 -0700</date>
            <delta_ts>2012-03-12 23:03:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80802-20120312112312.patch</filename>
            <type>text/plain</type>
            <size>61908</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNDAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmIyZThkNmFlMGQ5ZDVl
YjUwMDExMDE2OWU2OTE4ZjY5YTg2YTAyNy4uMGM2YjY4NWQ1ZjM3NzI1YTBjNTcxYjMwZWEwZjJl
MjMxNjkwN2FmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDEyLTAzLTExICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZW5hbWUgT3B0aW9u
c09iamVjdCB0byBWOERpY3Rpb25hcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgwODAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRm9yIG5hbWluZyBjb25zaXN0ZW5jeSB3aXRoIEpTRGljdGlvbmFyeS57
aCxjcHB9LAorICAgICAgICB0aGlzIHBhdGNoIHJlbmFtZXMgT3B0aW9uc09iamVjdC57aCxjcHB9
IHdpdGggVjhEaWN0aW9uYXJ5LntoLGNwcH0uCisKKyAgICAgICAgTm8gdGVzdHMuIE5vIGNoYW5n
ZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL09wdGlvbnNPYmplY3QuaDog
UmVtb3ZlZC4gVGhpcyBmaWxlIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkKKyAgICAgICAgc2luY2Ug
SlNDIGFscmVhZHkgaGFzIEpTRGljdGlvbmFyeS57aCxjcHB9LgorCisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhEaWN0aW9uYXJ5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L09wdGlvbnNPYmplY3QuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpWOERpY3Rpb25hcnk6OlY4RGljdGlvbmFyeSk6CisgICAgICAgIChXZWJDb3JlOjpW
OERpY3Rpb25hcnk6On5WOERpY3Rpb25hcnkpOgorICAgICAgICAoV2ViQ29yZTo6VjhEaWN0aW9u
YXJ5OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6VjhEaWN0aW9uYXJ5Ojppc09iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpWOERpY3Rpb25hcnk6OmlzVW5kZWZpbmVkT3JOdWxsKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4RGljdGlvbmFyeTo6Z2V0S2V5KToKKyAgICAgICAgKFdlYkNv
cmU6OlY4RGljdGlvbmFyeTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RGljdGlvbmFyeTo6
Z2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERp
Y3Rpb25hcnkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlv
bnNPYmplY3QuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVjhEaWN0aW9uYXJ5KToK
KworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IFJlbmFtZWQgT3B0aW9uc09iamVjdCB0
byBWOERpY3Rpb25hcnkuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKElEQkRhdGFi
YXNlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGw6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaDoKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5k
ZXgpOgorICAgICAgICAoSURCT2JqZWN0U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmlkbDoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAq
IFVzZVY4LmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAgKEdlbmVy
YXRlUGFyYW1ldGVyc0NoZWNrKToKKyAgICAgICAgKEdlbmVyYXRlRXZlbnRDb25zdHJ1Y3RvckNh
bGxiYWNrKToKKyAgICAgICAgKEdldE5hdGl2ZVR5cGUpOgorICAgICAgICAoSlNWYWx1ZVRvTmF0
aXZlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRNdXRhdGlvbk9ic2Vy
dmVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4V2ViS2l0TXV0YXRpb25PYnNlcnZl
cjo6b2JzZXJ2ZUNhbGxiYWNrKToKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9D
UFAvV2ViRE9NVGVzdE9iai5jcHA6IFVwZGF0ZWQgcnVuLWJpbmRpbmdzLXRlc3RzIHJlc3VsdHMu
CisgICAgICAgIChXZWJET01UZXN0T2JqOjpvcHRpb25zT2JqZWN0KToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKHdl
YmtpdF9kb21fdGVzdF9vYmpfb3B0aW9uc19vYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3B0aW9uc09iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW06CisgICAgICAgICgtW0RPTVRlc3RPYmogb3B0aW9u
c09iamVjdDpvb286XSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmou
aWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OmNv
bnN0cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFRlc3RFdmVudENvbnN0
cnVjdG9ySW5pdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2
ZW50Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9i
akludGVybmFsOjpvcHRpb25zT2JqZWN0Q2FsbGJhY2spOgorCiAyMDEyLTAzLTExICBTaGF3biBT
aW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHI5
MzYxNCk6IHNjcm9sbGluZyBkaXYgZG9lcyBub3QgcmVwYWludApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KaW5kZXggMmJkMWY2NTRjOTBkYzcyNTlhYjkyNjM3NTNlYmJkNzMyMzMxYmQxYi4u
ODk3MzkwY2MzYTY4OTc5YjQyYTJkYTA4ZDQwZDQ2MWZlYmY4ZGU2OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCkBAIC0xMzg2LDcgKzEzODYsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmggXAotCVNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL09wdGlvbnNPYmplY3QuaCBcCisJU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvVjhEaWN0aW9uYXJ5LmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY2hlZHVsZWRBY3Rpb24uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRleCBjYzUzYTg4MmFmMzNkOTk0OTg1ZWUyZjNlY2Qx
Y2UxZmQ2MDJjMTkyLi41NzRjNDNmZDFjYTI2NTYzZWZkYTQyM2U4OGY0MjZlNDUxNDNlNzIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3Bw
CkBAIC04NSw3ICs4NSw3IEBAIHZvaWQgSURCRGF0YWJhc2U6OmNsZWFyVmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKICAgICBtX3ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbiA9IDA7CiB9CiAKLVBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQkRh
dGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IE9wdGlv
bnNPYmplY3QmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgVjhEaWN0aW9uYXJ5JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKSB7CiAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCmluZGV4IGZmZTIxZDgyNmUyZDBmYTRjNjA1NmI0
NmMzYzAwOTkxNTNmYzljNDEuLjBjYzYxOTJmYmUwOWJjMGFiNGQ5ZWNjMWI0M2YwMDliNmEwYjc4
MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
aApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5o
IgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24u
aCIKLSNpbmNsdWRlICJPcHRpb25zT2JqZWN0LmgiCisjaW5jbHVkZSAiVjhEaWN0aW9uYXJ5Lmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTYyLDggKzYyLDggQEAgcHVibGljOgogICAg
IFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZC0+b2JqZWN0U3RvcmVOYW1lcygpOyB9CiAKICAgICAvLyBGSVhNRTogVHJ5
IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KLSAgICBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjcmVhdGVPYmplY3RTdG9yZShuYW1l
LCBPcHRpb25zT2JqZWN0KCksIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+
IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgT3B0aW9uc09iamVj
dCYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBjcmVh
dGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBjcmVhdGVPYmplY3RTdG9yZShuYW1lLCBWOERpY3Rpb25hcnkoKSwgZWMpOyB9CisgICAg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBWOERpY3Rpb25hcnkmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4sIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgc2hvcnQgbW9kZSwg
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwKaW5kZXggOWFiYjM4ZDg5M2Y0MTc5MTFhZTNhYTQ1MTE3
NzU3ZDM3OGUyOGY0OC4uNGFiNzI4ODYwNGI3NzRkMjBmM2ViMTU2OGQzMWI3ODgyZjQxNWFkZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlk
bApAQCAtMzksNyArMzksNyBAQCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgICAgIGF0dHJpYnV0ZSBF
dmVudExpc3RlbmVyIG9uZXJyb3I7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9u
dmVyc2lvbmNoYW5nZTsKIAotICAgICAgICBJREJPYmplY3RTdG9yZSBjcmVhdGVPYmplY3RTdG9y
ZShpbiBET01TdHJpbmcgbmFtZSwgaW4gW09wdGlvbmFsXSBPcHRpb25zT2JqZWN0IG9wdGlvbnMp
CisgICAgICAgIElEQk9iamVjdFN0b3JlIGNyZWF0ZU9iamVjdFN0b3JlKGluIERPTVN0cmluZyBu
YW1lLCBpbiBbT3B0aW9uYWxdIFY4RGljdGlvbmFyeSBvcHRpb25zKQogICAgICAgICAgICAgcmFp
c2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgZGVsZXRlT2JqZWN0U3Rv
cmUoaW4gRE9NU3RyaW5nIG5hbWUpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhj
ZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5n
ZS5oCmluZGV4IGI5YTk4ZGFlYjNkZjA3YmQ1YTNmYzM2NGI2OGE3ZjJlYjJjOWM0NDIuLmE5YWZk
MjhjM2IxODZiMzVlZWFiZmU0YjNhMGRiYjRkNjJkYTkyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaApAQCAtMjksNyArMjksNyBAQAogI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVk
ZSAiT3B0aW9uc09iamVjdC5oIgorI2luY2x1ZGUgIlY4RGljdGlvbmFyeS5oIgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5k
ZXggNWMzNDY2NmQzZmI1MWNkYjBjNWM4ZmY0YTNmY2M1MDQ1NDZmNDM0ZC4uODYyMGY1YzMyNTEx
NDQ0ODU0MmIwOGY5ZTAzOTkyNDRjNTVkNDZlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtMTc1LDcgKzE3NSw3IEBA
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmNsZWFyKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwog
fQogCi1QYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGNvbnN0IE9wdGlvbnNPYmpl
Y3QmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJJbmRleD4gSURC
T2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBrZXlQYXRoLCBjb25zdCBWOERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4Iik7CiAgICAg
aWYgKCFJREJJc1ZhbGlkS2V5UGF0aChrZXlQYXRoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKaW5kZXggNTA5MDkwZWQ4ZGE2MmZi
MzgzYTg3MTI1Yzc5ODcwOGI1YmQ4MjQwNi4uNmNkMTk3MGZmYzYzZjgzYThjNmRmNzY3NDg3NDA5
NzRkMzk3NGZiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZS5oCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgogI2luY2x1ZGUg
IklEQlRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiT3B0aW9uc09iamVjdC5oIgorI2luY2x1ZGUg
IlY4RGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAi
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAg
LTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBUcnkgdG8gbW9kaWZ5IHRoZSBj
b2RlIGdlbmVyYXRvciBzbyB0aGlzIGlzIHVubmVlZGVkLgogICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gYWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFk
ZChjb250ZXh0LCB2YWx1ZSwgMCwgZWMpOyAgfQogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
cHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHB1dChjb250
ZXh0LCB2YWx1ZSwgMCwgZWMpOyAgfQotICAgIFBhc3NSZWZQdHI8SURCSW5kZXg+IGNyZWF0ZUlu
ZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gY3JlYXRlSW5kZXgobmFtZSwga2V5UGF0aCwgT3B0aW9uc09iamVj
dCgpLCBlYyk7IH0KKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
cmV0dXJuIGNyZWF0ZUluZGV4KG5hbWUsIGtleVBhdGgsIFY4RGljdGlvbmFyeSgpLCBlYyk7IH0K
ICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29u
dGV4dCwgMCwgZWMpOyB9IAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwg
a2V5UmFuZ2UsIElEQkN1cnNvcjo6TkVYVCwgZWMpOyB9IAogCkBAIC03NCw3ICs3NCw3IEBAIHB1
YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJik7
CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjbGVhcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgUGFzc1JlZlB0cjxJREJJbmRleD4gY3JlYXRlSW5k
ZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGNvbnN0IE9wdGlv
bnNPYmplY3QmLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJJbmRleD4gY3Jl
YXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGNvbnN0
IFY4RGljdGlvbmFyeSYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQkluZGV4
PiBpbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRl
bGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwKaW5k
ZXggYWIxMjAwY2Y0M2IwNTdiMGQ1OWI0ODNhNzM5YzMyZDIzMDAyNGUwOS4uYzEzZjg1MGM0MDQw
NjhhOWFiNTE4MDdhNGI2MTZkMDU0ZjdjNDcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbApAQCAtNDcsNyArNDcsNyBAQCBt
b2R1bGUgc3RvcmFnZSB7CiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9u
KTsKICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qg
b3BlbkN1cnNvcihpbiBbT3B0aW9uYWxdIElEQktleVJhbmdlIHJhbmdlLCBpbiBbT3B0aW9uYWxd
IHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbikKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJh
c2VFeGNlcHRpb24pOwotICAgICAgICBJREJJbmRleCBjcmVhdGVJbmRleChpbiBET01TdHJpbmcg
bmFtZSwgaW4gRE9NU3RyaW5nIGtleVBhdGgsIGluIFtPcHRpb25hbF0gT3B0aW9uc09iamVjdCBv
cHRpb25zKQorICAgICAgICBJREJJbmRleCBjcmVhdGVJbmRleChpbiBET01TdHJpbmcgbmFtZSwg
aW4gRE9NU3RyaW5nIGtleVBhdGgsIGluIFtPcHRpb25hbF0gVjhEaWN0aW9uYXJ5IG9wdGlvbnMp
CiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKICAgICAgICAgSURC
SW5kZXggaW5kZXgoaW4gRE9NU3RyaW5nIG5hbWUpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRh
dGFiYXNlRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkg
Yi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDU2YzE3ZjNmY2FiZTYwNmNkYjBhY2Jl
NmVlZWQ0ZDMwMTNkOTQxZDYuLmI0MmU3YTA2NjNlZmQ2MTUwYTZhZjYwODNiZjg1MTg5MWEzMDNm
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQpAQCAtMTA5LDcgKzEwOSw3IEBAIHY4IHsKICAgICAgICAgYmluZGlu
Z3MvdjgvRE9NRGF0YVN0b3JlLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4L05QVjhPYmplY3Qu
Y3BwIFwKICAgICAgICAgYmluZGluZ3MvdjgvTlBPYmplY3RXcmFwcGVyLmNwcCBcCi0gICAgICAg
IGJpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuY3BwIFwKKyAgICAgICAgYmluZGluZ3MvdjgvVjhE
aWN0aW9uYXJ5LmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4L1BhZ2VTY3JpcHREZWJ1Z1NlcnZl
ci5jcHAgXAogICAgICAgICBiaW5kaW5ncy92OC9SZXRhaW5lZERPTUluZm8uY3BwIFwKICAgICAg
ICAgYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Vc2VWOC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1VzZVY4LmNtYWtlCmluZGV4IGI4
ZjVmZDI2N2VhNWEzZWI5MmQ4OTE5ZGExNGFkZDUzNDZhZjc4ZTAuLjZkMWQxZWE0NmE3NTMwYzEw
NGM5YjdiM2ExYTRhNWI3ZDMyY2UxOWIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1VzZVY4
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1VzZVY4LmNtYWtlCkBAIC0yMyw3ICsyMyw3IEBA
IExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIGJpbmRpbmdzL3Y4L0RhdGVFeHRlbnNp
b24uY3BwCiAgICAgYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKICAgICBiaW5k
aW5ncy92OC9Jc29sYXRlZFdvcmxkLmNwcAotICAgIGJpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3Qu
Y3BwCisgICAgYmluZGluZ3MvdjgvVjhEaWN0aW9uYXJ5LmNwcAogICAgIGJpbmRpbmdzL3Y4L1Bh
Z2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKICAgICBiaW5kaW5ncy92OC9SZXRhaW5lZERPTUluZm8u
Y3BwCiAgICAgYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IDc2ODU3MjY3NGYxNWViM2M5YTAwMjEzMWJkMDczZmVjMTExNGRlN2UuLjlmMGQ3ZWVkOWY3
ZDkxYTFjMjc0NjkzNTUxMGE3ZmNkNjFkNGQ0YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE4MTgs
NyArMTgxOCw3IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3Vz
dG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuaCcsCi0g
ICAgICAgICAgICAnYmluZGluZ3MvanMvT3B0aW9uc09iamVjdC5oJywKKyAgICAgICAgICAgICdi
aW5kaW5ncy9qcy9WOERpY3Rpb25hcnkuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvU2No
ZWR1bGVkQWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0
aW9uLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5j
cHAnLApAQCAtMTg5MSw4ICsxODkxLDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9OUE9i
amVjdFdyYXBwZXIuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvTlBWOE9iamVjdC5jcHAn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuaCcsCi0gICAgICAgICAgICAn
YmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHAnLAotICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L09wdGlvbnNPYmplY3QuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhEaWN0aW9uYXJ5
LmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhEaWN0aW9uYXJ5LmgnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L093bkhhbmRsZS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92
OC9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9Q
YWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCmluZGV4IDNhZDA5Y2Y0NTQ4ZWQ4ZDNmNDY5ZTdjNjA5MjRkOTFmMzQ3
YTgyYWUuLjQyMTZiOTRiM2E1ODgyNTM2NTU4MzJlMmI3YjJlZGMxNjQ1Mjk2MjAgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC02ODg5Nyw3ICs2
ODg5Nyw3IEBACiAJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQkJPC9GaWxlPgogCQkJCTxG
aWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcT3B0aW9uc09iamVjdC5oIgor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFY4RGljdGlvbmFyeS5oIgogCQkJCQk+
CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9PcHRpb25zT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9PcHRp
b25zT2JqZWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0OTEwYzAzMmUxNzky
MjQ5MTg3MTM3NjlhYWRjMjY2ZTc4ZWRlYTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvT3B0aW9uc09iamVj
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgT3B0aW9u
c09iamVjdF9oCi0jZGVmaW5lIE9wdGlvbnNPYmplY3RfaAotCi0vLyBGSVhNRTogSW1wbGVtZW50
LgotCi0jZW5kaWYgLy8gT3B0aW9uc09iamVjdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IGE1ZGFiZGZkNTljOWY0ZTU4
ZTZjZTM5OGNiYWJkZTI0ZTQzYmNiNWYuLjNkMDQ0MTZlNDFmNzgxYzhiZmU1NmM4MjI1ODE2ODUy
ZGE5ZGNjODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvclY4LnBtCkBAIC0yODksNyArMjg5LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAK
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiY2xhc3MgRmxvYXRSZWN0O1xuIikgaWYgJHN2Z1Byb3BlcnR5VHlwZSAmJiAkc3ZnUHJvcGVy
dHlUeXBlIGVxICJGbG9hdFJlY3QiOwotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFzcyBP
cHRpb25zT2JqZWN0O1xuIikgaWYgSXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRkYXRhTm9kZSwgIkV2
ZW50Iik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzIFY4RGljdGlvbmFyeTtcbiIp
IGlmIElzQ29uc3RydWN0b3JUZW1wbGF0ZSgkZGF0YU5vZGUsICJFdmVudCIpOwogCiAgICAgbXkg
JG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlRm9yQ29udmVyc2lvbnMoJGRhdGFOb2RlLCAkaW50
ZXJmYWNlTmFtZSk7CiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5h
bWVkQ29uc3RydWN0b3IifSkgewpAQCAtNDk4LDcgKzQ5OCw3IEBAIEVORAogICAgIH0KIAogICAg
IGlmIChJc0NvbnN0cnVjdG9yVGVtcGxhdGUoJGRhdGFOb2RlLCAiRXZlbnQiKSkgewotICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5ib29sIGZpbGwke2ltcGxDbGFzc05hbWV9SW5pdCgk
e2ltcGxDbGFzc05hbWV9SW5pdCYsIGNvbnN0IE9wdGlvbnNPYmplY3QmKTtcbiIpOworICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5ib29sIGZpbGwke2ltcGxDbGFzc05hbWV9SW5pdCgk
e2ltcGxDbGFzc05hbWV9SW5pdCYsIGNvbnN0IFY4RGljdGlvbmFyeSYpO1xuIik7CiAgICAgfQog
CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxufVxuXG4iKTsKQEAgLTE1OTYsNyArMTU5Niw3
IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgRVhDRVBUSU9OX0JMT0NLKCRuYXRpdmVU
eXBlLCAkcGFyYW1ldGVyTmFtZSwgIiAuCiAgICAgICAgICAgICAgICAgIEpTVmFsdWVUb05hdGl2
ZSgkcGFyYW1ldGVyLCAiTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgJHBhcmFtSW5kZXgs
ICRwYXJhbWV0ZXJEZWZhdWx0UG9saWN5KSIpIC4gIik7XG4iOwotICAgICAgICAgICAgaWYgKCRu
YXRpdmVUeXBlIGVxICdPcHRpb25zT2JqZWN0JykgeworICAgICAgICAgICAgaWYgKCRuYXRpdmVU
eXBlIGVxICdWOERpY3Rpb25hcnknKSB7CiAgICAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tT
dHJpbmcgLj0gIiAgICBpZiAoYXJncy5MZW5ndGgoKSA+ICRwYXJhbUluZGV4ICYmICEkcGFyYW1l
dGVyTmFtZS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICEkcGFyYW1ldGVyTmFtZS5pc09iamVjdCgp
KSB7XG4iOwogICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgICAg
IGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7XG4iOwogICAgICAgICAgICAgICAgJHBhcmFtZXRlckNo
ZWNrU3RyaW5nIC49ICIgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7XG4iOwpA
QCAtMTcyMSw3ICsxNzIxLDcgQEAgc3ViIEdlbmVyYXRlRXZlbnRDb25zdHJ1Y3RvckNhbGxiYWNr
CiAgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CiAgICAgbXkgJGltcGxDbGFzc05hbWUgPSBzaGlm
dDsKIAotICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJPcHRpb25zT2JqZWN0LmgiKTsKKyAgICBBZGRU
b0ltcGxJbmNsdWRlcygiVjhEaWN0aW9uYXJ5LmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
VjhCaW5kaW5nTWFjcm9zLmgiKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwogdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4JHtpbXBsQ2xhc3NOYW1lfTo6Y29uc3RydWN0b3JDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTc0MCw3ICsxNzQwLDcgQEAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4JHtpbXBsQ2xhc3NOYW1lfTo6Y29uc3RydWN0b3JDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnQKICAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JM
T0NLKFY4UGFyYW1ldGVyPD4sIHR5cGUsIGFyZ3NbMF0pOwogICAgICR7aW1wbENsYXNzTmFtZX1J
bml0IGV2ZW50SW5pdDsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+PSAyKSB7Ci0gICAgICAgIEVY
Q0VQVElPTl9CTE9DSyhPcHRpb25zT2JqZWN0LCBvcHRpb25zLCBhcmdzWzFdKTsKKyAgICAgICAg
RVhDRVBUSU9OX0JMT0NLKFY4RGljdGlvbmFyeSwgb3B0aW9ucywgYXJnc1sxXSk7CiAgICAgICAg
IGlmICghZmlsbCR7aW1wbENsYXNzTmFtZX1Jbml0KGV2ZW50SW5pdCwgb3B0aW9ucykpCiAgICAg
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIH0KQEAgLTE3NTEsNyArMTc1MSw3
IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOCR7aW1wbENsYXNzTmFtZX06OmNvbnN0cnVjdG9y
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50CiAgICAgcmV0dXJuIHRvVjgoZXZlbnQucmVsZWFz
ZSgpLCBhcmdzLkhvbGRlcigpKTsKIH0KIAotYm9vbCBmaWxsJHtpbXBsQ2xhc3NOYW1lfUluaXQo
JHtpbXBsQ2xhc3NOYW1lfUluaXQmIGV2ZW50SW5pdCwgY29uc3QgT3B0aW9uc09iamVjdCYgb3B0
aW9ucykKK2Jvb2wgZmlsbCR7aW1wbENsYXNzTmFtZX1Jbml0KCR7aW1wbENsYXNzTmFtZX1Jbml0
JiBldmVudEluaXQsIGNvbnN0IFY4RGljdGlvbmFyeSYgb3B0aW9ucykKIHsKIEVORAogCkBAIC0z
MzYwLDcgKzMzNjAsNyBAQCBzdWIgR2V0TmF0aXZlVHlwZQogICAgIHJldHVybiAiTm9kZSoiIGlm
ICR0eXBlIGVxICJFdmVudFRhcmdldCIgYW5kICRpc1BhcmFtZXRlcjsKICAgICByZXR1cm4gImRv
dWJsZSIgaWYgJHR5cGUgZXEgIkRhdGUiOwogICAgIHJldHVybiAiU2NyaXB0VmFsdWUiIGlmICR0
eXBlIGVxICJET01PYmplY3QiOwotICAgIHJldHVybiAiT3B0aW9uc09iamVjdCIgaWYgJHR5cGUg
ZXEgIk9wdGlvbnNPYmplY3QiOworICAgIHJldHVybiAiVjhEaWN0aW9uYXJ5IiBpZiAkdHlwZSBl
cSAiVjhEaWN0aW9uYXJ5IjsKIAogICAgIHJldHVybiAiU3RyaW5nIiBpZiAkdHlwZSBlcSAiRE9N
VXNlckRhdGEiOyAgIyBGSVhNRTogVGVtcG9yYXJ5IGhhY2s/CiAKQEAgLTM0NjMsOCArMzQ2Myw4
IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICAgICAgcmV0dXJuICJjcmVhdGVJREJLZXlGcm9t
VmFsdWUoJHZhbHVlKSI7CiAgICAgfQogCi0gICAgaWYgKCR0eXBlIGVxICJPcHRpb25zT2JqZWN0
IikgewotICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiT3B0aW9uc09iamVjdC5oIik7CisgICAg
aWYgKCR0eXBlIGVxICJWOERpY3Rpb25hcnkiKSB7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCJWOERpY3Rpb25hcnkuaCIpOwogICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgIH0KIApAQCAt
MzYxMiw3ICszNjEyLDcgQEAgbXkgJW5vbl93cmFwcGVyX3R5cGVzID0gKAogICAgICdOb2RlRmls
dGVyJyA9PiAxLAogICAgICdFdmVudExpc3RlbmVyJyA9PiAxLAogICAgICdJREJLZXknID0+IDEs
Ci0gICAgJ09wdGlvbnNPYmplY3QnID0+IDEsCisgICAgJ1Y4RGljdGlvbmFyeScgPT4gMSwKICAg
ICAnRGF0ZScgPT4gMSwKICAgICAnTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcicgPT4gMQogKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9N
VGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RPYmouY3BwCmluZGV4IDlkNjNmZGRlN2VkNjMyZGI5ZTg1YjZlMjYwNmRkYjgwZDlk
Y2I2ODYuLjE1YmMxZGRjNTM5NzE5MmU3YjkxNGYyODk4YjU3MDA0MzRiZjUwZDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9i
ai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJE
T01UZXN0T2JqLmNwcApAQCAtMjUsMTUgKzI1LDE1IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIk9wdGlv
bnNPYmplY3QuaCIKICNpbmNsdWRlICJTVkdQb2ludC5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlRlc3RPYmouaCIKKyNpbmNsdWRlICJWOERpY3Rpb25h
cnkuaCIKICNpbmNsdWRlICJXZWJET01Eb2N1bWVudC5oIgogI2luY2x1ZGUgIldlYkRPTUlEQktl
eS5oIgotI2luY2x1ZGUgIldlYkRPTU9wdGlvbnNPYmplY3QuaCIKICNpbmNsdWRlICJXZWJET01T
VkdQb2ludC5oIgogI2luY2x1ZGUgIldlYkRPTVN0cmluZy5oIgorI2luY2x1ZGUgIldlYkRPTVY4
RGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIldlYkRPTWEuaCIKICNpbmNsdWRlICJXZWJET01iLmgi
CiAjaW5jbHVkZSAiV2ViRE9NYm9vbC5oIgpAQCAtNzA0LDcgKzcwNCw3IEBAIHZvaWQgV2ViRE9N
VGVzdE9iajo6aWRiS2V5KGNvbnN0IFdlYkRPTUlEQktleSYga2V5KQogICAgIGltcGwoKS0+aWRi
S2V5KHRvV2ViQ29yZShrZXkpKTsKIH0KIAotdm9pZCBXZWJET01UZXN0T2JqOjpvcHRpb25zT2Jq
ZWN0KGNvbnN0IFdlYkRPTU9wdGlvbnNPYmplY3QmIG9vLCBjb25zdCBXZWJET01PcHRpb25zT2Jq
ZWN0JiBvb28pCit2b2lkIFdlYkRPTVRlc3RPYmo6Om9wdGlvbnNPYmplY3QoY29uc3QgV2ViRE9N
VjhEaWN0aW9uYXJ5JiBvbywgY29uc3QgV2ViRE9NVjhEaWN0aW9uYXJ5JiBvb28pCiB7CiAgICAg
aWYgKCFpbXBsKCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKaW5kZXggOGM3MmYy
MzMzMWRiOWE5YmNhZTYzZDBmM2M4N2Q0OGRlMjM0N2Q5MC4uY2JiZDFhMDRlZjYzYjM4YzZlZWU4
YjEzN2Q0Mjg2OWQ4MmRlNWI0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKQEAgLTMzLDEwICszMywxMCBA
QCBjbGFzcyBUZXN0T2JqOwogY2xhc3MgV2ViRE9NRG9jdW1lbnQ7CiBjbGFzcyBXZWJET01FdmVu
dExpc3RlbmVyOwogY2xhc3MgV2ViRE9NSURCS2V5OwotY2xhc3MgV2ViRE9NT3B0aW9uc09iamVj
dDsKIGNsYXNzIFdlYkRPTVNWR1BvaW50OwogY2xhc3MgV2ViRE9NU3RyaW5nOwogY2xhc3MgV2Vi
RE9NVGVzdE9iajsKK2NsYXNzIFdlYkRPTVY4RGljdGlvbmFyeTsKIGNsYXNzIFdlYkRPTWE7CiBj
bGFzcyBXZWJET01iOwogY2xhc3MgV2ViRE9NYm9vbDsKQEAgLTE1MCw3ICsxNTAsNyBAQCBwdWJs
aWM6CiAgICAgV2ViRE9NVGVzdE9iaiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dz
KGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcp
OwogICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFsaXpl
ZEFyZyk7CiAgICAgdm9pZCBpZGJLZXkoY29uc3QgV2ViRE9NSURCS2V5JiBrZXkpOwotICAgIHZv
aWQgb3B0aW9uc09iamVjdChjb25zdCBXZWJET01PcHRpb25zT2JqZWN0JiBvbywgY29uc3QgV2Vi
RE9NT3B0aW9uc09iamVjdCYgb29vKTsKKyAgICB2b2lkIG9wdGlvbnNPYmplY3QoY29uc3QgV2Vi
RE9NVjhEaWN0aW9uYXJ5JiBvbywgY29uc3QgV2ViRE9NVjhEaWN0aW9uYXJ5JiBvb28pOwogICAg
IHZvaWQgbWV0aG9kV2l0aEV4Y2VwdGlvbigpOwogICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihj
b25zdCBXZWJET01TdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlzdGVuZXImIGxpc3Rl
bmVyLCBib29sIHVzZUNhcHR1cmUpOwogICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25z
dCBXZWJET01TdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkRPTUV2ZW50TGlzdGVuZXImIGxpc3RlbmVy
LCBib29sIHVzZUNhcHR1cmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAppbmRl
eCAzNWFkZDMwODc1ODI5YTRjZDYwN2M3MGM5NmJlOGQ5N2E3MTAwNWIwLi5iYWViOGRjODJhNzk3
OGJmYjExMzE3MmNmYzFmNzk4NWRlZDRjZDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
T2JqLmNwcApAQCAtMzcsMTQgKzM3LDE0IEBACiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTURv
Y3VtZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01JREJLZXkuaCIKICNp
bmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NSURCS2V5UHJpdmF0ZS5oIgotI2luY2x1ZGUgIndlYmtp
dC9XZWJLaXRET01PcHRpb25zT2JqZWN0LmgiCi0jaW5jbHVkZSAid2Via2l0L1dlYktpdERPTU9w
dGlvbnNPYmplY3RQcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVNWR1BvaW50
LmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVNWR1BvaW50UHJpdmF0ZS5oIgogI2luY2x1
ZGUgIndlYmtpdC9XZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJ3
ZWJraXQvV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlUHJpdmF0ZS5oIgogI2luY2x1ZGUg
IndlYmtpdC9XZWJLaXRET01UZXN0T2JqLmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRl
c3RPYmpQcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVY4RGljdGlvbmFyeS5o
IgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01WOERpY3Rpb25hcnlQcml2YXRlLmgiCiAjaW5j
bHVkZSAid2Via2l0L1dlYktpdERPTWEuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NYVBy
aXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NYi5oIgpAQCAtMjE0LDE5ICsyMTQs
MTkgQEAgd2Via2l0X2RvbV90ZXN0X29ial9pZGJfa2V5KFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IFdlYktpdERPTUlEQktleSoga2V5KQogfQogCiB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX29w
dGlvbnNfb2JqZWN0KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTU9wdGlvbnNPYmpl
Y3QqIG9vLCBXZWJLaXRET01PcHRpb25zT2JqZWN0KiBvb28pCit3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X29wdGlvbnNfb2JqZWN0KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVY4RGljdGlv
bmFyeSogb28sIFdlYktpdERPTVY4RGljdGlvbmFyeSogb29vKQogewogICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc2VsZik7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwog
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdf
cmV0dXJuX2lmX2ZhaWwob28pOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwob29vKTsKLSAgICBXZWJD
b3JlOjpPcHRpb25zT2JqZWN0ICogY29udmVydGVkX29vID0gTlVMTDsKKyAgICBXZWJDb3JlOjpW
OERpY3Rpb25hcnkgKiBjb252ZXJ0ZWRfb28gPSBOVUxMOwogICAgIGlmIChvbyAhPSBOVUxMKSB7
CiAgICAgICAgIGNvbnZlcnRlZF9vbyA9IFdlYktpdDo6Y29yZShvbyk7CiAgICAgICAgIGdfcmV0
dXJuX2lmX2ZhaWwoY29udmVydGVkX29vKTsKICAgICB9Ci0gICAgV2ViQ29yZTo6T3B0aW9uc09i
amVjdCAqIGNvbnZlcnRlZF9vb28gPSBOVUxMOworICAgIFdlYkNvcmU6OlY4RGljdGlvbmFyeSAq
IGNvbnZlcnRlZF9vb28gPSBOVUxMOwogICAgIGlmIChvb28gIT0gTlVMTCkgewogICAgICAgICBj
b252ZXJ0ZWRfb29vID0gV2ViS2l0Ojpjb3JlKG9vbyk7CiAgICAgICAgIGdfcmV0dXJuX2lmX2Zh
aWwoY29udmVydGVkX29vbyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgKaW5kZXggY2Fl
YjUxZmZhYjA4NWUxNGM3OTUxYjE1ODQxZjg4Zjc1NGQ5ZjU3Ny4uNjEyNTQ4NmVkNDY4OWMyMTBi
ZTNjMDVhYjM5YjgwZWRiMjcyYzQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaApA
QCAtMTUzLDE0ICsxNTMsMTQgQEAgd2Via2l0X2RvbV90ZXN0X29ial9pZGJfa2V5KFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTUlEQktleSoga2V5KTsKIC8qKgogICogd2Via2l0X2Rv
bV90ZXN0X29ial9vcHRpb25zX29iamVjdDoKICAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAb286IEEgI1dlYktpdERPTU9wdGlvbnNPYmplY3QKLSAqIEBvb286IEEgI1dlYktpdERP
TU9wdGlvbnNPYmplY3QKKyAqIEBvbzogQSAjV2ViS2l0RE9NVjhEaWN0aW9uYXJ5CisgKiBAb29v
OiBBICNXZWJLaXRET01WOERpY3Rpb25hcnkKICAqCiAgKiBSZXR1cm5zOgogICoKICoqLwogV0VC
S0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX29wdGlvbnNfb2JqZWN0KFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTU9wdGlvbnNPYmplY3QqIG9vLCBXZWJLaXRET01PcHRp
b25zT2JqZWN0KiBvb28pOword2Via2l0X2RvbV90ZXN0X29ial9vcHRpb25zX29iamVjdChXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01WOERpY3Rpb25hcnkqIG9vLCBXZWJLaXRET01W
OERpY3Rpb25hcnkqIG9vbyk7CiAKIC8qKgogICogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rf
d2l0aF9leGNlcHRpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IDExYTIwZGY5MmFhOTZiZTgxN2NlYzU0Zjk4
MzQ0NDU2ZjYzZGJkOGMuLjE1MGVhZGM2MWNkMTBlOWY4MmU0ZDRlOTk3MmQ2NzBhOWEzZDNiZjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNsdWRlICJKU0RPTVN0cmluZ0xp
c3QuaCIKICNpbmNsdWRlICJKU0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVy
LmgiCi0jaW5jbHVkZSAiSlNPcHRpb25zT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTVkdEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkpTU1ZHUG9pbnQuaCIKICNpbmNsdWRlICJKU1Rlc3RDYWxsYmFjay5o
IgogI2luY2x1ZGUgIkpTVGVzdE9iai5oIgorI2luY2x1ZGUgIkpTVjhEaWN0aW9uYXJ5LmgiCiAj
aW5jbHVkZSAiSlNhLmgiCiAjaW5jbHVkZSAiSlNiLmgiCiAjaW5jbHVkZSAiSlNib29sLmgiCkBA
IC0xNDM1LDcgKzE0MzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3B0aW9uc09iamVjdChFeGVjU3RhdGUqCiAgICAgVGVzdE9iaiog
aW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7Ci0g
ICAgT3B0aW9uc09iamVjdCogb28odG9PcHRpb25zT2JqZWN0KE1BWUJFX01JU1NJTkdfUEFSQU1F
VEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBWOERpY3Rpb25hcnkqIG9v
KHRvVjhEaWN0aW9uYXJ5KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJ
c1VuZGVmaW5lZCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTE0NDUsNyArMTQ0NSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PcHRpb25zT2JqZWN0KEV4ZWNTdGF0ZSoKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBPcHRpb25zT2JqZWN0KiBvb28odG9PcHRp
b25zT2JqZWN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVm
aW5lZCkpKTsKKyAgICBWOERpY3Rpb25hcnkqIG9vbyh0b1Y4RGljdGlvbmFyeShNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwtPm9wdGlvbnNPYmplY3Qob28sIG9vbyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgK
aW5kZXggYWViYzM5ZmIzZDhjZThlMGJkY2U5NzFkNWE1MzU4ZTFkNmQyZjA3MS4uYmY3YjJjZTkz
MmU1OTA4ZmUzMzI4OTJkODIyYmYyMWVmYzNiNjU2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaApAQCAtMzAsMTMg
KzMwLDEzIEBACiAKIEBjbGFzcyBET01Eb2N1bWVudDsKIEBjbGFzcyBET01JREJLZXk7Ci1AY2xh
c3MgRE9NT3B0aW9uc09iamVjdDsKIEBjbGFzcyBET01TVkdEb2N1bWVudDsKIEBjbGFzcyBET01T
VkdQb2ludDsKIEBjbGFzcyBET01UZXN0T2JqOwogQGNsYXNzIERPTVRlc3RPYmplY3RBQ29uc3Ry
dWN0b3I7CiBAY2xhc3MgRE9NVGVzdE9iamVjdEJDb25zdHJ1Y3RvcjsKIEBjbGFzcyBET01UZXN0
T2JqZWN0Q0NvbnN0cnVjdG9yOworQGNsYXNzIERPTVY4RGljdGlvbmFyeTsKIEBjbGFzcyBET01h
OwogQGNsYXNzIERPTWI7CiBAY2xhc3MgRE9NYm9vbDsKQEAgLTE3NCw3ICsxNzQsNyBAQCBlbnVt
IHsKIC0gKERPTVRlc3RPYmogKiltZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzOihO
U1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7CiAtICh2b2lkKXNl
cmlhbGl6ZWRWYWx1ZTooTlNTdHJpbmcgKilzZXJpYWxpemVkQXJnOwogLSAodm9pZClpZGJLZXk6
KERPTUlEQktleSAqKWtleTsKLS0gKHZvaWQpb3B0aW9uc09iamVjdDooRE9NT3B0aW9uc09iamVj
dCAqKW9vIG9vbzooRE9NT3B0aW9uc09iamVjdCAqKW9vbzsKKy0gKHZvaWQpb3B0aW9uc09iamVj
dDooRE9NVjhEaWN0aW9uYXJ5ICopb28gb29vOihET01WOERpY3Rpb25hcnkgKilvb287CiAtICh2
b2lkKW1ldGhvZFdpdGhFeGNlcHRpb247CiAtICh2b2lkKWN1c3RvbU1ldGhvZDsKIC0gKHZvaWQp
Y3VzdG9tTWV0aG9kV2l0aEFyZ3M6KGludClpbnRBcmcgc3RyQXJnOihOU1N0cmluZyAqKXN0ckFy
ZyBvYmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQppbmRleCBhYmQzYjlj
YzU5NGJjZjA0ZjcxZGQxYTA5YjBmNzk3YzhlMWQ3OTFhLi43ZTRhZTBiNmM2ZTA4NWU0OGNmOWM4
MWQxMzU1NWI5YTZiNDQ3YjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KQEAgLTM2LDcgKzM2LDYgQEAKICNp
bXBvcnQgIkRPTUV2ZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTUlEQktleUludGVybmFsLmgi
CiAjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTU9wdGlvbnNPYmplY3RJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NU1ZHRG9jdW1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAi
RE9NU1ZHUG9pbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NU3R5bGVTaGVldEludGVybmFsLmgi
CkBAIC00NCw2ICs0Myw3IEBACiAjaW1wb3J0ICJET01UZXN0T2JqZWN0QUNvbnN0cnVjdG9ySW50
ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVRlc3RPYmplY3RCQ29uc3RydWN0b3JJbnRlcm5hbC5oIgog
I2ltcG9ydCAiRE9NVGVzdE9iamVjdENDb25zdHJ1Y3RvckludGVybmFsLmgiCisjaW1wb3J0ICJE
T01WOERpY3Rpb25hcnlJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NYUludGVybmFsLmgiCiAjaW1w
b3J0ICJET01iSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTWJvb2xJbnRlcm5hbC5oIgpAQCAtNTgs
NyArNTgsNiBAQAogI2ltcG9ydCAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCiAjaW1wb3J0ICJL
VVJMLmgiCiAjaW1wb3J0ICJPYmpDRXZlbnRMaXN0ZW5lci5oIgotI2ltcG9ydCAiT3B0aW9uc09i
amVjdC5oIgogI2ltcG9ydCAiU1ZHRG9jdW1lbnQuaCIKICNpbXBvcnQgIlNWR1N0YXRpY1Byb3Bl
cnR5VGVhck9mZi5oIgogI2ltcG9ydCAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCkBAIC02Nyw2
ICs2Niw3IEBACiAjaW1wb3J0ICJUZXN0T2JqZWN0QkNvbnN0cnVjdG9yLmgiCiAjaW1wb3J0ICJU
ZXN0T2JqZWN0Q0NvbnN0cnVjdG9yLmgiCiAjaW1wb3J0ICJUaHJlYWRDaGVjay5oIgorI2ltcG9y
dCAiVjhEaWN0aW9uYXJ5LmgiCiAjaW1wb3J0ICJXZWJDb3JlT2JqQ0V4dHJhcy5oIgogI2ltcG9y
dCAiV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oIgogI2ltcG9ydCAiYS5oIgpAQCAtNzUyLDcgKzc1
Miw3IEBACiAgICAgSU1QTC0+aWRiS2V5KGNvcmUoa2V5KSk7CiB9CiAKLS0gKHZvaWQpb3B0aW9u
c09iamVjdDooRE9NT3B0aW9uc09iamVjdCAqKW9vIG9vbzooRE9NT3B0aW9uc09iamVjdCAqKW9v
bworLSAodm9pZClvcHRpb25zT2JqZWN0OihET01WOERpY3Rpb25hcnkgKilvbyBvb286KERPTVY4
RGljdGlvbmFyeSAqKW9vbwogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKICAgICBJTVBMLT5vcHRpb25zT2JqZWN0KGNvcmUob28pLCBjb3JlKG9vbykpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRs
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCmluZGV4
IGZkNWRiZjkzMDdiMWM4ODEyZmZiZTA1NzQ0YTZkMTlmMWE3OTA0NWIuLjg5NzIyNjJmZWY2MWM2
ZTU1YTdiY2QxODc4NzBmZmJlZTU0OWM5NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTc1LDcgKzc1LDcgQEAgbW9kdWxlIHRl
c3QgewogCiAgICAgICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlKGluIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSBzZXJpYWxpemVkQXJnKTsKICAgICAgICAgdm9pZCBpZGJLZXkoaW4gSURCS2V5IGtleSk7
Ci0gICAgICAgIHZvaWQgb3B0aW9uc09iamVjdChpbiBPcHRpb25zT2JqZWN0IG9vLCBpbiBbT3B0
aW9uYWxdIE9wdGlvbnNPYmplY3Qgb29vKTsKKyAgICAgICAgdm9pZCBvcHRpb25zT2JqZWN0KGlu
IFY4RGljdGlvbmFyeSBvbywgaW4gW09wdGlvbmFsXSBWOERpY3Rpb25hcnkgb29vKTsKIAogICAg
ICAgICAvLyBFeGNlcHRpb25zCiAgICAgICAgIHZvaWQgbWV0aG9kV2l0aEV4Y2VwdGlvbigpIHJh
aXNlcyhET01FeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCmlu
ZGV4IDdjMDZlMzRlNmE2YWYyNjg3MzExMjAyNGExYWNjN2VjM2JlODI5ODQuLmM0MTU3ZGRiMjkw
YjE1NDBhNGRlNzNiNjBhNzI1YzUxMDU5MjQ4MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25z
dHJ1Y3Rvci5jcHAKQEAgLTIxLDEyICsyMSwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlY4VGVzdEV2ZW50Q29uc3RydWN0b3IuaCIKIAotI2luY2x1ZGUgIk9wdGlvbnNPYmpl
Y3QuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nTWFjcm9zLmgiCiAjaW5jbHVkZSAiVjhCaW5k
aW5nU3RhdGUuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJWOERpY3Rp
b25hcnkuaCIKICNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4UHJv
eHkuaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KQEAgLTc4LDcgKzc4LDcgQEAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OmNvbnN0cnVjdG9yQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3UKICAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9O
X0JMT0NLKFY4UGFyYW1ldGVyPD4sIHR5cGUsIGFyZ3NbMF0pOwogICAgIFRlc3RFdmVudENvbnN0
cnVjdG9ySW5pdCBldmVudEluaXQ7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPj0gMikgewotICAg
ICAgICBFWENFUFRJT05fQkxPQ0soT3B0aW9uc09iamVjdCwgb3B0aW9ucywgYXJnc1sxXSk7Cisg
ICAgICAgIEVYQ0VQVElPTl9CTE9DSyhWOERpY3Rpb25hcnksIG9wdGlvbnMsIGFyZ3NbMV0pOwog
ICAgICAgICBpZiAoIWZpbGxUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQoZXZlbnRJbml0LCBvcHRp
b25zKSkKICAgICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAgfQpAQCAtODks
NyArODksNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndQogICAgIHJldHVybiB0b1Y4KGV2ZW50
LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7CiB9CiAKLWJvb2wgZmlsbFRlc3RFdmVudENvbnN0
cnVjdG9ySW5pdChUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQmIGV2ZW50SW5pdCwgY29uc3QgT3B0
aW9uc09iamVjdCYgb3B0aW9ucykKK2Jvb2wgZmlsbFRlc3RFdmVudENvbnN0cnVjdG9ySW5pdChU
ZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQmIGV2ZW50SW5pdCwgY29uc3QgVjhEaWN0aW9uYXJ5JiBv
cHRpb25zKQogewogICAgIG9wdGlvbnMuZ2V0KCJhdHRyMiIsIGV2ZW50SW5pdC5hdHRyMik7CiAg
ICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuaAppbmRleCA1MjBl
MWNlNTg0Y2RiNmZiMmY5YTBhZDgxN2MzOTBjYTMwMDMyODVkLi45MTAxYTA5N2VkMjVlOTlhYmI2
OTI2MTNkNzFmMzA1MDZlODA4N2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmgK
QEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBPcHRpb25z
T2JqZWN0OworY2xhc3MgVjhEaWN0aW9uYXJ5OwogY2xhc3MgVjhUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzRGVwZW5kZW50TGlmZXRpbWUg
PSBmYWxzZTsKQEAgLTc2LDcgKzc2LDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KFBhc3NSZWZQdHI8IFRlc3RFdmVudENvbnN0cnVjdG9yID4gaW1wbCkKICAgICByZXR1cm4g
dG9WOChpbXBsLmdldCgpKTsKIH0KIAotYm9vbCBmaWxsVGVzdEV2ZW50Q29uc3RydWN0b3JJbml0
KFRlc3RFdmVudENvbnN0cnVjdG9ySW5pdCYsIGNvbnN0IE9wdGlvbnNPYmplY3QmKTsKK2Jvb2wg
ZmlsbFRlc3RFdmVudENvbnN0cnVjdG9ySW5pdChUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQmLCBj
b25zdCBWOERpY3Rpb25hcnkmKTsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmluZGV4IDUzMGJiZWRjNDgzY2Vk
Mzc2MTE2YmM2YWNlYTI3MTFiYjg3MzEzZTguLmY3MDMxOTNkOTM2YzAwNGZiNGFhOTlmMTVmM2Q5
MDliMjIzOWQwMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklE
QktleS5oIgotI2luY2x1ZGUgIk9wdGlvbnNPYmplY3QuaCIKICNpbmNsdWRlICJSdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU1ZHUHJvcGVydHlUZWFyT2ZmLmgiCiAjaW5jbHVk
ZSAiU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmLmgiCkBAIC0zNyw2ICszNiw3IEBACiAjaW5jbHVk
ZSAiVjhCaW5kaW5nTWFjcm9zLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNpbmNs
dWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJWOERpY3Rpb25hcnkuaCIKICNpbmNsdWRl
ICJWOERvY3VtZW50LmgiCiAjaW5jbHVkZSAiVjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRl
ICJWOFByb3h5LmgiCkBAIC0xMDg2LDcgKzEwODYsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IG9wdGlvbnNPYmplY3RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQog
ICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5v
dCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKICAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIEVYQ0VQVElPTl9C
TE9DSyhPcHRpb25zT2JqZWN0LCBvbywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwg
RGVmYXVsdElzVW5kZWZpbmVkKSk7CisgICAgRVhDRVBUSU9OX0JMT0NLKFY4RGljdGlvbmFyeSwg
b28sIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkp
OwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMCAmJiAhb28uaXNVbmRlZmluZWRPck51bGwoKSAm
JiAhb28uaXNPYmplY3QoKSkgewogICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOwogICAg
ICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwpAQCAtMTA5Niw3ICsxMDk2LDcgQEAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvcHRpb25zT2JqZWN0Q2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKICAgICAgICAgaW1wLT5vcHRpb25zT2JqZWN0KG9vKTsKICAg
ICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogICAgIH0KLSAgICBFWENFUFRJ
T05fQkxPQ0soT3B0aW9uc09iamVjdCwgb29vLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdz
LCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBFWENFUFRJT05fQkxPQ0soVjhEaWN0aW9u
YXJ5LCBvb28sIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVm
aW5lZCkpOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMSAmJiAhb29vLmlzVW5kZWZpbmVkT3JO
dWxsKCkgJiYgIW9vby5pc09iamVjdCgpKSB7CiAgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9F
UlI7CiAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBmOGRiOTdlNWEzZDkwMDJhNDQ3NWE3NjllMTFiYWI1ZTRjMDZlYTQyLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjk2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiT3B0aW9uc09iamVjdC5o
IgotCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIlY4QmluZGluZy5oIgot
I2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCi0jaW5jbHVkZSAiVjhTdG9yYWdlLmgiCi0jaW5jbHVk
ZSAiVjhVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0jaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRl
ICJWOElEQktleVJhbmdlLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSNp
bmNsdWRlICJUcmFja0Jhc2UuaCIKLSNpbmNsdWRlICJWOFRleHRUcmFjay5oIgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotT3B0aW9uc09iamVjdDo6T3B0aW9uc09iamVjdCgpCi17
Ci19Ci0KLU9wdGlvbnNPYmplY3Q6Ok9wdGlvbnNPYmplY3QoY29uc3Qgdjg6OkxvY2FsPHY4OjpW
YWx1ZT4mIG9wdGlvbnMpCi0gICAgOiBtX29wdGlvbnMob3B0aW9ucykKLXsKLX0KLQotT3B0aW9u
c09iamVjdDo6fk9wdGlvbnNPYmplY3QoKQotewotfQotCi1PcHRpb25zT2JqZWN0JiBPcHRpb25z
T2JqZWN0OjpvcGVyYXRvcj0oY29uc3QgT3B0aW9uc09iamVjdCYgb3B0aW9uc09iamVjdCkKLXsK
LSAgICBtX29wdGlvbnMgPSBvcHRpb25zT2JqZWN0Lm1fb3B0aW9uczsKLSAgICByZXR1cm4gKnRo
aXM7Ci19Ci0KLWJvb2wgT3B0aW9uc09iamVjdDo6aXNPYmplY3QoKSBjb25zdAotewotICAgIHJl
dHVybiAhaXNVbmRlZmluZWRPck51bGwoKSAmJiBtX29wdGlvbnMtPklzT2JqZWN0KCk7Ci19Ci0K
LWJvb2wgT3B0aW9uc09iamVjdDo6aXNVbmRlZmluZWRPck51bGwoKSBjb25zdAotewotICAgIGlm
IChtX29wdGlvbnMuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4g
V2ViQ29yZTo6aXNVbmRlZmluZWRPck51bGwobV9vcHRpb25zKTsKLX0KLQotYm9vbCBPcHRpb25z
T2JqZWN0OjpnZXRLZXkoY29uc3QgU3RyaW5nJiBrZXksIHY4OjpMb2NhbDx2ODo6VmFsdWU+JiB2
YWx1ZSkgY29uc3QKLXsKLSAgICBpZiAoaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvcHRpb25zID0gbV9vcHRpb25z
LT5Ub09iamVjdCgpOwotICAgIEFTU0VSVCghb3B0aW9ucy5Jc0VtcHR5KCkpOwotCi0gICAgdjg6
OkhhbmRsZTx2ODo6U3RyaW5nPiB2OEtleSA9IHY4U3RyaW5nKGtleSk7Ci0gICAgaWYgKCFvcHRp
b25zLT5IYXModjhLZXkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmFsdWUgPSBvcHRp
b25zLT5HZXQodjhLZXkpOwotICAgIGlmICh2YWx1ZS5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBPcHRpb25zT2JqZWN0OjpnZXQo
Y29uc3QgU3RyaW5nJiBrZXksIGJvb2wmIHZhbHVlKSBjb25zdAotewotICAgIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHY4VmFsdWU7Ci0gICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdjg6OkxvY2FsPHY4OjpCb29sZWFuPiB2OEJvb2wgPSB2
OFZhbHVlLT5Ub0Jvb2xlYW4oKTsKLSAgICBpZiAodjhCb29sLklzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHZhbHVlID0gdjhCb29sLT5WYWx1ZSgpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgaW50
MzJfdCYgdmFsdWUpIGNvbnN0Ci17Ci0gICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsK
LSAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICB2ODo6TG9jYWw8djg6OkludDMyPiB2OEludDMyID0gdjhWYWx1ZS0+VG9JbnQzMigpOwot
ICAgIGlmICh2OEludDMyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHZh
bHVlID0gdjhJbnQzMi0+VmFsdWUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBPcHRp
b25zT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSYgdmFsdWUpIGNvbnN0Ci17
Ci0gICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsKLSAgICBpZiAoIWdldEtleShrZXks
IHY4VmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2ODo6TG9jYWw8djg6Ok51
bWJlcj4gdjhOdW1iZXIgPSB2OFZhbHVlLT5Ub051bWJlcigpOwotICAgIGlmICh2OE51bWJlci5J
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB2YWx1ZSA9IHY4TnVtYmVyLT5W
YWx1ZSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE9wdGlvbnNPYmplY3Q6OmdldChj
b25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiB2YWx1ZSkgY29uc3QKLXsKLSAgICB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2OFZhbHVlOwotICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBJdCBpcyBwb3NzaWJsZSBmb3IgdGhp
cyB0byB0aHJvdyBpbiB3aGljaCBjYXNlIHdlJ2QgYmUgZ2V0dGluZyBiYWNrCi0gICAgLy8gICAg
ICAgIGFuIGVtcHR5IHN0cmluZyBhbmQgcmV0dXJuaW5nIHRydWUgd2hlbiB3ZSBzaG91bGQgYmUg
cmV0dXJuaW5nIGZhbHNlLgotICAgIC8vICAgICAgICBTZWUgZmFzdC9kb20vR2VvbG9jYXRpb24v
c2NyaXB0LXRlc3RzL2FyZ3VtZW50LXR5cGVzLmpzIGZvciBhIHNpbWlsYXIKLSAgICAvLyAgICAg
ICAgZXhhbXBsZS4KLSAgICB2YWx1ZSA9IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcodjhWYWx1ZSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgT3B0aW9uc09iamVjdDo6Z2V0KGNvbnN0IFN0
cmluZyYga2V5LCBTY3JpcHRWYWx1ZSYgdmFsdWUpIGNvbnN0Ci17Ci0gICAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdjhWYWx1ZTsKLSAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2YWx1ZSA9IFNjcmlwdFZhbHVlKHY4VmFsdWUpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcm
IGtleSwgdW5zaWduZWQgc2hvcnQmIHZhbHVlKSBjb25zdAotewotICAgIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHY4VmFsdWU7Ci0gICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgdjg6OkxvY2FsPHY4OjpJbnQzMj4gdjhJbnQzMiA9IHY4VmFs
dWUtPlRvSW50MzIoKTsKLSAgICBpZiAodjhJbnQzMi5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pih2OEludDMy
LT5WYWx1ZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBPcHRpb25zT2JqZWN0Ojpn
ZXQoY29uc3QgU3RyaW5nJiBrZXksIHVuc2lnbmVkJiB2YWx1ZSkgY29uc3QKLXsKLSAgICB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOwotICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHY4OjpMb2NhbDx2ODo6SW50MzI+IHY4SW50
MzIgPSB2OFZhbHVlLT5Ub0ludDMyKCk7Ci0gICAgaWYgKHY4SW50MzIuSXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmFsdWUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odjhJ
bnQzMi0+VmFsdWUoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgT3B0aW9uc09iamVj
dDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCB1bnNpZ25lZCBsb25nIGxvbmcmIHZhbHVlKSBjb25z
dAotewotICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7Ci0gICAgaWYgKCFnZXRLZXko
a2V5LCB2OFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdjg6OkxvY2FsPHY4
OjpOdW1iZXI+IHY4TnVtYmVyID0gdjhWYWx1ZS0+VG9OdW1iZXIoKTsKLSAgICBpZiAodjhOdW1i
ZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZG91YmxlIGQgPSB2OE51
bWJlci0+VmFsdWUoKTsKLSAgICBkb3VibGVUb0ludGVnZXIoZCwgdmFsdWUpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwg
UmVmUHRyPERPTVdpbmRvdz4mIHZhbHVlKSBjb25zdAotewotICAgIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHY4VmFsdWU7Ci0gICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgRE9NV2luZG93KiBzb3VyY2UgPSAwOwotICAgIGlmICh2OFZhbHVl
LT5Jc09iamVjdCgpKSB7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodjhWYWx1ZSk7Ci0gICAgICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd2luZG93ID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4
RE9NV2luZG93OjpHZXRUZW1wbGF0ZSgpLCB3cmFwcGVyKTsKLSAgICAgICAgaWYgKCF3aW5kb3cu
SXNFbXB0eSgpKQotICAgICAgICAgICAgc291cmNlID0gVjhET01XaW5kb3c6OnRvTmF0aXZlKHdp
bmRvdyk7Ci0gICAgfQotICAgIHZhbHVlID0gc291cmNlOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgUmVmUHRyPFN0b3Jh
Z2U+JiB2YWx1ZSkgY29uc3QKLXsKLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOwot
ICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFN0b3JhZ2UqIHNvdXJjZSA9IDA7Ci0gICAgaWYgKHY4VmFsdWUtPklzT2JqZWN0KCkpIHsK
LSAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gdjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdCh2OFZhbHVlKTsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBz
dG9yYWdlID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4U3RvcmFnZTo6R2V0VGVt
cGxhdGUoKSwgd3JhcHBlcik7Ci0gICAgICAgIGlmICghc3RvcmFnZS5Jc0VtcHR5KCkpCi0gICAg
ICAgICAgICBzb3VyY2UgPSBWOFN0b3JhZ2U6OnRvTmF0aXZlKHN0b3JhZ2UpOwotICAgIH0KLSAg
ICB2YWx1ZSA9IHNvdXJjZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBPcHRpb25zT2Jq
ZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIE1lc3NhZ2VQb3J0QXJyYXkmIHZhbHVlKSBjb25z
dAotewotICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7Ci0gICAgaWYgKCFnZXRLZXko
a2V5LCB2OFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGdldE1l
c3NhZ2VQb3J0QXJyYXkodjhWYWx1ZSwgdmFsdWUpOwotfQotCi1ib29sIE9wdGlvbnNPYmplY3Q6
OmdldChjb25zdCBTdHJpbmcmIGtleSwgSGFzaFNldDxBdG9taWNTdHJpbmc+JiB2YWx1ZSkgY29u
c3QKLXsKLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOwotICAgIGlmICghZ2V0S2V5
KGtleSwgdjhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBT
dXBwb3J0IGFycmF5LWxpa2Ugb2JqZWN0cwotICAgIGlmICghdjhWYWx1ZS0+SXNBcnJheSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2ODo6TG9jYWw8djg6OkFycmF5PiB2OEFycmF5
ID0gdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QodjhWYWx1ZSk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2OEFycmF5LT5MZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IGluZGV4ZWRWYWx1ZSA9IHY4QXJyYXktPkdldCh2ODo6SW50ZWdlcjo6TmV3KGkp
KTsKLSAgICAgICAgdmFsdWUuYWRkKHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcoaW5kZXhlZFZhbHVl
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgT3B0aW9uc09iamVjdDo6
Z2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHZh
bHVlKSBjb25zdAotewotICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7Ci0gICAgaWYg
KCFnZXRLZXkoa2V5LCB2OFZhbHVlKSB8fCB2OFZhbHVlLT5Jc051bGwoKSB8fCB2OFZhbHVlLT5J
c1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRTogSXQg
aXMgcG9zc2libGUgZm9yIHRoaXMgdG8gdGhyb3cgaW4gd2hpY2ggY2FzZSB3ZSdkIGJlIGdldHRp
bmcgYmFjawotICAgIC8vICAgICAgICBhbiBlbXB0eSBzdHJpbmcgYW5kIHJldHVybmluZyB0cnVl
IHdoZW4gd2Ugc2hvdWxkIGJlIHJldHVybmluZyBmYWxzZS4KLSAgICAvLyAgICAgICAgU2VlIGZh
c3QvZG9tL0dlb2xvY2F0aW9uL3NjcmlwdC10ZXN0cy9hcmd1bWVudC10eXBlcy5qcyBmb3IgYSBz
aW1pbGFyCi0gICAgLy8gICAgICAgIGV4YW1wbGUuCi0gICAgdmFsdWUgPSBXZWJDb3JlOjppc1Vu
ZGVmaW5lZE9yTnVsbCh2OFZhbHVlKSA/IFN0cmluZygpIDogdjhWYWx1ZVRvV2ViQ29yZVN0cmlu
Zyh2OFZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotI2lmIEVOQUJMRShWSURFT19UUkFD
SykKLWJvb2wgT3B0aW9uc09iamVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBSZWZQdHI8VHJh
Y2tCYXNlPiYgdmFsdWUpIGNvbnN0Ci17Ci0gICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1
ZTsKLSAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBUcmFja0Jhc2UqIHNvdXJjZSA9IDA7Ci0gICAgaWYgKHY4VmFsdWUtPklzT2JqZWN0
KCkpIHsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2OFZhbHVlKTsKLQotICAgICAgICAvLyBGSVhNRTogdGhpcyB3
aWxsIG5lZWQgdG8gYmUgY2hhbmdlZCBzbyBpdCBjYW4gYWxzbyByZXR1cm4gYW4gQXVkaW9UcmFj
ayBvciBhIFZpZGVvVHJhY2sgb25jZQotICAgICAgICAvLyB3ZSBhZGQgdGhlbS4KLSAgICAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB0cmFjayA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3Jh
cHBlcihWOFRleHRUcmFjazo6R2V0VGVtcGxhdGUoKSwgd3JhcHBlcik7Ci0gICAgICAgIGlmICgh
dHJhY2suSXNFbXB0eSgpKQotICAgICAgICAgICAgc291cmNlID0gVjhUZXh0VHJhY2s6OnRvTmF0
aXZlKHRyYWNrKTsKLSAgICB9Ci0gICAgdmFsdWUgPSBzb3VyY2U7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
YzdlODBhMDc1OTkzMGZjOGEzNmVlNTgwMmU3NGY0ZTdjMDg5ZDNlLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L09wdGlvbnNPYmplY3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIE9wdGlvbnNPYmplY3RfaAotI2RlZmluZSBPcHRpb25zT2JqZWN0X2gKLQotI2luY2x1
ZGUgIk1lc3NhZ2VQb3J0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRl
ICJTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgPHY4Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBET01TdHJpbmdMaXN0OwotY2xhc3MgRE9NV2luZG93OwotY2xhc3MgSURC
S2V5UmFuZ2U7Ci1jbGFzcyBTdG9yYWdlOwotY2xhc3MgVHJhY2tCYXNlOwotCi1jbGFzcyBPcHRp
b25zT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBPcHRpb25zT2JqZWN0KCk7Ci0gICAgT3B0aW9uc09i
amVjdChjb25zdCB2ODo6TG9jYWw8djg6OlZhbHVlPiYgb3B0aW9ucyk7Ci0gICAgfk9wdGlvbnNP
YmplY3QoKTsKLQotICAgIE9wdGlvbnNPYmplY3QmIG9wZXJhdG9yPShjb25zdCBPcHRpb25zT2Jq
ZWN0Jik7Ci0KLSAgICBib29sIGlzT2JqZWN0KCkgY29uc3Q7Ci0gICAgYm9vbCBpc1VuZGVmaW5l
ZE9yTnVsbCgpIGNvbnN0OwotCi0gICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgYm9vbCYpIGNv
bnN0OwotICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIGludDMyX3QmKSBjb25zdDsKLSAgICBi
b29sIGdldChjb25zdCBTdHJpbmcmLCBkb3VibGUmKSBjb25zdDsKLSAgICBib29sIGdldChjb25z
dCBTdHJpbmcmLCBTdHJpbmcmKSBjb25zdDsKLSAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBT
Y3JpcHRWYWx1ZSYpIGNvbnN0OwotICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIHVuc2lnbmVk
IHNob3J0JikgY29uc3Q7Ci0gICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQmKSBj
b25zdDsKLSAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsb25nIGxvbmcmKSBj
b25zdDsKLSAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBSZWZQdHI8RE9NV2luZG93PiYpIGNv
bnN0OwotICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIFJlZlB0cjxTdG9yYWdlPiYpIGNvbnN0
OwotICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIE1lc3NhZ2VQb3J0QXJyYXkmKSBjb25zdDsK
LSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgUmVm
UHRyPFRyYWNrQmFzZT4mKSBjb25zdDsKLSNlbmRpZgotICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmlu
ZyYsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYpIGNvbnN0OwotCi0gICAgYm9vbCBnZXRXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2soY29uc3QgU3RyaW5nJiwgU3RyaW5nJikgY29uc3Q7Ci0KLXByaXZh
dGU6Ci0gICAgYm9vbCBnZXRLZXkoY29uc3QgU3RyaW5nJiBrZXksIHY4OjpMb2NhbDx2ODo6VmFs
dWU+JikgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIG9iamVjdCBjYW4gb25seSBiZSB1c2VkIHNhZmVs
eSB3aGVuIHN0YWNrIGFsbG9jYXRlZCBiZWNhdXNlIG9mIHY4OjpMb2NhbC4KLSAgICBzdGF0aWMg
dm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCk7Ci0gICAgc3RhdGljIHZvaWQqIG9wZXJhdG9yIG5l
d1tdKHNpemVfdCk7Ci0gICAgc3RhdGljIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKik7Ci0K
LSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBtX29wdGlvbnM7Ci19OwotCi19Ci0KLSNlbmRpZiAv
LyBPcHRpb25zT2JqZWN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RGljdGlvbmFyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERpY3Rpb25h
cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQ0OGYxMDNlNjcxM2I2MDVlY2E4ZWM0ZDEzZDBjNDc1ZmYyNmUw
OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERpY3Rp
b25hcnkuY3BwCkBAIC0wLDAgKzEsMjk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlY4RGljdGlvbmFyeS5oIgorCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgor
I2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCisjaW5jbHVk
ZSAiVjhTdG9yYWdlLmgiCisjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisjaW5jbHVkZSAi
SURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJWOElEQktleVJhbmdlLmgiCisjZW5kaWYKKworI2lm
IEVOQUJMRShWSURFT19UUkFDSykKKyNpbmNsdWRlICJUcmFja0Jhc2UuaCIKKyNpbmNsdWRlICJW
OFRleHRUcmFjay5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVjhEaWN0aW9u
YXJ5OjpWOERpY3Rpb25hcnkoKQoreworfQorCitWOERpY3Rpb25hcnk6OlY4RGljdGlvbmFyeShj
b25zdCB2ODo6TG9jYWw8djg6OlZhbHVlPiYgb3B0aW9ucykKKyAgICA6IG1fb3B0aW9ucyhvcHRp
b25zKQoreworfQorCitWOERpY3Rpb25hcnk6On5WOERpY3Rpb25hcnkoKQoreworfQorCitWOERp
Y3Rpb25hcnkmIFY4RGljdGlvbmFyeTo6b3BlcmF0b3I9KGNvbnN0IFY4RGljdGlvbmFyeSYgb3B0
aW9uc09iamVjdCkKK3sKKyAgICBtX29wdGlvbnMgPSBvcHRpb25zT2JqZWN0Lm1fb3B0aW9uczsK
KyAgICByZXR1cm4gKnRoaXM7Cit9CisKK2Jvb2wgVjhEaWN0aW9uYXJ5Ojppc09iamVjdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFpc1VuZGVmaW5lZE9yTnVsbCgpICYmIG1fb3B0aW9ucy0+SXNP
YmplY3QoKTsKK30KKworYm9vbCBWOERpY3Rpb25hcnk6OmlzVW5kZWZpbmVkT3JOdWxsKCkgY29u
c3QKK3sKKyAgICBpZiAobV9vcHRpb25zLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIFdlYkNvcmU6OmlzVW5kZWZpbmVkT3JOdWxsKG1fb3B0aW9ucyk7Cit9CisK
K2Jvb2wgVjhEaWN0aW9uYXJ5OjpnZXRLZXkoY29uc3QgU3RyaW5nJiBrZXksIHY4OjpMb2NhbDx2
ODo6VmFsdWU+JiB2YWx1ZSkgY29uc3QKK3sKKyAgICBpZiAoaXNVbmRlZmluZWRPck51bGwoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvcHRpb25z
ID0gbV9vcHRpb25zLT5Ub09iamVjdCgpOworICAgIEFTU0VSVCghb3B0aW9ucy5Jc0VtcHR5KCkp
OworCisgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OEtleSA9IHY4U3RyaW5nKGtleSk7Cisg
ICAgaWYgKCFvcHRpb25zLT5IYXModjhLZXkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
dmFsdWUgPSBvcHRpb25zLT5HZXQodjhLZXkpOworICAgIGlmICh2YWx1ZS5Jc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWOERpY3Rp
b25hcnk6OmdldChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYgdmFsdWUpIGNvbnN0Cit7CisgICAg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIHY4VmFs
dWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2ODo6TG9jYWw8djg6OkJvb2xlYW4+
IHY4Qm9vbCA9IHY4VmFsdWUtPlRvQm9vbGVhbigpOworICAgIGlmICh2OEJvb2wuSXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdmFsdWUgPSB2OEJvb2wtPlZhbHVlKCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVjhEaWN0aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5n
JiBrZXksIGludDMyX3QmIHZhbHVlKSBjb25zdAoreworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHY4VmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgdjg6OkxvY2FsPHY4OjpJbnQzMj4gdjhJbnQzMiA9IHY4VmFsdWUtPlRv
SW50MzIoKTsKKyAgICBpZiAodjhJbnQzMi5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB2YWx1ZSA9IHY4SW50MzItPlZhbHVlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgVjhEaWN0aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSYgdmFsdWUp
IGNvbnN0Cit7CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAoIWdl
dEtleShrZXksIHY4VmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2ODo6TG9j
YWw8djg6Ok51bWJlcj4gdjhOdW1iZXIgPSB2OFZhbHVlLT5Ub051bWJlcigpOworICAgIGlmICh2
OE51bWJlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2YWx1ZSA9IHY4
TnVtYmVyLT5WYWx1ZSgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFY4RGljdGlvbmFy
eTo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHZhbHVlKSBjb25zdAoreworICAgIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IEl0IGlzIHBvc3NpYmxl
IGZvciB0aGlzIHRvIHRocm93IGluIHdoaWNoIGNhc2Ugd2UnZCBiZSBnZXR0aW5nIGJhY2sKKyAg
ICAvLyAgICAgICAgYW4gZW1wdHkgc3RyaW5nIGFuZCByZXR1cm5pbmcgdHJ1ZSB3aGVuIHdlIHNo
b3VsZCBiZSByZXR1cm5pbmcgZmFsc2UuCisgICAgLy8gICAgICAgIFNlZSBmYXN0L2RvbS9HZW9s
b2NhdGlvbi9zY3JpcHQtdGVzdHMvYXJndW1lbnQtdHlwZXMuanMgZm9yIGEgc2ltaWxhcgorICAg
IC8vICAgICAgICBleGFtcGxlLgorICAgIHZhbHVlID0gdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyh2
OFZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWOERpY3Rpb25hcnk6OmdldChj
b25zdCBTdHJpbmcmIGtleSwgU2NyaXB0VmFsdWUmIHZhbHVlKSBjb25zdAoreworICAgIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBTY3JpcHRWYWx1ZSh2OFZhbHVl
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWOERpY3Rpb25hcnk6OmdldChjb25zdCBT
dHJpbmcmIGtleSwgdW5zaWduZWQgc2hvcnQmIHZhbHVlKSBjb25zdAoreworICAgIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHY4VmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdjg6OkxvY2FsPHY4OjpJbnQzMj4gdjhJbnQzMiA9
IHY4VmFsdWUtPlRvSW50MzIoKTsKKyAgICBpZiAodjhJbnQzMi5Jc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pih2
OEludDMyLT5WYWx1ZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWOERpY3Rpb25h
cnk6OmdldChjb25zdCBTdHJpbmcmIGtleSwgdW5zaWduZWQmIHZhbHVlKSBjb25zdAoreworICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZh
bHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdjg6OkxvY2FsPHY4OjpJbnQzMj4g
djhJbnQzMiA9IHY4VmFsdWUtPlRvSW50MzIoKTsKKyAgICBpZiAodjhJbnQzMi5Jc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
Pih2OEludDMyLT5WYWx1ZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWOERpY3Rp
b25hcnk6OmdldChjb25zdCBTdHJpbmcmIGtleSwgdW5zaWduZWQgbG9uZyBsb25nJiB2YWx1ZSkg
Y29uc3QKK3sKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0
S2V5KGtleSwgdjhWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHY4OjpMb2Nh
bDx2ODo6TnVtYmVyPiB2OE51bWJlciA9IHY4VmFsdWUtPlRvTnVtYmVyKCk7CisgICAgaWYgKHY4
TnVtYmVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvdWJsZSBkID0g
djhOdW1iZXItPlZhbHVlKCk7CisgICAgZG91YmxlVG9JbnRlZ2VyKGQsIHZhbHVlKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBWOERpY3Rpb25hcnk6OmdldChjb25zdCBTdHJpbmcmIGtl
eSwgUmVmUHRyPERPTVdpbmRvdz4mIHZhbHVlKSBjb25zdAoreworICAgIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHY4VmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgRE9NV2luZG93KiBzb3VyY2UgPSAwOworICAgIGlmICh2OFZh
bHVlLT5Jc09iamVjdCgpKSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBl
ciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodjhWYWx1ZSk7CisgICAgICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd2luZG93ID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVy
KFY4RE9NV2luZG93OjpHZXRUZW1wbGF0ZSgpLCB3cmFwcGVyKTsKKyAgICAgICAgaWYgKCF3aW5k
b3cuSXNFbXB0eSgpKQorICAgICAgICAgICAgc291cmNlID0gVjhET01XaW5kb3c6OnRvTmF0aXZl
KHdpbmRvdyk7CisgICAgfQorICAgIHZhbHVlID0gc291cmNlOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFY4RGljdGlvbmFyeTo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBSZWZQdHI8U3Rv
cmFnZT4mIHZhbHVlKSBjb25zdAoreworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7
CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgU3RvcmFnZSogc291cmNlID0gMDsKKyAgICBpZiAodjhWYWx1ZS0+SXNPYmplY3QoKSkg
eworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+OjpDYXN0KHY4VmFsdWUpOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHN0b3JhZ2UgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhTdG9yYWdlOjpHZXRU
ZW1wbGF0ZSgpLCB3cmFwcGVyKTsKKyAgICAgICAgaWYgKCFzdG9yYWdlLklzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHNvdXJjZSA9IFY4U3RvcmFnZTo6dG9OYXRpdmUoc3RvcmFnZSk7CisgICAgfQor
ICAgIHZhbHVlID0gc291cmNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFY4RGljdGlv
bmFyeTo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBNZXNzYWdlUG9ydEFycmF5JiB2YWx1ZSkgY29u
c3QKK3sKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0S2V5
KGtleSwgdjhWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBnZXRN
ZXNzYWdlUG9ydEFycmF5KHY4VmFsdWUsIHZhbHVlKTsKK30KKworYm9vbCBWOERpY3Rpb25hcnk6
OmdldChjb25zdCBTdHJpbmcmIGtleSwgSGFzaFNldDxBdG9taWNTdHJpbmc+JiB2YWx1ZSkgY29u
c3QKK3sKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0S2V5
KGtleSwgdjhWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBT
dXBwb3J0IGFycmF5LWxpa2Ugb2JqZWN0cworICAgIGlmICghdjhWYWx1ZS0+SXNBcnJheSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2ODo6TG9jYWw8djg6OkFycmF5PiB2OEFycmF5
ID0gdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QodjhWYWx1ZSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2OEFycmF5LT5MZW5ndGgoKTsgKytpKSB7CisgICAgICAgIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IGluZGV4ZWRWYWx1ZSA9IHY4QXJyYXktPkdldCh2ODo6SW50ZWdlcjo6TmV3KGkp
KTsKKyAgICAgICAgdmFsdWUuYWRkKHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcoaW5kZXhlZFZhbHVl
KSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVjhEaWN0aW9uYXJ5Ojpn
ZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgdmFs
dWUpIGNvbnN0Cit7CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAo
IWdldEtleShrZXksIHY4VmFsdWUpIHx8IHY4VmFsdWUtPklzTnVsbCgpIHx8IHY4VmFsdWUtPklz
VW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBJdCBp
cyBwb3NzaWJsZSBmb3IgdGhpcyB0byB0aHJvdyBpbiB3aGljaCBjYXNlIHdlJ2QgYmUgZ2V0dGlu
ZyBiYWNrCisgICAgLy8gICAgICAgIGFuIGVtcHR5IHN0cmluZyBhbmQgcmV0dXJuaW5nIHRydWUg
d2hlbiB3ZSBzaG91bGQgYmUgcmV0dXJuaW5nIGZhbHNlLgorICAgIC8vICAgICAgICBTZWUgZmFz
dC9kb20vR2VvbG9jYXRpb24vc2NyaXB0LXRlc3RzL2FyZ3VtZW50LXR5cGVzLmpzIGZvciBhIHNp
bWlsYXIKKyAgICAvLyAgICAgICAgZXhhbXBsZS4KKyAgICB2YWx1ZSA9IFdlYkNvcmU6OmlzVW5k
ZWZpbmVkT3JOdWxsKHY4VmFsdWUpID8gU3RyaW5nKCkgOiB2OFZhbHVlVG9XZWJDb3JlU3RyaW5n
KHY4VmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQorYm9vbCBWOERpY3Rpb25hcnk6OmdldChjb25zdCBTdHJpbmcmIGtleSwgUmVmUHRyPFRyYWNr
QmFzZT4mIHZhbHVlKSBjb25zdAoreworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7
CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgVHJhY2tCYXNlKiBzb3VyY2UgPSAwOworICAgIGlmICh2OFZhbHVlLT5Jc09iamVjdCgp
KSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QodjhWYWx1ZSk7CisKKyAgICAgICAgLy8gRklYTUU6IHRoaXMgd2ls
bCBuZWVkIHRvIGJlIGNoYW5nZWQgc28gaXQgY2FuIGFsc28gcmV0dXJuIGFuIEF1ZGlvVHJhY2sg
b3IgYSBWaWRlb1RyYWNrIG9uY2UKKyAgICAgICAgLy8gd2UgYWRkIHRoZW0uCisgICAgICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gdHJhY2sgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBw
ZXIoVjhUZXh0VHJhY2s6OkdldFRlbXBsYXRlKCksIHdyYXBwZXIpOworICAgICAgICBpZiAoIXRy
YWNrLklzRW1wdHkoKSkKKyAgICAgICAgICAgIHNvdXJjZSA9IFY4VGV4dFRyYWNrOjp0b05hdGl2
ZSh0cmFjayk7CisgICAgfQorICAgIHZhbHVlID0gc291cmNlOworICAgIHJldHVybiB0cnVlOwor
fQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RGljdGlvbmFyeS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhEaWN0aW9uYXJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTMwNTc3ZWIyMzA4ZDk2MTljZGZmYTJk
NWY5YjhjMzQ0NGZiYWQwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RGljdGlvbmFyeS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4
RGljdGlvbmFyeV9oCisjZGVmaW5lIFY4RGljdGlvbmFyeV9oCisKKyNpbmNsdWRlICJNZXNzYWdl
UG9ydC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0VmFs
dWUuaCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRE9NU3RyaW5nTGlzdDsKK2NsYXNzIERPTVdpbmRvdzsKK2NsYXNzIElEQktleVJhbmdlOwor
Y2xhc3MgU3RvcmFnZTsKK2NsYXNzIFRyYWNrQmFzZTsKKworY2xhc3MgVjhEaWN0aW9uYXJ5IHsK
K3B1YmxpYzoKKyAgICBWOERpY3Rpb25hcnkoKTsKKyAgICBWOERpY3Rpb25hcnkoY29uc3Qgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4mIG9wdGlvbnMpOworICAgIH5WOERpY3Rpb25hcnkoKTsKKworICAg
IFY4RGljdGlvbmFyeSYgb3BlcmF0b3I9KGNvbnN0IFY4RGljdGlvbmFyeSYpOworCisgICAgYm9v
bCBpc09iamVjdCgpIGNvbnN0OworICAgIGJvb2wgaXNVbmRlZmluZWRPck51bGwoKSBjb25zdDsK
KworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIGJvb2wmKSBjb25zdDsKKyAgICBib29sIGdl
dChjb25zdCBTdHJpbmcmLCBpbnQzMl90JikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3Ry
aW5nJiwgZG91YmxlJikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgU3RyaW5n
JikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgU2NyaXB0VmFsdWUmKSBjb25z
dDsKKyAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBzaG9ydCYpIGNvbnN0Owor
ICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkJikgY29uc3Q7CisgICAgYm9vbCBn
ZXQoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Q7CisgICAgYm9vbCBn
ZXQoY29uc3QgU3RyaW5nJiwgUmVmUHRyPERPTVdpbmRvdz4mKSBjb25zdDsKKyAgICBib29sIGdl
dChjb25zdCBTdHJpbmcmLCBSZWZQdHI8U3RvcmFnZT4mKSBjb25zdDsKKyAgICBib29sIGdldChj
b25zdCBTdHJpbmcmLCBNZXNzYWdlUG9ydEFycmF5JikgY29uc3Q7CisjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQorICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIFJlZlB0cjxUcmFja0Jhc2U+Jikg
Y29uc3Q7CisjZW5kaWYKKyAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBIYXNoU2V0PEF0b21p
Y1N0cmluZz4mKSBjb25zdDsKKworICAgIGJvb2wgZ2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNr
KGNvbnN0IFN0cmluZyYsIFN0cmluZyYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgZ2V0
S2V5KGNvbnN0IFN0cmluZyYga2V5LCB2ODo6TG9jYWw8djg6OlZhbHVlPiYpIGNvbnN0OworCisg
ICAgLy8gVGhpcyBvYmplY3QgY2FuIG9ubHkgYmUgdXNlZCBzYWZlbHkgd2hlbiBzdGFjayBhbGxv
Y2F0ZWQgYmVjYXVzZSBvZiB2ODo6TG9jYWwuCisgICAgc3RhdGljIHZvaWQqIG9wZXJhdG9yIG5l
dyhzaXplX3QpOworICAgIHN0YXRpYyB2b2lkKiBvcGVyYXRvciBuZXdbXShzaXplX3QpOworICAg
IHN0YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICopOworCisgICAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gbV9vcHRpb25zOworfTsKKworfQorCisjZW5kaWYgLy8gVjhEaWN0aW9uYXJ5X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKaW5kZXggZDMyYjQ0ZmZjMTFj
NDllZDdjYTkxMjU1MjI4NDYxYWI3OWE4ZTFjNi4uZTdmN2E1MmNmY2NmOTI4ZGRkMGM5YTY4M2I5
ODBmNTg4NmVkZjgyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAK
QEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJWOFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaCIK
IAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJPcHRpb25zT2JqZWN0Lmgi
CisjaW5jbHVkZSAiVjhEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5j
bHVkZSAiVjhCaW5kaW5nTWFjcm9zLmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCkBAIC05
MSw3ICs5MSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXI6Om9ic2VydmVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lCiAgICAgaWYgKCFhcmdzWzFdLT5J
c09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7
CiAKLSAgICBPcHRpb25zT2JqZWN0IG9wdGlvbnNPYmplY3QoYXJnc1sxXSk7CisgICAgVjhEaWN0
aW9uYXJ5IG9wdGlvbnNPYmplY3QoYXJnc1sxXSk7CiAgICAgdW5zaWduZWQgb3B0aW9ucyA9IDA7
CiAgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+IGF0dHJpYnV0ZUZpbHRlcjsKICAgICBib29sIG9w
dGlvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131552</attachid>
            <date>2012-03-12 23:03:21 -0700</date>
            <delta_ts>2012-03-13 01:50:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80802-20120313150319.patch</filename>
            <type>text/plain</type>
            <size>75943</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmQwOTE2YmE3MDM0ZmQz
MDhkNGNhNDA1MzM0YTUyZjVhOGVhNzA5MC4uNzJhMTI5OTVjNTg1ZDNkMGEwMGZlMGI0ZGEwM2Rl
MThjNmUwNTdlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDEyLTAzLTEyICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZW5hbWUgT3B0aW9u
c09iamVjdCB0byBEaWN0aW9uYXJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04MDgwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZvciBjbGFyaWZpY2F0aW9uLCByZW5hbWUgT3B0aW9uc09iamVjdC57aCxj
cHB9IHRvIERpY3Rpb25hcnkue2gsY3BwfS4KKyAgICAgICAgVGhpcyBwYXRjaCBqdXN0IHJlbmFt
ZXMgYW5kIHNvcnRzIGFscGhhYmV0aWNhbGx5LgorCisgICAgICAgIE5vIHRlc3RzLiBObyBjaGFu
Z2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVh
dGVPYmplY3RTdG9yZSk6CisgICAgICAgIChJREJEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQktleVJhbmdlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKElEQk9iamVj
dFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGw6
CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVc2VWOC5jbWFrZToKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogYmluZGluZ3MvanMvRGljdGlvbmFyeS5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvT3B0aW9uc09iamVjdC5oLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChEaWN0aW9uYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rpb25hcnk6OkRp
Y3Rpb25hcnkpOgorICAgICAgICAoV2ViQ29yZTo6RGljdGlvbmFyeTo6aXNPYmplY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGljdGlvbmFyeTo6aXNVbmRlZmluZWRPck51bGwpOgorICAgICAgICAo
V2ViQ29yZTo6RGljdGlvbmFyeTo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rpb25hcnk6
OmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjayk6CisgICAgICAgICogYmluZGluZ3MvanMvSURC
QmluZGluZ1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEaWN0aW9uYXJ5
RnJvbVZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbToKKyAgICAgICAgKEpTVmFsdWVUb05hdGl2ZSk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6
CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6CisgICAgICAgIChHZW5lcmF0ZUV2
ZW50Q29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgIChHZXROYXRpdmVUeXBlKToKKyAgICAg
ICAgKEpTVmFsdWVUb05hdGl2ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQ
UC9XZWJET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6Om9wdGlvbnNPYmpl
Y3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RP
YmouY3BwOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9vcHRpb25zX29iamVjdCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5o
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JZGJLZXkpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmg6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbToKKyAgICAgICAgKC1b
RE9NVGVzdE9iaiBvcHRpb25zT2JqZWN0Om9vbzpdKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0RXZl
bnRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpm
aWxsVGVzdEV2ZW50Q29uc3RydWN0b3JJbml0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om9wdGlvbnNPYmplY3RDYWxsYmFjayk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGljdGlvbmFyeTo6RGljdGlvbmFyeSk6CisgICAgICAgIChXZWJD
b3JlOjpEaWN0aW9uYXJ5Ojp+RGljdGlvbmFyeSk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9u
YXJ5OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6RGljdGlvbmFyeTo6aXNPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGljdGlvbmFyeTo6aXNVbmRlZmluZWRPck51bGwpOgorICAg
ICAgICAoV2ViQ29yZTo6RGljdGlvbmFyeTo6Z2V0S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
Y3Rpb25hcnk6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5OjpnZXRXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGljdGlvbmFyeSk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWOFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmVDYWxsYmFjayk6
CisKIDIwMTItMDMtMTIgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgRml4IEluZGV4ZWREQiBidWlsZCB3aXRoIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KaW5kZXggYTM0NDQzNjk1OTdlYmFkNWQ3NGEwYmViNzQxZDU4MzdiMDNlNDA5Mi4u
ZmEyZDY5MTM0N2Y1Y2MzZTJkYjE1ZTViZGY3ZWRmMTdjMWRmYzU0NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCkBAIC0xMzg2LDcgKzEzODYsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3NvckN1c3RvbS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmggXAotCVNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL09wdGlvbnNPYmplY3QuaCBcCisJU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvRGljdGlvbmFyeS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NoZWR1bGVkQWN0aW9uLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZS5jcHAKaW5kZXggY2M1M2E4ODJhZjMzZDk5NDk4NWVlMmYzZWNkMWNl
MWZkNjAyYzE5Mi4uY2E2NTkwN2ZiMzkxMjQ3ZWE2MTE0NWEzMjJmMDg5YWM0ZDhiZjk1MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcApA
QCAtODUsNyArODUsNyBAQCB2b2lkIElEQkRhdGFiYXNlOjpjbGVhclZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbihJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgbV92ZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24gPSAwOwogfQogCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRh
YmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBPcHRpb25z
T2JqZWN0JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlm
ICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKaW5kZXggZmZlMjFkODI2ZTJkMGZhNGM2MDU2YjQ2YzNj
MDA5OTE1M2ZjOWM0MS4uM2QwYmI5YTdhNjk2MjcxYTAyZDgyZDQ0ZWI2MWFjZWE3OTU2Mzg2OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCkBA
IC0yOCwxMyArMjgsMTMgQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1
ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAi
RXZlbnQuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5o
IgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24u
aCIKLSNpbmNsdWRlICJPcHRpb25zT2JqZWN0LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
QEAgLTYyLDggKzYyLDggQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4g
b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+b2JqZWN0U3RvcmVO
YW1lcygpOyB9CiAKICAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0
b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KLSAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBj
cmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBjcmVhdGVPYmplY3RTdG9yZShuYW1lLCBPcHRpb25zT2JqZWN0KCksIGVjKTsgfQot
ICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgT3B0aW9uc09iamVjdCYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjcmVhdGVPYmplY3RTdG9yZShuYW1l
LCBEaWN0aW9uYXJ5KCksIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNy
ZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYsIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlv
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiwgdW5z
aWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJp
bmcmLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBkZWxl
dGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbAppbmRleCA5
YWJiMzhkODkzZjQxNzkxMWFlM2FhNDUxMTc3NTdkMzc4ZTI4ZjQ4Li5iZDlmN2QwMzkzYWVjZDVk
MGQzZDg1NWY4ZTE2ZmQ5ZjNmYmJkMDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsCkBAIC0zOSw3ICszOSw3IEBAIG1vZHVsZSBzdG9y
YWdlIHsKICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKICAgICAgICAg
YXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb252ZXJzaW9uY2hhbmdlOwogCi0gICAgICAgIElEQk9i
amVjdFN0b3JlIGNyZWF0ZU9iamVjdFN0b3JlKGluIERPTVN0cmluZyBuYW1lLCBpbiBbT3B0aW9u
YWxdIE9wdGlvbnNPYmplY3Qgb3B0aW9ucykKKyAgICAgICAgSURCT2JqZWN0U3RvcmUgY3JlYXRl
T2JqZWN0U3RvcmUoaW4gRE9NU3RyaW5nIG5hbWUsIGluIFtPcHRpb25hbF0gRGljdGlvbmFyeSBv
cHRpb25zKQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CiAgICAg
ICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW4gRE9NU3RyaW5nIG5hbWUpCiAgICAgICAgICAg
ICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5oCmluZGV4IGI5YTk4ZGFlYjNkZjA3YmQ1YTNmYzM2
NGI2OGE3ZjJlYjJjOWM0NDIuLjFkM2M1ZGY3ZGE0NjEwNWVlZmFhZDI5YzAzZTZmMTk1NDk0ZGFk
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJh
bmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2Uu
aApAQCAtMjgsOCArMjgsOCBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNp
bmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiT3B0
aW9uc09iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggNWMzNDY2NmQzZmI1MWNkYjBjNWM4ZmY0YTNmY2M1
MDQ1NDZmNDM0ZC4uM2E1YTA3MzZiZDI2MzJkMzI2MjRkNDY4YThkZjdkNmVlODQ0NDZjZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcApAQCAtMTc1LDcgKzE3NSw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OmNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4CiAgICAgcmV0
dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmpl
Y3RTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtl
eVBhdGgsIGNvbnN0IE9wdGlvbnNPYmplY3QmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
UGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRp
b25zLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3Jl
OjpjcmVhdGVJbmRleCIpOwogICAgIGlmICghSURCSXNWYWxpZEtleVBhdGgoa2V5UGF0aCkpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5o
CmluZGV4IDUwOTA5MGVkOGRhNjJmYjM4M2E4NzEyNWM3OTg3MDhiNWJkODI0MDYuLjcwM2ExYWUy
ODM2MjA1ZTI5MzgzOGUzNjQyZjA2NzM4MjYwOTBmYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaApAQCAtMjYsNiArMjYsNyBAQAog
I2lmbmRlZiBJREJPYmplY3RTdG9yZV9oCiAjZGVmaW5lIElEQk9iamVjdFN0b3JlX2gKIAorI2lu
Y2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJJREJDdXJzb3IuaCIKICNpbmNsdWRlICJJ
REJJbmRleC5oIgogI2luY2x1ZGUgIklEQktleS5oIgpAQCAtMzMsNyArMzQsNiBAQAogI2luY2x1
ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQlJlcXVl
c3QuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIk9wdGlvbnNPYmpl
Y3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC02Myw3ICs2Myw3
IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0
b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBhZGQoY29udGV4dCwg
dmFsdWUsIDAsIGVjKTsgIH0KICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBwdXQoY29udGV4dCwgdmFsdWUs
IDAsIGVjKTsgIH0KLSAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
cmV0dXJuIGNyZWF0ZUluZGV4KG5hbWUsIGtleVBhdGgsIE9wdGlvbnNPYmplY3QoKSwgZWMpOyB9
CisgICAgUGFzc1JlZlB0cjxJREJJbmRleD4gY3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjcmVh
dGVJbmRleChuYW1lLCBrZXlQYXRoLCBEaWN0aW9uYXJ5KCksIGVjKTsgfQogICAgIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCAwLCBlYyk7
IH0gCiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURC
Q3Vyc29yOjpORVhULCBlYyk7IH0gCiAKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IGNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25D
b2RlJik7CiAKLSAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgY29uc3QgT3B0aW9uc09iamVjdCYsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgY29uc3QgRGljdGlvbmFyeSYs
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQkluZGV4PiBpbmRleChjb25zdCBT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0
IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwogCkBAIC0xMDEsNCArMTAxLDMgQEAgcHJp
dmF0ZToKICNlbmRpZgogCiAjZW5kaWYgLy8gSURCT2JqZWN0U3RvcmVfaAotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwKaW5kZXgg
YWIxMjAwY2Y0M2IwNTdiMGQ1OWI0ODNhNzM5YzMyZDIzMDAyNGUwOS4uYzJiZDcwOWJlMDM3YmMy
YTdmNTVmMDRjZGY1NDdhNWIwNWEzMTkzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbApAQCAtNDcsNyArNDcsNyBAQCBtb2R1
bGUgc3RvcmFnZSB7CiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsK
ICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qgb3Bl
bkN1cnNvcihpbiBbT3B0aW9uYWxdIElEQktleVJhbmdlIHJhbmdlLCBpbiBbT3B0aW9uYWxdIHVu
c2lnbmVkIHNob3J0IGRpcmVjdGlvbikKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VF
eGNlcHRpb24pOwotICAgICAgICBJREJJbmRleCBjcmVhdGVJbmRleChpbiBET01TdHJpbmcgbmFt
ZSwgaW4gRE9NU3RyaW5nIGtleVBhdGgsIGluIFtPcHRpb25hbF0gT3B0aW9uc09iamVjdCBvcHRp
b25zKQorICAgICAgICBJREJJbmRleCBjcmVhdGVJbmRleChpbiBET01TdHJpbmcgbmFtZSwgaW4g
RE9NU3RyaW5nIGtleVBhdGgsIGluIFtPcHRpb25hbF0gRGljdGlvbmFyeSBvcHRpb25zKQogICAg
ICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CiAgICAgICAgIElEQkluZGV4
IGluZGV4KGluIERPTVN0cmluZyBuYW1lKQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFz
ZUV4Y2VwdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA3NDM0M2YwMTVhOTZiYjMwODEwYjgyZjdjOTg1
NGVmODlmYWVmZTA1Li5lOTNjZmE4M2FjZjU5ZWVhZGIxMTBlNzFkZjFlNDk5MmY1YWI2ZWYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKQEAgLTEwOSw3ICsxMDksNyBAQCB2OCB7CiAgICAgICAgIGJpbmRpbmdzL3Y4
L0RPTURhdGFTdG9yZS5jcHAgXAogICAgICAgICBiaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcCBc
CiAgICAgICAgIGJpbmRpbmdzL3Y4L05QT2JqZWN0V3JhcHBlci5jcHAgXAotICAgICAgICBiaW5k
aW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcCBcCisgICAgICAgIGJpbmRpbmdzL3Y4L0RpY3Rpb25h
cnkuY3BwIFwKICAgICAgICAgYmluZGluZ3MvdjgvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcCBc
CiAgICAgICAgIGJpbmRpbmdzL3Y4L1JldGFpbmVkRE9NSW5mby5jcHAgXAogICAgICAgICBiaW5k
aW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1VzZVY4LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvVXNlVjguY21ha2UKaW5kZXggYjhmNWZkMjY3
ZWE1YTNlYjkyZDg5MTlkYTE0YWRkNTM0NmFmNzhlMC4uMDlmMjkwOGVmOTdkMTBmY2M1NDE4OWI2
Mzk1NmVkMzlmYjlkM2M1YyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvVXNlVjguY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvVXNlVjguY21ha2UKQEAgLTIzLDcgKzIzLDcgQEAgTElTVChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvdjgvRGF0ZUV4dGVuc2lvbi5jcHAK
ICAgICBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAogICAgIGJpbmRpbmdzL3Y4
L0lzb2xhdGVkV29ybGQuY3BwCi0gICAgYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHAKKyAg
ICBiaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNwcAogICAgIGJpbmRpbmdzL3Y4L1BhZ2VTY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAKICAgICBiaW5kaW5ncy92OC9SZXRhaW5lZERPTUluZm8uY3BwCiAgICAg
YmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGI4MTcx
ZWM2ODQ1NGM3Y2NhMjRhMzIxZmEzZTRhY2ZmZGExYzQzMjMuLjI2YjVhYTJiNTQzY2VhMTJhOWIy
YTAxNmM4ODk2NGI2NWMzZjUxZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE4MjEsNyArMTgyMSw3
IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuaCcsCi0gICAgICAgICAg
ICAnYmluZGluZ3MvanMvT3B0aW9uc09iamVjdC5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy9q
cy9EaWN0aW9uYXJ5LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlv
bi5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5oJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwJywKQEAgLTE4
OTQsOCArMTg5NCw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvTlBPYmplY3RXcmFwcGVy
LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9OUFY4T2JqZWN0LmgnLAotICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L09wdGlvbnNPYmplY3QuY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9PcHRpb25zT2Jq
ZWN0LmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuY3BwJywKKyAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L093bkhhbmRsZS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9QYWdlU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9QYWdlU2NyaXB0RGVidWdT
ZXJ2ZXIuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CmluZGV4IDIxNmJmZjViZWY0YmIyNWRkNTlhZTViZWY5ZDk3MmE0OWRjMThhM2QuLmY2NmE5MTFl
MDQ1NjNjMjlkNjc1ZDA2M2EwODc2MzUwMDY0OWZmMjggMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC02ODg5Nyw3ICs2ODg5Nyw3IEBACiAJCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0
aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcT3B0aW9uc09iamVjdC5oIgorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGJpbmRpbmdzXGpzXERpY3Rpb25hcnkuaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJ
CQk8RmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRGljdGlvbmFy
eS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRGljdGlvbmFyeS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjFkOTQ0NDVhY2Q5OTkzMTIwYWEyYTllYTMxMTU5MTRjNzZkZGZkZjIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9EaWN0aW9uYXJ5LmgKQEAgLTAsMCArMSw3
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgRGljdGlvbmFyeV9oCisjZGVmaW5lIERpY3Rpb25hcnlfaAor
CisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBET01TdHJpbmdMaXN0OworY2xhc3MgRE9NV2luZG93OworY2xhc3Mg
SURCS2V5UmFuZ2U7CitjbGFzcyBTY3JpcHRWYWx1ZTsKK2NsYXNzIFN0b3JhZ2U7CitjbGFzcyBU
cmFja0Jhc2U7CisKKy8vIEZJWE1FOiBJbXBsZW1lbnQuCitjbGFzcyBEaWN0aW9uYXJ5IHsKK3B1
YmxpYzoKKyAgICBEaWN0aW9uYXJ5KCkgeyB9CisKKyAgICBib29sIGlzT2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzVW5kZWZpbmVkT3JOdWxsKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIGJvb2wmKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIGludDMyX3Qm
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIGRv
dWJsZSYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5n
JiwgU3RyaW5nJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGdldChjb25zdCBT
dHJpbmcmLCBTY3JpcHRWYWx1ZSYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBn
ZXQoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgc2hvcnQmKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkJikgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsb25nIGxvbmcm
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIFJl
ZlB0cjxET01XaW5kb3c+JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGdldChj
b25zdCBTdHJpbmcmLCBSZWZQdHI8U3RvcmFnZT4mKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIE1lc3NhZ2VQb3J0QXJyYXkmKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBib29sIGdldChjb25z
dCBTdHJpbmcmLCBSZWZQdHI8VHJhY2tCYXNlPiYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisj
ZW5kaWYKKyAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBIYXNoU2V0PEF0b21pY1N0cmluZz4m
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBnZXRXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2soY29uc3QgU3RyaW5nJiwgU3RyaW5nJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
K307CisKK30KKworI2VuZGlmIC8vIERpY3Rpb25hcnlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAppbmRleCA4ZDNkYWQ1MjE2N2Vk
NDNkMjAyMjc2MmIwNTg4ZjUwODY4MzhmZTExLi43MmY0OWY4OTVmNjI4ZWUxNWUxYjU0ZjVkZTZk
ODk0YTg3NTRlZGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJC
aW5kaW5nVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJC
aW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtNDYsMTAgKzQ2LDEwIEBAIFBhc3NSZWZQdHI8SURCS2V5
PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1CiAgICAgcmV0dXJuIDA7CiB9CiAKLU9wdGlvbnNPYmplY3QgY3JlYXRlT3B0aW9uc09i
amVjdEZyb21WYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSkKK0RpY3Rpb25hcnkg
Y3JlYXRlRGljdGlvbmFyeUZyb21WYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSkK
IHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IERhdGFiYXNlIE9wdGlvbnMuCi0gICAgcmV0dXJu
IE9wdGlvbnNPYmplY3QoKTsKKyAgICByZXR1cm4gRGljdGlvbmFyeSgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9J
REJCaW5kaW5nVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5k
aW5nVXRpbGl0aWVzLmgKaW5kZXggZmE5MzM0NzVkZWRiNTk5MDlhNWQ5MDFkNzkxYzczZWRhZjU3
NzViNS4uMTg3ODdhNTQ5ZmIyZDM0MzVlODYwNzUzZWY0NjliNjFjOWI2MjhmNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaApAQCAtMjgs
NyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJP
cHRpb25zT2JqZWN0LmgiCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIlNjcmlw
dFZhbHVlLmgiIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKQEAgLTM3LDcgKzM3LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCS2V5OwogCiBQYXNzUmVmUHRyPElEQktleT4g
Y3JlYXRlSURCS2V5RnJvbVZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKLU9w
dGlvbnNPYmplY3QgY3JlYXRlT3B0aW9uc09iamVjdEZyb21WYWx1ZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSk7CitEaWN0aW9uYXJ5IGNyZWF0ZURpY3Rpb25hcnlGcm9tVmFsdWUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL09wdGlvbnNPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL09wdGlvbnNPYmplY3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA3
OGFlMTc0MjE4ZTc3MWNiMDFmZDEyM2YzNGUyY2FhNjE1YmIyMi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9P
cHRpb25zT2JqZWN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBPcHRpb25zT2JqZWN0X2gKLSNkZWZpbmUgT3B0aW9uc09iamVjdF9oCi0KLSNpbmNsdWRl
ICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIERPTVN0cmluZ0xpc3Q7Ci1jbGFzcyBET01XaW5kb3c7Ci1jbGFzcyBJREJLZXlSYW5n
ZTsKLWNsYXNzIFNjcmlwdFZhbHVlOwotY2xhc3MgU3RvcmFnZTsKLWNsYXNzIFRyYWNrQmFzZTsK
LQotLy8gRklYTUU6IEltcGxlbWVudC4KLWNsYXNzIE9wdGlvbnNPYmplY3QgewotcHVibGljOgot
ICAgIE9wdGlvbnNPYmplY3QoKSB7IH0KLQotICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotICAgIGJvb2wgaXNVbmRlZmluZWRPck51bGwoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQotCi0gICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgYm9vbCYpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgaW50MzJfdCYpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgZG91Ymxl
JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBT
dHJpbmcmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmlu
ZyYsIFNjcmlwdFZhbHVlJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGdldChj
b25zdCBTdHJpbmcmLCB1bnNpZ25lZCBzaG9ydCYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQmKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQotICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgUmVmUHRy
PERPTVdpbmRvdz4mKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgZ2V0KGNvbnN0
IFN0cmluZyYsIFJlZlB0cjxTdG9yYWdlPiYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
Ym9vbCBnZXQoY29uc3QgU3RyaW5nJiwgTWVzc2FnZVBvcnRBcnJheSYpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIGJvb2wgZ2V0KGNvbnN0IFN0
cmluZyYsIFJlZlB0cjxUcmFja0Jhc2U+JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRp
ZgotICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBib29sIGdldFdpdGhVbmRlZmluZWRPck51bGxD
aGVjayhjb25zdCBTdHJpbmcmLCBTdHJpbmcmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotfTsK
LQotfQotCi0jZW5kaWYgLy8gT3B0aW9uc09iamVjdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDBhOGJhMGEwMmQ3N2Q5
MDkwZWFiZTYxNmZlMTMyMGU5NmE3MWFiYzAuLjlkNjAwNjNkZDc0ZmI0MzE2NmMwMDU4ZjdjNTFi
NjBlZTljZTQ0ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCkBAIC0yNzg5LDcgKzI3ODksNyBAQCBteSAlbmF0aXZlVHlwZSA9
ICgKICAgICAiTm9kZUZpbHRlciIgPT4gIlJlZlB0cjxOb2RlRmlsdGVyPiIsCiAgICAgIlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSIgPT4gIlJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IiwKICAg
ICAiSURCS2V5IiA9PiAiUGFzc1JlZlB0cjxJREJLZXk+IiwKLSAgICAiT3B0aW9uc09iamVjdCIg
PT4gIk9wdGlvbnNPYmplY3QiLAorICAgICJEaWN0aW9uYXJ5IiA9PiAiRGljdGlvbmFyeSIsCiAg
ICAgImJvb2xlYW4iID0+ICJib29sIiwKICAgICAiZG91YmxlIiA9PiAiZG91YmxlIiwKICAgICAi
ZmxvYXQiID0+ICJmbG9hdCIsCkBAIC0yOTI1LDEwICsyOTI1LDEwIEBAIHN1YiBKU1ZhbHVlVG9O
YXRpdmUKICAgICAgICAgcmV0dXJuICJjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywgJHZhbHVl
KSI7CiAgICAgfQogCi0gICAgaWYgKCR0eXBlIGVxICJPcHRpb25zT2JqZWN0IikgeworICAgIGlm
ICgkdHlwZSBlcSAiRGljdGlvbmFyeSIpIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIklE
QkJpbmRpbmdVdGlsaXRpZXMuaCIsICRjb25kaXRpb25hbCk7Ci0gICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJPcHRpb25zT2JqZWN0LmgiLCAkY29uZGl0aW9uYWwpOwotICAgICAgICByZXR1cm4g
ImNyZWF0ZU9wdGlvbnNPYmplY3RGcm9tVmFsdWUoZXhlYywgJHZhbHVlKSI7CisgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJEaWN0aW9uYXJ5LmgiLCAkY29uZGl0aW9uYWwpOworICAgICAgICBy
ZXR1cm4gImNyZWF0ZURpY3Rpb25hcnlGcm9tVmFsdWUoZXhlYywgJHZhbHVlKSI7CiAgICAgfQog
CiAgICAgaWYgKCR0eXBlIGVxICJET01TdHJpbmdbXSIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggYzU4ZjFmNTZjNmNl
OGQwYmJjNDIxYTY0NDMxYzVhYmVkZGE3MmFhMy4uYWE0OTQ5NmRhOGYzZDE5OTY1YWE4MzRmNmJl
YmIwNGFhYzQ0MjNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTI4OSw3ICsyODksNyBAQCBzdWIgR2VuZXJhdGVIZWFk
ZXIKIAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOwogICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICJjbGFzcyBGbG9hdFJlY3Q7XG4iKSBpZiAkc3ZnUHJvcGVydHlUeXBlICYmICRzdmdQ
cm9wZXJ0eVR5cGUgZXEgIkZsb2F0UmVjdCI7Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNs
YXNzIE9wdGlvbnNPYmplY3Q7XG4iKSBpZiBJc0NvbnN0cnVjdG9yVGVtcGxhdGUoJGRhdGFOb2Rl
LCAiRXZlbnQiKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgRGljdGlvbmFyeTtc
biIpIGlmIElzQ29uc3RydWN0b3JUZW1wbGF0ZSgkZGF0YU5vZGUsICJFdmVudCIpOwogCiAgICAg
bXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlRm9yQ29udmVyc2lvbnMoJGRhdGFOb2RlLCAk
aW50ZXJmYWNlTmFtZSk7CiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Ik5hbWVkQ29uc3RydWN0b3IifSkgewpAQCAtNDkyLDcgKzQ5Miw3IEBAIEVORAogICAgIH0KIAog
ICAgIGlmIChJc0NvbnN0cnVjdG9yVGVtcGxhdGUoJGRhdGFOb2RlLCAiRXZlbnQiKSkgewotICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5ib29sIGZpbGwke2ltcGxDbGFzc05hbWV9SW5p
dCgke2ltcGxDbGFzc05hbWV9SW5pdCYsIGNvbnN0IE9wdGlvbnNPYmplY3QmKTtcbiIpOworICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5ib29sIGZpbGwke2ltcGxDbGFzc05hbWV9SW5p
dCgke2ltcGxDbGFzc05hbWV9SW5pdCYsIGNvbnN0IERpY3Rpb25hcnkmKTtcbiIpOwogICAgIH0K
IAogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbn1cblxuIik7CkBAIC0xNTkxLDcgKzE1OTEs
NyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgIEVYQ0VQVElPTl9CTE9DSygkbmF0aXZl
VHlwZSwgJHBhcmFtZXRlck5hbWUsICIgLgogICAgICAgICAgICAgICAgICBKU1ZhbHVlVG9OYXRp
dmUoJHBhcmFtZXRlciwgIk1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsICRwYXJhbUluZGV4
LCAkcGFyYW1ldGVyRGVmYXVsdFBvbGljeSkiKSAuICIpO1xuIjsKLSAgICAgICAgICAgIGlmICgk
bmF0aXZlVHlwZSBlcSAnT3B0aW9uc09iamVjdCcpIHsKKyAgICAgICAgICAgIGlmICgkbmF0aXZl
VHlwZSBlcSAnRGljdGlvbmFyeScpIHsKICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0
cmluZyAuPSAiICAgIGlmIChhcmdzLkxlbmd0aCgpID4gJHBhcmFtSW5kZXggJiYgISRwYXJhbWV0
ZXJOYW1lLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgISRwYXJhbWV0ZXJOYW1lLmlzT2JqZWN0KCkp
IHtcbiI7CiAgICAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0gIiAgICAgICAg
ZWMgPSBUWVBFX01JU01BVENIX0VSUjtcbiI7CiAgICAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hl
Y2tTdHJpbmcgLj0gIiAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTtcbiI7CkBA
IC0xNzE2LDcgKzE3MTYsNyBAQCBzdWIgR2VuZXJhdGVFdmVudENvbnN0cnVjdG9yQ2FsbGJhY2sK
ICAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKICAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0
OwogCi0gICAgQWRkVG9JbXBsSW5jbHVkZXMoIk9wdGlvbnNPYmplY3QuaCIpOworICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJEaWN0aW9uYXJ5LmgiKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjhC
aW5kaW5nTWFjcm9zLmgiKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwogdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4JHtpbXBsQ2xhc3NOYW1lfTo6Y29uc3RydWN0b3JDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTczNSw3ICsxNzM1LDcgQEAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4JHtpbXBsQ2xhc3NOYW1lfTo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnQKICAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NL
KFY4UGFyYW1ldGVyPD4sIHR5cGUsIGFyZ3NbMF0pOwogICAgICR7aW1wbENsYXNzTmFtZX1Jbml0
IGV2ZW50SW5pdDsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+PSAyKSB7Ci0gICAgICAgIEVYQ0VQ
VElPTl9CTE9DSyhPcHRpb25zT2JqZWN0LCBvcHRpb25zLCBhcmdzWzFdKTsKKyAgICAgICAgRVhD
RVBUSU9OX0JMT0NLKERpY3Rpb25hcnksIG9wdGlvbnMsIGFyZ3NbMV0pOwogICAgICAgICBpZiAo
IWZpbGwke2ltcGxDbGFzc05hbWV9SW5pdChldmVudEluaXQsIG9wdGlvbnMpKQogICAgICAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICB9CkBAIC0xNzQ2LDcgKzE3NDYsNyBAQCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjgke2ltcGxDbGFzc05hbWV9Ojpjb25zdHJ1Y3RvckNhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudAogICAgIHJldHVybiB0b1Y4KGV2ZW50LnJlbGVhc2UoKSwg
YXJncy5Ib2xkZXIoKSk7CiB9CiAKLWJvb2wgZmlsbCR7aW1wbENsYXNzTmFtZX1Jbml0KCR7aW1w
bENsYXNzTmFtZX1Jbml0JiBldmVudEluaXQsIGNvbnN0IE9wdGlvbnNPYmplY3QmIG9wdGlvbnMp
Citib29sIGZpbGwke2ltcGxDbGFzc05hbWV9SW5pdCgke2ltcGxDbGFzc05hbWV9SW5pdCYgZXZl
bnRJbml0LCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zKQogewogRU5ECiAKQEAgLTMzNTUsNyAr
MzM1NSw3IEBAIHN1YiBHZXROYXRpdmVUeXBlCiAgICAgcmV0dXJuICJOb2RlKiIgaWYgJHR5cGUg
ZXEgIkV2ZW50VGFyZ2V0IiBhbmQgJGlzUGFyYW1ldGVyOwogICAgIHJldHVybiAiZG91YmxlIiBp
ZiAkdHlwZSBlcSAiRGF0ZSI7CiAgICAgcmV0dXJuICJTY3JpcHRWYWx1ZSIgaWYgJHR5cGUgZXEg
IkRPTU9iamVjdCI7Ci0gICAgcmV0dXJuICJPcHRpb25zT2JqZWN0IiBpZiAkdHlwZSBlcSAiT3B0
aW9uc09iamVjdCI7CisgICAgcmV0dXJuICJEaWN0aW9uYXJ5IiBpZiAkdHlwZSBlcSAiRGljdGlv
bmFyeSI7CiAKICAgICByZXR1cm4gIlN0cmluZyIgaWYgJHR5cGUgZXEgIkRPTVVzZXJEYXRhIjsg
ICMgRklYTUU6IFRlbXBvcmFyeSBoYWNrPwogCkBAIC0zNDU4LDggKzM0NTgsOCBAQCBzdWIgSlNW
YWx1ZVRvTmF0aXZlCiAgICAgICAgIHJldHVybiAiY3JlYXRlSURCS2V5RnJvbVZhbHVlKCR2YWx1
ZSkiOwogICAgIH0KIAotICAgIGlmICgkdHlwZSBlcSAiT3B0aW9uc09iamVjdCIpIHsKLSAgICAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIk9wdGlvbnNPYmplY3QuaCIpOworICAgIGlmICgkdHlwZSBl
cSAiRGljdGlvbmFyeSIpIHsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRpY3Rpb25hcnku
aCIpOwogICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgIH0KIApAQCAtMzYwNyw3ICszNjA3LDcg
QEAgbXkgJW5vbl93cmFwcGVyX3R5cGVzID0gKAogICAgICdOb2RlRmlsdGVyJyA9PiAxLAogICAg
ICdFdmVudExpc3RlbmVyJyA9PiAxLAogICAgICdJREJLZXknID0+IDEsCi0gICAgJ09wdGlvbnNP
YmplY3QnID0+IDEsCisgICAgJ0RpY3Rpb25hcnknID0+IDEsCiAgICAgJ0RhdGUnID0+IDEsCiAg
ICAgJ01lZGlhUXVlcnlMaXN0TGlzdGVuZXInID0+IDEKICk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcApp
bmRleCA5ZDYzZmRkZTdlZDYzMmRiOWU4NWI2ZTI2MDZkZGI4MGQ5ZGNiNjg2Li4yZmJjMzkzYTAw
NzUyZjdiNGJlOTY5YzM3NTNiMDAzMWMyZmZlMDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKQEAg
LTIxLDE3ICsyMSwxNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkRPTVRl
c3RPYmouaCIKIAorI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUg
IktVUkwuaCIKLSNpbmNsdWRlICJPcHRpb25zT2JqZWN0LmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnQu
aCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJUZXN0T2Jq
LmgiCisjaW5jbHVkZSAiV2ViRE9NRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIldlYkRPTURvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiV2ViRE9NSURCS2V5LmgiCi0jaW5jbHVkZSAiV2ViRE9NT3B0aW9u
c09iamVjdC5oIgogI2luY2x1ZGUgIldlYkRPTVNWR1BvaW50LmgiCiAjaW5jbHVkZSAiV2ViRE9N
U3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViRE9NYS5oIgpAQCAtNzA0LDcgKzcwNCw3IEBAIHZvaWQg
V2ViRE9NVGVzdE9iajo6aWRiS2V5KGNvbnN0IFdlYkRPTUlEQktleSYga2V5KQogICAgIGltcGwo
KS0+aWRiS2V5KHRvV2ViQ29yZShrZXkpKTsKIH0KIAotdm9pZCBXZWJET01UZXN0T2JqOjpvcHRp
b25zT2JqZWN0KGNvbnN0IFdlYkRPTU9wdGlvbnNPYmplY3QmIG9vLCBjb25zdCBXZWJET01PcHRp
b25zT2JqZWN0JiBvb28pCit2b2lkIFdlYkRPTVRlc3RPYmo6Om9wdGlvbnNPYmplY3QoY29uc3Qg
V2ViRE9NRGljdGlvbmFyeSYgb28sIGNvbnN0IFdlYkRPTURpY3Rpb25hcnkmIG9vbykKIHsKICAg
ICBpZiAoIWltcGwoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaAppbmRleCA4Yzcy
ZjIzMzMxZGI5YTliY2FlNjNkMGYzYzg3ZDQ4ZGUyMzQ3ZDkwLi5mNDZmOWJlNDI1ZGU0YzZlMTlk
NGM0MDBiOWQ0NzA5YmM2YTViOTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaApAQCAtMzAsMTAgKzMwLDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFRlc3RPYmo7CiB9OwogCitjbGFzcyBXZWJE
T01EaWN0aW9uYXJ5OwogY2xhc3MgV2ViRE9NRG9jdW1lbnQ7CiBjbGFzcyBXZWJET01FdmVudExp
c3RlbmVyOwogY2xhc3MgV2ViRE9NSURCS2V5OwotY2xhc3MgV2ViRE9NT3B0aW9uc09iamVjdDsK
IGNsYXNzIFdlYkRPTVNWR1BvaW50OwogY2xhc3MgV2ViRE9NU3RyaW5nOwogY2xhc3MgV2ViRE9N
VGVzdE9iajsKQEAgLTE1MCw3ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAgV2ViRE9NVGVzdE9iaiBt
ZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKGNvbnN0IFdlYkRPTVN0cmluZyYgc3Ry
QXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcpOwogICAgIHZvaWQgc2VyaWFsaXplZFZh
bHVlKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZyk7CiAgICAgdm9pZCBpZGJLZXko
Y29uc3QgV2ViRE9NSURCS2V5JiBrZXkpOwotICAgIHZvaWQgb3B0aW9uc09iamVjdChjb25zdCBX
ZWJET01PcHRpb25zT2JqZWN0JiBvbywgY29uc3QgV2ViRE9NT3B0aW9uc09iamVjdCYgb29vKTsK
KyAgICB2b2lkIG9wdGlvbnNPYmplY3QoY29uc3QgV2ViRE9NRGljdGlvbmFyeSYgb28sIGNvbnN0
IFdlYkRPTURpY3Rpb25hcnkmIG9vbyk7CiAgICAgdm9pZCBtZXRob2RXaXRoRXhjZXB0aW9uKCk7
CiAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IFdlYkRPTVN0cmluZyYgdHlwZSwgY29u
c3QgV2ViRE9NRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSk7CiAgICAg
dm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IFdlYkRPTVN0cmluZyYgdHlwZSwgY29uc3Qg
V2ViRE9NRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCmluZGV4IDM1YWRkMzA4NzU4MjlhNGNkNjA3YzcwYzk2
YmU4ZDk3YTcxMDA1YjAuLmE2ZDAxNjhjNDczM2MxN2YzYzkzZDFmMWJkZjVlYTA1NjA0ZTJiNWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCkBAIC0zMywxMiArMzMsMTIgQEAK
ICNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiYm9vbC5oIgogI2luY2x1
ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJL
aXRET01EaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTURpY3Rpb25hcnlQ
cml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTURvY3VtZW50LmgiCiAjaW5jbHVk
ZSAid2Via2l0L1dlYktpdERPTURvY3VtZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9X
ZWJLaXRET01JREJLZXkuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NSURCS2V5UHJpdmF0
ZS5oIgotI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01PcHRpb25zT2JqZWN0LmgiCi0jaW5jbHVk
ZSAid2Via2l0L1dlYktpdERPTU9wdGlvbnNPYmplY3RQcml2YXRlLmgiCiAjaW5jbHVkZSAid2Vi
a2l0L1dlYktpdERPTVNWR1BvaW50LmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVNWR1Bv
aW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01TZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCIKQEAgLTIxNCwxOSArMjE0LDE5IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfaWRiX2tl
eShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01JREJLZXkqIGtleSkKIH0KIAogdm9p
ZAotd2Via2l0X2RvbV90ZXN0X29ial9vcHRpb25zX29iamVjdChXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBXZWJLaXRET01PcHRpb25zT2JqZWN0KiBvbywgV2ViS2l0RE9NT3B0aW9uc09iamVjdCog
b29vKQord2Via2l0X2RvbV90ZXN0X29ial9vcHRpb25zX29iamVjdChXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBXZWJLaXRET01EaWN0aW9uYXJ5KiBvbywgV2ViS2l0RE9NRGljdGlvbmFyeSogb29v
KQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwob28pOwogICAgIGdfcmV0dXJuX2lm
X2ZhaWwob29vKTsKLSAgICBXZWJDb3JlOjpPcHRpb25zT2JqZWN0ICogY29udmVydGVkX29vID0g
TlVMTDsKKyAgICBXZWJDb3JlOjpEaWN0aW9uYXJ5ICogY29udmVydGVkX29vID0gTlVMTDsKICAg
ICBpZiAob28gIT0gTlVMTCkgewogICAgICAgICBjb252ZXJ0ZWRfb28gPSBXZWJLaXQ6OmNvcmUo
b28pOwogICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9vbyk7CiAgICAgfQotICAg
IFdlYkNvcmU6Ok9wdGlvbnNPYmplY3QgKiBjb252ZXJ0ZWRfb29vID0gTlVMTDsKKyAgICBXZWJD
b3JlOjpEaWN0aW9uYXJ5ICogY29udmVydGVkX29vbyA9IE5VTEw7CiAgICAgaWYgKG9vbyAhPSBO
VUxMKSB7CiAgICAgICAgIGNvbnZlcnRlZF9vb28gPSBXZWJLaXQ6OmNvcmUob29vKTsKICAgICAg
ICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfb29vKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RPYmouaAppbmRleCBjYWViNTFmZmFiMDg1ZTE0Yzc5NTFiMTU4NDFmODhmNzU0ZDlmNTc3Li5j
NGQyMGM2MmI0MTJmZTA0ZDU4ZjhiM2VjNjMzY2YxOTI5ODE3MGIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2Jq
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE9iai5oCkBAIC0xNTMsMTQgKzE1MywxNCBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2lkYl9rZXkoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NSURCS2V5KiBrZXkpOwog
LyoqCiAgKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29wdGlvbnNfb2JqZWN0OgogICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RPYmoKLSAqIEBvbzogQSAjV2ViS2l0RE9NT3B0aW9uc09iamVjdAotICog
QG9vbzogQSAjV2ViS2l0RE9NT3B0aW9uc09iamVjdAorICogQG9vOiBBICNXZWJLaXRET01EaWN0
aW9uYXJ5CisgKiBAb29vOiBBICNXZWJLaXRET01EaWN0aW9uYXJ5CiAgKgogICogUmV0dXJuczoK
ICAqCiAqKi8KIFdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9vcHRpb25zX29i
amVjdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01PcHRpb25zT2JqZWN0KiBvbywg
V2ViS2l0RE9NT3B0aW9uc09iamVjdCogb29vKTsKK3dlYmtpdF9kb21fdGVzdF9vYmpfb3B0aW9u
c19vYmplY3QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NRGljdGlvbmFyeSogb28s
IFdlYktpdERPTURpY3Rpb25hcnkqIG9vbyk7CiAKIC8qKgogICogd2Via2l0X2RvbV90ZXN0X29i
al9tZXRob2Rfd2l0aF9leGNlcHRpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IDExYTIwZGY5MmFhOTZiZTgx
N2NlYzU0Zjk4MzQ0NDU2ZjYzZGJkOGMuLjdmY2Y4M2EzOTkxN2U1N2M2ZjJiMWE4ZmNlM2MzYWMy
NjZhODYyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSlNUZXN0T2JqLmgiCiAKKyNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCkBAIC0zMCw3ICszMSw2IEBACiAjaW5jbHVkZSAiSlNET01TdHJpbmdM
aXN0LmgiCiAjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5l
ci5oIgotI2luY2x1ZGUgIkpTT3B0aW9uc09iamVjdC5oIgogI2luY2x1ZGUgIkpTU1ZHRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJKU1NWR1BvaW50LmgiCiAjaW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2su
aCIKQEAgLTE0MTgsNyArMTQxOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JZGJLZXkoRXhlY1N0YXRlKiBleGVjKQogICAgIFRlc3RP
YmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKICAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRzIikp
OwotICAgIFJlZlB0cjxJREJLZXk+IGtleShjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywgTUFZ
QkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAg
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXkoY3JlYXRlSURCS2V5RnJvbVZhbHVlKGV4ZWMsIE1BWUJF
X01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC0+aWRiS2V5KGtleSk7CkBAIC0xNDM1LDcgKzE0MzUs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3B0aW9uc09iamVjdChFeGVjU3RhdGUqCiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19j
YXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7Ci0gICAgT3B0aW9uc09iamVj
dCogb28odG9PcHRpb25zT2JqZWN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERl
ZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBEaWN0aW9uYXJ5IG9vKGNyZWF0ZURpY3Rpb25hcnlG
cm9tVmFsdWUoZXhlYywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElz
VW5kZWZpbmVkKSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIApAQCAtMTQ0NSw3ICsxNDQ1LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9wdGlvbnNPYmplY3QoRXhlY1N0YXRlKgogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAotICAgIE9wdGlvbnNPYmplY3QqIG9vbyh0b09wdGlv
bnNPYmplY3QoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMSwgRGVmYXVsdElzVW5kZWZp
bmVkKSkpOworICAgIERpY3Rpb25hcnkgb29vKGNyZWF0ZURpY3Rpb25hcnlGcm9tVmFsdWUoZXhl
YywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSkp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLT5vcHRpb25zT2JqZWN0KG9vLCBvb28p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE9iai5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE9iai5oCmluZGV4IGFlYmMzOWZiM2Q4Y2U4ZTBiZGNlOTcxZDVhNTM1OGUxZDZkMmYw
NzEuLjhmZDM0MWU1YzNkZjI3ZjQwM2JiNjVmYmFlYWMyMWE3MzU2ZDk5NzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2Jq
LmgKQEAgLTI4LDkgKzI4LDkgQEAKIAogI2lmIFdFQktJVF9WRVJTSU9OX01BWF9BTExPV0VEID49
IFdFQktJVF9WRVJTSU9OX0xBVEVTVAogCitAY2xhc3MgRE9NRGljdGlvbmFyeTsKIEBjbGFzcyBE
T01Eb2N1bWVudDsKIEBjbGFzcyBET01JREJLZXk7Ci1AY2xhc3MgRE9NT3B0aW9uc09iamVjdDsK
IEBjbGFzcyBET01TVkdEb2N1bWVudDsKIEBjbGFzcyBET01TVkdQb2ludDsKIEBjbGFzcyBET01U
ZXN0T2JqOwpAQCAtMTc0LDcgKzE3NCw3IEBAIGVudW0gewogLSAoRE9NVGVzdE9iaiAqKW1ldGhv
ZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3M6KE5TU3RyaW5nICopc3RyQXJnIG9iakFyZzoo
RE9NVGVzdE9iaiAqKW9iakFyZzsKIC0gKHZvaWQpc2VyaWFsaXplZFZhbHVlOihOU1N0cmluZyAq
KXNlcmlhbGl6ZWRBcmc7CiAtICh2b2lkKWlkYktleTooRE9NSURCS2V5ICopa2V5OwotLSAodm9p
ZClvcHRpb25zT2JqZWN0OihET01PcHRpb25zT2JqZWN0ICopb28gb29vOihET01PcHRpb25zT2Jq
ZWN0ICopb29vOworLSAodm9pZClvcHRpb25zT2JqZWN0OihET01EaWN0aW9uYXJ5ICopb28gb29v
OihET01EaWN0aW9uYXJ5ICopb29vOwogLSAodm9pZCltZXRob2RXaXRoRXhjZXB0aW9uOwogLSAo
dm9pZCljdXN0b21NZXRob2Q7CiAtICh2b2lkKWN1c3RvbU1ldGhvZFdpdGhBcmdzOihpbnQpaW50
QXJnIHN0ckFyZzooTlNTdHJpbmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0T2JqICopb2JqQXJn
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE9iai5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RPYmoubW0KaW5kZXggYWJkM2I5Y2M1OTRiY2YwNGY3MWRkMWEwOWIwZjc5N2M4ZTFk
NzkxYS4uYTE2YTcyZWVkOTkxMzJjZmFiMGUzYjAwOWJmMzMwYmFhNzU5MDY0MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
T2JqLm1tCkBAIC0zMiwxMSArMzIsMTEgQEAKICNpbXBvcnQgIkRPTUJsb2JJbnRlcm5hbC5oIgog
I2ltcG9ydCAiRE9NQ1NTUnVsZUludGVybmFsLmgiCiAjaW1wb3J0ICJET01DU1NWYWx1ZUludGVy
bmFsLmgiCisjaW1wb3J0ICJET01EaWN0aW9uYXJ5SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTURv
Y3VtZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTUV2ZW50SW50ZXJuYWwuaCIKICNpbXBvcnQg
IkRPTUlEQktleUludGVybmFsLmgiCiAjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKLSNpbXBv
cnQgIkRPTU9wdGlvbnNPYmplY3RJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NU1ZHRG9jdW1lbnRJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NU1ZHUG9pbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9N
U3R5bGVTaGVldEludGVybmFsLmgiCkBAIC01MCw2ICs1MCw3IEBACiAjaW1wb3J0ICJET01jSW50
ZXJuYWwuaCIKICNpbXBvcnQgIkRPTWRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NZUludGVybmFs
LmgiCisjaW1wb3J0ICJEaWN0aW9uYXJ5LmgiCiAjaW1wb3J0ICJEb2N1bWVudC5oIgogI2ltcG9y
dCAiRXZlbnRMaXN0ZW5lci5oIgogI2ltcG9ydCAiRXhjZXB0aW9uSGFuZGxlcnMuaCIKQEAgLTU4
LDcgKzU5LDYgQEAKICNpbXBvcnQgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2ltcG9ydCAi
S1VSTC5oIgogI2ltcG9ydCAiT2JqQ0V2ZW50TGlzdGVuZXIuaCIKLSNpbXBvcnQgIk9wdGlvbnNP
YmplY3QuaCIKICNpbXBvcnQgIlNWR0RvY3VtZW50LmgiCiAjaW1wb3J0ICJTVkdTdGF0aWNQcm9w
ZXJ0eVRlYXJPZmYuaCIKICNpbXBvcnQgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgpAQCAtNzUy
LDcgKzc1Miw3IEBACiAgICAgSU1QTC0+aWRiS2V5KGNvcmUoa2V5KSk7CiB9CiAKLS0gKHZvaWQp
b3B0aW9uc09iamVjdDooRE9NT3B0aW9uc09iamVjdCAqKW9vIG9vbzooRE9NT3B0aW9uc09iamVj
dCAqKW9vbworLSAodm9pZClvcHRpb25zT2JqZWN0OihET01EaWN0aW9uYXJ5ICopb28gb29vOihE
T01EaWN0aW9uYXJ5ICopb29vCiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwogICAgIElNUEwtPm9wdGlvbnNPYmplY3QoY29yZShvbyksIGNvcmUob29vKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5k
ZXggZmQ1ZGJmOTMwN2IxYzg4MTJmZmJlMDU3NDRhNmQxOWYxYTc5MDQ1Yi4uOWRjN2VkMGU1MWVj
N2E2MmMyY2Y1MTc2ZWVkMDUwNmEzMTU3ZmQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbApAQCAtNzUsNyArNzUsNyBAQCBtb2R1bGUg
dGVzdCB7CiAKICAgICAgICAgdm9pZCBzZXJpYWxpemVkVmFsdWUoaW4gU2VyaWFsaXplZFNjcmlw
dFZhbHVlIHNlcmlhbGl6ZWRBcmcpOwogICAgICAgICB2b2lkIGlkYktleShpbiBJREJLZXkga2V5
KTsKLSAgICAgICAgdm9pZCBvcHRpb25zT2JqZWN0KGluIE9wdGlvbnNPYmplY3Qgb28sIGluIFtP
cHRpb25hbF0gT3B0aW9uc09iamVjdCBvb28pOworICAgICAgICB2b2lkIG9wdGlvbnNPYmplY3Qo
aW4gRGljdGlvbmFyeSBvbywgaW4gW09wdGlvbmFsXSBEaWN0aW9uYXJ5IG9vbyk7CiAKICAgICAg
ICAgLy8gRXhjZXB0aW9ucwogICAgICAgICB2b2lkIG1ldGhvZFdpdGhFeGNlcHRpb24oKSByYWlz
ZXMoRE9NRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRl
eCA3YzA2ZTM0ZTZhNmFmMjY4NzMxMTIwMjRhMWFjYzdlYzNiZTgyOTg0Li5hMzkwNmQxMTQ4YTAz
NjUwMWM0NjI4ZWQ1OWQzNTliMDQ4ZThjZWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3Ry
dWN0b3IuY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgogCi0jaW5jbHVkZSAiT3B0aW9uc09iamVjdC5o
IgorI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nTWFjcm9z
LmgiCkBAIC03OCw3ICs3OCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3RFdmVudENv
bnN0cnVjdG9yOjpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1CiAgICAgU1RSSU5H
X1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCB0eXBlLCBhcmdz
WzBdKTsKICAgICBUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQgZXZlbnRJbml0OwogICAgIGlmIChh
cmdzLkxlbmd0aCgpID49IDIpIHsKLSAgICAgICAgRVhDRVBUSU9OX0JMT0NLKE9wdGlvbnNPYmpl
Y3QsIG9wdGlvbnMsIGFyZ3NbMV0pOworICAgICAgICBFWENFUFRJT05fQkxPQ0soRGljdGlvbmFy
eSwgb3B0aW9ucywgYXJnc1sxXSk7CiAgICAgICAgIGlmICghZmlsbFRlc3RFdmVudENvbnN0cnVj
dG9ySW5pdChldmVudEluaXQsIG9wdGlvbnMpKQogICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKICAgICB9CkBAIC04OSw3ICs4OSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OFRlc3RFdmVudENvbnN0cnVjdG9yOjpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
CiAgICAgcmV0dXJuIHRvVjgoZXZlbnQucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpKTsKIH0KIAot
Ym9vbCBmaWxsVGVzdEV2ZW50Q29uc3RydWN0b3JJbml0KFRlc3RFdmVudENvbnN0cnVjdG9ySW5p
dCYgZXZlbnRJbml0LCBjb25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zKQorYm9vbCBmaWxsVGVz
dEV2ZW50Q29uc3RydWN0b3JJbml0KFRlc3RFdmVudENvbnN0cnVjdG9ySW5pdCYgZXZlbnRJbml0
LCBjb25zdCBEaWN0aW9uYXJ5JiBvcHRpb25zKQogewogICAgIG9wdGlvbnMuZ2V0KCJhdHRyMiIs
IGV2ZW50SW5pdC5hdHRyMik7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29u
c3RydWN0b3IuaAppbmRleCA3NTc2MjQ1OTZjZTM4NTZkMjc5MzJmMTc5NDMzMGNjNzA2Mjk4MWU5
Li5hMjJkNTQxZTUxNzJiMGRlNTU1NWRkMjEyN2IzNzY0YjBkZmZlNGE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1
Y3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RFdmVudENvbnN0cnVjdG9yLmgKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBPcHRpb25zT2JqZWN0OworY2xhc3MgRGljdGlvbmFyeTsKIGNsYXNzIFY4
VGVzdEV2ZW50Q29uc3RydWN0b3IgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c0RlcGVuZGVudExpZmV0aW1lID0gZmFsc2U7CkBAIC02OSw3ICs2OSw3IEBAIGlubGluZSB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0RXZlbnRDb25zdHJ1Y3RvciA+
IGltcGwpCiAgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSk7CiB9CiAKLWJvb2wgZmlsbFRlc3RF
dmVudENvbnN0cnVjdG9ySW5pdChUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQmLCBjb25zdCBPcHRp
b25zT2JqZWN0Jik7Citib29sIGZpbGxUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQoVGVzdEV2ZW50
Q29uc3RydWN0b3JJbml0JiwgY29uc3QgRGljdGlvbmFyeSYpOwogCiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5k
ZXggMDViNzQ3ZjkxODRlMTI0NmVjYTYyNmVmNzFjNTg1M2E5NDhkNDFmMS4uMTg3ZWVlYzMyZTBl
OWQ3ODk4MjE1MDk3NDAwMTJjM2I0YTQ5MDM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTIxLDExICsyMSwx
MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4VGVzdE9iai5oIgogCisjaW5j
bHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiT3B0aW9uc09iamVjdC5oIgogI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdQcm9wZXJ0eVRlYXJPZmYuaCIKICNp
bmNsdWRlICJTVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaCIKQEAgLTEwODYsNyArMTA4Niw3IEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3B0aW9uc09iamVjdENhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpUeXBl
RXJyb3IpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xk
ZXIoKSk7Ci0gICAgRVhDRVBUSU9OX0JMT0NLKE9wdGlvbnNPYmplY3QsIG9vLCBNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBFWENFUFRJ
T05fQkxPQ0soRGljdGlvbmFyeSwgb28sIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAs
IERlZmF1bHRJc1VuZGVmaW5lZCkpOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMCAmJiAhb28u
aXNVbmRlZmluZWRPck51bGwoKSAmJiAhb28uaXNPYmplY3QoKSkgewogICAgICAgICBlYyA9IFRZ
UEVfTUlTTUFUQ0hfRVJSOwogICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwpA
QCAtMTA5Niw3ICsxMDk2LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvcHRpb25z
T2JqZWN0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICAgICAgaW1wLT5v
cHRpb25zT2JqZWN0KG9vKTsKICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigp
OwogICAgIH0KLSAgICBFWENFUFRJT05fQkxPQ0soT3B0aW9uc09iamVjdCwgb29vLCBNQVlCRV9N
SVNTSU5HX1BBUkFNRVRFUihhcmdzLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBFWENF
UFRJT05fQkxPQ0soRGljdGlvbmFyeSwgb29vLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdz
LCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYg
IW9vby5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFvb28uaXNPYmplY3QoKSkgewogICAgICAgICBl
YyA9IFRZUEVfTUlTTUFUQ0hfRVJSOwogICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24o
ZWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EaWN0aW9uYXJ5LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jMjlmOTZhZDIwMTQxMWZmMzkzZGJiZDk1ZDhhN2YyNGVhZDg3NGUxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5jcHAKQEAgLTAsMCAr
MSwzNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGljdGlvbmFy
eS5oIgorCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5o
IgorI2luY2x1ZGUgIlY4RE9NV2luZG93LmgiCisjaW5jbHVkZSAiVjhTdG9yYWdlLmgiCisjaW5j
bHVkZSAiVjhVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNs
dWRlICJWOElEQktleVJhbmdlLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KyNpbmNsdWRlICJUcmFja0Jhc2UuaCIKKyNpbmNsdWRlICJWOFRleHRUcmFjay5oIgorI2VuZGlm
CisKKyNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQorI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0
aW9uRXJyb3IuaCIKKyNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oIgorI2luY2x1
ZGUgIlNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdC5oIgorI2luY2x1ZGUgIlY4U3BlZWNoUmVj
b2duaXRpb25FcnJvci5oIgorI2luY2x1ZGUgIlY4U3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCIK
KyNpbmNsdWRlICJWOFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdC5oIgorI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworRGljdGlvbmFyeTo6RGljdGlvbmFyeSgpCit7Cit9CisKK0Rp
Y3Rpb25hcnk6OkRpY3Rpb25hcnkoY29uc3Qgdjg6OkxvY2FsPHY4OjpWYWx1ZT4mIG9wdGlvbnMp
CisgICAgOiBtX29wdGlvbnMob3B0aW9ucykKK3sKK30KKworRGljdGlvbmFyeTo6fkRpY3Rpb25h
cnkoKQoreworfQorCitEaWN0aW9uYXJ5JiBEaWN0aW9uYXJ5OjpvcGVyYXRvcj0oY29uc3QgRGlj
dGlvbmFyeSYgb3B0aW9uc09iamVjdCkKK3sKKyAgICBtX29wdGlvbnMgPSBvcHRpb25zT2JqZWN0
Lm1fb3B0aW9uczsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK2Jvb2wgRGljdGlvbmFyeTo6aXNP
YmplY3QoKSBjb25zdAoreworICAgIHJldHVybiAhaXNVbmRlZmluZWRPck51bGwoKSAmJiBtX29w
dGlvbnMtPklzT2JqZWN0KCk7Cit9CisKK2Jvb2wgRGljdGlvbmFyeTo6aXNVbmRlZmluZWRPck51
bGwoKSBjb25zdAoreworICAgIGlmIChtX29wdGlvbnMuSXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gV2ViQ29yZTo6aXNVbmRlZmluZWRPck51bGwobV9vcHRpb25z
KTsKK30KKworYm9vbCBEaWN0aW9uYXJ5OjpnZXRLZXkoY29uc3QgU3RyaW5nJiBrZXksIHY4OjpM
b2NhbDx2ODo6VmFsdWU+JiB2YWx1ZSkgY29uc3QKK3sKKyAgICBpZiAoaXNVbmRlZmluZWRPck51
bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBv
cHRpb25zID0gbV9vcHRpb25zLT5Ub09iamVjdCgpOworICAgIEFTU0VSVCghb3B0aW9ucy5Jc0Vt
cHR5KCkpOworCisgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OEtleSA9IHY4U3RyaW5nKGtl
eSk7CisgICAgaWYgKCFvcHRpb25zLT5IYXModjhLZXkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgdmFsdWUgPSBvcHRpb25zLT5HZXQodjhLZXkpOworICAgIGlmICh2YWx1ZS5Jc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBE
aWN0aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIGJvb2wmIHZhbHVlKSBjb25zdAorewor
ICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2
OFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdjg6OkxvY2FsPHY4OjpCb29s
ZWFuPiB2OEJvb2wgPSB2OFZhbHVlLT5Ub0Jvb2xlYW4oKTsKKyAgICBpZiAodjhCb29sLklzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHZhbHVlID0gdjhCb29sLT5WYWx1ZSgp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERpY3Rpb25hcnk6OmdldChjb25zdCBTdHJp
bmcmIGtleSwgaW50MzJfdCYgdmFsdWUpIGNvbnN0Cit7CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdjhWYWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICB2ODo6TG9jYWw8djg6OkludDMyPiB2OEludDMyID0gdjhWYWx1ZS0+
VG9JbnQzMigpOworICAgIGlmICh2OEludDMyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHZhbHVlID0gdjhJbnQzMi0+VmFsdWUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBEaWN0aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSYgdmFsdWUp
IGNvbnN0Cit7CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAoIWdl
dEtleShrZXksIHY4VmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2ODo6TG9j
YWw8djg6Ok51bWJlcj4gdjhOdW1iZXIgPSB2OFZhbHVlLT5Ub051bWJlcigpOworICAgIGlmICh2
OE51bWJlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2YWx1ZSA9IHY4
TnVtYmVyLT5WYWx1ZSgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERpY3Rpb25hcnk6
OmdldChjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBJdCBpcyBwb3NzaWJsZSBm
b3IgdGhpcyB0byB0aHJvdyBpbiB3aGljaCBjYXNlIHdlJ2QgYmUgZ2V0dGluZyBiYWNrCisgICAg
Ly8gICAgICAgIGFuIGVtcHR5IHN0cmluZyBhbmQgcmV0dXJuaW5nIHRydWUgd2hlbiB3ZSBzaG91
bGQgYmUgcmV0dXJuaW5nIGZhbHNlLgorICAgIC8vICAgICAgICBTZWUgZmFzdC9kb20vR2VvbG9j
YXRpb24vc2NyaXB0LXRlc3RzL2FyZ3VtZW50LXR5cGVzLmpzIGZvciBhIHNpbWlsYXIKKyAgICAv
LyAgICAgICAgZXhhbXBsZS4KKyAgICB2YWx1ZSA9IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcodjhW
YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRGljdGlvbmFyeTo6Z2V0KGNvbnN0
IFN0cmluZyYga2V5LCBTY3JpcHRWYWx1ZSYgdmFsdWUpIGNvbnN0Cit7CisgICAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9IFNjcmlwdFZhbHVlKHY4VmFsdWUpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIERpY3Rpb25hcnk6OmdldChjb25zdCBTdHJpbmcm
IGtleSwgdW5zaWduZWQgc2hvcnQmIHZhbHVlKSBjb25zdAoreworICAgIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHY4VmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgdjg6OkxvY2FsPHY4OjpJbnQzMj4gdjhJbnQzMiA9IHY4VmFs
dWUtPlRvSW50MzIoKTsKKyAgICBpZiAodjhJbnQzMi5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pih2OEludDMy
LT5WYWx1ZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBEaWN0aW9uYXJ5OjpnZXQo
Y29uc3QgU3RyaW5nJiBrZXksIHNob3J0JiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHY4OjpMb2NhbDx2ODo6SW50MzI+IHY4SW50MzIgPSB2
OFZhbHVlLT5Ub0ludDMyKCk7CisgICAgaWYgKHY4SW50MzIuSXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxzaG9ydD4odjhJbnQzMi0+VmFs
dWUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRGljdGlvbmFyeTo6Z2V0KGNvbnN0
IFN0cmluZyYga2V5LCB1bnNpZ25lZCYgdmFsdWUpIGNvbnN0Cit7CisgICAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICB2ODo6TG9jYWw8djg6OkludDMyPiB2OEludDMyID0gdjhW
YWx1ZS0+VG9JbnQzMigpOworICAgIGlmICh2OEludDMyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHY4SW50MzItPlZh
bHVlKCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERpY3Rpb25hcnk6OmdldChjb25z
dCBTdHJpbmcmIGtleSwgdW5zaWduZWQgbG9uZyBsb25nJiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHY4OjpMb2NhbDx2ODo6TnVtYmVyPiB2
OE51bWJlciA9IHY4VmFsdWUtPlRvTnVtYmVyKCk7CisgICAgaWYgKHY4TnVtYmVyLklzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvdWJsZSBkID0gdjhOdW1iZXItPlZhbHVl
KCk7CisgICAgZG91YmxlVG9JbnRlZ2VyKGQsIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBEaWN0aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIFJlZlB0cjxET01XaW5k
b3c+JiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOwor
ICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIERPTVdpbmRvdyogc291cmNlID0gMDsKKyAgICBpZiAodjhWYWx1ZS0+SXNPYmplY3QoKSkg
eworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+OjpDYXN0KHY4VmFsdWUpOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdpbmRvdyA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOERPTVdpbmRvdzo6R2V0
VGVtcGxhdGUoKSwgd3JhcHBlcik7CisgICAgICAgIGlmICghd2luZG93LklzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHNvdXJjZSA9IFY4RE9NV2luZG93Ojp0b05hdGl2ZSh3aW5kb3cpOworICAgIH0K
KyAgICB2YWx1ZSA9IHNvdXJjZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBEaWN0aW9u
YXJ5OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIFJlZlB0cjxTdG9yYWdlPiYgdmFsdWUpIGNvbnN0
Cit7CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAoIWdldEtleShr
ZXksIHY4VmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdG9yYWdlKiBzb3Vy
Y2UgPSAwOworICAgIGlmICh2OFZhbHVlLT5Jc09iamVjdCgpKSB7CisgICAgICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodjhW
YWx1ZSk7CisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gc3RvcmFnZSA9IFY4RE9NV3Jh
cHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOFN0b3JhZ2U6OkdldFRlbXBsYXRlKCksIHdyYXBwZXIp
OworICAgICAgICBpZiAoIXN0b3JhZ2UuSXNFbXB0eSgpKQorICAgICAgICAgICAgc291cmNlID0g
VjhTdG9yYWdlOjp0b05hdGl2ZShzdG9yYWdlKTsKKyAgICB9CisgICAgdmFsdWUgPSBzb3VyY2U7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRGljdGlvbmFyeTo6Z2V0KGNvbnN0IFN0cmlu
ZyYga2V5LCBNZXNzYWdlUG9ydEFycmF5JiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBnZXRNZXNzYWdlUG9ydEFycmF5KHY4VmFs
dWUsIHZhbHVlKTsKK30KKworYm9vbCBEaWN0aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5nJiBrZXks
IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgdmFsdWUpIGNvbnN0Cit7CisgICAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBhcnJheS1saWtlIG9iamVj
dHMKKyAgICBpZiAoIXY4VmFsdWUtPklzQXJyYXkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gdjhBcnJheSA9IHY4OjpMb2NhbDx2ODo6QXJyYXk+
OjpDYXN0KHY4VmFsdWUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdjhBcnJheS0+TGVu
Z3RoKCk7ICsraSkgeworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBpbmRleGVkVmFsdWUg
PSB2OEFycmF5LT5HZXQodjg6OkludGVnZXI6Ok5ldyhpKSk7CisgICAgICAgIHZhbHVlLmFkZCh2
OFZhbHVlVG9XZWJDb3JlU3RyaW5nKGluZGV4ZWRWYWx1ZSkpOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIERpY3Rpb25hcnk6OmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVj
ayhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkgfHwg
djhWYWx1ZS0+SXNOdWxsKCkgfHwgdjhWYWx1ZS0+SXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IEl0IGlzIHBvc3NpYmxlIGZvciB0aGlzIHRvIHRo
cm93IGluIHdoaWNoIGNhc2Ugd2UnZCBiZSBnZXR0aW5nIGJhY2sKKyAgICAvLyAgICAgICAgYW4g
ZW1wdHkgc3RyaW5nIGFuZCByZXR1cm5pbmcgdHJ1ZSB3aGVuIHdlIHNob3VsZCBiZSByZXR1cm5p
bmcgZmFsc2UuCisgICAgLy8gICAgICAgIFNlZSBmYXN0L2RvbS9HZW9sb2NhdGlvbi9zY3JpcHQt
dGVzdHMvYXJndW1lbnQtdHlwZXMuanMgZm9yIGEgc2ltaWxhcgorICAgIC8vICAgICAgICBleGFt
cGxlLgorICAgIHZhbHVlID0gV2ViQ29yZTo6aXNVbmRlZmluZWRPck51bGwodjhWYWx1ZSkgPyBT
dHJpbmcoKSA6IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcodjhWYWx1ZSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCitib29sIERpY3Rpb25hcnk6OmdldChj
b25zdCBTdHJpbmcmIGtleSwgUmVmUHRyPFRyYWNrQmFzZT4mIHZhbHVlKSBjb25zdAoreworICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZh
bHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVHJhY2tCYXNlKiBzb3VyY2UgPSAw
OworICAgIGlmICh2OFZhbHVlLT5Jc09iamVjdCgpKSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcHBlciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodjhWYWx1ZSk7
CisKKyAgICAgICAgLy8gRklYTUU6IHRoaXMgd2lsbCBuZWVkIHRvIGJlIGNoYW5nZWQgc28gaXQg
Y2FuIGFsc28gcmV0dXJuIGFuIEF1ZGlvVHJhY2sgb3IgYSBWaWRlb1RyYWNrIG9uY2UKKyAgICAg
ICAgLy8gd2UgYWRkIHRoZW0uCisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gdHJhY2sg
PSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhUZXh0VHJhY2s6OkdldFRlbXBsYXRl
KCksIHdyYXBwZXIpOworICAgICAgICBpZiAoIXRyYWNrLklzRW1wdHkoKSkKKyAgICAgICAgICAg
IHNvdXJjZSA9IFY4VGV4dFRyYWNrOjp0b05hdGl2ZSh0cmFjayk7CisgICAgfQorICAgIHZhbHVl
ID0gc291cmNlOworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoU0NS
SVBURURfU1BFRUNIKQorYm9vbCBEaWN0aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIFJl
ZlB0cjxTcGVlY2hSZWNvZ25pdGlvbkVycm9yPiYgdmFsdWUpIGNvbnN0Cit7CisgICAgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTcGVlY2hSZWNvZ25pdGlvbkVycm9yKiBzb3Vy
Y2UgPSAwOworICAgIGlmICh2OFZhbHVlLT5Jc09iamVjdCgpKSB7CisgICAgICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodjhW
YWx1ZSk7CisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gc3BlZWNoUmVjb2duaXRpb25F
cnJvciA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOFNwZWVjaFJlY29nbml0aW9u
RXJyb3I6OkdldFRlbXBsYXRlKCksIHdyYXBwZXIpOworICAgICAgICBpZiAoIXNwZWVjaFJlY29n
bml0aW9uRXJyb3IuSXNFbXB0eSgpKQorICAgICAgICAgICAgc291cmNlID0gVjhTcGVlY2hSZWNv
Z25pdGlvbkVycm9yOjp0b05hdGl2ZShzcGVlY2hSZWNvZ25pdGlvbkVycm9yKTsKKyAgICB9Cisg
ICAgdmFsdWUgPSBzb3VyY2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRGljdGlvbmFy
eTo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+
JiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOworICAg
IGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IFNwZWVjaFJlY29nbml0aW9uUmVzdWx0KiBzb3VyY2UgPSAwOworICAgIGlmICh2OFZhbHVlLT5J
c09iamVjdCgpKSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IHY4
OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodjhWYWx1ZSk7CisgICAgICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gc3BlZWNoUmVjb2duaXRpb25SZXN1bHQgPSBWOERPTVdyYXBwZXI6Omxvb2t1
cERPTVdyYXBwZXIoVjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6R2V0VGVtcGxhdGUoKSwgd3Jh
cHBlcik7CisgICAgICAgIGlmICghc3BlZWNoUmVjb2duaXRpb25SZXN1bHQuSXNFbXB0eSgpKQor
ICAgICAgICAgICAgc291cmNlID0gVjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6dG9OYXRpdmUo
c3BlZWNoUmVjb2duaXRpb25SZXN1bHQpOworICAgIH0KKyAgICB2YWx1ZSA9IHNvdXJjZTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBEaWN0aW9uYXJ5OjpnZXQoY29uc3QgU3RyaW5nJiBr
ZXksIFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q+JiB2YWx1ZSkgY29uc3QKK3sK
KyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwg
djhWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNwZWVjaFJlY29nbml0aW9u
UmVzdWx0TGlzdCogc291cmNlID0gMDsKKyAgICBpZiAodjhWYWx1ZS0+SXNPYmplY3QoKSkgewor
ICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KHY4VmFsdWUpOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdCA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBl
cihWOFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdDo6R2V0VGVtcGxhdGUoKSwgd3JhcHBlcik7
CisgICAgICAgIGlmICghc3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0LklzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHNvdXJjZSA9IFY4U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0Ojp0b05hdGl2
ZShzcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3QpOworICAgIH0KKyAgICB2YWx1ZSA9IHNvdXJj
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RpY3Rpb25hcnkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNmM0
YTZiN2FjMjJlNGY4MDcwNDIxYjcwZTAzY2EzYjdjZmU4YjQyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRGljdGlvbmFyeS5oCkBAIC0wLDAgKzEsOTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIERpY3Rpb25hcnlfaAorI2RlZmluZSBEaWN0aW9uYXJ5X2gKKworI2lu
Y2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNs
dWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBET01TdHJpbmdMaXN0OworY2xhc3MgRE9NV2luZG93OworY2xhc3Mg
SURCS2V5UmFuZ2U7CitjbGFzcyBTdG9yYWdlOworY2xhc3MgVHJhY2tCYXNlOworY2xhc3MgU3Bl
ZWNoUmVjb2duaXRpb25FcnJvcjsKK2NsYXNzIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0OworY2xh
c3MgU3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0OworCitjbGFzcyBEaWN0aW9uYXJ5IHsKK3B1
YmxpYzoKKyAgICBEaWN0aW9uYXJ5KCk7CisgICAgRGljdGlvbmFyeShjb25zdCB2ODo6TG9jYWw8
djg6OlZhbHVlPiYgb3B0aW9ucyk7CisgICAgfkRpY3Rpb25hcnkoKTsKKworICAgIERpY3Rpb25h
cnkmIG9wZXJhdG9yPShjb25zdCBEaWN0aW9uYXJ5Jik7CisKKyAgICBib29sIGlzT2JqZWN0KCkg
Y29uc3Q7CisgICAgYm9vbCBpc1VuZGVmaW5lZE9yTnVsbCgpIGNvbnN0OworCisgICAgYm9vbCBn
ZXQoY29uc3QgU3RyaW5nJiwgYm9vbCYpIGNvbnN0OworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmlu
ZyYsIGludDMyX3QmKSBjb25zdDsKKyAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBkb3VibGUm
KSBjb25zdDsKKyAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBTdHJpbmcmKSBjb25zdDsKKyAg
ICBib29sIGdldChjb25zdCBTdHJpbmcmLCBTY3JpcHRWYWx1ZSYpIGNvbnN0OworICAgIGJvb2wg
Z2V0KGNvbnN0IFN0cmluZyYsIHNob3J0JikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3Ry
aW5nJiwgdW5zaWduZWQgc2hvcnQmKSBjb25zdDsKKyAgICBib29sIGdldChjb25zdCBTdHJpbmcm
LCB1bnNpZ25lZCYpIGNvbnN0OworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIHVuc2lnbmVk
IGxvbmcgbG9uZyYpIGNvbnN0OworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIFJlZlB0cjxE
T01XaW5kb3c+JikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgUmVmUHRyPFN0
b3JhZ2U+JikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgTWVzc2FnZVBvcnRB
cnJheSYpIGNvbnN0OworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBib29sIGdldChjb25z
dCBTdHJpbmcmLCBSZWZQdHI8VHJhY2tCYXNlPiYpIGNvbnN0OworI2VuZGlmCisjaWYgRU5BQkxF
KFNDUklQVEVEX1NQRUVDSCkKKyAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBSZWZQdHI8U3Bl
ZWNoUmVjb2duaXRpb25FcnJvcj4mKSBjb25zdDsKKyAgICBib29sIGdldChjb25zdCBTdHJpbmcm
LCBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+JikgY29uc3Q7CisgICAgYm9vbCBnZXQo
Y29uc3QgU3RyaW5nJiwgUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4mKSBjb25z
dDsKKyNlbmRpZgorICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIEhhc2hTZXQ8QXRvbWljU3Ry
aW5nPiYpIGNvbnN0OworCisgICAgYm9vbCBnZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29u
c3QgU3RyaW5nJiwgU3RyaW5nJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBnZXRLZXko
Y29uc3QgU3RyaW5nJiBrZXksIHY4OjpMb2NhbDx2ODo6VmFsdWU+JikgY29uc3Q7CisKKyAgICAv
LyBUaGlzIG9iamVjdCBjYW4gb25seSBiZSB1c2VkIHNhZmVseSB3aGVuIHN0YWNrIGFsbG9jYXRl
ZCBiZWNhdXNlIG9mIHY4OjpMb2NhbC4KKyAgICBzdGF0aWMgdm9pZCogb3BlcmF0b3IgbmV3KHNp
emVfdCk7CisgICAgc3RhdGljIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCk7CisgICAgc3Rh
dGljIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKik7CisKKyAgICB2ODo6TG9jYWw8djg6OlZh
bHVlPiBtX29wdGlvbnM7Cit9OworCit9CisKKyNlbmRpZiAvLyBEaWN0aW9uYXJ5X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGU4YzdkZDljYzM3YjVkNGZiNDcxMmQzYjljNWY0YThhNzY2OTU2ZGYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
NzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJPcHRpb25z
T2JqZWN0LmgiCi0KLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCi0jaW5jbHVkZSAiVjhCaW5k
aW5nLmgiCi0jaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKLSNpbmNsdWRlICJWOFN0b3JhZ2UuaCIK
LSNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgot
I2luY2x1ZGUgIlY4SURCS2V5UmFuZ2UuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQotI2luY2x1ZGUgIlRyYWNrQmFzZS5oIgotI2luY2x1ZGUgIlY4VGV4dFRyYWNrLmgiCi0j
ZW5kaWYKLQotI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCi0jaW5jbHVkZSAiU3BlZWNoUmVj
b2duaXRpb25FcnJvci5oIgotI2luY2x1ZGUgIlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgiCi0j
aW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0LmgiCi0jaW5jbHVkZSAiVjhTcGVl
Y2hSZWNvZ25pdGlvbkVycm9yLmgiCi0jaW5jbHVkZSAiVjhTcGVlY2hSZWNvZ25pdGlvblJlc3Vs
dC5oIgotI2luY2x1ZGUgIlY4U3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0LmgiCi0jZW5kaWYK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1PcHRpb25zT2JqZWN0OjpPcHRpb25zT2JqZWN0KCkK
LXsKLX0KLQotT3B0aW9uc09iamVjdDo6T3B0aW9uc09iamVjdChjb25zdCB2ODo6TG9jYWw8djg6
OlZhbHVlPiYgb3B0aW9ucykKLSAgICA6IG1fb3B0aW9ucyhvcHRpb25zKQotewotfQotCi1PcHRp
b25zT2JqZWN0Ojp+T3B0aW9uc09iamVjdCgpCi17Ci19Ci0KLU9wdGlvbnNPYmplY3QmIE9wdGlv
bnNPYmplY3Q6Om9wZXJhdG9yPShjb25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zT2JqZWN0KQot
ewotICAgIG1fb3B0aW9ucyA9IG9wdGlvbnNPYmplY3QubV9vcHRpb25zOwotICAgIHJldHVybiAq
dGhpczsKLX0KLQotYm9vbCBPcHRpb25zT2JqZWN0Ojppc09iamVjdCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuICFpc1VuZGVmaW5lZE9yTnVsbCgpICYmIG1fb3B0aW9ucy0+SXNPYmplY3QoKTsKLX0K
LQotYm9vbCBPcHRpb25zT2JqZWN0Ojppc1VuZGVmaW5lZE9yTnVsbCgpIGNvbnN0Ci17Ci0gICAg
aWYgKG1fb3B0aW9ucy5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVy
biBXZWJDb3JlOjppc1VuZGVmaW5lZE9yTnVsbChtX29wdGlvbnMpOwotfQotCi1ib29sIE9wdGlv
bnNPYmplY3Q6OmdldEtleShjb25zdCBTdHJpbmcmIGtleSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4m
IHZhbHVlKSBjb25zdAotewotICAgIGlmIChpc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9wdGlvbnMgPSBtX29wdGlv
bnMtPlRvT2JqZWN0KCk7Ci0gICAgQVNTRVJUKCFvcHRpb25zLklzRW1wdHkoKSk7Ci0KLSAgICB2
ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4S2V5ID0gdjhTdHJpbmcoa2V5KTsKLSAgICBpZiAoIW9w
dGlvbnMtPkhhcyh2OEtleSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB2YWx1ZSA9IG9w
dGlvbnMtPkdldCh2OEtleSk7Ci0gICAgaWYgKHZhbHVlLklzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE9wdGlvbnNPYmplY3Q6Omdl
dChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYgdmFsdWUpIGNvbnN0Ci17Ci0gICAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdjhWYWx1ZTsKLSAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2ODo6TG9jYWw8djg6OkJvb2xlYW4+IHY4Qm9vbCA9
IHY4VmFsdWUtPlRvQm9vbGVhbigpOwotICAgIGlmICh2OEJvb2wuSXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgdmFsdWUgPSB2OEJvb2wtPlZhbHVlKCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgT3B0aW9uc09iamVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBp
bnQzMl90JiB2YWx1ZSkgY29uc3QKLXsKLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVl
OwotICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHY4OjpMb2NhbDx2ODo6SW50MzI+IHY4SW50MzIgPSB2OFZhbHVlLT5Ub0ludDMyKCk7
Ci0gICAgaWYgKHY4SW50MzIuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
dmFsdWUgPSB2OEludDMyLT5WYWx1ZSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE9w
dGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJiB2YWx1ZSkgY29uc3QK
LXsKLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOwotICAgIGlmICghZ2V0S2V5KGtl
eSwgdjhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHY4OjpMb2NhbDx2ODo6
TnVtYmVyPiB2OE51bWJlciA9IHY4VmFsdWUtPlRvTnVtYmVyKCk7Ci0gICAgaWYgKHY4TnVtYmVy
LklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHZhbHVlID0gdjhOdW1iZXIt
PlZhbHVlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgT3B0aW9uc09iamVjdDo6Z2V0
KGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHZhbHVlKSBjb25zdAotewotICAgIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHY4VmFsdWU7Ci0gICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklYTUU6IEl0IGlzIHBvc3NpYmxlIGZvciB0
aGlzIHRvIHRocm93IGluIHdoaWNoIGNhc2Ugd2UnZCBiZSBnZXR0aW5nIGJhY2sKLSAgICAvLyAg
ICAgICAgYW4gZW1wdHkgc3RyaW5nIGFuZCByZXR1cm5pbmcgdHJ1ZSB3aGVuIHdlIHNob3VsZCBi
ZSByZXR1cm5pbmcgZmFsc2UuCi0gICAgLy8gICAgICAgIFNlZSBmYXN0L2RvbS9HZW9sb2NhdGlv
bi9zY3JpcHQtdGVzdHMvYXJndW1lbnQtdHlwZXMuanMgZm9yIGEgc2ltaWxhcgotICAgIC8vICAg
ICAgICBleGFtcGxlLgotICAgIHZhbHVlID0gdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyh2OFZhbHVl
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBPcHRpb25zT2JqZWN0OjpnZXQoY29uc3Qg
U3RyaW5nJiBrZXksIFNjcmlwdFZhbHVlJiB2YWx1ZSkgY29uc3QKLXsKLSAgICB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2OFZhbHVlOwotICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHZhbHVlID0gU2NyaXB0VmFsdWUodjhWYWx1ZSk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgT3B0aW9uc09iamVjdDo6Z2V0KGNvbnN0IFN0cmlu
ZyYga2V5LCB1bnNpZ25lZCBzaG9ydCYgdmFsdWUpIGNvbnN0Ci17Ci0gICAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdjhWYWx1ZTsKLSAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2ODo6TG9jYWw8djg6OkludDMyPiB2OEludDMyID0gdjhW
YWx1ZS0+VG9JbnQzMigpOwotICAgIGlmICh2OEludDMyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KHY4SW50
MzItPlZhbHVlKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE9wdGlvbnNPYmplY3Q6
OmdldChjb25zdCBTdHJpbmcmIGtleSwgc2hvcnQmIHZhbHVlKSBjb25zdAotewotICAgIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7Ci0gICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdjg6OkxvY2FsPHY4OjpJbnQzMj4gdjhJbnQz
MiA9IHY4VmFsdWUtPlRvSW50MzIoKTsKLSAgICBpZiAodjhJbnQzMi5Jc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PHNob3J0Pih2OEludDMy
LT5WYWx1ZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBPcHRpb25zT2JqZWN0Ojpn
ZXQoY29uc3QgU3RyaW5nJiBrZXksIHVuc2lnbmVkJiB2YWx1ZSkgY29uc3QKLXsKLSAgICB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOwotICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHY4OjpMb2NhbDx2ODo6SW50MzI+IHY4SW50
MzIgPSB2OFZhbHVlLT5Ub0ludDMyKCk7Ci0gICAgaWYgKHY4SW50MzIuSXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmFsdWUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odjhJ
bnQzMi0+VmFsdWUoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgT3B0aW9uc09iamVj
dDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCB1bnNpZ25lZCBsb25nIGxvbmcmIHZhbHVlKSBjb25z
dAotewotICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7Ci0gICAgaWYgKCFnZXRLZXko
a2V5LCB2OFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdjg6OkxvY2FsPHY4
OjpOdW1iZXI+IHY4TnVtYmVyID0gdjhWYWx1ZS0+VG9OdW1iZXIoKTsKLSAgICBpZiAodjhOdW1i
ZXIuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZG91YmxlIGQgPSB2OE51
bWJlci0+VmFsdWUoKTsKLSAgICBkb3VibGVUb0ludGVnZXIoZCwgdmFsdWUpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwg
UmVmUHRyPERPTVdpbmRvdz4mIHZhbHVlKSBjb25zdAotewotICAgIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHY4VmFsdWU7Ci0gICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgRE9NV2luZG93KiBzb3VyY2UgPSAwOwotICAgIGlmICh2OFZhbHVl
LT5Jc09iamVjdCgpKSB7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodjhWYWx1ZSk7Ci0gICAgICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd2luZG93ID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4
RE9NV2luZG93OjpHZXRUZW1wbGF0ZSgpLCB3cmFwcGVyKTsKLSAgICAgICAgaWYgKCF3aW5kb3cu
SXNFbXB0eSgpKQotICAgICAgICAgICAgc291cmNlID0gVjhET01XaW5kb3c6OnRvTmF0aXZlKHdp
bmRvdyk7Ci0gICAgfQotICAgIHZhbHVlID0gc291cmNlOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgUmVmUHRyPFN0b3Jh
Z2U+JiB2YWx1ZSkgY29uc3QKLXsKLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOwot
ICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFN0b3JhZ2UqIHNvdXJjZSA9IDA7Ci0gICAgaWYgKHY4VmFsdWUtPklzT2JqZWN0KCkpIHsK
LSAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gdjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdCh2OFZhbHVlKTsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBz
dG9yYWdlID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4U3RvcmFnZTo6R2V0VGVt
cGxhdGUoKSwgd3JhcHBlcik7Ci0gICAgICAgIGlmICghc3RvcmFnZS5Jc0VtcHR5KCkpCi0gICAg
ICAgICAgICBzb3VyY2UgPSBWOFN0b3JhZ2U6OnRvTmF0aXZlKHN0b3JhZ2UpOwotICAgIH0KLSAg
ICB2YWx1ZSA9IHNvdXJjZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBPcHRpb25zT2Jq
ZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIE1lc3NhZ2VQb3J0QXJyYXkmIHZhbHVlKSBjb25z
dAotewotICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7Ci0gICAgaWYgKCFnZXRLZXko
a2V5LCB2OFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGdldE1l
c3NhZ2VQb3J0QXJyYXkodjhWYWx1ZSwgdmFsdWUpOwotfQotCi1ib29sIE9wdGlvbnNPYmplY3Q6
OmdldChjb25zdCBTdHJpbmcmIGtleSwgSGFzaFNldDxBdG9taWNTdHJpbmc+JiB2YWx1ZSkgY29u
c3QKLXsKLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOwotICAgIGlmICghZ2V0S2V5
KGtleSwgdjhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBT
dXBwb3J0IGFycmF5LWxpa2Ugb2JqZWN0cwotICAgIGlmICghdjhWYWx1ZS0+SXNBcnJheSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2ODo6TG9jYWw8djg6OkFycmF5PiB2OEFycmF5
ID0gdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QodjhWYWx1ZSk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2OEFycmF5LT5MZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IGluZGV4ZWRWYWx1ZSA9IHY4QXJyYXktPkdldCh2ODo6SW50ZWdlcjo6TmV3KGkp
KTsKLSAgICAgICAgdmFsdWUuYWRkKHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcoaW5kZXhlZFZhbHVl
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgT3B0aW9uc09iamVjdDo6
Z2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHZh
bHVlKSBjb25zdAotewotICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7Ci0gICAgaWYg
KCFnZXRLZXkoa2V5LCB2OFZhbHVlKSB8fCB2OFZhbHVlLT5Jc051bGwoKSB8fCB2OFZhbHVlLT5J
c1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRTogSXQg
aXMgcG9zc2libGUgZm9yIHRoaXMgdG8gdGhyb3cgaW4gd2hpY2ggY2FzZSB3ZSdkIGJlIGdldHRp
bmcgYmFjawotICAgIC8vICAgICAgICBhbiBlbXB0eSBzdHJpbmcgYW5kIHJldHVybmluZyB0cnVl
IHdoZW4gd2Ugc2hvdWxkIGJlIHJldHVybmluZyBmYWxzZS4KLSAgICAvLyAgICAgICAgU2VlIGZh
c3QvZG9tL0dlb2xvY2F0aW9uL3NjcmlwdC10ZXN0cy9hcmd1bWVudC10eXBlcy5qcyBmb3IgYSBz
aW1pbGFyCi0gICAgLy8gICAgICAgIGV4YW1wbGUuCi0gICAgdmFsdWUgPSBXZWJDb3JlOjppc1Vu
ZGVmaW5lZE9yTnVsbCh2OFZhbHVlKSA/IFN0cmluZygpIDogdjhWYWx1ZVRvV2ViQ29yZVN0cmlu
Zyh2OFZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotI2lmIEVOQUJMRShWSURFT19UUkFD
SykKLWJvb2wgT3B0aW9uc09iamVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBSZWZQdHI8VHJh
Y2tCYXNlPiYgdmFsdWUpIGNvbnN0Ci17Ci0gICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1
ZTsKLSAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBUcmFja0Jhc2UqIHNvdXJjZSA9IDA7Ci0gICAgaWYgKHY4VmFsdWUtPklzT2JqZWN0
KCkpIHsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2OFZhbHVlKTsKLQotICAgICAgICAvLyBGSVhNRTogdGhpcyB3
aWxsIG5lZWQgdG8gYmUgY2hhbmdlZCBzbyBpdCBjYW4gYWxzbyByZXR1cm4gYW4gQXVkaW9UcmFj
ayBvciBhIFZpZGVvVHJhY2sgb25jZQotICAgICAgICAvLyB3ZSBhZGQgdGhlbS4KLSAgICAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB0cmFjayA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3Jh
cHBlcihWOFRleHRUcmFjazo6R2V0VGVtcGxhdGUoKSwgd3JhcHBlcik7Ci0gICAgICAgIGlmICgh
dHJhY2suSXNFbXB0eSgpKQotICAgICAgICAgICAgc291cmNlID0gVjhUZXh0VHJhY2s6OnRvTmF0
aXZlKHRyYWNrKTsKLSAgICB9Ci0gICAgdmFsdWUgPSBzb3VyY2U7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCi1ib29sIE9wdGlvbnNP
YmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgUmVmUHRyPFNwZWVjaFJlY29nbml0aW9uRXJy
b3I+JiB2YWx1ZSkgY29uc3QKLXsKLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOwot
ICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFNwZWVjaFJlY29nbml0aW9uRXJyb3IqIHNvdXJjZSA9IDA7Ci0gICAgaWYgKHY4VmFsdWUt
PklzT2JqZWN0KCkpIHsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0g
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2OFZhbHVlKTsKLSAgICAgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBzcGVlY2hSZWNvZ25pdGlvbkVycm9yID0gVjhET01XcmFwcGVyOjpsb29r
dXBET01XcmFwcGVyKFY4U3BlZWNoUmVjb2duaXRpb25FcnJvcjo6R2V0VGVtcGxhdGUoKSwgd3Jh
cHBlcik7Ci0gICAgICAgIGlmICghc3BlZWNoUmVjb2duaXRpb25FcnJvci5Jc0VtcHR5KCkpCi0g
ICAgICAgICAgICBzb3VyY2UgPSBWOFNwZWVjaFJlY29nbml0aW9uRXJyb3I6OnRvTmF0aXZlKHNw
ZWVjaFJlY29nbml0aW9uRXJyb3IpOwotICAgIH0KLSAgICB2YWx1ZSA9IHNvdXJjZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBPcHRpb25zT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBr
ZXksIFJlZlB0cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4mIHZhbHVlKSBjb25zdAotewotICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7Ci0gICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZh
bHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3BlZWNoUmVjb2duaXRpb25SZXN1
bHQqIHNvdXJjZSA9IDA7Ci0gICAgaWYgKHY4VmFsdWUtPklzT2JqZWN0KCkpIHsKLSAgICAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdCh2OFZhbHVlKTsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBzcGVlY2hSZWNv
Z25pdGlvblJlc3VsdCA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOFNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0OjpHZXRUZW1wbGF0ZSgpLCB3cmFwcGVyKTsKLSAgICAgICAgaWYgKCFz
cGVlY2hSZWNvZ25pdGlvblJlc3VsdC5Jc0VtcHR5KCkpCi0gICAgICAgICAgICBzb3VyY2UgPSBW
OFNwZWVjaFJlY29nbml0aW9uUmVzdWx0Ojp0b05hdGl2ZShzcGVlY2hSZWNvZ25pdGlvblJlc3Vs
dCk7Ci0gICAgfQotICAgIHZhbHVlID0gc291cmNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgUmVmUHRyPFNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0TGlzdD4mIHZhbHVlKSBjb25zdAotewotICAgIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHY4VmFsdWU7Ci0gICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgU3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0KiBzb3VyY2Ug
PSAwOwotICAgIGlmICh2OFZhbHVlLT5Jc09iamVjdCgpKSB7Ci0gICAgICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gd3JhcHBlciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodjhWYWx1
ZSk7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gc3BlZWNoUmVjb2duaXRpb25SZXN1
bHRMaXN0ID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4U3BlZWNoUmVjb2duaXRp
b25SZXN1bHRMaXN0OjpHZXRUZW1wbGF0ZSgpLCB3cmFwcGVyKTsKLSAgICAgICAgaWYgKCFzcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdExpc3QuSXNFbXB0eSgpKQotICAgICAgICAgICAgc291cmNlID0g
VjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q6OnRvTmF0aXZlKHNwZWVjaFJlY29nbml0aW9u
UmVzdWx0TGlzdCk7Ci0gICAgfQotICAgIHZhbHVlID0gc291cmNlOwotICAgIHJldHVybiB0cnVl
OwotfQotCi0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzMjYwMzc4MTZhYzkxYWMyMjkwODg0ZjZlN2ZhOWZkZTkwODQwN2VjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L09wdGlvbnNPYmplY3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIE9wdGlvbnNPYmplY3RfaAotI2RlZmluZSBPcHRpb25zT2JqZWN0X2gKLQotI2lu
Y2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNs
dWRlICJTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgPHY4Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBET01TdHJpbmdMaXN0OwotY2xhc3MgRE9NV2luZG93OwotY2xhc3Mg
SURCS2V5UmFuZ2U7Ci1jbGFzcyBTdG9yYWdlOwotY2xhc3MgVHJhY2tCYXNlOwotY2xhc3MgU3Bl
ZWNoUmVjb2duaXRpb25FcnJvcjsKLWNsYXNzIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0OwotY2xh
c3MgU3BlZWNoUmVjb2duaXRpb25SZXN1bHRMaXN0OwotCi1jbGFzcyBPcHRpb25zT2JqZWN0IHsK
LXB1YmxpYzoKLSAgICBPcHRpb25zT2JqZWN0KCk7Ci0gICAgT3B0aW9uc09iamVjdChjb25zdCB2
ODo6TG9jYWw8djg6OlZhbHVlPiYgb3B0aW9ucyk7Ci0gICAgfk9wdGlvbnNPYmplY3QoKTsKLQot
ICAgIE9wdGlvbnNPYmplY3QmIG9wZXJhdG9yPShjb25zdCBPcHRpb25zT2JqZWN0Jik7Ci0KLSAg
ICBib29sIGlzT2JqZWN0KCkgY29uc3Q7Ci0gICAgYm9vbCBpc1VuZGVmaW5lZE9yTnVsbCgpIGNv
bnN0OwotCi0gICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgYm9vbCYpIGNvbnN0OwotICAgIGJv
b2wgZ2V0KGNvbnN0IFN0cmluZyYsIGludDMyX3QmKSBjb25zdDsKLSAgICBib29sIGdldChjb25z
dCBTdHJpbmcmLCBkb3VibGUmKSBjb25zdDsKLSAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBT
dHJpbmcmKSBjb25zdDsKLSAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBTY3JpcHRWYWx1ZSYp
IGNvbnN0OwotICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIHNob3J0JikgY29uc3Q7Ci0gICAg
Ym9vbCBnZXQoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgc2hvcnQmKSBjb25zdDsKLSAgICBib29s
IGdldChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCYpIGNvbnN0OwotICAgIGJvb2wgZ2V0KGNvbnN0
IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OwotICAgIGJvb2wgZ2V0KGNvbnN0
IFN0cmluZyYsIFJlZlB0cjxET01XaW5kb3c+JikgY29uc3Q7Ci0gICAgYm9vbCBnZXQoY29uc3Qg
U3RyaW5nJiwgUmVmUHRyPFN0b3JhZ2U+JikgY29uc3Q7Ci0gICAgYm9vbCBnZXQoY29uc3QgU3Ry
aW5nJiwgTWVzc2FnZVBvcnRBcnJheSYpIGNvbnN0OwotI2lmIEVOQUJMRShWSURFT19UUkFDSykK
LSAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBSZWZQdHI8VHJhY2tCYXNlPiYpIGNvbnN0Owot
I2VuZGlmCi0jaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKLSAgICBib29sIGdldChjb25zdCBT
dHJpbmcmLCBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25FcnJvcj4mKSBjb25zdDsKLSAgICBib29s
IGdldChjb25zdCBTdHJpbmcmLCBSZWZQdHI8U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ+JikgY29u
c3Q7Ci0gICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgUmVmUHRyPFNwZWVjaFJlY29nbml0aW9u
UmVzdWx0TGlzdD4mKSBjb25zdDsKLSNlbmRpZgotICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYs
IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYpIGNvbnN0OwotCi0gICAgYm9vbCBnZXRXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2soY29uc3QgU3RyaW5nJiwgU3RyaW5nJikgY29uc3Q7Ci0KLXByaXZhdGU6
Ci0gICAgYm9vbCBnZXRLZXkoY29uc3QgU3RyaW5nJiBrZXksIHY4OjpMb2NhbDx2ODo6VmFsdWU+
JikgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIG9iamVjdCBjYW4gb25seSBiZSB1c2VkIHNhZmVseSB3
aGVuIHN0YWNrIGFsbG9jYXRlZCBiZWNhdXNlIG9mIHY4OjpMb2NhbC4KLSAgICBzdGF0aWMgdm9p
ZCogb3BlcmF0b3IgbmV3KHNpemVfdCk7Ci0gICAgc3RhdGljIHZvaWQqIG9wZXJhdG9yIG5ld1td
KHNpemVfdCk7Ci0gICAgc3RhdGljIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKik7Ci0KLSAg
ICB2ODo6TG9jYWw8djg6OlZhbHVlPiBtX29wdGlvbnM7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBP
cHRpb25zT2JqZWN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYktpdE11dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKaW5k
ZXggZDMyYjQ0ZmZjMTFjNDllZDdjYTkxMjU1MjI4NDYxYWI3OWE4ZTFjNi4uZjcxODliNzkzMzM1
NmQwZjJjNzBhNGMwMDU2ZmQ3M2FhYzFkZmZlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0TXV0YXRpb25PYnNl
cnZlckN1c3RvbS5jcHAKQEAgLTM0LDggKzM0LDggQEAKIAogI2luY2x1ZGUgIlY4V2ViS2l0TXV0
YXRpb25PYnNlcnZlci5oIgogCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJPcHRpb25zT2JqZWN0LmgiCiAjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nTWFjcm9zLmgiCiAjaW5jbHVkZSAiVjhET01X
cmFwcGVyLmgiCkBAIC05MSw3ICs5MSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYktp
dE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lCiAgICAg
aWYgKCFhcmdzWzFdLT5Jc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBF
X01JU01BVENIX0VSUik7CiAKLSAgICBPcHRpb25zT2JqZWN0IG9wdGlvbnNPYmplY3QoYXJnc1sx
XSk7CisgICAgRGljdGlvbmFyeSBvcHRpb25zT2JqZWN0KGFyZ3NbMV0pOwogICAgIHVuc2lnbmVk
IG9wdGlvbnMgPSAwOwogICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBhdHRyaWJ1dGVGaWx0ZXI7
CiAgICAgYm9vbCBvcHRpb247Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>