<?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>154327</bug_id>
          
          <creation_ts>2016-02-16 21:24:23 -0800</creation_ts>
          <short_desc>[JSC] ARM64: Support the immediate format used for bit operations in Air</short_desc>
          <delta_ts>2016-02-17 17:38:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1165502</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-02-16 21:24:23 -0800</bug_when>
    <thetext>[JSC] ARM64: Support the immediate format used for bit operations in Air</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165503</commentid>
    <comment_count>1</comment_count>
      <attachid>271534</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-02-16 21:27:28 -0800</bug_when>
    <thetext>Created attachment 271534
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165504</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-02-16 21:27:50 -0800</bug_when>
    <thetext>                                                  Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                   10.6259+-0.1609     ?     10.7039+-0.2462        ?
   3d-morph                                   8.4937+-0.1152            8.4609+-0.1249        
   3d-raytrace                                9.9026+-0.7400            9.3949+-0.2922          might be 1.0540x faster
   access-binary-trees                        4.3587+-0.0779            4.1966+-0.3330          might be 1.0386x faster
   access-fannkuch                           12.4793+-0.5196           12.1708+-0.3690          might be 1.0253x faster
   access-nbody                               4.8353+-0.0709            4.8161+-0.0375        
   access-nsieve                              3.6112+-0.0495            3.5861+-0.0552        
   bitops-3bit-bits-in-byte                   1.8573+-0.1579            1.8478+-0.1336        
   bitops-bits-in-byte                        4.3606+-0.0282            4.3381+-0.0277        
   bitops-bitwise-and                         3.2670+-0.0584     ?      3.2806+-0.0428        ?
   bitops-nsieve-bits                         5.9529+-0.0428     ?      5.9532+-0.0327        ?
   controlflow-recursive                      3.5228+-0.2217            3.4280+-0.0583          might be 1.0277x faster
   crypto-aes                                 6.6439+-0.0956            6.5609+-0.0582          might be 1.0126x faster
   crypto-md5                                 4.4277+-0.2567     ?      4.4388+-0.2313        ?
   crypto-sha1                                3.8207+-0.0507     ?      3.8247+-0.0385        ?
   date-format-tofte                         11.1618+-0.1076     ?     11.2150+-0.0481        ?
   date-format-xparb                          7.4947+-0.0688            7.4224+-0.0830        
   math-cordic                                5.5132+-0.0845            5.4836+-0.0885        
   math-partial-sums                         11.5699+-0.0597     ?     11.6865+-0.1306        ? might be 1.0101x slower
   math-spectral-norm                         3.5200+-0.2787     ?      3.6025+-0.2334        ? might be 1.0234x slower
   regexp-dna                                 9.9029+-0.0579     ?      9.9549+-0.1013        ?
   string-base64                              6.7249+-0.1021            6.6929+-0.1031        
   string-fasta                               9.8861+-0.5924            9.6616+-0.4019          might be 1.0232x faster
   string-tagcloud                           11.3032+-0.1542     ?     11.3549+-0.1723        ?
   string-unpack-code                        24.2059+-0.1220     ?     24.2663+-0.2522        ?
   string-validate-input                      6.8876+-0.2015            6.8531+-0.1610        

   &lt;arithmetic&gt;                               7.5511+-0.0423            7.5075+-0.0230          might be 1.0058x faster

                                                  Conf#1                    Conf#2                                      
Octane:
   encrypt                                   0.19698+-0.00186    ?     0.19813+-0.00134       ?
   decrypt                                   3.72593+-0.01081          3.72395+-0.00278       
   deltablue                        x2       0.18019+-0.00498    ?     0.18165+-0.00457       ?
   earley                                    0.43546+-0.01294          0.42855+-0.01119         might be 1.0161x faster
   boyer                                     7.95566+-0.17370          7.78175+-0.20761         might be 1.0223x faster
   navier-stokes                    x2       7.19211+-0.01263    ?     7.19258+-0.02032       ?
   raytrace                         x2       1.31503+-0.00583          1.30708+-0.01012       
   richards                         x2       0.11559+-0.00125          0.11427+-0.00204         might be 1.0116x faster
   splay                            x2       0.76936+-0.03372    ?     0.78618+-0.02068       ? might be 1.0219x slower
   regexp                           x2      37.57838+-0.21623    ?    37.67172+-0.16530       ?
   pdfjs                            x2      58.32623+-1.16359    ?    58.49797+-0.54209       ?
   mandreel                         x2      73.32341+-1.01299         73.28475+-1.23368       
   gbemu                            x2      47.71401+-3.97012         47.09977+-3.85345         might be 1.0130x faster
   closure                                   0.66651+-0.00264    ?     0.66832+-0.00149       ?
   jquery                                    9.93205+-0.04019          9.92038+-0.07714       
   box2d                            x2      16.32389+-0.10072         16.27720+-0.08044       
   zlib                             x2     703.71842+-2.69901        688.32996+-42.49641        might be 1.0224x faster
   typescript                       x2    1187.45579+-10.15948   ?  1192.07112+-20.70651      ?

   &lt;geometric&gt;                               8.32988+-0.05431          8.31031+-0.06174         might be 1.0024x faster

                                                  Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                  157.554+-0.813            156.646+-0.304         
   audio-beat-detection                       59.781+-1.664             59.194+-0.505         
   audio-dft                                 162.053+-7.578            156.984+-4.836           might be 1.0323x faster
   audio-fft                                  42.440+-0.828             42.056+-0.112         
   audio-oscillator                           58.044+-0.274      ?      58.233+-0.319         ?
   imaging-darkroom                           69.185+-0.111      !      69.372+-0.069         ! definitely 1.0027x slower
   imaging-desaturate                         79.319+-1.054             78.860+-0.406         
   imaging-gaussian-blur                     107.445+-0.098      ?     107.495+-0.179         ?
   json-parse-financial                       48.552+-0.214      ^      48.087+-0.193         ^ definitely 1.0097x faster
   json-stringify-tinderbox                   27.113+-0.126      ?      27.167+-0.275         ?
   stanford-crypto-aes                        58.307+-0.225      ?      58.551+-0.287         ?
   stanford-crypto-ccm                        46.479+-1.266      ?      47.822+-1.995         ? might be 1.0289x slower
   stanford-crypto-pbkdf2                    141.859+-0.350      ^     139.908+-0.660         ^ definitely 1.0139x faster
   stanford-crypto-sha256-iterative           51.979+-0.393             51.905+-0.641         

   &lt;arithmetic&gt;                               79.294+-0.555             78.734+-0.391           might be 1.0071x faster

                                                  Conf#1                    Conf#2                                      
AsmBench:
   bigfib.cpp                               661.5652+-32.1260         644.4079+-22.7548         might be 1.0266x faster
   cray.c                                   564.2493+-1.7631     ?    564.6086+-1.3027        ?
   dry.c                                    473.1734+-4.5009     ?    476.7126+-3.6193        ?
   FloatMM.c                                794.1680+-1.4626          793.7352+-1.9449        
   gcc-loops.cpp                           4619.4386+-10.1248        4608.3054+-5.4025        
   n-body.c                                1770.3392+-0.6187     !   1774.5906+-3.6078        ! definitely 1.0024x slower
   Quicksort.c                              568.7667+-2.6090     ?    569.0330+-2.8642        ?
   stepanov_container.cpp                  5843.8760+-13.9853        5832.8068+-10.2412       
   Towers.c                                 283.6298+-0.8808          283.3585+-0.6973        

   &lt;geometric&gt;                             1008.5199+-5.2776         1006.2609+-4.4662          might be 1.0022x faster

                                                  Conf#1                    Conf#2                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                           47.3567+-0.1022           47.1509+-0.1418          might be 1.0044x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165735</commentid>
    <comment_count>3</comment_count>
      <attachid>271534</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 14:03:22 -0800</bug_when>
    <thetext>Comment on attachment 271534
Patch

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

&gt; Source/JavaScriptCore/b3/air/AirOpcode.opcodes:400
&gt; +    arm64: BitImm64, Tmp, Tmp

I don&apos;t understand this.

1) Does it really support 64-bit immediates?
2) Why can&apos;t we use Imm64 in that case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165762</commentid>
    <comment_count>4</comment_count>
      <attachid>271596</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-02-17 15:00:35 -0800</bug_when>
    <thetext>Created attachment 271596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165827</commentid>
    <comment_count>5</comment_count>
      <attachid>271596</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-17 17:38:39 -0800</bug_when>
    <thetext>Comment on attachment 271596
Patch

Clearing flags on attachment: 271596

Committed r196736: &lt;http://trac.webkit.org/changeset/196736&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165828</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-17 17:38:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271534</attachid>
            <date>2016-02-16 21:27:28 -0800</date>
            <delta_ts>2016-02-17 15:00:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154327-20160216212709.patch</filename>
            <type>text/plain</type>
            <size>35266</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2Njc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZTVlZTJmNWJmMzg4OWRhODMyMTRhNDRjYmFjNzM0ZTZiYTRkZmFkLi4zMDdmMGJlNzZmYjAyNDcz
ODkwNWRjMThkZmE5ODg0N2Y0YWJmYzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MiBAQAorMjAxNi0wMi0xNiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBBUk02NDogU3VwcG9ydCB0aGUgaW1tZWRpYXRlIGZvcm1h
dCB1c2VkIGZvciBiaXQgb3BlcmF0aW9ucyBpbiBBaXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDMyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFSTTY0IHN1cHBvcnRzIGEgcHJldHR5IHJpY2ggZm9y
bSBvZiBpbW1lZGlhdGVzIGZvciBiaXQgb3BlcmF0aW9uLgorICAgICAgICBUaGVyZSBhcmUgdHdv
IGZvcm1hdHMgdXNlZCB0byBlbmNvZGUgcmVwZWF0aW5nIHBhdHRlcm5zIGFuZCBjb21tb24KKyAg
ICAgICAgaW5wdXQgaW4gYSBkZW5zZSBmb3JtLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIEkg
YWRkIDIgbmV3IHR5cGUgb2YgQXJnOiBCaXRJbW0zMiBhbmQgQml0SW1tNjQuCisgICAgICAgIFRo
b3NlIHJlcHJlc2VudHMgdGhlIHZhbGlkIGltbWVkaWF0ZSBmb3JtcyBmb3IgYml0IG9wZXJhdGlv
bi4KKyAgICAgICAgT24geDg2LCBhbnkgMzJiaXRzIHZhbHVlIGlzIHZhbGlkLiBPbiBBUk02NCwg
YWxsIHRoZSBlbmNvZGluZworICAgICAgICBmb3JtIGFyZSB0cmllZCBhbmQgdGhlIGltbWVkaWF0
ZSBpcyB1c2VkIHdoZW4gcG9zc2libGUuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNNjRBc3Nl
bWJsZXIuaDoKKyAgICAgICAgKEpTQzo6TG9naWNhbEltbWVkaWF0ZTo6Y3JlYXRlMzIpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpMb2dpY2FsSW1tZWRpYXRlOjpjcmVhdGU2NCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkxvZ2ljYWxJbW1lZGlhdGU6OnZhbHVlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TG9naWNhbEltbWVkaWF0ZTo6aXNWYWxpZCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkxvZ2ljYWxJbW1lZGlhdGU6OmlzNjRiaXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpM
b2dpY2FsSW1tZWRpYXRlOjpMb2dpY2FsSW1tZWRpYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6TG9naWNhbEltbWVkaWF0ZTo6bWFzayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkxvZ2lj
YWxJbW1lZGlhdGU6OnBhcnRpYWxIU0IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpMb2dpY2Fs
SW1tZWRpYXRlOjpoaWdoZXN0U2V0Qml0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TG9naWNh
bEltbWVkaWF0ZTo6ZmluZEJpdFJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TG9naWNh
bEltbWVkaWF0ZTo6ZW5jb2RlTG9naWNhbEltbWVkaWF0ZSk6IERlbGV0ZWQuCisgICAgICAgICog
YXNzZW1ibGVyL0Fzc2VtYmxlckNvbW1vbi5oOgorICAgICAgICAoSlNDOjpBUk02NExvZ2ljYWxJ
bW1lZGlhdGU6OmNyZWF0ZTMyKToKKyAgICAgICAgKEpTQzo6QVJNNjRMb2dpY2FsSW1tZWRpYXRl
OjpjcmVhdGU2NCk6CisgICAgICAgIChKU0M6OkFSTTY0TG9naWNhbEltbWVkaWF0ZTo6dmFsdWUp
OgorICAgICAgICAoSlNDOjpBUk02NExvZ2ljYWxJbW1lZGlhdGU6OmlzVmFsaWQpOgorICAgICAg
ICAoSlNDOjpBUk02NExvZ2ljYWxJbW1lZGlhdGU6OmlzNjRiaXQpOgorICAgICAgICAoSlNDOjpB
Uk02NExvZ2ljYWxJbW1lZGlhdGU6OkFSTTY0TG9naWNhbEltbWVkaWF0ZSk6CisgICAgICAgIChK
U0M6OkFSTTY0TG9naWNhbEltbWVkaWF0ZTo6bWFzayk6CisgICAgICAgIChKU0M6OkFSTTY0TG9n
aWNhbEltbWVkaWF0ZTo6cGFydGlhbEhTQik6CisgICAgICAgIChKU0M6OkFSTTY0TG9naWNhbElt
bWVkaWF0ZTo6aGlnaGVzdFNldEJpdCk6CisgICAgICAgIChKU0M6OkFSTTY0TG9naWNhbEltbWVk
aWF0ZTo6ZmluZEJpdFJhbmdlKToKKyAgICAgICAgKEpTQzo6QVJNNjRMb2dpY2FsSW1tZWRpYXRl
OjplbmNvZGVMb2dpY2FsSW1tZWRpYXRlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjphbmQ2NCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yNjQpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3I2NCk6CisgICAgICAgICogYjMvQjNMb3dlclRvQWly
LmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Yml0SW1tKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Yml0SW1tNjQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMb3dlclRvQWlyOjphcHBlbmRCaW5PcCk6CisgICAgICAgICogYjMvYWlyL0FpckFy
Zy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6ZHVtcCk6CisgICAgICAgIChXVEY6
OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmcuaDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjpiaXRJbW0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmJp
dEltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0JpdEltbSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNCaXRJbW02NCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6aXNTb21lSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp2YWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6aXNGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzVHlwZSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNWYWxpZEJpdEltbUZvcm0pOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmlzVmFsaWRCaXRJbW02NEZvcm0pOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzVmFsaWRGb3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1Ry
dXN0ZWRJbW0zMik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNUcnVzdGVkSW1tNjQp
OgorICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAgKiBiMy9haXIv
b3Bjb2RlX2dlbmVyYXRvci5yYjoKKwogMjAxNi0wMi0xNiAgR2F2aW4gQmFycmFjbG91Z2ggIDxi
YXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgSlNET01XaW5kb3c6OmdldE93blByb3Bl
cnR5U2xvdCBzaG91bGQganVzdCBjYWxsIGdldFN0YXRpY1Byb3BlcnR5U2xvdApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCmluZGV4IGMzNzM1
ZGEzZWFhY2VjZGE5YWEzYzQzMWNiMjdiY2FiNjllZjc1MmMuLmU1NzM2MjBjNDZhYWYyMDU3MmMz
NWIzNTZhYTVlMmYxNDIxNTg2ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKQEAgLTE0NywyMjcgKzE0Nyw3IEBAIHByaXZhdGU6CiAg
ICAgaW50IG1fdmFsdWU7CiB9OwogCi1jbGFzcyBMb2dpY2FsSW1tZWRpYXRlIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgTG9naWNhbEltbWVkaWF0ZSBjcmVhdGUzMih1aW50MzJfdCB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIC8vIENoZWNrIGZvciAwLCAtMSAtIHRoZXNlIGNhbm5vdCBiZSBlbmNvZGVk
LgotICAgICAgICBpZiAoIXZhbHVlIHx8ICF+dmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gSW52
YWxpZExvZ2ljYWxJbW1lZGlhdGU7Ci0KLSAgICAgICAgLy8gRmlyc3QgbG9vayBmb3IgYSAzMi1i
aXQgcGF0dGVybiwgdGhlbiBmb3IgcmVwZWF0aW5nIDE2LWJpdAotICAgICAgICAvLyBwYXR0ZXJu
cywgOC1iaXQsIDQtYml0LCBhbmQgZmluYWxseSAyLWJpdC4KLQotICAgICAgICB1bnNpZ25lZCBo
c2IsIGxzYjsKLSAgICAgICAgYm9vbCBpbnZlcnRlZDsKLSAgICAgICAgaWYgKGZpbmRCaXRSYW5n
ZTwzMj4odmFsdWUsIGhzYiwgbHNiLCBpbnZlcnRlZCkpCi0gICAgICAgICAgICByZXR1cm4gZW5j
b2RlTG9naWNhbEltbWVkaWF0ZTwzMj4oaHNiLCBsc2IsIGludmVydGVkKTsKLQotICAgICAgICBp
ZiAoKHZhbHVlICYgMHhmZmZmKSAhPSAodmFsdWUgPj4gMTYpKQotICAgICAgICAgICAgcmV0dXJu
IEludmFsaWRMb2dpY2FsSW1tZWRpYXRlOwotICAgICAgICB2YWx1ZSAmPSAweGZmZmY7Ci0KLSAg
ICAgICAgaWYgKGZpbmRCaXRSYW5nZTwxNj4odmFsdWUsIGhzYiwgbHNiLCBpbnZlcnRlZCkpCi0g
ICAgICAgICAgICByZXR1cm4gZW5jb2RlTG9naWNhbEltbWVkaWF0ZTwxNj4oaHNiLCBsc2IsIGlu
dmVydGVkKTsKLQotICAgICAgICBpZiAoKHZhbHVlICYgMHhmZikgIT0gKHZhbHVlID4+IDgpKQot
ICAgICAgICAgICAgcmV0dXJuIEludmFsaWRMb2dpY2FsSW1tZWRpYXRlOwotICAgICAgICB2YWx1
ZSAmPSAweGZmOwotCi0gICAgICAgIGlmIChmaW5kQml0UmFuZ2U8OD4odmFsdWUsIGhzYiwgbHNi
LCBpbnZlcnRlZCkpCi0gICAgICAgICAgICByZXR1cm4gZW5jb2RlTG9naWNhbEltbWVkaWF0ZTw4
Pihoc2IsIGxzYiwgaW52ZXJ0ZWQpOwotCi0gICAgICAgIGlmICgodmFsdWUgJiAweGYpICE9ICh2
YWx1ZSA+PiA0KSkKLSAgICAgICAgICAgIHJldHVybiBJbnZhbGlkTG9naWNhbEltbWVkaWF0ZTsK
LSAgICAgICAgdmFsdWUgJj0gMHhmOwotCi0gICAgICAgIGlmIChmaW5kQml0UmFuZ2U8ND4odmFs
dWUsIGhzYiwgbHNiLCBpbnZlcnRlZCkpCi0gICAgICAgICAgICByZXR1cm4gZW5jb2RlTG9naWNh
bEltbWVkaWF0ZTw0Pihoc2IsIGxzYiwgaW52ZXJ0ZWQpOwotCi0gICAgICAgIGlmICgodmFsdWUg
JiAweDMpICE9ICh2YWx1ZSA+PiAyKSkKLSAgICAgICAgICAgIHJldHVybiBJbnZhbGlkTG9naWNh
bEltbWVkaWF0ZTsKLSAgICAgICAgdmFsdWUgJj0gMHgzOwotCi0gICAgICAgIGlmIChmaW5kQml0
UmFuZ2U8Mj4odmFsdWUsIGhzYiwgbHNiLCBpbnZlcnRlZCkpCi0gICAgICAgICAgICByZXR1cm4g
ZW5jb2RlTG9naWNhbEltbWVkaWF0ZTwyPihoc2IsIGxzYiwgaW52ZXJ0ZWQpOwotCi0gICAgICAg
IHJldHVybiBJbnZhbGlkTG9naWNhbEltbWVkaWF0ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgTG9n
aWNhbEltbWVkaWF0ZSBjcmVhdGU2NCh1aW50NjRfdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIC8v
IENoZWNrIGZvciAwLCAtMSAtIHRoZXNlIGNhbm5vdCBiZSBlbmNvZGVkLgotICAgICAgICBpZiAo
IXZhbHVlIHx8ICF+dmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gSW52YWxpZExvZ2ljYWxJbW1l
ZGlhdGU7Ci0KLSAgICAgICAgLy8gTG9vayBmb3IgYSBjb250aWd1b3VzIGJpdCByYW5nZS4KLSAg
ICAgICAgdW5zaWduZWQgaHNiLCBsc2I7Ci0gICAgICAgIGJvb2wgaW52ZXJ0ZWQ7Ci0gICAgICAg
IGlmIChmaW5kQml0UmFuZ2U8NjQ+KHZhbHVlLCBoc2IsIGxzYiwgaW52ZXJ0ZWQpKQotICAgICAg
ICAgICAgcmV0dXJuIGVuY29kZUxvZ2ljYWxJbW1lZGlhdGU8NjQ+KGhzYiwgbHNiLCBpbnZlcnRl
ZCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGhpZ2ggJiBsb3cgMzIgYml0cyBhcmUgZXF1YWwsIHdl
IGNhbiB0cnkgZm9yIGEgMzItYml0IChvciBuYXJyb3dlcikgcGF0dGVybi4KLSAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkgPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZh
bHVlID4+IDMyKSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGUzMihzdGF0aWNfY2FzdDx1aW50
MzJfdD4odmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIEludmFsaWRMb2dpY2FsSW1tZWRpYXRlOwot
ICAgIH0KLQotICAgIGludCB2YWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNW
YWxpZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0gICAgfQotCi0gICAgYm9vbCBpc1Zh
bGlkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlICE9IEludmFsaWRMb2dp
Y2FsSW1tZWRpYXRlOwotICAgIH0KLQotICAgIGJvb2wgaXM2NGJpdCgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV92YWx1ZSAmICgxIDw8IDEyKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgTG9naWNhbEltbWVkaWF0ZShpbnQgdmFsdWUpCi0gICAgICAgIDogbV92YWx1ZSh2YWx1ZSkK
LSAgICB7Ci0gICAgfQotCi0gICAgLy8gR2VuZXJhdGUgYSBtYXNrIHdpdGggYml0cyBpbiB0aGUg
cmFuZ2UgaHNiLi4wIHNldCwgZm9yIGV4YW1wbGU6Ci0gICAgLy8gICBoc2I6NjMgPSAweGZmZmZm
ZmZmZmZmZmZmZmYKLSAgICAvLyAgIGhzYjo0MiA9IDB4MDAwMDA3ZmZmZmZmZmZmZgotICAgIC8v
ICAgaHNiOiAwID0gMHgwMDAwMDAwMDAwMDAwMDAxCi0gICAgc3RhdGljIHVpbnQ2NF90IG1hc2so
dW5zaWduZWQgaHNiKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGhzYiA8IDY0KTsKLSAgICAgICAg
cmV0dXJuIDB4ZmZmZmZmZmZmZmZmZmZmZnVsbCA+PiAoNjMgLSBoc2IpOwotICAgIH0KLQotICAg
IHRlbXBsYXRlPHVuc2lnbmVkIE4+Ci0gICAgc3RhdGljIHZvaWQgcGFydGlhbEhTQih1aW50NjRf
dCYgdmFsdWUsIHVuc2lnbmVkJnJlc3VsdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZSAmICgw
eGZmZmZmZmZmZmZmZmZmZmZ1bGwgPDwgTikpIHsKLSAgICAgICAgICAgIHJlc3VsdCArPSBOOwot
ICAgICAgICAgICAgdmFsdWUgPj49IE47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGaW5k
IHRoZSBiaXQgbnVtYmVyIG9mIHRoZSBoaWdoZXN0IGJpdCBzZXQgaW4gYSBub24temVybyB2YWx1
ZSwgZm9yIGV4YW1wbGU6Ci0gICAgLy8gICAweDgwODA4MDgwODA4MDgwODAgPSBoc2I6NjMKLSAg
ICAvLyAgIDB4MDAwMDAwMDAwMDAwMDAwMSA9IGhzYjogMAotICAgIC8vICAgMHgwMDAwMDdmZmZm
ZTAwMDAwID0gaHNiOjQyCi0gICAgc3RhdGljIHVuc2lnbmVkIGhpZ2hlc3RTZXRCaXQodWludDY0
X3QgdmFsdWUpCi0gICAgewotICAgICAgICBBU1NFUlQodmFsdWUpOwotICAgICAgICB1bnNpZ25l
ZCBoc2IgPSAwOwotICAgICAgICBwYXJ0aWFsSFNCPDMyPih2YWx1ZSwgaHNiKTsKLSAgICAgICAg
cGFydGlhbEhTQjwxNj4odmFsdWUsIGhzYik7Ci0gICAgICAgIHBhcnRpYWxIU0I8OD4odmFsdWUs
IGhzYik7Ci0gICAgICAgIHBhcnRpYWxIU0I8ND4odmFsdWUsIGhzYik7Ci0gICAgICAgIHBhcnRp
YWxIU0I8Mj4odmFsdWUsIGhzYik7Ci0gICAgICAgIHBhcnRpYWxIU0I8MT4odmFsdWUsIGhzYik7
Ci0gICAgICAgIHJldHVybiBoc2I7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiB0YWtl
cyBhIHZhbHVlIGFuZCBhIGJpdCB3aWR0aCwgd2hlcmUgdmFsdWUgb2JleXMgdGhlIGZvbGxvd2lu
ZyBjb25zdHJhaW50czoKLSAgICAvLyAgICogYml0cyBvdXRzaWRlIG9mIHRoZSB3aWR0aCBvZiB0
aGUgdmFsdWUgbXVzdCBiZSB6ZXJvLgotICAgIC8vICAgKiBiaXRzIHdpdGhpbiB0aGUgd2lkdGgg
b2YgdmFsdWUgbXVzdCBuZWl0aGVyIGJlIGFsbCBjbGVhciBvciBhbGwgc2V0LgotICAgIC8vIFRo
ZSBpbnB1dCBpcyBpbnNwZWN0ZWQgdG8gZGV0ZWN0IHZhbHVlcyB0aGF0IGNvbnNpc3Qgb2YgZWl0
aGVyIHR3byBvciB0aHJlZSBjb250aWd1b3VzCi0gICAgLy8gcmFuZ2VzIG9mIGJpdHMuIFRoZSBv
dXRwdXQgcmFuZ2UgaHNiLi5sc2Igd2lsbCBkZXNjcmliZSB0aGUgc2Vjb25kIHJhbmdlIG9mIHRo
ZSB2YWx1ZS4KLSAgICAvLyBpZiB0aGUgcmFuZ2UgaXMgc2V0LCBpbnZlcnRlZCB3aWxsIGJlIGZh
bHNlLCBhbmQgaWYgdGhlIHJhbmdlIGlzIGNsZWFyLCBpbnZlcnRlZCB3aWxsCi0gICAgLy8gYmUg
dHJ1ZS4gRm9yIGV4YW1wbGUgKHdpdGggd2lkdGggOCk6Ci0gICAgLy8gICAwMDAwMTExMSA9IGhz
YjozLCBsc2I6MCwgaW52ZXJ0ZWQ6ZmFsc2UKLSAgICAvLyAgIDExMTEwMDAwID0gaHNiOjMsIGxz
YjowLCBpbnZlcnRlZDp0cnVlCi0gICAgLy8gICAwMDExMTEwMCA9IGhzYjo1LCBsc2I6MiwgaW52
ZXJ0ZWQ6ZmFsc2UKLSAgICAvLyAgIDExMDAwMDExID0gaHNiOjUsIGxzYjoyLCBpbnZlcnRlZDp0
cnVlCi0gICAgdGVtcGxhdGU8dW5zaWduZWQgd2lkdGg+Ci0gICAgc3RhdGljIGJvb2wgZmluZEJp
dFJhbmdlKHVpbnQ2NF90IHZhbHVlLCB1bnNpZ25lZCYgaHNiLCB1bnNpZ25lZCYgbHNiLCBib29s
JiBpbnZlcnRlZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2YWx1ZSAmIG1hc2sod2lkdGggLSAx
KSk7Ci0gICAgICAgIEFTU0VSVCh2YWx1ZSAhPSBtYXNrKHdpZHRoIC0gMSkpOwotICAgICAgICBB
U1NFUlQoISh2YWx1ZSAmIH5tYXNrKHdpZHRoIC0gMSkpKTsKLQotICAgICAgICAvLyBEZXRlY3Qg
Y2FzZXMgd2hlcmUgdGhlIHRvcCBiaXQgaXMgc2V0OyBpZiBzbywgZmxpcCBhbGwgdGhlIGJpdHMg
JiBzZXQgaW52ZXJ0LgotICAgICAgICAvLyBUaGlzIGhhbHZlcyB0aGUgbnVtYmVyIG9mIHBhdHRl
cm5zIHdlIG5lZWQgdG8gbG9vayBmb3IuCi0gICAgICAgIGNvbnN0IHVpbnQ2NF90IG1zYiA9IDF1
bGwgPDwgKHdpZHRoIC0gMSk7Ci0gICAgICAgIGlmICgoaW52ZXJ0ZWQgPSAodmFsdWUgJiBtc2Ip
KSkKLSAgICAgICAgICAgIHZhbHVlIF49IG1hc2sod2lkdGggLSAxKTsKLQotICAgICAgICAvLyBG
aW5kIHRoZSBoaWdoZXN0IHNldCBiaXQgaW4gdmFsdWUsIGdlbmVyYXRlIGEgY29ycmVzcG9uZGlu
ZyBtYXNrICYgZmxpcCBhbGwKLSAgICAgICAgLy8gYml0cyB1bmRlciBpdC4KLSAgICAgICAgaHNi
ID0gaGlnaGVzdFNldEJpdCh2YWx1ZSk7Ci0gICAgICAgIHZhbHVlIF49IG1hc2soaHNiKTsKLSAg
ICAgICAgaWYgKCF2YWx1ZSkgewotICAgICAgICAgICAgLy8gSWYgdGhpcyBjbGVhcmVkIHRoZSB2
YWx1ZSwgdGhlbiB0aGUgcmFuZ2UgaHNiLi4wIHdhcyBhbGwgc2V0LgotICAgICAgICAgICAgbHNi
ID0gMDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
VHJ5IG1ha2luZyBvbmUgbW9yZSBtYXNrLCBhbmQgZmxpcHBpbmcgdGhlIGJpdHMhCi0gICAgICAg
IGxzYiA9IGhpZ2hlc3RTZXRCaXQodmFsdWUpOwotICAgICAgICB2YWx1ZSBePSBtYXNrKGxzYik7
Ci0gICAgICAgIGlmICghdmFsdWUpIHsKLSAgICAgICAgICAgIC8vIFN1Y2Nlc3MgLSBidXQgbHNi
IGFjdHVhbGx5IHBvaW50cyB0byB0aGUgaHNiIG9mIGEgdGhpcmQgcmFuZ2UgLSBhZGQgb25lCi0g
ICAgICAgICAgICAvLyB0byBnZXQgdG8gdGhlIGxzYiBvZiB0aGUgbWlkIHJhbmdlLgotICAgICAg
ICAgICAgKytsc2I7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBFbmNvZGVzIHRoZSBzZXQgb2YgaW1t
TjppbW1yOmltbXMgZmllbGRzIGZvdW5kIGluIGEgbG9naWNhbCBpbW1lZGlhdGUuCi0gICAgdGVt
cGxhdGU8dW5zaWduZWQgd2lkdGg+Ci0gICAgc3RhdGljIGludCBlbmNvZGVMb2dpY2FsSW1tZWRp
YXRlKHVuc2lnbmVkIGhzYiwgdW5zaWduZWQgbHNiLCBib29sIGludmVydGVkKQotICAgIHsKLSAg
ICAgICAgLy8gQ2hlY2sgd2lkdGggaXMgYSBwb3dlciBvZiAyIQotICAgICAgICBBU1NFUlQoISh3
aWR0aCAmICh3aWR0aCAtMSkpKTsKLSAgICAgICAgQVNTRVJUKHdpZHRoIDw9IDY0ICYmIHdpZHRo
ID49IDIpOwotICAgICAgICBBU1NFUlQoaHNiID49IGxzYik7Ci0gICAgICAgIEFTU0VSVChoc2Ig
PCB3aWR0aCk7Ci0KLSAgICAgICAgaW50IGltbU4gPSAwOwotICAgICAgICBpbnQgaW1tcyA9IDA7
Ci0gICAgICAgIGludCBpbW1yID0gMDsKLQotICAgICAgICAvLyBGb3IgNjQtYml0IHZhbHVlcyB0
aGlzIGlzIGVhc3kgLSBqdXN0IHNldCBpbW1OIHRvIHRydWUsIGFuZCBpbW1zIGp1c3QKLSAgICAg
ICAgLy8gY29udGFpbnMgdGhlIGJpdCBudW1iZXIgb2YgdGhlIGhpZ2hlc3Qgc2V0IGJpdCBvZiB0
aGUgc2V0IHJhbmdlLiBGb3IKLSAgICAgICAgLy8gdmFsdWVzIHdpdGggbmFycm93ZXIgd2lkdGhz
LCB0aGVzZSBhcmUgZW5jb2RlZCBieSBhIGxlYWRpbmcgc2V0IG9mCi0gICAgICAgIC8vIG9uZSBi
aXRzLCBmb2xsb3dlZCBieSBhIHplcm8gYml0LCBmb2xsb3dlZCBieSB0aGUgcmVtYWluaW5nIHNl
dCBvZiBiaXRzCi0gICAgICAgIC8vIGJlaW5nIHRoZSBoaWdoIGJpdCBvZiB0aGUgcmFuZ2UuIEZv
ciBhIDMyLWJpdCBpbW1lZGlhdGUgdGhlcmUgYXJlIG5vCi0gICAgICAgIC8vIGxlYWRpbmcgb25l
IGJpdHMsIGp1c3QgYSB6ZXJvIGZvbGxvd2VkIGJ5IGEgZml2ZSBiaXQgbnVtYmVyLiBGb3IgYQot
ICAgICAgICAvLyAxNi1iaXQgaW1tZWRpYXRlIHRoZXJlIGlzIG9uZSBvbmUgYml0LCBhIHplcm8g
Yml0LCBhbmQgdGhlbiBhIGZvdXIgYml0Ci0gICAgICAgIC8vIGJpdC1wb3NpdGlvbiwgZXRjLgot
ICAgICAgICBpZiAod2lkdGggPT0gNjQpCi0gICAgICAgICAgICBpbW1OID0gMTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgaW1tcyA9IDYzICYgfih3aWR0aCArIHdpZHRoIC0gMSk7Ci0KLSAg
ICAgICAgaWYgKGludmVydGVkKSB7Ci0gICAgICAgICAgICAvLyBpZiB3aWR0aCBpcyA2NCAmIGhz
YiBpcyA2MiwgdGhlbiB3ZSBoYXZlIGEgdmFsdWUgc29tZXRoaW5nIGxpa2U6Ci0gICAgICAgICAg
ICAvLyAgIDB4ODAwMDAwMDBmZmZmZmZmZiAoaW4gdGhpcyBjYXNlIHdpdGggbHNiIDMyKS4KLSAg
ICAgICAgICAgIC8vIFRoZSByb3Igc2hvdWxkIGJlIGJ5IDEsIGltbXMgKGVmZmVjdGl2ZWx5IHNl
dCB3aWR0aCBtaW51cyAxKSBpcwotICAgICAgICAgICAgLy8gMzIuIFNldCB3aWR0aCBpcyBmdWxs
IHdpZHRoIG1pbnVzIGNsZWFyZWQgd2lkdGguCi0gICAgICAgICAgICBpbW1yID0gKHdpZHRoIC0g
MSkgLSBoc2I7Ci0gICAgICAgICAgICBpbW1zIHw9ICh3aWR0aCAtICgoaHNiIC0gbHNiKSArIDEp
KSAtIDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBpZiB3aWR0aCBpcyA2NCAm
IGhzYiBpcyA2MiwgdGhlbiB3ZSBoYXZlIGEgdmFsdWUgc29tZXRoaW5nIGxpa2U6Ci0gICAgICAg
ICAgICAvLyAgIDB4N2ZmZmZmZmYwMDAwMDAwMCAoaW4gdGhpcyBjYXNlIHdpdGggbHNiIDMyKS4K
LSAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBlZmZlY3RpdmVseSByb2wnZWQgYnkgbHNiLCB3
aGljaCBpcyBlcXVpdmFsZW50IHRvCi0gICAgICAgICAgICAvLyBhIHJvciBieSB3aWR0aCAtIGxz
YiAob3IgMCwgaW4gdGhlIGNhc2Ugd2hlcmUgbHNiIGlzIDApLiBpbW1zCi0gICAgICAgICAgICAv
LyBpcyBoc2IgLSBsc2IuCi0gICAgICAgICAgICBpbW1yID0gKHdpZHRoIC0gbHNiKSAmICh3aWR0
aCAtIDEpOwotICAgICAgICAgICAgaW1tcyB8PSBoc2IgLSBsc2I7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gaW1tTiA8PCAxMiB8IGltbXIgPDwgNiB8IGltbXM7Ci0gICAgfQotCi0gICAg
c3RhdGljIGNvbnN0IGludCBJbnZhbGlkTG9naWNhbEltbWVkaWF0ZSA9IC0xOwotCi0gICAgaW50
IG1fdmFsdWU7Ci19OwordHlwZWRlZiBBUk02NExvZ2ljYWxJbW1lZGlhdGUgTG9naWNhbEltbWVk
aWF0ZTsKIAogaW5saW5lIHVpbnQxNl90IGdldEhhbGZ3b3JkKHVpbnQ2NF90IHZhbHVlLCBpbnQg
d2hpY2gpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fz
c2VtYmxlckNvbW1vbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJs
ZXJDb21tb24uaAppbmRleCAzMzNiODJhNzkwYzVjZjBlODdjZGNmODg0MDUwMDQxNDY3NTI2NTNm
Li4yMWNhN2EyMGRkY2VjM2NmYzQxZTkzOGI5MTcwNjQ3Y2EwMDRlN2Q0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckNvbW1vbi5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQ29tbW9uLmgKQEAgLTY2LDYg
KzY2LDIyOSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgaXNWYWxpZFNpZ25lZEltbTkoaW50MzJfdCB2
YWx1ZSkKICAgICByZXR1cm4gaXNJbnQ5KHZhbHVlKTsKIH0KIAorY2xhc3MgQVJNNjRMb2dpY2Fs
SW1tZWRpYXRlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQVJNNjRMb2dpY2FsSW1tZWRpYXRlIGNy
ZWF0ZTMyKHVpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gQ2hlY2sgZm9yIDAsIC0x
IC0gdGhlc2UgY2Fubm90IGJlIGVuY29kZWQuCisgICAgICAgIGlmICghdmFsdWUgfHwgIX52YWx1
ZSkKKyAgICAgICAgICAgIHJldHVybiBJbnZhbGlkTG9naWNhbEltbWVkaWF0ZTsKKworICAgICAg
ICAvLyBGaXJzdCBsb29rIGZvciBhIDMyLWJpdCBwYXR0ZXJuLCB0aGVuIGZvciByZXBlYXRpbmcg
MTYtYml0CisgICAgICAgIC8vIHBhdHRlcm5zLCA4LWJpdCwgNC1iaXQsIGFuZCBmaW5hbGx5IDIt
Yml0LgorCisgICAgICAgIHVuc2lnbmVkIGhzYiwgbHNiOworICAgICAgICBib29sIGludmVydGVk
OworICAgICAgICBpZiAoZmluZEJpdFJhbmdlPDMyPih2YWx1ZSwgaHNiLCBsc2IsIGludmVydGVk
KSkKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVMb2dpY2FsSW1tZWRpYXRlPDMyPihoc2IsIGxz
YiwgaW52ZXJ0ZWQpOworCisgICAgICAgIGlmICgodmFsdWUgJiAweGZmZmYpICE9ICh2YWx1ZSA+
PiAxNikpCisgICAgICAgICAgICByZXR1cm4gSW52YWxpZExvZ2ljYWxJbW1lZGlhdGU7CisgICAg
ICAgIHZhbHVlICY9IDB4ZmZmZjsKKworICAgICAgICBpZiAoZmluZEJpdFJhbmdlPDE2Pih2YWx1
ZSwgaHNiLCBsc2IsIGludmVydGVkKSkKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVMb2dpY2Fs
SW1tZWRpYXRlPDE2Pihoc2IsIGxzYiwgaW52ZXJ0ZWQpOworCisgICAgICAgIGlmICgodmFsdWUg
JiAweGZmKSAhPSAodmFsdWUgPj4gOCkpCisgICAgICAgICAgICByZXR1cm4gSW52YWxpZExvZ2lj
YWxJbW1lZGlhdGU7CisgICAgICAgIHZhbHVlICY9IDB4ZmY7CisKKyAgICAgICAgaWYgKGZpbmRC
aXRSYW5nZTw4Pih2YWx1ZSwgaHNiLCBsc2IsIGludmVydGVkKSkKKyAgICAgICAgICAgIHJldHVy
biBlbmNvZGVMb2dpY2FsSW1tZWRpYXRlPDg+KGhzYiwgbHNiLCBpbnZlcnRlZCk7CisKKyAgICAg
ICAgaWYgKCh2YWx1ZSAmIDB4ZikgIT0gKHZhbHVlID4+IDQpKQorICAgICAgICAgICAgcmV0dXJu
IEludmFsaWRMb2dpY2FsSW1tZWRpYXRlOworICAgICAgICB2YWx1ZSAmPSAweGY7CisKKyAgICAg
ICAgaWYgKGZpbmRCaXRSYW5nZTw0Pih2YWx1ZSwgaHNiLCBsc2IsIGludmVydGVkKSkKKyAgICAg
ICAgICAgIHJldHVybiBlbmNvZGVMb2dpY2FsSW1tZWRpYXRlPDQ+KGhzYiwgbHNiLCBpbnZlcnRl
ZCk7CisKKyAgICAgICAgaWYgKCh2YWx1ZSAmIDB4MykgIT0gKHZhbHVlID4+IDIpKQorICAgICAg
ICAgICAgcmV0dXJuIEludmFsaWRMb2dpY2FsSW1tZWRpYXRlOworICAgICAgICB2YWx1ZSAmPSAw
eDM7CisKKyAgICAgICAgaWYgKGZpbmRCaXRSYW5nZTwyPih2YWx1ZSwgaHNiLCBsc2IsIGludmVy
dGVkKSkKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVMb2dpY2FsSW1tZWRpYXRlPDI+KGhzYiwg
bHNiLCBpbnZlcnRlZCk7CisKKyAgICAgICAgcmV0dXJuIEludmFsaWRMb2dpY2FsSW1tZWRpYXRl
OworICAgIH0KKworICAgIHN0YXRpYyBBUk02NExvZ2ljYWxJbW1lZGlhdGUgY3JlYXRlNjQodWlu
dDY0X3QgdmFsdWUpCisgICAgeworICAgICAgICAvLyBDaGVjayBmb3IgMCwgLTEgLSB0aGVzZSBj
YW5ub3QgYmUgZW5jb2RlZC4KKyAgICAgICAgaWYgKCF2YWx1ZSB8fCAhfnZhbHVlKQorICAgICAg
ICAgICAgcmV0dXJuIEludmFsaWRMb2dpY2FsSW1tZWRpYXRlOworCisgICAgICAgIC8vIExvb2sg
Zm9yIGEgY29udGlndW91cyBiaXQgcmFuZ2UuCisgICAgICAgIHVuc2lnbmVkIGhzYiwgbHNiOwor
ICAgICAgICBib29sIGludmVydGVkOworICAgICAgICBpZiAoZmluZEJpdFJhbmdlPDY0Pih2YWx1
ZSwgaHNiLCBsc2IsIGludmVydGVkKSkKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVMb2dpY2Fs
SW1tZWRpYXRlPDY0Pihoc2IsIGxzYiwgaW52ZXJ0ZWQpOworCisgICAgICAgIC8vIElmIHRoZSBo
aWdoICYgbG93IDMyIGJpdHMgYXJlIGVxdWFsLCB3ZSBjYW4gdHJ5IGZvciBhIDMyLWJpdCAob3Ig
bmFycm93ZXIpIHBhdHRlcm4uCisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFs
dWUpID09IHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSA+PiAzMikpCisgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7CisgICAgICAgIHJl
dHVybiBJbnZhbGlkTG9naWNhbEltbWVkaWF0ZTsKKyAgICB9CisKKyAgICBpbnQgdmFsdWUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgICAgIHJldHVybiBt
X3ZhbHVlOworICAgIH0KKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV92YWx1ZSAhPSBJbnZhbGlkTG9naWNhbEltbWVkaWF0ZTsKKyAgICB9CisKKyAg
ICBib29sIGlzNjRiaXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgJiAo
MSA8PCAxMik7CisgICAgfQorCitwcml2YXRlOgorICAgIEFSTTY0TG9naWNhbEltbWVkaWF0ZShp
bnQgdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAg
Ly8gR2VuZXJhdGUgYSBtYXNrIHdpdGggYml0cyBpbiB0aGUgcmFuZ2UgaHNiLi4wIHNldCwgZm9y
IGV4YW1wbGU6CisgICAgLy8gICBoc2I6NjMgPSAweGZmZmZmZmZmZmZmZmZmZmYKKyAgICAvLyAg
IGhzYjo0MiA9IDB4MDAwMDA3ZmZmZmZmZmZmZgorICAgIC8vICAgaHNiOiAwID0gMHgwMDAwMDAw
MDAwMDAwMDAxCisgICAgc3RhdGljIHVpbnQ2NF90IG1hc2sodW5zaWduZWQgaHNiKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGhzYiA8IDY0KTsKKyAgICAgICAgcmV0dXJuIDB4ZmZmZmZmZmZmZmZm
ZmZmZnVsbCA+PiAoNjMgLSBoc2IpOworICAgIH0KKworICAgIHRlbXBsYXRlPHVuc2lnbmVkIE4+
CisgICAgc3RhdGljIHZvaWQgcGFydGlhbEhTQih1aW50NjRfdCYgdmFsdWUsIHVuc2lnbmVkJnJl
c3VsdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSAmICgweGZmZmZmZmZmZmZmZmZmZmZ1bGwg
PDwgTikpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSBOOworICAgICAgICAgICAgdmFsdWUgPj49
IE47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGaW5kIHRoZSBiaXQgbnVtYmVyIG9mIHRo
ZSBoaWdoZXN0IGJpdCBzZXQgaW4gYSBub24temVybyB2YWx1ZSwgZm9yIGV4YW1wbGU6CisgICAg
Ly8gICAweDgwODA4MDgwODA4MDgwODAgPSBoc2I6NjMKKyAgICAvLyAgIDB4MDAwMDAwMDAwMDAw
MDAwMSA9IGhzYjogMAorICAgIC8vICAgMHgwMDAwMDdmZmZmZTAwMDAwID0gaHNiOjQyCisgICAg
c3RhdGljIHVuc2lnbmVkIGhpZ2hlc3RTZXRCaXQodWludDY0X3QgdmFsdWUpCisgICAgeworICAg
ICAgICBBU1NFUlQodmFsdWUpOworICAgICAgICB1bnNpZ25lZCBoc2IgPSAwOworICAgICAgICBw
YXJ0aWFsSFNCPDMyPih2YWx1ZSwgaHNiKTsKKyAgICAgICAgcGFydGlhbEhTQjwxNj4odmFsdWUs
IGhzYik7CisgICAgICAgIHBhcnRpYWxIU0I8OD4odmFsdWUsIGhzYik7CisgICAgICAgIHBhcnRp
YWxIU0I8ND4odmFsdWUsIGhzYik7CisgICAgICAgIHBhcnRpYWxIU0I8Mj4odmFsdWUsIGhzYik7
CisgICAgICAgIHBhcnRpYWxIU0I8MT4odmFsdWUsIGhzYik7CisgICAgICAgIHJldHVybiBoc2I7
CisgICAgfQorCisgICAgLy8gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHZhbHVlIGFuZCBhIGJpdCB3
aWR0aCwgd2hlcmUgdmFsdWUgb2JleXMgdGhlIGZvbGxvd2luZyBjb25zdHJhaW50czoKKyAgICAv
LyAgICogYml0cyBvdXRzaWRlIG9mIHRoZSB3aWR0aCBvZiB0aGUgdmFsdWUgbXVzdCBiZSB6ZXJv
LgorICAgIC8vICAgKiBiaXRzIHdpdGhpbiB0aGUgd2lkdGggb2YgdmFsdWUgbXVzdCBuZWl0aGVy
IGJlIGFsbCBjbGVhciBvciBhbGwgc2V0LgorICAgIC8vIFRoZSBpbnB1dCBpcyBpbnNwZWN0ZWQg
dG8gZGV0ZWN0IHZhbHVlcyB0aGF0IGNvbnNpc3Qgb2YgZWl0aGVyIHR3byBvciB0aHJlZSBjb250
aWd1b3VzCisgICAgLy8gcmFuZ2VzIG9mIGJpdHMuIFRoZSBvdXRwdXQgcmFuZ2UgaHNiLi5sc2Ig
d2lsbCBkZXNjcmliZSB0aGUgc2Vjb25kIHJhbmdlIG9mIHRoZSB2YWx1ZS4KKyAgICAvLyBpZiB0
aGUgcmFuZ2UgaXMgc2V0LCBpbnZlcnRlZCB3aWxsIGJlIGZhbHNlLCBhbmQgaWYgdGhlIHJhbmdl
IGlzIGNsZWFyLCBpbnZlcnRlZCB3aWxsCisgICAgLy8gYmUgdHJ1ZS4gRm9yIGV4YW1wbGUgKHdp
dGggd2lkdGggOCk6CisgICAgLy8gICAwMDAwMTExMSA9IGhzYjozLCBsc2I6MCwgaW52ZXJ0ZWQ6
ZmFsc2UKKyAgICAvLyAgIDExMTEwMDAwID0gaHNiOjMsIGxzYjowLCBpbnZlcnRlZDp0cnVlCisg
ICAgLy8gICAwMDExMTEwMCA9IGhzYjo1LCBsc2I6MiwgaW52ZXJ0ZWQ6ZmFsc2UKKyAgICAvLyAg
IDExMDAwMDExID0gaHNiOjUsIGxzYjoyLCBpbnZlcnRlZDp0cnVlCisgICAgdGVtcGxhdGU8dW5z
aWduZWQgd2lkdGg+CisgICAgc3RhdGljIGJvb2wgZmluZEJpdFJhbmdlKHVpbnQ2NF90IHZhbHVl
LCB1bnNpZ25lZCYgaHNiLCB1bnNpZ25lZCYgbHNiLCBib29sJiBpbnZlcnRlZCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCh2YWx1ZSAmIG1hc2sod2lkdGggLSAxKSk7CisgICAgICAgIEFTU0VSVCh2
YWx1ZSAhPSBtYXNrKHdpZHRoIC0gMSkpOworICAgICAgICBBU1NFUlQoISh2YWx1ZSAmIH5tYXNr
KHdpZHRoIC0gMSkpKTsKKworICAgICAgICAvLyBEZXRlY3QgY2FzZXMgd2hlcmUgdGhlIHRvcCBi
aXQgaXMgc2V0OyBpZiBzbywgZmxpcCBhbGwgdGhlIGJpdHMgJiBzZXQgaW52ZXJ0LgorICAgICAg
ICAvLyBUaGlzIGhhbHZlcyB0aGUgbnVtYmVyIG9mIHBhdHRlcm5zIHdlIG5lZWQgdG8gbG9vayBm
b3IuCisgICAgICAgIGNvbnN0IHVpbnQ2NF90IG1zYiA9IDF1bGwgPDwgKHdpZHRoIC0gMSk7Cisg
ICAgICAgIGlmICgoaW52ZXJ0ZWQgPSAodmFsdWUgJiBtc2IpKSkKKyAgICAgICAgICAgIHZhbHVl
IF49IG1hc2sod2lkdGggLSAxKTsKKworICAgICAgICAvLyBGaW5kIHRoZSBoaWdoZXN0IHNldCBi
aXQgaW4gdmFsdWUsIGdlbmVyYXRlIGEgY29ycmVzcG9uZGluZyBtYXNrICYgZmxpcCBhbGwKKyAg
ICAgICAgLy8gYml0cyB1bmRlciBpdC4KKyAgICAgICAgaHNiID0gaGlnaGVzdFNldEJpdCh2YWx1
ZSk7CisgICAgICAgIHZhbHVlIF49IG1hc2soaHNiKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkgewor
ICAgICAgICAgICAgLy8gSWYgdGhpcyBjbGVhcmVkIHRoZSB2YWx1ZSwgdGhlbiB0aGUgcmFuZ2Ug
aHNiLi4wIHdhcyBhbGwgc2V0LgorICAgICAgICAgICAgbHNiID0gMDsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHJ5IG1ha2luZyBvbmUgbW9yZSBt
YXNrLCBhbmQgZmxpcHBpbmcgdGhlIGJpdHMhCisgICAgICAgIGxzYiA9IGhpZ2hlc3RTZXRCaXQo
dmFsdWUpOworICAgICAgICB2YWx1ZSBePSBtYXNrKGxzYik7CisgICAgICAgIGlmICghdmFsdWUp
IHsKKyAgICAgICAgICAgIC8vIFN1Y2Nlc3MgLSBidXQgbHNiIGFjdHVhbGx5IHBvaW50cyB0byB0
aGUgaHNiIG9mIGEgdGhpcmQgcmFuZ2UgLSBhZGQgb25lCisgICAgICAgICAgICAvLyB0byBnZXQg
dG8gdGhlIGxzYiBvZiB0aGUgbWlkIHJhbmdlLgorICAgICAgICAgICAgKytsc2I7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBFbmNvZGVzIHRoZSBzZXQgb2YgaW1tTjppbW1yOmltbXMgZmllbGRzIGZv
dW5kIGluIGEgbG9naWNhbCBpbW1lZGlhdGUuCisgICAgdGVtcGxhdGU8dW5zaWduZWQgd2lkdGg+
CisgICAgc3RhdGljIGludCBlbmNvZGVMb2dpY2FsSW1tZWRpYXRlKHVuc2lnbmVkIGhzYiwgdW5z
aWduZWQgbHNiLCBib29sIGludmVydGVkKQorICAgIHsKKyAgICAgICAgLy8gQ2hlY2sgd2lkdGgg
aXMgYSBwb3dlciBvZiAyIQorICAgICAgICBBU1NFUlQoISh3aWR0aCAmICh3aWR0aCAtMSkpKTsK
KyAgICAgICAgQVNTRVJUKHdpZHRoIDw9IDY0ICYmIHdpZHRoID49IDIpOworICAgICAgICBBU1NF
UlQoaHNiID49IGxzYik7CisgICAgICAgIEFTU0VSVChoc2IgPCB3aWR0aCk7CisKKyAgICAgICAg
aW50IGltbU4gPSAwOworICAgICAgICBpbnQgaW1tcyA9IDA7CisgICAgICAgIGludCBpbW1yID0g
MDsKKworICAgICAgICAvLyBGb3IgNjQtYml0IHZhbHVlcyB0aGlzIGlzIGVhc3kgLSBqdXN0IHNl
dCBpbW1OIHRvIHRydWUsIGFuZCBpbW1zIGp1c3QKKyAgICAgICAgLy8gY29udGFpbnMgdGhlIGJp
dCBudW1iZXIgb2YgdGhlIGhpZ2hlc3Qgc2V0IGJpdCBvZiB0aGUgc2V0IHJhbmdlLiBGb3IKKyAg
ICAgICAgLy8gdmFsdWVzIHdpdGggbmFycm93ZXIgd2lkdGhzLCB0aGVzZSBhcmUgZW5jb2RlZCBi
eSBhIGxlYWRpbmcgc2V0IG9mCisgICAgICAgIC8vIG9uZSBiaXRzLCBmb2xsb3dlZCBieSBhIHpl
cm8gYml0LCBmb2xsb3dlZCBieSB0aGUgcmVtYWluaW5nIHNldCBvZiBiaXRzCisgICAgICAgIC8v
IGJlaW5nIHRoZSBoaWdoIGJpdCBvZiB0aGUgcmFuZ2UuIEZvciBhIDMyLWJpdCBpbW1lZGlhdGUg
dGhlcmUgYXJlIG5vCisgICAgICAgIC8vIGxlYWRpbmcgb25lIGJpdHMsIGp1c3QgYSB6ZXJvIGZv
bGxvd2VkIGJ5IGEgZml2ZSBiaXQgbnVtYmVyLiBGb3IgYQorICAgICAgICAvLyAxNi1iaXQgaW1t
ZWRpYXRlIHRoZXJlIGlzIG9uZSBvbmUgYml0LCBhIHplcm8gYml0LCBhbmQgdGhlbiBhIGZvdXIg
Yml0CisgICAgICAgIC8vIGJpdC1wb3NpdGlvbiwgZXRjLgorICAgICAgICBpZiAod2lkdGggPT0g
NjQpCisgICAgICAgICAgICBpbW1OID0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW1t
cyA9IDYzICYgfih3aWR0aCArIHdpZHRoIC0gMSk7CisKKyAgICAgICAgaWYgKGludmVydGVkKSB7
CisgICAgICAgICAgICAvLyBpZiB3aWR0aCBpcyA2NCAmIGhzYiBpcyA2MiwgdGhlbiB3ZSBoYXZl
IGEgdmFsdWUgc29tZXRoaW5nIGxpa2U6CisgICAgICAgICAgICAvLyAgIDB4ODAwMDAwMDBmZmZm
ZmZmZiAoaW4gdGhpcyBjYXNlIHdpdGggbHNiIDMyKS4KKyAgICAgICAgICAgIC8vIFRoZSByb3Ig
c2hvdWxkIGJlIGJ5IDEsIGltbXMgKGVmZmVjdGl2ZWx5IHNldCB3aWR0aCBtaW51cyAxKSBpcwor
ICAgICAgICAgICAgLy8gMzIuIFNldCB3aWR0aCBpcyBmdWxsIHdpZHRoIG1pbnVzIGNsZWFyZWQg
d2lkdGguCisgICAgICAgICAgICBpbW1yID0gKHdpZHRoIC0gMSkgLSBoc2I7CisgICAgICAgICAg
ICBpbW1zIHw9ICh3aWR0aCAtICgoaHNiIC0gbHNiKSArIDEpKSAtIDE7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBpZiB3aWR0aCBpcyA2NCAmIGhzYiBpcyA2MiwgdGhlbiB3ZSBo
YXZlIGEgdmFsdWUgc29tZXRoaW5nIGxpa2U6CisgICAgICAgICAgICAvLyAgIDB4N2ZmZmZmZmYw
MDAwMDAwMCAoaW4gdGhpcyBjYXNlIHdpdGggbHNiIDMyKS4KKyAgICAgICAgICAgIC8vIFRoZSB2
YWx1ZSBpcyBlZmZlY3RpdmVseSByb2wnZWQgYnkgbHNiLCB3aGljaCBpcyBlcXVpdmFsZW50IHRv
CisgICAgICAgICAgICAvLyBhIHJvciBieSB3aWR0aCAtIGxzYiAob3IgMCwgaW4gdGhlIGNhc2Ug
d2hlcmUgbHNiIGlzIDApLiBpbW1zCisgICAgICAgICAgICAvLyBpcyBoc2IgLSBsc2IuCisgICAg
ICAgICAgICBpbW1yID0gKHdpZHRoIC0gbHNiKSAmICh3aWR0aCAtIDEpOworICAgICAgICAgICAg
aW1tcyB8PSBoc2IgLSBsc2I7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaW1tTiA8PCAx
MiB8IGltbXIgPDwgNiB8IGltbXM7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGludCBJbnZh
bGlkTG9naWNhbEltbWVkaWF0ZSA9IC0xOworCisgICAgaW50IG1fdmFsdWU7Cit9OworCisKIH0g
Ly8gbmFtZXNwYWNlIEpTQy4KIAogI2VuZGlmIC8vIEFzc2VtYmxlckNvbW1vbl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5o
CmluZGV4IDgwNjMyMzdlMjVlYWVmZTQxOWVkYjZlZTY3MzhhODM3YjhmOWVjMTQuLjNmM2Q2NGRl
MTM0OGViZmM0ZWNjYjM5NDVlMzA2YjdlYzVlNmE1NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC0zNjcsNiAr
MzY3LDE5IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuYW5kXzw2ND4oZGVzdCwgc3Jj
MSwgc3JjMik7CiAgICAgfQogCisgICAgdm9pZCBhbmQ2NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgTG9naWNhbEltbWVk
aWF0ZSBsb2dpY2FsSW1tID0gTG9naWNhbEltbWVkaWF0ZTo6Y3JlYXRlNjQoaW1tLm1fdmFsdWUp
OworCisgICAgICAgIGlmIChsb2dpY2FsSW1tLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYW5kXzw2ND4oZGVzdCwgc3JjLCBsb2dpY2FsSW1tKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1vdmUoaW1tLCBnZXRDYWNoZWREYXRhVGVtcFJl
Z2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOworICAgICAgICBtX2Fzc2VtYmxlci5hbmRfPDY0Pihk
ZXN0LCBzcmMsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgIH0KKwogICAgIHZvaWQgYW5kNjQoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVy
LmFuZF88NjQ+KGRlc3QsIGRlc3QsIHNyYyk7CkBAIC01NzgsNyArNTkxLDIwIEBAIHB1YmxpYzoK
ICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoaW1tLCBnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVy
SURBbmRJbnZhbGlkYXRlKCkpOwogICAgICAgICBtX2Fzc2VtYmxlci5vcnI8NjQ+KGRlc3QsIHNy
YywgZGF0YVRlbXBSZWdpc3Rlcik7CiAgICAgfQotICAgIAorCisgICAgdm9pZCBvcjY0KFRydXN0
ZWRJbW02NCBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0gPSBMb2dpY2FsSW1tZWRpYXRlOjpjcmVh
dGU2NChpbW0ubV92YWx1ZSk7CisKKyAgICAgICAgaWYgKGxvZ2ljYWxJbW0uaXNWYWxpZCgpKSB7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5vcnI8NjQ+KGRlc3QsIHNyYywgbG9naWNhbEltbSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtb3ZlKGltbSwgZ2V0
Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIub3JyPDY0PihkZXN0LCBzcmMsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgIH0KKwogICAg
IHZvaWQgb3I2NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAg
ICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0gPSBMb2dpY2FsSW1tZWRpYXRlOjpjcmVh
dGU2NChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc3RhdGljX2Nhc3Q8aW50NjRfdD4oaW1tLm1fdmFs
dWUpKSk7CkBAIC04MzEsNiArODU3LDIzIEBAIHB1YmxpYzoKICAgICAgICAgeG9yNjQoaW1tLCBk
ZXN0LCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW02NCBpbW0sIFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoaW1tLm1f
dmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tdm48NjQ+KGRlc3QsIHNyYyk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgTG9naWNhbEltbWVkaWF0ZSBsb2dpY2FsSW1t
ID0gTG9naWNhbEltbWVkaWF0ZTo6Y3JlYXRlNjQoaW1tLm1fdmFsdWUpOworCisgICAgICAgICAg
ICBpZiAobG9naWNhbEltbS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5lb3I8NjQ+KGRlc3QsIHNyYywgbG9naWNhbEltbSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtb3ZlKGltbSwgZ2V0Q2FjaGVkRGF0YVRl
bXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVv
cjw2ND4oZGVzdCwgc3JjLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIHZvaWQgeG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChpbW0ubV92YWx1ZSA9PSAtMSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggNjk0NDIwN2JjNTNjOWZiZWVi
OTM4NTE2MzBjMjc5YzhkZjJkOGQ2OC4uM2JmMWI4YTY2YmFlNzhlMGVjODYxOWUzNDZjYTBiNzY0
N2Q1MWFjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKQEAg
LTQ5OCw2ICs0OTgsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIEFyZygpOwogICAgIH0K
IAorICAgIEFyZyBiaXRJbW0oVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
LT5oYXNJbnQoKSkgeworICAgICAgICAgICAgaW50NjRfdCBpbnRWYWx1ZSA9IHZhbHVlLT5hc0lu
dCgpOworICAgICAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEJpdEltbUZvcm0oaW50VmFsdWUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBBcmc6OmJpdEltbShpbnRWYWx1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIEFyZygpOworICAgIH0KKworICAgIEFyZyBiaXRJbW02NChWYWx1ZSog
dmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUtPmhhc0ludCgpKSB7CisgICAgICAgICAg
ICBpbnQ2NF90IGludFZhbHVlID0gdmFsdWUtPmFzSW50KCk7CisgICAgICAgICAgICBpZiAoQXJn
Ojppc1ZhbGlkQml0SW1tNjRGb3JtKGludFZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
QXJnOjpiaXRJbW02NChpbnRWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEFyZygp
OworICAgIH0KKwogICAgIEFyZyBpbW1PclRtcChWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAg
ICBpZiAoQXJnIHJlc3VsdCA9IGltbSh2YWx1ZSkpCkBAIC02NDcsNiArNjY3LDM2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoaXNWYWxpZEZvcm0o
b3Bjb2RlLCBBcmc6OkJpdEltbSwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICAgICAg
aWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUpIHsKKyAgICAgICAgICAgICAgICBpZiAo
QXJnIHJpZ2h0QXJnID0gYml0SW1tKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgICAgICBhcHBl
bmQob3Bjb2RlLCByaWdodEFyZywgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAvLyBBIG5vbi1jb21tdXRhdGl2ZSBvcGVyYXRpb24gY291bGQgaGF2ZSBh
biBpbW1lZGlhdGUgaW4gbGVmdC4KKyAgICAgICAgICAgICAgICBpZiAoQXJnIGxlZnRBcmcgPSBi
aXRJbW0obGVmdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgbGVmdEFy
ZywgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6Qml0SW1tNjQsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsK
KyAgICAgICAgICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKEFyZyByaWdodEFyZyA9IGJpdEltbTY0KHJpZ2h0KSkgeworICAgICAgICAg
ICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCByaWdodEFyZywgdG1wKGxlZnQpLCByZXN1bHQpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBBIG5vbi1jb21tdXRhdGl2ZSBvcGVyYXRp
b24gY291bGQgaGF2ZSBhbiBpbW1lZGlhdGUgaW4gbGVmdC4KKyAgICAgICAgICAgICAgICBpZiAo
QXJnIGxlZnRBcmcgPSBiaXRJbW02NChsZWZ0KSkgeworICAgICAgICAgICAgICAgICAgICBhcHBl
bmQob3Bjb2RlLCBsZWZ0QXJnLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKICAgICAgICAgaWYgKGltbShyaWdodCkgJiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRt
cCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgewogICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1w
KGxlZnQpLCBpbW0ocmlnaHQpLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCmluZGV4IDAzM2M5NzIyNjM4ZmVmOGQyNDU3
ZjE0MzA5NjQxZWIyMzM2OGZhZDQuLjk0NDU2ODdmNWU5MDU1OTA5NDk0NjNjMjAwZTQ5ZjhlYjMz
MjJjNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKQEAgLTEyNCw2
ICsxMjQsMTIgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBj
YXNlIEltbTY0OgogICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4Iiwgc3RhdGljX2Nhc3Q8bG9u
ZyBsb25nIHVuc2lnbmVkPihtX29mZnNldCkpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBC
aXRJbW06CisgICAgICAgIG91dC5wcmludCgiJCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQml0SW1tNjQ6CisgICAgICAgIG91dC5wcmludGYoIiQweCVsbHgiLCBzdGF0
aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQ+KG1fb2Zmc2V0KSk7CisgICAgICAgIHJldHVybjsK
ICAgICBjYXNlIEFkZHI6CiAgICAgICAgIGlmIChvZmZzZXQoKSkKICAgICAgICAgICAgIG91dC5w
cmludChvZmZzZXQoKSk7CkBAIC0xODgsNiArMTk0LDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBBcmc6OktpbmQga2luZCkKICAgICBjYXNlIEFyZzo6SW1tNjQ6CiAg
ICAgICAgIG91dC5wcmludCgiSW1tNjQiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJn
OjpCaXRJbW06CisgICAgICAgIG91dC5wcmludCgiQml0SW1tIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFyZzo6Qml0SW1tNjQ6CisgICAgICAgIG91dC5wcmludCgiQml0SW1tNjQiKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQXJnOjpBZGRyOgogICAgICAgICBvdXQucHJpbnQo
IkFkZHIiKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmgKaW5kZXggODE0YWQyYWNiNTJlYjBlZTE4MzViN2M4MjlhMzg0ZmM1MjkwMzVhYi4uOGU1YzI3
MWIyNjM3M2E3ZGJlNWRlZTAzNWRiNTBhYmFhMTA0YjkwOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5oCkBAIC02Myw4ICs2MywxMSBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGlu
bGluZWQgaW50byBtb3N0IGluc3RydWN0aW9ucywgd2hpbGUgSW1tNjQgaW5kaWNhdGVzIGEgY29u
c3RhbnQgbWF0ZXJpYWxpemF0aW9uIGFuZCBpcwogICAgICAgICAvLyB1c3VhbGx5IG9ubHkgdXNh
YmxlIHdpdGggTW92ZS4gU3BlY2lhbHMgbWF5IGFsc28gYWRtaXQgaXQsIGZvciBleGFtcGxlIGZv
ciBzdGFja21hcHMgdXNlZCBmb3IKICAgICAgICAgLy8gT1NSIGV4aXQgYW5kIHRhaWwgY2FsbHMu
CisgICAgICAgIC8vIEJpdEltbSBpcyBhbiBpbW1lZGlhdGUgZm9yIEJpdHdpc2Ugb3BlcmF0aW9u
IChBbmQsIFhvciwgZXRjKS4KICAgICAgICAgSW1tLAogICAgICAgICBJbW02NCwKKyAgICAgICAg
Qml0SW1tLAorICAgICAgICBCaXRJbW02NCwKIAogICAgICAgICAvLyBUaGVzZSBhcmUgdGhlIGFk
ZHJlc3Nlcy4gSW5zdHJ1Y3Rpb25zIG1heSBsb2FkIGZyb20gKFVzZSksIHN0b3JlIHRvIChEZWYp
LCBvciBldmFsdWF0ZQogICAgICAgICAvLyAoVXNlQWRkcikgYWRkcmVzc2VzLgpAQCAtNDgzLDYg
KzQ4NiwyMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAg
c3RhdGljIEFyZyBiaXRJbW0oaW50NjRfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBCaXRJbW07CisgICAgICAgIHJlc3VsdC5tX29m
ZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRp
YyBBcmcgYml0SW1tNjQoaW50NjRfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBCaXRJbW02NDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgc3RhdGlj
IEFyZyBpbW1QdHIoY29uc3Qgdm9pZCogYWRkcmVzcykKICAgICB7CiAgICAgICAgIHJldHVybiBp
bW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGFkZHJlc3MpKTsKQEAgLTY1Nyw5ICs2NzYsMTkg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTY0OwogICAgIH0KIAorICAg
IGJvb2wgaXNCaXRJbW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBC
aXRJbW07CisgICAgfQorCisgICAgYm9vbCBpc0JpdEltbTY0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBraW5kKCkgPT0gQml0SW1tNjQ7CisgICAgfQorCiAgICAgYm9vbCBpc1NvbWVJ
bW0oKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSW1tKCkgfHwgaXNJbW02NCgpOwor
ICAgICAgICByZXR1cm4gaXNJbW0oKSB8fCBpc0ltbTY0KCkgfHwgaXNCaXRJbW0oKSB8fCBpc0Jp
dEltbTY0KCk7CiAgICAgfQogCiAgICAgYm9vbCBpc0FkZHIoKSBjb25zdApAQCAtNzQ3LDcgKzc3
Niw3IEBAIHB1YmxpYzoKIAogICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBJbW0gfHwga2luZCgpID09IEltbTY0KTsKKyAgICAgICAgQVNT
RVJUKGlzU29tZUltbSgpKTsKICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwogICAgIH0KIApAQCAt
ODM4LDYgKzg2Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKICAgICAg
ICAgY2FzZSBJbW06CiAgICAgICAgIGNhc2UgSW1tNjQ6CisgICAgICAgIGNhc2UgQml0SW1tOgor
ICAgICAgICBjYXNlIEJpdEltbTY0OgogICAgICAgICBjYXNlIEFkZHI6CiAgICAgICAgIGNhc2Ug
SW5kZXg6CiAgICAgICAgIGNhc2UgU3RhY2s6CkBAIC04NjEsNiArODkyLDggQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKICAgICAgICAgY2FzZSBJbW06CisgICAg
ICAgIGNhc2UgQml0SW1tOgorICAgICAgICBjYXNlIEJpdEltbTY0OgogICAgICAgICBjYXNlIFJl
bENvbmQ6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoKICAgICAgICAgY2FzZSBEb3VibGVDb25kOgpA
QCAtODg0LDYgKzkxNyw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCgp
KSB7CiAgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIEJpdEltbToKKyAgICAgICAgY2Fz
ZSBCaXRJbW02NDoKICAgICAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBjYXNlIFRtcDoKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTk0LDYgKzEwMjksMjQgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEJpdElt
bUZvcm0oaW50NjRfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChpc1g4NigpKQorICAgICAg
ICAgICAgcmV0dXJuIEIzOjppc1JlcHJlc2VudGFibGVBczxpbnQzMl90Pih2YWx1ZSk7CisgICAg
ICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICByZXR1cm4gQVJNNjRMb2dpY2FsSW1tZWRp
YXRlOjpjcmVhdGUzMih2YWx1ZSkuaXNWYWxpZCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZEJpdEltbTY0Rm9ybShpbnQ2NF90IHZhbHVl
KQorICAgIHsKKyAgICAgICAgaWYgKGlzWDg2KCkpCisgICAgICAgICAgICByZXR1cm4gQjM6Omlz
UmVwcmVzZW50YWJsZUFzPGludDMyX3Q+KHZhbHVlKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkK
KyAgICAgICAgICAgIHJldHVybiBBUk02NExvZ2ljYWxJbW1lZGlhdGU6OmNyZWF0ZTY0KHZhbHVl
KS5pc1ZhbGlkKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBzdGF0aWMg
Ym9vbCBpc1ZhbGlkQWRkckZvcm0oaW50MzJfdCBvZmZzZXQsIE9wdGlvbmFsPFdpZHRoPiB3aWR0
aCA9IE51bGxvcHQpCiAgICAgewogICAgICAgICBpZiAoaXNYODYoKSkKQEAgLTEwNDQsNiArMTA5
NywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZEltbUZvcm0odmFsdWUo
KSk7CiAgICAgICAgIGNhc2UgSW1tNjQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgY2FzZSBCaXRJbW06CisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZEJpdEltbUZvcm0odmFs
dWUoKSk7CisgICAgICAgIGNhc2UgQml0SW1tNjQ6CisgICAgICAgICAgICByZXR1cm4gaXNWYWxp
ZEJpdEltbTY0Rm9ybSh2YWx1ZSgpKTsKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNl
IFN0YWNrOgogICAgICAgICBjYXNlIENhbGxBcmc6CkBAIC0xMTE5LDE0ICsxMTc2LDE0IEBAIHB1
YmxpYzoKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgYXNUcnVzdGVkSW1tMzIo
KSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSW1tKCkpOworICAgICAgICBBU1NFUlQo
aXNJbW0oKSB8fCBpc0JpdEltbSgpKTsKICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKICAgICB9CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQgYXNUcnVz
dGVkSW1tNjQoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSW1tNjQoKSk7CisgICAg
ICAgIEFTU0VSVChpc0ltbTY0KCkgfHwgaXNCaXRJbW02NCgpKTsKICAgICAgICAgcmV0dXJuIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQodmFsdWUoKSk7CiAgICAgfQogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwppbmRleCAwMmNm
M2U0ZDg2ZWZkODkyNmZlZTZlNDhhNzNjMmE1MGNkNTI3MWIwLi45M2U3YmQ4MWZhOGQ3MTE2MDE2
ZWZhNDM1NzAyMzc0YWQxYThiMzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAgLTI3MCw2ICsyNzAsNyBAQCBMZWEgVUE6RzpQdHIsIEQ6
RzpQdHIKIAogQW5kMzIgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCwgVG1w
CisgICAgYXJtNjQ6IEJpdEltbSwgVG1wLCBUbXAKICAgICB4ODY6IFRtcCwgQWRkciwgVG1wCiAg
ICAgeDg2OiBBZGRyLCBUbXAsIFRtcAogCkBAIC0yODIsNiArMjgzLDcgQEAgQW5kMzIgVTpHOjMy
LCBVWkQ6RzozMgogCiA2NDogQW5kNjQgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAogICAgIFRtcCwg
VG1wLCBUbXAKKyAgICBhcm02NDogQml0SW1tNjQsIFRtcCwgVG1wCiAKIHg4Nl82NDogQW5kNjQg
VTpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKQEAgLTM2MSw2ICszNjMsNyBAQCB4ODZfNjQ6
IFVyc2hpZnQ2NCBVOkc6NjQsIFVEOkc6NjQKIAogT3IzMiBVOkc6MzIsIFU6RzozMiwgWkQ6Rzoz
MgogICAgIFRtcCwgVG1wLCBUbXAKKyAgICBhcm02NDogQml0SW1tLCBUbXAsIFRtcAogICAgIHg4
NjogVG1wLCBBZGRyLCBUbXAKICAgICB4ODY6IEFkZHIsIFRtcCwgVG1wCiAKQEAgLTM3Myw2ICsz
NzYsNyBAQCBPcjMyIFU6RzozMiwgVVpEOkc6MzIKIAogNjQ6IE9yNjQgVTpHOjY0LCBVOkc6NjQs
IEQ6Rzo2NAogICAgIFRtcCwgVG1wLCBUbXAKKyAgICBhcm02NDogQml0SW1tNjQsIFRtcCwgVG1w
CiAKIDY0OiBPcjY0IFU6Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCwgVG1wCkBAIC0zODAsNiArMzg0
LDcgQEAgT3IzMiBVOkc6MzIsIFVaRDpHOjMyCiAKIFhvcjMyIFU6RzozMiwgVTpHOjMyLCBaRDpH
OjMyCiAgICAgVG1wLCBUbXAsIFRtcAorICAgIGFybTY0OiBCaXRJbW0sIFRtcCwgVG1wCiAgICAg
eDg2OiBUbXAsIEFkZHIsIFRtcAogICAgIHg4NjogQWRkciwgVG1wLCBUbXAKIApAQCAtMzkyLDYg
KzM5Nyw3IEBAIFhvcjMyIFU6RzozMiwgVVpEOkc6MzIKIAogNjQ6IFhvcjY0IFU6Rzo2NCwgVTpH
OjY0LCBEOkc6NjQKICAgICBUbXAsIFRtcCwgVG1wCisgICAgYXJtNjQ6IEJpdEltbTY0LCBUbXAs
IFRtcAogCiA2NDogWG9yNjQgVTpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgppbmRleCA3YjI1
YzhlMDM0NjQ3YzgyNTNlMzZlNmJkYjY4MTFlYzQzODJmODA2Li4wMGJkNzE5MGVhZGQ1OWZjNGY1
MmQyOWRiYTUyODg4ZDRjZTA2M2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCkBAIC0xOTAsNyArMTkwLDcgQEAgZGVmIGlzR0YodG9r
ZW4pCiBlbmQKIAogZGVmIGlzS2luZCh0b2tlbikKLSAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KElt
bSl8KEltbTY0KXwoQWRkcil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVDb25k
KSlcWi8KKyAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEltbTY0KXwoQml0SW1tKXwoQml0
SW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCl8KERvdWJsZUNvbmQpKVxa
LwogZW5kCiAKIGRlZiBpc0FyY2godG9rZW4pCkBAIC0yNjQsNyArMjY0LDcgQEAgY2xhc3MgUGFy
c2VyCiAKICAgICBkZWYgY29uc3VtZUtpbmQKICAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5n
Ci0gICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgSW1tNjQsIFRtcCwgQWRk
ciwgSW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIG9yIERvdWJsZUNvbmQpIikgdW5sZXNzIGlzS2lu
ZChyZXN1bHQpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgSW1tNjQs
IEJpdEltbSwgQml0SW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIFJlc0NvbmQsIG9y
IERvdWJsZUNvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCiAgICAgICAgIGFkdmFuY2UKICAg
ICAgICAgcmVzdWx0CiAgICAgZW5kCkBAIC00MjYsNyArNDI2LDcgQEAgY2xhc3MgUGFyc2VyCiAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyB3cm9uZyBudW1iZXIg
b2YgYXJndW1lbnRzIGZvciBvdmVybG9hZCIpIHVubGVzcyBraW5kcy5sZW5ndGggPT0gc2lnbmF0
dXJlLmxlbmd0aAogICAgICAgICAgICAgICAgICAgICAgICAga2luZHMuZWFjaF93aXRoX2luZGV4
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIkltbSIgb3Iga2luZC5uYW1lID09
ICJJbW02NCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIklt
bSIgb3Iga2luZC5uYW1lID09ICJJbW02NCIgb3Iga2luZC5uYW1lID09ICJCaXRJbW0iIG9yIGtp
bmQubmFtZSA9PSAiQml0SW1tNjQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IHNpZ25hdHVyZVtpbmRleF0ucm9sZSAhPSAiVSIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBmb3IgYSBub24tdXNl
IGFyZ3VtZW50IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCkBAIC01MzAs
MTQgKzUzMCwxNCBAQCBkZWYgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbklu
ZGV4LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCiAgICAgb3V0cC5wdXRzICJzd2l0
Y2ggKCN7Y29sdW1uR2V0dGVyW2NvbHVtbkluZGV4XX0pIHsiCiAgICAgZ3JvdXBzLmVhY2hfcGFp
ciB7CiAgICAgICAgIHwga2V5LCB2YWx1ZSB8Ci0gICAgICAgIG91dHAucHV0cyAiI2lmIFVTRShK
U1ZBTFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAgICAgICBvdXRwLnB1dHMgIiNpZiBVU0Uo
SlNWQUxVRTY0KSIgaWYga2V5ID09ICJJbW02NCIgb3Iga2V5ID09ICJCaXRJbW02NCIKICAgICAg
ICAgS2luZC5hcmdLaW5kcyhrZXkpLmVhY2ggewogICAgICAgICAgICAgfCBhcmdLaW5kIHwKICAg
ICAgICAgICAgIG91dHAucHV0cyAiY2FzZSBBcmc6OiN7YXJnS2luZH06IgogICAgICAgICB9CiAg
ICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIHZhbHVlLCBjb2x1bW5JbmRleCArIDEsIGNv
bHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKICAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
Ci0gICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkgPT0g
IkltbTY0IgorICAgICAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSIgaWYg
a2V5ID09ICJJbW02NCIgb3Iga2V5ID09ICJCaXRJbW02NCIKICAgICB9CiAgICAgb3V0cC5wdXRz
ICJkZWZhdWx0OiIKICAgICBvdXRwLnB1dHMgImJyZWFrOyIKQEAgLTc5OCw2ICs3OTgsMTIgQEAg
d3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgd2hlbiAiSW1tIgog
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkSW1tRm9ybShh
cmdzWyN7aW5kZXh9XS52YWx1ZSgpKSkiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
T1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgd2hlbiAiQml0SW1tIgorICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkQml0SW1tRm9ybShh
cmdzWyN7aW5kZXh9XS52YWx1ZSgpKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
T1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgd2hlbiAiQml0SW1tNjQiCisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRCaXRJbW02NEZv
cm0oYXJnc1sje2luZGV4fV0udmFsdWUoKSkpIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgogICAgICAgICAgICAgICAgIHdoZW4gIkFkZHIiCiAg
ICAgICAgICAgICAgICAgICAgIGlmIGFyZy5yb2xlID09ICJVQSIKICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiaWYgKGFyZ3NbI3tpbmRleH1dLmlzU3RhY2soKSAmJiBhcmdzWyN7
aW5kZXh9XS5zdGFja1Nsb3QoKS0+aXNTcGlsbCgpKSIKQEAgLTEwNTUsOSArMTA2MSw5IEBAIHdy
aXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5mcHIoKSIKICAg
ICAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgd2hlbiAiSW1tIgorICAgICAg
ICAgICAgICAgIHdoZW4gIkltbSIsICJCaXRJbW0iCiAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3RlZEltbTMyKCkiCi0gICAgICAgICAgICAgICAg
d2hlbiAiSW1tNjQiCisgICAgICAgICAgICAgICAgd2hlbiAiSW1tNjQiLCAiQml0SW1tNjQiCiAg
ICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3RlZElt
bTY0KCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiQWRkciIKICAgICAgICAgICAgICAgICAgICAg
b3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNBZGRyZXNzKCkiCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271596</attachid>
            <date>2016-02-17 15:00:35 -0800</date>
            <delta_ts>2016-02-17 17:38:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154327-20160217150015.patch</filename>
            <type>text/plain</type>
            <size>62613</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2NjcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NjM0Y2RkYzMxNzYyNjE4ZGRlMjA0M2M2OTFlMjgyZWQ4Nzg1MmUzLi40ZDU0YmFhNDgzZDAwMjMw
YjQ3Y2UwMWQ4NjA3OWE2OGYzODhiZTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NSBAQAorMjAxNi0wMi0xNyAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBBUk02NDogU3VwcG9ydCB0aGUgaW1tZWRpYXRlIGZvcm1h
dCB1c2VkIGZvciBiaXQgb3BlcmF0aW9ucyBpbiBBaXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDMyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFSTTY0IHN1cHBvcnRzIGEgcHJldHR5IHJpY2ggZm9y
bSBvZiBpbW1lZGlhdGVzIGZvciBiaXQgb3BlcmF0aW9uLgorICAgICAgICBUaGVyZSBhcmUgdHdv
IGZvcm1hdHMgdXNlZCB0byBlbmNvZGUgcmVwZWF0aW5nIHBhdHRlcm5zIGFuZCBjb21tb24KKyAg
ICAgICAgaW5wdXQgaW4gYSBkZW5zZSBmb3JtLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIEkg
YWRkIDIgbmV3IHR5cGUgb2YgQXJnOiBCaXRJbW0zMiBhbmQgQml0SW1tNjQuCisgICAgICAgIFRo
b3NlIHJlcHJlc2VudHMgdGhlIHZhbGlkIGltbWVkaWF0ZSBmb3JtcyBmb3IgYml0IG9wZXJhdGlv
bi4KKyAgICAgICAgT24geDg2LCBhbnkgMzJiaXRzIHZhbHVlIGlzIHZhbGlkLiBPbiBBUk02NCwg
YWxsIHRoZSBlbmNvZGluZworICAgICAgICBmb3JtIGFyZSB0cmllZCBhbmQgdGhlIGltbWVkaWF0
ZSBpcyB1c2VkIHdoZW4gcG9zc2libGUuCisKKyAgICAgICAgVGhlIGFyZyB0eXBlIEltbTY0IGlz
IHJlbmFtZWQgdG8gQmlnSW1tIHRvIGJldHRlciByZXByZXNlbnQgd2hhdAorICAgICAgICBpdCBp
czogYW4gaW1tZWRpYXRlIHRoYXQgZG9lcyBub3QgZml0IGludG8gSW1tLgorCisgICAgICAgICog
YXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkxvZ2ljYWxJbW1lZGlh
dGU6OmNyZWF0ZTMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TG9naWNhbEltbWVkaWF0ZTo6
Y3JlYXRlNjQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpMb2dpY2FsSW1tZWRpYXRlOjp2YWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkxvZ2ljYWxJbW1lZGlhdGU6OmlzVmFsaWQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpMb2dpY2FsSW1tZWRpYXRlOjppczY0Yml0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6TG9naWNhbEltbWVkaWF0ZTo6TG9naWNhbEltbWVkaWF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkxvZ2ljYWxJbW1lZGlhdGU6Om1hc2spOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpMb2dpY2FsSW1tZWRpYXRlOjpwYXJ0aWFsSFNCKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6TG9naWNhbEltbWVkaWF0ZTo6aGlnaGVzdFNldEJpdCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkxvZ2ljYWxJbW1lZGlhdGU6OmZpbmRCaXRSYW5nZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkxvZ2ljYWxJbW1lZGlhdGU6OmVuY29kZUxvZ2ljYWxJbW1lZGlhdGUpOiBE
ZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9Bc3NlbWJsZXJDb21tb24uaDoKKyAgICAgICAg
KEpTQzo6QVJNNjRMb2dpY2FsSW1tZWRpYXRlOjpjcmVhdGUzMik6CisgICAgICAgIChKU0M6OkFS
TTY0TG9naWNhbEltbWVkaWF0ZTo6Y3JlYXRlNjQpOgorICAgICAgICAoSlNDOjpBUk02NExvZ2lj
YWxJbW1lZGlhdGU6OnZhbHVlKToKKyAgICAgICAgKEpTQzo6QVJNNjRMb2dpY2FsSW1tZWRpYXRl
Ojppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6QVJNNjRMb2dpY2FsSW1tZWRpYXRlOjppczY0Yml0
KToKKyAgICAgICAgKEpTQzo6QVJNNjRMb2dpY2FsSW1tZWRpYXRlOjpBUk02NExvZ2ljYWxJbW1l
ZGlhdGUpOgorICAgICAgICAoSlNDOjpBUk02NExvZ2ljYWxJbW1lZGlhdGU6Om1hc2spOgorICAg
ICAgICAoSlNDOjpBUk02NExvZ2ljYWxJbW1lZGlhdGU6OnBhcnRpYWxIU0IpOgorICAgICAgICAo
SlNDOjpBUk02NExvZ2ljYWxJbW1lZGlhdGU6OmhpZ2hlc3RTZXRCaXQpOgorICAgICAgICAoSlND
OjpBUk02NExvZ2ljYWxJbW1lZGlhdGU6OmZpbmRCaXRSYW5nZSk6CisgICAgICAgIChKU0M6OkFS
TTY0TG9naWNhbEltbWVkaWF0ZTo6ZW5jb2RlTG9naWNhbEltbWVkaWF0ZSk6CisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk02NDo6YW5kNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpv
cjY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6eG9yNjQpOgorICAgICAg
ICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OmJpdEltbSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmJpdEltbTY0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5kQmluT3ApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJBcmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmR1
bXApOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9haXIvQWly
QXJnLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Yml0SW1tKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjpiaXRJbW02NCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6
aXNCaXRJbW0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzQml0SW1tNjQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzU29tZUltbSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1ApOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRlApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6Omhhc1R5cGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzVmFsaWRCaXRJbW1G
b3JtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkQml0SW1tNjRGb3JtKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkRm9ybSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6YXNUcnVzdGVkSW1tMzIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OmFzVHJ1c3RlZEltbTY0KToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6
CisgICAgICAgICogYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmI6CisKIDIwMTYtMDItMTYgIENv
bW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHIxOTY2NTIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKaW5kZXggYzM3MzVkYTNlYWFjZWNkYTlhYTNjNDMxY2Iy
N2JjYWI2OWVmNzUyYy4uZTU3MzYyMGM0NmFhZjIwNTcyYzM1YjM1NmFhNWUyZjE0MjE1ODZmZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIu
aApAQCAtMTQ3LDIyNyArMTQ3LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV92YWx1ZTsKIH07CiAK
LWNsYXNzIExvZ2ljYWxJbW1lZGlhdGUgewotcHVibGljOgotICAgIHN0YXRpYyBMb2dpY2FsSW1t
ZWRpYXRlIGNyZWF0ZTMyKHVpbnQzMl90IHZhbHVlKQotICAgIHsKLSAgICAgICAgLy8gQ2hlY2sg
Zm9yIDAsIC0xIC0gdGhlc2UgY2Fubm90IGJlIGVuY29kZWQuCi0gICAgICAgIGlmICghdmFsdWUg
fHwgIX52YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBJbnZhbGlkTG9naWNhbEltbWVkaWF0ZTsK
LQotICAgICAgICAvLyBGaXJzdCBsb29rIGZvciBhIDMyLWJpdCBwYXR0ZXJuLCB0aGVuIGZvciBy
ZXBlYXRpbmcgMTYtYml0Ci0gICAgICAgIC8vIHBhdHRlcm5zLCA4LWJpdCwgNC1iaXQsIGFuZCBm
aW5hbGx5IDItYml0LgotCi0gICAgICAgIHVuc2lnbmVkIGhzYiwgbHNiOwotICAgICAgICBib29s
IGludmVydGVkOwotICAgICAgICBpZiAoZmluZEJpdFJhbmdlPDMyPih2YWx1ZSwgaHNiLCBsc2Is
IGludmVydGVkKSkKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVMb2dpY2FsSW1tZWRpYXRlPDMy
Pihoc2IsIGxzYiwgaW52ZXJ0ZWQpOwotCi0gICAgICAgIGlmICgodmFsdWUgJiAweGZmZmYpICE9
ICh2YWx1ZSA+PiAxNikpCi0gICAgICAgICAgICByZXR1cm4gSW52YWxpZExvZ2ljYWxJbW1lZGlh
dGU7Ci0gICAgICAgIHZhbHVlICY9IDB4ZmZmZjsKLQotICAgICAgICBpZiAoZmluZEJpdFJhbmdl
PDE2Pih2YWx1ZSwgaHNiLCBsc2IsIGludmVydGVkKSkKLSAgICAgICAgICAgIHJldHVybiBlbmNv
ZGVMb2dpY2FsSW1tZWRpYXRlPDE2Pihoc2IsIGxzYiwgaW52ZXJ0ZWQpOwotCi0gICAgICAgIGlm
ICgodmFsdWUgJiAweGZmKSAhPSAodmFsdWUgPj4gOCkpCi0gICAgICAgICAgICByZXR1cm4gSW52
YWxpZExvZ2ljYWxJbW1lZGlhdGU7Ci0gICAgICAgIHZhbHVlICY9IDB4ZmY7Ci0KLSAgICAgICAg
aWYgKGZpbmRCaXRSYW5nZTw4Pih2YWx1ZSwgaHNiLCBsc2IsIGludmVydGVkKSkKLSAgICAgICAg
ICAgIHJldHVybiBlbmNvZGVMb2dpY2FsSW1tZWRpYXRlPDg+KGhzYiwgbHNiLCBpbnZlcnRlZCk7
Ci0KLSAgICAgICAgaWYgKCh2YWx1ZSAmIDB4ZikgIT0gKHZhbHVlID4+IDQpKQotICAgICAgICAg
ICAgcmV0dXJuIEludmFsaWRMb2dpY2FsSW1tZWRpYXRlOwotICAgICAgICB2YWx1ZSAmPSAweGY7
Ci0KLSAgICAgICAgaWYgKGZpbmRCaXRSYW5nZTw0Pih2YWx1ZSwgaHNiLCBsc2IsIGludmVydGVk
KSkKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVMb2dpY2FsSW1tZWRpYXRlPDQ+KGhzYiwgbHNi
LCBpbnZlcnRlZCk7Ci0KLSAgICAgICAgaWYgKCh2YWx1ZSAmIDB4MykgIT0gKHZhbHVlID4+IDIp
KQotICAgICAgICAgICAgcmV0dXJuIEludmFsaWRMb2dpY2FsSW1tZWRpYXRlOwotICAgICAgICB2
YWx1ZSAmPSAweDM7Ci0KLSAgICAgICAgaWYgKGZpbmRCaXRSYW5nZTwyPih2YWx1ZSwgaHNiLCBs
c2IsIGludmVydGVkKSkKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVMb2dpY2FsSW1tZWRpYXRl
PDI+KGhzYiwgbHNiLCBpbnZlcnRlZCk7Ci0KLSAgICAgICAgcmV0dXJuIEludmFsaWRMb2dpY2Fs
SW1tZWRpYXRlOwotICAgIH0KLQotICAgIHN0YXRpYyBMb2dpY2FsSW1tZWRpYXRlIGNyZWF0ZTY0
KHVpbnQ2NF90IHZhbHVlKQotICAgIHsKLSAgICAgICAgLy8gQ2hlY2sgZm9yIDAsIC0xIC0gdGhl
c2UgY2Fubm90IGJlIGVuY29kZWQuCi0gICAgICAgIGlmICghdmFsdWUgfHwgIX52YWx1ZSkKLSAg
ICAgICAgICAgIHJldHVybiBJbnZhbGlkTG9naWNhbEltbWVkaWF0ZTsKLQotICAgICAgICAvLyBM
b29rIGZvciBhIGNvbnRpZ3VvdXMgYml0IHJhbmdlLgotICAgICAgICB1bnNpZ25lZCBoc2IsIGxz
YjsKLSAgICAgICAgYm9vbCBpbnZlcnRlZDsKLSAgICAgICAgaWYgKGZpbmRCaXRSYW5nZTw2ND4o
dmFsdWUsIGhzYiwgbHNiLCBpbnZlcnRlZCkpCi0gICAgICAgICAgICByZXR1cm4gZW5jb2RlTG9n
aWNhbEltbWVkaWF0ZTw2ND4oaHNiLCBsc2IsIGludmVydGVkKTsKLQotICAgICAgICAvLyBJZiB0
aGUgaGlnaCAmIGxvdyAzMiBiaXRzIGFyZSBlcXVhbCwgd2UgY2FuIHRyeSBmb3IgYSAzMi1iaXQg
KG9yIG5hcnJvd2VyKSBwYXR0ZXJuLgotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHZhbHVlKSA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUgPj4gMzIpKQotICAgICAgICAg
ICAgcmV0dXJuIGNyZWF0ZTMyKHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwotICAgICAg
ICByZXR1cm4gSW52YWxpZExvZ2ljYWxJbW1lZGlhdGU7Ci0gICAgfQotCi0gICAgaW50IHZhbHVl
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotICAgICAgICByZXR1
cm4gbV92YWx1ZTsKLSAgICB9Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fdmFsdWUgIT0gSW52YWxpZExvZ2ljYWxJbW1lZGlhdGU7Ci0gICAgfQot
Ci0gICAgYm9vbCBpczY0Yml0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVl
ICYgKDEgPDwgMTIpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBMb2dpY2FsSW1tZWRpYXRlKGlu
dCB2YWx1ZSkKLSAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9Ci0KLSAgICAv
LyBHZW5lcmF0ZSBhIG1hc2sgd2l0aCBiaXRzIGluIHRoZSByYW5nZSBoc2IuLjAgc2V0LCBmb3Ig
ZXhhbXBsZToKLSAgICAvLyAgIGhzYjo2MyA9IDB4ZmZmZmZmZmZmZmZmZmZmZgotICAgIC8vICAg
aHNiOjQyID0gMHgwMDAwMDdmZmZmZmZmZmZmCi0gICAgLy8gICBoc2I6IDAgPSAweDAwMDAwMDAw
MDAwMDAwMDEKLSAgICBzdGF0aWMgdWludDY0X3QgbWFzayh1bnNpZ25lZCBoc2IpCi0gICAgewot
ICAgICAgICBBU1NFUlQoaHNiIDwgNjQpOwotICAgICAgICByZXR1cm4gMHhmZmZmZmZmZmZmZmZm
ZmZmdWxsID4+ICg2MyAtIGhzYik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dW5zaWduZWQgTj4K
LSAgICBzdGF0aWMgdm9pZCBwYXJ0aWFsSFNCKHVpbnQ2NF90JiB2YWx1ZSwgdW5zaWduZWQmcmVz
dWx0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlICYgKDB4ZmZmZmZmZmZmZmZmZmZmZnVsbCA8
PCBOKSkgewotICAgICAgICAgICAgcmVzdWx0ICs9IE47Ci0gICAgICAgICAgICB2YWx1ZSA+Pj0g
TjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZpbmQgdGhlIGJpdCBudW1iZXIgb2YgdGhl
IGhpZ2hlc3QgYml0IHNldCBpbiBhIG5vbi16ZXJvIHZhbHVlLCBmb3IgZXhhbXBsZToKLSAgICAv
LyAgIDB4ODA4MDgwODA4MDgwODA4MCA9IGhzYjo2MwotICAgIC8vICAgMHgwMDAwMDAwMDAwMDAw
MDAxID0gaHNiOiAwCi0gICAgLy8gICAweDAwMDAwN2ZmZmZlMDAwMDAgPSBoc2I6NDIKLSAgICBz
dGF0aWMgdW5zaWduZWQgaGlnaGVzdFNldEJpdCh1aW50NjRfdCB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAgIHVuc2lnbmVkIGhzYiA9IDA7Ci0gICAgICAgIHBh
cnRpYWxIU0I8MzI+KHZhbHVlLCBoc2IpOwotICAgICAgICBwYXJ0aWFsSFNCPDE2Pih2YWx1ZSwg
aHNiKTsKLSAgICAgICAgcGFydGlhbEhTQjw4Pih2YWx1ZSwgaHNiKTsKLSAgICAgICAgcGFydGlh
bEhTQjw0Pih2YWx1ZSwgaHNiKTsKLSAgICAgICAgcGFydGlhbEhTQjwyPih2YWx1ZSwgaHNiKTsK
LSAgICAgICAgcGFydGlhbEhTQjwxPih2YWx1ZSwgaHNiKTsKLSAgICAgICAgcmV0dXJuIGhzYjsK
LSAgICB9Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgdmFsdWUgYW5kIGEgYml0IHdp
ZHRoLCB3aGVyZSB2YWx1ZSBvYmV5cyB0aGUgZm9sbG93aW5nIGNvbnN0cmFpbnRzOgotICAgIC8v
ICAgKiBiaXRzIG91dHNpZGUgb2YgdGhlIHdpZHRoIG9mIHRoZSB2YWx1ZSBtdXN0IGJlIHplcm8u
Ci0gICAgLy8gICAqIGJpdHMgd2l0aGluIHRoZSB3aWR0aCBvZiB2YWx1ZSBtdXN0IG5laXRoZXIg
YmUgYWxsIGNsZWFyIG9yIGFsbCBzZXQuCi0gICAgLy8gVGhlIGlucHV0IGlzIGluc3BlY3RlZCB0
byBkZXRlY3QgdmFsdWVzIHRoYXQgY29uc2lzdCBvZiBlaXRoZXIgdHdvIG9yIHRocmVlIGNvbnRp
Z3VvdXMKLSAgICAvLyByYW5nZXMgb2YgYml0cy4gVGhlIG91dHB1dCByYW5nZSBoc2IuLmxzYiB3
aWxsIGRlc2NyaWJlIHRoZSBzZWNvbmQgcmFuZ2Ugb2YgdGhlIHZhbHVlLgotICAgIC8vIGlmIHRo
ZSByYW5nZSBpcyBzZXQsIGludmVydGVkIHdpbGwgYmUgZmFsc2UsIGFuZCBpZiB0aGUgcmFuZ2Ug
aXMgY2xlYXIsIGludmVydGVkIHdpbGwKLSAgICAvLyBiZSB0cnVlLiBGb3IgZXhhbXBsZSAod2l0
aCB3aWR0aCA4KToKLSAgICAvLyAgIDAwMDAxMTExID0gaHNiOjMsIGxzYjowLCBpbnZlcnRlZDpm
YWxzZQotICAgIC8vICAgMTExMTAwMDAgPSBoc2I6MywgbHNiOjAsIGludmVydGVkOnRydWUKLSAg
ICAvLyAgIDAwMTExMTAwID0gaHNiOjUsIGxzYjoyLCBpbnZlcnRlZDpmYWxzZQotICAgIC8vICAg
MTEwMDAwMTEgPSBoc2I6NSwgbHNiOjIsIGludmVydGVkOnRydWUKLSAgICB0ZW1wbGF0ZTx1bnNp
Z25lZCB3aWR0aD4KLSAgICBzdGF0aWMgYm9vbCBmaW5kQml0UmFuZ2UodWludDY0X3QgdmFsdWUs
IHVuc2lnbmVkJiBoc2IsIHVuc2lnbmVkJiBsc2IsIGJvb2wmIGludmVydGVkKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKHZhbHVlICYgbWFzayh3aWR0aCAtIDEpKTsKLSAgICAgICAgQVNTRVJUKHZh
bHVlICE9IG1hc2sod2lkdGggLSAxKSk7Ci0gICAgICAgIEFTU0VSVCghKHZhbHVlICYgfm1hc2so
d2lkdGggLSAxKSkpOwotCi0gICAgICAgIC8vIERldGVjdCBjYXNlcyB3aGVyZSB0aGUgdG9wIGJp
dCBpcyBzZXQ7IGlmIHNvLCBmbGlwIGFsbCB0aGUgYml0cyAmIHNldCBpbnZlcnQuCi0gICAgICAg
IC8vIFRoaXMgaGFsdmVzIHRoZSBudW1iZXIgb2YgcGF0dGVybnMgd2UgbmVlZCB0byBsb29rIGZv
ci4KLSAgICAgICAgY29uc3QgdWludDY0X3QgbXNiID0gMXVsbCA8PCAod2lkdGggLSAxKTsKLSAg
ICAgICAgaWYgKChpbnZlcnRlZCA9ICh2YWx1ZSAmIG1zYikpKQotICAgICAgICAgICAgdmFsdWUg
Xj0gbWFzayh3aWR0aCAtIDEpOwotCi0gICAgICAgIC8vIEZpbmQgdGhlIGhpZ2hlc3Qgc2V0IGJp
dCBpbiB2YWx1ZSwgZ2VuZXJhdGUgYSBjb3JyZXNwb25kaW5nIG1hc2sgJiBmbGlwIGFsbAotICAg
ICAgICAvLyBiaXRzIHVuZGVyIGl0LgotICAgICAgICBoc2IgPSBoaWdoZXN0U2V0Qml0KHZhbHVl
KTsKLSAgICAgICAgdmFsdWUgXj0gbWFzayhoc2IpOwotICAgICAgICBpZiAoIXZhbHVlKSB7Ci0g
ICAgICAgICAgICAvLyBJZiB0aGlzIGNsZWFyZWQgdGhlIHZhbHVlLCB0aGVuIHRoZSByYW5nZSBo
c2IuLjAgd2FzIGFsbCBzZXQuCi0gICAgICAgICAgICBsc2IgPSAwOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUcnkgbWFraW5nIG9uZSBtb3JlIG1h
c2ssIGFuZCBmbGlwcGluZyB0aGUgYml0cyEKLSAgICAgICAgbHNiID0gaGlnaGVzdFNldEJpdCh2
YWx1ZSk7Ci0gICAgICAgIHZhbHVlIF49IG1hc2sobHNiKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkg
ewotICAgICAgICAgICAgLy8gU3VjY2VzcyAtIGJ1dCBsc2IgYWN0dWFsbHkgcG9pbnRzIHRvIHRo
ZSBoc2Igb2YgYSB0aGlyZCByYW5nZSAtIGFkZCBvbmUKLSAgICAgICAgICAgIC8vIHRvIGdldCB0
byB0aGUgbHNiIG9mIHRoZSBtaWQgcmFuZ2UuCi0gICAgICAgICAgICArK2xzYjsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vIEVuY29kZXMgdGhlIHNldCBvZiBpbW1OOmltbXI6aW1tcyBmaWVsZHMgZm91
bmQgaW4gYSBsb2dpY2FsIGltbWVkaWF0ZS4KLSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCB3aWR0aD4K
LSAgICBzdGF0aWMgaW50IGVuY29kZUxvZ2ljYWxJbW1lZGlhdGUodW5zaWduZWQgaHNiLCB1bnNp
Z25lZCBsc2IsIGJvb2wgaW52ZXJ0ZWQpCi0gICAgewotICAgICAgICAvLyBDaGVjayB3aWR0aCBp
cyBhIHBvd2VyIG9mIDIhCi0gICAgICAgIEFTU0VSVCghKHdpZHRoICYgKHdpZHRoIC0xKSkpOwot
ICAgICAgICBBU1NFUlQod2lkdGggPD0gNjQgJiYgd2lkdGggPj0gMik7Ci0gICAgICAgIEFTU0VS
VChoc2IgPj0gbHNiKTsKLSAgICAgICAgQVNTRVJUKGhzYiA8IHdpZHRoKTsKLQotICAgICAgICBp
bnQgaW1tTiA9IDA7Ci0gICAgICAgIGludCBpbW1zID0gMDsKLSAgICAgICAgaW50IGltbXIgPSAw
OwotCi0gICAgICAgIC8vIEZvciA2NC1iaXQgdmFsdWVzIHRoaXMgaXMgZWFzeSAtIGp1c3Qgc2V0
IGltbU4gdG8gdHJ1ZSwgYW5kIGltbXMganVzdAotICAgICAgICAvLyBjb250YWlucyB0aGUgYml0
IG51bWJlciBvZiB0aGUgaGlnaGVzdCBzZXQgYml0IG9mIHRoZSBzZXQgcmFuZ2UuIEZvcgotICAg
ICAgICAvLyB2YWx1ZXMgd2l0aCBuYXJyb3dlciB3aWR0aHMsIHRoZXNlIGFyZSBlbmNvZGVkIGJ5
IGEgbGVhZGluZyBzZXQgb2YKLSAgICAgICAgLy8gb25lIGJpdHMsIGZvbGxvd2VkIGJ5IGEgemVy
byBiaXQsIGZvbGxvd2VkIGJ5IHRoZSByZW1haW5pbmcgc2V0IG9mIGJpdHMKLSAgICAgICAgLy8g
YmVpbmcgdGhlIGhpZ2ggYml0IG9mIHRoZSByYW5nZS4gRm9yIGEgMzItYml0IGltbWVkaWF0ZSB0
aGVyZSBhcmUgbm8KLSAgICAgICAgLy8gbGVhZGluZyBvbmUgYml0cywganVzdCBhIHplcm8gZm9s
bG93ZWQgYnkgYSBmaXZlIGJpdCBudW1iZXIuIEZvciBhCi0gICAgICAgIC8vIDE2LWJpdCBpbW1l
ZGlhdGUgdGhlcmUgaXMgb25lIG9uZSBiaXQsIGEgemVybyBiaXQsIGFuZCB0aGVuIGEgZm91ciBi
aXQKLSAgICAgICAgLy8gYml0LXBvc2l0aW9uLCBldGMuCi0gICAgICAgIGlmICh3aWR0aCA9PSA2
NCkKLSAgICAgICAgICAgIGltbU4gPSAxOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbW1z
ID0gNjMgJiB+KHdpZHRoICsgd2lkdGggLSAxKTsKLQotICAgICAgICBpZiAoaW52ZXJ0ZWQpIHsK
LSAgICAgICAgICAgIC8vIGlmIHdpZHRoIGlzIDY0ICYgaHNiIGlzIDYyLCB0aGVuIHdlIGhhdmUg
YSB2YWx1ZSBzb21ldGhpbmcgbGlrZToKLSAgICAgICAgICAgIC8vICAgMHg4MDAwMDAwMGZmZmZm
ZmZmIChpbiB0aGlzIGNhc2Ugd2l0aCBsc2IgMzIpLgotICAgICAgICAgICAgLy8gVGhlIHJvciBz
aG91bGQgYmUgYnkgMSwgaW1tcyAoZWZmZWN0aXZlbHkgc2V0IHdpZHRoIG1pbnVzIDEpIGlzCi0g
ICAgICAgICAgICAvLyAzMi4gU2V0IHdpZHRoIGlzIGZ1bGwgd2lkdGggbWludXMgY2xlYXJlZCB3
aWR0aC4KLSAgICAgICAgICAgIGltbXIgPSAod2lkdGggLSAxKSAtIGhzYjsKLSAgICAgICAgICAg
IGltbXMgfD0gKHdpZHRoIC0gKChoc2IgLSBsc2IpICsgMSkpIC0gMTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8vIGlmIHdpZHRoIGlzIDY0ICYgaHNiIGlzIDYyLCB0aGVuIHdlIGhh
dmUgYSB2YWx1ZSBzb21ldGhpbmcgbGlrZToKLSAgICAgICAgICAgIC8vICAgMHg3ZmZmZmZmZjAw
MDAwMDAwIChpbiB0aGlzIGNhc2Ugd2l0aCBsc2IgMzIpLgotICAgICAgICAgICAgLy8gVGhlIHZh
bHVlIGlzIGVmZmVjdGl2ZWx5IHJvbCdlZCBieSBsc2IsIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8K
LSAgICAgICAgICAgIC8vIGEgcm9yIGJ5IHdpZHRoIC0gbHNiIChvciAwLCBpbiB0aGUgY2FzZSB3
aGVyZSBsc2IgaXMgMCkuIGltbXMKLSAgICAgICAgICAgIC8vIGlzIGhzYiAtIGxzYi4KLSAgICAg
ICAgICAgIGltbXIgPSAod2lkdGggLSBsc2IpICYgKHdpZHRoIC0gMSk7Ci0gICAgICAgICAgICBp
bW1zIHw9IGhzYiAtIGxzYjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBpbW1OIDw8IDEy
IHwgaW1tciA8PCA2IHwgaW1tczsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IEludmFs
aWRMb2dpY2FsSW1tZWRpYXRlID0gLTE7Ci0KLSAgICBpbnQgbV92YWx1ZTsKLX07Cit0eXBlZGVm
IEFSTTY0TG9naWNhbEltbWVkaWF0ZSBMb2dpY2FsSW1tZWRpYXRlOwogCiBpbmxpbmUgdWludDE2
X3QgZ2V0SGFsZndvcmQodWludDY0X3QgdmFsdWUsIGludCB3aGljaCkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQ29tbW9uLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckNvbW1vbi5oCmluZGV4IDMzM2I4
MmE3OTBjNWNmMGU4N2NkY2Y4ODQwNTAwNDE0Njc1MjY1M2YuLjIxY2E3YTIwZGRjZWMzY2ZjNDFl
OTM4YjkxNzA2NDdjYTAwNGU3ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQXNzZW1ibGVyQ29tbW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9Bc3NlbWJsZXJDb21tb24uaApAQCAtNjYsNiArNjYsMjI5IEBAIEFMV0FZU19JTkxJ
TkUgYm9vbCBpc1ZhbGlkU2lnbmVkSW1tOShpbnQzMl90IHZhbHVlKQogICAgIHJldHVybiBpc0lu
dDkodmFsdWUpOwogfQogCitjbGFzcyBBUk02NExvZ2ljYWxJbW1lZGlhdGUgeworcHVibGljOgor
ICAgIHN0YXRpYyBBUk02NExvZ2ljYWxJbW1lZGlhdGUgY3JlYXRlMzIodWludDMyX3QgdmFsdWUp
CisgICAgeworICAgICAgICAvLyBDaGVjayBmb3IgMCwgLTEgLSB0aGVzZSBjYW5ub3QgYmUgZW5j
b2RlZC4KKyAgICAgICAgaWYgKCF2YWx1ZSB8fCAhfnZhbHVlKQorICAgICAgICAgICAgcmV0dXJu
IEludmFsaWRMb2dpY2FsSW1tZWRpYXRlOworCisgICAgICAgIC8vIEZpcnN0IGxvb2sgZm9yIGEg
MzItYml0IHBhdHRlcm4sIHRoZW4gZm9yIHJlcGVhdGluZyAxNi1iaXQKKyAgICAgICAgLy8gcGF0
dGVybnMsIDgtYml0LCA0LWJpdCwgYW5kIGZpbmFsbHkgMi1iaXQuCisKKyAgICAgICAgdW5zaWdu
ZWQgaHNiLCBsc2I7CisgICAgICAgIGJvb2wgaW52ZXJ0ZWQ7CisgICAgICAgIGlmIChmaW5kQml0
UmFuZ2U8MzI+KHZhbHVlLCBoc2IsIGxzYiwgaW52ZXJ0ZWQpKQorICAgICAgICAgICAgcmV0dXJu
IGVuY29kZUxvZ2ljYWxJbW1lZGlhdGU8MzI+KGhzYiwgbHNiLCBpbnZlcnRlZCk7CisKKyAgICAg
ICAgaWYgKCh2YWx1ZSAmIDB4ZmZmZikgIT0gKHZhbHVlID4+IDE2KSkKKyAgICAgICAgICAgIHJl
dHVybiBJbnZhbGlkTG9naWNhbEltbWVkaWF0ZTsKKyAgICAgICAgdmFsdWUgJj0gMHhmZmZmOwor
CisgICAgICAgIGlmIChmaW5kQml0UmFuZ2U8MTY+KHZhbHVlLCBoc2IsIGxzYiwgaW52ZXJ0ZWQp
KQorICAgICAgICAgICAgcmV0dXJuIGVuY29kZUxvZ2ljYWxJbW1lZGlhdGU8MTY+KGhzYiwgbHNi
LCBpbnZlcnRlZCk7CisKKyAgICAgICAgaWYgKCh2YWx1ZSAmIDB4ZmYpICE9ICh2YWx1ZSA+PiA4
KSkKKyAgICAgICAgICAgIHJldHVybiBJbnZhbGlkTG9naWNhbEltbWVkaWF0ZTsKKyAgICAgICAg
dmFsdWUgJj0gMHhmZjsKKworICAgICAgICBpZiAoZmluZEJpdFJhbmdlPDg+KHZhbHVlLCBoc2Is
IGxzYiwgaW52ZXJ0ZWQpKQorICAgICAgICAgICAgcmV0dXJuIGVuY29kZUxvZ2ljYWxJbW1lZGlh
dGU8OD4oaHNiLCBsc2IsIGludmVydGVkKTsKKworICAgICAgICBpZiAoKHZhbHVlICYgMHhmKSAh
PSAodmFsdWUgPj4gNCkpCisgICAgICAgICAgICByZXR1cm4gSW52YWxpZExvZ2ljYWxJbW1lZGlh
dGU7CisgICAgICAgIHZhbHVlICY9IDB4ZjsKKworICAgICAgICBpZiAoZmluZEJpdFJhbmdlPDQ+
KHZhbHVlLCBoc2IsIGxzYiwgaW52ZXJ0ZWQpKQorICAgICAgICAgICAgcmV0dXJuIGVuY29kZUxv
Z2ljYWxJbW1lZGlhdGU8ND4oaHNiLCBsc2IsIGludmVydGVkKTsKKworICAgICAgICBpZiAoKHZh
bHVlICYgMHgzKSAhPSAodmFsdWUgPj4gMikpCisgICAgICAgICAgICByZXR1cm4gSW52YWxpZExv
Z2ljYWxJbW1lZGlhdGU7CisgICAgICAgIHZhbHVlICY9IDB4MzsKKworICAgICAgICBpZiAoZmlu
ZEJpdFJhbmdlPDI+KHZhbHVlLCBoc2IsIGxzYiwgaW52ZXJ0ZWQpKQorICAgICAgICAgICAgcmV0
dXJuIGVuY29kZUxvZ2ljYWxJbW1lZGlhdGU8Mj4oaHNiLCBsc2IsIGludmVydGVkKTsKKworICAg
ICAgICByZXR1cm4gSW52YWxpZExvZ2ljYWxJbW1lZGlhdGU7CisgICAgfQorCisgICAgc3RhdGlj
IEFSTTY0TG9naWNhbEltbWVkaWF0ZSBjcmVhdGU2NCh1aW50NjRfdCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIC8vIENoZWNrIGZvciAwLCAtMSAtIHRoZXNlIGNhbm5vdCBiZSBlbmNvZGVkLgorICAg
ICAgICBpZiAoIXZhbHVlIHx8ICF+dmFsdWUpCisgICAgICAgICAgICByZXR1cm4gSW52YWxpZExv
Z2ljYWxJbW1lZGlhdGU7CisKKyAgICAgICAgLy8gTG9vayBmb3IgYSBjb250aWd1b3VzIGJpdCBy
YW5nZS4KKyAgICAgICAgdW5zaWduZWQgaHNiLCBsc2I7CisgICAgICAgIGJvb2wgaW52ZXJ0ZWQ7
CisgICAgICAgIGlmIChmaW5kQml0UmFuZ2U8NjQ+KHZhbHVlLCBoc2IsIGxzYiwgaW52ZXJ0ZWQp
KQorICAgICAgICAgICAgcmV0dXJuIGVuY29kZUxvZ2ljYWxJbW1lZGlhdGU8NjQ+KGhzYiwgbHNi
LCBpbnZlcnRlZCk7CisKKyAgICAgICAgLy8gSWYgdGhlIGhpZ2ggJiBsb3cgMzIgYml0cyBhcmUg
ZXF1YWwsIHdlIGNhbiB0cnkgZm9yIGEgMzItYml0IChvciBuYXJyb3dlcikgcGF0dGVybi4KKyAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkgPT0gc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KHZhbHVlID4+IDMyKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGUzMihzdGF0aWNf
Y2FzdDx1aW50MzJfdD4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIEludmFsaWRMb2dpY2FsSW1t
ZWRpYXRlOworICAgIH0KKworICAgIGludCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoaXNWYWxpZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorCisgICAg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlICE9IElu
dmFsaWRMb2dpY2FsSW1tZWRpYXRlOworICAgIH0KKworICAgIGJvb2wgaXM2NGJpdCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSAmICgxIDw8IDEyKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgQVJNNjRMb2dpY2FsSW1tZWRpYXRlKGludCB2YWx1ZSkKKyAgICAgICAgOiBt
X3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBHZW5lcmF0ZSBhIG1hc2sgd2l0
aCBiaXRzIGluIHRoZSByYW5nZSBoc2IuLjAgc2V0LCBmb3IgZXhhbXBsZToKKyAgICAvLyAgIGhz
Yjo2MyA9IDB4ZmZmZmZmZmZmZmZmZmZmZgorICAgIC8vICAgaHNiOjQyID0gMHgwMDAwMDdmZmZm
ZmZmZmZmCisgICAgLy8gICBoc2I6IDAgPSAweDAwMDAwMDAwMDAwMDAwMDEKKyAgICBzdGF0aWMg
dWludDY0X3QgbWFzayh1bnNpZ25lZCBoc2IpCisgICAgeworICAgICAgICBBU1NFUlQoaHNiIDwg
NjQpOworICAgICAgICByZXR1cm4gMHhmZmZmZmZmZmZmZmZmZmZmdWxsID4+ICg2MyAtIGhzYik7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dW5zaWduZWQgTj4KKyAgICBzdGF0aWMgdm9pZCBwYXJ0
aWFsSFNCKHVpbnQ2NF90JiB2YWx1ZSwgdW5zaWduZWQmcmVzdWx0KQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlICYgKDB4ZmZmZmZmZmZmZmZmZmZmZnVsbCA8PCBOKSkgeworICAgICAgICAgICAg
cmVzdWx0ICs9IE47CisgICAgICAgICAgICB2YWx1ZSA+Pj0gTjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIEZpbmQgdGhlIGJpdCBudW1iZXIgb2YgdGhlIGhpZ2hlc3QgYml0IHNldCBpbiBh
IG5vbi16ZXJvIHZhbHVlLCBmb3IgZXhhbXBsZToKKyAgICAvLyAgIDB4ODA4MDgwODA4MDgwODA4
MCA9IGhzYjo2MworICAgIC8vICAgMHgwMDAwMDAwMDAwMDAwMDAxID0gaHNiOiAwCisgICAgLy8g
ICAweDAwMDAwN2ZmZmZlMDAwMDAgPSBoc2I6NDIKKyAgICBzdGF0aWMgdW5zaWduZWQgaGlnaGVz
dFNldEJpdCh1aW50NjRfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZSk7Cisg
ICAgICAgIHVuc2lnbmVkIGhzYiA9IDA7CisgICAgICAgIHBhcnRpYWxIU0I8MzI+KHZhbHVlLCBo
c2IpOworICAgICAgICBwYXJ0aWFsSFNCPDE2Pih2YWx1ZSwgaHNiKTsKKyAgICAgICAgcGFydGlh
bEhTQjw4Pih2YWx1ZSwgaHNiKTsKKyAgICAgICAgcGFydGlhbEhTQjw0Pih2YWx1ZSwgaHNiKTsK
KyAgICAgICAgcGFydGlhbEhTQjwyPih2YWx1ZSwgaHNiKTsKKyAgICAgICAgcGFydGlhbEhTQjwx
Pih2YWx1ZSwgaHNiKTsKKyAgICAgICAgcmV0dXJuIGhzYjsKKyAgICB9CisKKyAgICAvLyBUaGlz
IGZ1bmN0aW9uIHRha2VzIGEgdmFsdWUgYW5kIGEgYml0IHdpZHRoLCB3aGVyZSB2YWx1ZSBvYmV5
cyB0aGUgZm9sbG93aW5nIGNvbnN0cmFpbnRzOgorICAgIC8vICAgKiBiaXRzIG91dHNpZGUgb2Yg
dGhlIHdpZHRoIG9mIHRoZSB2YWx1ZSBtdXN0IGJlIHplcm8uCisgICAgLy8gICAqIGJpdHMgd2l0
aGluIHRoZSB3aWR0aCBvZiB2YWx1ZSBtdXN0IG5laXRoZXIgYmUgYWxsIGNsZWFyIG9yIGFsbCBz
ZXQuCisgICAgLy8gVGhlIGlucHV0IGlzIGluc3BlY3RlZCB0byBkZXRlY3QgdmFsdWVzIHRoYXQg
Y29uc2lzdCBvZiBlaXRoZXIgdHdvIG9yIHRocmVlIGNvbnRpZ3VvdXMKKyAgICAvLyByYW5nZXMg
b2YgYml0cy4gVGhlIG91dHB1dCByYW5nZSBoc2IuLmxzYiB3aWxsIGRlc2NyaWJlIHRoZSBzZWNv
bmQgcmFuZ2Ugb2YgdGhlIHZhbHVlLgorICAgIC8vIGlmIHRoZSByYW5nZSBpcyBzZXQsIGludmVy
dGVkIHdpbGwgYmUgZmFsc2UsIGFuZCBpZiB0aGUgcmFuZ2UgaXMgY2xlYXIsIGludmVydGVkIHdp
bGwKKyAgICAvLyBiZSB0cnVlLiBGb3IgZXhhbXBsZSAod2l0aCB3aWR0aCA4KToKKyAgICAvLyAg
IDAwMDAxMTExID0gaHNiOjMsIGxzYjowLCBpbnZlcnRlZDpmYWxzZQorICAgIC8vICAgMTExMTAw
MDAgPSBoc2I6MywgbHNiOjAsIGludmVydGVkOnRydWUKKyAgICAvLyAgIDAwMTExMTAwID0gaHNi
OjUsIGxzYjoyLCBpbnZlcnRlZDpmYWxzZQorICAgIC8vICAgMTEwMDAwMTEgPSBoc2I6NSwgbHNi
OjIsIGludmVydGVkOnRydWUKKyAgICB0ZW1wbGF0ZTx1bnNpZ25lZCB3aWR0aD4KKyAgICBzdGF0
aWMgYm9vbCBmaW5kQml0UmFuZ2UodWludDY0X3QgdmFsdWUsIHVuc2lnbmVkJiBoc2IsIHVuc2ln
bmVkJiBsc2IsIGJvb2wmIGludmVydGVkKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlICYg
bWFzayh3aWR0aCAtIDEpKTsKKyAgICAgICAgQVNTRVJUKHZhbHVlICE9IG1hc2sod2lkdGggLSAx
KSk7CisgICAgICAgIEFTU0VSVCghKHZhbHVlICYgfm1hc2sod2lkdGggLSAxKSkpOworCisgICAg
ICAgIC8vIERldGVjdCBjYXNlcyB3aGVyZSB0aGUgdG9wIGJpdCBpcyBzZXQ7IGlmIHNvLCBmbGlw
IGFsbCB0aGUgYml0cyAmIHNldCBpbnZlcnQuCisgICAgICAgIC8vIFRoaXMgaGFsdmVzIHRoZSBu
dW1iZXIgb2YgcGF0dGVybnMgd2UgbmVlZCB0byBsb29rIGZvci4KKyAgICAgICAgY29uc3QgdWlu
dDY0X3QgbXNiID0gMXVsbCA8PCAod2lkdGggLSAxKTsKKyAgICAgICAgaWYgKChpbnZlcnRlZCA9
ICh2YWx1ZSAmIG1zYikpKQorICAgICAgICAgICAgdmFsdWUgXj0gbWFzayh3aWR0aCAtIDEpOwor
CisgICAgICAgIC8vIEZpbmQgdGhlIGhpZ2hlc3Qgc2V0IGJpdCBpbiB2YWx1ZSwgZ2VuZXJhdGUg
YSBjb3JyZXNwb25kaW5nIG1hc2sgJiBmbGlwIGFsbAorICAgICAgICAvLyBiaXRzIHVuZGVyIGl0
LgorICAgICAgICBoc2IgPSBoaWdoZXN0U2V0Qml0KHZhbHVlKTsKKyAgICAgICAgdmFsdWUgXj0g
bWFzayhoc2IpOworICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAvLyBJZiB0aGlz
IGNsZWFyZWQgdGhlIHZhbHVlLCB0aGVuIHRoZSByYW5nZSBoc2IuLjAgd2FzIGFsbCBzZXQuCisg
ICAgICAgICAgICBsc2IgPSAwOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KworICAgICAgICAvLyBUcnkgbWFraW5nIG9uZSBtb3JlIG1hc2ssIGFuZCBmbGlwcGluZyB0aGUg
Yml0cyEKKyAgICAgICAgbHNiID0gaGlnaGVzdFNldEJpdCh2YWx1ZSk7CisgICAgICAgIHZhbHVl
IF49IG1hc2sobHNiKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgLy8gU3Vj
Y2VzcyAtIGJ1dCBsc2IgYWN0dWFsbHkgcG9pbnRzIHRvIHRoZSBoc2Igb2YgYSB0aGlyZCByYW5n
ZSAtIGFkZCBvbmUKKyAgICAgICAgICAgIC8vIHRvIGdldCB0byB0aGUgbHNiIG9mIHRoZSBtaWQg
cmFuZ2UuCisgICAgICAgICAgICArK2xzYjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEVuY29kZXMg
dGhlIHNldCBvZiBpbW1OOmltbXI6aW1tcyBmaWVsZHMgZm91bmQgaW4gYSBsb2dpY2FsIGltbWVk
aWF0ZS4KKyAgICB0ZW1wbGF0ZTx1bnNpZ25lZCB3aWR0aD4KKyAgICBzdGF0aWMgaW50IGVuY29k
ZUxvZ2ljYWxJbW1lZGlhdGUodW5zaWduZWQgaHNiLCB1bnNpZ25lZCBsc2IsIGJvb2wgaW52ZXJ0
ZWQpCisgICAgeworICAgICAgICAvLyBDaGVjayB3aWR0aCBpcyBhIHBvd2VyIG9mIDIhCisgICAg
ICAgIEFTU0VSVCghKHdpZHRoICYgKHdpZHRoIC0xKSkpOworICAgICAgICBBU1NFUlQod2lkdGgg
PD0gNjQgJiYgd2lkdGggPj0gMik7CisgICAgICAgIEFTU0VSVChoc2IgPj0gbHNiKTsKKyAgICAg
ICAgQVNTRVJUKGhzYiA8IHdpZHRoKTsKKworICAgICAgICBpbnQgaW1tTiA9IDA7CisgICAgICAg
IGludCBpbW1zID0gMDsKKyAgICAgICAgaW50IGltbXIgPSAwOworCisgICAgICAgIC8vIEZvciA2
NC1iaXQgdmFsdWVzIHRoaXMgaXMgZWFzeSAtIGp1c3Qgc2V0IGltbU4gdG8gdHJ1ZSwgYW5kIGlt
bXMganVzdAorICAgICAgICAvLyBjb250YWlucyB0aGUgYml0IG51bWJlciBvZiB0aGUgaGlnaGVz
dCBzZXQgYml0IG9mIHRoZSBzZXQgcmFuZ2UuIEZvcgorICAgICAgICAvLyB2YWx1ZXMgd2l0aCBu
YXJyb3dlciB3aWR0aHMsIHRoZXNlIGFyZSBlbmNvZGVkIGJ5IGEgbGVhZGluZyBzZXQgb2YKKyAg
ICAgICAgLy8gb25lIGJpdHMsIGZvbGxvd2VkIGJ5IGEgemVybyBiaXQsIGZvbGxvd2VkIGJ5IHRo
ZSByZW1haW5pbmcgc2V0IG9mIGJpdHMKKyAgICAgICAgLy8gYmVpbmcgdGhlIGhpZ2ggYml0IG9m
IHRoZSByYW5nZS4gRm9yIGEgMzItYml0IGltbWVkaWF0ZSB0aGVyZSBhcmUgbm8KKyAgICAgICAg
Ly8gbGVhZGluZyBvbmUgYml0cywganVzdCBhIHplcm8gZm9sbG93ZWQgYnkgYSBmaXZlIGJpdCBu
dW1iZXIuIEZvciBhCisgICAgICAgIC8vIDE2LWJpdCBpbW1lZGlhdGUgdGhlcmUgaXMgb25lIG9u
ZSBiaXQsIGEgemVybyBiaXQsIGFuZCB0aGVuIGEgZm91ciBiaXQKKyAgICAgICAgLy8gYml0LXBv
c2l0aW9uLCBldGMuCisgICAgICAgIGlmICh3aWR0aCA9PSA2NCkKKyAgICAgICAgICAgIGltbU4g
PSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpbW1zID0gNjMgJiB+KHdpZHRoICsgd2lk
dGggLSAxKTsKKworICAgICAgICBpZiAoaW52ZXJ0ZWQpIHsKKyAgICAgICAgICAgIC8vIGlmIHdp
ZHRoIGlzIDY0ICYgaHNiIGlzIDYyLCB0aGVuIHdlIGhhdmUgYSB2YWx1ZSBzb21ldGhpbmcgbGlr
ZToKKyAgICAgICAgICAgIC8vICAgMHg4MDAwMDAwMGZmZmZmZmZmIChpbiB0aGlzIGNhc2Ugd2l0
aCBsc2IgMzIpLgorICAgICAgICAgICAgLy8gVGhlIHJvciBzaG91bGQgYmUgYnkgMSwgaW1tcyAo
ZWZmZWN0aXZlbHkgc2V0IHdpZHRoIG1pbnVzIDEpIGlzCisgICAgICAgICAgICAvLyAzMi4gU2V0
IHdpZHRoIGlzIGZ1bGwgd2lkdGggbWludXMgY2xlYXJlZCB3aWR0aC4KKyAgICAgICAgICAgIGlt
bXIgPSAod2lkdGggLSAxKSAtIGhzYjsKKyAgICAgICAgICAgIGltbXMgfD0gKHdpZHRoIC0gKCho
c2IgLSBsc2IpICsgMSkpIC0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGlm
IHdpZHRoIGlzIDY0ICYgaHNiIGlzIDYyLCB0aGVuIHdlIGhhdmUgYSB2YWx1ZSBzb21ldGhpbmcg
bGlrZToKKyAgICAgICAgICAgIC8vICAgMHg3ZmZmZmZmZjAwMDAwMDAwIChpbiB0aGlzIGNhc2Ug
d2l0aCBsc2IgMzIpLgorICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGVmZmVjdGl2ZWx5IHJv
bCdlZCBieSBsc2IsIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAgICAgIC8vIGEgcm9y
IGJ5IHdpZHRoIC0gbHNiIChvciAwLCBpbiB0aGUgY2FzZSB3aGVyZSBsc2IgaXMgMCkuIGltbXMK
KyAgICAgICAgICAgIC8vIGlzIGhzYiAtIGxzYi4KKyAgICAgICAgICAgIGltbXIgPSAod2lkdGgg
LSBsc2IpICYgKHdpZHRoIC0gMSk7CisgICAgICAgICAgICBpbW1zIHw9IGhzYiAtIGxzYjsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBpbW1OIDw8IDEyIHwgaW1tciA8PCA2IHwgaW1tczsK
KyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgaW50IEludmFsaWRMb2dpY2FsSW1tZWRpYXRlID0g
LTE7CisKKyAgICBpbnQgbV92YWx1ZTsKK307CisKKwogfSAvLyBuYW1lc3BhY2UgSlNDLgogCiAj
ZW5kaWYgLy8gQXNzZW1ibGVyQ29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKaW5kZXggODA2MzIzN2UyNWVhZWZl
NDE5ZWRiNmVlNjczOGE4MzdiOGY5ZWMxNC4uM2YzZDY0ZGUxMzQ4ZWJmYzRlY2NiMzk0NWUzMDZi
N2VjNWU2YTU2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTTY0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKQEAgLTM2Nyw2ICszNjcsMTkgQEAgcHVibGljOgogICAg
ICAgICBtX2Fzc2VtYmxlci5hbmRfPDY0PihkZXN0LCBzcmMxLCBzcmMyKTsKICAgICB9CiAKKyAg
ICB2b2lkIGFuZDY0KFRydXN0ZWRJbW02NCBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0gPSBMb2dp
Y2FsSW1tZWRpYXRlOjpjcmVhdGU2NChpbW0ubV92YWx1ZSk7CisKKyAgICAgICAgaWYgKGxvZ2lj
YWxJbW0uaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hbmRfPDY0PihkZXN0
LCBzcmMsIGxvZ2ljYWxJbW0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgbW92ZShpbW0sIGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUo
KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZF88NjQ+KGRlc3QsIHNyYywgZGF0YVRlbXBSZWdp
c3Rlcik7CisgICAgfQorCiAgICAgdm9pZCBhbmQ2NChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuYW5kXzw2ND4oZGVzdCwgZGVzdCwg
c3JjKTsKQEAgLTU3OCw3ICs1OTEsMjAgQEAgcHVibGljOgogICAgICAgICBzaWduRXh0ZW5kMzJU
b1B0cihpbW0sIGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CiAg
ICAgICAgIG1fYXNzZW1ibGVyLm9ycjw2ND4oZGVzdCwgc3JjLCBkYXRhVGVtcFJlZ2lzdGVyKTsK
ICAgICB9Ci0gICAgCisKKyAgICB2b2lkIG9yNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIExvZ2ljYWxJbW1lZGlhdGUg
bG9naWNhbEltbSA9IExvZ2ljYWxJbW1lZGlhdGU6OmNyZWF0ZTY0KGltbS5tX3ZhbHVlKTsKKwor
ICAgICAgICBpZiAobG9naWNhbEltbS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLm9ycjw2ND4oZGVzdCwgc3JjLCBsb2dpY2FsSW1tKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIG1vdmUoaW1tLCBnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVy
SURBbmRJbnZhbGlkYXRlKCkpOworICAgICAgICBtX2Fzc2VtYmxlci5vcnI8NjQ+KGRlc3QsIHNy
YywgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgfQorCiAgICAgdm9pZCBvcjY0KFRydXN0ZWRJbW02
NCBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIExvZ2ljYWxJbW1lZGlhdGUg
bG9naWNhbEltbSA9IExvZ2ljYWxJbW1lZGlhdGU6OmNyZWF0ZTY0KHN0YXRpY19jYXN0PGludHB0
cl90PihzdGF0aWNfY2FzdDxpbnQ2NF90PihpbW0ubV92YWx1ZSkpKTsKQEAgLTgzMSw2ICs4NTcs
MjMgQEAgcHVibGljOgogICAgICAgICB4b3I2NChpbW0sIGRlc3QsIGRlc3QpOwogICAgIH0KIAor
ICAgIHZvaWQgeG9yNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChpbW0ubV92YWx1ZSA9PSAtMSkKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLm12bjw2ND4oZGVzdCwgc3JjKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0gPSBMb2dpY2FsSW1tZWRpYXRlOjpj
cmVhdGU2NChpbW0ubV92YWx1ZSk7CisKKyAgICAgICAgICAgIGlmIChsb2dpY2FsSW1tLmlzVmFs
aWQoKSkgeworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVvcjw2ND4oZGVzdCwgc3JjLCBs
b2dpY2FsSW1tKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIG1vdmUoaW1tLCBnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlk
YXRlKCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW9yPDY0PihkZXN0LCBzcmMsIGRhdGFU
ZW1wUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgfQorCiAgICAgdm9pZCB4b3I2NChUcnVzdGVk
SW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAg
ICAgaWYgKGltbS5tX3ZhbHVlID09IC0xKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAppbmRleCA2OTQ0MjA3YmM1M2M5ZmJlZWI5Mzg1MTYzMGMyNzljOGRmMmQ4ZDY4
Li43NTZiZDU0NDcwZDUzY2Q3N2MxMGFhZDQ0MDVlYmIwMGNmYThlMTYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcApAQCAtNDk4LDYgKzQ5OCwyNiBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gQXJnKCk7CiAgICAgfQogCisgICAgQXJnIGJpdEltbShWYWx1
ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUtPmhhc0ludCgpKSB7CisgICAgICAg
ICAgICBpbnQ2NF90IGludFZhbHVlID0gdmFsdWUtPmFzSW50KCk7CisgICAgICAgICAgICBpZiAo
QXJnOjppc1ZhbGlkQml0SW1tRm9ybShpbnRWYWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEFyZzo6Yml0SW1tKGludFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQXJnKCk7
CisgICAgfQorCisgICAgQXJnIGJpdEltbTY0KFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmICh2YWx1ZS0+aGFzSW50KCkpIHsKKyAgICAgICAgICAgIGludDY0X3QgaW50VmFsdWUgPSB2
YWx1ZS0+YXNJbnQoKTsKKyAgICAgICAgICAgIGlmIChBcmc6OmlzVmFsaWRCaXRJbW02NEZvcm0o
aW50VmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBBcmc6OmJpdEltbTY0KGludFZhbHVl
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgfQorCiAgICAgQXJnIGlt
bU9yVG1wKFZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChBcmcgcmVzdWx0ID0gaW1t
KHZhbHVlKSkKQEAgLTY0Nyw2ICs2NjcsMzYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6Qml0SW1tLCBB
cmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBD
b21tdXRhdGl2ZSkgeworICAgICAgICAgICAgICAgIGlmIChBcmcgcmlnaHRBcmcgPSBiaXRJbW0o
cmlnaHQpKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHJpZ2h0QXJnLCB0
bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEEgbm9u
LWNvbW11dGF0aXZlIG9wZXJhdGlvbiBjb3VsZCBoYXZlIGFuIGltbWVkaWF0ZSBpbiBsZWZ0Lgor
ICAgICAgICAgICAgICAgIGlmIChBcmcgbGVmdEFyZyA9IGJpdEltbShsZWZ0KSkgeworICAgICAg
ICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBsZWZ0QXJnLCB0bXAocmlnaHQpLCByZXN1bHQp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJn
OjpCaXRJbW02NCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICAgICAgaWYgKGNvbW11
dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUpIHsKKyAgICAgICAgICAgICAgICBpZiAoQXJnIHJpZ2h0
QXJnID0gYml0SW1tNjQocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNv
ZGUsIHJpZ2h0QXJnLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIEEgbm9uLWNvbW11dGF0aXZlIG9wZXJhdGlvbiBjb3VsZCBoYXZlIGFuIGltbWVk
aWF0ZSBpbiBsZWZ0LgorICAgICAgICAgICAgICAgIGlmIChBcmcgbGVmdEFyZyA9IGJpdEltbTY0
KGxlZnQpKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGxlZnRBcmcsIHRt
cChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBpZiAoaW1tKHJp
Z2h0KSAmJiBpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpUbXAp
KSB7CiAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIGltbShyaWdodCksIHJl
c3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC05MjgsMTAgKzk3OCwxMCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGlmIChpbW0odmFsdWUudmFsdWUoKSkpCiAgICAgICAgICAgICAg
ICAgICAgIGFyZyA9IGltbSh2YWx1ZS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBlbHNlIGlm
ICh2YWx1ZS52YWx1ZSgpLT5oYXNJbnQ2NCgpKQotICAgICAgICAgICAgICAgICAgICBhcmcgPSBB
cmc6OmltbTY0KHZhbHVlLnZhbHVlKCktPmFzSW50NjQoKSk7CisgICAgICAgICAgICAgICAgICAg
IGFyZyA9IEFyZzo6YmlnSW1tKHZhbHVlLnZhbHVlKCktPmFzSW50NjQoKSk7CiAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAodmFsdWUudmFsdWUoKS0+aGFzRG91YmxlKCkgJiYgY2FuQmVJbnRlcm5h
bCh2YWx1ZS52YWx1ZSgpKSkgewogICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbCh2
YWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjppbW02NChiaXR3
aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUudmFsdWUoKS0+YXNEb3VibGUoKSkpOworICAgICAgICAg
ICAgICAgICAgICBhcmcgPSBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUu
dmFsdWUoKS0+YXNEb3VibGUoKSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgICAgICBhcmcgPSB0bXAodmFsdWUudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0xOTM0LDcgKzE5ODQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKGltbSht
X3ZhbHVlKSkKICAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgaW1tKG1fdmFsdWUpLCB0bXAo
bV92YWx1ZSkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFwcGVuZChNb3Zl
LCBBcmc6OmltbTY0KG1fdmFsdWUtPmFzSW50KCkpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAg
ICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShtX3ZhbHVlLT5hc0ludCgpKSwgdG1wKG1f
dmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAppbmRleCA3MjM5OGI5MjY0OTk3
ZGQzNjgxOWM1ODA5NmViNDcyNTk4NzIxY2NhLi45NzY3NGJhMjg1MjE4MzZiYjU2MTBkNWRkMTA0
NmFlMjU3YTE3Y2MwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a21hcFNwZWNpYWwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
U3BlY2lhbC5jcHAKQEAgLTIwNyw3ICsyMDcsNyBAQCBib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNB
cmdWYWxpZEZvclZhbHVlKGNvbnN0IEFpcjo6QXJnJiBhcmcsIFZhbHVlKiB2YWx1ZSkKICAgICBz
d2l0Y2ggKGFyZy5raW5kKCkpIHsKICAgICBjYXNlIEFyZzo6VG1wOgogICAgIGNhc2UgQXJnOjpJ
bW06Ci0gICAgY2FzZSBBcmc6OkltbTY0OgorICAgIGNhc2UgQXJnOjpCaWdJbW06CiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGlmICghYXJnLmlzU3RhY2tNZW1vcnkoKSkK
QEAgLTI1NSw3ICsyNTUsNyBAQCBWYWx1ZVJlcCBTdGFja21hcFNwZWNpYWw6OnJlcEZvckFyZyhD
b2RlJiBjb2RlLCBjb25zdCBBcmcmIGFyZykKICAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpyZWco
YXJnLnJlZygpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBcmc6OkltbToKLSAgICBjYXNl
IEFyZzo6SW1tNjQ6CisgICAgY2FzZSBBcmc6OkJpZ0ltbToKICAgICAgICAgcmV0dXJuIFZhbHVl
UmVwOjpjb25zdGFudChhcmcudmFsdWUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQXJn
OjpBZGRyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCmluZGV4IDAzM2M5
NzIyNjM4ZmVmOGQyNDU3ZjE0MzA5NjQxZWIyMzM2OGZhZDQuLjJlZGQ4ZTcyOTIxYmQ1ZTc5ZjRk
Mzk3NDk2OTBmODQ5ZDQ2MmUzYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5jcHAKQEAgLTEyMSw3ICsxMjEsMTMgQEAgdm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKICAgICBjYXNlIEltbToKICAgICAgICAgb3V0LnByaW50KCIkIiwgbV9vZmZzZXQp
OwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbW02NDoKKyAgICBjYXNlIEJpZ0ltbToKKyAg
ICAgICAgb3V0LnByaW50ZigiJDB4JWxseCIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZyB1bnNpZ25l
ZD4obV9vZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQml0SW1tOgorICAgICAg
ICBvdXQucHJpbnQoIiQiLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJp
dEltbTY0OgogICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4Iiwgc3RhdGljX2Nhc3Q8bG9uZyBs
b25nIHVuc2lnbmVkPihtX29mZnNldCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBBZGRy
OgpAQCAtMTg1LDggKzE5MSwxNCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgQXJnOjpLaW5kIGtpbmQpCiAgICAgY2FzZSBBcmc6OkltbToKICAgICAgICAgb3V0LnByaW50
KCJJbW0iKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQXJnOjpJbW02NDoKLSAgICAgICAg
b3V0LnByaW50KCJJbW02NCIpOworICAgIGNhc2UgQXJnOjpCaWdJbW06CisgICAgICAgIG91dC5w
cmludCgiQmlnSW1tIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZzo6Qml0SW1tOgor
ICAgICAgICBvdXQucHJpbnQoIkJpdEltbSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
cmc6OkJpdEltbTY0OgorICAgICAgICBvdXQucHJpbnQoIkJpdEltbTY0Iik7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEFyZzo6QWRkcjoKICAgICAgICAgb3V0LnByaW50KCJBZGRyIik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAppbmRleCA4MTRhZDJhY2I1MmViMGVlMTgz
NWI3YzgyOWEzODRmYzUyOTAzNWFiLi4wY2M4MThkNGE5NjlhMzgyZWFhYmU5YWMwMTNjMjk3NWQ4
NTZiM2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKQEAgLTYwLDExICs2
MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIFRtcCwKIAogICAgICAgICAvLyBUaGlzIGlzIGFuIGlt
bWVkaWF0ZSB0aGF0IHRoZSBpbnN0cnVjdGlvbiB3aWxsIG1hdGVyaWFsaXplLiBJbW0gaXMgdGhl
IGltbWVkaWF0ZSB0aGF0IGNhbiBiZQotICAgICAgICAvLyBpbmxpbmVkIGludG8gbW9zdCBpbnN0
cnVjdGlvbnMsIHdoaWxlIEltbTY0IGluZGljYXRlcyBhIGNvbnN0YW50IG1hdGVyaWFsaXphdGlv
biBhbmQgaXMKKyAgICAgICAgLy8gaW5saW5lZCBpbnRvIG1vc3QgaW5zdHJ1Y3Rpb25zLCB3aGls
ZSBCaWdJbW0gaW5kaWNhdGVzIGEgY29uc3RhbnQgbWF0ZXJpYWxpemF0aW9uIGFuZCBpcwogICAg
ICAgICAvLyB1c3VhbGx5IG9ubHkgdXNhYmxlIHdpdGggTW92ZS4gU3BlY2lhbHMgbWF5IGFsc28g
YWRtaXQgaXQsIGZvciBleGFtcGxlIGZvciBzdGFja21hcHMgdXNlZCBmb3IKICAgICAgICAgLy8g
T1NSIGV4aXQgYW5kIHRhaWwgY2FsbHMuCisgICAgICAgIC8vIEJpdEltbSBpcyBhbiBpbW1lZGlh
dGUgZm9yIEJpdHdpc2Ugb3BlcmF0aW9uIChBbmQsIFhvciwgZXRjKS4KICAgICAgICAgSW1tLAot
ICAgICAgICBJbW02NCwKKyAgICAgICAgQmlnSW1tLAorICAgICAgICBCaXRJbW0sCisgICAgICAg
IEJpdEltbTY0LAogCiAgICAgICAgIC8vIFRoZXNlIGFyZSB0aGUgYWRkcmVzc2VzLiBJbnN0cnVj
dGlvbnMgbWF5IGxvYWQgZnJvbSAoVXNlKSwgc3RvcmUgdG8gKERlZiksIG9yIGV2YWx1YXRlCiAg
ICAgICAgIC8vIChVc2VBZGRyKSBhZGRyZXNzZXMuCkBAIC00NzUsMTcgKzQ3OCwzMyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgc3RhdGljIEFyZyBpbW02
NChpbnQ2NF90IHZhbHVlKQorICAgIHN0YXRpYyBBcmcgYmlnSW1tKGludDY0X3QgdmFsdWUpCiAg
ICAgewogICAgICAgICBBcmcgcmVzdWx0OwotICAgICAgICByZXN1bHQubV9raW5kID0gSW1tNjQ7
CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBCaWdJbW07CisgICAgICAgIHJlc3VsdC5tX29mZnNl
dCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBB
cmcgYml0SW1tKGludDY0X3QgdmFsdWUpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gQml0SW1tOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSB2
YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGJp
dEltbTY0KGludDY0X3QgdmFsdWUpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAg
ICByZXN1bHQubV9raW5kID0gQml0SW1tNjQ7CiAgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHZh
bHVlOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIHN0YXRpYyBBcmcgaW1t
UHRyKGNvbnN0IHZvaWQqIGFkZHJlc3MpCiAgICAgewotICAgICAgICByZXR1cm4gaW1tNjQoYml0
d2lzZV9jYXN0PGludHB0cl90PihhZGRyZXNzKSk7CisgICAgICAgIHJldHVybiBiaWdJbW0oYml0
d2lzZV9jYXN0PGludHB0cl90PihhZGRyZXNzKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEFyZyBh
ZGRyKEFpcjo6VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0gMCkKQEAgLTY1MiwxNCArNjcxLDI0
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW07CiAgICAgfQogCi0gICAg
Ym9vbCBpc0ltbTY0KCkgY29uc3QKKyAgICBib29sIGlzQmlnSW1tKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBraW5kKCkgPT0gQmlnSW1tOworICAgIH0KKworICAgIGJvb2wgaXNCaXRJ
bW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBCaXRJbW07CisgICAg
fQorCisgICAgYm9vbCBpc0JpdEltbTY0KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBr
aW5kKCkgPT0gSW1tNjQ7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gQml0SW1tNjQ7CiAgICAg
fQogCiAgICAgYm9vbCBpc1NvbWVJbW0oKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGlz
SW1tKCkgfHwgaXNJbW02NCgpOworICAgICAgICByZXR1cm4gaXNJbW0oKSB8fCBpc0JpZ0ltbSgp
IHx8IGlzQml0SW1tKCkgfHwgaXNCaXRJbW02NCgpOwogICAgIH0KIAogICAgIGJvb2wgaXNBZGRy
KCkgY29uc3QKQEAgLTc0Nyw3ICs3NzYsNyBAQCBwdWJsaWM6CiAKICAgICBpbnQ2NF90IHZhbHVl
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW1tIHx8IGtpbmQoKSA9
PSBJbW02NCk7CisgICAgICAgIEFTU0VSVChpc1NvbWVJbW0oKSk7CiAgICAgICAgIHJldHVybiBt
X29mZnNldDsKICAgICB9CiAKQEAgLTc2Nyw3ICs3OTYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
KiBwb2ludGVyVmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJ
bW02NCk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQmlnSW1tKTsKICAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fb2Zmc2V0KSk7CiAg
ICAgfQogCkBAIC04MzcsNyArODY2LDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dpdGNo
IChraW5kKCkpIHsKICAgICAgICAgY2FzZSBJbW06Ci0gICAgICAgIGNhc2UgSW1tNjQ6CisgICAg
ICAgIGNhc2UgQmlnSW1tOgorICAgICAgICBjYXNlIEJpdEltbToKKyAgICAgICAgY2FzZSBCaXRJ
bW02NDoKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIEluZGV4OgogICAgICAgICBj
YXNlIFN0YWNrOgpAQCAtODYxLDYgKzg5Miw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3
aXRjaCAoa2luZCgpKSB7CiAgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIEJpdEltbToK
KyAgICAgICAgY2FzZSBCaXRJbW02NDoKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAgICBj
YXNlIFJlc0NvbmQ6CiAgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKQEAgLTg3Miw3ICs5MDUsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgSW5kZXg6CiAgICAgICAgIGNhc2UgU3RhY2s6CiAgICAg
ICAgIGNhc2UgQ2FsbEFyZzoKLSAgICAgICAgY2FzZSBJbW02NDogLy8gWWVzLCB3ZSBhbGxvdyBJ
bW02NCBhcyBhIGRvdWJsZSBpbW1lZGlhdGUuIFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcg
c3RhY2ttYXBzLgorICAgICAgICBjYXNlIEJpZ0ltbTogLy8gWWVzLCB3ZSBhbGxvdyBCaWdJbW0g
YXMgYSBkb3VibGUgaW1tZWRpYXRlLiBXZSB1c2UgdGhpcyBmb3IgaW1wbGVtZW50aW5nIHN0YWNr
bWFwcy4KICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFRtcDoKICAgICAg
ICAgICAgIHJldHVybiBpc0ZQVG1wKCk7CkBAIC04ODQsNiArOTE3LDggQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKICAgICAgICAgY2FzZSBJbW06CisgICAgICAg
IGNhc2UgQml0SW1tOgorICAgICAgICBjYXNlIEJpdEltbTY0OgogICAgICAgICBjYXNlIFNwZWNp
YWw6CiAgICAgICAgIGNhc2UgVG1wOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05OTQs
NiArMTAyOSwyNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAg
ICBzdGF0aWMgYm9vbCBpc1ZhbGlkQml0SW1tRm9ybShpbnQ2NF90IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKGlzWDg2KCkpCisgICAgICAgICAgICByZXR1cm4gQjM6OmlzUmVwcmVzZW50YWJs
ZUFzPGludDMyX3Q+KHZhbHVlKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAg
IHJldHVybiBBUk02NExvZ2ljYWxJbW1lZGlhdGU6OmNyZWF0ZTMyKHZhbHVlKS5pc1ZhbGlkKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlk
Qml0SW1tNjRGb3JtKGludDY0X3QgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoaXNYODYoKSkK
KyAgICAgICAgICAgIHJldHVybiBCMzo6aXNSZXByZXNlbnRhYmxlQXM8aW50MzJfdD4odmFsdWUp
OworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgcmV0dXJuIEFSTTY0TG9naWNh
bEltbWVkaWF0ZTo6Y3JlYXRlNjQodmFsdWUpLmlzVmFsaWQoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKwogICAgIHN0YXRpYyBib29sIGlzVmFsaWRBZGRyRm9ybShpbnQzMl90IG9m
ZnNldCwgT3B0aW9uYWw8V2lkdGg+IHdpZHRoID0gTnVsbG9wdCkKICAgICB7CiAgICAgICAgIGlm
IChpc1g4NigpKQpAQCAtMTA0Miw4ICsxMDk1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICBjYXNlIEltbToKICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlk
SW1tRm9ybSh2YWx1ZSgpKTsKLSAgICAgICAgY2FzZSBJbW02NDoKKyAgICAgICAgY2FzZSBCaWdJ
bW06CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBCaXRJbW06CisgICAg
ICAgICAgICByZXR1cm4gaXNWYWxpZEJpdEltbUZvcm0odmFsdWUoKSk7CisgICAgICAgIGNhc2Ug
Qml0SW1tNjQ6CisgICAgICAgICAgICByZXR1cm4gaXNWYWxpZEJpdEltbTY0Rm9ybSh2YWx1ZSgp
KTsKICAgICAgICAgY2FzZSBBZGRyOgogICAgICAgICBjYXNlIFN0YWNrOgogICAgICAgICBjYXNl
IENhbGxBcmc6CkBAIC0xMTE5LDE0ICsxMTc2LDE0IEBAIHB1YmxpYzoKIAogICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIgYXNUcnVzdGVkSW1tMzIoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlzSW1tKCkpOworICAgICAgICBBU1NFUlQoaXNJbW0oKSB8fCBpc0JpdEltbSgp
KTsKICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKICAgICB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQgYXNUcnVzdGVkSW1tNjQoKSBjb25zdAogICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzSW1tNjQoKSk7CisgICAgICAgIEFTU0VSVChpc0JpZ0ltbSgp
IHx8IGlzQml0SW1tNjQoKSk7CiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KHZhbHVlKCkpOwogICAgIH0KICNlbmRpZgpAQCAtMTEzNCw3ICsxMTkxLDcgQEAgcHVi
bGljOgogICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyIGFzVHJ1c3RlZEltbVB0cigp
IGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXM2NEJpdCgpKQotICAgICAgICAgICAgQVNTRVJU
KGlzSW1tNjQoKSk7CisgICAgICAgICAgICBBU1NFUlQoaXNCaWdJbW0oKSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIEFTU0VSVChpc0ltbSgpKTsKICAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHBvaW50ZXJWYWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAppbmRleCBjN2MyMjczODczMTVj
NmZjNDdhYTIyNThkYmQyODg4NDcyOGQxNDQ5Li43MmI1ZmRlZWZmNTE2YTMwZGFjNTQ4MTBjYmRj
NWZkNjNhYjA2Y2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNDYWxsU3BlY2lhbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
Q2FsbFNwZWNpYWwuY3BwCkBAIC03Niw3ICs3Niw3IEBAIGJvb2wgQ0NhbGxTcGVjaWFsOjppc1Zh
bGlkKEluc3QmIGluc3QpCiAgICAgICAgICAgICBpZiAoaXMzMkJpdCgpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIEFyZzo6
SW1tNjQ6CisgICAgICAgIGNhc2UgQXJnOjpCaWdJbW06CiAgICAgICAgICAgICBpZiAoaXM2NEJp
dCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTI1LDcgKzEyNSw3IEBAIENDYWxsSGVscGVyczo6SnVtcCBDQ2FsbFNwZWNpYWw6OmdlbmVy
YXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0CiB7CiAgICAgc3dpdGNo
IChpbnN0LmFyZ3NbY2FsbGVlQXJnT2Zmc2V0XS5raW5kKCkpIHsKICAgICBjYXNlIEFyZzo6SW1t
OgotICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICBjYXNlIEFyZzo6QmlnSW1tOgogICAgICAgICBq
aXQubW92ZShpbnN0LmFyZ3NbY2FsbGVlQXJnT2Zmc2V0XS5hc1RydXN0ZWRJbW1QdHIoKSwgc2Ny
YXRjaFJlZ2lzdGVyKTsKICAgICAgICAgaml0LmNhbGwoc2NyYXRjaFJlZ2lzdGVyKTsKICAgICAg
ICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckVt
aXRTaHVmZmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZm
bGUuY3BwCmluZGV4IDMyNTY3YjY4NDY0M2UwZmEwNDQ3N2MxZDg1M2QyYWEyNGVkYTU0NTkuLjVm
YWYxMzNkODgwMGQ5OWVkNTczMDEzNWZiY2E5NWE2NmQ4NmVmZWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRW1pdFNodWZmbGUuY3BwCkBAIC0zMTAsNyArMzEwLDcg
QEAgVmVjdG9yPEluc3Q+IGVtaXRTaHVmZmxlKAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHBhaXIuc3JjKCkuaXNTb21lSW1tKCkpOwogICAgICAgICAgICAgICAg
IEFTU0VSVChtb3ZlID09IE1vdmUzMik7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJ
bnN0KE1vdmUsIG9yaWdpbiwgQXJnOjppbW02NChwYWlyLnNyYygpLnZhbHVlKCkpLCBzY3JhdGNo
KSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KE1vdmUsIG9yaWdpbiwgQXJn
OjpiaWdJbW0ocGFpci5zcmMoKS52YWx1ZSgpKSwgc2NyYXRjaCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChJbnN0KG1vdmVGb3JXaWR0aChwYWlyLndpZHRoKCkp
LCBvcmlnaW4sIHNjcmF0Y2gsIHBhaXIuZHN0KCkpKTsKICAgICAgICAgICAgIHJldHVyblNjcmF0
Y2goc2NyYXRjaEluZGV4LCBzY3JhdGNoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCmluZGV4IGU4YjAzNzU2YWQ4MzAzOTY5
MzI0ODY0MWI2YmRlNGZkOTFiNTFiOGIuLmRjMDExMDNiOTE4OTE3MmFhMjhiNGMwOTc3ZmQ5NzNk
ZmI4Nzc3NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4
T2J2aW91c1NwaWxscy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJG
aXhPYnZpb3VzU3BpbGxzLmNwcApAQCAtMjM3LDcgKzIzNyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEltbUZvcm0oYWxpYXMtPmNvbnN0YW50KSkKICAgICAg
ICAgICAgICAgICAgICAgYXJnID0gQXJnOjppbW0oYWxpYXMtPmNvbnN0YW50KTsKICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6aW1tNjQoYWxpYXMt
PmNvbnN0YW50KTsKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjpiaWdJbW0oYWxpYXMt
PmNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBkaWRUaGluZ3MgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCmluZGV4IDAyY2YzZTRkODZlZmQ4OTI2ZmVlNmU0OGE3
M2MyYTUwY2Q1MjcxYjAuLjY2OWMyOGNkNTExMjU4MTYyZGJiOWVmZjczMDM1NDBlZjczYzM4Njgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29k
ZXMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwpA
QCAtMzksNyArMzksNyBAQAogIyBBcmd1bWVudCBraW5kczoKICMgVG1wID0+IHRlbXBvcmFyeSBv
ciByZWdpc3RlcgogIyBJbW0gPT4gMzItYml0IGltbWVkaWF0ZSBpbnQKLSMgSW1tNjQgPT4gVHJ1
c3RlZEltbTY0CisjIEJpZ0ltbSA9PiBUcnVzdGVkSW1tNjQKICMgQWRkciA9PiBhZGRyZXNzIGFz
IHRlbXBvcmFyeS9yZWdpc3RlcitvZmZzZXQKICMgSW5kZXggPT4gQmFzZUluZGV4IGFkZHJlc3MK
ICMgQWJzID0+IEFic29sdXRlQWRkcmVzcwpAQCAtMjcwLDYgKzI3MCw3IEBAIExlYSBVQTpHOlB0
ciwgRDpHOlB0cgogCiBBbmQzMiBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1w
LCBUbXAKKyAgICBhcm02NDogQml0SW1tLCBUbXAsIFRtcAogICAgIHg4NjogVG1wLCBBZGRyLCBU
bXAKICAgICB4ODY6IEFkZHIsIFRtcCwgVG1wCiAKQEAgLTI4Miw2ICsyODMsNyBAQCBBbmQzMiBV
Okc6MzIsIFVaRDpHOjMyCiAKIDY0OiBBbmQ2NCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CiAgICAg
VG1wLCBUbXAsIFRtcAorICAgIGFybTY0OiBCaXRJbW02NCwgVG1wLCBUbXAKIAogeDg2XzY0OiBB
bmQ2NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRtcApAQCAtMzYxLDYgKzM2Myw3IEBAIHg4
Nl82NDogVXJzaGlmdDY0IFU6Rzo2NCwgVUQ6Rzo2NAogCiBPcjMyIFU6RzozMiwgVTpHOjMyLCBa
RDpHOjMyCiAgICAgVG1wLCBUbXAsIFRtcAorICAgIGFybTY0OiBCaXRJbW0sIFRtcCwgVG1wCiAg
ICAgeDg2OiBUbXAsIEFkZHIsIFRtcAogICAgIHg4NjogQWRkciwgVG1wLCBUbXAKIApAQCAtMzcz
LDYgKzM3Niw3IEBAIE9yMzIgVTpHOjMyLCBVWkQ6RzozMgogCiA2NDogT3I2NCBVOkc6NjQsIFU6
Rzo2NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAsIFRtcAorICAgIGFybTY0OiBCaXRJbW02NCwgVG1w
LCBUbXAKIAogNjQ6IE9yNjQgVTpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKQEAgLTM4MCw2
ICszODQsNyBAQCBPcjMyIFU6RzozMiwgVVpEOkc6MzIKIAogWG9yMzIgVTpHOjMyLCBVOkc6MzIs
IFpEOkc6MzIKICAgICBUbXAsIFRtcCwgVG1wCisgICAgYXJtNjQ6IEJpdEltbSwgVG1wLCBUbXAK
ICAgICB4ODY6IFRtcCwgQWRkciwgVG1wCiAgICAgeDg2OiBBZGRyLCBUbXAsIFRtcAogCkBAIC0z
OTIsNiArMzk3LDcgQEAgWG9yMzIgVTpHOjMyLCBVWkQ6RzozMgogCiA2NDogWG9yNjQgVTpHOjY0
LCBVOkc6NjQsIEQ6Rzo2NAogICAgIFRtcCwgVG1wLCBUbXAKKyAgICBhcm02NDogQml0SW1tNjQs
IFRtcCwgVG1wCiAKIDY0OiBYb3I2NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAsIFRtcApAQCAt
NDY0LDcgKzQ3MCw3IEBAIENvbnZlcnRGbG9hdFRvRG91YmxlIFU6RjozMiwgRDpGOjY0CiBNb3Zl
IFU6RzpQdHIsIEQ6RzpQdHIKICAgICBUbXAsIFRtcAogICAgIEltbSwgVG1wIGFzIHNpZ25FeHRl
bmQzMlRvUHRyCi0gICAgSW1tNjQsIFRtcAorICAgIEJpZ0ltbSwgVG1wCiAgICAgQWRkciwgVG1w
IGFzIGxvYWRQdHIgIyBUaGlzIG1lYW5zIHRoYXQgIk1vdmUgQWRkciwgVG1wIiBpcyBjb2RlLWdl
bmVyYXRlZCBhcyAibG9hZCIgbm90ICJtb3ZlIi4KICAgICBJbmRleCwgVG1wIGFzIGxvYWRQdHIK
ICAgICBUbXAsIEFkZHIgYXMgc3RvcmVQdHIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgppbmRleCA3YjI1YzhlMDM0NjQ3YzgyNTNlMzZlNmJk
YjY4MTFlYzQzODJmODA2Li44Nzk1ZDJlNWI5NWU3NWZjYjA3YTQyMTk3YTYxMTAxYzI3Mzg1NmI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0
b3IucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9y
LnJiCkBAIC0xOTAsNyArMTkwLDcgQEAgZGVmIGlzR0YodG9rZW4pCiBlbmQKIAogZGVmIGlzS2lu
ZCh0b2tlbikKLSAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEltbTY0KXwoQWRkcil8KElu
ZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVDb25kKSlcWi8KKyAgICB0b2tlbiA9fiAv
XEEoKFRtcCl8KEltbSl8KEJpZ0ltbSl8KEJpdEltbSl8KEJpdEltbTY0KXwoQWRkcil8KEluZGV4
KXwoUmVsQ29uZCl8KFJlc0NvbmQpfChEb3VibGVDb25kKSlcWi8KIGVuZAogCiBkZWYgaXNBcmNo
KHRva2VuKQpAQCAtMjY0LDcgKzI2NCw3IEBAIGNsYXNzIFBhcnNlcgogCiAgICAgZGVmIGNvbnN1
bWVLaW5kCiAgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwotICAgICAgICBwYXJzZUVycm9y
KCJFeHBlY3RlZCBraW5kIChJbW0sIEltbTY0LCBUbXAsIEFkZHIsIEluZGV4LCBSZWxDb25kLCBS
ZXNDb25kLCBvciBEb3VibGVDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAgICBw
YXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEJpZ0ltbSwgQml0SW1tLCBCaXRJbW02NCwg
VG1wLCBBZGRyLCBJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgb3IgRG91YmxlQ29uZCkiKSB1bmxl
c3MgaXNLaW5kKHJlc3VsdCkKICAgICAgICAgYWR2YW5jZQogICAgICAgICByZXN1bHQKICAgICBl
bmQKQEAgLTQyNiw3ICs0MjYsNyBAQCBjbGFzcyBQYXJzZXIKICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIG92
ZXJsb2FkIikgdW5sZXNzIGtpbmRzLmxlbmd0aCA9PSBzaWduYXR1cmUubGVuZ3RoCiAgICAgICAg
ICAgICAgICAgICAgICAgICBraW5kcy5lYWNoX3dpdGhfaW5kZXggewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIGtpbmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5hbWUgPT0gIkltbTY0IgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5hbWUgPT0g
IkJpZ0ltbSIgb3Iga2luZC5uYW1lID09ICJCaXRJbW0iIG9yIGtpbmQubmFtZSA9PSAiQml0SW1t
NjQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZVtpbmRleF0u
cm9sZSAhPSAiVSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJy
b3IoIkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBmb3IgYSBub24tdXNlIGFyZ3VtZW50IikKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCkBAIC01MzAsMTQgKzUzMCwxNCBAQCBkZWYg
bWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4LCBjb2x1bW5HZXR0ZXIs
IGZpbHRlciwgY2FsbGJhY2spCiAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7Y29sdW1uR2V0dGVy
W2NvbHVtbkluZGV4XX0pIHsiCiAgICAgZ3JvdXBzLmVhY2hfcGFpciB7CiAgICAgICAgIHwga2V5
LCB2YWx1ZSB8Ci0gICAgICAgIG91dHAucHV0cyAiI2lmIFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkg
PT0gIkltbTY0IgorICAgICAgICBvdXRwLnB1dHMgIiNpZiBVU0UoSlNWQUxVRTY0KSIgaWYga2V5
ID09ICJCaWdJbW0iIG9yIGtleSA9PSAiQml0SW1tNjQiCiAgICAgICAgIEtpbmQuYXJnS2luZHMo
a2V5KS5lYWNoIHsKICAgICAgICAgICAgIHwgYXJnS2luZCB8CiAgICAgICAgICAgICBvdXRwLnB1
dHMgImNhc2UgQXJnOjoje2FyZ0tpbmR9OiIKICAgICAgICAgfQogICAgICAgICBtYXRjaEZvcm1z
KG91dHAsIHNwZWVkLCB2YWx1ZSwgY29sdW1uSW5kZXggKyAxLCBjb2x1bW5HZXR0ZXIsIGZpbHRl
ciwgY2FsbGJhY2spCiAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgotICAgICAgICBvdXRwLnB1
dHMgIiNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSIgaWYga2V5ID09ICJJbW02NCIKKyAgICAgICAg
b3V0cC5wdXRzICIjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9PSAiQmlnSW1tIiBv
ciBrZXkgPT0gIkJpdEltbTY0IgogICAgIH0KICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgogICAg
IG91dHAucHV0cyAiYnJlYWs7IgpAQCAtNzk4LDYgKzc5OCwxMiBAQCB3cml0ZUgoIk9wY29kZUdl
bmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICB3aGVuICJJbW0iCiAgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRJbW1Gb3JtKGFyZ3NbI3tpbmRleH1dLnZh
bHVlKCkpKSIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFs
c2UpOyIKKyAgICAgICAgICAgICAgICB3aGVuICJCaXRJbW0iCisgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRCaXRJbW1Gb3JtKGFyZ3NbI3tpbmRleH1dLnZh
bHVlKCkpKSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFs
c2UpOyIKKyAgICAgICAgICAgICAgICB3aGVuICJCaXRJbW02NCIKKyAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNWYWxpZEJpdEltbTY0Rm9ybShhcmdzWyN7aW5kZXh9
XS52YWx1ZSgpKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJO
KGZhbHNlKTsiCiAgICAgICAgICAgICAgICAgd2hlbiAiQWRkciIKICAgICAgICAgICAgICAgICAg
ICAgaWYgYXJnLnJvbGUgPT0gIlVBIgogICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJpZiAoYXJnc1sje2luZGV4fV0uaXNTdGFjaygpICYmIGFyZ3NbI3tpbmRleH1dLnN0YWNrU2xv
dCgpLT5pc1NwaWxsKCkpIgpAQCAtODA5LDcgKzgxNSw3IEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJh
dGVkIikgewogICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4IgogICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkSW5kZXhGb3JtKGFyZ3NbI3tpbmRleH1dLnNj
YWxlKCksIGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpLCAje2FyZy53aWR0aENvZGV9KSkiCiAgICAg
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCi0gICAgICAg
ICAgICAgICAgd2hlbiAiSW1tNjQiCisgICAgICAgICAgICAgICAgd2hlbiAiQmlnSW1tIgogICAg
ICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29u
ZCIKICAgICAgICAgICAgICAgICB3aGVuICJEb3VibGVDb25kIgpAQCAtMTA1NSw5ICsxMDYxLDkg
QEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmZwcigp
IgogICAgICAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgICAgICB3aGVuICJJbW0iCisg
ICAgICAgICAgICAgICAgd2hlbiAiSW1tIiwgIkJpdEltbSIKICAgICAgICAgICAgICAgICAgICAg
b3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1tMzIoKSIKLSAgICAgICAgICAg
ICAgICB3aGVuICJJbW02NCIKKyAgICAgICAgICAgICAgICB3aGVuICJCaWdJbW0iLCAiQml0SW1t
NjQiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1
c3RlZEltbTY0KCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiQWRkciIKICAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNBZGRyZXNzKCkiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAppbmRleCA0MzE2Zjg4ZmQ1OTBiMDIwZmEzOWVh
NDc3MThiZjVmZmQ1NzAxNzgyLi42NTI0OThmY2RiYTE5Y2Y3ZDJhNTA4OWRhYmI2ZDRmMGE5YjU4
N2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKQEAgLTEyNiw3
ICsxMjYsNyBAQCB2b2lkIGxvYWRDb25zdGFudEltcGwoQmFzaWNCbG9jayogYmxvY2ssIFQgdmFs
dWUsIEIzOjpBaXI6Ok9wY29kZSBtb3ZlLCBUbXAgdG1wLAogICAgICAgICAoKm1hcClbdmFsdWVd
ID0gbmV3IFQodmFsdWUpOwogCiAgICAgVCogcHRyID0gKCptYXApW3ZhbHVlXTsKLSAgICBibG9j
ay0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90
PihwdHIpKSwgc2NyYXRjaCk7CisgICAgYmxvY2stPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6
OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHB0cikpLCBzY3JhdGNoKTsKICAgICBibG9j
ay0+YXBwZW5kKG1vdmUsIG51bGxwdHIsIEFyZzo6YWRkcihzY3JhdGNoKSwgdG1wKTsKIH0KIApA
QCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgdGVzdFNodWZmbGVTaW1wbGVTd2FwKCkKIAogICAgIGlu
dDMyX3QgdGhpbmdzWzRdOwogICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7Ci0g
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGlu
dHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CiAg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJn
OjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKICAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNp
emVvZihpbnQzMl90KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CkBA
IC0xOTIsNyArMTkyLDcgQEAgdm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVNoaWZ0KCkKIAogICAgIGlu
dDMyX3QgdGhpbmdzWzVdOwogICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7Ci0g
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGlu
dHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CiAg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJn
OjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKICAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNp
emVvZihpbnQzMl90KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CkBA
IC0yMzgsNyArMjM4LDcgQEAgdm9pZCB0ZXN0U2h1ZmZsZUxvbmdTaGlmdCgpCiAKICAgICBpbnQz
Ml90IHRoaW5nc1s4XTsKICAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwotICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjpiaWdJbW0oYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwogICAg
IHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6
YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUz
MiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXpl
b2YoaW50MzJfdCkpKTsKICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BS
SW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOwpAQCAt
MjkwLDcgKzI5MCw3IEBAIHZvaWQgdGVzdFNodWZmbGVMb25nU2hpZnRCYWNrd2FyZHMoKQogCiAg
ICAgaW50MzJfdCB0aGluZ3NbOF07CiAgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQ
KTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6YmlnSW1tKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNl
KTsKICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDAp
LCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkpOwogICAgIHJvb3QtPmFwcGVu
ZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAx
ICogc2l6ZW9mKGludDMyX3QpKSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwg
VG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50MzJfdCkp
KTsKQEAgLTMzNCw3ICszMzQsNyBAQCB2b2lkIHRlc3RTaHVmZmxlU2ltcGxlUm90YXRlKCkKIAog
ICAgIGludDMyX3QgdGhpbmdzWzRdOwogICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpH
UCk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9j
YXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFz
ZSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qw
KSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKICAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwg
MSAqIHNpemVvZihpbnQzMl90KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3Qp
KSk7CkBAIC0zNzAsNyArMzcwLDcgQEAgdm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZUJyb2FkY2FzdCgp
CiAKICAgICBpbnQzMl90IHRoaW5nc1s0XTsKICAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFy
Zzo6R1ApOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjpiaWdJbW0oYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSks
IGJhc2UpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CiAgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJh
c2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQz
Ml90KSkpOwpAQCAtNDE0LDcgKzQxNCw3IEBAIHZvaWQgdGVzdFNodWZmbGVCcm9hZGNhc3RBbGxS
ZWdzKCkKIAogICAgIFZlY3RvcjxpbnQzMl90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CiAg
ICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKLSAgICByb290LT5hcHBlbmQoTW92
ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0p
KSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6YmlnSW1tKGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBiYXNlKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkgewogICAgICAgICByb290LT5hcHBlbmQo
TW92ZTMyLCBudWxscHRyLCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50MzJfdCkpLCBU
bXAoR1BSSW5mbzo6cmVnVDApKTsKICAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIGkgKiBzaXplb2YoaW50MzJf
dCkpKTsKQEAgLTQ1NSw3ICs0NTUsNyBAQCB2b2lkIHRlc3RTaHVmZmxlVHJlZVNoaWZ0KCkKIAog
ICAgIGludDMyX3QgdGhpbmdzWzhdOwogICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpH
UCk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9j
YXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFz
ZSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qw
KSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKICAgICByb290LT5hcHBl
bmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwg
MSAqIHNpemVvZihpbnQzMl90KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3Qp
KSk7CkBAIC01MDcsNyArNTA3LDcgQEAgdm9pZCB0ZXN0U2h1ZmZsZVRyZWVTaGlmdEJhY2t3YXJk
KCkKIAogICAgIGludDMyX3QgdGhpbmdzWzhdOwogICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAo
QXJnOjpHUCk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0
d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChN
b3ZlLCBudWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3Mp
KSwgYmFzZSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKICAgICByb290
LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIo
YmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGlu
dDMyX3QpKSk7CkBAIC01NjIsNyArNTYyLDcgQEAgdm9pZCB0ZXN0U2h1ZmZsZVRyZWVTaGlmdE90
aGVyQmFja3dhcmQoKQogCiAgICAgaW50MzJfdCB0aGluZ3NbOF07CiAgICAgVG1wIGJhc2UgPSBj
b2RlLm5ld1RtcChBcmc6OkdQKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJn
OjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6YmlnSW1tKGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4oJnRoaW5ncykpLCBiYXNlKTsKICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90KSkp
OwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSks
IEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CiAgICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIg
KiBzaXplb2YoaW50MzJfdCkpKTsKQEAgLTYwOSw3ICs2MDksNyBAQCB2b2lkIHRlc3RTaHVmZmxl
TXVsdGlwbGVTaGlmdHMoKQogCiAgICAgaW50MzJfdCB0aGluZ3NbNl07CiAgICAgVG1wIGJhc2Ug
PSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6YmlnSW1tKGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRy
LCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihpbnQzMl90
KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdU
MSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGludDMyX3QpKSk7CiAgICAgcm9vdC0+YXBw
ZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QyKSwgQXJnOjphZGRyKGJhc2Us
IDIgKiBzaXplb2YoaW50MzJfdCkpKTsKQEAgLTY1NCw3ICs2NTQsNyBAQCB2b2lkIHRlc3RTaHVm
ZmxlUm90YXRlV2l0aEZyaW5nZSgpCiAKICAgICBpbnQzMl90IHRoaW5nc1s2XTsKICAgICBUbXAg
YmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsK
KyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpiaWdJbW0oYml0d2lzZV9jYXN0
PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGlu
dDMyX3QpKSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86
OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKICAgICByb290
LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIo
YmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkpOwpAQCAtNjk5LDcgKzY5OSw3IEBAIHZvaWQgdGVz
dFNodWZmbGVSb3RhdGVXaXRoRnJpbmdlSW5XZWlyZE9yZGVyKCkKIAogICAgIGludDMyX3QgdGhp
bmdzWzZdOwogICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7Ci0gICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90Pigm
dGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmJp
Z0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CiAgICAgcm9vdC0+
YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJh
c2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQz
Ml90KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CkBAIC03NDQsNyAr
NzQ0LDcgQEAgdm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZVdpdGhMb25nRnJpbmdlKCkKIAogICAgIGlu
dDMyX3QgdGhpbmdzWzZdOwogICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7Ci0g
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGlu
dHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CiAg
ICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJn
OjphZGRyKGJhc2UsIDAgKiBzaXplb2YoaW50MzJfdCkpKTsKICAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNp
emVvZihpbnQzMl90KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChH
UFJJbmZvOjpyZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CkBA
IC03ODksNyArNzg5LDcgQEAgdm9pZCB0ZXN0U2h1ZmZsZU11bHRpcGxlUm90YXRlcygpCiAKICAg
ICBpbnQzMl90IHRoaW5nc1s2XTsKICAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1Ap
OwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVs
bHB0ciwgQXJnOjpiaWdJbW0oYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2Up
OwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCks
IEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CiAgICAgcm9vdC0+YXBwZW5k
KE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEg
KiBzaXplb2YoaW50MzJfdCkpKTsKICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBU
bXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90KSkp
OwpAQCAtODMzLDcgKzgzMyw3IEBAIHZvaWQgdGVzdFNodWZmbGVTaGlmdEFuZFJvdGF0ZSgpCiAK
ICAgICBpbnQzMl90IHRoaW5nc1s2XTsKICAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6
R1ApOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwg
bnVsbHB0ciwgQXJnOjpiaWdJbW0oYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJh
c2UpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdU
MCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMyX3QpKSk7CiAgICAgcm9vdC0+YXBw
ZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2Us
IDEgKiBzaXplb2YoaW50MzJfdCkpKTsKICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRy
LCBUbXAoR1BSSW5mbzo6cmVnVDIpLCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQzMl90
KSkpOwpAQCAtODc1LDcgKzg3NSw3IEBAIHZvaWQgdGVzdFNodWZmbGVTaGlmdEFsbFJlZ3MoKQog
CiAgICAgVmVjdG9yPGludDMyX3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKICAgICBUbXAg
YmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxs
cHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBiYXNl
KTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpiaWdJbW0oYml0d2lzZV9j
YXN0PGludHB0cl90PigmdGhpbmdzWzBdKSksIGJhc2UpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIs
IG51bGxwdHIsIEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihpbnQzMl90KSksIFRtcChHUFJJ
bmZvOjpyZWdUMCkpOwogICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAo
R1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgaSAqIHNpemVvZihpbnQzMl90KSkpOwpA
QCAtOTEyLDcgKzkxMiw3IEBAIHZvaWQgdGVzdFNodWZmbGVSb3RhdGVBbGxSZWdzKCkKIAogICAg
IFZlY3RvcjxpbnQzMl90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7CiAgICAgVG1wIGJhc2Ug
PSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgYmFzZSk7Cisg
ICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6YmlnSW1tKGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4oJnRoaW5nc1swXSkpLCBiYXNlKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcmVncy5zaXplKCk7ICsraSkgewogICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50MzJfdCkpLCBUbXAoR1BSSW5mbzo6
cmVnVDApKTsKICAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUklu
Zm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIGkgKiBzaXplb2YoaW50MzJfdCkpKTsKQEAgLTk0
NSw3ICs5NDUsNyBAQCB2b2lkIHRlc3RTaHVmZmxlU2ltcGxlU3dhcDY0KCkKIAogICAgIGludDY0
X3QgdGhpbmdzWzRdOwogICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7Ci0gICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0
cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBB
cmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CiAgICAg
cm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRk
cihiYXNlLCAwICogc2l6ZW9mKGludDY0X3QpKSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICogc2l6ZW9mKGlu
dDY0X3QpKSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpy
ZWdUMiksIEFyZzo6YWRkcihiYXNlLCAyICogc2l6ZW9mKGludDY0X3QpKSk7CkBAIC05ODEsNyAr
OTgxLDcgQEAgdm9pZCB0ZXN0U2h1ZmZsZVNpbXBsZVNoaWZ0NjQoKQogCiAgICAgaW50NjRfdCB0
aGluZ3NbNV07CiAgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1RtcChBcmc6OkdQKTsKLSAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6
YmlnSW1tKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKICAgICByb290
LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJh
c2UsIDAgKiBzaXplb2YoaW50NjRfdCkpKTsKICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0
ciwgVG1wKEdQUkluZm86OnJlZ1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50NjRf
dCkpKTsKICAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1Qy
KSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2YoaW50NjRfdCkpKTsKQEAgLTEwMTgsNyArMTAx
OCw3IEBAIHZvaWQgdGVzdFNodWZmbGVTd2FwTWl4ZWRXaWR0aCgpCiAKICAgICBpbnQ2NF90IHRo
aW5nc1s0XTsKICAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwotICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
JnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpi
aWdJbW0oYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwogICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFz
ZSwgMCAqIHNpemVvZihpbnQ2NF90KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQ2NF90
KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIp
LCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQ2NF90KSkpOwpAQCAtMTA1NCw3ICsxMDU0
LDcgQEAgdm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWl4ZWRXaWR0aCgpCiAKICAgICBpbnQ2NF90IHRo
aW5nc1s1XTsKICAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwotICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
JnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpi
aWdJbW0oYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwogICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDApLCBBcmc6OmFkZHIoYmFz
ZSwgMCAqIHNpemVvZihpbnQ2NF90KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQ2NF90
KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBUbXAoR1BSSW5mbzo6cmVnVDIp
LCBBcmc6OmFkZHIoYmFzZSwgMiAqIHNpemVvZihpbnQ2NF90KSkpOwpAQCAtMTA5NSw3ICsxMDk1
LDcgQEAgdm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5KCkKIAogICAgIGludDMyX3QgdGhpbmdz
WzJdOwogICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7Ci0gICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhp
bmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmJpZ0lt
bShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CiAgICAgcm9vdC0+YXBw
ZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2Us
IDAgKiBzaXplb2YoaW50MzJfdCkpKTsKICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRy
LCBUbXAoR1BSSW5mbzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90
KSkpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbSgwKSwgVG1wKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKSk7CkBAIC0xMTQxLDcgKzExNDEsNyBAQCB2b2lkIHRlc3RT
aHVmZmxlU2hpZnRNZW1vcnlMb25nKCkKIAogICAgIGludDMyX3QgdGhpbmdzWzNdOwogICAgIFRt
cCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpHUCk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51
bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2Up
OworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwg
bnVsbHB0ciwgVG1wKEdQUkluZm86OnJlZ1QwKSwgQXJnOjphZGRyKGJhc2UsIDAgKiBzaXplb2Yo
aW50MzJfdCkpKTsKICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAoR1BSSW5m
bzo6cmVnVDEpLCBBcmc6OmFkZHIoYmFzZSwgMSAqIHNpemVvZihpbnQzMl90KSkpOwogICAgIHJv
b3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMiksIEFyZzo6YWRk
cihiYXNlLCAyICogc2l6ZW9mKGludDMyX3QpKSk7CkBAIC0xMTkxLDcgKzExOTEsNyBAQCB2b2lk
IHRlc3RTaHVmZmxlU2hpZnRNZW1vcnlBbGxSZWdzKCkKICAgICAgICAgc2h1ZmZsZS5hcHBlbmQo
VG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MikpOwogCiAgICAgVmVjdG9yPGludDMyX3Q+IHRoaW5ncyhyZWdzLnNpemUoKSwgNjY2KTsKLSAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CisgICAgcm9vdC0+YXBw
ZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6YmlnSW1tKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRo
aW5nc1swXSkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcmVncy5zaXplKCk7ICsraSkgewogICAgICAgICByb290LT5hcHBlbmQoCiAgICAgICAg
ICAgICBNb3ZlMzIsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjphZGRyKFRtcChHUFJJbmZv
OjpyZWdUMCksIGkgKiBzaXplb2YoaW50MzJfdCkpKTsKQEAgLTEyNDEsNyArMTI0MSw3IEBAIHZv
aWQgdGVzdFNodWZmbGVTaGlmdE1lbW9yeUFsbFJlZ3M2NCgpCiAgICAgICAgIHNodWZmbGUuYXBw
ZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhBcmc6Oldp
ZHRoNjQpKTsKIAogICAgIFZlY3RvcjxpbnQ2NF90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7
Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0
PGludHB0cl90PigmdGhpbmdzWzBdKSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIHJvb3Qt
PmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KCZ0aGluZ3NbMF0pKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgcm9vdC0+YXBwZW5kKAogICAg
ICAgICAgICAgTW92ZSwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OmFkZHIoVG1wKEdQUklu
Zm86OnJlZ1QwKSwgaSAqIHNpemVvZihpbnQ2NF90KSkpOwpAQCAtMTMwNSw3ICsxMzA1LDcgQEAg
dm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0TWVtb3J5QWxsUmVnc01peGVkV2lkdGgoKQogICAgIH0KIAog
ICAgIFZlY3RvcjxpbnQ2NF90PiB0aGluZ3MocmVncy5zaXplKCksIDY2Nik7Ci0gICAgcm9vdC0+
YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90Pigm
dGhpbmdzWzBdKSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOworICAgIHJvb3QtPmFwcGVuZChNb3Zl
LCBudWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0p
KSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJl
Z3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgcm9vdC0+YXBwZW5kKAogICAgICAgICAgICAgTW92
ZSwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwg
aSAqIHNpemVvZihpbnQ2NF90KSkpOwpAQCAtMTM1NCw3ICsxMzU0LDcgQEAgdm9pZCB0ZXN0U2h1
ZmZsZVJvdGF0ZU1lbW9yeSgpCiAKICAgICBpbnQzMl90IHRoaW5nc1syXTsKICAgICBUbXAgYmFz
ZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRy
LCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpiaWdJbW0oYml0d2lzZV9jYXN0PGlu
dHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwogICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxw
dHIsIFRtcChHUFJJbmZvOjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDMy
X3QpKSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKEdQUkluZm86OnJl
Z1QxKSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoaW50MzJfdCkpKTsKICAgICByb290LT5h
cHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW0oMCksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUikpOwpAQCAtMTM5OSw3ICsxMzk5LDcgQEAgdm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZU1lbW9y
eTY0KCkKIAogICAgIGludDY0X3QgdGhpbmdzWzJdOwogICAgIFRtcCBiYXNlID0gY29kZS5uZXdU
bXAoQXJnOjpHUCk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQo
Yml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVu
ZChNb3ZlLCBudWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGlu
Z3MpKSwgYmFzZSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZv
OjpyZWdUMCksIEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDY0X3QpKSk7CiAgICAgcm9v
dC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihi
YXNlLCAxICogc2l6ZW9mKGludDY0X3QpKSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxw
dHIsIEFyZzo6aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKQEAgLTE0NDQs
NyArMTQ0NCw3IEBAIHZvaWQgdGVzdFNodWZmbGVSb3RhdGVNZW1vcnlNaXhlZFdpZHRoKCkKIAog
ICAgIGludDY0X3QgdGhpbmdzWzJdOwogICAgIFRtcCBiYXNlID0gY29kZS5uZXdUbXAoQXJnOjpH
UCk7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6aW1tNjQoYml0d2lzZV9j
YXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBu
dWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFz
ZSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMCks
IEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGludDY0X3QpKSk7CiAgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIFRtcChHUFJJbmZvOjpyZWdUMSksIEFyZzo6YWRkcihiYXNlLCAxICog
c2l6ZW9mKGludDY0X3QpKSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6
aW1tKDApLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKQEAgLTE0OTQsNyArMTQ5NCw3
IEBAIHZvaWQgdGVzdFNodWZmbGVSb3RhdGVNZW1vcnlBbGxSZWdzNjQoKQogICAgICAgICBzaHVm
ZmxlLmFwcGVuZChUbXAocmVnc1tpIC0gMV0pLCBUbXAocmVnc1tpXSksIEFyZzo6d2lkdGhBcmco
QXJnOjpXaWR0aDY0KSk7CiAKICAgICBWZWN0b3I8aW50NjRfdD4gdGhpbmdzKHJlZ3Muc2l6ZSgp
LCA2NjYpOwotICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5nc1swXSkpLCBUbXAoR1BSSW5mbzo6cmVnVDApKTsKKyAg
ICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjpiaWdJbW0oYml0d2lzZV9jYXN0PGlu
dHB0cl90PigmdGhpbmdzWzBdKSksIFRtcChHUFJJbmZvOjpyZWdUMCkpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIHJvb3QtPmFwcGVu
ZCgKICAgICAgICAgICAgIE1vdmUsIG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjphZGRyKFRt
cChHUFJJbmZvOjpyZWdUMCksIGkgKiBzaXplb2YoaW50NjRfdCkpKTsKQEAgLTE1NDYsNyArMTU0
Niw3IEBAIHZvaWQgdGVzdFNodWZmbGVSb3RhdGVNZW1vcnlBbGxSZWdzTWl4ZWRXaWR0aCgpCiAg
ICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ldKSwgQXJn
Ojp3aWR0aEFyZyhBcmc6OldpZHRoNjQpKTsKIAogICAgIFZlY3RvcjxpbnQ2NF90PiB0aGluZ3Mo
cmVncy5zaXplKCksIDY2Nik7Ci0gICAgcm9vdC0+YXBwZW5kKE1vdmUsIG51bGxwdHIsIEFyZzo6
aW1tNjQoYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzWzBdKSksIFRtcChHUFJJbmZvOjpy
ZWdUMCkpOworICAgIHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmJpZ0ltbShiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3NbMF0pKSwgVG1wKEdQUkluZm86OnJlZ1QwKSk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
cm9vdC0+YXBwZW5kKAogICAgICAgICAgICAgTW92ZSwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBB
cmc6OmFkZHIoVG1wKEdQUkluZm86OnJlZ1QwKSwgaSAqIHNpemVvZihpbnQ2NF90KSkpOwpAQCAt
MTU4MSw3ICsxNTgxLDcgQEAgdm9pZCB0ZXN0U2h1ZmZsZVN3YXBEb3VibGUoKQogCiAgICAgZG91
YmxlIHRoaW5nc1s0XTsKICAgICBUbXAgYmFzZSA9IGNvZGUubmV3VG1wKEFyZzo6R1ApOwotICAg
IHJvb3QtPmFwcGVuZChNb3ZlLCBudWxscHRyLCBBcmc6OmltbTY0KGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4oJnRoaW5ncykpLCBiYXNlKTsKKyAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwg
QXJnOjpiaWdJbW0oYml0d2lzZV9jYXN0PGludHB0cl90PigmdGhpbmdzKSksIGJhc2UpOwogICAg
IHJvb3QtPmFwcGVuZChNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMCks
IEFyZzo6YWRkcihiYXNlLCAwICogc2l6ZW9mKGRvdWJsZSkpKTsKICAgICByb290LT5hcHBlbmQo
TW92ZURvdWJsZSwgbnVsbHB0ciwgVG1wKEZQUkluZm86OmZwUmVnVDEpLCBBcmc6OmFkZHIoYmFz
ZSwgMSAqIHNpemVvZihkb3VibGUpKSk7CiAgICAgcm9vdC0+YXBwZW5kKE1vdmVEb3VibGUsIG51
bGxwdHIsIFRtcChGUFJJbmZvOjpmcFJlZ1QyKSwgQXJnOjphZGRyKGJhc2UsIDIgKiBzaXplb2Yo
ZG91YmxlKSkpOwpAQCAtMTYxNSw3ICsxNjE1LDcgQEAgdm9pZCB0ZXN0U2h1ZmZsZVNoaWZ0RG91
YmxlKCkKIAogICAgIGRvdWJsZSB0aGluZ3NbNF07CiAgICAgVG1wIGJhc2UgPSBjb2RlLm5ld1Rt
cChBcmc6OkdQKTsKLSAgICByb290LT5hcHBlbmQoTW92ZSwgbnVsbHB0ciwgQXJnOjppbW02NChi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KCZ0aGluZ3MpKSwgYmFzZSk7CisgICAgcm9vdC0+YXBwZW5k
KE1vdmUsIG51bGxwdHIsIEFyZzo6YmlnSW1tKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oJnRoaW5n
cykpLCBiYXNlKTsKICAgICByb290LT5hcHBlbmQoTW92ZURvdWJsZSwgbnVsbHB0ciwgVG1wKEZQ
UkluZm86OmZwUmVnVDApLCBBcmc6OmFkZHIoYmFzZSwgMCAqIHNpemVvZihkb3VibGUpKSk7CiAg
ICAgcm9vdC0+YXBwZW5kKE1vdmVEb3VibGUsIG51bGxwdHIsIFRtcChGUFJJbmZvOjpmcFJlZ1Qx
KSwgQXJnOjphZGRyKGJhc2UsIDEgKiBzaXplb2YoZG91YmxlKSkpOwogICAgIHJvb3QtPmFwcGVu
ZChNb3ZlRG91YmxlLCBudWxscHRyLCBUbXAoRlBSSW5mbzo6ZnBSZWdUMiksIEFyZzo6YWRkcihi
YXNlLCAyICogc2l6ZW9mKGRvdWJsZSkpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>