<?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>68177</bug_id>
          
          <creation_ts>2011-09-15 12:01:31 -0700</creation_ts>
          <short_desc>The DFG non-speculative JIT is no longer used and should be removed.</short_desc>
          <delta_ts>2011-09-15 16:23:56 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>68186</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>467972</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-15 12:01:31 -0700</bug_when>
    <thetext>Tiered compilation is enabled in ToT and produces a pure win.  Tiered compilation does not use the non-speculative JIT.  The non-speculative JIT is not used by anyone.  It should be removed.

This also implies removing the spec-&gt;non-spec failure code (since we now use OSR instead), the SpeculationCheck code (since we now use OSRExit instead), and any configuration options in DFGNode or elsewhere that pertain to non-speculative.

As part of its removal, any useful functionality that it did have that we intend on using in the speculative JIT should be transformed into a helper function on JITCodeGenerator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468125</commentid>
    <comment_count>1</comment_count>
      <attachid>107557</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-15 15:36:47 -0700</bug_when>
    <thetext>Created attachment 107557
the patch

Will let this sit here for the bots to chew on.  I don&apos;t know if I killed the references to non-spec in a way that non-Mac platforms will like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468126</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-15 15:41:48 -0700</bug_when>
    <thetext>Performance tests indicate that this refactoring didn&apos;t break anything big.  Still running layout tests.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/septenary/OpenSource/WebKitBuild/Release/jsc
&quot;TheNonSpecThe&quot; at /Volumes/Data/pizlo/quartary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Used 1 benchmark iteration per VM
invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting
benchmark execution times with 95% confidence intervals in milliseconds.

                                            TipOfTree             TheNonSpecThe                                  
SunSpider:
   3d-cube                                7.6177+-0.1156    ?     7.7606+-0.1962       ? might be 1.0188x slower
   3d-morph                               7.5393+-0.2320    ?     7.6219+-0.1830       ? might be 1.0110x slower
   3d-raytrace                            7.7714+-0.2578          7.5804+-0.2339         might be 1.0252x faster
   access-binary-trees                    2.3403+-0.1317    ?     2.3491+-0.0605       ?
   access-fannkuch                       11.5210+-0.2266         11.4543+-0.2352       
   access-nbody                           4.2669+-0.0950          4.1249+-0.0852         might be 1.0344x faster
   access-nsieve                          2.6167+-0.0547          2.5910+-0.0570       
   bitops-3bit-bits-in-byte               1.7149+-0.0711          1.6641+-0.0414         might be 1.0305x faster
   bitops-bits-in-byte                    2.7302+-0.0770    ?     2.7872+-0.0475       ? might be 1.0209x slower
   bitops-bitwise-and                     3.6835+-0.1097          3.5397+-0.0759         might be 1.0406x faster
   bitops-nsieve-bits                     5.2826+-0.1478          5.2773+-0.0838       
   controlflow-recursive                  1.9993+-0.0516          1.9780+-0.0702         might be 1.0108x faster
   crypto-aes                             7.0485+-0.4404          6.9846+-0.2883       
   crypto-md5                             2.8006+-0.0772    ?     3.3002+-0.6366       ? might be 1.1784x slower
   crypto-sha1                            2.1984+-0.0615    ?     2.2656+-0.0758       ? might be 1.0305x slower
   date-format-tofte                     10.6388+-0.4510         10.2994+-0.2232         might be 1.0330x faster
   date-format-xparb                      9.0774+-0.6078          8.8395+-0.2180         might be 1.0269x faster
   math-cordic                            6.2369+-0.1227          6.2271+-0.0884       
   math-partial-sums                      7.4144+-0.1098          7.3608+-0.1278       
   math-spectral-norm                     2.6606+-0.1141          2.6382+-0.0876       
   regexp-dna                            11.1858+-0.4029         11.0782+-0.3356       
   string-base64                          5.8766+-0.3127          5.7979+-0.2424         might be 1.0136x faster
   string-fasta                           7.1525+-0.1607          7.0287+-0.2103         might be 1.0176x faster
   string-tagcloud                       12.1184+-0.3133    ?    12.1203+-0.4079       ?
   string-unpack-code                    18.6965+-0.5085    ?    19.0846+-0.5797       ? might be 1.0208x slower
   string-validate-input                  6.7369+-0.2145          6.7058+-0.2513       

   &lt;arithmetic&gt;                           6.4972+-0.0399          6.4792+-0.0494       
   &lt;geometric&gt;                            5.3523+-0.0373          5.3443+-0.0431       
   &lt;harmonic&gt;                             4.3619+-0.0507          4.3610+-0.0394       

                                            TipOfTree             TheNonSpecThe                                  
V8:
   crypto                                83.4792+-0.6764         83.1459+-0.4669       
   deltablue                            245.5458+-1.6084        244.7773+-2.4858       
   earley-boyer                          95.4794+-1.0822    ?    95.8919+-0.8258       ?
   raytrace                              73.3252+-0.5046         73.1796+-0.7989       
   regexp                               107.4445+-0.6514    ?   107.7198+-0.5681       ?
   richards                             221.3328+-1.8472        220.4779+-1.2757       
   splay                                100.5540+-1.1823         99.2863+-1.3507         might be 1.0128x faster

   &lt;arithmetic&gt;                         132.4516+-0.4749        132.0684+-0.7092       
   &lt;geometric&gt;                          119.2531+-0.4279        118.9338+-0.5794       
   &lt;harmonic&gt;                           109.4740+-0.4200        109.1951+-0.5315       

                                            TipOfTree             TheNonSpecThe                                  
Kraken:
   ai-astar                             633.2072+-3.1198    ?   634.0155+-5.6007       ?
   audio-beat-detection                 483.5001+-6.8955        480.5581+-7.4540       
   audio-dft                            431.6491+-6.5128        429.2882+-5.2847       
   audio-fft                            372.8691+-1.7360        369.3022+-1.9860       
   audio-oscillator                     317.6334+-1.8057    ?   317.8665+-1.2358       ?
   imaging-darkroom                     428.3435+-9.1983        419.3040+-1.7876         might be 1.0216x faster
   imaging-desaturate                   207.9498+-0.5476    ?   209.7226+-1.7717       ?
   imaging-gaussian-blur               1730.3700+-2.7285    ?  1734.7773+-5.0711       ?
   json-parse-financial                  49.0744+-0.4401    ?    49.1756+-0.2212       ?
   json-stringify-tinderbox              69.9297+-0.5986    ?    70.2837+-1.3321       ?
   stanford-crypto-aes                  145.6043+-0.9866        145.1874+-0.8767       
   stanford-crypto-ccm                  113.0345+-0.9881        112.1558+-0.6815       
   stanford-crypto-pbkdf2               397.3920+-2.2566    ?   398.4926+-2.9769       ?
   stanford-crypto-sha256-iterative     150.0585+-1.5669        149.3581+-0.5932       

   &lt;arithmetic&gt;                         395.0440+-0.9378        394.2491+-1.1606       
   &lt;geometric&gt;                          264.2923+-0.5908        263.6392+-0.6825       
   &lt;harmonic&gt;                           176.9877+-0.5693        176.8618+-0.5881       

                                            TipOfTree             TheNonSpecThe                                  
All benchmarks:
   &lt;arithmetic&gt;                         140.9937+-0.2860        140.6899+-0.3304       
   &lt;geometric&gt;                           27.1488+-0.1023         27.0951+-0.1256       
   &lt;harmonic&gt;                             7.7001+-0.0873          7.6982+-0.0679</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468128</commentid>
    <comment_count>3</comment_count>
      <attachid>107557</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-15 15:53:19 -0700</bug_when>
    <thetext>Comment on attachment 107557
the patch

Tests pass.  It appears that it&apos;s good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468146</commentid>
    <comment_count>4</comment_count>
      <attachid>107557</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-09-15 16:19:03 -0700</bug_when>
    <thetext>Comment on attachment 107557
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468150</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-15 16:23:56 -0700</bug_when>
    <thetext>Landed in r95240.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107557</attachid>
            <date>2011-09-15 15:36:47 -0700</date>
            <delta_ts>2011-09-15 16:19:03 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>nonspecdie_patch_1.diff</filename>
            <type>text/plain</type>
            <size>101624</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUyMzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjEgQEAK
KzIwMTEtMDktMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBU
aGUgREZHIG5vbi1zcGVjdWxhdGl2ZSBKSVQgaXMgbm8gbG9uZ2VyIHVzZWQgYW5kIHNob3VsZCBi
ZSByZW1vdmVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjgxNzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIFRoaXMgcmVtb3ZlcyB0aGUgbm9uLXNwZWN1bGF0aXZlIEpJVCBhbmQgZXZlcnl0
aGluZyB0aGF0IHJlbGllZCBvbiBpdCwKKyAgICAgICAgaW5jbHVkaW5nIHRoZSBhYmlsaXR5IHRv
IHR1cm4gb24gREZHIGJ1dCBub3QgdGllcmVkIGNvbXBpbGF0aW9uIHRoZSwKKyAgICAgICAgYWJp
bGl0eSB0byBwZXJmb3JtIHNwZWN1bGF0aW9uIGZhaWx1cmUgaW50byBub24tc3BlY3VsYXRpdmUg
SklUIGNvZGUsCisgICAgICAgIGFuZCB0aGUgYWJpbGl0eSB0byBzdGF0aWNhbGx5IHRlcm1pbmF0
ZSBzcGVjdWxhdGlvbi4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUucHJvOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAg
ICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb29wSGludCk6CisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNv
ZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRTdHJvbmdQ
cmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29t
cGlsZSk6CisgICAgICAgICogZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAgICogZGZn
L0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEFyZ3VtZW50
VHlwZXMpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAg
KiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
OjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxl
Qm9keSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgICogZGZnL0RG
R05vZGUuaDoKKyAgICAgICAgKiBkZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVu
dHJ5KToKKyAgICAgICAgKiBkZmcvREZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgICogZGZnL0RG
R1Byb3BhZ2F0b3IuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
b3NyRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlv
blJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRp
b25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRDb2Rl
Lmg6CisgICAgICAgIChKU0M6OkpJVENvZGU6OmJvdHRvbVRpZXJKSVQpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0ds
b2JhbERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgICogd3RmL1BsYXRmb3Jt
Lmg6CisKIDIwMTEtMDktMTUgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJlbW92ZSBFTkFCTEUoU1ZHX0FTX0lNQUdFKSBzaW5jZSBhbGwgbWFqb3IgcG9ydHMgaGF2
ZSBpdCBvbiBieSBkZWZhdWx0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQkocmV2aXNpb24gOTUyMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIGphdmFz
Y3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIFwKLQlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcCBcCi0JU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdh
dG9yLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJv
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8J
KHJldmlzaW9uIDk1MjMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnBybwkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNiBAQCBTT1VSQ0VTICs9IFwKICAgICBk
ZmcvREZHR3JhcGguY3BwIFwKICAgICBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAgXAogICAg
IGRmZy9ERkdKSVRDb21waWxlci5jcHAgXAotICAgIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5j
cHAgXAogICAgIGRmZy9ERkdPcGVyYXRpb25zLmNwcCBcCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcCBcCiAgICAgaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcCBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTUyMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMzUxLDggKzM1MSw2IEBACiAJCTg2RUM5RENBMTMyOERGODIwMDJCMkFENyAvKiBE
RkdKSVRDb2RlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NkVDOURCQTEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29kZUdlbmVyYXRv
ci5oICovOyB9OwogCQk4NkVDOURDQjEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlE
QkIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmNwcCAqLzsgfTsKIAkJODZFQzlE
Q0MxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDOURCQzEzMjhERjgyMDAyQjJBRDcgLyog
REZHSklUQ29tcGlsZXIuaCAqLzsgfTsKLQkJODZFQzlEQ0QxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R05vblNwZWN1bGF0aXZlSklULmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg2RUM5REJEMTMyOERGODIwMDJCMkFENyAvKiBERkdOb25TcGVjdWxhdGl2
ZUpJVC5jcHAgKi87IH07Ci0JCTg2RUM5RENFMTMyOERGODIwMDJCMkFENyAvKiBERkdOb25TcGVj
dWxhdGl2ZUpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODZFQzlEQkUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR05vblNwZWN1bGF0aXZlSklULmggKi87
IH07CiAJCTg2RUM5RENGMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REJGMTMyOERG
ODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCAqLzsgfTsKIAkJODZFQzlERDAxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REMwMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRp
b25zLmggKi87IH07CiAJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJh
bmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5
REMxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCAqLzsgfTsKQEAgLTExMDUs
OCArMTEwMyw2IEBACiAJCTg2RUM5REJBMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb2RlR2Vu
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0pJVENvZGVHZW5l
cmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg2RUM5REJCMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdKSVRDb21waWxl
ci5jcHA7IHBhdGggPSBkZmcvREZHSklUQ29tcGlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NkVDOURCQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSklUQ29tcGlsZXIuaDsgcGF0aCA9
IGRmZy9ERkdKSVRDb21waWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkVD
OURCRDEzMjhERjgyMDAyQjJBRDcgLyogREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwOyBw
YXRoID0gZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJODZFQzlEQkUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR05vblNwZWN1bGF0aXZlSklU
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05vblNwZWN1bGF0aXZlSklU
Lmg7IHBhdGggPSBkZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODZFQzlEQkYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT3BlcmF0aW9ucy5jcHA7
IHBhdGggPSBkZmcvREZHT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg2RUM5REMwMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09wZXJhdGlvbnMuaDsgcGF0aCA9IGRmZy9ERkdP
cGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RUM5REMxMTMyOERG
ODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHUmVnaXN0ZXJCYW5rLmg7IHBhdGggPSBkZmcvREZHUmVnaXN0ZXJCYW5rLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjUyLDggKzIyNDgsNiBAQAogCQkJCTg2
RUM5REJCMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5jcHAgKi8sCiAJCQkJODZF
QzlEQkMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmggKi8sCiAJCQkJODZFQ0Ez
RTkxMzJERUYxQzAwMkIyQUQ3IC8qIERGR05vZGUuaCAqLywKLQkJCQk4NkVDOURCRDEzMjhERjgy
MDAyQjJBRDcgLyogREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwICovLAotCQkJCTg2RUM5REJFMTMy
OERGODIwMDJCMkFENyAvKiBERkdOb25TcGVjdWxhdGl2ZUpJVC5oICovLAogCQkJCTg2RUM5REJG
MTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCAqLywKIAkJCQk4NkVDOURDMDEz
MjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5oICovLAogCQkJCTg2RUM5REMxMTMyOERG
ODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCAqLywKQEAgLTI1MDUsNyArMjQ5OSw2IEBA
CiAJCQkJODZFQzlEQ0ExMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvZGVHZW5lcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RUM5RENDMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21w
aWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQ0EzRUExMzJERUYxQzAwMkIyQUQ3IC8qIERG
R05vZGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2RUM5RENFMTMyOERGODIwMDJCMkFENyAvKiBE
RkdOb25TcGVjdWxhdGl2ZUpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxMzYxMzRGRjBB
NjAwQUZBREI1IC8qIEhhbmRsZUhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTM4MTM0
RkYwQTYwMEFGQURCNSAvKiBIYW5kbGVTdGFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlE
RDAxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLApAQCAt
MzE1Niw3ICszMTQ5LDYgQEAKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3Jh
cGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzkxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R0pJVENvZGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQ0IxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTg2RUM5
RENEMTMyOERGODIwMDJCMkFENyAvKiBERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NkVDOURDRjEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NkVDOUREMjEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3Vs
YXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERDcxMDdFQzc5RTAwNjUwNDQ2
IC8qIGR0b2EuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NTIzMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDcgKzMw
Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHVubGlua0luY29taW5nQ2FsbHMo
KTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyNpZiBFTkFCTEUo
REZHX0pJVCkKICAgICAgICAgdm9pZCBzZXRKSVRDb2RlTWFwKFBhc3NPd25QdHI8Q29tcGFjdEpJ
VENvZGVNYXA+IGppdENvZGVNYXApCiAgICAgICAgIHsKICAgICAgICAgICAgIG1faml0Q29kZU1h
cCA9IGppdENvZGVNYXA7CkBAIC03NjUsNyArNzY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsKICAgICAg
ICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8
Q2FsbExpbmtJbmZvPiA+IG1faW5jb21pbmdDYWxsczsKICNlbmRpZgotI2lmIEVOQUJMRShUSUVS
RURfQ09NUElMQVRJT04pCisjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIE93blB0cjxDb21w
YWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOwogI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BS
T0ZJTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDk1MjMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2MCw3ICs2NjAsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
T3Bjb2RlKE9wY29kCiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb29wSGludCgpCiB7
Ci0jaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICBlbWl0T3Bjb2RlKG9wX2xvb3BfaGludCk7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NTIz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSwxNiArMzUsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKLSNpZiBFTkFCTEUoREZHX0pJVF9SRVNUUklDVElPTlMpCi0vLyBGSVhNRTog
VGVtcG9yYXJpbHkgZGlzYWJsZSBhcml0aG1ldGljLCB1bnRpbCB3ZSBmaXggYXNzb2NpYXRlZCBw
ZXJmb3JtYW5jZSByZWdyZXNzaW9ucy4KLS8vIEZJWE1FOiB0ZW1wb3JhcmlseSBkaXNhYmxlIHBy
b3BlcnR5IGFjY2Vzc2VzIHVudGlsIHdlIGZpeCByZWdyZXNzaW9ucy4KLSNkZWZpbmUgQVJJVEhN
RVRJQ19PUCgpIG1fcGFyc2VGYWlsZWQgPSB0cnVlCi0jZGVmaW5lIFBST1BFUlRZX0FDQ0VTU19P
UCgpIG1fcGFyc2VGYWlsZWQgPSB0cnVlCi0jZWxzZQotI2RlZmluZSBBUklUSE1FVElDX09QKCkg
KCh2b2lkKTApCi0jZGVmaW5lIFBST1BFUlRZX0FDQ0VTU19PUCgpICgodm9pZCkwKQotI2VuZGlm
Ci0KIC8vID09PSBCeXRlQ29kZVBhcnNlciA9PT0KIC8vCiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQg
dG8gY29tcGlsZSB0aGUgZGF0YWZsb3cgZ3JhcGggZnJvbSBhIENvZGVCbG9jay4KQEAgLTY3LDkg
KzU3LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fcGFyYW1ldGVyU2xvdHMoMCkKICAgICAgICAg
LCBtX251bVBhc3NlZFZhckFyZ3MoMCkKICAgICB7Ci0jaWYgRU5BQkxFKERZTkFNSUNfT1BUSU1J
WkFUSU9OKQogICAgICAgICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsKLSNlbmRpZgogICAgIH0K
IAogICAgIC8vIFBhcnNlIGEgZnVsbCBDb2RlQmxvY2sgb2YgYnl0ZWNvZGUuCkBAIC00NzksNyAr
NDY3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgVU5VU0VEX1BBUkFNKG5vZGVJbmRleCk7CiAgICAg
ICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKICAgICAgICAgCi0jaWYgRU5BQkxFKERZ
TkFNSUNfT1BUSU1JWkFUSU9OKQogICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBtX3By
b2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgp
OwogICAgICAgICBBU1NFUlQocHJvZmlsZSk7CiAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGlj
dGlvbiA9IHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOwpAQCAtNDg3LDkgKzQ3
NCw2IEBAIHByaXZhdGU6CiAgICAgICAgIHByaW50ZigiRHluYW1pYyBbJXUsICV1XSBwcmVkaWN0
aW9uOiAlc1xuIiwgbm9kZUluZGV4LCBieXRlY29kZUluZGV4LCBwcmVkaWN0aW9uVG9TdHJpbmco
cHJlZGljdGlvbikpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBwcmVkaWN0aW9uOwotI2Vsc2UK
LSAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwotI2VuZGlmCiAgICAgfQogICAgIAogICAgIHZv
aWQgc3Ryb25nbHlQcmVkaWN0KE5vZGVJbmRleCBub2RlSW5kZXgsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCkBAIC03NTMsNyArNzM3LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAvLyA9PT0gQXJpdGhtZXRpYyBvcGVyYXRpb25zID09PQogCiAg
ICAgICAgIGNhc2Ugb3BfYWRkOiB7Ci0gICAgICAgICAgICBBUklUSE1FVElDX09QKCk7CiAgICAg
ICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIC8vIElmIGJvdGggb3BlcmFuZHMgY2FuIHN0YXRp
Y2FsbHkgYmUgZGV0ZXJtaW5lZCB0byB0aGUgbnVtYmVycywgdGhlbiB0aGlzIGlzIGFuIGFyaXRo
bWV0aWMgYWRkLgpAQCAtNzcwLDcgKzc1Myw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfc3ViOiB7Ci0gICAg
ICAgICAgICBBUklUSE1FVElDX09QKCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0
VG9OdW1iZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBO
b2RlSW5kZXggb3AyID0gZ2V0VG9OdW1iZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZCk7CiAgICAgICAgICAgICBpZiAoaXNTbWFsbEludDMyQ29uc3RhbnQob3AxKSB8fCBpc1NtYWxs
SW50MzJDb25zdGFudChvcDIpKSB7CkBAIC03ODIsNyArNzY0LDYgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9t
dWw6IHsKLSAgICAgICAgICAgIEFSSVRITUVUSUNfT1AoKTsKICAgICAgICAgICAgIE5vZGVJbmRl
eCBvcDEgPSBnZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAg
ICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCBhZGRUb0dyYXBoKEFyaXRoTXVsLCBvcDEsIG9wMikpOwpAQCAtNzkwLDcgKzc3MSw2
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2Ugb3BfbW9kOiB7Ci0gICAgICAgICAgICBBUklUSE1FVElDX09QKCk7CiAg
ICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0VG9OdW1iZXIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VG9OdW1iZXIo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChBcml0aE1vZCwgb3AxLCBvcDIp
KTsKQEAgLTc5OCw3ICs3NzgsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2RpdjogewotICAgICAgICAgICAg
QVJJVEhNRVRJQ19PUCgpOwogICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvTnVtYmVy
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZUluZGV4
IG9wMiA9IGdldFRvTnVtYmVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgo
QXJpdGhEaXYsIG9wMSwgb3AyKSk7CkBAIC04MzEsMTQgKzgxMCwxMiBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X25vdDogewotICAgICAgICAgICAgQVJJVEhNRVRJQ19PUCgpOwogICAgICAgICAgICAgTm9kZUlu
ZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoTG9n
aWNhbE5vdCwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25vdCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIG9wX2xlc3M6IHsKLSAgICAgICAgICAgIEFSSVRITUVUSUNf
T1AoKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ29tcGFyZUxlc3MsIG9wMSwgb3AyKSk7CkBA
IC04NDYsNyArODIzLDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9sZXNzZXE6IHsKLSAgICAgICAgICAgIEFS
SVRITUVUSUNfT1AoKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NFcSwgb3Ax
LCBvcDIpKTsKQEAgLTg1NCw3ICs4MzAsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2dyZWF0ZXI6IHsKLSAg
ICAgICAgICAgIEFSSVRITUVUSUNfT1AoKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBn
ZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5k
ZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAg
ICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ29tcGFy
ZUdyZWF0ZXIsIG9wMSwgb3AyKSk7CkBAIC04NjIsNyArODM3LDYgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9n
cmVhdGVyZXE6IHsKLSAgICAgICAgICAgIEFSSVRITUVUSUNfT1AoKTsKICAgICAgICAgICAgIE5v
ZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAg
ICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFk
ZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIpKTsKQEAgLTg3MCw3ICs4NDQsNiBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIG9wX2VxOiB7Ci0gICAgICAgICAgICBBUklUSE1FVElDX09QKCk7CiAgICAg
ICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCBhZGRUb0dyYXBoKENvbXBhcmVFcSwgb3AxLCBvcDIpKTsKQEAgLTg3OCwxNCArODUx
LDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2Ugb3BfZXFfbnVsbDogewotICAgICAgICAgICAgQVJJVEhNRVRJQ19P
UCgpOwogICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VxX251bGwpOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9zdHJpY3RlcTogewotICAgICAgICAgICAgQVJJVEhNRVRJQ19PUCgpOwogICAg
ICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9wMSwgb3AyKSk7CkBAIC04OTMs
NyArODY0LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9uZXE6IHsKLSAgICAgICAgICAgIEFSSVRITUVUSUNf
T1AoKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgYWRkVG9HcmFwaChDb21w
YXJlRXEsIG9wMSwgb3AyKSkpOwpAQCAtOTAxLDE0ICs4NzEsMTIgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9u
ZXFfbnVsbDogewotICAgICAgICAgICAgQVJJVEhNRVRJQ19PUCgpOwogICAgICAgICAgICAgTm9k
ZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgo
TG9naWNhbE5vdCwgYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBjb25zdGFudE51bGwoKSkp
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25lcV9udWxsKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2Ugb3BfbnN0cmljdGVxOiB7Ci0gICAgICAgICAgICBBUklUSE1FVElDX09QKCk7
CiAgICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIGFkZFRvR3JhcGgoQ29tcGFyZVN0
cmljdEVxLCBvcDEsIG9wMikpKTsKQEAgLTk2Myw3ICs5MzEsNiBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2dl
dF9ieV9pZDogewotICAgICAgICAgICAgUFJPUEVSVFlfQUNDRVNTX09QKCk7CiAgICAgICAgICAg
ICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOwogICAgICAgICAgICAgCkBAIC05NzYsNyArOTQzLDYgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBv
cF9wdXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIFBST1BFUlRZX0FDQ0VTU19PUCgpOwogICAgICAg
ICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKQEAgLTExOTYsNyArMTE2Miw2IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX2NhbGxfcHV0X3Jlc3VsdCk7CiAKICAgICAgICAgY2FzZSBvcF9yZXNvbHZlOiB7Ci0gICAg
ICAgICAgICBQUk9QRVJUWV9BQ0NFU1NfT1AoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50
aWZpZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCiAgICAgICAgICAgICBO
b2RlSW5kZXggcmVzb2x2ZSA9IGFkZFRvR3JhcGgoUmVzb2x2ZSwgT3BJbmZvKGlkZW50aWZpZXIp
KTsKQEAgLTEyMDcsNyArMTE3Miw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlOiB7Ci0g
ICAgICAgICAgICBQUk9QRVJUWV9BQ0NFU1NfT1AoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCiAgICAgICAgICAg
ICBOb2RlSW5kZXggcmVzb2x2ZSA9IGFkZFRvR3JhcGgoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCA/IFJlc29sdmVCYXNlU3RyaWN0UHV0IDogUmVzb2x2ZUJhc2UsIE9wSW5mbyhpZGVu
dGlmaWVyKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShy
ZXZpc2lvbiA5NTIzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENv
bXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgCiAgICAgcHJvcGFnYXRlKGRmZywgZ2xvYmFsRGF0YSwg
Y29kZUJsb2NrKTsKICAgICAKLSNpZiBFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCiAgICAg
Ly8gU2F2ZSB0aGUgcHJlZGljdGlvbnMgd2UndmUgbWFkZSwgc28gdGhhdCBPU1IgZW50cnkgY2Fu
IHZlcmlmeSB0aGVtLiBQcmVkaWN0aW9ucwogICAgIC8vIGFyZSBzYXZlZCBpbiB0aGUgQ29kZUJs
b2NrIGZyb20gd2hpY2ggd2Ugd2lsbCBiZSBkb2luZyBPU1IgZW50cnksIHNpbmNlIHRoZQogICAg
IC8vIENvZGVCbG9jayB0byB3aGljaCB3ZSBhcmUgT1NSaW5nIG1heSBiZSByZXBsYWNlZCBhdCBh
bnkgdGltZS4KQEAgLTU2LDcgKzU1LDYgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9k
ZSBjb21waWxlTQogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFT
U0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpC
YXNlbGluZUpJVCk7CiAgICAgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5zZXRQcmVkaWN0aW9u
cyhwcmVkaWN0aW9ucy5yZWxlYXNlKCkpOwotI2VuZGlmCiAgICAgCiAgICAgSklUQ29tcGlsZXIg
ZGF0YUZsb3dKSVQoZ2xvYmFsRGF0YSwgZGZnLCBjb2RlQmxvY2spOwogICAgIGlmIChjb21waWxl
TW9kZSA9PSBDb21waWxlRnVuY3Rpb24pIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR2VuZXJhdGlvbkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHJldmlzaW9uIDk1MjMzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzgsMTAgKzMzOCw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBUaGUgaW5kZXggb2Yg
dGhlIG5vZGUgd2hvc2UgcmVzdWx0IGlzIHN0b3JlZCBpbiB0aGlzIHZpcnR1YWwgcmVnaXN0ZXIu
Ci0gICAgLy8gRklYTUU6IENhbiB3ZSByZW1vdmUgdGhpcz8gLSB0aGlzIGlzIGN1cnJlbnRseSBv
bmx5IHVzZWQgd2hlbiBjb2xsZWN0aW5nCi0gICAgLy8gc25hcHNob3RzIG9mIHRoZSBSZWdpc3Rl
ckJhbmsgZm9yIFNwZWN1bGF0aW9uQ2hlY2svRW50cnlMb2NhdGlvbi4gQ291bGQKLSAgICAvLyBp
bnZlc3RpZ2F0ZSBzdG9yaW5nIE5vZGVJbmRleCBhcyB0aGUgbmFtZSBpbiBSZWdzaXRlckJhbmss
IGluc3RlYWQgb2YKLSAgICAvLyBWaXJ0dWFsUmVnaXN0ZXIuCiAgICAgTm9kZUluZGV4IG1fbm9k
ZUluZGV4OwogICAgIHVpbnQzMl90IG1fdXNlQ291bnQ7CiAgICAgRGF0YUZvcm1hdCBtX3JlZ2lz
dGVyRm9ybWF0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJl
dmlzaW9uIDk1MjMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwNyw3ICsyMDcsNiBAQCB2b2lkIEdyYXBoOjpwcmVkaWN0QXJn
dW1lbnRUeXBlcyhFeGVjU3RhCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0jaWYgRU5BQkxFKERZ
TkFNSUNfT1BUSU1JWkFUSU9OKQogICAgIEFTU0VSVChjb2RlQmxvY2spOwogICAgIEFTU0VSVChj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogCkBAIC0yMjQsOSArMjIzLDYgQEAgdm9pZCBHcmFw
aDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0YQogICAgICAgICBwcmludGYoIkFyZ3VtZW50
IFslbHVdIHByZWRpY3Rpb246ICVzXG4iLCBhcmcsIHByZWRpY3Rpb25Ub1N0cmluZyhtX3ByZWRp
Y3Rpb25zLmdldEFyZ3VtZW50UHJlZGljdGlvbihhcmcpKSk7CiAjZW5kaWYKICAgICB9Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwotI2VuZGlmCiB9CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29k
ZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTUyMzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgIkRGR05vblNw
ZWN1bGF0aXZlSklULmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKICNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5NTIzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBA
CiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdKSVRDb2RlR2VuZXJhdG9y
LmgiCi0jaW5jbHVkZSAiREZHTm9uU3BlY3VsYXRpdmVKSVQuaCIKICNpbmNsdWRlICJERkdPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiREZHUmVnaXN0ZXJCYW5rLmgiCiAjaW5jbHVkZSAiREZHU3Bl
Y3VsYXRpdmVKSVQuaCIKQEAgLTEwMCw3ICs5OSw2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmZpbGxU
b0pTKE5vZGVJbmRleCBub2QKICAgICBsb2FkUHRyKGFkZHJlc3NGb3Iobm9kZS52aXJ0dWFsUmVn
aXN0ZXIoKSksIGdwcik7CiB9CiAKLSNpZiBFTkFCTEUoREZHX09TUl9FWElUKQogdm9pZCBKSVRD
b21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVj
dWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNl
dD4mIGRlY29kZWRDb2RlTWFwKQogewogICAgIC8vIDEpIFByby1mb3JtYSBzdHVmZi4KQEAgLTQ2
OSw3MTYgKzQ2Nyw2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cyhTcGVjdWxhdGkK
ICAgICAgICAgKytleGl0c0l0ZXI7CiAgICAgfQogfQotI2Vsc2UgLy8gRU5BQkxFKERGR19PU1Jf
RVhJVCkKLWNsYXNzIEdlbmVyYWxpemVkUmVnaXN0ZXIgewotcHVibGljOgotICAgIEdlbmVyYWxp
emVkUmVnaXN0ZXIoKSB7IH0KLSAgICAKLSAgICBzdGF0aWMgR2VuZXJhbGl6ZWRSZWdpc3RlciBj
cmVhdGVHUFIoR1BSUmVnIGdwcikKLSAgICB7Ci0gICAgICAgIEdlbmVyYWxpemVkUmVnaXN0ZXIg
cmVzdWx0OwotICAgICAgICByZXN1bHQubV9pc0ZQUiA9IGZhbHNlOwotICAgICAgICByZXN1bHQu
bV9yZWdpc3Rlci5ncHIgPSBncHI7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAg
IAotICAgIHN0YXRpYyBHZW5lcmFsaXplZFJlZ2lzdGVyIGNyZWF0ZUZQUihGUFJSZWcgZnByKQot
ICAgIHsKLSAgICAgICAgR2VuZXJhbGl6ZWRSZWdpc3RlciByZXN1bHQ7Ci0gICAgICAgIHJlc3Vs
dC5tX2lzRlBSID0gdHJ1ZTsKLSAgICAgICAgcmVzdWx0Lm1fcmVnaXN0ZXIuZnByID0gZnByOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBib29sIGlzRlBSKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2lzRlBSOwotICAgIH0KLSAgICAKLSAgICBHUFJS
ZWcgZ3ByKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9pc0ZQUik7Ci0gICAgICAg
IHJldHVybiBtX3JlZ2lzdGVyLmdwcjsKLSAgICB9Ci0gICAgCi0gICAgRlBSUmVnIGZwcigpIGNv
bnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9pc0ZQUik7Ci0gICAgICAgIHJldHVybiBtX3Jl
Z2lzdGVyLmZwcjsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgU3BlY3VsYXRpb25DaGVjazo6UmVn
aXN0ZXJJbmZvJiBmaW5kSW5TcGVjdWxhdGlvbkNoZWNrKGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2sm
IGNoZWNrKQotICAgIHsKLSAgICAgICAgaWYgKGlzRlBSKCkpCi0gICAgICAgICAgICByZXR1cm4g
Y2hlY2subV9mcHJJbmZvW0ZQUkluZm86OnRvSW5kZXgoZnByKCkpXTsKLSAgICAgICAgcmV0dXJu
IGNoZWNrLm1fZ3BySW5mb1tHUFJJbmZvOjp0b0luZGV4KGdwcigpKV07Ci0gICAgfQotICAgIAot
ICAgIGNvbnN0IEVudHJ5TG9jYXRpb246OlJlZ2lzdGVySW5mbyYgZmluZEluRW50cnlMb2NhdGlv
bihjb25zdCBFbnRyeUxvY2F0aW9uJiBlbnRyeSkKLSAgICB7Ci0gICAgICAgIGlmIChpc0ZQUigp
KQotICAgICAgICAgICAgcmV0dXJuIGVudHJ5Lm1fZnBySW5mb1tGUFJJbmZvOjp0b0luZGV4KGZw
cigpKV07Ci0gICAgICAgIHJldHVybiBlbnRyeS5tX2dwckluZm9bR1BSSW5mbzo6dG9JbmRleChn
cHIoKSldOwotICAgIH0KLSAgICAKLSAgICBEYXRhRm9ybWF0IHByZXZpb3VzRGF0YUZvcm1hdChj
b25zdCBTcGVjdWxhdGlvbkNoZWNrJiBjaGVjaykKLSAgICB7Ci0gICAgICAgIHJldHVybiBmaW5k
SW5TcGVjdWxhdGlvbkNoZWNrKGNoZWNrKS5mb3JtYXQ7Ci0gICAgfQotICAgIAotICAgIERhdGFG
b3JtYXQgbmV4dERhdGFGb3JtYXQoY29uc3QgRW50cnlMb2NhdGlvbiYgZW50cnkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmluZEluRW50cnlMb2NhdGlvbihlbnRyeSkuZm9ybWF0OwotICAgIH0K
LSAgICAKLSAgICB2b2lkIGNvbnZlcnQoRGF0YUZvcm1hdCBvbGREYXRhRm9ybWF0LCBEYXRhRm9y
bWF0IG5ld0RhdGFGb3JtYXQsIEpJVENvbXBpbGVyJiBqaXQpCi0gICAgewotICAgICAgICBpZiAo
TElLRUxZKCFuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24ob2xkRGF0YUZvcm1hdCwgbmV3RGF0YUZv
cm1hdCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKG9sZERh
dGFGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKLSAgICAgICAgICAgIGppdC5vclB0cihH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcigpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQVNTRVJUKG5ld0RhdGFGb3JtYXQgPT0g
RGF0YUZvcm1hdEludGVnZXIpOwotICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByKCks
IGdwcigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICB2b2lkIG1vdmVUbyhH
ZW5lcmFsaXplZFJlZ2lzdGVyJiBvdGhlciwgRGF0YUZvcm1hdCBteURhdGFGb3JtYXQsIERhdGFG
b3JtYXQgb3RoZXJEYXRhRm9ybWF0LCBKSVRDb21waWxlciYgaml0LCBGUFJSZWcgc2NyYXRjaEZQ
UikKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWShpc0ZQUigpKSkgewotICAgICAgICAgICAg
aWYgKFVOTElLRUxZKG90aGVyLmlzRlBSKCkpKSB7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmVE
b3VibGUoZnByKCksIG90aGVyLmZwcigpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRv
bmU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzY3JhdGNoRlBSICE9IEludmFsaWRG
UFJSZWcpIHsKLSAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGEgc2NyYXRjaCBGUFIsIHNvIGF0
dGVtcHQgYSBjb252ZXJzaW9uIHRvIGludAotICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBub3RJbnQ7Ci0gICAgICAgICAgICAgICAgaml0LmJyYW5jaENvbnZlcnREb3VibGVU
b0ludDMyKGZwcigpLCBvdGhlci5ncHIoKSwgbm90SW50LCBzY3JhdGNoRlBSKTsKLSAgICAgICAg
ICAgICAgICBqaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBvdGhlci5n
cHIoKSk7Ci0gICAgICAgICAgICAgICAgZG9uZSA9IGppdC5qdW1wKCk7Ci0gICAgICAgICAgICAg
ICAgbm90SW50LmxpbmsoJmppdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGppdC5ib3hEb3VibGUoZnByKCksIG90aGVyLmdwcigpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKGRvbmUuaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBkb25lLmxpbmso
JmppdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChVTkxJS0VMWShvdGhlci5pc0ZQUigpKSkgewotICAgICAgICAgICAgaml0LnVuYm94RG91
YmxlKGdwcigpLCBvdGhlci5mcHIoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChMSUtFTFkoIW5lZWREYXRhRm9ybWF0Q29udmVyc2lvbiht
eURhdGFGb3JtYXQsIG90aGVyRGF0YUZvcm1hdCkpKSB7Ci0gICAgICAgICAgICBqaXQubW92ZShn
cHIoKSwgb3RoZXIuZ3ByKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAobXlEYXRhRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7Ci0g
ICAgICAgICAgICBqaXQub3JQdHIoZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgb3RoZXIuZ3ByKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBBU1NFUlQob3RoZXJEYXRhRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKTsK
LSAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKGdwcigpLCBvdGhlci5ncHIoKSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgc3dhcFdpdGgoR2VuZXJhbGl6ZWRSZWdpc3RlciYgb3RoZXIsIERh
dGFGb3JtYXQgbXlEYXRhRm9ybWF0LCBEYXRhRm9ybWF0IG15TmV3RGF0YUZvcm1hdCwgRGF0YUZv
cm1hdCBvdGhlckRhdGFGb3JtYXQsIERhdGFGb3JtYXQgb3RoZXJOZXdEYXRhRm9ybWF0LCBKSVRD
b21waWxlciYgaml0LCBHUFJSZWcgc2NyYXRjaEdQUiwgRlBSUmVnIHNjcmF0Y2hGUFIpCi0gICAg
ewotICAgICAgICBpZiAoVU5MSUtFTFkoaXNGUFIoKSkpIHsKLSAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShvdGhlci5pc0ZQUigpKSkgewotICAgICAgICAgICAgICAgIGlmIChzY3JhdGNoRlBSID09
IEludmFsaWRGUFJSZWcpCi0gICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlVG9QdHIo
ZnByKCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgaml0Lm1vdmVEb3VibGUoZnByKCksIHNjcmF0Y2hGUFIpOwotICAgICAgICAgICAgICAg
IGppdC5tb3ZlRG91YmxlKG90aGVyLmZwcigpLCBmcHIoKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KHNjcmF0Y2hGUFIgPT0gSW52YWxpZEZQUlJlZykKLSAgICAgICAgICAgICAgICAgICAgaml0Lm1v
dmVQdHJUb0RvdWJsZShzY3JhdGNoR1BSLCBvdGhlci5mcHIoKSk7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBqaXQubW92ZURvdWJsZShzY3JhdGNoRlBSLCBvdGhl
ci5mcHIoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBqaXQubW92ZShvdGhlci5ncHIoKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmU7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChzY3JhdGNoRlBSICE9IEludmFsaWRGUFJSZWcpIHsKLSAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgbm90SW50OwotICAgICAgICAgICAg
ICAgIGppdC5icmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMihmcHIoKSwgb3RoZXIuZ3ByKCksIG5v
dEludCwgc2NyYXRjaEZQUik7Ci0gICAgICAgICAgICAgICAgaml0Lm9yUHRyKEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3Rlciwgb3RoZXIuZ3ByKCkpOwotICAgICAgICAgICAgICAgIGRvbmUg
PSBqaXQuanVtcCgpOwotICAgICAgICAgICAgICAgIG5vdEludC5saW5rKCZqaXQpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBqaXQuYm94RG91YmxlKGZwcigpLCBv
dGhlci5ncHIoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChkb25lLmlzU2V0KCkp
Ci0gICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBqaXQudW5ib3hEb3VibGUoc2NyYXRjaEdQUiwgZnByKCkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoVU5MSUtFTFkob3RoZXIuaXNG
UFIoKSkpIHsKLSAgICAgICAgICAgIG90aGVyLnN3YXBXaXRoKCp0aGlzLCBvdGhlckRhdGFGb3Jt
YXQsIG90aGVyTmV3RGF0YUZvcm1hdCwgbXlEYXRhRm9ybWF0LCBteU5ld0RhdGFGb3JtYXQsIGpp
dCwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGppdC5zd2FwKGdwcigpLCBvdGhlci5ncHIoKSk7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoVU5MSUtFTFkobmVlZERhdGFGb3JtYXRDb252ZXJzaW9uKG90aGVy
RGF0YUZvcm1hdCwgbXlOZXdEYXRhRm9ybWF0KSkpIHsKLSAgICAgICAgICAgIGlmIChvdGhlckRh
dGFGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCi0gICAgICAgICAgICAgICAgaml0Lm9yUHRy
KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKCkpOwotICAgICAgICAgICAgZWxz
ZSBpZiAobXlOZXdEYXRhRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQotICAgICAgICAgICAg
ICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHIoKSwgZ3ByKCkpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoVU5MSUtFTFkobmVlZERhdGFGb3JtYXRDb252ZXJzaW9uKG15RGF0
YUZvcm1hdCwgb3RoZXJOZXdEYXRhRm9ybWF0KSkpIHsKLSAgICAgICAgICAgIGlmIChteURhdGFG
b3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCi0gICAgICAgICAgICAgICAgaml0Lm9yUHRyKEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgb3RoZXIuZ3ByKCkpOwotICAgICAgICAgICAg
ZWxzZSBpZiAob3RoZXJOZXdEYXRhRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQotICAgICAg
ICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihvdGhlci5ncHIoKSwgb3RoZXIuZ3ByKCkp
OwotICAgICAgICB9Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc0ZQUjsKLSAgICB1
bmlvbiB7Ci0gICAgICAgIEdQUlJlZyBncHI7Ci0gICAgICAgIEZQUlJlZyBmcHI7Ci0gICAgfSBt
X3JlZ2lzdGVyOwotfTsKLQotc3RydWN0IFNodWZmbGVkUmVnaXN0ZXIgewotICAgIEdlbmVyYWxp
emVkUmVnaXN0ZXIgcmVnOwotICAgIFNodWZmbGVkUmVnaXN0ZXIqIHByZXZpb3VzOwotICAgIGJv
b2wgaGFzRnJvbTsKLSAgICBib29sIGhhc1RvOwotICAgIGJvb2wgaGFuZGxlZDsKLSAgICAKLSAg
ICBTaHVmZmxlZFJlZ2lzdGVyKCkgeyB9Ci0gICAgCi0gICAgU2h1ZmZsZWRSZWdpc3RlcihHZW5l
cmFsaXplZFJlZ2lzdGVyIHJlZykKLSAgICAgICAgOiByZWcocmVnKQotICAgICAgICAsIHByZXZp
b3VzKDApCi0gICAgICAgICwgaGFzRnJvbShmYWxzZSkKLSAgICAgICAgLCBoYXNUbyhmYWxzZSkK
LSAgICAgICAgLCBoYW5kbGVkKGZhbHNlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBp
c0VuZE9mTm9uQ3ljbGluZ1Blcm11dGF0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBoYXNU
byAmJiAhaGFzRnJvbTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBoYW5kbGVOb25DeWNsaW5nUGVy
bXV0YXRpb24oY29uc3QgU3BlY3VsYXRpb25DaGVjayYgY2hlY2ssIGNvbnN0IEVudHJ5TG9jYXRp
b24mIGVudHJ5LCBKSVRDb21waWxlciYgaml0LCBGUFJSZWcmIHNjcmF0Y2hGUFIxLCBGUFJSZWcm
IHNjcmF0Y2hGUFIyKQotICAgIHsKLSAgICAgICAgU2h1ZmZsZWRSZWdpc3RlciogY3VyID0gdGhp
czsKLSAgICAgICAgd2hpbGUgKGN1ci0+cHJldmlvdXMpIHsKLSAgICAgICAgICAgIGN1ci0+cHJl
dmlvdXMtPnJlZy5tb3ZlVG8oY3VyLT5yZWcsIGN1ci0+cHJldmlvdXMtPnJlZy5wcmV2aW91c0Rh
dGFGb3JtYXQoY2hlY2spLCBjdXItPnJlZy5uZXh0RGF0YUZvcm1hdChlbnRyeSksIGppdCwgc2Ny
YXRjaEZQUjEpOwotICAgICAgICAgICAgY3VyLT5oYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAg
IGlmIChjdXItPnJlZy5pc0ZQUigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNjcmF0Y2hGUFIx
ID09IEludmFsaWRGUFJSZWcpCi0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hGUFIxID0gY3Vy
LT5yZWcuZnByKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVChzY3JhdGNoRlBSMSAhPSBjdXItPnJlZy5mcHIoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHNjcmF0Y2hGUFIyID0gY3VyLT5yZWcuZnByKCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY3VyID0gY3VyLT5wcmV2aW91czsKLSAgICAgICAgfQot
ICAgICAgICBjdXItPmhhbmRsZWQgPSB0cnVlOwotICAgICAgICBpZiAoY3VyLT5yZWcuaXNGUFIo
KSkgewotICAgICAgICAgICAgaWYgKHNjcmF0Y2hGUFIxID09IEludmFsaWRGUFJSZWcpCi0gICAg
ICAgICAgICAgICAgc2NyYXRjaEZQUjEgPSBjdXItPnJlZy5mcHIoKTsKLSAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChzY3JhdGNoRlBSMSAhPSBjdXItPnJlZy5mcHIo
KSk7Ci0gICAgICAgICAgICAgICAgc2NyYXRjaEZQUjIgPSBjdXItPnJlZy5mcHIoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGhhbmRsZUN5Y2xpbmdQ
ZXJtdXRhdGlvbihjb25zdCBTcGVjdWxhdGlvbkNoZWNrJiBjaGVjaywgY29uc3QgRW50cnlMb2Nh
dGlvbiYgZW50cnksIEpJVENvbXBpbGVyJiBqaXQsIEdQUlJlZyBzY3JhdGNoR1BSLCBGUFJSZWcg
c2NyYXRjaEZQUjEsIEZQUlJlZyBzY3JhdGNoRlBSMikKLSAgICB7Ci0gICAgICAgIC8vIGZpcnN0
IGRldGVybWluZSB0aGUgY3ljbGUgbGVuZ3RoCi0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBj
eWNsZUxlbmd0aCA9IDA7Ci0gICAgICAgIAotICAgICAgICBTaHVmZmxlZFJlZ2lzdGVyKiBjdXIg
PSB0aGlzOwotICAgICAgICBTaHVmZmxlZFJlZ2lzdGVyKiBuZXh0ID0gMDsKLSAgICAgICAgZG8g
ewotICAgICAgICAgICAgQVNTRVJUKGN1cik7Ci0gICAgICAgICAgICBjeWNsZUxlbmd0aCsrOwot
ICAgICAgICAgICAgY3VyLT5oYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIG5leHQgPSBjdXI7
Ci0gICAgICAgICAgICBjdXIgPSBjdXItPnByZXZpb3VzOwotICAgICAgICB9IHdoaWxlIChjdXIg
IT0gdGhpcyk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoY3ljbGVMZW5ndGgpOwotICAgICAg
ICBBU1NFUlQobmV4dC0+cHJldmlvdXMgPT0gY3VyKTsKLSAgICAgICAgCi0gICAgICAgIC8vIG5v
dyBkZXRlcm1pbmUgdGhlIGJlc3Qgd2F5IHRvIGhhbmRsZSB0aGUgcGVybXV0YXRpb24sIGRlcGVu
ZGluZyBvbiB0aGUKLSAgICAgICAgLy8gbGVuZ3RoLgotICAgICAgICAKLSAgICAgICAgc3dpdGNo
IChjeWNsZUxlbmd0aCkgewotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICByZWcuY29udmVy
dChyZWcucHJldmlvdXNEYXRhRm9ybWF0KGNoZWNrKSwgcmVnLm5leHREYXRhRm9ybWF0KGVudHJ5
KSwgaml0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
MjoKLSAgICAgICAgICAgIHJlZy5zd2FwV2l0aChwcmV2aW91cy0+cmVnLCByZWcucHJldmlvdXNE
YXRhRm9ybWF0KGNoZWNrKSwgcmVnLm5leHREYXRhRm9ybWF0KGVudHJ5KSwgcHJldmlvdXMtPnJl
Zy5wcmV2aW91c0RhdGFGb3JtYXQoY2hlY2spLCBwcmV2aW91cy0+cmVnLm5leHREYXRhRm9ybWF0
KGVudHJ5KSwgaml0LCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSMSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgR2VuZXJhbGl6
ZWRSZWdpc3RlciBzY3JhdGNoOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHJlZy5pc0ZQUigp
ICYmIG5leHQtPnJlZy5pc0ZQUigpKSkgewotICAgICAgICAgICAgICAgIGlmIChzY3JhdGNoRlBS
MiA9PSBJbnZhbGlkRlBSUmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBHZW5l
cmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVHUFIoc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlZy5tb3ZlVG8oc2NyYXRjaCwgRGF0YUZvcm1hdERvdWJsZSwgRGF0YUZvcm1hdEpTRG91
YmxlLCBqaXQsIHNjcmF0Y2hGUFIxKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBzY3JhdGNoID0gR2VuZXJhbGl6ZWRSZWdpc3Rlcjo6Y3JlYXRlRlBSKHNj
cmF0Y2hGUFIyKTsKLSAgICAgICAgICAgICAgICAgICAgcmVnLm1vdmVUbyhzY3JhdGNoLCBEYXRh
Rm9ybWF0RG91YmxlLCBEYXRhRm9ybWF0RG91YmxlLCBqaXQsIHNjcmF0Y2hGUFIxKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNjcmF0
Y2ggPSBHZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVHUFIoc2NyYXRjaEdQUik7Ci0gICAgICAg
ICAgICAgICAgcmVnLm1vdmVUbyhzY3JhdGNoLCByZWcucHJldmlvdXNEYXRhRm9ybWF0KGNoZWNr
KSwgbmV4dC0+cmVnLm5leHREYXRhRm9ybWF0KGVudHJ5KSwgaml0LCBzY3JhdGNoRlBSMSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGN1ciA9IHRoaXM7Ci0gICAg
ICAgICAgICB3aGlsZSAoY3VyLT5wcmV2aW91cyAhPSB0aGlzKSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKGN1cik7Ci0gICAgICAgICAgICAgICAgY3VyLT5wcmV2aW91cy0+cmVnLm1vdmVUbyhj
dXItPnJlZywgY3VyLT5wcmV2aW91cy0+cmVnLnByZXZpb3VzRGF0YUZvcm1hdChjaGVjayksIGN1
ci0+cmVnLm5leHREYXRhRm9ybWF0KGVudHJ5KSwgaml0LCBzY3JhdGNoRlBSMSk7Ci0gICAgICAg
ICAgICAgICAgY3VyID0gY3VyLT5wcmV2aW91czsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHJlZy5pc0ZQUigpICYmIG5leHQtPnJlZy5pc0ZQ
UigpKSkgewotICAgICAgICAgICAgICAgIGlmIChzY3JhdGNoRlBSMiA9PSBJbnZhbGlkRlBSUmVn
KQotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoLm1vdmVUbyhuZXh0LT5yZWcsIERhdGFGb3Jt
YXRKU0RvdWJsZSwgRGF0YUZvcm1hdERvdWJsZSwgaml0LCBzY3JhdGNoRlBSMSk7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoLm1vdmVUbyhuZXh0LT5y
ZWcsIERhdGFGb3JtYXREb3VibGUsIERhdGFGb3JtYXREb3VibGUsIGppdCwgc2NyYXRjaEZQUjEp
OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc2NyYXRjaC5tb3ZlVG8obmV4
dC0+cmVnLCBuZXh0LT5yZWcubmV4dERhdGFGb3JtYXQoZW50cnkpLCBuZXh0LT5yZWcubmV4dERh
dGFGb3JtYXQoZW50cnkpLCBqaXQsIHNjcmF0Y2hGUFIxKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBTaHVmZmxlZFJlZ2lzdGVyKiBsb29r
dXAoU2h1ZmZsZWRSZWdpc3RlciogZ3BycywgU2h1ZmZsZWRSZWdpc3RlciogZnBycywgR2VuZXJh
bGl6ZWRSZWdpc3RlciYgcmVnKQotICAgIHsKLSAgICAgICAgaWYgKHJlZy5pc0ZQUigpKQotICAg
ICAgICAgICAgcmV0dXJuIGZwcnMgKyBGUFJJbmZvOjp0b0luZGV4KHJlZy5mcHIoKSk7Ci0gICAg
ICAgIHJldHVybiBncHJzICsgR1BSSW5mbzo6dG9JbmRleChyZWcuZ3ByKCkpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UJiBsb29rdXBGb3JSZWdpc3RlcihUKiBncHJzLCBU
KiBmcHJzLCB1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBBU1NFUlQoaW5kZXggPCBHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKTsKLSAgICBpZiAo
aW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycykKLSAgICAgICAgcmV0dXJuIGdwcnNb
aW5kZXhdOwotICAgIHJldHVybiBmcHJzW2luZGV4IC0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnNdOwotfQotCi0vLyBUaGlzIGlzIHdyaXR0ZW4gaW4gYSB3YXkgdGhhdCBhbGxvd3MgZm9yIGEg
SGFzaE1hcDxOb2RlSW5kZXgsIEdlbmVyYWxpemVkUmVnaXN0ZXI+IHRvIGJlCi0vLyBlYXNpbHkg
c3Vic3RpdHV0ZWQsIGlmIGl0IGlzIGZvdW5kIHRvIGJlIHdpc2UgdG8gZG8gc28uIFNvIGZhciBw
ZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMKLS8vIGluZGljYXRlIHRoYXQgdGhpcyBpcyBmYXN0ZXIs
IGxpa2VseSBiZWNhdXNlIHRoZSBIYXNoTWFwIHdvdWxkIGhhdmUgbmV2ZXIgZ3Jvd24gdmVyeSBi
aWcKLS8vIGFuZCB3ZSB3b3VsZCB0aHVzIGJlIHdhc3RpbmcgdGltZSBwZXJmb3JtaW5nIGNvbXBs
ZXggaGFzaGluZyBsb2dpYyB0aGF0LCB0aG91Z2ggTygxKSBvbgotLy8gYXZlcmFnZSwgd291bGQg
YmUgbGVzcyB0aGFuIHRoZSB+NyBsb29wIGl0ZXJhdGlvbnMgdGhhdCB0aGUgZmluZCgpIG1ldGhv
ZCBiZWxvdyB3b3VsZCBkbwotLy8gKHNpbmNlIGl0J3MgdW5jb21tb24gdGhhdCB3ZSdkIGhhdmUg
cmVnaXN0ZXIgYWxsb2NhdGVkIG1vcmUgdGhhbiA3IHJlZ2lzdGVycywgaW4gdGhlCi0vLyBjdXJy
ZW50IHNjaGVtZSkuCi1jbGFzcyBOb2RlVG9SZWdpc3Rlck1hcCB7Ci1wdWJsaWM6Ci0gICAgc3Ry
dWN0IFR1cGxlIHsKLSAgICAgICAgTm9kZUluZGV4IGZpcnN0OwotICAgICAgICBHZW5lcmFsaXpl
ZFJlZ2lzdGVyIHNlY29uZDsKLSAgICAgICAgCi0gICAgICAgIFR1cGxlKCkKLSAgICAgICAgewot
ICAgICAgICB9Ci0gICAgfTsKLSAgICAKLSAgICB0eXBlZGVmIFR1cGxlKiBpdGVyYXRvcjsKLSAg
ICAKLSAgICBOb2RlVG9SZWdpc3Rlck1hcCgpCi0gICAgICAgIDogbV9vY2N1cGFuY3koMCkKLSAg
ICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KE5vZGVJbmRleCBmaXJzdCwgR2VuZXJhbGl6
ZWRSZWdpc3RlciBzZWNvbmQpCi0gICAgewotICAgICAgICBtX3BheWxvYWRbbV9vY2N1cGFuY3ld
LmZpcnN0ID0gZmlyc3Q7Ci0gICAgICAgIG1fcGF5bG9hZFttX29jY3VwYW5jeV0uc2Vjb25kID0g
c2Vjb25kOwotICAgICAgICBtX29jY3VwYW5jeSsrOwotICAgIH0KLSAgICAKLSAgICBUdXBsZSog
ZW5kKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBUdXBsZSog
ZmluZChOb2RlSW5kZXggZmlyc3QpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X29jY3VwYW5jeTsgaS0tID4gMDspIHsKLSAgICAgICAgICAgIGlmIChtX3BheWxvYWRbaV0uZmly
c3QgPT0gZmlyc3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fcGF5bG9hZCArIGk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xlYXIoKQot
ICAgIHsKLSAgICAgICAgbV9vY2N1cGFuY3kgPSAwOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0g
ICAgVHVwbGUgbV9wYXlsb2FkW0dQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnNdOwotICAgIHVuc2lnbmVkIG1fb2NjdXBhbmN5OwotfTsKLQotdm9p
ZCBKSVRDb21waWxlcjo6anVtcEZyb21TcGVjdWxhdGl2ZVRvTm9uU3BlY3VsYXRpdmUoY29uc3Qg
U3BlY3VsYXRpb25DaGVjayYgY2hlY2ssIGNvbnN0IEVudHJ5TG9jYXRpb24mIGVudHJ5LCBTcGVj
dWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSwgTm9kZVRvUmVnaXN0ZXJNYXAmIGNoZWNrTm9kZVRv
UmVnaXN0ZXJNYXAsIE5vZGVUb1JlZ2lzdGVyTWFwJiBlbnRyeU5vZGVUb1JlZ2lzdGVyTWFwKQot
ewotICAgIEFTU0VSVChjaGVjay5tX25vZGVJbmRleCA9PSBlbnRyeS5tX25vZGVJbmRleCk7Ci0K
LSAgICAvLyBMaW5rIHRoZSBqdW1wIGZyb20gdGhlIFNwZWN1bGF0aXZlIHBhdGggdG8gaGVyZS4K
LSAgICBjaGVjay5tX2NoZWNrLmxpbmsodGhpcyk7Ci0KLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZF
UkJPU0UpCi0gICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGlvbiBmYWlsdXJlIGZvciBOb2Rl
IEAlZCBhdCBKSVQgb2Zmc2V0IDB4JXhcbiIsIChpbnQpY2hlY2subV9ub2RlSW5kZXgsIGRlYnVn
T2Zmc2V0KCkpOwotI2VuZGlmCi0jaWYgRU5BQkxFKERGR19KSVRfQlJFQUtfT05fU1BFQ1VMQVRJ
T05fRkFJTFVSRSkKLSAgICBicmVha3BvaW50KCk7Ci0jZW5kaWYKLSAgICAKLSNpZiBFTkFCTEUo
REZHX1ZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSkKLSAgICBTcGVjdWxhdGlvbkZhaWx1cmVE
ZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87Ci0g
ICAgZGVidWdJbmZvLT5jb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKLSAgICBkZWJ1Z0luZm8tPmRl
YnVnT2Zmc2V0ID0gZGVidWdPZmZzZXQoKTsKLSAgICAKLSAgICBkZWJ1Z0NhbGwoZGVidWdPcGVy
YXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKLSNlbmRpZgotCi0jaWYg
RU5BQkxFKERGR19TVUNDRVNTX1NUQVRTKQotICAgIHN0YXRpYyBTYW1wbGluZ0NvdW50ZXIgY291
bnRlcigiU3BlY3VsYXRpb25GYWlsdXJlIik7Ci0gICAgZW1pdENvdW50KGNvdW50ZXIpOwotI2Vu
ZGlmCi0KLSAgICAvLyBEb2VzIHRoaXMgc3BlY3VsYXRpb24gY2hlY2sgcmVxdWlyZSBhbnkgYWRk
aXRpb25hbCByZWNvdmVyeSB0byBiZSBwZXJmb3JtZWQsCi0gICAgLy8gdG8gcmVzdG9yZSBhbnkg
c3RhdGUgdGhhdCBoYXMgYmVlbiBvdmVyd3JpdHRlbiBiZWZvcmUgd2UgZW50ZXIgYmFjayBpbiB0
byB0aGUKLSAgICAvLyBub24tc3BlY3VsYXRpdmUgcGF0aC4KLSAgICBpZiAocmVjb3ZlcnkpIHsK
LSAgICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgU3BlY3Vs
YXRpdmVBZGQ6IHsKLSAgICAgICAgICAgIEFTU0VSVChjaGVjay5tX2dwckluZm9bR1BSSW5mbzo6
dG9JbmRleChyZWNvdmVyeS0+ZGVzdCgpKV0ubm9kZUluZGV4ICE9IE5vTm9kZSk7Ci0gICAgICAg
ICAgICAvLyBSZXZlcnQgdGhlIGFkZC4KLSAgICAgICAgICAgIHN1YjMyKHJlY292ZXJ5LT5zcmMo
KSwgcmVjb3ZlcnktPmRlc3QoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIElmIHJl
Y292ZXJ5LT5kZXN0KCkgc2hvdWxkIGhhdmUgYmVlbiBib3hlZCBwcmlvciB0byB0aGUgYWRkaXRp
b24sIHRoZW4gcmVib3gKLSAgICAgICAgICAgIC8vIGl0LgotICAgICAgICAgICAgRGF0YUZvcm1h
dCBmb3JtYXQgPSBjaGVjay5tX2dwckluZm9bR1BSSW5mbzo6dG9JbmRleChyZWNvdmVyeS0+ZGVz
dCgpKV0uZm9ybWF0OwotICAgICAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9ybWF0SW50
ZWdlciB8fCBmb3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50ZWdlciB8fCBmb3JtYXQgPT0gRGF0YUZv
cm1hdEpTKTsKLSAgICAgICAgICAgIGlmIChmb3JtYXQgIT0gRGF0YUZvcm1hdEludGVnZXIpCi0g
ICAgICAgICAgICAgICAgb3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNv
dmVyeS0+ZGVzdCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBCb29sZWFuU3BlY3VsYXRpb25DaGVjazogewotICAgICAgICAgICAg
QVNTRVJUKGNoZWNrLm1fZ3BySW5mb1tHUFJJbmZvOjp0b0luZGV4KHJlY292ZXJ5LT5kZXN0KCkp
XS5ub2RlSW5kZXggIT0gTm9Ob2RlKTsKLSAgICAgICAgICAgIC8vIFJlYm94IHRoZSAobm9uLSli
b29sZWFuCi0gICAgICAgICAgICB4b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KFZhbHVlRmFsc2UpKSwgcmVjb3ZlcnktPmRlc3QoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIC8vIEZpcnN0LCB3ZSBuZWVkIGEgcmV2ZXJzZSBtYXBwaW5nIHRoYXQgdGVs
bHMgdXMsIGZvciBhIE5vZGVJbmRleCwgd2hpY2ggcmVnaXN0ZXIKLSAgICAvLyB0aGF0IG5vZGUg
aXMgaW4uCi0gICAgCi0gICAgY2hlY2tOb2RlVG9SZWdpc3Rlck1hcC5jbGVhcigpOwotICAgIGVu
dHJ5Tm9kZVRvUmVnaXN0ZXJNYXAuY2xlYXIoKTsKLSAgICAKLSAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IEludmFsaWRHUFJSZWc7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIxID0gSW52YWxpZEZQUlJl
ZzsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUjIgPSBJbnZhbGlkRlBSUmVnOwotICAgIGJvb2wgbmVl
ZFRvUmVzdG9yZVRhZ01hc2tSZWdpc3RlciA9IGZhbHNlOwotICAgIAotICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwOyBpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2luZGV4
KSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXhJbkNoZWNrID0gY2hlY2subV9ncHJJbmZv
W2luZGV4XS5ub2RlSW5kZXg7Ci0gICAgICAgIGlmIChub2RlSW5kZXhJbkNoZWNrICE9IE5vTm9k
ZSkKLSAgICAgICAgICAgIGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAuc2V0KG5vZGVJbmRleEluQ2hl
Y2ssIEdlbmVyYWxpemVkUmVnaXN0ZXI6OmNyZWF0ZUdQUihHUFJJbmZvOjp0b1JlZ2lzdGVyKGlu
ZGV4KSkpOwotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4SW5FbnRyeSA9IGVudHJ5Lm1fZ3By
SW5mb1tpbmRleF0ubm9kZUluZGV4OwotICAgICAgICBpZiAobm9kZUluZGV4SW5FbnRyeSAhPSBO
b05vZGUpCi0gICAgICAgICAgICBlbnRyeU5vZGVUb1JlZ2lzdGVyTWFwLnNldChub2RlSW5kZXhJ
bkVudHJ5LCBHZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVHUFIoR1BSSW5mbzo6dG9SZWdpc3Rl
cihpbmRleCkpKTsKLSAgICAgICAgZWxzZSBpZiAobm9kZUluZGV4SW5DaGVjayA9PSBOb05vZGUp
Ci0gICAgICAgICAgICBzY3JhdGNoR1BSID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpbmRleCk7Ci0g
ICAgfQotICAgIAotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IEZQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzOyArK2luZGV4KSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXhJbkNoZWNrID0gY2hlY2subV9mcHJJbmZvW2luZGV4XS5ub2RlSW5kZXg7Ci0gICAgICAgIGlm
IChub2RlSW5kZXhJbkNoZWNrICE9IE5vTm9kZSkKLSAgICAgICAgICAgIGNoZWNrTm9kZVRvUmVn
aXN0ZXJNYXAuc2V0KG5vZGVJbmRleEluQ2hlY2ssIEdlbmVyYWxpemVkUmVnaXN0ZXI6OmNyZWF0
ZUZQUihGUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KSkpOwotICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4SW5FbnRyeSA9IGVudHJ5Lm1fZnBySW5mb1tpbmRleF0ubm9kZUluZGV4OwotICAgICAg
ICBpZiAobm9kZUluZGV4SW5FbnRyeSAhPSBOb05vZGUpCi0gICAgICAgICAgICBlbnRyeU5vZGVU
b1JlZ2lzdGVyTWFwLnNldChub2RlSW5kZXhJbkVudHJ5LCBHZW5lcmFsaXplZFJlZ2lzdGVyOjpj
cmVhdGVGUFIoRlBSSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpKTsKLSAgICAgICAgZWxzZSBpZiAo
bm9kZUluZGV4SW5DaGVjayA9PSBOb05vZGUpIHsKLSAgICAgICAgICAgIGlmIChzY3JhdGNoRlBS
MSA9PSBJbnZhbGlkRlBSUmVnKQotICAgICAgICAgICAgICAgIHNjcmF0Y2hGUFIxID0gRlBSSW5m
bzo6dG9SZWdpc3RlcihpbmRleCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
c2NyYXRjaEZQUjIgPSBGUFJJbmZvOjp0b1JlZ2lzdGVyKGluZGV4KTsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICBBU1NFUlQoKHNjcmF0Y2hGUFIxID09IEludmFsaWRGUFJSZWcgJiYgc2Ny
YXRjaEZQUjIgPT0gSW52YWxpZEZQUlJlZykgfHwgKHNjcmF0Y2hGUFIxICE9IHNjcmF0Y2hGUFIy
KSk7Ci0gICAgCi0gICAgLy8gSG93IHRoaXMgd29ya3M6Ci0gICAgLy8gMSkgU3BpbGwgYW55IHZh
bHVlcyB0aGF0IGFyZSBub3Qgc3BpbGxlZCBvbiBzcGVjdWxhdGl2ZSwgYnV0IGFyZSBzcGlsbGVk
Ci0gICAgLy8gICAgb24gbm9uLXNwZWN1bGF0aXZlLgotICAgIC8vIDIpIEZvciB0aGUgc2V0IG9m
IG5vZGVzIHRoYXQgYXJlIGluIHJlZ2lzdGVycyBvbiBib3RoIHBhdGhzLCBwZXJmb3JtIGEKLSAg
ICAvLyAgICBzaHVmZmxpbmcuCi0gICAgLy8gMykgRmlsbCBhbnkgdmFsdWVzIHRoYXQgd2VyZSBz
cGlsbGVkIG9uIHNwZWN1bGF0aXZlLCBidXQgYXJlIG5vdCBzcGlsbGVkCi0gICAgLy8gICAgb24g
bm9uLXNwZWN1bGF0aXZlLgotICAgIAotICAgIC8vIElmIHdlIGZpbmQgcmVnaXN0ZXJzIHRoYXQg
Y2FuIGJlIHVzZWQgYXMgc2NyYXRjaCByZWdpc3RlcnMgYWxvbmcgdGhlIHdheSwKLSAgICAvLyBz
YXZlIHRoZW0uCi0gICAgCi0gICAgLy8gUGFydCAxOiBzcGlsbCBhbnkgdmFsdWVzIHRoYXQgYXJl
IG5vdCBzcGlsbGVkIG9uIHNwZWN1bGF0aXZlLCBidXQgYXJlCi0gICAgLy8gICAgICAgICBzcGls
bGVkIG9uIG5vbi1zcGVjdWxhdGl2ZS4KLSAgICAKLSAgICAvLyBUaGlzIGFsc28gc2V0cyB1cCBz
b21lIGRhdGEgc3RydWN0dXJlcyB0aGF0IFBhcnQgMiB3aWxsIG5lZWQuCi0gICAgCi0gICAgU2h1
ZmZsZWRSZWdpc3RlciBncHJzW0dQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXTsKLSAgICBTaHVm
ZmxlZFJlZ2lzdGVyIGZwcnNbRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOwotICAgIAotICAg
IGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzOyArK2luZGV4KQotICAgICAgICBncHJzW2luZGV4XSA9IFNodWZmbGVkUmVnaXN0ZXIoR2Vu
ZXJhbGl6ZWRSZWdpc3Rlcjo6Y3JlYXRlR1BSKEdQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpKSk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7ICsraW5kZXgpCi0gICAgICAgIGZwcnNbaW5kZXhdID0gU2h1ZmZsZWRSZWdpc3Rl
cihHZW5lcmFsaXplZFJlZ2lzdGVyOjpjcmVhdGVGUFIoRlBSSW5mbzo6dG9SZWdpc3RlcihpbmRl
eCkpKTsKLQotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IEdQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzOyArK2luZGV4KSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBjaGVjay5tX2dwckluZm9baW5kZXhdLm5vZGVJbmRleDsKLSAgICAgICAgCi0gICAgICAgIC8v
IEJhaWwgb3V0IGlmIHRoaXMgcmVnaXN0ZXIgaXNuJ3QgYXNzaWduZWQgdG8gYW55dGhpbmcuCi0g
ICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgbm9uLXNwZWN1bGF0aXZlIHBhdGggYWxzbyBoYXMg
YSByZWdpc3RlciBmb3IgdGhlIG5vZGVJbmRleCB0aGF0IHRoaXMKLSAgICAgICAgLy8gcmVnaXN0
ZXIgc3RvcmVzLCBsaW5rIHRoZW0gdG9nZXRoZXIuCi0gICAgICAgIE5vZGVUb1JlZ2lzdGVyTWFw
OjppdGVyYXRvciBtYXBJdGVyYXRvciA9IGVudHJ5Tm9kZVRvUmVnaXN0ZXJNYXAuZmluZChub2Rl
SW5kZXgpOwotICAgICAgICBpZiAobWFwSXRlcmF0b3IgIT0gZW50cnlOb2RlVG9SZWdpc3Rlck1h
cC5lbmQoKSkgewotICAgICAgICAgICAgZ3Byc1tpbmRleF0uaGFzRnJvbSA9IHRydWU7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIFNodWZmbGVkUmVnaXN0ZXIqIG5leHQgPSBTaHVmZmxlZFJl
Z2lzdGVyOjpsb29rdXAoZ3BycywgZnBycywgbWFwSXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAg
ICAgICBuZXh0LT5wcmV2aW91cyA9IGdwcnMgKyBpbmRleDsKLSAgICAgICAgICAgIG5leHQtPmhh
c1RvID0gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gSWYgdGhlIG5vbi1zcGVj
dWxhdGl2ZSBwYXRoIGhhcyBub3Qgc3BpbGxlZCB0aGlzIHJlZ2lzdGVyLCB0aGVuIHNraXAgdGhl
IHNwaWxsaW4KLSAgICAgICAgICAgIC8vIHBhcnQgYmVsb3cgcmVnYXJkbGVzcyBvZiB3aGV0aGVy
IG9yIG5vdCB0aGUgc3BlY3VsYXRpdmUgcGF0aCBoYXMgc3BpbGxlZCBpdC4KLSAgICAgICAgICAg
IGlmICghbWFwSXRlcmF0b3ItPnNlY29uZC5maW5kSW5FbnRyeUxvY2F0aW9uKGVudHJ5KS5pc1Nw
aWxsZWQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBJZiB0aGUgbm9uLXNwZWN1bGF0aXZlIGVudHJ5IGlzbid0IHVzaW5nIHRoaXMg
cmVnaXN0ZXIgYW5kIGl0IGRvZXMgbm90IG5lZWQKLSAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSBp
biB0aGlzIHJlZ2lzdGVyIHRvIGJlIHBsYWNlZCBpbnRvIGFueSBvdGhlciByZWdpc3RlciwgdGhl
biB0aGlzCi0gICAgICAgICAgICAvLyByZWdpc3RlciBjYW4gYmUgdXNlZCBmb3Igc2NyYXRjaC4K
LSAgICAgICAgICAgIGlmIChlbnRyeS5tX2dwckluZm9baW5kZXhdLm5vZGVJbmRleCA9PSBOb05v
ZGUpCi0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaW5k
ZXgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgc3BlY3VsYXRpdmUg
cGF0aCBoYXMgYWxyZWFkeSBzcGlsbGVkIHRoZSByZWdpc3RlciB0aGVuIHRoZXJlIGlzIG5vIG5l
ZWQgdG8KLSAgICAgICAgLy8gc3BpbGwgaXQuCi0gICAgICAgIGlmIChjaGVjay5tX2dwckluZm9b
aW5kZXhdLmlzU3BpbGxlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAg
ICAgRGF0YUZvcm1hdCBkYXRhRm9ybWF0ID0gY2hlY2subV9ncHJJbmZvW2luZGV4XS5mb3JtYXQ7
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBncmFwaCgpW25vZGVJ
bmRleF0udmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoZGF0YUZv
cm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlciB8fCBEYXRhRm9ybWF0Q2VsbCB8fCBkYXRhRm9ybWF0
ICYgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgaWYgKGRhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdElu
dGVnZXIpCi0gICAgICAgICAgICBvclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IEdQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpKTsKLSAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6
dG9SZWdpc3RlcihpbmRleCksIGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7Ci0gICAgfQot
ICAgIAotICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgc2Ny
YXRjaEdQUiA9IEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcjsKLSAgICAgICAgbmVlZFRvUmVzdG9y
ZVRhZ01hc2tSZWdpc3RlciA9IHRydWU7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraW5kZXgpIHsKLSAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGNoZWNrLm1fZnBySW5mb1tpbmRleF0ubm9kZUlu
ZGV4OwotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIE5vZGVUb1JlZ2lzdGVyTWFwOjppdGVyYXRvciBtYXBJdGVyYXRvciA9
IGVudHJ5Tm9kZVRvUmVnaXN0ZXJNYXAuZmluZChub2RlSW5kZXgpOwotICAgICAgICBpZiAobWFw
SXRlcmF0b3IgIT0gZW50cnlOb2RlVG9SZWdpc3Rlck1hcC5lbmQoKSkgewotICAgICAgICAgICAg
ZnByc1tpbmRleF0uaGFzRnJvbSA9IHRydWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFNo
dWZmbGVkUmVnaXN0ZXIqIG5leHQgPSBTaHVmZmxlZFJlZ2lzdGVyOjpsb29rdXAoZ3BycywgZnBy
cywgbWFwSXRlcmF0b3ItPnNlY29uZCk7Ci0gICAgICAgICAgICBuZXh0LT5wcmV2aW91cyA9IGZw
cnMgKyBpbmRleDsKLSAgICAgICAgICAgIG5leHQtPmhhc1RvID0gdHJ1ZTsKLQotICAgICAgICAg
ICAgaWYgKCFtYXBJdGVyYXRvci0+c2Vjb25kLmZpbmRJbkVudHJ5TG9jYXRpb24oZW50cnkpLmlz
U3BpbGxlZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIElmIHRoZSBub24tc3BlY3VsYXRpdmUgZW50cnkgaXNuJ3QgdXNpbmcgdGhp
cyByZWdpc3RlciBhbmQgaXQgZG9lcyBub3QgbmVlZAotICAgICAgICAgICAgLy8gdGhlIHZhbHVl
IGluIHRoaXMgcmVnaXN0ZXIgdG8gYmUgcGxhY2VkIGludG8gYW55IG90aGVyIHJlZ2lzdGVyLCB0
aGVuIHRoaXMKLSAgICAgICAgICAgIC8vIHJlZ2lzdGVyIGNhbiBiZSB1c2VkIGZvciBzY3JhdGNo
LgotICAgICAgICAgICAgaWYgKGVudHJ5Lm1fZnBySW5mb1tpbmRleF0ubm9kZUluZGV4ID09IE5v
Tm9kZSkgewotICAgICAgICAgICAgICAgIGlmIChzY3JhdGNoRlBSMSA9PSBJbnZhbGlkRlBSUmVn
KQotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoRlBSMSA9IEZQUkluZm86OnRvUmVnaXN0ZXIo
aW5kZXgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjcmF0Y2hGUFIyKQotICAgICAgICAg
ICAgICAgICAgICBzY3JhdGNoRlBSMiA9IEZQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpOwotICAg
ICAgICAgICAgICAgIEFTU0VSVCgoc2NyYXRjaEZQUjEgPT0gSW52YWxpZEZQUlJlZyAmJiBzY3Jh
dGNoRlBSMiA9PSBJbnZhbGlkRlBSUmVnKSB8fCAoc2NyYXRjaEZQUjEgIT0gc2NyYXRjaEZQUjIp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGNoZWNr
Lm1fZnBySW5mb1tpbmRleF0uaXNTcGlsbGVkKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGdyYXBoKClbbm9kZUluZGV4
XS52aXJ0dWFsUmVnaXN0ZXIoKTsKLQotICAgICAgICBtb3ZlRG91YmxlVG9QdHIoRlBSSW5mbzo6
dG9SZWdpc3RlcihpbmRleCksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdWJQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmVQdHIoc2Ny
YXRjaEdQUiwgYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKTsKLSAgICB9Ci0gICAgCi0jaWYg
IUFTU0VSVF9ESVNBQkxFRAotICAgIC8vIEFzc2VydCB0aGF0IHdlJ3ZlIG5vdCBhc3NpZ25lZCBh
IHNjcmF0Y2ggcmVnaXN0ZXIgdG8gc29tZXRoaW5nIHRoYXQgd2UncmUgZ29pbmcgdG8gc2h1ZmZs
ZS4KLSAgICBBU1NFUlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICBpZiAoc2Ny
YXRjaEdQUiAhPSBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpIHsKLSAgICAgICAgQVNTRVJUKCFn
cHJzW0dQUkluZm86OnRvSW5kZXgoc2NyYXRjaEdQUildLmhhc1RvKTsKLSAgICAgICAgQVNTRVJU
KCFncHJzW0dQUkluZm86OnRvSW5kZXgoc2NyYXRjaEdQUildLmhhc0Zyb20pOwotICAgIH0KLSAg
ICBpZiAoc2NyYXRjaEZQUjEgIT0gSW52YWxpZEZQUlJlZykgewotICAgICAgICBBU1NFUlQoc2Ny
YXRjaEZQUjEgIT0gc2NyYXRjaEZQUjIpOwotICAgICAgICBBU1NFUlQoIWZwcnNbRlBSSW5mbzo6
dG9JbmRleChzY3JhdGNoRlBSMSldLmhhc1RvKTsKLSAgICAgICAgQVNTRVJUKCFmcHJzW0ZQUklu
Zm86OnRvSW5kZXgoc2NyYXRjaEZQUjEpXS5oYXNGcm9tKTsKLSAgICAgICAgaWYgKHNjcmF0Y2hG
UFIyICE9IEludmFsaWRGUFJSZWcpIHsKLSAgICAgICAgICAgIEFTU0VSVCghZnByc1tGUFJJbmZv
Ojp0b0luZGV4KHNjcmF0Y2hGUFIyKV0uaGFzVG8pOwotICAgICAgICAgICAgQVNTRVJUKCFmcHJz
W0ZQUkluZm86OnRvSW5kZXgoc2NyYXRjaEZQUjIpXS5oYXNGcm9tKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZQotICAgICAgICBBU1NFUlQoc2NyYXRjaEZQUjIgPT0gSW52YWxpZEZQUlJlZyk7Ci0j
ZW5kaWYKLSAgICAKLSAgICAvLyBQYXJ0IDI6IEZvciB0aGUgc2V0IG9mIG5vZGVzIHRoYXQgYXJl
IGluIHJlZ2lzdGVycyBvbiBib3RoIHBhdGhzLAotICAgIC8vICAgICAgICAgcGVyZm9ybSBhIHNo
dWZmbGluZy4KLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2lu
ZGV4KSB7Ci0gICAgICAgIFNodWZmbGVkUmVnaXN0ZXImIHJlZyA9IGxvb2t1cEZvclJlZ2lzdGVy
KGdwcnMsIGZwcnMsIGluZGV4KTsKLSAgICAgICAgaWYgKCFyZWcuaXNFbmRPZk5vbkN5Y2xpbmdQ
ZXJtdXRhdGlvbigpIHx8IHJlZy5oYW5kbGVkIHx8ICghcmVnLmhhc0Zyb20gJiYgIXJlZy5oYXNU
bykpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIHJlZy5oYW5kbGVO
b25DeWNsaW5nUGVybXV0YXRpb24oY2hlY2ssIGVudHJ5LCAqdGhpcywgc2NyYXRjaEZQUjEsIHNj
cmF0Y2hGUFIyKTsKLSAgICAgICAgQVNTRVJUKChzY3JhdGNoRlBSMSA9PSBJbnZhbGlkRlBSUmVn
ICYmIHNjcmF0Y2hGUFIyID09IEludmFsaWRGUFJSZWcpIHx8IChzY3JhdGNoRlBSMSAhPSBzY3Jh
dGNoRlBSMikpOwotICAgIH0KLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5k
ZXggPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzOyArK2luZGV4KSB7Ci0gICAgICAgIFNodWZmbGVkUmVnaXN0ZXImIHJlZyA9IGxvb2t1cEZv
clJlZ2lzdGVyKGdwcnMsIGZwcnMsIGluZGV4KTsKLSAgICAgICAgaWYgKHJlZy5oYW5kbGVkIHx8
ICghcmVnLmhhc0Zyb20gJiYgIXJlZy5oYXNUbykpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgCi0gICAgICAgIHJlZy5oYW5kbGVDeWNsaW5nUGVybXV0YXRpb24oY2hlY2ssIGVudHJ5
LCAqdGhpcywgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUjEsIHNjcmF0Y2hGUFIyKTsKLSAgICAgICAg
QVNTRVJUKChzY3JhdGNoRlBSMSA9PSBJbnZhbGlkRlBSUmVnICYmIHNjcmF0Y2hGUFIyID09IElu
dmFsaWRGUFJSZWcpIHx8IChzY3JhdGNoRlBSMSAhPSBzY3JhdGNoRlBSMikpOwotICAgIH0KLQot
I2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg
PCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
OyArK2luZGV4KSB7Ci0gICAgICAgIFNodWZmbGVkUmVnaXN0ZXImIHJlZyA9IGxvb2t1cEZvclJl
Z2lzdGVyKGdwcnMsIGZwcnMsIGluZGV4KTsKLSAgICAgICAgQVNTRVJUKHJlZy5oYW5kbGVkIHx8
ICghcmVnLmhhc0Zyb20gJiYgIXJlZy5oYXNUbykpOwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8g
UGFydCAzOiBGaWxsIGFueSB2YWx1ZXMgdGhhdCB3ZXJlIHNwaWxsZWQgb24gc3BlY3VsYXRpdmUs
IGJ1dCBhcmUgbm90IHNwaWxsZWQKLSAgICAvLyAgICAgICAgIG9uIG5vbi1zcGVjdWxhdGl2ZS4K
LQotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IEZQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzOyArK2luZGV4KSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBlbnRy
eS5tX2ZwckluZm9baW5kZXhdLm5vZGVJbmRleDsKLSAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBO
b05vZGUgfHwgZW50cnkubV9mcHJJbmZvW2luZGV4XS5pc1NwaWxsZWQpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIE5vZGVUb1JlZ2lzdGVyTWFwOjppdGVyYXRvciBt
YXBJdGVyYXRvciA9IGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAuZmluZChub2RlSW5kZXgpOwotICAg
ICAgICBpZiAobWFwSXRlcmF0b3IgIT0gY2hlY2tOb2RlVG9SZWdpc3Rlck1hcC5lbmQoKQotICAg
ICAgICAgICAgJiYgIW1hcEl0ZXJhdG9yLT5zZWNvbmQuZmluZEluU3BlY3VsYXRpb25DaGVjayhj
aGVjaykuaXNTcGlsbGVkKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZmlsbE51
bWVyaWNUb0RvdWJsZShub2RlSW5kZXgsIEZQUkluZm86OnRvUmVnaXN0ZXIoaW5kZXgpLCBHUFJJ
bmZvOjpyZWdUMCk7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4
IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraW5kZXgpIHsKLSAgICAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCA9IGVudHJ5Lm1fZ3BySW5mb1tpbmRleF0ubm9kZUluZGV4OwotICAgICAg
ICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSB8fCBlbnRyeS5tX2dwckluZm9baW5kZXhdLmlzU3Bp
bGxlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIE5vZGVUb1JlZ2lzdGVyTWFw
OjppdGVyYXRvciBtYXBJdGVyYXRvciA9IGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAuZmluZChub2Rl
SW5kZXgpOwotICAgICAgICBpZiAobWFwSXRlcmF0b3IgIT0gY2hlY2tOb2RlVG9SZWdpc3Rlck1h
cC5lbmQoKQotICAgICAgICAgICAgJiYgIW1hcEl0ZXJhdG9yLT5zZWNvbmQuZmluZEluU3BlY3Vs
YXRpb25DaGVjayhjaGVjaykuaXNTcGlsbGVkKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgRGF0YUZvcm1hdCBkYXRhRm9ybWF0ID0gZW50cnkubV9ncHJJbmZvW2luZGV4XS5mb3Jt
YXQ7Ci0gICAgICAgIGlmIChkYXRhRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQotICAgICAg
ICAgICAgZmlsbEludDMyVG9JbnRlZ2VyKG5vZGVJbmRleCwgR1BSSW5mbzo6dG9SZWdpc3Rlcihp
bmRleCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChkYXRhRm9ybWF0ICYg
RGF0YUZvcm1hdEpTIHx8IGRhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpOyAvLyBUcmVhdCBj
ZWxsIGFzIEpTVmFsdWUgZm9yIG5vdyEKLSAgICAgICAgICAgIGZpbGxUb0pTKG5vZGVJbmRleCwg
R1BSSW5mbzo6dG9SZWdpc3RlcihpbmRleCkpOwotICAgICAgICAgICAgLy8gRklYTUU6IEZvciBz
dWJ0eXBlcyBvZiBEYXRhRm9ybWF0SlMsIHNob3VsZCBqaXRBc3NlcnQgdGhlIHN1YnR5cGU/Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKG5lZWRUb1Jlc3RvcmVUYWdNYXNrUmVnaXN0
ZXIpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihU
YWdNYXNrKSksIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0KLSAgICAvLyBKdW1wIGludG8g
dGhlIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgotICAgIGp1bXAoZW50cnkubV9lbnRyeSk7Ci19Ci0K
LXZvaWQgSklUQ29tcGlsZXI6OmxpbmtTcGVjdWxhdGlvbkNoZWNrcyhTcGVjdWxhdGl2ZUpJVCYg
c3BlY3VsYXRpdmUsIE5vblNwZWN1bGF0aXZlSklUJiBub25TcGVjdWxhdGl2ZSkKLXsKLSAgICAv
LyBJdGVyYXRvcnMgdG8gd2FsayBvdmVyIHRoZSBzZXQgb2YgYmFpbCBvdXRzICYgY29ycmVzcG9u
ZGluZyBlbnRyeSBwb2ludHMuCi0gICAgU3BlY3VsYXRpb25DaGVja1ZlY3Rvcjo6SXRlcmF0b3Ig
Y2hlY2tzSXRlciA9IHNwZWN1bGF0aXZlLnNwZWN1bGF0aW9uQ2hlY2tzKCkuYmVnaW4oKTsKLSAg
ICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOjpJdGVyYXRvciBjaGVja3NFbmQgPSBzcGVjdWxhdGl2
ZS5zcGVjdWxhdGlvbkNoZWNrcygpLmVuZCgpOwotICAgIE5vblNwZWN1bGF0aXZlSklUOjpFbnRy
eUxvY2F0aW9uVmVjdG9yOjpJdGVyYXRvciBlbnRyaWVzSXRlciA9IG5vblNwZWN1bGF0aXZlLmVu
dHJ5TG9jYXRpb25zKCkuYmVnaW4oKTsKLSAgICBOb25TcGVjdWxhdGl2ZUpJVDo6RW50cnlMb2Nh
dGlvblZlY3Rvcjo6SXRlcmF0b3IgZW50cmllc0VuZCA9IG5vblNwZWN1bGF0aXZlLmVudHJ5TG9j
YXRpb25zKCkuZW5kKCk7Ci0gICAgCi0gICAgTm9kZVRvUmVnaXN0ZXJNYXAgY2hlY2tOb2RlVG9S
ZWdpc3Rlck1hcDsKLSAgICBOb2RlVG9SZWdpc3Rlck1hcCBlbnRyeU5vZGVUb1JlZ2lzdGVyTWFw
OwotICAgIAotICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgc3BlY3VsYXRpb24gY2hlY2tzLgotICAg
IHdoaWxlIChjaGVja3NJdGVyICE9IGNoZWNrc0VuZCkgewotICAgICAgICAvLyBGb3IgZXZlcnkg
YmFpbCBvdXQgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aCwgd2UgbXVzdCBoYXZlIHByb3ZpZGVk
IGFuIGVudHJ5IHBvaW50Ci0gICAgICAgIC8vIGludG8gdGhlIG5vbi1zcGVjdWxhdGl2ZSBvbmUu
Ci0gICAgICAgIEFTU0VSVChjaGVja3NJdGVyLT5tX25vZGVJbmRleCA9PSBlbnRyaWVzSXRlci0+
bV9ub2RlSW5kZXgpOwotCi0gICAgICAgIC8vIFRoZXJlIG1heSBiZSBtdWx0aXBsZSBiYWlsIG91
dHMgdGhhdCBtYXAgdG8gdGhlIHNhbWUgZW50cnkgcG9pbnQhCi0gICAgICAgIGRvIHsKLSAgICAg
ICAgICAgIEFTU0VSVChjaGVja3NJdGVyICE9IGNoZWNrc0VuZCk7Ci0gICAgICAgICAgICBBU1NF
UlQoZW50cmllc0l0ZXIgIT0gZW50cmllc0VuZCk7Ci0KLSAgICAgICAgICAgIC8vIFBsYW50IGNv
ZGUgdG8gbGluayB0aGlzIHNwZWN1bGF0aW9uIGZhaWx1cmUuCi0gICAgICAgICAgICBjb25zdCBT
cGVjdWxhdGlvbkNoZWNrJiBjaGVjayA9ICpjaGVja3NJdGVyOwotICAgICAgICAgICAgY29uc3Qg
RW50cnlMb2NhdGlvbiYgZW50cnkgPSAqZW50cmllc0l0ZXI7Ci0gICAgICAgICAgICBqdW1wRnJv
bVNwZWN1bGF0aXZlVG9Ob25TcGVjdWxhdGl2ZShjaGVjaywgZW50cnksIHNwZWN1bGF0aXZlLnNw
ZWN1bGF0aW9uUmVjb3ZlcnkoY2hlY2subV9yZWNvdmVyeUluZGV4KSwgY2hlY2tOb2RlVG9SZWdp
c3Rlck1hcCwgZW50cnlOb2RlVG9SZWdpc3Rlck1hcCk7Ci0gICAgICAgICAgICAgKytjaGVja3NJ
dGVyOwotICAgICAgICB9IHdoaWxlIChjaGVja3NJdGVyICE9IGNoZWNrc0VuZCAmJiBjaGVja3NJ
dGVyLT5tX25vZGVJbmRleCA9PSBlbnRyaWVzSXRlci0+bV9ub2RlSW5kZXgpOwotICAgICAgICAg
KytlbnRyaWVzSXRlcjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU2Mjg5Ci0gICAgQVNTRVJUKCEoY2hlY2tzSXRlciAhPSBj
aGVja3NFbmQpKTsKLSAgICBBU1NFUlQoIShlbnRyaWVzSXRlciAhPSBlbnRyaWVzRW5kKSk7Ci19
Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19PU1JfRVhJVCkKIAogdm9pZCBKSVRDb21waWxlcjo6Y29t
cGlsZUVudHJ5KCkKIHsKQEAgLTExOTcsNjIgKzQ4NSwyNCBAQCB2b2lkIEpJVENvbXBpbGVyOjpj
b21waWxlRW50cnkoKQogCiB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlQm9keSgpCiB7Ci0gICAg
Ly8gV2UgZ2VuZXJhdGUgdGhlIHNwZWN1bGF0aXZlIGNvZGUgcGF0aCwgZm9sbG93ZWQgYnkgdGhl
IG5vbi1zcGVjdWxhdGl2ZQotICAgIC8vIGNvZGUgZm9yIHRoZSBmdW5jdGlvbi4gTmV4dCB3ZSBu
ZWVkIHRvIGxpbmsgdGhlIHR3byB0b2dldGhlciwgbWFraW5nCi0gICAgLy8gYmFpbC1vdXRzIGZy
b20gdGhlIHNwZWN1bGF0aXZlIHBhdGgganVtcCB0byB0aGUgY29ycmVzcG9uZGluZyBwb2ludCBv
bgotICAgIC8vIHRoZSBub24tc3BlY3VsYXRpdmUgb25lIChhbmQgZ2VuZXJhdGluZyBhbnkgY29k
ZSBuZWNlc3NhcnkgdG8ganVnZ2xlCi0gICAgLy8gcmVnaXN0ZXIgdmFsdWVzIGFyb3VuZCwgcmVi
b3ggdmFsdWVzLCBhbmQgZW5zdXJlIHNwaWxsZWQsIHRvIG1hdGNoIHRoZQotICAgIC8vIG5vbi1z
cGVjdWxhdGl2ZSBwYXRoJ3MgcmVxdWlyZW1lbnRzKS4KKyAgICAvLyBXZSBnZW5lcmF0ZSB0aGUg
c3BlY3VsYXRpdmUgY29kZSBwYXRoLCBmb2xsb3dlZCBieSBPU1IgZXhpdCBjb2RlIHRvIHJldHVy
bgorICAgIC8vIHRvIHRoZSBvbGQgSklUIGNvZGUgaWYgc3BlY3VsYXRpb25zIGZhaWwuCiAKICNp
ZiBFTkFCTEUoREZHX0pJVF9CUkVBS19PTl9FVkVSWV9GVU5DVElPTikKICAgICAvLyBIYW5keSBk
ZWJ1ZyB0b29sIQogICAgIGJyZWFrcG9pbnQoKTsKICNlbmRpZgogCi0gICAgLy8gRmlyc3QgZ2Vu
ZXJhdGUgdGhlIHNwZWN1bGF0aXZlIHBhdGguCiAgICAgTGFiZWwgc3BlY3VsYXRpdmVQYXRoQmVn
aW4gPSBsYWJlbCgpOwogICAgIFNwZWN1bGF0aXZlSklUIHNwZWN1bGF0aXZlKCp0aGlzKTsKLSNp
ZiAhRU5BQkxFKERGR19ERUJVR19MT0NBTF9ESVNCQUxFX1NQRUNVTEFUSVZFKQogICAgIGJvb2wg
Y29tcGlsZWRTcGVjdWxhdGl2ZSA9IHNwZWN1bGF0aXZlLmNvbXBpbGUoKTsKLSNlbHNlCi0gICAg
Ym9vbCBjb21waWxlZFNwZWN1bGF0aXZlID0gZmFsc2U7Ci0jZW5kaWYKKyAgICBBU1NFUlRfVU5V
U0VEKGNvbXBpbGVkU3BlY3VsYXRpdmUsIGNvbXBpbGVkU3BlY3VsYXRpdmUpOwogCi0gICAgLy8g
TmV4dCwgZ2VuZXJhdGUgdGhlIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLiBXZSBwYXNzIHRoaXMgYSBT
cGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvcgotICAgIC8vIHRvIGFsbG93IGl0IHRvIGNoZWNr
IHdoaWNoIG5vZGVzIGluIHRoZSBncmFwaCBtYXkgYmFpbCBvdXQsIGFuZCBtYXkgbmVlZCB0byBy
ZWVudGVyIHRoZQotICAgIC8vIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgotICAgIGlmIChjb21waWxl
ZFNwZWN1bGF0aXZlKSB7CiAjaWYgRU5BQkxFKERGR19PU1JfRU5UUlkpCi0gICAgICAgIG1fY29k
ZUJsb2NrLT5zZXRKSVRDb2RlTWFwKG1faml0Q29kZU1hcEVuY29kZXIuZmluaXNoKCkpOwotI2Vu
ZGlmCi0gICAgICAgIAotI2lmIEVOQUJMRShERkdfT1NSX0VYSVQpCi0gICAgICAgIGxpbmtPU1JF
eGl0cyhzcGVjdWxhdGl2ZSk7Ci0jZWxzZQotICAgICAgICBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJ
dGVyYXRvciBjaGVja0l0ZXJhdG9yKHNwZWN1bGF0aXZlLnNwZWN1bGF0aW9uQ2hlY2tzKCkpOwot
ICAgICAgICBOb25TcGVjdWxhdGl2ZUpJVCBub25TcGVjdWxhdGl2ZSgqdGhpcyk7Ci0gICAgICAg
IG5vblNwZWN1bGF0aXZlLmNvbXBpbGUoY2hlY2tJdGVyYXRvcik7Ci0KLSAgICAgICAgLy8gTGlu
ayB0aGUgYmFpbC1vdXRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGggdG8gdGhlIGNvcnJlc3Bv
bmRpbmcgZW50cnkgcG9pbnRzIGludG8gdGhlIG5vbi1zcGVjdWxhdGl2ZSBvbmUuCi0gICAgICAg
IGxpbmtTcGVjdWxhdGlvbkNoZWNrcyhzcGVjdWxhdGl2ZSwgbm9uU3BlY3VsYXRpdmUpOworICAg
IG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKG1faml0Q29kZU1hcEVuY29kZXIuZmluaXNoKCkp
OwogI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgY29tcGlsYXRpb24gdGhyb3Vn
aCB0aGUgU3BlY3VsYXRpdmVKSVQgZmFpbGVkLCB0aHJvdyBhd2F5IHRoZSBjb2RlIHdlIGdlbmVy
YXRlZC4KLSAgICAgICAgbV9jYWxscy5jbGVhcigpOwotICAgICAgICBtX3Byb3BlcnR5QWNjZXNz
ZXMuY2xlYXIoKTsKLSAgICAgICAgbV9qc0NhbGxzLmNsZWFyKCk7Ci0gICAgICAgIG1fbWV0aG9k
R2V0cy5jbGVhcigpOwotICAgICAgICByZXdpbmRUb0xhYmVsKHNwZWN1bGF0aXZlUGF0aEJlZ2lu
KTsKLQotI2lmIEVOQUJMRShERkdfT1NSX0VYSVQpCi0gICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tJ
bmRleEl0ZXJhdG9yIGNoZWNrSXRlcmF0b3I7Ci0jZWxzZQotICAgICAgICBTcGVjdWxhdGlvbkNo
ZWNrVmVjdG9yIG5vQ2hlY2tzOwotICAgICAgICBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRv
ciBjaGVja0l0ZXJhdG9yKG5vQ2hlY2tzKTsKLSNlbmRpZgotICAgICAgICBOb25TcGVjdWxhdGl2
ZUpJVCBub25TcGVjdWxhdGl2ZSgqdGhpcyk7Ci0gICAgICAgIG5vblNwZWN1bGF0aXZlLmNvbXBp
bGUoY2hlY2tJdGVyYXRvcik7Ci0gICAgfQorICAgIAorICAgIGxpbmtPU1JFeGl0cyhzcGVjdWxh
dGl2ZSk7CiAKICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIG1fY2FsbHMgdmVjdG9yLCBjaGVja2lu
ZyBmb3IgZXhjZXB0aW9uIGNoZWNrcywKICAgICAvLyBhbmQgbGlua2luZyB0aGVtIHRvIGhlcmUu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZp
c2lvbiA5NTIzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTIgKzQ3LDEwIEBAIG5hbWVzcGFjZSBERkcgewogCiBj
bGFzcyBKSVRDb2RlR2VuZXJhdG9yOwogY2xhc3MgTm9kZVRvUmVnaXN0ZXJNYXA7Ci1jbGFzcyBO
b25TcGVjdWxhdGl2ZUpJVDsKIGNsYXNzIFNwZWN1bGF0aXZlSklUOwogY2xhc3MgU3BlY3VsYXRp
b25SZWNvdmVyeTsKIAogc3RydWN0IEVudHJ5TG9jYXRpb247Ci1zdHJ1Y3QgU3BlY3VsYXRpb25D
aGVjazsKIHN0cnVjdCBPU1JFeGl0OwogCiAjaWZuZGVmIE5ERUJVRwpAQCAtMzM0LDEzICszMzIs
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgZmlsbEludDMyVG9JbnRlZ2VyKE5vZGVJbmRleCwgR1BS
UmVnKTsKICAgICB2b2lkIGZpbGxUb0pTKE5vZGVJbmRleCwgR1BSUmVnKTsKICAgICAKLSNpZiBF
TkFCTEUoREZHX09TUl9FWElUKQogICAgIHZvaWQgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25z
dCBPU1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSosIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCk7CiAgICAgdm9pZCBsaW5rT1NSRXhpdHMoU3BlY3Vs
YXRpdmVKSVQmKTsKLSNlbHNlCi0gICAgdm9pZCBqdW1wRnJvbVNwZWN1bGF0aXZlVG9Ob25TcGVj
dWxhdGl2ZShjb25zdCBTcGVjdWxhdGlvbkNoZWNrJiwgY29uc3QgRW50cnlMb2NhdGlvbiYsIFNw
ZWN1bGF0aW9uUmVjb3ZlcnkqLCBOb2RlVG9SZWdpc3Rlck1hcCYgY2hlY2tOb2RlVG9SZWdpc3Rl
ck1hcCwgTm9kZVRvUmVnaXN0ZXJNYXAmIGVudHJ5Tm9kZVRvUmVnaXN0ZXJNYXApOwotICAgIHZv
aWQgbGlua1NwZWN1bGF0aW9uQ2hlY2tzKFNwZWN1bGF0aXZlSklUJiwgTm9uU3BlY3VsYXRpdmVK
SVQmKTsKLSNlbmRpZgogCiAgICAgLy8gVGhlIGdsb2JhbERhdGEsIHVzZWQgdG8gYWNjZXNzIGNv
bnN0YW50cyBzdWNoIGFzIHRoZSB2UHRycy4KICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0
YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NTIzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MywxMiArNTMsOCBAQAogI2RlZmluZSBFTkFCTEVfREZHX1ZFUkJPU0VfU1BFQ1VMQVRJT05f
RkFJTFVSRSAwCiAvLyBEaXNhYmxlIHRoZSBERkcgSklUIHdpdGhvdXQgaGF2aW5nIHRvIHRvdWNo
IFBsYXRmb3JtLmghCiAjZGVmaW5lIERGR19ERUJVR19MT0NBTF9ESVNCQUxFIDAKLS8vIERpc2Fi
bGUgdGhlIFNwZWN1bGF0aXZlSklUIHdpdGhvdXQgaGF2aW5nIHRvIHRvdWNoIFBsYXRmb3JtLmgh
Ci0jZGVmaW5lIERGR19ERUJVR19MT0NBTF9ESVNCQUxFX1NQRUNVTEFUSVZFIDAKIC8vIEVuYWJs
ZSBPU1IgZW50cnkgZnJvbSBiYXNlbGluZSBKSVQuCi0jZGVmaW5lIEVOQUJMRV9ERkdfT1NSX0VO
VFJZIEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04KLS8vIERpc2FibGUgdGhlIG5vbi1zcGVjdWxh
dGl2ZSBKSVQgYW5kIHVzZSBPU1IgaW5zdGVhZC4KLSNkZWZpbmUgRU5BQkxFX0RGR19PU1JfRVhJ
VCBFTkFCTEVfVElFUkVEX0NPTVBJTEFUSU9OCisjZGVmaW5lIEVOQUJMRV9ERkdfT1NSX0VOVFJZ
IEVOQUJMRV9ERkdfSklUCiAvLyBHZW5lcmF0ZSBzdGF0cyBvbiBob3cgc3VjY2Vzc2Z1bCB3ZSB3
ZXJlIGluIG1ha2luZyB1c2Ugb2YgdGhlIERGRyBqaXQsIGFuZCByZW1haW5pbmcgb24gdGhlIGhv
dCBwYXRoLgogI2RlZmluZSBFTkFCTEVfREZHX1NVQ0NFU1NfU1RBVFMgMAogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gOTUyMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1
bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2MzggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiREZHTm9uU3BlY3VsYXRpdmVKSVQuaCIKLQotI2luY2x1ZGUgIkRGR1NwZWN1
bGF0aXZlSklULmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewotCi1FbnRyeUxvY2F0aW9uOjpFbnRyeUxvY2F0aW9uKE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBlbnRyeSwgTm9uU3BlY3VsYXRpdmVKSVQqIGppdCkKLSAgICA6IG1fZW50cnko
ZW50cnkpCi0gICAgLCBtX25vZGVJbmRleChqaXQtPm1fY29tcGlsZUluZGV4KQotewotICAgIGZv
ciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBqaXQtPm1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IGppdC0+
bV9ncHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFs
aWRWaXJ0dWFsUmVnaXN0ZXIpIHsKLSAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
IGppdC0+bV9nZW5lcmF0aW9uSW5mb1tpdGVyLm5hbWUoKV07Ci0gICAgICAgICAgICBtX2dwcklu
Zm9baXRlci5pbmRleCgpXS5ub2RlSW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwotICAgICAgICAg
ICAgbV9ncHJJbmZvW2l0ZXIuaW5kZXgoKV0uZm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgp
OwotICAgICAgICAgICAgQVNTRVJUKG1fZ3BySW5mb1tpdGVyLmluZGV4KCldLmZvcm1hdCAhPSBE
YXRhRm9ybWF0Tm9uZSk7Ci0gICAgICAgICAgICBtX2dwckluZm9baXRlci5pbmRleCgpXS5pc1Nw
aWxsZWQgPSBpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmU7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgbV9ncHJJbmZvW2l0ZXIuaW5kZXgoKV0ubm9kZUluZGV4ID0gTm9O
b2RlOwotICAgIH0KLSAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gaml0LT5tX2ZwcnMuYmVn
aW4oKTsgaXRlciAhPSBqaXQtPm1fZnBycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChp
dGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSB7Ci0gICAgICAgICAgICBHZW5l
cmF0aW9uSW5mbyYgaW5mbyA9ICBqaXQtPm1fZ2VuZXJhdGlvbkluZm9baXRlci5uYW1lKCldOwot
ICAgICAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91
YmxlKTsKLSAgICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmluZGV4KCldLm5vZGVJbmRleCA9IGlu
Zm8ubm9kZUluZGV4KCk7Ci0gICAgICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgpXS5mb3Jt
YXQgPSBEYXRhRm9ybWF0RG91YmxlOwotICAgICAgICAgICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgo
KV0uaXNTcGlsbGVkID0gaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmluZGV4KCldLm5vZGVJbmRl
eCA9IE5vTm9kZTsKLSAgICB9Ci19Ci0KLXZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
U3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3ImIGNoZWNrSXRlcmF0b3IsIE5vZGUmIG5vZGUp
Ci17Ci0jaWYgRU5BQkxFKERGR19PU1JfRVhJVCkKLSAgICBVTlVTRURfUEFSQU0oY2hlY2tJdGVy
YXRvcik7Ci0jZWxzZQotICAgIC8vIENoZWNrIGZvciBzcGVjdWxhdGlvbiBjaGVja3MgZnJvbSB0
aGUgY29ycmVzcG9uZGluZyBpbnN0cnVjdGlvbiBpbiB0aGUKLSAgICAvLyBzcGVjdWxhdGl2ZSBw
YXRoLiBEbyBub3QgY2hlY2sgZm9yIE5vZGVJbmRleCAwLCBzaW5jZSB0aGlzIGlzIGNoZWNrZWQK
LSAgICAvLyBpbiB0aGUgb3V0ZXJtb3N0IGNvbXBpbGUgbGF5ZXIsIGF0IHRoZSBoZWFkIG9mIHRo
ZSBub24tc3BlY3VsYXRpdmUgcGF0aAotICAgIC8vIChmb3IgaW5kZXggMCB3ZSBtYXkgbmVlZCB0
byBjaGVjayByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHRoZSBub2RlCi0gICAgLy8gd2ls
bCBiZSBnZW5lcmF0ZWQsIHNpbmNlIGFyZ3VtZW50IHR5cGUgc3BlY3VsYXRpb24gY2hlY2tzIHdp
bGwgYXBwZWFyCi0gICAgLy8gYXMgc3BlY3VsYXRpb24gY2hlY2tzIGF0IHRoaXMgaW5kZXgpLgot
ICAgIGlmIChtX2NvbXBpbGVJbmRleCAmJiBjaGVja0l0ZXJhdG9yLmhhc0NoZWNrQXRJbmRleCht
X2NvbXBpbGVJbmRleCkpCi0gICAgICAgIHRyYWNrRW50cnkobV9qaXQubGFiZWwoKSk7Ci0jZW5k
aWYKLQotICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcDsKLQotICAgIHN3aXRjaCAob3ApIHsKLSAg
ICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIHRoaXNHUFIgPSB0aGlzVmFsdWUu
Z3ByKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0KLSAgICAgICAgR1BSUmVzdWx0IHJl
c3VsdCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0VGhpcywg
cmVzdWx0LmdwcigpLCB0aGlzR1BSKTsKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBKU0Nv
bnN0YW50OgotICAgICAgICBpbml0Q29uc3RhbnRJbmZvKG1fY29tcGlsZUluZGV4KTsKLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3Iobm9kZS5sb2NhbCgpKSwgcmVzdWx0LmdwcigpKTsKLQotICAgICAgICAvLyBMaWtlIGpzVmFs
dWVSZXN1bHQsIGJ1dCBkb24ndCB1c2VDaGlsZHJlbiAtIG91ciBjaGlsZHJlbiBhcmUgcGhpIG5v
ZGVzLAotICAgICAgICAvLyBhbmQgZG9uJ3QgcmVwcmVzZW50IHZhbHVlcyB3aXRoaW4gdGhpcyBk
YXRhZmxvdyB3aXRoIHZpcnR1YWwgcmVnaXN0ZXJzLgotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgbV9ncHJz
LnJldGFpbihyZXN1bHQuZ3ByKCksIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKLSAg
ICAgICAgbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXRKU1ZhbHVlKG1fY29t
cGlsZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJlc3VsdC5ncHIoKSwgRGF0YUZvcm1hdEpTKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgbV9qaXQu
c3RvcmVQdHIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwo
KSkpOwotICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIGNhc2UgQml0QW5kOgotICAgIGNhc2UgQml0T3I6Ci0gICAgY2FzZSBCaXRY
b3I6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKLSAgICAg
ICAgICAgIEludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AyKTsKLQotICAgICAgICAgICAgYml0T3Ao
b3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpLCBvcDIuZ3ByKCksIHJlc3Vs
dC5ncHIoKSk7Ci0KLSAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hp
bGQyKCkpKSB7Ci0gICAgICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEoKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0KLSAg
ICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSwg
b3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotCi0gICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAg
SW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7Ci0KLSAgICAgICAgICAgIEdQUlJlZyBy
ZWcxID0gb3AxLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlZzIgPSBvcDIuZ3ByKCk7Ci0g
ICAgICAgICAgICBiaXRPcChvcCwgcmVnMSwgcmVnMiwgcmVzdWx0LmdwcigpKTsKLQotICAgICAg
ICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQml0UlNoaWZ0OgotICAgIGNhc2UgQml0
TFNoaWZ0OgotICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMigpKSkgewotICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEpOwotCi0gICAgICAgICAgICBpbnQgc2hpZnRBbW91bnQgPSB2YWx1ZU9mSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMigpKSAmIDB4MWY7Ci0gICAgICAgICAgICAvLyBTaGlmdHMgYnkgemVybyBz
aG91bGQgaGF2ZSBiZWVuIG9wdGltaXplZCBvdXQgb2YgdGhlIGdyYXBoIQotICAgICAgICAgICAg
QVNTRVJUKHNoaWZ0QW1vdW50KTsKLSAgICAgICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5ncHIoKSwg
c2hpZnRBbW91bnQsIHJlc3VsdC5ncHIoKSk7Ci0KLSAgICAgICAgICAgIGludGVnZXJSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAvLyBEbyBub3QgYWxsb3cgc2hpZnQgYW1vdW50IHRvIGJlIHVzZWQgYXMgdGhlIHJlc3Vs
dCwgTWFjcm9Bc3NlbWJsZXIgZG9lcyBub3QgcGVybWl0IHRoaXMuCi0gICAgICAgICAgICBJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBJbnRlZ2Vy
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0KLSAgICAgICAgICAgIEdQUlJlZyByZWcxID0gb3AxLmdw
cigpOwotICAgICAgICAgICAgR1BSUmVnIHJlZzIgPSBvcDIuZ3ByKCk7Ci0gICAgICAgICAgICBz
aGlmdE9wKG9wLCByZWcxLCByZWcyLCByZXN1bHQuZ3ByKCkpOwotCi0gICAgICAgICAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBVSW50MzJUb051bWJlcjogewotICAgICAgICBub25TcGVj
dWxhdGl2ZVVJbnQzMlRvTnVtYmVyKG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBjYXNlIFZhbHVlVG9JbnQzMjogewotICAgICAgICBub25TcGVjdWxhdGl2ZVZhbHVlVG9JbnQz
Mihub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBWYWx1ZVRvTnVtYmVy
OgotICAgIGNhc2UgVmFsdWVUb0RvdWJsZTogewotICAgICAgICBub25TcGVjdWxhdGl2ZVZhbHVl
VG9OdW1iZXIobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgVmFsdWVB
ZGQ6Ci0gICAgY2FzZSBBcml0aEFkZDogewotICAgICAgICBub25TcGVjdWxhdGl2ZUFkZChvcCwg
bm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBBcml0aFN1
YjogewotICAgICAgICBub25TcGVjdWxhdGl2ZUFyaXRoU3ViKG5vZGUpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBjYXNlIEFyaXRoTXVsOiB7Ci0gICAgICAgIG5vblNwZWN1bGF0aXZl
QmFzaWNBcml0aE9wKEFyaXRoTXVsLCBub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgY2FzZSBBcml0aERpdjogewotICAgICAgICBEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKLSAgICAgICAgRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIo
KSk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAgRlBS
UmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKLSAgICAgICAgRlBSUmVnIG9wMkZQUiA9IG9wMi5mcHIo
KTsKLSAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKLSAgICAgICAgCi0g
ICAgICAgIG1faml0LmRpdkRvdWJsZShvcDFGUFIsIG9wMkZQUiwgcmVzdWx0RlBSKTsKLSAgICAg
ICAgCi0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRGUFIsIG1fY29tcGlsZUluZGV4KTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICBub25T
cGVjdWxhdGl2ZUFyaXRoTW9kKG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBj
YXNlIExvZ2ljYWxOb3Q6IHsKLSAgICAgICAgbm9uU3BlY3VsYXRpdmVMb2dpY2FsTm90KG5vZGUp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIENvbXBhcmVMZXNzOgotICAgICAg
ICBpZiAobm9uU3BlY3VsYXRpdmVDb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biwgb3BlcmF0aW9uQ29tcGFyZUxlc3MpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBi
cmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAgICBpZiAobm9u
U3BlY3VsYXRpdmVDb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWws
IG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBi
cmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAgaWYgKG5v
blNwZWN1bGF0aXZlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW4sIG9w
ZXJhdGlvbkNvbXBhcmVHcmVhdGVyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICAgIAotICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICAgICAgaWYgKG5v
blNwZWN1bGF0aXZlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVx
dWFsLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlckVxKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgQ29tcGFyZUVxOgotICAgICAgICBpZiAo
aXNOdWxsQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgICAgIGlmIChub25TcGVj
dWxhdGl2ZUNvbXBhcmVOdWxsKG5vZGUsIG5vZGUuY2hpbGQyKCkpKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc051
bGxDb25zdGFudChub2RlLmNoaWxkMigpKSkgewotICAgICAgICAgICAgaWYgKG5vblNwZWN1bGF0
aXZlQ29tcGFyZU51bGwobm9kZSwgbm9kZS5jaGlsZDEoKSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG5vblNwZWN1
bGF0aXZlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9wZXJhdGlvbkNvbXBh
cmVFcSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBD
b21wYXJlU3RyaWN0RXE6Ci0gICAgICAgIGlmIChub25TcGVjdWxhdGl2ZVN0cmljdEVxKG5vZGUp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgR2V0QnlW
YWw6IHsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGQzKCkgIT0gTm9Ob2RlKQotICAgICAgICAgICAg
dXNlKG5vZGUuY2hpbGQzKCkpOwotICAgICAgICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHko
dGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0KLSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhp
cyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBjbGVhbkluZGV4KHRoaXMpOwotCi0gICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
cHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIo
KTsKLSAgICAgICAgR1BSUmVnIGNsZWFuSW5kZXhHUFIgPSBjbGVhbkluZGV4LmdwcigpOwotICAg
ICAgICAKLSAgICAgICAgYmFzZS51c2UoKTsKLSAgICAgICAgcHJvcGVydHkudXNlKCk7Ci0KLSAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgYmFzZU5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpOwotCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHByb3BlcnR5Tm90SW50ID0gbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlHUFIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBhcnJheSBzdG9yYWdl
LiBXZSBoYXZlbid0IHlldCBjaGVja2VkIHRoaXMgaXMgYSBKU0FycmF5LCBzbyB0aGlzIGlzIG9u
bHkgc2FmZSBpZgotICAgICAgICAvLyBhbiBhY2Nlc3Mgd2l0aCBvZmZzZXQgSlNBcnJheTo6c3Rv
cmFnZU9mZnNldCgpIGlzIHZhbGlkIGZvciBhbGwgSlNDZWxscyEKLSAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zm
c2V0KCkpLCBzdG9yYWdlR1BSKTsKLQotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBiYXNlTm90
QXJyYXkgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpOwotCi0gICAgICAgIG1faml0Lnplcm9F
eHRlbmQzMlRvUHRyKHByb3BlcnR5R1BSLCBjbGVhbkluZGV4R1BSKTsKLQotICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIGNsZWFuSW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0KLSAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIGNsZWFuSW5kZXhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pKSwgc3RvcmFnZUdQUik7Ci0KLSAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbG9hZEZhaWxlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHN0b3JhZ2VHUFIpOwotCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5q
dW1wKCk7Ci0KLSAgICAgICAgYmFzZU5vdENlbGwubGluaygmbV9qaXQpOwotICAgICAgICBwcm9w
ZXJ0eU5vdEludC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGJhc2VOb3RBcnJheS5saW5rKCZtX2pp
dCk7Ci0gICAgICAgIG91dE9mQm91bmRzLmxpbmsoJm1faml0KTsKLSAgICAgICAgbG9hZEZhaWxl
ZC5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoc3RvcmFn
ZUdQUik7Ci0gICAgICAgIHNldHVwU3R1YkFyZ3VtZW50cyhiYXNlR1BSLCBwcm9wZXJ0eUdQUik7
Ci0gICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uR2V0QnlWYWwpOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBzdG9yYWdlR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhzdG9yYWdl
R1BSKTsKLQotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLQotICAgICAgICBqc1ZhbHVlUmVz
dWx0KHN0b3JhZ2VHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFB1dEJ5VmFsOgotICAgIGNh
c2UgUHV0QnlWYWxBbGlhczogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGls
ZDMoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwotICAgICAgICBHUFJU
ZW1wb3JhcnkgY2xlYW5JbmRleCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOwotICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzdG9y
YWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGNsZWFuSW5kZXhHUFIgPSBj
bGVhbkluZGV4LmdwcigpOwotICAgICAgICAKLSAgICAgICAgYmFzZS51c2UoKTsKLSAgICAgICAg
cHJvcGVydHkudXNlKCk7Ci0gICAgICAgIHZhbHVlLnVzZSgpOwotICAgICAgICAKLSAgICAgICAg
d3JpdGVCYXJyaWVyKG1faml0LCBiYXNlR1BSLCBzdG9yYWdlR1BSLCBXcml0ZUJhcnJpZXJGb3JQ
cm9wZXJ0eUFjY2Vzcyk7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBiYXNl
Tm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGJh
c2VHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0KLSAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgcHJvcGVydHlOb3RJbnQgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBwcm9wZXJ0eUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLQotICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJy
YXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwotCi0gICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIGJhc2VOb3RBcnJheSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSk7Ci0KLSAgICAg
ICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIocHJvcGVydHlHUFIsIGNsZWFuSW5kZXhHUFIpOwot
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgY2xlYW5JbmRleEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAg
ICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9IG1faml0LmJy
YW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZUdQUiwgY2xlYW5JbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRy
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLSAgICAgICAg
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBjbGVhbkluZGV4R1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX2xlbmd0aCkpKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgY2xlYW5JbmRleEdQUik7Ci0gICAgICAgIG1faml0LnN0b3JlMzIoY2xlYW5JbmRleEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7Ci0gICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRy
KHByb3BlcnR5R1BSLCBjbGVhbkluZGV4R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGxlbmd0aERv
ZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKLSAgICAgICAgbm90SG9sZVZhbHVlLmxpbmso
Jm1faml0KTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIGNsZWFuSW5kZXhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSk7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQu
anVtcCgpOwotICAgICAgICAKLSAgICAgICAgYmFzZU5vdENlbGwubGluaygmbV9qaXQpOwotICAg
ICAgICBwcm9wZXJ0eU5vdEludC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGJhc2VOb3RBcnJheS5s
aW5rKCZtX2ppdCk7Ci0gICAgICAgIG91dE9mQm91bmRzLmxpbmsoJm1faml0KTsKLSAgICAgICAg
Ci0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwotICAgICAg
ICBzZXR1cFN0dWJBcmd1bWVudHMoYmFzZUdQUiwgcHJvcGVydHlHUFIsIHZhbHVlR1BSKTsKLSAg
ICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2Rl
KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
KTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKLSAgICAg
ICAgCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotCi0gICAgICAgIG5vUmVzdWx0KG1fY29t
cGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBjYXNlIEdldEJ5SWQ6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwotICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UjsKLSAgICAgICAgCi0gICAgICAgIGlmIChyZXN1bHRHUFIgPT0gYmFzZUdQUikKLSAgICAgICAg
ICAgIHNjcmF0Y2hHUFIgPSB0cnlBbGxvY2F0ZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzY3JhdGNoR1BSID0gcmVzdWx0R1BSOwotICAgICAgICAKLSAgICAgICAgYmFzZS51c2UoKTsK
LQotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKTsKLQotICAgICAgICBjYWNoZWRHZXRCeUlkKGJhc2VHUFIsIHJlc3VsdEdQUiwgc2NyYXRj
aEdQUiwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwpOwotCi0gICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBHZXRNZXRob2Q6IHsK
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIGJhc2UpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsKLSAgICAgICAgaWYgKHJlc3VsdEdQUiA9PSBi
YXNlR1BSKQotICAgICAgICAgICAgc2NyYXRjaEdQUiA9IHRyeUFsbG9jYXRlKCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSByZXN1bHRHUFI7Ci0gICAgICAgIAotICAg
ICAgICBiYXNlLnVzZSgpOwotCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotCi0gICAgICAgIGNhY2hlZEdldE1ldGhvZChiYXNlR1BS
LCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIG5vZGUuaWRlbnRpZmllck51bWJlcigpLCBub3RDZWxs
KTsKLQotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVz
ZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IGNhc2UgUHV0QnlJZDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxk
MigpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSAgICAg
ICAgCi0gICAgICAgIGJhc2UudXNlKCk7Ci0gICAgICAgIHZhbHVlLnVzZSgpOwotICAgICAgICAK
LSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGJhc2VHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rl
cik7Ci0KLSAgICAgICAgY2FjaGVkUHV0QnlJZChiYXNlR1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQ
Uiwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCwgbm90Q2VsbCk7Ci0KLSAgICAg
ICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgUHV0QnlJZERpcmVjdDogewotICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdw
cigpOwotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIAotICAg
ICAgICBiYXNlLnVzZSgpOwotICAgICAgICB2YWx1ZS51c2UoKTsKLSAgICAgICAgCi0gICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotCi0g
ICAgICAgIGNhY2hlZFB1dEJ5SWQoYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2guZ3ByKCksIG5v
ZGUuaWRlbnRpZmllck51bWJlcigpLCBEaXJlY3QsIG5vdENlbGwpOwotCi0gICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEdldEdsb2JhbFZhcjogewotICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgICAgIEpTVmFyaWFibGVPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1faml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgbV9q
aXQubG9hZFB0cihnbG9iYWxPYmplY3QtPmFkZHJlc3NPZlJlZ2lzdGVycygpLCByZXN1bHQuZ3By
KCkpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yR2xvYmFs
VmFyKHJlc3VsdC5ncHIoKSwgbm9kZS52YXJOdW1iZXIoKSksIHJlc3VsdC5ncHIoKSk7Ci0KLSAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSBnbG9iYWxPYmplY3QodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGdsb2JhbE9iamVjdFJlZyA9IGdsb2JhbE9i
amVjdC5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwot
Ci0gICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Y29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0UmVnKTsKLQotICAgICAg
ICB3cml0ZUJhcnJpZXIobV9qaXQsIGdsb2JhbE9iamVjdFJlZywgc2NyYXRjaFJlZywgV3JpdGVC
YXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwotCi0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0UmVnLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZz
ZXRPZlJlZ2lzdGVycygpKSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHZh
bHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvckdsb2JhbFZhcihzY3JhdGNoUmVnLCBu
b2RlLnZhck51bWJlcigpKSk7Ci0KLSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIERGRzo6SnVtcDogewotICAgICAgICBC
bG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZz
ZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgICAgICBpZiAodGFrZW4gIT0gKG1f
YmxvY2sgKyAxKSkKLSAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIHRha2VuKTsK
LSAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjYXNlIEJyYW5jaDoKLSAgICAgICAgZW1pdEJyYW5jaChub2RlKTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIFJldHVybjogewotICAgICAgICBBU1NFUlQoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIgIT0gR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBBU1NFUlQoR1BSSW5m
bzo6cmVnVDEgIT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBBU1NFUlQoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIgIT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotCi0j
aWYgRU5BQkxFKERGR19TVUNDRVNTX1NUQVRTKQotICAgICAgICBzdGF0aWMgU2FtcGxpbmdDb3Vu
dGVyIGNvdW50ZXIoIk5vblNwZWN1bGF0aXZlSklUIik7Ci0gICAgICAgIG1faml0LmVtaXRDb3Vu
dChjb3VudGVyKTsKLSNlbmRpZgotCi0gICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJl
dHVyblZhbHVlR1BSLgotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEoKSk7Ci0gICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7Ci0KLSAgICAgICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCi0gICAgICAgIG1f
aml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMs
IEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgLy8gUmVzdG9yZSBvdXIgY2FsbGVyJ3MgInIiLgot
ICAgICAgICBtX2ppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6
OkNhbGxlckZyYW1lLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIC8vIFJl
dHVybi4KLSAgICAgICAgbV9qaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BS
SW5mbzo6cmVnVDEpOwotICAgICAgICBtX2ppdC5yZXQoKTsKLQotICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQ2hlY2tI
YXNJbnN0YW5jZTogewotICAgICAgICBub25TcGVjdWxhdGl2ZUNoZWNrSGFzSW5zdGFuY2Uobm9k
ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgSW5zdGFuY2VPZjogewotICAg
ICAgICBub25TcGVjdWxhdGl2ZUluc3RhbmNlT2Yobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGNhc2UgUGhpOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAg
IGNhc2UgQnJlYWtwb2ludDoKLSNpZiBFTkFCTEUoREVCVUdfV0lUSF9CUkVBS1BPSU5UKQotICAg
ICAgICBtX2ppdC5icmVha3BvaW50KCk7Ci0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBDYWxsOgot
ICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICBlbWl0Q2FsbChub2RlKTsKLSAgICAgICAgYnJl
YWs7Ci0KLSAgICBjYXNlIFJlc29sdmU6IHsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAg
ICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25SZXNvbHZlLCByZXN1bHQuZ3ByKCksIGlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVt
YmVyKCkpKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUlu
ZGV4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBSZXNvbHZlQmFzZTogewot
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMp
OwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVCYXNlLCByZXN1bHQuZ3By
KCksIGlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpKTsKLSAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDogewotICAgICAgICBmbHVzaFJl
Z2lzdGVycygpOwotICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVCYXNlU3RyaWN0UHV0LCByZXN1bHQuZ3ByKCksIGlk
ZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpKTsKLSAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIH0KLQotICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmIG5vZGUubXVzdEdlbmVyYXRlKCkp
Ci0gICAgICAgIHVzZShtX2NvbXBpbGVJbmRleCk7Ci19Ci0KLXZvaWQgTm9uU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3ImIGNoZWNrSXRlcmF0b3Is
IEJhc2ljQmxvY2smIGJsb2NrKQotewotICAgIEFTU0VSVChtX2NvbXBpbGVJbmRleCA9PSBibG9j
ay5iZWdpbik7Ci0gICAgbV9ibG9ja0hlYWRzW21fYmxvY2tdID0gbV9qaXQubGFiZWwoKTsKLQot
I2lmIEVOQUJMRShERkdfSklUX0JSRUFLX09OX0VWRVJZX0JMT0NLKQotICAgIG1faml0LmJyZWFr
cG9pbnQoKTsKLSNlbmRpZgotCi0gICAgZm9yICg7IG1fY29tcGlsZUluZGV4IDwgYmxvY2suZW5k
OyArK21fY29tcGlsZUluZGV4KSB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgp
W21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJOb25TcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUg
QCVkIGF0IGNvZGUgb2Zmc2V0IDB4JXggICAiLCAoaW50KW1fY29tcGlsZUluZGV4LCBtX2ppdC5k
ZWJ1Z09mZnNldCgpKTsKLSNlbmRpZgotI2lmIEVOQUJMRShERkdfSklUX0JSRUFLX09OX0VWRVJZ
X05PREUpCi0gICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKLSNlbmRpZgotCi0gICAgICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgY29tcGlsZShjaGVja0l0ZXJhdG9yLCBub2RlKTsK
LSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgICAgIGlmIChub2RlLmhhc1Jlc3Vs
dCgpKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICItPiAlc1xuIiwgZGF0YUZvcm1hdFRv
U3RyaW5nKG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKV0ucmVnaXN0ZXJG
b3JtYXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxu
Iik7Ci0jZW5kaWYKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIH0KLX0KLQotdm9p
ZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRv
ciYgY2hlY2tJdGVyYXRvcikKLXsKLSAgICAvLyBDaGVjayBmb3Igc3BlY3VsYXRpb24gY2hlY2tz
IGFkZGVkIGF0IGZ1bmN0aW9uIGVudHJ5IChjaGVja2luZyBhcmd1bWVudCB0eXBlcykuCi0jaWYg
IUVOQUJMRShERkdfT1NSX0VYSVQpCi0gICAgaWYgKGNoZWNrSXRlcmF0b3IuaGFzQ2hlY2tBdElu
ZGV4KG1fY29tcGlsZUluZGV4KSkKLSAgICAgICAgdHJhY2tFbnRyeShtX2ppdC5sYWJlbCgpKTsK
LSNlbmRpZgotCi0gICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7Ci0gICAgZm9yIChtX2Jsb2Nr
ID0gMDsgbV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxvY2sp
Ci0gICAgICAgIGNvbXBpbGUoY2hlY2tJdGVyYXRvciwgKm1faml0LmdyYXBoKCkubV9ibG9ja3Nb
bV9ibG9ja10pOwotICAgIGxpbmtCcmFuY2hlcygpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCi0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25T
cGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9uU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gOTUyMzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBERkdOb25TcGVjdWxhdGl2ZUpJVF9oCi0jZGVmaW5lIERGR05vblNwZWN1bGF0
aXZlSklUX2gKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSA8ZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1jbGFz
cyBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvcjsKLQotLy8gPT09IEVudHJ5TG9jYXRpb24g
PT09Ci0vLwotLy8gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGFuIGVudHJ5IHBvaW50IGludG8g
dGhlIG5vbi1zcGVjdWxhdGl2ZQotLy8gY29kZSBwYXRoLiBUaGlzIGlzIHVzZWQgaW4gbGlua2lu
ZyBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aC4KLXN0cnVjdCBFbnRyeUxvY2F0
aW9uIHsKLSAgICBFbnRyeUxvY2F0aW9uKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCwgTm9uU3BlY3Vs
YXRpdmVKSVQqKTsKLQotICAgIC8vIFRoZSBub2RlIHRoaXMgZW50cnkgcG9pbnQgY29ycmVzcG9u
ZHMgdG8sIGFuZCB0aGUgbGFiZWwKLSAgICAvLyBtYXJraW5nIHRoZSBzdGFydCBvZiBjb2RlIGZv
ciB0aGUgZ2l2ZW4gbm9kZS4KLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9lbnRyeTsKLSAg
ICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7Ci0KLSAgICAvLyBGb3IgZXZlcnkgZW50cnkgcG9pbnQg
d2UgcmVjb3JkIGEgbWFwIHJlY29yZGluZyBmb3IgZXZlcnkKLSAgICAvLyBtYWNoaW5lIHJlZ2lz
dGVyIHdoaWNoLCBpZiBhbnksIHZhbHVlcyBpdCBjb250YWlucy4gRm9yCi0gICAgLy8gR1BSIHJl
Z2lzdGVycyB3ZSBtdXN0IGFsc28gcmVjb3JkIHRoZSBmb3JtYXQgb2YgdGhlIHZhbHVlLgotICAg
IHN0cnVjdCBSZWdpc3RlckluZm8gewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4OwotICAg
ICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKLSAgICAgICAgYm9vbCBpc1NwaWxsZWQ7Ci0gICAgfTsK
LSAgICBSZWdpc3RlckluZm8gbV9ncHJJbmZvW0dQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXTsK
LSAgICBSZWdpc3RlckluZm8gbV9mcHJJbmZvW0ZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXTsK
LX07Ci0KLS8vID09PSBOb25TcGVjdWxhdGl2ZUpJVCA9PT0KLS8vCi0vLyBUaGlzIGNsYXNzIGlz
IHVzZWQgdG8gZ2VuZXJhdGUgY29kZSBmb3IgdGhlIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgotLy8g
Q29kZSBnZW5lcmF0aW9uIHdpbGwgdGFrZSBhZHZhbnRhZ2Ugb2Ygc3RhdGljIGluZm9ybWF0aW9u
IGF2YWlsYWJsZQotLy8gaW4gdGhlIGRhdGFmbG93IHRvIHBlcmZvcm0gc2FmZSBvcHRpbWl6YXRp
b25zIC0gZm9yIGV4YW1wbGUsIGF2b2lkaW5nCi0vLyBib3hpbmcgbnVtZXJpYyB2YWx1ZXMgYmV0
d2VlbiBhcml0aG1ldGljIG9wZXJhdGlvbnMsIGJ1dCB3aWxsIG5vdAotLy8gcGVyZm9ybSBhbnkg
dW5zYWZlIG9wdGltaXphdGlvbnMgdGhhdCB3b3VsZCByZW5kZXIgdGhlIGNvZGUgdW5hYmxlCi0v
LyB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IHJlc3VsdHMgZm9yIGFueSBwb3NzaWJsZSBpbnB1dC4K
LWNsYXNzIE5vblNwZWN1bGF0aXZlSklUIDogcHVibGljIEpJVENvZGVHZW5lcmF0b3IgewotICAg
IGZyaWVuZCBzdHJ1Y3QgRW50cnlMb2NhdGlvbjsKLXB1YmxpYzoKLSAgICBOb25TcGVjdWxhdGl2
ZUpJVChKSVRDb21waWxlciYgaml0KQotICAgICAgICA6IEpJVENvZGVHZW5lcmF0b3Ioaml0LCBm
YWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlKFNwZWN1bGF0aW9uQ2hlY2tJ
bmRleEl0ZXJhdG9yJik7Ci0KLSAgICB0eXBlZGVmIFNlZ21lbnRlZFZlY3RvcjxFbnRyeUxvY2F0
aW9uLCAxNj4gRW50cnlMb2NhdGlvblZlY3RvcjsKLSAgICBFbnRyeUxvY2F0aW9uVmVjdG9yJiBl
bnRyeUxvY2F0aW9ucygpIHsgcmV0dXJuIG1fZW50cnlMb2NhdGlvbnM7IH0KLQotcHJpdmF0ZToK
LSAgICB2b2lkIGNvbXBpbGUoU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3ImLCBOb2RlJik7
Ci0gICAgdm9pZCBjb21waWxlKFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yJiwgQmFzaWNC
bG9jayYpOwotCi0gICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBwbGFudCBjYWxscyBv
dXQgdG8gQysrCi0gICAgLy8gaGVscGVyIHJvdXRpbmVzIHRvIGNvbnZlcnQgYmV0d2VlbiB0eXBl
cy4KLQotICAgIC8vIFJlY29yZCBhbiBlbnRyeSBsb2NhdGlvbiBpbnRvIHRoZSBub24tc3BlY3Vs
YXRpdmUgY29kZSBwYXRoOwotICAgIC8vIGZvciBldmVyeSBiYWlsLW91dCBvbiB0aGUgc3BlY3Vs
YXRpdmUgcGF0aCB3ZSByZWNvcmQgaW5mb3JtYXRpb24KLSAgICAvLyB0byBiZSBhYmxlIHRvIHJl
LWVudGVyIGludG8gdGhlIG5vbi1zcGVjdWxhdGl2ZSBvbmUuCi0gICAgdm9pZCB0cmFja0VudHJ5
KE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBlbnRyeSkKLSAgICB7Ci0gICAgICAgIG1fZW50cnlMb2Nh
dGlvbnMuYXBwZW5kKEVudHJ5TG9jYXRpb24oZW50cnksIHRoaXMpKTsKLSAgICB9Ci0gICAgCi0g
ICAgRW50cnlMb2NhdGlvblZlY3RvciBtX2VudHJ5TG9jYXRpb25zOwotfTsKLQotfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYKLSNlbmRpZgotCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gOTUyMzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgs
NiArNTgsNyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogCiAjaWYgRU5BQkxFKEpJVF9WRVJC
T1NFX09TUikKICAgICBwcmludGYoIk9TUiBpbiAlcCglcCkgZnJvbSBiYyMldVxuIiwgY29kZUJs
b2NrLCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksIGJ5dGVjb2RlSW5kZXgpOwpAQCAtNzQsMjUg
Kzc1LDcgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIC8v
IHNob3VsZCBhbG1vc3QgY2VydGFpbmx5IGluY2x1ZGUgY2FsbGluZyBlaXRoZXIgY29kZUJsb2Nr
LT5vcHRpbWl6ZUFmdGVyV2FybVVwKCkKICAgICAvLyBvciBjb2RlQmxvY2stPmRvbnRPcHRpbWl6
ZUFueXRpbWVTb29uKCkuCiAgICAgCi0gICAgLy8gMSkgQ2hlY2sgaWYgdGhlIERGRyBjb2RlIHNl
dCBhIGNvZGUgbWFwLiBJZiBpdCBkaWRuJ3QsIGl0IG1lYW5zIHRoYXQgaXQKLSAgICAvLyAgICBj
YW5ub3QgaGFuZGxlIE9TUiBlbnRyeS4gVGhpcyBjdXJyZW50bHkgb25seSBoYXBwZW5zIGlmIHdl
IGRpc2FibGUKLSAgICAvLyAgICBkeW5hbWljIHNwZWN1bGF0aW9uIHRlcm1pbmF0aW9uIGFuZCBl
bmQgdXAgd2l0aCBhIERGRyBjb2RlIGJsb2NrIHRoYXQKLSAgICAvLyAgICB3YXMgY29tcGlsZWQg
ZW50aXJlbHkgd2l0aCB0aGUgbm9uLXNwZWN1bGF0aXZlIEpJVC4gVGhlIG5vbi1zcGVjdWxhdGl2
ZQotICAgIC8vICAgIEpJVCBkb2VzIG5vdCBzdXBwb3J0IE9TUiBlbnRyeSBhbmQgcHJvYmFibHkg
bmV2ZXIgd2lsbCwgc2luY2UgaXQgaXMKLSAgICAvLyAgICBraW5kIG9mIGEgZGVwcmVjYXRlZCBj
b21waWxlciByaWdodCBub3cuCi0gICAgCi0jaWYgRU5BQkxFKERZTkFNSUNfVEVSTUlOQVRFX1NQ
RUNVTEFUSU9OKQotICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7Ci0jZWxzZQot
ICAgIGlmICghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpIHsKLSNpZiBFTkFCTEUoSklUX1ZFUkJP
U0VfT1NSKQotICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugb2YgYSBtaXNz
aW5nIEpJVCBjb2RlIG1hcC5cbiIpOwotI2VuZGlmCi0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSNlbmRpZgotICAgIAotICAgIC8vIDIpIFZlcmlmeSBwcmVkaWN0aW9ucy4gSWYgdGhlIHByZWRp
Y3Rpb25zIGFyZSBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgYWN0dWFsCisgICAgLy8gMSkgVmVyaWZ5
IHByZWRpY3Rpb25zLiBJZiB0aGUgcHJlZGljdGlvbnMgYXJlIGluY29uc2lzdGVudCB3aXRoIHRo
ZSBhY3R1YWwKICAgICAvLyAgICB2YWx1ZXMsIHRoZW4gT1NSIGVudHJ5IGlzIG5vdCBwb3NzaWJs
ZSBhdCB0aGlzIHRpbWUuIEl0J3MgdGVtcHRpbmcgdG8KICAgICAvLyAgICBhc3N1bWUgdGhhdCB3
ZSBjb3VsZCBzb21laG93IGF2b2lkIHRoaXMgY2FzZS4gV2UgY2FuIGNlcnRhaW5seSBhdm9pZCBp
dAogICAgIC8vICAgIGZvciBmaXJzdC10aW1lIGxvb3AgT1NSIC0gdGhhdCBpcywgT1NSIGludG8g
YSBDb2RlQmxvY2sgdGhhdCB3ZSBoYXZlIGp1c3QKQEAgLTEzNCw3ICsxMTcsNyBAQCB2b2lkKiBw
cmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgLy8gMykgQ2hlY2sgdGhlIHN0YWNrIGhlaWdodC4gVGhlIERGRyBKSVQgbWF5IHJlcXVp
cmUgYSB0YWxsZXIgc3RhY2sgdGhhbiB0aGUKKyAgICAvLyAyKSBDaGVjayB0aGUgc3RhY2sgaGVp
Z2h0LiBUaGUgREZHIEpJVCBtYXkgcmVxdWlyZSBhIHRhbGxlciBzdGFjayB0aGFuIHRoZQogICAg
IC8vICAgIGJhc2VsaW5lIEpJVCwgaW4gc29tZSBjYXNlcy4gSWYgd2UgY2FuJ3QgZ3JvdyB0aGUg
c3RhY2ssIHRoZW4gZG9uJ3QgZG8KICAgICAvLyAgICBPU1IgcmlnaHQgbm93LiBUaGF0J3MgdGhl
IG9ubHkgb3B0aW9uIHdlIGhhdmUgdW5sZXNzIHdlIHdhbnQgYmFzaWMgYmxvY2sKICAgICAvLyAg
ICBib3VuZGFyaWVzIHRvIHN0YXJ0IHRocm93aW5nIFJhbmdlRXJyb3JzLiBBbHRob3VnaCB0aGF0
IHdvdWxkIGJlIHBvc3NpYmxlLApAQCAtMTUyLDExICsxMzUsMTEgQEAgdm9pZCogcHJlcGFyZU9T
UkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIHByaW50ZigiICAgIE9TUiBzaG91bGQgc3Vj
Y2VlZC5cbiIpOwogI2VuZGlmCiAgICAgCi0gICAgLy8gNCkgRml4IHRoZSBjYWxsIGZyYW1lLgor
ICAgIC8vIDMpIEZpeCB0aGUgY2FsbCBmcmFtZS4KICAgICAKICAgICBleGVjLT5zZXRDb2RlQmxv
Y2soY29kZUJsb2NrKTsKICAgICAKLSAgICAvLyA1KSBGaW5kIGFuZCByZXR1cm4gdGhlIGRlc3Rp
bmF0aW9uIG1hY2hpbmUgY29kZSBhZGRyZXNzLiBUaGUgREZHIHN0b3JlcworICAgIC8vIDQpIEZp
bmQgYW5kIHJldHVybiB0aGUgZGVzdGluYXRpb24gbWFjaGluZSBjb2RlIGFkZHJlc3MuIFRoZSBE
Rkcgc3RvcmVzCiAgICAgLy8gICAgdGhlIG1hY2hpbmUgY29kZSBvZmZzZXRzIG9mIE9TUiB0YXJn
ZXRzIGluIGEgQ29tcGFjdEpJVENvZGVNYXAuCiAgICAgLy8gICAgRGVjb2RpbmcgaXQgaXMgbm90
IHN1cGVyIGVmZmljaWVudCwgYnV0IHdlIGV4cGVjdCB0aGF0IE9TUiBlbnRyeQogICAgIC8vICAg
IGhhcHBlbnMgc3VmZmljaWVudGx5IHJhcmVseSwgYW5kIHRoYXQgT1NSIGVudHJ5cG9pbnRzIGFy
ZSBzdWZmaWNpZW50bHkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFn
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9w
YWdhdG9yLmNwcAkocmV2aXNpb24gOTUyMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZHUHJvcGFnYXRvci5oIgogCi0jaWYgRU5BQkxF
KERGR19KSVQpICYmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKKyNpZiBFTkFCTEUoREZH
X0pJVCkKIAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAKQEAgLTQzMiw1ICs0MzIsNSBAQCB2b2lk
IHByb3BhZ2F0ZShHcmFwaCYgZ3JhcGgsIEpTR2xvYmFsRGF0CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKSAmJiBFTkFCTEUoRFlOQU1JQ19P
UFRJTUlaQVRJT04pCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5oCShyZXZpc2lvbiA5NTIzMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCwxMSArMzgsNyBAQCBjbGFzcyBKU0dsb2JhbERhdGE7CiBuYW1lc3BhY2UgREZHIHsKIAog
Ly8gUHJvcGFnYXRlIGR5bmFtaWMgcHJlZGljdGlvbnMgZnJvbSB2YWx1ZSBzb3VyY2VzIHRvIHZh
cmlhYmxlcy4KLSNpZiBFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCiB2b2lkIHByb3BhZ2F0
ZShHcmFwaCYsIEpTR2xvYmFsRGF0YSosIENvZGVCbG9jayopOwotI2Vsc2UKLWlubGluZSB2b2lk
IHByb3BhZ2F0ZShHcmFwaCYsIEpTR2xvYmFsRGF0YSosIENvZGVCbG9jayopIHsgfQotI2VuZGlm
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk1MjMzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0NywzNSArMTQ3LDYgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlSW50SQogICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwogfQogCi0jaWYgIUVOQUJMRShE
RkdfT1NSX0VYSVQpCi1TcGVjdWxhdGlvbkNoZWNrOjpTcGVjdWxhdGlvbkNoZWNrKE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVy
eUluZGV4KQotICAgIDogbV9jaGVjayhjaGVjaykKLSAgICAsIG1fbm9kZUluZGV4KGppdC0+bV9j
b21waWxlSW5kZXgpCi0gICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKLXsKLSAg
ICBmb3IgKGdwcl9pdGVyYXRvciBpdGVyID0gaml0LT5tX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBq
aXQtPm1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJ
bnZhbGlkVmlydHVhbFJlZ2lzdGVyKSB7Ci0gICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9ICBqaXQtPm1fZ2VuZXJhdGlvbkluZm9baXRlci5uYW1lKCldOwotICAgICAgICAgICAgbV9n
cHJJbmZvW2l0ZXIuaW5kZXgoKV0ubm9kZUluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKLSAgICAg
ICAgICAgIG1fZ3BySW5mb1tpdGVyLmluZGV4KCldLmZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2dwckluZm9baXRlci5pbmRleCgpXS5mb3JtYXQg
IT0gRGF0YUZvcm1hdE5vbmUpOwotICAgICAgICAgICAgbV9ncHJJbmZvW2l0ZXIuaW5kZXgoKV0u
aXNTcGlsbGVkID0gaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIG1fZ3BySW5mb1tpdGVyLmluZGV4KCldLm5vZGVJbmRleCA9
IE5vTm9kZTsKLSAgICB9Ci0gICAgZm9yIChmcHJfaXRlcmF0b3IgaXRlciA9IGppdC0+bV9mcHJz
LmJlZ2luKCk7IGl0ZXIgIT0gaml0LT5tX2ZwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBp
ZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikgewotICAgICAgICAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSAgaml0LT5tX2dlbmVyYXRpb25JbmZvW2l0ZXIubmFtZSgp
XTsKLSAgICAgICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1h
dERvdWJsZSk7Ci0gICAgICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgpXS5ub2RlSW5kZXgg
PSBpbmZvLm5vZGVJbmRleCgpOwotICAgICAgICAgICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0u
Zm9ybWF0ID0gRGF0YUZvcm1hdERvdWJsZTsKLSAgICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmlu
ZGV4KCldLmlzU3BpbGxlZCA9IGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgpXS5ub2Rl
SW5kZXggPSBOb05vZGU7Ci0gICAgfQotfQotI2VuZGlmCi0KICNpZm5kZWYgTkRFQlVHCiB2b2lk
IFZhbHVlU291cmNlOjpkdW1wKEZJTEUqIG91dCkgY29uc3QKIHsKQEAgLTIxMyw3ICsxODQsNiBA
QCB2b2lkIFZhbHVlUmVjb3Zlcnk6OmR1bXAoRklMRSogb3V0KSBjb25zCiB9CiAjZW5kaWYKIAot
I2lmIEVOQUJMRShERkdfT1NSX0VYSVQpCiBPU1JFeGl0OjpPU1JFeGl0KE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4
KQogICAgIDogbV9jaGVjayhjaGVjaykKICAgICAsIG1fbm9kZUluZGV4KGppdC0+bV9jb21waWxl
SW5kZXgpCkBAIC0yNDAsNyArMjEwLDYgQEAgdm9pZCBPU1JFeGl0OjpkdW1wKEZJTEUqIG91dCkg
Y29uc3QKICAgICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVdLmR1bXAob3V0KTsKIH0KICNlbmRp
ZgotI2VuZGlmCiAKIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludChOb2Rl
SW5kZXggbm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpCiB7CkBAIC0xNjM2LDEx
ICsxNjA1LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAg
ICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICAgICAgY29tcGlsZShub2RlKTsK
ICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkgewotI2lmIEVOQUJMRShEWU5BTUlDX1RF
Uk1JTkFURV9TUEVDVUxBVElPTikKICAgICAgICAgICAgICAgICBtX2NvbXBpbGVPa2F5ID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrLmVuZDsKICAgICAgICAg
ICAgICAgICBjbGVhckdlbmVyYXRpb25JbmZvKCk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE3MTgsMTMgKzE2ODUsOCBA
QCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkKICAgICBpbml0aWFsaXplVmFyaWFibGVU
eXBlcygpOwogCiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7Ci0gICAgZm9yIChtX2Jsb2Nr
ID0gMDsgbV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxvY2sp
IHsKKyAgICBmb3IgKG1fYmxvY2sgPSAwOyBtX2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nr
cy5zaXplKCk7ICsrbV9ibG9jaykKICAgICAgICAgY29tcGlsZSgqbV9qaXQuZ3JhcGgoKS5tX2Js
b2Nrc1ttX2Jsb2NrXSk7Ci0jaWYgIUVOQUJMRShEWU5BTUlDX1RFUk1JTkFURV9TUEVDVUxBVElP
TikKLSAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotI2VuZGlmCi0gICAgfQogICAgIGxpbmtCcmFuY2hlcygpOwogICAgIHJldHVybiB0cnVlOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkocmV2aXNpb24gOTUyMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDM0ICs2Niw2IEBAIHByaXZhdGU6CiAg
ICAgR1BSUmVnIG1fc3JjOwogfTsKIAotI2lmICFFTkFCTEUoREZHX09TUl9FWElUKQotLy8gPT09
IFNwZWN1bGF0aW9uQ2hlY2sgPT09Ci0vLwotLy8gVGhpcyBzdHJ1Y3R1cmUgcmVjb3JkcyBhIGJh
aWwtb3V0IGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGgsCi0vLyB3aGljaCB3aWxsIG5lZWQgdG8g
YmUgbGlua2VkIGluIHRvIHRoZSBub24tc3BlY3VsYXRpdmUgb25lLgotc3RydWN0IFNwZWN1bGF0
aW9uQ2hlY2sgewotICAgIFNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNw
ZWN1bGF0aXZlSklUKiwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOwotCi0gICAgLy8gVGhl
IGxvY2F0aW9uIG9mIHRoZSBqdW1wIG91dCBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoLCAKLSAg
ICAvLyBhbmQgdGhlIG5vZGUgd2Ugd2VyZSBnZW5lcmF0aW5nIGNvZGUgZm9yLgotICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG1fY2hlY2s7Ci0gICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OwotICAg
IC8vIFVzZWQgdG8gcmVjb3JkIGFueSBhZGRpdGlvbmFsIHJlY292ZXJ5IHRvIGJlIHBlcmZvcm1l
ZDsgdGhpcwotICAgIC8vIHZhbHVlIGlzIGFuIGluZGV4IGludG8gdGhlIFNwZWN1bGF0aXZlSklU
J3MgbV9zcGVjdWxhdGlvblJlY292ZXJ5TGlzdAotICAgIC8vIGFycmF5LCBvZmZzZXQgYnkgMS4g
KG1fcmVjb3ZlcnlJbmRleCA9PSAwKSBtZWFucyBubyByZWNvdmVyeS4KLSAgICB1bnNpZ25lZCBt
X3JlY292ZXJ5SW5kZXg7Ci0KLSAgICBzdHJ1Y3QgUmVnaXN0ZXJJbmZvIHsKLSAgICAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleDsKLSAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7Ci0gICAgICAgIGJv
b2wgaXNTcGlsbGVkOwotICAgIH07Ci0gICAgUmVnaXN0ZXJJbmZvIG1fZ3BySW5mb1tHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyc107Ci0gICAgUmVnaXN0ZXJJbmZvIG1fZnBySW5mb1tGUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyc107Ci19OwotdHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8U3BlY3Vs
YXRpb25DaGVjaywgMTY+IFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3I7Ci0jZW5kaWYgLy8gIUVOQUJM
RShERkdfT1NSX0VYSVQpCi0KIGNsYXNzIFZhbHVlU291cmNlIHsKIHB1YmxpYzoKICAgICBWYWx1
ZVNvdXJjZSgpCkBAIC0yMzIsNyArMjA0LDYgQEAgcHJpdmF0ZToKICAgICB9IG1fc291cmNlOwog
fTsKIAotI2lmIEVOQUJMRShERkdfT1NSX0VYSVQpCiAvLyA9PT0gT1NSRXhpdCA9PT0KIC8vCiAv
LyBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgaG93IHRvIGV4aXQgdGhlIHNwZWN1bGF0aXZlIHBh
dGggYnkKQEAgLTI4MSw3ICsyNTIsNiBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAgaW50IG1fbGFz
dFNldE9wZXJhbmQ7CiB9OwogdHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwgMTY+IE9T
UkV4aXRWZWN0b3I7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19PU1JfRVhJVCkKIAogLy8gPT09IFNw
ZWN1bGF0aXZlSklUID09PQogLy8KQEAgLTI5NCw3ICsyNjQsNiBAQCB0eXBlZGVmIFNlZ21lbnRl
ZFZlY3RvcjxPU1JFeGl0LCAxNj4gT1NSCiAvLyB0byBwcm9wYWdhdGUgdHlwZSBpbmZvcm1hdGlv
biAoaW5jbHVkaW5nIGluZm9ybWF0aW9uIHRoYXQgaGFzCiAvLyBvbmx5IHNwZWN1bGF0aXZlbHkg
YmVlbiBhc3NlcnRlZCkgdGhyb3VnaCB0aGUgZGF0YWZsb3cuCiBjbGFzcyBTcGVjdWxhdGl2ZUpJ
VCA6IHB1YmxpYyBKSVRDb2RlR2VuZXJhdG9yIHsKLSAgICBmcmllbmQgc3RydWN0IFNwZWN1bGF0
aW9uQ2hlY2s7CiAgICAgZnJpZW5kIHN0cnVjdCBPU1JFeGl0OwogcHVibGljOgogICAgIFNwZWN1
bGF0aXZlSklUKEpJVENvbXBpbGVyJik7CkBAIC0zMDMsMjAgKzI3MiwxMyBAQCBwdWJsaWM6CiAK
ICAgICAvLyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRp
dmUgcGF0aCwKICAgICAvLyBhbmQgYWRkaXRpb25hbCByZWNvdmVyeSBpbmZvcm1hdGlvbi4KLSNp
ZiAhRU5BQkxFKERGR19PU1JfRVhJVCkKLSAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yJiBzcGVj
dWxhdGlvbkNoZWNrcygpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zcGVjdWxhdGlvbkNoZWNr
czsKLSAgICB9Ci0jZWxzZQogICAgIE9TUkV4aXRWZWN0b3ImIG9zckV4aXRzKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX29zckV4aXRzOwogICAgIH0KLSNlbmRpZgogICAgIFNwZWN1bGF0aW9u
UmVjb3ZlcnkqIHNwZWN1bGF0aW9uUmVjb3Zlcnkoc2l6ZV90IGluZGV4KQogICAgIHsKLSAgICAg
ICAgLy8gU3BlY3VsYXRpb25DaGVjazo6bV9yZWNvdmVyeUluZGV4IGlzIG9mZnNldCBieSAxLAor
ICAgICAgICAvLyBPU1JFeGl0OjptX3JlY292ZXJ5SW5kZXggaXMgb2Zmc2V0IGJ5IDEsCiAgICAg
ICAgIC8vIDAgbWVhbnMgbm8gcmVjb3ZlcnkuCiAgICAgICAgIHJldHVybiBpbmRleCA/ICZtX3Nw
ZWN1bGF0aW9uUmVjb3ZlcnlMaXN0W2luZGV4IC0gMV0gOiAwOwogICAgIH0KQEAgLTUxNCwxMSAr
NDc2LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAg
ICAgICAgICAgIHJldHVybjsKLSNpZiAhRU5BQkxFKERGR19PU1JfRVhJVCkKLSAgICAgICAgbV9z
cGVjdWxhdGlvbkNoZWNrcy5hcHBlbmQoU3BlY3VsYXRpb25DaGVjayhqdW1wVG9GYWlsLCB0aGlz
KSk7Ci0jZWxzZQogICAgICAgICBtX29zckV4aXRzLmFwcGVuZChPU1JFeGl0KGp1bXBUb0ZhaWws
IHRoaXMpKTsKLSNlbmRpZgogICAgIH0KICAgICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBjaGVjayB3
aXRoIGFkZGl0aW9uYWwgcmVjb3ZlcnkuCiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJl
Y292ZXJ5KQpAQCAtNTI2LDExICs0ODQsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fc3BlY3VsYXRpb25SZWNv
dmVyeUxpc3QuYXBwZW5kKHJlY292ZXJ5KTsKLSNpZiAhRU5BQkxFKERGR19PU1JfRVhJVCkKLSAg
ICAgICAgbV9zcGVjdWxhdGlvbkNoZWNrcy5hcHBlbmQoU3BlY3VsYXRpb25DaGVjayhqdW1wVG9G
YWlsLCB0aGlzLCBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0LnNpemUoKSkpOwotI2Vsc2UKICAg
ICAgICAgbV9vc3JFeGl0cy5hcHBlbmQoT1NSRXhpdChqdW1wVG9GYWlsLCB0aGlzLCBtX3NwZWN1
bGF0aW9uUmVjb3ZlcnlMaXN0LnNpemUoKSkpOwotI2VuZGlmCiAgICAgfQogCiAgICAgLy8gQ2Fs
bGVkIHdoZW4gd2Ugc3RhdGljYWxseSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwg
ZmFpbC4KQEAgLTUzOSwxNiArNDkzLDEwIEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKERGR19ERUJV
R19WRVJCT1NFKQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklUIHdhcyB0
ZXJtaW5hdGVkLlxuIik7CiAjZW5kaWYKLSNpZiBFTkFCTEUoRFlOQU1JQ19URVJNSU5BVEVfU1BF
Q1VMQVRJT04pCiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5qdW1wKCkpOwogICAgICAgICBtX2Nv
bXBpbGVPa2F5ID0gZmFsc2U7Ci0jZWxzZQotICAgICAgICAvLyBVbmRlciBzdGF0aWMgc3BlY3Vs
YXRpb24sIGl0J3MgbW9yZSBwcm9maXRhYmxlIHRvIGdpdmUgdXAgZW50aXJlbHkgYXQgdGhpcwot
ICAgICAgICAvLyBwb2ludC4KLSAgICAgICAgbV9jb21waWxlT2theSA9IGZhbHNlOwotI2VuZGlm
CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+CkBAIC01NTksMTMgKzUwNyw4IEBA
IHByaXZhdGU6CiAgICAgLy8gd2lsbCBtYWtlIGNvbmZsaWN0aW5nIHNwZWN1bGF0aW9ucyBhYm91
dCB0aGUgc2FtZSBvcGVyYW5kKS4gSW4gc3VjaCBjYXNlcyB0aGlzCiAgICAgLy8gZmxhZyBpcyBj
bGVhcmVkLCBpbmRpY2F0aW5nIG5vIGZ1cnRoZXIgY29kZSBnZW5lcmF0aW9uIHNob3VsZCB0YWtl
IHBsYWNlLgogICAgIGJvb2wgbV9jb21waWxlT2theTsKLSNpZiAhRU5BQkxFKERGR19PU1JfRVhJ
VCkKLSAgICAvLyBUaGlzIHZlY3RvciB0cmFja3MgYmFpbC1vdXRzIGZyb20gdGhlIHNwZWN1bGF0
aXZlIHBhdGggdG8gdGhlIG5vbi1zcGVjdWxhdGl2ZSBvbmUuCi0gICAgU3BlY3VsYXRpb25DaGVj
a1ZlY3RvciBtX3NwZWN1bGF0aW9uQ2hlY2tzOwotI2Vsc2UKICAgICAvLyBUaGlzIHZlY3RvciB0
cmFja3MgYmFpbC1vdXRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGggdG8gdGhlIG9sZCBKSVQu
CiAgICAgT1NSRXhpdFZlY3RvciBtX29zckV4aXRzOwotI2VuZGlmCiAgICAgLy8gU29tZSBiYWls
LW91dHMgbmVlZCB0byByZWNvcmQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWNvcmRpbmcgc3Bl
Y2lmaWMgcmVjb3ZlcnkKICAgICAvLyB0byBiZSBwZXJmb3JtZWQgKGZvciBleGFtcGxlLCBvbiBk
ZXRlY3RlZCBvdmVyZmxvdyBmcm9tIGFuIGFkZCwgd2UgbWF5IG5lZWQgdG8KICAgICAvLyByZXZl
cnNlIHRoZSBhZGRpdGlvbiBpZiBhbiBvcGVyYW5kIGlzIGJlaW5nIG92ZXJ3cml0dGVuKS4KQEAg
LTgzMSw0NCArNzc0LDYgQEAgcHJpdmF0ZToKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiB9
OwogCi0vLyA9PT0gU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgPT09Ci0vLwotLy8gVGhp
cyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSBub24tc3BlY3VsYXRpdmUgSklUIHRvIGNoZWNrIHdoaWNo
Ci0vLyBub2RlcyByZXF1aXJlIGVudHJ5IHBvaW50cyBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRo
LgotI2lmIEVOQUJMRShERkdfT1NSX0VYSVQpCi0vLyBUaGlzIGJlY29tZXMgYSBzdHViIGlmIE9T
UiBpcyBlbmFibGVkLgotY2xhc3MgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgewotcHVi
bGljOgotICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKCkgeyB9Ci19OwotI2Vsc2UK
LWNsYXNzIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBTcGVj
dWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvcihTcGVjdWxhdGlvbkNoZWNrVmVjdG9yJiBzcGVjdWxh
dGlvbkNoZWNrcykKLSAgICAgICAgOiBtX3NwZWN1bGF0aW9uQ2hlY2tzKHNwZWN1bGF0aW9uQ2hl
Y2tzKQotICAgICAgICAsIG1faXRlcihtX3NwZWN1bGF0aW9uQ2hlY2tzLmJlZ2luKCkpCi0gICAg
ICAgICwgbV9lbmQobV9zcGVjdWxhdGlvbkNoZWNrcy5lbmQoKSkKLSAgICB7Ci0gICAgfQotCi0g
ICAgYm9vbCBoYXNDaGVja0F0SW5kZXgoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAg
ICAgIHdoaWxlIChtX2l0ZXIgIT0gbV9lbmQpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjdXJy
ZW50ID0gbV9pdGVyLT5tX25vZGVJbmRleDsKLSAgICAgICAgICAgIGlmIChjdXJyZW50ID49IG5v
ZGVJbmRleCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudCA9PSBub2RlSW5kZXg7Ci0g
ICAgICAgICAgICArK21faXRlcjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3ImIG1fc3BlY3VsYXRp
b25DaGVja3M7Ci0gICAgU3BlY3VsYXRpb25DaGVja1ZlY3Rvcjo6SXRlcmF0b3IgbV9pdGVyOwot
ICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3I6Okl0ZXJhdG9yIG1fZW5kOwotfTsKLSNlbmRpZgot
CiBpbmxpbmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENvbXBpbGVyJiBqaXQp
CiAgICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1ZSkKICAgICAsIG1fY29tcGlsZU9rYXko
dHJ1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDk1MjMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Myw3ICs5Myw3IEBAIEpJVDo6SklUKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUIKIHsK
IH0KIAotI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisjaWYgRU5BQkxFKERGR19KSVQp
CiB2b2lkIEpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphdGlvbkNoZWNrS2luZCBr
aW5kKQogewogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQpAQCAtMjA3LDcgKzIwNyw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICBtX2xhYmVs
c1ttX2J5dGVjb2RlT2Zmc2V0XSA9IGxhYmVsKCk7CiAKLSNpZiBFTkFCTEUoVElFUkVEX0NPTVBJ
TEFUSU9OKQorI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAobV9jYW5CZU9wdGltaXpl
ZCkKICAgICAgICAgICAgIG1faml0Q29kZU1hcEVuY29kZXIuYXBwZW5kKG1fYnl0ZWNvZGVPZmZz
ZXQsIGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUsIGxhYmVsKCkpKTsKICNlbmRpZgpA
QCAtNTAzLDcgKzUwMyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAK
IEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW5jdGlvbkVudHJ5QXJpdHlD
aGVjaykKIHsKLSNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorI2lmIEVOQUJMRShERkdf
SklUKQogICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBtX2NvZGVCbG9jay0+Y2FuQ29tcGlsZVdpdGhE
RkcoKTsKICAgICBpZiAobV9jYW5CZU9wdGltaXplZCkKICAgICAgICAgbV9zdGFydE9mQ29kZSA9
IGxhYmVsKCk7CkBAIC02NDcsNyArNjQ3LDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxl
KENvZGVQdHIqIGZ1bgogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IG1fY29kZUJs
b2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhtX21ldGhvZENhbGxDb21waWxhdGlvbkluZm9baV0ucHJv
cGVydHlBY2Nlc3NJbmRleCkuY2FsbFJldHVybkxvY2F0aW9uOwogICAgIH0KIAotI2lmIEVOQUJM
RShUSUVSRURfQ09NUElMQVRJT04pCisjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKG1fY2Fu
QmVPcHRpbWl6ZWQpCiAgICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKG1faml0Q29k
ZU1hcEVuY29kZXIuZmluaXNoKCkpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHJldmlzaW9uIDk1MjMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtOTgwLDcgKzk4MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRzdCwgSnVtcExpc3QmIGZhaWx1cmVzKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gT3B0aW1p
emF0aW9uQ2hlY2tLaW5kIHsgTG9vcE9wdGltaXphdGlvbkNoZWNrLCBSZXRPcHRpbWl6YXRpb25D
aGVjayB9OwotI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgICAgIHZvaWQgZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphdGlvbkNoZWNr
S2luZCk7CiAjZWxzZQogICAgICAgICB2b2lkIGVtaXRPcHRpbWl6YXRpb25DaGVjayhPcHRpbWl6
YXRpb25DaGVja0tpbmQpIHsgfQpAQCAtMTAxMCw3ICsxMDEwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgc2FtcGxlQ29kZUJsb2NrKENvZGVCbG9jayopIHt9CiAjZW5kaWYKIAot
I2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisjaWYgRU5BQkxFKERGR19KSVQpCiAgICAg
ICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZygpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7
IH0KICNlbHNlCiAgICAgICAgIC8vIEVuYWJsZXMgdXNlIG9mIHZhbHVlIHByb2ZpbGVyIHdpdGgg
dGllcmVkIGNvbXBpbGF0aW9uIHR1cm5lZCBvZmYsCkBAIC0xMDU4LDcgKzEwNTgsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgV2Vha1JhbmRvbSBtX3JhbmRvbUdlbmVyYXRvcjsKICAgICAg
ICAgc3RhdGljIENvZGVSZWYgc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSopOwogICAgICAgICAKLSNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorI2lmIEVOQUJM
RShERkdfSklUKQogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7CiAgICAgICAgIExhYmVs
IG1fc3RhcnRPZkNvZGU7CiAgICAgICAgIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyIG1faml0
Q29kZU1hcEVuY29kZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2
aXNpb24gOTUyMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTIsMTEgKzUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAog
ICAgICAgICBzdGF0aWMgSklUVHlwZSBib3R0b21UaWVySklUKCkKICAgICAgICAgewotI2lmIEVO
QUJMRShUSUVSRURfQ09NUElMQVRJT04pCiAgICAgICAgICAgICByZXR1cm4gQmFzZWxpbmVKSVQ7
Ci0jZWxzZQotICAgICAgICAgICAgcmV0dXJuIERGR0pJVDsKLSNlbmRpZgogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBzdGF0aWMgSklUVHlwZSB0b3BUaWVySklUKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24g
OTUyMzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2Jh
bERhdGEoR2xvYmFsRGF0YVR5cAogICAgICwgcGFyc2VyKG5ldyBQYXJzZXIpCiAgICAgLCBpbnRl
cnByZXRlcigwKQogICAgICwgaGVhcCh0aGlzLCBoZWFwU2l6ZSkKLSNpZiBFTkFCTEUoVElFUkVE
X0NPTVBJTEFUSU9OKQorI2lmIEVOQUJMRShERkdfSklUKQogICAgICwgc2l6ZU9mTGFzdE9TUlNj
cmF0Y2hCdWZmZXIoMCkKICNlbmRpZgogICAgICwgZHluYW1pY0dsb2JhbE9iamVjdCgwKQpAQCAt
MzYwLDcgKzM2MCw3IEBAIEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAgICAgZGVsZXRl
IG1fcnRUcmFjZUxpc3Q7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04p
CisjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9zclNj
cmF0Y2hCdWZmZXJzLnNpemUoKTsgKytpKQogICAgICAgICBmYXN0RnJlZShvc3JTY3JhdGNoQnVm
ZmVyc1tpXSk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA5NTIzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNyArMjM0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBpbnQ2NF90IGRlYnVn
RGF0YUJ1ZmZlcls2NF07CiAjZW5kaWYKLSNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQor
I2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBWZWN0b3I8dm9pZCo+IG9zclNjcmF0Y2hCdWZm
ZXJzOwogICAgICAgICBzaXplX3Qgc2l6ZU9mTGFzdE9TUlNjcmF0Y2hCdWZmZXI7CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gOTUyMzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkK
QEAgLTk1NiwyMyArOTU2LDExIEBACiAjZGVmaW5lIEVOQUJMRV9ERkdfSklUIDEKICNlbmRpZgog
Ci0jaWYgIWRlZmluZWQoRU5BQkxFX1RJRVJFRF9DT01QSUxBVElPTikgJiYgRU5BQkxFKERGR19K
SVQpCi0jZGVmaW5lIEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04gMQotI2VuZGlmCi0KIC8qIEN1
cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciBKU1ZBTFVFNjQsIG9ubHkgdGVzdGVkIG9uIFBM
QVRGT1JNKE1BQykgKi8KLSNpZiAhZGVmaW5lZChFTkFCTEVfVkFMVUVfUFJPRklMRVIpICYmIEVO
QUJMRShUSUVSRURfQ09NUElMQVRJT04pCisjaWYgIWRlZmluZWQoRU5BQkxFX1ZBTFVFX1BST0ZJ
TEVSKSAmJiBFTkFCTEUoREZHX0pJVCkKICNkZWZpbmUgRU5BQkxFX1ZBTFVFX1BST0ZJTEVSIDEK
ICNlbmRpZgogCi0jaWYgIWRlZmluZWQoRU5BQkxFX0RZTkFNSUNfT1BUSU1JWkFUSU9OKSAmJiBF
TkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQotI2RlZmluZSBFTkFCTEVfRFlOQU1JQ19PUFRJTUla
QVRJT04gMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChFTkFCTEVfRFlOQU1JQ19URVJNSU5BVEVf
U1BFQ1VMQVRJT04pICYmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKLSNkZWZpbmUgRU5B
QkxFX0RZTkFNSUNfVEVSTUlOQVRFX1NQRUNVTEFUSU9OIDEKLSNlbmRpZgotCiAjaWYgIWRlZmlu
ZWQoRU5BQkxFX1ZFUkJPU0VfVkFMVUVfUFJPRklMRSkgJiYgRU5BQkxFKFZBTFVFX1BST0ZJTEVS
KQogI2RlZmluZSBFTkFCTEVfVkVSQk9TRV9WQUxVRV9QUk9GSUxFIDAKICNlbmRpZgo=
</data>
<flag name="review"
          id="104274"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>