<?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>155594</bug_id>
          
          <creation_ts>2016-03-17 12:48:16 -0700</creation_ts>
          <short_desc>[JSC] Make CSE&apos;s ImpureData faster when dealing with large blocks</short_desc>
          <delta_ts>2016-03-17 21:07:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <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>1175822</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-17 12:48:16 -0700</bug_when>
    <thetext>[JSC] Make CSE&apos;s ImpureData faster when dealing with large blocks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175900</commentid>
    <comment_count>1</comment_count>
      <attachid>274337</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-17 16:14:30 -0700</bug_when>
    <thetext>Created attachment 274337
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175904</commentid>
    <comment_count>2</comment_count>
      <attachid>274338</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-17 16:21:36 -0700</bug_when>
    <thetext>Created attachment 274338
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175925</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-17 17:15:33 -0700</bug_when>
    <thetext>Worth about 1% on Sunspider on my Haswell MBP:

                                                  Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                    4.7620+-0.1528     ?      5.0014+-0.2815        ? might be 1.0503x slower
   3d-morph                                   5.6442+-0.6014            5.1633+-0.0740          might be 1.0931x faster
   3d-raytrace                                5.6119+-0.0455     ?      5.6422+-0.1120        ?
   access-binary-trees                        2.1840+-0.0982     ?      2.2405+-0.4026        ? might be 1.0259x slower
   access-fannkuch                            5.9225+-0.6964     ?      6.0875+-0.0801        ? might be 1.0279x slower
   access-nbody                               2.6172+-0.0474            2.5616+-0.1011          might be 1.0217x faster
   access-nsieve                              3.0339+-0.0196     ?      3.0972+-0.0746        ? might be 1.0209x slower
   bitops-3bit-bits-in-byte                   1.1820+-0.0544            1.1519+-0.0194          might be 1.0261x faster
   bitops-bits-in-byte                        2.8886+-0.3271            2.7882+-0.0511          might be 1.0360x faster
   bitops-bitwise-and                         2.0168+-0.0254     ?      2.0743+-0.1251        ? might be 1.0285x slower
   bitops-nsieve-bits                         3.2024+-0.1270            3.1933+-0.0690        
   controlflow-recursive                      2.3562+-0.0547            2.3550+-0.0283        
   crypto-aes                                 4.2165+-0.4866            4.0472+-0.0830          might be 1.0418x faster
   crypto-md5                                 2.5848+-0.0138     ^      2.5099+-0.0507        ^ definitely 1.0298x faster
   crypto-sha1                                2.3505+-0.0463     ?      2.4702+-0.3803        ? might be 1.0509x slower
   date-format-tofte                          7.0665+-0.1434            6.7672+-0.2004          might be 1.0442x faster
   date-format-xparb                          5.0988+-0.4837            4.7952+-0.0534          might be 1.0633x faster
   math-cordic                                2.8953+-0.0496     ?      2.9280+-0.1650        ? might be 1.0113x slower
   math-partial-sums                          4.9780+-0.3295     ?      5.0692+-0.5964        ? might be 1.0183x slower
   math-spectral-norm                         2.1288+-0.3209            2.0122+-0.0190          might be 1.0580x faster
   regexp-dna                                 6.2723+-1.3781            6.0810+-0.7191          might be 1.0315x faster
   string-base64                              4.5028+-0.1108     ?      4.7388+-0.9072        ? might be 1.0524x slower
   string-fasta                               6.1963+-0.3864            5.9904+-0.1745          might be 1.0344x faster
   string-tagcloud                            8.5071+-1.0164            8.0998+-0.1173          might be 1.0503x faster
   string-unpack-code                        18.6016+-0.8419     ?     18.9164+-0.9788        ? might be 1.0169x slower
   string-validate-input                      4.2703+-0.2170            4.2188+-0.1649          might be 1.0122x faster

   &lt;arithmetic&gt;                               4.6574+-0.1135            4.6154+-0.1004          might be 1.0091x faster

                                                  Conf#1                    Conf#2                                      
Octane:
   encrypt                                   0.15853+-0.00595    ?     0.15979+-0.00351       ?
   decrypt                                   2.89425+-0.07303          2.83491+-0.02284         might be 1.0209x faster
   deltablue                        x2       0.13968+-0.00411          0.13907+-0.00364       
   earley                                    0.28603+-0.00424          0.28510+-0.00099       
   boyer                                     5.00685+-0.03148          4.90460+-0.29752         might be 1.0208x faster
   navier-stokes                    x2       4.93707+-0.03806    ?     4.94465+-0.00570       ?
   raytrace                         x2       0.89199+-0.00800          0.89028+-0.01185       
   richards                         x2       0.08227+-0.00105          0.08128+-0.00171         might be 1.0121x faster
   splay                            x2       0.34863+-0.00383          0.34622+-0.00583       
   regexp                           x2      19.92103+-0.05291         19.89375+-0.63229       
   pdfjs                            x2      39.68920+-1.64384         39.39607+-1.54674       
   mandreel                         x2      42.47091+-0.56361         42.23536+-0.30597       
   gbemu                            x2      24.69891+-0.19513         24.56994+-0.18549       
   closure                                   0.56687+-0.00601    ?     0.57261+-0.01139       ? might be 1.0101x slower
   jquery                                    7.45649+-0.12023          7.42992+-0.12502       
   box2d                            x2       9.31075+-0.09297          9.29540+-0.02329       
   zlib                             x2     377.59475+-29.33945       363.35997+-5.49547         might be 1.0392x faster
   typescript                       x2     665.67371+-11.03509       643.76984+-11.76872        might be 1.0340x faster

   &lt;geometric&gt;                               5.21253+-0.03424          5.16709+-0.03924         might be 1.0088x faster

                                                  Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                   88.362+-1.991             87.599+-0.827         
   audio-beat-detection                       45.229+-0.313             45.172+-0.230         
   audio-dft                                 100.450+-6.442             97.193+-2.396           might be 1.0335x faster
   audio-fft                                  35.810+-0.112             35.743+-0.116         
   audio-oscillator                           47.443+-0.509      ?      47.564+-0.390         ?
   imaging-darkroom                           60.868+-2.461             60.726+-1.790         
   imaging-desaturate                         44.586+-0.788      ?      45.959+-5.253         ? might be 1.0308x slower
   imaging-gaussian-blur                      60.520+-7.612             60.275+-7.601         
   json-parse-financial                       36.993+-0.137             36.739+-0.225         
   json-stringify-tinderbox                   23.397+-1.573             23.249+-2.266         
   stanford-crypto-aes                        40.144+-0.079      ?      40.335+-0.540         ?
   stanford-crypto-ccm                        35.667+-2.626             35.213+-1.648           might be 1.0129x faster
   stanford-crypto-pbkdf2                    101.108+-0.954      ?     101.879+-1.316         ?
   stanford-crypto-sha256-iterative           38.750+-0.506      ?      39.067+-1.336         ?

   &lt;arithmetic&gt;                               54.238+-1.117             54.051+-0.758           might be 1.0035x faster

                                                  Conf#1                    Conf#2                                      
AsmBench:
   bigfib.cpp                               437.6711+-19.6185    ?    440.0609+-12.9610       ?
   cray.c                                   358.5124+-5.3609     ?    361.3328+-9.4286        ?
   dry.c                                    417.5919+-6.3117     ?    486.2893+-128.8717      ? might be 1.1645x slower
   FloatMM.c                                715.5072+-8.4764          712.2838+-10.9938       
   gcc-loops.cpp                           3666.7940+-24.0637    ?   3694.4663+-37.0843       ?
   n-body.c                                 807.5378+-5.3084     ?    815.3618+-11.8043       ?
   Quicksort.c                              390.3484+-4.3191     ?    390.7597+-1.3254        ?
   stepanov_container.cpp                  3314.4139+-54.8842        3257.5195+-19.6485         might be 1.0175x faster
   Towers.c                                 267.8196+-0.9613     ?    269.1882+-2.7965        ?

   &lt;geometric&gt;                              713.7646+-4.6354     ?    726.4106+-21.4725       ? might be 1.0177x slower

                                                  Conf#1                    Conf#2                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                           31.1351+-0.3067           31.1058+-0.3086          might be 1.0009x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175929</commentid>
    <comment_count>4</comment_count>
      <attachid>274338</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-17 17:28:11 -0700</bug_when>
    <thetext>Comment on attachment 274338
Patch

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

I suspect that the SideState map is not needed.

&gt; Source/JavaScriptCore/ChangeLog:36
&gt; +        -SideState

Which heap locations list SideState or World as their heap?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175934</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-17 17:33:51 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 274338 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=274338&amp;action=review
&gt; 
&gt; I suspect that the SideState map is not needed.
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:36
&gt; &gt; +        -SideState
&gt; 
&gt; Which heap locations list SideState or World as their heap?

I don&apos;t think any. It is just to be complete if someone where to do that.
Since the maps are empty on clobber(), that operation does not do much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175942</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-17 17:44:13 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Comment on attachment 274338 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=274338&amp;action=review
&gt; &gt; 
&gt; &gt; I suspect that the SideState map is not needed.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:36
&gt; &gt; &gt; +        -SideState
&gt; &gt; 
&gt; &gt; Which heap locations list SideState or World as their heap?
&gt; 
&gt; I don&apos;t think any. It is just to be complete if someone where to do that.
&gt; Since the maps are empty on clobber(), that operation does not do much.

I believe that it would be wrong to use SideState as the heap of a HeapLocation.  It would also be wrong to use World or Stack directly.

The reason is that a HeapLocation describes some place in the heap that you&apos;ve already precisely resolved - i.e. it&apos;s a global variable and you know which one, or you know it&apos;s a field and you know the field&apos;s name and the base object Node, or you know it&apos;s an array element and you know the kind of array, the base object Node, and the index Node.

If you have resolved something so precisely, then you have no need to use a super abstract catch-all heap like World.

Also, SideState is write-only, so you&apos;d never want to track it for CSE.  It&apos;s for writes to things we will read on OSR for example.  It would be wrong to ever read(SideState).  It would be wrong to def using an abstract heap that is never read.  Therefore, SideState is incorrect for HeapLocation.

I think it would be best to actually add a validation rule that rules clobberize() and checks that def() never creates a HeapLocation that refers directly to:
- SideState
- World
- Heap

I think it&apos;s OK to have a HeapLocation that refers to Stack, because you might be indexing into the stack.  But if you have a HeapLocation that wants to use World or Heap, then you really should have been more specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175947</commentid>
    <comment_count>7</comment_count>
      <attachid>274338</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-17 17:47:07 -0700</bug_when>
    <thetext>Comment on attachment 274338
Patch

I&apos;ll make the patch stricter. That&apos;s probably be faster too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175977</commentid>
    <comment_count>8</comment_count>
      <attachid>274353</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-17 18:43:30 -0700</bug_when>
    <thetext>Created attachment 274353
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175978</commentid>
    <comment_count>9</comment_count>
      <attachid>274353</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-17 18:52:01 -0700</bug_when>
    <thetext>Comment on attachment 274353
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGCSEPhase.cpp:194
&gt; +            auto addResult = m_abstractHeapStackMap.add(abstractHeap, nullptr);

Don&apos;t you want this to just be an integer-indexed HashMap?  Once you know that you have Stack, the only thing that matters is the payload, which is an int64_t.  But really, it will contain a VirtualRegister, which is just an int32.  That means you can use INT_MIN/INT_MAX for the empty/deleted values, for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175980</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-17 18:57:16 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 274353 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=274353&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGCSEPhase.cpp:194
&gt; &gt; +            auto addResult = m_abstractHeapStackMap.add(abstractHeap, nullptr);
&gt; 
&gt; Don&apos;t you want this to just be an integer-indexed HashMap?  Once you know
&gt; that you have Stack, the only thing that matters is the payload, which is an
&gt; int64_t.  But really, it will contain a VirtualRegister, which is just an
&gt; int32.  That means you can use INT_MIN/INT_MAX for the empty/deleted values,
&gt; for example.

That&apos;s a good idea, I did not realize the payload was int32.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175989</commentid>
    <comment_count>11</comment_count>
      <attachid>274357</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-17 19:22:44 -0700</bug_when>
    <thetext>Created attachment 274357
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175990</commentid>
    <comment_count>12</comment_count>
      <attachid>274358</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-17 19:23:38 -0700</bug_when>
    <thetext>Created attachment 274358
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176022</commentid>
    <comment_count>13</comment_count>
      <attachid>274358</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-17 21:07:05 -0700</bug_when>
    <thetext>Comment on attachment 274358
Patch

Clearing flags on attachment: 274358

Committed r198376: &lt;http://trac.webkit.org/changeset/198376&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176023</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-17 21:07:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274337</attachid>
            <date>2016-03-17 16:14:30 -0700</date>
            <delta_ts>2016-03-17 16:21:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155594-20160317161430.patch</filename>
            <type>text/plain</type>
            <size>17104</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
YjlmNWZkODhhNDY5YzQyOTIzY2JlYmMxNGJmMWU0NDMwNzBmMjQ4Li5lYjI1OGI2NjVlNTM0ODBi
MTQ2ZWViMjE5OTg4NWJlNzhiYmQyODBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAxNi0wMy0xNyAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBNYWtlIENTRSdzIEltcHVyZURhdGEgZmFzdGVyIHdoZW4g
ZGVhbGluZyB3aXRoIGxhcmdlIGJsb2NrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW4gc29tZSB0ZXN0cyB3aXRoIGxhcmdlIGJsb2NrcywgdGhlIHRp
bWUgc3BlbnQgaW4gREZHJ3MgTG9jYWxDU0UKKyAgICAgICAgY2FuIGJlIG92ZXIgMTAlIG9mIHRo
ZSB0b3RhbCBjb21waWxlIHRpbWUuCisgICAgICAgIEluIHRob3NlIGNhc2VzLCBMb2NhbENTRSBp
cyBjb21wbGV0ZWx5IGRvbWluYXRlZCBieSBoYW5kbGluZyBsYXJnZQorICAgICAgICBibG9ja3Mu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhlIG1vc3Qgb2J2aW91cyBob3Qgc3Bv
dHMgSW1wdXJlRGF0YSdzIGhhbmRsaW5nLgorCisgICAgICAgIEluaXRpYWxseSwgbW9zdCBvZiB0
aGUgdGltZSB3YXMgZ29pbmcgaW50byBIYXNoVGFibGU6OnJlaGFzaCgpLgorICAgICAgICBUaGUg
cmVhc29uIGlzIHRoZSBidWNrZXRzIGFyZSA8SGVhcExvY2F0aW9uLCBMYXp5Tm9kZT4gZ2lnYW50
aWMuCisgICAgICAgIFRoZSBoYXNoIHRhYmxlIHdvdWxkIGVhc2lseSBnZXQgaW50byBzZXZlcmFs
IGtpbG9ieXRlcyBhbmQgdGhlIENQVQorICAgICAgICB3YXMgc3BlbmRpbmcgbW9yZSB0aW1lIGRl
YWxpbmcgd2l0aCBtZW1vcnkgdGhhbiBhbnl0aGluZy4KKworICAgICAgICBUbyBzb2x2ZSB0aGF0
LCBJIG1vdmVkIHRoZSBwYWlycyBsYXppbHkgdG8gdGhlIGhlYXAuIFRoZSB0YWJsZSBpdHNlbGYK
KyAgICAgICAganVzdCBjb250YWlucyB0aGUgdW5pcXVlX3B0ciB0byB0aG9zZSB2YWx1ZXMuIFRo
aXMgbWFrZXMgdGhlIHRhYmxlCisgICAgICAgIHJlYXNvbmFibHkgc21hbGwgYW5kIHRoZSBhbGxv
Yy9kZWFsbG9jIGFyZSBwYWlkIGZvciBieSB0aGUgZmFzdCByZWhhc2goKS4KKworICAgICAgICBP
bmNlIGFkZEltcHVyZSgpIHdhcyBiZXR0ZXIsIHRoZSBuZXh0IGJpZyBib3R0bGVuZXQgd2FzIGNs
b2JiZXIoKS4KKyAgICAgICAgRm9yIGVhY2ggY2xvYmJlcigpLCB3ZSBuZWVkIHRvIGdvIG92ZXIg
dGhlIGVudGlyZSBtYXAgYW5kIHRlc3QgZWFjaCB2YWx1ZS4KKyAgICAgICAgVGhhdCBsb29wIHdh
cyB3aGVyZSBtb3N0IG9mIHRoZSB0aW1lIHdhcyBnb2luZy4KKworICAgICAgICBNb3N0IGNhbGxz
IHRvIGNsb2JiZXIoKSBjb21lIGZyb20gdHdvIGtpbmRzOiBTaWRlU3RhdGUgYW5kIFN0YWNrLgor
CisgICAgICAgIFNpZGVTdGF0ZSBpcyBlYXN5OiBpdCBpcyBkaXNqb2ludCBmcm9tIEhlYXAgYW5k
IFN0YWNrIHNvIHdlIGNhbgorICAgICAgICBqdXN0IGhhdmUgYSBtYXAgZm9yIGl0LiBTdGFjayBp
cyBkaXNqb2ludCBmcm9tIEhlYXAgdG9vIHNvIHdlIGNhbgorICAgICAgICBhbHNvIHB1dCBpdCBz
ZXBhcmF0ZWx5CisKKyAgICAgICAgU3BsaXR0aW5nIHRoZSBtYXAgaW50byA0IGhlbHBlZCByZWR1
Y2UgdGhlIG92ZXJoZWFkLiBUaGUgbWFwcyB3ZXJlOgorICAgICAgICAtU3RhY2sKKyAgICAgICAg
LVNpZGVTdGF0ZQorICAgICAgICAtSGVhcAorICAgICAgICAtV29ybGQKKworICAgICAgICBIYXZp
bmcgU3RhY2sgYWxvbmUgd2FzIG5vdCBlbm91Z2ggZm9yIG1hbnkgYmxvY2tzLiBJbiBzb21lIGNh
c2VzLAorICAgICAgICB5b3UgaGF2ZSBhIHRvbiBvZiBTZXRMb2NhbC9HZXRMb2NhbCBhbmQgaGF2
aW5nIFN0YWNrIHNlcGFyYXRlCisgICAgICAgIG1ha2VzIG5vIGRpZmZlcmVuY2UuCisKKyAgICAg
ICAgVG8gc29sdmUgdGhhdCwgSSBzcGxpdCBTdGFjayBpbiB0d286IGEgbWFwIGFkZHJlc3NlZCBi
eSBBYnN0cmFjdEhlYXAKKyAgICAgICAgKyB1bmlxdWUgSGVhcExvY2F0aW9uIGFuZCBhIGZhbGxi
YWNrIG1hcCBmb3IgZXZlcnl0aGluZyBlbHNlLgorICAgICAgICBTaW5jZSBtb3N0IFN0YWNrIGFy
ZSBub3QgVE9QIGFuZCBhcmUgdW5pcXVlIHBlciBBYnN0cmFjdEhlYXAsCisgICAgICAgIEkgZ2V0
IE8oMSkgY2xvYmJlciBpbiBtb3N0IGNhc2VzLgorCisgICAgICAgIEkgY291bGQgYWNoaWV2ZSB0
aGUgc2FtZSByZXN1bHQgd2l0aCBhIGN1c3RvbSBoYXNoIHN0cnVjdHVyZS4KKyAgICAgICAgSSBk
b24ndCB0aGluayBpdCBpcyB3b3J0aCB0aGUgZWZmb3J0LCBpbiBtb3N0IGNhc2VzLCBtX2ZhbGxi
YWNrU3RhY2tNYXAKKyAgICAgICAgaGFzIGEgc2l6ZSBvZiB6ZXJvIG9yIG9uZS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBsb3Qgb2YgY291cGxpbmcgYmV0d2VlbiBDU0UgYW5k
IEFic3RyYWN0SGVhcC4KKyAgICAgICAgVG8gcmVkdWNlIHRoZSByaXNrIG9mIGJ1Z3MsIHRoZSBv
bGQgbWFwIGlzIHN0aWxsIG1haW50YWluZWQgaW4gZGVidWcKKyAgICAgICAgYW5kIGVhY2ggc3Rl
cCBjaGVja3MgdGhhdCB0aGUgcmVzdWx0cyBhcmUgdGhlIHNhbWUgYXMgdGhlIG5ldyBpbXBsZW1l
bnRhdGlvbi4KKworICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZn
L0RGR0hlYXBMb2NhdGlvbi5oOgorICAgICAgICAqIGRmZy9ERkdMYXp5Tm9kZS5oOgorICAgICAg
ICAoSlNDOjpERkc6OkxhenlOb2RlOjpoYXNoKToKKwogMjAxNi0wMy0xNCAgSm9zZXBoIFBlY29y
YXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSBnZW5lcmF0ZWQgSlNP
TiBIZWFwU25hcHNob3Qgc2l6ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBlOWQwNzNlMWJhM2FhOWRlMWUwMDFlZTUyY2Y1MGFm
NDQyZmM1ZjliLi5lYWYyNjI1NTNiNWVkZTJmOTQ2MWUwZWUzNzBhNzgyNjA5MTNiNThjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEzIEBACisyMDE2LTAzLTE3ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFtKU0NdIE1ha2UgQ1NFJ3MgSW1wdXJlRGF0YSBmYXN0ZXIg
d2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgYmxvY2tzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU1OTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChXVEY6OlY+
OjpyZW1vdmVJZik6CisKIDIwMTYtMDMtMTMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgRU5BQkxFKEVTNl9URU1QTEFURV9MSVRFUkFMX1NZ
TlRBWCkgZ3VhcmRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCmlu
ZGV4IDFjZGVlNGRmOGYyN2JlYmQ4N2JiNmY4YzVkYzMwZGNlMDkyNzA5MGMuLmQyNzQ0YjhlMjhl
NmE3MmVjM2U1MmQ0ZGM4NWNiY2I4OGNlODE1ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCkBAIC01MCwyOCArNTAsMjQ2IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIG5hbWVzcGFjZSB7CiAKIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNl
OworY29uc3QgYm9vbCB2ZXJpZnlDbG9iYmVyID0gZmFsc2U7CiAKLWNsYXNzIENsb2JiZXJGaWx0
ZXIgeworY2xhc3MgSW1wdXJlRGF0YVNsb3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKElt
cHVyZURhdGFTbG90KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBDbG9iYmVyRmlsdGVyKEFic3RyYWN0SGVhcCBoZWFwKQotICAgICAgICA6IG1faGVhcChoZWFw
KQorICAgIEhlYXBMb2NhdGlvbiBrZXk7CisgICAgTGF6eU5vZGUgdmFsdWU7CisgICAgdW5zaWdu
ZWQgaGFzaDsKK307CisKK3N0cnVjdCBJbXB1cmVEYXRhU2xvdEhhc2ggOiBwdWJsaWMgRGVmYXVs
dEhhc2g8c3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90Pj46Okhhc2ggeworICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4mIGtl
eSkKICAgICB7CisgICAgICAgIHJldHVybiBrZXktPmhhc2g7CiAgICAgfQotICAgIAotICAgIGJv
b2wgb3BlcmF0b3IoKShjb25zdCBJbXB1cmVNYXA6OktleVZhbHVlUGFpclR5cGUmIHBhaXIpIGNv
bnN0CisKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJl
RGF0YVNsb3Q+JiBhLCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+JiBiKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGVhcC5vdmVybGFwcyhwYWlyLmtleS5oZWFwKCkpOwor
ICAgICAgICAvLyBUaGUgSW1wdXJlRGF0YVNsb3QgYXJlIHVuaXF1ZSBwZXIgdGFibGUgcGVyIEhl
YXBMb2NhdGlvbi4gVGhpcyBsZXRzIHVzIGNvbXBhcmUgdGhlIGtleQorICAgICAgICAvLyBieSBq
dXN0IGNvbXBhcmluZyB0aGUgcG9pbnRlcnMgb2YgdGhlIHVuaXF1ZSBJbXB1cmVEYXRhU2xvdHMu
CisgICAgICAgIEFTU0VSVChhICE9IGIgfHwgYS0+a2V5ID09IGItPmtleSk7CisgICAgICAgIHJl
dHVybiBhID09IGI7CiAgICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBBYnN0cmFjdEhlYXAgbV9o
ZWFwOwogfTsKIAotaW5saW5lIHZvaWQgY2xvYmJlcihJbXB1cmVNYXAmIG1hcCwgQWJzdHJhY3RI
ZWFwIGhlYXApCi17Ci0gICAgQ2xvYmJlckZpbHRlciBmaWx0ZXIoaGVhcCk7Ci0gICAgbWFwLnJl
bW92ZUlmKGZpbHRlcik7Ci19CitzdHJ1Y3QgSW1wdXJlRGF0YVRyYW5zbGF0b3IgeworICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEhlYXBMb2NhdGlvbiYga2V5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtleS5oYXNoKCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29u
c3Qgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiYgc2xvdCwgY29uc3QgSGVhcExvY2F0
aW9uJiBrZXkpCisgICAgeworICAgICAgICBpZiAoIXNsb3QpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmIChIYXNoVHJhaXRzPHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRh
U2xvdD4+Ojppc0RlbGV0ZWRWYWx1ZShzbG90KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIHNsb3QtPmtleSA9PSBrZXk7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgdHJhbnNsYXRlKHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4mIHNsb3QsIGNvbnN0
IEhlYXBMb2NhdGlvbiYga2V5LCB1bnNpZ25lZCBoYXNoQ29kZSkKKyAgICB7CisgICAgICAgIG5l
dyAoTm90TnVsbCwgc3RkOjphZGRyZXNzb2Yoc2xvdCkpIHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVE
YXRhU2xvdD4obmV3IEltcHVyZURhdGFTbG90IHtrZXksIExhenlOb2RlKCksIGhhc2hDb2RlfSk7
CisgICAgfQorfTsKKworY2xhc3MgSW1wdXJlTWFwIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbXB1cmVNYXApOworcHVibGljOgorICAg
IEltcHVyZU1hcCgpID0gZGVmYXVsdDsKKworICAgIEltcHVyZU1hcChJbXB1cmVNYXAmJiBvdGhl
cikKKyAgICB7CisgICAgICAgIG1fd29ybGRNYXAuc3dhcChvdGhlci5tX3dvcmxkTWFwKTsKKyAg
ICAgICAgbV9oZWFwTWFwLnN3YXAob3RoZXIubV9oZWFwTWFwKTsKKyAgICAgICAgbV9zaWRlU3Rh
dGVNYXAuc3dhcChvdGhlci5tX3NpZGVTdGF0ZU1hcCk7CisgICAgICAgIG1fYWJzdHJhY3RIZWFw
U3RhY2tNYXAuc3dhcChvdGhlci5tX2Fic3RyYWN0SGVhcFN0YWNrTWFwKTsKKyAgICAgICAgbV9m
YWxsYmFja1N0YWNrTWFwLnN3YXAob3RoZXIubV9mYWxsYmFja1N0YWNrTWFwKTsKKyNpZiAhZGVm
aW5lZChOREVCVUcpCisgICAgICAgIG1fZGVidWdJbXB1cmVEYXRhLnN3YXAob3RoZXIubV9kZWJ1
Z0ltcHVyZURhdGEpOworI2VuZGlmCisgICAgfQorCisgICAgY29uc3QgSW1wdXJlRGF0YVNsb3Qq
IGFkZChjb25zdCBIZWFwTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBMYXp5Tm9kZSYgbm9kZSkK
KyAgICB7CisgICAgICAgIGNvbnN0IEltcHVyZURhdGFTbG90KiByZXN1bHQgPSBhZGRJbXBsKGxv
Y2F0aW9uLCBub2RlKTsKKworI2lmICFkZWZpbmVkKE5ERUJVRykKKyAgICAgICAgYXV0byBhZGRS
ZXN1bHQgPSBtX2RlYnVnSW1wdXJlRGF0YS5hZGQobG9jYXRpb24sIG5vZGUpOworICAgICAgICBB
U1NFUlQoISFyZXN1bHQgPT0gIWFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyNlbmRpZgorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIExhenlOb2RlIGdldChjb25zdCBIZWFwTG9j
YXRpb24mIGxvY2F0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgTGF6eU5vZGUgcmVzdWx0ID0g
Z2V0SW1wbChsb2NhdGlvbik7CisjaWYgIWRlZmluZWQoTkRFQlVHKQorICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IG1fZGVidWdJbXB1cmVEYXRhLmdldChsb2NhdGlvbikpOworI2VuZGlmCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCBjbG9iYmVyKEFic3RyYWN0SGVh
cCBoZWFwKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChoZWFwLmtpbmQoKSkgeworICAgICAgICBj
YXNlIFdvcmxkOiB7CisgICAgICAgICAgICBtX2hlYXBNYXAuY2xlYXIoKTsKKyAgICAgICAgICAg
IG1fc2lkZVN0YXRlTWFwLmNsZWFyKCk7CisgICAgICAgICAgICBtX2Fic3RyYWN0SGVhcFN0YWNr
TWFwLmNsZWFyKCk7CisgICAgICAgICAgICBtX2ZhbGxiYWNrU3RhY2tNYXAuY2xlYXIoKTsKKyAg
ICAgICAgICAgIGNsb2JiZXIobV93b3JsZE1hcCwgaGVhcCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIFNpZGVTdGF0ZToKKyAgICAgICAgICAgIGNsb2JiZXIo
bV9zaWRlU3RhdGVNYXAsIGhlYXApOworICAgICAgICAgICAgY2xvYmJlcihtX3dvcmxkTWFwLCBo
ZWFwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YWNrOiB7CisgICAgICAg
ICAgICBpZiAoaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSkKKyAgICAgICAgICAgICAgICBtX2Fic3Ry
YWN0SGVhcFN0YWNrTWFwLmNsZWFyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5yZW1vdmUoaGVhcCk7CisgICAgICAgICAgICBjbG9i
YmVyKG1fZmFsbGJhY2tTdGFja01hcCwgaGVhcCk7CisgICAgICAgICAgICBjbG9iYmVyKG1fd29y
bGRNYXAsIGhlYXApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGNsb2JiZXIobV9oZWFwTWFwLCBoZWFwKTsKKyAgICAgICAgICAg
IGNsb2JiZXIobV93b3JsZE1hcCwgaGVhcCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorI2lmICFkZWZpbmVkKE5ERUJVRykKKyAgICAgICAgbV9kZWJ1Z0ltcHVyZURhdGEucmVtb3Zl
SWYoW2hlYXBdKGNvbnN0IEhhc2hNYXA8SGVhcExvY2F0aW9uLCBMYXp5Tm9kZT46OktleVZhbHVl
UGFpclR5cGUmIHBhaXIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIGhlYXAub3Zlcmxh
cHMocGFpci5rZXkuaGVhcCgpKTsKKyAgICAgICAgfSk7CisgICAgICAgIEFTU0VSVChtX2RlYnVn
SW1wdXJlRGF0YS5zaXplKCkKKyAgICAgICAgICAgID09IChtX3dvcmxkTWFwLnNpemUoKQorICAg
ICAgICAgICAgICAgICsgbV9oZWFwTWFwLnNpemUoKQorICAgICAgICAgICAgICAgICsgbV9zaWRl
U3RhdGVNYXAuc2l6ZSgpCisgICAgICAgICAgICAgICAgKyBtX2Fic3RyYWN0SGVhcFN0YWNrTWFw
LnNpemUoKQorICAgICAgICAgICAgICAgICsgbV9mYWxsYmFja1N0YWNrTWFwLnNpemUoKSkpOwor
CisgICAgICAgIGlmICh2ZXJpZnlDbG9iYmVyKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHBh
aXIgOiBtX2RlYnVnSW1wdXJlRGF0YSkKKyAgICAgICAgICAgICAgICBBU1NFUlQoISFnZXQocGFp
ci5rZXkpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisg
ICAgeworICAgICAgICBtX3dvcmxkTWFwLmNsZWFyKCk7CisgICAgICAgIG1faGVhcE1hcC5jbGVh
cigpOworICAgICAgICBtX3NpZGVTdGF0ZU1hcC5jbGVhcigpOworICAgICAgICBtX2Fic3RyYWN0
SGVhcFN0YWNrTWFwLmNsZWFyKCk7CisgICAgICAgIG1fZmFsbGJhY2tTdGFja01hcC5jbGVhcigp
OworI2lmICFkZWZpbmVkKE5ERUJVRykKKyAgICAgICAgbV9kZWJ1Z0ltcHVyZURhdGEuY2xlYXIo
KTsKKyNlbmRpZgorICAgIH0KKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hTZXQ8c3RkOjp1
bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiwgSW1wdXJlRGF0YVNsb3RIYXNoPiBNYXA7CisKKyAg
ICBjb25zdCBJbXB1cmVEYXRhU2xvdCogYWRkSW1wbChjb25zdCBIZWFwTG9jYXRpb24mIGxvY2F0
aW9uLCBjb25zdCBMYXp5Tm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobG9jYXRp
b24uaGVhcCgpLmtpbmQoKSkgeworICAgICAgICBjYXNlIFdvcmxkOgorICAgICAgICAgICAgcmV0
dXJuIGFkZChtX3dvcmxkTWFwLCBsb2NhdGlvbiwgbm9kZSk7CisgICAgICAgIGNhc2UgU2lkZVN0
YXRlOgorICAgICAgICAgICAgcmV0dXJuIGFkZChtX3NpZGVTdGF0ZU1hcCwgbG9jYXRpb24sIG5v
ZGUpOworICAgICAgICBjYXNlIFN0YWNrOiB7CisgICAgICAgICAgICBBYnN0cmFjdEhlYXAgYWJz
dHJhY3RIZWFwID0gbG9jYXRpb24uaGVhcCgpOworICAgICAgICAgICAgaWYgKGFic3RyYWN0SGVh
cC5wYXlsb2FkKCkuaXNUb3AoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkKG1fZmFsbGJh
Y2tTdGFja01hcCwgbG9jYXRpb24sIG5vZGUpOworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmFkZChhYnN0cmFjdEhlYXAsIG51bGxwdHIpOworICAg
ICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5yZXNldChuZXcgSW1wdXJlRGF0YVNsb3Qge2xvY2F0aW9u
LCBub2RlLCAwfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGxv
Y2F0aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmdldCgpOworICAgICAgICAgICAgcmV0dXJuIGFkZChtX2ZhbGxiYWNrU3RhY2tNYXAsIGxvY2F0
aW9uLCBub2RlKTsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGFkZChtX2hlYXBNYXAsIGxvY2F0aW9uLCBub2RlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBMYXp5Tm9kZSBnZXRJbXBsKGNvbnN0IEhlYXBM
b2NhdGlvbiYgbG9jYXRpb24pIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGxvY2F0aW9u
LmhlYXAoKS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBXb3JsZDoKKyAgICAgICAgICAgIHJldHVy
biBnZXQobV93b3JsZE1hcCwgbG9jYXRpb24pOworICAgICAgICBjYXNlIFNpZGVTdGF0ZToKKyAg
ICAgICAgICAgIHJldHVybiBnZXQobV9zaWRlU3RhdGVNYXAsIGxvY2F0aW9uKTsKKyAgICAgICAg
Y2FzZSBTdGFjazogeworICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFw
U3RhY2tNYXAuZmluZChsb2NhdGlvbi5oZWFwKCkpOworICAgICAgICAgICAgaWYgKGl0ZXJhdG9y
ICE9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkKKyAgICAgICAgICAgICAgICAmJiBpdGVy
YXRvci0+dmFsdWUtPmtleSA9PSBsb2NhdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gaXRl
cmF0b3ItPnZhbHVlLT52YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBnZXQobV9mYWxsYmFja1N0
YWNrTWFwLCBsb2NhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBnZXQobV9oZWFwTWFwLCBsb2NhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIExhenlOb2RlKCk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IEltcHVyZURhdGFT
bG90KiBhZGQoTWFwJiBtYXAsIGNvbnN0IEhlYXBMb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IExh
enlOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtYXAuYWRkPEltcHVy
ZURhdGFUcmFuc2xhdG9yPihsb2NhdGlvbik7CisgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRy
eSkgeworICAgICAgICAgICAgKCpyZXN1bHQuaXRlcmF0b3IpLT52YWx1ZSA9IG5vZGU7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT5nZXQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgTGF6eU5vZGUgZ2V0KGNvbnN0
IE1hcCYgbWFwLCBjb25zdCBIZWFwTG9jYXRpb24mIGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAg
YXV0byBpdGVyYXRvciA9IG1hcC5maW5kPEltcHVyZURhdGFUcmFuc2xhdG9yPihsb2NhdGlvbik7
CisgICAgICAgIGlmIChpdGVyYXRvciAhPSBtYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4g
KCppdGVyYXRvciktPnZhbHVlOworICAgICAgICByZXR1cm4gTGF6eU5vZGUoKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCBjbG9iYmVyKE1hcCYgbWFwLCBBYnN0cmFjdEhlYXAgaGVhcCkKKyAg
ICB7CisgICAgICAgIG1hcC5yZW1vdmVJZihbaGVhcF0oY29uc3Qgc3RkOjp1bmlxdWVfcHRyPElt
cHVyZURhdGFTbG90PiYgc2xvdCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gaGVhcC5v
dmVybGFwcyhzbG90LT5rZXkuaGVhcCgpKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgTWFw
IG1fd29ybGRNYXA7CisgICAgTWFwIG1faGVhcE1hcDsKKyAgICBNYXAgbV9zaWRlU3RhdGVNYXA7
CisKKyAgICAvLyBUaGUgbWFqb3JpdHkgb2YgSW1wdXJlIFN0YWNrIFNsb3RzYXJlIHVuaXF1ZSBw
ZXIgdmFsdWUuCisgICAgLy8gVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBmb3IgZmFzdCBjbG9iYmVyKCks
IHdlIGNhbiBqdXN0IHJlbW92ZSB0aGUgc2xvdCBhZGRyZXNzZWQgYnkgQWJzdHJhY3RIZWFwCisg
ICAgLy8gaW4gTygxKS4KKyAgICAvLworICAgIC8vIFdoZW4gdGhlcmUgYXJlIGNvbmZsaWN0LCBh
bnkgYWRkaXRpb25hbCBIZWFwTG9jYXRpb24gaXMgYWRkZWQgaW4gdGhlIGZhbGxiYWNrIG1hcC4K
KyAgICAvLyBUaGlzIHdvcmtzIHdlbGwgYmVjYXVzZSBmYWxsYmFja1N0YWNrTWFwIHJlbWFpbnMg
dGlueS4KKyAgICAvLworICAgIC8vIE9uZSBjYW5ub3QgYXNzdW1lIGEgdW5pcXVlIEltcHVyZURh
dGEgaXMgaW4gbV9hYnN0cmFjdEhlYXBTdGFja01hcC4gSXQgbWF5IGhhdmUgYmVlbgorICAgIC8v
IGEgZHVwbGljYXRlIGluIHRoZSBwYXN0IGFuZCBub3cgb25seSBsaXZlIGluIG1fZmFsbGJhY2tT
dGFja01hcC4KKyAgICAvLworICAgIC8vIE9idmlvdXNseSwgVE9QIGFsd2F5cyBnb2VzIGludG8g
bV9mYWxsYmFja1N0YWNrTWFwIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgYSB1bmlxdWUgdmFsdWUu
CisgICAgSGFzaE1hcDxBYnN0cmFjdEhlYXAsIHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xv
dD4+IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXA7CisgICAgTWFwIG1fZmFsbGJhY2tTdGFja01hcDsK
KworI2lmICFkZWZpbmVkKE5ERUJVRykKKyAgICBIYXNoTWFwPEhlYXBMb2NhdGlvbiwgTGF6eU5v
ZGU+IG1fZGVidWdJbXB1cmVEYXRhOworI2VuZGlmCit9OwogCiBjbGFzcyBMb2NhbENTRVBoYXNl
IDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKQEAgLTE5Miw3ICs0MTAsNyBAQCBwcml2YXRlOgog
ICAgIAogICAgICAgICB2b2lkIHdyaXRlKEFic3RyYWN0SGVhcCBoZWFwKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBjbG9iYmVyKG1faW1wdXJlTWFwLCBoZWFwKTsKKyAgICAgICAgICAgIG1faW1w
dXJlTWFwLmNsb2JiZXIoaGVhcCk7CiAgICAgICAgIH0KICAgICAKICAgICAgICAgTm9kZSogYWRk
UHVyZShQdXJlVmFsdWUgdmFsdWUsIE5vZGUqIG5vZGUpCkBAIC0yMDgsMTcgKzQyNiwxNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIG1faW1wdXJlTWFwLmdldChsb2NhdGlvbik7CiAg
ICAgICAgIH0KICAgICAKLSAgICAgICAgTGF6eU5vZGUgYWRkSW1wdXJlKEhlYXBMb2NhdGlvbiBs
b2NhdGlvbiwgTGF6eU5vZGUgbm9kZSkKKyAgICAgICAgTGF6eU5vZGUgYWRkSW1wdXJlKGNvbnN0
IEhlYXBMb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IExhenlOb2RlJiBub2RlKQogICAgICAgICB7
Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1faW1wdXJlTWFwLmFkZChsb2NhdGlvbiwgbm9k
ZSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKKyAgICAgICAgICAgIGlmIChjb25zdCBJbXB1cmVEYXRhU2xvdCogc2xvdCA9IG1faW1wdXJl
TWFwLmFkZChsb2NhdGlvbiwgbm9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNsb3QtPnZh
bHVlOworICAgICAgICAgICAgcmV0dXJuIExhenlOb2RlKCk7CiAgICAgICAgIH0KIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIEhhc2hNYXA8UHVyZVZhbHVlLCBOb2RlKj4gbV9wdXJlTWFwOwotICAg
ICAgICBIYXNoTWFwPEhlYXBMb2NhdGlvbiwgTGF6eU5vZGU+IG1faW1wdXJlTWFwOworICAgICAg
ICBJbXB1cmVNYXAgbV9pbXB1cmVNYXA7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1hcHM+CkBAIC0zMjcsNyArNTQ0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAKLSAgICAgICAgdm9pZCBkZWYoSGVhcExvY2F0aW9u
IGxvY2F0aW9uLCBMYXp5Tm9kZSB2YWx1ZSkKKyAgICAgICAgdm9pZCBkZWYoY29uc3QgSGVhcExv
Y2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgTGF6eU5vZGUmIHZhbHVlKQogICAgICAgICB7CiAgICAg
ICAgICAgICBMYXp5Tm9kZSBtYXRjaCA9IG1fbWFwcy5hZGRJbXB1cmUobG9jYXRpb24sIHZhbHVl
KTsKICAgICAgICAgICAgIGlmICghbWF0Y2gpCkBAIC00NjEsMTAgKzY3OCw4IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIHdyaXRlKEFic3RyYWN0SGVhcCBoZWFwKQogICAgIHsKLSAgICAgICAg
Y2xvYmJlcihtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbCwgaGVhcCk7CisgICAgICAgIG1f
aW1wdXJlRGF0YS0+YXZhaWxhYmxlQXRUYWlsLmNsb2JiZXIoaGVhcCk7CiAgICAgICAgIG1fd3Jp
dGVzU29GYXIuYWRkKGhlYXApOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRh
dGFMb2coIiAgICBDbG9iYmVyZWQsIG5ldyB0YWlsIG1hcDogIiwgbWFwRHVtcChtX2ltcHVyZURh
dGEtPmF2YWlsYWJsZUF0VGFpbCksICJcbiIpOwogICAgIH0KICAgICAKICAgICB2b2lkIGRlZihQ
dXJlVmFsdWUgdmFsdWUpCkBAIC01NzksOCArNzk0LDYgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgICAgIEl0IHN0cmljdGx5IGRvbWluYXRlcy5cbiIpOwogICAg
ICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBkYXRhLmRpZFZpc2l0KTsK
ICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIW1hdGNoKTsKLSAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgICAgICBBdmFpbGFiaWxpdHkgbWFwOiAiLCBtYXBEdW1wKGRhdGEuYXZhaWxhYmxlQXRUYWls
KSwgIlxuIik7CiAgICAgICAgICAgICAgICAgbWF0Y2ggPSBkYXRhLmF2YWlsYWJsZUF0VGFpbC5n
ZXQobG9jYXRpb24pOwogICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJpbGl0eTogIiwgbWF0Y2gsICJcbiIpOwpA
QCAtNjM5LDcgKzg1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIEFkZGluZyBhdC10YWlsIG1hcHBpbmc6ICIsIGxv
Y2F0aW9uLCAiIC0+ICIsIHZhbHVlLCAiXG4iKTsKICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
bV9pbXB1cmVEYXRhLT5hdmFpbGFibGVBdFRhaWwuYWRkKGxvY2F0aW9uLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgICAg
ICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsICFyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SGVhcExvY2F0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlv
bi5oCmluZGV4IDEyOWM2MTQ0M2IyYWRjNjc1M2QzZjBjNzkyMjQxNmZiMTdhNjQ0YWQuLjIwYjM4
MTZjYzUyZjQ3M2ZmYTI5NTUzYzA5ZTVmMzY5NjgyYWE3NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaApAQCAtMTU1LDEyICsxNTUsNiBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpIZWFwTG9jYXRpb24+IDogU2ltcGxlQ2xh
c3NIYXNoVHJhaXRzPEpTQwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewotCi10eXBlZGVmIEhhc2hNYXA8SGVhcExvY2F0aW9uLCBMYXp5Tm9k
ZT4gSW1wdXJlTWFwOwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0KICNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKIAogI2VuZGlmIC8vIERGR0hlYXBMb2NhdGlvbl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlOb2RlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xhenlOb2RlLmgKaW5kZXggZmZkNTcyZjg1OGZlNGE1NTk4NGQzZWM5
YzgzZTM0ZWUyYzE0MWQyMy4uOGQ4ZjQ4ZDM2YzRhN2QyMDFlOGQwYzZmZDhjNjRlYzFiZmVjYjMz
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5Tm9kZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eU5vZGUuaApAQCAtMTEwLDkgKzEx
MCwxMCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIGlmIChhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPEZyb3pl
blZhbHVlKj46Omhhc2goYXNWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxO
b2RlKj46Omhhc2gobV9ub2RlKTsKKyAgICAgICAgdm9pZCogdG9IYXNoID0gbV9ub2RlOworICAg
ICAgICBpZiAoRnJvemVuVmFsdWUqIHZhbHVlID0gYXNWYWx1ZSgpKQorICAgICAgICAgICAgdG9I
YXNoID0gdmFsdWU7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8dm9pZCo+OjpoYXNoKHRv
SGFzaCk7CiAgICAgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExhenlOb2RlJiBvdGhl
cikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaCBiL1NvdXJjZS9X
VEYvd3RmL0hhc2hTZXQuaAppbmRleCA2OGY5NTZjZjM1NGZmN2I4ODU2ZWY1M2VlNmU5N2JiYzBj
NmVmNWVkLi5jOWEyZmMxYzZkNTJiY2U0MjA4NDY1NTE5ODA0NDI5ZDdlNDIyZWM5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaFNl
dC5oCkBAIC0xMDEsNiArMTAxLDggQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgYm9vbCBy
ZW1vdmUoY29uc3QgVmFsdWVUeXBlJik7CiAgICAgICAgIGJvb2wgcmVtb3ZlKGl0ZXJhdG9yKTsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICAgICAgdm9pZCByZW1vdmVJ
Zihjb25zdCBGdW5jdG9yJik7CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKIAogICAgICAgICBWYWx1
ZVR5cGUgdGFrZShjb25zdCBWYWx1ZVR5cGUmKTsKQEAgLTI1MSw2ICsyNTMsMTMgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgVj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIGlubGluZSB2
b2lkIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZUlmKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisg
ICAgeworICAgICAgICBtX2ltcGwucmVtb3ZlSWYoZnVuY3Rvcik7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KICAgICBpbmxpbmUgdm9p
ZCBIYXNoU2V0PFQsIFUsIFY+OjpjbGVhcigpCiAgICAgewogICAgICAgICBtX2ltcGwuY2xlYXIo
KTsgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274338</attachid>
            <date>2016-03-17 16:21:36 -0700</date>
            <delta_ts>2016-03-17 18:43:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155594-20160317162135.patch</filename>
            <type>text/plain</type>
            <size>17079</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
YjlmNWZkODhhNDY5YzQyOTIzY2JlYmMxNGJmMWU0NDMwNzBmMjQ4Li5lYjI1OGI2NjVlNTM0ODBi
MTQ2ZWViMjE5OTg4NWJlNzhiYmQyODBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAxNi0wMy0xNyAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBNYWtlIENTRSdzIEltcHVyZURhdGEgZmFzdGVyIHdoZW4g
ZGVhbGluZyB3aXRoIGxhcmdlIGJsb2NrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW4gc29tZSB0ZXN0cyB3aXRoIGxhcmdlIGJsb2NrcywgdGhlIHRp
bWUgc3BlbnQgaW4gREZHJ3MgTG9jYWxDU0UKKyAgICAgICAgY2FuIGJlIG92ZXIgMTAlIG9mIHRo
ZSB0b3RhbCBjb21waWxlIHRpbWUuCisgICAgICAgIEluIHRob3NlIGNhc2VzLCBMb2NhbENTRSBp
cyBjb21wbGV0ZWx5IGRvbWluYXRlZCBieSBoYW5kbGluZyBsYXJnZQorICAgICAgICBibG9ja3Mu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhlIG1vc3Qgb2J2aW91cyBob3Qgc3Bv
dHMgSW1wdXJlRGF0YSdzIGhhbmRsaW5nLgorCisgICAgICAgIEluaXRpYWxseSwgbW9zdCBvZiB0
aGUgdGltZSB3YXMgZ29pbmcgaW50byBIYXNoVGFibGU6OnJlaGFzaCgpLgorICAgICAgICBUaGUg
cmVhc29uIGlzIHRoZSBidWNrZXRzIGFyZSA8SGVhcExvY2F0aW9uLCBMYXp5Tm9kZT4gZ2lnYW50
aWMuCisgICAgICAgIFRoZSBoYXNoIHRhYmxlIHdvdWxkIGVhc2lseSBnZXQgaW50byBzZXZlcmFs
IGtpbG9ieXRlcyBhbmQgdGhlIENQVQorICAgICAgICB3YXMgc3BlbmRpbmcgbW9yZSB0aW1lIGRl
YWxpbmcgd2l0aCBtZW1vcnkgdGhhbiBhbnl0aGluZy4KKworICAgICAgICBUbyBzb2x2ZSB0aGF0
LCBJIG1vdmVkIHRoZSBwYWlycyBsYXppbHkgdG8gdGhlIGhlYXAuIFRoZSB0YWJsZSBpdHNlbGYK
KyAgICAgICAganVzdCBjb250YWlucyB0aGUgdW5pcXVlX3B0ciB0byB0aG9zZSB2YWx1ZXMuIFRo
aXMgbWFrZXMgdGhlIHRhYmxlCisgICAgICAgIHJlYXNvbmFibHkgc21hbGwgYW5kIHRoZSBhbGxv
Yy9kZWFsbG9jIGFyZSBwYWlkIGZvciBieSB0aGUgZmFzdCByZWhhc2goKS4KKworICAgICAgICBP
bmNlIGFkZEltcHVyZSgpIHdhcyBiZXR0ZXIsIHRoZSBuZXh0IGJpZyBib3R0bGVuZXQgd2FzIGNs
b2JiZXIoKS4KKyAgICAgICAgRm9yIGVhY2ggY2xvYmJlcigpLCB3ZSBuZWVkIHRvIGdvIG92ZXIg
dGhlIGVudGlyZSBtYXAgYW5kIHRlc3QgZWFjaCB2YWx1ZS4KKyAgICAgICAgVGhhdCBsb29wIHdh
cyB3aGVyZSBtb3N0IG9mIHRoZSB0aW1lIHdhcyBnb2luZy4KKworICAgICAgICBNb3N0IGNhbGxz
IHRvIGNsb2JiZXIoKSBjb21lIGZyb20gdHdvIGtpbmRzOiBTaWRlU3RhdGUgYW5kIFN0YWNrLgor
CisgICAgICAgIFNpZGVTdGF0ZSBpcyBlYXN5OiBpdCBpcyBkaXNqb2ludCBmcm9tIEhlYXAgYW5k
IFN0YWNrIHNvIHdlIGNhbgorICAgICAgICBqdXN0IGhhdmUgYSBtYXAgZm9yIGl0LiBTdGFjayBp
cyBkaXNqb2ludCBmcm9tIEhlYXAgdG9vIHNvIHdlIGNhbgorICAgICAgICBhbHNvIHB1dCBpdCBz
ZXBhcmF0ZWx5CisKKyAgICAgICAgU3BsaXR0aW5nIHRoZSBtYXAgaW50byA0IGhlbHBlZCByZWR1
Y2UgdGhlIG92ZXJoZWFkLiBUaGUgbWFwcyB3ZXJlOgorICAgICAgICAtU3RhY2sKKyAgICAgICAg
LVNpZGVTdGF0ZQorICAgICAgICAtSGVhcAorICAgICAgICAtV29ybGQKKworICAgICAgICBIYXZp
bmcgU3RhY2sgYWxvbmUgd2FzIG5vdCBlbm91Z2ggZm9yIG1hbnkgYmxvY2tzLiBJbiBzb21lIGNh
c2VzLAorICAgICAgICB5b3UgaGF2ZSBhIHRvbiBvZiBTZXRMb2NhbC9HZXRMb2NhbCBhbmQgaGF2
aW5nIFN0YWNrIHNlcGFyYXRlCisgICAgICAgIG1ha2VzIG5vIGRpZmZlcmVuY2UuCisKKyAgICAg
ICAgVG8gc29sdmUgdGhhdCwgSSBzcGxpdCBTdGFjayBpbiB0d286IGEgbWFwIGFkZHJlc3NlZCBi
eSBBYnN0cmFjdEhlYXAKKyAgICAgICAgKyB1bmlxdWUgSGVhcExvY2F0aW9uIGFuZCBhIGZhbGxi
YWNrIG1hcCBmb3IgZXZlcnl0aGluZyBlbHNlLgorICAgICAgICBTaW5jZSBtb3N0IFN0YWNrIGFy
ZSBub3QgVE9QIGFuZCBhcmUgdW5pcXVlIHBlciBBYnN0cmFjdEhlYXAsCisgICAgICAgIEkgZ2V0
IE8oMSkgY2xvYmJlciBpbiBtb3N0IGNhc2VzLgorCisgICAgICAgIEkgY291bGQgYWNoaWV2ZSB0
aGUgc2FtZSByZXN1bHQgd2l0aCBhIGN1c3RvbSBoYXNoIHN0cnVjdHVyZS4KKyAgICAgICAgSSBk
b24ndCB0aGluayBpdCBpcyB3b3J0aCB0aGUgZWZmb3J0LCBpbiBtb3N0IGNhc2VzLCBtX2ZhbGxi
YWNrU3RhY2tNYXAKKyAgICAgICAgaGFzIGEgc2l6ZSBvZiB6ZXJvIG9yIG9uZS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBsb3Qgb2YgY291cGxpbmcgYmV0d2VlbiBDU0UgYW5k
IEFic3RyYWN0SGVhcC4KKyAgICAgICAgVG8gcmVkdWNlIHRoZSByaXNrIG9mIGJ1Z3MsIHRoZSBv
bGQgbWFwIGlzIHN0aWxsIG1haW50YWluZWQgaW4gZGVidWcKKyAgICAgICAgYW5kIGVhY2ggc3Rl
cCBjaGVja3MgdGhhdCB0aGUgcmVzdWx0cyBhcmUgdGhlIHNhbWUgYXMgdGhlIG5ldyBpbXBsZW1l
bnRhdGlvbi4KKworICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZn
L0RGR0hlYXBMb2NhdGlvbi5oOgorICAgICAgICAqIGRmZy9ERkdMYXp5Tm9kZS5oOgorICAgICAg
ICAoSlNDOjpERkc6OkxhenlOb2RlOjpoYXNoKToKKwogMjAxNi0wMy0xNCAgSm9zZXBoIFBlY29y
YXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSBnZW5lcmF0ZWQgSlNP
TiBIZWFwU25hcHNob3Qgc2l6ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBlOWQwNzNlMWJhM2FhOWRlMWUwMDFlZTUyY2Y1MGFm
NDQyZmM1ZjliLi5lYWYyNjI1NTNiNWVkZTJmOTQ2MWUwZWUzNzBhNzgyNjA5MTNiNThjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEzIEBACisyMDE2LTAzLTE3ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFtKU0NdIE1ha2UgQ1NFJ3MgSW1wdXJlRGF0YSBmYXN0ZXIg
d2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgYmxvY2tzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU1OTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChXVEY6OlY+
OjpyZW1vdmVJZik6CisKIDIwMTYtMDMtMTMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgRU5BQkxFKEVTNl9URU1QTEFURV9MSVRFUkFMX1NZ
TlRBWCkgZ3VhcmRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCmlu
ZGV4IDFjZGVlNGRmOGYyN2JlYmQ4N2JiNmY4YzVkYzMwZGNlMDkyNzA5MGMuLjU1ODIwNDYzZDZl
Y2Q5NWFhMDkyYmM3NzI4M2RmODkwMTU5ODY5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCkBAIC01MSwyNyArNTEsMjQ1IEBAIG5hbWVzcGFjZSB7CiAKIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCi1jbGFzcyBDbG9iYmVyRmlsdGVyIHsKK2NsYXNz
IEltcHVyZURhdGFTbG90IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbXB1cmVEYXRhU2xv
dCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgQ2xvYmJlckZp
bHRlcihBYnN0cmFjdEhlYXAgaGVhcCkKLSAgICAgICAgOiBtX2hlYXAoaGVhcCkKKyAgICBIZWFw
TG9jYXRpb24ga2V5OworICAgIExhenlOb2RlIHZhbHVlOworICAgIHVuc2lnbmVkIGhhc2g7Cit9
OworCitzdHJ1Y3QgSW1wdXJlRGF0YVNsb3RIYXNoIDogcHVibGljIERlZmF1bHRIYXNoPHN0ZDo6
dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4+OjpIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+JiBrZXkpCiAgICAgewor
ICAgICAgICByZXR1cm4ga2V5LT5oYXNoOwogICAgIH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9y
KCkoY29uc3QgSW1wdXJlTWFwOjpLZXlWYWx1ZVBhaXJUeXBlJiBwYWlyKSBjb25zdAorCisgICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiYg
YSwgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiYgYikKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2hlYXAub3ZlcmxhcHMocGFpci5rZXkuaGVhcCgpKTsKKyAgICAgICAgLy8g
VGhlIEltcHVyZURhdGFTbG90IGFyZSB1bmlxdWUgcGVyIHRhYmxlIHBlciBIZWFwTG9jYXRpb24u
IFRoaXMgbGV0cyB1cyBjb21wYXJlIHRoZSBrZXkKKyAgICAgICAgLy8gYnkganVzdCBjb21wYXJp
bmcgdGhlIHBvaW50ZXJzIG9mIHRoZSB1bmlxdWUgSW1wdXJlRGF0YVNsb3RzLgorICAgICAgICBB
U1NFUlQoYSAhPSBiIHx8IGEtPmtleSA9PSBiLT5rZXkpOworICAgICAgICByZXR1cm4gYSA9PSBi
OwogICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgQWJzdHJhY3RIZWFwIG1faGVhcDsKIH07CiAK
LWlubGluZSB2b2lkIGNsb2JiZXIoSW1wdXJlTWFwJiBtYXAsIEFic3RyYWN0SGVhcCBoZWFwKQot
ewotICAgIENsb2JiZXJGaWx0ZXIgZmlsdGVyKGhlYXApOwotICAgIG1hcC5yZW1vdmVJZihmaWx0
ZXIpOwotfQorc3RydWN0IEltcHVyZURhdGFUcmFuc2xhdG9yIHsKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBIZWFwTG9jYXRpb24mIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBr
ZXkuaGFzaCgpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IHN0ZDo6dW5p
cXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4mIHNsb3QsIGNvbnN0IEhlYXBMb2NhdGlvbiYga2V5KQor
ICAgIHsKKyAgICAgICAgaWYgKCFzbG90KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAoSGFzaFRyYWl0czxzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+Pjo6aXNE
ZWxldGVkVmFsdWUoc2xvdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiBzbG90LT5rZXkgPT0ga2V5OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0
ZShzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+JiBzbG90LCBjb25zdCBIZWFwTG9jYXRp
b24mIGtleSwgdW5zaWduZWQgaGFzaENvZGUpCisgICAgeworICAgICAgICBuZXcgKE5vdE51bGws
IHN0ZDo6YWRkcmVzc29mKHNsb3QpKSBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+KG5l
dyBJbXB1cmVEYXRhU2xvdCB7a2V5LCBMYXp5Tm9kZSgpLCBoYXNoQ29kZX0pOworICAgIH0KK307
CisKK2NsYXNzIEltcHVyZU1hcCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSW1wdXJlTWFwKTsKK3B1YmxpYzoKKyAgICBJbXB1cmVNYXAo
KSA9IGRlZmF1bHQ7CisKKyAgICBJbXB1cmVNYXAoSW1wdXJlTWFwJiYgb3RoZXIpCisgICAgewor
ICAgICAgICBtX3dvcmxkTWFwLnN3YXAob3RoZXIubV93b3JsZE1hcCk7CisgICAgICAgIG1faGVh
cE1hcC5zd2FwKG90aGVyLm1faGVhcE1hcCk7CisgICAgICAgIG1fc2lkZVN0YXRlTWFwLnN3YXAo
b3RoZXIubV9zaWRlU3RhdGVNYXApOworICAgICAgICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLnN3
YXAob3RoZXIubV9hYnN0cmFjdEhlYXBTdGFja01hcCk7CisgICAgICAgIG1fZmFsbGJhY2tTdGFj
a01hcC5zd2FwKG90aGVyLm1fZmFsbGJhY2tTdGFja01hcCk7CisjaWYgIWRlZmluZWQoTkRFQlVH
KQorICAgICAgICBtX2RlYnVnSW1wdXJlRGF0YS5zd2FwKG90aGVyLm1fZGVidWdJbXB1cmVEYXRh
KTsKKyNlbmRpZgorICAgIH0KKworICAgIGNvbnN0IEltcHVyZURhdGFTbG90KiBhZGQoY29uc3Qg
SGVhcExvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgTGF6eU5vZGUmIG5vZGUpCisgICAgeworICAg
ICAgICBjb25zdCBJbXB1cmVEYXRhU2xvdCogcmVzdWx0ID0gYWRkSW1wbChsb2NhdGlvbiwgbm9k
ZSk7CisKKyNpZiAhZGVmaW5lZChOREVCVUcpCisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9k
ZWJ1Z0ltcHVyZURhdGEuYWRkKGxvY2F0aW9uLCBub2RlKTsKKyAgICAgICAgQVNTRVJUKCEhcmVz
dWx0ID09ICFhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBMYXp5Tm9kZSBnZXQoY29uc3QgSGVhcExvY2F0aW9uJiBsb2Nh
dGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIExhenlOb2RlIHJlc3VsdCA9IGdldEltcGwobG9j
YXRpb24pOworI2lmICFkZWZpbmVkKE5ERUJVRykKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBt
X2RlYnVnSW1wdXJlRGF0YS5nZXQobG9jYXRpb24pKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHZvaWQgY2xvYmJlcihBYnN0cmFjdEhlYXAgaGVhcCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoaGVhcC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBXb3JsZDog
eworICAgICAgICAgICAgbV9oZWFwTWFwLmNsZWFyKCk7CisgICAgICAgICAgICBtX3NpZGVTdGF0
ZU1hcC5jbGVhcigpOworICAgICAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5jbGVhcigp
OworICAgICAgICAgICAgbV9mYWxsYmFja1N0YWNrTWFwLmNsZWFyKCk7CisgICAgICAgICAgICBj
bG9iYmVyKG1fd29ybGRNYXAsIGhlYXApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBTaWRlU3RhdGU6CisgICAgICAgICAgICBjbG9iYmVyKG1fc2lkZVN0YXRl
TWFwLCBoZWFwKTsKKyAgICAgICAgICAgIGNsb2JiZXIobV93b3JsZE1hcCwgaGVhcCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGFjazogeworICAgICAgICAgICAgaWYgKGhl
YXAucGF5bG9hZCgpLmlzVG9wKCkpCisgICAgICAgICAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFj
a01hcC5jbGVhcigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYWJzdHJh
Y3RIZWFwU3RhY2tNYXAucmVtb3ZlKGhlYXApOworICAgICAgICAgICAgY2xvYmJlcihtX2ZhbGxi
YWNrU3RhY2tNYXAsIGhlYXApOworICAgICAgICAgICAgY2xvYmJlcihtX3dvcmxkTWFwLCBoZWFw
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBjbG9iYmVyKG1faGVhcE1hcCwgaGVhcCk7CisgICAgICAgICAgICBjbG9iYmVyKG1f
d29ybGRNYXAsIGhlYXApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNpZiAhZGVm
aW5lZChOREVCVUcpCisgICAgICAgIG1fZGVidWdJbXB1cmVEYXRhLnJlbW92ZUlmKFtoZWFwXShj
b25zdCBIYXNoTWFwPEhlYXBMb2NhdGlvbiwgTGF6eU5vZGU+OjpLZXlWYWx1ZVBhaXJUeXBlJiBw
YWlyKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBoZWFwLm92ZXJsYXBzKHBhaXIua2V5
LmhlYXAoKSk7CisgICAgICAgIH0pOworICAgICAgICBBU1NFUlQobV9kZWJ1Z0ltcHVyZURhdGEu
c2l6ZSgpCisgICAgICAgICAgICA9PSAobV93b3JsZE1hcC5zaXplKCkKKyAgICAgICAgICAgICAg
ICArIG1faGVhcE1hcC5zaXplKCkKKyAgICAgICAgICAgICAgICArIG1fc2lkZVN0YXRlTWFwLnNp
emUoKQorICAgICAgICAgICAgICAgICsgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5zaXplKCkKKyAg
ICAgICAgICAgICAgICArIG1fZmFsbGJhY2tTdGFja01hcC5zaXplKCkpKTsKKworICAgICAgICBj
b25zdCBib29sIHZlcmlmeUNsb2JiZXIgPSBmYWxzZTsKKyAgICAgICAgaWYgKHZlcmlmeUNsb2Ji
ZXIpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fZGVidWdJbXB1cmVEYXRhKQor
ICAgICAgICAgICAgICAgIEFTU0VSVCghIWdldChwYWlyLmtleSkpOworICAgICAgICB9CisjZW5k
aWYKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fd29ybGRNYXAu
Y2xlYXIoKTsKKyAgICAgICAgbV9oZWFwTWFwLmNsZWFyKCk7CisgICAgICAgIG1fc2lkZVN0YXRl
TWFwLmNsZWFyKCk7CisgICAgICAgIG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuY2xlYXIoKTsKKyAg
ICAgICAgbV9mYWxsYmFja1N0YWNrTWFwLmNsZWFyKCk7CisjaWYgIWRlZmluZWQoTkRFQlVHKQor
ICAgICAgICBtX2RlYnVnSW1wdXJlRGF0YS5jbGVhcigpOworI2VuZGlmCisgICAgfQorCitwcml2
YXRlOgorICAgIHR5cGVkZWYgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+
LCBJbXB1cmVEYXRhU2xvdEhhc2g+IE1hcDsKKworICAgIGNvbnN0IEltcHVyZURhdGFTbG90KiBh
ZGRJbXBsKGNvbnN0IEhlYXBMb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IExhenlOb2RlJiBub2Rl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChsb2NhdGlvbi5oZWFwKCkua2luZCgpKSB7CisgICAg
ICAgIGNhc2UgV29ybGQ6CisgICAgICAgICAgICByZXR1cm4gYWRkKG1fd29ybGRNYXAsIGxvY2F0
aW9uLCBub2RlKTsKKyAgICAgICAgY2FzZSBTaWRlU3RhdGU6CisgICAgICAgICAgICByZXR1cm4g
YWRkKG1fc2lkZVN0YXRlTWFwLCBsb2NhdGlvbiwgbm9kZSk7CisgICAgICAgIGNhc2UgU3RhY2s6
IHsKKyAgICAgICAgICAgIEFic3RyYWN0SGVhcCBhYnN0cmFjdEhlYXAgPSBsb2NhdGlvbi5oZWFw
KCk7CisgICAgICAgICAgICBpZiAoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS5pc1RvcCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBhZGQobV9mYWxsYmFja1N0YWNrTWFwLCBsb2NhdGlvbiwgbm9k
ZSk7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAu
YWRkKGFic3RyYWN0SGVhcCwgbnVsbHB0cik7CisgICAgICAgICAgICBpZiAoYWRkUmVzdWx0Lmlz
TmV3RW50cnkpIHsKKyAgICAgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnJl
c2V0KG5ldyBJbXB1cmVEYXRhU2xvdCB7bG9jYXRpb24sIG5vZGUsIDB9KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0gbG9jYXRpb24pCisgICAgICAgICAgICAgICAg
cmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CisgICAgICAgICAgICByZXR1
cm4gYWRkKG1fZmFsbGJhY2tTdGFja01hcCwgbG9jYXRpb24sIG5vZGUpOworICAgICAgICB9Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gYWRkKG1faGVhcE1hcCwgbG9jYXRp
b24sIG5vZGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIExhenlOb2RlIGdldEltcGwoY29uc3QgSGVhcExvY2F0aW9uJiBsb2NhdGlvbikgY29uc3QK
KyAgICB7CisgICAgICAgIHN3aXRjaCAobG9jYXRpb24uaGVhcCgpLmtpbmQoKSkgeworICAgICAg
ICBjYXNlIFdvcmxkOgorICAgICAgICAgICAgcmV0dXJuIGdldChtX3dvcmxkTWFwLCBsb2NhdGlv
bik7CisgICAgICAgIGNhc2UgU2lkZVN0YXRlOgorICAgICAgICAgICAgcmV0dXJuIGdldChtX3Np
ZGVTdGF0ZU1hcCwgbG9jYXRpb24pOworICAgICAgICBjYXNlIFN0YWNrOiB7CisgICAgICAgICAg
ICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKGxvY2F0aW9uLmhl
YXAoKSk7CisgICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9hYnN0cmFjdEhlYXBTdGFja01h
cC5lbmQoKQorICAgICAgICAgICAgICAgICYmIGl0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGxvY2F0
aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUtPnZhbHVlOworICAg
ICAgICAgICAgcmV0dXJuIGdldChtX2ZhbGxiYWNrU3RhY2tNYXAsIGxvY2F0aW9uKTsKKyAgICAg
ICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGdldChtX2hlYXBNYXAs
IGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTGF6eU5vZGUoKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgY29uc3QgSW1wdXJlRGF0YVNsb3QqIGFkZChNYXAmIG1hcCwgY29uc3Qg
SGVhcExvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgTGF6eU5vZGUmIG5vZGUpCisgICAgeworICAg
ICAgICBhdXRvIHJlc3VsdCA9IG1hcC5hZGQ8SW1wdXJlRGF0YVRyYW5zbGF0b3I+KGxvY2F0aW9u
KTsKKyAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAoKnJlc3Vs
dC5pdGVyYXRvciktPnZhbHVlID0gbm9kZTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPmdldCgpOworICAgIH0K
KworICAgIHN0YXRpYyBMYXp5Tm9kZSBnZXQoY29uc3QgTWFwJiBtYXAsIGNvbnN0IEhlYXBMb2Nh
dGlvbiYgbG9jYXRpb24pCisgICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbWFwLmZpbmQ8
SW1wdXJlRGF0YVRyYW5zbGF0b3I+KGxvY2F0aW9uKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yICE9
IG1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiAoKml0ZXJhdG9yKS0+dmFsdWU7CisgICAg
ICAgIHJldHVybiBMYXp5Tm9kZSgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNsb2JiZXIo
TWFwJiBtYXAsIEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgbWFwLnJlbW92ZUlm
KFtoZWFwXShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+JiBzbG90KSAtPiBi
b29sIHsKKyAgICAgICAgICAgIHJldHVybiBoZWFwLm92ZXJsYXBzKHNsb3QtPmtleS5oZWFwKCkp
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBNYXAgbV93b3JsZE1hcDsKKyAgICBNYXAgbV9o
ZWFwTWFwOworICAgIE1hcCBtX3NpZGVTdGF0ZU1hcDsKKworICAgIC8vIFRoZSBtYWpvcml0eSBv
ZiBJbXB1cmUgU3RhY2sgU2xvdHNhcmUgdW5pcXVlIHBlciB2YWx1ZS4KKyAgICAvLyBUaGlzIGlz
IHZlcnkgdXNlZnVsIGZvciBmYXN0IGNsb2JiZXIoKSwgd2UgY2FuIGp1c3QgcmVtb3ZlIHRoZSBz
bG90IGFkZHJlc3NlZCBieSBBYnN0cmFjdEhlYXAKKyAgICAvLyBpbiBPKDEpLgorICAgIC8vCisg
ICAgLy8gV2hlbiB0aGVyZSBhcmUgY29uZmxpY3QsIGFueSBhZGRpdGlvbmFsIEhlYXBMb2NhdGlv
biBpcyBhZGRlZCBpbiB0aGUgZmFsbGJhY2sgbWFwLgorICAgIC8vIFRoaXMgd29ya3Mgd2VsbCBi
ZWNhdXNlIGZhbGxiYWNrU3RhY2tNYXAgcmVtYWlucyB0aW55LgorICAgIC8vCisgICAgLy8gT25l
IGNhbm5vdCBhc3N1bWUgYSB1bmlxdWUgSW1wdXJlRGF0YSBpcyBpbiBtX2Fic3RyYWN0SGVhcFN0
YWNrTWFwLiBJdCBtYXkgaGF2ZSBiZWVuCisgICAgLy8gYSBkdXBsaWNhdGUgaW4gdGhlIHBhc3Qg
YW5kIG5vdyBvbmx5IGxpdmUgaW4gbV9mYWxsYmFja1N0YWNrTWFwLgorICAgIC8vCisgICAgLy8g
T2J2aW91c2x5LCBUT1AgYWx3YXlzIGdvZXMgaW50byBtX2ZhbGxiYWNrU3RhY2tNYXAgc2luY2Ug
aXQgZG9lcyBub3QgaGF2ZSBhIHVuaXF1ZSB2YWx1ZS4KKyAgICBIYXNoTWFwPEFic3RyYWN0SGVh
cCwgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90Pj4gbV9hYnN0cmFjdEhlYXBTdGFja01h
cDsKKyAgICBNYXAgbV9mYWxsYmFja1N0YWNrTWFwOworCisjaWYgIWRlZmluZWQoTkRFQlVHKQor
ICAgIEhhc2hNYXA8SGVhcExvY2F0aW9uLCBMYXp5Tm9kZT4gbV9kZWJ1Z0ltcHVyZURhdGE7Cisj
ZW5kaWYKK307CiAKIGNsYXNzIExvY2FsQ1NFUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGlj
OgpAQCAtMTkyLDcgKzQxMCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgICAgIHZvaWQgd3JpdGUo
QWJzdHJhY3RIZWFwIGhlYXApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNsb2JiZXIobV9pbXB1
cmVNYXAsIGhlYXApOworICAgICAgICAgICAgbV9pbXB1cmVNYXAuY2xvYmJlcihoZWFwKTsKICAg
ICAgICAgfQogICAgIAogICAgICAgICBOb2RlKiBhZGRQdXJlKFB1cmVWYWx1ZSB2YWx1ZSwgTm9k
ZSogbm9kZSkKQEAgLTIwOCwxNyArNDI2LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm4gbV9pbXB1cmVNYXAuZ2V0KGxvY2F0aW9uKTsKICAgICAgICAgfQogICAgIAotICAgICAgICBM
YXp5Tm9kZSBhZGRJbXB1cmUoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBMYXp5Tm9kZSBub2RlKQor
ICAgICAgICBMYXp5Tm9kZSBhZGRJbXB1cmUoY29uc3QgSGVhcExvY2F0aW9uJiBsb2NhdGlvbiwg
Y29uc3QgTGF6eU5vZGUmIG5vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gbV9pbXB1cmVNYXAuYWRkKGxvY2F0aW9uLCBub2RlKTsKLSAgICAgICAgICAgIGlmIChyZXN1
bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgaWYgKGNvbnN0
IEltcHVyZURhdGFTbG90KiBzbG90ID0gbV9pbXB1cmVNYXAuYWRkKGxvY2F0aW9uLCBub2RlKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gc2xvdC0+dmFsdWU7CisgICAgICAgICAgICByZXR1cm4g
TGF6eU5vZGUoKTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgSGFzaE1hcDxQ
dXJlVmFsdWUsIE5vZGUqPiBtX3B1cmVNYXA7Ci0gICAgICAgIEhhc2hNYXA8SGVhcExvY2F0aW9u
LCBMYXp5Tm9kZT4gbV9pbXB1cmVNYXA7CisgICAgICAgIEltcHVyZU1hcCBtX2ltcHVyZU1hcDsK
ICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwcz4KQEAgLTMyNyw3ICs1NDQsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQogICAg
IAotICAgICAgICB2b2lkIGRlZihIZWFwTG9jYXRpb24gbG9jYXRpb24sIExhenlOb2RlIHZhbHVl
KQorICAgICAgICB2b2lkIGRlZihjb25zdCBIZWFwTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBM
YXp5Tm9kZSYgdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIExhenlOb2RlIG1hdGNoID0g
bV9tYXBzLmFkZEltcHVyZShsb2NhdGlvbiwgdmFsdWUpOwogICAgICAgICAgICAgaWYgKCFtYXRj
aCkKQEAgLTQ2MSwxMCArNjc4LDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgd3JpdGUoQWJz
dHJhY3RIZWFwIGhlYXApCiAgICAgewotICAgICAgICBjbG9iYmVyKG1faW1wdXJlRGF0YS0+YXZh
aWxhYmxlQXRUYWlsLCBoZWFwKTsKKyAgICAgICAgbV9pbXB1cmVEYXRhLT5hdmFpbGFibGVBdFRh
aWwuY2xvYmJlcihoZWFwKTsKICAgICAgICAgbV93cml0ZXNTb0Zhci5hZGQoaGVhcCk7Ci0gICAg
ICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIENsb2JiZXJlZCwgbmV3
IHRhaWwgbWFwOiAiLCBtYXBEdW1wKG1faW1wdXJlRGF0YS0+YXZhaWxhYmxlQXRUYWlsKSwgIlxu
Iik7CiAgICAgfQogICAgIAogICAgIHZvaWQgZGVmKFB1cmVWYWx1ZSB2YWx1ZSkKQEAgLTU3OSw4
ICs3OTQsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAg
SXQgc3RyaWN0bHkgZG9taW5hdGVzLlxuIik7CiAgICAgICAgICAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBtX25vZGUsIGRhdGEuZGlkVmlzaXQpOwogICAgICAgICAgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbV9ub2RlLCAhbWF0Y2gpOwotICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJpbGl0eSBtYXA6
ICIsIG1hcER1bXAoZGF0YS5hdmFpbGFibGVBdFRhaWwpLCAiXG4iKTsKICAgICAgICAgICAgICAg
ICBtYXRjaCA9IGRhdGEuYXZhaWxhYmxlQXRUYWlsLmdldChsb2NhdGlvbik7CiAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAg
QXZhaWxhYmlsaXR5OiAiLCBtYXRjaCwgIlxuIik7CkBAIC02MzksNyArODUyLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
ICAgQWRkaW5nIGF0LXRhaWwgbWFwcGluZzogIiwgbG9jYXRpb24sICIgLT4gIiwgdmFsdWUsICJc
biIpOwogICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0
VGFpbC5hZGQobG9jYXRpb24sIHZhbHVlKTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVz
dWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3Vs
dCwgIXJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgKaW5kZXggMTI5YzYxNDQzYjJhZGM2
NzUzZDNmMGM3OTIyNDE2ZmIxN2E2NDRhZC4uMjBiMzgxNmNjNTJmNDczZmZhMjk1NTNjMDllNWYz
Njk2ODJhYTc3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFw
TG9jYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlv
bi5oCkBAIC0xNTUsMTIgKzE1NSw2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlND
OjpERkc6OkhlYXBMb2NhdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDCiAKIH0gLy8g
bmFtZXNwYWNlIFdURgogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLXR5cGVk
ZWYgSGFzaE1hcDxIZWFwTG9jYXRpb24sIExhenlOb2RlPiBJbXB1cmVNYXA7Ci0KLX0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKLQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAjZW5kaWYg
Ly8gREZHSGVhcExvY2F0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTGF6eU5vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eU5vZGUu
aAppbmRleCBmZmQ1NzJmODU4ZmU0YTU1OTg0ZDNlYzljODNlMzRlZTJjMTQxZDIzLi44ZDhmNDhk
MzZjNGE3ZDIwMWU4ZDBjNmZkOGM2NGVjMWJmZWNiMzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0xhenlOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdMYXp5Tm9kZS5oCkBAIC0xMTAsOSArMTEwLDEwIEBAIHB1YmxpYzoKIAogICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKGFzVmFsdWUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8RnJvemVuVmFsdWUqPjo6aGFzaChhc1ZhbHVlKCkp
OwotICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPE5vZGUqPjo6aGFzaChtX25vZGUpOworICAg
ICAgICB2b2lkKiB0b0hhc2ggPSBtX25vZGU7CisgICAgICAgIGlmIChGcm96ZW5WYWx1ZSogdmFs
dWUgPSBhc1ZhbHVlKCkpCisgICAgICAgICAgICB0b0hhc2ggPSB2YWx1ZTsKKyAgICAgICAgcmV0
dXJuIFdURjo6UHRySGFzaDx2b2lkKj46Omhhc2godG9IYXNoKTsKICAgICB9CiAKICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgTGF6eU5vZGUmIG90aGVyKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvSGFzaFNldC5oIGIvU291cmNlL1dURi93dGYvSGFzaFNldC5oCmluZGV4IDY4
Zjk1NmNmMzU0ZmY3Yjg4NTZlZjUzZWU2ZTk3YmJjMGM2ZWY1ZWQuLmM5YTJmYzFjNmQ1MmJjZTQy
MDg0NjU1MTk4MDQ0MjlkN2U0MjJlYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hT
ZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKQEAgLTEwMSw2ICsxMDEsOCBAQCBu
YW1lc3BhY2UgV1RGIHsKIAogICAgICAgICBib29sIHJlbW92ZShjb25zdCBWYWx1ZVR5cGUmKTsK
ICAgICAgICAgYm9vbCByZW1vdmUoaXRlcmF0b3IpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgICAgICB2b2lkIHJlbW92ZUlmKGNvbnN0IEZ1bmN0b3ImKTsKICAgICAg
ICAgdm9pZCBjbGVhcigpOwogCiAgICAgICAgIFZhbHVlVHlwZSB0YWtlKGNvbnN0IFZhbHVlVHlw
ZSYpOwpAQCAtMjUxLDYgKzI1MywxMyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6cmVt
b3ZlSWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIG1faW1wbC5yZW1v
dmVJZihmdW5jdG9yKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWPgogICAgIGlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OmNsZWFy
KCkKICAgICB7CiAgICAgICAgIG1faW1wbC5jbGVhcigpOyAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274353</attachid>
            <date>2016-03-17 18:43:30 -0700</date>
            <delta_ts>2016-03-17 19:22:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155594-20160317184328.patch</filename>
            <type>text/plain</type>
            <size>19080</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
YjlmNWZkODhhNDY5YzQyOTIzY2JlYmMxNGJmMWU0NDMwNzBmMjQ4Li43NzJiMzdlZWNkY2ZmOTkw
MjhiNzViMzc3ZTg3ZTQ4ZDJmYzM3MTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NiBAQAorMjAxNi0wMy0xNyAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBNYWtlIENTRSdzIEltcHVyZURhdGEgZmFzdGVyIHdoZW4g
ZGVhbGluZyB3aXRoIGxhcmdlIGJsb2NrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW4gc29tZSB0ZXN0cyB3aXRoIGxhcmdlIGJsb2NrcywgdGhlIHRp
bWUgc3BlbnQgaW4gREZHJ3MgTG9jYWxDU0UKKyAgICAgICAgY2FuIGJlIG92ZXIgMTAlIG9mIHRo
ZSB0b3RhbCBjb21waWxlIHRpbWUuCisgICAgICAgIEluIHRob3NlIGNhc2VzLCBMb2NhbENTRSBp
cyBjb21wbGV0ZWx5IGRvbWluYXRlZCBieSBoYW5kbGluZyBsYXJnZQorICAgICAgICBibG9ja3Mu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhlIG1vc3Qgb2J2aW91cyBob3Qgc3Bv
dHMgSW1wdXJlRGF0YSdzIGhhbmRsaW5nLgorCisgICAgICAgIEluaXRpYWxseSwgbW9zdCBvZiB0
aGUgdGltZSB3YXMgZ29pbmcgaW50byBIYXNoVGFibGU6OnJlaGFzaCgpLgorICAgICAgICBUaGUg
cmVhc29uIGlzIHRoZSBidWNrZXRzIGFyZSA8SGVhcExvY2F0aW9uLCBMYXp5Tm9kZT4gZ2lnYW50
aWMuCisgICAgICAgIFRoZSBoYXNoIHRhYmxlIHdvdWxkIGVhc2lseSBnZXQgaW50byBzZXZlcmFs
IGtpbG9ieXRlcyBhbmQgdGhlIENQVQorICAgICAgICB3YXMgc3BlbmRpbmcgbW9yZSB0aW1lIGRl
YWxpbmcgd2l0aCBtZW1vcnkgdGhhbiBhbnl0aGluZy4KKworICAgICAgICBUbyBzb2x2ZSB0aGF0
LCBJIG1vdmVkIHRoZSBwYWlycyBsYXppbHkgdG8gdGhlIGhlYXAuIFRoZSB0YWJsZSBpdHNlbGYK
KyAgICAgICAganVzdCBjb250YWlucyB0aGUgdW5pcXVlX3B0ciB0byB0aG9zZSB2YWx1ZXMuIFRo
aXMgbWFrZXMgdGhlIHRhYmxlCisgICAgICAgIHJlYXNvbmFibHkgc21hbGwgYW5kIHRoZSBhbGxv
Yy9kZWFsbG9jIGFyZSBwYWlkIGZvciBieSB0aGUgZmFzdCByZWhhc2goKS4KKworICAgICAgICBP
bmNlIGFkZEltcHVyZSgpIHdhcyBiZXR0ZXIsIHRoZSBuZXh0IGJpZyBib3R0bGVuZWNrIHdhcyBj
bG9iYmVyKCkuCisgICAgICAgIEZvciBlYWNoIGNsb2JiZXIoKSwgd2UgbmVlZCB0byBnbyBvdmVy
IHRoZSBlbnRpcmUgbWFwIGFuZCB0ZXN0IGVhY2ggdmFsdWUuCisgICAgICAgIFRoYXQgbG9vcCB3
YXMgd2hlcmUgbW9zdCBvZiB0aGUgdGltZSB3YXMgZ29pbmcuCisKKyAgICAgICAgTW9zdCBjYWxs
cyB0byBjbG9iYmVyKCkgY29tZSBmcm9tIHR3byBraW5kczogU2lkZVN0YXRlIGFuZCBTdGFjay4K
KworICAgICAgICBTaWRlU3RhdGUgaXMgZWFzeTogaXQgaXMgbmV2ZXIgZGVmJ2VkIHNvIHdlIGNh
biBhbHdheXMgc2tpcCBpdC4KKworICAgICAgICBTdGFjayBpcyBkaXNqb2ludCBmcm9tIEhlYXAg
dG9vIHNvIHdlIGNhbiBhbHNvIHB1dCBpdCBzZXBhcmF0ZWx5LgorCisgICAgICAgIFNwbGl0dGlu
ZyB0aGUgbWFwIGludG8gMiBoZWxwZWQgcmVkdWNlIHRoZSBvdmVyaGVhZC4gVGhlIG1hcHMgYXJl
OgorICAgICAgICAtU3RhY2sKKyAgICAgICAgLUhlYXAKKworICAgICAgICBIYXZpbmcgU3RhY2sg
YWxvbmUgd2FzIG5vdCBlbm91Z2ggZm9yIG1hbnkgYmxvY2tzLiBJbiBzb21lIGNhc2VzLAorICAg
ICAgICB5b3UgaGF2ZSBhIHRvbiBvZiBTZXRMb2NhbC9HZXRMb2NhbCBhbmQgaGF2aW5nIFN0YWNr
IHNlcGFyYXRlbHkKKyAgICAgICAgbWFrZXMgbm8gZGlmZmVyZW5jZS4KKworICAgICAgICBUbyBz
b2x2ZSB0aGF0LCBJIHNwbGl0IFN0YWNrIGluIHR3bzogYSBtYXAgYWRkcmVzc2VkIGJ5IEFic3Ry
YWN0SGVhcAorICAgICAgICArIHVuaXF1ZSBIZWFwTG9jYXRpb24gYW5kIGEgZmFsbGJhY2sgbWFw
IGZvciBldmVyeXRoaW5nIGVsc2UuCisgICAgICAgIFNpbmNlIG1vc3QgU3RhY2sgYXJlIG5vdCBU
T1AgYW5kIGFyZSB1bmlxdWUgcGVyIEFic3RyYWN0SGVhcCwKKyAgICAgICAgSSBnZXQgTygxKSBj
bG9iYmVyIGluIG1vc3QgY2FzZXMuCisKKyAgICAgICAgSSBjb3VsZCBhY2hpZXZlIHRoZSBzYW1l
IHJlc3VsdCB3aXRoIGEgY3VzdG9tIGhhc2ggc3RydWN0dXJlLgorICAgICAgICBJIGRvbid0IHRo
aW5rIGl0IGlzIHdvcnRoIHRoZSBlZmZvcnQsIGluIG1vc3QgY2FzZXMsIG1fZmFsbGJhY2tTdGFj
a01hcAorICAgICAgICBoYXMgYSBzaXplIG9mIHplcm8gb3Igb25lLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggaW50cm9kdWNlcyBhIGxvdCBvZiBjb3VwbGluZyBiZXR3ZWVuIENTRSBhbmQgQWJzdHJh
Y3RIZWFwLgorICAgICAgICBUbyByZWR1Y2UgdGhlIHJpc2sgb2YgYnVncywgdGhlIG9sZCBtYXAg
aXMgc3RpbGwgbWFpbnRhaW5lZCBpbiBkZWJ1ZworICAgICAgICBhbmQgZWFjaCBzdGVwIGNoZWNr
cyB0aGF0IHRoZSByZXN1bHRzIGFyZSB0aGUgc2FtZSBhcyB0aGUgbmV3IGltcGxlbWVudGF0aW9u
LgorCisgICAgICAgIEEgbmV3IHZhbGlkYXRpb24gc3RlcCBhbHNvIHZlcmlmeSB0aGUgc3Ryb25n
IGFzc3VtcHRpb25zIG1hZGUgYnkgQ1NFOgorICAgICAgICAtU2lkZVN0YXRlIGFuZCBXb3JsZCBh
cmUgbmV2ZXIgZGVmKCkuCisgICAgICAgIC1XZSBuZXZlciB3cml0ZSBIRUFQIFRPUCwgd2Ugb25s
eSB3cml0ZSBzcGVjaWZpYyBoZWFwIGxvY2F0aW9uLgorCisgICAgICAgICogZGZnL0RGR0NTRVBo
YXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0aW9uLmg6CisgICAgICAgICogZGZn
L0RGR0xhenlOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eU5vZGU6Omhhc2gpOgorCiAy
MDE2LTAzLTE0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVkdWNlIGdlbmVyYXRlZCBKU09OIEhlYXBTbmFwc2hvdCBzaXplCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGU5ZDA3M2Ux
YmEzYWE5ZGUxZTAwMWVlNTJjZjUwYWY0NDJmYzVmOWIuLmVhZjI2MjU1M2I1ZWRlMmY5NDYxZTBl
ZTM3MGE3ODI2MDkxM2I1OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMDMtMTcgIEJlbmph
bWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gTWFrZSBD
U0UncyBJbXB1cmVEYXRhIGZhc3RlciB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBibG9ja3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTU5NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0hhc2hT
ZXQuaDoKKyAgICAgICAgKFdURjo6Vj46OnJlbW92ZUlmKToKKwogMjAxNi0wMy0xMyAgSm9zZXBo
IFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBFTkFCTEUo
RVM2X1RFTVBMQVRFX0xJVEVSQUxfU1lOVEFYKSBndWFyZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAKaW5kZXggMWNkZWU0ZGY4ZjI3YmViZDg3YmI2ZjhjNWRjMzBk
Y2UwOTI3MDkwYy4uN2NiNGM2MmY0NTMwNTM4M2MxOGQxZWIxZjczODI5N2JiNzNmODE5OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKQEAgLTUxLDI3ICs1MSwy
MjcgQEAgbmFtZXNwYWNlIHsKIAogY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKLWNsYXNz
IENsb2JiZXJGaWx0ZXIgeworY2xhc3MgSW1wdXJlRGF0YVNsb3QgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEltcHVyZURhdGFTbG90KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBDbG9iYmVyRmlsdGVyKEFic3RyYWN0SGVhcCBoZWFwKQotICAgICAgICA6
IG1faGVhcChoZWFwKQorICAgIEhlYXBMb2NhdGlvbiBrZXk7CisgICAgTGF6eU5vZGUgdmFsdWU7
CisgICAgdW5zaWduZWQgaGFzaDsKK307CisKK3N0cnVjdCBJbXB1cmVEYXRhU2xvdEhhc2ggOiBw
dWJsaWMgRGVmYXVsdEhhc2g8c3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90Pj46Okhhc2gg
eworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVE
YXRhU2xvdD4mIGtleSkKICAgICB7CisgICAgICAgIHJldHVybiBrZXktPmhhc2g7CiAgICAgfQot
ICAgIAotICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBJbXB1cmVNYXA6OktleVZhbHVlUGFpclR5
cGUmIHBhaXIpIGNvbnN0CisKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBzdGQ6OnVuaXF1
ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+JiBhLCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0
YVNsb3Q+JiBiKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGVhcC5vdmVybGFwcyhwYWlyLmtl
eS5oZWFwKCkpOworICAgICAgICAvLyBUaGUgSW1wdXJlRGF0YVNsb3QgYXJlIHVuaXF1ZSBwZXIg
dGFibGUgcGVyIEhlYXBMb2NhdGlvbi4gVGhpcyBsZXRzIHVzIGNvbXBhcmUgdGhlIGtleQorICAg
ICAgICAvLyBieSBqdXN0IGNvbXBhcmluZyB0aGUgcG9pbnRlcnMgb2YgdGhlIHVuaXF1ZSBJbXB1
cmVEYXRhU2xvdHMuCisgICAgICAgIEFTU0VSVChhICE9IGIgfHwgYS0+a2V5ID09IGItPmtleSk7
CisgICAgICAgIHJldHVybiBhID09IGI7CiAgICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBBYnN0
cmFjdEhlYXAgbV9oZWFwOwogfTsKIAotaW5saW5lIHZvaWQgY2xvYmJlcihJbXB1cmVNYXAmIG1h
cCwgQWJzdHJhY3RIZWFwIGhlYXApCi17Ci0gICAgQ2xvYmJlckZpbHRlciBmaWx0ZXIoaGVhcCk7
Ci0gICAgbWFwLnJlbW92ZUlmKGZpbHRlcik7Ci19CitzdHJ1Y3QgSW1wdXJlRGF0YVRyYW5zbGF0
b3IgeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEhlYXBMb2NhdGlvbiYga2V5KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGtleS5oYXNoKCk7CisgICAgfQorCisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiYgc2xvdCwgY29u
c3QgSGVhcExvY2F0aW9uJiBrZXkpCisgICAgeworICAgICAgICBpZiAoIXNsb3QpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChIYXNoVHJhaXRzPHN0ZDo6dW5pcXVlX3B0
cjxJbXB1cmVEYXRhU2xvdD4+Ojppc0RlbGV0ZWRWYWx1ZShzbG90KSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHNsb3QtPmtleSA9PSBrZXk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4m
IHNsb3QsIGNvbnN0IEhlYXBMb2NhdGlvbiYga2V5LCB1bnNpZ25lZCBoYXNoQ29kZSkKKyAgICB7
CisgICAgICAgIG5ldyAoTm90TnVsbCwgc3RkOjphZGRyZXNzb2Yoc2xvdCkpIHN0ZDo6dW5pcXVl
X3B0cjxJbXB1cmVEYXRhU2xvdD4obmV3IEltcHVyZURhdGFTbG90IHtrZXksIExhenlOb2RlKCks
IGhhc2hDb2RlfSk7CisgICAgfQorfTsKKworY2xhc3MgSW1wdXJlTWFwIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbXB1cmVNYXApOwor
cHVibGljOgorICAgIEltcHVyZU1hcCgpID0gZGVmYXVsdDsKKworICAgIEltcHVyZU1hcChJbXB1
cmVNYXAmJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1faGVhcE1hcC5zd2FwKG90aGVyLm1faGVh
cE1hcCk7CisgICAgICAgIG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuc3dhcChvdGhlci5tX2Fic3Ry
YWN0SGVhcFN0YWNrTWFwKTsKKyAgICAgICAgbV9mYWxsYmFja1N0YWNrTWFwLnN3YXAob3RoZXIu
bV9mYWxsYmFja1N0YWNrTWFwKTsKKyNpZiAhZGVmaW5lZChOREVCVUcpCisgICAgICAgIG1fZGVi
dWdJbXB1cmVEYXRhLnN3YXAob3RoZXIubV9kZWJ1Z0ltcHVyZURhdGEpOworI2VuZGlmCisgICAg
fQorCisgICAgY29uc3QgSW1wdXJlRGF0YVNsb3QqIGFkZChjb25zdCBIZWFwTG9jYXRpb24mIGxv
Y2F0aW9uLCBjb25zdCBMYXp5Tm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGNvbnN0IEltcHVy
ZURhdGFTbG90KiByZXN1bHQgPSBhZGRJbXBsKGxvY2F0aW9uLCBub2RlKTsKKworI2lmICFkZWZp
bmVkKE5ERUJVRykKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2RlYnVnSW1wdXJlRGF0YS5h
ZGQobG9jYXRpb24sIG5vZGUpOworICAgICAgICBBU1NFUlQoISFyZXN1bHQgPT0gIWFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIExhenlOb2RlIGdldChjb25zdCBIZWFwTG9jYXRpb24mIGxvY2F0aW9uKSBjb25zdAorICAg
IHsKKyAgICAgICAgTGF6eU5vZGUgcmVzdWx0ID0gZ2V0SW1wbChsb2NhdGlvbik7CisjaWYgIWRl
ZmluZWQoTkRFQlVHKQorICAgICAgICBBU1NFUlQocmVzdWx0ID09IG1fZGVidWdJbXB1cmVEYXRh
LmdldChsb2NhdGlvbikpOworI2VuZGlmCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgdm9pZCBjbG9iYmVyKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChoZWFwLmtpbmQoKSkgeworICAgICAgICBjYXNlIFdvcmxkOiB7CisgICAgICAgICAgICBj
bGVhcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBTaWRl
U3RhdGU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGFjazogeworICAgICAg
ICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKKyAgICAgICAgICAgIG1fYWJz
dHJhY3RIZWFwU3RhY2tNYXAucmVtb3ZlKGhlYXApOworICAgICAgICAgICAgY2xvYmJlcihtX2Zh
bGxiYWNrU3RhY2tNYXAsIGhlYXApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNsb2JiZXIobV9oZWFwTWFwLCBoZWFwKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjaWYgIWRlZmluZWQoTkRFQlVHKQorICAgICAg
ICBtX2RlYnVnSW1wdXJlRGF0YS5yZW1vdmVJZihbaGVhcF0oY29uc3QgSGFzaE1hcDxIZWFwTG9j
YXRpb24sIExhenlOb2RlPjo6S2V5VmFsdWVQYWlyVHlwZSYgcGFpcikgLT4gYm9vbCB7CisgICAg
ICAgICAgICByZXR1cm4gaGVhcC5vdmVybGFwcyhwYWlyLmtleS5oZWFwKCkpOworICAgICAgICB9
KTsKKyAgICAgICAgQVNTRVJUKG1fZGVidWdJbXB1cmVEYXRhLnNpemUoKQorICAgICAgICAgICAg
PT0gKG1faGVhcE1hcC5zaXplKCkKKyAgICAgICAgICAgICAgICArIG1fYWJzdHJhY3RIZWFwU3Rh
Y2tNYXAuc2l6ZSgpCisgICAgICAgICAgICAgICAgKyBtX2ZhbGxiYWNrU3RhY2tNYXAuc2l6ZSgp
KSk7CisKKyAgICAgICAgY29uc3QgYm9vbCB2ZXJpZnlDbG9iYmVyID0gZmFsc2U7CisgICAgICAg
IGlmICh2ZXJpZnlDbG9iYmVyKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX2Rl
YnVnSW1wdXJlRGF0YSkKKyAgICAgICAgICAgICAgICBBU1NFUlQoISFnZXQocGFpci5rZXkpKTsK
KyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAg
ICAgICBtX2hlYXBNYXAuY2xlYXIoKTsKKyAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5j
bGVhcigpOworICAgICAgICBtX2ZhbGxiYWNrU3RhY2tNYXAuY2xlYXIoKTsKKyNpZiAhZGVmaW5l
ZChOREVCVUcpCisgICAgICAgIG1fZGVidWdJbXB1cmVEYXRhLmNsZWFyKCk7CisjZW5kaWYKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxJbXB1
cmVEYXRhU2xvdD4sIEltcHVyZURhdGFTbG90SGFzaD4gTWFwOworCisgICAgY29uc3QgSW1wdXJl
RGF0YVNsb3QqIGFkZEltcGwoY29uc3QgSGVhcExvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgTGF6
eU5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGxvY2F0aW9uLmhlYXAoKS5raW5k
KCkpIHsKKyAgICAgICAgY2FzZSBXb3JsZDoKKyAgICAgICAgY2FzZSBTaWRlU3RhdGU6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIFN0YWNr
OiB7CisgICAgICAgICAgICBBYnN0cmFjdEhlYXAgYWJzdHJhY3RIZWFwID0gbG9jYXRpb24uaGVh
cCgpOworICAgICAgICAgICAgaWYgKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkuaXNUb3AoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYWRkKG1fZmFsbGJhY2tTdGFja01hcCwgbG9jYXRpb24sIG5v
ZGUpOworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFw
LmFkZChhYnN0cmFjdEhlYXAsIG51bGxwdHIpOworICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5p
c05ld0VudHJ5KSB7CisgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5y
ZXNldChuZXcgSW1wdXJlRGF0YVNsb3Qge2xvY2F0aW9uLCBub2RlLCAwfSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGxvY2F0aW9uKQorICAgICAgICAgICAgICAg
IHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAgICAgICAgICAgcmV0
dXJuIGFkZChtX2ZhbGxiYWNrU3RhY2tNYXAsIGxvY2F0aW9uLCBub2RlKTsKKyAgICAgICAgfQor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGFkZChtX2hlYXBNYXAsIGxvY2F0
aW9uLCBub2RlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisK
KyAgICBMYXp5Tm9kZSBnZXRJbXBsKGNvbnN0IEhlYXBMb2NhdGlvbiYgbG9jYXRpb24pIGNvbnN0
CisgICAgeworICAgICAgICBzd2l0Y2ggKGxvY2F0aW9uLmhlYXAoKS5raW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBXb3JsZDoKKyAgICAgICAgY2FzZSBTaWRlU3RhdGU6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIFN0YWNrOiB7CisgICAgICAg
ICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5maW5kKGxvY2F0aW9u
LmhlYXAoKSk7CisgICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9hYnN0cmFjdEhlYXBTdGFj
a01hcC5lbmQoKQorICAgICAgICAgICAgICAgICYmIGl0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGxv
Y2F0aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUtPnZhbHVlOwor
ICAgICAgICAgICAgcmV0dXJuIGdldChtX2ZhbGxiYWNrU3RhY2tNYXAsIGxvY2F0aW9uKTsKKyAg
ICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGdldChtX2hlYXBN
YXAsIGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTGF6eU5vZGUoKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgY29uc3QgSW1wdXJlRGF0YVNsb3QqIGFkZChNYXAmIG1hcCwgY29u
c3QgSGVhcExvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgTGF6eU5vZGUmIG5vZGUpCisgICAgewor
ICAgICAgICBhdXRvIHJlc3VsdCA9IG1hcC5hZGQ8SW1wdXJlRGF0YVRyYW5zbGF0b3I+KGxvY2F0
aW9uKTsKKyAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAoKnJl
c3VsdC5pdGVyYXRvciktPnZhbHVlID0gbm9kZTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPmdldCgpOworICAg
IH0KKworICAgIHN0YXRpYyBMYXp5Tm9kZSBnZXQoY29uc3QgTWFwJiBtYXAsIGNvbnN0IEhlYXBM
b2NhdGlvbiYgbG9jYXRpb24pCisgICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbWFwLmZp
bmQ8SW1wdXJlRGF0YVRyYW5zbGF0b3I+KGxvY2F0aW9uKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9y
ICE9IG1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiAoKml0ZXJhdG9yKS0+dmFsdWU7Cisg
ICAgICAgIHJldHVybiBMYXp5Tm9kZSgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNsb2Ji
ZXIoTWFwJiBtYXAsIEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgbWFwLnJlbW92
ZUlmKFtoZWFwXShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+JiBzbG90KSAt
PiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBoZWFwLm92ZXJsYXBzKHNsb3QtPmtleS5oZWFw
KCkpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBNYXAgbV93b3JsZE1hcDsKKyAgICBNYXAg
bV9oZWFwTWFwOworICAgIE1hcCBtX3NpZGVTdGF0ZU1hcDsKKworICAgIC8vIFRoZSBtYWpvcml0
eSBvZiBJbXB1cmUgU3RhY2sgU2xvdHNhcmUgdW5pcXVlIHBlciB2YWx1ZS4KKyAgICAvLyBUaGlz
IGlzIHZlcnkgdXNlZnVsIGZvciBmYXN0IGNsb2JiZXIoKSwgd2UgY2FuIGp1c3QgcmVtb3ZlIHRo
ZSBzbG90IGFkZHJlc3NlZCBieSBBYnN0cmFjdEhlYXAKKyAgICAvLyBpbiBPKDEpLgorICAgIC8v
CisgICAgLy8gV2hlbiB0aGVyZSBhcmUgY29uZmxpY3QsIGFueSBhZGRpdGlvbmFsIEhlYXBMb2Nh
dGlvbiBpcyBhZGRlZCBpbiB0aGUgZmFsbGJhY2sgbWFwLgorICAgIC8vIFRoaXMgd29ya3Mgd2Vs
bCBiZWNhdXNlIGZhbGxiYWNrU3RhY2tNYXAgcmVtYWlucyB0aW55LgorICAgIC8vCisgICAgLy8g
T25lIGNhbm5vdCBhc3N1bWUgYSB1bmlxdWUgSW1wdXJlRGF0YSBpcyBpbiBtX2Fic3RyYWN0SGVh
cFN0YWNrTWFwLiBJdCBtYXkgaGF2ZSBiZWVuCisgICAgLy8gYSBkdXBsaWNhdGUgaW4gdGhlIHBh
c3QgYW5kIG5vdyBvbmx5IGxpdmUgaW4gbV9mYWxsYmFja1N0YWNrTWFwLgorICAgIC8vCisgICAg
Ly8gT2J2aW91c2x5LCBUT1AgYWx3YXlzIGdvZXMgaW50byBtX2ZhbGxiYWNrU3RhY2tNYXAgc2lu
Y2UgaXQgZG9lcyBub3QgaGF2ZSBhIHVuaXF1ZSB2YWx1ZS4KKyAgICBIYXNoTWFwPEFic3RyYWN0
SGVhcCwgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90Pj4gbV9hYnN0cmFjdEhlYXBTdGFj
a01hcDsKKyAgICBNYXAgbV9mYWxsYmFja1N0YWNrTWFwOworCisjaWYgIWRlZmluZWQoTkRFQlVH
KQorICAgIEhhc2hNYXA8SGVhcExvY2F0aW9uLCBMYXp5Tm9kZT4gbV9kZWJ1Z0ltcHVyZURhdGE7
CisjZW5kaWYKK307CiAKIGNsYXNzIExvY2FsQ1NFUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVi
bGljOgpAQCAtMTMxLDYgKzMzMSw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgICAgIHZvaWQgd3Jp
dGUoQWJzdHJhY3RIZWFwIGhlYXApCiAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChoZWFwLmtp
bmQoKSA9PSBTaWRlU3RhdGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pbXB1cmVMZW5ndGg7ICsraSkgewogICAgICAg
ICAgICAgICAgIGlmIChoZWFwLm92ZXJsYXBzKG1faW1wdXJlTWFwW2ldLmtleS5oZWFwKCkpKQog
ICAgICAgICAgICAgICAgICAgICBtX2ltcHVyZU1hcFtpLS1dID0gbV9pbXB1cmVNYXBbLS1tX2lt
cHVyZUxlbmd0aF07CkBAIC0xOTIsNyArMzk1LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICAgICAg
dm9pZCB3cml0ZShBYnN0cmFjdEhlYXAgaGVhcCkKICAgICAgICAgewotICAgICAgICAgICAgY2xv
YmJlcihtX2ltcHVyZU1hcCwgaGVhcCk7CisgICAgICAgICAgICBtX2ltcHVyZU1hcC5jbG9iYmVy
KGhlYXApOwogICAgICAgICB9CiAgICAgCiAgICAgICAgIE5vZGUqIGFkZFB1cmUoUHVyZVZhbHVl
IHZhbHVlLCBOb2RlKiBub2RlKQpAQCAtMjA4LDE3ICs0MTEsMTYgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIHJldHVybiBtX2ltcHVyZU1hcC5nZXQobG9jYXRpb24pOwogICAgICAgICB9CiAgICAg
Ci0gICAgICAgIExhenlOb2RlIGFkZEltcHVyZShIZWFwTG9jYXRpb24gbG9jYXRpb24sIExhenlO
b2RlIG5vZGUpCisgICAgICAgIExhenlOb2RlIGFkZEltcHVyZShjb25zdCBIZWFwTG9jYXRpb24m
IGxvY2F0aW9uLCBjb25zdCBMYXp5Tm9kZSYgbm9kZSkKICAgICAgICAgewotICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBtX2ltcHVyZU1hcC5hZGQobG9jYXRpb24sIG5vZGUpOwotICAgICAgICAg
ICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAg
ICBpZiAoY29uc3QgSW1wdXJlRGF0YVNsb3QqIHNsb3QgPSBtX2ltcHVyZU1hcC5hZGQobG9jYXRp
b24sIG5vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBzbG90LT52YWx1ZTsKKyAgICAgICAg
ICAgIHJldHVybiBMYXp5Tm9kZSgpOwogICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBIYXNoTWFwPFB1cmVWYWx1ZSwgTm9kZSo+IG1fcHVyZU1hcDsKLSAgICAgICAgSGFzaE1hcDxI
ZWFwTG9jYXRpb24sIExhenlOb2RlPiBtX2ltcHVyZU1hcDsKKyAgICAgICAgSW1wdXJlTWFwIG1f
aW1wdXJlTWFwOwogICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBzPgpAQCAtMzI3
LDcgKzUyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAg
ICAgICB9CiAgICAgCi0gICAgICAgIHZvaWQgZGVmKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTGF6
eU5vZGUgdmFsdWUpCisgICAgICAgIHZvaWQgZGVmKGNvbnN0IEhlYXBMb2NhdGlvbiYgbG9jYXRp
b24sIGNvbnN0IExhenlOb2RlJiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgTGF6eU5v
ZGUgbWF0Y2ggPSBtX21hcHMuYWRkSW1wdXJlKGxvY2F0aW9uLCB2YWx1ZSk7CiAgICAgICAgICAg
ICBpZiAoIW1hdGNoKQpAQCAtNDYxLDEwICs2NjMsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCB3cml0ZShBYnN0cmFjdEhlYXAgaGVhcCkKICAgICB7Ci0gICAgICAgIGNsb2JiZXIobV9pbXB1
cmVEYXRhLT5hdmFpbGFibGVBdFRhaWwsIGhlYXApOworICAgICAgICBtX2ltcHVyZURhdGEtPmF2
YWlsYWJsZUF0VGFpbC5jbG9iYmVyKGhlYXApOwogICAgICAgICBtX3dyaXRlc1NvRmFyLmFkZCho
ZWFwKTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgQ2xv
YmJlcmVkLCBuZXcgdGFpbCBtYXA6ICIsIG1hcER1bXAobV9pbXB1cmVEYXRhLT5hdmFpbGFibGVB
dFRhaWwpLCAiXG4iKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBkZWYoUHVyZVZhbHVlIHZhbHVl
KQpAQCAtNTc5LDggKzc3OSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgICAgICBJdCBzdHJpY3RseSBkb21pbmF0ZXMuXG4iKTsKICAgICAgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZGF0YS5kaWRWaXNpdCk7CiAgICAgICAgICAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFtYXRjaCk7Ci0gICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZhaWxh
YmlsaXR5IG1hcDogIiwgbWFwRHVtcChkYXRhLmF2YWlsYWJsZUF0VGFpbCksICJcbiIpOwogICAg
ICAgICAgICAgICAgIG1hdGNoID0gZGF0YS5hdmFpbGFibGVBdFRhaWwuZ2V0KGxvY2F0aW9uKTsK
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgICAgICBBdmFpbGFiaWxpdHk6ICIsIG1hdGNoLCAiXG4iKTsKQEAgLTYzOSw3ICs4Mzcs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgICBBZGRpbmcgYXQtdGFpbCBtYXBwaW5nOiAiLCBsb2NhdGlvbiwgIiAtPiAi
LCB2YWx1ZSwgIlxuIik7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1faW1wdXJlRGF0YS0+
YXZhaWxhYmxlQXRUYWlsLmFkZChsb2NhdGlvbiwgdmFsdWUpOwotICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCAhcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAppbmRleCAxMjlj
NjE0NDNiMmFkYzY3NTNkM2YwYzc5MjI0MTZmYjE3YTY0NGFkLi4yMGIzODE2Y2M1MmY0NzNmZmEy
OTU1M2MwOWU1ZjM2OTY4MmFhNzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0hlYXBMb2NhdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SGVhcExvY2F0aW9uLmgKQEAgLTE1NSwxMiArMTU1LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFz
aFRyYWl0czxKU0M6OkRGRzo6SGVhcExvY2F0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxK
U0MKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKLQotdHlwZWRlZiBIYXNoTWFwPEhlYXBMb2NhdGlvbiwgTGF6eU5vZGU+IEltcHVyZU1hcDsK
LQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CiAKICNlbmRpZiAvLyBERkdIZWFwTG9jYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMYXp5Tm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdMYXp5Tm9kZS5oCmluZGV4IGZmZDU3MmY4NThmZTRhNTU5ODRkM2VjOWM4M2UzNGVlMmMxNDFk
MjMuLjhkOGY0OGQzNmM0YTdkMjAxZThkMGM2ZmQ4YzY0ZWMxYmZlY2IzMzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eU5vZGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0xhenlOb2RlLmgKQEAgLTExMCw5ICsxMTAsMTAgQEAgcHVibGlj
OgogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAoYXNWYWx1
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxGcm96ZW5WYWx1ZSo+OjpoYXNo
KGFzVmFsdWUoKSk7Ci0gICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8Tm9kZSo+OjpoYXNoKG1f
bm9kZSk7CisgICAgICAgIHZvaWQqIHRvSGFzaCA9IG1fbm9kZTsKKyAgICAgICAgaWYgKEZyb3pl
blZhbHVlKiB2YWx1ZSA9IGFzVmFsdWUoKSkKKyAgICAgICAgICAgIHRvSGFzaCA9IHZhbHVlOwor
ICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPHZvaWQqPjo6aGFzaCh0b0hhc2gpOwogICAgIH0K
IAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMYXp5Tm9kZSYgb3RoZXIpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IDNmZTFkYTI4ZjAwOWYw
YzQ5ZjI3OGEwNGQxZTMxNzIyNDRjM2MxZDguLjVjOGRhZDk5ZjZkY2QxZjdiYjdiY2I2YjJiMTA3
YzRhNzIwMTg5OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFs
aWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
CkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2Rl
QmxvY2tXaXRoSklUVHlwZS5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKICNpbmNsdWRl
ICJERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCkBAIC0yOTgsNiArMjk5LDQ3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHZhbGlkYXRlU1NBKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAg
ICAgIC8vIFZhbGlkYXRlIGNsb2JiZXJlZCBzdGF0ZXMuCisgICAgICAgIHN0cnVjdCBEZWZMYW1i
ZGFBZGFwdG9yIHsKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChQdXJlVmFsdWUpPiBw
dXJlVmFsdWU7CisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoSGVhcExvY2F0aW9uLCBM
YXp5Tm9kZSk+IGxvY2F0aW9uQW5kTm9kZTsKKworICAgICAgICAgICAgdm9pZCBvcGVyYXRvcigp
KFB1cmVWYWx1ZSB2YWx1ZSkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBw
dXJlVmFsdWUodmFsdWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIG9wZXJh
dG9yKCkoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBMYXp5Tm9kZSBub2RlKSBjb25zdAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGxvY2F0aW9uQW5kTm9kZShsb2NhdGlvbiwgbm9kZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAo
Tm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGNsb2JiZXJpemUobV9ncmFw
aCwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChBYnN0cmFjdEhlYXApIHsgfSwKKyAg
ICAgICAgICAgICAgICAgICAgWyZdIChBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ1NFIGFzc3VtZXMgdGhhdCBIRUFQ
IFRPUCBpcyBuZXZlciB3cml0dGVuLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhp
cyBhc3N1bXB0aW9uIGlzIHdlYWtlbmVkLCB5b3UgbmVlZCB0byB1cGRhdGUgY2xvYmJlcmluZwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gQ1NFIGFjY29yZGluZ2x5LgorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGhlYXAua2luZCgpID09IFN0YWNrKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpOwor
ICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBEZWZMYW1iZGFBZGFw
dG9yIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoUHVyZVZhbHVlKSB7IH0sCisgICAg
ICAgICAgICAgICAgICAgICAgICBbJl0gKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTGF6eU5vZGUp
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG5vZGUpLCBsb2NhdGlvbi5oZWFwKCkua2luZCgpICE9IFNpZGVTdGF0ZSk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNb3JlIHNwZWNpZmljIGtpbmRzIHNob3Vs
ZCBiZSB1c2VkIGluc3RlYWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUpLCBsb2NhdGlvbi5oZWFwKCkua2luZCgpICE9IFdvcmxkKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIGxvY2F0aW9uLmhlYXAoKS5raW5kKCkgIT0g
SGVhcCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiBwcml2YXRlOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvSGFzaFNldC5oIGIvU291cmNlL1dURi93dGYvSGFzaFNldC5oCmlu
ZGV4IDY4Zjk1NmNmMzU0ZmY3Yjg4NTZlZjUzZWU2ZTk3YmJjMGM2ZWY1ZWQuLmM5YTJmYzFjNmQ1
MmJjZTQyMDg0NjU1MTk4MDQ0MjlkN2U0MjJlYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L0hhc2hTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKQEAgLTEwMSw2ICsxMDEs
OCBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgICAgICBib29sIHJlbW92ZShjb25zdCBWYWx1ZVR5
cGUmKTsKICAgICAgICAgYm9vbCByZW1vdmUoaXRlcmF0b3IpOworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgorICAgICAgICB2b2lkIHJlbW92ZUlmKGNvbnN0IEZ1bmN0b3ImKTsK
ICAgICAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgICAgIFZhbHVlVHlwZSB0YWtlKGNvbnN0IFZh
bHVlVHlwZSYpOwpAQCAtMjUxLDYgKzI1MywxMyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBW
Pjo6cmVtb3ZlSWYoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIG1faW1w
bC5yZW1vdmVJZihmdW5jdG9yKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgogICAgIGlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46
OmNsZWFyKCkKICAgICB7CiAgICAgICAgIG1faW1wbC5jbGVhcigpOyAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274357</attachid>
            <date>2016-03-17 19:22:44 -0700</date>
            <delta_ts>2016-03-17 19:23:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155594-20160317192243.patch</filename>
            <type>text/plain</type>
            <size>20485</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
YjlmNWZkODhhNDY5YzQyOTIzY2JlYmMxNGJmMWU0NDMwNzBmMjQ4Li43NzJiMzdlZWNkY2ZmOTkw
MjhiNzViMzc3ZTg3ZTQ4ZDJmYzM3MTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NiBAQAorMjAxNi0wMy0xNyAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBNYWtlIENTRSdzIEltcHVyZURhdGEgZmFzdGVyIHdoZW4g
ZGVhbGluZyB3aXRoIGxhcmdlIGJsb2NrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW4gc29tZSB0ZXN0cyB3aXRoIGxhcmdlIGJsb2NrcywgdGhlIHRp
bWUgc3BlbnQgaW4gREZHJ3MgTG9jYWxDU0UKKyAgICAgICAgY2FuIGJlIG92ZXIgMTAlIG9mIHRo
ZSB0b3RhbCBjb21waWxlIHRpbWUuCisgICAgICAgIEluIHRob3NlIGNhc2VzLCBMb2NhbENTRSBp
cyBjb21wbGV0ZWx5IGRvbWluYXRlZCBieSBoYW5kbGluZyBsYXJnZQorICAgICAgICBibG9ja3Mu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhlIG1vc3Qgb2J2aW91cyBob3Qgc3Bv
dHMgSW1wdXJlRGF0YSdzIGhhbmRsaW5nLgorCisgICAgICAgIEluaXRpYWxseSwgbW9zdCBvZiB0
aGUgdGltZSB3YXMgZ29pbmcgaW50byBIYXNoVGFibGU6OnJlaGFzaCgpLgorICAgICAgICBUaGUg
cmVhc29uIGlzIHRoZSBidWNrZXRzIGFyZSA8SGVhcExvY2F0aW9uLCBMYXp5Tm9kZT4gZ2lnYW50
aWMuCisgICAgICAgIFRoZSBoYXNoIHRhYmxlIHdvdWxkIGVhc2lseSBnZXQgaW50byBzZXZlcmFs
IGtpbG9ieXRlcyBhbmQgdGhlIENQVQorICAgICAgICB3YXMgc3BlbmRpbmcgbW9yZSB0aW1lIGRl
YWxpbmcgd2l0aCBtZW1vcnkgdGhhbiBhbnl0aGluZy4KKworICAgICAgICBUbyBzb2x2ZSB0aGF0
LCBJIG1vdmVkIHRoZSBwYWlycyBsYXppbHkgdG8gdGhlIGhlYXAuIFRoZSB0YWJsZSBpdHNlbGYK
KyAgICAgICAganVzdCBjb250YWlucyB0aGUgdW5pcXVlX3B0ciB0byB0aG9zZSB2YWx1ZXMuIFRo
aXMgbWFrZXMgdGhlIHRhYmxlCisgICAgICAgIHJlYXNvbmFibHkgc21hbGwgYW5kIHRoZSBhbGxv
Yy9kZWFsbG9jIGFyZSBwYWlkIGZvciBieSB0aGUgZmFzdCByZWhhc2goKS4KKworICAgICAgICBP
bmNlIGFkZEltcHVyZSgpIHdhcyBiZXR0ZXIsIHRoZSBuZXh0IGJpZyBib3R0bGVuZWNrIHdhcyBj
bG9iYmVyKCkuCisgICAgICAgIEZvciBlYWNoIGNsb2JiZXIoKSwgd2UgbmVlZCB0byBnbyBvdmVy
IHRoZSBlbnRpcmUgbWFwIGFuZCB0ZXN0IGVhY2ggdmFsdWUuCisgICAgICAgIFRoYXQgbG9vcCB3
YXMgd2hlcmUgbW9zdCBvZiB0aGUgdGltZSB3YXMgZ29pbmcuCisKKyAgICAgICAgTW9zdCBjYWxs
cyB0byBjbG9iYmVyKCkgY29tZSBmcm9tIHR3byBraW5kczogU2lkZVN0YXRlIGFuZCBTdGFjay4K
KworICAgICAgICBTaWRlU3RhdGUgaXMgZWFzeTogaXQgaXMgbmV2ZXIgZGVmJ2VkIHNvIHdlIGNh
biBhbHdheXMgc2tpcCBpdC4KKworICAgICAgICBTdGFjayBpcyBkaXNqb2ludCBmcm9tIEhlYXAg
dG9vIHNvIHdlIGNhbiBhbHNvIHB1dCBpdCBzZXBhcmF0ZWx5LgorCisgICAgICAgIFNwbGl0dGlu
ZyB0aGUgbWFwIGludG8gMiBoZWxwZWQgcmVkdWNlIHRoZSBvdmVyaGVhZC4gVGhlIG1hcHMgYXJl
OgorICAgICAgICAtU3RhY2sKKyAgICAgICAgLUhlYXAKKworICAgICAgICBIYXZpbmcgU3RhY2sg
YWxvbmUgd2FzIG5vdCBlbm91Z2ggZm9yIG1hbnkgYmxvY2tzLiBJbiBzb21lIGNhc2VzLAorICAg
ICAgICB5b3UgaGF2ZSBhIHRvbiBvZiBTZXRMb2NhbC9HZXRMb2NhbCBhbmQgaGF2aW5nIFN0YWNr
IHNlcGFyYXRlbHkKKyAgICAgICAgbWFrZXMgbm8gZGlmZmVyZW5jZS4KKworICAgICAgICBUbyBz
b2x2ZSB0aGF0LCBJIHNwbGl0IFN0YWNrIGluIHR3bzogYSBtYXAgYWRkcmVzc2VkIGJ5IEFic3Ry
YWN0SGVhcAorICAgICAgICArIHVuaXF1ZSBIZWFwTG9jYXRpb24gYW5kIGEgZmFsbGJhY2sgbWFw
IGZvciBldmVyeXRoaW5nIGVsc2UuCisgICAgICAgIFNpbmNlIG1vc3QgU3RhY2sgYXJlIG5vdCBU
T1AgYW5kIGFyZSB1bmlxdWUgcGVyIEFic3RyYWN0SGVhcCwKKyAgICAgICAgSSBnZXQgTygxKSBj
bG9iYmVyIGluIG1vc3QgY2FzZXMuCisKKyAgICAgICAgSSBjb3VsZCBhY2hpZXZlIHRoZSBzYW1l
IHJlc3VsdCB3aXRoIGEgY3VzdG9tIGhhc2ggc3RydWN0dXJlLgorICAgICAgICBJIGRvbid0IHRo
aW5rIGl0IGlzIHdvcnRoIHRoZSBlZmZvcnQsIGluIG1vc3QgY2FzZXMsIG1fZmFsbGJhY2tTdGFj
a01hcAorICAgICAgICBoYXMgYSBzaXplIG9mIHplcm8gb3Igb25lLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggaW50cm9kdWNlcyBhIGxvdCBvZiBjb3VwbGluZyBiZXR3ZWVuIENTRSBhbmQgQWJzdHJh
Y3RIZWFwLgorICAgICAgICBUbyByZWR1Y2UgdGhlIHJpc2sgb2YgYnVncywgdGhlIG9sZCBtYXAg
aXMgc3RpbGwgbWFpbnRhaW5lZCBpbiBkZWJ1ZworICAgICAgICBhbmQgZWFjaCBzdGVwIGNoZWNr
cyB0aGF0IHRoZSByZXN1bHRzIGFyZSB0aGUgc2FtZSBhcyB0aGUgbmV3IGltcGxlbWVudGF0aW9u
LgorCisgICAgICAgIEEgbmV3IHZhbGlkYXRpb24gc3RlcCBhbHNvIHZlcmlmeSB0aGUgc3Ryb25n
IGFzc3VtcHRpb25zIG1hZGUgYnkgQ1NFOgorICAgICAgICAtU2lkZVN0YXRlIGFuZCBXb3JsZCBh
cmUgbmV2ZXIgZGVmKCkuCisgICAgICAgIC1XZSBuZXZlciB3cml0ZSBIRUFQIFRPUCwgd2Ugb25s
eSB3cml0ZSBzcGVjaWZpYyBoZWFwIGxvY2F0aW9uLgorCisgICAgICAgICogZGZnL0RGR0NTRVBo
YXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0aW9uLmg6CisgICAgICAgICogZGZn
L0RGR0xhenlOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eU5vZGU6Omhhc2gpOgorCiAy
MDE2LTAzLTE0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVkdWNlIGdlbmVyYXRlZCBKU09OIEhlYXBTbmFwc2hvdCBzaXplCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGU5ZDA3M2Ux
YmEzYWE5ZGUxZTAwMWVlNTJjZjUwYWY0NDJmYzVmOWIuLmVhZjI2MjU1M2I1ZWRlMmY5NDYxZTBl
ZTM3MGE3ODI2MDkxM2I1OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMDMtMTcgIEJlbmph
bWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gTWFrZSBD
U0UncyBJbXB1cmVEYXRhIGZhc3RlciB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBibG9ja3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTU5NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0hhc2hT
ZXQuaDoKKyAgICAgICAgKFdURjo6Vj46OnJlbW92ZUlmKToKKwogMjAxNi0wMy0xMyAgSm9zZXBo
IFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBFTkFCTEUo
RVM2X1RFTVBMQVRFX0xJVEVSQUxfU1lOVEFYKSBndWFyZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAKaW5kZXggMWNkZWU0ZGY4ZjI3YmViZDg3YmI2ZjhjNWRjMzBk
Y2UwOTI3MDkwYy4uOTcyOTk5NTk1NmIwZDE5MzVjNDRjMjQxNDI3ZWExMTkyOWE5YmZlNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKQEAgLTUxLDI3ICs1MSwy
MzAgQEAgbmFtZXNwYWNlIHsKIAogY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKLWNsYXNz
IENsb2JiZXJGaWx0ZXIgeworY2xhc3MgSW1wdXJlRGF0YVNsb3QgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEltcHVyZURhdGFTbG90KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBDbG9iYmVyRmlsdGVyKEFic3RyYWN0SGVhcCBoZWFwKQotICAgICAgICA6
IG1faGVhcChoZWFwKQorICAgIEhlYXBMb2NhdGlvbiBrZXk7CisgICAgTGF6eU5vZGUgdmFsdWU7
CisgICAgdW5zaWduZWQgaGFzaDsKK307CisKK3N0cnVjdCBJbXB1cmVEYXRhU2xvdEhhc2ggOiBw
dWJsaWMgRGVmYXVsdEhhc2g8c3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90Pj46Okhhc2gg
eworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVE
YXRhU2xvdD4mIGtleSkKICAgICB7CisgICAgICAgIHJldHVybiBrZXktPmhhc2g7CiAgICAgfQot
ICAgIAotICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBJbXB1cmVNYXA6OktleVZhbHVlUGFpclR5
cGUmIHBhaXIpIGNvbnN0CisKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBzdGQ6OnVuaXF1
ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+JiBhLCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0
YVNsb3Q+JiBiKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGVhcC5vdmVybGFwcyhwYWlyLmtl
eS5oZWFwKCkpOworICAgICAgICAvLyBUaGUgSW1wdXJlRGF0YVNsb3QgYXJlIHVuaXF1ZSBwZXIg
dGFibGUgcGVyIEhlYXBMb2NhdGlvbi4gVGhpcyBsZXRzIHVzIGNvbXBhcmUgdGhlIGtleQorICAg
ICAgICAvLyBieSBqdXN0IGNvbXBhcmluZyB0aGUgcG9pbnRlcnMgb2YgdGhlIHVuaXF1ZSBJbXB1
cmVEYXRhU2xvdHMuCisgICAgICAgIEFTU0VSVChhICE9IGIgfHwgYS0+a2V5ID09IGItPmtleSk7
CisgICAgICAgIHJldHVybiBhID09IGI7CiAgICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBBYnN0
cmFjdEhlYXAgbV9oZWFwOwogfTsKIAotaW5saW5lIHZvaWQgY2xvYmJlcihJbXB1cmVNYXAmIG1h
cCwgQWJzdHJhY3RIZWFwIGhlYXApCi17Ci0gICAgQ2xvYmJlckZpbHRlciBmaWx0ZXIoaGVhcCk7
Ci0gICAgbWFwLnJlbW92ZUlmKGZpbHRlcik7Ci19CitzdHJ1Y3QgSW1wdXJlRGF0YVRyYW5zbGF0
b3IgeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEhlYXBMb2NhdGlvbiYga2V5KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGtleS5oYXNoKCk7CisgICAgfQorCisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiYgc2xvdCwgY29u
c3QgSGVhcExvY2F0aW9uJiBrZXkpCisgICAgeworICAgICAgICBpZiAoIXNsb3QpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChIYXNoVHJhaXRzPHN0ZDo6dW5pcXVlX3B0
cjxJbXB1cmVEYXRhU2xvdD4+Ojppc0RlbGV0ZWRWYWx1ZShzbG90KSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHNsb3QtPmtleSA9PSBrZXk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4m
IHNsb3QsIGNvbnN0IEhlYXBMb2NhdGlvbiYga2V5LCB1bnNpZ25lZCBoYXNoQ29kZSkKKyAgICB7
CisgICAgICAgIG5ldyAoTm90TnVsbCwgc3RkOjphZGRyZXNzb2Yoc2xvdCkpIHN0ZDo6dW5pcXVl
X3B0cjxJbXB1cmVEYXRhU2xvdD4obmV3IEltcHVyZURhdGFTbG90IHtrZXksIExhenlOb2RlKCks
IGhhc2hDb2RlfSk7CisgICAgfQorfTsKKworY2xhc3MgSW1wdXJlTWFwIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbXB1cmVNYXApOwor
cHVibGljOgorICAgIEltcHVyZU1hcCgpID0gZGVmYXVsdDsKKworICAgIEltcHVyZU1hcChJbXB1
cmVNYXAmJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1faGVhcE1hcC5zd2FwKG90aGVyLm1faGVh
cE1hcCk7CisgICAgICAgIG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuc3dhcChvdGhlci5tX2Fic3Ry
YWN0SGVhcFN0YWNrTWFwKTsKKyAgICAgICAgbV9mYWxsYmFja1N0YWNrTWFwLnN3YXAob3RoZXIu
bV9mYWxsYmFja1N0YWNrTWFwKTsKKyNpZiAhZGVmaW5lZChOREVCVUcpCisgICAgICAgIG1fZGVi
dWdJbXB1cmVEYXRhLnN3YXAob3RoZXIubV9kZWJ1Z0ltcHVyZURhdGEpOworI2VuZGlmCisgICAg
fQorCisgICAgY29uc3QgSW1wdXJlRGF0YVNsb3QqIGFkZChjb25zdCBIZWFwTG9jYXRpb24mIGxv
Y2F0aW9uLCBjb25zdCBMYXp5Tm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGNvbnN0IEltcHVy
ZURhdGFTbG90KiByZXN1bHQgPSBhZGRJbXBsKGxvY2F0aW9uLCBub2RlKTsKKworI2lmICFkZWZp
bmVkKE5ERUJVRykKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2RlYnVnSW1wdXJlRGF0YS5h
ZGQobG9jYXRpb24sIG5vZGUpOworICAgICAgICBBU1NFUlQoISFyZXN1bHQgPT0gIWFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIExhenlOb2RlIGdldChjb25zdCBIZWFwTG9jYXRpb24mIGxvY2F0aW9uKSBjb25zdAorICAg
IHsKKyAgICAgICAgTGF6eU5vZGUgcmVzdWx0ID0gZ2V0SW1wbChsb2NhdGlvbik7CisjaWYgIWRl
ZmluZWQoTkRFQlVHKQorICAgICAgICBBU1NFUlQocmVzdWx0ID09IG1fZGVidWdJbXB1cmVEYXRh
LmdldChsb2NhdGlvbikpOworI2VuZGlmCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgdm9pZCBjbG9iYmVyKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChoZWFwLmtpbmQoKSkgeworICAgICAgICBjYXNlIFdvcmxkOiB7CisgICAgICAgICAgICBj
bGVhcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBTaWRl
U3RhdGU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGFjazogeworICAgICAg
ICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKKyAgICAgICAgICAgIEFTU0VS
VChoZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Cisg
ICAgICAgICAgICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBheWxvYWQoKS52
YWx1ZTMyKCkpOworICAgICAgICAgICAgY2xvYmJlcihtX2ZhbGxiYWNrU3RhY2tNYXAsIGhlYXAp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGNsb2JiZXIobV9oZWFwTWFwLCBoZWFwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisjaWYgIWRlZmluZWQoTkRFQlVHKQorICAgICAgICBtX2RlYnVnSW1wdXJlRGF0YS5y
ZW1vdmVJZihbaGVhcF0oY29uc3QgSGFzaE1hcDxIZWFwTG9jYXRpb24sIExhenlOb2RlPjo6S2V5
VmFsdWVQYWlyVHlwZSYgcGFpcikgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gaGVhcC5v
dmVybGFwcyhwYWlyLmtleS5oZWFwKCkpOworICAgICAgICB9KTsKKyAgICAgICAgQVNTRVJUKG1f
ZGVidWdJbXB1cmVEYXRhLnNpemUoKQorICAgICAgICAgICAgPT0gKG1faGVhcE1hcC5zaXplKCkK
KyAgICAgICAgICAgICAgICArIG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuc2l6ZSgpCisgICAgICAg
ICAgICAgICAgKyBtX2ZhbGxiYWNrU3RhY2tNYXAuc2l6ZSgpKSk7CisKKyAgICAgICAgY29uc3Qg
Ym9vbCB2ZXJpZnlDbG9iYmVyID0gdHJ1ZTsKKyAgICAgICAgaWYgKHZlcmlmeUNsb2JiZXIpIHsK
KyAgICAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fZGVidWdJbXB1cmVEYXRhKQorICAgICAg
ICAgICAgICAgIEFTU0VSVCghIWdldChwYWlyLmtleSkpOworICAgICAgICB9CisjZW5kaWYKKyAg
ICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1faGVhcE1hcC5jbGVhcigp
OworICAgICAgICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmNsZWFyKCk7CisgICAgICAgIG1fZmFs
bGJhY2tTdGFja01hcC5jbGVhcigpOworI2lmICFkZWZpbmVkKE5ERUJVRykKKyAgICAgICAgbV9k
ZWJ1Z0ltcHVyZURhdGEuY2xlYXIoKTsKKyNlbmRpZgorICAgIH0KKworcHJpdmF0ZToKKyAgICB0
eXBlZGVmIEhhc2hTZXQ8c3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiwgSW1wdXJlRGF0
YVNsb3RIYXNoPiBNYXA7CisKKyAgICBjb25zdCBJbXB1cmVEYXRhU2xvdCogYWRkSW1wbChjb25z
dCBIZWFwTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBMYXp5Tm9kZSYgbm9kZSkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAobG9jYXRpb24uaGVhcCgpLmtpbmQoKSkgeworICAgICAgICBjYXNlIFdv
cmxkOgorICAgICAgICBjYXNlIFNpZGVTdGF0ZToKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgU3RhY2s6IHsKKyAgICAgICAgICAgIEFic3Ry
YWN0SGVhcCBhYnN0cmFjdEhlYXAgPSBsb2NhdGlvbi5oZWFwKCk7CisgICAgICAgICAgICBpZiAo
YWJzdHJhY3RIZWFwLnBheWxvYWQoKS5pc1RvcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBh
ZGQobV9mYWxsYmFja1N0YWNrTWFwLCBsb2NhdGlvbiwgbm9kZSk7CisgICAgICAgICAgICBBU1NF
UlQoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGFic3RyYWN0SGVhcC5wYXlsb2Fk
KCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9hYnN0cmFjdEhl
YXBTdGFja01hcC5hZGQoYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1ZTMyKCksIG51bGxwdHIp
OworICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAg
ICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5yZXNldChuZXcgSW1wdXJlRGF0YVNsb3Qge2xv
Y2F0aW9uLCBub2RlLCAwfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+a2V5
ID09IGxvY2F0aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIGFkZChtX2ZhbGxiYWNrU3RhY2tNYXAs
IGxvY2F0aW9uLCBub2RlKTsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGFkZChtX2hlYXBNYXAsIGxvY2F0aW9uLCBub2RlKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBMYXp5Tm9kZSBnZXRJbXBsKGNvbnN0
IEhlYXBMb2NhdGlvbiYgbG9jYXRpb24pIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGxv
Y2F0aW9uLmhlYXAoKS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBXb3JsZDoKKyAgICAgICAgY2Fz
ZSBTaWRlU3RhdGU6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBjYXNlIFN0YWNrOiB7CisgICAgICAgICAgICBBU1NFUlQobG9jYXRpb24uaGVhcCgp
LnBheWxvYWQoKS52YWx1ZSgpID09IGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigp
KTsKKyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZp
bmQobG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZTMyKCkpOworICAgICAgICAgICAgaWYg
KGl0ZXJhdG9yICE9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZW5kKCkKKyAgICAgICAgICAgICAg
ICAmJiBpdGVyYXRvci0+dmFsdWUtPmtleSA9PSBsb2NhdGlvbikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaXRlcmF0b3ItPnZhbHVlLT52YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBnZXQobV9m
YWxsYmFja1N0YWNrTWFwLCBsb2NhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBnZXQobV9oZWFwTWFwLCBsb2NhdGlvbik7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIExhenlOb2RlKCk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IElt
cHVyZURhdGFTbG90KiBhZGQoTWFwJiBtYXAsIGNvbnN0IEhlYXBMb2NhdGlvbiYgbG9jYXRpb24s
IGNvbnN0IExhenlOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtYXAu
YWRkPEltcHVyZURhdGFUcmFuc2xhdG9yPihsb2NhdGlvbik7CisgICAgICAgIGlmIChyZXN1bHQu
aXNOZXdFbnRyeSkgeworICAgICAgICAgICAgKCpyZXN1bHQuaXRlcmF0b3IpLT52YWx1ZSA9IG5v
ZGU7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gcmVzdWx0Lml0ZXJhdG9yLT5nZXQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgTGF6eU5vZGUg
Z2V0KGNvbnN0IE1hcCYgbWFwLCBjb25zdCBIZWFwTG9jYXRpb24mIGxvY2F0aW9uKQorICAgIHsK
KyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1hcC5maW5kPEltcHVyZURhdGFUcmFuc2xhdG9yPihs
b2NhdGlvbik7CisgICAgICAgIGlmIChpdGVyYXRvciAhPSBtYXAuZW5kKCkpCisgICAgICAgICAg
ICByZXR1cm4gKCppdGVyYXRvciktPnZhbHVlOworICAgICAgICByZXR1cm4gTGF6eU5vZGUoKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjbG9iYmVyKE1hcCYgbWFwLCBBYnN0cmFjdEhlYXAg
aGVhcCkKKyAgICB7CisgICAgICAgIG1hcC5yZW1vdmVJZihbaGVhcF0oY29uc3Qgc3RkOjp1bmlx
dWVfcHRyPEltcHVyZURhdGFTbG90PiYgc2xvdCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1
cm4gaGVhcC5vdmVybGFwcyhzbG90LT5rZXkuaGVhcCgpKTsKKyAgICAgICAgfSk7CisgICAgfQor
CisgICAgTWFwIG1fd29ybGRNYXA7CisgICAgTWFwIG1faGVhcE1hcDsKKyAgICBNYXAgbV9zaWRl
U3RhdGVNYXA7CisKKyAgICAvLyBUaGUgbWFqb3JpdHkgb2YgSW1wdXJlIFN0YWNrIFNsb3RzYXJl
IHVuaXF1ZSBwZXIgdmFsdWUuCisgICAgLy8gVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBmb3IgZmFzdCBj
bG9iYmVyKCksIHdlIGNhbiBqdXN0IHJlbW92ZSB0aGUgc2xvdCBhZGRyZXNzZWQgYnkgQWJzdHJh
Y3RIZWFwCisgICAgLy8gaW4gTygxKS4KKyAgICAvLworICAgIC8vIFdoZW4gdGhlcmUgYXJlIGNv
bmZsaWN0LCBhbnkgYWRkaXRpb25hbCBIZWFwTG9jYXRpb24gaXMgYWRkZWQgaW4gdGhlIGZhbGxi
YWNrIG1hcC4KKyAgICAvLyBUaGlzIHdvcmtzIHdlbGwgYmVjYXVzZSBmYWxsYmFja1N0YWNrTWFw
IHJlbWFpbnMgdGlueS4KKyAgICAvLworICAgIC8vIE9uZSBjYW5ub3QgYXNzdW1lIGEgdW5pcXVl
IEltcHVyZURhdGEgaXMgaW4gbV9hYnN0cmFjdEhlYXBTdGFja01hcC4gSXQgbWF5IGhhdmUgYmVl
bgorICAgIC8vIGEgZHVwbGljYXRlIGluIHRoZSBwYXN0IGFuZCBub3cgb25seSBsaXZlIGluIG1f
ZmFsbGJhY2tTdGFja01hcC4KKyAgICAvLworICAgIC8vIE9idmlvdXNseSwgVE9QIGFsd2F5cyBn
b2VzIGludG8gbV9mYWxsYmFja1N0YWNrTWFwIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgYSB1bmlx
dWUgdmFsdWUuCisgICAgSGFzaE1hcDxpbnQzMl90LCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0
YVNsb3Q+LCBEZWZhdWx0SGFzaDxpbnQzMl90Pjo6SGFzaCwgV1RGOjpTaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8aW50MzJfdD4+IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXA7CisgICAgTWFwIG1f
ZmFsbGJhY2tTdGFja01hcDsKKworI2lmICFkZWZpbmVkKE5ERUJVRykKKyAgICBIYXNoTWFwPEhl
YXBMb2NhdGlvbiwgTGF6eU5vZGU+IG1fZGVidWdJbXB1cmVEYXRhOworI2VuZGlmCit9OwogCiBj
bGFzcyBMb2NhbENTRVBoYXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKQEAgLTEzMSw2ICsz
MzQsOSBAQCBwcml2YXRlOgogICAgIAogICAgICAgICB2b2lkIHdyaXRlKEFic3RyYWN0SGVhcCBo
ZWFwKQogICAgICAgICB7CisgICAgICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU2lkZVN0YXRl
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1faW1wdXJlTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoaGVh
cC5vdmVybGFwcyhtX2ltcHVyZU1hcFtpXS5rZXkuaGVhcCgpKSkKICAgICAgICAgICAgICAgICAg
ICAgbV9pbXB1cmVNYXBbaS0tXSA9IG1faW1wdXJlTWFwWy0tbV9pbXB1cmVMZW5ndGhdOwpAQCAt
MTkyLDcgKzM5OCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgICAgIHZvaWQgd3JpdGUoQWJzdHJh
Y3RIZWFwIGhlYXApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNsb2JiZXIobV9pbXB1cmVNYXAs
IGhlYXApOworICAgICAgICAgICAgbV9pbXB1cmVNYXAuY2xvYmJlcihoZWFwKTsKICAgICAgICAg
fQogICAgIAogICAgICAgICBOb2RlKiBhZGRQdXJlKFB1cmVWYWx1ZSB2YWx1ZSwgTm9kZSogbm9k
ZSkKQEAgLTIwOCwxNyArNDE0LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gbV9p
bXB1cmVNYXAuZ2V0KGxvY2F0aW9uKTsKICAgICAgICAgfQogICAgIAotICAgICAgICBMYXp5Tm9k
ZSBhZGRJbXB1cmUoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBMYXp5Tm9kZSBub2RlKQorICAgICAg
ICBMYXp5Tm9kZSBhZGRJbXB1cmUoY29uc3QgSGVhcExvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3Qg
TGF6eU5vZGUmIG5vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9p
bXB1cmVNYXAuYWRkKGxvY2F0aW9uLCBub2RlKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuaXNO
ZXdFbnRyeSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgaWYgKGNvbnN0IEltcHVy
ZURhdGFTbG90KiBzbG90ID0gbV9pbXB1cmVNYXAuYWRkKGxvY2F0aW9uLCBub2RlKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc2xvdC0+dmFsdWU7CisgICAgICAgICAgICByZXR1cm4gTGF6eU5v
ZGUoKTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgSGFzaE1hcDxQdXJlVmFs
dWUsIE5vZGUqPiBtX3B1cmVNYXA7Ci0gICAgICAgIEhhc2hNYXA8SGVhcExvY2F0aW9uLCBMYXp5
Tm9kZT4gbV9pbXB1cmVNYXA7CisgICAgICAgIEltcHVyZU1hcCBtX2ltcHVyZU1hcDsKICAgICB9
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwcz4KQEAgLTMyNyw3ICs1MzIsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQogICAgIAotICAg
ICAgICB2b2lkIGRlZihIZWFwTG9jYXRpb24gbG9jYXRpb24sIExhenlOb2RlIHZhbHVlKQorICAg
ICAgICB2b2lkIGRlZihjb25zdCBIZWFwTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBMYXp5Tm9k
ZSYgdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIExhenlOb2RlIG1hdGNoID0gbV9tYXBz
LmFkZEltcHVyZShsb2NhdGlvbiwgdmFsdWUpOwogICAgICAgICAgICAgaWYgKCFtYXRjaCkKQEAg
LTQ2MSwxMCArNjY2LDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgd3JpdGUoQWJzdHJhY3RI
ZWFwIGhlYXApCiAgICAgewotICAgICAgICBjbG9iYmVyKG1faW1wdXJlRGF0YS0+YXZhaWxhYmxl
QXRUYWlsLCBoZWFwKTsKKyAgICAgICAgbV9pbXB1cmVEYXRhLT5hdmFpbGFibGVBdFRhaWwuY2xv
YmJlcihoZWFwKTsKICAgICAgICAgbV93cml0ZXNTb0Zhci5hZGQoaGVhcCk7Ci0gICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIENsb2JiZXJlZCwgbmV3IHRhaWwg
bWFwOiAiLCBtYXBEdW1wKG1faW1wdXJlRGF0YS0+YXZhaWxhYmxlQXRUYWlsKSwgIlxuIik7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgZGVmKFB1cmVWYWx1ZSB2YWx1ZSkKQEAgLTU3OSw4ICs3ODIs
NiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgSXQgc3Ry
aWN0bHkgZG9taW5hdGVzLlxuIik7CiAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBtX25vZGUsIGRhdGEuZGlkVmlzaXQpOwogICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbV9ub2RlLCAhbWF0Y2gpOwotICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJpbGl0eSBtYXA6ICIsIG1h
cER1bXAoZGF0YS5hdmFpbGFibGVBdFRhaWwpLCAiXG4iKTsKICAgICAgICAgICAgICAgICBtYXRj
aCA9IGRhdGEuYXZhaWxhYmxlQXRUYWlsLmdldChsb2NhdGlvbik7CiAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZhaWxh
YmlsaXR5OiAiLCBtYXRjaCwgIlxuIik7CkBAIC02MzksNyArODQwLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgQWRk
aW5nIGF0LXRhaWwgbWFwcGluZzogIiwgbG9jYXRpb24sICIgLT4gIiwgdmFsdWUsICJcbiIpOwog
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5h
ZGQobG9jYXRpb24sIHZhbHVlKTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCBy
ZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJl
c3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgKaW5kZXggMTI5YzYxNDQzYjJhZGM2NzUzZDNm
MGM3OTIyNDE2ZmIxN2E2NDRhZC4uMjBiMzgxNmNjNTJmNDczZmZhMjk1NTNjMDllNWYzNjk2ODJh
YTc3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRp
b24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCkBA
IC0xNTUsMTIgKzE1NSw2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6
OkhlYXBMb2NhdGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDCiAKIH0gLy8gbmFtZXNw
YWNlIFdURgogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLXR5cGVkZWYgSGFz
aE1hcDxIZWFwTG9jYXRpb24sIExhenlOb2RlPiBJbXB1cmVNYXA7Ci0KLX0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKLQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAjZW5kaWYgLy8gREZH
SGVhcExvY2F0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TGF6eU5vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eU5vZGUuaAppbmRl
eCBmZmQ1NzJmODU4ZmU0YTU1OTg0ZDNlYzljODNlMzRlZTJjMTQxZDIzLi44ZDhmNDhkMzZjNGE3
ZDIwMWU4ZDBjNmZkOGM2NGVjMWJmZWNiMzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0xhenlOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdMYXp5Tm9kZS5oCkBAIC0xMTAsOSArMTEwLDEwIEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKGFzVmFsdWUoKSkKLSAgICAgICAgICAg
IHJldHVybiBXVEY6OlB0ckhhc2g8RnJvemVuVmFsdWUqPjo6aGFzaChhc1ZhbHVlKCkpOwotICAg
ICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPE5vZGUqPjo6aGFzaChtX25vZGUpOworICAgICAgICB2
b2lkKiB0b0hhc2ggPSBtX25vZGU7CisgICAgICAgIGlmIChGcm96ZW5WYWx1ZSogdmFsdWUgPSBh
c1ZhbHVlKCkpCisgICAgICAgICAgICB0b0hhc2ggPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6UHRySGFzaDx2b2lkKj46Omhhc2godG9IYXNoKTsKICAgICB9CiAKICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgTGF6eU5vZGUmIG90aGVyKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCAzZmUxZGEyOGYwMDlmMGM0OWYyNzhhMDRkMWUzMTcy
MjQ0YzNjMWQ4Li41YzhkYWQ5OWY2ZGNkMWY3YmI3YmNiNmIyYjEwN2M0YTcyMDE4OTlkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtMjksNiArMjksNyBA
QAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUu
aCIKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJlcnNFeGl0
U3RhdGUuaCIKICNpbmNsdWRlICJERkdNYXlFeGl0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgpAQCAtMjk4LDYgKzI5OSw0NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB2YWxpZGF0ZVNTQSgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICAvLyBWYWxpZGF0ZSBj
bG9iYmVyZWQgc3RhdGVzLgorICAgICAgICBzdHJ1Y3QgRGVmTGFtYmRhQWRhcHRvciB7CisgICAg
ICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoUHVyZVZhbHVlKT4gcHVyZVZhbHVlOworICAgICAg
ICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEhlYXBMb2NhdGlvbiwgTGF6eU5vZGUpPiBsb2NhdGlv
bkFuZE5vZGU7CisKKyAgICAgICAgICAgIHZvaWQgb3BlcmF0b3IoKShQdXJlVmFsdWUgdmFsdWUp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHVyZVZhbHVlKHZhbHVlKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBvcGVyYXRvcigpKEhlYXBMb2NhdGlv
biBsb2NhdGlvbiwgTGF6eU5vZGUgbm9kZSkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBsb2NhdGlvbkFuZE5vZGUobG9jYXRpb24sIG5vZGUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9OworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9j
a3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxv
Y2spIHsKKyAgICAgICAgICAgICAgICBjbG9iYmVyaXplKG1fZ3JhcGgsIG5vZGUsCisgICAgICAg
ICAgICAgICAgICAgIFsmXSAoQWJzdHJhY3RIZWFwKSB7IH0sCisgICAgICAgICAgICAgICAgICAg
IFsmXSAoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENTRSBhc3N1bWVzIHRoYXQgSEVBUCBUT1AgaXMgbmV2ZXIgd3Jp
dHRlbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgYXNzdW1wdGlvbiBpcyB3
ZWFrZW5lZCwgeW91IG5lZWQgdG8gdXBkYXRlIGNsb2JiZXJpbmcKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGluIENTRSBhY2NvcmRpbmdseS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChoZWFwLmtpbmQoKSA9PSBTdGFjaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobm9kZSksICFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICAgICAgRGVmTGFtYmRhQWRhcHRvciB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBbJl0gKFB1cmVWYWx1ZSkgeyB9LAorICAgICAgICAgICAgICAgICAgICAg
ICAgWyZdIChIZWFwTG9jYXRpb24gbG9jYXRpb24sIExhenlOb2RlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwg
bG9jYXRpb24uaGVhcCgpLmtpbmQoKSAhPSBTaWRlU3RhdGUpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTW9yZSBzcGVjaWZpYyBraW5kcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFk
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbG9jYXRpb24u
aGVhcCgpLmtpbmQoKSAhPSBXb3JsZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUpLCBsb2NhdGlvbi5oZWFwKCkua2luZCgpICE9IEhlYXApOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CiAgICAgfQogICAgIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L0hhc2hTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAppbmRleCA2OGY5NTZjZjM1NGZm
N2I4ODU2ZWY1M2VlNmU5N2JiYzBjNmVmNWVkLi5jOWEyZmMxYzZkNTJiY2U0MjA4NDY1NTE5ODA0
NDI5ZDdlNDIyZWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKKysrIGIv
U291cmNlL1dURi93dGYvSGFzaFNldC5oCkBAIC0xMDEsNiArMTAxLDggQEAgbmFtZXNwYWNlIFdU
RiB7CiAKICAgICAgICAgYm9vbCByZW1vdmUoY29uc3QgVmFsdWVUeXBlJik7CiAgICAgICAgIGJv
b2wgcmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICAgICAgdm9pZCByZW1vdmVJZihjb25zdCBGdW5jdG9yJik7CiAgICAgICAgIHZvaWQgY2xl
YXIoKTsKIAogICAgICAgICBWYWx1ZVR5cGUgdGFrZShjb25zdCBWYWx1ZVR5cGUmKTsKQEAgLTI1
MSw2ICsyNTMsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIGlubGluZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZUlmKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBtX2ltcGwucmVtb3ZlSWYoZnVuY3Rv
cik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgVj4KICAgICBpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjpjbGVhcigpCiAgICAgewog
ICAgICAgICBtX2ltcGwuY2xlYXIoKTsgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNo
VHJhaXRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKaW5kZXggZmNhMzVmMzk5ZGZk
MGExZGRkZjNiYjgzOGQ3MzA4ODYzZDc1ZTFhYi4uYjg4NjM4NThhZGQ2YjA4OWY3MDkxOGI4NWY0
NDBlZTQwOWVjZmQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaApAQCAtODUsNiArODUsMTMgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IFVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzIDogR2Vu
ZXJpY0hhc2hUcmFpdHM8VD4KICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShUIHZhbHVl
KSB7IHJldHVybiB2YWx1ZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKSAtIDE7IH0K
IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTaWduZWRXaXRoWmVyb0tleUhhc2hU
cmFpdHMgOiBHZW5lcmljSGFzaFRyYWl0czxUPiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1w
dHlWYWx1ZUlzWmVybyA9IGZhbHNlOworICAgIHN0YXRpYyBUIGVtcHR5VmFsdWUoKSB7IHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4oKTsgfQorICAgIHN0YXRpYyB2b2lkIGNvbnN0
cnVjdERlbGV0ZWRWYWx1ZShUJiBzbG90KSB7IHNsb3QgPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+
OjptYXgoKTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKFQgdmFsdWUpIHsgcmV0
dXJuIHZhbHVlID09IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpOyB9Cit9OworCiAvLyBD
YW4gYmUgdXNlZCB3aXRoIHN0cm9uZyBlbnVtcywgYWxsb3dzIHplcm8gYXMga2V5LgogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IFN0cm9uZ0VudW1IYXNoVHJhaXRzIDogR2VuZXJpY0hhc2hU
cmFpdHM8VD4gewogICAgIHVzaW5nIFVuZGVybHlpbmdUeXBlID0gdHlwZW5hbWUgc3RkOjp1bmRl
cmx5aW5nX3R5cGU8VD46OnR5cGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274358</attachid>
            <date>2016-03-17 19:23:38 -0700</date>
            <delta_ts>2016-03-17 21:07:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155594-20160317192338.patch</filename>
            <type>text/plain</type>
            <size>20486</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
YjlmNWZkODhhNDY5YzQyOTIzY2JlYmMxNGJmMWU0NDMwNzBmMjQ4Li43NzJiMzdlZWNkY2ZmOTkw
MjhiNzViMzc3ZTg3ZTQ4ZDJmYzM3MTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NiBAQAorMjAxNi0wMy0xNyAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBNYWtlIENTRSdzIEltcHVyZURhdGEgZmFzdGVyIHdoZW4g
ZGVhbGluZyB3aXRoIGxhcmdlIGJsb2NrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW4gc29tZSB0ZXN0cyB3aXRoIGxhcmdlIGJsb2NrcywgdGhlIHRp
bWUgc3BlbnQgaW4gREZHJ3MgTG9jYWxDU0UKKyAgICAgICAgY2FuIGJlIG92ZXIgMTAlIG9mIHRo
ZSB0b3RhbCBjb21waWxlIHRpbWUuCisgICAgICAgIEluIHRob3NlIGNhc2VzLCBMb2NhbENTRSBp
cyBjb21wbGV0ZWx5IGRvbWluYXRlZCBieSBoYW5kbGluZyBsYXJnZQorICAgICAgICBibG9ja3Mu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhlIG1vc3Qgb2J2aW91cyBob3Qgc3Bv
dHMgSW1wdXJlRGF0YSdzIGhhbmRsaW5nLgorCisgICAgICAgIEluaXRpYWxseSwgbW9zdCBvZiB0
aGUgdGltZSB3YXMgZ29pbmcgaW50byBIYXNoVGFibGU6OnJlaGFzaCgpLgorICAgICAgICBUaGUg
cmVhc29uIGlzIHRoZSBidWNrZXRzIGFyZSA8SGVhcExvY2F0aW9uLCBMYXp5Tm9kZT4gZ2lnYW50
aWMuCisgICAgICAgIFRoZSBoYXNoIHRhYmxlIHdvdWxkIGVhc2lseSBnZXQgaW50byBzZXZlcmFs
IGtpbG9ieXRlcyBhbmQgdGhlIENQVQorICAgICAgICB3YXMgc3BlbmRpbmcgbW9yZSB0aW1lIGRl
YWxpbmcgd2l0aCBtZW1vcnkgdGhhbiBhbnl0aGluZy4KKworICAgICAgICBUbyBzb2x2ZSB0aGF0
LCBJIG1vdmVkIHRoZSBwYWlycyBsYXppbHkgdG8gdGhlIGhlYXAuIFRoZSB0YWJsZSBpdHNlbGYK
KyAgICAgICAganVzdCBjb250YWlucyB0aGUgdW5pcXVlX3B0ciB0byB0aG9zZSB2YWx1ZXMuIFRo
aXMgbWFrZXMgdGhlIHRhYmxlCisgICAgICAgIHJlYXNvbmFibHkgc21hbGwgYW5kIHRoZSBhbGxv
Yy9kZWFsbG9jIGFyZSBwYWlkIGZvciBieSB0aGUgZmFzdCByZWhhc2goKS4KKworICAgICAgICBP
bmNlIGFkZEltcHVyZSgpIHdhcyBiZXR0ZXIsIHRoZSBuZXh0IGJpZyBib3R0bGVuZWNrIHdhcyBj
bG9iYmVyKCkuCisgICAgICAgIEZvciBlYWNoIGNsb2JiZXIoKSwgd2UgbmVlZCB0byBnbyBvdmVy
IHRoZSBlbnRpcmUgbWFwIGFuZCB0ZXN0IGVhY2ggdmFsdWUuCisgICAgICAgIFRoYXQgbG9vcCB3
YXMgd2hlcmUgbW9zdCBvZiB0aGUgdGltZSB3YXMgZ29pbmcuCisKKyAgICAgICAgTW9zdCBjYWxs
cyB0byBjbG9iYmVyKCkgY29tZSBmcm9tIHR3byBraW5kczogU2lkZVN0YXRlIGFuZCBTdGFjay4K
KworICAgICAgICBTaWRlU3RhdGUgaXMgZWFzeTogaXQgaXMgbmV2ZXIgZGVmJ2VkIHNvIHdlIGNh
biBhbHdheXMgc2tpcCBpdC4KKworICAgICAgICBTdGFjayBpcyBkaXNqb2ludCBmcm9tIEhlYXAg
dG9vIHNvIHdlIGNhbiBhbHNvIHB1dCBpdCBzZXBhcmF0ZWx5LgorCisgICAgICAgIFNwbGl0dGlu
ZyB0aGUgbWFwIGludG8gMiBoZWxwZWQgcmVkdWNlIHRoZSBvdmVyaGVhZC4gVGhlIG1hcHMgYXJl
OgorICAgICAgICAtU3RhY2sKKyAgICAgICAgLUhlYXAKKworICAgICAgICBIYXZpbmcgU3RhY2sg
YWxvbmUgd2FzIG5vdCBlbm91Z2ggZm9yIG1hbnkgYmxvY2tzLiBJbiBzb21lIGNhc2VzLAorICAg
ICAgICB5b3UgaGF2ZSBhIHRvbiBvZiBTZXRMb2NhbC9HZXRMb2NhbCBhbmQgaGF2aW5nIFN0YWNr
IHNlcGFyYXRlbHkKKyAgICAgICAgbWFrZXMgbm8gZGlmZmVyZW5jZS4KKworICAgICAgICBUbyBz
b2x2ZSB0aGF0LCBJIHNwbGl0IFN0YWNrIGluIHR3bzogYSBtYXAgYWRkcmVzc2VkIGJ5IEFic3Ry
YWN0SGVhcAorICAgICAgICArIHVuaXF1ZSBIZWFwTG9jYXRpb24gYW5kIGEgZmFsbGJhY2sgbWFw
IGZvciBldmVyeXRoaW5nIGVsc2UuCisgICAgICAgIFNpbmNlIG1vc3QgU3RhY2sgYXJlIG5vdCBU
T1AgYW5kIGFyZSB1bmlxdWUgcGVyIEFic3RyYWN0SGVhcCwKKyAgICAgICAgSSBnZXQgTygxKSBj
bG9iYmVyIGluIG1vc3QgY2FzZXMuCisKKyAgICAgICAgSSBjb3VsZCBhY2hpZXZlIHRoZSBzYW1l
IHJlc3VsdCB3aXRoIGEgY3VzdG9tIGhhc2ggc3RydWN0dXJlLgorICAgICAgICBJIGRvbid0IHRo
aW5rIGl0IGlzIHdvcnRoIHRoZSBlZmZvcnQsIGluIG1vc3QgY2FzZXMsIG1fZmFsbGJhY2tTdGFj
a01hcAorICAgICAgICBoYXMgYSBzaXplIG9mIHplcm8gb3Igb25lLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggaW50cm9kdWNlcyBhIGxvdCBvZiBjb3VwbGluZyBiZXR3ZWVuIENTRSBhbmQgQWJzdHJh
Y3RIZWFwLgorICAgICAgICBUbyByZWR1Y2UgdGhlIHJpc2sgb2YgYnVncywgdGhlIG9sZCBtYXAg
aXMgc3RpbGwgbWFpbnRhaW5lZCBpbiBkZWJ1ZworICAgICAgICBhbmQgZWFjaCBzdGVwIGNoZWNr
cyB0aGF0IHRoZSByZXN1bHRzIGFyZSB0aGUgc2FtZSBhcyB0aGUgbmV3IGltcGxlbWVudGF0aW9u
LgorCisgICAgICAgIEEgbmV3IHZhbGlkYXRpb24gc3RlcCBhbHNvIHZlcmlmeSB0aGUgc3Ryb25n
IGFzc3VtcHRpb25zIG1hZGUgYnkgQ1NFOgorICAgICAgICAtU2lkZVN0YXRlIGFuZCBXb3JsZCBh
cmUgbmV2ZXIgZGVmKCkuCisgICAgICAgIC1XZSBuZXZlciB3cml0ZSBIRUFQIFRPUCwgd2Ugb25s
eSB3cml0ZSBzcGVjaWZpYyBoZWFwIGxvY2F0aW9uLgorCisgICAgICAgICogZGZnL0RGR0NTRVBo
YXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0aW9uLmg6CisgICAgICAgICogZGZn
L0RGR0xhenlOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eU5vZGU6Omhhc2gpOgorCiAy
MDE2LTAzLTE0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVkdWNlIGdlbmVyYXRlZCBKU09OIEhlYXBTbmFwc2hvdCBzaXplCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGU5ZDA3M2Ux
YmEzYWE5ZGUxZTAwMWVlNTJjZjUwYWY0NDJmYzVmOWIuLmVhZjI2MjU1M2I1ZWRlMmY5NDYxZTBl
ZTM3MGE3ODI2MDkxM2I1OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMDMtMTcgIEJlbmph
bWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gTWFrZSBD
U0UncyBJbXB1cmVEYXRhIGZhc3RlciB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBibG9ja3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTU5NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0hhc2hT
ZXQuaDoKKyAgICAgICAgKFdURjo6Vj46OnJlbW92ZUlmKToKKwogMjAxNi0wMy0xMyAgSm9zZXBo
IFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBFTkFCTEUo
RVM2X1RFTVBMQVRFX0xJVEVSQUxfU1lOVEFYKSBndWFyZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAKaW5kZXggMWNkZWU0ZGY4ZjI3YmViZDg3YmI2ZjhjNWRjMzBk
Y2UwOTI3MDkwYy4uNjNjMGFiMzIyYzJmN2ViYzAxY2QxNjFiZTJmNTE4ZWM5NTQ0ZDMxMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKQEAgLTUxLDI3ICs1MSwy
MzAgQEAgbmFtZXNwYWNlIHsKIAogY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKLWNsYXNz
IENsb2JiZXJGaWx0ZXIgeworY2xhc3MgSW1wdXJlRGF0YVNsb3QgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEltcHVyZURhdGFTbG90KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBDbG9iYmVyRmlsdGVyKEFic3RyYWN0SGVhcCBoZWFwKQotICAgICAgICA6
IG1faGVhcChoZWFwKQorICAgIEhlYXBMb2NhdGlvbiBrZXk7CisgICAgTGF6eU5vZGUgdmFsdWU7
CisgICAgdW5zaWduZWQgaGFzaDsKK307CisKK3N0cnVjdCBJbXB1cmVEYXRhU2xvdEhhc2ggOiBw
dWJsaWMgRGVmYXVsdEhhc2g8c3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90Pj46Okhhc2gg
eworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVE
YXRhU2xvdD4mIGtleSkKICAgICB7CisgICAgICAgIHJldHVybiBrZXktPmhhc2g7CiAgICAgfQot
ICAgIAotICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBJbXB1cmVNYXA6OktleVZhbHVlUGFpclR5
cGUmIHBhaXIpIGNvbnN0CisKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBzdGQ6OnVuaXF1
ZV9wdHI8SW1wdXJlRGF0YVNsb3Q+JiBhLCBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8SW1wdXJlRGF0
YVNsb3Q+JiBiKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGVhcC5vdmVybGFwcyhwYWlyLmtl
eS5oZWFwKCkpOworICAgICAgICAvLyBUaGUgSW1wdXJlRGF0YVNsb3QgYXJlIHVuaXF1ZSBwZXIg
dGFibGUgcGVyIEhlYXBMb2NhdGlvbi4gVGhpcyBsZXRzIHVzIGNvbXBhcmUgdGhlIGtleQorICAg
ICAgICAvLyBieSBqdXN0IGNvbXBhcmluZyB0aGUgcG9pbnRlcnMgb2YgdGhlIHVuaXF1ZSBJbXB1
cmVEYXRhU2xvdHMuCisgICAgICAgIEFTU0VSVChhICE9IGIgfHwgYS0+a2V5ID09IGItPmtleSk7
CisgICAgICAgIHJldHVybiBhID09IGI7CiAgICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBBYnN0
cmFjdEhlYXAgbV9oZWFwOwogfTsKIAotaW5saW5lIHZvaWQgY2xvYmJlcihJbXB1cmVNYXAmIG1h
cCwgQWJzdHJhY3RIZWFwIGhlYXApCi17Ci0gICAgQ2xvYmJlckZpbHRlciBmaWx0ZXIoaGVhcCk7
Ci0gICAgbWFwLnJlbW92ZUlmKGZpbHRlcik7Ci19CitzdHJ1Y3QgSW1wdXJlRGF0YVRyYW5zbGF0
b3IgeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEhlYXBMb2NhdGlvbiYga2V5KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGtleS5oYXNoKCk7CisgICAgfQorCisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURhdGFTbG90PiYgc2xvdCwgY29u
c3QgSGVhcExvY2F0aW9uJiBrZXkpCisgICAgeworICAgICAgICBpZiAoIXNsb3QpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChIYXNoVHJhaXRzPHN0ZDo6dW5pcXVlX3B0
cjxJbXB1cmVEYXRhU2xvdD4+Ojppc0RlbGV0ZWRWYWx1ZShzbG90KSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHNsb3QtPmtleSA9PSBrZXk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4m
IHNsb3QsIGNvbnN0IEhlYXBMb2NhdGlvbiYga2V5LCB1bnNpZ25lZCBoYXNoQ29kZSkKKyAgICB7
CisgICAgICAgIG5ldyAoTm90TnVsbCwgc3RkOjphZGRyZXNzb2Yoc2xvdCkpIHN0ZDo6dW5pcXVl
X3B0cjxJbXB1cmVEYXRhU2xvdD4obmV3IEltcHVyZURhdGFTbG90IHtrZXksIExhenlOb2RlKCks
IGhhc2hDb2RlfSk7CisgICAgfQorfTsKKworY2xhc3MgSW1wdXJlTWFwIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbXB1cmVNYXApOwor
cHVibGljOgorICAgIEltcHVyZU1hcCgpID0gZGVmYXVsdDsKKworICAgIEltcHVyZU1hcChJbXB1
cmVNYXAmJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1faGVhcE1hcC5zd2FwKG90aGVyLm1faGVh
cE1hcCk7CisgICAgICAgIG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuc3dhcChvdGhlci5tX2Fic3Ry
YWN0SGVhcFN0YWNrTWFwKTsKKyAgICAgICAgbV9mYWxsYmFja1N0YWNrTWFwLnN3YXAob3RoZXIu
bV9mYWxsYmFja1N0YWNrTWFwKTsKKyNpZiAhZGVmaW5lZChOREVCVUcpCisgICAgICAgIG1fZGVi
dWdJbXB1cmVEYXRhLnN3YXAob3RoZXIubV9kZWJ1Z0ltcHVyZURhdGEpOworI2VuZGlmCisgICAg
fQorCisgICAgY29uc3QgSW1wdXJlRGF0YVNsb3QqIGFkZChjb25zdCBIZWFwTG9jYXRpb24mIGxv
Y2F0aW9uLCBjb25zdCBMYXp5Tm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGNvbnN0IEltcHVy
ZURhdGFTbG90KiByZXN1bHQgPSBhZGRJbXBsKGxvY2F0aW9uLCBub2RlKTsKKworI2lmICFkZWZp
bmVkKE5ERUJVRykKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2RlYnVnSW1wdXJlRGF0YS5h
ZGQobG9jYXRpb24sIG5vZGUpOworICAgICAgICBBU1NFUlQoISFyZXN1bHQgPT0gIWFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIExhenlOb2RlIGdldChjb25zdCBIZWFwTG9jYXRpb24mIGxvY2F0aW9uKSBjb25zdAorICAg
IHsKKyAgICAgICAgTGF6eU5vZGUgcmVzdWx0ID0gZ2V0SW1wbChsb2NhdGlvbik7CisjaWYgIWRl
ZmluZWQoTkRFQlVHKQorICAgICAgICBBU1NFUlQocmVzdWx0ID09IG1fZGVidWdJbXB1cmVEYXRh
LmdldChsb2NhdGlvbikpOworI2VuZGlmCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgdm9pZCBjbG9iYmVyKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChoZWFwLmtpbmQoKSkgeworICAgICAgICBjYXNlIFdvcmxkOiB7CisgICAgICAgICAgICBj
bGVhcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBTaWRl
U3RhdGU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGFjazogeworICAgICAg
ICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKKyAgICAgICAgICAgIEFTU0VS
VChoZWFwLnBheWxvYWQoKS52YWx1ZSgpID09IGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7Cisg
ICAgICAgICAgICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBheWxvYWQoKS52
YWx1ZTMyKCkpOworICAgICAgICAgICAgY2xvYmJlcihtX2ZhbGxiYWNrU3RhY2tNYXAsIGhlYXAp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGNsb2JiZXIobV9oZWFwTWFwLCBoZWFwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisjaWYgIWRlZmluZWQoTkRFQlVHKQorICAgICAgICBtX2RlYnVnSW1wdXJlRGF0YS5y
ZW1vdmVJZihbaGVhcF0oY29uc3QgSGFzaE1hcDxIZWFwTG9jYXRpb24sIExhenlOb2RlPjo6S2V5
VmFsdWVQYWlyVHlwZSYgcGFpcikgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gaGVhcC5v
dmVybGFwcyhwYWlyLmtleS5oZWFwKCkpOworICAgICAgICB9KTsKKyAgICAgICAgQVNTRVJUKG1f
ZGVidWdJbXB1cmVEYXRhLnNpemUoKQorICAgICAgICAgICAgPT0gKG1faGVhcE1hcC5zaXplKCkK
KyAgICAgICAgICAgICAgICArIG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuc2l6ZSgpCisgICAgICAg
ICAgICAgICAgKyBtX2ZhbGxiYWNrU3RhY2tNYXAuc2l6ZSgpKSk7CisKKyAgICAgICAgY29uc3Qg
Ym9vbCB2ZXJpZnlDbG9iYmVyID0gZmFsc2U7CisgICAgICAgIGlmICh2ZXJpZnlDbG9iYmVyKSB7
CisgICAgICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX2RlYnVnSW1wdXJlRGF0YSkKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoISFnZXQocGFpci5rZXkpKTsKKyAgICAgICAgfQorI2VuZGlmCisg
ICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX2hlYXBNYXAuY2xlYXIo
KTsKKyAgICAgICAgbV9hYnN0cmFjdEhlYXBTdGFja01hcC5jbGVhcigpOworICAgICAgICBtX2Zh
bGxiYWNrU3RhY2tNYXAuY2xlYXIoKTsKKyNpZiAhZGVmaW5lZChOREVCVUcpCisgICAgICAgIG1f
ZGVidWdJbXB1cmVEYXRhLmNsZWFyKCk7CisjZW5kaWYKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
dHlwZWRlZiBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4sIEltcHVyZURh
dGFTbG90SGFzaD4gTWFwOworCisgICAgY29uc3QgSW1wdXJlRGF0YVNsb3QqIGFkZEltcGwoY29u
c3QgSGVhcExvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgTGF6eU5vZGUmIG5vZGUpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGxvY2F0aW9uLmhlYXAoKS5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBX
b3JsZDoKKyAgICAgICAgY2FzZSBTaWRlU3RhdGU6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIFN0YWNrOiB7CisgICAgICAgICAgICBBYnN0
cmFjdEhlYXAgYWJzdHJhY3RIZWFwID0gbG9jYXRpb24uaGVhcCgpOworICAgICAgICAgICAgaWYg
KGFic3RyYWN0SGVhcC5wYXlsb2FkKCkuaXNUb3AoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
YWRkKG1fZmFsbGJhY2tTdGFja01hcCwgbG9jYXRpb24sIG5vZGUpOworICAgICAgICAgICAgQVNT
RVJUKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUoKSA9PSBhYnN0cmFjdEhlYXAucGF5bG9h
ZCgpLnZhbHVlMzIoKSk7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYWJzdHJhY3RI
ZWFwU3RhY2tNYXAuYWRkKGFic3RyYWN0SGVhcC5wYXlsb2FkKCkudmFsdWUzMigpLCBudWxscHRy
KTsKKyAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUucmVzZXQobmV3IEltcHVyZURhdGFTbG90IHts
b2NhdGlvbiwgbm9kZSwgMH0pOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmtl
eSA9PSBsb2NhdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBhZGQobV9mYWxsYmFja1N0YWNrTWFw
LCBsb2NhdGlvbiwgbm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBhZGQobV9oZWFwTWFwLCBsb2NhdGlvbiwgbm9kZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgTGF6eU5vZGUgZ2V0SW1wbChjb25z
dCBIZWFwTG9jYXRpb24mIGxvY2F0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChs
b2NhdGlvbi5oZWFwKCkua2luZCgpKSB7CisgICAgICAgIGNhc2UgV29ybGQ6CisgICAgICAgIGNh
c2UgU2lkZVN0YXRlOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgY2FzZSBTdGFjazogeworICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uLmhlYXAo
KS5wYXlsb2FkKCkudmFsdWUoKSA9PSBsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIo
KSk7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5m
aW5kKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAgICAgICAgIGlm
IChpdGVyYXRvciAhPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmVuZCgpCisgICAgICAgICAgICAg
ICAgJiYgaXRlcmF0b3ItPnZhbHVlLT5rZXkgPT0gbG9jYXRpb24pCisgICAgICAgICAgICAgICAg
cmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS0+dmFsdWU7CisgICAgICAgICAgICByZXR1cm4gZ2V0KG1f
ZmFsbGJhY2tTdGFja01hcCwgbG9jYXRpb24pOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZ2V0KG1faGVhcE1hcCwgbG9jYXRpb24pOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBMYXp5Tm9kZSgpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBJ
bXB1cmVEYXRhU2xvdCogYWRkKE1hcCYgbWFwLCBjb25zdCBIZWFwTG9jYXRpb24mIGxvY2F0aW9u
LCBjb25zdCBMYXp5Tm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbWFw
LmFkZDxJbXB1cmVEYXRhVHJhbnNsYXRvcj4obG9jYXRpb24pOworICAgICAgICBpZiAocmVzdWx0
LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgICgqcmVzdWx0Lml0ZXJhdG9yKS0+dmFsdWUgPSBu
b2RlOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHJlc3VsdC5pdGVyYXRvci0+Z2V0KCk7CisgICAgfQorCisgICAgc3RhdGljIExhenlOb2Rl
IGdldChjb25zdCBNYXAmIG1hcCwgY29uc3QgSGVhcExvY2F0aW9uJiBsb2NhdGlvbikKKyAgICB7
CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtYXAuZmluZDxJbXB1cmVEYXRhVHJhbnNsYXRvcj4o
bG9jYXRpb24pOworICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbWFwLmVuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuICgqaXRlcmF0b3IpLT52YWx1ZTsKKyAgICAgICAgcmV0dXJuIExhenlOb2RlKCk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY2xvYmJlcihNYXAmIG1hcCwgQWJzdHJhY3RIZWFw
IGhlYXApCisgICAgeworICAgICAgICBtYXAucmVtb3ZlSWYoW2hlYXBdKGNvbnN0IHN0ZDo6dW5p
cXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4mIHNsb3QpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0
dXJuIGhlYXAub3ZlcmxhcHMoc2xvdC0+a2V5LmhlYXAoKSk7CisgICAgICAgIH0pOworICAgIH0K
KworICAgIE1hcCBtX3dvcmxkTWFwOworICAgIE1hcCBtX2hlYXBNYXA7CisgICAgTWFwIG1fc2lk
ZVN0YXRlTWFwOworCisgICAgLy8gVGhlIG1ham9yaXR5IG9mIEltcHVyZSBTdGFjayBTbG90c2Fy
ZSB1bmlxdWUgcGVyIHZhbHVlLgorICAgIC8vIFRoaXMgaXMgdmVyeSB1c2VmdWwgZm9yIGZhc3Qg
Y2xvYmJlcigpLCB3ZSBjYW4ganVzdCByZW1vdmUgdGhlIHNsb3QgYWRkcmVzc2VkIGJ5IEFic3Ry
YWN0SGVhcAorICAgIC8vIGluIE8oMSkuCisgICAgLy8KKyAgICAvLyBXaGVuIHRoZXJlIGFyZSBj
b25mbGljdCwgYW55IGFkZGl0aW9uYWwgSGVhcExvY2F0aW9uIGlzIGFkZGVkIGluIHRoZSBmYWxs
YmFjayBtYXAuCisgICAgLy8gVGhpcyB3b3JrcyB3ZWxsIGJlY2F1c2UgZmFsbGJhY2tTdGFja01h
cCByZW1haW5zIHRpbnkuCisgICAgLy8KKyAgICAvLyBPbmUgY2Fubm90IGFzc3VtZSBhIHVuaXF1
ZSBJbXB1cmVEYXRhIGlzIGluIG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuIEl0IG1heSBoYXZlIGJl
ZW4KKyAgICAvLyBhIGR1cGxpY2F0ZSBpbiB0aGUgcGFzdCBhbmQgbm93IG9ubHkgbGl2ZSBpbiBt
X2ZhbGxiYWNrU3RhY2tNYXAuCisgICAgLy8KKyAgICAvLyBPYnZpb3VzbHksIFRPUCBhbHdheXMg
Z29lcyBpbnRvIG1fZmFsbGJhY2tTdGFja01hcCBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlIGEgdW5p
cXVlIHZhbHVlLgorICAgIEhhc2hNYXA8aW50MzJfdCwgc3RkOjp1bmlxdWVfcHRyPEltcHVyZURh
dGFTbG90PiwgRGVmYXVsdEhhc2g8aW50MzJfdD46Okhhc2gsIFdURjo6U2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPGludDMyX3Q+PiBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwOworICAgIE1hcCBt
X2ZhbGxiYWNrU3RhY2tNYXA7CisKKyNpZiAhZGVmaW5lZChOREVCVUcpCisgICAgSGFzaE1hcDxI
ZWFwTG9jYXRpb24sIExhenlOb2RlPiBtX2RlYnVnSW1wdXJlRGF0YTsKKyNlbmRpZgorfTsKIAog
Y2xhc3MgTG9jYWxDU0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiBwdWJsaWM6CkBAIC0xMzEsNiAr
MzM0LDkgQEAgcHJpdmF0ZToKICAgICAKICAgICAgICAgdm9pZCB3cml0ZShBYnN0cmFjdEhlYXAg
aGVhcCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKGhlYXAua2luZCgpID09IFNpZGVTdGF0
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2ltcHVyZUxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGhl
YXAub3ZlcmxhcHMobV9pbXB1cmVNYXBbaV0ua2V5LmhlYXAoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIG1faW1wdXJlTWFwW2ktLV0gPSBtX2ltcHVyZU1hcFstLW1faW1wdXJlTGVuZ3RoXTsKQEAg
LTE5Miw3ICszOTgsNyBAQCBwcml2YXRlOgogICAgIAogICAgICAgICB2b2lkIHdyaXRlKEFic3Ry
YWN0SGVhcCBoZWFwKQogICAgICAgICB7Ci0gICAgICAgICAgICBjbG9iYmVyKG1faW1wdXJlTWFw
LCBoZWFwKTsKKyAgICAgICAgICAgIG1faW1wdXJlTWFwLmNsb2JiZXIoaGVhcCk7CiAgICAgICAg
IH0KICAgICAKICAgICAgICAgTm9kZSogYWRkUHVyZShQdXJlVmFsdWUgdmFsdWUsIE5vZGUqIG5v
ZGUpCkBAIC0yMDgsMTcgKzQxNCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIG1f
aW1wdXJlTWFwLmdldChsb2NhdGlvbik7CiAgICAgICAgIH0KICAgICAKLSAgICAgICAgTGF6eU5v
ZGUgYWRkSW1wdXJlKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTGF6eU5vZGUgbm9kZSkKKyAgICAg
ICAgTGF6eU5vZGUgYWRkSW1wdXJlKGNvbnN0IEhlYXBMb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0
IExhenlOb2RlJiBub2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1f
aW1wdXJlTWFwLmFkZChsb2NhdGlvbiwgbm9kZSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgIGlmIChjb25zdCBJbXB1
cmVEYXRhU2xvdCogc2xvdCA9IG1faW1wdXJlTWFwLmFkZChsb2NhdGlvbiwgbm9kZSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNsb3QtPnZhbHVlOworICAgICAgICAgICAgcmV0dXJuIExhenlO
b2RlKCk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIEhhc2hNYXA8UHVyZVZh
bHVlLCBOb2RlKj4gbV9wdXJlTWFwOwotICAgICAgICBIYXNoTWFwPEhlYXBMb2NhdGlvbiwgTGF6
eU5vZGU+IG1faW1wdXJlTWFwOworICAgICAgICBJbXB1cmVNYXAgbV9pbXB1cmVNYXA7CiAgICAg
fTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcHM+CkBAIC0zMjcsNyArNTMyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAKLSAg
ICAgICAgdm9pZCBkZWYoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBMYXp5Tm9kZSB2YWx1ZSkKKyAg
ICAgICAgdm9pZCBkZWYoY29uc3QgSGVhcExvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgTGF6eU5v
ZGUmIHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBMYXp5Tm9kZSBtYXRjaCA9IG1fbWFw
cy5hZGRJbXB1cmUobG9jYXRpb24sIHZhbHVlKTsKICAgICAgICAgICAgIGlmICghbWF0Y2gpCkBA
IC00NjEsMTAgKzY2Niw4IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHdyaXRlKEFic3RyYWN0
SGVhcCBoZWFwKQogICAgIHsKLSAgICAgICAgY2xvYmJlcihtX2ltcHVyZURhdGEtPmF2YWlsYWJs
ZUF0VGFpbCwgaGVhcCk7CisgICAgICAgIG1faW1wdXJlRGF0YS0+YXZhaWxhYmxlQXRUYWlsLmNs
b2JiZXIoaGVhcCk7CiAgICAgICAgIG1fd3JpdGVzU29GYXIuYWRkKGhlYXApOwotICAgICAgICBp
ZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbG9iYmVyZWQsIG5ldyB0YWls
IG1hcDogIiwgbWFwRHVtcChtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbCksICJcbiIpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGRlZihQdXJlVmFsdWUgdmFsdWUpCkBAIC01NzksOCArNzgy
LDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEl0IHN0
cmljdGx5IGRvbWluYXRlcy5cbiIpOwogICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCBkYXRhLmRpZFZpc2l0KTsKICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgIW1hdGNoKTsKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBBdmFpbGFiaWxpdHkgbWFwOiAiLCBt
YXBEdW1wKGRhdGEuYXZhaWxhYmxlQXRUYWlsKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgbWF0
Y2ggPSBkYXRhLmF2YWlsYWJsZUF0VGFpbC5nZXQobG9jYXRpb24pOwogICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWls
YWJpbGl0eTogIiwgbWF0Y2gsICJcbiIpOwpAQCAtNjM5LDcgKzg0MCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIEFk
ZGluZyBhdC10YWlsIG1hcHBpbmc6ICIsIGxvY2F0aW9uLCAiIC0+ICIsIHZhbHVlLCAiXG4iKTsK
ICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9pbXB1cmVEYXRhLT5hdmFpbGFibGVBdFRhaWwu
YWRkKGxvY2F0aW9uLCB2YWx1ZSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwg
cmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsICFy
ZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCmluZGV4IDEyOWM2MTQ0M2IyYWRjNjc1M2Qz
ZjBjNzkyMjQxNmZiMTdhNjQ0YWQuLjIwYjM4MTZjYzUyZjQ3M2ZmYTI5NTUzYzA5ZTVmMzY5Njgy
YWE3NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaApA
QCAtMTU1LDEyICsxNTUsNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZH
OjpIZWFwTG9jYXRpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQwogCiB9IC8vIG5hbWVz
cGFjZSBXVEYKIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi10eXBlZGVmIEhh
c2hNYXA8SGVhcExvY2F0aW9uLCBMYXp5Tm9kZT4gSW1wdXJlTWFwOwotCi19IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCi0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogI2VuZGlmIC8vIERG
R0hlYXBMb2NhdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xhenlOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlOb2RlLmgKaW5k
ZXggZmZkNTcyZjg1OGZlNGE1NTk4NGQzZWM5YzgzZTM0ZWUyYzE0MWQyMy4uOGQ4ZjQ4ZDM2YzRh
N2QyMDFlOGQwYzZmZDhjNjRlYzFiZmVjYjMzMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMYXp5Tm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTGF6eU5vZGUuaApAQCAtMTEwLDkgKzExMCwxMCBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChhc1ZhbHVlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gV1RGOjpQdHJIYXNoPEZyb3plblZhbHVlKj46Omhhc2goYXNWYWx1ZSgpKTsKLSAg
ICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxOb2RlKj46Omhhc2gobV9ub2RlKTsKKyAgICAgICAg
dm9pZCogdG9IYXNoID0gbV9ub2RlOworICAgICAgICBpZiAoRnJvemVuVmFsdWUqIHZhbHVlID0g
YXNWYWx1ZSgpKQorICAgICAgICAgICAgdG9IYXNoID0gdmFsdWU7CisgICAgICAgIHJldHVybiBX
VEY6OlB0ckhhc2g8dm9pZCo+OjpoYXNoKHRvSGFzaCk7CiAgICAgfQogCiAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IExhenlOb2RlJiBvdGhlcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAKaW5kZXggM2ZlMWRhMjhmMDA5ZjBjNDlmMjc4YTA0ZDFlMzE3
MjI0NGMzYzFkOC4uNWM4ZGFkOTlmNmRjZDFmN2JiN2JjYjZiMmIxMDdjNGE3MjAxODk5ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKQEAgLTI5LDYgKzI5LDcg
QEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBl
LmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhp
dFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKQEAgLTI5OCw2ICsyOTksNDcgQEAgcHVibGljOgogICAgICAgICAgICAgdmFsaWRhdGVTU0Eo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAgICAgICAgLy8gVmFsaWRhdGUg
Y2xvYmJlcmVkIHN0YXRlcy4KKyAgICAgICAgc3RydWN0IERlZkxhbWJkYUFkYXB0b3IgeworICAg
ICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKFB1cmVWYWx1ZSk+IHB1cmVWYWx1ZTsKKyAgICAg
ICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChIZWFwTG9jYXRpb24sIExhenlOb2RlKT4gbG9jYXRp
b25BbmROb2RlOworCisgICAgICAgICAgICB2b2lkIG9wZXJhdG9yKCkoUHVyZVZhbHVlIHZhbHVl
KSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHB1cmVWYWx1ZSh2YWx1ZSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgb3BlcmF0b3IoKShIZWFwTG9jYXRp
b24gbG9jYXRpb24sIExhenlOb2RlIG5vZGUpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbG9jYXRpb25BbmROb2RlKGxvY2F0aW9uLCBub2RlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxv
Y2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJs
b2NrKSB7CisgICAgICAgICAgICAgICAgY2xvYmJlcml6ZShtX2dyYXBoLCBub2RlLAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKEFic3RyYWN0SGVhcCkgeyB9LAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKEFic3RyYWN0SGVhcCBoZWFwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBDU0UgYXNzdW1lcyB0aGF0IEhFQVAgVE9QIGlzIG5ldmVyIHdy
aXR0ZW4uCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGFzc3VtcHRpb24gaXMg
d2Vha2VuZWQsIHlvdSBuZWVkIHRvIHVwZGF0ZSBjbG9iYmVyaW5nCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpbiBDU0UgYWNjb3JkaW5nbHkuCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaGVhcC5raW5kKCkgPT0gU3RhY2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUpLCAhaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSk7CisgICAgICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgICAgIERlZkxhbWJkYUFkYXB0b3IgeworICAgICAgICAg
ICAgICAgICAgICAgICAgWyZdIChQdXJlVmFsdWUpIHsgfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFsmXSAoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBMYXp5Tm9kZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSks
IGxvY2F0aW9uLmhlYXAoKS5raW5kKCkgIT0gU2lkZVN0YXRlKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIE1vcmUgc3BlY2lmaWMga2luZHMgc2hvdWxkIGJlIHVzZWQgaW5zdGVh
ZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIGxvY2F0aW9u
LmhlYXAoKS5raW5kKCkgIT0gV29ybGQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChub2RlKSwgbG9jYXRpb24uaGVhcCgpLmtpbmQoKSAhPSBIZWFwKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogICAgIH0KICAgICAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9IYXNoU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKaW5kZXggNjhmOTU2Y2YzNTRm
ZjdiODg1NmVmNTNlZTZlOTdiYmMwYzZlZjVlZC4uYzlhMmZjMWM2ZDUyYmNlNDIwODQ2NTUxOTgw
NDQyOWQ3ZTQyMmVjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFNldC5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaApAQCAtMTAxLDYgKzEwMSw4IEBAIG5hbWVzcGFjZSBX
VEYgewogCiAgICAgICAgIGJvb2wgcmVtb3ZlKGNvbnN0IFZhbHVlVHlwZSYpOwogICAgICAgICBi
b29sIHJlbW92ZShpdGVyYXRvcik7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgICAgIHZvaWQgcmVtb3ZlSWYoY29uc3QgRnVuY3RvciYpOwogICAgICAgICB2b2lkIGNs
ZWFyKCk7CiAKICAgICAgICAgVmFsdWVUeXBlIHRha2UoY29uc3QgVmFsdWVUeXBlJik7CkBAIC0y
NTEsNiArMjUzLDEzIEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICBpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+OjpyZW1vdmVJZihjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgbV9pbXBsLnJlbW92ZUlmKGZ1bmN0
b3IpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+CiAgICAgaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6Y2xlYXIoKQogICAgIHsK
ICAgICAgICAgbV9pbXBsLmNsZWFyKCk7IApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFz
aFRyYWl0cy5oIGIvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCmluZGV4IGZjYTM1ZjM5OWRm
ZDBhMWRkZGYzYmI4MzhkNzMwODg2M2Q3NWUxYWIuLmI4ODYzODU4YWRkNmIwODlmNzA5MThiODVm
NDQwZWU0MDllY2ZkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKQEAgLTg1LDYgKzg1LDEzIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0cyA6IEdl
bmVyaWNIYXNoVHJhaXRzPFQ+CiAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoVCB2YWx1
ZSkgeyByZXR1cm4gdmFsdWUgPT0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkgLSAxOyB9
CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzIDogR2VuZXJpY0hhc2hUcmFpdHM8VD4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVt
cHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICBzdGF0aWMgVCBlbXB0eVZhbHVlKCkgeyByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWluKCk7IH0KKyAgICBzdGF0aWMgdm9pZCBjb25z
dHJ1Y3REZWxldGVkVmFsdWUoVCYgc2xvdCkgeyBzbG90ID0gc3RkOjpudW1lcmljX2xpbWl0czxU
Pjo6bWF4KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShUIHZhbHVlKSB7IHJl
dHVybiB2YWx1ZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsgfQorfTsKKwogLy8g
Q2FuIGJlIHVzZWQgd2l0aCBzdHJvbmcgZW51bXMsIGFsbG93cyB6ZXJvIGFzIGtleS4KIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTdHJvbmdFbnVtSGFzaFRyYWl0cyA6IEdlbmVyaWNIYXNo
VHJhaXRzPFQ+IHsKICAgICB1c2luZyBVbmRlcmx5aW5nVHlwZSA9IHR5cGVuYW1lIHN0ZDo6dW5k
ZXJseWluZ190eXBlPFQ+Ojp0eXBlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>