<?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>45397</bug_id>
          
          <creation_ts>2010-09-08 09:51:31 -0700</creation_ts>
          <short_desc>[EFL] Tiled Backing Store for Webkit-Efl</short_desc>
          <delta_ts>2010-11-23 07:24:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>45777</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Alex Bredariol Grilo">abgrilo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abgrilo</cc>
    
    <cc>antognolli+webkit</cc>
    
    <cc>barbieri</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joone</cc>
    
    <cc>jprvita</cc>
    
    <cc>kenneth</cc>
    
    <cc>koivisto</cc>
    
    <cc>leandro</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>275897</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Bredariol Grilo">abgrilo</who>
    <bug_when>2010-09-08 09:51:31 -0700</bug_when>
    <thetext>[EFL] Tiled Backing Store for Webkit-Efl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278386</commentid>
    <comment_count>1</comment_count>
      <attachid>67450</attachid>
    <who name="Alex Bredariol Grilo">abgrilo</who>
    <bug_when>2010-09-13 12:17:27 -0700</bug_when>
    <thetext>Created attachment 67450
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278393</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Bredariol Grilo">abgrilo</who>
    <bug_when>2010-09-13 12:24:13 -0700</bug_when>
    <thetext>Other bugs will be create for changes in WebCore, WebcoreSupport and EWebLauncher and then Tiled Backing Store will be working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278455</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-09-13 13:56:55 -0700</bug_when>
    <thetext>Why is this better than building on the tiling stuff in WebCore? In what ways is in better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278468</commentid>
    <comment_count>4</comment_count>
    <who name="Gustavo Sverzut Barbieri">barbieri</who>
    <bug_when>2010-09-13 14:12:30 -0700</bug_when>
    <thetext>Hi Kenneth,

As the one that designed it, I can join with possible insightful comments.

Unlike the code that were introduced by Qt, this one operates outside WebCore and as the benefit it does support all the features a regular page would need: iframes, frames and other nasty bits that in other would require frames to be flattened. In theory, if Evas was a bit more clever, we could do this in a transparent way... seems that Apple guys do this with their GraphicsCore, but I cannot say for sure.

The current code is quite simple: instead of rendering to a single image buffer that is later displayed, it does in a matrix of image buffers. The current implementation have all tiles to be proportional of the base-size at zoom 1.0, that is if we consider a base-size of 128x128, at zoom 2.0 it would be 256x256 and thus regions map perfectly and tiles from different zoom levels can be scaled to fit as placeholders while tiles render. Of course this provides some drawbacks, like very small zoom levels will produce lots of small objects, and very large will produce huge memory blobs, but it is serving us quite well (however in future we may provide alternative implementation with a different approach).

The other benefits remains the same: if you scroll you don&apos;t have to memmove regions inside the buffer, instead just ask the rendering system (evas or qt) to paint it at another position... with OpenGL you keep textures intact and avoid re-upload, etc.

I hope this is enough for upstream of these patches. If not let me know!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278474</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-09-13 14:19:32 -0700</bug_when>
    <thetext>Just a few comments before I&apos;m heading to bed...

(In reply to comment #4)
&gt; Unlike the code that were introduced by Qt, this one operates outside WebCore and as the benefit it does support all the features a regular page would need: iframes, frames and other nasty bits that in other would require frames to be flattened. In theory, if Evas was a bit more clever, we could do this in a transparent way... seems that Apple guys do this with their GraphicsCore, but I cannot say for sure.

The frame flattening is not actually due to the tiling, but more due to the touch interaction model where we do not want separate sub areas to scroll separately depending on where you pan.

&gt; The other benefits remains the same: if you scroll you don&apos;t have to memmove regions inside the buffer, instead just ask the rendering system (evas or qt) to paint it at another position... with OpenGL you keep textures intact and avoid re-upload, etc.

I believe there is nothing in the WebCore tiling implementation not making this possible. Maybe Antti can give some comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279125</commentid>
    <comment_count>6</comment_count>
    <who name="João Paulo Rechi Vita">jprvita</who>
    <bug_when>2010-09-14 13:17:20 -0700</bug_when>
    <thetext>Bugs 45750 and 45773 also adds changes on WebCore API needed for the tiled backing store fully work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282525</commentid>
    <comment_count>7</comment_count>
    <who name="Rafael Antognolli">antognolli+webkit</who>
    <bug_when>2010-09-21 13:35:18 -0700</bug_when>
    <thetext>Hi Kenneth,

Your tiled backing store seems to provide the basic functionality that we need, but some of them are not covered (and I&apos;m not sure it makes sense to add them to WebCore&apos;s TiledBackingStore.

For example, we need some operations to scale and move tiles for zoom (our weak zoom function) that doesn&apos;t seem easy to me to implement using the tiling model in WebCore.

Another point is our pre-rendering, and it seems to me not trivial to request WebCore to render more tiles that are not rendered or even close to the viewport yet. We allow this through an API that lets the client (browser) to decide when to pre-render these tiles, and which tiles should be pre-rendered.

We also cache the repaint and scroll operations until we really need to apply them (on one ecore main loop iteration). This is similar to what you do in your Tile::invalidate method, but instead of a timer we wait for Ecore and Evas to decide when to call the paint callbacks.

And we also don&apos;t drop tiles away when we are scrolling, but instead we keep them in a cache for being used later, and the cache decides when to drop the tiles.  This is our policy to dropping tiles based on the memory constraint set by the client/browser.

I believe that these and other kind of fine control over what happens to our tiles are possible to be implemented with your tiled backing store, but by the time of implementation we concluded that the design would become too complicated to enable that.

Since this code wasn&apos;t available/public yet, we couldn&apos;t discuss these changes that we needed on your backing store. I think now it&apos;s possible to do that, but we also would like to have our backing store upstreamed (since we have some good work on that).

I also think that we can later implement a tiled backing store using your tiling infrastructure, and maybe start upgrading it to allow these kind of features that we have, but now I think it&apos;s too early for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296859</commentid>
    <comment_count>8</comment_count>
      <attachid>71305</attachid>
    <who name="Alex Bredariol Grilo">abgrilo</who>
    <bug_when>2010-10-20 10:27:46 -0700</bug_when>
    <thetext>Created attachment 71305
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310473</commentid>
    <comment_count>9</comment_count>
      <attachid>71305</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-11-17 13:07:02 -0800</bug_when>
    <thetext>Comment on attachment 71305
Patch

As all this code is relevant for EFL only and isolated, I see no reason why it cannot go in.

The code has been looked over by EFL experts so r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312337</commentid>
    <comment_count>10</comment_count>
      <attachid>74552</attachid>
    <who name="Alex Bredariol Grilo">abgrilo</who>
    <bug_when>2010-11-22 07:37:58 -0800</bug_when>
    <thetext>Created attachment 74552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312646</commentid>
    <comment_count>11</comment_count>
      <attachid>74552</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-22 18:35:22 -0800</bug_when>
    <thetext>Comment on attachment 74552
Patch

Clearing flags on attachment: 74552

Committed r72579: &lt;http://trac.webkit.org/changeset/72579&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312831</commentid>
    <comment_count>12</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-11-23 07:24:56 -0800</bug_when>
    <thetext>All patches have landed, closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67450</attachid>
            <date>2010-09-13 12:17:27 -0700</date>
            <delta_ts>2010-10-20 10:27:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45397-20100913161717.patch</filename>
            <type>text/plain</type>
            <size>175586</size>
            <attacher name="Alex Bredariol Grilo">abgrilo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQgYi9XZWJLaXQvZWZsL0NN
YWtlTGlzdHNFZmwudHh0CmluZGV4IDAyMDM4NjViNDE0NjdmMjVmNmY2YTU5MjIyMTIwYThlZDcy
NDllYmYuLjQwNDExMjY5ZmNhN2Y0ZjdkNTllOWE1MjFiNDQxNzU5ZmZiMDMxYTMgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvV2ViS2l0L2VmbC9DTWFrZUxp
c3RzRWZsLnR4dApAQCAtNDYsOSArNDYsMTMgQEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMK
ICAgICBlZmwvZXdrL2V3a19oaXN0b3J5LmNwcAogICAgIGVmbC9ld2svZXdrX21haW4uY3BwCiAg
ICAgZWZsL2V3ay9ld2tfc2V0dGluZ3MuY3BwCisgICAgZWZsL2V3ay9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZS5jCisgICAgZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmMKKyAgICBlZmwvZXdrL2V3
a190aWxlZF9tb2RlbC5jCiAgICAgZWZsL2V3ay9ld2tfdXRpbC5jcHAKICAgICBlZmwvZXdrL2V3
a192aWV3LmNwcAogICAgIGVmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmMKKyAgICBlZmwvZXdrL2V3
a192aWV3X3RpbGVkLmMKICAgICBlZmwvZXdrL2V3a193aW5kb3dfZmVhdHVyZXMuY3BwCiApCiAK
ZGlmZiAtLWdpdCBhL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvV2ViS2l0L2VmbC9DaGFuZ2VMb2cK
aW5kZXggZWFlZWM1ODQxYWViMzVjZjNhY2FmMGEwYjY4ZjE5YWE5ZDk1MTlkMi4uMTA5MTc1OWI5
YmRmYWIzOTQwMGRmNjJlNzUzZTAzZDg0MDRhYWU4MyAxMDA2NDQKLS0tIGEvV2ViS2l0L2VmbC9D
aGFuZ2VMb2cKKysrIGIvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMTggQEAKKzIw
MTAtMDktMTMgIEFsZXggQnJlZGFyaW9sIEdyaWxvICA8YWJncmlsb0Bwcm9mdXNpb24ubW9iaT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgVGls
ZWQgQmFja2luZyBTdG9yZSB0byB0aGUgRUZMIHBvcnQuCisKKyAgICAgICAgVGhpcyB0aWxlIGJh
c2VkIGJhY2tpbmcgc3RvcmUgaXMgYSBncmlkIG9mIHRpbGVzIHdoZXJlIGVhY2ggdGlsZSBpcwor
ICAgICAgICBhbiBFdmFzX09iamVjdCBzaG93aW5nIGEgcGllY2Ugb2YgdGhlIHBhZ2UgY29udGVu
dC4gVGhlCisgICAgICAgIG5ldyBld2tfdmlld190aWxlZC5jIGlzIGFuIGltcGxlbWVudGF0aW9u
IG9mIHNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBvZgorICAgICAgICB0aGUgb3JpZ2luYWwgZXdrX3Zp
ZXcsIHRoYXQgbWFrZXMgY2FsbHMgdG8gdGhlIFRpbGVkIEJhY2tpbmcgU3RvcmUKKyAgICAgICAg
c3BlY2lmaWMgZnVuY3Rpb25zLgorCisgICAgICAgIFRoZSByZW5kZXJpbmcgb2NjdXJzIGluIHRo
ZSBwaXhlbHMgc3RvcmVkIGluIGVhY2ggdGlsZSAoRXZhc19PYmplY3QpLAorICAgICAgICBpbiB0
aGUgc2FtZSB3YXkgYXMgdGhlIHByZXZpb3VzIHNpbmdsZSBiYWNraW5nIHN0b3JlLiBUaWxlcyBu
b3QgYmVpbmcKKyAgICAgICAgc2hvd24gaW4gdGhlIHZpZXdwb3J0IGFyZSBzdG9yZWQgaW4gYSBj
YWNoZSwgYW5kIGNhbiBiZSByZXVzZWQgbGF0ZXIKKyAgICAgICAgdG8gYXZvaWQgaGF2aW5nIHRv
IGJlIHJlbmRlcmVkIGFnYWluLgorCisgICAgICAgIFNjcm9sbGluZyBvY2N1cnMgYXMganVzdCBt
b3ZpbmcgdGhlIHRpbGVzLCB1c2luZyBFdmFzIG1vdmUgb3BlcmF0aW9ucywKKyAgICAgICAgYW5k
IHdoZW4gbW9yZSB0aGFuIG9uZSB0aWxlIHNpemUgaXMgc2Nyb2xsZWQsIGEgc2hpZnQgb2Ygcm93
cyBvcgorICAgICAgICBjb2x1bW5zIG5lZWRzIHRvIGJlIGRvbmUuCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzRWZsLnR4dDoKKyAgICAgICAgKiBld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuYzog
QWRkZWQuCisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNz
KToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaCk6CisgICAgICAgIChf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcpOgorICAgICAgICAoX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fbW92ZSk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9yZXNpemUpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
YXNzb2NpYXRlKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3Nv
Y2lhdGUpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0
ZV9hbGwpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVx
dWVzdF9hZGQpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJf
cmVxdWVzdF9kZWwpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5k
ZXJfcmVxdWVzdF9maXJzdCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJl
X3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9wcmVfcmVuZGVyX3JlcXVlc3RfcmVtb3ZlX3VuYXNzb2NpYXRlZCk6CisgICAgICAgIChfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3JlbW92ZV9hc3NvY2lhdGVk
KToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3Rf
cHJvY2Vzc19zaW5nbGUpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
cHJvY2Vzc19pZGxlcl9jYik6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9wcm9jZXNzX2lkbGVyX3N0b3ApOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9yZXF1ZXN0X2RlbCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9yZXF1ZXN0X2FkZCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
ZGlzYWJsZV9yZW5kZXIpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJs
ZV9yZW5kZXIpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zpc2libGVfdGls
ZXNfcmVjdCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9pc19pbnNp
ZGVfdmlld3BvcnQpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfaXNf
YWRqYWNlbnRfdG9fdmlld3BvcnQpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fZmlsbCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQp
OgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVsKToKKyAgICAgICAg
KF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Ntb290aF9zY2FsZV9zZXQpOgorICAgICAg
ICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQpOgorICAgICAgICAoX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKToKKyAgICAgICAgKF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZCk6CisgICAgICAgIChfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdmlld19yb3dfZGVsKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X3Jvd3NfYWxsX2RlbCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcmVuZGVyKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRy
aXhfY3JlYXRlKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1i
ZXJfZGVsKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJf
YWRkKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKToKKyAgICAg
ICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zaWdfdXNyKToKKyAgICAgICAgKF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3NtYXJ0X2RlbCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21h
cnRfbW92ZSk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfcmVzaXpl
KToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKToK
KyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfc2l6ZSk6
CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcpOgorICAgICAgICAo
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF91cCk6CisgICAgICAgIChfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2Rvd24pOgorICAgICAgICAoX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X3dyYXBfcmlnaHQpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfcmVmaWxsKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X3Bvc19hcHBseSk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2Fs
Y3VsYXRlX29mZnNldF9mb3JjZSk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c21hcnRfY2FsY3VsYXRlX29mZnNldCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfc21hcnRfY2FsY3VsYXRlX3Bvcyk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfZmlsbF9yZW5kZXJlcnMpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X2NhbGN1bGF0ZSk6CisgICAgICAgIChld2tfdGlsZWRfYmFja2luZ19zdG9yZV9hZGQpOgor
ICAgICAgICAoZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyX2NiX3NldCk6CisgICAgICAg
IChld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9nZXQpOgorICAgICAg
ICAoZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfc2V0KToKKyAgICAg
ICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVy
bmFsKToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNl
dF9zZXQpOgorICAgICAgICAoZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zm
c2V0X2FkZCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50
ZXJuYWwpOgorICAgICAgICAoZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQpOgorICAg
ICAgICAoZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldCk6CisgICAgICAgIChl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyk6CisgICAgICAgIChld2tfdGlsZWRf
YmFja2luZ19zdG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldCk6CisgICAgICAgIChld2tf
dGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGUpOgorICAgICAgICAoZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdXBkYXRlc19wcm9jZXNzX3ByZV9zZXQpOgorICAgICAgICAoZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3Bvc3Rfc2V0KToKKyAgICAgICAgKGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyk6CisgICAgICAgIChld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV91cGRhdGVzX2NsZWFyKToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2NvbnRlbnRzX3Jlc2l6ZSk6CisgICAgICAgIChld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNh
YmxlZF91cGRhdGVfc2V0KToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNo
KToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVnaW9uKToK
KyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFk
aXVzKToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2Vs
KToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKToKKyAg
ICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIpOgorICAgICAgICAo
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJvY2Vzc19lbnRpcmVfcXVldWVfc2V0KToKKyAgICAg
ICAgKiBld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaDogQWRkZWQuCisgICAgICAgICogZXdr
L2V3a190aWxlZF9tYXRyaXguYzogQWRkZWQuCisgICAgICAgIChfZXdrX3RpbGVfbWF0cml4X2Nl
bGxfZnJlZSk6CisgICAgICAgIChfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSk6CisgICAgICAg
IChld2tfdGlsZV9tYXRyaXhfbmV3KToKKyAgICAgICAgKGV3a190aWxlX21hdHJpeF9mcmVlKToK
KyAgICAgICAgKGV3a190aWxlX21hdHJpeF9yZXNpemUpOgorICAgICAgICAoZXdrX3RpbGVfbWF0
cml4X3VudXNlZF9jYWNoZV9nZXQpOgorICAgICAgICAoZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhh
Y3RfZ2V0KToKKyAgICAgICAgKGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyk6Cisg
ICAgICAgIChld2tfdGlsZV9tYXRyaXhfdGlsZV9uZWFyZXN0X2dldCk6CisgICAgICAgIChld2tf
dGlsZV9tYXRyaXhfdGlsZV9uZXcpOgorICAgICAgICAoZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0
KToKKyAgICAgICAgKGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZSk6CisgICAgICAgIChld2tf
dGlsZV9tYXRyaXhfdGlsZV91cGRhdGVfZnVsbCk6CisgICAgICAgIChld2tfdGlsZV9tYXRyaXhf
dGlsZV91cGRhdGVzX2NsZWFyKToKKyAgICAgICAgKF9ld2tfdGlsZV9tYXRyaXhfc2xpY2VyX3Nl
dHVwKToKKyAgICAgICAgKGV3a190aWxlX21hdHJpeF91cGRhdGUpOgorICAgICAgICAoZXdrX3Rp
bGVfbWF0cml4X3VwZGF0ZXNfcHJvY2Vzcyk6CisgICAgICAgIChld2tfdGlsZV9tYXRyaXhfdXBk
YXRlc19jbGVhcik6CisgICAgICAgIChld2tfdGlsZV9tYXRyaXhfZGJnKToKKyAgICAgICAgKGV3
a190aWxlX21hdHJpeF9mcmVlemUpOgorICAgICAgICAoZXdrX3RpbGVfbWF0cml4X3RoYXcpOgor
ICAgICAgICAqIGV3ay9ld2tfdGlsZWRfbWF0cml4Lmg6IEFkZGVkLgorICAgICAgICAqIGV3ay9l
d2tfdGlsZWRfbW9kZWwuYzogQWRkZWQuCisgICAgICAgIChfZXdrX3RpbGVfYWNjb3VudF9nZXQp
OgorICAgICAgICAoX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKToKKyAgICAgICAgKF9ld2tf
dGlsZV9hY2NvdW50X2ZyZWVkKToKKyAgICAgICAgKGV3a190aWxlX2FjY291bnRpbmdfZGJnKToK
KyAgICAgICAgKF9ld2tfdGlsZV9wYWludF9yZ2I4ODgpOgorICAgICAgICAoX2V3a190aWxlX3Bh
aW50X3JnYjU2NSk6CisgICAgICAgIChfZXdrX3RpbGVfcGFpbnQpOgorICAgICAgICAoZXdrX3Rp
bGVfbmV3KToKKyAgICAgICAgKGV3a190aWxlX2ZyZWUpOgorICAgICAgICAoZXdrX3RpbGVfc2hv
dyk6CisgICAgICAgIChld2tfdGlsZV9oaWRlKToKKyAgICAgICAgKGV3a190aWxlX3Zpc2libGVf
Z2V0KToKKyAgICAgICAgKGV3a190aWxlX3VwZGF0ZV9mdWxsKToKKyAgICAgICAgKGV3a190aWxl
X3VwZGF0ZV9hcmVhKToKKyAgICAgICAgKGV3a190aWxlX3VwZGF0ZXNfcHJvY2Vzcyk6CisgICAg
ICAgIChld2tfdGlsZV91cGRhdGVzX2NsZWFyKToKKyAgICAgICAgKGV3a190aWxlX3VudXNlZF9j
YWNoZV9uZXcpOgorICAgICAgICAoZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSk6Cisg
ICAgICAgIChld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEpOgorICAgICAgICAoZXdr
X3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUpOgorICAgICAgICAoZXdrX3RpbGVfdW51c2VkX2NhY2hl
X2NsZWFyKToKKyAgICAgICAgKGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYpOgorICAgICAgICAo
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKToKKyAgICAgICAgKGV3a190aWxlX3VudXNlZF9j
YWNoZV9tYXhfc2V0KToKKyAgICAgICAgKGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfZ2V0KToK
KyAgICAgICAgKGV3a190aWxlX3VudXNlZF9jYWNoZV91c2VkX2dldCk6CisgICAgICAgIChld2tf
dGlsZV91bnVzZWRfY2FjaGVfZmx1c2gpOgorICAgICAgICAoZXdrX3RpbGVfdW51c2VkX2NhY2hl
X2F1dG9fZmx1c2gpOgorICAgICAgICAoZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RpcnR5KToKKyAg
ICAgICAgKGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUpOgorICAgICAgICAoZXdrX3RpbGVf
dW51c2VkX2NhY2hlX3RoYXcpOgorICAgICAgICAoZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVf
Z2V0KToKKyAgICAgICAgKGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dCk6CisgICAgICAg
IChld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKToKKyAgICAgICAgKiBld2svZXdrX3RpbGVkX21v
ZGVsLmg6IEFkZGVkLgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRfcHJpdmF0ZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBld2svZXdrX3ZpZXcuY3BwOgorICAgICAgICAoX2V3a192aWV3X3NtYXJ0X2Fk
ZCk6CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfY2FsY3VsYXRlKToKKyAgICAgICAgKF9ld2tf
dmlld19zbWFydF9zaG93KToKKyAgICAgICAgKF9ld2tfdmlld19zbWFydF9oaWRlKToKKyAgICAg
ICAgKF9ld2tfdmlld19zbWFydF96b29tX3NldCk6CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRf
Zmx1c2gpOgorICAgICAgICAoX2V3a192aWV3X3NtYXJ0X3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFk
aXVzKToKKyAgICAgICAgKF9ld2tfdmlld196b29tX2FuaW1hdG9yX2NiKToKKyAgICAgICAgKF9l
d2tfdmlld19zbWFydF9kaXNhYmxlX3JlbmRlcik6CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRf
ZW5hYmxlX3JlbmRlcik6CisgICAgICAgIChld2tfdmlld19iYXNlX3NtYXJ0X3NldCk6CisgICAg
ICAgIChld2tfdmlld19wcmVfcmVuZGVyX3JlZ2lvbik6CisgICAgICAgIChld2tfdmlld19wcmVf
cmVuZGVyX3JlbGF0aXZlX3JhZGl1cyk6CisgICAgICAgIChld2tfdmlld19lbmFibGVfcmVuZGVy
KToKKyAgICAgICAgKGV3a192aWV3X2Rpc2FibGVfcmVuZGVyKToKKyAgICAgICAgKGV3a192aWV3
X3Njcm9sbCk6CisgICAgICAgIChld2tfdmlld19kaWRfZmlyc3RfdmlzdWFsbHlfbm9uZW1wdHlf
bGF5b3V0KToKKyAgICAgICAgKGV3a192aWV3X2Rpc3BhdGNoX2RpZF9maW5pc2hfbG9hZGluZyk6
CisgICAgICAgIChld2tfdmlld190cmFuc2l0aW9uX3RvX2NvbW1pdGVkX2Zvcl9uZXdwYWdlKToK
KyAgICAgICAgKiBld2svZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBld2svZXdrX3ZpZXdfdGlsZWQu
YzogQWRkZWQuCisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfcmVuZGVyX2NiKToKKyAgICAgICAg
KF9ld2tfdmlld190aWxlZF91cGRhdGVzX3Byb2Nlc3NfcHJlKToKKyAgICAgICAgKF9ld2tfdmll
d190aWxlZF9zbWFydF9iYWNraW5nX3N0b3JlX2FkZCk6CisgICAgICAgIChfZXdrX3ZpZXdfdGls
ZWRfY29udGVudHNfc2l6ZV9jaGFuZ2VkX2NiKToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9z
bWFydF9hZGQpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0X3Njcm9sbHNfcHJvY2Vz
cyk6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcmVwYWludHNfcHJvY2Vzcyk6Cisg
ICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfY29udGVudHNfcmVzaXplKToKKyAgICAgICAg
KF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3NldCk6CisgICAgICAgIChfZXdrX3ZpZXdfdGls
ZWRfc21hcnRfem9vbV93ZWFrX3NldCk6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRf
em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3Nt
YXJ0X2ZsdXNoKToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX3Jl
Z2lvbik6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9yZWxhdGl2
ZV9yYWRpdXMpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJfY2Fu
Y2VsKToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF9kaXNhYmxlX3JlbmRlcik6Cisg
ICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfZW5hYmxlX3JlbmRlcik6CisgICAgICAgIChl
d2tfdmlld190aWxlZF9zbWFydF9zZXQpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0
X2NsYXNzX25ldyk6CisgICAgICAgIChld2tfdmlld190aWxlZF9hZGQpOgorICAgICAgICAoZXdr
X3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX2dldCk6CisgICAgICAgIChld2tfdmlld190aWxlZF91
bnVzZWRfY2FjaGVfc2V0KToKKyAgICAgICAgKGV3a192aWV3X3RpbGVkX3Byb2Nlc3NfZW50aXJl
X3F1ZXVlX3NldCk6CisKIDIwMTAtMDktMDMgIEx1Y2FzIERlIE1hcmNoaSAgPGx1Y2FzLmRlbWFy
Y2hpQHByb2Z1c2lvbi5tb2JpPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNv
bi4KZGlmZiAtLWdpdCBhL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmMg
Yi9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJk
Nzk1YWI4MmQ1ZGZjNjllOWViNDczN2ZmYjI2NTE2MDAwOGYxNzcKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jCkBAIC0wLDAgKzEsMjEz
OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNz
CisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmUuaCIKKworI2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgImV3a190aWxlZF9wcml2YXRl
LmgiCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8ZXJy
bm8uaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4gLy8gWFhYIFJFTU9W
RSBNRSBMQVRFUgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisj
ZGVmaW5lIElEWChjb2wsIHJvdywgcm93c3BhbikgKGNvbCArIChyb3cgKiByb3dzcGFuKSkKKwor
I2lmICFkZWZpbmVkKE1JTikKKyMgZGVmaW5lIE1JTihhLCBiKSAoKGEgPCBiKSA/IGEgOiBiKQor
I2VuZGlmCisKKyNpZiAhZGVmaW5lZChNQVgpCisjIGRlZmluZSBNQVgoYSwgYikgKChhID4gYikg
PyBhIDogYikKKyNlbmRpZgorCit0eXBlZGVmIGVudW0gX0V3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X1ByZV9SZW5kZXJfUHJpb3JpdHkgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Q
cmlvcml0eTsKK3R5cGVkZWYgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGE7Cit0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtOwordHlwZWRlZiBz
dHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Q7CisKK2VudW0gX0V3a19UaWxlZF9C
YWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgeworICAgIFBSRV9SRU5ERVJfUFJJT1JJ
VFlfTE9XID0gMCwgLyoqPCBBcHBlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGxpc3QgKi8KKyAgICBQ
UkVfUkVOREVSX1BSSU9SSVRZX0hJR0ggICAgIC8qKjwgUHJlcGVuZCB0aGUgcmVxdWVzdCB0byB0
aGUgbGlzdCAqLworfTsKKworc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtIHsK
KyAgICBFSU5BX0lOTElTVDsKKyAgICBFd2tfVGlsZSAqdGlsZTsKKyAgICBzdHJ1Y3QgeworICAg
ICAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisgICAgfSBnZW9tZXRyeTsKKyAgICBzdHJ1Y3Qg
eworICAgICAgICBFaW5hX0xpc3QgKnByb2Nlc3M7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcm93
LCBjb2w7CisgICAgICAgIGZsb2F0IHpvb207CisgICAgfSB1cGRhdGU7CisgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpwcmVfcmVuZGVyOworICAgIEVpbmFf
Qm9vbCBzbW9vdGhfc2NhbGU7Cit9OworCitzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X1ByZV9SZW5kZXJfUmVxdWVzdCB7CisgICAgRUlOQV9JTkxJU1Q7CisgICAgdW5zaWduZWQgbG9u
ZyBjb2wsIHJvdzsKKyAgICBmbG9hdCB6b29tOworICAgIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSAqaXQ7Cit9OworCitzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgeworICAgIEV2YXNfT2JqZWN0X1NtYXJ0X0NsaXBwZWRfRGF0YSBiYXNlOworICAgIEV2
YXNfT2JqZWN0ICpzZWxmOworICAgIEV2YXNfT2JqZWN0ICpjb250ZW50c19jbGlwcGVyOworICAg
IHN0cnVjdCB7CisgICAgICAgIEVpbmFfSW5saXN0ICoqaXRlbXM7CisgICAgICAgIEV2YXNfQ29v
cmQgeCwgeSwgdywgaDsKKyAgICAgICAgbG9uZyBjb2xzLCByb3dzOworICAgICAgICBzdHJ1Y3Qg
eworICAgICAgICAgICAgRXZhc19Db29yZCB3LCBoOworICAgICAgICAgICAgZmxvYXQgem9vbTsK
KyAgICAgICAgICAgIEVpbmFfQm9vbCB6b29tX3dlYWtfc21vb3RoX3NjYWxlOjE7CisgICAgICAg
IH0gdGlsZTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAg
ICAgICAgICAgRXZhc19Db29yZCB4LCB5OworICAgICAgICAgICAgfSBjdXIsIG9sZCwgYmFzZSwg
em9vbV9jZW50ZXI7CisgICAgICAgIH0gb2Zmc2V0OworICAgIH0gdmlldzsKKyAgICBFdmFzX0Nv
bG9yc3BhY2UgY3NwYWNlOworICAgIHN0cnVjdCB7CisgICAgICAgIEV3a19UaWxlX01hdHJpeCAq
bWF0cml4OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2ws
IHJvdzsKKyAgICAgICAgfSBiYXNlOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdW5z
aWduZWQgbG9uZyBjb2xzLCByb3dzOworICAgICAgICB9IGN1ciwgb2xkOworICAgICAgICBFdmFz
X0Nvb3JkIHdpZHRoLCBoZWlnaHQ7CisgICAgfSBtb2RlbDsKKyAgICBzdHJ1Y3QgeworICAgICAg
ICBFaW5hX0Jvb2wgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVj
dGFuZ2xlICphcmVhKTsKKyAgICAgICAgdm9pZCAqZGF0YTsKKyAgICAgICAgRWluYV9MaXN0ICpx
dWV1ZTsKKyAgICAgICAgRWluYV9Cb29sIHByb2Nlc3NfZW50aXJlX3F1ZXVlOworICAgICAgICBF
aW5hX0lubGlzdCAqcHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICAgICAgRWNvcmVfSWRsZXIgKmlk
bGVyOworICAgICAgICBFaW5hX0Jvb2wgZGlzYWJsZWQ7CisgICAgICAgIEVpbmFfQm9vbCBzdXNw
ZW5kOjE7CisgICAgfSByZW5kZXI7CisgICAgc3RydWN0IHsKKyAgICAgICAgdm9pZCAqKCpwcmVf
Y2IpKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKTsKKyAgICAgICAgdm9pZCAqcHJlX2RhdGE7
CisgICAgICAgIHZvaWQgKigqcG9zdF9jYikodm9pZCAqZGF0YSwgdm9pZCAqcHJlX2RhdGEsIEV2
YXNfT2JqZWN0ICpvKTsKKyAgICAgICAgdm9pZCAqcG9zdF9kYXRhOworICAgIH0gcHJvY2VzczsK
KyAgICBzdHJ1Y3QgeworICAgICAgICBFaW5hX0Jvb2wgYW55OjE7CisgICAgICAgIEVpbmFfQm9v
bCBwb3M6MTsKKyAgICAgICAgRWluYV9Cb29sIHNpemU6MTsKKyAgICAgICAgRWluYV9Cb29sIG1v
ZGVsOjE7CisgICAgICAgIEVpbmFfQm9vbCBvZmZzZXQ6MTsKKyAgICB9IGNoYW5nZWQ7CisjaWZk
ZWYgREVCVUdfTUVNX0xFQUtTCisgICAgRWNvcmVfRXZlbnRfSGFuZGxlciAqc2lnX3VzcjsKKyNl
bmRpZgorfTsKKworc3RhdGljIEV2YXNfU21hcnRfQ2xhc3MgX3BhcmVudF9zYyA9IEVWQVNfU01B
UlRfQ0xBU1NfSU5JVF9OVUxMOworaW50IF9ld2tfdGlsZWRfbG9nX2RvbSA9IC0xOworCisjZGVm
aW5lIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG9iaiwgcHRyLCAuLi4pICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHRyID0gZXZhc19v
YmplY3Rfc21hcnRfZGF0YV9nZXQob2JqKTsgXAorICAgIGlmICghcHRyKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDUklU
SUNBTCgibm8gcHJpdmF0ZSBkYXRhIGluIG9iaj0lcCIsIG9iaik7ICAgICAgICAgICAgICAgICAg
XAorICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIH0KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX3JlcXVlc3RfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0KTsKK3N0YXRpYyBpbmxp
bmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXF1ZXN0X2FkZChFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
ICppdCwgaW50IG1fY29sLCBpbnQgbV9yb3csIGZsb2F0IHpvb20pOworc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnByaXYpOworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KTsK
K3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KTsKKworc3RhdGljIGlubGluZSB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICB2b2lkICpkYXRhID0gTlVMTDsKKworICAgIC8qIERv
IG5vdCBwcm9jZXNzIHVwZGF0ZXMuIE5vdGUgdGhhdCB3ZSBzdGlsbCB3YW50IHRvIGdldCB1cGRh
dGVzIHJlcXVlc3RzCisgICAgICogaW4gdGhlIHF1ZXVlIGluIG9yZGVyIHRvIG5vdCBtaXNzIGFu
eSB1cGRhdGVzIGFmdGVyIHRoZSByZW5kZXIgaXMKKyAgICAgKiByZXN1bWVkLgorICAgICAqLwor
ICAgIGlmIChwcml2LT5yZW5kZXIuc3VzcGVuZCB8fCAhZXZhc19vYmplY3RfdmlzaWJsZV9nZXQo
cHJpdi0+c2VsZikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwcml2LT5wcm9jZXNzLnBy
ZV9jYikKKyAgICAgICAgZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nlc3Mu
cHJlX2RhdGEsIHByaXYtPnNlbGYpOworCisgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfcHJv
Y2Vzcyhwcml2LT5tb2RlbC5tYXRyaXgpOworCisgICAgaWYgKHByaXYtPnByb2Nlc3MucG9zdF9j
YikKKyAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9kYXRh
LCBkYXRhLCBwcml2LT5zZWxmKTsKK30KKworc3RhdGljIGludCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfZmx1c2godm9pZCAqZGF0YSkKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhICpwcml2ID0gZGF0YTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YyA9IGV3a190
aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBp
ZiAodHVjKSB7CisgICAgICAgIERCRygiZmx1c2ggdW51c2VkIHRpbGUgY2FjaGUuIik7CisgICAg
ICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CisgICAgfSBlbHNlCisg
ICAgICAgIEVSUigibm8gY2FjaGU/ISIpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBF
d2tfVGlsZSAqX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJv
dywgZmxvYXQgem9vbSkKK3sKKyAgICBFd2tfVGlsZSAqdDsKKyAgICBFdmFzICpldmFzID0gZXZh
c19vYmplY3RfZXZhc19nZXQocHJpdi0+c2VsZik7CisgICAgaWYgKCFldmFzKSB7CisgICAgICAg
IENSSVRJQ0FMKCJldmFzX29iamVjdF9ldmFzX2dldCBmYWlsZWQhIik7CisgICAgICAgIHJldHVy
biBOVUxMOworICAgIH0KKworICAgIHQgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcKKyAgICAg
ICAgKHByaXYtPm1vZGVsLm1hdHJpeCwgZXZhcywgY29sLCByb3csIHpvb20pOworCisgICAgaWYg
KCF0KSB7CisgICAgICAgIENSSVRJQ0FMKCJld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcgZmFpbGVk
ISIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gdDsKK30KKwor
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtICppdCwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7Cisg
ICAgaXQtPmdlb21ldHJ5LnggPSB4OworICAgIGl0LT5nZW9tZXRyeS55ID0geTsKKworICAgIGlm
IChpdC0+dGlsZSkKKyAgICAgICAgZXZhc19vYmplY3RfbW92ZShpdC0+dGlsZS0+aW1hZ2UsIHgs
IHkpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNp
emUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEV2YXNfQ29vcmQgdywgRXZhc19D
b29yZCBoKQoreworICAgIGl0LT5nZW9tZXRyeS53ID0gdzsKKyAgICBpdC0+Z2VvbWV0cnkuaCA9
IGg7CisKKyAgICBpZiAoaXQtPnRpbGUpIHsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKGl0
LT50aWxlLT5pbWFnZSwgdywgaCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0
KGl0LT50aWxlLT5pbWFnZSwgMCwgMCwgdywgaCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGUgKnQsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0
ZW0gKml0KQoreworICAgIGlmIChpdC0+dGlsZSkKKyAgICAgICAgQ1JJVElDQUwoIml0LT50aWxl
PSVwLCBidXQgaXQgc2hvdWxkIGJlIE5VTEwhIiwgaXQtPnRpbGUpOworICAgIGl0LT50aWxlID0g
dDsKKyAgICBldmFzX29iamVjdF9tb3ZlKGl0LT50aWxlLT5pbWFnZSwgaXQtPmdlb21ldHJ5Lngs
IGl0LT5nZW9tZXRyeS55KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoaXQtPnRpbGUtPmltYWdl
LCBpdC0+Z2VvbWV0cnkudywgaXQtPmdlb21ldHJ5LmgpOworICAgIGV2YXNfb2JqZWN0X2ltYWdl
X2ZpbGxfc2V0CisgICAgICAgIChpdC0+dGlsZS0+aW1hZ2UsIDAsIDAsIGl0LT5nZW9tZXRyeS53
LCBpdC0+Z2VvbWV0cnkuaCk7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3Nl
dChpdC0+dGlsZS0+aW1hZ2UsIGl0LT5zbW9vdGhfc2NhbGUpOworCisgICAgaWYgKCFld2tfdGls
ZV92aXNpYmxlX2dldCh0KSkKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZCh0
LT5pbWFnZSwgcHJpdi0+c2VsZik7CisKKyAgICBld2tfdGlsZV9zaG93KHQpOworfQorCitzdGF0
aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0g
Kml0LCBkb3VibGUgbGFzdF91c2VkKQoreworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
OworICAgIGV3a190aWxlX2hpZGUoaXQtPnRpbGUpOworICAgIGlmICghZXdrX3RpbGVfdmlzaWJs
ZV9nZXQoaXQtPnRpbGUpKQorICAgICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVsKGl0
LT50aWxlLT5pbWFnZSk7CisgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KHByaXYtPm1vZGVs
Lm1hdHJpeCwgaXQtPnRpbGUsIGxhc3RfdXNlZCk7CisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4
X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOworCisgICAgaXQtPnRpbGUgPSBOVUxMOworfQorCitz
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIEVpbmFfSW5saXN0ICpp
dDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdGVtOworICAgIGludCBpOwor
ICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CisKKyAgICBmb3Ig
KGkgPSAwOyBpIDwgcHJpdi0+dmlldy5yb3dzOyBpKyspIHsKKyAgICAgICAgaXQgPSBwcml2LT52
aWV3Lml0ZW1zW2ldOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGl0LCBpdGVtKQorICAg
ICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpCisgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdGVtLCBsYXN0X3VzZWQpOworICAgIH0K
K30KKworc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3By
ZV9yZW5kZXJfcmVxdWVzdF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwg
dW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tLCBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1Jl
bmRlcl9Qcmlvcml0eSBwcmlvcml0eSkKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9Q
cmVfUmVuZGVyX1JlcXVlc3QgKnI7CisKKyAgICBNQUxMT0NfT1JfT09NX1JFVChyLCBzaXplb2Yo
KnIpLCBFSU5BX0ZBTFNFKTsKKworICAgIGlmIChwcmlvcml0eSA9PSBQUkVfUkVOREVSX1BSSU9S
SVRZX0hJR0gpCisgICAgICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWlu
YV9pbmxpc3RfcHJlcGVuZAorICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3Jl
cXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOworICAgIGVsc2UKKyAgICAgICAgcHJpdi0+cmVu
ZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9hcHBlbmQKKyAgICAgICAgICAg
IChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsK
KworICAgIHItPmNvbCA9IGNvbDsKKyAgICByLT5yb3cgPSByb3c7CisgICAgci0+em9vbSA9IHpv
b207CisgICAgci0+aXQgPSBpdDsKKworICAgIGlmIChpdCkKKyAgICAgICAgaXQtPnByZV9yZW5k
ZXIgPSByOworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVu
ZGVyX1JlcXVlc3QgKnIpCit7CisgICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMg
PSBlaW5hX2lubGlzdF9yZW1vdmUKKyAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3Jl
cXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOworICAgIGZyZWUocik7Cit9CisKK3N0YXRpYyBp
bmxpbmUgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KGNvbnN0IEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgcmV0dXJuIEVJTkFfSU5MSVNUX0NP
TlRBSU5FUl9HRVQoCisgICAgICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLAor
ICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOworfQor
CitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0
X2ZsdXNoKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRWluYV9J
bmxpc3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICB3aGls
ZSAoKnBsKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVx
dWVzdCAqcjsKKyAgICAgICAgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVy
X3JlcXVlc3RfZmlyc3QocHJpdik7CisgICAgICAgIGlmIChyLT5pdCAmJiByLT5pdC0+cHJlX3Jl
bmRlcikKKyAgICAgICAgICAgIHItPml0LT5wcmVfcmVuZGVyID0gTlVMTDsKKyAgICAgICAgKnBs
ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwbCwgKnBsKTsKKyAgICAgICAgZnJlZShyKTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3Jl
cXVlc3RfcmVtb3ZlX3VuYXNzb2NpYXRlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2KQoreworICAgIEVpbmFfSW5saXN0ICoqcGwgPSAmcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJf
cmVxdWVzdHM7CisgICAgRWluYV9Jbmxpc3QgKml0ZXIgPSAqcGwsICp0bXA7CisgICAgd2hpbGUg
KGl0ZXIpIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1
ZXN0ICpyID0KKyAgICAgICAgICAgIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCisgICAgICAg
ICAgICAgICAgaXRlciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0
KTsKKyAgICAgICAgaWYgKCFyLT5pdCkgeworICAgICAgICAgICAgdG1wID0gaXRlci0+bmV4dDsK
KyAgICAgICAgICAgICpwbCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcGwsIGl0ZXIpOworICAgICAg
ICAgICAgaXRlciA9IHRtcDsKKyAgICAgICAgICAgIGZyZWUocik7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgaXRlciA9IGl0ZXItPm5leHQ7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3JlbW92ZV9hc3NvY2lh
dGVkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRWluYV9Jbmxp
c3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICBFaW5hX0lu
bGlzdCAqaXRlciA9ICpwbCwgKnRtcDsKKyAgICB3aGlsZSAoaXRlcikgeworICAgICAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIgPQorICAgICAgICAgICAg
RUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKKyAgICAgICAgICAgICAgICBpdGVyLCBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOworICAgICAgICBpZiAoci0+aXQp
IHsKKyAgICAgICAgICAgIGlmIChyLT5pdC0+cHJlX3JlbmRlcikKKyAgICAgICAgICAgICAgICBy
LT5pdC0+cHJlX3JlbmRlciA9IE5VTEw7CisgICAgICAgICAgICB0bXAgPSBpdGVyLT5uZXh0Owor
ICAgICAgICAgICAgKnBsID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwbCwgaXRlcik7CisgICAgICAg
ICAgICBpdGVyID0gdG1wOworICAgICAgICAgICAgZnJlZShyKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBpdGVyID0gaXRlci0+bmV4dDsKKyAgICB9Cit9CisKKy8qIGFzc3VtZXMgcHJp
di0+cHJvY2Vzcy5wcmVfY2Igd2FzIGNhbGxlZCBpZiByZXF1aXJlZCEgKi8KK3N0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5n
bGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnJlcTsKKyAgICBFaW5hX1JlY3Rhbmds
ZSBhcmVhOworICAgIEV3a19UaWxlX01hdHJpeCAqdG0gPSBwcml2LT5tb2RlbC5tYXRyaXg7Cisg
ICAgRXdrX1RpbGUgKnQ7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgdW5z
aWduZWQgbG9uZyBjb2wsIHJvdzsKKyAgICBmbG9hdCB6b29tOworICAgIGRvdWJsZSBsYXN0X3Vz
ZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CisKKyAgICByZXEgPSBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KHByaXYpOworICAgIGlmICghcmVxKQor
ICAgICAgICByZXR1cm47CisKKyAgICBjb2wgPSByZXEtPmNvbDsKKyAgICByb3cgPSByZXEtPnJv
dzsKKyAgICB6b29tID0gcmVxLT56b29tOworCisgICAgaWYgKGV3a190aWxlX21hdHJpeF90aWxl
X2V4YWN0X2V4aXN0cyh0bSwgY29sLCByb3csIHpvb20pKSB7CisgICAgICAgIERCRygibm8gcHJl
LXJlbmRlciByZXF1aXJlZCBmb3IgdGlsZSAlbHUsJWx1IEAgJWYuIiwgY29sLCByb3csIHpvb20p
OworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAocmVxLT5pdCAmJiByZXEtPml0
LT50aWxlKSB7CisgICAgICAgIENSSVRJQ0FMKCJpdC0+dGlsZSA9ICVwICglbHUsICVsdSksIGJ1
dCBzaG91bGQgYmUgTlVMTCIsIHJlcS0+aXQtPnRpbGUsIHJlcS0+aXQtPnRpbGUtPnJvdywgcmVx
LT5pdC0+dGlsZS0+Y29sKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgdCA9IF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2LCBjb2wsIHJvdywgem9vbSk7Cisg
ICAgaWYgKCF0KQorICAgICAgICBnb3RvIGVuZDsKKworICAgIGFyZWEueCA9IDA7CisgICAgYXJl
YS55ID0gMDsKKyAgICBhcmVhLncgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBhcmVhLmggPSBw
cml2LT52aWV3LnRpbGUuaDsKKworICAgIHByaXYtPnJlbmRlci5jYihwcml2LT5yZW5kZXIuZGF0
YSwgdCwgJmFyZWEpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZCgKKyAg
ICAgICAgdC0+aW1hZ2UsCisgICAgICAgIGFyZWEueCwgYXJlYS55LCBhcmVhLncsIGFyZWEuaCk7
CisgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcih0bSwgdCk7CisKKyAgICBp
ZiAocmVxLT5pdCkgeworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3Nv
Y2lhdGUocHJpdiwgdCwgcmVxLT5pdCk7CisgICAgICAgIGlmIChyZXEtPml0LT5wcmVfcmVuZGVy
KQorICAgICAgICAgICAgcmVxLT5pdC0+cHJlX3JlbmRlciA9IE5VTEw7CisgICAgfSBlbHNlCisg
ICAgICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dCh0bSwgdCwgbGFzdF91c2VkKTsKKworZW5k
OgorICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKHBy
aXYsIHJlcSk7CisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJp
di0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0
dWMpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVt
X3Byb2Nlc3NfaWRsZXJfY2Iodm9pZCAqZGF0YSkKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2ID0gZGF0YTsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
ICppdCA9IE5VTEw7CisKKyAgICB3aGlsZSAocHJpdi0+cmVuZGVyLnF1ZXVlKSB7CisgICAgICAg
IGl0ID0gcHJpdi0+cmVuZGVyLnF1ZXVlLT5kYXRhOworICAgICAgICBpZiAoaXQtPnRpbGUtPnpv
b20gPT0gcHJpdi0+dmlldy50aWxlLnpvb20pIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX3JlcXVlc3RfZGVsKHByaXYsIGl0KTsKKyAgICAgICAgICAgIGl0ID0g
TlVMTDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcm93LCBj
b2w7CisgICAgICAgICAgICBmbG9hdCB6b29tOworICAgICAgICAgICAgRXdrX1RpbGUgKnQ7Cisg
ICAgICAgICAgICBpZiAoaXQtPnRpbGUpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgbGFzdF91
c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOworICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsIGxhc3RfdXNlZCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJvdyA9IGl0LT51cGRhdGUucm93OworICAgICAgICAg
ICAgY29sID0gaXQtPnVwZGF0ZS5jb2w7CisgICAgICAgICAgICB6b29tID0gaXQtPnVwZGF0ZS56
b29tOworICAgICAgICAgICAgdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhw
cml2LCBjb2wsIHJvdywgem9vbSk7CisgICAgICAgICAgICBpZiAoIXQpIHsKKyAgICAgICAgICAg
ICAgICBwcml2LT5yZW5kZXIuaWRsZXIgPSBOVUxMOworICAgICAgICAgICAgICAgIHJldHVybiBF
SU5BX0ZBTFNFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUocHJpdiwgdCwgaXQpOworICAgICAgICAgICAgaXQtPnVw
ZGF0ZS5wcm9jZXNzID0gTlVMTDsKKyAgICAgICAgICAgIHByaXYtPnJlbmRlci5xdWV1ZSA9IGVp
bmFfbGlzdF9yZW1vdmVfbGlzdChwcml2LT5yZW5kZXIucXVldWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+cmVuZGVyLnF1ZXVl
KTsKKyAgICAgICAgICAgIGlmICghcHJpdi0+cmVuZGVyLnByb2Nlc3NfZW50aXJlX3F1ZXVlKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHByaXYt
PnByb2Nlc3MucHJlX2NiKQorICAgICAgICBkYXRhID0gcHJpdi0+cHJvY2Vzcy5wcmVfY2IocHJp
di0+cHJvY2Vzcy5wcmVfZGF0YSwgcHJpdi0+c2VsZik7CisKKyAgICBld2tfdGlsZV9tYXRyaXhf
dXBkYXRlc19wcm9jZXNzKHByaXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBpZiAoIWl0KQorICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nf
c2luZ2xlKHByaXYpOworCisgICAgaWYgKHByaXYtPnByb2Nlc3MucG9zdF9jYikKKyAgICAgICAg
cHJpdi0+cHJvY2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9kYXRhLCBkYXRhLCBwcml2
LT5zZWxmKTsKKworICAgIGlmICghcHJpdi0+cmVuZGVyLnF1ZXVlICYmICFwcml2LT5yZW5kZXIu
cHJlX3JlbmRlcl9yZXF1ZXN0cykgeworICAgICAgICBwcml2LT5yZW5kZXIuaWRsZXIgPSBOVUxM
OworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAgICByZXR1cm4gRUlOQV9U
UlVFOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYp
Cit7CisgICAgaWYgKCFwcml2LT5yZW5kZXIuaWRsZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IGVjb3JlX2lkbGVyX2RlbChwcml2LT5yZW5kZXIuaWRsZXIpOworICAgIHByaXYtPnJlbmRlci5p
ZGxlciA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYpCit7CisgICAgaWYgKHByaXYtPnJlbmRlci5pZGxlcikKKyAgICAgICAgcmV0dXJu
OworICAgIHByaXYtPnJlbmRlci5pZGxlciA9IGVjb3JlX2lkbGVyX2FkZCgKKyAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9jYiwgcHJpdik7Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXF1ZXN0
X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9JdGVtICppdCkKK3sKKyAgICBwcml2LT5yZW5kZXIucXVldWUgPSBlaW5hX2xpc3Rf
cmVtb3ZlX2xpc3QocHJpdi0+cmVuZGVyLnF1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpdC0+dXBkYXRlLnByb2Nlc3MpOworICAgIGl0LT51cGRh
dGUucHJvY2VzcyA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9yZXF1ZXN0X2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgaW50IG1fY29sLCBpbnQg
bV9yb3csIGZsb2F0IHpvb20pCit7CisgICAgaWYgKGl0LT51cGRhdGUucHJvY2VzcykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaXQtPnVwZGF0ZS5jb2wgPSBtX2NvbDsKKyAgICBpdC0+dXBkYXRl
LnJvdyA9IG1fcm93OworICAgIGl0LT51cGRhdGUuem9vbSA9IHpvb207CisKKyAgICBwcml2LT5y
ZW5kZXIucXVldWUgPSBlaW5hX2xpc3RfYXBwZW5kKHByaXYtPnJlbmRlci5xdWV1ZSwgaXQpOwor
ICAgIGl0LT51cGRhdGUucHJvY2VzcyA9IGVpbmFfbGlzdF9sYXN0KHByaXYtPnJlbmRlci5xdWV1
ZSk7CisKKyAgICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kKQorICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KHByaXYpOworfQorCitzdGF0
aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIGlmIChwcml2LT5yZW5kZXIu
c3VzcGVuZCkKKyAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIHByaXYtPnJlbmRlci5z
dXNwZW5kID0gRUlOQV9UUlVFOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3By
b2Nlc3NfaWRsZXJfc3RvcChwcml2KTsKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0
aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgaWYgKCFwcml2LT5yZW5kZXIu
c3VzcGVuZCkKKyAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIHByaXYtPnJlbmRlci5z
dXNwZW5kID0gRUlOQV9GQUxTRTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxs
X3JlbmRlcmVycyhwcml2KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9j
ZXNzX2lkbGVyX3N0YXJ0KHByaXYpOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworLyoq
CisgKiBSZXR1cm5zIGEgcmVjdGFuZ2xlIHdob3NlIGNvb3JkaW5hdGVzIGluZGljYXRlIHdoaWNo
IHRpbGVzIGFyZQorICogY3VycmVudGx5IGluc2lkZSB0aGUgdmlld3BvcnQuCisgKgorICogU3Bl
Y2lmaWNhbGx5LCB0aGUgcmV0dXJuZWQgcmVjdGFuZ2xlJ3MgY29vcmRpbmF0ZXMgaGF2ZSB0aGUK
KyAqIGZvbGxvd2luZyBtZWFuaW5nOgorICogIC0geDogQ29sdW1uIG51bWJlciBmb3IgdGhlIHRv
cC1sZXZlbCB0aWxlIGluc2lkZSB0aGUgdmlld3BvcnQuCisgKiAgLSB5OiBSb3cgbnVtYmVyIGZv
ciB0aGUgdG9wLWxldmVsIHRpbGUgaW5zaWRlIHRoZSB2aWV3cG9ydC4KKyAqICAtIHc6IE51bWJl
ciBvZiB0aWxlcyBob3Jpem9udGFsbHkgaW5zaWRlIHRoZSB2aWV3cG9ydC4KKyAqICAtIGg6IE51
bWJlciBvZiB0aWxlcyB2ZXJ0aWNhbGx5IGluc2lkZSB0aGUgdmlld3BvcnQuCisgKi8KK3N0YXRp
YyBFaW5hX1JlY3RhbmdsZSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlzaWJsZV90aWxlc19y
ZWN0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgIEVpbmFfUmVj
dGFuZ2xlIHI7CisKKyAgICAgY29uc3QgRXZhc19Db29yZCBveCA9IC1wcml2LT52aWV3Lm9mZnNl
dC5jdXIueDsKKyAgICAgY29uc3QgRXZhc19Db29yZCBveSA9IC1wcml2LT52aWV3Lm9mZnNldC5j
dXIueTsKKyAgICAgY29uc3QgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAg
ICBjb25zdCBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisKKyAgICAgci54ID0g
TUFYKDAsIG94IC8gdHcpOworICAgICByLnkgPSBNQVgoMCwgb3kgLyB0aCk7CisgICAgIHIudyA9
IE1JTihwcml2LT5tb2RlbC5jdXIuY29scywKKyAgICAgICAgICAgICAgIGNlaWwoKGZsb2F0KShw
cml2LT52aWV3LncgKyAob3ggJSB0dykpIC8gdHcpKTsKKyAgICAgci5oID0gTUlOKHByaXYtPm1v
ZGVsLmN1ci5yb3dzLAorICAgICAgICAgICAgICAgY2VpbCgoZmxvYXQpKHByaXYtPnZpZXcuaCAr
IChveSAlIHRoKSkgLyB0aCkpOworCisgICAgIERCRygiUmV0dXJuaW5nICVkLCVkKyVkeCVkIiwg
ci54LCByLnksIHIudywgci5oKTsKKworICAgICByZXR1cm4gcjsKK30KKworc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9pc19pbnNpZGVfdmlld3BvcnQoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgaW50IGNvbCwgaW50IHJvdykKK3sKKyAg
ICBjb25zdCBFaW5hX1JlY3RhbmdsZSByID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zpc2li
bGVfdGlsZXNfcmVjdChwcml2KTsKKworICAgIHJldHVybiBlaW5hX3JlY3RhbmdsZV9jb29yZHNf
aW5zaWRlKCZyLCBjb2wsIHJvdyk7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3RpbGVfaXNfYWRqYWNlbnRfdG9fdmlld3BvcnQoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgaW50IGNvbCwgaW50IHJvdykKK3sKKyAgICBjb25zdCBFaW5h
X1JlY3RhbmdsZSByID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zpc2libGVfdGlsZXNfcmVj
dChwcml2KTsKKworICAgIGlmIChyb3cgPT0gKHIueSAtIDEpIHx8IHJvdyA9PSAoci55ICsgci5o
KSkKKyAgICAgICAgcmV0dXJuIChjb2wgPj0gKHIueCAtIDEpICYmIGNvbCA8PSAoci54ICsgci53
KSk7CisKKyAgICBpZiAoY29sID09IChyLnggLSAxKSB8fCBjb2wgPT0gKHIueCArIHIudykpCisg
ICAgICAgIHJldHVybiAocm93ID49IChyLnkgLSAxKSAmJiByb3cgPD0gKHIueSArIHIuaCkpOwor
CisgICAgcmV0dXJuIEVJTkFfRkFMU0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIGxvbmcgY29sLCBp
bnQgcm93KQoreworICAgIGludCBtX2NvbCA9IHByaXYtPm1vZGVsLmJhc2UuY29sICsgY29sOwor
ICAgIGludCBtX3JvdyA9IHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcm93OworICAgIGRvdWJsZSBs
YXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CisKKyAgICBpZiAobV9jb2wgPCAwIHx8
IG1fcm93IDwgMAorICAgICAgICB8fCBtX2NvbCA+PSBwcml2LT5tb2RlbC5jdXIuY29scyB8fCBt
X3JvdyA+PSBwcml2LT5tb2RlbC5jdXIucm93cykgeworCisgICAgICAgIGlmIChpdC0+dGlsZSkg
eworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShw
cml2LCBpdCwgbGFzdF91c2VkKTsKKyAgICAgICAgICAgIGlmIChpdC0+dXBkYXRlLnByb2Nlc3Mp
CisgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVxdWVzdF9k
ZWwocHJpdiwgaXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgRXdrX1RpbGUg
KnQ7CisgICAgICAgIGNvbnN0IGZsb2F0IHpvb20gPSBwcml2LT52aWV3LnRpbGUuem9vbTsKKyAg
ICAgICAgY29uc3QgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgICAgICBj
b25zdCBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisKKyAgICAgICAgaWYgKGl0
LT51cGRhdGUucHJvY2VzcykgeworICAgICAgICAgICAgaWYgKGl0LT51cGRhdGUucm93ID09IG1f
cm93CisgICAgICAgICAgICAgICAgJiYgaXQtPnVwZGF0ZS5jb2wgPT0gbV9jb2wKKyAgICAgICAg
ICAgICAgICAmJiBpdC0+dXBkYXRlLnpvb20gPT0gem9vbSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gRUlOQV9UUlVFOworCisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9yZXF1ZXN0X2RlbChwcml2LCBpdCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXQtPnBy
ZV9yZW5kZXIpIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVu
ZGVyX3JlcXVlc3RfZGVsKAorICAgICAgICAgICAgICAgIHByaXYsIGl0LT5wcmVfcmVuZGVyKTsK
KyAgICAgICAgICAgIGl0LT5wcmVfcmVuZGVyID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChpdC0+dGlsZSkgeworICAgICAgICAgICAgRXdrX1RpbGUgKm9sZCA9IGl0LT50aWxlOwor
ICAgICAgICAgICAgaWYgKG9sZC0+cm93ICE9IG1fcm93IHx8IG9sZC0+Y29sICE9IG1fY29sIHx8
IG9sZC0+em9vbSAhPSB6b29tKSB7CisgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdXNlZCk7CisgICAgICAgICAg
ICAgICAgaWYgKGl0LT51cGRhdGUucHJvY2VzcykKKyAgICAgICAgICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVxdWVzdF9kZWwocHJpdiwgaXQpOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChvbGQtPnJvdyA9PSBtX3JvdyAmJiBvbGQtPmNvbCA9PSBtX2NvbAorICAg
ICAgICAgICAgICAgICAgICAgICAmJiBvbGQtPnpvb20gPT0gem9vbSkKKyAgICAgICAgICAgICAg
ICBnb3RvIGVuZDsKKyAgICAgICAgfQorCisgICAgICAgIHQgPSBld2tfdGlsZV9tYXRyaXhfdGls
ZV9leGFjdF9nZXQKKyAgICAgICAgICAgIChwcml2LT5tb2RlbC5tYXRyaXgsIG1fY29sLCBtX3Jv
dywgem9vbSk7CisgICAgICAgIGlmICghdCkgeworICAgICAgICAgICAgLyogTk9URTogaXQgbmV2
ZXIgcmV0dXJucyBOVUxMIGlmIGl0LT50aWxlIHdhcyBzZXQhICovCisgICAgICAgICAgICBpZiAo
aXQtPnRpbGUpIHsKKyAgICAgICAgICAgICAgICBDUklUSUNBTCgiaXQtPnRpbGU9JXAsIGJ1dCBp
dCBzaG91bGQgYmUgTlVMTCEiLCBpdC0+dGlsZSk7CisgICAgICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdXNlZCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIERvIG5vdCBhZGQgbmV3IHJlcXVlc3RzIHRv
IHRoZSByZW5kZXIgcXVldWUgKi8KKyAgICAgICAgICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3Bl
bmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIV9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxl
X2lzX2luc2lkZV92aWV3cG9ydCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaXYsIG1fY29s
LCBtX3JvdykpIHsKKyAgICAgICAgICAgICAgICAgICAgREJHKCIlZCwlZCBpcyBub3QgaW5zaWRl
IHRoZSB2aWV3cG9ydCIsIG1fY29sLCBtX3Jvdyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9pc19hZGphY2VudF90b192aWV3cG9ydCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LCBtX2NvbCwgbV9yb3cpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVz
dF9hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdiwgbV9jb2wsIG1fcm93LCB6
b29tLCBpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkVfUkVOREVSX1BSSU9SSVRZ
X0hJR0gpOworICAgICAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9wcm9jZXNzX2lkbGVyX3N0YXJ0KHByaXYpOworCisgICAgICAgICAgICAgICAgICAgIGdvdG8g
ZW5kOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHQgPSBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgbV9jb2wsIG1fcm93LCB6b29tKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNF
OworICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29jaWF0
ZShwcml2LCB0LCBpdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodCAhPSBp
dC0+dGlsZSkgeworICAgICAgICAgICAgaWYgKCFpdC0+dXBkYXRlLnByb2Nlc3MpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaXQtPnRpbGUpCisgICAgICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCwgbGFzdF91c2VkKTsK
KyAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUo
cHJpdiwgdCwgaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGVuZDoKKwor
ICAgICAgICByZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKworICAgIHJldHVybiBFSU5BX1RSVUU7
Cit9CisKK3N0YXRpYyBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwg
bG9uZyBjb2wsIGludCByb3cpCit7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXQ7CisgICAgRXZhc19Db29yZCB4LCB5LCB0dywgdGg7CisKKyAgICBEQkcoIm89JXAiLCBwcml2
LT5zZWxmKTsKKworICAgIE1BTExPQ19PUl9PT01fUkVUKGl0LCBzaXplb2YoKml0KSwgTlVMTCk7
CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIHRoID0gcHJpdi0+dmlldy50aWxl
Lmg7CisgICAgeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArIHByaXYtPnZpZXcueCArIHR3
ICAqY29sOworICAgIHkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnkg
KyB0aCAgKnJvdzsKKworICAgIGl0LT50aWxlID0gTlVMTDsKKyAgICBpdC0+dXBkYXRlLnByb2Nl
c3MgPSBOVUxMOworICAgIGl0LT5zbW9vdGhfc2NhbGUgPSBwcml2LT52aWV3LnRpbGUuem9vbV93
ZWFrX3Ntb290aF9zY2FsZTsKKyAgICBpdC0+cHJlX3JlbmRlciA9IE5VTEw7CisgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgeCwgeSk7CisgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0dywgdGgpOworICAgIGlmICghX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgY29sLCByb3cpKSB7CisgICAgICAg
IGZyZWUoaXQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gaXQ7
Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtICppdCkKK3sKKyAgICBpZiAoaXQtPnRpbGUpIHsKKyAgICAgICAgZG91YmxlIGxhc3RfdXNl
ZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKKyAgICB9CisgICAgaWYg
KGl0LT51cGRhdGUucHJvY2VzcykKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fcmVxdWVzdF9kZWwocHJpdiwgaXQpOworICAgIGlmIChpdC0+cHJlX3JlbmRlcikgeworICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbCgKKyAg
ICAgICAgICAgIHByaXYsIGl0LT5wcmVfcmVuZGVyKTsKKyAgICAgICAgaXQtPnByZV9yZW5kZXIg
PSBOVUxMOworICAgIH0KKyAgICBmcmVlKGl0KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdCwgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKK3sKKyAgICBpZiAoaXQtPnNt
b290aF9zY2FsZSA9PSBzbW9vdGhfc2NhbGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChp
dC0+dGlsZSkKKyAgICAgICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdC0+
dGlsZS0+aW1hZ2UsIHNtb290aF9zY2FsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2KQoreworICAgIGlmIChwcml2LT5jaGFuZ2VkLmFueSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NoYW5nZWQocHJpdi0+c2VsZik7CisgICAgcHJpdi0+Y2hh
bmdlZC5hbnkgPSBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2LCBFaW5hX0lubGlzdCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgRWlu
YV9Jbmxpc3QgKm47CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBpZiAoIWNvdW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBuID0gKCpwX3JvdyktPmxhc3Q7CisKKyAgICBmb3IgKGkgPSAw
OyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
ICppdDsKKyAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKG4sIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0pOworICAgICAgICBuID0gbi0+cHJldjsKKyAgICAgICAgKnBf
cm93ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwX3JvdywgRUlOQV9JTkxJU1RfR0VUKGl0KSk7Cisg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBpdCk7CisgICAg
fQorfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2Nv
bHNfZW5kX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlz
dCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgYmFzZV9jb2wsIHVuc2lnbmVkIGludCBjb3VudCkKK3sK
KyAgICB1bnNpZ25lZCBpbnQgaSwgciA9IHBfcm93IC0gcHJpdi0+dmlldy5pdGVtczsKKworICAg
IGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBiYXNlX2NvbCsrKSB7CisgICAgICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworCisgICAgICAgIGl0ID0gX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fYWRkKHByaXYsIGJhc2VfY29sLCByKTsKKyAgICAgICAgaWYgKCFp
dCkgeworICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhZGQgY29sdW1uICV1IG9mICV1
IGluIHJvdyAldS4iLCBpLCBjb3VudCwgcik7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgcF9yb3csIGkpOworICAgICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICAqcF9yb3cgPSBlaW5hX2lu
bGlzdF9hcHBlbmQoKnBfcm93LCBFSU5BX0lOTElTVF9HRVQoaXQpKTsKKyAgICB9CisgICAgcmV0
dXJuIEVJTkFfVFJVRTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfcm93X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lu
bGlzdCAqcm93KQoreworICAgIHdoaWxlIChyb3cpIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dF
VChyb3csIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOworICAgICAgICByb3cgPSByb3ct
Pm5leHQ7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBp
dCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19yb3dzX3JhbmdlX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5h
X0lubGlzdCAqKnN0YXJ0LCBFaW5hX0lubGlzdCAqKmVuZCkKK3sKKyAgICBmb3IgKDsgc3RhcnQg
PCBlbmQ7IHN0YXJ0KyspIHsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
cm93X2RlbChwcml2LCAqc3RhcnQpOworICAgICAgICAqc3RhcnQgPSBOVUxMOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVs
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRWluYV9Jbmxpc3Qg
KipzdGFydDsKKyAgICBFaW5hX0lubGlzdCAqKmVuZDsKKworICAgIHN0YXJ0ID0gcHJpdi0+dmll
dy5pdGVtczsKKyAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOwor
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHN0
YXJ0LCBlbmQpOworCisgICAgZnJlZShwcml2LT52aWV3Lml0ZW1zKTsKKyAgICBwcml2LT52aWV3
Lml0ZW1zID0gTlVMTDsKKyAgICBwcml2LT52aWV3LmNvbHMgPSAwOworICAgIHByaXYtPnZpZXcu
cm93cyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5k
ZXIodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKQor
eworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYgPSBkYXRhOworCisgICAg
SU5GKCJUT0RPICVwICh2aXNpYmxlPyAlZCkgWyVsdSwlbHVdICVkLCVkICsgJWR4JWQiLAorICAg
ICAgICB0LCB0LT52aXNpYmxlLCB0LT5jb2wsIHQtPnJvdywgYXJlYS0+eCwgYXJlYS0+eSwgYXJl
YS0+dywgYXJlYS0+aCk7CisKKyAgICBpZiAoIXQtPnZpc2libGUpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChwcml2LT52aWV3LnRpbGUudyAhPSB0LT53IHx8IHByaXYtPnZpZXcudGlsZS5o
ICE9IHQtPmgpCisgICAgICAgIHJldHVybjsgLy8gdG9kbzogcmVtb3ZlIG1lIGxhdGVyLCBkb24n
dCBldmVuIGZsYWcgYXMgZGlydHkhCisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihw
cml2LT5yZW5kZXIuY2IpOworICAgIGlmICghcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5k
YXRhLCB0LCBhcmVhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZXZhc19vYmplY3RfaW1hZ2Vf
ZGF0YV91cGRhdGVfYWRkKHQtPmltYWdlLCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVh
LT5oKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9t
b2RlbF9tYXRyaXhfY3JlYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3
a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIGlmIChwcml2LT5tb2RlbC5tYXRyaXgp
IHsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKHBy
aXYpOworCisgICAgICAgIHByaXYtPmNoYW5nZWQub2Zmc2V0ID0gRUlOQV9GQUxTRTsKKyAgICAg
ICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOworCisgICAgICAgIGV3a190aWxlX21h
dHJpeF9mcmVlKHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgfQorCisgICAgcHJpdi0+bW9kZWwu
bWF0cml4ID0gZXdrX3RpbGVfbWF0cml4X25ldworICAgICAgICAodHVjLCBwcml2LT5tb2RlbC5j
dXIuY29scywgcHJpdi0+bW9kZWwuY3VyLnJvd3MsIHByaXYtPmNzcGFjZSwKKyAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIsIHByaXYpOworfQorCitzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2RlbChFdmFzX09iamVjdCAqbywg
RXZhc19PYmplY3QgKm1lbWJlcikKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBw
cml2KTsKKyAgICBpZiAoIXByaXYtPmNvbnRlbnRzX2NsaXBwZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBldmFzX29iamVjdF9jbGlwX3Vuc2V0KG1lbWJlcik7CisgICAgaWYgKCFldmFzX29iamVj
dF9jbGlwZWVzX2dldChwcml2LT5jb250ZW50c19jbGlwcGVyKSkKKyAgICAgICAgZXZhc19vYmpl
Y3RfaGlkZShwcml2LT5jb250ZW50c19jbGlwcGVyKTsKK30KKworc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9hZGQoRXZhc19PYmplY3QgKm8sIEV2YXNf
T2JqZWN0ICptZW1iZXIpCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7
CisgICAgaWYgKCFwcml2LT5jb250ZW50c19jbGlwcGVyKQorICAgICAgICByZXR1cm47CisgICAg
ZXZhc19vYmplY3RfY2xpcF9zZXQobWVtYmVyLCBwcml2LT5jb250ZW50c19jbGlwcGVyKTsKKyAg
ICBpZiAoZXZhc19vYmplY3RfdmlzaWJsZV9nZXQobykpCisgICAgICAgIGV2YXNfb2JqZWN0X3No
b3cocHJpdi0+Y29udGVudHNfY2xpcHBlcik7Cit9CisKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgc3RhdGljIGludCBydW4gPSAwOworCisg
ICAgcnVuKys7CisKKyAgICBwcmludGYoIlxuLS0tIEJFR0lOIERFQlVHIFRJTEVEIEJBQ0tJTkcg
U1RPUkUgTUVNT1JZIFslZF0gLS1cbiIKKyAgICAgICAgICAgInQ9JTAuMmYsIG9iaj0lcCwgcHJp
dj0lcCwgdmlldy5pdGVtcz0lcCwgbWF0cml4PSVwXG4iLAorICAgICAgICAgICBydW4sIGVjb3Jl
X2xvb3BfdGltZV9nZXQoKSwKKyAgICAgICAgICAgcHJpdi0+c2VsZiwgcHJpdiwgcHJpdi0+dmll
dy5pdGVtcywgcHJpdi0+bW9kZWwubWF0cml4KTsKKworICAgIGV3a190aWxlX21hdHJpeF9kYmco
cHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV9hY2NvdW50aW5nX2RiZygpOworCisg
ICAgcHJpbnRmKCItLS0gRU5EIERFQlVHIFRJTEVEIEJBQ0tJTkcgU1RPUkUgTUVNT1JZIFslZF0g
LS1cblxuIiwgcnVuKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc2lnX3Vzcih2b2lkICpkYXRhLCBpbnQgdHlwZSwgdm9pZCAqZXZlbnQpCit7CisgICAg
RWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIgKnNpZyA9IChFY29yZV9FdmVudF9TaWduYWxfVXNlciop
ZXZlbnQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiA9IChFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhKilkYXRhOworCisgICAgaWYgKHNpZy0+bnVtYmVyID09IDIp
IHsKKyAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgICAgIHR1YyA9IGV3
a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAg
ICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CisgICAgfQorCisgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKHByaXYpOworICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9tZW1fZGJnKHByaXYpOworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9Cisj
ZW5kaWYKKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZChF
dmFzX09iamVjdCAqbykKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
OworCisgICAgREJHKCJvPSVwIiwgbyk7CisKKyAgICBDQUxMT0NfT1JfT09NX1JFVChwcml2LCBz
aXplb2YoKnByaXYpKTsKKworICAgIHByaXYtPnNlbGYgPSBvOworICAgIHByaXYtPnZpZXcudGls
ZS56b29tID0gMS4wOworICAgIHByaXYtPnZpZXcudGlsZS53ID0gVElMRV9XOworICAgIHByaXYt
PnZpZXcudGlsZS5oID0gVElMRV9IOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ID0gMDsK
KyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSA9IDA7CisgICAgcHJpdi0+dmlldy5vZmZzZXQu
b2xkLnggPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gMDsKKyAgICBwcml2LT52
aWV3Lm9mZnNldC5iYXNlLnggPSAtVElMRV9XOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eSA9IC1USUxFX0g7CisKKyAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC0xOworICAgIHByaXYt
Pm1vZGVsLmJhc2Uucm93ID0gLTE7CisgICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMgPSAxOworICAg
IHByaXYtPm1vZGVsLmN1ci5yb3dzID0gMTsKKyAgICBwcml2LT5tb2RlbC5vbGQuY29scyA9IDA7
CisgICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSAwOworICAgIHByaXYtPm1vZGVsLndpZHRoID0g
MDsKKyAgICBwcml2LT5tb2RlbC5oZWlnaHQgPSAwOworICAgIHByaXYtPnJlbmRlci5wcm9jZXNz
X2VudGlyZV9xdWV1ZSA9IEVJTkFfVFJVRTsKKyAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9IEVJ
TkFfRkFMU0U7CisgICAgcHJpdi0+Y3NwYWNlID0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4OyAv
LyBUT0RPOiBkZXRlY3QgaXQuCisKKyAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChvLCBw
cml2KTsKKyAgICBfcGFyZW50X3NjLmFkZChvKTsKKworICAgIHByaXYtPmNvbnRlbnRzX2NsaXBw
ZXIgPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRkKAorICAgICAgICBldmFzX29iamVjdF9ldmFz
X2dldChvKSk7CisgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCAw
LCAwKTsKKyAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdo
dCk7CisgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIDI1
NSwgMjU1LCAyNTUsIDI1NSk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhwcml2LT5jb250ZW50c19j
bGlwcGVyKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHByaXYtPmNvbnRlbnRz
X2NsaXBwZXIsIG8pOworCisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJp
eF9jcmVhdGUocHJpdiwgTlVMTCk7CisgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5iYXNlLmNs
aXBwZXIsIDAsIDApOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNsaXBwZXIs
IDAsIDApOworICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIs
IHByaXYtPmJhc2UuY2xpcHBlcik7CisKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MKKyAgICBwcml2
LT5zaWdfdXNyID0gZWNvcmVfZXZlbnRfaGFuZGxlcl9hZGQKKyAgICAgICAgKEVDT1JFX0VWRU5U
X1NJR05BTF9VU0VSLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2lnX3VzciwgcHJpdik7Cisj
ZW5kaWYKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Rl
bChFdmFzX09iamVjdCAqbykKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2
KTsKKyAgICBEQkcoIm89JXAiLCBvKTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsK
KworICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVs
Lm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKHR1Yyk7CisK
KyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2gocHJpdik7CisKKyAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHByaXYpOworICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RvcChwcml2KTsKKyAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX2FsbF9kZWwocHJpdik7CisKKyNp
ZmRlZiBERUJVR19NRU1fTEVBS1MKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2Ri
Zyhwcml2KTsKKyAgICBpZiAocHJpdi0+c2lnX3VzcikKKyAgICAgICAgcHJpdi0+c2lnX3VzciA9
IGVjb3JlX2V2ZW50X2hhbmRsZXJfZGVsKHByaXYtPnNpZ191c3IpOworI2VuZGlmCisKKyAgICBl
d2tfdGlsZV9tYXRyaXhfZnJlZShwcml2LT5tb2RlbC5tYXRyaXgpOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X21lbWJlcl9kZWwocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CisgICAgZXZhc19vYmpl
Y3RfZGVsKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOworCisgICAgX3BhcmVudF9zYy5kZWwobyk7
CisKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MKKyAgICBwcmludGYoIlxuSU1QT1JUQU5UOiBUSUxF
RCBCQUNLSU5HIFNUT1JFIERFTEVURUQgKG1heSBiZSByZWFsIGxlYWtzKVxuIik7CisgICAgZXdr
X3RpbGVfYWNjb3VudGluZ19kYmcoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbW92ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHkpCit7CisgICAgREJHKCJvPSVwLCBuZXcgcG9zOiAlZHglZCIsIG8sIHgs
IHkpOworCisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBpZiAo
cHJpdi0+Y2hhbmdlZC5wb3MpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwcml2LT52aWV3
LnggPT0geCAmJiBwcml2LT52aWV3LnkgPT0geSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJp
di0+Y2hhbmdlZC5wb3MgPSBFSU5BX1RSVUU7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2NoYW5nZWQocHJpdik7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBo
KQoreworICAgIERCRygibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgbywgdywgaCk7CisKKyAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKworICAgIGlmIChwcml2LT5jaGFuZ2Vk
LnNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwcml2LT52aWV3LncgPT0gdyAmJiBw
cml2LT52aWV3LmggPT0gaCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+Y2hhbmdlZC5z
aXplID0gRUlOQV9UUlVFOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKHBy
aXYpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3Jl
bmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHcs
IEV2YXNfQ29vcmQgaCwgRXZhc19Db29yZCB0dywgRXZhc19Db29yZCB0aCkKK3sKKyAgICBsb25n
IGNvbHMsIHJvd3MsIG9sZF9yb3dzLCBvbGRfY29sczsKKyAgICBJTkYoIm89JXAsIG5ldyBzaXpl
OiAlZHglZCIsIHByaXYtPnNlbGYsIHcsIGgpOworCisgICAgY29scyA9IDIgKyAoaW50KWNlaWwo
KGZsb2F0KXcgLyAoZmxvYXQpdHcpOworICAgIHJvd3MgPSAyICsgKGludCljZWlsKChmbG9hdClo
IC8gKGZsb2F0KXRoKTsKKworICAgIElORigibz0lcCBuZXcgZ3JpZCBzaXplIGNvbHM6ICVsZCwg
cm93czogJWxkLCB3YXMgJWxkLCAlbGQiLAorICAgICAgICBwcml2LT5zZWxmLCBjb2xzLCByb3dz
LCBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZpZXcucm93cyk7CisKKyAgICBpZiAocHJpdi0+dmll
dy5jb2xzID09IGNvbHMgJiYgcHJpdi0+dmlldy5yb3dzID09IHJvd3MpCisgICAgICAgIHJldHVy
bjsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfcmVt
b3ZlX2Fzc29jaWF0ZWQocHJpdik7CisKKyAgICBvbGRfY29scyA9IHByaXYtPnZpZXcuY29sczsK
KyAgICBvbGRfcm93cyA9IHByaXYtPnZpZXcucm93czsKKworICAgIGlmIChyb3dzIDwgb2xkX3Jv
d3MpIHsKKyAgICAgICAgRWluYV9Jbmxpc3QgKipzdGFydCwgKiplbmQ7CisgICAgICAgIHN0YXJ0
ID0gcHJpdi0+dmlldy5pdGVtcyArIHJvd3M7CisgICAgICAgIGVuZCA9IHByaXYtPnZpZXcuaXRl
bXMgKyBvbGRfcm93czsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93
c19yYW5nZV9kZWwocHJpdiwgc3RhcnQsIGVuZCk7CisgICAgfQorICAgIFJFQUxMT0NfT1JfT09N
X1JFVChwcml2LT52aWV3Lml0ZW1zLCBzaXplb2YoRWluYV9Jbmxpc3QqKSAqIHJvd3MpOworICAg
IHByaXYtPnZpZXcucm93cyA9IHJvd3M7CisgICAgcHJpdi0+dmlldy5jb2xzID0gY29sczsKKyAg
ICBpZiAocm93cyA+IG9sZF9yb3dzKSB7CisgICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoq
ZW5kOworICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRfcm93czsKKyAgICAg
ICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHJvd3M7CisgICAgICAgIGZvciAoOyBzdGFydCA8
IGVuZDsgc3RhcnQrKykgeworICAgICAgICAgICAgRWluYV9Cb29sIHI7CisgICAgICAgICAgICAq
c3RhcnQgPSBOVUxMOworICAgICAgICAgICAgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X2NvbHNfZW5kX2FkZAorICAgICAgICAgICAgICAgIChwcml2LCBzdGFydCwgMCwgY29scyk7
CisgICAgICAgICAgICBpZiAoIXIpIHsKKyAgICAgICAgICAgICAgICBDUklUSUNBTCgiZmFpbGVk
IHRvIGFsbG9jYXRlICVsZCBjb2x1bW5zIiwgY29scyk7CisgICAgICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwKKyAgICAgICAgICAgICAgICAg
ICAgKHByaXYsIHByaXYtPnZpZXcuaXRlbXMgKyBvbGRfcm93cywgc3RhcnQpOworICAgICAgICAg
ICAgICAgIHByaXYtPnZpZXcucm93cyA9IG9sZF9yb3dzOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjb2xzICE9IG9s
ZF9jb2xzKSB7CisgICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOworICAgICAgICBp
bnQgdG9kbyA9IGNvbHMgLSBvbGRfY29sczsKKyAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0
ZW1zOworICAgICAgICBlbmQgPSBzdGFydCArIE1JTihvbGRfcm93cywgcm93cyk7CisgICAgICAg
IGlmICh0b2RvID4gMCkgeworICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsr
KSB7CisgICAgICAgICAgICAgICAgRWluYV9Cb29sIHI7CisgICAgICAgICAgICAgICAgciA9IF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZAorICAgICAgICAgICAgICAg
ICAgICAocHJpdiwgc3RhcnQsIG9sZF9jb2xzLCB0b2RvKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXIpIHsKKyAgICAgICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAl
ZCBjb2x1bW5zISIsIHRvZG8pOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoc3RhcnQtLTsg
c3RhcnQgPj0gcHJpdi0+dmlldy5pdGVtczsgc3RhcnQtLSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBzdGFy
dCwgdG9kbyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gb2xkX3Jvd3MpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dz
OworICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHJvd3M7
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
Y29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0b2RvKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRvZG8gPCAwKSB7CisgICAgICAgICAgICB0b2RvID0g
LXRvZG87CisgICAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCisgICAgICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYs
IHN0YXJ0LCB0b2RvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9zaXplKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQoreworICAgIGV2YXNf
b2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNsaXBwZXIsIHcsIGgpOworCisgICAgcHJpdi0+dmll
dy53ID0gdzsKKyAgICBwcml2LT52aWV3LmggPSBoOworCisgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoCisgICAgICAgIHByaXYsIHcsIGgsIHByaXYtPnZpZXcu
dGlsZS53LCBwcml2LT52aWV3LnRpbGUuaCk7Cit9CisKKy8vIFRPRE86IHJlbW92ZSBtZSBsYXRl
ci4KK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmco
Y29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFaW5hX0lu
bGlzdCAqKnN0YXJ0LCAqKmVuZDsKKyAgICBwcmludGYoInRpbGVzPSUybGQsJTJsZCAgbW9kZWw9
JTJsZCwlMmxkIFslZHglZF0gYmFzZT0lKzNsZCwlKzRsZCBvZmZzZXQ9JSs0ZCwlKzRkIG9sZD0l
KzRkLCUrNGQgYmFzZT0lKzNkLCUrM2RcbiIsCisgICAgICAgICAgIHByaXYtPnZpZXcuY29scywg
cHJpdi0+dmlldy5yb3dzLAorICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywgcHJpdi0+
bW9kZWwuY3VyLnJvd3MsCisgICAgICAgICAgIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2Rl
bC5oZWlnaHQsCisgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sLCBwcml2LT5tb2RlbC5i
YXNlLnJvdywKKyAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55LAorICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCwgcHJpdi0+
dmlldy5vZmZzZXQub2xkLnksCisgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCwg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS55KTsKKworICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVt
czsKKyAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOworICAgIGZv
ciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgeworICAgICAgICBjb25zdCBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtICppdDsKKworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpzdGFy
dCwgaXQpIHsKKyAgICAgICAgICAgIHByaW50ZigiICUrNGQsJSs0ZCAiLCBpdC0+Z2VvbWV0cnku
eCwgaXQtPmdlb21ldHJ5LnkpOworCisgICAgICAgICAgICBpZiAoIWl0LT50aWxlKQorICAgICAg
ICAgICAgICAgIHByaW50ZigiICAgICAgICAgICAgOyIpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHByaW50ZigiJThwICVsdSwlbHU7IiwgaXQtPnRpbGUsIGl0LT50aWxlLT5j
b2wsIGl0LT50aWxlLT5yb3cpOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAg
ICB9CisgICAgcHJpbnRmKCItLS1cbiIpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogTW92
ZSB0b3Agcm93IGRvd24gYXMgbGFzdC4KKyAqCisgKiBUaGUgZmluYWwgcmVzdWx0IGlzIHZpc3Vh
bGx5IHRoZSBzYW1lLCBidXQgbG9naWNhbGx5IHRoZSB0b3AgdGhhdAorICogd2VudCBvdXQgb2Yg
c2NyZWVuIGlzIG5vdyBhdCBib3R0b20gYW5kIGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVtcy4K
KyAqCisgKiBUaGlzIGlzIHdvcnRoIGp1c3Qgd2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRoYW4g
QGMKKyAqIHByaXYtPnZpZXcucm93cywgYWZ0ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRoZSB3
aG9sZSBtYXRyaXggc28gaXQKKyAqIGlzIGJldHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxsLgor
ICoKKyAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJv
Y2Vzcy4KKyAqLworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3Jh
cF91cChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2
YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIHVuc2lnbmVkIGludCBsYXN0
X3JvdyA9IHByaXYtPnZpZXcucm93cyAtIDE7CisgICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZp
ZXcudGlsZS53OworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAgICBF
dmFzX0Nvb3JkIG9mZl95ID0gKHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSAlIHRoKSAtIHRoOwor
ICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgKGxhc3Rfcm93IC0gY291bnQgKyAxKSAqIHRoICsgb2Zm
X3k7CisgICAgRWluYV9Jbmxpc3QgKippdHJfc3RhcnQsICoqaXRyX2VuZDsKKworICAgIGl0cl9z
dGFydCA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRyX2VuZCA9IGl0cl9zdGFydCArIGxhc3Rf
cm93OworCisgICAgZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkgeworICAgICAgICBFaW5hX0lu
bGlzdCAqKml0cjsKKyAgICAgICAgRWluYV9Jbmxpc3QgKnRtcCA9ICppdHJfc3RhcnQ7CisgICAg
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgICAgICBFdmFzX0Nvb3Jk
IG94ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKKyAgICAgICAgaW50IGMgPSAwOwor
CisgICAgICAgIGZvciAoaXRyID0gaXRyX3N0YXJ0OyBpdHIgPCBpdHJfZW5kOyBpdHIrKykKKyAg
ICAgICAgICAgICppdHIgPSAqKGl0ciArIDEpOworICAgICAgICAqaXRyID0gdG1wOworCisgICAg
ICAgIHByaXYtPm1vZGVsLmJhc2Uucm93Kys7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0go
dG1wLCBpdCkgeworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92
ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAgIG94ICs9IHR3OworICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgbGFzdF9yb3cpOworICAg
ICAgICAgICAgYysrOworICAgICAgICB9CisgICAgICAgIG95ICs9IHRoOworICAgIH0KKyAgICBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBvZmZfeTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwK
KyAqIE1vdmUgYm90dG9tIHJvdyB1cCBhcyBmaXJzdC4KKyAqCisgKiBUaGUgZmluYWwgcmVzdWx0
IGlzIHZpc3VhbGx5IHRoZSBzYW1lLCBidXQgbG9naWNhbGx5IHRoZSBib3R0b20gdGhhdAorICog
d2VudCBvdXQgb2Ygc2NyZWVuIGlzIG5vdyBhdCB0b3AgYW5kIGZpbGxlZCB3aXRoIG5ldyBtb2Rl
bCBpdGVtcy4KKyAqCisgKiBUaGlzIGlzIHdvcnRoIGp1c3Qgd2hlbiBAYSBjb3VudCBpcyBzbWFs
bGVyIHRoYW4gQGMKKyAqIHByaXYtPnZpZXcucm93cywgYWZ0ZXIgdGhhdCBvbmUgaXMgcmVmaWxs
aW5nIHRoZSB3aG9sZSBtYXRyaXggc28gaXQKKyAqIGlzIGJldHRlciB0byB0cmlnZ2VyIGZ1bGwg
cmVmaWxsLgorICoKKyAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVh
dCB0aGUgcHJvY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfd3JhcF9kb3duKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNf
Q29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgRXZhc19D
b29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52
aWV3LnRpbGUuaDsKKyAgICBFdmFzX0Nvb3JkIG9mZl95ID0gKHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueSAlIHRoKSAtIHRoOworICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgb2ZmX3kgKyAoY291bnQg
LSAxKSAqIHRoOworICAgIEVpbmFfSW5saXN0ICoqaXRyX3N0YXJ0LCAqKml0cl9lbmQ7CisKKyAg
ICBpdHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzIC0gMTsKKyAg
ICBpdHJfZW5kID0gcHJpdi0+dmlldy5pdGVtczsKKworICAgIGZvciAoOyBjb3VudCA+IDA7IGNv
dW50LS0pIHsKKyAgICAgICAgRWluYV9Jbmxpc3QgKippdHI7CisgICAgICAgIEVpbmFfSW5saXN0
ICp0bXAgPSAqaXRyX3N0YXJ0OworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
ICppdDsKKyAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNl
Lng7CisgICAgICAgIGludCBjID0gMDsKKworICAgICAgICBmb3IgKGl0ciA9IGl0cl9zdGFydDsg
aXRyID4gaXRyX2VuZDsgaXRyLS0pCisgICAgICAgICAgICAqaXRyID0gKihpdHIgLSAxKTsKKyAg
ICAgICAgKml0ciA9IHRtcDsKKworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdy0tOworICAg
ICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKHRtcCwgaXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7CisgICAgICAgICAgICBveCAr
PSB0dzsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJp
diwgaXQsIGMsIDApOworICAgICAgICAgICAgYysrOworICAgICAgICB9CisgICAgICAgIG95IC09
IHRoOworICAgIH0KKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBvZmZfeTsKK30KKwor
LyoqCisgKiBAaW50ZXJuYWwKKyAqIE1vdmUgbGVmdC1tb3N0IChmaXJzdCkgY29sdW1uIHJpZ2h0
IGFzIGxhc3QgKHJpZ2h0LW1vc3QpLgorICoKKyAqIFRoZSBmaW5hbCByZXN1bHQgaXMgdmlzdWFs
bHkgdGhlIHNhbWUsIGJ1dCBsb2dpY2FsbHkgdGhlIGZpcnN0IGNvbCB0aGF0CisgKiB3ZW50IG91
dCBvZiBzY3JlZW4gaXMgbm93IGF0IGxhc3QgYW5kIGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVt
cy4KKyAqCisgKiBUaGlzIGlzIHdvcnRoIGp1c3Qgd2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRo
YW4gQGMKKyAqIHByaXYtPnZpZXcuY29scywgYWZ0ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRo
ZSB3aG9sZSBtYXRyaXggc28gaXQKKyAqIGlzIGJldHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxs
LgorICoKKyAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUg
cHJvY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
d3JhcF9sZWZ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQg
eCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgdW5zaWduZWQgaW50
IHIsIGxhc3RfY29sID0gcHJpdi0+dmlldy5jb2xzIC0gMTsKKyAgICBFdmFzX0Nvb3JkIHR3ID0g
cHJpdi0+dmlldy50aWxlLnc7CisgICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5o
OworICAgIEV2YXNfQ29vcmQgb2ZmX3ggPSAocHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICUgdHcp
IC0gdHc7CisgICAgRXZhc19Db29yZCBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7
CisgICAgRWluYV9Jbmxpc3QgKippdHI7CisgICAgRWluYV9Jbmxpc3QgKippdHJfZW5kOworCisg
ICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmll
dy5yb3dzOworICAgIHIgPSAwOworCisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgKz0gY291bnQ7
CisKKyAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgeworICAgICAgICBFdmFz
X0Nvb3JkIG94ID0geCArIChsYXN0X2NvbCAtIGNvdW50ICsgMSkgKiB0dyArIG9mZl94OworICAg
ICAgICB1bnNpZ25lZCBpbnQgaSwgYyA9IGxhc3RfY29sIC0gY291bnQgKyAxOworCisgICAgICAg
IGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBjKyssIG94ICs9IHR3KSB7CisgICAgICAgICAg
ICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgICAgIGl0ID0gRUlO
QV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgqaXRyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
KTsKKyAgICAgICAgICAgICppdHIgPSBlaW5hX2lubGlzdF9kZW1vdGUoKml0ciwgKml0cik7CisK
KyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBv
eSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYs
IGl0LCBjLCByKTsKKyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9CisKKyAgICBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBvZmZfeDsKK30KKworLyoqCisgKiBAaW50ZXJuYWwK
KyAqIE1vdmUgcmlnaHQtbW9zdCAobGFzdCkgY29sdW1uIGxlZnQgYXMgZmlyc3QgKGxlZnQtbW9z
dCkuCisgKgorICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxv
Z2ljYWxseSB0aGUgbGFzdCBjb2wgdGhhdAorICogd2VudCBvdXQgb2Ygc2NyZWVuIGlzIG5vdyBh
dCBmaXJzdCBhbmQgZmlsbGVkIHdpdGggbmV3IG1vZGVsIGl0ZW1zLgorICoKKyAqIFRoaXMgaXMg
d29ydGgganVzdCB3aGVuIEBhIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBAYworICogcHJpdi0+dmll
dy5jb2xzLCBhZnRlciB0aGF0IG9uZSBpcyByZWZpbGxpbmcgdGhlIHdob2xlIG1hdHJpeCBzbyBp
dAorICogaXMgYmV0dGVyIHRvIHRyaWdnZXIgZnVsbCByZWZpbGwuCisgKgorICogQHBhcmFtIGNv
dW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9jZXNzLgorICovCitzdGF0
aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1
bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgdW5zaWduZWQgaW50IHI7CisgICAgRXZhc19Db29y
ZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3
LnRpbGUuaDsKKyAgICBFdmFzX0Nvb3JkIG9mZl94ID0gKHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eCAlIHR3KSAtIHR3OworICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55OworICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7CisKKyAgICBpdHIgPSBw
cml2LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Cisg
ICAgciA9IDA7CisKKyAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCAtPSBjb3VudDsKKworICAgIGZv
ciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKywgcisrKSB7CisgICAgICAgIEV2YXNfQ29vcmQgb3gg
PSB4ICsgKGNvdW50IC0gMSkgKiB0dyArIG9mZl94OworICAgICAgICB1bnNpZ25lZCBpbnQgaSwg
YyA9IGNvdW50IC0gMTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYy0t
LCBveCAtPSB0dykgeworICAgICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXQ7CisgICAgICAgICAgICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoKCppdHIpLT5s
YXN0LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKKyAgICAgICAgICAgICppdHIgPSBl
aW5hX2lubGlzdF9wcm9tb3RlKCppdHIsICgqaXRyKS0+bGFzdCk7CisKKyAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7CisgICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCByKTsKKyAg
ICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9CisKKyAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnggPSBvZmZfeDsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfcmVmaWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNf
Q29vcmQgeCwgRXZhc19Db29yZCB5LCBpbnQgc3RlcF94LCBpbnQgc3RlcF95KQoreworICAgIEVp
bmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7CisgICAgRXZhc19Db29yZCBiYXNlX294LCBveSwg
dHcsIHRoOworICAgIHVuc2lnbmVkIGludCByOworCisgICAgZXZhc19vYmplY3RfbW92ZShwcml2
LT5iYXNlLmNsaXBwZXIsIHgsIHkpOworCisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAg
ICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworCisgICAgYmFzZV9veCA9IHggKyBwcml2LT52aWV3
Lm9mZnNldC5iYXNlLng7CisgICAgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55Owor
CisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+
dmlldy5yb3dzOworICAgIHIgPSAwOworCisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgLT0gc3Rl
cF94OworICAgIHByaXYtPm1vZGVsLmJhc2Uucm93IC09IHN0ZXBfeTsKKworICAgIGZvciAoOyBp
dHIgPCBpdHJfZW5kOyBpdHIrKywgcisrKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0gKml0OworICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKKyAgICAgICAg
dW5zaWduZWQgaW50IGMgPSAwOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCppdHIsIGl0
KSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYs
IGl0LCBjLCByKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21v
dmUoaXQsIG94LCBveSk7CisgICAgICAgICAgICBjKys7CisgICAgICAgICAgICBveCArPSB0dzsK
KyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19hcHBseShFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3sKKyAgICBFaW5h
X0lubGlzdCAqKml0ciwgKippdHJfZW5kOworICAgIEV2YXNfQ29vcmQgYmFzZV9veCwgb3ksIHR3
LCB0aDsKKworICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsK
KworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUu
aDsKKworICAgIGJhc2Vfb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworICAgIG95
ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKKworICAgIGl0ciA9IHByaXYtPnZpZXcu
aXRlbXM7CisgICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKKyAgICBmb3IgKDsg
aXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSAqaXQ7CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OworICAgICAgICBFSU5B
X0lOTElTVF9GT1JFQUNIKCppdHIsIGl0KSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAgICAgICAgICAgb3ggKz0gdHc7Cisg
ICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldF9mb3JjZShFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIEV2YXNfQ29vcmQgZHggPSBwcml2
LT52aWV3Lm9mZnNldC5jdXIueCAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54OworICAgIEV2YXNf
Q29vcmQgZHkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIHByaXYtPnZpZXcub2Zmc2V0Lm9s
ZC55OworICAgIEV2YXNfQ29vcmQgdHcsIHRoOworICAgIGludCBzdGVwX3ksIHN0ZXBfeDsKKwor
ICAgIElORigibz0lcCwgb2Zmc2V0OiAlKzRkLCAlKzRkICglKzRkLCAlKzRkKSIsCisgICAgICAg
IHByaXYtPnNlbGYsIGR4LCBkeSwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55KTsKKworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgdGggPSBw
cml2LT52aWV3LnRpbGUuaDsKKworICAgIHN0ZXBfeCA9IChkeCArIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueCArIHR3KSAvIHR3OworICAgIHN0ZXBfeSA9IChkeSArIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSArIHRoKSAvIHRoOworCisgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2
LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHByaXYt
PnZpZXcub2Zmc2V0LmN1ci55OworICAgIGV2YXNfb2JqZWN0X21vdmUoCisgICAgICAgIHByaXYt
PmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJp
di0+dmlldy54LAorICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcu
eSk7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZHggLSBzdGVwX3ggKiB0dzsK
KyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHkgLSBzdGVwX3kgKiB0aDsKKworICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbAorICAgICAgICAocHJpdiwgcHJp
di0+dmlldy54LCBwcml2LT52aWV3LnksIHN0ZXBfeCwgc3RlcF95KTsKK30KKworc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkp
Cit7CisgICAgRXZhc19Db29yZCBkeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+
dmlldy5vZmZzZXQub2xkLng7CisgICAgRXZhc19Db29yZCBkeSA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7CisgICAgRXZhc19Db29yZCB0dywgdGg7
CisgICAgaW50IHN0ZXBfeSwgc3RlcF94OworCisgICAgSU5GKCJvPSVwLCBvZmZzZXQ6ICUrNGQs
ICUrNGQgKCUrNGQsICUrNGQpIiwKKyAgICAgICAgcHJpdi0+c2VsZiwgZHgsIGR5LCBwcml2LT52
aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOworCisgICAgaWYgKCFk
eCAmJiAhZHkpCisgICAgICAgIHJldHVybjsKKworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7
CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKworICAgIHN0ZXBfeCA9IChkeCArIHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueCArIHR3KSAvIHR3OworICAgIHN0ZXBfeSA9IChkeSArIHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueSArIHRoKSAvIHRoOworCisgICAgcHJpdi0+dmlldy5vZmZzZXQu
b2xkLnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5v
bGQueSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OworICAgIGV2YXNfb2JqZWN0X21vdmUoCisg
ICAgICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54ICsgcHJpdi0+dmlldy54LAorICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSAr
IHByaXYtPnZpZXcueSk7CisKKyAgICBpZiAoKHN0ZXBfeCA8IDAgJiYgc3RlcF94IDw9IC1wcml2
LT52aWV3LmNvbHMpCisgICAgICAgIHx8IChzdGVwX3ggPiAwICYmIHN0ZXBfeCA+PSBwcml2LT52
aWV3LmNvbHMpCisgICAgICAgIHx8IChzdGVwX3kgPCAwICYmIHN0ZXBfeSA8PSAtcHJpdi0+dmll
dy5yb3dzKQorICAgICAgICB8fCAoc3RlcF95ID4gMCAmJiBzdGVwX3kgPj0gcHJpdi0+dmlldy5y
b3dzKSkgeworCisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArPSBkeCAtIHN0ZXBf
eCAqIHR3OworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHkgLSBzdGVwX3kg
KiB0aDsKKworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwKKyAg
ICAgICAgICAgIChwcml2LCBwcml2LT52aWV3LngsIHByaXYtPnZpZXcueSwgc3RlcF94LCBzdGVw
X3kpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54ICs9IGR4OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBkeTsKKworICAgIGlm
IChzdGVwX3kgPCAwKQorICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFw
X3VwKHByaXYsIHgsIHksIC1zdGVwX3kpOworICAgIGVsc2UgaWYgKHN0ZXBfeSA+IDApCisgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihwcml2LCB4LCB5LCBz
dGVwX3kpOworCisgICAgaWYgKHN0ZXBfeCA8IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X3dyYXBfbGVmdChwcml2LCB4LCB5LCAtc3RlcF94KTsKKyAgICBlbHNlIGlm
IChzdGVwX3ggPiAwKQorICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFw
X3JpZ2h0KHByaXYsIHgsIHksIHN0ZXBfeCk7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdmlld19wb3NfYXBwbHkocHJpdiwgeCwgeSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfcG9zKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQoreworICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19hcHBseShwcml2LCB4LCB5KTsKKyAgICBwcml2
LT52aWV3LnggPSB4OworICAgIHByaXYtPnZpZXcueSA9IHk7CisgICAgZXZhc19vYmplY3RfbW92
ZSgKKyAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICAgICAgcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnggKyBwcml2LT52aWV3LngsCisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55ICsgcHJpdi0+dmlldy55KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYp
Cit7CisgICAgRWluYV9Jbmxpc3QgKml0OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0
ZW0gKml0ZW07CisgICAgaW50IGksIGo7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dmll
dy5yb3dzOyBpKyspIHsKKyAgICAgICAgaXQgPSBwcml2LT52aWV3Lml0ZW1zW2ldOworICAgICAg
ICBqID0gMDsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChpdCwgaXRlbSkKKyAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXRlbSwgaisrLCBp
KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFy
dF9jYWxjdWxhdGUoRXZhc19PYmplY3QgKm8pCit7CisgICAgRXZhc19Db29yZCB4LCB5LCB3LCBo
OworCisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sICZ4LCAmeSwgJncsICZoKTsKKyAg
ICBEQkcoIm89JXAgYXQgJWQsJWQgKyAlZHglZCIsIG8sIHgsIHksIHcsIGgpOworCisgICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBwcml2LT5jaGFuZ2VkLmFueSA9
IEVJTkFfRkFMU0U7CisKKyAgICBld2tfdGlsZV9tYXRyaXhfZnJlZXplKHByaXYtPm1vZGVsLm1h
dHJpeCk7CisKKyAgICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kICYmIHByaXYtPmNoYW5nZWQu
bW9kZWwpIHsKKyAgICAgICAgbG9uZyBjb2xzLCByb3dzOworCisgICAgICAgIGNvbHMgPSBwcml2
LT5tb2RlbC53aWR0aCAvIHByaXYtPnZpZXcudGlsZS53ICsgMTsKKyAgICAgICAgcm93cyA9IHBy
aXYtPm1vZGVsLmhlaWdodCAvIHByaXYtPnZpZXcudGlsZS5oICsgMTsKKworICAgICAgICBwcml2
LT5tb2RlbC5vbGQuY29scyA9IHByaXYtPm1vZGVsLmN1ci5jb2xzOworICAgICAgICBwcml2LT5t
b2RlbC5vbGQucm93cyA9IHByaXYtPm1vZGVsLmN1ci5yb3dzOworICAgICAgICBwcml2LT5tb2Rl
bC5jdXIuY29scyA9IGNvbHM7CisgICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gcm93czsK
KyAgICAgICAgaWYgKHByaXYtPm1vZGVsLm9sZC5jb2xzID4gY29scykKKyAgICAgICAgICAgIGNv
bHMgPSBwcml2LT5tb2RlbC5vbGQuY29sczsKKyAgICAgICAgaWYgKHByaXYtPm1vZGVsLm9sZC5y
b3dzID4gcm93cykKKyAgICAgICAgICAgIHJvd3MgPSBwcml2LT5tb2RlbC5vbGQucm93czsKKyAg
ICAgICAgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgsIGNvbHMsIHJv
d3MpOworICAgIH0KKworICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvcyAmJiAocHJpdi0+dmlldy54
ICE9IHggfHwgcHJpdi0+dmlldy55ICE9IHkpKSB7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9zbWFydF9jYWxjdWxhdGVfcG9zKHByaXYsIHgsIHkpOworICAgICAgICBwcml2LT5j
aGFuZ2VkLnBvcyA9IEVJTkFfRkFMU0U7CisgICAgfSBlbHNlIGlmIChwcml2LT5jaGFuZ2VkLm9m
ZnNldCkgeworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRl
X29mZnNldChwcml2LCB4LCB5KTsKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5vZmZzZXQgPSBFSU5B
X0ZBTFNFOworICAgIH0KKworICAgIGlmIChwcml2LT5jaGFuZ2VkLnNpemUpIHsKKyAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9zaXplKHByaXYsIHcsIGgp
OworICAgICAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX0ZBTFNFOworICAgIH0KKworICAg
IGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2RlbCkgeworICAg
ICAgICBFaW5hX1JlY3RhbmdsZSByZWN0OworICAgICAgICByZWN0LnggPSAwOworICAgICAgICBy
ZWN0LnkgPSAwOworICAgICAgICByZWN0LncgPSBwcml2LT5tb2RlbC53aWR0aDsKKyAgICAgICAg
cmVjdC5oID0gcHJpdi0+bW9kZWwuaGVpZ2h0OworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfZmlsbF9yZW5kZXJlcnMocHJpdik7CisgICAgICAgIGV3a190aWxlX21hdHJpeF9yZXNp
emUocHJpdi0+bW9kZWwubWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+
bW9kZWwuY3VyLmNvbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5j
dXIucm93cyk7CisgICAgICAgIHByaXYtPmNoYW5nZWQubW9kZWwgPSBFSU5BX0ZBTFNFOworICAg
ICAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQp
OworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNl
dF9mb3JjZShwcml2KTsKKworICAgICAgICAvKiBNYWtlIHN1cmUgd2UgZG8gbm90IG1pc3MgYW55
IGltcG9ydGFudCByZXBhaW50IGJ5CisgICAgICAgICAqIHJlcGFpbnRpbmcgdGhlIHdob2xlIHZp
ZXdwb3J0ICovCisgICAgICAgIGNvbnN0IEVpbmFfUmVjdGFuZ2xlIHIgPQorICAgICAgICAgICAg
eyAwLCAwLCBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0IH07CisgICAgICAg
IGV3a190aWxlX21hdHJpeF91cGRhdGUocHJpdi0+bW9kZWwubWF0cml4LCAmciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcml2LT52aWV3LnRpbGUuem9vbSk7CisgICAgfQorCisg
ICAgZXdrX3RpbGVfbWF0cml4X3RoYXcocHJpdi0+bW9kZWwubWF0cml4KTsKKworICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MocHJpdik7CisKKyAgICBpZiAocHJp
di0+dmlldy5vZmZzZXQuYmFzZS54ID49IDAKKyAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS54IDw9IC0yICogcHJpdi0+dmlldy50aWxlLncKKyAgICAgICAgfHwgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55ID49IDAKKyAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55IDw9
IC0yICogcHJpdi0+dmlldy50aWxlLmgpCisgICAgICAgIEVSUigiaW5jb3JyZWN0IGJhc2Ugb2Zm
c2V0ICUrNGQsJSs0ZCwgdGlsZT0lZHglZCwgY3VyPSUrNGQsJSs0ZFxuIiwKKyAgICAgICAgICAg
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55LAorICAg
ICAgICAgICAgcHJpdi0+dmlldy50aWxlLncsIHByaXYtPnZpZXcudGlsZS5oLAorICAgICAgICAg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KTsKKwor
fQorCitFdmFzX09iamVjdCAqZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfYWRkKEV2YXMgKmUpCit7
CisgICAgc3RhdGljIEV2YXNfU21hcnQgKnNtYXJ0ID0gTlVMTDsKKworICAgIGlmIChfZXdrX3Rp
bGVkX2xvZ19kb20gPCAwKQorICAgICAgICBfZXdrX3RpbGVkX2xvZ19kb20gPSBlaW5hX2xvZ19k
b21haW5fcmVnaXN0ZXIoIkV3a19UaWxlZF9CYWNraW5nX1N0b3JlIiwgTlVMTCk7CisKKyAgICBp
ZiAoIXNtYXJ0KSB7CisgICAgICAgIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIHNjID0KKyAgICAg
ICAgICAgIEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oIkV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlIik7CisKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9zbWFydF9z
ZXQoJnNjKTsKKyAgICAgICAgX3BhcmVudF9zYyA9IHNjOworCisgICAgICAgIHNjLmFkZCA9IF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQ7CisgICAgICAgIHNjLmRlbCA9IF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWw7CisgICAgICAgIHNjLnJlc2l6ZSA9IF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9yZXNpemU7CisgICAgICAgIHNjLm1vdmUgPSBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbW92ZTsKKyAgICAgICAgc2MuY2FsY3VsYXRlID0g
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZTsKKyAgICAgICAgc2MubWVt
YmVyX2FkZCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfYWRkOworICAg
ICAgICBzYy5tZW1iZXJfZGVsID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJl
cl9kZWw7CisKKyAgICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmc2MpOworICAg
IH0KKworICAgIHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoZSwgc21hcnQpOworfQorCit2
b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcl9jYl9zZXQoRXZhc19PYmplY3QgKm8s
IEVpbmFfQm9vbCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0
YW5nbGUgKmFyZWEpLCBjb25zdCB2b2lkICpkYXRhKQoreworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKGNiKTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAg
ICBwcml2LT5yZW5kZXIuY2IgPSBjYjsKKyAgICBwcml2LT5yZW5kZXIuZGF0YSA9ICh2b2lkKilk
YXRhOworfQorCitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3RpbGVfdW51c2VkX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCAqbykKK3sKKyAgICBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBOVUxMKTsKKyAgICByZXR1cm4gZXdrX3RpbGVf
bWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKK30KKwordm9pZCBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9zZXQoRXZhc19PYmplY3Qg
Km8sIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKG8sIHByaXYpOworCisgICAgaWYgKGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVf
Z2V0KHByaXYtPm1vZGVsLm1hdHJpeCkgPT0gdHVjKQorICAgICAgICByZXR1cm47CisKKyAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2LCB0dWMpOwor
fQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVs
bF9vZmZzZXRfc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYs
IEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQoreworICAgIC8qIFRPRE86IGNoZWNrIG9mZnNl
dCBnbyBvdXQgb2YgYm91bmRzLCBjbGFtcCAqLworICAgIGlmIChwcml2LT5yZW5kZXIuZGlzYWJs
ZWQpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAgcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnggPSB4OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0geTsKKworICAgIHByaXYt
PmNoYW5nZWQub2Zmc2V0ID0gRUlOQV9UUlVFOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9jaGFuZ2VkKHByaXYpOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworRWluYV9Cb29s
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXQoRXZhc19PYmpl
Y3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQoreworICAgIERCRygibz0lcCwgeD0l
ZCwgeT0lZCIsIG8sIHgsIHkpOworCisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJp
diwgRUlOQV9GQUxTRSk7CisgICAgaWYgKHggPT0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggJiYg
eSA9PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueSkKKyAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsK
KworICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0
X3NldF9pbnRlcm5hbChwcml2LCB4LCB5KTsKK30KKworRWluYV9Cb29sIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9hZGQoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29v
cmQgZHgsIEV2YXNfQ29vcmQgZHkpCit7CisgICAgREJHKCJvPSVwLCBkeD0lZCwgZHk9JWQiLCBv
LCBkeCwgZHkpOworCisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9G
QUxTRSk7CisgICAgaWYgKCFkeCAmJiAhZHkpCisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisK
KyAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9z
ZXRfaW50ZXJuYWwKKyAgICAgICAgKHByaXYsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgZHgs
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgZHkpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2LCBmbG9hdCAqem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29y
ZCBjeSwgRXZhc19Db29yZCAqb2ZmeCwgRXZhc19Db29yZCAqb2ZmeSkKK3sKKyAgICAqb2ZmeCA9
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OworICAgICpvZmZ5ID0gcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnk7CisKKyAgICBpZiAoZmFic2YocHJpdi0+dmlldy50aWxlLnpvb20gLSAqem9vbSkgPCBa
T09NX1NURVBfTUlOKSB7CisgICAgICAgIERCRygiaWdub3JlZCBhcyB6b29tIGRpZmZlcmVuY2Ug
aXMgPCAlZjogJWYiLAorICAgICAgICAgICAgKGRvdWJsZSlaT09NX1NURVBfTUlOLCBmYWJzZihw
cml2LT52aWV3LnRpbGUuem9vbSAtICp6b29tKSk7CisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7
CisgICAgfQorCisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVz
dF9mbHVzaChwcml2KTsKKyAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICB0dyA9IFRJTEVfU0la
RV9BVF9aT09NKFRJTEVfVywgKnpvb20pOworICAgIHR3ID0gKHR3ID4+IDEpIDw8IDE7CisgICAg
Knpvb20gPSBUSUxFX1dfWk9PTV9BVF9TSVpFKHR3KTsKKyAgICAvKiBXQVJOSU5HOiBhc3N1bWUg
cmV2ZXJzZSB6b29tIGlzIHRoZSBzYW1lIGZvciBib3RoIGF4aXMgKi8KKyAgICB0aCA9IFRJTEVf
U0laRV9BVF9aT09NKFRJTEVfSCwgKnpvb20pOworCisgICAgZmxvYXQgc2NhbGUgPSAqem9vbSAv
IHByaXYtPnZpZXcudGlsZS56b29tOworCisgICAgcHJpdi0+dmlldy50aWxlLnpvb20gPSAqem9v
bTsKKyAgICAvLyB0b2RvOiBjaGVjayBjeCBbMCwgd10uLi4KKyAgICBwcml2LT52aWV3Lm9mZnNl
dC56b29tX2NlbnRlci54ID0gY3g7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuem9vbV9jZW50ZXIu
eSA9IGN5OworCisgICAgcHJpdi0+dmlldy50aWxlLncgPSB0dzsKKyAgICBwcml2LT52aWV3LnRp
bGUuaCA9IHRoOworCisgICAgaWYgKCFwcml2LT52aWV3LncgfHwgIXByaXYtPnZpZXcuaCkgewor
ICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSAtdHc7CisgICAgICAgIHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueSA9IC10aDsKKyAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKKyAgICB9
CisgICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9JdGVtICppdDsKKworICAgIEV2YXNfQ29vcmQgbmV3X3ggPSBjeCArIChwcml2LT52
aWV3Lm9mZnNldC5jdXIueCAtIGN4KSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBj
eSArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIGN5KSAqIHNjYWxlOworICAgIEV2YXNfQ29v
cmQgYnggPSBjeCArIChwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggLSBjeCkgKiBzY2FsZTsKKyAg
ICBFdmFzX0Nvb3JkIGJ5ID0gY3kgKyAocHJpdi0+dmlldy5vZmZzZXQuYmFzZS55IC0gY3kpICog
c2NhbGU7CisKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX3dpZHRoID0gcHJpdi0+bW9kZWwud2lkdGgg
KiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX2hlaWdodCA9IHByaXYtPm1vZGVsLmhlaWdo
dCAqIHNjYWxlOworCisgICAgaWYgKG1vZGVsX3dpZHRoIDwgcHJpdi0+dmlldy53IHx8IG5ld194
ID49IDApCisgICAgICAgIG5ld194ID0gMDsKKyAgICBlbHNlIGlmICgtbmV3X3ggKyBwcml2LT52
aWV3LncgPj0gbW9kZWxfd2lkdGgpCisgICAgICAgIG5ld194ID0gLW1vZGVsX3dpZHRoICsgcHJp
di0+dmlldy53OworCisgICAgaWYgKG1vZGVsX2hlaWdodCA8IHByaXYtPnZpZXcuaCB8fCBuZXdf
eSA+PSAwKQorICAgICAgICBuZXdfeSA9IDA7CisgICAgZWxzZSBpZiAoLW5ld195ICsgcHJpdi0+
dmlldy5oID49IG1vZGVsX2hlaWdodCkKKyAgICAgICAgbmV3X3kgPSAtbW9kZWxfaGVpZ2h0ICsg
cHJpdi0+dmlldy5oOworCisgICAgYnggPSBuZXdfeCAlIHR3IC0gdHc7CisgICAgcHJpdi0+bW9k
ZWwuYmFzZS5jb2wgPSAtIG5ld194IC8gdHcgLSAxOworICAgIGJ5ID0gbmV3X3kgJSB0aCAtIHRo
OworICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLSBuZXdfeSAvIHRoIC0gMTsKKworICAgIHBy
aXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfY2hhbmdlZChwcml2KTsKKworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ID0gbmV3X3g7
CisgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSBuZXdfeTsKKyAgICBwcml2LT52aWV3Lm9m
ZnNldC5iYXNlLnggPSBieDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBieTsKKwor
ICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKKyAg
ICAqb2ZmeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OworICAgICpvZmZ5ID0gcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnk7CisKKyAgICBldmFzX29iamVjdF9tb3ZlKAorICAgICAgICBwcml2LT5j
b250ZW50c19jbGlwcGVyLAorICAgICAgICBuZXdfeCArIHByaXYtPnZpZXcueCwKKyAgICAgICAg
bmV3X3kgKyBwcml2LT52aWV3LnkpOworCisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Zp
bGxfcmVuZGVyZXJzKHByaXYpOworCisgICAgRXZhc19Db29yZCBveSA9IHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueSArIHByaXYtPnZpZXcueTsKKyAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBwcml2
LT52aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisKKyAgICBpdHIgPSBwcml2LT52
aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisKKyAgICBm
b3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKKyAgICAgICAgRXZhc19Db29yZCBveCA9IGJh
c2Vfb3g7CisgICAgICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOworCisgICAgICAgIEVJTkFf
SU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkgeworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKKyAgICAgICAgICAgIG94ICs9IHR3
OworICAgICAgICB9CisgICAgICAgIG95ICs9IHRoOworICAgIH0KKworICAgIHJldHVybiBFSU5B
X1RSVUU7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldChF
dmFzX09iamVjdCAqbywgZmxvYXQgKnpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3ks
IEV2YXNfQ29vcmQgKm9mZngsIEV2YXNfQ29vcmQgKm9mZnkpCit7CisgICAgREJHKCJvPSVwLCB6
b29tPSVmIiwgbywgKGRvdWJsZSkqem9vbSk7CisKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
TihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKworICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfem9vbV9zZXRfaW50ZXJuYWwocHJpdiwgem9vbSwgY3gsIGN5LCBvZmZ4LCBvZmZ5KTsK
K30KKworRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zZXQoRXZh
c19PYmplY3QgKm8sIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpCit7
CisgICAgREJHKCJvPSVwLCB6b29tPSVmIiwgbywgKGRvdWJsZSl6b29tKTsKKyAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoIXByaXYtPnZp
ZXcudyB8fCAhcHJpdi0+dmlldy5oKQorICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICBF
aW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0OworICAgIEV2YXNfQ29vcmQgdHcsIHRoOworICAgIEVpbmFfQm9vbCByZWNhbGMg
PSBFSU5BX0ZBTFNFOworCisgICAgdHcgPSBUSUxFX1NJWkVfQVRfWk9PTShUSUxFX1csIHpvb20p
OworICAgIHpvb20gPSBUSUxFX1dfWk9PTV9BVF9TSVpFKHR3KTsKKyAgICAvKiBXQVJOSU5HOiBh
c3N1bWUgcmV2ZXJzZSB6b29tIGlzIHRoZSBzYW1lIGZvciBib3RoIGF4aXMgKi8KKyAgICB0aCA9
IFRJTEVfU0laRV9BVF9aT09NKFRJTEVfSCwgem9vbSk7CisKKyAgICBmbG9hdCBzY2FsZSA9IHpv
b20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKKworICAgIEV2YXNfQ29vcmQgbW9kZWxfd2lkdGgg
PSBwcml2LT5tb2RlbC53aWR0aCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxfaGVpZ2h0
ID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7CisKKyAgICBldmFzX29iamVjdF9yZXNpemUo
cHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfd2lk
dGgsIG1vZGVsX2hlaWdodCk7CisKKyAgICBpbnQgdnJvd3MgPSBjZWlsKChmbG9hdClwcml2LT52
aWV3LmggLyAoZmxvYXQpdGgpICsgMjsKKyAgICBpbnQgdmNvbHMgPSBjZWlsKChmbG9hdClwcml2
LT52aWV3LncgLyAoZmxvYXQpdHcpICsgMjsKKyAgICBFdmFzX0Nvb3JkIG5ld194ID0gY3ggKyAo
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBjeCkgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG5l
d195ID0gY3kgKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBjeSkgKiBzY2FsZTsKKyAgICBF
dmFzX0Nvb3JkIGJ4ID0gbmV3X3ggJSB0dyAtIHR3OworICAgIEV2YXNfQ29vcmQgYnkgPSBuZXdf
eSAlIHRoIC0gdGg7CisgICAgdW5zaWduZWQgbG9uZyBiYXNlX3JvdyA9IC1uZXdfeSAvIHRoIC0g
MTsKKyAgICB1bnNpZ25lZCBsb25nIGJhc2VfY29sID0gLW5ld194IC8gdHcgLSAxOworCisgICAg
aWYgKGJhc2Vfcm93ICE9IHByaXYtPm1vZGVsLmJhc2Uucm93IHx8IGJhc2VfY29sICE9IHByaXYt
Pm1vZGVsLmJhc2UuY29sKSB7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gYmFzZV9y
b3c7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gYmFzZV9jb2w7CisgICAgICAgIHJl
Y2FsYyA9IEVJTkFfVFJVRTsKKyAgICB9CisKKyAgICBpZiAodnJvd3MgPiBwcml2LT52aWV3LnJv
d3MgfHwgdmNvbHMgPiBwcml2LT52aWV3LmNvbHMpCisgICAgICAgIHJlY2FsYyA9IEVJTkFfVFJV
RTsKKworICAgIGlmIChyZWNhbGMpIHsKKyAgICAgICAgRXZhc19Db29yZCB3LCBoOworICAgICAg
ICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQobywgTlVMTCwgTlVMTCwgJncsICZoKTsKKyAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMocHJpdiwgdywgaCwg
dHcsIHRoKTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJz
KHByaXYpOworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNz
KHByaXYpOworICAgIH0KKworICAgIEV2YXNfQ29vcmQgYmFzZV9veCA9IGJ4ICsgcHJpdi0+dmll
dy54OworICAgIEV2YXNfQ29vcmQgb3kgPSBieSArIHByaXYtPnZpZXcueTsKKworICAgIGV2YXNf
b2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICAgICAgICAgICAgICAgICAg
IG5ld194ICsgcHJpdi0+dmlldy54LAorICAgICAgICAgICAgICAgICAgICAgbmV3X3kgKyBwcml2
LT52aWV3LnkpOworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0g
aXRyICsgcHJpdi0+dmlldy5yb3dzOworCisgICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisr
KSB7CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OworICAgICAgICBFaW5hX0lubGlz
dCAqbHN0ID0gKml0cjsKKworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsK
KyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBv
eSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQs
IHR3LCB0aCk7CisgICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAgfQorICAgICAgICBveSAr
PSB0aDsKKyAgICB9CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCit2b2lkIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHcs
IEV2YXNfQ29vcmQgaCkKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsK
KyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworICAgIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0l0ZW0gKml0OworICAgIEV2YXNfQ29vcmQgbmV3X3ggPSBwcml2LT52aWV3Lm9mZnNl
dC5jdXIueDsKKyAgICBFdmFzX0Nvb3JkIG5ld195ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7
CisgICAgRXZhc19Db29yZCBieCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKKyAgICBFdmFz
X0Nvb3JkIGJ5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OworICAgIEV2YXNfQ29vcmQgdHcg
PSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxl
Lmg7CisKKyAgICBpZiAoLW5ld194ID4gdykgeworICAgICAgICBuZXdfeCA9IC13OworICAgICAg
ICBieCA9IG5ld194ICUgdHcgLSB0dzsKKyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAt
bmV3X3ggLyB0dyAtIDE7CisgICAgfQorCisgICAgaWYgKC1uZXdfeSA+IGgpIHsKKyAgICAgICAg
bmV3X3kgPSAtaDsKKyAgICAgICAgYnkgPSBuZXdfeSAlIHRoIC0gdGg7CisgICAgICAgIHByaXYt
Pm1vZGVsLmJhc2Uucm93ID0gLW5ld195IC8gdGggLSAxOworICAgIH0KKworICAgIGlmIChieCA+
PSAwIHx8IGJ4IDw9IC0yICogcHJpdi0+dmlldy50aWxlLncpIHsKKyAgICAgICAgYnggPSBuZXdf
eCAlIHR3IC0gdHc7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gLW5ld194IC8gdHcg
LSAxOworICAgIH0KKworICAgIGlmIChieSA+PSAwIHx8IGJ5IDw9IC0yICogcHJpdi0+dmlldy50
aWxlLmgpIHsKKyAgICAgICAgYnkgPSBuZXdfeSAlIHRoIC0gdGg7CisgICAgICAgIHByaXYtPm1v
ZGVsLmJhc2Uucm93ID0gLW5ld195IC8gdGggLSAxOworICAgIH0KKworICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci54ID0gbmV3X3g7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSBuZXdf
eTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IG5ld194OworICAgIHByaXYtPnZpZXcu
b2Zmc2V0Lm9sZC55ID0gbmV3X3k7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gYng7
CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gYnk7CisgICAgZXZhc19vYmplY3RfbW92
ZShwcml2LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICAgICAgICAgICAgICAgbmV3X3ggKyBw
cml2LT52aWV3LngsCisgICAgICAgICAgICAgICAgICAgICBuZXdfeSArIHByaXYtPnZpZXcueSk7
CisKKyAgICBFdmFzX0Nvb3JkIG95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgcHJpdi0+
dmlldy55OworICAgIEV2YXNfQ29vcmQgYmFzZV9veCA9IHByaXYtPnZpZXcueCArIHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueDsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRy
X2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKKworICAgIGZvciAoOyBpdHIgPCBpdHJfZW5k
OyBpdHIrKykgeworICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKKyAgICAgICAgRWlu
YV9Jbmxpc3QgKmxzdCA9ICppdHI7CisKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3Qs
IGl0KSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0
LCBveCwgb3kpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVz
aXplKGl0LCB0dywgdGgpOworICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgICAgIH0KKyAgICAg
ICAgb3kgKz0gdGg7CisgICAgfQorfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pv
b21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgc21vb3Ro
X3NjYWxlKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIEVp
bmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7CisKKyAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1z
OworICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisgICAgcHJpdi0+dmlldy50
aWxlLnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPSBzbW9vdGhfc2NhbGU7CisKKyAgICBmb3IgKDsg
aXRyPCBpdHJfZW5kOyBpdHIrKykgeworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtICppdDsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkKKyAgICAgICAg
ICAgIGlmIChpdC0+dGlsZSkKKyAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9zbW9vdGhfc2NhbGVfc2V0CisgICAgICAgICAgICAgICAgICAgIChpdCwgc21vb3Ro
X3NjYWxlKTsKKyAgICB9Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91
cGRhdGUoRXZhc19PYmplY3QgKm8sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpCit7Cisg
ICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisKKyAgICBp
ZiAocHJpdi0+cmVuZGVyLmRpc2FibGVkKQorICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKwor
ICAgIHJldHVybiBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKHByaXYtPm1vZGVsLm1hdHJpeCwgdXBk
YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnZpZXcudGlsZS56
b29tKTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3Nf
cHJlX3NldChFdmFzX09iamVjdCAqbywgdm9pZCAqKCpjYikodm9pZCAqZGF0YSwgRXZhc19PYmpl
Y3QgKm8pLCBjb25zdCB2b2lkICpkYXRhKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KG8sIHByaXYpOworICAgIHByaXYtPnByb2Nlc3MucHJlX2NiID0gY2I7CisgICAgcHJpdi0+cHJv
Y2Vzcy5wcmVfZGF0YSA9ICh2b2lkKilkYXRhOworfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wb3N0X3NldChFdmFzX09iamVjdCAqbywgdm9pZCAqKCpj
Yikodm9pZCAqZGF0YSwgdm9pZCAqcHJlX2RhdGEsIEV2YXNfT2JqZWN0ICpvKSwgY29uc3Qgdm9p
ZCAqZGF0YSkKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBw
cml2LT5wcm9jZXNzLnBvc3RfY2IgPSBjYjsKKyAgICBwcml2LT5wcm9jZXNzLnBvc3RfZGF0YSA9
ICh2b2lkKilkYXRhOworfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNf
cHJvY2VzcyhFdmFzX09iamVjdCAqbykKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHBy
aXYpOworfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfY2xlYXIoRXZh
c19PYmplY3QgKm8pCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisK
KyAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19jbGVhcihwcml2LT5tb2RlbC5tYXRyaXgpOwor
fQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2NvbnRlbnRzX3Jlc2l6ZShFdmFzX09i
amVjdCAqbywgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCit7CisgICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBpZiAod2lkdGggPT0gcHJpdi0+
bW9kZWwud2lkdGggJiYgaGVpZ2h0ID09IHByaXYtPm1vZGVsLmhlaWdodCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcHJpdi0+bW9kZWwud2lkdGggPSB3aWR0aDsKKyAgICBwcml2LT5tb2RlbC5o
ZWlnaHQgPSBoZWlnaHQ7CisgICAgcHJpdi0+Y2hhbmdlZC5tb2RlbCA9IEVJTkFfVFJVRTsKKwor
ICAgIERCRygid2lkdGgsaGVpZ2h0PSVkLCAlZCIsIHdpZHRoLCBoZWlnaHQpOworICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKHByaXYpOworfQorCit2b2lkIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9v
bCB2YWx1ZSkKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKworICAg
IGlmICh2YWx1ZSAhPSBwcml2LT5yZW5kZXIuZGlzYWJsZWQpCisgICAgICAgIHByaXYtPnJlbmRl
ci5kaXNhYmxlZCA9IHZhbHVlOworfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Zs
dXNoKEV2YXNfT2JqZWN0ICpvKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHBy
aXYpOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjID0gTlVMTDsKKworICAgIHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSA9IDA7
CisgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0
Lm9sZC55ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSAtcHJpdi0+dmlldy50
aWxlLnc7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gLXByaXYtPnZpZXcudGlsZS5o
OworICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gLTE7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5y
b3cgPSAtMTsKKyAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7CisKKyNpZmRlZiBE
RUJVR19NRU1fTEVBS1MKKyAgICBwcmludGYoIlxuRkxVU0hFRCBCQUNLSU5HIFNUT1JFLCBTVEFU
VVMgQkVGT1JFIERFTEVUSU5HIFRJTEUgTUFUUklYOlxuIik7CisgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX21lbV9kYmcocHJpdik7CisjZW5kaWYKKworICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2gocHJpdik7CisgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwocHJpdik7CisgICAgdHVjID0gZXdrX3Rp
bGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tf
dGlsZV91bnVzZWRfY2FjaGVfY2xlYXIodHVjKTsKKworI2lmZGVmIERFQlVHX01FTV9MRUFLUwor
ICAgIHByaW50ZigiXG5GTFVTSEVEIEJBQ0tJTkcgU1RPUkUsIFNUQVRVUyBBRlRFUiBSRUNSRUFU
SU5HIFRJTEUgTUFUUklYOlxuIik7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21lbV9k
YmcocHJpdik7CisjZW5kaWYKK30KKworRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29v
cmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCit7CisgICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRWluYV9UaWxl
X0dyaWRfU2xpY2VyIHNsaWNlcjsKKyAgICBjb25zdCBFaW5hX1RpbGVfR3JpZF9JbmZvICppbmZv
OworICAgIEV2YXNfQ29vcmQgdHcsIHRoOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
OworCisgICAgdHcgPSBUSUxFX1NJWkVfQVRfWk9PTShUSUxFX1csIHpvb20pOworICAgIHR3ID0g
KHR3ID4+IDEpIDw8IDE7CisgICAgem9vbSA9IFRJTEVfV19aT09NX0FUX1NJWkUodHcpOworICAg
IC8qIFdBUk5JTkc6IGFzc3VtZSByZXZlcnNlIHpvb20gaXMgdGhlIHNhbWUgZm9yIGJvdGggYXhp
cyAqLworICAgIHRoID0gVElMRV9TSVpFX0FUX1pPT00oVElMRV9ILCB6b29tKTsKKworICAgIGlm
ICghZWluYV90aWxlX2dyaWRfc2xpY2VyX3NldHVwKCZzbGljZXIsIHgsIHksIHcsIGgsIHR3LCB0
aCkpIHsKKyAgICAgICAgRVJSKCJjb3VsZCBub3Qgc2V0dXAgZ3JpZCBzbGljZXIgZm9yICVkLCVk
KyVkeCVkIHRpbGU9JWR4JWQiLAorICAgICAgICAgICAgeCwgeSwgdywgaCwgdHcsIHRoKTsKKyAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgd2hpbGUgKGVpbmFfdGlsZV9n
cmlkX3NsaWNlcl9uZXh0KCZzbGljZXIsICZpbmZvKSkgeworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBsb25nIGMgPSBpbmZvLT5jb2w7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgciA9IGlu
Zm8tPnJvdzsKKyAgICAgICAgaWYgKCFfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZXF1ZXN0X2FkZChwcml2LCBjLCByLCB6b29tLCBOVUxMLCBQUkVfUkVOREVSX1BSSU9SSVRZ
X0xPVykpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KHByaXYpOworCisgICAgdHVjID0gZXdr
X3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKHR1YywgeCwgeSwgdywgaCwgem9vbSk7Cisg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKEV2YXNfT2JqZWN0ICpvLCB1bnNpZ25lZCBp
bnQgbiwgZmxvYXQgem9vbSkKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2
LCBFSU5BX0ZBTFNFKTsKKyAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3JvdywgZW5kX3Jvdywgc3Rh
cnRfY29sLCBlbmRfY29sLCBpLCBqLCB3LCBoOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjOworCisgICAgSU5GKCJwcml2LT5tb2RlbC5iYXNlLnJvdyA9JWxkLCBuPSV1IHByaXYtPnZp
ZXcucm93cz0lbHUiLAorICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3csIG4sIHByaXYt
PnZpZXcucm93cyk7CisgICAgc3RhcnRfcm93ID0gTUFYKDAsICgobG9uZylwcml2LT5tb2RlbC5i
YXNlLnJvdyAtIG4pKTsKKyAgICBzdGFydF9jb2wgPSBNQVgoMCwgKChsb25nKXByaXYtPm1vZGVs
LmJhc2UuY29sIC0gbikpOworICAgIGVuZF9yb3cgPSBNSU4ocHJpdi0+bW9kZWwuY3VyLnJvd3Mg
LSAxLAorICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgKyBwcml2LT52aWV3
LnJvd3MgKyBuIC0gMSk7CisgICAgZW5kX2NvbCA9IE1JTihwcml2LT5tb2RlbC5jdXIuY29scyAt
IDEsCisgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCArIHByaXYtPnZpZXcu
Y29scyArIG4gLSAxKTsKKworICAgIElORigic3RhcnRfcm93PSVsdSwgZW5kX3Jvdz0lbHUsIHN0
YXJ0X2NvbD0lbHUsIGVuZF9jb2w9JWx1IiwKKyAgICAgICAgIHN0YXJ0X3JvdywgZW5kX3Jvdywg
c3RhcnRfY29sLCBlbmRfY29sKTsKKworICAgIGZvciAoaSA9IHN0YXJ0X3JvdzsgaSA8PSBlbmRf
cm93OyBpKyspCisgICAgICAgIGZvciAoaiA9IHN0YXJ0X2NvbDsgaiA8PSBlbmRfY29sOyBqKysp
CisgICAgICAgICAgICBpZiAoIV9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3Jl
cXVlc3RfYWRkKHByaXYsIGosIGksIHpvb20sIE5VTEwsIFBSRV9SRU5ERVJfUFJJT1JJVFlfTE9X
KSkKKyAgICAgICAgICAgICAgICBnb3RvIHN0YXJ0X3Byb2Nlc3Npbmc7CisKK3N0YXJ0X3Byb2Nl
c3Npbmc6CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9z
dGFydChwcml2KTsKKworICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0
KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgaCA9IChlbmRfcm93IC0gc3RhcnRfcm93ICsgMSkg
KiBUSUxFX1NJWkVfQVRfWk9PTShUSUxFX0gsIHpvb20pOworICAgIHcgPSAoZW5kX2NvbCAtIHN0
YXJ0X2NvbCArIDEpICogVElMRV9TSVpFX0FUX1pPT00oVElMRV9XLCB6b29tKTsKKyAgICBld2tf
dGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKHR1YywKKyAgICAgICAgICAgIHN0YXJ0X2NvbCAq
IFRJTEVfU0laRV9BVF9aT09NKFRJTEVfVywgem9vbSksCisgICAgICAgICAgICBzdGFydF9yb3cg
KiBUSUxFX1NJWkVfQVRfWk9PTShUSUxFX0gsIHpvb20pLCB3LCBoLCB6b29tKTsKKworICAgIHJl
dHVybiBFSU5BX1RSVUU7Cit9CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3Jl
bmRlcl9jYW5jZWwoRXZhc19PYmplY3QgKm8pCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisKKyAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3JlbW92ZV91bmFzc29jaWF0
ZWQocHJpdik7CisKKyAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChw
cml2LT5tb2RlbC5tYXRyaXgpOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJl
YSh0dWMpOworfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9y
ZW5kZXIoRXZhc19PYmplY3QgKm8pCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywg
cHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9k
aXNhYmxlX3JlbmRlcihwcml2KTsKK30KKworRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX2VuYWJsZV9yZW5kZXIoRXZhc19PYmplY3QgKm8pCit7CisgICAgUFJJVl9EQVRBX0dFVF9P
Ul9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2NoYW5nZWQocHJpdik7CisgICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9l
bmFibGVfcmVuZGVyKHByaXYpOworfQorCisvKioKKyAqIFNldCB0aGUgcHJvY2Vzc19lbnRpcmVf
cXVldWUgZmxhZyBvZiB0aGUgcmVuZGVyZXIgaWRsZXIuCisgKgorICoKKyAqIEBwYXJhbSBvIHRo
ZSB0aWxlZCBiYWNraW5nIHN0b3JlIG9iamVjdAorICogQHBhcmFtIHZhbHVlIEVJTkFfVFJVRSBp
ZiB3ZSB3YW50IHRvIHByb2Nlc3MgYWxsIHRoZSByZXF1ZXN0IG9mIG91ciBxdWV1ZS4gRUlOQV9G
QUxTRSBvdGhlcndpc2UuCisgKi8KK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJvY2Vz
c19lbnRpcmVfcXVldWVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgdmFsdWUpCit7Cisg
ICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgaWYgKHByaXYtPnJlbmRl
ci5wcm9jZXNzX2VudGlyZV9xdWV1ZSAhPSB2YWx1ZSkKKyAgICAgICAgcHJpdi0+cmVuZGVyLnBy
b2Nlc3NfZW50aXJlX3F1ZXVlID0gdmFsdWU7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZWZsL2V3
ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oIGIvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOGNkYmI4NGEyOWM2YzRkM2VmZDgxMzRjNWQzMjcz
ZGM1NzVlYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmUuaApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAg
UHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX2gKKyNkZWZpbmUgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaAorCisjaW5jbHVkZSAi
RVdlYktpdC5oIgorCisvKiBFbmFibGUgYWNjb3VudGluZyBvZiByZW5kZXIgdGltZSBpbiB0aWxl
IHN0YXRpc3RpY3MgKi8KKy8vICNkZWZpbmUgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1F
CisKKworLyogSWYgZGVmaW5lIGV3ayB3aWxsIGRvIG1vcmUgYWNjb3VudGluZyB0byBjaGVjayBm
b3IgbWVtb3J5IGxlYWtzCisgKiB0cnkgImtpbGwgLVVTUjEgJFBJRCIgdG8gZ2V0IGluc3RhbnRh
bmVvdXMgZGVidWcKKyAqIHRyeSAia2lsbCAtVVNSMiAkUElEIiB0byBnZXQgaW5zdGFudGFuZW91
cyBkZWJ1ZyBhbmQgZm9yY2UgZmx1c2ggb2YgY2FjaGUKKyAqLworI2RlZmluZSBERUJVR19NRU1f
TEVBS1MgMQorCisjZGVmaW5lIFRJTEVfVyAoMjU2KQorI2RlZmluZSBUSUxFX0ggKDI1NikKKwor
I2RlZmluZSBaT09NX1NURVBfTUlOICgwLjAxKQorCisjZGVmaW5lIFRJTEVfU0laRV9BVF9aT09N
KFNJWkUsIFpPT00pICgoaW50KXJvdW5kZigoU0laRSkgKiAoWk9PTSkpKQorI2RlZmluZSBUSUxF
X1dfWk9PTV9BVF9TSVpFKFNJWkUpICgoZmxvYXQpU0laRSAvIChmbG9hdClUSUxFX1cpCisjZGVm
aW5lIFRJTEVfSF9aT09NX0FUX1NJWkUoU0laRSkgKChmbG9hdClTSVpFIC8gKGZsb2F0KVRJTEVf
SCkKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaW5jbHVk
ZSA8RXZhcy5oPgorI2luY2x1ZGUgPGNhaXJvLmg+CisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfVGls
ZSAgICAgICAgICAgICAgICAgICAgIEV3a19UaWxlOwordHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxl
X1N0YXRzICAgICAgICAgICAgICAgRXdrX1RpbGVfU3RhdHM7Cit0eXBlZGVmIHN0cnVjdCBfRXdr
X1RpbGVfTWF0cml4ICAgICAgICAgICAgICBFd2tfVGlsZV9NYXRyaXg7CisKK3N0cnVjdCBfRXdr
X1RpbGVfU3RhdHMgeworICAgIGRvdWJsZSBsYXN0X3VzZWQ7ICAgICAgICAvKio8IHRpbWUgb2Yg
bGFzdCB1c2UgKi8KKyNpZmRlZiBUSUxFX1NUQVRTX0FDQ09VTlRfUkVOREVSX1RJTUUKKyAgICBk
b3VibGUgcmVuZGVyX3RpbWU7ICAgICAgLyoqPCBhbW91bnQgb2YgdGltZSB0aGlzIHRpbGUgdG9v
ayB0byByZW5kZXIgKi8KKyNlbmRpZgorICAgIHVuc2lnbmVkIGludCBhcmVhOyAgICAgICAvKio8
IGNhY2hlIGZvciAodyAqIGgpICovCisgICAgdW5zaWduZWQgaW50IG1pc3NlczsgICAgIC8qKjwg
bnVtYmVyIG9mIHRpbWVzIGl0IGJlY2FtZSBkaXJ0eSBidXQgbm90CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqIHJlcGFpbnRlZCBhdCBhbGwgc2luY2UgaXQgd2FzIG5vdCB2aXNpYmxl
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBFaW5hX0Jvb2wgZnVsbF91
cGRhdGU6MTsgLyoqPCB0aWxlIHJlcXVpcmVzIGZ1bGwgc2l6ZSB1cGRhdGUgKi8KK307CisKK3N0
cnVjdCBfRXdrX1RpbGUgeworICAgIEVJTkFfSU5MSVNUOyAgICAgICAgICAgIC8qKjwgc2libGlu
ZyB0aWxlcyBhdCBzYW1lIChpLCBqKSBidXQgb3RoZXIgem9vbSAqLworICAgIEVpbmFfVGlsZXIg
KnVwZGF0ZXM7ICAgIC8qKjwgdXBkYXRlZC9kaXJ0eSBhcmVhcyAqLworICAgIEV3a19UaWxlX1N0
YXRzIHN0YXRzOyAgICAgICAvKio8IHRpbGUgdXNhZ2Ugc3RhdGlzdGljcyAqLworICAgIHVuc2ln
bmVkIGxvbmcgY29sLCByb3c7IC8qKjwgdGlsZSB0aWxlIHBvc2l0aW9uICovCisgICAgRXZhc19D
b29yZCB4LCB5OyAgICAgICAgLyoqPCB0aWxlIGNvb3JkaW5hdGUgcG9zaXRpb24gKi8KKworICAg
IC8qIFRPRE86IGRvZXMgaXQgd29ydGggdG8ga2VlcCB0aG9zZSBvciBjcmVhdGUgb24gZGVtYW5k
PyAqLworICAgIGNhaXJvX3N1cmZhY2VfdCAqc3VyZmFjZTsKKyAgICBjYWlyb190ICpjYWlybzsK
KworICAgIC8qKiBOZXZlciBldmVyIGNoYW5nZSB0aG9zZSBhZnRlciB0aWxlIGlzIGNyZWF0ZWQg
KHJlc3BlY3QgY29uc3QhKSAqLworICAgIGNvbnN0IEV2YXNfQ29vcmQgdywgaDsgICAgICAgIC8q
KjwgdGlsZSBzaXplIChzZWUgVElMRV9TSVpFX0FUX1pPT00oKSkgKi8KKyAgICBjb25zdCBFdmFz
X0NvbG9yc3BhY2UgY3NwYWNlOyAvKio8IGNvbG9yc3BhY2UgKi8KKyAgICBjb25zdCBmbG9hdCB6
b29tOyAgICAgICAgICAgICAvKio8IHpvb20gbGV2ZWwgY29udGVudHMgd2VyZSByZW5kZXJlZCBh
dCAqLworICAgIGNvbnN0IHNpemVfdCBieXRlczsgICAgICAgICAgIC8qKjwgYnl0ZXMgdXNlZCBp
biBwaXhlbHMuIGtlZXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiZWZv
cmUgcGl4ZWxzIHRvIGd1YXJhbnRlZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqIGFsaWduZW1lbnQhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisg
ICAgaW50IHZpc2libGU7ICAgICAgICAgICAgICAgICAgLyoqPCB2aXNpYmlsaXR5IGNvdW50ZXIg
b2YgdGhpcyB0aWxlICovCisgICAgRXZhc19PYmplY3QgKmltYWdlOyAgICAgICAgICAgLyoqPCBF
dmFzIEltYWdlLCB0aGUgdGlsZSB0byBiZSByZW5kZXJlZCAqLworICAgIHVpbnQ4X3QgKnBpeGVs
czsKK307CisKKyNpbmNsdWRlICJld2tfdGlsZWRfbWF0cml4LmgiCisjaW5jbHVkZSAiZXdrX3Rp
bGVkX21vZGVsLmgiCisKKy8qIHZpZXcgKi8KK0VBUEkgRXZhc19PYmplY3QgKmV3a190aWxlZF9i
YWNraW5nX3N0b3JlX2FkZChFdmFzICplKTsKKworRUFQSSB2b2lkIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3JlbmRlcl9jYl9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCAoKmNiKSh2b2lk
ICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpLCBjb25zdCB2
b2lkICpkYXRhKTsKKworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4LCBFdmFz
X0Nvb3JkIHkpOworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Ny
b2xsX2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCBkeCwgRXZhc19D
b29yZCBkeSk7CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3Jv
bGxfaW5uZXJfb2Zmc2V0X2FkZChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCBkeCwgRXZhc19D
b29yZCBkeSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19D
b29yZCBoKTsKKworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9v
bV9zZXQoRXZhc19PYmplY3QgKm8sIGZsb2F0ICp6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nv
b3JkIGN5LCBFdmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5KTsKK0VBUEkgRWluYV9C
b29sICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zZXQoRXZhc19PYmplY3Qg
Km8sIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpOworRUFQSSB2b2lk
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKEV2YXNfT2JqZWN0ICpvLCBFdmFz
X0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCk7CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV91cGRhdGUoRXZhc19PYmplY3QgKm8sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1
cGRhdGUpOworRUFQSSB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vz
c19wcmVfc2V0KEV2YXNfT2JqZWN0ICpvLCB2b2lkICooKmNiKSh2b2lkICpkYXRhLCBFdmFzX09i
amVjdCAqbyksIGNvbnN0IHZvaWQgKmRhdGEpOworRUFQSSB2b2lkIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wb3N0X3NldChFdmFzX09iamVjdCAqbywgdm9pZCAqKCpj
Yikodm9pZCAqZGF0YSwgdm9pZCAqcHJlX2RhdGEsIEV2YXNfT2JqZWN0ICpvKSwgY29uc3Qgdm9p
ZCAqZGF0YSk7CitFQVBJIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJvY2Vzc19lbnRp
cmVfcXVldWVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgdmFsdWUpOworRUFQSSB2b2lk
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2VzcyhFdmFzX09iamVjdCAqbyk7
CitFQVBJIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19jbGVhcihFdmFzX09i
amVjdCAqbyk7CitFQVBJIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY29udGVudHNfcmVz
aXplKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCk7
CitFQVBJIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRfdXBkYXRlX3NldChF
dmFzX09iamVjdCAqbywgRWluYV9Cb29sIHZhbHVlKTsKK0VBUEkgdm9pZCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCAqbyk7CitFQVBJIHZvaWQgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfZW5hYmxlX3NjYWxlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIHZh
bHVlKTsKKworRUFQSSBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlZF9iYWNraW5nX3N0
b3JlX3RpbGVfdW51c2VkX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CitFQVBJIHZv
aWQgICAgICAgICAgICAgICAgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRf
Y2FjaGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yyk7CisK
K0VBUEkgRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVnaW9u
KEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3
LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pOworRUFQSSBFaW5hX0Jvb2wgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3QgKm8sIHVu
c2lnbmVkIGludCBuLCBmbG9hdCB6b29tKTsKK0VBUEkgdm9pZCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9wcmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCAqbyk7CisKK0VBUEkgRWluYV9Cb29s
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKEV2YXNfT2JqZWN0ICpvKTsK
K0VBUEkgRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoRXZh
c19PYmplY3QgKm8pOworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvLyBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9oCmRpZmYgLS1naXQgYS9XZWJLaXQvZWZsL2V3ay9ld2tf
dGlsZWRfbWF0cml4LmMgYi9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmNjYmZhMTA5MjYzZGI3NGRhZjNhYzU0MzE5MDY5NjQ1NmFiOGI3MQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguYwpAQCAtMCwwICsxLDc3
MSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNz
CisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3RpbGVkX21hdHJpeC5oIgor
CisjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUu
aCIKKyNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPEVpbmEuaD4KKyNp
bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8bWF0aC5o
PgorI2luY2x1ZGUgPHN0ZGlvLmg+IC8vIFhYWCByZW1vdmUgbWUgbGF0ZXIKKyNpbmNsdWRlIDxz
dGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RhdGljIGNvbnN0IEV2YXNfQ29vcmQg
VElMRV9NQVRSSVhfQkFTRV9USUxFX1NJWkUgPSAyNTY7CisKK3N0cnVjdCBfRXdrX1RpbGVfTWF0
cml4IHsKKyAgICBFaW5hX01hdHJpeHNwYXJzZSAqbWF0cml4OworICAgIEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjOworICAgIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2U7CisgICAgc3RydWN0IHsK
KyAgICAgICAgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9S
ZWN0YW5nbGUgKnVwZGF0ZSk7CisgICAgICAgIHZvaWQgKmRhdGE7CisgICAgfSByZW5kZXI7Cisg
ICAgdW5zaWduZWQgaW50IGZyb3plbjsKKyAgICBFaW5hX0xpc3QgKnVwZGF0ZXM7CisjaWZkZWYg
REVCVUdfTUVNX0xFQUtTCisgICAgc3RydWN0IHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAg
ICAgIHVpbnQ2NF90IGFsbG9jYXRlZCwgZnJlZWQ7CisgICAgICAgIH0gdGlsZXMsIGJ5dGVzOwor
ICAgIH0gc3RhdHM7CisjZW5kaWYKK307CisKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MKK3N0YXRp
YyB1aW50NjRfdCB0aWxlc19sZWFrZWQgPSAwOworc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2xlYWtl
ZCA9IDA7CisjZW5kaWYKKworLyogY2FsbGVkIHdoZW4gbWF0cml4c3BhcnNlIGlzIHJlc2l6ZWQg
b3IgZnJlZWQgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlKHZvaWQg
KnVzZXJfZGF0YSwgdm9pZCAqY2VsbF9kYXRhKQoreworICAgIEV3a19UaWxlX01hdHJpeCAqdG0g
PSB1c2VyX2RhdGE7CisgICAgRWluYV9Jbmxpc3QgKmwgPSBjZWxsX2RhdGE7CisKKyAgICBpZiAo
IWwpCisgICAgICAgIHJldHVybjsKKworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUo
dG0tPnR1Yyk7CisKKyAgICB3aGlsZSAobCkgeworICAgICAgICBFd2tfVGlsZSAqdCA9IChFd2tf
VGlsZSAqKWw7CisgICAgICAgIGwgPSBsLT5uZXh0OworCisgICAgICAgIGlmICh0LT51cGRhdGVz
IHx8IHQtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgICAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5h
X2xpc3RfcmVtb3ZlKHRtLT51cGRhdGVzLCB0KTsKKworICAgICAgICBpZiAodC0+dmlzaWJsZSkK
KyAgICAgICAgICAgIEVSUigiZnJlZWluZyBjZWxsIHRoYXQgaXMgdmlzaWJsZSwgbGVha2luZyB0
aWxlICVwIiwgdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKCFld2tfdGlsZV91
bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1YywgdCkpCisgICAgICAgICAgICAgICAgRVJSKCJ0
aWxlICVwIHdhcyBub3QgaW4gY2FjaGUgJXA/IGxlYWtpbmcuLi4iLCB0LCB0bS0+dHVjKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIERCRygidGlsZSBjZWxsIGRvZXMgbm90
IGV4aXN0IGFueW1vcmUsIGZyZWUgaXQgJXAiLCB0KTsKKworI2lmZGVmIERFQlVHX01FTV9MRUFL
UworICAgICAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKKyAg
ICAgICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQrKzsKKyNlbmRpZgorCisgICAgICAg
ICAgICAgICAgZXdrX3RpbGVfZnJlZSh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRtLT50dWMpOworfQorCisvKiBj
YWxsZWQgd2hlbiBjYWNoZSBvZiB1bnVzZWQgdGlsZSBpcyBmbHVzaGVkICovCitzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCkKK3sK
KyAgICBFd2tfVGlsZV9NYXRyaXggKnRtID0gZGF0YTsKKyAgICBFaW5hX01hdHJpeHNwYXJzZV9D
ZWxsICpjZWxsOworICAgIEVpbmFfSW5saXN0ICpsLCAqb2xkOworCisgICAgaWYgKCFlaW5hX21h
dHJpeHNwYXJzZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgdC0+cm93LCB0LT5jb2wsICZjZWxs
KSkgeworICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBt
YXRyaXg/IExlYWtpbmcuLi4iLCB0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICh0LT51cGRhdGVzIHx8IHQtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgICAgICB0bS0+dXBkYXRl
cyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHQpOworCisgICAgb2xkID0gZWluYV9t
YXRyaXhzcGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKTsKKyAgICBsID0gZWluYV9pbmxpc3RfcmVt
b3ZlKG9sZCwgRUlOQV9JTkxJU1RfR0VUKHQpKTsKKyAgICBpZiAoIWwpIHsKKyAgICAgICAgLyog
c2V0IHRvIG51bGwgdG8gYXZvaWQgZG91YmxlIGZyZWUgKi8KKyAgICAgICAgZWluYV9tYXRyaXhz
cGFyc2VfY2VsbF9kYXRhX3JlcGxhY2UoY2VsbCwgTlVMTCwgTlVMTCk7CisgICAgICAgIGVpbmFf
bWF0cml4c3BhcnNlX2NlbGxfY2xlYXIoY2VsbCk7CisgICAgfSBlbHNlIGlmIChvbGQgIT0gbCkK
KyAgICAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX3JlcGxhY2UoY2VsbCwgbCwgTlVM
TCk7CisKKyAgICBpZiAoRUlOQV9VTkxJS0VMWSghIXQtPnZpc2libGUpKSB7CisgICAgICAgIEVS
UigiY2FjaGUgb2YgdW51c2VkIHRpbGVzIHJlcXVlc3RpbmcgZGVsZXRpb24gb2YgdXNlZCB0aWxl
ICVwPyAiCisgICAgICAgICAgICAiTGVha2luZy4uLiIsIHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCisgICAgdG0tPnN0YXRzLmJ5dGVzLmZyZWVk
ICs9IHQtPmJ5dGVzOworICAgIHRtLT5zdGF0cy50aWxlcy5mcmVlZCsrOworI2VuZGlmCisKKyAg
ICBld2tfdGlsZV9mcmVlKHQpOworfQorCisvKioKKyAqIENyZWF0ZXMgYSBuZXcgbWF0cml4IG9m
IHRpbGVzLgorICoKKyAqIFRoZSB0aWxlIG1hdHJpeCBpcyByZXNwb25zaWJsZSBmb3Iga2VlcGlu
ZyB0aWxlcyBhcm91bmQgYW5kCisgKiBwcm92aWRpbmcgZmFzdCBhY2Nlc3MgdG8gdGhlbS4gT25l
IGNhbiB1c2UgaXQgdG8gcmV0cmlldmUgbmV3IG9yCisgKiBleGlzdGluZyB0aWxlcyBhbmQgZ2l2
ZSB0aGVtIGJhY2ssIGFsbG93aW5nIHRoZW0gdG8gYmUKKyAqIGZyZWVkL3JlcGxhY2VkIGJ5IHRo
ZSBjYWNoZS4KKyAqCisgKiBAcGFyYW0gdHVjIGNhY2hlIG9mIHVudXNlZCB0aWxlcyBvciBAYyBO
VUxMIHRvIGNyZWF0ZSBvbmUKKyAqICAgICAgICBhdXRvbWF0aWNhbGx5LgorICogQHBhcmFtIGNv
bHMgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIG1hdHJpeC4KKyAqIEBwYXJhbSByb3dzIG51bWJl
ciBvZiByb3dzIGluIHRoZSBtYXRyaXguCisgKiBAcGFyYW0gY3NwYWNlIHRoZSBjb2xvciBzcGFj
ZSB1c2VkIHRvIGNyZWF0ZSB0aWxlcyBpbiB0aGlzIG1hdHJpeC4KKyAqIEBwYXJhbSByZW5kZXJf
Y2IgZnVuY3Rpb24gdXNlZCB0byByZW5kZXIgZ2l2ZW4gdGlsZSB1cGRhdGUuCisgKiBAcGFyYW0g
ZGF0YSBjb250ZXh0IHRvIGdpdmUgYmFjayB0byBAYSByZW5kZXJfY2IuCisgKgorICogQHJldHVy
biBuZXdseSBhbGxvY2F0ZWQgaW5zdGFuY2Ugb24gc3VjY2VzcywgQGMgTlVMTCBvbiBmYWlsdXJl
LgorICovCitFd2tfVGlsZV9NYXRyaXggKmV3a190aWxlX21hdHJpeF9uZXcoRXdrX1RpbGVfVW51
c2VkX0NhY2hlICp0dWMsIHVuc2lnbmVkIGxvbmcgY29scywgdW5zaWduZWQgbG9uZyByb3dzLCBF
dmFzX0NvbG9yc3BhY2UgY3NwYWNlLCB2b2lkICgqcmVuZGVyX2NiKSh2b2lkICpkYXRhLCBFd2tf
VGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKmRhdGEp
Cit7CisgICAgRXdrX1RpbGVfTWF0cml4ICp0bTsKKworICAgIENBTExPQ19PUl9PT01fUkVUKHRt
LCBzaXplb2YoRXdrX1RpbGVfTWF0cml4KSwgTlVMTCk7CisKKyAgICB0bS0+bWF0cml4ID0gZWlu
YV9tYXRyaXhzcGFyc2VfbmV3KHJvd3MsIGNvbHMsIF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVl
LCB0bSk7CisgICAgaWYgKCF0bS0+bWF0cml4KSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGNy
ZWF0ZSBzcGFyc2UgbWF0cml4LiIpOworICAgICAgICBmcmVlKHRtKTsKKyAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgfQorCisgICAgaWYgKHR1YykKKyAgICAgICAgdG0tPnR1YyA9IGV3a190aWxl
X3VudXNlZF9jYWNoZV9yZWYodHVjKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdG0tPnR1YyA9IGV3
a190aWxlX3VudXNlZF9jYWNoZV9uZXcoNDA5NjAwMDApOworICAgICAgICBpZiAoIXRtLT50dWMp
IHsKKyAgICAgICAgICAgIEVSUigibm8gY2FjaGUgb2YgdW51c2VkIHRpbGUhIik7CisgICAgICAg
ICAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVlKHRtLT5tYXRyaXgpOworICAgICAgICAgICAgZnJl
ZSh0bSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHRtLT5jc3BhY2UgPSBjc3BhY2U7CisgICAgdG0tPnJlbmRlci5jYiA9IHJlbmRlcl9jYjsKKyAg
ICB0bS0+cmVuZGVyLmRhdGEgPSAodm9pZCAqKWRhdGE7CisKKyAgICByZXR1cm4gdG07Cit9CisK
Ky8qKgorICogRGVzdHJveXMgdGlsZXMgbWF0cml4LCByZWxlYXNpbmcgaXRzIHJlc291cmNlcy4K
KyAqCisgKiBUaGUgY2FjaGUgaW5zdGFuY2UgaXMgdW5yZWZlcmVuY2VkLCBwb3NzaWJseSBmcmVl
aW5nIGl0LgorICovCit2b2lkIGV3a190aWxlX21hdHJpeF9mcmVlKEV3a19UaWxlX01hdHJpeCAq
dG0pCit7CisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCisgICAgdWludDY0X3QgdGlsZXMsIGJ5dGVz
OworI2VuZGlmCisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7CisgICAgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZSh0bS0+dHVjKTsKKworICAgIGVpbmFfbWF0cml4c3Bh
cnNlX2ZyZWUodG0tPm1hdHJpeCk7CisKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0
bS0+dHVjKTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYodG0tPnR1Yyk7CisKKyNp
ZmRlZiBERUJVR19NRU1fTEVBS1MKKyAgICB0aWxlcyA9IHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0
ZWQgLSB0bS0+c3RhdHMudGlsZXMuZnJlZWQ7CisgICAgYnl0ZXMgPSB0bS0+c3RhdHMuYnl0ZXMu
YWxsb2NhdGVkIC0gdG0tPnN0YXRzLmJ5dGVzLmZyZWVkOworCisgICAgdGlsZXNfbGVha2VkICs9
IHRpbGVzOworICAgIGJ5dGVzX2xlYWtlZCArPSBieXRlczsKKworICAgIGlmICh0aWxlcyB8fCBi
eXRlcykKKyAgICAgICAgRVJSKCJ0aWxlZCBtYXRyaXggbGVha2VkOiB0aWxlc1srJSJQUkl1NjQi
LC0lIlBSSXU2NCI6JSJQUkl1NjQiXSAiCisgICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0l
IlBSSXU2NCI6JSJQUkl1NjQiXSIsCisgICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2Nh
dGVkLCB0bS0+c3RhdHMudGlsZXMuZnJlZWQsIHRpbGVzLAorICAgICAgICAgICAgdG0tPnN0YXRz
LmJ5dGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkLCBieXRlcyk7CisgICAgZWxz
ZSBpZiAodGlsZXNfbGVha2VkIHx8IGJ5dGVzX2xlYWtlZCkKKyAgICAgICAgV1JOKCJ0aWxlZCBt
YXRyaXggaGFkIG5vIGxlYWtzOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdICIKKyAgICAg
ICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0Il0sIGJ1dCBzb21lIG90aGVyIGxlYWtl
ZCAiCisgICAgICAgICAgICAiJSJQUkl1NjQiIHRpbGVzICglIlBSSXU2NCIgYnl0ZXMpIiwKKyAg
ICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVl
ZCwKKyAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRl
cy5mcmVlZCwKKyAgICAgICAgICAgIHRpbGVzX2xlYWtlZCwgYnl0ZXNfbGVha2VkKTsKKyAgICBl
bHNlCisgICAgICAgIElORigidGlsZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiUFJJ
dTY0IiwtJSJQUkl1NjQiXSAiCisgICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2
NCJdIiwKKyAgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50
aWxlcy5mcmVlZCwKKyAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5z
dGF0cy5ieXRlcy5mcmVlZCk7CisjZW5kaWYKKworICAgIGZyZWUodG0pOworfQorCisvKioKKyAq
IFJlc2l6ZSBtYXRyaXggdG8gZ2l2ZW4gbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMuCisgKi8K
K3ZvaWQgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25l
ZCBsb25nIGNvbHMsIHVuc2lnbmVkIGxvbmcgcm93cykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTih0bSk7CisgICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9zZXQodG0tPm1hdHJp
eCwgcm93cywgY29scyk7Cit9CisKKy8qKgorICogR2V0IHRoZSBjYWNoZSBvZiB1bnVzZWQgdGls
ZXMgaW4gdXNlIGJ5IGdpdmVuIG1hdHJpeC4KKyAqCisgKiBObyByZWZlcmVuY2UgaXMgdGFrZW4g
dG8gdGhlIGNhY2hlLgorICovCitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX21hdHJp
eF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdG0pCit7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBOVUxMKTsKKyAgICByZXR1cm4gdG0tPnR1
YzsKK30KKworLyoqCisgKiBHZXQgdGhlIGV4YWN0IHRpbGUgZm9yIHRoZSBnaXZlbiBwb3NpdGlv
biBhbmQgem9vbS4KKyAqCisgKiBJZiB0aGUgdGlsZSB3YXMgdW51c2VkIHRoZW4gaXQncyByZW1v
dmVkIGZyb20gdGhlIGNhY2hlLgorICoKKyAqIEFmdGVyIHVzYWdlLCBwbGVhc2UgZ2l2ZSBpdCBi
YWNrIHVzaW5nCisgKiBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoKS4gSWYgeW91IGp1c3Qgd2Fu
dCB0byBjaGVjayBpZiBpdCBleGlzdHMsCisgKiB0aGVuIHVzZSBld2tfdGlsZV9tYXRyaXhfdGls
ZV9leGFjdF9leGlzdHMoKS4KKyAqCisgKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIGdl
dCB0aWxlIGZyb20uCisgKiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVyLgorICogQHBhcmFt
IHJvdyB0aGUgcm93IG51bWJlci4KKyAqIEBwYXJhbSB6b29tIHRoZSBleGFjdCB6b29tIHRvIHVz
ZS4KKyAqCisgKiBAcmV0dXJuIFRoZSB0aWxlIGluc3RhbmNlIG9yIEBjIE5VTEwgaWYgbm9uZSBp
cyBmb3VuZC4gSWYgdGhlIHRpbGUKKyAqICAgICAgICAgd2FzIGluIHRoZSB1bnVzZWQgY2FjaGUg
aXQgd2lsbCBiZSBAYiByZW1vdmVkICh0aHVzCisgKiAgICAgICAgIGNvbnNpZGVyZWQgdXNlZCkg
YW5kIG9uZSBzaG91bGQgZ2l2ZSBpdCBiYWNrIHdpdGgKKyAqICAgICAgICAgZXdrX3RpbGVfbWF0
cml4X3RpbGVfcHV0KCkgYWZ0ZXJ3YXJkcy4KKyAqCisgKiBAc2VlIGV3a190aWxlX21hdHJpeF90
aWxlX25lYXJlc3RfZ2V0KCkKKyAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0
KCkKKyAqLworRXdrX1RpbGUgKmV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChFd2tfVGls
ZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgaW50IHJvdywgZmxvYXQg
em9vbSkKK3sKKyAgICBFd2tfVGlsZSAqdCwgKml0ZW0sICppdGVtX2ZvdW5kID0gTlVMTDsKKyAg
ICBFaW5hX0lubGlzdCAqaW5sOworCisgICAgdCA9IGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4
X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCk7CisgICAgaWYgKCF0KQorICAgICAgICByZXR1cm4g
TlVMTDsKKworICAgIGlmICh0LT56b29tID09IHpvb20pCisgICAgICAgIGdvdG8gZW5kOworCisg
ICAgRUlOQV9JTkxJU1RfRk9SRUFDSChFSU5BX0lOTElTVF9HRVQodCksIGl0ZW0pIHsKKyAgICAg
ICAgaWYgKGl0ZW0tPnpvb20gIT0gem9vbSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpdGVtX2ZvdW5kID0gaXRlbTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFp
dGVtX2ZvdW5kKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlubCA9IGVpbmFfaW5saXN0
X3Byb21vdGUoRUlOQV9JTkxJU1RfR0VUKHQpLCBFSU5BX0lOTElTVF9HRVQoaXRlbV9mb3VuZCkp
OworICAgIGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X3JlcGxhY2UodG0tPm1hdHJpeCwgcm93
LCBjb2wsIGlubCwgTlVMTCk7CisKKyAgZW5kOgorICAgIGlmICghdC0+dmlzaWJsZSkgeworICAg
ICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0bS0+dHVjLCB0KSkKKyAg
ICAgICAgICAgIFdSTigiRXdrX1RpbGUgd2FzIHVudXNlZCBidXQgbm90IGluIGNhY2hlPyBidWch
Iik7CisgICAgfQorCisgICAgcmV0dXJuIHQ7Cit9CisKKy8qKgorICogQ2hlY2tzIGlmIHRpbGUg
b2YgZ2l2ZW4gem9vbSBleGlzdHMgaW4gbWF0cml4LgorICoKKyAqIEBwYXJhbSB0bSB0aGUgdGls
ZSBtYXRyaXggdG8gY2hlY2sgdGlsZSBleGlzdGVuY2UuCisgKiBAcGFyYW0gY29sIHRoZSBjb2x1
bW4gbnVtYmVyLgorICogQHBhcmFtIHJvdyB0aGUgcm93IG51bWJlci4KKyAqIEBwYXJhbSB6b29t
IHRoZSBleGFjdCB6b29tIHRvIHF1ZXJ5LgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlm
IGZvdW5kLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBAc2VlIGV3a190aWxlX21h
dHJpeF90aWxlX2V4YWN0X2dldCgpCisgKi8KK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGls
ZV9leGFjdF9leGlzdHMoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVu
c2lnbmVkIGludCByb3csIGZsb2F0IHpvb20pCit7CisgICAgRXdrX1RpbGUgKnQsICppdGVtOwor
CisgICAgdCA9IGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3cs
IGNvbCk7CisgICAgaWYgKCF0KQorICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKworICAgIEVJ
TkFfSU5MSVNUX0ZPUkVBQ0goRUlOQV9JTkxJU1RfR0VUKHQpLCBpdGVtKSB7CisgICAgICAgIGlm
IChpdGVtLT56b29tID09IHpvb20pCisgICAgICAgICAgICByZXR1cm4gRUlOQV9UUlVFOworICAg
IH0KKworICAgIHJldHVybiBFSU5BX0ZBTFNFOworfQorCisvKioKKyAqIEdldCB0aGUgbmVhcmVz
dCB0aWxlIGZvciBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbS4KKyAqCisgKiBUaGUgbmVhcmVzdCB0
aWxlIGlzIHRoZSBvbmUgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIGJ1dCB3aXRoIHRoZQorICogY2xv
c2VzdCB6b29tLCB0aGlzIGJlaW5nIHRoZSBkaXZpc2lvbiBvZiB0aGUgdGlsZSB6b29tIGJ5IHRo
ZQorICogZGVzaXJlZCB6b29tLCB0aGUgY2xvc2VzdCB0byAxLjAgZ2V0cyBpdC4KKyAqCisgKiBJ
ZiB0aGUgdGlsZSB3YXMgdW51c2VkIHRoZW4gaXQncyByZW1vdmVkIGZyb20gdGhlIGNhY2hlLgor
ICoKKyAqIEFmdGVyIHVzYWdlLCBwbGVhc2UgZ2l2ZSBpdCBiYWNrIHVzaW5nIGV3a190aWxlX21h
dHJpeF90aWxlX3B1dCgpLgorICoKKyAqIEBwYXJhbSB0bSB0aGUgdGlsZSBtYXRyaXggdG8gZ2V0
IHRpbGUgZnJvbS4KKyAqIEBwYXJhbSBjb2wgdGhlIGNvbHVtbiBudW1iZXIuCisgKiBAcGFyYW0g
cm93IHRoZSByb3cgbnVtYmVyLgorICogQHBhcmFtIHpvb20gdGhlIGV4YWN0IHpvb20gdG8gdXNl
LgorICoKKyAqIEByZXR1cm4gVGhlIHRpbGUgaW5zdGFuY2Ugb3IgQGMgTlVMTCBpZiBub25lIGlz
IGZvdW5kLiBJZiB0aGUgdGlsZQorICogICAgICAgICB3YXMgaW4gdGhlIHVudXNlZCBjYWNoZSBp
dCB3aWxsIGJlIEBiIHJlbW92ZWQgKHRodXMKKyAqICAgICAgICAgY29uc2lkZXJlZCB1c2VkKSBh
bmQgb25lIHNob3VsZCBnaXZlIGl0IGJhY2sgd2l0aAorICogICAgICAgICBld2tfdGlsZV9tYXRy
aXhfdGlsZV9wdXQoKSBhZnRlcndhcmRzLgorICovCitFd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4
X3RpbGVfbmVhcmVzdF9nZXQoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2ws
IHVuc2lnbmVkIGludCByb3csIGZsb2F0IHpvb20pCit7CisgICAgRXdrX1RpbGUgKnQsICppdGVt
LCAqaXRlbV9mb3VuZCA9IE5VTEw7CisgICAgRWluYV9Jbmxpc3QgKmlubDsKKyAgICBmbG9hdCB6
b29tX2ZvdW5kID0gMDsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwg
TlVMTCk7CisgICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTCh6b29tID4gMC4wLCBO
VUxMKTsKKworICAgIHQgPSBlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJp
eCwgcm93LCBjb2wpOworICAgIGlmICghdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBp
ZiAodC0+em9vbSA9PSB6b29tKSB7CisgICAgICAgIGl0ZW1fZm91bmQgPSB0OworICAgICAgICBn
b3RvIGVuZDsKKyAgICB9CisKKyAgICBFSU5BX0lOTElTVF9GT1JFQUNIKEVJTkFfSU5MSVNUX0dF
VCh0KSwgaXRlbSkgeworICAgICAgICBmbG9hdCBjdXJfem9vbSA9IGl0ZW0tPnpvb207CisKKyAg
ICAgICAgaWYgKGN1cl96b29tID09IHpvb20pIHsKKyAgICAgICAgICAgIGl0ZW1fZm91bmQgPSBp
dGVtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChjdXJfem9vbSA+IHpvb20pCisgICAgICAgICAgICBjdXJfem9vbSA9IHpvb20gLyBjdXJfem9v
bTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3VyX3pvb20gPSBjdXJfem9vbSAvIHpvb207
CisKKyAgICAgICAgaWYgKGN1cl96b29tID4gem9vbV9mb3VuZCkgeworICAgICAgICAgICAgaXRl
bV9mb3VuZCA9IGl0ZW07CisgICAgICAgICAgICB6b29tX2ZvdW5kID0gY3VyX3pvb207CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWl0ZW1fZm91bmQpCisgICAgICAgIHJldHVybiBOVUxM
OworCisgICAgaW5sID0gZWluYV9pbmxpc3RfcHJvbW90ZShFSU5BX0lOTElTVF9HRVQodCksIEVJ
TkFfSU5MSVNUX0dFVChpdGVtX2ZvdW5kKSk7CisgICAgZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9p
ZHhfcmVwbGFjZSh0bS0+bWF0cml4LCByb3csIGNvbCwgaW5sLCBOVUxMKTsKKworICBlbmQ6Cisg
ICAgaWYgKCFpdGVtX2ZvdW5kLT52aXNpYmxlKSB7CisgICAgICAgIGlmICghZXdrX3RpbGVfdW51
c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIGl0ZW1fZm91bmQpKQorICAgICAgICAgICAgV1JO
KCJFd2tfVGlsZSB3YXMgdW51c2VkIGJ1dCBub3QgaW4gY2FjaGU/IGJ1ZyEiKTsKKyAgICB9CisK
KyAgICByZXR1cm4gaXRlbV9mb3VuZDsKK30KKworLyoqCisgKiBDcmVhdGUgYSBuZXcgdGlsZSBh
dCBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbSBsZXZlbCBpbiB0aGUgbWF0cml4LgorICoKKyAqIFRo
ZSBuZXdseSBjcmVhdGVkIHRpbGUgaXMgY29uc2lkZXJlZCBpbiB1c2UgYW5kIG5vdCBwdXQgaW50
byBjYWNoZQorICogb2YgdW51c2VkIHRpbGVzLiBBZnRlciBpdCBpcyB1c2VkIG9uZSBzaG91bGQg
Y2FsbAorICogZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KCkgdG8gZ2l2ZSBpdCBiYWNrIHRvIG1h
dHJpeC4KKyAqCisgKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIGNyZWF0ZSB0aWxlIG9u
LgorICogQHBhcmFtIGNvbCB0aGUgY29sdW1uIG51bWJlci4KKyAqIEBwYXJhbSByb3cgdGhlIHJv
dyBudW1iZXIuCisgKiBAcGFyYW0gem9vbSB0aGUgbGV2ZWwgdG8gY3JlYXRlIHRpbGUsIHVzZWQg
dG8gZGV0ZXJtaW5lIHRpbGUgc2l6ZS4KKyAqLworRXdrX1RpbGUgKmV3a190aWxlX21hdHJpeF90
aWxlX25ldyhFd2tfVGlsZV9NYXRyaXggKnRtLCBFdmFzICpldmFzLCB1bnNpZ25lZCBsb25nIGNv
bCwgdW5zaWduZWQgaW50IHJvdywgZmxvYXQgem9vbSkKK3sKKyAgICBFdmFzX0Nvb3JkIHM7Cisg
ICAgRWluYV9Jbmxpc3QgKm9sZDsKKyAgICBFd2tfVGlsZSAqdDsKKworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTCh0bSwgTlVMTCk7CisgICAgRUlOQV9TQUZFVFlfT05fRkFMU0Vf
UkVUVVJOX1ZBTCh6b29tID4gMC4wLCBOVUxMKTsKKworICAgIHMgPSBUSUxFX1NJWkVfQVRfWk9P
TShUSUxFX01BVFJJWF9CQVNFX1RJTEVfU0laRSwgem9vbSk7CisgICAgem9vbSA9IChmbG9hdClz
IC8gKGZsb2F0KVRJTEVfTUFUUklYX0JBU0VfVElMRV9TSVpFOworCisgICAgdCA9IGV3a190aWxl
X25ldyhldmFzLCBzLCBzLCB6b29tLCB0bS0+Y3NwYWNlKTsKKyAgICBpZiAoIXQpIHsKKyAgICAg
ICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHRpbGUgJWR4JWQgYXQgJWYsIGNzcGFjZT0lZCIsCisg
ICAgICAgICAgICBzLCBzLCAoZG91YmxlKXpvb20sIHRtLT5jc3BhY2UpOworICAgICAgICByZXR1
cm4gTlVMTDsKKyAgICB9CisKKyAgICBvbGQgPSBlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9n
ZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpOworICAgIG9sZCA9IGVpbmFfaW5saXN0X3ByZXBlbmQo
b2xkLCBFSU5BX0lOTElTVF9HRVQodCkpOworICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfZGF0
YV9pZHhfcmVwbGFjZSh0bS0+bWF0cml4LCByb3csIGNvbCwgdCwgTlVMTCkpIHsKKyAgICAgICAg
RVJSKCJjb3VsZCBub3Qgc2V0IG1hdHJpeCBjZWxsLCByb3cvY29sIG91dHNpZGUgbWF0cml4IGRp
bWVuc2lvbnMhIik7CisgICAgICAgIGV3a190aWxlX2ZyZWUodCk7CisgICAgICAgIHJldHVybiBO
VUxMOworICAgIH0KKworICAgIHQtPmNvbCA9IGNvbDsKKyAgICB0LT5yb3cgPSByb3c7CisgICAg
dC0+eCA9IGNvbCAqIHM7CisgICAgdC0+eSA9IHJvdyAqIHM7CisKKyAgICBjYWlyb190cmFuc2xh
dGUodC0+Y2Fpcm8sIC10LT54LCAtdC0+eSk7CisKKyAgICB0LT5zdGF0cy5mdWxsX3VwZGF0ZSA9
IEVJTkFfVFJVRTsKKyAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0
ZXMsIHQpOworCisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCisgICAgdG0tPnN0YXRzLmJ5dGVzLmFs
bG9jYXRlZCArPSB0LT5ieXRlczsKKyAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkKys7Cisj
ZW5kaWYKKworICAgIHJldHVybiB0OworfQorCisvKioKKyAqIEdpdmVzIGJhY2sgdGhlIHRpbGUg
dG8gdGhlIHRpbGUgbWF0cml4LgorICoKKyAqIFRoaXMgd2lsbCByZXBvcnQgdGhlIHRpbGUgaXMg
bm8gbG9uZ2VyIGluIHVzZSBieSB0aGUgb25lIHRoYXQgZ290CisgKiBpdCB3aXRoIGV3a190aWxl
X21hdHJpeF90aWxlX25lYXJlc3RfZ2V0KCkgb3IKKyAqIGV3a190aWxlX21hdHJpeF90aWxlX2V4
YWN0X2dldCgpLgorICoKKyAqIEFueSBwcmV2aW91cyByZWZlcmVuY2UgdG8gdGlsZSBzaG91bGQg
YmUgcmVsZWFzZWQKKyAqIChld2tfdGlsZV9oaWRlKCkpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVu
Y3Rpb24sIHNvIGl0IHdpbGwKKyAqIGJlIGtub3duIGlmIGl0IGlzIG5vdCB2aXNpYmlsZSBhbnlt
b3JlIGFuZCB0aHVzIGNhbiBiZSBwdXQgaW50byB0aGUKKyAqIHVudXNlZCBjYWNoZS4KKyAqCisg
KiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIHJldHVybiB0aWxlIHRvLgorICogQHBhcmFt
IHQgdGhlIHRpbGUgaW5zdGFuY2UgdG8gcmV0dXJuLCBtdXN0IEBiIG5vdCBiZSBAYyBOVUxMLgor
ICogQHBhcmFtIGxhc3RfdXNlZCB0aW1lIGluIHdoaWNoIHRpbGUgd2FzIGxhc3QgdXNlZC4KKyAq
CisgKiBAcmV0dXJuICNFSU5BX1RSVUUgb24gc3VjY2VzcyBvciAjRUlOQV9GQUxTRSBvbiBmYWls
dXJlLgorICovCitFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KEV3a19UaWxlX01h
dHJpeCAqdG0sIEV3a19UaWxlICp0LCBkb3VibGUgbGFzdF91c2VkKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHQsIEVJTkFfRkFMU0UpOworCisgICAgaWYgKHQtPnZpc2libGUp
CisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisKKyAgICB0LT5zdGF0cy5sYXN0X3VzZWQgPSBs
YXN0X3VzZWQ7CisgICAgcmV0dXJuIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dCh0bS0+
dHVjLCB0LCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSwgdG0pOworfQorCitFaW5hX0Jvb2wg
ZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVk
IGxvbmcgY29sLCB1bnNpZ25lZCBpbnQgcm93LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRl
KQoreworICAgIEV3a19UaWxlICpsLCAqdDsKKyAgICBFaW5hX1JlY3RhbmdsZSBuZXdfdXBkYXRl
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVwZGF0ZSwgRUlOQV9GQUxTRSk7CisK
KyAgICBtZW1jcHkoJm5ld191cGRhdGUsIHVwZGF0ZSwgc2l6ZW9mKG5ld191cGRhdGUpKTsKKyAg
ICAvLyBjaGVjayB1cGRhdGUgaXMgdmFsaWQsIG90aGVyd2lzZSByZXR1cm4gRUlOQV9GQUxTRQor
ICAgIGlmICh1cGRhdGUtPnggPCAwIHx8IHVwZGF0ZS0+eSA8IDAgfHwgdXBkYXRlLT53IDw9IDAg
fHwgdXBkYXRlLT5oIDw9IDApIHsKKyAgICAgICAgRVJSKCJpbnZhbGlkIHVwZGF0ZSByZWdpb24u
Iik7CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIGlmICh1cGRhdGUt
PnggKyB1cGRhdGUtPncgLSAxID49IFRJTEVfTUFUUklYX0JBU0VfVElMRV9TSVpFKQorICAgICAg
ICBuZXdfdXBkYXRlLncgPSBUSUxFX01BVFJJWF9CQVNFX1RJTEVfU0laRSAtIHVwZGF0ZS0+eDsK
KyAgICBpZiAodXBkYXRlLT55ICsgdXBkYXRlLT5oIC0gMSA+PSBUSUxFX01BVFJJWF9CQVNFX1RJ
TEVfU0laRSkKKyAgICAgICAgbmV3X3VwZGF0ZS5oID0gVElMRV9NQVRSSVhfQkFTRV9USUxFX1NJ
WkUgLSB1cGRhdGUtPnk7CisKKyAgICBsID0gZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0
KHRtLT5tYXRyaXgsIHJvdywgY29sKTsKKworICAgIGlmICghbCkKKyAgICAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKKworICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goRUlOQV9JTkxJU1RfR0VUKGwpLCB0
KSB7CisgICAgICAgIGlmICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMuZnVsbF91cGRhdGUpCisg
ICAgICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQp
OworICAgICAgICBuZXdfdXBkYXRlLnggPSByb3VuZGYodC0+em9vbSAqIG5ld191cGRhdGUueCk7
CisgICAgICAgIG5ld191cGRhdGUueSA9IHJvdW5kZih0LT56b29tICogbmV3X3VwZGF0ZS55KTsK
KyAgICAgICAgbmV3X3VwZGF0ZS53ID0gcm91bmRmKHQtPnpvb20gKiBuZXdfdXBkYXRlLncpOwor
ICAgICAgICBuZXdfdXBkYXRlLmggPSByb3VuZGYodC0+em9vbSAqIG5ld191cGRhdGUuaCk7Cisg
ICAgICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHQsICZuZXdfdXBkYXRlKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gRUlOQV9UUlVFOworfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVf
dXBkYXRlX2Z1bGwoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2ln
bmVkIGludCByb3cpCit7CisgICAgRXdrX1RpbGUgKmwsICp0OworICAgIEVpbmFfTWF0cml4c3Bh
cnNlX0NlbGwgKmNlbGw7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBF
SU5BX0ZBTFNFKTsKKworICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9pZHhfZ2V0KHRt
LT5tYXRyaXgsIHJvdywgY29sLCAmY2VsbCkpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwor
CisgICAgaWYgKCFjZWxsKQorICAgICAgICByZXR1cm4gRUlOQV9UUlVFOworCisgICAgbCA9IGVp
bmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCk7CisgICAgaWYgKCFsKSB7CisgICAg
ICAgIENSSVRJQ0FMKCJtYXRyaXggY2VsbCB3aXRoIG5vIHRpbGUhIik7CisgICAgICAgIHJldHVy
biBFSU5BX1RSVUU7CisgICAgfQorCisgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChFSU5BX0lOTElT
VF9HRVQobCksIHQpIHsKKyAgICAgICAgaWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxs
X3VwZGF0ZSkKKyAgICAgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+
dXBkYXRlcywgdCk7CisgICAgICAgIGV3a190aWxlX3VwZGF0ZV9mdWxsKHQpOworICAgIH0KKwor
ICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3ZvaWQgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBk
YXRlc19jbGVhcihFd2tfVGlsZV9NYXRyaXggKnRtLCBFd2tfVGlsZSAqdCkKK3sKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7CisgICAgaWYgKCF0LT51cGRhdGVzICYmICF0LT5z
dGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGV3a190aWxlX3VwZGF0ZXNf
Y2xlYXIodCk7CisgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlKHRtLT51cGRhdGVz
LCB0KTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVfbWF0cml4X3NsaWNlcl9zZXR1
cChFd2tfVGlsZV9NYXRyaXggKnRtLCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSwgZmxvYXQg
em9vbSwgRWluYV9UaWxlX0dyaWRfU2xpY2VyICpzbGljZXIpCit7CisgICAgdW5zaWduZWQgbG9u
ZyByb3dzLCBjb2xzOworICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaCwgdHcsIHRoOworCisgICAg
aWYgKGFyZWEtPncgPD0gMCB8fCBhcmVhLT5oIDw9IDApIHsKKyAgICAgICAgV1JOKCJpbnZhbGlk
IGFyZWEgcmVnaW9uOiAlZCwlZCslZHglZC4iLAorICAgICAgICAgICAgYXJlYS0+eCwgYXJlYS0+
eSwgYXJlYS0+dywgYXJlYS0+aCk7CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAgIH0K
KworICAgIHggPSBhcmVhLT54OworICAgIHkgPSBhcmVhLT55OworICAgIHcgPSBhcmVhLT53Owor
ICAgIGggPSBhcmVhLT5oOworCisgICAgdHcgPSBUSUxFX1NJWkVfQVRfWk9PTShUSUxFX1csIHpv
b20pOworICAgIHRoID0gVElMRV9TSVpFX0FUX1pPT00oVElMRV9ILCB6b29tKTsKKworICAgIC8v
IGNyb3BwaW5nIGFyZWEgcmVnaW9uIHRvIGZpdCBtYXRyaXgKKyAgICBlaW5hX21hdHJpeHNwYXJz
ZV9zaXplX2dldCh0bS0+bWF0cml4LCAmcm93cywgJmNvbHMpOworICAgIGlmICh4IDwgMCkgewor
ICAgICAgICB3ICs9IHg7CisgICAgICAgIHggPSAwOworICAgIH0KKyAgICBpZiAoeSA8IDApIHsK
KyAgICAgICAgaCArPSB5OworICAgICAgICB5ID0gMDsKKyAgICB9CisKKyAgICBpZiAoeSArIGgg
LSAxID4gcm93cyAqIHRoKQorICAgICAgICBoID0gcm93cyAqIHRoIC0geTsKKyAgICBpZiAoeCAr
IHcgLSAxID4gY29scyAqIHR3KQorICAgICAgICB3ID0gY29scyAqIHR3IC0geDsKKworICAgIHJl
dHVybiBlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3LCBoLCB0dywg
dGgpOworfQorCisKK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3a19UaWxlX01h
dHJpeCAqdG0sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUsIGZsb2F0IHpvb20pCit7Cisg
ICAgY29uc3QgRWluYV9UaWxlX0dyaWRfSW5mbyAqaW5mbzsKKyAgICBFaW5hX1RpbGVfR3JpZF9T
bGljZXIgc2xpY2VyOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlO
QV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVwZGF0ZSwgRUlO
QV9GQUxTRSk7CisKKyAgICBpZiAodXBkYXRlLT53IDwgMSB8fCB1cGRhdGUtPmggPCAxKSB7Cisg
ICAgICAgIERCRygiV2h5IHdlIGdldCB1cGRhdGVzIHdpdGggZW1wdHkgYXJlYXM/ICVkLCVkKyVk
eCVkIGF0IHpvb20gJWYiLAorICAgICAgICAgICAgdXBkYXRlLT54LCB1cGRhdGUtPnksIHVwZGF0
ZS0+dywgdXBkYXRlLT5oLCB6b29tKTsKKyAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKKyAgICB9
CisKKyAgICBpZiAoIV9ld2tfdGlsZV9tYXRyaXhfc2xpY2VyX3NldHVwKHRtLCB1cGRhdGUsIHpv
b20sICZzbGljZXIpKSB7CisgICAgICAgIEVSUigiQ291bGQgbm90IHNldHVwIHNsaWNlciBmb3Ig
dXBkYXRlICVkLCVkKyVkeCVkIGF0IHpvb20gJWYiLAorICAgICAgICAgICAgdXBkYXRlLT54LCB1
cGRhdGUtPnksIHVwZGF0ZS0+dywgdXBkYXRlLT5oLCB6b29tKTsKKyAgICAgICAgcmV0dXJuIEVJ
TkFfRkFMU0U7CisgICAgfQorCisgICAgd2hpbGUgKGVpbmFfdGlsZV9ncmlkX3NsaWNlcl9uZXh0
KCZzbGljZXIsICZpbmZvKSkgeworICAgICAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OworICAg
ICAgICBFd2tfVGlsZSAqbCwgKnQ7CisgICAgICAgIGNvbCA9IGluZm8tPmNvbDsKKyAgICAgICAg
cm93ID0gaW5mby0+cm93OworCisgICAgICAgIGwgPSBlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lk
eF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpOworICAgICAgICBpZiAoIWwpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKEVJTkFfSU5MSVNUX0dF
VChsKSwgdCkgeworICAgICAgICAgICAgaWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxs
X3VwZGF0ZSkKKyAgICAgICAgICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQo
dG0tPnVwZGF0ZXMsIHQpOworICAgICAgICAgICAgaWYgKGluZm8tPmZ1bGwpCisgICAgICAgICAg
ICAgICAgZXdrX3RpbGVfdXBkYXRlX2Z1bGwodCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBpZiAodC0+em9vbSAhPSB6b29tKQorICAgICAgICAgICAgICAgICAgICBld2tf
dGlsZV91cGRhdGVfZnVsbCh0KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHQsICZpbmZvLT5yZWN0KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKwordm9p
ZCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlX01hdHJpeCAqdG0pCit7
CisgICAgRWluYV9MaXN0ICpsLCAqbF9uZXh0OworICAgIEV3a19UaWxlICp0OworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKKworICAgIC8vIHByb2Nlc3MgdXBkYXRlcywgdW5m
bGFnIHRpbGVzCisgICAgRUlOQV9MSVNUX0ZPUkVBQ0hfU0FGRSh0bS0+dXBkYXRlcywgbCwgbF9u
ZXh0LCB0KSB7CisgICAgICAgIGV3a190aWxlX3VwZGF0ZXNfcHJvY2Vzcyh0LCB0bS0+cmVuZGVy
LmNiLCB0bS0+cmVuZGVyLmRhdGEpOworICAgICAgICBpZiAodC0+dmlzaWJsZSkgeworICAgICAg
ICAgICAgZXdrX3RpbGVfdXBkYXRlc19jbGVhcih0KTsKKyAgICAgICAgICAgIHRtLT51cGRhdGVz
ID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRtLT51cGRhdGVzLCBsKTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19jbGVhcihFd2tfVGlsZV9NYXRy
aXggKnRtKQoreworICAgIEV3a19UaWxlICp0OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHRtKTsKKworICAgIEVJTkFfTElTVF9GUkVFKHRtLT51cGRhdGVzLCB0KQorICAgICAgICBl
d2tfdGlsZV91cGRhdGVzX2NsZWFyKHQpOworICAgIHRtLT51cGRhdGVzID0gTlVMTDsKK30KKwor
Ly8gcmVtb3ZlIG1lIGxhdGVyIQordm9pZCBld2tfdGlsZV9tYXRyaXhfZGJnKGNvbnN0IEV3a19U
aWxlX01hdHJpeCAqdG0pCit7CisgICAgRWluYV9JdGVyYXRvciAqaXQgPSBlaW5hX21hdHJpeHNw
YXJzZV9pdGVyYXRvcl9jb21wbGV0ZV9uZXcodG0tPm1hdHJpeCk7CisgICAgRWluYV9NYXRyaXhz
cGFyc2VfQ2VsbCAqY2VsbDsKKyAgICBFaW5hX0Jvb2wgbGFzdF9lbXB0eSA9IEVJTkFfRkFMU0U7
CisKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MKKyAgICBwcmludGYoIkV3a19UaWxlIE1hdHJpeDog
dGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0gIgorICAgICAgICAgICAiYnl0
ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il1cbiIsCisgICAgICAgICAgIHRtLT5z
dGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwKKyAgICAgICAgICAg
dG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCAtIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwKKyAgICAg
ICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkLAor
ICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkIC0gdG0tPnN0YXRzLmJ5dGVzLmZy
ZWVkKTsKKyNlbHNlCisgICAgcHJpbnRmKCJFd2tfVGlsZSBNYXRyaXg6XG4iKTsKKyNlbmRpZgor
CisgICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0LCBjZWxsKSB7CisgICAgICAgIHVuc2lnbmVk
IGxvbmcgcm93LCBjb2w7CisgICAgICAgIEVpbmFfSW5saXN0ICpsOworICAgICAgICBlaW5hX21h
dHJpeHNwYXJzZV9jZWxsX3Bvc2l0aW9uX2dldChjZWxsLCAmcm93LCAmY29sKTsKKyAgICAgICAg
bCA9IGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCk7CisKKyAgICAgICAgaWYg
KCFsKSB7CisgICAgICAgICAgICBpZiAoIWxhc3RfZW1wdHkpIHsKKyAgICAgICAgICAgICAgICBs
YXN0X2VtcHR5ID0gRUlOQV9UUlVFOworICAgICAgICAgICAgICAgIHByaW50ZigiRW1wdHk6Iik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludGYoIiBbJWx1LCVsdV0iLCBjb2wsIHJv
dyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobGFzdF9lbXB0eSkgeworICAg
ICAgICAgICAgICAgIGxhc3RfZW1wdHkgPSBFSU5BX0ZBTFNFOworICAgICAgICAgICAgICAgIHBy
aW50ZigiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEV3a19UaWxlICp0OworCisg
ICAgICAgICAgICBwcmludGYoIiUzbHUsJTNsdSAlMTBwOiIsIGNvbCwgcm93LCBsKTsKKyAgICAg
ICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobCwgdCkKKyAgICAgICAgICAgICAgICBwcmludGYo
IiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0lYyIsCisgICAgICAgICAgICAgICAgICAgICAg
IHQtPmNvbCwgdC0+cm93LCB0LT53LCB0LT5oLCB0LT56b29tLAorICAgICAgICAgICAgICAgICAg
ICAgICB0LT52aXNpYmxlID8gJyonOiAnICcpOworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwor
ICAgICAgICB9CisgICAgfQorICAgIGlmIChsYXN0X2VtcHR5KQorICAgICAgICBwcmludGYoIlxu
Iik7CisgICAgZWluYV9pdGVyYXRvcl9mcmVlKGl0KTsKKworICAgIGV3a190aWxlX3VudXNlZF9j
YWNoZV9kYmcodG0tPnR1Yyk7Cit9CisKKy8qKgorICogRnJlZXplIG1hdHJpeCB0byBub3QgZG8g
bWFpbnRlbmFuY2UgdGFza3MuCisgKgorICogTWFpbnRlbmFuY2UgdGFza3Mgb3B0aW1pemUgdXNh
Z2UsIGJ1dCBtYXliZSB3ZSBrbm93IHdlIHNob3VsZCBob2xkCisgKiBvbiB0aGVtIHVudGlsIHdl
IGRvIHRoZSBsYXN0IG9wZXJhdGlvbiwgaW4gdGhpcyBjYXNlIHdlIGZyZWV6ZQorICogd2hpbGUg
b3BlcmF0aW5nIGFuZCB0aGVuIHRoYXcgd2hlbiB3ZSdyZSBkb25lLgorICoKKyAqIEBzZWUgZXdr
X3RpbGVfbWF0cml4X3RoYXcoKQorICovCit2b2lkIGV3a190aWxlX21hdHJpeF9mcmVlemUoRXdr
X1RpbGVfTWF0cml4ICp0bSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7
CisgICAgaWYgKCF0bS0+ZnJvemVuKQorICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJl
ZXplKHRtLT50dWMpOworICAgIHRtLT5mcm96ZW4rKzsKK30KKworLyoqCisgKiBVbmZyZWV6ZXMg
bWFpbnRlbmFuY2UgdGFza3MuCisgKgorICogSWYgdGhpcyBpcyB0aGUgbGFzdCBjb3VudGVycGFy
dCBvZiBmcmVlemUsIHRoZW4gbWFpbnRlbmFuY2UgdGFza3MKKyAqIHdpbGwgcnVuIGltbWVkaWF0
ZWx5LgorICovCit2b2lkIGV3a190aWxlX21hdHJpeF90aGF3KEV3a19UaWxlX01hdHJpeCAqdG0p
Cit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOworICAgIGlmICghdG0tPmZy
b3plbikgeworICAgICAgICBFUlIoInRoYXdpbmcgbW9yZSB0aGFuIGZyZWV6aW5nISIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgdG0tPmZyb3plbi0tOworICAgIGlmICghdG0tPmZy
b3plbikKKyAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcodG0tPnR1Yyk7Cit9CmRp
ZmYgLS1naXQgYS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmggYi9XZWJLaXQvZWZs
L2V3ay9ld2tfdGlsZWRfbWF0cml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDdiODYxMmE0OTMxY2VlYTMwZjA5
Zjk5MmRiZDJmNDU1NWE3N2RlYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9tYXRyaXguaApAQCAtMCwwICsxLDYwIEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgZXdrX3RpbGVkX21hdHJp
eF9oCisjZGVmaW5lIGV3a190aWxlZF9tYXRyaXhfaAorCisjaW5jbHVkZSAiZXdrX2VhcGkuaCIK
KyNpbmNsdWRlICJld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oIgorCisjaW5jbHVkZSA8RXZhcy5o
PgorCisvKiBtYXRyaXggb2YgdGlsZXMgKi8KK0VBUEkgRXdrX1RpbGVfTWF0cml4ICpld2tfdGls
ZV9tYXRyaXhfbmV3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCB1bnNpZ25lZCBsb25nIGNv
bHMsIHVuc2lnbmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNwYWNlIGNzcGFjZSwgdm9pZCAoKnJl
bmRlcl9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1
cGRhdGUpLCBjb25zdCB2b2lkICpkYXRhKTsKK0VBUEkgdm9pZCAgICAgICAgIGV3a190aWxlX21h
dHJpeF9mcmVlKEV3a19UaWxlX01hdHJpeCAqdG0pOworCitFQVBJIHZvaWQgICAgICAgICBld2tf
dGlsZV9tYXRyaXhfcmVzaXplKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29s
cywgdW5zaWduZWQgbG9uZyByb3dzKTsKKworRUFQSSBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3
a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdG0p
OworCitFQVBJIEV3a19UaWxlICAgICAqZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KEV3
a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBpbnQgcm93LCBm
bG9hdCB6b29tKTsKK0VBUEkgRWluYV9Cb29sICAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFj
dF9leGlzdHMoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVk
IGludCByb3csIGZsb2F0IHpvb20pOworRUFQSSBFd2tfVGlsZSAgICAgKmV3a190aWxlX21hdHJp
eF90aWxlX25lYXJlc3RfZ2V0KEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29s
LCB1bnNpZ25lZCBpbnQgcm93LCBmbG9hdCB6b29tKTsKK0VBUEkgRXdrX1RpbGUgICAgICpld2tf
dGlsZV9tYXRyaXhfdGlsZV9uZXcoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXZhcyAqZXZhcywgdW5z
aWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGludCByb3csIGZsb2F0IHpvb20pOworRUFQSSBFaW5h
X0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KEV3a19UaWxlX01hdHJpeCAqdG0sIEV3a19U
aWxlICp0LCBkb3VibGUgbGFzdF91c2VkKTsKKworRUFQSSBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0
cml4X3RpbGVfdXBkYXRlKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1
bnNpZ25lZCBpbnQgcm93LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKTsKK0VBUEkgRWlu
YV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZV9mdWxsKEV3a19UaWxlX01hdHJpeCAq
dG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBpbnQgcm93KTsKK0VBUEkgdm9pZCBld2tf
dGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJpeCAqdG0sIEV3a19U
aWxlICp0KTsKKworRUFQSSBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShFd2tfVGls
ZV9NYXRyaXggKnRtLCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlLCBmbG9hdCB6b29tKTsK
K0VBUEkgdm9pZCAgICAgIGV3a190aWxlX21hdHJpeF91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVf
TWF0cml4ICp0bSk7CitFQVBJIHZvaWQgICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19jbGVh
cihFd2tfVGlsZV9NYXRyaXggKnRtKTsKK0VBUEkgdm9pZCAgICAgIGV3a190aWxlX21hdHJpeF9m
cmVlemUoRXdrX1RpbGVfTWF0cml4ICp0bSk7CitFQVBJIHZvaWQgICAgICBld2tfdGlsZV9tYXRy
aXhfdGhhdyhFd2tfVGlsZV9NYXRyaXggKnRtKTsKKworLy8gcmVtb3ZlIG1lIQorICAgIHZvaWQg
ZXdrX3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXggKnRtKTsKKyAgICB2b2lk
IGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0
dWMpOworICAgIHZvaWQgZXdrX3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCk7CisKKworI2VuZGlm
IC8vIGV3a190aWxlZF9tYXRyaXhfaAorCmRpZmYgLS1naXQgYS9XZWJLaXQvZWZsL2V3ay9ld2tf
dGlsZWRfbW9kZWwuYyBiL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY0MWI5M2UyZjU4NGFkNjU2YjQwMWNkYWUxNzcyYmM5ZjU0OTIyYmQKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuYwpAQCAtMCwwICsxLDkwNSBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3RpbGVkX21vZGVsLmgiCisKKyNk
ZWZpbmUgX0dOVV9TT1VSQ0UKKyNpbmNsdWRlICJld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oIgor
I2luY2x1ZGUgImV3a190aWxlZF9wcml2YXRlLmgiCisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1
ZGUgPGVpbmFfc2FmZXR5X2NoZWNrcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8
aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPiAvLyBYWFggUkVNT1ZFIE1FIExBVEVSCisj
aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZmRlZiBUSUxFX1NU
QVRTX0FDQ09VTlRfUkVOREVSX1RJTUUKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisK
KyNpZm5kZWYgQ0FJUk9fRk9STUFUX1JHQjE2XzU2NQorI2RlZmluZSBDQUlST19GT1JNQVRfUkdC
MTZfNTY1IDQKKyNlbmRpZgorCisjZGVmaW5lIElEWChjb2wsIHJvdywgcm93c3BhbikgKGNvbCAr
IChyb3cgKiByb3dzcGFuKSkKKyNkZWZpbmUgTUlOKGEsIGIpICgoYSA8IGIpID8gYSA6IGIpCisj
ZGVmaW5lIE1BWChhLCBiKSAoKGEgPiBiKSA/IGEgOiBiKQorCisjaWZkZWYgREVCVUdfTUVNX0xF
QUtTCitzdGF0aWMgdWludDY0X3QgdGlsZXNfYWxsb2NhdGVkID0gMDsKK3N0YXRpYyB1aW50NjRf
dCB0aWxlc19mcmVlZCA9IDA7CitzdGF0aWMgdWludDY0X3QgYnl0ZXNfYWxsb2NhdGVkID0gMDsK
K3N0YXRpYyB1aW50NjRfdCBieXRlc19mcmVlZCA9IDA7CisKK3N0cnVjdCB0aWxlX2FjY291bnQg
eworICAgIEV2YXNfQ29vcmQgc2l6ZTsKKyAgICBzdHJ1Y3QgeworICAgICAgICB1aW50NjRfdCBh
bGxvY2F0ZWQ7CisgICAgICAgIHVpbnQ2NF90IGZyZWVkOworICAgIH0gdGlsZXMsIGJ5dGVzOwor
fTsKKworc3RhdGljIHNpemVfdCBhY2NvdW50aW5nX2xlbiA9IDA7CitzdGF0aWMgc3RydWN0IHRp
bGVfYWNjb3VudCAqYWNjb3VudGluZyA9IE5VTEw7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRp
bGVfYWNjb3VudCAqX2V3a190aWxlX2FjY291bnRfZ2V0KGNvbnN0IEV3a19UaWxlICp0KQorewor
ICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjYzsKKyAgICBzaXplX3QgaTsKKworICAgIGZvciAo
aSA9IDA7IGkgPCBhY2NvdW50aW5nX2xlbjsgaSsrKSB7CisgICAgICAgIGlmIChhY2NvdW50aW5n
W2ldLnNpemUgPT0gdC0+dykKKyAgICAgICAgICAgIHJldHVybiBhY2NvdW50aW5nICsgaTsKKyAg
ICB9CisKKyAgICBpID0gKGFjY291bnRpbmdfbGVuICsgMSkgKiBzaXplb2Yoc3RydWN0IHRpbGVf
YWNjb3VudCk7CisgICAgUkVBTExPQ19PUl9PT01fUkVUKGFjY291bnRpbmcsIGksIE5VTEwpOwor
CisgICAgYWNjID0gYWNjb3VudGluZyArIGFjY291bnRpbmdfbGVuOworICAgIGFjYy0+c2l6ZSA9
IHQtPnc7CisgICAgYWNjLT50aWxlcy5hbGxvY2F0ZWQgPSAwOworICAgIGFjYy0+dGlsZXMuZnJl
ZWQgPSAwOworICAgIGFjYy0+Ynl0ZXMuYWxsb2NhdGVkID0gMDsKKyAgICBhY2MtPmJ5dGVzLmZy
ZWVkID0gMDsKKworICAgIGFjY291bnRpbmdfbGVuKys7CisKKyAgICByZXR1cm4gYWNjOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKGNvbnN0IEV3
a19UaWxlICp0KQoreworICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjYyA9IF9ld2tfdGlsZV9h
Y2NvdW50X2dldCh0KTsKKyAgICBpZiAoIWFjYykKKyAgICAgICAgcmV0dXJuOworICAgIGFjYy0+
Ynl0ZXMuYWxsb2NhdGVkICs9IHQtPmJ5dGVzOworICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkKys7
CisKKyAgICBieXRlc19hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7CisgICAgdGlsZXNfYWxsb2NhdGVk
Kys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9mcmVlZChjb25z
dCBFd2tfVGlsZSAqdCkKK3sKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2MgPSBfZXdrX3Rp
bGVfYWNjb3VudF9nZXQodCk7CisgICAgaWYgKCFhY2MpCisgICAgICAgIHJldHVybjsKKworICAg
IGFjYy0+Ynl0ZXMuZnJlZWQgKz0gdC0+Ynl0ZXM7CisgICAgYWNjLT50aWxlcy5mcmVlZCsrOwor
CisgICAgYnl0ZXNfZnJlZWQgKz0gdC0+Ynl0ZXM7CisgICAgdGlsZXNfZnJlZWQrKzsKK30KKwor
dm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2RiZyh2b2lkKQoreworICAgIHN0cnVjdCB0aWxlX2Fj
Y291bnQgKmFjYzsKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2NfZW5kOworCisgICAgcHJp
bnRmKCJUSUxFIEJBTEFOQ0U6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2NCJd
ICIKKyAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2NCJdXG4i
LAorICAgICAgICAgICAgdGlsZXNfYWxsb2NhdGVkLCB0aWxlc19mcmVlZCwgdGlsZXNfYWxsb2Nh
dGVkIC0gdGlsZXNfZnJlZWQsCisgICAgICAgICAgICBieXRlc19hbGxvY2F0ZWQsIGJ5dGVzX2Zy
ZWVkLCBieXRlc19hbGxvY2F0ZWQgLSBieXRlc19mcmVlZCk7CisKKyAgICBpZiAoIWFjY291bnRp
bmdfbGVuKQorICAgICAgICByZXR1cm47CisKKyAgICBhY2MgPSBhY2NvdW50aW5nOworICAgIGFj
Y19lbmQgPSBhY2MgKyBhY2NvdW50aW5nX2xlbjsKKyAgICBwcmludGYoIkJFR0lOOiBUSUxFIEJB
TEFOQ0UgREVUQUlMUyAoVE8gVEhJUyBNT01FTlQhKTpcbiIpOworICAgIGZvciAoOyBhY2MgPCBh
Y2NfZW5kOyBhY2MrKykgeworICAgICAgICB1aW50NjRfdCB0aWxlcywgYnl0ZXM7CisKKyAgICAg
ICAgdGlsZXMgPSBhY2MtPnRpbGVzLmFsbG9jYXRlZCAtIGFjYy0+dGlsZXMuZnJlZWQ7CisgICAg
ICAgIGJ5dGVzID0gYWNjLT5ieXRlcy5hbGxvY2F0ZWQgLSBhY2MtPmJ5dGVzLmZyZWVkOworCisg
ICAgICAgIHByaW50ZigiICAgJTRkOiB0aWxlc1srJTQiUFJJdTY0IiwtJTQiUFJJdTY0IjolNCJQ
Ukl1NjQiXSAiCisgICAgICAgICAgICAgICAiYnl0ZXNbKyU4IlBSSXU2NCIsLSU4IlBSSXU2NCI6
JTgiUFJJdTY0Il0lc1xuIiwKKyAgICAgICAgICAgICAgIGFjYy0+c2l6ZSwKKyAgICAgICAgICAg
ICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkLCBhY2MtPnRpbGVzLmZyZWVkLCB0aWxlcywKKyAgICAg
ICAgICAgICAgIGFjYy0+Ynl0ZXMuYWxsb2NhdGVkLCBhY2MtPmJ5dGVzLmZyZWVkLCBieXRlcywK
KyAgICAgICAgICAgICAgIChieXRlcyB8fCB0aWxlcykgPyAiIFBPU1NJQkxFIExFQUsiIDogIiIp
OworICAgIH0KKyAgICBwcmludGYoIkVORDogVElMRSBCQUxBTkNFIERFVEFJTFMgKFRPIFRISVMg
TU9NRU5UISk6XG4iKTsKK30KKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVf
YWNjb3VudF9hbGxvY2F0ZWQoY29uc3QgRXdrX1RpbGUgKnQpIHsgfQorc3RhdGljIGlubGluZSB2
b2lkIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKGNvbnN0IEV3a19UaWxlICp0KSB7IH0KKwordm9p
ZCBld2tfdGlsZV9hY2NvdW50aW5nX2RiZyh2b2lkKQoreworICAgIHByaW50ZigiY29tcGlsZSB3
ZWJraXQgd2l0aCBERUJVR19NRU1fTEVBS1MgZGVmaW5lZCFcbiIpOworfQorI2VuZGlmCisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiODg4KEV3a19UaWxlICp0LCB1aW50
OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQoreworICAgIHVpbnQzMl90ICpkc3QzMiwgKmRz
dDMyX2VuZCwgYzE7CisgICAgdWludDY0X3QgKmRzdDY0LCAqZHN0NjRfZW5kLCBjMjsKKworICAg
IGMxID0gMHhmZjAwMDAwMCB8ICgodWludDMyX3QpciA8PCAxNikgfCAoKHVpbnQzMl90KWcgPDwg
OCkgfCBiOworICAgIGMyID0gKCh1aW50NjRfdCljMSA8PCAzMikgfCBjMTsKKworICAgIGRzdDY0
ID0gKHVpbnQ2NF90ICopdC0+cGl4ZWxzOworICAgIGRzdDY0X2VuZCA9IGRzdDY0ICsgKCh0LT5i
eXRlcyAvIDgpICYgfjcpOworICAgIGZvciAoOyBkc3Q2NCA8IGRzdDY0X2VuZDsgZHN0NjQgKz0g
OCkgeworICAgICAgICAvKiBUT0RPOiBBUk0gYWRkIHBsZCBvciBORU9OIGluc3RydWN0aW9ucyAq
LworICAgICAgICBkc3Q2NFswXSA9IGMyOworICAgICAgICBkc3Q2NFsxXSA9IGMyOworICAgICAg
ICBkc3Q2NFsyXSA9IGMyOworICAgICAgICBkc3Q2NFszXSA9IGMyOworICAgICAgICBkc3Q2NFs0
XSA9IGMyOworICAgICAgICBkc3Q2NFs1XSA9IGMyOworICAgICAgICBkc3Q2NFs2XSA9IGMyOwor
ICAgICAgICBkc3Q2NFs3XSA9IGMyOworICAgIH0KKworICAgIGRzdDMyID0gKHVpbnQzMl90ICop
ZHN0NjRfZW5kOworICAgIGRzdDMyX2VuZCA9ICh1aW50MzJfdCAqKSh0LT5waXhlbHMgKyB0LT5i
eXRlcyk7CisgICAgZm9yICg7IGRzdDMyIDwgZHN0MzJfZW5kOyBkc3QzMisrKQorICAgICAgICAq
ZHN0MzIgPSBjMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludF9yZ2I1
NjUoRXdrX1RpbGUgKnQsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIpCit7CisgICAg
dWludDE2X3QgKmRzdDE2LCAqZHN0MTZfZW5kLCBjMTsKKyAgICB1aW50NjRfdCAqZHN0NjQsICpk
c3Q2NF9lbmQsIGMyOworCisgICAgYzEgPSAoKCgociA+PiAzKSAmIDB4MWYpIDw8IDExKSB8Cisg
ICAgICAgICAgKCgoZyA+PiAyKSAmIDB4M2YpIDw8IDUpIHwKKyAgICAgICAgICAoKGIgPj4gMykg
JiAweDFmKSk7CisKKyAgICBjMiA9ICgoKHVpbnQ2NF90KWMxIDw8IDQ4KSB8ICgodWludDY0X3Qp
YzEgPDwgMzIpIHwKKyAgICAgICAgICAoKHVpbnQ2NF90KWMxIDw8IDE2KSB8IGMxKTsKKworICAg
IGRzdDY0ID0gKHVpbnQ2NF90ICopdC0+cGl4ZWxzOworICAgIGRzdDY0X2VuZCA9IGRzdDY0ICsg
KCh0LT5ieXRlcyAvIDgpICYgfjcpOworICAgIGZvciAoOyBkc3Q2NCA8IGRzdDY0X2VuZDsgZHN0
NjQgKz0gOCkgeworICAgICAgICAvKiBUT0RPOiBBUk0gYWRkIHBsZCBvciBORU9OIGluc3RydWN0
aW9ucyAqLworICAgICAgICBkc3Q2NFswXSA9IGMyOworICAgICAgICBkc3Q2NFsxXSA9IGMyOwor
ICAgICAgICBkc3Q2NFsyXSA9IGMyOworICAgICAgICBkc3Q2NFszXSA9IGMyOworICAgICAgICBk
c3Q2NFs0XSA9IGMyOworICAgICAgICBkc3Q2NFs1XSA9IGMyOworICAgICAgICBkc3Q2NFs2XSA9
IGMyOworICAgICAgICBkc3Q2NFs3XSA9IGMyOworICAgIH0KKworICAgIGRzdDE2ID0gKHVpbnQx
Nl90ICopZHN0MTZfZW5kOworICAgIGRzdDE2X2VuZCA9ICh1aW50MTZfdCAqKSh0LT5waXhlbHMg
KyB0LT5ieXRlcyk7CisgICAgZm9yICg7IGRzdDE2IDwgZHN0MTZfZW5kOyBkc3QxNisrKQorICAg
ICAgICAqZHN0MTYgPSBjMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWlu
dChFd2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3QgYikKK3sKKyAgICBp
ZiAodC0+Y3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4OCkKKyAgICAgICAgX2V3a190
aWxlX3BhaW50X3JnYjg4OCh0LCByLCBnLCBiKTsKKyAgICBlbHNlIGlmICh0LT5jc3BhY2UgPT0g
RVZBU19DT0xPUlNQQUNFX1JHQjU2NV9BNVApCisgICAgICAgIF9ld2tfdGlsZV9wYWludF9yZ2I1
NjUodCwgciwgZywgYik7CisgICAgZWxzZQorICAgICAgICBFUlIoInVua25vd24gY29sb3Igc3Bh
Y2U6ICVkIiwgdC0+Y3NwYWNlKTsKK30KKworLyoqCisgKiBDcmVhdGUgYSBuZXcgdGlsZSBvZiBn
aXZlbiBzaXplLCB6b29tIGxldmVsIGFuZCBjb2xvcnNwYWNlLgorICoKKyAqIEFmdGVyIGNyZWF0
ZWQgdGhlc2UgcHJvcGVydGllcyBhcmUgaW1tdXRhYmxlIGFzIHRoZXkncmUgdGhlIGJhc2ljCisg
KiBjaGFyYWN0ZXJpc3RpYyBvZiB0aGUgdGlsZSBhbmQgYW55IGNoYW5nZSB3aWxsIGxlYWQgdG8g
aW52YWxpZAorICogbWVtb3J5IGFjY2Vzcy4KKyAqCisgKiBPdGhlciBtZW1iZXJzIGFyZSBvZiBm
cmVlLWFjY2VzcyBhbmQgbm8gZ2V0dGVycy9zZXR0ZXJzIGFyZQorICogcHJvdmlkZWQgaW4gb3Jk
ZXJyIHRvIGF2b2lkIGV4cGVuc2l2ZSBvcGVyYXRpb25zIG9uIHRob3NlLCBob3dldmVyCisgKiBz
b21lIGFyZSBiZXR0ZXIgbWFuaXB1bGF0ZWQgd2l0aCBwcm92aWRlZCBmdW5jdGlvbnMsIHN1Y2gg
YXMKKyAqIGV3a190aWxlX3Nob3coKSBhbmQgZXdrX3RpbGVfaGlkZSgpIHRvIGNoYW5nZQorICog
QGMgdmlzaWJsZSBvciBld2tfdGlsZV91cGRhdGVfZnVsbCgpLCBld2tfdGlsZV91cGRhdGVfYXJl
YSgpLAorICogZXdrX3RpbGVfdXBkYXRlc19jbGVhcigpIHRvIGNoYW5nZSBAYyBzdGF0cy5taXNz
ZXMsCisgKiBAYyBzdGF0cy5mdWxsX3VwZGF0ZSBhbmQgQGMgdXBkYXRlcy4KKyAqLworRXdrX1Rp
bGUgKmV3a190aWxlX25ldyhFdmFzICpldmFzLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwg
ZmxvYXQgem9vbSwgRXZhc19Db2xvcnNwYWNlIGNzcGFjZSkKK3sKKyAgICBFaW5hX0lubGlzdCAq
bDsKKyAgICBFdmFzX0Nvb3JkICplYzsKKyAgICBFdmFzX0NvbG9yc3BhY2UgKmVjczsKKyAgICBm
bG9hdCAqZjsKKyAgICBzaXplX3QgKnM7CisgICAgRXdrX1RpbGUgKnQ7CisgICAgdW5zaWduZWQg
aW50IGFyZWE7CisgICAgc2l6ZV90IGJ5dGVzOworICAgIGNhaXJvX2Zvcm1hdF90IGZvcm1hdDsK
KyAgICBjYWlyb19zdGF0dXNfdCBzdGF0dXM7CisgICAgaW50IHN0cmlkZTsKKworICAgIGFyZWEg
PSB3ICogaDsKKworICAgIGlmIChjc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4KSB7
CisgICAgICAgIGJ5dGVzID0gYXJlYSAqIDQ7CisgICAgICAgIHN0cmlkZSA9IHcgKiA0OworICAg
ICAgICBmb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMjQ7CisgICAgfSBlbHNlIGlmIChjc3BhY2Ug
PT0gRVZBU19DT0xPUlNQQUNFX1JHQjU2NV9BNVApIHsKKyAgICAgICAgYnl0ZXMgPSBhcmVhICog
MjsKKyAgICAgICAgc3RyaWRlID0gdyAqIDI7CisgICAgICAgIGZvcm1hdCA9IENBSVJPX0ZPUk1B
VF9SR0IxNl81NjU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgRVJSKCJ1bmtub3duIGNvbG9yIHNw
YWNlOiAlZCIsIGNzcGFjZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIERC
Rygic2l6ZTogJWR4JWQgKCVkKSwgem9vbTogJWYsIGNzcGFjZT0lZCIsCisgICAgICAgIHcsIGgs
IGFyZWEsIChkb3VibGUpem9vbSwgY3NwYWNlKTsKKworICAgIE1BTExPQ19PUl9PT01fUkVUKHQs
IHNpemVvZihFd2tfVGlsZSksIE5VTEwpOworICAgIHQtPmltYWdlID0gZXZhc19vYmplY3RfaW1h
Z2VfYWRkKGV2YXMpOworCisgICAgbCA9IEVJTkFfSU5MSVNUX0dFVCh0KTsKKyAgICBsLT5wcmV2
ID0gTlVMTDsKKyAgICBsLT5uZXh0ID0gTlVMTDsKKworICAgIHQtPnZpc2libGUgPSAwOworICAg
IHQtPnVwZGF0ZXMgPSBOVUxMOworCisgICAgbWVtc2V0KCZ0LT5zdGF0cywgMCwgc2l6ZW9mKEV3
a19UaWxlX1N0YXRzKSk7CisgICAgdC0+c3RhdHMuYXJlYSA9IGFyZWE7CisKKyAgICAvKiB1Z2x5
LCBidXQgbGV0J3MgYXZvaWQgYXQgYWxsIGNvc3RzIGhhdmluZyB1c2VycyB0byBtb2RpZnkgdGhv
c2UgKi8KKyAgICBlYyA9IChFdmFzX0Nvb3JkICopJnQtPnc7CisgICAgKmVjID0gdzsKKworICAg
IGVjID0gKEV2YXNfQ29vcmQgKikmdC0+aDsKKyAgICAqZWMgPSBoOworCisgICAgZWNzID0gKEV2
YXNfQ29sb3JzcGFjZSAqKSZ0LT5jc3BhY2U7CisgICAgKmVjcyA9IGNzcGFjZTsKKworICAgIGYg
PSAoZmxvYXQgKikmdC0+em9vbTsKKyAgICAqZiA9IHpvb207CisKKyAgICBzID0gKHNpemVfdCAq
KSZ0LT5ieXRlczsKKyAgICAqcyA9IGJ5dGVzOworCisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6
ZV9zZXQodC0+aW1hZ2UsIHQtPncsIHQtPmgpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbG9y
c3BhY2Vfc2V0KHQtPmltYWdlLCB0LT5jc3BhY2UpOworICAgIHQtPnBpeGVscyA9IGV2YXNfb2Jq
ZWN0X2ltYWdlX2RhdGFfZ2V0KHQtPmltYWdlLCBFSU5BX1RSVUUpOworICAgIHQtPnN1cmZhY2Ug
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YQorICAgICAgICAodC0+cGl4ZWxz
LCBmb3JtYXQsIHcsIGgsIHN0cmlkZSk7CisgICAgc3RhdHVzID0gY2Fpcm9fc3VyZmFjZV9zdGF0
dXModC0+c3VyZmFjZSk7CisgICAgaWYgKHN0YXR1cyAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykg
eworICAgICAgICBFUlIoImZhaWxlZCB0byBjcmVhdGUgY2Fpcm8gc3VyZmFjZTogJXMiLAorICAg
ICAgICAgICAgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMpKTsKKyAgICAgICAgZnJlZSh0
KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdC0+Y2Fpcm8gPSBjYWlyb19j
cmVhdGUodC0+c3VyZmFjZSk7CisgICAgc3RhdHVzID0gY2Fpcm9fc3RhdHVzKHQtPmNhaXJvKTsK
KyAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CisgICAgICAgIEVSUigi
ZmFpbGVkIHRvIGNyZWF0ZSBjYWlybzogJXMiLCBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1
cykpOworICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodC0+c3VyZmFjZSk7CisgICAgICAg
IGV2YXNfb2JqZWN0X2RlbCh0LT5pbWFnZSk7CisgICAgICAgIGZyZWUodCk7CisgICAgICAgIHJl
dHVybiBOVUxMOworICAgIH0KKworICAgIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZCh0KTsK
KworICAgIHJldHVybiB0OworfQorCisvKioKKyAqIEZyZWUgdGlsZSBtZW1vcnkuCisgKi8KK3Zv
aWQgZXdrX3RpbGVfZnJlZShFd2tfVGlsZSAqdCkKK3sKKyAgICBfZXdrX3RpbGVfYWNjb3VudF9m
cmVlZCh0KTsKKworICAgIGlmICh0LT51cGRhdGVzKQorICAgICAgICBlaW5hX3RpbGVyX2ZyZWUo
dC0+dXBkYXRlcyk7CisKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodC0+c3VyZmFjZSk7Cisg
ICAgY2Fpcm9fZGVzdHJveSh0LT5jYWlybyk7CisgICAgZXZhc19vYmplY3RfZGVsKHQtPmltYWdl
KTsKKyAgICBmcmVlKHQpOworfQorCisvKioKKyAqIE1ha2UgdGhlIHRpbGUgdmlzaWJsZSwgaW5j
cmVtZW50aW5nIGl0cyBjb3VudGVyLgorICovCit2b2lkIGV3a190aWxlX3Nob3coRXdrX1RpbGUg
KnQpCit7CisgICAgdC0+dmlzaWJsZSsrOworICAgIGV2YXNfb2JqZWN0X3Nob3codC0+aW1hZ2Up
OworfQorCisvKioKKyAqIERlY3JlbWVudCB0aGUgdmlzaWJpbGl0eSBjb3VudGVyLCBtYWtpbmcg
aXQgaW52aXNpYmxlIGlmIG5lY2Vzc2FyeS4KKyAqLwordm9pZCBld2tfdGlsZV9oaWRlKEV3a19U
aWxlICp0KQoreworICAgIHQtPnZpc2libGUtLTsKKyAgICBpZiAoIXQtPnZpc2libGUpCisgICAg
ICAgIGV2YXNfb2JqZWN0X2hpZGUodC0+aW1hZ2UpOworfQorCisvKioKKyAqIFJldHVybnMgRUlO
QV9UUlVFIGlmIHRoZSB0aWxlIGlzIHZpc2libGUsIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICov
CitFaW5hX0Jvb2wgZXdrX3RpbGVfdmlzaWJsZV9nZXQoRXdrX1RpbGUgKnQpCit7CisgICAgcmV0
dXJuICEhdC0+dmlzaWJsZTsKK30KKworLyoqCisgKiBNYXJrIHdob2xlIHRpbGUgYXMgZGlydHkg
YW5kIHJlcXVpcmluZyB1cGRhdGUuCisgKi8KK3ZvaWQgZXdrX3RpbGVfdXBkYXRlX2Z1bGwoRXdr
X1RpbGUgKnQpCit7CisgICAgLyogVE9ETzogbGlzdCBvZiB0aWxlcyBwZW5kaW5nIHVwZGF0ZXM/
ICovCisgICAgdC0+c3RhdHMubWlzc2VzKys7CisKKyAgICBpZiAoIXQtPnN0YXRzLmZ1bGxfdXBk
YXRlKSB7CisgICAgICAgIHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOworICAgICAg
ICBpZiAodC0+dXBkYXRlcykgeworICAgICAgICAgICAgZWluYV90aWxlcl9mcmVlKHQtPnVwZGF0
ZXMpOworICAgICAgICAgICAgdC0+dXBkYXRlcyA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9Cit9
CisKKy8qKgorICogTWFyayB0aGUgc3BlY2lmaWMgc3ViYXJlYSBhcyBkaXJ0eSBhbmQgcmVxdWly
aW5nIHVwZGF0ZS4KKyAqLwordm9pZCBld2tfdGlsZV91cGRhdGVfYXJlYShFd2tfVGlsZSAqdCwg
Y29uc3QgRWluYV9SZWN0YW5nbGUgKnIpCit7CisgICAgLyogVE9ETzogbGlzdCBvZiB0aWxlcyBw
ZW5kaW5nIHVwZGF0ZXM/ICovCisgICAgdC0+c3RhdHMubWlzc2VzKys7CisKKyAgICBpZiAodC0+
c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghci0+eCAmJiAh
ci0+eSAmJiByLT53ID09IHQtPncgJiYgci0+aCA9PSB0LT5oKSB7CisgICAgICAgIHQtPnN0YXRz
LmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOworICAgICAgICBpZiAodC0+dXBkYXRlcykgeworICAg
ICAgICAgICAgZWluYV90aWxlcl9mcmVlKHQtPnVwZGF0ZXMpOworICAgICAgICAgICAgdC0+dXBk
YXRlcyA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghdC0+dXBkYXRlcykgeworICAgICAgICB0LT51cGRhdGVzID0gZWluYV90aWxlcl9uZXcodC0+
dywgdC0+aCk7CisgICAgICAgIGlmICghdC0+dXBkYXRlcykgeworICAgICAgICAgICAgQ1JJVElD
QUwoImNvdWxkIG5vdCBjcmVhdGUgZWluYV90aWxlciAlZHglZC4iLCB0LT53LCB0LT5oKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGVpbmFfdGlsZXJfcmVj
dF9hZGQodC0+dXBkYXRlcywgcik7Cit9CisKKy8qKgorICogRm9yIGVhY2ggdXBkYXRlZCByZWdp
b24sIGNhbGwgdGhlIGdpdmVuIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgd2lsbCBub3QgY2hhbmdl
IHRoZSB0aWxlIHN0YXRpc3RpY3Mgb3IgY2xlYXIgdGhlIHByb2Nlc3NlZAorICogdXBkYXRlcywg
dXNlIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoKSBmb3IgdGhhdC4KKyAqLwordm9pZCBld2tfdGls
ZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGUgKnQsIHZvaWQgKCpjYikodm9pZCAqZGF0YSwgRXdr
X1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpLCBjb25zdCB2b2lkICpkYXRh
KQoreworICAgIGlmICh0LT5zdGF0cy5mdWxsX3VwZGF0ZSkgeworICAgICAgICBFaW5hX1JlY3Rh
bmdsZSByOworICAgICAgICByLnggPSAwOworICAgICAgICByLnkgPSAwOworICAgICAgICByLncg
PSB0LT53OworICAgICAgICByLmggPSB0LT5oOworI2lmZGVmIFRJTEVfU1RBVFNfQUNDT1VOVF9S
RU5ERVJfVElNRQorICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1ldjsKKyAgICAgICAgZG91Ymxl
IHJlbmRlcl9zdGFydDsKKyAgICAgICAgZ2V0dGltZW9mZGF5KCZ0aW1ldiwgTlVMTCk7CisgICAg
ICAgIHJlbmRlcl9zdGFydCA9IChkb3VibGUpdGltZXYudHZfc2VjICsKKyAgICAgICAgICAgICgo
KGRvdWJsZSl0aW1ldi50dl91c2VjKSAvIDEwMDAwMDApOworI2VuZGlmCisgICAgICAgIGNiKCh2
b2lkICopZGF0YSwgdCwgJnIpOworI2lmZGVmIFRJTEVfU1RBVFNfQUNDT1VOVF9SRU5ERVJfVElN
RQorICAgICAgICBnZXR0aW1lb2ZkYXkoJnRpbWV2LCBOVUxMKTsKKyAgICAgICAgdC0+c3RhdHMu
cmVuZGVyX3RpbWUgPSAoZG91YmxlKXRpbWV2LnR2X3NlYyArCisgICAgICAgICAgICAoKChkb3Vi
bGUpdGltZXYudHZfdXNlYykgLyAxMDAwMDAwKSAtIHJlbmRlcl9zdGFydDsKKyNlbmRpZgorICAg
IH0gZWxzZSBpZiAodC0+dXBkYXRlcykgeworICAgICAgICBFaW5hX0l0ZXJhdG9yICppdHIgPSBl
aW5hX3RpbGVyX2l0ZXJhdG9yX25ldyh0LT51cGRhdGVzKTsKKyAgICAgICAgRWluYV9SZWN0YW5n
bGUgciA9IHswLCAwLCAwLCAwfTsKKyAgICAgICAgaWYgKCFpdHIpIHsKKyAgICAgICAgICAgIENS
SVRJQ0FMKCJjb3VsZCBub3QgY3JlYXRlIHRpbGVyIGl0ZXJhdG9yISIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdHIsIHIp
CisgICAgICAgICAgICBjYigodm9pZCAqKWRhdGEsIHQsICZyKTsKKyAgICAgICAgZWluYV9pdGVy
YXRvcl9mcmVlKGl0cik7CisgICAgfQorfQorCisvKioKKyAqIENsZWFyIGFsbCB1cGRhdGVzIGlu
IHJlZ2lvbiwgaWYgYW55LgorICoKKyAqIFRoaXMgd2lsbCBjaGFuZ2UgdGhlIHRpbGUgc3RhdGlz
dGljcywgc3BlY2lhbGx5IHplcm8gc3RhdC5taXNzZXMKKyAqIGFuZCB1bnNldCBzdGF0cy5mdWxs
X3VwZGF0ZS4gSWYgdC0+dXBkYXRlcyBleGlzdGVkLCB0aGVuIGl0IHdpbGwgYmUKKyAqIGRlc3Ry
b3llZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGFmdGVyIGV3a190
aWxlX3VwZGF0ZXNfcHJvY2VzcygpIGlzCisgKiBjYWxsZWQuCisgKi8KK3ZvaWQgZXdrX3RpbGVf
dXBkYXRlc19jbGVhcihFd2tfVGlsZSAqdCkKK3sKKyAgICAvKiBUT0RPOiByZW1vdmUgZnJvbSBs
aXN0IG9mIHBlbmRpbmcgdXBkYXRlcz8gKi8KKyAgICB0LT5zdGF0cy5taXNzZXMgPSAwOworCisg
ICAgaWYgKHQtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgICAgICB0LT5zdGF0cy5mdWxsX3VwZGF0
ZSA9IDA7CisgICAgZWxzZSBpZiAodC0+dXBkYXRlcykgeworICAgICAgICBlaW5hX3RpbGVyX2Zy
ZWUodC0+dXBkYXRlcyk7CisgICAgICAgIHQtPnVwZGF0ZXMgPSBOVUxMOworICAgIH0KK30KKwor
dHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSBFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGVfRW50cnk7CitzdHJ1Y3QgX0V3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSB7Cisg
ICAgRXdrX1RpbGUgKnRpbGU7CisgICAgaW50IHdlaWdodDsKKyAgICBzdHJ1Y3QgeworICAgICAg
ICB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0KTsKKyAgICAgICAgdm9pZCAqZGF0
YTsKKyAgICB9IHRpbGVfZnJlZTsKK307CisKK3N0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hl
IHsKKyAgICBzdHJ1Y3QgeworICAgICAgICBFaW5hX0xpc3QgKmxpc3Q7CisgICAgICAgIHNpemVf
dCBjb3VudDsKKyAgICAgICAgc2l6ZV90IGFsbG9jYXRlZDsKKyAgICB9IGVudHJpZXM7CisgICAg
c3RydWN0IHsKKyAgICAgICAgc2l6ZV90IG1heDsgIC8qKjwgd2F0ZXJtYXJrIChpbiBieXRlcykg
dG8gc3RhcnQgZnJlZWluZyB0aWxlcyAqLworICAgICAgICBzaXplX3QgdXNlZDsgLyoqPCBpbiBi
eXRlcywgbWF5YmUgbW9yZSB0aGFuIG1heC4gKi8KKyAgICB9IG1lbW9yeTsKKyAgICBzdHJ1Y3Qg
eworICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisgICAgICAgIGZsb2F0IHpvb207Cisg
ICAgICAgIEVpbmFfQm9vbCBsb2NrZWQ7CisgICAgfSBsb2NrZWQ7CisgICAgaW50IHJlZmVyZW5j
ZXM7CisgICAgdW5zaWduZWQgaW50IGZyb3plbjsKKyAgICBFaW5hX0Jvb2wgZGlydHk6MTsKK307
CisKK3N0YXRpYyBjb25zdCBzaXplX3QgVElMRV9VTlVTRURfQ0FDSEVfQUxMT0NBVEVfSU5JVElB
TCA9IDEyODsKK3N0YXRpYyBjb25zdCBzaXplX3QgVElMRV9VTlVTRURfQ0FDSEVfQUxMT0NBVEVf
U1RFUCA9IDE2Oworc3RhdGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9NQVhfRlJF
RSA9IDMyOworCisvKioKKyAqIENhY2hlIG9mIHVudXNlZCB0aWxlcyAodGhvc2UgdGhhdCBhcmUg
bm90IHZpc2libGUpLgorICoKKyAqIFRoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMuCisgKgorICog
QHBhcmFtIG1heCBjYWNoZSBzaXplIGluIGJ5dGVzLgorICoKKyAqIEByZXR1cm4gbmV3bHkgYWxs
b2NhdGVkIGNhY2hlIG9mIHVudXNlZCB0aWxlcywgdXNlCisgKiAgICAgICAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9mcmVlKCkgdG8gcmVsZWFzZSByZXNvdXJjZXMuIElmIG5vdAorICogICAgICAg
ICBwb3NzaWJsZSB0byBhbGxvY2F0ZSBtZW1vcnksIEBjIE5VTEwgaXMgcmV0dXJuZWQuCisgKi8K
K0V3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2VkX2NhY2hlX25ldyhzaXplX3Qg
bWF4KQoreworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworCisgICAgQ0FMTE9DX09S
X09PTV9SRVQodHVjLCBzaXplb2YoRXdrX1RpbGVfVW51c2VkX0NhY2hlKSwgTlVMTCk7CisKKyAg
ICBEQkcoInR1Yz0lcCIsIHR1Yyk7CisgICAgdHVjLT5tZW1vcnkubWF4ID0gbWF4OworICAgIHR1
Yy0+cmVmZXJlbmNlcyA9IDE7CisgICAgcmV0dXJuIHR1YzsKK30KKwordm9pZCBld2tfdGlsZV91
bnVzZWRfY2FjaGVfbG9ja19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFdmFzX0Nv
b3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpv
b20pCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKworICAgIHR1Yy0+
bG9ja2VkLmxvY2tlZCA9IEVJTkFfVFJVRTsKKyAgICB0dWMtPmxvY2tlZC54ID0geDsKKyAgICB0
dWMtPmxvY2tlZC55ID0geTsKKyAgICB0dWMtPmxvY2tlZC53ID0gdzsKKyAgICB0dWMtPmxvY2tl
ZC5oID0gaDsKKyAgICB0dWMtPmxvY2tlZC56b29tID0gem9vbTsKK30KKwordm9pZCBld2tfdGls
ZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKworICAgIHR1Yy0+bG9ja2Vk
LmxvY2tlZCA9IEVJTkFfRkFMU0U7Cit9CisKKy8qKgorICogRnJlZSBjYWNoZSBvZiB1bnVzZWQg
dGlsZXMuCisgKgorICogVGhvc2UgdGlsZXMgdGhhdCBhcmUgc3RpbGwgdmlzaWJsZSB3aWxsIHJl
bWFpbiBsaXZlLiBUaGUgdW51c2VkCisgKiB0aWxlcyB3aWxsIGJlIGZyZWVkLgorICoKKyAqIEBz
ZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKCkKKyAqLwordm9pZCBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfZnJlZShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOworCisgICAgREJHKCJ0dWM9JXAsICIKKyAgICAgICAg
ImVudHJpZXM9KGNvdW50OiV6ZCwgYWxsb2NhdGVkOiV6ZCksICIKKyAgICAgICAgIm1lbW9yeT0o
bWF4OiV6ZCwgdXNlZDolemQpIiwKKyAgICAgICAgdHVjLCB0dWMtPmVudHJpZXMuY291bnQsIHR1
Yy0+ZW50cmllcy5hbGxvY2F0ZWQsCisgICAgICAgIHR1Yy0+bWVtb3J5Lm1heCwgdHVjLT5tZW1v
cnkudXNlZCk7CisKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIodHVjKTsKKyAgICBm
cmVlKHR1Yyk7Cit9CisKKy8qKgorICogQ2xlYXIgY2FjaGUgb2YgdW51c2VkIHRpbGVzLgorICoK
KyAqIEFueSB0aWxlcyB0aGF0IGFyZSBpbiB0aGUgY2FjaGUgYXJlIGZyZWVkLiBUaGUgb25seSB0
aWxlcyB0aGF0IGFyZQorICoga2VwdCBhcmUgdGhvc2UgdGhhdCBhcmVuJ3QgaW4gdGhlIGNhY2hl
IChpLmUuIHRoYXQgYXJlIHZpc2libGUpLgorICovCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNo
ZV9jbGVhcihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGVfRW50cnkgKml0cjsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMp
OworCisgICAgaWYgKCF0dWMtPmVudHJpZXMuY291bnQpCisgICAgICAgIHJldHVybjsKKworICAg
IEVJTkFfTElTVF9GUkVFKHR1Yy0+ZW50cmllcy5saXN0LCBpdHIpIHsKKyAgICAgICAgaXRyLT50
aWxlX2ZyZWUuY2IoaXRyLT50aWxlX2ZyZWUuZGF0YSwgaXRyLT50aWxlKTsKKyAgICAgICAgZnJl
ZShpdHIpOworICAgIH0KKworICAgIHR1Yy0+bWVtb3J5LnVzZWQgPSAwOworICAgIHR1Yy0+ZW50
cmllcy5jb3VudCA9IDA7CisgICAgdHVjLT5kaXJ0eSA9IEVJTkFfRkFMU0U7Cit9CisKKy8qKgor
ICogSG9sZCByZWZlcmVuY2UgdG8gY2FjaGUuCisgKgorICogQHJldHVybiBzYW1lIHBvaW50ZXIg
YXMgdGFrZW4uCisgKgorICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoKQorICov
CitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYoRXdrX1Rp
bGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHR1YywgTlVMTCk7CisgICAgdHVjLT5yZWZlcmVuY2VzKys7CisgICAgcmV0dXJuIHR1YzsK
K30KKworLyoqCisgKiBSZWxlYXNlIGNhY2hlIHJlZmVyZW5jZSwgZnJlZWluZyBpdCBpZiBpdCBk
cm9wcyB0byB6ZXJvLgorICoKKyAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZigpCisg
KiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKCkKKyAqLwordm9pZCBld2tfdGlsZV91
bnVzZWRfY2FjaGVfdW5yZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKyAgICB0dWMtPnJlZmVyZW5jZXMtLTsKKyAg
ICBpZiAoIXR1Yy0+cmVmZXJlbmNlcykKKyAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2Zy
ZWUodHVjKTsKK30KKworLyoqCisgKiBDaGFuZ2UgY2FjaGUgY2FwYWNpdHksIGluIGJ5dGVzLgor
ICoKKyAqIFRoaXMgd2lsbCBub3QgZmx1c2ggY2FjaGUsIHVzZSBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfZmx1c2goKSBvcgorICogZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goKSB0byBk
byBzby4KKyAqLwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X3NldChFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IG1heCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTih0dWMpOworICAgIHR1Yy0+bWVtb3J5Lm1heCA9IG1heDsKK30KKworLyoqCisgKiBS
ZXRyaWV2ZSBtYXhpbXVtIGNhY2hlIGNhcGFjaXR5LCBpbiBieXRlcy4KKyAqLworc2l6ZV90IGV3
a190aWxlX3VudXNlZF9jYWNoZV9tYXhfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMsIDApOworICAg
IHJldHVybiB0dWMtPm1lbW9yeS5tYXg7Cit9CisKKy8qKgorICogUmV0cmlldmUgdGhlIHVzZWQg
Y2FjaGUgY2FwYWNpdHksIGluIGJ5dGVzLgorICovCitzaXplX3QgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX3VzZWRfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMsIDApOworICAgIHJldHVybiB0dWMtPm1l
bW9yeS51c2VkOworfQorCisvKioKKyAqIEZsdXNoIGdpdmVuIGFtb3VudCBvZiBieXRlcyBmcm9t
IGNhY2hlLgorICoKKyAqIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgbmVhciBAYSBieXRl
cyBhcmUgZnJlZWQgZnJvbSBjYWNoZS4gSXQKKyAqIG1heSBiZSBsZXNzIGlmIGNhY2hlIGRpZCBu
b3QgY29udGFpbiB0aGF0IGFtb3VudCBvZiBieXRlcyAoaWU6IGFuCisgKiBlbXB0eSBjYWNoZSBo
YXMgbm90aGluZyB0byBmcmVlISkgb3IgbW9yZSBpZiB0aGUgY2FjaGUganVzdAorICogY29udGFp
bmVkIG9iamVjdHMgdGhhdCB3ZXJlIGxhcmdlciB0aGFuIHRoZSByZXF1ZXN0ZWQgYW1vdW50ICh0
aGlzCisgKiBpcyB1c3VhbGx5IHRoZSBjYXNlKS4KKyAqCisgKiBAcGFyYW0gdHVjIGNhY2hlIG9m
IHVudXNlZCB0aWxlcy4KKyAqIEBwYXJhbSBieXRlcyBhbW91bnQgdG8gZnJlZS4KKyAqCisgKiBA
cmV0dXJuIGFtb3VudCByZWFsbHkgZnJlZWQuCisgKgorICogQHNlZSBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfdXNlZF9nZXQoKQorICovCitzaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNo
KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgYnl0ZXMpCit7CisgICAgRXdrX1Rp
bGVfVW51c2VkX0NhY2hlX0VudHJ5ICppdHI7CisgICAgRWluYV9MaXN0ICpsLCAqbF9uZXh0Owor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMsIDApOworICAgIHNpemVfdCBk
b25lOworICAgIHVuc2lnbmVkIGludCBjb3VudDsKKworICAgIGlmICghdHVjLT5lbnRyaWVzLmNv
dW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoYnl0ZXMgPCAxKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIC8qCisgICAgICogTk9URTogdGhlIGNhY2hlIGlzIGEgRklGTyBxdWV1ZSBj
dXJyZW50bHkuCisgICAgICogRG9uJ3QgbmVlZCB0byBzb3J0IGFueSBtb3JlLgorICAgICAqLwor
CisgICAgaWYgKHR1Yy0+ZGlydHkpCisgICAgICAgIHR1Yy0+ZGlydHkgPSBFSU5BX0ZBTFNFOwor
CisgICAgZG9uZSA9IDA7CisgICAgY291bnQgPSAwOworICAgIEVJTkFfTElTVF9GT1JFQUNIX1NB
RkUodHVjLT5lbnRyaWVzLmxpc3QsIGwsIGxfbmV4dCwgaXRyKSB7CisgICAgICAgIEV3a19UaWxl
ICp0ID0gaXRyLT50aWxlOworICAgICAgICBpZiAoZG9uZSA+IGJ5dGVzKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGlmICh0dWMtPmxvY2tlZC5sb2NrZWQKKyAgICAgICAgICAgICYmIHQt
PnggKyB0LT53ID4gdHVjLT5sb2NrZWQueAorICAgICAgICAgICAgJiYgdC0+eSArIHQtPmggPiB0
dWMtPmxvY2tlZC55CisgICAgICAgICAgICAmJiB0LT54IDwgdHVjLT5sb2NrZWQueCArIHR1Yy0+
bG9ja2VkLncKKyAgICAgICAgICAgICYmIHQtPnkgPCB0dWMtPmxvY2tlZC55ICsgdHVjLT5sb2Nr
ZWQuaAorICAgICAgICAgICAgJiYgdC0+em9vbSA9PSB0dWMtPmxvY2tlZC56b29tKSB7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBkb25lICs9IHNpemVvZihFd2tf
VGlsZSkgKyBpdHItPnRpbGUtPmJ5dGVzOworICAgICAgICBpdHItPnRpbGVfZnJlZS5jYihpdHIt
PnRpbGVfZnJlZS5kYXRhLCBpdHItPnRpbGUpOworICAgICAgICB0dWMtPmVudHJpZXMubGlzdCA9
IGVpbmFfbGlzdF9yZW1vdmVfbGlzdCh0dWMtPmVudHJpZXMubGlzdCwgbCk7CisgICAgICAgIGZy
ZWUoaXRyKTsKKyAgICAgICAgY291bnQrKzsKKyAgICB9CisKKyAgICB0dWMtPm1lbW9yeS51c2Vk
IC09IGRvbmU7CisgICAgdHVjLT5lbnRyaWVzLmNvdW50IC09IGNvdW50OworCisgICAgcmV0dXJu
IGRvbmU7Cit9CisKKy8qKgorICogRmx1c2ggZW5vdWdoIGJ5dGVzIHRvIG1ha2UgY2FjaGUgdXNh
Z2UgbG93ZXIgdGhhbiBtYXhpbXVtLgorICoKKyAqIEp1c3QgbGlrZSBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfZmx1c2goKSwgYnV0IHRoaXMgd2lsbCBtYWtlIHRoZSBjYWNoZQorICogZnJlZSBlbm91
Z2ggdGlsZXMgdG8gcmVzcGVjdCBtYXhpbXVtIGNhY2hlIHNpemUgYXMgZGVmaW5lZCB3aXRoCisg
KiBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X3NldCgpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24g
aXMgdXN1YWxseSBjYWxsZWQgd2hlbiBzeXN0ZW0gYmVjb21lcyBpZGxlLiBUaGlzIHdheQorICog
d2Uga2VlcCBtZW1vcnkgbG93IGJ1dCBkbyBub3QgaW1wYWN0IHBlcmZvcm1hbmNlIHdoZW4KKyAq
IGNyZWF0aW5nL2RlbGV0aW5nIHRpbGVzLgorICovCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNo
ZV9hdXRvX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisgICAgaWYgKHR1Yy0+bWVtb3J5LnVzZWQgPD0gdHVj
LT5tZW1vcnkubWF4KQorICAgICAgICByZXR1cm47CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X2ZsdXNoKHR1YywgdHVjLT5tZW1vcnkudXNlZCAtIHR1Yy0+bWVtb3J5Lm1heCk7CisgICAgaWYg
KHR1Yy0+bWVtb3J5LnVzZWQgPiB0dWMtPm1lbW9yeS5tYXgpCisgICAgICAgIENSSVRJQ0FMKCJD
YWNoZSBzdGlsbCB1c2luZyB0b28gbXVjaCBtZW1vcnk6ICV6ZCBLQjsgbWF4OiAlemQgS0IiLAor
ICAgICAgICAgICAgICAgICB0dWMtPm1lbW9yeS51c2VkLCB0dWMtPm1lbW9yeS5tYXgpOworfQor
CisvKioKKyAqIEZsYWcgY2FjaGUgYXMgZGlydHkuCisgKgorICogSWYgY2FjaGUgaXMgZGlydHkg
dGhlbiBuZXh0IGZsdXNoIG9wZXJhdGlvbnMgd2lsbCBoYXZlIHRvIHJlY29tcHV0ZQorICogd2Vp
Z2h0IGFuZCBzb3J0IGFnYWluIHRvIGZpbmQgdGhlIGJlc3QgdGlsZXMgdG8gZXhwaXJlLgorICoK
KyAqIE9uZSBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHRpbGUgcHJvcGVydGllcyB0aGF0
IG1heSBjaGFuZ2UKKyAqIGxpa2VuZXNzIG9mIHRpbGUgdG8gYmUgZmx1c2hlZCBjaGFuZ2UsIGxp
a2UgVGlsZTo6c3RhdHMuCisgKi8KK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RpcnR5KEV3
a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIHR1Yy0+ZGlydHkgPSBFSU5BX1RSVUU7
Cit9CisKKy8qKgorICogRnJlZXplIGNhY2hlIHRvIG5vdCBkbyBtYWludGVuYW5jZSB0YXNrcy4K
KyAqCisgKiBNYWludGVuYW5jZSB0YXNrcyBvcHRpbWl6ZSBjYWNoZSB1c2FnZSwgYnV0IG1heWJl
IHdlIGtub3cgd2Ugc2hvdWxkCisgKiBob2xkIG9uIHRoZW0gdW50aWwgd2UgZG8gdGhlIGxhc3Qg
b3BlcmF0aW9uLCBpbiB0aGlzIGNhc2Ugd2UgZnJlZXplCisgKiB3aGlsZSBvcGVyYXRpbmcgYW5k
IHRoZW4gdGhhdyB3aGVuIHdlJ3JlIGRvbmUuCisgKgorICogQHNlZSBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfdGhhdygpCisgKi8KK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZShFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICB0dWMtPmZyb3plbisrOworfQorCisvKioK
KyAqIFVuZnJlZXplcyBtYWludGVuYW5jZSB0YXNrcy4KKyAqCisgKiBJZiB0aGlzIGlzIHRoZSBs
YXN0IGNvdW50ZXJwYXJ0IG9mIGZyZWV6ZSwgdGhlbiBtYWludGVuYW5jZSB0YXNrcworICogd2ls
bCBydW4gaW1tZWRpYXRlbHkuCisgKi8KK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXco
RXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgaWYgKCF0dWMtPmZyb3plbikgewor
ICAgICAgICBFUlIoInRoYXdpbmcgbW9yZSB0aGFuIGZyZWV6aW5nISIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgdHVjLT5mcm96ZW4tLTsKK30KKworLyoqCisgKiBHZXQgdGlsZSBm
cm9tIGNhY2hlIG9mIHVudXNlZCB0aWxlcywgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgY2FjaGUuCisg
KgorICogSWYgdGhlIHRpbGUgaXMgdXNlZCwgdGhlbiBpdCdzIG5vdCBpbiBjYWNoZSBvZiB1bnVz
ZWQgdGlsZXMsIHNvIGl0CisgKiBpcyByZW1vdmVkIGZyb20gdGhlIGNhY2hlIGFuZCBtYXkgYmUg
Z2l2ZW4gYmFjayB3aXRoCisgKiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoKS4KKyAq
CisgKiBAcGFyYW0gdHVjIGNhY2hlIG9mIHVudXNlZCB0aWxlcworICogQHBhcmFtIHQgdGhlIHRp
bGUgdG8gYmUgcmVtb3ZlZCBmcm9tIEV3a19UaWxlX1VudXNlZF9DYWNoZS4KKyAqCisgKiBAcmV0
dXJuICNFSU5BX1RSVUUgb24gc3VjY2VzcywgI0VJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitF
aW5hX0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KEV3a19UaWxlX1VudXNlZF9D
YWNoZSAqdHVjLCBFd2tfVGlsZSAqdCkKK3sKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50
cnkgKmVudHJ5OworICAgIEVpbmFfTGlzdCAqZSwgKmw7CisKKyAgICBlID0gTlVMTDsKKyAgICBF
SU5BX0xJU1RfRk9SRUFDSCh0dWMtPmVudHJpZXMubGlzdCwgbCwgZW50cnkpCisgICAgeworICAg
ICAgICBpZiAoZW50cnktPnRpbGUgPT0gdCkgeworICAgICAgICAgICAgZSA9IGw7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWUpIHsKKyAgICAgICAgRVJS
KCJ0aWxlICVwIG5vdCBmb3VuZCBpbiBjYWNoZSAlcCIsIHQsIHR1Yyk7CisgICAgICAgIHJldHVy
biBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIHR1Yy0+ZW50cmllcy5jb3VudC0tOworICAgIHR1
Yy0+bWVtb3J5LnVzZWQgLT0gc2l6ZW9mKEV3a19UaWxlKSArIHQtPmJ5dGVzOworICAgIHR1Yy0+
ZW50cmllcy5saXN0ID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHR1Yy0+ZW50cmllcy5saXN0LCBl
KTsKKyAgICBmcmVlKGVudHJ5KTsKKyAgICAvLyBUT0RPIGFzc3VtZSBkaXJ0eSBmb3Igbm93LCBi
dXQgbWF5IGl0J3Mgbm90LAorICAgIC8vIGlmIHRoZSBpdGVtIHdhcyBhdCB0aGUgYmVnaW5uaW5n
IG9mIHRoZSBxdWV1ZQorICAgIHR1Yy0+ZGlydHkgPSBFSU5BX1RSVUU7CisKKyAgICByZXR1cm4g
RUlOQV9UUlVFOworfQorCisvKioKKyAqIFB1dCB0aWxlIGludG8gY2FjaGUgb2YgdW51c2VkIHRp
bGVzLCBhZGRpbmcgaXQgdG8gdGhlIGNhY2hlLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxl
ZCB3aGVuIEBjIHQtPnZpc2libGUgaXMgQGMgMCBhbmQgbm8gb2JqZWN0cyBhcmUKKyAqIHVzaW5n
IHRoZSB0aWxlIGFueW1vcmUsIG1ha2luZyBpdCBhdmFpbGFibGUgdG8gYmUgZXhwaXJlZCBhbmQg
aGF2ZQorICogaXRzIG1lbW9yeSByZXBsYWNlZC4KKyAqCisgKiBOb3RlIHRoYXQgdGlsZXMgYXJl
IG5vdCBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQgaWYgY2FjaGUgaXMgZnVsbCwKKyAqIGluc3RlYWQg
dGhlIGNhY2hlIHdpbGwgaGF2ZSBtb3JlIGJ5dGVzIHVzZWQgdGhhbiBtYXhpbXVtIGFuZCBvbmUK
KyAqIGNhbiBjYWxsIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKCkgdG8gZnJlZSB0
aGVtLiBUaGlzIGlzIGRvbmUKKyAqIGJlY2F1c2UgdXN1YWxseSB3ZSB3YW50IGEgbGF6eSBvcGVy
YXRpb24gZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KKyAqCisgKiBAcGFyYW0gdHVjIGNhY2hlIG9m
IHVudXNlZCB0aWxlcworICogQHBhcmFtIHQgdGlsZSB0byBiZSBhZGRlZCB0byBjYWNoZS4KKyAq
IEBwYXJhbSB0aWxlX2ZyZWVfY2IgZnVuY3Rpb24gdXNlZCB0byBmcmVlIHRpbGVzLgorICogQHBh
cmFtIGRhdGEgY29udGV4dCB0byBnaXZlIGJhY2sgdG8gQGEgdGlsZV9mcmVlX2NiIGFzIGZpcnN0
IGFyZ3VtZW50LgorICoKKyAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNzLCAjRUlOQV9G
QUxTRSBvdGhlcndpc2UuIElmIEBjIHQtPnZpc2libGUKKyAqICAgICAgICAgaXMgbm90ICNFSU5B
X0ZBTFNFLCB0aGVuIGl0IHdpbGwgcmV0dXJuICNFSU5BX0ZBTFNFLgorICoKKyAqIEBzZWUgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goKQorICovCitFaW5hX0Jvb2wgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX3RpbGVfcHV0KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFd2tfVGls
ZSAqdCwgdm9pZCAoKnRpbGVfZnJlZV9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpLCBjb25z
dCB2b2lkICpkYXRhKQoreworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSAqZTsKKwor
ICAgIGlmICh0LT52aXNpYmxlKSB7CisgICAgICAgIEVSUigidGlsZT0lcCBpcyBub3QgdW51c2Vk
ICh2aXNpYmxlPSVkKSIsIHQsIHQtPnZpc2libGUpOworICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKKyAgICB9CisKKyAgICBNQUxMT0NfT1JfT09NX1JFVChlLCBzaXplb2YoRXdrX1RpbGVfVW51
c2VkX0NhY2hlX0VudHJ5KSwgRUlOQV9GQUxTRSk7CisgICAgdHVjLT5lbnRyaWVzLmxpc3QgPSBl
aW5hX2xpc3RfYXBwZW5kKHR1Yy0+ZW50cmllcy5saXN0LCBlKTsKKyAgICBpZiAoZWluYV9lcnJv
cl9nZXQoKSkgeworICAgICAgICBFUlIoIkxpc3QgYWxsb2NhdGlvbiBmYWlsZWQiKTsKKyAgICAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgZS0+dGlsZSA9IHQ7CisgICAgZS0+
d2VpZ2h0ID0gMDsgLyogY2FsY3VsYXRlZCBqdXN0IGJlZm9yZSBzb3J0ICovCisgICAgZS0+dGls
ZV9mcmVlLmNiID0gdGlsZV9mcmVlX2NiOworICAgIGUtPnRpbGVfZnJlZS5kYXRhID0gKHZvaWQg
KilkYXRhOworCisgICAgdHVjLT5lbnRyaWVzLmNvdW50Kys7CisgICAgdHVjLT5tZW1vcnkudXNl
ZCArPSBzaXplb2YoRXdrX1RpbGUpICsgdC0+Ynl0ZXM7CisgICAgdHVjLT5kaXJ0eSA9IEVJTkFf
VFJVRTsKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3ZvaWQgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2RiZyhjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBFd2tf
VGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkgKml0cjsKKyAgICBFaW5hX0xpc3QgKmw7CisgICAgaW50
IGNvdW50ID0gMDsKKyAgICBwcmludGYoIkNhY2hlIG9mIHVudXNlZCB0aWxlczogZW50cmllczog
JXp1LyV6dSwgbWVtb3J5OiAlenUvJXp1XG4iLAorICAgICAgICAgICB0dWMtPmVudHJpZXMuY291
bnQsIHR1Yy0+ZW50cmllcy5hbGxvY2F0ZWQsCisgICAgICAgICAgIHR1Yy0+bWVtb3J5LnVzZWQs
IHR1Yy0+bWVtb3J5Lm1heCk7CisKKyAgICBFSU5BX0xJU1RfRk9SRUFDSCh0dWMtPmVudHJpZXMu
bGlzdCwgbCwgaXRyKSB7CisgICAgICAgIGNvbnN0IEV3a19UaWxlICp0ID0gaXRyLT50aWxlOwor
ICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0lYyIsCisgICAgICAg
ICAgICAgICB0LT5jb2wsIHQtPnJvdywgdC0+dywgdC0+aCwgdC0+em9vbSwKKyAgICAgICAgICAg
ICAgIHQtPnZpc2libGUgPyAnKic6ICcgJyk7CisKKyAgICAgICAgaWYgKCEoY291bnQgJSA0KSkK
KyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisKKyAgICBwcmludGYoIlxuIik7Cit9
CmRpZmYgLS1naXQgYS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuaCBiL1dlYktpdC9l
ZmwvZXdrL2V3a190aWxlZF9tb2RlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1NDZjZWUyZjQ5MGQ4NjYxMzhk
NzQzZDZlNjgwNjFhOTFjMDcwZDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZWZsL2V3ay9l
d2tfdGlsZWRfbW9kZWwuaApAQCAtMCwwICsxLDU4IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgZXdrX3RpbGVkX21vZGVs
X2gKKyNkZWZpbmUgZXdrX3RpbGVkX21vZGVsX2gKKworI2luY2x1ZGUgImV3a19lYXBpLmgiCisj
aW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCIKKworI2luY2x1ZGUgPEV2YXMuaD4K
KworLyogbW9kZWwgKi8KK0VBUEkgRXdrX1RpbGUgKmV3a190aWxlX25ldyhFdmFzICpldmFzLCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSwgRXZhc19Db2xvcnNwYWNlIGNz
cGFjZSk7CitFQVBJIHZvaWQgZXdrX3RpbGVfZnJlZShFd2tfVGlsZSAqdCk7CitFQVBJIHZvaWQg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFyKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKTsK
K0VBUEkgdm9pZCBld2tfdGlsZV9zaG93KEV3a19UaWxlICp0KTsKK0VBUEkgdm9pZCBld2tfdGls
ZV9oaWRlKEV3a19UaWxlICp0KTsKK0VpbmFfQm9vbCBld2tfdGlsZV92aXNpYmxlX2dldChFd2tf
VGlsZSAqdCk7CitFQVBJIHZvaWQgZXdrX3RpbGVfdXBkYXRlX2Z1bGwoRXdrX1RpbGUgKnQpOwor
RUFQSSB2b2lkIGV3a190aWxlX3VwZGF0ZV9hcmVhKEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1Jl
Y3RhbmdsZSAqcik7CitFQVBJIHZvaWQgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxl
ICp0LCB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3Rh
bmdsZSAqdXBkYXRlKSwgY29uc3Qgdm9pZCAqZGF0YSk7CitFQVBJIHZvaWQgZXdrX3RpbGVfdXBk
YXRlc19jbGVhcihFd2tfVGlsZSAqdCk7CisKKy8qIGNhY2hlIG9mIHVudXNlZCB0aWxlcyAqLwor
RUFQSSBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX3VudXNlZF9jYWNoZV9uZXcoc2l6
ZV90IG1heCk7CitFQVBJIHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYShFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNf
Q29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9hdCB6b29tKTsKK0VBUEkgdm9pZCBld2tfdGlsZV91
bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpOworRUFQ
SSB2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjKTsKK0VBUEkgRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVf
cmVmKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKTsKK0VBUEkgdm9pZCBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfdW5yZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpOworCitFQVBJIHZvaWQg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RpcnR5KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKTsK
KworRUFQSSB2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUoRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICp0dWMpOworRUFQSSB2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KEV3a19U
aWxlX1VudXNlZF9DYWNoZSAqdHVjKTsKKworRUFQSSBFaW5hX0Jvb2wgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3RpbGVfZ2V0KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFd2tfVGlsZSAqdCk7
CitFQVBJIEVpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWMsIEV3a19UaWxlICp0LCB2b2lkICgqdGlsZV9mcmVlX2NiKSh2b2lk
ICpkYXRhLCBFd2tfVGlsZSAqdCksIGNvbnN0IHZvaWQgKmRhdGEpOworCisjZW5kaWYgLy8gZXdr
X3RpbGVkX21vZGVsX2gKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX3By
aXZhdGUuaCBiL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9wcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Y2U2NWY0Mzg4OWVhMTM0NGVkNTZhMGJlZjJhMDgzOTMxMWJmNjczZQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9wcml2YXRlLmgKQEAgLTAsMCArMSw2MiBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAg
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisj
aWZuZGVmIGV3a190aWxlZF9wcml2YXRlX2gKKyNkZWZpbmUgZXdrX3RpbGVkX3ByaXZhdGVfaAor
CisvKiBsb2dnaW5nICovCitleHRlcm4gaW50IF9ld2tfdGlsZWRfbG9nX2RvbTsKKworI2RlZmlu
ZSBDUklUSUNBTCguLi4pIEVJTkFfTE9HX0RPTV9DUklUKF9ld2tfdGlsZWRfbG9nX2RvbSwgX19W
QV9BUkdTX18pCisjZGVmaW5lIEVSUiguLi4pIEVJTkFfTE9HX0RPTV9FUlIoX2V3a190aWxlZF9s
b2dfZG9tLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV1JOKC4uLikgRUlOQV9MT0dfRE9NX1dBUk4o
X2V3a190aWxlZF9sb2dfZG9tLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgSU5GKC4uLikgRUlOQV9M
T0dfRE9NX0lORk8oX2V3a190aWxlZF9sb2dfZG9tLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgREJH
KC4uLikgRUlOQV9MT0dfRE9NX0RCRyhfZXdrX3RpbGVkX2xvZ19kb20sIF9fVkFfQVJHU19fKQor
I2RlZmluZSBPT00ob3AsIHNpemUpIENSSVRJQ0FMKCJjb3VsZCBub3QgJXMgJXpkIGJ5dGVzOiAl
cyIsIG9wLCBzaXplLCBzdHJlcnJvcihlcnJubykpCisjZGVmaW5lIE1BTExPQ19PUl9PT01fUkVU
KHB0ciwgc2l6ZSwgLi4uKSAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHB0ciA9IG1hbGxvYyhzaXplKTsgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIGlmICghcHRyICYmIChzaXplKSA+IDApIHsgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBPT00oIm1hbGxvYyIsIChzaXplKSk7ICAgICAgICAgICAgICBc
CisgICAgICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGls
ZSAoMCkKKworI2RlZmluZSBDQUxMT0NfT1JfT09NX1JFVChwdHIsIHNpemUsIC4uLikgICAgICAg
XAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBwdHIgPSBjYWxsb2MoMSwgc2l6ZSk7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBp
ZiAoIXB0ciAmJiAoc2l6ZSkgPiAwKSB7ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgT09N
KCJjYWxsb2MiLCAoc2l6ZSkpOyAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIF9f
VkFfQVJHU19fOyAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgUkVBTExP
Q19PUl9PT01fUkVUKHB0ciwgc2l6ZSwgLi4uKSAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdm9pZCAqX190bXBfcHRyOyAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX190bXBfcHRyID0gcmVhbGxvYyhwdHIs
IHNpemUpOyAgICAgICAgIFwKKyAgICAgICAgaWYgKCFfX3RtcF9wdHIgJiYgKHNpemUpID4gMCkg
eyAgICAgICAgIFwKKyAgICAgICAgICAgIE9PTSgicmVhbGxvYyIsIChzaXplKSk7ICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgcHRyID0gX190bXBfcHRyOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxl
ICgwKQorCisjZW5kaWYgLy8gZXdrX3RpbGVkX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvV2ViS2l0
L2VmbC9ld2svZXdrX3ZpZXcuY3BwIGIvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCmluZGV4
IGVhNTQxNjc3NzFlMWU3MzcwZDZiMzY4ZGUzM2U5Y2ZhMjNjMzJlZDQuLjRjZWQ0OTg5YTMxMjVh
NGQ5NjQ0M2NmNDA4ZGVhMzAwYjFlZDE1ODYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9lZmwvZXdrL2V3
a192aWV3LmNwcAorKysgYi9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKQEAgLTg1LDYgKzg1
LDkgQEAgc3RydWN0IF9Fd2tfVmlld19Qcml2YXRlX0RhdGEgewogICAgIH0gc2Nyb2xsczsKICAg
ICB1bnNpZ25lZCBpbnQgaW1oOyAvKio8IGlucHV0IG1ldGhvZCBoaW50cyAqLwogICAgIHN0cnVj
dCB7CisgICAgICAgIEVpbmFfQm9vbCB2aWV3X2NsZWFyZWQ6MTsKKyAgICB9IGZsYWdzOworICAg
IHN0cnVjdCB7CiAgICAgICAgIGNvbnN0IGNoYXIqIHVzZXJfYWdlbnQ7CiAgICAgICAgIGNvbnN0
IGNoYXIqIHVzZXJfc3R5bGVzaGVldDsKICAgICAgICAgY29uc3QgY2hhciogZW5jb2RpbmdfZGVm
YXVsdDsKQEAgLTcwOCw2ICs3MTEsMTIgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2Fk
ZChFdmFzX09iamVjdCogbykKIAogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2Qt
PmJhY2tpbmdfc3RvcmUsIG8pOwogICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmJhY2tpbmdfc3Rv
cmUpOworICAgIGV2YXNfb2JqZWN0X3Bhc3NfZXZlbnRzX3NldChzZC0+YmFja2luZ19zdG9yZSwg
RUlOQV9UUlVFKTsKKworICAgIHNkLT5ldmVudHNfcmVjdCA9IGV2YXNfb2JqZWN0X3JlY3Rhbmds
ZV9hZGQoc2QtPmJhc2UuZXZhcyk7CisgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5ldmVu
dHNfcmVjdCwgMCwgMCwgMCwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChz
ZC0+ZXZlbnRzX3JlY3QsIG8pOworICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmV2ZW50c19yZWN0
KTsKIAogICAgIHNkLT5tYWluX2ZyYW1lID0gZXdrX2ZyYW1lX2FkZChzZC0+YmFzZS5ldmFzKTsK
ICAgICBpZiAoIXNkLT5tYWluX2ZyYW1lKSB7CkBAIC04MDIsNiArODExLDcgQEAgc3RhdGljIHZv
aWQgX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogbykKICAgICAgICAgICAg
ICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICAgICAgfQogICAgICAg
ICBldmFzX29iamVjdF9yZXNpemUoc2QtPm1haW5fZnJhbWUsIHcsIGgpOworICAgICAgICBldmFz
X29iamVjdF9yZXNpemUoc2QtPmV2ZW50c19yZWN0LCB3LCBoKTsKICAgICAgICAgc2QtPmNoYW5n
ZWQuZnJhbWVfcmVjdCA9IEVJTkFfVFJVRTsKICAgICAgICAgc2QtPnZpZXcudyA9IHc7CiAgICAg
ICAgIHNkLT52aWV3LmggPSBoOwpAQCAtODE0LDYgKzgyNCw3IEBAIHN0YXRpYyB2b2lkIF9ld2tf
dmlld19zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIG8pCiAgICAgaWYgKHNkLT5jaGFuZ2Vk
LnBvc2l0aW9uICYmICgoeCAhPSBzZC0+dmlldy54KSB8fCAoeSAhPSBzZC0+dmlldy55KSkpIHsK
ICAgICAgICAgZXZhc19vYmplY3RfbW92ZShzZC0+bWFpbl9mcmFtZSwgeCwgeSk7CiAgICAgICAg
IGV2YXNfb2JqZWN0X21vdmUoc2QtPmJhY2tpbmdfc3RvcmUsIHgsIHkpOworICAgICAgICBldmFz
X29iamVjdF9tb3ZlKHNkLT5ldmVudHNfcmVjdCwgeCwgeSk7CiAgICAgICAgIHNkLT5jaGFuZ2Vk
LmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7CiAgICAgICAgIHNkLT52aWV3LnggPSB4OwogICAgICAg
ICBzZC0+dmlldy55ID0geTsKQEAgLTgzNyw2ICs4NDgsMjUgQEAgc3RhdGljIHZvaWQgX2V3a192
aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogbykKICAgICB9CiB9CiAKK3N0YXRpYyB2
b2lkIF9ld2tfdmlld19zbWFydF9zaG93KEV2YXNfT2JqZWN0ICpvKQoreworICAgIEVXS19WSUVX
X1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworCisgICAg
aWYgKGV2YXNfb2JqZWN0X2NsaXBlZXNfZ2V0KHNkLT5iYXNlLmNsaXBwZXIpKQorICAgICAgICBl
dmFzX29iamVjdF9zaG93KHNkLT5iYXNlLmNsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X3Nob3co
c2QtPmJhY2tpbmdfc3RvcmUpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfaGlk
ZShFdmFzX09iamVjdCAqbykKK3sKKyAgICBFV0tfVklFV19TRF9HRVQobywgc2QpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKworICAgIGV2YXNfb2JqZWN0X2hpZGUoc2QtPmJh
c2UuY2xpcHBlcik7CisgICAgZXZhc19vYmplY3RfaGlkZShzZC0+YmFja2luZ19zdG9yZSk7Cit9
CisKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2NvbnRlbnRzX3Jlc2l6ZShFd2tf
Vmlld19TbWFydF9EYXRhKiBzZCwgaW50IHcsIGludCBoKQogewogICAgIHJldHVybiBFSU5BX1RS
VUU7CkBAIC04NjcsMTAgKzg5NywxMSBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFy
dF96b29tX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgZmxvYXQgem9vbSwgRQogICAgIHgg
PSAodyArIHNkLT52aWV3LncpICogcHggLSBjeDsKICAgICB5ID0gKGggKyBzZC0+dmlldy5oKSAq
IHB5IC0gY3k7CiAgICAgZXdrX2ZyYW1lX3Njcm9sbF9zZXQoc2QtPm1haW5fZnJhbWUsIHgsIHkp
OworCiAgICAgcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2Zs
dXNoKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0
X2ZsdXNoKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQogewogICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdik7CiAgICAgX2V3a192aWV3X3JlcGFpbnRzX2ZsdXNoKHByaXYp
OwpAQCAtODg0LDYgKzkxNSwxMyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9w
cmVfcmVuZGVyX3JlZ2lvbihFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgRXZhcwogICAgIHJldHVy
biBFSU5BX0ZBTFNFOwogfQogCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9wcmVf
cmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgdW5zaWduZWQg
aW50IG4sIGZsb2F0IHpvb20pCit7CisgICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2luZS4g
c2Q9JXAsIG49JXUgem9vbT0lZiIsCisgICAgICAgIHNkLCBuLCB6b29tKTsKKyAgICByZXR1cm4g
RUlOQV9GQUxTRTsKK30KKwogc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3ByZV9yZW5kZXJf
Y2FuY2VsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQogewogICAgIFdSTigibm90IHN1cHBvcnRl
ZCBieSBlbmdpbmUuIHNkPSVwIiwgc2QpOwpAQCAtOTQxLDYgKzk3OSw3IEBAIHN0YXRpYyBFaW5h
X0Jvb2wgX2V3a192aWV3X3pvb21fYW5pbWF0b3JfY2Iodm9pZCogZGF0YSkKICAgICAgICAgfHwg
KG5vdyA8IHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5zdGFydCkpIHsKICAgICAgICAgX2V3a192
aWV3X3pvb21fYW5pbWF0ZWRfZmluaXNoKHNkKTsKICAgICAgICAgZXdrX3ZpZXdfem9vbV9zZXQo
c2QtPnNlbGYsIHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQsIGN4LCBjeSk7CisgICAgICAg
IHNkLT5hcGktPnNjLmNhbGN1bGF0ZShzZC0+c2VsZik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZB
TFNFOwogICAgIH0KIApAQCAtOTU4LDYgKzk5NywxOCBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
em9vbV9hbmltYXRpb25fc3RhcnQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCiAgICAgICAgIChf
ZXdrX3ZpZXdfem9vbV9hbmltYXRvcl9jYiwgc2QpOwogfQogCitzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdmlld19zbWFydF9kaXNhYmxlX3JlbmRlcihFd2tfVmlld19TbWFydF9EYXRhICpzZCkKK3sK
KyAgICBXUk4oIm5vdCBzdXBwb3J0ZWQgYnkgZW5naW5lLiBzZD0lcCIsIHNkKTsKKyAgICByZXR1
cm4gRUlOQV9GQUxTRTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZW5h
YmxlX3JlbmRlcihFd2tfVmlld19TbWFydF9EYXRhICpzZCkKK3sKKyAgICBXUk4oIm5vdCBzdXBw
b3J0ZWQgYnkgZW5naW5lLiBzZD0lcCIsIHNkKTsKKyAgICByZXR1cm4gRUlOQV9GQUxTRTsKK30K
KwogLyoqCiAgKiBTZXRzIHRoZSBzbWFydCBjbGFzcyBhcGkgd2l0aG91dCBhbnkgYmFja2luZyBz
dG9yZSwgZW5hYmxpbmcgdmlldwogICogdG8gYmUgaW5oZXJpdGVkLgpAQCAtOTk3LDEzICsxMDQ4
LDE4IEBAIEVpbmFfQm9vbCBld2tfdmlld19iYXNlX3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9D
bGFzcyogYXBpKQogICAgIGFwaS0+c2MucmVzaXplID0gX2V3a192aWV3X3NtYXJ0X3Jlc2l6ZTsK
ICAgICBhcGktPnNjLm1vdmUgPSBfZXdrX3ZpZXdfc21hcnRfbW92ZTsKICAgICBhcGktPnNjLmNh
bGN1bGF0ZSA9IF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGU7CisgICAgYXBpLT5zYy5zaG93ID0g
X2V3a192aWV3X3NtYXJ0X3Nob3c7CisgICAgYXBpLT5zYy5oaWRlID0gX2V3a192aWV3X3NtYXJ0
X2hpZGU7CiAgICAgYXBpLT5zYy5kYXRhID0gRVdLX1ZJRVdfVFlQRV9TVFI7IC8qIHVzZWQgYnkg
dHlwZSBjaGVja2luZyAqLwogCiAgICAgYXBpLT5jb250ZW50c19yZXNpemUgPSBfZXdrX3ZpZXdf
c21hcnRfY29udGVudHNfcmVzaXplOwogICAgIGFwaS0+em9vbV9zZXQgPSBfZXdrX3ZpZXdfc21h
cnRfem9vbV9zZXQ7CiAgICAgYXBpLT5mbHVzaCA9IF9ld2tfdmlld19zbWFydF9mbHVzaDsKICAg
ICBhcGktPnByZV9yZW5kZXJfcmVnaW9uID0gX2V3a192aWV3X3NtYXJ0X3ByZV9yZW5kZXJfcmVn
aW9uOworICAgIGFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMgPSBfZXdrX3ZpZXdfc21h
cnRfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXM7CiAgICAgYXBpLT5wcmVfcmVuZGVyX2NhbmNl
bCA9IF9ld2tfdmlld19zbWFydF9wcmVfcmVuZGVyX2NhbmNlbDsKKyAgICBhcGktPmRpc2FibGVf
cmVuZGVyID0gX2V3a192aWV3X3NtYXJ0X2Rpc2FibGVfcmVuZGVyOworICAgIGFwaS0+ZW5hYmxl
X3JlbmRlciA9IF9ld2tfdmlld19zbWFydF9lbmFibGVfcmVuZGVyOwogCiAgICAgYXBpLT5mb2N1
c19pbiA9IF9ld2tfdmlld19zbWFydF9mb2N1c19pbjsKICAgICBhcGktPmZvY3VzX291dCA9IF9l
d2tfdmlld19zbWFydF9mb2N1c19vdXQ7CkBAIC0yMTM4LDEwICsyMTk0LDE4IEBAIEVpbmFfQm9v
bCBld2tfdmlld196b29tX3RleHRfb25seV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBz
ZXR0aW5nKQogRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0
KiBvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3Jk
IGgsIGZsb2F0IHpvb20pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBF
SU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+
cHJlX3JlbmRlcl9yZWdpb24sIEVJTkFfRkFMU0UpOwotICAgIGZsb2F0IGN1cl96b29tID0gZXdr
X2ZyYW1lX3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBmbG9hdCBjdXJfem9vbTsKICAg
ICBFdmFzX0Nvb3JkIGN3LCBjaDsKIAorICAgIC8qIFdoZW4gZG9pbmcgYW5pbWF0ZWQgem9vbSBp
dCdzIG5vdCBwb3NzaWJsZSB0byBjYWxsIHByZS1yZW5kZXIgc2luY2UgaXQKKyAgICAgKiB3b3Vs
ZCBzY3JldyB1cCBwYXJhbWV0ZXJzIHRoYXQgYW5pbWF0aW9uIGlzIGN1cnJlbnRseSB1c2luZwor
ICAgICAqLworICAgIGlmIChwcml2LT5hbmltYXRlZF96b29tLmFuaW1hdG9yKQorICAgICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKKworICAgIGN1cl96b29tID0gZXdrX2ZyYW1lX3pvb21fZ2V0KHNk
LT5tYWluX2ZyYW1lKTsKICAgICBpZiAoY3VyX3pvb20gPCAwLjAwMDAxKQogICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKICAgICBpZiAoIWV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzZC0+
bWFpbl9mcmFtZSwgJmN3LCAmY2gpKQpAQCAtMjE3MCw2ICsyMjM0LDM1IEBAIEVpbmFfQm9vbCBl
d2tfdmlld19wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCogbywgRXZhc19Db29yZCB4LCBF
dmFzX0Nvb3JkIHksCiB9CiAKIC8qKgorICogSGludCBlbmdpbmUgdG8gcHJlLXJlbmRlciByZWdp
b24sIGdpdmVuIG4gZXh0cmEgY29scy9yb3dzCisgKgorICogVGhpcyBpcyBhbiBhbHRlcm5hdGl2
ZSBtZXRob2QgdG8gZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWdpb24oKS4gSXQgZG9lcyBub3QKKyAq
IG1ha2Ugc2Vuc2UgaW4gYWxsIGVuZ2luZXMgYW5kIHRoZXJlZm9yZSBpdCBtaWdodCBub3QgYmUg
aW1wbGVtZW50ZWQgYXQgYWxsLgorICoKKyAqIEl0J3Mgb25seSB1c2VmdWwgaWYgZW5naW5lIGRp
dmlkZSB0aGUgYXJlYSBiZWluZyByZW5kZXJlZCBpbiBzbWFsbGVyIHRpbGVzLAorICogZm9ybWlu
ZyBhIGdyaWQuIFRoZW4sIGJyb3dzZXIgY291bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHByZS1y
ZW5kZXIgQHBhcmFtIG4KKyAqIHJvd3MvY29scyBpbnZvbHZpbmcgdGhlIGN1cnJlbnQgdmlld3Bv
cnQuCisgKgorICogQHBhcmFtIG8gdmlldyB0byBhc2sgcHJlLXJlbmRlciBvbi4KKyAqIEBwYXJh
bSBuIG51bWJlciBvZiBjb2xzL3Jvd3MgdGhhdCBtdXN0IGJlIHBhcnQgb2YgdGhlIHJlZ2lvbiBw
cmUtcmVuZGVyZWQKKyAqCisgKiBAc2VlIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9uKCkKKyAq
LworRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKEV2YXNfT2Jq
ZWN0KiBvLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
ZC0+YXBpLT5wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cywgRUlOQV9GQUxTRSk7CisgICAgZmxv
YXQgY3VyX3pvb207CisKKyAgICBpZiAocHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvcikKKyAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICBjdXJfem9vbSA9IGV3a19mcmFtZV96b29t
X2dldChzZC0+bWFpbl9mcmFtZSk7CisgICAgcmV0dXJuIHNkLT5hcGktPnByZV9yZW5kZXJfcmVs
YXRpdmVfcmFkaXVzKHNkLCBuLCBjdXJfem9vbSk7Cit9CisKKy8qKgogICogR2V0IGlucHV0IG1l
dGhvZCBoaW50cwogICoKICAqIEBwYXJhbSBvIFZpZXcuCkBAIC0yMTk1LDYgKzIyODgsMzYgQEAg
dm9pZCBld2tfdmlld19wcmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCogbykKICAgICBzZC0+
YXBpLT5wcmVfcmVuZGVyX2NhbmNlbChzZCk7CiB9CiAKKy8qKgorICAqIEVuYWJsZSBwcm9jZXNz
aW5nIG9mIHVwZGF0ZSByZXF1ZXN0cy4KKyAgKgorICAqIEBwYXJhbSBvIHZpZXcgdG8gZW5hYmxl
IHJlbmRlcmluZy4KKyAgKgorICAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHJlbmRlciB3YXMg
ZW5hYmxlZCwgQGMgRUlOQV9GQUxTRQorICAgICAgICAgICAgb3RoZXJ3aXNlIChlcnJvcnMsIHJl
bmRlcmluZyBzdXNwZW5zaW9uIG5vdCBzdXBwb3J0ZWQpLgorICAqLworRWluYV9Cb29sIGV3a192
aWV3X2VuYWJsZV9yZW5kZXIoY29uc3QgRXZhc19PYmplY3QgKm8pCit7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPmVuYWJsZV9yZW5kZXIsIEVJTkFfRkFMU0UpOworICAg
IHJldHVybiBzZC0+YXBpLT5lbmFibGVfcmVuZGVyKHNkKTsKK30KKworLyoqCisgICogRGlzYWJs
ZSBwcm9jZXNzaW5nIG9mIHVwZGF0ZSByZXF1ZXN0cy4KKyAgKgorICAqIEBwYXJhbSBvIHZpZXcg
dG8gZGlzYWJsZSByZW5kZXJpbmcuCisgICoKKyAgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBy
ZW5kZXIgd2FzIGRpc2FibGVkLCBAYyBFSU5BX0ZBTFNFCisgICAgICAgICAgICBvdGhlcndpc2Ug
KGVycm9ycywgcmVuZGVyaW5nIHN1c3BlbnNpb24gbm90IHN1cHBvcnRlZCkuCisgICovCitFaW5h
X0Jvb2wgZXdrX3ZpZXdfZGlzYWJsZV9yZW5kZXIoY29uc3QgRXZhc19PYmplY3QgKm8pCit7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPmRpc2FibGVfcmVuZGVyLCBFSU5B
X0ZBTFNFKTsKKyAgICByZXR1cm4gc2QtPmFwaS0+ZGlzYWJsZV9yZW5kZXIoc2QpOworfQorCiBj
b25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX3VzZXJfYWdlbnRfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOwpAQCAt
Mzc5NCw3ICszOTE3LDYgQEAgdm9pZCBld2tfdmlld19zY3JvbGwoRXZhc19PYmplY3QqIG8sIEV2
YXNfQ29vcmQgZHgsIEV2YXNfQ29vcmQgZHksIEV2YXNfQ29vcmQgc3gKICAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwogICAgIEVJTkFfU0FGRVRZX09OX1RSVUVfUkVU
VVJOKCFkeCAmJiAhZHkpOwogCi0gICAgX2V3a192aWV3X3Njcm9sbF9hZGQocHJpdiwgZHgsIGR5
LCBzeCwgc3ksIHN3LCBzaCwgbWFpbl9mcmFtZSk7CiAgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5n
ZWQoc2QpOwogfQogCkBAIC00MTIwLDYgKzQyNDIsNDEgQEAgRWluYV9Cb29sIGV3a192aWV3X3Vz
ZXJfc2NhbGFibGVfZ2V0KEV2YXNfT2JqZWN0KiBvKQogICAgIHJldHVybiBwcml2LT5zZXR0aW5n
cy56b29tX3JhbmdlLnVzZXJfc2NhbGFibGU7CiB9CiAKK3ZvaWQgZXdrX3ZpZXdfZGlkX2ZpcnN0
X3Zpc3VhbGx5X25vbmVtcHR5X2xheW91dChFdmFzX09iamVjdCAqbykKK3sKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYpOworICAgIGlmICghcHJpdi0+ZmxhZ3Mudmlld19jbGVhcmVkKSB7CisgICAg
ICAgIGV3a192aWV3X2ZyYW1lX21haW5fY2xlYXJlZChvKTsKKyAgICAgICAgZXdrX3ZpZXdfZW5h
YmxlX3JlbmRlcihvKTsKKyAgICAgICAgcHJpdi0+ZmxhZ3Mudmlld19jbGVhcmVkID0gRUlOQV9U
UlVFOworICAgIH0KK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIERpc3BhdGNoIGZpbmlzaGVk
IGxvYWRpbmcuCisgKgorICogQHBhcmFtIG8gdmlldy4KKyAqLwordm9pZCBld2tfdmlld19kaXNw
YXRjaF9kaWRfZmluaXNoX2xvYWRpbmcoRXZhc19PYmplY3QgKm8pCit7CisgICAgLyogSWYgd2Ug
cmVhY2ggdGhpcyBwb2ludCBhbmQgcmVuZGVyaW5nIGlzIHN0aWxsIGRpc2FibGVkLCBXZWJDb3Jl
IHdpbGwgbm90CisgICAgICogdHJpZ2dlciB0aGUgZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5
b3V0IHNpZ25hbCBhbnltb3JlLiBTbywgd2UKKyAgICAgKiBmb3JjZWZ1bGx5IHJlLWVuYWJsZSB0
aGUgcmVuZGVyaW5nLgorICAgICAqLworICAgIGV3a192aWV3X2RpZF9maXJzdF92aXN1YWxseV9u
b25lbXB0eV9sYXlvdXQobyk7Cit9CisKK3ZvaWQgZXdrX3ZpZXdfdHJhbnNpdGlvbl90b19jb21t
aXRlZF9mb3JfbmV3cGFnZShFdmFzX09iamVjdCAqbykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYpOworCisgICAgZXdrX3ZpZXdfZGlzYWJsZV9yZW5kZXIobyk7CisgICAgcHJpdi0+ZmxhZ3Mu
dmlld19jbGVhcmVkID0gRUlOQV9GQUxTRTsKK30KKwogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFJl
cG9ydHMgYSByZXF1ZXNldCB3aWxsIGJlIGxvYWRlZC4gSXQncyBjbGllbnQgcmVzcG9uc2liaWxp
dHkgdG8gZGVjaWRlIGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oIGIv
V2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuaAppbmRleCBjNWQyZDQ1NDQ2MTI3ZmU0YTBkZGYyMzE2
NDEzNDU4MjFlNjE2OWY2Li5jYzJiNGY5N2I3ZDc2NTg4Yzc4Zjc2ZjcwMmYyNjQ1ZGY4NGU2NjY2
IDEwMDY0NAotLS0gYS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oCisrKyBiL1dlYktpdC9lZmwv
ZXdrL2V3a192aWV3LmgKQEAgLTExNCw3ICsxMTQsMTEgQEAgc3RydWN0IF9Fd2tfVmlld19TbWFy
dF9DbGFzcyB7CiAgICAgdm9pZCAoKmJnX2NvbG9yX3NldCkoRXdrX1ZpZXdfU21hcnRfRGF0YSAq
c2QsIHVuc2lnbmVkIGNoYXIgciwgdW5zaWduZWQgY2hhciBnLCB1bnNpZ25lZCBjaGFyIGIsIHVu
c2lnbmVkIGNoYXIgYSk7CiAgICAgdm9pZCAoKmZsdXNoKShFd2tfVmlld19TbWFydF9EYXRhICpz
ZCk7CiAgICAgRWluYV9Cb29sICgqcHJlX3JlbmRlcl9yZWdpb24pKEV3a19WaWV3X1NtYXJ0X0Rh
dGEgKnNkLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nv
b3JkIGgsIGZsb2F0IHpvb20pOworICAgIEVpbmFfQm9vbCAoKnByZV9yZW5kZXJfcmVsYXRpdmVf
cmFkaXVzKShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgdW5zaWduZWQgaW50IG4sIGZsb2F0IHpv
b20pOwogICAgIHZvaWQgKCpwcmVfcmVuZGVyX2NhbmNlbCkoRXdrX1ZpZXdfU21hcnRfRGF0YSAq
c2QpOworICAgIEVpbmFfQm9vbCAoKmRpc2FibGVfcmVuZGVyKShFd2tfVmlld19TbWFydF9EYXRh
ICpzZCk7CisgICAgRWluYV9Cb29sICgqZW5hYmxlX3JlbmRlcikoRXdrX1ZpZXdfU21hcnRfRGF0
YSAqc2QpOworCiAgICAgLy8gZXZlbnQgaGFuZGxpbmc6CiAgICAgLy8gIC0gcmV0dXJucyB0cnVl
IGlmIGhhbmRsZWQKICAgICAvLyAgLSBpZiBvdmVycmlkZGVuLCBoYXZlIHRvIGNhbGwgcGFyZW50
IG1ldGhvZCBpZiBkZXNpcmVkCkBAIC0xNTEsNyArMTU1LDcgQEAgc3RydWN0IF9Fd2tfVmlld19T
bWFydF9DbGFzcyB7CiAgKiBAc2VlIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfVkVSU0lPTgog
ICogQHNlZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTgogICovCi0jZGVm
aW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVQoc21hcnRfY2xhc3NfaW5pdCkge3NtYXJ0X2Ns
YXNzX2luaXQsIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04sIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDB9CisjZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVQoc21hcnRfY2xhc3Nf
aW5pdCkge3NtYXJ0X2NsYXNzX2luaXQsIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04sIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9CiAKIC8qKgogICogSW5pdGlhbGl6ZXIg
dG8gemVybyBhIHdob2xlIEV3a19WaWV3X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZS4KQEAgLTI2OCw2
ICsyNzIsNyBAQCBzdHJ1Y3QgX0V3a19WaWV3X1NtYXJ0X0RhdGEgewogICAgIEV2YXNfT2JqZWN0
ICpzZWxmOyAvKio8IHJlZmVyZW5jZSB0byBvd25lciBvYmplY3QgKi8KICAgICBFdmFzX09iamVj
dCAqbWFpbl9mcmFtZTsgLyoqPCByZWZlcmVuY2UgdG8gbWFpbiBmcmFtZSBvYmplY3QgKi8KICAg
ICBFdmFzX09iamVjdCAqYmFja2luZ19zdG9yZTsgLyoqPCByZWZlcmVuY2UgdG8gYmFja2luZyBz
dG9yZSAqLworICAgIEV2YXNfT2JqZWN0ICpldmVudHNfcmVjdDsgLyoqPCByZWN0YW5nbGUgdGhh
dCBzaG91bGQgcmVjZWl2ZSBtb3VzZSBldmVudHMgKi8KICAgICBFd2tfVmlld19Qcml2YXRlX0Rh
dGEgKl9wcml2OyAvKio8IHNob3VsZCBuZXZlciBiZSBhY2Nlc3NlZCwgYysrIHN0dWZmICovCiAg
ICAgc3RydWN0IHsKICAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOyAvKio8IGxhc3QgdXNl
ZCB2aWV3cG9ydCAqLwpAQCAtMjkxLDEwICsyOTYsMzggQEAgc3RydWN0IF9Fd2tfVmlld19TbWFy
dF9EYXRhIHsKICAgICB9IGNoYW5nZWQ7CiB9OwogCisvKioKKyAqIENhY2hlIChwb29sKSB0aGF0
IGNvbnRhaW5zIHVudXNlZCB0aWxlcyBmb3IgZXdrX3ZpZXdfdGlsZWQuCisgKgorICogVGhpcyBj
YWNoZSB3aWxsIG1haW50YWluIHVudXNlZCB0aWxlcyBhbmQgZmx1c2ggdGhlbSB3aGVuIHRoZSB0
b3RhbAorICogbWVtb3J5IGV4Y2VlZHMgdGhlIHNldCBhbW91bnQgd2hlbgorICogZXdrX3RpbGVf
dW51c2VkX2NhY2hlX2F1dG9fZmx1c2goKSBvciBleHBsaWNpdGx5IHNldCB2YWx1ZSB3aGVuCisg
KiBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goKSBpcyBjYWxsZWQuCisgKgorICogVGhlIHRp
bGUgbWF5IGJlIHNoYXJlZCBhbW9uZyBkaWZmZXJlbnQgZXdrX3ZpZXdfdGlsZWQgaW5zdGFuY2Vz
IHRvCisgKiBncm91cCBtYXhpbXVtIHVudXNlZCBtZW1vcnkgcmVzaWRlbnQgaW4gdGhlIHN5c3Rl
bS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxlX1VudXNlZF9DYWNoZSBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGU7CitFQVBJIHZvaWQgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X3NldChF
d2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IG1heCk7CitFQVBJIHNpemVfdCBld2tf
dGlsZV91bnVzZWRfY2FjaGVfbWF4X2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
Yyk7CitFQVBJIHNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdXNlZF9nZXQoY29uc3QgRXdr
X1RpbGVfVW51c2VkX0NhY2hlICp0dWMpOworRUFQSSBzaXplX3QgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgYnl0ZXMpOworRUFQ
SSB2b2lkICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICp0dWMpOworCisKKwogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfYmFzZV9zbWFy
dF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MgKmFwaSk7CiBFQVBJIEVpbmFfQm9vbCAgICBld2tf
dmlld19zaW5nbGVfc21hcnRfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNzICphcGkpOworRUFQSSBF
aW5hX0Jvb2wgICAgZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNz
ICphcGkpOwogCiBFQVBJIEV2YXNfT2JqZWN0ICpld2tfdmlld19zaW5nbGVfYWRkKEV2YXMgKmUp
OworRUFQSSBFdmFzX09iamVjdCAqZXdrX3ZpZXdfdGlsZWRfYWRkKEV2YXMgKmUpOworCitFQVBJ
IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX2dldChj
b25zdCBFdmFzX09iamVjdCAqbyk7CitFQVBJIHZvaWQgICAgICAgICAgICAgICAgICAgZXdrX3Zp
ZXdfdGlsZWRfdW51c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCAqbywgRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICpjYWNoZSk7CisKKy8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSByZW1v
dmVkIGxhdGVyLCB3aGVuIHdlIGZpbmQgdGhlIGJlc3QgZmxhZyB0byB1c2UuCitFQVBJIHZvaWQg
ICAgICAgICAgICAgICAgICAgZXdrX3ZpZXdfdGlsZWRfcHJvY2Vzc19lbnRpcmVfcXVldWVfc2V0
KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgZmxhZyk7CiAKIEVBUEkgdm9pZCAgICAgICAgIGV3
a192aWV3X2ZpeGVkX2xheW91dF9zaXplX3NldChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3
LCBFdmFzX0Nvb3JkIGgpOwogRUFQSSB2b2lkICAgICAgICAgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0
X3NpemVfZ2V0KEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkICp3LCBFdmFzX0Nvb3JkICpoKTsK
QEAgLTM3MCw3ICs0MDMsMTAgQEAgRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfem9vbV90ZXh0
X29ubHlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKIEVBUEkgRWluYV9Cb29sICAgIGV3a192
aWV3X3pvb21fdGV4dF9vbmx5X3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIHNldHRpbmcp
OwogCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09i
amVjdCAqbywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19D
b29yZCBoLCBmbG9hdCB6b29tKTsKK0VBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3ByZV9yZW5k
ZXJfcmVsYXRpdmVfcmFkaXVzKEV2YXNfT2JqZWN0ICpvLCB1bnNpZ25lZCBpbnQgbik7CiBFQVBJ
IHZvaWQgICAgICAgICBld2tfdmlld19wcmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCAqbyk7
CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19lbmFibGVfcmVuZGVyKGNvbnN0IEV2YXNfT2Jq
ZWN0ICpvKTsKK0VBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X2Rpc2FibGVfcmVuZGVyKGNvbnN0
IEV2YXNfT2JqZWN0ICpvKTsKIAogRUFQSSB1bnNpZ25lZCBpbnQgZXdrX3ZpZXdfaW1oX2dldChF
dmFzX09iamVjdCAqbyk7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3Rp
bGVkLmMgYi9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzODBl
OGU2MWM5ZjUyMzU3YmU5YjAwYWJmODc3OWUyYTJiZThhNzcKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jCkBAIC0wLDAgKzEsMzQ2IEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdmlldy5oIgorCisjaW5jbHVkZSAiZXdrX2xvZ2dp
bmcuaCIKKworI2luY2x1ZGUgPEV2YXMuaD4KKyNpbmNsdWRlIDxlaW5hX3NhZmV0eV9jaGVja3Mu
aD4KKyNpbmNsdWRlIDxld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oPgorCitzdGF0aWMgRXdrX1Zp
ZXdfU21hcnRfQ2xhc3MgX3BhcmVudF9zYyA9IEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTlVM
TDsKKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfcmVuZGVyX2NiKHZvaWQgKmRh
dGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSkKK3sKKyAgICBFd2tf
Vmlld19Qcml2YXRlX0RhdGEgKnByaXYgPSAoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKilkYXRhOwor
ICAgIEVpbmFfUmVjdGFuZ2xlIHIgPSB7YXJlYS0+eCArIHQtPngsIGFyZWEtPnkgKyB0LT55LCBh
cmVhLT53LCBhcmVhLT5ofTsKKworICAgIHJldHVybiBld2tfdmlld19wYWludF9jb250ZW50cyhw
cml2LCB0LT5jYWlybywgJnIpOworfQorCitzdGF0aWMgdm9pZCAqX2V3a192aWV3X3RpbGVkX3Vw
ZGF0ZXNfcHJvY2Vzc19wcmUodm9pZCAqZGF0YSwgRXZhc19PYmplY3QgKm8pCit7CisgICAgRXdr
X1ZpZXdfUHJpdmF0ZV9EYXRhICpwcml2ID0gKEV3a19WaWV3X1ByaXZhdGVfRGF0YSopZGF0YTsK
KyAgICBld2tfdmlld19sYXlvdXRfaWZfbmVlZGVkX3JlY3Vyc2l2ZShwcml2KTsKKyAgICByZXR1
cm4gMDsKK30KKworc3RhdGljIEV2YXNfT2JqZWN0ICpfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYmFj
a2luZ19zdG9yZV9hZGQoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCit7CisgICAgRXZhc19PYmpl
Y3QgKmJzID0gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfYWRkKHNkLT5iYXNlLmV2YXMpOworICAg
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcl9jYl9zZXQKKyAgICAgICAgKGJzLCBfZXdr
X3ZpZXdfdGlsZWRfcmVuZGVyX2NiLCBzZC0+X3ByaXYpOworICAgIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wcmVfc2V0CisgICAgICAgIChicywgX2V3a192aWV3X3Rp
bGVkX3VwZGF0ZXNfcHJvY2Vzc19wcmUsIHNkLT5fcHJpdik7CisgICAgcmV0dXJuIGJzOworfQor
CitzdGF0aWMgdm9pZAorX2V3a192aWV3X3RpbGVkX2NvbnRlbnRzX3NpemVfY2hhbmdlZF9jYih2
b2lkICpkYXRhLCBFdmFzX09iamVjdCAqbywgdm9pZCAqZXZlbnRfaW5mbykKK3sKKyAgICBFdmFz
X0Nvb3JkICpzaXplID0gKEV2YXNfQ29vcmQqKWV2ZW50X2luZm87CisgICAgRXdrX1ZpZXdfU21h
cnRfRGF0YSAqc2QgPSAoRXdrX1ZpZXdfU21hcnRfRGF0YSopZGF0YTsKKworICAgIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2NvbnRlbnRzX3Jlc2l6ZQorICAgICAgICAoc2QtPmJhY2tpbmdfc3Rv
cmUsIHNpemVbMF0sIHNpemVbMV0pOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfdGlsZWRf
c21hcnRfYWRkKEV2YXNfT2JqZWN0ICpvKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNk
OworCisgICAgX3BhcmVudF9zYy5zYy5hZGQobyk7CisKKyAgICBzZCA9IChFd2tfVmlld19TbWFy
dF9EYXRhKilldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChvKTsKKyAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19hZGQoCisgICAgICAgIHNkLT5tYWluX2ZyYW1lLCAiY29udGVudHMsc2l6
ZSxjaGFuZ2VkIiwKKyAgICAgICAgX2V3a192aWV3X3RpbGVkX2NvbnRlbnRzX3NpemVfY2hhbmdl
ZF9jYiwgc2QpOworICAgIGV3a19mcmFtZV9wYWludF9mdWxsX3NldChzZC0+bWFpbl9mcmFtZSwg
RUlOQV9UUlVFKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRf
c2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAgIGNvbnN0IEV3
a19TY3JvbGxfUmVxdWVzdCAqc3I7CisgICAgY29uc3QgRXdrX1Njcm9sbF9SZXF1ZXN0ICpzcl9l
bmQ7CisgICAgc2l6ZV90IGNvdW50OworICAgIEV2YXNfQ29vcmQgdncsIHZoOworCisgICAgZXdr
X2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmdncsICZ2aCk7CisKKyAg
ICBzciA9IGV3a192aWV3X3Njcm9sbF9yZXF1ZXN0c19nZXQoc2QtPl9wcml2LCAmY291bnQpOwor
ICAgIHNyX2VuZCA9IHNyICsgY291bnQ7CisgICAgZm9yICg7IHNyIDwgc3JfZW5kOyBzcisrKSB7
CisgICAgICAgIGlmIChzci0+bWFpbl9zY3JvbGwpCisgICAgICAgICAgICBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfYWRkCisgICAgICAgICAgICAgICAgKHNkLT5i
YWNraW5nX3N0b3JlLCBzci0+ZHgsIHNyLT5keSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgRXZhc19Db29yZCBzeCwgc3ksIHN3LCBzaDsKKworICAgICAgICAgICAgc3ggPSBzci0+eDsK
KyAgICAgICAgICAgIHN5ID0gc3ItPnk7CisgICAgICAgICAgICBzdyA9IHNyLT53OworICAgICAg
ICAgICAgc2ggPSBzci0+aDsKKworICAgICAgICAgICAgaWYgKGFicyhzci0+ZHgpID49IHN3IHx8
IGFicyhzci0+ZHkpID49IHNoKSB7CisgICAgICAgICAgICAgICAgLyogZG91YnQgd2Via2l0IHdv
dWxkIGJlIHNvICAgICBzdHVwaWQuLi4gKi8KKyAgICAgICAgICAgICAgICBEQkcoImZ1bGwgcGFn
ZSBzY3JvbGwgJSswM2QsJSswM2QuIGNvbnZlcnQgdG8gcmVwYWludCAlZCwlZCArICVkeCVkIiwK
KyAgICAgICAgICAgICAgICAgICAgc3ItPmR4LCBzci0+ZHksIHN4LCBzeSwgc3csIHNoKTsKKyAg
ICAgICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYsIHN4LCBzeSwgc3cs
IHNoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKHN4ICsgc3cgPiB2dykKKyAgICAgICAgICAgICAgICBzdyA9IHZ3IC0gc3g7Cisg
ICAgICAgICAgICBpZiAoc3kgKyBzaCA+IHZoKQorICAgICAgICAgICAgICAgIHNoID0gdmggLSBz
eTsKKworICAgICAgICAgICAgaWYgKHN3IDwgMCkKKyAgICAgICAgICAgICAgICBzdyA9IDA7Cisg
ICAgICAgICAgICBpZiAoc2ggPCAwKQorICAgICAgICAgICAgICAgIHNoID0gMDsKKworICAgICAg
ICAgICAgaWYgKCFzdyB8fCAhc2gpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIHN4IC09IGFicyhzci0+ZHgpOworICAgICAgICAgICAgc3kgLT0gYWJzKHNyLT5keSk7
CisgICAgICAgICAgICBzdyArPSBhYnMoc3ItPmR4KTsKKyAgICAgICAgICAgIHNoICs9IGFicyhz
ci0+ZHkpOworICAgICAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc2QtPl9wcml2LCBzeCwg
c3ksIHN3LCBzaCk7CisgICAgICAgICAgICBJTkYoInVzaW5nIHJlcGFpbnQgZm9yIGlubmVyIGZy
YW1lIHNjb2xsaW5nISIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJV
RTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcmVwYWludHNf
cHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhICpzZCkKK3sKKyAgICBjb25zdCBFaW5hX1JlY3Rh
bmdsZSAqcHIsICpwcl9lbmQ7CisgICAgc2l6ZV90IGNvdW50OworICAgIGludCBzeCwgc3k7CisK
KyAgICBld2tfZnJhbWVfc2Nyb2xsX3Bvc19nZXQoc2QtPm1haW5fZnJhbWUsICZzeCwgJnN5KTsK
KworICAgIHByID0gZXdrX3ZpZXdfcmVwYWludHNfZ2V0KHNkLT5fcHJpdiwgJmNvdW50KTsKKyAg
ICBwcl9lbmQgPSBwciArIGNvdW50OworICAgIGZvciAoOyBwciA8IHByX2VuZDsgcHIrKykgewor
ICAgICAgICBFaW5hX1JlY3RhbmdsZSByOworICAgICAgICByLnggPSBwci0+eCArIHN4OworICAg
ICAgICByLnkgPSBwci0+eSArIHN5OworICAgICAgICByLncgPSBwci0+dzsKKyAgICAgICAgci5o
ID0gcHItPmg7CisgICAgICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZShzZC0+YmFj
a2luZ19zdG9yZSwgJnIpOworICAgIH0KKyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRh
dGVzX3Byb2Nlc3Moc2QtPmJhY2tpbmdfc3RvcmUpOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsK
K30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfY29udGVudHNfcmVz
aXplKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBpbnQgdywgaW50IGgpCit7CisgICAgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfY29udGVudHNfcmVzaXplKHNkLT5iYWNraW5nX3N0b3JlLCB3LCBo
KTsKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmll
d190aWxlZF9zbWFydF96b29tX3NldChFd2tfVmlld19TbWFydF9EYXRhICpzZCwgZmxvYXQgem9v
bSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKK3sKKyAgICBFdmFzX0Nvb3JkIHgsIHks
IHcsIGg7CisgICAgRWluYV9Cb29sIHI7CisgICAgciA9IGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3pvb21fc2V0KHNkLT5iYWNraW5nX3N0b3JlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmem9vbSwgY3gsIGN5LCAmeCwgJnkpOworICAgIGlmICghcikKKyAgICAg
ICAgcmV0dXJuIHI7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRfdXBkYXRl
X3NldChzZC0+YmFja2luZ19zdG9yZSwgRUlOQV9UUlVFKTsKKyAgICByID0gX3BhcmVudF9zYy56
b29tX3NldChzZCwgem9vbSwgY3gsIGN5KTsKKyAgICBld2tfZnJhbWVfc2Nyb2xsX3NldChzZC0+
bWFpbl9mcmFtZSwgLXgsIC15KTsKKyAgICBld2tfZnJhbWVfc2Nyb2xsX3NpemVfZ2V0KHNkLT5t
YWluX2ZyYW1lLCAmdywgJmgpOworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZz
ZXRzKHNkLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKKyAgICBld2tfdmlld19zY3JvbGxzX3Byb2Nl
c3Moc2QpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGN1bGF0ZShzZC0+YmFja2luZ19zdG9y
ZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsY3VsYXRlKHNkLT5zZWxmKTsKKyAgICBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91cGRhdGVfc2V0KHNkLT5iYWNraW5nX3N0b3Jl
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcjsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdr
X3ZpZXdfdGlsZWRfc21hcnRfem9vbV93ZWFrX3NldChFd2tfVmlld19TbWFydF9EYXRhICpzZCwg
ZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKK3sKKyAgICByZXR1cm4g
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChzZC0+YmFja2luZ19zdG9yZSwg
em9vbSwgY3gsIGN5KTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pv
b21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFaW5hX0Jv
b2wgc21vb3RoX3NjYWxlKQoreworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vh
a19zbW9vdGhfc2NhbGVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBzbW9vdGhfc2NhbGUpOworfQor
CitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfZmx1c2goRXdrX1ZpZXdfU21hcnRf
RGF0YSAqc2QpCit7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2goc2QtPmJhY2tp
bmdfc3RvcmUpOworICAgIF9wYXJlbnRfc2MuZmx1c2goc2QpOworfQorCitzdGF0aWMgRWluYV9C
b29sIF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX3JlZ2lvbihFd2tfVmlld19TbWFy
dF9EYXRhICpzZCwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZh
c19Db29yZCBoLCBmbG9hdCB6b29tKQoreworICAgIHJldHVybiBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9wcmVfcmVuZGVyX3JlZ2lvbgorICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIHgsIHks
IHcsIGgsIHpvb20pOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFy
dF9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFd2tfVmlld19TbWFydF9EYXRhICpzZCwgdW5z
aWduZWQgaW50IG4sIGZsb2F0IHpvb20pCit7CisgICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzCisgICAgICAgIChzZC0+YmFja2luZ19z
dG9yZSwgbiwgem9vbSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF9w
cmVfcmVuZGVyX2NhbmNlbChFd2tfVmlld19TbWFydF9EYXRhICpzZCkKK3sKKyAgICBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX2NhbmNlbChzZC0+YmFja2luZ19zdG9yZSk7Cit9
CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2Rpc2FibGVfcmVuZGVy
KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAgIHJldHVybiBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9kaXNhYmxlX3JlbmRlcihzZC0+YmFja2luZ19zdG9yZSk7Cit9CisKK3N0YXRpYyBF
aW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2VuYWJsZV9yZW5kZXIoRXdrX1ZpZXdfU21h
cnRfRGF0YSAqc2QpCit7CisgICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJs
ZV9yZW5kZXIoc2QtPmJhY2tpbmdfc3RvcmUpOworfQorCisvKioKKyAqIFNldHMgdGhlIHNtYXJ0
IGNsYXNzIGFwaSB1c2luZyB0aWxlZCBiYWNraW5nIHN0b3JlLCBlbmFibGluZyB2aWV3CisgKiB0
byBiZSBpbmhlcml0ZWQuCisgKgorICogQHBhcmFtIGFwaSBjbGFzcyBkZWZpbml0aW9uIHRvIGJl
IHNldCwgYWxsIG1lbWJlcnMgd2l0aCB0aGUKKyAqICAgICAgICBleGNlcHRpb24gb2YgRXZhc19T
bWFydF9DbGFzcy0+ZGF0YSBtYXkgYmUgb3ZlcnJpZGRlbi4gTXVzdAorICogICAgICAgIEBiIG5v
dCBiZSBAYyBOVUxMLgorICoKKyAqIEBub3RlIEV2YXNfU21hcnRfQ2xhc3MtPmRhdGEgaXMgdXNl
ZCB0byBpbXBsZW1lbnQgdHlwZSBjaGVja2luZyBhbmQKKyAqICAgICAgIGlzIG5vdCBzdXBwb3Nl
ZCB0byBiZSBjaGFuZ2VkL292ZXJyaWRkZW4uIElmIHlvdSBuZWVkIGV4dHJhCisgKiAgICAgICBk
YXRhIGZvciB5b3VyIHNtYXJ0IGNsYXNzIHRvIHdvcmssIGp1c3QgZXh0ZW5kCisgKiAgICAgICBF
d2tfVmlld19TbWFydF9DbGFzcyBpbnN0ZWFkLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVF
IG9uIHN1Y2Nlc3MsIEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZSAocHJvYmFibHkKKyAqICAgICAg
ICAgdmVyc2lvbiBtaXNtYXRjaCkuCisgKgorICogQHNlZSBld2tfdmlld19iYXNlX3NtYXJ0X3Nl
dCgpCisgKi8KK0VpbmFfQm9vbCBld2tfdmlld190aWxlZF9zbWFydF9zZXQoRXdrX1ZpZXdfU21h
cnRfQ2xhc3MgKmFwaSkKK3sKKyAgICBpZiAoIWV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KGFwaSkp
CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAgaWYgKEVJTkFfVU5MSUtFTFkoIV9w
YXJlbnRfc2Muc2MuYWRkKSkKKyAgICAgICAgZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoJl9wYXJl
bnRfc2MpOworCisgICAgYXBpLT5zYy5hZGQgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYWRkOwor
CisgICAgYXBpLT5iYWNraW5nX3N0b3JlX2FkZCA9IF9ld2tfdmlld190aWxlZF9zbWFydF9iYWNr
aW5nX3N0b3JlX2FkZDsKKyAgICBhcGktPnNjcm9sbHNfcHJvY2VzcyA9IF9ld2tfdmlld190aWxl
ZF9zbWFydF9zY3JvbGxzX3Byb2Nlc3M7CisgICAgYXBpLT5yZXBhaW50c19wcm9jZXNzID0gX2V3
a192aWV3X3RpbGVkX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3M7CisgICAgYXBpLT5jb250ZW50c19y
ZXNpemUgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfY29udGVudHNfcmVzaXplOworICAgIGFwaS0+
em9vbV9zZXQgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV9zZXQ7CisgICAgYXBpLT56b29t
X3dlYWtfc2V0ID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fd2Vha19zZXQ7CisgICAgYXBp
LT56b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldCA9IF9ld2tfdmlld190aWxlZF9zbWFydF96b29t
X3dlYWtfc21vb3RoX3NjYWxlX3NldDsKKyAgICBhcGktPmZsdXNoID0gX2V3a192aWV3X3RpbGVk
X3NtYXJ0X2ZsdXNoOworICAgIGFwaS0+cHJlX3JlbmRlcl9yZWdpb24gPSBfZXdrX3ZpZXdfdGls
ZWRfc21hcnRfcHJlX3JlbmRlcl9yZWdpb247CisgICAgYXBpLT5wcmVfcmVuZGVyX3JlbGF0aXZl
X3JhZGl1cyA9IF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1
czsKKyAgICBhcGktPnByZV9yZW5kZXJfY2FuY2VsID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3By
ZV9yZW5kZXJfY2FuY2VsOworICAgIGFwaS0+ZGlzYWJsZV9yZW5kZXIgPSBfZXdrX3ZpZXdfdGls
ZWRfc21hcnRfZGlzYWJsZV9yZW5kZXI7CisgICAgYXBpLT5lbmFibGVfcmVuZGVyID0gX2V3a192
aWV3X3RpbGVkX3NtYXJ0X2VuYWJsZV9yZW5kZXI7CisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30K
Kworc3RhdGljIGlubGluZSBFdmFzX1NtYXJ0ICpfZXdrX3ZpZXdfdGlsZWRfc21hcnRfY2xhc3Nf
bmV3KHZvaWQpCit7CisgICAgc3RhdGljIEV3a19WaWV3X1NtYXJ0X0NsYXNzIGFwaSA9IEVXS19W
SUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKCJFV0tfVmlld19UaWxlZCIpOworICAg
IHN0YXRpYyBFdmFzX1NtYXJ0ICpzbWFydCA9IDA7CisKKyAgICBpZiAoRUlOQV9VTkxJS0VMWSgh
c21hcnQpKSB7CisgICAgICAgIGV3a192aWV3X3RpbGVkX3NtYXJ0X3NldCgmYXBpKTsKKyAgICAg
ICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmYXBpLnNjKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gc21hcnQ7Cit9CisKKy8qKgorICogQ3JlYXRlcyBhIG5ldyBFRkwgV2ViS2l0IFZpZXcg
b2JqZWN0IHVzaW5nIHRpbGVkIGJhY2tpbmcgc3RvcmUuCisgKgorICogVmlldyBvYmplY3RzIGFy
ZSB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIGRlYWwgd2l0aCBFRkwgV2ViS2l0IGFzIGl0CisgKiBh
YnN0cmFjdHMgdGhlIGNvbXBsZXggcGllY2VzIG9mIHRoZSBwcm9jZXNzLgorICoKKyAqIFRoaXMg
b2JqZWN0IGlzIGFsbW9zdCB0aGUgc2FtZSBhcyB0aGUgb25lIHJldHVybmVkIGJ5IHRoZSBld2tf
dmlld19hZGQoKQorICogZnVuY3Rpb24sIGJ1dCBpdCB1c2VzIHRoZSB0aWxlZCBiYWNraW5nIHN0
b3JlIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKKyAqIGJhY2tpbmcgc3RvcmUuCisgKgorICogQHBh
cmFtIGUgY2FudmFzIHdoZXJlIHRvIGNyZWF0ZSB0aGUgdmlldyBvYmplY3QuCisgKgorICogQHJl
dHVybiB2aWV3IG9iamVjdCBvciBAYyBOVUxMIGlmIGVycm9ycy4KKyAqCisgKiBAc2VlIGV3a192
aWV3X3VyaV9zZXQoKQorICovCitFdmFzX09iamVjdCAqZXdrX3ZpZXdfdGlsZWRfYWRkKEV2YXMg
KmUpCit7CisgICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBfZXdrX3ZpZXdfdGls
ZWRfc21hcnRfY2xhc3NfbmV3KCkpOworfQorCisvKioKKyAqIEdldCB0aGUgY2FjaGUgb2YgdW51
c2VkIHRpbGVzIHVzZWQgYnkgdGhpcyB2aWV3LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0
IHRvIGdldCBjYWNoZS4KKyAqIEByZXR1cm4gaW5zdGFuY2Ugb2YgImNhY2hlIG9mIHVudXNlZCB0
aWxlcyIgb3IgQGMgTlVMTCBvbiBlcnJvcnMuCisgKi8KK0V3a19UaWxlX1VudXNlZF9DYWNoZSAq
ZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCAqbykKK3sK
KyAgICBFd2tfVmlld19TbWFydF9EYXRhICpzZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KG8p
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZCwgMCk7CisgICAgcmV0dXJu
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX2dldChzZC0+YmFja2lu
Z19zdG9yZSk7Cit9CisKKy8qKgorICogU2V0IHRoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMgdXNl
ZCBieSB0aGlzIHZpZXcuCisgKgorICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IGNhY2hl
LgorICogQHBhcmFtIGNhY2hlIGluc3RhbmNlIG9mICJjYWNoZSBvZiB1bnVzZWQgdGlsZXMiLiBU
aGlzIGNhbiBiZSB1c2VkCisgKiAgICAgICAgdG8gc2hhcmUgYSBzaW5nbGUgY2FjaGUgYW1vbmdz
dCBkaWZmZXJlbnQgdmlld3MuIFRoZSB0aWxlcworICogICAgICAgIGZyb20gb25lIHZpZXcgd2ls
bCBub3QgYmUgdXNlZCBieSB0aGUgb3RoZXIhIFRoaXMgaXMganVzdCB0bworICogICAgICAgIGxp
bWl0IHRoZSBncm91cCB3aXRoIGFtb3VudCBvZiB1bnVzZWQgbWVtb3J5LgorICogICAgICAgIElm
IEBjIE5VTEwgaXMgcHJvdmlkZWQsIHRoZW4gYSBuZXcgY2FjaGUgaXMgY3JlYXRlZC4KKyAqLwor
dm9pZCBld2tfdmlld190aWxlZF91bnVzZWRfY2FjaGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUgKmNhY2hlKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNk
ID0gZXdrX3ZpZXdfc21hcnRfZGF0YV9nZXQobyk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc2QpOworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hl
X3NldChzZC0+YmFja2luZ19zdG9yZSwgY2FjaGUpOworfQorCisvKioKKyAqIFNldCB0aGUgZnVu
Y3Rpb24gd2l0aCB0aGUgc2FtZSBuYW1lIG9mIHRoZSB0aWxlZCBiYWNraW5nIHN0b3JlLgorICog
QHBhcmFtIG8gdGhlIHRpbGVkIGJhY2tpbmcgc3RvcmUgb2JqZWN0LgorICogQHBhcmFtIGZsYWcg
dmFsdWUgb2YgdGhlIHRpbGVkIGJhY2tpbmcgc3RvcmUgZmxhZyB0byBzZXQuCisgKi8KK3ZvaWQg
ZXdrX3ZpZXdfdGlsZWRfcHJvY2Vzc19lbnRpcmVfcXVldWVfc2V0KEV2YXNfT2JqZWN0ICpvLCBF
aW5hX0Jvb2wgZmxhZykKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhICpzZCA9IGV3a192aWV3
X3NtYXJ0X2RhdGFfZ2V0KG8pOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkKTsK
KyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcm9jZXNzX2VudGlyZV9xdWV1ZV9zZXQoc2Qt
PmJhY2tpbmdfc3RvcmUsIGZsYWcpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71305</attachid>
            <date>2010-10-20 10:27:46 -0700</date>
            <delta_ts>2010-11-23 07:24:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45397-20101020152742.patch</filename>
            <type>text/plain</type>
            <size>175056</size>
            <attacher name="Alex Bredariol Grilo">abgrilo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9lZmwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9lZmwvQ2hh
bmdlTG9nCShyZXZpc2lvbiA3MDE1MikKKysrIFdlYktpdC9lZmwvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjE5IEBACisyMDEwLTEwLTIwICBBbGV4IEdyaWxvICA8YWJncmls
b0Bwcm9mdXNpb24ubW9iaT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBbRUZMXSBUaWxlZCBCYWNraW5nIFN0b3JlIGZvciBXZWJraXQtRWZsCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTM5NworCisgICAg
ICAgIFRoaXMgdGlsZSBiYXNlZCBiYWNraW5nIHN0b3JlIGlzIGEgZ3JpZCBvZiB0aWxlcyB3aGVy
ZSBlYWNoIHRpbGUgaXMKKyAgICAgICAgYW4gRXZhc19PYmplY3Qgc2hvd2luZyBhIHBpZWNlIG9m
IHRoZSBwYWdlIGNvbnRlbnQuIFRoZQorICAgICAgICBuZXcgZXdrX3ZpZXdfdGlsZWQuYyBpcyBh
biBpbXBsZW1lbnRhdGlvbiBvZiBzb21lIG9mIHRoZSBmdW5jdGlvbnMgb2YKKyAgICAgICAgdGhl
IG9yaWdpbmFsIGV3a192aWV3LCB0aGF0IG1ha2VzIGNhbGxzIHRvIHRoZSBUaWxlZCBCYWNraW5n
IFN0b3JlCisgICAgICAgIHNwZWNpZmljIGZ1bmN0aW9ucy4KKworICAgICAgICBUaGUgcmVuZGVy
aW5nIG9jY3VycyBpbiB0aGUgcGl4ZWxzIHN0b3JlZCBpbiBlYWNoIHRpbGUgKEV2YXNfT2JqZWN0
KSwKKyAgICAgICAgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBwcmV2aW91cyBzaW5nbGUgYmFja2lu
ZyBzdG9yZS4gVGlsZXMgbm90IGJlaW5nCisgICAgICAgIHNob3duIGluIHRoZSB2aWV3cG9ydCBh
cmUgc3RvcmVkIGluIGEgY2FjaGUsIGFuZCBjYW4gYmUgcmV1c2VkIGxhdGVyCisgICAgICAgIHRv
IGF2b2lkIGhhdmluZyB0byBiZSByZW5kZXJlZCBhZ2Fpbi4KKworICAgICAgICBTY3JvbGxpbmcg
b2NjdXJzIGFzIGp1c3QgbW92aW5nIHRoZSB0aWxlcywgdXNpbmcgRXZhcyBtb3ZlIG9wZXJhdGlv
bnMsCisgICAgICAgIGFuZCB3aGVuIG1vcmUgdGhhbiBvbmUgdGlsZSBzaXplIGlzIHNjcm9sbGVk
LCBhIHNoaWZ0IG9mIHJvd3Mgb3IKKyAgICAgICAgY29sdW1ucyBuZWVkcyB0byBiZSBkb25lLgor
CisgICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAgICAgICogZXdrL2V3a190aWxlZF9i
YWNraW5nX3N0b3JlLmM6IEFkZGVkLgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3VwZGF0ZXNfcHJvY2Vzcyk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1
c2gpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KToKKyAgICAg
ICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUpOgorICAgICAgICAoX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV90aWxlX2Fzc29jaWF0ZSk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdGlsZV9kaXNzb2NpYXRlKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV90aWxlX2Rpc3NvY2lhdGVfYWxsKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QpOgorICAgICAgICAoX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaCk6CisgICAgICAgIChfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3JlbW92ZV91bmFzc29jaWF0ZWQp
OgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9y
ZW1vdmVfYXNzb2NpYXRlZCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJl
X3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nfc2luZ2xlKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2IpOgorICAgICAgICAoX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKToKKyAgICAgICAgKF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQpOgorICAgICAgICAoX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVxdWVzdF9kZWwpOgorICAgICAgICAoX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVxdWVzdF9hZGQpOgorICAgICAgICAoX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aXNpYmxlX3RpbGVzX3JlY3QpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3RpbGVfaXNfaW5zaWRlX3ZpZXdwb3J0KToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV90aWxlX2lzX2FkamFjZW50X3RvX3ZpZXdwb3J0KToKKyAgICAgICAgKF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fYWRkKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVt
X2RlbCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9zbW9vdGhfc2Nh
bGVfc2V0KToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKToKKyAg
ICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbCk6CisgICAg
ICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQpOgorICAgICAg
ICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbCk6CisgICAgICAgIChfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbCk6CisgICAgICAgIChfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX2FsbF9kZWwpOgorICAgICAgICAoX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcik6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZSk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc21hcnRfbWVtYmVyX2RlbCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfc21hcnRfbWVtYmVyX2FkZCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
bWVtX2RiZyk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2lnX3Vzcik6Cisg
ICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkKToKKyAgICAgICAgKF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWwpOgorICAgICAgICAoX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X21vdmUpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3NtYXJ0X3Jlc2l6ZSk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVj
YWxjX3JlbmRlcmVycyk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRf
Y2FsY3VsYXRlX3NpemUpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
ZGJnKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXApOgor
ICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKToKKyAgICAg
ICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdCk6CisgICAgICAgIChf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KToKKyAgICAgICAgKF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbCk6CisgICAgICAgIChfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UpOgorICAgICAgICAoX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQpOgorICAgICAgICAoX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9wb3MpOgorICAgICAgICAoX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKToKKyAgICAgICAgKF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGUpOgorICAgICAgICAoZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfYWRkKToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcl9j
Yl9zZXQpOgorICAgICAgICAoZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2Fj
aGVfZ2V0KToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2Nh
Y2hlX3NldCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxf
b2Zmc2V0X3NldF9pbnRlcm5hbCk6CisgICAgICAgIChld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
Y3JvbGxfZnVsbF9vZmZzZXRfc2V0KToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3Njcm9sbF9mdWxsX29mZnNldF9hZGQpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3pvb21fc2V0X2ludGVybmFsKToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3pvb21fc2V0KToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19z
ZXQpOgorICAgICAgICAoZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMpOgorICAg
ICAgICAoZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQp
OgorICAgICAgICAoZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKToKKyAgICAgICAgKGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wcmVfc2V0KToKKyAgICAgICAg
KGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wb3N0X3NldCk6CisgICAg
ICAgIChld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MpOgorICAgICAgICAo
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19jbGVhcik6CisgICAgICAgIChld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9jb250ZW50c19yZXNpemUpOgorICAgICAgICAoZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfZGlzYWJsZWRfdXBkYXRlX3NldCk6CisgICAgICAgIChld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9mbHVzaCk6CisgICAgICAgIChld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVf
cmVuZGVyX3JlZ2lvbik6CisgICAgICAgIChld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVu
ZGVyX3JlbGF0aXZlX3JhZGl1cyk6CisgICAgICAgIChld2tfdGlsZWRfYmFja2luZ19zdG9yZV9w
cmVfcmVuZGVyX2NhbmNlbCk6CisgICAgICAgIChld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNh
YmxlX3JlbmRlcik6CisgICAgICAgIChld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVu
ZGVyKToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Byb2Nlc3NfZW50aXJlX3F1
ZXVlX3NldCk6CisgICAgICAgICogZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmg6IEFkZGVk
LgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRfbWF0cml4LmM6IEFkZGVkLgorICAgICAgICAoX2V3
a190aWxlX21hdHJpeF9jZWxsX2ZyZWUpOgorICAgICAgICAoX2V3a190aWxlX21hdHJpeF90aWxl
X2ZyZWUpOgorICAgICAgICAoZXdrX3RpbGVfbWF0cml4X25ldyk6CisgICAgICAgIChld2tfdGls
ZV9tYXRyaXhfZnJlZSk6CisgICAgICAgIChld2tfdGlsZV9tYXRyaXhfcmVzaXplKToKKyAgICAg
ICAgKGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KToKKyAgICAgICAgKGV3a190aWxl
X21hdHJpeF90aWxlX2V4YWN0X2dldCk6CisgICAgICAgIChld2tfdGlsZV9tYXRyaXhfdGlsZV9l
eGFjdF9leGlzdHMpOgorICAgICAgICAoZXdrX3RpbGVfbWF0cml4X3RpbGVfbmVhcmVzdF9nZXQp
OgorICAgICAgICAoZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3KToKKyAgICAgICAgKGV3a190aWxl
X21hdHJpeF90aWxlX3B1dCk6CisgICAgICAgIChld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGUp
OgorICAgICAgICAoZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlX2Z1bGwpOgorICAgICAgICAo
ZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcik6CisgICAgICAgIChfZXdrX3RpbGVf
bWF0cml4X3NsaWNlcl9zZXR1cCk6CisgICAgICAgIChld2tfdGlsZV9tYXRyaXhfdXBkYXRlKToK
KyAgICAgICAgKGV3a190aWxlX21hdHJpeF91cGRhdGVzX3Byb2Nlc3MpOgorICAgICAgICAoZXdr
X3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIpOgorICAgICAgICAoZXdrX3RpbGVfbWF0cml4X2Ri
Zyk6CisgICAgICAgIChld2tfdGlsZV9tYXRyaXhfZnJlZXplKToKKyAgICAgICAgKGV3a190aWxl
X21hdHJpeF90aGF3KToKKyAgICAgICAgKiBld2svZXdrX3RpbGVkX21hdHJpeC5oOiBBZGRlZC4K
KyAgICAgICAgKiBld2svZXdrX3RpbGVkX21vZGVsLmM6IEFkZGVkLgorICAgICAgICAoX2V3a190
aWxlX2FjY291bnRfZ2V0KToKKyAgICAgICAgKF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZCk6
CisgICAgICAgIChfZXdrX3RpbGVfYWNjb3VudF9mcmVlZCk6CisgICAgICAgIChld2tfdGlsZV9h
Y2NvdW50aW5nX2RiZyk6CisgICAgICAgIChfZXdrX3RpbGVfcGFpbnRfcmdiODg4KToKKyAgICAg
ICAgKF9ld2tfdGlsZV9wYWludF9yZ2I1NjUpOgorICAgICAgICAoX2V3a190aWxlX3BhaW50KToK
KyAgICAgICAgKGV3a190aWxlX25ldyk6CisgICAgICAgIChld2tfdGlsZV9mcmVlKToKKyAgICAg
ICAgKGV3a190aWxlX3Nob3cpOgorICAgICAgICAoZXdrX3RpbGVfaGlkZSk6CisgICAgICAgIChl
d2tfdGlsZV92aXNpYmxlX2dldCk6CisgICAgICAgIChld2tfdGlsZV91cGRhdGVfZnVsbCk6Cisg
ICAgICAgIChld2tfdGlsZV91cGRhdGVfYXJlYSk6CisgICAgICAgIChld2tfdGlsZV91cGRhdGVz
X3Byb2Nlc3MpOgorICAgICAgICAoZXdrX3RpbGVfdXBkYXRlc19jbGVhcik6CisgICAgICAgIChl
d2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KToKKyAgICAgICAgKGV3a190aWxlX3VudXNlZF9jYWNo
ZV9sb2NrX2FyZWEpOgorICAgICAgICAoZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVh
KToKKyAgICAgICAgKGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKToKKyAgICAgICAgKGV3a190
aWxlX3VudXNlZF9jYWNoZV9jbGVhcik6CisgICAgICAgIChld2tfdGlsZV91bnVzZWRfY2FjaGVf
cmVmKToKKyAgICAgICAgKGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZik6CisgICAgICAgIChl
d2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X3NldCk6CisgICAgICAgIChld2tfdGlsZV91bnVzZWRf
Y2FjaGVfbWF4X2dldCk6CisgICAgICAgIChld2tfdGlsZV91bnVzZWRfY2FjaGVfdXNlZF9nZXQp
OgorICAgICAgICAoZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKToKKyAgICAgICAgKGV3a190
aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKToKKyAgICAgICAgKGV3a190aWxlX3VudXNlZF9j
YWNoZV9kaXJ0eSk6CisgICAgICAgIChld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKToKKyAg
ICAgICAgKGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KToKKyAgICAgICAgKGV3a190aWxlX3Vu
dXNlZF9jYWNoZV90aWxlX2dldCk6CisgICAgICAgIChld2tfdGlsZV91bnVzZWRfY2FjaGVfdGls
ZV9wdXQpOgorICAgICAgICAoZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RiZyk6CisgICAgICAgICog
ZXdrL2V3a190aWxlZF9tb2RlbC5oOiBBZGRlZC4KKyAgICAgICAgKiBld2svZXdrX3RpbGVkX3By
aXZhdGUuaDogQWRkZWQuCisgICAgICAgICogZXdrL2V3a191dGlsLmNwcDoKKyAgICAgICAgKGV3
a191dGlsX2ltYWdlX2Zyb21fY2Fpcm9fc3VyZmFjZV9hZGQpOgorICAgICAgICAqIGV3ay9ld2tf
dmlldy5jcHA6CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfYWRkKToKKyAgICAgICAgKF9ld2tf
dmlld19zbWFydF9jYWxjdWxhdGUpOgorICAgICAgICAoX2V3a192aWV3X3NtYXJ0X3Nob3cpOgor
ICAgICAgICAoX2V3a192aWV3X3NtYXJ0X2hpZGUpOgorICAgICAgICAoX2V3a192aWV3X3NtYXJ0
X3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKToKKyAgICAgICAgKF9ld2tfdmlld196b29tX2Fu
aW1hdG9yX2NiKToKKyAgICAgICAgKF9ld2tfdmlld19zbWFydF9kaXNhYmxlX3JlbmRlcik6Cisg
ICAgICAgIChfZXdrX3ZpZXdfc21hcnRfZW5hYmxlX3JlbmRlcik6CisgICAgICAgIChld2tfdmll
d19iYXNlX3NtYXJ0X3NldCk6CisgICAgICAgIChld2tfdmlld19wcmVfcmVuZGVyX3JlZ2lvbik6
CisgICAgICAgIChld2tfdmlld19wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyk6CisgICAgICAg
IChld2tfdmlld19lbmFibGVfcmVuZGVyKToKKyAgICAgICAgKGV3a192aWV3X2Rpc2FibGVfcmVu
ZGVyKToKKyAgICAgICAgKGV3a192aWV3X3Njcm9sbCk6CisgICAgICAgIChld2tfdmlld19kaWRf
Zmlyc3RfdmlzdWFsbHlfbm9uZW1wdHlfbGF5b3V0KToKKyAgICAgICAgKGV3a192aWV3X2Rpc3Bh
dGNoX2RpZF9maW5pc2hfbG9hZGluZyk6CisgICAgICAgIChld2tfdmlld190cmFuc2l0aW9uX3Rv
X2NvbW1pdGVkX2Zvcl9uZXdwYWdlKToKKyAgICAgICAgKiBld2svZXdrX3ZpZXcuaDoKKyAgICAg
ICAgKiBld2svZXdrX3ZpZXdfdGlsZWQuYzogQWRkZWQuCisgICAgICAgIChfZXdrX3ZpZXdfdGls
ZWRfcmVuZGVyX2NiKToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF91cGRhdGVzX3Byb2Nlc3Nf
cHJlKToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF9iYWNraW5nX3N0b3JlX2FkZCk6
CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfY29udGVudHNfc2l6ZV9jaGFuZ2VkX2NiKToKKyAg
ICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF9hZGQpOgorICAgICAgICAoX2V3a192aWV3X3Rp
bGVkX3NtYXJ0X3Njcm9sbHNfcHJvY2Vzcyk6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21h
cnRfcmVwYWludHNfcHJvY2Vzcyk6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfY29u
dGVudHNfcmVzaXplKToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3NldCk6
CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV93ZWFrX3NldCk6CisgICAgICAg
IChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQpOgorICAg
ICAgICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0X2ZsdXNoKToKKyAgICAgICAgKF9ld2tfdmlld190
aWxlZF9zbWFydF9wcmVfcmVuZGVyX3JlZ2lvbik6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRf
c21hcnRfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMpOgorICAgICAgICAoX2V3a192aWV3X3Rp
bGVkX3NtYXJ0X3ByZV9yZW5kZXJfY2FuY2VsKToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9z
bWFydF9kaXNhYmxlX3JlbmRlcik6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfZW5h
YmxlX3JlbmRlcik6CisgICAgICAgIChld2tfdmlld190aWxlZF9zbWFydF9zZXQpOgorICAgICAg
ICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0X2NsYXNzX25ldyk6CisgICAgICAgIChld2tfdmlld190
aWxlZF9hZGQpOgorICAgICAgICAoZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX2dldCk6Cisg
ICAgICAgIChld2tfdmlld190aWxlZF91bnVzZWRfY2FjaGVfc2V0KToKKyAgICAgICAgKGV3a192
aWV3X3RpbGVkX3Byb2Nlc3NfZW50aXJlX3F1ZXVlX3NldCk6CisKIDIwMTAtMTAtMTkgIFJ5dWFu
IENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVy
aWMgU2VpZGVsLgpJbmRleDogV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0CShyZXZpc2lvbiA3MDE0MikKKysrIFdl
YktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDkgKzQ2LDEz
IEBAIExJU1QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgZWZsL2V3ay9ld2tfaGlzdG9yeS5j
cHAKICAgICBlZmwvZXdrL2V3a19tYWluLmNwcAogICAgIGVmbC9ld2svZXdrX3NldHRpbmdzLmNw
cAorICAgIGVmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuYworICAgIGVmbC9ld2svZXdr
X3RpbGVkX21hdHJpeC5jCisgICAgZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuYwogICAgIGVmbC9l
d2svZXdrX3V0aWwuY3BwCiAgICAgZWZsL2V3ay9ld2tfdmlldy5jcHAKICAgICBlZmwvZXdrL2V3
a192aWV3X3NpbmdsZS5jCisgICAgZWZsL2V3ay9ld2tfdmlld190aWxlZC5jCiAgICAgZWZsL2V3
ay9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcAogKQogCkluZGV4OiBXZWJLaXQvZWZsL2V3ay9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9lZmwvZXdrL2V3a190
aWxlZF9iYWNraW5nX3N0b3JlLmMJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvZWZsL2V3ay9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxMzkgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENv
cHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a190aWxlZF9iYWNraW5nX3N0b3JlLmgiCisK
KyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPGVycm5vLmg+Cisj
aW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+IC8vIFhYWCBSRU1PVkUgTUUgTEFU
RVIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBJ
RFgoY29sLCByb3csIHJvd3NwYW4pIChjb2wgKyAocm93ICogcm93c3BhbikpCisKKyNpZiAhZGVm
aW5lZChNSU4pCisjIGRlZmluZSBNSU4oYSwgYikgKChhIDwgYikgPyBhIDogYikKKyNlbmRpZgor
CisjaWYgIWRlZmluZWQoTUFYKQorIyBkZWZpbmUgTUFYKGEsIGIpICgoYSA+IGIpID8gYSA6IGIp
CisjZW5kaWYKKwordHlwZWRlZiBlbnVtIF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVu
ZGVyX1ByaW9yaXR5IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHk7
Cit0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhOwordHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0gRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbTsKK3R5cGVkZWYgc3RydWN0IF9F
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0OworCitlbnVtIF9Fd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5IHsKKyAgICBQUkVfUkVOREVSX1BSSU9SSVRZX0xPVyA9
IDAsIC8qKjwgQXBwZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBsaXN0ICovCisgICAgUFJFX1JFTkRF
Ul9QUklPUklUWV9ISUdIICAgICAvKio8IFByZXBlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGxpc3Qg
Ki8KK307CisKK3N0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSB7CisgICAgRUlO
QV9JTkxJU1Q7CisgICAgRXdrX1RpbGUgKnRpbGU7CisgICAgc3RydWN0IHsKKyAgICAgICAgRXZh
c19Db29yZCB4LCB5LCB3LCBoOworICAgIH0gZ2VvbWV0cnk7CisgICAgc3RydWN0IHsKKyAgICAg
ICAgRWluYV9MaXN0ICpwcm9jZXNzOworICAgICAgICB1bnNpZ25lZCBsb25nIHJvdywgY29sOwor
ICAgICAgICBmbG9hdCB6b29tOworICAgIH0gdXBkYXRlOworICAgIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqcHJlX3JlbmRlcjsKKyAgICBFaW5hX0Jvb2wgc21v
b3RoX3NjYWxlOworfTsKKworc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVu
ZGVyX1JlcXVlc3QgeworICAgIEVJTkFfSU5MSVNUOworICAgIHVuc2lnbmVkIGxvbmcgY29sLCBy
b3c7CisgICAgZmxvYXQgem9vbTsKKyAgICBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0OworfTsKKworc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhIHsK
KyAgICBFdmFzX09iamVjdF9TbWFydF9DbGlwcGVkX0RhdGEgYmFzZTsKKyAgICBFdmFzX09iamVj
dCAqc2VsZjsKKyAgICBFdmFzX09iamVjdCAqY29udGVudHNfY2xpcHBlcjsKKyAgICBzdHJ1Y3Qg
eworICAgICAgICBFaW5hX0lubGlzdCAqKml0ZW1zOworICAgICAgICBFdmFzX0Nvb3JkIHgsIHks
IHcsIGg7CisgICAgICAgIGxvbmcgY29scywgcm93czsKKyAgICAgICAgc3RydWN0IHsKKyAgICAg
ICAgICAgIEV2YXNfQ29vcmQgdywgaDsKKyAgICAgICAgICAgIGZsb2F0IHpvb207CisgICAgICAg
ICAgICBFaW5hX0Jvb2wgem9vbV93ZWFrX3Ntb290aF9zY2FsZToxOworICAgICAgICB9IHRpbGU7
CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAg
IEV2YXNfQ29vcmQgeCwgeTsKKyAgICAgICAgICAgIH0gY3VyLCBvbGQsIGJhc2UsIHpvb21fY2Vu
dGVyOworICAgICAgICB9IG9mZnNldDsKKyAgICB9IHZpZXc7CisgICAgRXZhc19Db2xvcnNwYWNl
IGNzcGFjZTsKKyAgICBzdHJ1Y3QgeworICAgICAgICBFd2tfVGlsZV9NYXRyaXggKm1hdHJpeDsK
KyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7Cisg
ICAgICAgIH0gYmFzZTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxv
bmcgY29scywgcm93czsKKyAgICAgICAgfSBjdXIsIG9sZDsKKyAgICAgICAgRXZhc19Db29yZCB3
aWR0aCwgaGVpZ2h0OworICAgIH0gbW9kZWw7CisgICAgc3RydWN0IHsKKyAgICAgICAgRWluYV9C
b29sICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAq
YXJlYSk7CisgICAgICAgIHZvaWQgKmRhdGE7CisgICAgICAgIEVpbmFfTGlzdCAqcXVldWU7Cisg
ICAgICAgIEVpbmFfQm9vbCBwcm9jZXNzX2VudGlyZV9xdWV1ZTsKKyAgICAgICAgRWluYV9Jbmxp
c3QgKnByZV9yZW5kZXJfcmVxdWVzdHM7CisgICAgICAgIEVjb3JlX0lkbGVyICppZGxlcjsKKyAg
ICAgICAgRWluYV9Cb29sIGRpc2FibGVkOworICAgICAgICBFaW5hX0Jvb2wgc3VzcGVuZDoxOwor
ICAgIH0gcmVuZGVyOworICAgIHN0cnVjdCB7CisgICAgICAgIHZvaWQgKigqcHJlX2NiKSh2b2lk
ICpkYXRhLCBFdmFzX09iamVjdCAqbyk7CisgICAgICAgIHZvaWQgKnByZV9kYXRhOworICAgICAg
ICB2b2lkICooKnBvc3RfY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnByZV9kYXRhLCBFdmFzX09iamVj
dCAqbyk7CisgICAgICAgIHZvaWQgKnBvc3RfZGF0YTsKKyAgICB9IHByb2Nlc3M7CisgICAgc3Ry
dWN0IHsKKyAgICAgICAgRWluYV9Cb29sIGFueToxOworICAgICAgICBFaW5hX0Jvb2wgcG9zOjE7
CisgICAgICAgIEVpbmFfQm9vbCBzaXplOjE7CisgICAgICAgIEVpbmFfQm9vbCBtb2RlbDoxOwor
ICAgICAgICBFaW5hX0Jvb2wgb2Zmc2V0OjE7CisgICAgfSBjaGFuZ2VkOworI2lmZGVmIERFQlVH
X01FTV9MRUFLUworICAgIEVjb3JlX0V2ZW50X0hhbmRsZXIgKnNpZ191c3I7CisjZW5kaWYKK307
CisKK3N0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2MgPSBFVkFTX1NNQVJUX0NMQVNT
X0lOSVRfTlVMTDsKK2ludCBfZXdrX3RpbGVkX2xvZ19kb20gPSAtMTsKKworI2RlZmluZSBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihvYmosIHB0ciwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnB0ciA9IGV2YXNfb2JqZWN0X3Nt
YXJ0X2RhdGFfZ2V0KG9iaik7IFwKKyAgICBpZiAoIXB0cikgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQ1JJVElDQUwoIm5v
IHByaXZhdGUgZGF0YSBpbiBvYmo9JXAiLCBvYmopOyAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9yZXF1ZXN0X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCk7CitzdGF0aWMgaW5saW5lIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVxdWVzdF9hZGQoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIGlu
dCBtX2NvbCwgaW50IG1fcm93LCBmbG9hdCB6b29tKTsKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdik7CitzdGF0aWMg
aW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYpCit7CisgICAgdm9pZCAqZGF0YSA9IE5VTEw7CisKKyAgICAvKiBEbyBub3QgcHJv
Y2VzcyB1cGRhdGVzLiBOb3RlIHRoYXQgd2Ugc3RpbGwgd2FudCB0byBnZXQgdXBkYXRlcyByZXF1
ZXN0cworICAgICAqIGluIHRoZSBxdWV1ZSBpbiBvcmRlciB0byBub3QgbWlzcyBhbnkgdXBkYXRl
cyBhZnRlciB0aGUgcmVuZGVyIGlzCisgICAgICogcmVzdW1lZC4KKyAgICAgKi8KKyAgICBpZiAo
cHJpdi0+cmVuZGVyLnN1c3BlbmQgfHwgIWV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KHByaXYtPnNl
bGYpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocHJpdi0+cHJvY2Vzcy5wcmVfY2IpCisg
ICAgICAgIGRhdGEgPSBwcml2LT5wcm9jZXNzLnByZV9jYihwcml2LT5wcm9jZXNzLnByZV9kYXRh
LCBwcml2LT5zZWxmKTsKKworICAgIGV3a190aWxlX21hdHJpeF91cGRhdGVzX3Byb2Nlc3MocHJp
di0+bW9kZWwubWF0cml4KTsKKworICAgIGlmIChwcml2LT5wcm9jZXNzLnBvc3RfY2IpCisgICAg
ICAgIHByaXYtPnByb2Nlc3MucG9zdF9jYihwcml2LT5wcm9jZXNzLnBvc3RfZGF0YSwgZGF0YSwg
cHJpdi0+c2VsZik7Cit9CisKK3N0YXRpYyBpbnQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Zs
dXNoKHZvaWQgKmRhdGEpCit7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diA9IGRhdGE7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMgPSBld2tfdGlsZV9tYXRy
aXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworCisgICAgaWYgKHR1Yykg
eworICAgICAgICBEQkcoImZsdXNoIHVudXNlZCB0aWxlIGNhY2hlLiIpOworICAgICAgICBld2tf
dGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOworICAgIH0gZWxzZQorICAgICAgICBF
UlIoIm5vIGNhY2hlPyEiKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgRXdrX1RpbGUg
Kl9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0
IHpvb20pCit7CisgICAgRXdrX1RpbGUgKnQ7CisgICAgRXZhcyAqZXZhcyA9IGV2YXNfb2JqZWN0
X2V2YXNfZ2V0KHByaXYtPnNlbGYpOworICAgIGlmICghZXZhcykgeworICAgICAgICBDUklUSUNB
TCgiZXZhc19vYmplY3RfZXZhc19nZXQgZmFpbGVkISIpOworICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICB9CisKKyAgICB0ID0gZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3CisgICAgICAgIChwcml2
LT5tb2RlbC5tYXRyaXgsIGV2YXMsIGNvbCwgcm93LCB6b29tKTsKKworICAgIGlmICghdCkgewor
ICAgICAgICBDUklUSUNBTCgiZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3IGZhaWxlZCEiKTsKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSAqaXQsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQoreworICAgIGl0LT5n
ZW9tZXRyeS54ID0geDsKKyAgICBpdC0+Z2VvbWV0cnkueSA9IHk7CisKKyAgICBpZiAoaXQtPnRp
bGUpCisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoaXQtPnRpbGUtPmltYWdlLCB4LCB5KTsKK30K
Kworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkK
K3sKKyAgICBpdC0+Z2VvbWV0cnkudyA9IHc7CisgICAgaXQtPmdlb21ldHJ5LmggPSBoOworCisg
ICAgaWYgKGl0LT50aWxlKSB7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShpdC0+dGlsZS0+
aW1hZ2UsIHcsIGgpOworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChpdC0+dGls
ZS0+aW1hZ2UsIDAsIDAsIHcsIGgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYsIEV3a19UaWxlICp0LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCkK
K3sKKyAgICBpZiAoaXQtPnRpbGUpCisgICAgICAgIENSSVRJQ0FMKCJpdC0+dGlsZT0lcCwgYnV0
IGl0IHNob3VsZCBiZSBOVUxMISIsIGl0LT50aWxlKTsKKyAgICBpdC0+dGlsZSA9IHQ7CisgICAg
ZXZhc19vYmplY3RfbW92ZShpdC0+dGlsZS0+aW1hZ2UsIGl0LT5nZW9tZXRyeS54LCBpdC0+Z2Vv
bWV0cnkueSk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKGl0LT50aWxlLT5pbWFnZSwgaXQtPmdl
b21ldHJ5LncsIGl0LT5nZW9tZXRyeS5oKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3Nl
dAorICAgICAgICAoaXQtPnRpbGUtPmltYWdlLCAwLCAwLCBpdC0+Z2VvbWV0cnkudywgaXQtPmdl
b21ldHJ5LmgpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoaXQtPnRp
bGUtPmltYWdlLCBpdC0+c21vb3RoX3NjYWxlKTsKKworICAgIGlmICghZXdrX3RpbGVfdmlzaWJs
ZV9nZXQodCkpCisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQodC0+aW1hZ2Us
IHByaXYtPnNlbGYpOworCisgICAgZXdrX3RpbGVfc2hvdyh0KTsKK30KKworc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgZG91
YmxlIGxhc3RfdXNlZCkKK3sKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKyAgICBl
d2tfdGlsZV9oaWRlKGl0LT50aWxlKTsKKyAgICBpZiAoIWV3a190aWxlX3Zpc2libGVfZ2V0KGl0
LT50aWxlKSkKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChpdC0+dGlsZS0+
aW1hZ2UpOworICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dChwcml2LT5tb2RlbC5tYXRyaXgs
IGl0LT50aWxlLCBsYXN0X3VzZWQpOworICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRf
Y2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X2F1dG9fZmx1c2godHVjKTsKKworICAgIGl0LT50aWxlID0gTlVMTDsKK30KKworc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFaW5hX0lubGlzdCAqaXQ7CisgICAg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXRlbTsKKyAgICBpbnQgaTsKKyAgICBkb3Vi
bGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOworCisgICAgZm9yIChpID0gMDsg
aSA8IHByaXYtPnZpZXcucm93czsgaSsrKSB7CisgICAgICAgIGl0ID0gcHJpdi0+dmlldy5pdGVt
c1tpXTsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChpdCwgaXRlbSkKKyAgICAgICAgICAg
IGlmIChpdGVtLT50aWxlKQorICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdF91c2VkKTsKKyAgICB9Cit9CisKK3N0
YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVy
X3JlcXVlc3RfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIHVuc2lnbmVk
IGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSwgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSAqaXQsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJp
b3JpdHkgcHJpb3JpdHkpCit7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRl
cl9SZXF1ZXN0ICpyOworCisgICAgTUFMTE9DX09SX09PTV9SRVQociwgc2l6ZW9mKCpyKSwgRUlO
QV9GQUxTRSk7CisKKyAgICBpZiAocHJpb3JpdHkgPT0gUFJFX1JFTkRFUl9QUklPUklUWV9ISUdI
KQorICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cyA9IGVpbmFfaW5saXN0
X3ByZXBlbmQKKyAgICAgICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywg
RUlOQV9JTkxJU1RfR0VUKHIpKTsKKyAgICBlbHNlCisgICAgICAgIHByaXYtPnJlbmRlci5wcmVf
cmVuZGVyX3JlcXVlc3RzID0gZWluYV9pbmxpc3RfYXBwZW5kCisgICAgICAgICAgICAocHJpdi0+
cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyKSk7CisKKyAgICBy
LT5jb2wgPSBjb2w7CisgICAgci0+cm93ID0gcm93OworICAgIHItPnpvb20gPSB6b29tOworICAg
IHItPml0ID0gaXQ7CisKKyAgICBpZiAoaXQpCisgICAgICAgIGl0LT5wcmVfcmVuZGVyID0gcjsK
KyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1
ZXN0ICpyKQoreworICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWluYV9p
bmxpc3RfcmVtb3ZlCisgICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywg
RUlOQV9JTkxJU1RfR0VUKHIpKTsKKyAgICBmcmVlKHIpOworfQorCitzdGF0aWMgaW5saW5lIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9maXJzdChjb25zdCBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2KQoreworICAgIHJldHVybiBFSU5BX0lOTElTVF9DT05UQUlORVJf
R0VUKAorICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywKKyAgICAgICAg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KTsKK30KKworc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIEVpbmFfSW5saXN0ICoq
cGwgPSAmcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHM7CisgICAgd2hpbGUgKCpwbCkg
eworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnI7
CisgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0
X2ZpcnN0KHByaXYpOworICAgICAgICBpZiAoci0+aXQgJiYgci0+aXQtPnByZV9yZW5kZXIpCisg
ICAgICAgICAgICByLT5pdC0+cHJlX3JlbmRlciA9IE5VTEw7CisgICAgICAgICpwbCA9IGVpbmFf
aW5saXN0X3JlbW92ZSgqcGwsICpwbCk7CisgICAgICAgIGZyZWUocik7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3Jl
bW92ZV91bmFzc29jaWF0ZWQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sK
KyAgICBFaW5hX0lubGlzdCAqKnBsID0gJnByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3Rz
OworICAgIEVpbmFfSW5saXN0ICppdGVyID0gKnBsLCAqdG1wOworICAgIHdoaWxlIChpdGVyKSB7
CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqciA9
CisgICAgICAgICAgICBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKAorICAgICAgICAgICAgICAg
IGl0ZXIsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCk7CisgICAg
ICAgIGlmICghci0+aXQpIHsKKyAgICAgICAgICAgIHRtcCA9IGl0ZXItPm5leHQ7CisgICAgICAg
ICAgICAqcGwgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBsLCBpdGVyKTsKKyAgICAgICAgICAgIGl0
ZXIgPSB0bXA7CisgICAgICAgICAgICBmcmVlKHIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGl0ZXIgPSBpdGVyLT5uZXh0OworICAgIH0KK30KKworc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9yZW1vdmVfYXNzb2NpYXRlZChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIEVpbmFfSW5saXN0ICoqcGwg
PSAmcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHM7CisgICAgRWluYV9Jbmxpc3QgKml0
ZXIgPSAqcGwsICp0bXA7CisgICAgd2hpbGUgKGl0ZXIpIHsKKyAgICAgICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpyID0KKyAgICAgICAgICAgIEVJTkFfSU5M
SVNUX0NPTlRBSU5FUl9HRVQoCisgICAgICAgICAgICAgICAgaXRlciwgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KTsKKyAgICAgICAgaWYgKHItPml0KSB7CisgICAg
ICAgICAgICBpZiAoci0+aXQtPnByZV9yZW5kZXIpCisgICAgICAgICAgICAgICAgci0+aXQtPnBy
ZV9yZW5kZXIgPSBOVUxMOworICAgICAgICAgICAgdG1wID0gaXRlci0+bmV4dDsKKyAgICAgICAg
ICAgICpwbCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcGwsIGl0ZXIpOworICAgICAgICAgICAgaXRl
ciA9IHRtcDsKKyAgICAgICAgICAgIGZyZWUocik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgaXRlciA9IGl0ZXItPm5leHQ7CisgICAgfQorfQorCisvKiBhc3N1bWVzIHByaXYtPnByb2Nl
c3MucHJlX2NiIHdhcyBjYWxsZWQgaWYgcmVxdWlyZWQhICovCitzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nfc2luZ2xlKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpyZXE7CisgICAgRWluYV9SZWN0YW5nbGUgYXJlYTsK
KyAgICBFd2tfVGlsZV9NYXRyaXggKnRtID0gcHJpdi0+bW9kZWwubWF0cml4OworICAgIEV3a19U
aWxlICp0OworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworICAgIHVuc2lnbmVkIGxv
bmcgY29sLCByb3c7CisgICAgZmxvYXQgem9vbTsKKyAgICBkb3VibGUgbGFzdF91c2VkID0gZWNv
cmVfbG9vcF90aW1lX2dldCgpOworCisgICAgcmVxID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVxdWVzdF9maXJzdChwcml2KTsKKyAgICBpZiAoIXJlcSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgY29sID0gcmVxLT5jb2w7CisgICAgcm93ID0gcmVxLT5yb3c7CisgICAg
em9vbSA9IHJlcS0+em9vbTsKKworICAgIGlmIChld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9l
eGlzdHModG0sIGNvbCwgcm93LCB6b29tKSkgeworICAgICAgICBEQkcoIm5vIHByZS1yZW5kZXIg
cmVxdWlyZWQgZm9yIHRpbGUgJWx1LCVsdSBAICVmLiIsIGNvbCwgcm93LCB6b29tKTsKKyAgICAg
ICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKHJlcS0+aXQgJiYgcmVxLT5pdC0+dGlsZSkg
eworICAgICAgICBDUklUSUNBTCgiaXQtPnRpbGUgPSAlcCAoJWx1LCAlbHUpLCBidXQgc2hvdWxk
IGJlIE5VTEwiLCByZXEtPml0LT50aWxlLCByZXEtPml0LT50aWxlLT5yb3csIHJlcS0+aXQtPnRp
bGUtPmNvbCk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIHQgPSBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgY29sLCByb3csIHpvb20pOworICAgIGlmICgh
dCkKKyAgICAgICAgZ290byBlbmQ7CisKKyAgICBhcmVhLnggPSAwOworICAgIGFyZWEueSA9IDA7
CisgICAgYXJlYS53ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgYXJlYS5oID0gcHJpdi0+dmll
dy50aWxlLmg7CisKKyAgICBwcml2LT5yZW5kZXIuY2IocHJpdi0+cmVuZGVyLmRhdGEsIHQsICZh
cmVhKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoCisgICAgICAgIHQt
PmltYWdlLAorICAgICAgICBhcmVhLngsIGFyZWEueSwgYXJlYS53LCBhcmVhLmgpOworICAgIGV3
a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZXNfY2xlYXIodG0sIHQpOworCisgICAgaWYgKHJlcS0+
aXQpIHsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHBy
aXYsIHQsIHJlcS0+aXQpOworICAgICAgICBpZiAocmVxLT5pdC0+cHJlX3JlbmRlcikKKyAgICAg
ICAgICAgIHJlcS0+aXQtPnByZV9yZW5kZXIgPSBOVUxMOworICAgIH0gZWxzZQorICAgICAgICBl
d2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQodG0sIHQsIGxhc3RfdXNlZCk7CisKK2VuZDoKKyAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbChwcml2LCByZXEp
OworICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVs
Lm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godHVjKTsKK30K
Kworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNz
X2lkbGVyX2NiKHZvaWQgKmRhdGEpCit7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdiA9IGRhdGE7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQgPSBO
VUxMOworCisgICAgd2hpbGUgKHByaXYtPnJlbmRlci5xdWV1ZSkgeworICAgICAgICBpdCA9IHBy
aXYtPnJlbmRlci5xdWV1ZS0+ZGF0YTsKKyAgICAgICAgaWYgKGl0LT50aWxlLT56b29tID09IHBy
aXYtPnZpZXcudGlsZS56b29tKSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9yZXF1ZXN0X2RlbChwcml2LCBpdCk7CisgICAgICAgICAgICBpdCA9IE5VTEw7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHJvdywgY29sOworICAg
ICAgICAgICAgZmxvYXQgem9vbTsKKyAgICAgICAgICAgIEV3a19UaWxlICp0OworICAgICAgICAg
ICAgaWYgKGl0LT50aWxlKSB7CisgICAgICAgICAgICAgICAgZG91YmxlIGxhc3RfdXNlZCA9IGVj
b3JlX2xvb3BfdGltZV9nZXQoKTsKKyAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0LCBsYXN0X3VzZWQpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByb3cgPSBpdC0+dXBkYXRlLnJvdzsKKyAgICAgICAgICAgIGNvbCA9
IGl0LT51cGRhdGUuY29sOworICAgICAgICAgICAgem9vbSA9IGl0LT51cGRhdGUuem9vbTsKKyAg
ICAgICAgICAgIHQgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgY29s
LCByb3csIHpvb20pOworICAgICAgICAgICAgaWYgKCF0KSB7CisgICAgICAgICAgICAgICAgcHJp
di0+cmVuZGVyLmlkbGVyID0gTlVMTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3RpbGVfYXNzb2NpYXRlKHByaXYsIHQsIGl0KTsKKyAgICAgICAgICAgIGl0LT51cGRhdGUucHJv
Y2VzcyA9IE5VTEw7CisgICAgICAgICAgICBwcml2LT5yZW5kZXIucXVldWUgPSBlaW5hX2xpc3Rf
cmVtb3ZlX2xpc3QocHJpdi0+cmVuZGVyLnF1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnJlbmRlci5xdWV1ZSk7CisgICAg
ICAgICAgICBpZiAoIXByaXYtPnJlbmRlci5wcm9jZXNzX2VudGlyZV9xdWV1ZSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChwcml2LT5wcm9jZXNz
LnByZV9jYikKKyAgICAgICAgZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nl
c3MucHJlX2RhdGEsIHByaXYtPnNlbGYpOworCisgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNf
cHJvY2Vzcyhwcml2LT5tb2RlbC5tYXRyaXgpOworCisgICAgaWYgKCFpdCkKKyAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9wcm9jZXNzX3NpbmdsZShw
cml2KTsKKworICAgIGlmIChwcml2LT5wcm9jZXNzLnBvc3RfY2IpCisgICAgICAgIHByaXYtPnBy
b2Nlc3MucG9zdF9jYihwcml2LT5wcm9jZXNzLnBvc3RfZGF0YSwgZGF0YSwgcHJpdi0+c2VsZik7
CisKKyAgICBpZiAoIXByaXYtPnJlbmRlci5xdWV1ZSAmJiAhcHJpdi0+cmVuZGVyLnByZV9yZW5k
ZXJfcmVxdWVzdHMpIHsKKyAgICAgICAgcHJpdi0+cmVuZGVyLmlkbGVyID0gTlVMTDsKKyAgICAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nl
c3NfaWRsZXJfc3RvcChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAg
IGlmICghcHJpdi0+cmVuZGVyLmlkbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBlY29yZV9p
ZGxlcl9kZWwocHJpdi0+cmVuZGVyLmlkbGVyKTsKKyAgICBwcml2LT5yZW5kZXIuaWRsZXIgPSBO
VUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
KQoreworICAgIGlmIChwcml2LT5yZW5kZXIuaWRsZXIpCisgICAgICAgIHJldHVybjsKKyAgICBw
cml2LT5yZW5kZXIuaWRsZXIgPSBlY29yZV9pZGxlcl9hZGQoCisgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2IsIHByaXYpOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVxdWVzdF9kZWwoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSAqaXQpCit7CisgICAgcHJpdi0+cmVuZGVyLnF1ZXVlID0gZWluYV9saXN0X3JlbW92ZV9s
aXN0KHByaXYtPnJlbmRlci5xdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaXQtPnVwZGF0ZS5wcm9jZXNzKTsKKyAgICBpdC0+dXBkYXRlLnByb2Nl
c3MgPSBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fcmVxdWVzdF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIGludCBtX2NvbCwgaW50IG1fcm93LCBm
bG9hdCB6b29tKQoreworICAgIGlmIChpdC0+dXBkYXRlLnByb2Nlc3MpCisgICAgICAgIHJldHVy
bjsKKworICAgIGl0LT51cGRhdGUuY29sID0gbV9jb2w7CisgICAgaXQtPnVwZGF0ZS5yb3cgPSBt
X3JvdzsKKyAgICBpdC0+dXBkYXRlLnpvb20gPSB6b29tOworCisgICAgcHJpdi0+cmVuZGVyLnF1
ZXVlID0gZWluYV9saXN0X2FwcGVuZChwcml2LT5yZW5kZXIucXVldWUsIGl0KTsKKyAgICBpdC0+
dXBkYXRlLnByb2Nlc3MgPSBlaW5hX2xpc3RfbGFzdChwcml2LT5yZW5kZXIucXVldWUpOworCisg
ICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKK30KKworc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBpZiAocHJpdi0+cmVuZGVyLnN1c3BlbmQp
CisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisKKyAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9
IEVJTkFfVFJVRTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lk
bGVyX3N0b3AocHJpdik7CisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQp
CisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisKKyAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9
IEVJTkFfRkFMU0U7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJl
cnMocHJpdik7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxl
cl9zdGFydChwcml2KTsKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKKy8qKgorICogUmV0
dXJucyBhIHJlY3RhbmdsZSB3aG9zZSBjb29yZGluYXRlcyBpbmRpY2F0ZSB3aGljaCB0aWxlcyBh
cmUKKyAqIGN1cnJlbnRseSBpbnNpZGUgdGhlIHZpZXdwb3J0LgorICoKKyAqIFNwZWNpZmljYWxs
eSwgdGhlIHJldHVybmVkIHJlY3RhbmdsZSdzIGNvb3JkaW5hdGVzIGhhdmUgdGhlCisgKiBmb2xs
b3dpbmcgbWVhbmluZzoKKyAqICAtIHg6IENvbHVtbiBudW1iZXIgZm9yIHRoZSB0b3AtbGV2ZWwg
dGlsZSBpbnNpZGUgdGhlIHZpZXdwb3J0LgorICogIC0geTogUm93IG51bWJlciBmb3IgdGhlIHRv
cC1sZXZlbCB0aWxlIGluc2lkZSB0aGUgdmlld3BvcnQuCisgKiAgLSB3OiBOdW1iZXIgb2YgdGls
ZXMgaG9yaXpvbnRhbGx5IGluc2lkZSB0aGUgdmlld3BvcnQuCisgKiAgLSBoOiBOdW1iZXIgb2Yg
dGlsZXMgdmVydGljYWxseSBpbnNpZGUgdGhlIHZpZXdwb3J0LgorICovCitzdGF0aWMgRWluYV9S
ZWN0YW5nbGUgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zpc2libGVfdGlsZXNfcmVjdChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgICBFaW5hX1JlY3RhbmdsZSBy
OworCisgICAgIGNvbnN0IEV2YXNfQ29vcmQgb3ggPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7
CisgICAgIGNvbnN0IEV2YXNfQ29vcmQgb3kgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7Cisg
ICAgIGNvbnN0IEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICAgY29uc3Qg
RXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworCisgICAgIHIueCA9IE1BWCgwLCBv
eCAvIHR3KTsKKyAgICAgci55ID0gTUFYKDAsIG95IC8gdGgpOworICAgICByLncgPSBNSU4ocHJp
di0+bW9kZWwuY3VyLmNvbHMsCisgICAgICAgICAgICAgICBjZWlsKChmbG9hdCkocHJpdi0+dmll
dy53ICsgKG94ICUgdHcpKSAvIHR3KSk7CisgICAgIHIuaCA9IE1JTihwcml2LT5tb2RlbC5jdXIu
cm93cywKKyAgICAgICAgICAgICAgIGNlaWwoKGZsb2F0KShwcml2LT52aWV3LmggKyAob3kgJSB0
aCkpIC8gdGgpKTsKKworICAgICBEQkcoIlJldHVybmluZyAlZCwlZCslZHglZCIsIHIueCwgci55
LCByLncsIHIuaCk7CisKKyAgICAgcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfaXNfaW5zaWRlX3ZpZXdwb3J0KEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIGludCBjb2wsIGludCByb3cpCit7CisgICAgY29uc3Qg
RWluYV9SZWN0YW5nbGUgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aXNpYmxlX3RpbGVz
X3JlY3QocHJpdik7CisKKyAgICByZXR1cm4gZWluYV9yZWN0YW5nbGVfY29vcmRzX2luc2lkZSgm
ciwgY29sLCByb3cpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV90aWxlX2lzX2FkamFjZW50X3RvX3ZpZXdwb3J0KEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnByaXYsIGludCBjb2wsIGludCByb3cpCit7CisgICAgY29uc3QgRWluYV9SZWN0YW5n
bGUgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aXNpYmxlX3RpbGVzX3JlY3QocHJpdik7
CisKKyAgICBpZiAocm93ID09IChyLnkgLSAxKSB8fCByb3cgPT0gKHIueSArIHIuaCkpCisgICAg
ICAgIHJldHVybiAoY29sID49IChyLnggLSAxKSAmJiBjb2wgPD0gKHIueCArIHIudykpOworCisg
ICAgaWYgKGNvbCA9PSAoci54IC0gMSkgfHwgY29sID09IChyLnggKyByLncpKQorICAgICAgICBy
ZXR1cm4gKHJvdyA+PSAoci55IC0gMSkgJiYgcm93IDw9IChyLnkgKyByLmgpKTsKKworICAgIHJl
dHVybiBFSU5BX0ZBTFNFOworfQorCitzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCBsb25nIGNvbCwgaW50IHJvdykK
K3sKKyAgICBpbnQgbV9jb2wgPSBwcml2LT5tb2RlbC5iYXNlLmNvbCArIGNvbDsKKyAgICBpbnQg
bV9yb3cgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyArIHJvdzsKKyAgICBkb3VibGUgbGFzdF91c2Vk
ID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOworCisgICAgaWYgKG1fY29sIDwgMCB8fCBtX3JvdyA8
IDAKKyAgICAgICAgfHwgbV9jb2wgPj0gcHJpdi0+bW9kZWwuY3VyLmNvbHMgfHwgbV9yb3cgPj0g
cHJpdi0+bW9kZWwuY3VyLnJvd3MpIHsKKworICAgICAgICBpZiAoaXQtPnRpbGUpIHsKKyAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQs
IGxhc3RfdXNlZCk7CisgICAgICAgICAgICBpZiAoaXQtPnVwZGF0ZS5wcm9jZXNzKQorICAgICAg
ICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3JlcXVlc3RfZGVsKHByaXYs
IGl0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEV3a19UaWxlICp0OworICAg
ICAgICBjb25zdCBmbG9hdCB6b29tID0gcHJpdi0+dmlldy50aWxlLnpvb207CisgICAgICAgIGNv
bnN0IEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICAgICAgY29uc3QgRXZh
c19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworCisgICAgICAgIGlmIChpdC0+dXBkYXRl
LnByb2Nlc3MpIHsKKyAgICAgICAgICAgIGlmIChpdC0+dXBkYXRlLnJvdyA9PSBtX3JvdworICAg
ICAgICAgICAgICAgICYmIGl0LT51cGRhdGUuY29sID09IG1fY29sCisgICAgICAgICAgICAgICAg
JiYgaXQtPnVwZGF0ZS56b29tID09IHpvb20pCisgICAgICAgICAgICAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKKworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVxdWVz
dF9kZWwocHJpdiwgaXQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGl0LT5wcmVfcmVuZGVy
KSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1
ZXN0X2RlbCgKKyAgICAgICAgICAgICAgICBwcml2LCBpdC0+cHJlX3JlbmRlcik7CisgICAgICAg
ICAgICBpdC0+cHJlX3JlbmRlciA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXQt
PnRpbGUpIHsKKyAgICAgICAgICAgIEV3a19UaWxlICpvbGQgPSBpdC0+dGlsZTsKKyAgICAgICAg
ICAgIGlmIChvbGQtPnJvdyAhPSBtX3JvdyB8fCBvbGQtPmNvbCAhPSBtX2NvbCB8fCBvbGQtPnpv
b20gIT0gem9vbSkgeworICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90
aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3VzZWQpOworICAgICAgICAgICAgICAgIGlm
IChpdC0+dXBkYXRlLnByb2Nlc3MpCisgICAgICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX3JlcXVlc3RfZGVsKHByaXYsIGl0KTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAob2xkLT5yb3cgPT0gbV9yb3cgJiYgb2xkLT5jb2wgPT0gbV9jb2wKKyAgICAgICAgICAg
ICAgICAgICAgICAgJiYgb2xkLT56b29tID09IHpvb20pCisgICAgICAgICAgICAgICAgZ290byBl
bmQ7CisgICAgICAgIH0KKworICAgICAgICB0ID0gZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3Rf
Z2V0CisgICAgICAgICAgICAocHJpdi0+bW9kZWwubWF0cml4LCBtX2NvbCwgbV9yb3csIHpvb20p
OworICAgICAgICBpZiAoIXQpIHsKKyAgICAgICAgICAgIC8qIE5PVEU6IGl0IG5ldmVyIHJldHVy
bnMgTlVMTCBpZiBpdC0+dGlsZSB3YXMgc2V0ISAqLworICAgICAgICAgICAgaWYgKGl0LT50aWxl
KSB7CisgICAgICAgICAgICAgICAgQ1JJVElDQUwoIml0LT50aWxlPSVwLCBidXQgaXQgc2hvdWxk
IGJlIE5VTEwhIiwgaXQtPnRpbGUpOworICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3VzZWQpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvKiBEbyBub3QgYWRkIG5ldyByZXF1ZXN0cyB0byB0aGUgcmVu
ZGVyIHF1ZXVlICovCisgICAgICAgICAgICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9pc19pbnNp
ZGVfdmlld3BvcnQoCisgICAgICAgICAgICAgICAgICAgICAgICBwcml2LCBtX2NvbCwgbV9yb3cp
KSB7CisgICAgICAgICAgICAgICAgICAgIERCRygiJWQsJWQgaXMgbm90IGluc2lkZSB0aGUgdmll
d3BvcnQiLCBtX2NvbCwgbV9yb3cpOworICAgICAgICAgICAgICAgICAgICBpZiAoX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3RpbGVfaXNfYWRqYWNlbnRfdG9fdmlld3BvcnQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJpdiwgbV9jb2wsIG1fcm93KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYsIG1fY29sLCBtX3Jvdywgem9vbSwgaXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJFX1JFTkRFUl9QUklPUklUWV9ISUdIKTsK
KyAgICAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vz
c19pZGxlcl9zdGFydChwcml2KTsKKworICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0ID0gX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3RpbGVfbmV3KHByaXYsIG1fY29sLCBtX3Jvdywgem9vbSk7CisgICAgICAgICAgICAg
ICAgaWYgKCF0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICAg
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUocHJpdiwg
dCwgaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHQgIT0gaXQtPnRpbGUp
IHsKKyAgICAgICAgICAgIGlmICghaXQtPnVwZGF0ZS5wcm9jZXNzKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGl0LT50aWxlKQorICAgICAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQsIGxhc3RfdXNlZCk7CisgICAgICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHQs
IGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBlbmQ6CisKKyAgICAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKKyAgICB9CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitz
dGF0aWMgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIGxvbmcgY29s
LCBpbnQgcm93KQoreworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAg
IEV2YXNfQ29vcmQgeCwgeSwgdHcsIHRoOworCisgICAgREJHKCJvPSVwIiwgcHJpdi0+c2VsZik7
CisKKyAgICBNQUxMT0NfT1JfT09NX1JFVChpdCwgc2l6ZW9mKCppdCksIE5VTEwpOworCisgICAg
dHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworICAg
IHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBwcml2LT52aWV3LnggKyB0dyAgKmNvbDsK
KyAgICB5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgcHJpdi0+dmlldy55ICsgdGggICpy
b3c7CisKKyAgICBpdC0+dGlsZSA9IE5VTEw7CisgICAgaXQtPnVwZGF0ZS5wcm9jZXNzID0gTlVM
TDsKKyAgICBpdC0+c21vb3RoX3NjYWxlID0gcHJpdi0+dmlldy50aWxlLnpvb21fd2Vha19zbW9v
dGhfc2NhbGU7CisgICAgaXQtPnByZV9yZW5kZXIgPSBOVUxMOworICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIHgsIHkpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKKyAgICBpZiAoIV9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGNvbCwgcm93KSkgeworICAgICAgICBmcmVlKGl0
KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGl0OworfQorCitz
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQp
Cit7CisgICAgaWYgKGl0LT50aWxlKSB7CisgICAgICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29y
ZV9sb29wX3RpbWVfZ2V0KCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxl
X2Rpc3NvY2lhdGUocHJpdiwgaXQsIGxhc3RfdXNlZCk7CisgICAgfQorICAgIGlmIChpdC0+dXBk
YXRlLnByb2Nlc3MpCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3JlcXVl
c3RfZGVsKHByaXYsIGl0KTsKKyAgICBpZiAoaXQtPnByZV9yZW5kZXIpIHsKKyAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwoCisgICAgICAgICAg
ICBwcml2LCBpdC0+cHJlX3JlbmRlcik7CisgICAgICAgIGl0LT5wcmVfcmVuZGVyID0gTlVMTDsK
KyAgICB9CisgICAgZnJlZShpdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX3Ntb290aF9zY2FsZV9zZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSAqaXQsIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCit7CisgICAgaWYgKGl0LT5zbW9vdGhfc2Nh
bGUgPT0gc21vb3RoX3NjYWxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXQtPnRpbGUp
CisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoaXQtPnRpbGUtPmlt
YWdlLCBzbW9vdGhfc2NhbGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2NoYW5nZWQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikK
K3sKKyAgICBpZiAocHJpdi0+Y2hhbmdlZC5hbnkpCisgICAgICAgIHJldHVybjsKKyAgICBldmFz
X29iamVjdF9zbWFydF9jaGFuZ2VkKHByaXYtPnNlbGYpOworICAgIHByaXYtPmNoYW5nZWQuYW55
ID0gRUlOQV9UUlVFOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19jb2xzX2VuZF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRWlu
YV9Jbmxpc3QgKipwX3JvdywgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIEVpbmFfSW5saXN0
ICpuOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgaWYgKCFjb3VudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbiA9ICgqcF9yb3cpLT5sYXN0OworCisgICAgZm9yIChpID0gMDsgaSA8IGNv
dW50OyBpKyspIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7Cisg
ICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChuLCBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9JdGVtKTsKKyAgICAgICAgbiA9IG4tPnByZXY7CisgICAgICAgICpwX3JvdyA9IGVp
bmFfaW5saXN0X3JlbW92ZSgqcF9yb3csIEVJTkFfSU5MSVNUX0dFVChpdCkpOworICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXQpOworICAgIH0KK30KKwor
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9h
ZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRWluYV9Jbmxpc3QgKipwX3Jv
dywgdW5zaWduZWQgaW50IGJhc2VfY29sLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgdW5z
aWduZWQgaW50IGksIHIgPSBwX3JvdyAtIHByaXYtPnZpZXcuaXRlbXM7CisKKyAgICBmb3IgKGkg
PSAwOyBpIDwgY291bnQ7IGkrKywgYmFzZV9jb2wrKykgeworICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtICppdDsKKworICAgICAgICBpdCA9IF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX2FkZChwcml2LCBiYXNlX2NvbCwgcik7CisgICAgICAgIGlmICghaXQpIHsKKyAg
ICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWRkIGNvbHVtbiAldSBvZiAldSBpbiByb3cg
JXUuIiwgaSwgY291bnQsIHIpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHBfcm93LCBpKTsKKyAgICAgICAgICAgIHJldHVybiBF
SU5BX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgKnBfcm93ID0gZWluYV9pbmxpc3RfYXBw
ZW5kKCpwX3JvdywgRUlOQV9JTkxJU1RfR0VUKGl0KSk7CisgICAgfQorICAgIHJldHVybiBFSU5B
X1RSVUU7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jv
d19kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRWluYV9Jbmxpc3QgKnJv
dykKK3sKKyAgICB3aGlsZSAocm93KSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0OworICAgICAgICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQocm93LCBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKKyAgICAgICAgcm93ID0gcm93LT5uZXh0Owor
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXQpOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19y
YW5nZV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRWluYV9Jbmxpc3Qg
KipzdGFydCwgRWluYV9Jbmxpc3QgKiplbmQpCit7CisgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBz
dGFydCsrKSB7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd19kZWwo
cHJpdiwgKnN0YXJ0KTsKKyAgICAgICAgKnN0YXJ0ID0gTlVMTDsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfYWxsX2RlbChFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIEVpbmFfSW5saXN0ICoqc3RhcnQ7
CisgICAgRWluYV9Jbmxpc3QgKiplbmQ7CisKKyAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXM7
CisgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93czsKKyAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChwcml2LCBzdGFydCwgZW5k
KTsKKworICAgIGZyZWUocHJpdi0+dmlldy5pdGVtcyk7CisgICAgcHJpdi0+dmlldy5pdGVtcyA9
IE5VTEw7CisgICAgcHJpdi0+dmlldy5jb2xzID0gMDsKKyAgICBwcml2LT52aWV3LnJvd3MgPSAw
OworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyKHZvaWQg
KmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSkKK3sKKyAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2ID0gZGF0YTsKKworICAgIElORigiVE9E
TyAlcCAodmlzaWJsZT8gJWQpIFslbHUsJWx1XSAlZCwlZCArICVkeCVkIiwKKyAgICAgICAgdCwg
dC0+dmlzaWJsZSwgdC0+Y29sLCB0LT5yb3csIGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFy
ZWEtPmgpOworCisgICAgaWYgKCF0LT52aXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAocHJpdi0+dmlldy50aWxlLncgIT0gdC0+dyB8fCBwcml2LT52aWV3LnRpbGUuaCAhPSB0LT5o
KQorICAgICAgICByZXR1cm47IC8vIHRvZG86IHJlbW92ZSBtZSBsYXRlciwgZG9uJ3QgZXZlbiBm
bGFnIGFzIGRpcnR5IQorCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ocHJpdi0+cmVu
ZGVyLmNiKTsKKyAgICBpZiAoIXByaXYtPnJlbmRlci5jYihwcml2LT5yZW5kZXIuZGF0YSwgdCwg
YXJlYSkpCisgICAgICAgIHJldHVybjsKKworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBk
YXRlX2FkZCh0LT5pbWFnZSwgYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0
cml4X2NyZWF0ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBpZiAocHJpdi0+bW9kZWwubWF0cml4KSB7CisgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfYWxsX2RlbChwcml2KTsKKwor
ICAgICAgICBwcml2LT5jaGFuZ2VkLm9mZnNldCA9IEVJTkFfRkFMU0U7CisgICAgICAgIHByaXYt
PmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKKworICAgICAgICBld2tfdGlsZV9tYXRyaXhfZnJl
ZShwcml2LT5tb2RlbC5tYXRyaXgpOworICAgIH0KKworICAgIHByaXYtPm1vZGVsLm1hdHJpeCA9
IGV3a190aWxlX21hdHJpeF9uZXcKKyAgICAgICAgKHR1YywgcHJpdi0+bW9kZWwuY3VyLmNvbHMs
IHByaXYtPm1vZGVsLmN1ci5yb3dzLCBwcml2LT5jc3BhY2UsCisgICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcmVuZGVyLCBwcml2KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9kZWwoRXZhc19PYmplY3QgKm8sIEV2YXNfT2Jq
ZWN0ICptZW1iZXIpCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Cisg
ICAgaWYgKCFwcml2LT5jb250ZW50c19jbGlwcGVyKQorICAgICAgICByZXR1cm47CisgICAgZXZh
c19vYmplY3RfY2xpcF91bnNldChtZW1iZXIpOworICAgIGlmICghZXZhc19vYmplY3RfY2xpcGVl
c19nZXQocHJpdi0+Y29udGVudHNfY2xpcHBlcikpCisgICAgICAgIGV2YXNfb2JqZWN0X2hpZGUo
cHJpdi0+Y29udGVudHNfY2xpcHBlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9zbWFydF9tZW1iZXJfYWRkKEV2YXNfT2JqZWN0ICpvLCBFdmFzX09iamVjdCAq
bWVtYmVyKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIGlm
ICghcHJpdi0+Y29udGVudHNfY2xpcHBlcikKKyAgICAgICAgcmV0dXJuOworICAgIGV2YXNfb2Jq
ZWN0X2NsaXBfc2V0KG1lbWJlciwgcHJpdi0+Y29udGVudHNfY2xpcHBlcik7CisgICAgaWYgKGV2
YXNfb2JqZWN0X3Zpc2libGVfZ2V0KG8pKQorICAgICAgICBldmFzX29iamVjdF9zaG93KHByaXYt
PmNvbnRlbnRzX2NsaXBwZXIpOworfQorCisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCitzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2KQoreworICAgIHN0YXRpYyBpbnQgcnVuID0gMDsKKworICAgIHJ1bisr
OworCisgICAgcHJpbnRmKCJcbi0tLSBCRUdJTiBERUJVRyBUSUxFRCBCQUNLSU5HIFNUT1JFIE1F
TU9SWSBbJWRdIC0tXG4iCisgICAgICAgICAgICJ0PSUwLjJmLCBvYmo9JXAsIHByaXY9JXAsIHZp
ZXcuaXRlbXM9JXAsIG1hdHJpeD0lcFxuIiwKKyAgICAgICAgICAgcnVuLCBlY29yZV9sb29wX3Rp
bWVfZ2V0KCksCisgICAgICAgICAgIHByaXYtPnNlbGYsIHByaXYsIHByaXYtPnZpZXcuaXRlbXMs
IHByaXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBld2tfdGlsZV9tYXRyaXhfZGJnKHByaXYtPm1v
ZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfYWNjb3VudGluZ19kYmcoKTsKKworICAgIHByaW50
ZigiLS0tIEVORCBERUJVRyBUSUxFRCBCQUNLSU5HIFNUT1JFIE1FTU9SWSBbJWRdIC0tXG5cbiIs
IHJ1bik7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Np
Z191c3Iodm9pZCAqZGF0YSwgaW50IHR5cGUsIHZvaWQgKmV2ZW50KQoreworICAgIEVjb3JlX0V2
ZW50X1NpZ25hbF9Vc2VyICpzaWcgPSAoRWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIqKWV2ZW50Owor
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYgPSAoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSopZGF0YTsKKworICAgIGlmIChzaWctPm51bWJlciA9PSAyKSB7CisgICAg
ICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworICAgICAgICB0dWMgPSBld2tfdGlsZV9t
YXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAgICAgICBld2tf
dGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOworICAgIH0KKworICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhwcml2KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfbWVtX2RiZyhwcml2KTsKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorI2VuZGlmCisK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZhc19PYmpl
Y3QgKm8pCit7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdjsKKworICAg
IERCRygibz0lcCIsIG8pOworCisgICAgQ0FMTE9DX09SX09PTV9SRVQocHJpdiwgc2l6ZW9mKCpw
cml2KSk7CisKKyAgICBwcml2LT5zZWxmID0gbzsKKyAgICBwcml2LT52aWV3LnRpbGUuem9vbSA9
IDEuMDsKKyAgICBwcml2LT52aWV3LnRpbGUudyA9IFRJTEVfVzsKKyAgICBwcml2LT52aWV3LnRp
bGUuaCA9IFRJTEVfSDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IDA7CisgICAgcHJp
di0+dmlldy5vZmZzZXQuY3VyLnkgPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0g
MDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IDA7CisgICAgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54ID0gLVRJTEVfVzsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAtVElM
RV9IOworCisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtMTsKKyAgICBwcml2LT5tb2RlbC5i
YXNlLnJvdyA9IC0xOworICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gMTsKKyAgICBwcml2LT5t
b2RlbC5jdXIucm93cyA9IDE7CisgICAgcHJpdi0+bW9kZWwub2xkLmNvbHMgPSAwOworICAgIHBy
aXYtPm1vZGVsLm9sZC5yb3dzID0gMDsKKyAgICBwcml2LT5tb2RlbC53aWR0aCA9IDA7CisgICAg
cHJpdi0+bW9kZWwuaGVpZ2h0ID0gMDsKKyAgICBwcml2LT5yZW5kZXIucHJvY2Vzc19lbnRpcmVf
cXVldWUgPSBFSU5BX1RSVUU7CisgICAgcHJpdi0+cmVuZGVyLnN1c3BlbmQgPSBFSU5BX0ZBTFNF
OworICAgIHByaXYtPmNzcGFjZSA9IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4ODsgLy8gVE9ETzog
ZGV0ZWN0IGl0LgorCisgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQobywgcHJpdik7Cisg
ICAgX3BhcmVudF9zYy5hZGQobyk7CisKKyAgICBwcml2LT5jb250ZW50c19jbGlwcGVyID0gZXZh
c19vYmplY3RfcmVjdGFuZ2xlX2FkZCgKKyAgICAgICAgZXZhc19vYmplY3RfZXZhc19nZXQobykp
OworICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBlciwgMCwgMCk7Cisg
ICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQpOworICAg
IGV2YXNfb2JqZWN0X2NvbG9yX3NldChwcml2LT5jb250ZW50c19jbGlwcGVyLCAyNTUsIDI1NSwg
MjU1LCAyNTUpOworICAgIGV2YXNfb2JqZWN0X3Nob3cocHJpdi0+Y29udGVudHNfY2xpcHBlcik7
CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChwcml2LT5jb250ZW50c19jbGlwcGVy
LCBvKTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRl
KHByaXYsIE5VTEwpOworICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCAw
LCAwKTsKKyAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+YmFzZS5jbGlwcGVyLCAwLCAwKTsK
KyAgICBldmFzX29iamVjdF9jbGlwX3NldChwcml2LT5jb250ZW50c19jbGlwcGVyLCBwcml2LT5i
YXNlLmNsaXBwZXIpOworCisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCisgICAgcHJpdi0+c2lnX3Vz
ciA9IGVjb3JlX2V2ZW50X2hhbmRsZXJfYWRkCisgICAgICAgIChFQ09SRV9FVkVOVF9TSUdOQUxf
VVNFUiwgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NpZ191c3IsIHByaXYpOworI2VuZGlmCit9
CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWwoRXZhc19P
YmplY3QgKm8pCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAg
REJHKCJvPSVwIiwgbyk7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisKKyAgICB0
dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgp
OworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYSh0dWMpOworCisgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHByaXYpOworCisgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKKyAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0b3AocHJpdik7CisgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKHByaXYpOworCisjaWZkZWYgREVC
VUdfTUVNX0xFQUtTCisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21lbV9kYmcocHJpdik7
CisgICAgaWYgKHByaXYtPnNpZ191c3IpCisgICAgICAgIHByaXYtPnNpZ191c3IgPSBlY29yZV9l
dmVudF9oYW5kbGVyX2RlbChwcml2LT5zaWdfdXNyKTsKKyNlbmRpZgorCisgICAgZXdrX3RpbGVf
bWF0cml4X2ZyZWUocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9t
ZW1iZXJfZGVsKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X2RlbChw
cml2LT5jb250ZW50c19jbGlwcGVyKTsKKworICAgIF9wYXJlbnRfc2MuZGVsKG8pOworCisjaWZk
ZWYgREVCVUdfTUVNX0xFQUtTCisgICAgcHJpbnRmKCJcbklNUE9SVEFOVDogVElMRUQgQkFDS0lO
RyBTVE9SRSBERUxFVEVEIChtYXkgYmUgcmVhbCBsZWFrcylcbiIpOworICAgIGV3a190aWxlX2Fj
Y291bnRpbmdfZGJnKCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3NtYXJ0X21vdmUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZhc19D
b29yZCB5KQoreworICAgIERCRygibz0lcCwgbmV3IHBvczogJWR4JWQiLCBvLCB4LCB5KTsKKwor
ICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisgICAgaWYgKHByaXYtPmNo
YW5nZWQucG9zKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocHJpdi0+dmlldy54ID09IHgg
JiYgcHJpdi0+dmlldy55ID09IHkpCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYtPmNoYW5n
ZWQucG9zID0gRUlOQV9UUlVFOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2Vk
KHByaXYpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRf
cmVzaXplKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3sKKyAg
ICBEQkcoIm89JXAsIG5ldyBzaXplOiAlZHglZCIsIG8sIHcsIGgpOworCisgICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBpZiAocHJpdi0+Y2hhbmdlZC5zaXplKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAocHJpdi0+dmlldy53ID09IHcgJiYgcHJpdi0+dmll
dy5oID09IGgpCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJ
TkFfVFJVRTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKK30K
Kworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB3LCBFdmFzX0Nv
b3JkIGgsIEV2YXNfQ29vcmQgdHcsIEV2YXNfQ29vcmQgdGgpCit7CisgICAgbG9uZyBjb2xzLCBy
b3dzLCBvbGRfcm93cywgb2xkX2NvbHM7CisgICAgSU5GKCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQi
LCBwcml2LT5zZWxmLCB3LCBoKTsKKworICAgIGNvbHMgPSAyICsgKGludCljZWlsKChmbG9hdCl3
IC8gKGZsb2F0KXR3KTsKKyAgICByb3dzID0gMiArIChpbnQpY2VpbCgoZmxvYXQpaCAvIChmbG9h
dCl0aCk7CisKKyAgICBJTkYoIm89JXAgbmV3IGdyaWQgc2l6ZSBjb2xzOiAlbGQsIHJvd3M6ICVs
ZCwgd2FzICVsZCwgJWxkIiwKKyAgICAgICAgcHJpdi0+c2VsZiwgY29scywgcm93cywgcHJpdi0+
dmlldy5jb2xzLCBwcml2LT52aWV3LnJvd3MpOworCisgICAgaWYgKHByaXYtPnZpZXcuY29scyA9
PSBjb2xzICYmIHByaXYtPnZpZXcucm93cyA9PSByb3dzKQorICAgICAgICByZXR1cm47CisKKyAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3JlbW92ZV9hc3Nv
Y2lhdGVkKHByaXYpOworCisgICAgb2xkX2NvbHMgPSBwcml2LT52aWV3LmNvbHM7CisgICAgb2xk
X3Jvd3MgPSBwcml2LT52aWV3LnJvd3M7CisKKyAgICBpZiAocm93cyA8IG9sZF9yb3dzKSB7Cisg
ICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOworICAgICAgICBzdGFydCA9IHByaXYt
PnZpZXcuaXRlbXMgKyByb3dzOworICAgICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xk
X3Jvd3M7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2Vf
ZGVsKHByaXYsIHN0YXJ0LCBlbmQpOworICAgIH0KKyAgICBSRUFMTE9DX09SX09PTV9SRVQocHJp
di0+dmlldy5pdGVtcywgc2l6ZW9mKEVpbmFfSW5saXN0KikgKiByb3dzKTsKKyAgICBwcml2LT52
aWV3LnJvd3MgPSByb3dzOworICAgIHByaXYtPnZpZXcuY29scyA9IGNvbHM7CisgICAgaWYgKHJv
d3MgPiBvbGRfcm93cykgeworICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKKyAg
ICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7CisgICAgICAgIGVuZCA9
IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOworICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0
YXJ0KyspIHsKKyAgICAgICAgICAgIEVpbmFfQm9vbCByOworICAgICAgICAgICAgKnN0YXJ0ID0g
TlVMTDsKKyAgICAgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xz
X2VuZF9hZGQKKyAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIDAsIGNvbHMpOworICAgICAg
ICAgICAgaWYgKCFyKSB7CisgICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxv
Y2F0ZSAlbGQgY29sdW1ucyIsIGNvbHMpOworICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsCisgICAgICAgICAgICAgICAgICAgIChwcml2
LCBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3MsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBw
cml2LT52aWV3LnJvd3MgPSBvbGRfcm93czsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY29scyAhPSBvbGRfY29scykg
eworICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKKyAgICAgICAgaW50IHRvZG8g
PSBjb2xzIC0gb2xkX2NvbHM7CisgICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKKyAg
ICAgICAgZW5kID0gc3RhcnQgKyBNSU4ob2xkX3Jvd3MsIHJvd3MpOworICAgICAgICBpZiAodG9k
byA+IDApIHsKKyAgICAgICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgeworICAg
ICAgICAgICAgICAgIEVpbmFfQm9vbCByOworICAgICAgICAgICAgICAgIHIgPSBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQKKyAgICAgICAgICAgICAgICAgICAgKHBy
aXYsIHN0YXJ0LCBvbGRfY29scywgdG9kbyk7CisgICAgICAgICAgICAgICAgaWYgKCFyKSB7Cisg
ICAgICAgICAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgY29sdW1u
cyEiLCB0b2RvKTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHN0YXJ0LS07IHN0YXJ0ID49
IHByaXYtPnZpZXcuaXRlbXM7IHN0YXJ0LS0pCisgICAgICAgICAgICAgICAgICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgc3RhcnQsIHRvZG8p
OworICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IG9sZF9yb3dzKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRfcm93czsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5k
X2RlbChwcml2LCBzdGFydCwgdG9kbyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmICh0b2RvIDwgMCkgeworICAgICAgICAgICAgdG9kbyA9IC10b2RvOwor
ICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKQorICAgICAgICAgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBzdGFydCwg
dG9kbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
ZmlsbF9yZW5kZXJlcnMocHJpdik7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9zbWFydF9jYWxjdWxhdGVfc2l6ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3sKKyAgICBldmFzX29iamVjdF9y
ZXNpemUocHJpdi0+YmFzZS5jbGlwcGVyLCB3LCBoKTsKKworICAgIHByaXYtPnZpZXcudyA9IHc7
CisgICAgcHJpdi0+dmlldy5oID0gaDsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9y
ZWNhbGNfcmVuZGVyZXJzKAorICAgICAgICBwcml2LCB3LCBoLCBwcml2LT52aWV3LnRpbGUudywg
cHJpdi0+dmlldy50aWxlLmgpOworfQorCisvLyBUT0RPOiByZW1vdmUgbWUgbGF0ZXIuCitzdGF0
aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRWluYV9Jbmxpc3QgKipz
dGFydCwgKiplbmQ7CisgICAgcHJpbnRmKCJ0aWxlcz0lMmxkLCUybGQgIG1vZGVsPSUybGQsJTJs
ZCBbJWR4JWRdIGJhc2U9JSszbGQsJSs0bGQgb2Zmc2V0PSUrNGQsJSs0ZCBvbGQ9JSs0ZCwlKzRk
IGJhc2U9JSszZCwlKzNkXG4iLAorICAgICAgICAgICBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZp
ZXcucm93cywKKyAgICAgICAgICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMsIHByaXYtPm1vZGVsLmN1
ci5yb3dzLAorICAgICAgICAgICBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0
LAorICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCwgcHJpdi0+bW9kZWwuYmFzZS5yb3cs
CisgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5j
dXIueSwKKyAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLngsIHByaXYtPnZpZXcub2Zm
c2V0Lm9sZC55LAorICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngsIHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueSk7CisKKyAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAg
ZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93czsKKyAgICBmb3IgKDsgc3Rh
cnQgPCBlbmQ7IHN0YXJ0KyspIHsKKyAgICAgICAgY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSAqaXQ7CisKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqc3RhcnQsIGl0KSB7
CisgICAgICAgICAgICBwcmludGYoIiAlKzRkLCUrNGQgIiwgaXQtPmdlb21ldHJ5LngsIGl0LT5n
ZW9tZXRyeS55KTsKKworICAgICAgICAgICAgaWYgKCFpdC0+dGlsZSkKKyAgICAgICAgICAgICAg
ICBwcmludGYoIiAgICAgICAgICAgIDsiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBwcmludGYoIiU4cCAlbHUsJWx1OyIsIGl0LT50aWxlLCBpdC0+dGlsZS0+Y29sLCBpdC0+
dGlsZS0+cm93KTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIlxuIik7CisgICAgfQorICAg
IHByaW50ZigiLS0tXG4iKTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIE1vdmUgdG9wIHJv
dyBkb3duIGFzIGxhc3QuCisgKgorICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUg
c2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgdG9wIHRoYXQKKyAqIHdlbnQgb3V0IG9mIHNjcmVlbiBp
cyBub3cgYXQgYm90dG9tIGFuZCBmaWxsZWQgd2l0aCBuZXcgbW9kZWwgaXRlbXMuCisgKgorICog
VGhpcyBpcyB3b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMgc21hbGxlciB0aGFuIEBjCisgKiBw
cml2LT52aWV3LnJvd3MsIGFmdGVyIHRoYXQgb25lIGlzIHJlZmlsbGluZyB0aGUgd2hvbGUgbWF0
cml4IHNvIGl0CisgKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBmdWxsIHJlZmlsbC4KKyAqCisgKiBA
cGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCisg
Ki8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3Jk
IHksIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbGFzdF9yb3cgPSBw
cml2LT52aWV3LnJvd3MgLSAxOworICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUu
dzsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisgICAgRXZhc19Db29y
ZCBvZmZfeSA9IChwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgJSB0aCkgLSB0aDsKKyAgICBFdmFz
X0Nvb3JkIG95ID0geSArIChsYXN0X3JvdyAtIGNvdW50ICsgMSkgKiB0aCArIG9mZl95OworICAg
IEVpbmFfSW5saXN0ICoqaXRyX3N0YXJ0LCAqKml0cl9lbmQ7CisKKyAgICBpdHJfc3RhcnQgPSBw
cml2LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHJfc3RhcnQgKyBsYXN0X3JvdzsKKwor
ICAgIGZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKyAgICAgICAgRWluYV9Jbmxpc3QgKipp
dHI7CisgICAgICAgIEVpbmFfSW5saXN0ICp0bXAgPSAqaXRyX3N0YXJ0OworICAgICAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXZhc19Db29yZCBveCA9IHgg
KyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgICAgIGludCBjID0gMDsKKworICAgICAg
ICBmb3IgKGl0ciA9IGl0cl9zdGFydDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspCisgICAgICAgICAg
ICAqaXRyID0gKihpdHIgKyAxKTsKKyAgICAgICAgKml0ciA9IHRtcDsKKworICAgICAgICBwcml2
LT5tb2RlbC5iYXNlLnJvdysrOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKHRtcCwgaXQp
IHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94
LCBveSk7CisgICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMsIGxhc3Rfcm93KTsKKyAgICAgICAgICAg
IGMrKzsKKyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9CisgICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS55ID0gb2ZmX3k7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBNb3Zl
IGJvdHRvbSByb3cgdXAgYXMgZmlyc3QuCisgKgorICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1
YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgYm90dG9tIHRoYXQKKyAqIHdlbnQgb3V0
IG9mIHNjcmVlbiBpcyBub3cgYXQgdG9wIGFuZCBmaWxsZWQgd2l0aCBuZXcgbW9kZWwgaXRlbXMu
CisgKgorICogVGhpcyBpcyB3b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMgc21hbGxlciB0aGFu
IEBjCisgKiBwcml2LT52aWV3LnJvd3MsIGFmdGVyIHRoYXQgb25lIGlzIHJlZmlsbGluZyB0aGUg
d2hvbGUgbWF0cml4IHNvIGl0CisgKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBmdWxsIHJlZmlsbC4K
KyAqCisgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHBy
b2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dy
YXBfZG93bihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIEV2YXNfQ29vcmQgdHcg
PSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxl
Lmg7CisgICAgRXZhc19Db29yZCBvZmZfeSA9IChwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgJSB0
aCkgLSB0aDsKKyAgICBFdmFzX0Nvb3JkIG95ID0geSArIG9mZl95ICsgKGNvdW50IC0gMSkgKiB0
aDsKKyAgICBFaW5hX0lubGlzdCAqKml0cl9zdGFydCwgKippdHJfZW5kOworCisgICAgaXRyX3N0
YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93cyAtIDE7CisgICAgaXRyX2Vu
ZCA9IHByaXYtPnZpZXcuaXRlbXM7CisKKyAgICBmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKSB7
CisgICAgICAgIEVpbmFfSW5saXN0ICoqaXRyOworICAgICAgICBFaW5hX0lubGlzdCAqdG1wID0g
Kml0cl9zdGFydDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7Cisg
ICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworICAg
ICAgICBpbnQgYyA9IDA7CisKKyAgICAgICAgZm9yIChpdHIgPSBpdHJfc3RhcnQ7IGl0ciA+IGl0
cl9lbmQ7IGl0ci0tKQorICAgICAgICAgICAgKml0ciA9ICooaXRyIC0gMSk7CisgICAgICAgICpp
dHIgPSB0bXA7CisKKyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3ctLTsKKyAgICAgICAgRUlO
QV9JTkxJU1RfRk9SRUFDSCh0bXAsIGl0KSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAgICAgICAgICAgb3ggKz0gdHc7Cisg
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBj
LCAwKTsKKyAgICAgICAgICAgIGMrKzsKKyAgICAgICAgfQorICAgICAgICBveSAtPSB0aDsKKyAg
ICB9CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2ZmX3k7Cit9CisKKy8qKgorICog
QGludGVybmFsCisgKiBNb3ZlIGxlZnQtbW9zdCAoZmlyc3QpIGNvbHVtbiByaWdodCBhcyBsYXN0
IChyaWdodC1tb3N0KS4KKyAqCisgKiBUaGUgZmluYWwgcmVzdWx0IGlzIHZpc3VhbGx5IHRoZSBz
YW1lLCBidXQgbG9naWNhbGx5IHRoZSBmaXJzdCBjb2wgdGhhdAorICogd2VudCBvdXQgb2Ygc2Ny
ZWVuIGlzIG5vdyBhdCBsYXN0IGFuZCBmaWxsZWQgd2l0aCBuZXcgbW9kZWwgaXRlbXMuCisgKgor
ICogVGhpcyBpcyB3b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMgc21hbGxlciB0aGFuIEBjCisg
KiBwcml2LT52aWV3LmNvbHMsIGFmdGVyIHRoYXQgb25lIGlzIHJlZmlsbGluZyB0aGUgd2hvbGUg
bWF0cml4IHNvIGl0CisgKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBmdWxsIHJlZmlsbC4KKyAqCisg
KiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHByb2Nlc3Mu
CisgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVm
dChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNf
Q29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIHVuc2lnbmVkIGludCByLCBsYXN0
X2NvbCA9IHByaXYtPnZpZXcuY29scyAtIDE7CisgICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZp
ZXcudGlsZS53OworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAgICBF
dmFzX0Nvb3JkIG9mZl94ID0gKHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAlIHR3KSAtIHR3Owor
ICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OworICAgIEVp
bmFfSW5saXN0ICoqaXRyOworICAgIEVpbmFfSW5saXN0ICoqaXRyX2VuZDsKKworICAgIGl0ciA9
IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsK
KyAgICByID0gMDsKKworICAgIHByaXYtPm1vZGVsLmJhc2UuY29sICs9IGNvdW50OworCisgICAg
Zm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrLCByKyspIHsKKyAgICAgICAgRXZhc19Db29yZCBv
eCA9IHggKyAobGFzdF9jb2wgLSBjb3VudCArIDEpICogdHcgKyBvZmZfeDsKKyAgICAgICAgdW5z
aWduZWQgaW50IGksIGMgPSBsYXN0X2NvbCAtIGNvdW50ICsgMTsKKworICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgY291bnQ7IGkrKywgYysrLCBveCArPSB0dykgeworICAgICAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgICAgICBpdCA9IEVJTkFfSU5MSVNU
X0NPTlRBSU5FUl9HRVQoKml0ciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CisgICAg
ICAgICAgICAqaXRyID0gZWluYV9pbmxpc3RfZGVtb3RlKCppdHIsICppdHIpOworCisgICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywg
cik7CisgICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorCisgICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBNb3Zl
IHJpZ2h0LW1vc3QgKGxhc3QpIGNvbHVtbiBsZWZ0IGFzIGZpcnN0IChsZWZ0LW1vc3QpLgorICoK
KyAqIFRoZSBmaW5hbCByZXN1bHQgaXMgdmlzdWFsbHkgdGhlIHNhbWUsIGJ1dCBsb2dpY2FsbHkg
dGhlIGxhc3QgY29sIHRoYXQKKyAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgZmlyc3Qg
YW5kIGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVtcy4KKyAqCisgKiBUaGlzIGlzIHdvcnRoIGp1
c3Qgd2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRoYW4gQGMKKyAqIHByaXYtPnZpZXcuY29scywg
YWZ0ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRoZSB3aG9sZSBtYXRyaXggc28gaXQKKyAqIGlz
IGJldHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxsLgorICoKKyAqIEBwYXJhbSBjb3VudCB0aGUg
bnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4KKyAqLworc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9yaWdodChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQg
aW50IGNvdW50KQoreworICAgIHVuc2lnbmVkIGludCByOworICAgIEV2YXNfQ29vcmQgdHcgPSBw
cml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7
CisgICAgRXZhc19Db29yZCBvZmZfeCA9IChwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggJSB0dykg
LSB0dzsKKyAgICBFdmFzX0Nvb3JkIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsK
KyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworCisgICAgaXRyID0gcHJpdi0+dmll
dy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOworICAgIHIgPSAw
OworCisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgLT0gY291bnQ7CisKKyAgICBmb3IgKDsgaXRy
IDwgaXRyX2VuZDsgaXRyKyssIHIrKykgeworICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIChj
b3VudCAtIDEpICogdHcgKyBvZmZfeDsKKyAgICAgICAgdW5zaWduZWQgaW50IGksIGMgPSBjb3Vu
dCAtIDE7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGMtLSwgb3ggLT0g
dHcpIHsKKyAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAg
ICAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCgqaXRyKS0+bGFzdCwgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CisgICAgICAgICAgICAqaXRyID0gZWluYV9pbmxp
c3RfcHJvbW90ZSgqaXRyLCAoKml0ciktPmxhc3QpOworCisgICAgICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcik7CisgICAgICAgIH0K
KyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorCisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54
ID0gb2ZmX3g7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X3JlZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgaW50IHN0ZXBfeCwgaW50IHN0ZXBfeSkKK3sKKyAgICBFaW5hX0lubGlz
dCAqKml0ciwgKippdHJfZW5kOworICAgIEV2YXNfQ29vcmQgYmFzZV9veCwgb3ksIHR3LCB0aDsK
KyAgICB1bnNpZ25lZCBpbnQgcjsKKworICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5j
bGlwcGVyLCB4LCB5KTsKKworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgdGggPSBw
cml2LT52aWV3LnRpbGUuaDsKKworICAgIGJhc2Vfb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS54OworICAgIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKKworICAgIGl0
ciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93
czsKKyAgICByID0gMDsKKworICAgIHByaXYtPm1vZGVsLmJhc2UuY29sIC09IHN0ZXBfeDsKKyAg
ICBwcml2LT5tb2RlbC5iYXNlLnJvdyAtPSBzdGVwX3k7CisKKyAgICBmb3IgKDsgaXRyIDwgaXRy
X2VuZDsgaXRyKyssIHIrKykgeworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
ICppdDsKKyAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7CisgICAgICAgIHVuc2lnbmVk
IGludCBjID0gMDsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgeworICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywg
cik7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBv
eCwgb3kpOworICAgICAgICAgICAgYysrOworICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgICAg
IH0KKyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7CisgICAgRWluYV9Jbmxpc3Qg
KippdHIsICoqaXRyX2VuZDsKKyAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7CisK
KyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgeCwgeSk7CisKKyAgICB0
dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisKKyAg
ICBiYXNlX294ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKKyAgICBveSA9IHkgKyBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CisKKyAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOwor
ICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisgICAgZm9yICg7IGl0ciA8IGl0
cl9lbmQ7IGl0cisrKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0
OworICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKKyAgICAgICAgRUlOQV9JTkxJU1Rf
Rk9SRUFDSCgqaXRyLCBpdCkgeworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAgIG94ICs9IHR3OworICAgICAgICB9
CisgICAgICAgIG95ICs9IHRoOworICAgIH0KK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFdmFzX0Nvb3JkIGR4ID0gcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueDsKKyAgICBFdmFzX0Nvb3JkIGR5
ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueTsKKyAg
ICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBpbnQgc3RlcF95LCBzdGVwX3g7CisKKyAgICBJTkYo
Im89JXAsIG9mZnNldDogJSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAorICAgICAgICBwcml2LT5z
ZWxmLCBkeCwgZHksIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5j
dXIueSk7CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIHRoID0gcHJpdi0+dmll
dy50aWxlLmg7CisKKyAgICBzdGVwX3ggPSAoZHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngg
KyB0dykgLyB0dzsKKyAgICBzdGVwX3kgPSAoZHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkg
KyB0aCkgLyB0aDsKKworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLng7CisgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueTsKKyAgICBldmFzX29iamVjdF9tb3ZlKAorICAgICAgICBwcml2LT5jb250ZW50
c19jbGlwcGVyLAorICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCArIHByaXYtPnZpZXcu
eCwKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBwcml2LT52aWV3LnkpOworCisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGR4IC0gc3RlcF94ICogdHc7CisgICAgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGR5IC0gc3RlcF95ICogdGg7CisKKyAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwKKyAgICAgICAgKHByaXYsIHByaXYtPnZpZXcu
eCwgcHJpdi0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0KEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQoreworICAg
IEV2YXNfQ29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIHByaXYtPnZpZXcub2Zm
c2V0Lm9sZC54OworICAgIEV2YXNfQ29vcmQgZHkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueSAt
IHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55OworICAgIEV2YXNfQ29vcmQgdHcsIHRoOworICAgIGlu
dCBzdGVwX3ksIHN0ZXBfeDsKKworICAgIElORigibz0lcCwgb2Zmc2V0OiAlKzRkLCAlKzRkICgl
KzRkLCAlKzRkKSIsCisgICAgICAgIHByaXYtPnNlbGYsIGR4LCBkeSwgcHJpdi0+dmlldy5vZmZz
ZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KTsKKworICAgIGlmICghZHggJiYgIWR5
KQorICAgICAgICByZXR1cm47CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIHRo
ID0gcHJpdi0+dmlldy50aWxlLmg7CisKKyAgICBzdGVwX3ggPSAoZHggKyBwcml2LT52aWV3Lm9m
ZnNldC5iYXNlLnggKyB0dykgLyB0dzsKKyAgICBzdGVwX3kgPSAoZHkgKyBwcml2LT52aWV3Lm9m
ZnNldC5iYXNlLnkgKyB0aCkgLyB0aDsKKworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0g
cHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CisgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueTsKKyAgICBldmFzX29iamVjdF9tb3ZlKAorICAgICAgICBw
cml2LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAr
IHByaXYtPnZpZXcueCwKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBwcml2LT52
aWV3LnkpOworCisgICAgaWYgKChzdGVwX3ggPCAwICYmIHN0ZXBfeCA8PSAtcHJpdi0+dmlldy5j
b2xzKQorICAgICAgICB8fCAoc3RlcF94ID4gMCAmJiBzdGVwX3ggPj0gcHJpdi0+dmlldy5jb2xz
KQorICAgICAgICB8fCAoc3RlcF95IDwgMCAmJiBzdGVwX3kgPD0gLXByaXYtPnZpZXcucm93cykK
KyAgICAgICAgfHwgKHN0ZXBfeSA+IDAgJiYgc3RlcF95ID49IHByaXYtPnZpZXcucm93cykpIHsK
KworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZHggLSBzdGVwX3ggKiB0dzsK
KyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGR5IC0gc3RlcF95ICogdGg7CisK
KyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcmVmaWxsCisgICAgICAgICAg
ICAocHJpdiwgcHJpdi0+dmlldy54LCBwcml2LT52aWV3LnksIHN0ZXBfeCwgc3RlcF95KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArPSBk
eDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHk7CisKKyAgICBpZiAoc3RlcF95
IDwgMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF91cChwcml2
LCB4LCB5LCAtc3RlcF95KTsKKyAgICBlbHNlIGlmIChzdGVwX3kgPiAwKQorICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2Rvd24ocHJpdiwgeCwgeSwgc3RlcF95KTsK
KworICAgIGlmIChzdGVwX3ggPCAwKQorICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld193cmFwX2xlZnQocHJpdiwgeCwgeSwgLXN0ZXBfeCk7CisgICAgZWxzZSBpZiAoc3RlcF94
ID4gMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9yaWdodChw
cml2LCB4LCB5LCBzdGVwX3gpOworCisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
cG9zX2FwcGx5KHByaXYsIHgsIHkpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3BvcyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3sKKyAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkocHJpdiwgeCwgeSk7CisgICAgcHJpdi0+dmlldy54
ID0geDsKKyAgICBwcml2LT52aWV3LnkgPSB5OworICAgIGV2YXNfb2JqZWN0X21vdmUoCisgICAg
ICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci54ICsgcHJpdi0+dmlldy54LAorICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIHBy
aXYtPnZpZXcueSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9m
aWxsX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAg
IEVpbmFfSW5saXN0ICppdDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdGVt
OworICAgIGludCBpLCBqOworCisgICAgZm9yIChpID0gMDsgaSA8IHByaXYtPnZpZXcucm93czsg
aSsrKSB7CisgICAgICAgIGl0ID0gcHJpdi0+dmlldy5pdGVtc1tpXTsKKyAgICAgICAgaiA9IDA7
CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goaXQsIGl0ZW0pCisgICAgICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0ZW0sIGorKywgaSk7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3Vs
YXRlKEV2YXNfT2JqZWN0ICpvKQoreworICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKworICAg
IGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChvLCAmeCwgJnksICZ3LCAmaCk7CisgICAgREJHKCJv
PSVwIGF0ICVkLCVkICsgJWR4JWQiLCBvLCB4LCB5LCB3LCBoKTsKKworICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisgICAgcHJpdi0+Y2hhbmdlZC5hbnkgPSBFSU5BX0ZB
TFNFOworCisgICAgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShwcml2LT5tb2RlbC5tYXRyaXgpOwor
CisgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCAmJiBwcml2LT5jaGFuZ2VkLm1vZGVsKSB7
CisgICAgICAgIGxvbmcgY29scywgcm93czsKKworICAgICAgICBjb2xzID0gcHJpdi0+bW9kZWwu
d2lkdGggLyBwcml2LT52aWV3LnRpbGUudyArIDE7CisgICAgICAgIHJvd3MgPSBwcml2LT5tb2Rl
bC5oZWlnaHQgLyBwcml2LT52aWV3LnRpbGUuaCArIDE7CisKKyAgICAgICAgcHJpdi0+bW9kZWwu
b2xkLmNvbHMgPSBwcml2LT5tb2RlbC5jdXIuY29sczsKKyAgICAgICAgcHJpdi0+bW9kZWwub2xk
LnJvd3MgPSBwcml2LT5tb2RlbC5jdXIucm93czsKKyAgICAgICAgcHJpdi0+bW9kZWwuY3VyLmNv
bHMgPSBjb2xzOworICAgICAgICBwcml2LT5tb2RlbC5jdXIucm93cyA9IHJvd3M7CisgICAgICAg
IGlmIChwcml2LT5tb2RlbC5vbGQuY29scyA+IGNvbHMpCisgICAgICAgICAgICBjb2xzID0gcHJp
di0+bW9kZWwub2xkLmNvbHM7CisgICAgICAgIGlmIChwcml2LT5tb2RlbC5vbGQucm93cyA+IHJv
d3MpCisgICAgICAgICAgICByb3dzID0gcHJpdi0+bW9kZWwub2xkLnJvd3M7CisgICAgICAgIGV3
a190aWxlX21hdHJpeF9yZXNpemUocHJpdi0+bW9kZWwubWF0cml4LCBjb2xzLCByb3dzKTsKKyAg
ICB9CisKKyAgICBpZiAocHJpdi0+Y2hhbmdlZC5wb3MgJiYgKHByaXYtPnZpZXcueCAhPSB4IHx8
IHByaXYtPnZpZXcueSAhPSB5KSkgeworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c21hcnRfY2FsY3VsYXRlX3Bvcyhwcml2LCB4LCB5KTsKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5w
b3MgPSBFSU5BX0ZBTFNFOworICAgIH0gZWxzZSBpZiAocHJpdi0+Y2hhbmdlZC5vZmZzZXQpIHsK
KyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQo
cHJpdiwgeCwgeSk7CisgICAgICAgIHByaXYtPmNoYW5nZWQub2Zmc2V0ID0gRUlOQV9GQUxTRTsK
KyAgICB9CisKKyAgICBpZiAocHJpdi0+Y2hhbmdlZC5zaXplKSB7CisgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfc2l6ZShwcml2LCB3LCBoKTsKKyAgICAg
ICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAgICBpZiAoIXBy
aXYtPnJlbmRlci5zdXNwZW5kICYmIHByaXYtPmNoYW5nZWQubW9kZWwpIHsKKyAgICAgICAgRWlu
YV9SZWN0YW5nbGUgcmVjdDsKKyAgICAgICAgcmVjdC54ID0gMDsKKyAgICAgICAgcmVjdC55ID0g
MDsKKyAgICAgICAgcmVjdC53ID0gcHJpdi0+bW9kZWwud2lkdGg7CisgICAgICAgIHJlY3QuaCA9
IHByaXYtPm1vZGVsLmhlaWdodDsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Zp
bGxfcmVuZGVyZXJzKHByaXYpOworICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVzaXplKHByaXYt
Pm1vZGVsLm1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1
ci5jb2xzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuY3VyLnJvd3Mp
OworICAgICAgICBwcml2LT5jaGFuZ2VkLm1vZGVsID0gRUlOQV9GQUxTRTsKKyAgICAgICAgZXZh
c19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKKyAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2Uo
cHJpdik7CisKKyAgICAgICAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNzIGFueSBpbXBvcnRh
bnQgcmVwYWludCBieQorICAgICAgICAgKiByZXBhaW50aW5nIHRoZSB3aG9sZSB2aWV3cG9ydCAq
LworICAgICAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSByID0KKyAgICAgICAgICAgIHsgMCwgMCwg
cHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCB9OworICAgICAgICBld2tfdGls
ZV9tYXRyaXhfdXBkYXRlKHByaXYtPm1vZGVsLm1hdHJpeCwgJnIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLnpvb20pOworICAgIH0KKworICAgIGV3a190
aWxlX21hdHJpeF90aGF3KHByaXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOworCisgICAgaWYgKHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueCA+PSAwCisgICAgICAgIHx8IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA8
PSAtMiAqIHByaXYtPnZpZXcudGlsZS53CisgICAgICAgIHx8IHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueSA+PSAwCisgICAgICAgIHx8IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA8PSAtMiAqIHBy
aXYtPnZpZXcudGlsZS5oKQorICAgICAgICBFUlIoImluY29ycmVjdCBiYXNlIG9mZnNldCAlKzRk
LCUrNGQsIHRpbGU9JWR4JWQsIGN1cj0lKzRkLCUrNGRcbiIsCisgICAgICAgICAgICBwcml2LT52
aWV3Lm9mZnNldC5iYXNlLngsIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSwKKyAgICAgICAgICAg
IHByaXYtPnZpZXcudGlsZS53LCBwcml2LT52aWV3LnRpbGUuaCwKKyAgICAgICAgICAgIHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7CisKK30KKworRXZh
c19PYmplY3QgKmV3a190aWxlZF9iYWNraW5nX3N0b3JlX2FkZChFdmFzICplKQoreworICAgIHN0
YXRpYyBFdmFzX1NtYXJ0ICpzbWFydCA9IE5VTEw7CisKKyAgICBpZiAoX2V3a190aWxlZF9sb2df
ZG9tIDwgMCkKKyAgICAgICAgX2V3a190aWxlZF9sb2dfZG9tID0gZWluYV9sb2dfZG9tYWluX3Jl
Z2lzdGVyKCJFd2tfVGlsZWRfQmFja2luZ19TdG9yZSIsIE5VTEwpOworCisgICAgaWYgKCFzbWFy
dCkgeworICAgICAgICBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBzYyA9CisgICAgICAgICAgICBF
VkFTX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKCJFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZSIpOworCisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NsaXBwZWRfc21hcnRfc2V0KCZzYyk7
CisgICAgICAgIF9wYXJlbnRfc2MgPSBzYzsKKworICAgICAgICBzYy5hZGQgPSBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkOworICAgICAgICBzYy5kZWwgPSBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfc21hcnRfZGVsOworICAgICAgICBzYy5yZXNpemUgPSBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfc21hcnRfcmVzaXplOworICAgICAgICBzYy5tb3ZlID0gX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X21vdmU7CisgICAgICAgIHNjLmNhbGN1bGF0ZSA9IF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGU7CisgICAgICAgIHNjLm1lbWJlcl9hZGQg
PSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2FkZDsKKyAgICAgICAgc2Mu
bWVtYmVyX2RlbCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfZGVsOwor
CisgICAgICAgIHNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJnNjKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRfYWRkKGUsIHNtYXJ0KTsKK30KKwordm9pZCBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXJfY2Jfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jv
b2wgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICph
cmVhKSwgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihjYik7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgcHJpdi0+
cmVuZGVyLmNiID0gY2I7CisgICAgcHJpdi0+cmVuZGVyLmRhdGEgPSAodm9pZCopZGF0YTsKK30K
KworRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX3Vu
dXNlZF9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCit7CisgICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4obywgcHJpdiwgTlVMTCk7CisgICAgcmV0dXJuIGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Cit9CisKK3ZvaWQgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2KTsKKworICAgIGlmIChld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2
LT5tb2RlbC5tYXRyaXgpID09IHR1YykKKyAgICAgICAgcmV0dXJuOworCisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUocHJpdiwgdHVjKTsKK30KKworc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0
X3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nv
b3JkIHgsIEV2YXNfQ29vcmQgeSkKK3sKKyAgICAvKiBUT0RPOiBjaGVjayBvZmZzZXQgZ28gb3V0
IG9mIGJvdW5kcywgY2xhbXAgKi8KKyAgICBpZiAocHJpdi0+cmVuZGVyLmRpc2FibGVkKQorICAg
ICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ID0g
eDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSA9IHk7CisKKyAgICBwcml2LT5jaGFuZ2Vk
Lm9mZnNldCA9IEVJTkFfVFJVRTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdl
ZChwcml2KTsKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK0VpbmFfQm9vbCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0KEV2YXNfT2JqZWN0ICpvLCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3sKKyAgICBEQkcoIm89JXAsIHg9JWQsIHk9JWQi
LCBvLCB4LCB5KTsKKworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFf
RkFMU0UpOworICAgIGlmICh4ID09IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICYmIHkgPT0gcHJp
di0+dmlldy5vZmZzZXQuY3VyLnkpCisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisKKyAgICBy
ZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXRfaW50
ZXJuYWwocHJpdiwgeCwgeSk7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zY3JvbGxfZnVsbF9vZmZzZXRfYWRkKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIGR4LCBF
dmFzX0Nvb3JkIGR5KQoreworICAgIERCRygibz0lcCwgZHg9JWQsIGR5PSVkIiwgbywgZHgsIGR5
KTsKKworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOwor
ICAgIGlmICghZHggJiYgIWR5KQorICAgICAgICByZXR1cm4gRUlOQV9UUlVFOworCisgICAgcmV0
dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVy
bmFsCisgICAgICAgIChwcml2LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCArIGR4LCBwcml2LT52
aWV3Lm9mZnNldC5jdXIueSArIGR5KTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHJpdiwgZmxvYXQgKnpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3ksIEV2
YXNfQ29vcmQgKm9mZngsIEV2YXNfQ29vcmQgKm9mZnkpCit7CisgICAgKm9mZnggPSBwcml2LT52
aWV3Lm9mZnNldC5jdXIueDsKKyAgICAqb2ZmeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55Owor
CisgICAgaWYgKGZhYnNmKHByaXYtPnZpZXcudGlsZS56b29tIC0gKnpvb20pIDwgWk9PTV9TVEVQ
X01JTikgeworICAgICAgICBEQkcoImlnbm9yZWQgYXMgem9vbSBkaWZmZXJlbmNlIGlzIDwgJWY6
ICVmIiwKKyAgICAgICAgICAgIChkb3VibGUpWk9PTV9TVEVQX01JTiwgZmFic2YocHJpdi0+dmll
dy50aWxlLnpvb20gLSAqem9vbSkpOworICAgICAgICByZXR1cm4gRUlOQV9UUlVFOworICAgIH0K
KworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2go
cHJpdik7CisgICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgdHcgPSBUSUxFX1NJWkVfQVRfWk9P
TShUSUxFX1csICp6b29tKTsKKyAgICB0dyA9ICh0dyA+PiAxKSA8PCAxOworICAgICp6b29tID0g
VElMRV9XX1pPT01fQVRfU0laRSh0dyk7CisgICAgLyogV0FSTklORzogYXNzdW1lIHJldmVyc2Ug
em9vbSBpcyB0aGUgc2FtZSBmb3IgYm90aCBheGlzICovCisgICAgdGggPSBUSUxFX1NJWkVfQVRf
Wk9PTShUSUxFX0gsICp6b29tKTsKKworICAgIGZsb2F0IHNjYWxlID0gKnpvb20gLyBwcml2LT52
aWV3LnRpbGUuem9vbTsKKworICAgIHByaXYtPnZpZXcudGlsZS56b29tID0gKnpvb207CisgICAg
Ly8gdG9kbzogY2hlY2sgY3ggWzAsIHddLi4uCisgICAgcHJpdi0+dmlldy5vZmZzZXQuem9vbV9j
ZW50ZXIueCA9IGN4OworICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpvb21fY2VudGVyLnkgPSBjeTsK
KworICAgIHByaXYtPnZpZXcudGlsZS53ID0gdHc7CisgICAgcHJpdi0+dmlldy50aWxlLmggPSB0
aDsKKworICAgIGlmICghcHJpdi0+dmlldy53IHx8ICFwcml2LT52aWV3LmgpIHsKKyAgICAgICAg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gLXR3OworICAgICAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnkgPSAtdGg7CisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisgICAgfQorICAgIEVp
bmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSAqaXQ7CisKKyAgICBFdmFzX0Nvb3JkIG5ld194ID0gY3ggKyAocHJpdi0+dmlldy5vZmZz
ZXQuY3VyLnggLSBjeCkgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG5ld195ID0gY3kgKyAocHJp
di0+dmlldy5vZmZzZXQuY3VyLnkgLSBjeSkgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIGJ4ID0g
Y3ggKyAocHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IC0gY3gpICogc2NhbGU7CisgICAgRXZhc19D
b29yZCBieSA9IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSAtIGN5KSAqIHNjYWxlOwor
CisgICAgRXZhc19Db29yZCBtb2RlbF93aWR0aCA9IHByaXYtPm1vZGVsLndpZHRoICogc2NhbGU7
CisgICAgRXZhc19Db29yZCBtb2RlbF9oZWlnaHQgPSBwcml2LT5tb2RlbC5oZWlnaHQgKiBzY2Fs
ZTsKKworICAgIGlmIChtb2RlbF93aWR0aCA8IHByaXYtPnZpZXcudyB8fCBuZXdfeCA+PSAwKQor
ICAgICAgICBuZXdfeCA9IDA7CisgICAgZWxzZSBpZiAoLW5ld194ICsgcHJpdi0+dmlldy53ID49
IG1vZGVsX3dpZHRoKQorICAgICAgICBuZXdfeCA9IC1tb2RlbF93aWR0aCArIHByaXYtPnZpZXcu
dzsKKworICAgIGlmIChtb2RlbF9oZWlnaHQgPCBwcml2LT52aWV3LmggfHwgbmV3X3kgPj0gMCkK
KyAgICAgICAgbmV3X3kgPSAwOworICAgIGVsc2UgaWYgKC1uZXdfeSArIHByaXYtPnZpZXcuaCA+
PSBtb2RlbF9oZWlnaHQpCisgICAgICAgIG5ld195ID0gLW1vZGVsX2hlaWdodCArIHByaXYtPnZp
ZXcuaDsKKworICAgIGJ4ID0gbmV3X3ggJSB0dyAtIHR3OworICAgIHByaXYtPm1vZGVsLmJhc2Uu
Y29sID0gLSBuZXdfeCAvIHR3IC0gMTsKKyAgICBieSA9IG5ld195ICUgdGggLSB0aDsKKyAgICBw
cml2LT5tb2RlbC5iYXNlLnJvdyA9IC0gbmV3X3kgLyB0aCAtIDE7CisKKyAgICBwcml2LT5jaGFu
Z2VkLnNpemUgPSBFSU5BX1RSVUU7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5n
ZWQocHJpdik7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194OworICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gbmV3X3k7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54ID0gYng7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gYnk7CisKKyAgICBwcml2
LT52aWV3Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OworICAgIHByaXYt
PnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CisgICAgKm9mZngg
PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICAqb2ZmeSA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55OworCisgICAgZXZhc19vYmplY3RfbW92ZSgKKyAgICAgICAgcHJpdi0+Y29udGVudHNf
Y2xpcHBlciwKKyAgICAgICAgbmV3X3ggKyBwcml2LT52aWV3LngsCisgICAgICAgIG5ld195ICsg
cHJpdi0+dmlldy55KTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRl
cmVycyhwcml2KTsKKworICAgIEV2YXNfQ29vcmQgb3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnkgKyBwcml2LT52aWV3Lnk7CisgICAgRXZhc19Db29yZCBiYXNlX294ID0gcHJpdi0+dmlldy54
ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVt
czsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOworCisgICAgZm9yICg7IGl0
ciA8IGl0cl9lbmQ7IGl0cisrKSB7CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294Owor
ICAgICAgICBFaW5hX0lubGlzdCAqbHN0ID0gKml0cjsKKworICAgICAgICBFSU5BX0lOTElTVF9G
T1JFQUNIKGxzdCwgaXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX21vdmUoaXQsIG94LCBveSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7CisgICAgICAgICAgICBveCArPSB0dzsKKyAgICAg
ICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOwor
fQorCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQoRXZhc19PYmpl
Y3QgKm8sIGZsb2F0ICp6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nv
b3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5KQoreworICAgIERCRygibz0lcCwgem9vbT0lZiIs
IG8sIChkb3VibGUpKnpvb20pOworCisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJp
diwgRUlOQV9GQUxTRSk7CisKKyAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pv
b21fc2V0X2ludGVybmFsKHByaXYsIHpvb20sIGN4LCBjeSwgb2ZmeCwgb2ZmeSk7Cit9CisKK0Vp
bmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0
ICpvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQoreworICAgIERC
Rygibz0lcCwgem9vbT0lZiIsIG8sIChkb3VibGUpem9vbSk7CisgICAgUFJJVl9EQVRBX0dFVF9P
Ul9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKCFwcml2LT52aWV3LncgfHwg
IXByaXYtPnZpZXcuaCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgRWluYV9Jbmxp
c3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpp
dDsKKyAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBFaW5hX0Jvb2wgcmVjYWxjID0gRUlOQV9G
QUxTRTsKKworICAgIHR3ID0gVElMRV9TSVpFX0FUX1pPT00oVElMRV9XLCB6b29tKTsKKyAgICB6
b29tID0gVElMRV9XX1pPT01fQVRfU0laRSh0dyk7CisgICAgLyogV0FSTklORzogYXNzdW1lIHJl
dmVyc2Ugem9vbSBpcyB0aGUgc2FtZSBmb3IgYm90aCBheGlzICovCisgICAgdGggPSBUSUxFX1NJ
WkVfQVRfWk9PTShUSUxFX0gsIHpvb20pOworCisgICAgZmxvYXQgc2NhbGUgPSB6b29tIC8gcHJp
di0+dmlldy50aWxlLnpvb207CisKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX3dpZHRoID0gcHJpdi0+
bW9kZWwud2lkdGggKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX2hlaWdodCA9IHByaXYt
Pm1vZGVsLmhlaWdodCAqIHNjYWxlOworCisgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNv
bnRlbnRzX2NsaXBwZXIsCisgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3dpZHRoLCBtb2Rl
bF9oZWlnaHQpOworCisgICAgaW50IHZyb3dzID0gY2VpbCgoZmxvYXQpcHJpdi0+dmlldy5oIC8g
KGZsb2F0KXRoKSArIDI7CisgICAgaW50IHZjb2xzID0gY2VpbCgoZmxvYXQpcHJpdi0+dmlldy53
IC8gKGZsb2F0KXR3KSArIDI7CisgICAgRXZhc19Db29yZCBuZXdfeCA9IGN4ICsgKHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci54IC0gY3gpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBuZXdfeSA9IGN5
ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3kpICogc2NhbGU7CisgICAgRXZhc19Db29y
ZCBieCA9IG5ld194ICUgdHcgLSB0dzsKKyAgICBFdmFzX0Nvb3JkIGJ5ID0gbmV3X3kgJSB0aCAt
IHRoOworICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9yb3cgPSAtbmV3X3kgLyB0aCAtIDE7CisgICAg
dW5zaWduZWQgbG9uZyBiYXNlX2NvbCA9IC1uZXdfeCAvIHR3IC0gMTsKKworICAgIGlmIChiYXNl
X3JvdyAhPSBwcml2LT5tb2RlbC5iYXNlLnJvdyB8fCBiYXNlX2NvbCAhPSBwcml2LT5tb2RlbC5i
YXNlLmNvbCkgeworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IGJhc2Vfcm93OworICAg
ICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IGJhc2VfY29sOworICAgICAgICByZWNhbGMgPSBF
SU5BX1RSVUU7CisgICAgfQorCisgICAgaWYgKHZyb3dzID4gcHJpdi0+dmlldy5yb3dzIHx8IHZj
b2xzID4gcHJpdi0+dmlldy5jb2xzKQorICAgICAgICByZWNhbGMgPSBFSU5BX1RSVUU7CisKKyAg
ICBpZiAocmVjYWxjKSB7CisgICAgICAgIEV2YXNfQ29vcmQgdywgaDsKKyAgICAgICAgZXZhc19v
YmplY3RfZ2VvbWV0cnlfZ2V0KG8sIE5VTEwsIE5VTEwsICZ3LCAmaCk7CisgICAgICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKHByaXYsIHcsIGgsIHR3LCB0aCk7
CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsK
KyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhwcml2KTsK
KyAgICB9CisKKyAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBieCArIHByaXYtPnZpZXcueDsKKyAg
ICBFdmFzX0Nvb3JkIG95ID0gYnkgKyBwcml2LT52aWV3Lnk7CisKKyAgICBldmFzX29iamVjdF9t
b3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgICAgICAgICAgICAgICBuZXdfeCAr
IHByaXYtPnZpZXcueCwKKyAgICAgICAgICAgICAgICAgICAgIG5ld195ICsgcHJpdi0+dmlldy55
KTsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRyX2VuZCA9IGl0ciArIHBy
aXYtPnZpZXcucm93czsKKworICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykgeworICAg
ICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKKyAgICAgICAgRWluYV9Jbmxpc3QgKmxzdCA9
ICppdHI7CisKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0KSB7CisgICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0dywgdGgp
OworICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7Cisg
ICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9maXhfb2Zmc2V0cyhFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBFdmFzX0Nv
b3JkIGgpCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgRWlu
YV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtICppdDsKKyAgICBFdmFzX0Nvb3JkIG5ld194ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7
CisgICAgRXZhc19Db29yZCBuZXdfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OworICAgIEV2
YXNfQ29vcmQgYnggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgRXZhc19Db29yZCBi
eSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKKyAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+
dmlldy50aWxlLnc7CisgICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworCisg
ICAgaWYgKC1uZXdfeCA+IHcpIHsKKyAgICAgICAgbmV3X3ggPSAtdzsKKyAgICAgICAgYnggPSBu
ZXdfeCAlIHR3IC0gdHc7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gLW5ld194IC8g
dHcgLSAxOworICAgIH0KKworICAgIGlmICgtbmV3X3kgPiBoKSB7CisgICAgICAgIG5ld195ID0g
LWg7CisgICAgICAgIGJ5ID0gbmV3X3kgJSB0aCAtIHRoOworICAgICAgICBwcml2LT5tb2RlbC5i
YXNlLnJvdyA9IC1uZXdfeSAvIHRoIC0gMTsKKyAgICB9CisKKyAgICBpZiAoYnggPj0gMCB8fCBi
eCA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS53KSB7CisgICAgICAgIGJ4ID0gbmV3X3ggJSB0dyAt
IHR3OworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAvIHR3IC0gMTsKKyAg
ICB9CisKKyAgICBpZiAoYnkgPj0gMCB8fCBieSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5oKSB7
CisgICAgICAgIGJ5ID0gbmV3X3kgJSB0aCAtIHRoOworICAgICAgICBwcml2LT5tb2RlbC5iYXNl
LnJvdyA9IC1uZXdfeSAvIHRoIC0gMTsKKyAgICB9CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5j
dXIueCA9IG5ld194OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gbmV3X3k7CisgICAg
cHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBuZXdfeDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5v
bGQueSA9IG5ld195OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IGJ4OworICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IGJ5OworICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+
Y29udGVudHNfY2xpcHBlciwKKyAgICAgICAgICAgICAgICAgICAgIG5ld194ICsgcHJpdi0+dmll
dy54LAorICAgICAgICAgICAgICAgICAgICAgbmV3X3kgKyBwcml2LT52aWV3LnkpOworCisgICAg
RXZhc19Db29yZCBveSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIHByaXYtPnZpZXcueTsK
KyAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBwcml2LT52aWV3LnggKyBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLng7CisKKyAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBp
dHIgKyBwcml2LT52aWV3LnJvd3M7CisKKyAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKysp
IHsKKyAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7CisgICAgICAgIEVpbmFfSW5saXN0
ICpsc3QgPSAqaXRyOworCisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkgewor
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95
KTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwg
dHcsIHRoKTsKKyAgICAgICAgICAgIG94ICs9IHR3OworICAgICAgICB9CisgICAgICAgIG95ICs9
IHRoOworICAgIH0KK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtf
c21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIHNtb290aF9zY2FsZSkK
K3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBFaW5hX0lubGlz
dCAqKml0ciwgKippdHJfZW5kOworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBp
dHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOworICAgIHByaXYtPnZpZXcudGlsZS56b29t
X3dlYWtfc21vb3RoX3NjYWxlID0gc21vb3RoX3NjYWxlOworCisgICAgZm9yICg7IGl0cjwgaXRy
X2VuZDsgaXRyKyspIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7
CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKml0ciwgaXQpCisgICAgICAgICAgICBpZiAo
aXQtPnRpbGUpCisgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
c21vb3RoX3NjYWxlX3NldAorICAgICAgICAgICAgICAgICAgICAoaXQsIHNtb290aF9zY2FsZSk7
CisgICAgfQorfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2
YXNfT2JqZWN0ICpvLCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKQoreworICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworCisgICAgaWYgKHByaXYt
PnJlbmRlci5kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICByZXR1
cm4gZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShwcml2LT5tb2RlbC5tYXRyaXgsIHVwZGF0ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT52aWV3LnRpbGUuem9vbSk7Cit9
CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3ByZV9zZXQo
RXZhc19PYmplY3QgKm8sIHZvaWQgKigqY2IpKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKSwg
Y29uc3Qgdm9pZCAqZGF0YSkKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2
KTsKKyAgICBwcml2LT5wcm9jZXNzLnByZV9jYiA9IGNiOworICAgIHByaXYtPnByb2Nlc3MucHJl
X2RhdGEgPSAodm9pZCopZGF0YTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91
cGRhdGVzX3Byb2Nlc3NfcG9zdF9zZXQoRXZhc19PYmplY3QgKm8sIHZvaWQgKigqY2IpKHZvaWQg
KmRhdGEsIHZvaWQgKnByZV9kYXRhLCBFdmFzX09iamVjdCAqbyksIGNvbnN0IHZvaWQgKmRhdGEp
Cit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgcHJpdi0+cHJv
Y2Vzcy5wb3N0X2NiID0gY2I7CisgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEgPSAodm9pZCop
ZGF0YTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3Mo
RXZhc19PYmplY3QgKm8pCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7
CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhwcml2KTsKK30K
Kwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX2NsZWFyKEV2YXNfT2JqZWN0
ICpvKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisgICAgZXdr
X3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIocHJpdi0+bW9kZWwubWF0cml4KTsKK30KKwordm9p
ZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jb250ZW50c19yZXNpemUoRXZhc19PYmplY3QgKm8s
IEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQoreworICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisgICAgaWYgKHdpZHRoID09IHByaXYtPm1vZGVsLndp
ZHRoICYmIGhlaWdodCA9PSBwcml2LT5tb2RlbC5oZWlnaHQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHByaXYtPm1vZGVsLndpZHRoID0gd2lkdGg7CisgICAgcHJpdi0+bW9kZWwuaGVpZ2h0ID0g
aGVpZ2h0OworICAgIHByaXYtPmNoYW5nZWQubW9kZWwgPSBFSU5BX1RSVUU7CisKKyAgICBEQkco
IndpZHRoLGhlaWdodD0lZCwgJWQiLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9kaXNhYmxlZF91cGRhdGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgdmFsdWUp
Cit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBpZiAodmFs
dWUgIT0gcHJpdi0+cmVuZGVyLmRpc2FibGVkKQorICAgICAgICBwcml2LT5yZW5kZXIuZGlzYWJs
ZWQgPSB2YWx1ZTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFz
X09iamVjdCAqbykKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAg
ICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YyA9IE5VTEw7CisKKyAgICBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueCA9IDA7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSAwOworICAgIHBy
aXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9
IDA7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gLXByaXYtPnZpZXcudGlsZS53Owor
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IC1wcml2LT52aWV3LnRpbGUuaDsKKyAgICBw
cml2LT5tb2RlbC5iYXNlLmNvbCA9IC0xOworICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLTE7
CisgICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOworCisjaWZkZWYgREVCVUdfTUVN
X0xFQUtTCisgICAgcHJpbnRmKCJcbkZMVVNIRUQgQkFDS0lORyBTVE9SRSwgU1RBVFVTIEJFRk9S
RSBERUxFVElORyBUSUxFIE1BVFJJWDpcbiIpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9tZW1fZGJnKHByaXYpOworI2VuZGlmCisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHByaXYpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV90aWxlX2Rpc3NvY2lhdGVfYWxsKHByaXYpOworICAgIHR1YyA9IGV3a190aWxlX21hdHJp
eF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX2NsZWFyKHR1Yyk7CisKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MKKyAgICBwcmlu
dGYoIlxuRkxVU0hFRCBCQUNLSU5HIFNUT1JFLCBTVEFUVVMgQUZURVIgUkVDUkVBVElORyBUSUxF
IE1BVFJJWDpcbiIpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKHByaXYp
OworI2VuZGlmCit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVu
ZGVyX3JlZ2lvbihFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2
YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9hdCB6b29tKQoreworICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVpbmFfVGlsZV9HcmlkX1Ns
aWNlciBzbGljZXI7CisgICAgY29uc3QgRWluYV9UaWxlX0dyaWRfSW5mbyAqaW5mbzsKKyAgICBF
dmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKworICAg
IHR3ID0gVElMRV9TSVpFX0FUX1pPT00oVElMRV9XLCB6b29tKTsKKyAgICB0dyA9ICh0dyA+PiAx
KSA8PCAxOworICAgIHpvb20gPSBUSUxFX1dfWk9PTV9BVF9TSVpFKHR3KTsKKyAgICAvKiBXQVJO
SU5HOiBhc3N1bWUgcmV2ZXJzZSB6b29tIGlzIHRoZSBzYW1lIGZvciBib3RoIGF4aXMgKi8KKyAg
ICB0aCA9IFRJTEVfU0laRV9BVF9aT09NKFRJTEVfSCwgem9vbSk7CisKKyAgICBpZiAoIWVpbmFf
dGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5LCB3LCBoLCB0dywgdGgpKSB7Cisg
ICAgICAgIEVSUigiY291bGQgbm90IHNldHVwIGdyaWQgc2xpY2VyIGZvciAlZCwlZCslZHglZCB0
aWxlPSVkeCVkIiwKKyAgICAgICAgICAgIHgsIHksIHcsIGgsIHR3LCB0aCk7CisgICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIHdoaWxlIChlaW5hX3RpbGVfZ3JpZF9zbGlj
ZXJfbmV4dCgmc2xpY2VyLCAmaW5mbykpIHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBj
ID0gaW5mby0+Y29sOworICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIHIgPSBpbmZvLT5yb3c7
CisgICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVz
dF9hZGQocHJpdiwgYywgciwgem9vbSwgTlVMTCwgUFJFX1JFTkRFUl9QUklPUklUWV9MT1cpKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKKworICAgIHR1YyA9IGV3a190aWxlX21h
dHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsIHgsIHksIHcsIGgsIHpvb20pOworICAgIHJldHVy
biBFSU5BX1RSVUU7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVf
cmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCAqbywgdW5zaWduZWQgaW50IG4sIGZs
b2F0IHpvb20pCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9G
QUxTRSk7CisgICAgdW5zaWduZWQgbG9uZyBzdGFydF9yb3csIGVuZF9yb3csIHN0YXJ0X2NvbCwg
ZW5kX2NvbCwgaSwgaiwgdywgaDsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKwor
ICAgIElORigicHJpdi0+bW9kZWwuYmFzZS5yb3cgPSVsZCwgbj0ldSBwcml2LT52aWV3LnJvd3M9
JWx1IiwKKyAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LCBuLCBwcml2LT52aWV3LnJv
d3MpOworICAgIHN0YXJ0X3JvdyA9IE1BWCgwLCAoKGxvbmcpcHJpdi0+bW9kZWwuYmFzZS5yb3cg
LSBuKSk7CisgICAgc3RhcnRfY29sID0gTUFYKDAsICgobG9uZylwcml2LT5tb2RlbC5iYXNlLmNv
bCAtIG4pKTsKKyAgICBlbmRfcm93ID0gTUlOKHByaXYtPm1vZGVsLmN1ci5yb3dzIC0gMSwKKyAg
ICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcHJpdi0+dmlldy5yb3dzICsg
biAtIDEpOworICAgIGVuZF9jb2wgPSBNSU4ocHJpdi0+bW9kZWwuY3VyLmNvbHMgLSAxLAorICAg
ICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgKyBwcml2LT52aWV3LmNvbHMgKyBu
IC0gMSk7CisKKyAgICBJTkYoInN0YXJ0X3Jvdz0lbHUsIGVuZF9yb3c9JWx1LCBzdGFydF9jb2w9
JWx1LCBlbmRfY29sPSVsdSIsCisgICAgICAgICBzdGFydF9yb3csIGVuZF9yb3csIHN0YXJ0X2Nv
bCwgZW5kX2NvbCk7CisKKyAgICBmb3IgKGkgPSBzdGFydF9yb3c7IGkgPD0gZW5kX3JvdzsgaSsr
KQorICAgICAgICBmb3IgKGogPSBzdGFydF9jb2w7IGogPD0gZW5kX2NvbDsgaisrKQorICAgICAg
ICAgICAgaWYgKCFfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Fk
ZChwcml2LCBqLCBpLCB6b29tLCBOVUxMLCBQUkVfUkVOREVSX1BSSU9SSVRZX0xPVykpCisgICAg
ICAgICAgICAgICAgZ290byBzdGFydF9wcm9jZXNzaW5nOworCitzdGFydF9wcm9jZXNzaW5nOgor
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQocHJp
dik7CisKKyAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5t
b2RlbC5tYXRyaXgpOworICAgIGggPSAoZW5kX3JvdyAtIHN0YXJ0X3JvdyArIDEpICogVElMRV9T
SVpFX0FUX1pPT00oVElMRV9ILCB6b29tKTsKKyAgICB3ID0gKGVuZF9jb2wgLSBzdGFydF9jb2wg
KyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKFRJTEVfVywgem9vbSk7CisgICAgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsCisgICAgICAgICAgICBzdGFydF9jb2wgKiBUSUxFX1NJ
WkVfQVRfWk9PTShUSUxFX1csIHpvb20pLAorICAgICAgICAgICAgc3RhcnRfcm93ICogVElMRV9T
SVpFX0FUX1pPT00oVElMRV9ILCB6b29tKSwgdywgaCwgem9vbSk7CisKKyAgICByZXR1cm4gRUlO
QV9UUlVFOworfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2Fu
Y2VsKEV2YXNfT2JqZWN0ICpvKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHBy
aXYpOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworCisgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9yZW1vdmVfdW5hc3NvY2lhdGVkKHByaXYp
OworCisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9k
ZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodHVjKTsK
K30KKworRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKEV2
YXNfT2JqZWN0ICpvKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJ
TkFfRkFMU0UpOworICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9y
ZW5kZXIocHJpdik7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFi
bGVfcmVuZGVyKEV2YXNfT2JqZWN0ICpvKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KG8sIHByaXYsIEVJTkFfRkFMU0UpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFu
Z2VkKHByaXYpOworICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3Jl
bmRlcihwcml2KTsKK30KKworLyoqCisgKiBTZXQgdGhlIHByb2Nlc3NfZW50aXJlX3F1ZXVlIGZs
YWcgb2YgdGhlIHJlbmRlcmVyIGlkbGVyLgorICoKKyAqCisgKiBAcGFyYW0gbyB0aGUgdGlsZWQg
YmFja2luZyBzdG9yZSBvYmplY3QKKyAqIEBwYXJhbSB2YWx1ZSBFSU5BX1RSVUUgaWYgd2Ugd2Fu
dCB0byBwcm9jZXNzIGFsbCB0aGUgcmVxdWVzdCBvZiBvdXIgcXVldWUuIEVJTkFfRkFMU0Ugb3Ro
ZXJ3aXNlLgorICovCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Byb2Nlc3NfZW50aXJl
X3F1ZXVlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIHZhbHVlKQoreworICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIGlmIChwcml2LT5yZW5kZXIucHJvY2Vz
c19lbnRpcmVfcXVldWUgIT0gdmFsdWUpCisgICAgICAgIHByaXYtPnJlbmRlci5wcm9jZXNzX2Vu
dGlyZV9xdWV1ZSA9IHZhbHVlOworfQpJbmRleDogV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZS5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9oCisjZGVmaW5lIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2gK
KworI2luY2x1ZGUgIkVXZWJLaXQuaCIKKworLyogRW5hYmxlIGFjY291bnRpbmcgb2YgcmVuZGVy
IHRpbWUgaW4gdGlsZSBzdGF0aXN0aWNzICovCisvLyAjZGVmaW5lIFRJTEVfU1RBVFNfQUNDT1VO
VF9SRU5ERVJfVElNRQorCisKKy8qIElmIGRlZmluZSBld2sgd2lsbCBkbyBtb3JlIGFjY291bnRp
bmcgdG8gY2hlY2sgZm9yIG1lbW9yeSBsZWFrcworICogdHJ5ICJraWxsIC1VU1IxICRQSUQiIHRv
IGdldCBpbnN0YW50YW5lb3VzIGRlYnVnCisgKiB0cnkgImtpbGwgLVVTUjIgJFBJRCIgdG8gZ2V0
IGluc3RhbnRhbmVvdXMgZGVidWcgYW5kIGZvcmNlIGZsdXNoIG9mIGNhY2hlCisgKi8KKyNkZWZp
bmUgREVCVUdfTUVNX0xFQUtTIDEKKworI2RlZmluZSBUSUxFX1cgKDI1NikKKyNkZWZpbmUgVElM
RV9IICgyNTYpCisKKyNkZWZpbmUgWk9PTV9TVEVQX01JTiAoMC4wMSkKKworI2RlZmluZSBUSUxF
X1NJWkVfQVRfWk9PTShTSVpFLCBaT09NKSAoKGludClyb3VuZGYoKFNJWkUpICogKFpPT00pKSkK
KyNkZWZpbmUgVElMRV9XX1pPT01fQVRfU0laRShTSVpFKSAoKGZsb2F0KVNJWkUgLyAoZmxvYXQp
VElMRV9XKQorI2RlZmluZSBUSUxFX0hfWk9PTV9BVF9TSVpFKFNJWkUpICgoZmxvYXQpU0laRSAv
IChmbG9hdClUSUxFX0gpCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5k
aWYKKworI2luY2x1ZGUgPEV2YXMuaD4KKyNpbmNsdWRlIDxjYWlyby5oPgorCit0eXBlZGVmIHN0
cnVjdCBfRXdrX1RpbGUgICAgICAgICAgICAgICAgICAgICBFd2tfVGlsZTsKK3R5cGVkZWYgc3Ry
dWN0IF9Fd2tfVGlsZV9TdGF0cyAgICAgICAgICAgICAgIEV3a19UaWxlX1N0YXRzOwordHlwZWRl
ZiBzdHJ1Y3QgX0V3a19UaWxlX01hdHJpeCAgICAgICAgICAgICAgRXdrX1RpbGVfTWF0cml4Owor
CitzdHJ1Y3QgX0V3a19UaWxlX1N0YXRzIHsKKyAgICBkb3VibGUgbGFzdF91c2VkOyAgICAgICAg
LyoqPCB0aW1lIG9mIGxhc3QgdXNlICovCisjaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRF
Ul9USU1FCisgICAgZG91YmxlIHJlbmRlcl90aW1lOyAgICAgIC8qKjwgYW1vdW50IG9mIHRpbWUg
dGhpcyB0aWxlIHRvb2sgdG8gcmVuZGVyICovCisjZW5kaWYKKyAgICB1bnNpZ25lZCBpbnQgYXJl
YTsgICAgICAgLyoqPCBjYWNoZSBmb3IgKHcgKiBoKSAqLworICAgIHVuc2lnbmVkIGludCBtaXNz
ZXM7ICAgICAvKio8IG51bWJlciBvZiB0aW1lcyBpdCBiZWNhbWUgZGlydHkgYnV0IG5vdAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByZXBhaW50ZWQgYXQgYWxsIHNpbmNlIGl0IHdh
cyBub3QgdmlzaWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRWlu
YV9Cb29sIGZ1bGxfdXBkYXRlOjE7IC8qKjwgdGlsZSByZXF1aXJlcyBmdWxsIHNpemUgdXBkYXRl
ICovCit9OworCitzdHJ1Y3QgX0V3a19UaWxlIHsKKyAgICBFSU5BX0lOTElTVDsgICAgICAgICAg
ICAvKio8IHNpYmxpbmcgdGlsZXMgYXQgc2FtZSAoaSwgaikgYnV0IG90aGVyIHpvb20gKi8KKyAg
ICBFaW5hX1RpbGVyICp1cGRhdGVzOyAgICAvKio8IHVwZGF0ZWQvZGlydHkgYXJlYXMgKi8KKyAg
ICBFd2tfVGlsZV9TdGF0cyBzdGF0czsgICAgICAgLyoqPCB0aWxlIHVzYWdlIHN0YXRpc3RpY3Mg
Ki8KKyAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OyAvKio8IHRpbGUgdGlsZSBwb3NpdGlvbiAq
LworICAgIEV2YXNfQ29vcmQgeCwgeTsgICAgICAgIC8qKjwgdGlsZSBjb29yZGluYXRlIHBvc2l0
aW9uICovCisKKyAgICAvKiBUT0RPOiBkb2VzIGl0IHdvcnRoIHRvIGtlZXAgdGhvc2Ugb3IgY3Jl
YXRlIG9uIGRlbWFuZD8gKi8KKyAgICBjYWlyb19zdXJmYWNlX3QgKnN1cmZhY2U7CisgICAgY2Fp
cm9fdCAqY2Fpcm87CisKKyAgICAvKiogTmV2ZXIgZXZlciBjaGFuZ2UgdGhvc2UgYWZ0ZXIgdGls
ZSBpcyBjcmVhdGVkIChyZXNwZWN0IGNvbnN0ISkgKi8KKyAgICBjb25zdCBFdmFzX0Nvb3JkIHcs
IGg7ICAgICAgICAvKio8IHRpbGUgc2l6ZSAoc2VlIFRJTEVfU0laRV9BVF9aT09NKCkpICovCisg
ICAgY29uc3QgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsgLyoqPCBjb2xvcnNwYWNlICovCisgICAg
Y29uc3QgZmxvYXQgem9vbTsgICAgICAgICAgICAgLyoqPCB6b29tIGxldmVsIGNvbnRlbnRzIHdl
cmUgcmVuZGVyZWQgYXQgKi8KKyAgICBjb25zdCBzaXplX3QgYnl0ZXM7ICAgICAgICAgICAvKio8
IGJ5dGVzIHVzZWQgaW4gcGl4ZWxzLiBrZWVwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICogYmVmb3JlIHBpeGVscyB0byBndWFyYW50ZWUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiBhbGlnbmVtZW50IQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqLworICAgIGludCB2aXNpYmxlOyAgICAgICAgICAgICAgICAgIC8qKjwgdmlzaWJp
bGl0eSBjb3VudGVyIG9mIHRoaXMgdGlsZSAqLworICAgIEV2YXNfT2JqZWN0ICppbWFnZTsgICAg
ICAgICAgIC8qKjwgRXZhcyBJbWFnZSwgdGhlIHRpbGUgdG8gYmUgcmVuZGVyZWQgKi8KKyAgICB1
aW50OF90ICpwaXhlbHM7Cit9OworCisjaW5jbHVkZSAiZXdrX3RpbGVkX21hdHJpeC5oIgorI2lu
Y2x1ZGUgImV3a190aWxlZF9tb2RlbC5oIgorCisvKiB2aWV3ICovCitFQVBJIEV2YXNfT2JqZWN0
ICpld2tfdGlsZWRfYmFja2luZ19zdG9yZV9hZGQoRXZhcyAqZSk7CisKK0VBUEkgdm9pZCBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXJfY2Jfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jv
b2wgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICph
cmVhKSwgY29uc3Qgdm9pZCAqZGF0YSk7CisKK0VBUEkgRWluYV9Cb29sICAgIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXQoRXZhc19PYmplY3QgKm8sIEV2YXNf
Q29vcmQgeCwgRXZhc19Db29yZCB5KTsKK0VBUEkgRWluYV9Cb29sICAgIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9hZGQoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29v
cmQgZHgsIEV2YXNfQ29vcmQgZHkpOworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc2Nyb2xsX2lubmVyX29mZnNldF9hZGQoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29v
cmQgZHgsIEV2YXNfQ29vcmQgZHksIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nv
b3JkIHcsIEV2YXNfQ29vcmQgaCk7CisKK0VBUEkgRWluYV9Cb29sICAgIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3pvb21fc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCAqem9vbSwgRXZhc19Db29y
ZCBjeCwgRXZhc19Db29yZCBjeSwgRXZhc19Db29yZCAqb2ZmeCwgRXZhc19Db29yZCAqb2ZmeSk7
CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0
KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5
KTsKK0VBUEkgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhFdmFzX09i
amVjdCAqbywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpOworRUFQSSBFaW5hX0Jvb2wgICAg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2YXNfT2JqZWN0ICpvLCBjb25zdCBFaW5h
X1JlY3RhbmdsZSAqdXBkYXRlKTsKK0VBUEkgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91
cGRhdGVzX3Byb2Nlc3NfcHJlX3NldChFdmFzX09iamVjdCAqbywgdm9pZCAqKCpjYikodm9pZCAq
ZGF0YSwgRXZhc19PYmplY3QgKm8pLCBjb25zdCB2b2lkICpkYXRhKTsKK0VBUEkgdm9pZCBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcG9zdF9zZXQoRXZhc19PYmplY3Qg
Km8sIHZvaWQgKigqY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnByZV9kYXRhLCBFdmFzX09iamVjdCAq
byksIGNvbnN0IHZvaWQgKmRhdGEpOworRUFQSSB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3Byb2Nlc3NfZW50aXJlX3F1ZXVlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIHZhbHVl
KTsKK0VBUEkgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXZh
c19PYmplY3QgKm8pOworRUFQSSB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNf
Y2xlYXIoRXZhc19PYmplY3QgKm8pOworRUFQSSB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2NvbnRlbnRzX3Jlc2l6ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3aWR0aCwgRXZhc19D
b29yZCBoZWlnaHQpOworRUFQSSB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVk
X3VwZGF0ZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCB2YWx1ZSk7CitFQVBJIHZvaWQg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2goRXZhc19PYmplY3QgKm8pOworRUFQSSB2b2lk
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9zY2FsZV9zZXQoRXZhc19PYmplY3QgKm8s
IEVpbmFfQm9vbCB2YWx1ZSk7CisKK0VBUEkgRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGls
ZWRfYmFja2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3Qg
Km8pOworRUFQSSB2b2lkICAgICAgICAgICAgICAgICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3RpbGVfdW51c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCAqbywgRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlICp0dWMpOworCitFQVBJIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVf
cmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHks
IEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9hdCB6b29tKTsKK0VBUEkgRWluYV9Cb29s
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKEV2YXNf
T2JqZWN0ICpvLCB1bnNpZ25lZCBpbnQgbiwgZmxvYXQgem9vbSk7CitFQVBJIHZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmplY3QgKm8pOworCitF
QVBJIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFdmFz
X09iamVjdCAqbyk7CitFQVBJIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFi
bGVfcmVuZGVyKEV2YXNfT2JqZWN0ICpvKTsKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlm
CisjZW5kaWYgLy8gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaApJbmRleDogV2ViS2l0L2VmbC9l
d2svZXdrX3RpbGVkX21hdHJpeC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9lZmwvZXdrL2V3a190
aWxlZF9tYXRyaXguYwkocmV2aXNpb24gMCkKKysrIFdlYktpdC9lZmwvZXdrL2V3a190aWxlZF9t
YXRyaXguYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NzEgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykgMjAw
OS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgImV3a190aWxlZF9tYXRyaXguaCIKKworI2RlZmluZSBfR05VX1NPVVJDRQor
I2luY2x1ZGUgImV3a190aWxlZF9iYWNraW5nX3N0b3JlLmgiCisjaW5jbHVkZSAiZXdrX3RpbGVk
X3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNs
dWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRpby5oPiAv
LyBYWFggcmVtb3ZlIG1lIGxhdGVyCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3Ry
aW5nLmg+CisKK3N0YXRpYyBjb25zdCBFdmFzX0Nvb3JkIFRJTEVfTUFUUklYX0JBU0VfVElMRV9T
SVpFID0gMjU2OworCitzdHJ1Y3QgX0V3a19UaWxlX01hdHJpeCB7CisgICAgRWluYV9NYXRyaXhz
cGFyc2UgKm1hdHJpeDsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKyAgICBFdmFz
X0NvbG9yc3BhY2UgY3NwYWNlOworICAgIHN0cnVjdCB7CisgICAgICAgIHZvaWQgKCpjYikodm9p
ZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpOworICAg
ICAgICB2b2lkICpkYXRhOworICAgIH0gcmVuZGVyOworICAgIHVuc2lnbmVkIGludCBmcm96ZW47
CisgICAgRWluYV9MaXN0ICp1cGRhdGVzOworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIHN0
cnVjdCB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1aW50NjRfdCBhbGxvY2F0ZWQs
IGZyZWVkOworICAgICAgICB9IHRpbGVzLCBieXRlczsKKyAgICB9IHN0YXRzOworI2VuZGlmCit9
OworCisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCitzdGF0aWMgdWludDY0X3QgdGlsZXNfbGVha2Vk
ID0gMDsKK3N0YXRpYyB1aW50NjRfdCBieXRlc19sZWFrZWQgPSAwOworI2VuZGlmCisKKy8qIGNh
bGxlZCB3aGVuIG1hdHJpeHNwYXJzZSBpcyByZXNpemVkIG9yIGZyZWVkICovCitzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJlZSh2b2lkICp1c2VyX2RhdGEsIHZvaWQgKmNlbGxf
ZGF0YSkKK3sKKyAgICBFd2tfVGlsZV9NYXRyaXggKnRtID0gdXNlcl9kYXRhOworICAgIEVpbmFf
SW5saXN0ICpsID0gY2VsbF9kYXRhOworCisgICAgaWYgKCFsKQorICAgICAgICByZXR1cm47CisK
KyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRtLT50dWMpOworCisgICAgd2hpbGUg
KGwpIHsKKyAgICAgICAgRXdrX1RpbGUgKnQgPSAoRXdrX1RpbGUgKilsOworICAgICAgICBsID0g
bC0+bmV4dDsKKworICAgICAgICBpZiAodC0+dXBkYXRlcyB8fCB0LT5zdGF0cy5mdWxsX3VwZGF0
ZSkKKyAgICAgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRl
cywgdCk7CisKKyAgICAgICAgaWYgKHQtPnZpc2libGUpCisgICAgICAgICAgICBFUlIoImZyZWVp
bmcgY2VsbCB0aGF0IGlzIHZpc2libGUsIGxlYWtpbmcgdGlsZSAlcCIsIHQpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGlmICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRt
LT50dWMsIHQpKQorICAgICAgICAgICAgICAgIEVSUigidGlsZSAlcCB3YXMgbm90IGluIGNhY2hl
ICVwPyBsZWFraW5nLi4uIiwgdCwgdG0tPnR1Yyk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBEQkcoInRpbGUgY2VsbCBkb2VzIG5vdCBleGlzdCBhbnltb3JlLCBmcmVlIGl0
ICVwIiwgdCk7CisKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MKKyAgICAgICAgICAgICAgICB0bS0+
c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdC0+Ynl0ZXM7CisgICAgICAgICAgICAgICAgdG0tPnN0YXRz
LnRpbGVzLmZyZWVkKys7CisjZW5kaWYKKworICAgICAgICAgICAgICAgIGV3a190aWxlX2ZyZWUo
dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKK30KKworLyogY2FsbGVkIHdoZW4gY2FjaGUgb2YgdW51
c2VkIHRpbGUgaXMgZmx1c2hlZCAqLworc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxl
X2ZyZWUodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpCit7CisgICAgRXdrX1RpbGVfTWF0cml4ICp0
bSA9IGRhdGE7CisgICAgRWluYV9NYXRyaXhzcGFyc2VfQ2VsbCAqY2VsbDsKKyAgICBFaW5hX0lu
bGlzdCAqbCwgKm9sZDsKKworICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9pZHhfZ2V0
KHRtLT5tYXRyaXgsIHQtPnJvdywgdC0+Y29sLCAmY2VsbCkpIHsKKyAgICAgICAgRVJSKCJyZW1v
dmluZyB0aWxlICVwIHRoYXQgd2FzIG5vdCBpbiB0aGUgbWF0cml4PyBMZWFraW5nLi4uIiwgdCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodC0+dXBkYXRlcyB8fCB0LT5zdGF0
cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlKHRt
LT51cGRhdGVzLCB0KTsKKworICAgIG9sZCA9IGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9n
ZXQoY2VsbCk7CisgICAgbCA9IGVpbmFfaW5saXN0X3JlbW92ZShvbGQsIEVJTkFfSU5MSVNUX0dF
VCh0KSk7CisgICAgaWYgKCFsKSB7CisgICAgICAgIC8qIHNldCB0byBudWxsIHRvIGF2b2lkIGRv
dWJsZSBmcmVlICovCisgICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9yZXBsYWNl
KGNlbGwsIE5VTEwsIE5VTEwpOworICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2NsZWFy
KGNlbGwpOworICAgIH0gZWxzZSBpZiAob2xkICE9IGwpCisgICAgICAgIGVpbmFfbWF0cml4c3Bh
cnNlX2NlbGxfZGF0YV9yZXBsYWNlKGNlbGwsIGwsIE5VTEwpOworCisgICAgaWYgKEVJTkFfVU5M
SUtFTFkoISF0LT52aXNpYmxlKSkgeworICAgICAgICBFUlIoImNhY2hlIG9mIHVudXNlZCB0aWxl
cyByZXF1ZXN0aW5nIGRlbGV0aW9uIG9mIHVzZWQgdGlsZSAlcD8gIgorICAgICAgICAgICAgIkxl
YWtpbmcuLi4iLCB0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmZGVmIERFQlVHX01F
TV9MRUFLUworICAgIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKKyAgICB0bS0+
c3RhdHMudGlsZXMuZnJlZWQrKzsKKyNlbmRpZgorCisgICAgZXdrX3RpbGVfZnJlZSh0KTsKK30K
KworLyoqCisgKiBDcmVhdGVzIGEgbmV3IG1hdHJpeCBvZiB0aWxlcy4KKyAqCisgKiBUaGUgdGls
ZSBtYXRyaXggaXMgcmVzcG9uc2libGUgZm9yIGtlZXBpbmcgdGlsZXMgYXJvdW5kIGFuZAorICog
cHJvdmlkaW5nIGZhc3QgYWNjZXNzIHRvIHRoZW0uIE9uZSBjYW4gdXNlIGl0IHRvIHJldHJpZXZl
IG5ldyBvcgorICogZXhpc3RpbmcgdGlsZXMgYW5kIGdpdmUgdGhlbSBiYWNrLCBhbGxvd2luZyB0
aGVtIHRvIGJlCisgKiBmcmVlZC9yZXBsYWNlZCBieSB0aGUgY2FjaGUuCisgKgorICogQHBhcmFt
IHR1YyBjYWNoZSBvZiB1bnVzZWQgdGlsZXMgb3IgQGMgTlVMTCB0byBjcmVhdGUgb25lCisgKiAg
ICAgICAgYXV0b21hdGljYWxseS4KKyAqIEBwYXJhbSBjb2xzIG51bWJlciBvZiBjb2x1bW5zIGlu
IHRoZSBtYXRyaXguCisgKiBAcGFyYW0gcm93cyBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbWF0cml4
LgorICogQHBhcmFtIGNzcGFjZSB0aGUgY29sb3Igc3BhY2UgdXNlZCB0byBjcmVhdGUgdGlsZXMg
aW4gdGhpcyBtYXRyaXguCisgKiBAcGFyYW0gcmVuZGVyX2NiIGZ1bmN0aW9uIHVzZWQgdG8gcmVu
ZGVyIGdpdmVuIHRpbGUgdXBkYXRlLgorICogQHBhcmFtIGRhdGEgY29udGV4dCB0byBnaXZlIGJh
Y2sgdG8gQGEgcmVuZGVyX2NiLgorICoKKyAqIEByZXR1cm4gbmV3bHkgYWxsb2NhdGVkIGluc3Rh
bmNlIG9uIHN1Y2Nlc3MsIEBjIE5VTEwgb24gZmFpbHVyZS4KKyAqLworRXdrX1RpbGVfTWF0cml4
ICpld2tfdGlsZV9tYXRyaXhfbmV3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCB1bnNpZ25l
ZCBsb25nIGNvbHMsIHVuc2lnbmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNwYWNlIGNzcGFjZSwg
dm9pZCAoKnJlbmRlcl9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVj
dGFuZ2xlICp1cGRhdGUpLCBjb25zdCB2b2lkICpkYXRhKQoreworICAgIEV3a19UaWxlX01hdHJp
eCAqdG07CisKKyAgICBDQUxMT0NfT1JfT09NX1JFVCh0bSwgc2l6ZW9mKEV3a19UaWxlX01hdHJp
eCksIE5VTEwpOworCisgICAgdG0tPm1hdHJpeCA9IGVpbmFfbWF0cml4c3BhcnNlX25ldyhyb3dz
LCBjb2xzLCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJlZSwgdG0pOworICAgIGlmICghdG0tPm1h
dHJpeCkgeworICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgc3BhcnNlIG1hdHJpeC4iKTsK
KyAgICAgICAgZnJlZSh0bSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlm
ICh0dWMpCisgICAgICAgIHRtLT50dWMgPSBld2tfdGlsZV91bnVzZWRfY2FjaGVfcmVmKHR1Yyk7
CisgICAgZWxzZSB7CisgICAgICAgIHRtLT50dWMgPSBld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3
KDQwOTYwMDAwKTsKKyAgICAgICAgaWYgKCF0bS0+dHVjKSB7CisgICAgICAgICAgICBFUlIoIm5v
IGNhY2hlIG9mIHVudXNlZCB0aWxlISIpOworICAgICAgICAgICAgZWluYV9tYXRyaXhzcGFyc2Vf
ZnJlZSh0bS0+bWF0cml4KTsKKyAgICAgICAgICAgIGZyZWUodG0pOworICAgICAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0bS0+Y3NwYWNlID0gY3NwYWNlOwor
ICAgIHRtLT5yZW5kZXIuY2IgPSByZW5kZXJfY2I7CisgICAgdG0tPnJlbmRlci5kYXRhID0gKHZv
aWQgKilkYXRhOworCisgICAgcmV0dXJuIHRtOworfQorCisvKioKKyAqIERlc3Ryb3lzIHRpbGVz
IG1hdHJpeCwgcmVsZWFzaW5nIGl0cyByZXNvdXJjZXMuCisgKgorICogVGhlIGNhY2hlIGluc3Rh
bmNlIGlzIHVucmVmZXJlbmNlZCwgcG9zc2libHkgZnJlZWluZyBpdC4KKyAqLwordm9pZCBld2tf
dGlsZV9tYXRyaXhfZnJlZShFd2tfVGlsZV9NYXRyaXggKnRtKQoreworI2lmZGVmIERFQlVHX01F
TV9MRUFLUworICAgIHVpbnQ2NF90IHRpbGVzLCBieXRlczsKKyNlbmRpZgorCisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVl
emUodG0tPnR1Yyk7CisKKyAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVlKHRtLT5tYXRyaXgpOwor
CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcodG0tPnR1Yyk7CisgICAgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX3VucmVmKHRtLT50dWMpOworCisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCisg
ICAgdGlsZXMgPSB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkIC0gdG0tPnN0YXRzLnRpbGVzLmZy
ZWVkOworICAgIGJ5dGVzID0gdG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCAtIHRtLT5zdGF0cy5i
eXRlcy5mcmVlZDsKKworICAgIHRpbGVzX2xlYWtlZCArPSB0aWxlczsKKyAgICBieXRlc19sZWFr
ZWQgKz0gYnl0ZXM7CisKKyAgICBpZiAodGlsZXMgfHwgYnl0ZXMpCisgICAgICAgIEVSUigidGls
ZWQgbWF0cml4IGxlYWtlZDogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0g
IgorICAgICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0iLAor
ICAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLnRpbGVzLmZy
ZWVkLCB0aWxlcywKKyAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5z
dGF0cy5ieXRlcy5mcmVlZCwgYnl0ZXMpOworICAgIGVsc2UgaWYgKHRpbGVzX2xlYWtlZCB8fCBi
eXRlc19sZWFrZWQpCisgICAgICAgIFdSTigidGlsZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGls
ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiXSAiCisgICAgICAgICAgICJieXRlc1srJSJQUkl1NjQi
LC0lIlBSSXU2NCJdLCBidXQgc29tZSBvdGhlciBsZWFrZWQgIgorICAgICAgICAgICAgIiUiUFJJ
dTY0IiB0aWxlcyAoJSJQUkl1NjQiIGJ5dGVzKSIsCisgICAgICAgICAgICB0bS0+c3RhdHMudGls
ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMudGlsZXMuZnJlZWQsCisgICAgICAgICAgICB0bS0+c3Rh
dHMuYnl0ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsCisgICAgICAgICAgICB0
aWxlc19sZWFrZWQsIGJ5dGVzX2xlYWtlZCk7CisgICAgZWxzZQorICAgICAgICBJTkYoInRpbGVk
IG1hdHJpeCBoYWQgbm8gbGVha3M6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0Il0gIgorICAg
ICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiXSIsCisgICAgICAgICAgICB0bS0+
c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMudGlsZXMuZnJlZWQsCisgICAgICAgICAg
ICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQpOworI2Vu
ZGlmCisKKyAgICBmcmVlKHRtKTsKK30KKworLyoqCisgKiBSZXNpemUgbWF0cml4IHRvIGdpdmVu
IG51bWJlciBvZiByb3dzIGFuZCBjb2x1bW5zLgorICovCit2b2lkIGV3a190aWxlX21hdHJpeF9y
ZXNpemUoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2xzLCB1bnNpZ25lZCBs
b25nIHJvd3MpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOworICAgIGVp
bmFfbWF0cml4c3BhcnNlX3NpemVfc2V0KHRtLT5tYXRyaXgsIHJvd3MsIGNvbHMpOworfQorCisv
KioKKyAqIEdldCB0aGUgY2FjaGUgb2YgdW51c2VkIHRpbGVzIGluIHVzZSBieSBnaXZlbiBtYXRy
aXguCisgKgorICogTm8gcmVmZXJlbmNlIGlzIHRha2VuIHRvIHRoZSBjYWNoZS4KKyAqLworRXdr
X1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChjb25z
dCBFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTCh0bSwgTlVMTCk7CisgICAgcmV0dXJuIHRtLT50dWM7Cit9CisKKy8qKgorICogR2V0IHRo
ZSBleGFjdCB0aWxlIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHpvb20uCisgKgorICogSWYg
dGhlIHRpbGUgd2FzIHVudXNlZCB0aGVuIGl0J3MgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZS4KKyAq
CisgKiBBZnRlciB1c2FnZSwgcGxlYXNlIGdpdmUgaXQgYmFjayB1c2luZworICogZXdrX3RpbGVf
bWF0cml4X3RpbGVfcHV0KCkuIElmIHlvdSBqdXN0IHdhbnQgdG8gY2hlY2sgaWYgaXQgZXhpc3Rz
LAorICogdGhlbiB1c2UgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3RzKCkuCisgKgor
ICogQHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0byBnZXQgdGlsZSBmcm9tLgorICogQHBhcmFt
IGNvbCB0aGUgY29sdW1uIG51bWJlci4KKyAqIEBwYXJhbSByb3cgdGhlIHJvdyBudW1iZXIuCisg
KiBAcGFyYW0gem9vbSB0aGUgZXhhY3Qgem9vbSB0byB1c2UuCisgKgorICogQHJldHVybiBUaGUg
dGlsZSBpbnN0YW5jZSBvciBAYyBOVUxMIGlmIG5vbmUgaXMgZm91bmQuIElmIHRoZSB0aWxlCisg
KiAgICAgICAgIHdhcyBpbiB0aGUgdW51c2VkIGNhY2hlIGl0IHdpbGwgYmUgQGIgcmVtb3ZlZCAo
dGh1cworICogICAgICAgICBjb25zaWRlcmVkIHVzZWQpIGFuZCBvbmUgc2hvdWxkIGdpdmUgaXQg
YmFjayB3aXRoCisgKiAgICAgICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dCgpIGFmdGVyd2Fy
ZHMuCisgKgorICogQHNlZSBld2tfdGlsZV9tYXRyaXhfdGlsZV9uZWFyZXN0X2dldCgpCisgKiBA
c2VlIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldCgpCisgKi8KK0V3a19UaWxlICpld2tf
dGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQg
bG9uZyBjb2wsIHVuc2lnbmVkIGludCByb3csIGZsb2F0IHpvb20pCit7CisgICAgRXdrX1RpbGUg
KnQsICppdGVtLCAqaXRlbV9mb3VuZCA9IE5VTEw7CisgICAgRWluYV9Jbmxpc3QgKmlubDsKKwor
ICAgIHQgPSBlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBj
b2wpOworICAgIGlmICghdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAodC0+em9v
bSA9PSB6b29tKQorICAgICAgICBnb3RvIGVuZDsKKworICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0go
RUlOQV9JTkxJU1RfR0VUKHQpLCBpdGVtKSB7CisgICAgICAgIGlmIChpdGVtLT56b29tICE9IHpv
b20pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaXRlbV9mb3VuZCA9IGl0ZW07Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghaXRlbV9mb3VuZCkKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisKKyAgICBpbmwgPSBlaW5hX2lubGlzdF9wcm9tb3RlKEVJTkFfSU5MSVNUX0dF
VCh0KSwgRUlOQV9JTkxJU1RfR0VUKGl0ZW1fZm91bmQpKTsKKyAgICBlaW5hX21hdHJpeHNwYXJz
ZV9kYXRhX2lkeF9yZXBsYWNlKHRtLT5tYXRyaXgsIHJvdywgY29sLCBpbmwsIE5VTEwpOworCisg
IGVuZDoKKyAgICBpZiAoIXQtPnZpc2libGUpIHsKKyAgICAgICAgaWYgKCFld2tfdGlsZV91bnVz
ZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1YywgdCkpCisgICAgICAgICAgICBXUk4oIkV3a19UaWxl
IHdhcyB1bnVzZWQgYnV0IG5vdCBpbiBjYWNoZT8gYnVnISIpOworICAgIH0KKworICAgIHJldHVy
biB0OworfQorCisvKioKKyAqIENoZWNrcyBpZiB0aWxlIG9mIGdpdmVuIHpvb20gZXhpc3RzIGlu
IG1hdHJpeC4KKyAqCisgKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIGNoZWNrIHRpbGUg
ZXhpc3RlbmNlLgorICogQHBhcmFtIGNvbCB0aGUgY29sdW1uIG51bWJlci4KKyAqIEBwYXJhbSBy
b3cgdGhlIHJvdyBudW1iZXIuCisgKiBAcGFyYW0gem9vbSB0aGUgZXhhY3Qgem9vbSB0byBxdWVy
eS4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBmb3VuZCwgQGMgRUlOQV9GQUxTRSBv
dGhlcndpc2UuCisgKgorICogQHNlZSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoKQor
ICovCitFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3RzKEV3a19UaWxl
X01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBpbnQgcm93LCBmbG9hdCB6
b29tKQoreworICAgIEV3a19UaWxlICp0LCAqaXRlbTsKKworICAgIHQgPSBlaW5hX21hdHJpeHNw
YXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpOworICAgIGlmICghdCkKKyAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICBFSU5BX0lOTElTVF9GT1JFQUNIKEVJTkFf
SU5MSVNUX0dFVCh0KSwgaXRlbSkgeworICAgICAgICBpZiAoaXRlbS0+em9vbSA9PSB6b29tKQor
ICAgICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKKyAgICB9CisKKyAgICByZXR1cm4gRUlOQV9G
QUxTRTsKK30KKworLyoqCisgKiBHZXQgdGhlIG5lYXJlc3QgdGlsZSBmb3IgZ2l2ZW4gcG9zaXRp
b24gYW5kIHpvb20uCisgKgorICogVGhlIG5lYXJlc3QgdGlsZSBpcyB0aGUgb25lIGF0IHRoZSBn
aXZlbiBwb3NpdGlvbiBidXQgd2l0aCB0aGUKKyAqIGNsb3Nlc3Qgem9vbSwgdGhpcyBiZWluZyB0
aGUgZGl2aXNpb24gb2YgdGhlIHRpbGUgem9vbSBieSB0aGUKKyAqIGRlc2lyZWQgem9vbSwgdGhl
IGNsb3Nlc3QgdG8gMS4wIGdldHMgaXQuCisgKgorICogSWYgdGhlIHRpbGUgd2FzIHVudXNlZCB0
aGVuIGl0J3MgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZS4KKyAqCisgKiBBZnRlciB1c2FnZSwgcGxl
YXNlIGdpdmUgaXQgYmFjayB1c2luZyBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoKS4KKyAqCisg
KiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIGdldCB0aWxlIGZyb20uCisgKiBAcGFyYW0g
Y29sIHRoZSBjb2x1bW4gbnVtYmVyLgorICogQHBhcmFtIHJvdyB0aGUgcm93IG51bWJlci4KKyAq
IEBwYXJhbSB6b29tIHRoZSBleGFjdCB6b29tIHRvIHVzZS4KKyAqCisgKiBAcmV0dXJuIFRoZSB0
aWxlIGluc3RhbmNlIG9yIEBjIE5VTEwgaWYgbm9uZSBpcyBmb3VuZC4gSWYgdGhlIHRpbGUKKyAq
ICAgICAgICAgd2FzIGluIHRoZSB1bnVzZWQgY2FjaGUgaXQgd2lsbCBiZSBAYiByZW1vdmVkICh0
aHVzCisgKiAgICAgICAgIGNvbnNpZGVyZWQgdXNlZCkgYW5kIG9uZSBzaG91bGQgZ2l2ZSBpdCBi
YWNrIHdpdGgKKyAqICAgICAgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KCkgYWZ0ZXJ3YXJk
cy4KKyAqLworRXdrX1RpbGUgKmV3a190aWxlX21hdHJpeF90aWxlX25lYXJlc3RfZ2V0KEV3a19U
aWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBpbnQgcm93LCBmbG9h
dCB6b29tKQoreworICAgIEV3a19UaWxlICp0LCAqaXRlbSwgKml0ZW1fZm91bmQgPSBOVUxMOwor
ICAgIEVpbmFfSW5saXN0ICppbmw7CisgICAgZmxvYXQgem9vbV9mb3VuZCA9IDA7CisKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIE5VTEwpOworICAgIEVJTkFfU0FGRVRZ
X09OX0ZBTFNFX1JFVFVSTl9WQUwoem9vbSA+IDAuMCwgTlVMTCk7CisKKyAgICB0ID0gZWluYV9t
YXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKTsKKyAgICBpZiAo
IXQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHQtPnpvb20gPT0gem9vbSkgewor
ICAgICAgICBpdGVtX2ZvdW5kID0gdDsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAg
RUlOQV9JTkxJU1RfRk9SRUFDSChFSU5BX0lOTElTVF9HRVQodCksIGl0ZW0pIHsKKyAgICAgICAg
ZmxvYXQgY3VyX3pvb20gPSBpdGVtLT56b29tOworCisgICAgICAgIGlmIChjdXJfem9vbSA9PSB6
b29tKSB7CisgICAgICAgICAgICBpdGVtX2ZvdW5kID0gaXRlbTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoY3VyX3pvb20gPiB6b29tKQorICAg
ICAgICAgICAgY3VyX3pvb20gPSB6b29tIC8gY3VyX3pvb207CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGN1cl96b29tID0gY3VyX3pvb20gLyB6b29tOworCisgICAgICAgIGlmIChjdXJfem9v
bSA+IHpvb21fZm91bmQpIHsKKyAgICAgICAgICAgIGl0ZW1fZm91bmQgPSBpdGVtOworICAgICAg
ICAgICAgem9vbV9mb3VuZCA9IGN1cl96b29tOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFpdGVtX2ZvdW5kKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlubCA9IGVpbmFfaW5s
aXN0X3Byb21vdGUoRUlOQV9JTkxJU1RfR0VUKHQpLCBFSU5BX0lOTElTVF9HRVQoaXRlbV9mb3Vu
ZCkpOworICAgIGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X3JlcGxhY2UodG0tPm1hdHJpeCwg
cm93LCBjb2wsIGlubCwgTlVMTCk7CisKKyAgZW5kOgorICAgIGlmICghaXRlbV9mb3VuZC0+dmlz
aWJsZSkgeworICAgICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0bS0+
dHVjLCBpdGVtX2ZvdW5kKSkKKyAgICAgICAgICAgIFdSTigiRXdrX1RpbGUgd2FzIHVudXNlZCBi
dXQgbm90IGluIGNhY2hlPyBidWchIik7CisgICAgfQorCisgICAgcmV0dXJuIGl0ZW1fZm91bmQ7
Cit9CisKKy8qKgorICogQ3JlYXRlIGEgbmV3IHRpbGUgYXQgZ2l2ZW4gcG9zaXRpb24gYW5kIHpv
b20gbGV2ZWwgaW4gdGhlIG1hdHJpeC4KKyAqCisgKiBUaGUgbmV3bHkgY3JlYXRlZCB0aWxlIGlz
IGNvbnNpZGVyZWQgaW4gdXNlIGFuZCBub3QgcHV0IGludG8gY2FjaGUKKyAqIG9mIHVudXNlZCB0
aWxlcy4gQWZ0ZXIgaXQgaXMgdXNlZCBvbmUgc2hvdWxkIGNhbGwKKyAqIGV3a190aWxlX21hdHJp
eF90aWxlX3B1dCgpIHRvIGdpdmUgaXQgYmFjayB0byBtYXRyaXguCisgKgorICogQHBhcmFtIHRt
IHRoZSB0aWxlIG1hdHJpeCB0byBjcmVhdGUgdGlsZSBvbi4KKyAqIEBwYXJhbSBjb2wgdGhlIGNv
bHVtbiBudW1iZXIuCisgKiBAcGFyYW0gcm93IHRoZSByb3cgbnVtYmVyLgorICogQHBhcmFtIHpv
b20gdGhlIGxldmVsIHRvIGNyZWF0ZSB0aWxlLCB1c2VkIHRvIGRldGVybWluZSB0aWxlIHNpemUu
CisgKi8KK0V3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcoRXdrX1RpbGVfTWF0cml4
ICp0bSwgRXZhcyAqZXZhcywgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGludCByb3csIGZs
b2F0IHpvb20pCit7CisgICAgRXZhc19Db29yZCBzOworICAgIEVpbmFfSW5saXN0ICpvbGQ7Cisg
ICAgRXdrX1RpbGUgKnQ7CisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0s
IE5VTEwpOworICAgIEVJTkFfU0FGRVRZX09OX0ZBTFNFX1JFVFVSTl9WQUwoem9vbSA+IDAuMCwg
TlVMTCk7CisKKyAgICBzID0gVElMRV9TSVpFX0FUX1pPT00oVElMRV9NQVRSSVhfQkFTRV9USUxF
X1NJWkUsIHpvb20pOworICAgIHpvb20gPSAoZmxvYXQpcyAvIChmbG9hdClUSUxFX01BVFJJWF9C
QVNFX1RJTEVfU0laRTsKKworICAgIHQgPSBld2tfdGlsZV9uZXcoZXZhcywgcywgcywgem9vbSwg
dG0tPmNzcGFjZSk7CisgICAgaWYgKCF0KSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0
ZSB0aWxlICVkeCVkIGF0ICVmLCBjc3BhY2U9JWQiLAorICAgICAgICAgICAgcywgcywgKGRvdWJs
ZSl6b29tLCB0bS0+Y3NwYWNlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAg
b2xkID0gZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29s
KTsKKyAgICBvbGQgPSBlaW5hX2lubGlzdF9wcmVwZW5kKG9sZCwgRUlOQV9JTkxJU1RfR0VUKHQp
KTsKKyAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X3JlcGxhY2UodG0tPm1hdHJp
eCwgcm93LCBjb2wsIHQsIE5VTEwpKSB7CisgICAgICAgIEVSUigiY291bGQgbm90IHNldCBtYXRy
aXggY2VsbCwgcm93L2NvbCBvdXRzaWRlIG1hdHJpeCBkaW1lbnNpb25zISIpOworICAgICAgICBl
d2tfdGlsZV9mcmVlKHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB0LT5j
b2wgPSBjb2w7CisgICAgdC0+cm93ID0gcm93OworICAgIHQtPnggPSBjb2wgKiBzOworICAgIHQt
PnkgPSByb3cgKiBzOworCisgICAgY2Fpcm9fdHJhbnNsYXRlKHQtPmNhaXJvLCAtdC0+eCwgLXQt
PnkpOworCisgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7CisgICAgdG0tPnVw
ZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKKworI2lmZGVmIERFQlVH
X01FTV9MRUFLUworICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7Cisg
ICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCsrOworI2VuZGlmCisKKyAgICByZXR1cm4gdDsK
K30KKworLyoqCisgKiBHaXZlcyBiYWNrIHRoZSB0aWxlIHRvIHRoZSB0aWxlIG1hdHJpeC4KKyAq
CisgKiBUaGlzIHdpbGwgcmVwb3J0IHRoZSB0aWxlIGlzIG5vIGxvbmdlciBpbiB1c2UgYnkgdGhl
IG9uZSB0aGF0IGdvdAorICogaXQgd2l0aCBld2tfdGlsZV9tYXRyaXhfdGlsZV9uZWFyZXN0X2dl
dCgpIG9yCisgKiBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoKS4KKyAqCisgKiBBbnkg
cHJldmlvdXMgcmVmZXJlbmNlIHRvIHRpbGUgc2hvdWxkIGJlIHJlbGVhc2VkCisgKiAoZXdrX3Rp
bGVfaGlkZSgpKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBzbyBpdCB3aWxsCisgKiBi
ZSBrbm93biBpZiBpdCBpcyBub3QgdmlzaWJpbGUgYW55bW9yZSBhbmQgdGh1cyBjYW4gYmUgcHV0
IGludG8gdGhlCisgKiB1bnVzZWQgY2FjaGUuCisgKgorICogQHBhcmFtIHRtIHRoZSB0aWxlIG1h
dHJpeCB0byByZXR1cm4gdGlsZSB0by4KKyAqIEBwYXJhbSB0IHRoZSB0aWxlIGluc3RhbmNlIHRv
IHJldHVybiwgbXVzdCBAYiBub3QgYmUgQGMgTlVMTC4KKyAqIEBwYXJhbSBsYXN0X3VzZWQgdGlt
ZSBpbiB3aGljaCB0aWxlIHdhcyBsYXN0IHVzZWQuCisgKgorICogQHJldHVybiAjRUlOQV9UUlVF
IG9uIHN1Y2Nlc3Mgb3IgI0VJTkFfRkFMU0Ugb24gZmFpbHVyZS4KKyAqLworRWluYV9Cb29sIGV3
a190aWxlX21hdHJpeF90aWxlX3B1dChFd2tfVGlsZV9NYXRyaXggKnRtLCBFd2tfVGlsZSAqdCwg
ZG91YmxlIGxhc3RfdXNlZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
dG0sIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0LCBF
SU5BX0ZBTFNFKTsKKworICAgIGlmICh0LT52aXNpYmxlKQorICAgICAgICByZXR1cm4gRUlOQV9U
UlVFOworCisgICAgdC0+c3RhdHMubGFzdF91c2VkID0gbGFzdF91c2VkOworICAgIHJldHVybiBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQodG0tPnR1YywgdCwgX2V3a190aWxlX21hdHJp
eF90aWxlX2ZyZWUsIHRtKTsKK30KKworRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3Vw
ZGF0ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgaW50
IHJvdywgY29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSkKK3sKKyAgICBFd2tfVGlsZSAqbCwg
KnQ7CisgICAgRWluYV9SZWN0YW5nbGUgbmV3X3VwZGF0ZTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTCh1cGRhdGUsIEVJTkFfRkFMU0UpOworCisgICAgbWVtY3B5KCZuZXdfdXBkYXRl
LCB1cGRhdGUsIHNpemVvZihuZXdfdXBkYXRlKSk7CisgICAgLy8gY2hlY2sgdXBkYXRlIGlzIHZh
bGlkLCBvdGhlcndpc2UgcmV0dXJuIEVJTkFfRkFMU0UKKyAgICBpZiAodXBkYXRlLT54IDwgMCB8
fCB1cGRhdGUtPnkgPCAwIHx8IHVwZGF0ZS0+dyA8PSAwIHx8IHVwZGF0ZS0+aCA8PSAwKSB7Cisg
ICAgICAgIEVSUigiaW52YWxpZCB1cGRhdGUgcmVnaW9uLiIpOworICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKKyAgICB9CisKKyAgICBpZiAodXBkYXRlLT54ICsgdXBkYXRlLT53IC0gMSA+PSBU
SUxFX01BVFJJWF9CQVNFX1RJTEVfU0laRSkKKyAgICAgICAgbmV3X3VwZGF0ZS53ID0gVElMRV9N
QVRSSVhfQkFTRV9USUxFX1NJWkUgLSB1cGRhdGUtPng7CisgICAgaWYgKHVwZGF0ZS0+eSArIHVw
ZGF0ZS0+aCAtIDEgPj0gVElMRV9NQVRSSVhfQkFTRV9USUxFX1NJWkUpCisgICAgICAgIG5ld191
cGRhdGUuaCA9IFRJTEVfTUFUUklYX0JBU0VfVElMRV9TSVpFIC0gdXBkYXRlLT55OworCisgICAg
bCA9IGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCk7
CisKKyAgICBpZiAoIWwpCisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisKKyAgICBFSU5BX0lO
TElTVF9GT1JFQUNIKEVJTkFfSU5MSVNUX0dFVChsKSwgdCkgeworICAgICAgICBpZiAoIXQtPnVw
ZGF0ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgICAgICAgICAgdG0tPnVwZGF0ZXMg
PSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKKyAgICAgICAgbmV3X3VwZGF0ZS54
ID0gcm91bmRmKHQtPnpvb20gKiBuZXdfdXBkYXRlLngpOworICAgICAgICBuZXdfdXBkYXRlLnkg
PSByb3VuZGYodC0+em9vbSAqIG5ld191cGRhdGUueSk7CisgICAgICAgIG5ld191cGRhdGUudyA9
IHJvdW5kZih0LT56b29tICogbmV3X3VwZGF0ZS53KTsKKyAgICAgICAgbmV3X3VwZGF0ZS5oID0g
cm91bmRmKHQtPnpvb20gKiBuZXdfdXBkYXRlLmgpOworICAgICAgICBld2tfdGlsZV91cGRhdGVf
YXJlYSh0LCAmbmV3X3VwZGF0ZSk7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30K
KworRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZV9mdWxsKEV3a19UaWxlX01h
dHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBpbnQgcm93KQoreworICAgIEV3
a19UaWxlICpsLCAqdDsKKyAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsICpjZWxsOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7CisKKyAgICBpZiAo
IWVpbmFfbWF0cml4c3BhcnNlX2NlbGxfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCwgJmNl
bGwpKQorICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKworICAgIGlmICghY2VsbCkKKyAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIGwgPSBlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2Rh
dGFfZ2V0KGNlbGwpOworICAgIGlmICghbCkgeworICAgICAgICBDUklUSUNBTCgibWF0cml4IGNl
bGwgd2l0aCBubyB0aWxlISIpOworICAgICAgICByZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKwor
ICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goRUlOQV9JTkxJU1RfR0VUKGwpLCB0KSB7CisgICAgICAg
IGlmICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgICAgICB0
bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOworICAgICAgICBl
d2tfdGlsZV91cGRhdGVfZnVsbCh0KTsKKyAgICB9CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOwor
fQorCit2b2lkIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGVfTWF0
cml4ICp0bSwgRXdrX1RpbGUgKnQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
dG0pOworICAgIGlmICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAg
ICAgIHJldHVybjsKKyAgICBld2tfdGlsZV91cGRhdGVzX2NsZWFyKHQpOworICAgIHRtLT51cGRh
dGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdCk7Cit9CisKK3N0YXRpYyBFaW5h
X0Jvb2wgX2V3a190aWxlX21hdHJpeF9zbGljZXJfc2V0dXAoRXdrX1RpbGVfTWF0cml4ICp0bSwg
Y29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEsIGZsb2F0IHpvb20sIEVpbmFfVGlsZV9HcmlkX1Ns
aWNlciAqc2xpY2VyKQoreworICAgIHVuc2lnbmVkIGxvbmcgcm93cywgY29sczsKKyAgICBFdmFz
X0Nvb3JkIHgsIHksIHcsIGgsIHR3LCB0aDsKKworICAgIGlmIChhcmVhLT53IDw9IDAgfHwgYXJl
YS0+aCA8PSAwKSB7CisgICAgICAgIFdSTigiaW52YWxpZCBhcmVhIHJlZ2lvbjogJWQsJWQrJWR4
JWQuIiwKKyAgICAgICAgICAgIGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwor
ICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAgICB4ID0gYXJlYS0+eDsKKyAg
ICB5ID0gYXJlYS0+eTsKKyAgICB3ID0gYXJlYS0+dzsKKyAgICBoID0gYXJlYS0+aDsKKworICAg
IHR3ID0gVElMRV9TSVpFX0FUX1pPT00oVElMRV9XLCB6b29tKTsKKyAgICB0aCA9IFRJTEVfU0la
RV9BVF9aT09NKFRJTEVfSCwgem9vbSk7CisKKyAgICAvLyBjcm9wcGluZyBhcmVhIHJlZ2lvbiB0
byBmaXQgbWF0cml4CisgICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9nZXQodG0tPm1hdHJpeCwg
JnJvd3MsICZjb2xzKTsKKyAgICBpZiAoeCA8IDApIHsKKyAgICAgICAgdyArPSB4OworICAgICAg
ICB4ID0gMDsKKyAgICB9CisgICAgaWYgKHkgPCAwKSB7CisgICAgICAgIGggKz0geTsKKyAgICAg
ICAgeSA9IDA7CisgICAgfQorCisgICAgaWYgKHkgKyBoIC0gMSA+IHJvd3MgKiB0aCkKKyAgICAg
ICAgaCA9IHJvd3MgKiB0aCAtIHk7CisgICAgaWYgKHggKyB3IC0gMSA+IGNvbHMgKiB0dykKKyAg
ICAgICAgdyA9IGNvbHMgKiB0dyAtIHg7CisKKyAgICByZXR1cm4gZWluYV90aWxlX2dyaWRfc2xp
Y2VyX3NldHVwKHNsaWNlciwgeCwgeSwgdywgaCwgdHcsIHRoKTsKK30KKworCitFaW5hX0Jvb2wg
ZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShFd2tfVGlsZV9NYXRyaXggKnRtLCBjb25zdCBFaW5hX1Jl
Y3RhbmdsZSAqdXBkYXRlLCBmbG9hdCB6b29tKQoreworICAgIGNvbnN0IEVpbmFfVGlsZV9Hcmlk
X0luZm8gKmluZm87CisgICAgRWluYV9UaWxlX0dyaWRfU2xpY2VyIHNsaWNlcjsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTCh1cGRhdGUsIEVJTkFfRkFMU0UpOworCisgICAgaWYgKHVw
ZGF0ZS0+dyA8IDEgfHwgdXBkYXRlLT5oIDwgMSkgeworICAgICAgICBEQkcoIldoeSB3ZSBnZXQg
dXBkYXRlcyB3aXRoIGVtcHR5IGFyZWFzPyAlZCwlZCslZHglZCBhdCB6b29tICVmIiwKKyAgICAg
ICAgICAgIHVwZGF0ZS0+eCwgdXBkYXRlLT55LCB1cGRhdGUtPncsIHVwZGF0ZS0+aCwgem9vbSk7
CisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisgICAgfQorCisgICAgaWYgKCFfZXdrX3RpbGVf
bWF0cml4X3NsaWNlcl9zZXR1cCh0bSwgdXBkYXRlLCB6b29tLCAmc2xpY2VyKSkgeworICAgICAg
ICBFUlIoIkNvdWxkIG5vdCBzZXR1cCBzbGljZXIgZm9yIHVwZGF0ZSAlZCwlZCslZHglZCBhdCB6
b29tICVmIiwKKyAgICAgICAgICAgIHVwZGF0ZS0+eCwgdXBkYXRlLT55LCB1cGRhdGUtPncsIHVw
ZGF0ZS0+aCwgem9vbSk7CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAg
IHdoaWxlIChlaW5hX3RpbGVfZ3JpZF9zbGljZXJfbmV4dCgmc2xpY2VyLCAmaW5mbykpIHsKKyAg
ICAgICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKKyAgICAgICAgRXdrX1RpbGUgKmwsICp0Owor
ICAgICAgICBjb2wgPSBpbmZvLT5jb2w7CisgICAgICAgIHJvdyA9IGluZm8tPnJvdzsKKworICAg
ICAgICBsID0gZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywg
Y29sKTsKKyAgICAgICAgaWYgKCFsKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
RUlOQV9JTkxJU1RfRk9SRUFDSChFSU5BX0lOTElTVF9HRVQobCksIHQpIHsKKyAgICAgICAgICAg
IGlmICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgICAgICAg
ICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKKyAgICAg
ICAgICAgIGlmIChpbmZvLT5mdWxsKQorICAgICAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9m
dWxsKHQpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHQtPnpvb20g
IT0gem9vbSkKKyAgICAgICAgICAgICAgICAgICAgZXdrX3RpbGVfdXBkYXRlX2Z1bGwodCk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBld2tfdGlsZV91cGRhdGVf
YXJlYSh0LCAmaW5mby0+cmVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3ZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0
ZXNfcHJvY2VzcyhFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIEVpbmFfTGlzdCAqbCwgKmxf
bmV4dDsKKyAgICBFd2tfVGlsZSAqdDsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
bSk7CisKKyAgICAvLyBwcm9jZXNzIHVwZGF0ZXMsIHVuZmxhZyB0aWxlcworICAgIEVJTkFfTElT
VF9GT1JFQUNIX1NBRkUodG0tPnVwZGF0ZXMsIGwsIGxfbmV4dCwgdCkgeworICAgICAgICBld2tf
dGlsZV91cGRhdGVzX3Byb2Nlc3ModCwgdG0tPnJlbmRlci5jYiwgdG0tPnJlbmRlci5kYXRhKTsK
KyAgICAgICAgaWYgKHQtPnZpc2libGUpIHsKKyAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZXNf
Y2xlYXIodCk7CisgICAgICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmVfbGlz
dCh0bS0+dXBkYXRlcywgbCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgZXdrX3RpbGVf
bWF0cml4X3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGVfTWF0cml4ICp0bSkKK3sKKyAgICBFd2tfVGls
ZSAqdDsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7CisKKyAgICBFSU5BX0xJ
U1RfRlJFRSh0bS0+dXBkYXRlcywgdCkKKyAgICAgICAgZXdrX3RpbGVfdXBkYXRlc19jbGVhcih0
KTsKKyAgICB0bS0+dXBkYXRlcyA9IE5VTEw7Cit9CisKKy8vIHJlbW92ZSBtZSBsYXRlciEKK3Zv
aWQgZXdrX3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAg
IEVpbmFfSXRlcmF0b3IgKml0ID0gZWluYV9tYXRyaXhzcGFyc2VfaXRlcmF0b3JfY29tcGxldGVf
bmV3KHRtLT5tYXRyaXgpOworICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7CisgICAg
RWluYV9Cb29sIGxhc3RfZW1wdHkgPSBFSU5BX0ZBTFNFOworCisjaWZkZWYgREVCVUdfTUVNX0xF
QUtTCisgICAgcHJpbnRmKCJFd2tfVGlsZSBNYXRyaXg6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJ
dTY0IjolIlBSSXU2NCJdICIKKyAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0
IjolIlBSSXU2NCJdXG4iLAorICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0
bS0+c3RhdHMudGlsZXMuZnJlZWQsCisgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0
ZWQgLSB0bS0+c3RhdHMudGlsZXMuZnJlZWQsCisgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5h
bGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKKyAgICAgICAgICAgdG0tPnN0YXRzLmJ5
dGVzLmFsbG9jYXRlZCAtIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCk7CisjZWxzZQorICAgIHByaW50
ZigiRXdrX1RpbGUgTWF0cml4OlxuIik7CisjZW5kaWYKKworICAgIEVJTkFfSVRFUkFUT1JfRk9S
RUFDSChpdCwgY2VsbCkgeworICAgICAgICB1bnNpZ25lZCBsb25nIHJvdywgY29sOworICAgICAg
ICBFaW5hX0lubGlzdCAqbDsKKyAgICAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9wb3NpdGlv
bl9nZXQoY2VsbCwgJnJvdywgJmNvbCk7CisgICAgICAgIGwgPSBlaW5hX21hdHJpeHNwYXJzZV9j
ZWxsX2RhdGFfZ2V0KGNlbGwpOworCisgICAgICAgIGlmICghbCkgeworICAgICAgICAgICAgaWYg
KCFsYXN0X2VtcHR5KSB7CisgICAgICAgICAgICAgICAgbGFzdF9lbXB0eSA9IEVJTkFfVFJVRTsK
KyAgICAgICAgICAgICAgICBwcmludGYoIkVtcHR5OiIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcHJpbnRmKCIgWyVsdSwlbHVdIiwgY29sLCByb3cpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKGxhc3RfZW1wdHkpIHsKKyAgICAgICAgICAgICAgICBsYXN0X2VtcHR5
ID0gRUlOQV9GQUxTRTsKKyAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBFd2tfVGlsZSAqdDsKKworICAgICAgICAgICAgcHJpbnRmKCIlM2x1
LCUzbHUgJTEwcDoiLCBjb2wsIHJvdywgbCk7CisgICAgICAgICAgICBFSU5BX0lOTElTVF9GT1JF
QUNIKGwsIHQpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIgWyUzbHUsJTNsdSArICVkeCVkIEAg
JTAuM2ZdJWMiLAorICAgICAgICAgICAgICAgICAgICAgICB0LT5jb2wsIHQtPnJvdywgdC0+dywg
dC0+aCwgdC0+em9vbSwKKyAgICAgICAgICAgICAgICAgICAgICAgdC0+dmlzaWJsZSA/ICcqJzog
JyAnKTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBp
ZiAobGFzdF9lbXB0eSkKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgIGVpbmFfaXRlcmF0b3Jf
ZnJlZShpdCk7CisKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKHRtLT50dWMpOworfQor
CisvKioKKyAqIEZyZWV6ZSBtYXRyaXggdG8gbm90IGRvIG1haW50ZW5hbmNlIHRhc2tzLgorICoK
KyAqIE1haW50ZW5hbmNlIHRhc2tzIG9wdGltaXplIHVzYWdlLCBidXQgbWF5YmUgd2Uga25vdyB3
ZSBzaG91bGQgaG9sZAorICogb24gdGhlbSB1bnRpbCB3ZSBkbyB0aGUgbGFzdCBvcGVyYXRpb24s
IGluIHRoaXMgY2FzZSB3ZSBmcmVlemUKKyAqIHdoaWxlIG9wZXJhdGluZyBhbmQgdGhlbiB0aGF3
IHdoZW4gd2UncmUgZG9uZS4KKyAqCisgKiBAc2VlIGV3a190aWxlX21hdHJpeF90aGF3KCkKKyAq
Lwordm9pZCBld2tfdGlsZV9tYXRyaXhfZnJlZXplKEV3a19UaWxlX01hdHJpeCAqdG0pCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOworICAgIGlmICghdG0tPmZyb3plbikK
KyAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZSh0bS0+dHVjKTsKKyAgICB0bS0+
ZnJvemVuKys7Cit9CisKKy8qKgorICogVW5mcmVlemVzIG1haW50ZW5hbmNlIHRhc2tzLgorICoK
KyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgY291bnRlcnBhcnQgb2YgZnJlZXplLCB0aGVuIG1haW50
ZW5hbmNlIHRhc2tzCisgKiB3aWxsIHJ1biBpbW1lZGlhdGVseS4KKyAqLwordm9pZCBld2tfdGls
ZV9tYXRyaXhfdGhhdyhFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHRtKTsKKyAgICBpZiAoIXRtLT5mcm96ZW4pIHsKKyAgICAgICAgRVJSKCJ0
aGF3aW5nIG1vcmUgdGhhbiBmcmVlemluZyEiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHRtLT5mcm96ZW4tLTsKKyAgICBpZiAoIXRtLT5mcm96ZW4pCisgICAgICAgIGV3a190aWxl
X3VudXNlZF9jYWNoZV90aGF3KHRtLT50dWMpOworfQpJbmRleDogV2ViS2l0L2VmbC9ld2svZXdr
X3RpbGVkX21hdHJpeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9lZmwvZXdrL2V3a190aWxlZF9t
YXRyaXguaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXgu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAg
UHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIGV3a190aWxlZF9tYXRyaXhf
aAorI2RlZmluZSBld2tfdGlsZWRfbWF0cml4X2gKKworI2luY2x1ZGUgImV3a19lYXBpLmgiCisj
aW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCIKKworI2luY2x1ZGUgPEV2YXMuaD4K
KworLyogbWF0cml4IG9mIHRpbGVzICovCitFQVBJIEV3a19UaWxlX01hdHJpeCAqZXdrX3RpbGVf
bWF0cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgdW5zaWduZWQgbG9uZyBjb2xz
LCB1bnNpZ25lZCBsb25nIHJvd3MsIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UsIHZvaWQgKCpyZW5k
ZXJfY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBk
YXRlKSwgY29uc3Qgdm9pZCAqZGF0YSk7CitFQVBJIHZvaWQgICAgICAgICBld2tfdGlsZV9tYXRy
aXhfZnJlZShFd2tfVGlsZV9NYXRyaXggKnRtKTsKKworRUFQSSB2b2lkICAgICAgICAgZXdrX3Rp
bGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbHMs
IHVuc2lnbmVkIGxvbmcgcm93cyk7CisKK0VBUEkgRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tf
dGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChjb25zdCBFd2tfVGlsZV9NYXRyaXggKnRtKTsK
KworRUFQSSBFd2tfVGlsZSAgICAgKmV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChFd2tf
VGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgaW50IHJvdywgZmxv
YXQgem9vbSk7CitFQVBJIEVpbmFfQm9vbCAgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3Rf
ZXhpc3RzKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBp
bnQgcm93LCBmbG9hdCB6b29tKTsKK0VBUEkgRXdrX1RpbGUgICAgICpld2tfdGlsZV9tYXRyaXhf
dGlsZV9uZWFyZXN0X2dldChFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwg
dW5zaWduZWQgaW50IHJvdywgZmxvYXQgem9vbSk7CitFQVBJIEV3a19UaWxlICAgICAqZXdrX3Rp
bGVfbWF0cml4X3RpbGVfbmV3KEV3a19UaWxlX01hdHJpeCAqdG0sIEV2YXMgKmV2YXMsIHVuc2ln
bmVkIGxvbmcgY29sLCB1bnNpZ25lZCBpbnQgcm93LCBmbG9hdCB6b29tKTsKK0VBUEkgRWluYV9C
b29sIGV3a190aWxlX21hdHJpeF90aWxlX3B1dChFd2tfVGlsZV9NYXRyaXggKnRtLCBFd2tfVGls
ZSAqdCwgZG91YmxlIGxhc3RfdXNlZCk7CisKK0VBUEkgRWluYV9Cb29sIGV3a190aWxlX21hdHJp
eF90aWxlX3VwZGF0ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5z
aWduZWQgaW50IHJvdywgY29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSk7CitFQVBJIEVpbmFf
Qm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZV9NYXRyaXggKnRt
LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgaW50IHJvdyk7CitFQVBJIHZvaWQgZXdrX3Rp
bGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcihFd2tfVGlsZV9NYXRyaXggKnRtLCBFd2tfVGls
ZSAqdCk7CisKK0VBUEkgRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF91cGRhdGUoRXdrX1RpbGVf
TWF0cml4ICp0bSwgY29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSwgZmxvYXQgem9vbSk7CitF
QVBJIHZvaWQgICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlX01h
dHJpeCAqdG0pOworRUFQSSB2b2lkICAgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIo
RXdrX1RpbGVfTWF0cml4ICp0bSk7CitFQVBJIHZvaWQgICAgICBld2tfdGlsZV9tYXRyaXhfZnJl
ZXplKEV3a19UaWxlX01hdHJpeCAqdG0pOworRUFQSSB2b2lkICAgICAgZXdrX3RpbGVfbWF0cml4
X3RoYXcoRXdrX1RpbGVfTWF0cml4ICp0bSk7CisKKy8vIHJlbW92ZSBtZSEKKyAgICB2b2lkIGV3
a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4ICp0bSk7CisgICAgdm9pZCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
KTsKKyAgICB2b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpOworCisKKyNlbmRpZiAv
LyBld2tfdGlsZWRfbWF0cml4X2gKKwpJbmRleDogV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21v
ZGVsLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmMJKHJl
dmlzaW9uIDApCisrKyBXZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuYwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5MDUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ft
c3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBl
bWJlZGRlZCBzeXN0ZW1zCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a190
aWxlZF9tb2RlbC5oIgorCisjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5jbHVkZSAiZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmUuaCIKKyNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgorI2luY2x1
ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxlaW5hX3NhZmV0eV9jaGVja3MuaD4KKyNpbmNsdWRlIDxl
cnJuby5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4gLy8gWFhY
IFJFTU9WRSBNRSBMQVRFUgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorCisjaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCisjaW5jbHVkZSA8c3lz
L3RpbWUuaD4KKyNlbmRpZgorCisjaWZuZGVmIENBSVJPX0ZPUk1BVF9SR0IxNl81NjUKKyNkZWZp
bmUgQ0FJUk9fRk9STUFUX1JHQjE2XzU2NSA0CisjZW5kaWYKKworI2RlZmluZSBJRFgoY29sLCBy
b3csIHJvd3NwYW4pIChjb2wgKyAocm93ICogcm93c3BhbikpCisjZGVmaW5lIE1JTihhLCBiKSAo
KGEgPCBiKSA/IGEgOiBiKQorI2RlZmluZSBNQVgoYSwgYikgKChhID4gYikgPyBhIDogYikKKwor
I2lmZGVmIERFQlVHX01FTV9MRUFLUworc3RhdGljIHVpbnQ2NF90IHRpbGVzX2FsbG9jYXRlZCA9
IDA7CitzdGF0aWMgdWludDY0X3QgdGlsZXNfZnJlZWQgPSAwOworc3RhdGljIHVpbnQ2NF90IGJ5
dGVzX2FsbG9jYXRlZCA9IDA7CitzdGF0aWMgdWludDY0X3QgYnl0ZXNfZnJlZWQgPSAwOworCitz
dHJ1Y3QgdGlsZV9hY2NvdW50IHsKKyAgICBFdmFzX0Nvb3JkIHNpemU7CisgICAgc3RydWN0IHsK
KyAgICAgICAgdWludDY0X3QgYWxsb2NhdGVkOworICAgICAgICB1aW50NjRfdCBmcmVlZDsKKyAg
ICB9IHRpbGVzLCBieXRlczsKK307CisKK3N0YXRpYyBzaXplX3QgYWNjb3VudGluZ19sZW4gPSAw
Oworc3RhdGljIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjY291bnRpbmcgPSBOVUxMOworCitzdGF0
aWMgaW5saW5lIHN0cnVjdCB0aWxlX2FjY291bnQgKl9ld2tfdGlsZV9hY2NvdW50X2dldChjb25z
dCBFd2tfVGlsZSAqdCkKK3sKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2M7CisgICAgc2l6
ZV90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgYWNjb3VudGluZ19sZW47IGkrKykgeworICAg
ICAgICBpZiAoYWNjb3VudGluZ1tpXS5zaXplID09IHQtPncpCisgICAgICAgICAgICByZXR1cm4g
YWNjb3VudGluZyArIGk7CisgICAgfQorCisgICAgaSA9IChhY2NvdW50aW5nX2xlbiArIDEpICog
c2l6ZW9mKHN0cnVjdCB0aWxlX2FjY291bnQpOworICAgIFJFQUxMT0NfT1JfT09NX1JFVChhY2Nv
dW50aW5nLCBpLCBOVUxMKTsKKworICAgIGFjYyA9IGFjY291bnRpbmcgKyBhY2NvdW50aW5nX2xl
bjsKKyAgICBhY2MtPnNpemUgPSB0LT53OworICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkID0gMDsK
KyAgICBhY2MtPnRpbGVzLmZyZWVkID0gMDsKKyAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCA9IDA7
CisgICAgYWNjLT5ieXRlcy5mcmVlZCA9IDA7CisKKyAgICBhY2NvdW50aW5nX2xlbisrOworCisg
ICAgcmV0dXJuIGFjYzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50
X2FsbG9jYXRlZChjb25zdCBFd2tfVGlsZSAqdCkKK3sKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50
ICphY2MgPSBfZXdrX3RpbGVfYWNjb3VudF9nZXQodCk7CisgICAgaWYgKCFhY2MpCisgICAgICAg
IHJldHVybjsKKyAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCArPSB0LT5ieXRlczsKKyAgICBhY2Mt
PnRpbGVzLmFsbG9jYXRlZCsrOworCisgICAgYnl0ZXNfYWxsb2NhdGVkICs9IHQtPmJ5dGVzOwor
ICAgIHRpbGVzX2FsbG9jYXRlZCsrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxl
X2FjY291bnRfZnJlZWQoY29uc3QgRXdrX1RpbGUgKnQpCit7CisgICAgc3RydWN0IHRpbGVfYWNj
b3VudCAqYWNjID0gX2V3a190aWxlX2FjY291bnRfZ2V0KHQpOworICAgIGlmICghYWNjKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhY2MtPmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOworICAgIGFj
Yy0+dGlsZXMuZnJlZWQrKzsKKworICAgIGJ5dGVzX2ZyZWVkICs9IHQtPmJ5dGVzOworICAgIHRp
bGVzX2ZyZWVkKys7Cit9CisKK3ZvaWQgZXdrX3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKK3sK
KyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2M7CisgICAgc3RydWN0IHRpbGVfYWNjb3VudCAq
YWNjX2VuZDsKKworICAgIHByaW50ZigiVElMRSBCQUxBTkNFOiB0aWxlc1srJSJQUkl1NjQiLC0l
IlBSSXU2NCI6JSJQUkl1NjQiXSAiCisgICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBS
SXU2NCI6JSJQUkl1NjQiXVxuIiwKKyAgICAgICAgICAgIHRpbGVzX2FsbG9jYXRlZCwgdGlsZXNf
ZnJlZWQsIHRpbGVzX2FsbG9jYXRlZCAtIHRpbGVzX2ZyZWVkLAorICAgICAgICAgICAgYnl0ZXNf
YWxsb2NhdGVkLCBieXRlc19mcmVlZCwgYnl0ZXNfYWxsb2NhdGVkIC0gYnl0ZXNfZnJlZWQpOwor
CisgICAgaWYgKCFhY2NvdW50aW5nX2xlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgYWNjID0g
YWNjb3VudGluZzsKKyAgICBhY2NfZW5kID0gYWNjICsgYWNjb3VudGluZ19sZW47CisgICAgcHJp
bnRmKCJCRUdJTjogVElMRSBCQUxBTkNFIERFVEFJTFMgKFRPIFRISVMgTU9NRU5UISk6XG4iKTsK
KyAgICBmb3IgKDsgYWNjIDwgYWNjX2VuZDsgYWNjKyspIHsKKyAgICAgICAgdWludDY0X3QgdGls
ZXMsIGJ5dGVzOworCisgICAgICAgIHRpbGVzID0gYWNjLT50aWxlcy5hbGxvY2F0ZWQgLSBhY2Mt
PnRpbGVzLmZyZWVkOworICAgICAgICBieXRlcyA9IGFjYy0+Ynl0ZXMuYWxsb2NhdGVkIC0gYWNj
LT5ieXRlcy5mcmVlZDsKKworICAgICAgICBwcmludGYoIiAgICU0ZDogdGlsZXNbKyU0IlBSSXU2
NCIsLSU0IlBSSXU2NCI6JTQiUFJJdTY0Il0gIgorICAgICAgICAgICAgICAgImJ5dGVzWyslOCJQ
Ukl1NjQiLC0lOCJQUkl1NjQiOiU4IlBSSXU2NCJdJXNcbiIsCisgICAgICAgICAgICAgICBhY2Mt
PnNpemUsCisgICAgICAgICAgICAgICBhY2MtPnRpbGVzLmFsbG9jYXRlZCwgYWNjLT50aWxlcy5m
cmVlZCwgdGlsZXMsCisgICAgICAgICAgICAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCwgYWNjLT5i
eXRlcy5mcmVlZCwgYnl0ZXMsCisgICAgICAgICAgICAgICAoYnl0ZXMgfHwgdGlsZXMpID8gIiBQ
T1NTSUJMRSBMRUFLIiA6ICIiKTsKKyAgICB9CisgICAgcHJpbnRmKCJFTkQ6IFRJTEUgQkFMQU5D
RSBERVRBSUxTIChUTyBUSElTIE1PTUVOVCEpOlxuIik7Cit9CisjZWxzZQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKGNvbnN0IEV3a19UaWxlICp0KSB7
IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9mcmVlZChjb25zdCBFd2tf
VGlsZSAqdCkgeyB9CisKK3ZvaWQgZXdrX3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKK3sKKyAg
ICBwcmludGYoImNvbXBpbGUgd2Via2l0IHdpdGggREVCVUdfTUVNX0xFQUtTIGRlZmluZWQhXG4i
KTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjg4
OChFd2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3QgYikKK3sKKyAgICB1
aW50MzJfdCAqZHN0MzIsICpkc3QzMl9lbmQsIGMxOworICAgIHVpbnQ2NF90ICpkc3Q2NCwgKmRz
dDY0X2VuZCwgYzI7CisKKyAgICBjMSA9IDB4ZmYwMDAwMDAgfCAoKHVpbnQzMl90KXIgPDwgMTYp
IHwgKCh1aW50MzJfdClnIDw8IDgpIHwgYjsKKyAgICBjMiA9ICgodWludDY0X3QpYzEgPDwgMzIp
IHwgYzE7CisKKyAgICBkc3Q2NCA9ICh1aW50NjRfdCAqKXQtPnBpeGVsczsKKyAgICBkc3Q2NF9l
bmQgPSBkc3Q2NCArICgodC0+Ynl0ZXMgLyA4KSAmIH43KTsKKyAgICBmb3IgKDsgZHN0NjQgPCBk
c3Q2NF9lbmQ7IGRzdDY0ICs9IDgpIHsKKyAgICAgICAgLyogVE9ETzogQVJNIGFkZCBwbGQgb3Ig
TkVPTiBpbnN0cnVjdGlvbnMgKi8KKyAgICAgICAgZHN0NjRbMF0gPSBjMjsKKyAgICAgICAgZHN0
NjRbMV0gPSBjMjsKKyAgICAgICAgZHN0NjRbMl0gPSBjMjsKKyAgICAgICAgZHN0NjRbM10gPSBj
MjsKKyAgICAgICAgZHN0NjRbNF0gPSBjMjsKKyAgICAgICAgZHN0NjRbNV0gPSBjMjsKKyAgICAg
ICAgZHN0NjRbNl0gPSBjMjsKKyAgICAgICAgZHN0NjRbN10gPSBjMjsKKyAgICB9CisKKyAgICBk
c3QzMiA9ICh1aW50MzJfdCAqKWRzdDY0X2VuZDsKKyAgICBkc3QzMl9lbmQgPSAodWludDMyX3Qg
KikodC0+cGl4ZWxzICsgdC0+Ynl0ZXMpOworICAgIGZvciAoOyBkc3QzMiA8IGRzdDMyX2VuZDsg
ZHN0MzIrKykKKyAgICAgICAgKmRzdDMyID0gYzE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVfcGFpbnRfcmdiNTY1KEV3a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywg
dWludDhfdCBiKQoreworICAgIHVpbnQxNl90ICpkc3QxNiwgKmRzdDE2X2VuZCwgYzE7CisgICAg
dWludDY0X3QgKmRzdDY0LCAqZHN0NjRfZW5kLCBjMjsKKworICAgIGMxID0gKCgoKHIgPj4gMykg
JiAweDFmKSA8PCAxMSkgfAorICAgICAgICAgICgoKGcgPj4gMikgJiAweDNmKSA8PCA1KSB8Cisg
ICAgICAgICAgKChiID4+IDMpICYgMHgxZikpOworCisgICAgYzIgPSAoKCh1aW50NjRfdCljMSA8
PCA0OCkgfCAoKHVpbnQ2NF90KWMxIDw8IDMyKSB8CisgICAgICAgICAgKCh1aW50NjRfdCljMSA8
PCAxNikgfCBjMSk7CisKKyAgICBkc3Q2NCA9ICh1aW50NjRfdCAqKXQtPnBpeGVsczsKKyAgICBk
c3Q2NF9lbmQgPSBkc3Q2NCArICgodC0+Ynl0ZXMgLyA4KSAmIH43KTsKKyAgICBmb3IgKDsgZHN0
NjQgPCBkc3Q2NF9lbmQ7IGRzdDY0ICs9IDgpIHsKKyAgICAgICAgLyogVE9ETzogQVJNIGFkZCBw
bGQgb3IgTkVPTiBpbnN0cnVjdGlvbnMgKi8KKyAgICAgICAgZHN0NjRbMF0gPSBjMjsKKyAgICAg
ICAgZHN0NjRbMV0gPSBjMjsKKyAgICAgICAgZHN0NjRbMl0gPSBjMjsKKyAgICAgICAgZHN0NjRb
M10gPSBjMjsKKyAgICAgICAgZHN0NjRbNF0gPSBjMjsKKyAgICAgICAgZHN0NjRbNV0gPSBjMjsK
KyAgICAgICAgZHN0NjRbNl0gPSBjMjsKKyAgICAgICAgZHN0NjRbN10gPSBjMjsKKyAgICB9CisK
KyAgICBkc3QxNiA9ICh1aW50MTZfdCAqKWRzdDE2X2VuZDsKKyAgICBkc3QxNl9lbmQgPSAodWlu
dDE2X3QgKikodC0+cGl4ZWxzICsgdC0+Ynl0ZXMpOworICAgIGZvciAoOyBkc3QxNiA8IGRzdDE2
X2VuZDsgZHN0MTYrKykKKyAgICAgICAgKmRzdDE2ID0gYzE7Cit9CisKK3N0YXRpYyBpbmxpbmUg
dm9pZCBfZXdrX3RpbGVfcGFpbnQoRXdrX1RpbGUgKnQsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1
aW50OF90IGIpCit7CisgICAgaWYgKHQtPmNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4
ODgpCisgICAgICAgIF9ld2tfdGlsZV9wYWludF9yZ2I4ODgodCwgciwgZywgYik7CisgICAgZWxz
ZSBpZiAodC0+Y3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9SR0I1NjVfQTVQKQorICAgICAgICBf
ZXdrX3RpbGVfcGFpbnRfcmdiNTY1KHQsIHIsIGcsIGIpOworICAgIGVsc2UKKyAgICAgICAgRVJS
KCJ1bmtub3duIGNvbG9yIHNwYWNlOiAlZCIsIHQtPmNzcGFjZSk7Cit9CisKKy8qKgorICogQ3Jl
YXRlIGEgbmV3IHRpbGUgb2YgZ2l2ZW4gc2l6ZSwgem9vbSBsZXZlbCBhbmQgY29sb3JzcGFjZS4K
KyAqCisgKiBBZnRlciBjcmVhdGVkIHRoZXNlIHByb3BlcnRpZXMgYXJlIGltbXV0YWJsZSBhcyB0
aGV5J3JlIHRoZSBiYXNpYworICogY2hhcmFjdGVyaXN0aWMgb2YgdGhlIHRpbGUgYW5kIGFueSBj
aGFuZ2Ugd2lsbCBsZWFkIHRvIGludmFsaWQKKyAqIG1lbW9yeSBhY2Nlc3MuCisgKgorICogT3Ro
ZXIgbWVtYmVycyBhcmUgb2YgZnJlZS1hY2Nlc3MgYW5kIG5vIGdldHRlcnMvc2V0dGVycyBhcmUK
KyAqIHByb3ZpZGVkIGluIG9yZGVyciB0byBhdm9pZCBleHBlbnNpdmUgb3BlcmF0aW9ucyBvbiB0
aG9zZSwgaG93ZXZlcgorICogc29tZSBhcmUgYmV0dGVyIG1hbmlwdWxhdGVkIHdpdGggcHJvdmlk
ZWQgZnVuY3Rpb25zLCBzdWNoIGFzCisgKiBld2tfdGlsZV9zaG93KCkgYW5kIGV3a190aWxlX2hp
ZGUoKSB0byBjaGFuZ2UKKyAqIEBjIHZpc2libGUgb3IgZXdrX3RpbGVfdXBkYXRlX2Z1bGwoKSwg
ZXdrX3RpbGVfdXBkYXRlX2FyZWEoKSwKKyAqIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoKSB0byBj
aGFuZ2UgQGMgc3RhdHMubWlzc2VzLAorICogQGMgc3RhdHMuZnVsbF91cGRhdGUgYW5kIEBjIHVw
ZGF0ZXMuCisgKi8KK0V3a19UaWxlICpld2tfdGlsZV9uZXcoRXZhcyAqZXZhcywgRXZhc19Db29y
ZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20sIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UpCit7
CisgICAgRWluYV9Jbmxpc3QgKmw7CisgICAgRXZhc19Db29yZCAqZWM7CisgICAgRXZhc19Db2xv
cnNwYWNlICplY3M7CisgICAgZmxvYXQgKmY7CisgICAgc2l6ZV90ICpzOworICAgIEV3a19UaWxl
ICp0OworICAgIHVuc2lnbmVkIGludCBhcmVhOworICAgIHNpemVfdCBieXRlczsKKyAgICBjYWly
b19mb3JtYXRfdCBmb3JtYXQ7CisgICAgY2Fpcm9fc3RhdHVzX3Qgc3RhdHVzOworICAgIGludCBz
dHJpZGU7CisKKyAgICBhcmVhID0gdyAqIGg7CisKKyAgICBpZiAoY3NwYWNlID09IEVWQVNfQ09M
T1JTUEFDRV9BUkdCODg4OCkgeworICAgICAgICBieXRlcyA9IGFyZWEgKiA0OworICAgICAgICBz
dHJpZGUgPSB3ICogNDsKKyAgICAgICAgZm9ybWF0ID0gQ0FJUk9fRk9STUFUX1JHQjI0OworICAg
IH0gZWxzZSBpZiAoY3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9SR0I1NjVfQTVQKSB7CisgICAg
ICAgIGJ5dGVzID0gYXJlYSAqIDI7CisgICAgICAgIHN0cmlkZSA9IHcgKiAyOworICAgICAgICBm
b3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMTZfNTY1OworICAgIH0gZWxzZSB7CisgICAgICAgIEVS
UigidW5rbm93biBjb2xvciBzcGFjZTogJWQiLCBjc3BhY2UpOworICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICB9CisKKyAgICBEQkcoInNpemU6ICVkeCVkICglZCksIHpvb206ICVmLCBjc3BhY2U9
JWQiLAorICAgICAgICB3LCBoLCBhcmVhLCAoZG91YmxlKXpvb20sIGNzcGFjZSk7CisKKyAgICBN
QUxMT0NfT1JfT09NX1JFVCh0LCBzaXplb2YoRXdrX1RpbGUpLCBOVUxMKTsKKyAgICB0LT5pbWFn
ZSA9IGV2YXNfb2JqZWN0X2ltYWdlX2FkZChldmFzKTsKKworICAgIGwgPSBFSU5BX0lOTElTVF9H
RVQodCk7CisgICAgbC0+cHJldiA9IE5VTEw7CisgICAgbC0+bmV4dCA9IE5VTEw7CisKKyAgICB0
LT52aXNpYmxlID0gMDsKKyAgICB0LT51cGRhdGVzID0gTlVMTDsKKworICAgIG1lbXNldCgmdC0+
c3RhdHMsIDAsIHNpemVvZihFd2tfVGlsZV9TdGF0cykpOworICAgIHQtPnN0YXRzLmFyZWEgPSBh
cmVhOworCisgICAgLyogdWdseSwgYnV0IGxldCdzIGF2b2lkIGF0IGFsbCBjb3N0cyBoYXZpbmcg
dXNlcnMgdG8gbW9kaWZ5IHRob3NlICovCisgICAgZWMgPSAoRXZhc19Db29yZCAqKSZ0LT53Owor
ICAgICplYyA9IHc7CisKKyAgICBlYyA9IChFdmFzX0Nvb3JkICopJnQtPmg7CisgICAgKmVjID0g
aDsKKworICAgIGVjcyA9IChFdmFzX0NvbG9yc3BhY2UgKikmdC0+Y3NwYWNlOworICAgICplY3Mg
PSBjc3BhY2U7CisKKyAgICBmID0gKGZsb2F0ICopJnQtPnpvb207CisgICAgKmYgPSB6b29tOwor
CisgICAgcyA9IChzaXplX3QgKikmdC0+Ynl0ZXM7CisgICAgKnMgPSBieXRlczsKKworICAgIGV2
YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHQtPmltYWdlLCB0LT53LCB0LT5oKTsKKyAgICBldmFz
X29iamVjdF9pbWFnZV9jb2xvcnNwYWNlX3NldCh0LT5pbWFnZSwgdC0+Y3NwYWNlKTsKKyAgICB0
LT5waXhlbHMgPSBldmFzX29iamVjdF9pbWFnZV9kYXRhX2dldCh0LT5pbWFnZSwgRUlOQV9UUlVF
KTsKKyAgICB0LT5zdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEK
KyAgICAgICAgKHQtPnBpeGVscywgZm9ybWF0LCB3LCBoLCBzdHJpZGUpOworICAgIHN0YXR1cyA9
IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHQtPnN1cmZhY2UpOworICAgIGlmIChzdGF0dXMgIT0gQ0FJ
Uk9fU1RBVFVTX1NVQ0NFU1MpIHsKKyAgICAgICAgRVJSKCJmYWlsZWQgdG8gY3JlYXRlIGNhaXJv
IHN1cmZhY2U6ICVzIiwKKyAgICAgICAgICAgIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVz
KSk7CisgICAgICAgIGZyZWUodCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAg
IHQtPmNhaXJvID0gY2Fpcm9fY3JlYXRlKHQtPnN1cmZhY2UpOworICAgIHN0YXR1cyA9IGNhaXJv
X3N0YXR1cyh0LT5jYWlybyk7CisgICAgaWYgKHN0YXR1cyAhPSBDQUlST19TVEFUVVNfU1VDQ0VT
UykgeworICAgICAgICBFUlIoImZhaWxlZCB0byBjcmVhdGUgY2Fpcm86ICVzIiwgY2Fpcm9fc3Rh
dHVzX3RvX3N0cmluZyhzdGF0dXMpKTsKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHQt
PnN1cmZhY2UpOworICAgICAgICBldmFzX29iamVjdF9kZWwodC0+aW1hZ2UpOworICAgICAgICBm
cmVlKHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBfZXdrX3RpbGVfYWNj
b3VudF9hbGxvY2F0ZWQodCk7CisKKyAgICByZXR1cm4gdDsKK30KKworLyoqCisgKiBGcmVlIHRp
bGUgbWVtb3J5LgorICovCit2b2lkIGV3a190aWxlX2ZyZWUoRXdrX1RpbGUgKnQpCit7CisgICAg
X2V3a190aWxlX2FjY291bnRfZnJlZWQodCk7CisKKyAgICBpZiAodC0+dXBkYXRlcykKKyAgICAg
ICAgZWluYV90aWxlcl9mcmVlKHQtPnVwZGF0ZXMpOworCisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0
cm95KHQtPnN1cmZhY2UpOworICAgIGNhaXJvX2Rlc3Ryb3kodC0+Y2Fpcm8pOworICAgIGV2YXNf
b2JqZWN0X2RlbCh0LT5pbWFnZSk7CisgICAgZnJlZSh0KTsKK30KKworLyoqCisgKiBNYWtlIHRo
ZSB0aWxlIHZpc2libGUsIGluY3JlbWVudGluZyBpdHMgY291bnRlci4KKyAqLwordm9pZCBld2tf
dGlsZV9zaG93KEV3a19UaWxlICp0KQoreworICAgIHQtPnZpc2libGUrKzsKKyAgICBldmFzX29i
amVjdF9zaG93KHQtPmltYWdlKTsKK30KKworLyoqCisgKiBEZWNyZW1lbnQgdGhlIHZpc2liaWxp
dHkgY291bnRlciwgbWFraW5nIGl0IGludmlzaWJsZSBpZiBuZWNlc3NhcnkuCisgKi8KK3ZvaWQg
ZXdrX3RpbGVfaGlkZShFd2tfVGlsZSAqdCkKK3sKKyAgICB0LT52aXNpYmxlLS07CisgICAgaWYg
KCF0LT52aXNpYmxlKQorICAgICAgICBldmFzX29iamVjdF9oaWRlKHQtPmltYWdlKTsKK30KKwor
LyoqCisgKiBSZXR1cm5zIEVJTkFfVFJVRSBpZiB0aGUgdGlsZSBpcyB2aXNpYmxlLCBFSU5BX0ZB
TFNFIG90aGVyd2lzZS4KKyAqLworRWluYV9Cb29sIGV3a190aWxlX3Zpc2libGVfZ2V0KEV3a19U
aWxlICp0KQoreworICAgIHJldHVybiAhIXQtPnZpc2libGU7Cit9CisKKy8qKgorICogTWFyayB3
aG9sZSB0aWxlIGFzIGRpcnR5IGFuZCByZXF1aXJpbmcgdXBkYXRlLgorICovCit2b2lkIGV3a190
aWxlX3VwZGF0ZV9mdWxsKEV3a19UaWxlICp0KQoreworICAgIC8qIFRPRE86IGxpc3Qgb2YgdGls
ZXMgcGVuZGluZyB1cGRhdGVzPyAqLworICAgIHQtPnN0YXRzLm1pc3NlcysrOworCisgICAgaWYg
KCF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkgeworICAgICAgICB0LT5zdGF0cy5mdWxsX3VwZGF0ZSA9
IEVJTkFfVFJVRTsKKyAgICAgICAgaWYgKHQtPnVwZGF0ZXMpIHsKKyAgICAgICAgICAgIGVpbmFf
dGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKKyAgICAgICAgICAgIHQtPnVwZGF0ZXMgPSBOVUxMOwor
ICAgICAgICB9CisgICAgfQorfQorCisvKioKKyAqIE1hcmsgdGhlIHNwZWNpZmljIHN1YmFyZWEg
YXMgZGlydHkgYW5kIHJlcXVpcmluZyB1cGRhdGUuCisgKi8KK3ZvaWQgZXdrX3RpbGVfdXBkYXRl
X2FyZWEoRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICpyKQoreworICAgIC8qIFRP
RE86IGxpc3Qgb2YgdGlsZXMgcGVuZGluZyB1cGRhdGVzPyAqLworICAgIHQtPnN0YXRzLm1pc3Nl
cysrOworCisgICAgaWYgKHQtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIXItPnggJiYgIXItPnkgJiYgci0+dyA9PSB0LT53ICYmIHItPmggPT0gdC0+aCkg
eworICAgICAgICB0LT5zdGF0cy5mdWxsX3VwZGF0ZSA9IEVJTkFfVFJVRTsKKyAgICAgICAgaWYg
KHQtPnVwZGF0ZXMpIHsKKyAgICAgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsK
KyAgICAgICAgICAgIHQtPnVwZGF0ZXMgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIXQtPnVwZGF0ZXMpIHsKKyAgICAgICAgdC0+dXBkYXRlcyA9
IGVpbmFfdGlsZXJfbmV3KHQtPncsIHQtPmgpOworICAgICAgICBpZiAoIXQtPnVwZGF0ZXMpIHsK
KyAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgY3JlYXRlIGVpbmFfdGlsZXIgJWR4JWQu
IiwgdC0+dywgdC0+aCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBlaW5hX3RpbGVyX3JlY3RfYWRkKHQtPnVwZGF0ZXMsIHIpOworfQorCisvKioKKyAqIEZv
ciBlYWNoIHVwZGF0ZWQgcmVnaW9uLCBjYWxsIHRoZSBnaXZlbiBmdW5jdGlvbi4KKyAqCisgKiBU
aGlzIHdpbGwgbm90IGNoYW5nZSB0aGUgdGlsZSBzdGF0aXN0aWNzIG9yIGNsZWFyIHRoZSBwcm9j
ZXNzZWQKKyAqIHVwZGF0ZXMsIHVzZSBld2tfdGlsZV91cGRhdGVzX2NsZWFyKCkgZm9yIHRoYXQu
CisgKi8KK3ZvaWQgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlICp0LCB2b2lkICgq
Y2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRl
KSwgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKyAgICBpZiAodC0+c3RhdHMuZnVsbF91cGRhdGUpIHsK
KyAgICAgICAgRWluYV9SZWN0YW5nbGUgcjsKKyAgICAgICAgci54ID0gMDsKKyAgICAgICAgci55
ID0gMDsKKyAgICAgICAgci53ID0gdC0+dzsKKyAgICAgICAgci5oID0gdC0+aDsKKyNpZmRlZiBU
SUxFX1NUQVRTX0FDQ09VTlRfUkVOREVSX1RJTUUKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgdGlt
ZXY7CisgICAgICAgIGRvdWJsZSByZW5kZXJfc3RhcnQ7CisgICAgICAgIGdldHRpbWVvZmRheSgm
dGltZXYsIE5VTEwpOworICAgICAgICByZW5kZXJfc3RhcnQgPSAoZG91YmxlKXRpbWV2LnR2X3Nl
YyArCisgICAgICAgICAgICAoKChkb3VibGUpdGltZXYudHZfdXNlYykgLyAxMDAwMDAwKTsKKyNl
bmRpZgorICAgICAgICBjYigodm9pZCAqKWRhdGEsIHQsICZyKTsKKyNpZmRlZiBUSUxFX1NUQVRT
X0FDQ09VTlRfUkVOREVSX1RJTUUKKyAgICAgICAgZ2V0dGltZW9mZGF5KCZ0aW1ldiwgTlVMTCk7
CisgICAgICAgIHQtPnN0YXRzLnJlbmRlcl90aW1lID0gKGRvdWJsZSl0aW1ldi50dl9zZWMgKwor
ICAgICAgICAgICAgKCgoZG91YmxlKXRpbWV2LnR2X3VzZWMpIC8gMTAwMDAwMCkgLSByZW5kZXJf
c3RhcnQ7CisjZW5kaWYKKyAgICB9IGVsc2UgaWYgKHQtPnVwZGF0ZXMpIHsKKyAgICAgICAgRWlu
YV9JdGVyYXRvciAqaXRyID0gZWluYV90aWxlcl9pdGVyYXRvcl9uZXcodC0+dXBkYXRlcyk7Cisg
ICAgICAgIEVpbmFfUmVjdGFuZ2xlIHIgPSB7MCwgMCwgMCwgMH07CisgICAgICAgIGlmICghaXRy
KSB7CisgICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90IGNyZWF0ZSB0aWxlciBpdGVyYXRv
ciEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBFSU5BX0lURVJB
VE9SX0ZPUkVBQ0goaXRyLCByKQorICAgICAgICAgICAgY2IoKHZvaWQgKilkYXRhLCB0LCAmcik7
CisgICAgICAgIGVpbmFfaXRlcmF0b3JfZnJlZShpdHIpOworICAgIH0KK30KKworLyoqCisgKiBD
bGVhciBhbGwgdXBkYXRlcyBpbiByZWdpb24sIGlmIGFueS4KKyAqCisgKiBUaGlzIHdpbGwgY2hh
bmdlIHRoZSB0aWxlIHN0YXRpc3RpY3MsIHNwZWNpYWxseSB6ZXJvIHN0YXQubWlzc2VzCisgKiBh
bmQgdW5zZXQgc3RhdHMuZnVsbF91cGRhdGUuIElmIHQtPnVwZGF0ZXMgZXhpc3RlZCwgdGhlbiBp
dCB3aWxsIGJlCisgKiBkZXN0cm95ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5
IGNhbGxlZCBhZnRlciBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3MoKSBpcworICogY2FsbGVkLgor
ICovCit2b2lkIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGUgKnQpCit7CisgICAgLyog
VE9ETzogcmVtb3ZlIGZyb20gbGlzdCBvZiBwZW5kaW5nIHVwZGF0ZXM/ICovCisgICAgdC0+c3Rh
dHMubWlzc2VzID0gMDsKKworICAgIGlmICh0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAg
dC0+c3RhdHMuZnVsbF91cGRhdGUgPSAwOworICAgIGVsc2UgaWYgKHQtPnVwZGF0ZXMpIHsKKyAg
ICAgICAgZWluYV90aWxlcl9mcmVlKHQtPnVwZGF0ZXMpOworICAgICAgICB0LT51cGRhdGVzID0g
TlVMTDsKKyAgICB9Cit9CisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfVGlsZV9VbnVzZWRfQ2FjaGVf
RW50cnkgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Oworc3RydWN0IF9Fd2tfVGlsZV9VbnVz
ZWRfQ2FjaGVfRW50cnkgeworICAgIEV3a19UaWxlICp0aWxlOworICAgIGludCB3ZWlnaHQ7Cisg
ICAgc3RydWN0IHsKKyAgICAgICAgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCk7
CisgICAgICAgIHZvaWQgKmRhdGE7CisgICAgfSB0aWxlX2ZyZWU7Cit9OworCitzdHJ1Y3QgX0V3
a19UaWxlX1VudXNlZF9DYWNoZSB7CisgICAgc3RydWN0IHsKKyAgICAgICAgRWluYV9MaXN0ICps
aXN0OworICAgICAgICBzaXplX3QgY291bnQ7CisgICAgICAgIHNpemVfdCBhbGxvY2F0ZWQ7Cisg
ICAgfSBlbnRyaWVzOworICAgIHN0cnVjdCB7CisgICAgICAgIHNpemVfdCBtYXg7ICAvKio8IHdh
dGVybWFyayAoaW4gYnl0ZXMpIHRvIHN0YXJ0IGZyZWVpbmcgdGlsZXMgKi8KKyAgICAgICAgc2l6
ZV90IHVzZWQ7IC8qKjwgaW4gYnl0ZXMsIG1heWJlIG1vcmUgdGhhbiBtYXguICovCisgICAgfSBt
ZW1vcnk7CisgICAgc3RydWN0IHsKKyAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOworICAg
ICAgICBmbG9hdCB6b29tOworICAgICAgICBFaW5hX0Jvb2wgbG9ja2VkOworICAgIH0gbG9ja2Vk
OworICAgIGludCByZWZlcmVuY2VzOworICAgIHVuc2lnbmVkIGludCBmcm96ZW47CisgICAgRWlu
YV9Cb29sIGRpcnR5OjE7Cit9OworCitzdGF0aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5VU0VEX0NB
Q0hFX0FMTE9DQVRFX0lOSVRJQUwgPSAxMjg7CitzdGF0aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5V
U0VEX0NBQ0hFX0FMTE9DQVRFX1NURVAgPSAxNjsKK3N0YXRpYyBjb25zdCBzaXplX3QgVElMRV9V
TlVTRURfQ0FDSEVfTUFYX0ZSRUUgPSAzMjsKKworLyoqCisgKiBDYWNoZSBvZiB1bnVzZWQgdGls
ZXMgKHRob3NlIHRoYXQgYXJlIG5vdCB2aXNpYmxlKS4KKyAqCisgKiBUaGUgY2FjaGUgb2YgdW51
c2VkIHRpbGVzLgorICoKKyAqIEBwYXJhbSBtYXggY2FjaGUgc2l6ZSBpbiBieXRlcy4KKyAqCisg
KiBAcmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBjYWNoZSBvZiB1bnVzZWQgdGlsZXMsIHVzZQorICog
ICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSgpIHRvIHJlbGVhc2UgcmVzb3VyY2Vz
LiBJZiBub3QKKyAqICAgICAgICAgcG9zc2libGUgdG8gYWxsb2NhdGUgbWVtb3J5LCBAYyBOVUxM
IGlzIHJldHVybmVkLgorICovCitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX3VudXNl
ZF9jYWNoZV9uZXcoc2l6ZV90IG1heCkKK3sKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YzsKKworICAgIENBTExPQ19PUl9PT01fUkVUKHR1Yywgc2l6ZW9mKEV3a19UaWxlX1VudXNlZF9D
YWNoZSksIE5VTEwpOworCisgICAgREJHKCJ0dWM9JXAiLCB0dWMpOworICAgIHR1Yy0+bWVtb3J5
Lm1heCA9IG1heDsKKyAgICB0dWMtPnJlZmVyZW5jZXMgPSAxOworICAgIHJldHVybiB0dWM7Cit9
CisKK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYShFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZh
c19Db29yZCBoLCBmbG9hdCB6b29tKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHR1Yyk7CisKKyAgICB0dWMtPmxvY2tlZC5sb2NrZWQgPSBFSU5BX1RSVUU7CisgICAgdHVjLT5s
b2NrZWQueCA9IHg7CisgICAgdHVjLT5sb2NrZWQueSA9IHk7CisgICAgdHVjLT5sb2NrZWQudyA9
IHc7CisgICAgdHVjLT5sb2NrZWQuaCA9IGg7CisgICAgdHVjLT5sb2NrZWQuem9vbSA9IHpvb207
Cit9CisKK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7
CisKKyAgICB0dWMtPmxvY2tlZC5sb2NrZWQgPSBFSU5BX0ZBTFNFOworfQorCisvKioKKyAqIEZy
ZWUgY2FjaGUgb2YgdW51c2VkIHRpbGVzLgorICoKKyAqIFRob3NlIHRpbGVzIHRoYXQgYXJlIHN0
aWxsIHZpc2libGUgd2lsbCByZW1haW4gbGl2ZS4gVGhlIHVudXNlZAorICogdGlsZXMgd2lsbCBi
ZSBmcmVlZC4KKyAqCisgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZigpCisgKi8K
K3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0
dWMpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKworICAgIERCRygi
dHVjPSVwLCAiCisgICAgICAgICJlbnRyaWVzPShjb3VudDolemQsIGFsbG9jYXRlZDolemQpLCAi
CisgICAgICAgICJtZW1vcnk9KG1heDolemQsIHVzZWQ6JXpkKSIsCisgICAgICAgIHR1YywgdHVj
LT5lbnRyaWVzLmNvdW50LCB0dWMtPmVudHJpZXMuYWxsb2NhdGVkLAorICAgICAgICB0dWMtPm1l
bW9yeS5tYXgsIHR1Yy0+bWVtb3J5LnVzZWQpOworCisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X2NsZWFyKHR1Yyk7CisgICAgZnJlZSh0dWMpOworfQorCisvKioKKyAqIENsZWFyIGNhY2hlIG9m
IHVudXNlZCB0aWxlcy4KKyAqCisgKiBBbnkgdGlsZXMgdGhhdCBhcmUgaW4gdGhlIGNhY2hlIGFy
ZSBmcmVlZC4gVGhlIG9ubHkgdGlsZXMgdGhhdCBhcmUKKyAqIGtlcHQgYXJlIHRob3NlIHRoYXQg
YXJlbid0IGluIHRoZSBjYWNoZSAoaS5lLiB0aGF0IGFyZSB2aXNpYmxlKS4KKyAqLwordm9pZCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7
CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICppdHI7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4odHVjKTsKKworICAgIGlmICghdHVjLT5lbnRyaWVzLmNvdW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBFSU5BX0xJU1RfRlJFRSh0dWMtPmVudHJpZXMubGlzdCwgaXRy
KSB7CisgICAgICAgIGl0ci0+dGlsZV9mcmVlLmNiKGl0ci0+dGlsZV9mcmVlLmRhdGEsIGl0ci0+
dGlsZSk7CisgICAgICAgIGZyZWUoaXRyKTsKKyAgICB9CisKKyAgICB0dWMtPm1lbW9yeS51c2Vk
ID0gMDsKKyAgICB0dWMtPmVudHJpZXMuY291bnQgPSAwOworICAgIHR1Yy0+ZGlydHkgPSBFSU5B
X0ZBTFNFOworfQorCisvKioKKyAqIEhvbGQgcmVmZXJlbmNlIHRvIGNhY2hlLgorICoKKyAqIEBy
ZXR1cm4gc2FtZSBwb2ludGVyIGFzIHRha2VuLgorICoKKyAqIEBzZWUgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3VucmVmKCkKKyAqLworRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVz
ZWRfY2FjaGVfcmVmKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMsIE5VTEwpOworICAgIHR1Yy0+cmVmZXJlbmNlcysr
OworICAgIHJldHVybiB0dWM7Cit9CisKKy8qKgorICogUmVsZWFzZSBjYWNoZSByZWZlcmVuY2Us
IGZyZWVpbmcgaXQgaWYgaXQgZHJvcHMgdG8gemVyby4KKyAqCisgKiBAc2VlIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9yZWYoKQorICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSgpCisg
Ki8KK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKEV3a19UaWxlX1VudXNlZF9DYWNo
ZSAqdHVjKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisgICAgdHVj
LT5yZWZlcmVuY2VzLS07CisgICAgaWYgKCF0dWMtPnJlZmVyZW5jZXMpCisgICAgICAgIGV3a190
aWxlX3VudXNlZF9jYWNoZV9mcmVlKHR1Yyk7Cit9CisKKy8qKgorICogQ2hhbmdlIGNhY2hlIGNh
cGFjaXR5LCBpbiBieXRlcy4KKyAqCisgKiBUaGlzIHdpbGwgbm90IGZsdXNoIGNhY2hlLCB1c2Ug
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKCkgb3IKKyAqIGV3a190aWxlX3VudXNlZF9jYWNo
ZV9hdXRvX2ZsdXNoKCkgdG8gZG8gc28uCisgKi8KK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X21heF9zZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHNpemVfdCBtYXgpCit7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKyAgICB0dWMtPm1lbW9yeS5tYXggPSBt
YXg7Cit9CisKKy8qKgorICogUmV0cmlldmUgbWF4aW11bSBjYWNoZSBjYXBhY2l0eSwgaW4gYnl0
ZXMuCisgKi8KK3NpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X2dldChjb25zdCBFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwodHVjLCAwKTsKKyAgICByZXR1cm4gdHVjLT5tZW1vcnkubWF4OworfQorCisvKioKKyAq
IFJldHJpZXZlIHRoZSB1c2VkIGNhY2hlIGNhcGFjaXR5LCBpbiBieXRlcy4KKyAqLworc2l6ZV90
IGV3a190aWxlX3VudXNlZF9jYWNoZV91c2VkX2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAwKTsK
KyAgICByZXR1cm4gdHVjLT5tZW1vcnkudXNlZDsKK30KKworLyoqCisgKiBGbHVzaCBnaXZlbiBh
bW91bnQgb2YgYnl0ZXMgZnJvbSBjYWNoZS4KKyAqCisgKiBBZnRlciBjYWxsaW5nIHRoaXMgZnVu
Y3Rpb24sIG5lYXIgQGEgYnl0ZXMgYXJlIGZyZWVkIGZyb20gY2FjaGUuIEl0CisgKiBtYXkgYmUg
bGVzcyBpZiBjYWNoZSBkaWQgbm90IGNvbnRhaW4gdGhhdCBhbW91bnQgb2YgYnl0ZXMgKGllOiBh
bgorICogZW1wdHkgY2FjaGUgaGFzIG5vdGhpbmcgdG8gZnJlZSEpIG9yIG1vcmUgaWYgdGhlIGNh
Y2hlIGp1c3QKKyAqIGNvbnRhaW5lZCBvYmplY3RzIHRoYXQgd2VyZSBsYXJnZXIgdGhhbiB0aGUg
cmVxdWVzdGVkIGFtb3VudCAodGhpcworICogaXMgdXN1YWxseSB0aGUgY2FzZSkuCisgKgorICog
QHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVzZWQgdGlsZXMuCisgKiBAcGFyYW0gYnl0ZXMgYW1vdW50
IHRvIGZyZWUuCisgKgorICogQHJldHVybiBhbW91bnQgcmVhbGx5IGZyZWVkLgorICoKKyAqIEBz
ZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VzZWRfZ2V0KCkKKyAqLworc2l6ZV90IGV3a190aWxl
X3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IGJ5
dGVzKQoreworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSAqaXRyOworICAgIEVpbmFf
TGlzdCAqbCwgKmxfbmV4dDsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVj
LCAwKTsKKyAgICBzaXplX3QgZG9uZTsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQ7CisKKyAgICBp
ZiAoIXR1Yy0+ZW50cmllcy5jb3VudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGJ5dGVz
IDwgMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKgorICAgICAqIE5PVEU6IHRoZSBjYWNo
ZSBpcyBhIEZJRk8gcXVldWUgY3VycmVudGx5LgorICAgICAqIERvbid0IG5lZWQgdG8gc29ydCBh
bnkgbW9yZS4KKyAgICAgKi8KKworICAgIGlmICh0dWMtPmRpcnR5KQorICAgICAgICB0dWMtPmRp
cnR5ID0gRUlOQV9GQUxTRTsKKworICAgIGRvbmUgPSAwOworICAgIGNvdW50ID0gMDsKKyAgICBF
SU5BX0xJU1RfRk9SRUFDSF9TQUZFKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBsX25leHQsIGl0cikg
eworICAgICAgICBFd2tfVGlsZSAqdCA9IGl0ci0+dGlsZTsKKyAgICAgICAgaWYgKGRvbmUgPiBi
eXRlcykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAodHVjLT5sb2NrZWQubG9ja2Vk
CisgICAgICAgICAgICAmJiB0LT54ICsgdC0+dyA+IHR1Yy0+bG9ja2VkLngKKyAgICAgICAgICAg
ICYmIHQtPnkgKyB0LT5oID4gdHVjLT5sb2NrZWQueQorICAgICAgICAgICAgJiYgdC0+eCA8IHR1
Yy0+bG9ja2VkLnggKyB0dWMtPmxvY2tlZC53CisgICAgICAgICAgICAmJiB0LT55IDwgdHVjLT5s
b2NrZWQueSArIHR1Yy0+bG9ja2VkLmgKKyAgICAgICAgICAgICYmIHQtPnpvb20gPT0gdHVjLT5s
b2NrZWQuem9vbSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
ZG9uZSArPSBzaXplb2YoRXdrX1RpbGUpICsgaXRyLT50aWxlLT5ieXRlczsKKyAgICAgICAgaXRy
LT50aWxlX2ZyZWUuY2IoaXRyLT50aWxlX2ZyZWUuZGF0YSwgaXRyLT50aWxlKTsKKyAgICAgICAg
dHVjLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodHVjLT5lbnRyaWVzLmxp
c3QsIGwpOworICAgICAgICBmcmVlKGl0cik7CisgICAgICAgIGNvdW50Kys7CisgICAgfQorCisg
ICAgdHVjLT5tZW1vcnkudXNlZCAtPSBkb25lOworICAgIHR1Yy0+ZW50cmllcy5jb3VudCAtPSBj
b3VudDsKKworICAgIHJldHVybiBkb25lOworfQorCisvKioKKyAqIEZsdXNoIGVub3VnaCBieXRl
cyB0byBtYWtlIGNhY2hlIHVzYWdlIGxvd2VyIHRoYW4gbWF4aW11bS4KKyAqCisgKiBKdXN0IGxp
a2UgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKCksIGJ1dCB0aGlzIHdpbGwgbWFrZSB0aGUg
Y2FjaGUKKyAqIGZyZWUgZW5vdWdoIHRpbGVzIHRvIHJlc3BlY3QgbWF4aW11bSBjYWNoZSBzaXpl
IGFzIGRlZmluZWQgd2l0aAorICogZXdrX3RpbGVfdW51c2VkX2NhY2hlX21heF9zZXQoKS4KKyAq
CisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIHdoZW4gc3lzdGVtIGJlY29tZXMg
aWRsZS4gVGhpcyB3YXkKKyAqIHdlIGtlZXAgbWVtb3J5IGxvdyBidXQgZG8gbm90IGltcGFjdCBw
ZXJmb3JtYW5jZSB3aGVuCisgKiBjcmVhdGluZy9kZWxldGluZyB0aWxlcy4KKyAqLwordm9pZCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOworICAgIGlmICh0dWMt
Pm1lbW9yeS51c2VkIDw9IHR1Yy0+bWVtb3J5Lm1heCkKKyAgICAgICAgcmV0dXJuOworICAgIGV3
a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaCh0dWMsIHR1Yy0+bWVtb3J5LnVzZWQgLSB0dWMtPm1l
bW9yeS5tYXgpOworICAgIGlmICh0dWMtPm1lbW9yeS51c2VkID4gdHVjLT5tZW1vcnkubWF4KQor
ICAgICAgICBDUklUSUNBTCgiQ2FjaGUgc3RpbGwgdXNpbmcgdG9vIG11Y2ggbWVtb3J5OiAlemQg
S0I7IG1heDogJXpkIEtCIiwKKyAgICAgICAgICAgICAgICAgdHVjLT5tZW1vcnkudXNlZCwgdHVj
LT5tZW1vcnkubWF4KTsKK30KKworLyoqCisgKiBGbGFnIGNhY2hlIGFzIGRpcnR5LgorICoKKyAq
IElmIGNhY2hlIGlzIGRpcnR5IHRoZW4gbmV4dCBmbHVzaCBvcGVyYXRpb25zIHdpbGwgaGF2ZSB0
byByZWNvbXB1dGUKKyAqIHdlaWdodCBhbmQgc29ydCBhZ2FpbiB0byBmaW5kIHRoZSBiZXN0IHRp
bGVzIHRvIGV4cGlyZS4KKyAqCisgKiBPbmUgbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiB0
aWxlIHByb3BlcnRpZXMgdGhhdCBtYXkgY2hhbmdlCisgKiBsaWtlbmVzcyBvZiB0aWxlIHRvIGJl
IGZsdXNoZWQgY2hhbmdlLCBsaWtlIFRpbGU6OnN0YXRzLgorICovCit2b2lkIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9kaXJ0eShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICB0dWMt
PmRpcnR5ID0gRUlOQV9UUlVFOworfQorCisvKioKKyAqIEZyZWV6ZSBjYWNoZSB0byBub3QgZG8g
bWFpbnRlbmFuY2UgdGFza3MuCisgKgorICogTWFpbnRlbmFuY2UgdGFza3Mgb3B0aW1pemUgY2Fj
aGUgdXNhZ2UsIGJ1dCBtYXliZSB3ZSBrbm93IHdlIHNob3VsZAorICogaG9sZCBvbiB0aGVtIHVu
dGlsIHdlIGRvIHRoZSBsYXN0IG9wZXJhdGlvbiwgaW4gdGhpcyBjYXNlIHdlIGZyZWV6ZQorICog
d2hpbGUgb3BlcmF0aW5nIGFuZCB0aGVuIHRoYXcgd2hlbiB3ZSdyZSBkb25lLgorICoKKyAqIEBz
ZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcoKQorICovCit2b2lkIGV3a190aWxlX3VudXNl
ZF9jYWNoZV9mcmVlemUoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgdHVjLT5m
cm96ZW4rKzsKK30KKworLyoqCisgKiBVbmZyZWV6ZXMgbWFpbnRlbmFuY2UgdGFza3MuCisgKgor
ICogSWYgdGhpcyBpcyB0aGUgbGFzdCBjb3VudGVycGFydCBvZiBmcmVlemUsIHRoZW4gbWFpbnRl
bmFuY2UgdGFza3MKKyAqIHdpbGwgcnVuIGltbWVkaWF0ZWx5LgorICovCit2b2lkIGV3a190aWxl
X3VudXNlZF9jYWNoZV90aGF3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIGlm
ICghdHVjLT5mcm96ZW4pIHsKKyAgICAgICAgRVJSKCJ0aGF3aW5nIG1vcmUgdGhhbiBmcmVlemlu
ZyEiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHR1Yy0+ZnJvemVuLS07Cit9CisK
Ky8qKgorICogR2V0IHRpbGUgZnJvbSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMsIHJlbW92aW5nIGl0
IGZyb20gdGhlIGNhY2hlLgorICoKKyAqIElmIHRoZSB0aWxlIGlzIHVzZWQsIHRoZW4gaXQncyBu
b3QgaW4gY2FjaGUgb2YgdW51c2VkIHRpbGVzLCBzbyBpdAorICogaXMgcmVtb3ZlZCBmcm9tIHRo
ZSBjYWNoZSBhbmQgbWF5IGJlIGdpdmVuIGJhY2sgd2l0aAorICogZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX3RpbGVfcHV0KCkuCisgKgorICogQHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVzZWQgdGlsZXMK
KyAqIEBwYXJhbSB0IHRoZSB0aWxlIHRvIGJlIHJlbW92ZWQgZnJvbSBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUuCisgKgorICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsICNFSU5BX0ZBTFNF
IG90aGVyd2lzZS4KKyAqLworRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dl
dChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUgKnQpCit7CisgICAgRXdrX1Rp
bGVfVW51c2VkX0NhY2hlX0VudHJ5ICplbnRyeTsKKyAgICBFaW5hX0xpc3QgKmUsICpsOworCisg
ICAgZSA9IE5VTEw7CisgICAgRUlOQV9MSVNUX0ZPUkVBQ0godHVjLT5lbnRyaWVzLmxpc3QsIGws
IGVudHJ5KQorICAgIHsKKyAgICAgICAgaWYgKGVudHJ5LT50aWxlID09IHQpIHsKKyAgICAgICAg
ICAgIGUgPSBsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg
KCFlKSB7CisgICAgICAgIEVSUigidGlsZSAlcCBub3QgZm91bmQgaW4gY2FjaGUgJXAiLCB0LCB0
dWMpOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAgICB0dWMtPmVudHJp
ZXMuY291bnQtLTsKKyAgICB0dWMtPm1lbW9yeS51c2VkIC09IHNpemVvZihFd2tfVGlsZSkgKyB0
LT5ieXRlczsKKyAgICB0dWMtPmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9yZW1vdmVfbGlzdCh0
dWMtPmVudHJpZXMubGlzdCwgZSk7CisgICAgZnJlZShlbnRyeSk7CisgICAgLy8gVE9ETyBhc3N1
bWUgZGlydHkgZm9yIG5vdywgYnV0IG1heSBpdCdzIG5vdCwKKyAgICAvLyBpZiB0aGUgaXRlbSB3
YXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcXVldWUKKyAgICB0dWMtPmRpcnR5ID0gRUlOQV9U
UlVFOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworLyoqCisgKiBQdXQgdGlsZSBpbnRv
IGNhY2hlIG9mIHVudXNlZCB0aWxlcywgYWRkaW5nIGl0IHRvIHRoZSBjYWNoZS4KKyAqCisgKiBU
aGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBAYyB0LT52aXNpYmxlIGlzIEBjIDAgYW5kIG5vIG9i
amVjdHMgYXJlCisgKiB1c2luZyB0aGUgdGlsZSBhbnltb3JlLCBtYWtpbmcgaXQgYXZhaWxhYmxl
IHRvIGJlIGV4cGlyZWQgYW5kIGhhdmUKKyAqIGl0cyBtZW1vcnkgcmVwbGFjZWQuCisgKgorICog
Tm90ZSB0aGF0IHRpbGVzIGFyZSBub3QgYXV0b21hdGljYWxseSBkZWxldGVkIGlmIGNhY2hlIGlz
IGZ1bGwsCisgKiBpbnN0ZWFkIHRoZSBjYWNoZSB3aWxsIGhhdmUgbW9yZSBieXRlcyB1c2VkIHRo
YW4gbWF4aW11bSBhbmQgb25lCisgKiBjYW4gY2FsbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0
b19mbHVzaCgpIHRvIGZyZWUgdGhlbS4gVGhpcyBpcyBkb25lCisgKiBiZWNhdXNlIHVzdWFsbHkg
d2Ugd2FudCBhIGxhenkgb3BlcmF0aW9uIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgKgorICog
QHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVzZWQgdGlsZXMKKyAqIEBwYXJhbSB0IHRpbGUgdG8gYmUg
YWRkZWQgdG8gY2FjaGUuCisgKiBAcGFyYW0gdGlsZV9mcmVlX2NiIGZ1bmN0aW9uIHVzZWQgdG8g
ZnJlZSB0aWxlcy4KKyAqIEBwYXJhbSBkYXRhIGNvbnRleHQgdG8gZ2l2ZSBiYWNrIHRvIEBhIHRp
bGVfZnJlZV9jYiBhcyBmaXJzdCBhcmd1bWVudC4KKyAqCisgKiBAcmV0dXJuICNFSU5BX1RSVUUg
b24gc3VjY2VzcywgI0VJTkFfRkFMU0Ugb3RoZXJ3aXNlLiBJZiBAYyB0LT52aXNpYmxlCisgKiAg
ICAgICAgIGlzIG5vdCAjRUlOQV9GQUxTRSwgdGhlbiBpdCB3aWxsIHJldHVybiAjRUlOQV9GQUxT
RS4KKyAqCisgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKCkKKyAqLwor
RWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YywgRXdrX1RpbGUgKnQsIHZvaWQgKCp0aWxlX2ZyZWVfY2IpKHZvaWQgKmRhdGEs
IEV3a19UaWxlICp0KSwgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKyAgICBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGVfRW50cnkgKmU7CisKKyAgICBpZiAodC0+dmlzaWJsZSkgeworICAgICAgICBFUlIoInRp
bGU9JXAgaXMgbm90IHVudXNlZCAodmlzaWJsZT0lZCkiLCB0LCB0LT52aXNpYmxlKTsKKyAgICAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgTUFMTE9DX09SX09PTV9SRVQoZSwg
c2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSksIEVJTkFfRkFMU0UpOworICAgIHR1
Yy0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X2FwcGVuZCh0dWMtPmVudHJpZXMubGlzdCwgZSk7
CisgICAgaWYgKGVpbmFfZXJyb3JfZ2V0KCkpIHsKKyAgICAgICAgRVJSKCJMaXN0IGFsbG9jYXRp
b24gZmFpbGVkIik7CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIGUt
PnRpbGUgPSB0OworICAgIGUtPndlaWdodCA9IDA7IC8qIGNhbGN1bGF0ZWQganVzdCBiZWZvcmUg
c29ydCAqLworICAgIGUtPnRpbGVfZnJlZS5jYiA9IHRpbGVfZnJlZV9jYjsKKyAgICBlLT50aWxl
X2ZyZWUuZGF0YSA9ICh2b2lkICopZGF0YTsKKworICAgIHR1Yy0+ZW50cmllcy5jb3VudCsrOwor
ICAgIHR1Yy0+bWVtb3J5LnVzZWQgKz0gc2l6ZW9mKEV3a19UaWxlKSArIHQtPmJ5dGVzOworICAg
IHR1Yy0+ZGlydHkgPSBFSU5BX1RSVUU7CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCit2
b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWMpCit7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICppdHI7CisgICAgRWlu
YV9MaXN0ICpsOworICAgIGludCBjb3VudCA9IDA7CisgICAgcHJpbnRmKCJDYWNoZSBvZiB1bnVz
ZWQgdGlsZXM6IGVudHJpZXM6ICV6dS8lenUsIG1lbW9yeTogJXp1LyV6dVxuIiwKKyAgICAgICAg
ICAgdHVjLT5lbnRyaWVzLmNvdW50LCB0dWMtPmVudHJpZXMuYWxsb2NhdGVkLAorICAgICAgICAg
ICB0dWMtPm1lbW9yeS51c2VkLCB0dWMtPm1lbW9yeS5tYXgpOworCisgICAgRUlOQV9MSVNUX0ZP
UkVBQ0godHVjLT5lbnRyaWVzLmxpc3QsIGwsIGl0cikgeworICAgICAgICBjb25zdCBFd2tfVGls
ZSAqdCA9IGl0ci0+dGlsZTsKKyAgICAgICAgcHJpbnRmKCIgWyUzbHUsJTNsdSArICVkeCVkIEAg
JTAuM2ZdJWMiLAorICAgICAgICAgICAgICAgdC0+Y29sLCB0LT5yb3csIHQtPncsIHQtPmgsIHQt
Pnpvb20sCisgICAgICAgICAgICAgICB0LT52aXNpYmxlID8gJyonOiAnICcpOworCisgICAgICAg
IGlmICghKGNvdW50ICUgNCkpCisgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgfQorCisg
ICAgcHJpbnRmKCJcbiIpOworfQpJbmRleDogV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmgJKHJldmlz
aW9uIDApCisrKyBXZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5n
IEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVk
ZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaWZuZGVmIGV3a190aWxlZF9tb2RlbF9oCisjZGVmaW5lIGV3a190
aWxlZF9tb2RlbF9oCisKKyNpbmNsdWRlICJld2tfZWFwaS5oIgorI2luY2x1ZGUgImV3a190aWxl
ZF9iYWNraW5nX3N0b3JlLmgiCisKKyNpbmNsdWRlIDxFdmFzLmg+CisKKy8qIG1vZGVsICovCitF
QVBJIEV3a19UaWxlICpld2tfdGlsZV9uZXcoRXZhcyAqZXZhcywgRXZhc19Db29yZCB3LCBFdmFz
X0Nvb3JkIGgsIGZsb2F0IHpvb20sIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UpOworRUFQSSB2b2lk
IGV3a190aWxlX2ZyZWUoRXdrX1RpbGUgKnQpOworRUFQSSB2b2lkIGV3a190aWxlX3VudXNlZF9j
YWNoZV9jbGVhcihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yyk7CitFQVBJIHZvaWQgZXdrX3Rp
bGVfc2hvdyhFd2tfVGlsZSAqdCk7CitFQVBJIHZvaWQgZXdrX3RpbGVfaGlkZShFd2tfVGlsZSAq
dCk7CitFaW5hX0Jvb2wgZXdrX3RpbGVfdmlzaWJsZV9nZXQoRXdrX1RpbGUgKnQpOworRUFQSSB2
b2lkIGV3a190aWxlX3VwZGF0ZV9mdWxsKEV3a19UaWxlICp0KTsKK0VBUEkgdm9pZCBld2tfdGls
ZV91cGRhdGVfYXJlYShFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKnIpOworRUFQ
SSB2b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZSAqdCwgdm9pZCAoKmNiKSh2
b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSksIGNv
bnN0IHZvaWQgKmRhdGEpOworRUFQSSB2b2lkIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoRXdrX1Rp
bGUgKnQpOworCisvKiBjYWNoZSBvZiB1bnVzZWQgdGlsZXMgKi8KK0VBUEkgRXdrX1RpbGVfVW51
c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KHNpemVfdCBtYXgpOworRUFQSSB2
b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWMsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29v
cmQgaCwgZmxvYXQgem9vbSk7CitFQVBJIHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VubG9j
a19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKTsKK0VBUEkgdm9pZCBld2tfdGlsZV91
bnVzZWRfY2FjaGVfZnJlZShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yyk7CitFQVBJIEV3a19U
aWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZihFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUgKnR1Yyk7CitFQVBJIHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKEV3
a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKTsKKworRUFQSSB2b2lkIGV3a190aWxlX3VudXNlZF9j
YWNoZV9kaXJ0eShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yyk7CisKK0VBUEkgdm9pZCBld2tf
dGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKTsKK0VB
UEkgdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUg
KnR1Yyk7CisKK0VBUEkgRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldChF
d2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUgKnQpOworRUFQSSBFaW5hX0Jvb2wg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
LCBFd2tfVGlsZSAqdCwgdm9pZCAoKnRpbGVfZnJlZV9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUg
KnQpLCBjb25zdCB2b2lkICpkYXRhKTsKKworI2VuZGlmIC8vIGV3a190aWxlZF9tb2RlbF9oCisK
SW5kZXg6IFdlYktpdC9lZmwvZXdrL2V3a190aWxlZF9wcml2YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX3ByaXZhdGUuaAkocmV2aXNpb24gMCkKKysrIFdlYktp
dC9lZmwvZXdrL2V3a190aWxlZF9wcml2YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcwor
ICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2lmbmRlZiBld2tfdGlsZWRfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a190aWxlZF9wcml2YXRl
X2gKKworLyogbG9nZ2luZyAqLworZXh0ZXJuIGludCBfZXdrX3RpbGVkX2xvZ19kb207CisKKyNk
ZWZpbmUgQ1JJVElDQUwoLi4uKSBFSU5BX0xPR19ET01fQ1JJVChfZXdrX3RpbGVkX2xvZ19kb20s
IF9fVkFfQVJHU19fKQorI2RlZmluZSBFUlIoLi4uKSBFSU5BX0xPR19ET01fRVJSKF9ld2tfdGls
ZWRfbG9nX2RvbSwgX19WQV9BUkdTX18pCisjZGVmaW5lIFdSTiguLi4pIEVJTkFfTE9HX0RPTV9X
QVJOKF9ld2tfdGlsZWRfbG9nX2RvbSwgX19WQV9BUkdTX18pCisjZGVmaW5lIElORiguLi4pIEVJ
TkFfTE9HX0RPTV9JTkZPKF9ld2tfdGlsZWRfbG9nX2RvbSwgX19WQV9BUkdTX18pCisjZGVmaW5l
IERCRyguLi4pIEVJTkFfTE9HX0RPTV9EQkcoX2V3a190aWxlZF9sb2dfZG9tLCBfX1ZBX0FSR1Nf
XykKKyNkZWZpbmUgT09NKG9wLCBzaXplKSBDUklUSUNBTCgiY291bGQgbm90ICVzICV6ZCBieXRl
czogJXMiLCBvcCwgc2l6ZSwgc3RyZXJyb3IoZXJybm8pKQorI2RlZmluZSBNQUxMT0NfT1JfT09N
X1JFVChwdHIsIHNpemUsIC4uLikgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwdHIgPSBtYWxsb2Moc2l6ZSk7ICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoIXB0ciAmJiAoc2l6ZSkgPiAwKSB7ICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgT09NKCJtYWxsb2MiLCAoc2l6ZSkpOyAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgXAor
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0g
d2hpbGUgKDApCisKKyNkZWZpbmUgQ0FMTE9DX09SX09PTV9SRVQocHRyLCBzaXplLCAuLi4pICAg
ICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgcHRyID0gY2FsbG9jKDEsIHNpemUpOyAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgaWYgKCFwdHIgJiYgKHNpemUpID4gMCkgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IE9PTSgiY2FsbG9jIiwgKHNpemUpKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVy
biBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFJF
QUxMT0NfT1JfT09NX1JFVChwdHIsIHNpemUsIC4uLikgICAgICBcCisgICAgZG8geyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHZvaWQgKl9fdG1wX3B0
cjsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fdG1wX3B0ciA9IHJlYWxsb2Mo
cHRyLCBzaXplKTsgICAgICAgICBcCisgICAgICAgIGlmICghX190bXBfcHRyICYmIChzaXplKSA+
IDApIHsgICAgICAgICBcCisgICAgICAgICAgICBPT00oInJlYWxsb2MiLCAoc2l6ZSkpOyAgICAg
ICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHB0ciA9IF9fdG1wX3B0cjsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3
aGlsZSAoMCkKKworI2VuZGlmIC8vIGV3a190aWxlZF9wcml2YXRlX2gKSW5kZXg6IFdlYktpdC9l
ZmwvZXdrL2V3a191dGlsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZWZsL2V3ay9ld2tfdXRp
bC5jcHAJKHJldmlzaW9uIDcwMTQyKQorKysgV2ViS2l0L2VmbC9ld2svZXdrX3V0aWwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIEV2YXNfT2JqZWN0KiBld2tfdXRpbF9pbWFn
ZV9mcm9tX2NhaXJvX3MKICAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX3NldChpbWFnZSwgdywg
aCk7CiAgICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KGltYWdlLCBmb3JtYXQgPT0gQ0FJ
Uk9fRk9STUFUX0FSR0IzMik7CiAKLSAgICBpZiAoZXZhc19vYmplY3RfaW1hZ2Vfc3RyaWRlX2dl
dChpbWFnZSkgKiA0ICE9IHN0cmlkZSkgeworICAgIGlmIChldmFzX29iamVjdF9pbWFnZV9zdHJp
ZGVfZ2V0KGltYWdlKSAhPSBzdHJpZGUpIHsKICAgICAgICAgRVJSKCJldmFzJyBzdHJpZGUgJWQg
ZGl2ZXJnZXMgZnJvbSBjYWlybydzICVkLiIsCiAgICAgICAgICAgICBldmFzX29iamVjdF9pbWFn
ZV9zdHJpZGVfZ2V0KGltYWdlKSAqIDQsIHN0cmlkZSk7CiAgICAgICAgIGV2YXNfb2JqZWN0X2Rl
bChpbWFnZSk7CkluZGV4OiBXZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCShyZXZpc2lvbiA3MDE0MikKKysrIFdlYktp
dC9lZmwvZXdrL2V3a192aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsOSBAQCBz
dHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0YSB7CiAgICAgfSBzY3JvbGxzOwogICAgIHVuc2ln
bmVkIGludCBpbWg7IC8qKjwgaW5wdXQgbWV0aG9kIGhpbnRzICovCiAgICAgc3RydWN0IHsKKyAg
ICAgICAgRWluYV9Cb29sIHZpZXdfY2xlYXJlZDoxOworICAgIH0gZmxhZ3M7CisgICAgc3RydWN0
IHsKICAgICAgICAgY29uc3QgY2hhciogdXNlcl9hZ2VudDsKICAgICAgICAgY29uc3QgY2hhciog
dXNlcl9zdHlsZXNoZWV0OwogICAgICAgICBjb25zdCBjaGFyKiBlbmNvZGluZ19kZWZhdWx0OwpA
QCAtNzI0LDYgKzcyNywxMiBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNf
T2JqCiAKICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5iYWNraW5nX3N0b3Jl
LCBvKTsKICAgICBldmFzX29iamVjdF9zaG93KHNkLT5iYWNraW5nX3N0b3JlKTsKKyAgICBldmFz
X29iamVjdF9wYXNzX2V2ZW50c19zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIEVJTkFfVFJVRSk7CisK
KyAgICBzZC0+ZXZlbnRzX3JlY3QgPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRkKHNkLT5iYXNl
LmV2YXMpOworICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzZC0+ZXZlbnRzX3JlY3QsIDAsIDAs
IDAsIDApOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPmV2ZW50c19yZWN0
LCBvKTsKKyAgICBldmFzX29iamVjdF9zaG93KHNkLT5ldmVudHNfcmVjdCk7CiAKICAgICBzZC0+
bWFpbl9mcmFtZSA9IGV3a19mcmFtZV9hZGQoc2QtPmJhc2UuZXZhcyk7CiAgICAgaWYgKCFzZC0+
bWFpbl9mcmFtZSkgewpAQCAtODE0LDYgKzgyMyw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19z
bWFydF9jYWxjdWxhdGUoRXYKICAgICAgICAgICAgIHZpZXctPmFkanVzdFZpZXdTaXplKCk7CiAg
ICAgICAgIH0KICAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5tYWluX2ZyYW1lLCB3LCBo
KTsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5ldmVudHNfcmVjdCwgdywgaCk7CiAg
ICAgICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7CiAgICAgICAgIHNkLT52
aWV3LncgPSB3OwogICAgICAgICBzZC0+dmlldy5oID0gaDsKQEAgLTgyNiw2ICs4MzYsNyBAQCBz
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfY2FsY3VsYXRlKEV2CiAgICAgaWYgKHNkLT5jaGFu
Z2VkLnBvc2l0aW9uICYmICgoeCAhPSBzZC0+dmlldy54KSB8fCAoeSAhPSBzZC0+dmlldy55KSkp
IHsKICAgICAgICAgZXZhc19vYmplY3RfbW92ZShzZC0+bWFpbl9mcmFtZSwgeCwgeSk7CiAgICAg
ICAgIGV2YXNfb2JqZWN0X21vdmUoc2QtPmJhY2tpbmdfc3RvcmUsIHgsIHkpOworICAgICAgICBl
dmFzX29iamVjdF9tb3ZlKHNkLT5ldmVudHNfcmVjdCwgeCwgeSk7CiAgICAgICAgIHNkLT5jaGFu
Z2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7CiAgICAgICAgIHNkLT52aWV3LnggPSB4OwogICAg
ICAgICBzZC0+dmlldy55ID0geTsKQEAgLTg0OSw2ICs4NjAsMjUgQEAgc3RhdGljIHZvaWQgX2V3
a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdgogICAgIH0KIH0KIAorc3RhdGljIHZvaWQgX2V3a192
aWV3X3NtYXJ0X3Nob3coRXZhc19PYmplY3QgKm8pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUKG8s
IHNkKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisKKyAgICBpZiAoZXZhc19v
YmplY3RfY2xpcGVlc19nZXQoc2QtPmJhc2UuY2xpcHBlcikpCisgICAgICAgIGV2YXNfb2JqZWN0
X3Nob3coc2QtPmJhc2UuY2xpcHBlcik7CisgICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+YmFja2lu
Z19zdG9yZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9oaWRlKEV2YXNfT2Jq
ZWN0ICpvKQoreworICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVQoc2QsIHByaXYpOworCisgICAgZXZhc19vYmplY3RfaGlkZShzZC0+YmFzZS5jbGlwcGVy
KTsKKyAgICBldmFzX29iamVjdF9oaWRlKHNkLT5iYWNraW5nX3N0b3JlKTsKK30KKwogc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfY29udGVudHNfcmVzaXplKEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNkLCBpbnQgdywgaW50IGgpCiB7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTg5
Niw2ICs5MjYsMTMgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfcHJlX3Jlbgog
ICAgIHJldHVybiBFSU5BX0ZBTFNFOwogfQogCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19z
bWFydF9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFd2tfVmlld19TbWFydF9EYXRhKiBzZCwg
dW5zaWduZWQgaW50IG4sIGZsb2F0IHpvb20pCit7CisgICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5
IGVuZ2luZS4gc2Q9JXAsIG49JXUgem9vbT0lZiIsCisgICAgICAgIHNkLCBuLCB6b29tKTsKKyAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKK30KKwogc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3By
ZV9yZW5kZXJfY2FuY2VsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQogewogICAgIFdSTigibm90
IHN1cHBvcnRlZCBieSBlbmdpbmUuIHNkPSVwIiwgc2QpOwpAQCAtOTUzLDYgKzk5MCw3IEBAIHN0
YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3pvb21fYW5pbWF0b3IKICAgICAgICAgfHwgKG5vdyA8
IHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5zdGFydCkpIHsKICAgICAgICAgX2V3a192aWV3X3pv
b21fYW5pbWF0ZWRfZmluaXNoKHNkKTsKICAgICAgICAgZXdrX3ZpZXdfem9vbV9zZXQoc2QtPnNl
bGYsIHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQsIGN4LCBjeSk7CisgICAgICAgIHNkLT5h
cGktPnNjLmNhbGN1bGF0ZShzZC0+c2VsZik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwog
ICAgIH0KIApAQCAtOTkwLDYgKzEwMjgsMTggQEAgc3RhdGljIFdlYkNvcmU6OlZpZXdwb3J0QXR0
cmlidXRlcyBfZXdrXwogICAgIHJldHVybiBhdHRyaWJ1dGVzOwogfQogCitzdGF0aWMgRWluYV9C
b29sIF9ld2tfdmlld19zbWFydF9kaXNhYmxlX3JlbmRlcihFd2tfVmlld19TbWFydF9EYXRhICpz
ZCkKK3sKKyAgICBXUk4oIm5vdCBzdXBwb3J0ZWQgYnkgZW5naW5lLiBzZD0lcCIsIHNkKTsKKyAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21h
cnRfZW5hYmxlX3JlbmRlcihFd2tfVmlld19TbWFydF9EYXRhICpzZCkKK3sKKyAgICBXUk4oIm5v
dCBzdXBwb3J0ZWQgYnkgZW5naW5lLiBzZD0lcCIsIHNkKTsKKyAgICByZXR1cm4gRUlOQV9GQUxT
RTsKK30KKwogLyoqCiAgKiBTZXRzIHRoZSBzbWFydCBjbGFzcyBhcGkgd2l0aG91dCBhbnkgYmFj
a2luZyBzdG9yZSwgZW5hYmxpbmcgdmlldwogICogdG8gYmUgaW5oZXJpdGVkLgpAQCAtMTAyOSwx
MyArMTA3OSwxOCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoRXdrX1ZpCiAg
ICAgYXBpLT5zYy5yZXNpemUgPSBfZXdrX3ZpZXdfc21hcnRfcmVzaXplOwogICAgIGFwaS0+c2Mu
bW92ZSA9IF9ld2tfdmlld19zbWFydF9tb3ZlOwogICAgIGFwaS0+c2MuY2FsY3VsYXRlID0gX2V3
a192aWV3X3NtYXJ0X2NhbGN1bGF0ZTsKKyAgICBhcGktPnNjLnNob3cgPSBfZXdrX3ZpZXdfc21h
cnRfc2hvdzsKKyAgICBhcGktPnNjLmhpZGUgPSBfZXdrX3ZpZXdfc21hcnRfaGlkZTsKICAgICBh
cGktPnNjLmRhdGEgPSBFV0tfVklFV19UWVBFX1NUUjsgLyogdXNlZCBieSB0eXBlIGNoZWNraW5n
ICovCiAKICAgICBhcGktPmNvbnRlbnRzX3Jlc2l6ZSA9IF9ld2tfdmlld19zbWFydF9jb250ZW50
c19yZXNpemU7CiAgICAgYXBpLT56b29tX3NldCA9IF9ld2tfdmlld19zbWFydF96b29tX3NldDsK
ICAgICBhcGktPmZsdXNoID0gX2V3a192aWV3X3NtYXJ0X2ZsdXNoOwogICAgIGFwaS0+cHJlX3Jl
bmRlcl9yZWdpb24gPSBfZXdrX3ZpZXdfc21hcnRfcHJlX3JlbmRlcl9yZWdpb247CisgICAgYXBp
LT5wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyA9IF9ld2tfdmlld19zbWFydF9wcmVfcmVuZGVy
X3JlbGF0aXZlX3JhZGl1czsKICAgICBhcGktPnByZV9yZW5kZXJfY2FuY2VsID0gX2V3a192aWV3
X3NtYXJ0X3ByZV9yZW5kZXJfY2FuY2VsOworICAgIGFwaS0+ZGlzYWJsZV9yZW5kZXIgPSBfZXdr
X3ZpZXdfc21hcnRfZGlzYWJsZV9yZW5kZXI7CisgICAgYXBpLT5lbmFibGVfcmVuZGVyID0gX2V3
a192aWV3X3NtYXJ0X2VuYWJsZV9yZW5kZXI7CiAKICAgICBhcGktPmZvY3VzX2luID0gX2V3a192
aWV3X3NtYXJ0X2ZvY3VzX2luOwogICAgIGFwaS0+Zm9jdXNfb3V0ID0gX2V3a192aWV3X3NtYXJ0
X2ZvY3VzX291dDsKQEAgLTIxNzAsMTAgKzIyMjUsMTkgQEAgRWluYV9Cb29sIGV3a192aWV3X3pv
b21fdGV4dF9vbmx5X3NldChFdgogRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9u
KEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3
LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmFwaS0+cHJlX3JlbmRlcl9yZWdpb24sIEVJTkFfRkFMU0UpOwotICAgIGZsb2F0IGN1
cl96b29tID0gZXdrX2ZyYW1lX3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBmbG9hdCBj
dXJfem9vbTsKICAgICBFdmFzX0Nvb3JkIGN3LCBjaDsKIAorICAgIC8qIFdoZW4gZG9pbmcgYW5p
bWF0ZWQgem9vbSBpdCdzIG5vdCBwb3NzaWJsZSB0byBjYWxsIHByZS1yZW5kZXIgc2luY2UgaXQK
KyAgICAgKiB3b3VsZCBzY3JldyB1cCBwYXJhbWV0ZXJzIHRoYXQgYW5pbWF0aW9uIGlzIGN1cnJl
bnRseSB1c2luZworICAgICAqLworICAgIGlmIChwcml2LT5hbmltYXRlZF96b29tLmFuaW1hdG9y
KQorICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKworICAgIGN1cl96b29tID0gZXdrX2ZyYW1l
X3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKwogICAgIGlmIChjdXJfem9vbSA8IDAuMDAwMDEp
CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIGlmICghZXdrX2ZyYW1lX2NvbnRlbnRz
X3NpemVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmY3csICZjaCkpCkBAIC0yMjAyLDYgKzIyNjYsMzUg
QEAgRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9uKEV2YQogfQogCiAvKioKKyAq
IEhpbnQgZW5naW5lIHRvIHByZS1yZW5kZXIgcmVnaW9uLCBnaXZlbiBuIGV4dHJhIGNvbHMvcm93
cworICoKKyAqIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgbWV0aG9kIHRvIGV3a192aWV3X3ByZV9y
ZW5kZXJfcmVnaW9uKCkuIEl0IGRvZXMgbm90CisgKiBtYWtlIHNlbnNlIGluIGFsbCBlbmdpbmVz
IGFuZCB0aGVyZWZvcmUgaXQgbWlnaHQgbm90IGJlIGltcGxlbWVudGVkIGF0IGFsbC4KKyAqCisg
KiBJdCdzIG9ubHkgdXNlZnVsIGlmIGVuZ2luZSBkaXZpZGUgdGhlIGFyZWEgYmVpbmcgcmVuZGVy
ZWQgaW4gc21hbGxlciB0aWxlcywKKyAqIGZvcm1pbmcgYSBncmlkLiBUaGVuLCBicm93c2VyIGNv
dWxkIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBwcmUtcmVuZGVyIEBwYXJhbSBuCisgKiByb3dzL2Nv
bHMgaW52b2x2aW5nIHRoZSBjdXJyZW50IHZpZXdwb3J0LgorICoKKyAqIEBwYXJhbSBvIHZpZXcg
dG8gYXNrIHByZS1yZW5kZXIgb24uCisgKiBAcGFyYW0gbiBudW1iZXIgb2YgY29scy9yb3dzIHRo
YXQgbXVzdCBiZSBwYXJ0IG9mIHRoZSByZWdpb24gcHJlLXJlbmRlcmVkCisgKgorICogQHNlZSBl
d2tfdmlld19wcmVfcmVuZGVyX3JlZ2lvbigpCisgKi8KK0VpbmFfQm9vbCBld2tfdmlld19wcmVf
cmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCogbywgdW5zaWduZWQgaW50IG4pCit7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2
ZV9yYWRpdXMsIEVJTkFfRkFMU0UpOworICAgIGZsb2F0IGN1cl96b29tOworCisgICAgaWYgKHBy
aXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwor
CisgICAgY3VyX3pvb20gPSBld2tfZnJhbWVfem9vbV9nZXQoc2QtPm1haW5fZnJhbWUpOworICAg
IHJldHVybiBzZC0+YXBpLT5wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhzZCwgbiwgY3VyX3pv
b20pOworfQorCisvKioKICAqIEdldCBpbnB1dCBtZXRob2QgaGludHMKICAqCiAgKiBAcGFyYW0g
byBWaWV3LgpAQCAtMjIyNyw2ICsyMzIwLDM2IEBAIHZvaWQgZXdrX3ZpZXdfcHJlX3JlbmRlcl9j
YW5jZWwoRXZhc19PYmoKICAgICBzZC0+YXBpLT5wcmVfcmVuZGVyX2NhbmNlbChzZCk7CiB9CiAK
Ky8qKgorICAqIEVuYWJsZSBwcm9jZXNzaW5nIG9mIHVwZGF0ZSByZXF1ZXN0cy4KKyAgKgorICAq
IEBwYXJhbSBvIHZpZXcgdG8gZW5hYmxlIHJlbmRlcmluZy4KKyAgKgorICAqIEByZXR1cm4gQGMg
RUlOQV9UUlVFIGlmIHJlbmRlciB3YXMgZW5hYmxlZCwgQGMgRUlOQV9GQUxTRQorICAgICAgICAg
ICAgb3RoZXJ3aXNlIChlcnJvcnMsIHJlbmRlcmluZyBzdXNwZW5zaW9uIG5vdCBzdXBwb3J0ZWQp
LgorICAqLworRWluYV9Cb29sIGV3a192aWV3X2VuYWJsZV9yZW5kZXIoY29uc3QgRXZhc19PYmpl
Y3QgKm8pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPmVuYWJsZV9y
ZW5kZXIsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBzZC0+YXBpLT5lbmFibGVfcmVuZGVyKHNk
KTsKK30KKworLyoqCisgICogRGlzYWJsZSBwcm9jZXNzaW5nIG9mIHVwZGF0ZSByZXF1ZXN0cy4K
KyAgKgorICAqIEBwYXJhbSBvIHZpZXcgdG8gZGlzYWJsZSByZW5kZXJpbmcuCisgICoKKyAgKiBA
cmV0dXJuIEBjIEVJTkFfVFJVRSBpZiByZW5kZXIgd2FzIGRpc2FibGVkLCBAYyBFSU5BX0ZBTFNF
CisgICAgICAgICAgICBvdGhlcndpc2UgKGVycm9ycywgcmVuZGVyaW5nIHN1c3BlbnNpb24gbm90
IHN1cHBvcnRlZCkuCisgICovCitFaW5hX0Jvb2wgZXdrX3ZpZXdfZGlzYWJsZV9yZW5kZXIoY29u
c3QgRXZhc19PYmplY3QgKm8pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5h
cGktPmRpc2FibGVfcmVuZGVyLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gc2QtPmFwaS0+ZGlz
YWJsZV9yZW5kZXIoc2QpOworfQorCiBjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX3VzZXJf
YWdlbnRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIDApOwpAQCAtMzk1MSw3ICs0MDc0LDYgQEAgdm9pZCBld2tfdmlld19z
Y3JvbGwoRXZhc19PYmplY3QqIG8sIEV2YQogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdik7CiAgICAgRUlOQV9TQUZFVFlfT05fVFJVRV9SRVRVUk4oIWR4ICYmICFkeSk7
CiAKLSAgICBfZXdrX3ZpZXdfc2Nyb2xsX2FkZChwcml2LCBkeCwgZHksIHN4LCBzeSwgc3csIHNo
LCBtYWluX2ZyYW1lKTsKICAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7CiB9CiAKQEAg
LTQyODMsNiArNDQwNSw0MiBAQCBmbG9hdCBld2tfdmlld19kZXZpY2VfcGl4ZWxfcmF0aW9fZ2V0
KEV2CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmRldmljZV9waXhlbF9yYXRpbzsKIH0KIAor
dm9pZCBld2tfdmlld19kaWRfZmlyc3RfdmlzdWFsbHlfbm9uZW1wdHlfbGF5b3V0KEV2YXNfT2Jq
ZWN0ICpvKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgaWYgKCFwcml2LT5mbGFn
cy52aWV3X2NsZWFyZWQpIHsKKyAgICAgICAgZXdrX3ZpZXdfZnJhbWVfbWFpbl9jbGVhcmVkKG8p
OworICAgICAgICBld2tfdmlld19lbmFibGVfcmVuZGVyKG8pOworICAgICAgICBwcml2LT5mbGFn
cy52aWV3X2NsZWFyZWQgPSBFSU5BX1RSVUU7CisgICAgfQorfQorCisvKioKKyAqIEBpbnRlcm5h
bAorICogRGlzcGF0Y2ggZmluaXNoZWQgbG9hZGluZy4KKyAqCisgKiBAcGFyYW0gbyB2aWV3Lgor
ICovCit2b2lkIGV3a192aWV3X2Rpc3BhdGNoX2RpZF9maW5pc2hfbG9hZGluZyhFdmFzX09iamVj
dCAqbykKK3sKKyAgICAvKiBJZiB3ZSByZWFjaCB0aGlzIHBvaW50IGFuZCByZW5kZXJpbmcgaXMg
c3RpbGwgZGlzYWJsZWQsIFdlYkNvcmUgd2lsbCBub3QKKyAgICAgKiB0cmlnZ2VyIHRoZSBkaWRG
aXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQgc2lnbmFsIGFueW1vcmUuIFNvLCB3ZQorICAgICAq
IGZvcmNlZnVsbHkgcmUtZW5hYmxlIHRoZSByZW5kZXJpbmcuCisgICAgICovCisgICAgZXdrX3Zp
ZXdfZGlkX2ZpcnN0X3Zpc3VhbGx5X25vbmVtcHR5X2xheW91dChvKTsKK30KKwordm9pZCBld2tf
dmlld190cmFuc2l0aW9uX3RvX2NvbW1pdGVkX2Zvcl9uZXdwYWdlKEV2YXNfT2JqZWN0ICpvKQor
eworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisKKyAgICBld2tfdmlld19kaXNhYmxlX3JlbmRl
cihvKTsKKyAgICBwcml2LT5mbGFncy52aWV3X2NsZWFyZWQgPSBFSU5BX0ZBTFNFOworfQorCisK
IC8qKgogICogQGludGVybmFsCiAgKiBSZXBvcnRzIGEgcmVxdWVzZXQgd2lsbCBiZSBsb2FkZWQu
IEl0J3MgY2xpZW50IHJlc3BvbnNpYmlsaXR5IHRvIGRlY2lkZSBpZgpJbmRleDogV2ViS2l0L2Vm
bC9ld2svZXdrX3ZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5o
CShyZXZpc2lvbiA3MDE0MikKKysrIFdlYktpdC9lZmwvZXdrL2V3a192aWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExNCw3ICsxMTQsMTEgQEAgc3RydWN0IF9Fd2tfVmlld19TbWFydF9DbGFzcyB7
CiAgICAgdm9pZCAoKmJnX2NvbG9yX3NldCkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIHVuc2ln
bmVkIGNoYXIgciwgdW5zaWduZWQgY2hhciBnLCB1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGNo
YXIgYSk7CiAgICAgdm9pZCAoKmZsdXNoKShFd2tfVmlld19TbWFydF9EYXRhICpzZCk7CiAgICAg
RWluYV9Cb29sICgqcHJlX3JlbmRlcl9yZWdpb24pKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZs
b2F0IHpvb20pOworICAgIEVpbmFfQm9vbCAoKnByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKShF
d2tfVmlld19TbWFydF9EYXRhICpzZCwgdW5zaWduZWQgaW50IG4sIGZsb2F0IHpvb20pOwogICAg
IHZvaWQgKCpwcmVfcmVuZGVyX2NhbmNlbCkoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpOworICAg
IEVpbmFfQm9vbCAoKmRpc2FibGVfcmVuZGVyKShFd2tfVmlld19TbWFydF9EYXRhICpzZCk7Cisg
ICAgRWluYV9Cb29sICgqZW5hYmxlX3JlbmRlcikoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpOwor
CiAgICAgLy8gZXZlbnQgaGFuZGxpbmc6CiAgICAgLy8gIC0gcmV0dXJucyB0cnVlIGlmIGhhbmRs
ZWQKICAgICAvLyAgLSBpZiBvdmVycmlkZGVuLCBoYXZlIHRvIGNhbGwgcGFyZW50IG1ldGhvZCBp
ZiBkZXNpcmVkCkBAIC0xNTEsNyArMTU1LDcgQEAgc3RydWN0IF9Fd2tfVmlld19TbWFydF9DbGFz
cyB7CiAgKiBAc2VlIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfVkVSU0lPTgogICogQHNlZSBF
V0tfVklFV19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTgogICovCi0jZGVmaW5lIEVXS19W
SUVXX1NNQVJUX0NMQVNTX0lOSVQoc21hcnRfY2xhc3NfaW5pdCkge3NtYXJ0X2NsYXNzX2luaXQs
IEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDB9CisjZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVQoc21hcnRfY2xhc3NfaW5pdCkg
e3NtYXJ0X2NsYXNzX2luaXQsIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJT04sIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9CiAKIC8qKgogICogSW5pdGlhbGl6ZXIgdG8gemVy
byBhIHdob2xlIEV3a19WaWV3X1NtYXJ0X0NsYXNzIHN0cnVjdHVyZS4KQEAgLTI2OCw2ICsyNzIs
NyBAQCBzdHJ1Y3QgX0V3a19WaWV3X1NtYXJ0X0RhdGEgewogICAgIEV2YXNfT2JqZWN0ICpzZWxm
OyAvKio8IHJlZmVyZW5jZSB0byBvd25lciBvYmplY3QgKi8KICAgICBFdmFzX09iamVjdCAqbWFp
bl9mcmFtZTsgLyoqPCByZWZlcmVuY2UgdG8gbWFpbiBmcmFtZSBvYmplY3QgKi8KICAgICBFdmFz
X09iamVjdCAqYmFja2luZ19zdG9yZTsgLyoqPCByZWZlcmVuY2UgdG8gYmFja2luZyBzdG9yZSAq
LworICAgIEV2YXNfT2JqZWN0ICpldmVudHNfcmVjdDsgLyoqPCByZWN0YW5nbGUgdGhhdCBzaG91
bGQgcmVjZWl2ZSBtb3VzZSBldmVudHMgKi8KICAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEgKl9w
cml2OyAvKio8IHNob3VsZCBuZXZlciBiZSBhY2Nlc3NlZCwgYysrIHN0dWZmICovCiAgICAgc3Ry
dWN0IHsKICAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOyAvKio8IGxhc3QgdXNlZCB2aWV3
cG9ydCAqLwpAQCAtMjkxLDEwICsyOTYsMzYgQEAgc3RydWN0IF9Fd2tfVmlld19TbWFydF9EYXRh
IHsKICAgICB9IGNoYW5nZWQ7CiB9OwogCisvKioKKyAqIENhY2hlIChwb29sKSB0aGF0IGNvbnRh
aW5zIHVudXNlZCB0aWxlcyBmb3IgZXdrX3ZpZXdfdGlsZWQuCisgKgorICogVGhpcyBjYWNoZSB3
aWxsIG1haW50YWluIHVudXNlZCB0aWxlcyBhbmQgZmx1c2ggdGhlbSB3aGVuIHRoZSB0b3RhbAor
ICogbWVtb3J5IGV4Y2VlZHMgdGhlIHNldCBhbW91bnQgd2hlbgorICogZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2F1dG9fZmx1c2goKSBvciBleHBsaWNpdGx5IHNldCB2YWx1ZSB3aGVuCisgKiBld2tf
dGlsZV91bnVzZWRfY2FjaGVfZmx1c2goKSBpcyBjYWxsZWQuCisgKgorICogVGhlIHRpbGUgbWF5
IGJlIHNoYXJlZCBhbW9uZyBkaWZmZXJlbnQgZXdrX3ZpZXdfdGlsZWQgaW5zdGFuY2VzIHRvCisg
KiBncm91cCBtYXhpbXVtIHVudXNlZCBtZW1vcnkgcmVzaWRlbnQgaW4gdGhlIHN5c3RlbS4KKyAq
LwordHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxlX1VudXNlZF9DYWNoZSBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGU7CitFQVBJIHZvaWQgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X3NldChFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IG1heCk7CitFQVBJIHNpemVfdCBld2tfdGlsZV91
bnVzZWRfY2FjaGVfbWF4X2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yyk7CitF
QVBJIHNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdXNlZF9nZXQoY29uc3QgRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWMpOworRUFQSSBzaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2Zs
dXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgYnl0ZXMpOworRUFQSSB2b2lk
ICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWMpOworCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19iYXNlX3NtYXJ0X3NldChFd2tf
Vmlld19TbWFydF9DbGFzcyAqYXBpKTsKIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3Npbmds
ZV9zbWFydF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MgKmFwaSk7CitFQVBJIEVpbmFfQm9vbCAg
ICBld2tfdmlld190aWxlZF9zbWFydF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MgKmFwaSk7CiAK
IEVBUEkgRXZhc19PYmplY3QgKmV3a192aWV3X3NpbmdsZV9hZGQoRXZhcyAqZSk7CitFQVBJIEV2
YXNfT2JqZWN0ICpld2tfdmlld190aWxlZF9hZGQoRXZhcyAqZSk7CisKK0VBUEkgRXdrX1RpbGVf
VW51c2VkX0NhY2hlICpld2tfdmlld190aWxlZF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0ICpvKTsKK0VBUEkgdm9pZCAgICAgICAgICAgICAgICAgICBld2tfdmlld190aWxlZF91
bnVzZWRfY2FjaGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmNh
Y2hlKTsKKworLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHJlbW92ZWQgbGF0ZXIs
IHdoZW4gd2UgZmluZCB0aGUgYmVzdCBmbGFnIHRvIHVzZS4KK0VBUEkgdm9pZCAgICAgICAgICAg
ICAgICAgICBld2tfdmlld190aWxlZF9wcm9jZXNzX2VudGlyZV9xdWV1ZV9zZXQoRXZhc19PYmpl
Y3QgKm8sIEVpbmFfQm9vbCBmbGFnKTsKIAogRUFQSSB2b2lkICAgICAgICAgZXdrX3ZpZXdfZml4
ZWRfbGF5b3V0X3NpemVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29v
cmQgaCk7CiBFQVBJIHZvaWQgICAgICAgICBld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9nZXQo
RXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgKncsIEV2YXNfQ29vcmQgKmgpOwpAQCAtMzcwLDcg
KzQwMSwxMCBAQCBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld196b29tX3RleHRfb25sCiBFQVBJ
IEVpbmFfQm9vbCAgICBld2tfdmlld196b29tX3RleHRfb25seV9zZXQoRXZhc19PYmplY3QgKm8s
IEVpbmFfQm9vbCBzZXR0aW5nKTsKIAogRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfcHJlX3Jl
bmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSk7CitFQVBJIEVpbmFfQm9vbCAg
ICBld2tfdmlld19wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCAqbywgdW5z
aWduZWQgaW50IG4pOwogRUFQSSB2b2lkICAgICAgICAgZXdrX3ZpZXdfcHJlX3JlbmRlcl9jYW5j
ZWwoRXZhc19PYmplY3QgKm8pOworRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfZW5hYmxlX3Jl
bmRlcihjb25zdCBFdmFzX09iamVjdCAqbyk7CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19k
aXNhYmxlX3JlbmRlcihjb25zdCBFdmFzX09iamVjdCAqbyk7CiAKIEVBUEkgdW5zaWduZWQgaW50
IGV3a192aWV3X2ltaF9nZXQoRXZhc19PYmplY3QgKm8pOwogCkluZGV4OiBXZWJLaXQvZWZsL2V3
ay9ld2tfdmlld190aWxlZC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9lZmwvZXdrL2V3a192aWV3
X3RpbGVkLmMJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5j
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAg
UHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiZXdrX3ZpZXcuaCIKKworI2luY2x1ZGUgImV3a19sb2dnaW5nLmgiCisKKyNpbmNsdWRl
IDxFdmFzLmg+CisjaW5jbHVkZSA8ZWluYV9zYWZldHlfY2hlY2tzLmg+CisjaW5jbHVkZSA8ZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmUuaD4KKworc3RhdGljIEV3a19WaWV3X1NtYXJ0X0NsYXNzIF9w
YXJlbnRfc2MgPSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05VTEw7CisKK3N0YXRpYyBFaW5h
X0Jvb2wgX2V3a192aWV3X3RpbGVkX3JlbmRlcl9jYih2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwg
Y29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpCit7CisgICAgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
ICpwcml2ID0gKEV3a19WaWV3X1ByaXZhdGVfRGF0YSopZGF0YTsKKyAgICBFaW5hX1JlY3Rhbmds
ZSByID0ge2FyZWEtPnggKyB0LT54LCBhcmVhLT55ICsgdC0+eSwgYXJlYS0+dywgYXJlYS0+aH07
CisKKyAgICByZXR1cm4gZXdrX3ZpZXdfcGFpbnRfY29udGVudHMocHJpdiwgdC0+Y2Fpcm8sICZy
KTsKK30KKworc3RhdGljIHZvaWQgKl9ld2tfdmlld190aWxlZF91cGRhdGVzX3Byb2Nlc3NfcHJl
KHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKQoreworICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0
YSAqcHJpdiA9IChFd2tfVmlld19Qcml2YXRlX0RhdGEqKWRhdGE7CisgICAgZXdrX3ZpZXdfbGF5
b3V0X2lmX25lZWRlZF9yZWN1cnNpdmUocHJpdik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyBFdmFzX09iamVjdCAqX2V3a192aWV3X3RpbGVkX3NtYXJ0X2JhY2tpbmdfc3RvcmVfYWRkKEV3
a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAgIEV2YXNfT2JqZWN0ICpicyA9IGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2FkZChzZC0+YmFzZS5ldmFzKTsKKyAgICBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9yZW5kZXJfY2Jfc2V0CisgICAgICAgIChicywgX2V3a192aWV3X3RpbGVkX3JlbmRl
cl9jYiwgc2QtPl9wcml2KTsKKyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3By
b2Nlc3NfcHJlX3NldAorICAgICAgICAoYnMsIF9ld2tfdmlld190aWxlZF91cGRhdGVzX3Byb2Nl
c3NfcHJlLCBzZC0+X3ByaXYpOworICAgIHJldHVybiBiczsKK30KKworc3RhdGljIHZvaWQKK19l
d2tfdmlld190aWxlZF9jb250ZW50c19zaXplX2NoYW5nZWRfY2Iodm9pZCAqZGF0YSwgRXZhc19P
YmplY3QgKm8sIHZvaWQgKmV2ZW50X2luZm8pCit7CisgICAgRXZhc19Db29yZCAqc2l6ZSA9IChF
dmFzX0Nvb3JkKilldmVudF9pbmZvOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkID0gKEV3
a19WaWV3X1NtYXJ0X0RhdGEqKWRhdGE7CisKKyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9j
b250ZW50c19yZXNpemUKKyAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCBzaXplWzBdLCBzaXpl
WzFdKTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2FkZChFdmFzX09i
amVjdCAqbykKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhICpzZDsKKworICAgIF9wYXJlbnRf
c2Muc2MuYWRkKG8pOworCisgICAgc2QgPSAoRXdrX1ZpZXdfU21hcnRfRGF0YSopZXZhc19vYmpl
Y3Rfc21hcnRfZGF0YV9nZXQobyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRk
KAorICAgICAgICBzZC0+bWFpbl9mcmFtZSwgImNvbnRlbnRzLHNpemUsY2hhbmdlZCIsCisgICAg
ICAgIF9ld2tfdmlld190aWxlZF9jb250ZW50c19zaXplX2NoYW5nZWRfY2IsIHNkKTsKKyAgICBl
d2tfZnJhbWVfcGFpbnRfZnVsbF9zZXQoc2QtPm1haW5fZnJhbWUsIEVJTkFfVFJVRSk7Cit9CisK
K3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3Njcm9sbHNfcHJvY2VzcyhF
d2tfVmlld19TbWFydF9EYXRhICpzZCkKK3sKKyAgICBjb25zdCBFd2tfU2Nyb2xsX1JlcXVlc3Qg
KnNyOworICAgIGNvbnN0IEV3a19TY3JvbGxfUmVxdWVzdCAqc3JfZW5kOworICAgIHNpemVfdCBj
b3VudDsKKyAgICBFdmFzX0Nvb3JkIHZ3LCB2aDsKKworICAgIGV3a19mcmFtZV9jb250ZW50c19z
aXplX2dldChzZC0+bWFpbl9mcmFtZSwgJnZ3LCAmdmgpOworCisgICAgc3IgPSBld2tfdmlld19z
Y3JvbGxfcmVxdWVzdHNfZ2V0KHNkLT5fcHJpdiwgJmNvdW50KTsKKyAgICBzcl9lbmQgPSBzciAr
IGNvdW50OworICAgIGZvciAoOyBzciA8IHNyX2VuZDsgc3IrKykgeworICAgICAgICBpZiAoc3It
Pm1haW5fc2Nyb2xsKQorICAgICAgICAgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xs
X2Z1bGxfb2Zmc2V0X2FkZAorICAgICAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgc3It
PmR4LCBzci0+ZHkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEV2YXNfQ29vcmQgc3gs
IHN5LCBzdywgc2g7CisKKyAgICAgICAgICAgIHN4ID0gc3ItPng7CisgICAgICAgICAgICBzeSA9
IHNyLT55OworICAgICAgICAgICAgc3cgPSBzci0+dzsKKyAgICAgICAgICAgIHNoID0gc3ItPmg7
CisKKyAgICAgICAgICAgIGlmIChhYnMoc3ItPmR4KSA+PSBzdyB8fCBhYnMoc3ItPmR5KSA+PSBz
aCkgeworICAgICAgICAgICAgICAgIC8qIGRvdWJ0IHdlYmtpdCB3b3VsZCBiZSBzbyAgICAgc3R1
cGlkLi4uICovCisgICAgICAgICAgICAgICAgREJHKCJmdWxsIHBhZ2Ugc2Nyb2xsICUrMDNkLCUr
MDNkLiBjb252ZXJ0IHRvIHJlcGFpbnQgJWQsJWQgKyAlZHglZCIsCisgICAgICAgICAgICAgICAg
ICAgIHNyLT5keCwgc3ItPmR5LCBzeCwgc3ksIHN3LCBzaCk7CisgICAgICAgICAgICAgICAgZXdr
X3ZpZXdfcmVwYWludF9hZGQoc2QtPl9wcml2LCBzeCwgc3ksIHN3LCBzaCk7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzeCArIHN3
ID4gdncpCisgICAgICAgICAgICAgICAgc3cgPSB2dyAtIHN4OworICAgICAgICAgICAgaWYgKHN5
ICsgc2ggPiB2aCkKKyAgICAgICAgICAgICAgICBzaCA9IHZoIC0gc3k7CisKKyAgICAgICAgICAg
IGlmIChzdyA8IDApCisgICAgICAgICAgICAgICAgc3cgPSAwOworICAgICAgICAgICAgaWYgKHNo
IDwgMCkKKyAgICAgICAgICAgICAgICBzaCA9IDA7CisKKyAgICAgICAgICAgIGlmICghc3cgfHwg
IXNoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBzeCAtPSBhYnMo
c3ItPmR4KTsKKyAgICAgICAgICAgIHN5IC09IGFicyhzci0+ZHkpOworICAgICAgICAgICAgc3cg
Kz0gYWJzKHNyLT5keCk7CisgICAgICAgICAgICBzaCArPSBhYnMoc3ItPmR5KTsKKyAgICAgICAg
ICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwgc3gsIHN5LCBzdywgc2gpOworICAg
ICAgICAgICAgSU5GKCJ1c2luZyByZXBhaW50IGZvciBpbm5lciBmcmFtZSBzY29sbGluZyEiKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyBF
aW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3MoRXdrX1ZpZXdf
U21hcnRfRGF0YSAqc2QpCit7CisgICAgY29uc3QgRWluYV9SZWN0YW5nbGUgKnByLCAqcHJfZW5k
OworICAgIHNpemVfdCBjb3VudDsKKyAgICBpbnQgc3gsIHN5OworCisgICAgZXdrX2ZyYW1lX3Nj
cm9sbF9wb3NfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmc3gsICZzeSk7CisKKyAgICBwciA9IGV3a192
aWV3X3JlcGFpbnRzX2dldChzZC0+X3ByaXYsICZjb3VudCk7CisgICAgcHJfZW5kID0gcHIgKyBj
b3VudDsKKyAgICBmb3IgKDsgcHIgPCBwcl9lbmQ7IHByKyspIHsKKyAgICAgICAgRWluYV9SZWN0
YW5nbGUgcjsKKyAgICAgICAgci54ID0gcHItPnggKyBzeDsKKyAgICAgICAgci55ID0gcHItPnkg
KyBzeTsKKyAgICAgICAgci53ID0gcHItPnc7CisgICAgICAgIHIuaCA9IHByLT5oOworICAgICAg
ICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGUoc2QtPmJhY2tpbmdfc3RvcmUsICZyKTsK
KyAgICB9CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHNkLT5i
YWNraW5nX3N0b3JlKTsKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyBFaW5h
X0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2NvbnRlbnRzX3Jlc2l6ZShFd2tfVmlld19TbWFy
dF9EYXRhICpzZCwgaW50IHcsIGludCBoKQoreworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2NvbnRlbnRzX3Jlc2l6ZShzZC0+YmFja2luZ19zdG9yZSwgdywgaCk7CisgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9v
bV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gs
IEV2YXNfQ29vcmQgY3kpCit7CisgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOworICAgIEVpbmFf
Qm9vbCByOworICAgIHIgPSBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldChzZC0+YmFj
a2luZ19zdG9yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnpv
b20sIGN4LCBjeSwgJngsICZ5KTsKKyAgICBpZiAoIXIpCisgICAgICAgIHJldHVybiByOworICAg
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQoc2QtPmJhY2tpbmdf
c3RvcmUsIEVJTkFfVFJVRSk7CisgICAgciA9IF9wYXJlbnRfc2Muem9vbV9zZXQoc2QsIHpvb20s
IGN4LCBjeSk7CisgICAgZXdrX2ZyYW1lX3Njcm9sbF9zZXQoc2QtPm1haW5fZnJhbWUsIC14LCAt
eSk7CisgICAgZXdrX2ZyYW1lX3Njcm9sbF9zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJncsICZo
KTsKKyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhzZC0+YmFja2luZ19z
dG9yZSwgdywgaCk7CisgICAgZXdrX3ZpZXdfc2Nyb2xsc19wcm9jZXNzKHNkKTsKKyAgICBldmFz
X29iamVjdF9zbWFydF9jYWxjdWxhdGUoc2QtPmJhY2tpbmdfc3RvcmUpOworICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGN1bGF0ZShzZC0+c2VsZik7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfZGlzYWJsZWRfdXBkYXRlX3NldChzZC0+YmFja2luZ19zdG9yZSwgRUlOQV9GQUxTRSk7Cisg
ICAgcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0
X3pvb21fd2Vha19zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGZsb2F0IHpvb20sIEV2YXNf
Q29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpCit7CisgICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3pvb21fd2Vha19zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHpvb20sIGN4LCBjeSk7Cit9
CisKK3N0YXRpYyB2b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3dlYWtfc21vb3RoX3Nj
YWxlX3NldChFd2tfVmlld19TbWFydF9EYXRhICpzZCwgRWluYV9Cb29sIHNtb290aF9zY2FsZSkK
K3sKKyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3Nl
dChzZC0+YmFja2luZ19zdG9yZSwgc21vb3RoX3NjYWxlKTsKK30KKworc3RhdGljIHZvaWQgX2V3
a192aWV3X3RpbGVkX3NtYXJ0X2ZsdXNoKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAg
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHNkLT5iYWNraW5nX3N0b3JlKTsKKyAgICBf
cGFyZW50X3NjLmZsdXNoKHNkKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGls
ZWRfc21hcnRfcHJlX3JlbmRlcl9yZWdpb24oRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEV2YXNf
Q29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQg
em9vbSkKK3sKKyAgICByZXR1cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9y
ZWdpb24KKyAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCB4LCB5LCB3LCBoLCB6b29tKTsKK30K
Kworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9yZWxh
dGl2ZV9yYWRpdXMoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIHVuc2lnbmVkIGludCBuLCBmbG9h
dCB6b29tKQoreworICAgIHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVy
X3JlbGF0aXZlX3JhZGl1cworICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIG4sIHpvb20pOwor
fQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9jYW5jZWwo
RXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCit7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9jYW5jZWwoc2QtPmJhY2tpbmdfc3RvcmUpOworfQorCitzdGF0aWMgRWluYV9C
b29sIF9ld2tfdmlld190aWxlZF9zbWFydF9kaXNhYmxlX3JlbmRlcihFd2tfVmlld19TbWFydF9E
YXRhICpzZCkKK3sKKyAgICByZXR1cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9y
ZW5kZXIoc2QtPmJhY2tpbmdfc3RvcmUpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmll
d190aWxlZF9zbWFydF9lbmFibGVfcmVuZGVyKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQorewor
ICAgIHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKHNkLT5iYWNr
aW5nX3N0b3JlKTsKK30KKworLyoqCisgKiBTZXRzIHRoZSBzbWFydCBjbGFzcyBhcGkgdXNpbmcg
dGlsZWQgYmFja2luZyBzdG9yZSwgZW5hYmxpbmcgdmlldworICogdG8gYmUgaW5oZXJpdGVkLgor
ICoKKyAqIEBwYXJhbSBhcGkgY2xhc3MgZGVmaW5pdGlvbiB0byBiZSBzZXQsIGFsbCBtZW1iZXJz
IHdpdGggdGhlCisgKiAgICAgICAgZXhjZXB0aW9uIG9mIEV2YXNfU21hcnRfQ2xhc3MtPmRhdGEg
bWF5IGJlIG92ZXJyaWRkZW4uIE11c3QKKyAqICAgICAgICBAYiBub3QgYmUgQGMgTlVMTC4KKyAq
CisgKiBAbm90ZSBFdmFzX1NtYXJ0X0NsYXNzLT5kYXRhIGlzIHVzZWQgdG8gaW1wbGVtZW50IHR5
cGUgY2hlY2tpbmcgYW5kCisgKiAgICAgICBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgY2hhbmdlZC9v
dmVycmlkZGVuLiBJZiB5b3UgbmVlZCBleHRyYQorICogICAgICAgZGF0YSBmb3IgeW91ciBzbWFy
dCBjbGFzcyB0byB3b3JrLCBqdXN0IGV4dGVuZAorICogICAgICAgRXdrX1ZpZXdfU21hcnRfQ2xh
c3MgaW5zdGVhZC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBF
SU5BX0ZBTFNFIG9uIGZhaWx1cmUgKHByb2JhYmx5CisgKiAgICAgICAgIHZlcnNpb24gbWlzbWF0
Y2gpLgorICoKKyAqIEBzZWUgZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoKQorICovCitFaW5hX0Jv
b2wgZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNzICphcGkpCit7
CisgICAgaWYgKCFld2tfdmlld19iYXNlX3NtYXJ0X3NldChhcGkpKQorICAgICAgICByZXR1cm4g
RUlOQV9GQUxTRTsKKworICAgIGlmIChFSU5BX1VOTElLRUxZKCFfcGFyZW50X3NjLnNjLmFkZCkp
CisgICAgICAgIGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KCZfcGFyZW50X3NjKTsKKworICAgIGFw
aS0+c2MuYWRkID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X2FkZDsKKworICAgIGFwaS0+YmFja2lu
Z19zdG9yZV9hZGQgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYmFja2luZ19zdG9yZV9hZGQ7Cisg
ICAgYXBpLT5zY3JvbGxzX3Byb2Nlc3MgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2Nyb2xsc19w
cm9jZXNzOworICAgIGFwaS0+cmVwYWludHNfcHJvY2VzcyA9IF9ld2tfdmlld190aWxlZF9zbWFy
dF9yZXBhaW50c19wcm9jZXNzOworICAgIGFwaS0+Y29udGVudHNfcmVzaXplID0gX2V3a192aWV3
X3RpbGVkX3NtYXJ0X2NvbnRlbnRzX3Jlc2l6ZTsKKyAgICBhcGktPnpvb21fc2V0ID0gX2V3a192
aWV3X3RpbGVkX3NtYXJ0X3pvb21fc2V0OworICAgIGFwaS0+em9vbV93ZWFrX3NldCA9IF9ld2tf
dmlld190aWxlZF9zbWFydF96b29tX3dlYWtfc2V0OworICAgIGFwaS0+em9vbV93ZWFrX3Ntb290
aF9zY2FsZV9zZXQgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV93ZWFrX3Ntb290aF9zY2Fs
ZV9zZXQ7CisgICAgYXBpLT5mbHVzaCA9IF9ld2tfdmlld190aWxlZF9zbWFydF9mbHVzaDsKKyAg
ICBhcGktPnByZV9yZW5kZXJfcmVnaW9uID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5k
ZXJfcmVnaW9uOworICAgIGFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMgPSBfZXdrX3Zp
ZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXM7CisgICAgYXBpLT5wcmVf
cmVuZGVyX2NhbmNlbCA9IF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX2NhbmNlbDsK
KyAgICBhcGktPmRpc2FibGVfcmVuZGVyID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X2Rpc2FibGVf
cmVuZGVyOworICAgIGFwaS0+ZW5hYmxlX3JlbmRlciA9IF9ld2tfdmlld190aWxlZF9zbWFydF9l
bmFibGVfcmVuZGVyOworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyBpbmxpbmUg
RXZhc19TbWFydCAqX2V3a192aWV3X3RpbGVkX3NtYXJ0X2NsYXNzX25ldyh2b2lkKQoreworICAg
IHN0YXRpYyBFd2tfVmlld19TbWFydF9DbGFzcyBhcGkgPSBFV0tfVklFV19TTUFSVF9DTEFTU19J
TklUX05BTUVfVkVSU0lPTigiRVdLX1ZpZXdfVGlsZWQiKTsKKyAgICBzdGF0aWMgRXZhc19TbWFy
dCAqc21hcnQgPSAwOworCisgICAgaWYgKEVJTkFfVU5MSUtFTFkoIXNtYXJ0KSkgeworICAgICAg
ICBld2tfdmlld190aWxlZF9zbWFydF9zZXQoJmFwaSk7CisgICAgICAgIHNtYXJ0ID0gZXZhc19z
bWFydF9jbGFzc19uZXcoJmFwaS5zYyk7CisgICAgfQorCisgICAgcmV0dXJuIHNtYXJ0OworfQor
CisvKioKKyAqIENyZWF0ZXMgYSBuZXcgRUZMIFdlYktpdCBWaWV3IG9iamVjdCB1c2luZyB0aWxl
ZCBiYWNraW5nIHN0b3JlLgorICoKKyAqIFZpZXcgb2JqZWN0cyBhcmUgdGhlIHJlY29tbWVuZGVk
IHdheSB0byBkZWFsIHdpdGggRUZMIFdlYktpdCBhcyBpdAorICogYWJzdHJhY3RzIHRoZSBjb21w
bGV4IHBpZWNlcyBvZiB0aGUgcHJvY2Vzcy4KKyAqCisgKiBUaGlzIG9iamVjdCBpcyBhbG1vc3Qg
dGhlIHNhbWUgYXMgdGhlIG9uZSByZXR1cm5lZCBieSB0aGUgZXdrX3ZpZXdfYWRkKCkKKyAqIGZ1
bmN0aW9uLCBidXQgaXQgdXNlcyB0aGUgdGlsZWQgYmFja2luZyBzdG9yZSBpbnN0ZWFkIG9mIHRo
ZSBkZWZhdWx0CisgKiBiYWNraW5nIHN0b3JlLgorICoKKyAqIEBwYXJhbSBlIGNhbnZhcyB3aGVy
ZSB0byBjcmVhdGUgdGhlIHZpZXcgb2JqZWN0LgorICoKKyAqIEByZXR1cm4gdmlldyBvYmplY3Qg
b3IgQGMgTlVMTCBpZiBlcnJvcnMuCisgKgorICogQHNlZSBld2tfdmlld191cmlfc2V0KCkKKyAq
LworRXZhc19PYmplY3QgKmV3a192aWV3X3RpbGVkX2FkZChFdmFzICplKQoreworICAgIHJldHVy
biBldmFzX29iamVjdF9zbWFydF9hZGQoZSwgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2NsYXNzX25l
dygpKTsKK30KKworLyoqCisgKiBHZXQgdGhlIGNhY2hlIG9mIHVudXNlZCB0aWxlcyB1c2VkIGJ5
IHRoaXMgdmlldy4KKyAqCisgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgY2FjaGUuCisg
KiBAcmV0dXJuIGluc3RhbmNlIG9mICJjYWNoZSBvZiB1bnVzZWQgdGlsZXMiIG9yIEBjIE5VTEwg
b24gZXJyb3JzLgorICovCitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a192aWV3X3RpbGVkX3Vu
dXNlZF9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCit7CisgICAgRXdrX1ZpZXdfU21h
cnRfRGF0YSAqc2QgPSBld2tfdmlld19zbWFydF9kYXRhX2dldChvKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QsIDApOworICAgIHJldHVybiBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9nZXQoc2QtPmJhY2tpbmdfc3RvcmUpOworfQorCisv
KioKKyAqIFNldCB0aGUgY2FjaGUgb2YgdW51c2VkIHRpbGVzIHVzZWQgYnkgdGhpcyB2aWV3Lgor
ICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdldCBjYWNoZS4KKyAqIEBwYXJhbSBjYWNo
ZSBpbnN0YW5jZSBvZiAiY2FjaGUgb2YgdW51c2VkIHRpbGVzIi4gVGhpcyBjYW4gYmUgdXNlZAor
ICogICAgICAgIHRvIHNoYXJlIGEgc2luZ2xlIGNhY2hlIGFtb25nc3QgZGlmZmVyZW50IHZpZXdz
LiBUaGUgdGlsZXMKKyAqICAgICAgICBmcm9tIG9uZSB2aWV3IHdpbGwgbm90IGJlIHVzZWQgYnkg
dGhlIG90aGVyISBUaGlzIGlzIGp1c3QgdG8KKyAqICAgICAgICBsaW1pdCB0aGUgZ3JvdXAgd2l0
aCBhbW91bnQgb2YgdW51c2VkIG1lbW9yeS4KKyAqICAgICAgICBJZiBAYyBOVUxMIGlzIHByb3Zp
ZGVkLCB0aGVuIGEgbmV3IGNhY2hlIGlzIGNyZWF0ZWQuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfdGls
ZWRfdW51c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCAqbywgRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICpjYWNoZSkKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhICpzZCA9IGV3a192aWV3X3NtYXJ0
X2RhdGFfZ2V0KG8pOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkKTsKKyAgICBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9zZXQoc2QtPmJhY2tpbmdf
c3RvcmUsIGNhY2hlKTsKK30KKworLyoqCisgKiBTZXQgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHNh
bWUgbmFtZSBvZiB0aGUgdGlsZWQgYmFja2luZyBzdG9yZS4KKyAqIEBwYXJhbSBvIHRoZSB0aWxl
ZCBiYWNraW5nIHN0b3JlIG9iamVjdC4KKyAqIEBwYXJhbSBmbGFnIHZhbHVlIG9mIHRoZSB0aWxl
ZCBiYWNraW5nIHN0b3JlIGZsYWcgdG8gc2V0LgorICovCit2b2lkIGV3a192aWV3X3RpbGVkX3By
b2Nlc3NfZW50aXJlX3F1ZXVlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGZsYWcpCit7
CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QgPSBld2tfdmlld19zbWFydF9kYXRhX2dldChv
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZCk7CisgICAgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcHJvY2Vzc19lbnRpcmVfcXVldWVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBm
bGFnKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74552</attachid>
            <date>2010-11-22 07:37:58 -0800</date>
            <delta_ts>2010-11-22 18:35:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45397-20101122133750.patch</filename>
            <type>text/plain</type>
            <size>174231</size>
            <attacher name="Alex Bredariol Grilo">abgrilo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9lZmwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9lZmwvQ2hh
bmdlTG9nCShyZXZpc2lvbiA3MjUyMikKKysrIFdlYktpdC9lZmwvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjE3IEBACisyMDEwLTExLTIyICBBbGV4IEdyaWxvICA8YWJncmls
b0Bwcm9mdXNpb24ubW9iaT4KKworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENo
cmlzdGlhbnNlbi4KKworICAgICAgICBbRUZMXSBUaWxlZCBCYWNraW5nIFN0b3JlIGZvciBXZWJr
aXQtRWZsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
NTM5NworCisgICAgICAgIFRoaXMgdGlsZSBiYXNlZCBiYWNraW5nIHN0b3JlIGlzIGEgZ3JpZCBv
ZiB0aWxlcyB3aGVyZSBlYWNoIHRpbGUgaXMKKyAgICAgICAgYW4gRXZhc19PYmplY3Qgc2hvd2lu
ZyBhIHBpZWNlIG9mIHRoZSBwYWdlIGNvbnRlbnQuIFRoZQorICAgICAgICBuZXcgZXdrX3ZpZXdf
dGlsZWQuYyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBzb21lIG9mIHRoZSBmdW5jdGlvbnMgb2YK
KyAgICAgICAgdGhlIG9yaWdpbmFsIGV3a192aWV3LCB0aGF0IG1ha2VzIGNhbGxzIHRvIHRoZSBU
aWxlZCBCYWNraW5nIFN0b3JlCisgICAgICAgIHNwZWNpZmljIGZ1bmN0aW9ucy4KKworICAgICAg
ICBUaGUgcmVuZGVyaW5nIG9jY3VycyBpbiB0aGUgcGl4ZWxzIHN0b3JlZCBpbiBlYWNoIHRpbGUg
KEV2YXNfT2JqZWN0KSwKKyAgICAgICAgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBwcmV2aW91cyBz
aW5nbGUgYmFja2luZyBzdG9yZS4gVGlsZXMgbm90IGJlaW5nCisgICAgICAgIHNob3duIGluIHRo
ZSB2aWV3cG9ydCBhcmUgc3RvcmVkIGluIGEgY2FjaGUsIGFuZCBjYW4gYmUgcmV1c2VkIGxhdGVy
CisgICAgICAgIHRvIGF2b2lkIGhhdmluZyB0byBiZSByZW5kZXJlZCBhZ2Fpbi4KKworICAgICAg
ICBTY3JvbGxpbmcgb2NjdXJzIGFzIGp1c3QgbW92aW5nIHRoZSB0aWxlcywgdXNpbmcgRXZhcyBt
b3ZlIG9wZXJhdGlvbnMsCisgICAgICAgIGFuZCB3aGVuIG1vcmUgdGhhbiBvbmUgdGlsZSBzaXpl
IGlzIHNjcm9sbGVkLCBhIHNoaWZ0IG9mIHJvd3Mgb3IKKyAgICAgICAgY29sdW1ucyBuZWVkcyB0
byBiZSBkb25lLgorCisgICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAgICAgICogZXdr
L2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmM6IEFkZGVkLgorICAgICAgICAoX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfZmx1c2gpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
bmV3KToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUpOgorICAg
ICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKToKKyAgICAgICAgKF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29jaWF0ZSk6CisgICAgICAgIChfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKToKKyAgICAgICAgKF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGVfYWxsKToKKyAgICAgICAgKF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKToKKyAgICAgICAgKF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKToKKyAgICAgICAgKF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QpOgorICAgICAgICAo
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaCk6CisgICAg
ICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3JlbW92ZV91
bmFzc29jaWF0ZWQpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5k
ZXJfcmVxdWVzdF9yZW1vdmVfYXNzb2NpYXRlZCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nfc2luZ2xlKToKKyAgICAgICAgKF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2IpOgorICAgICAgICAo
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKToKKyAgICAg
ICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQpOgor
ICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVxdWVzdF9kZWwpOgorICAg
ICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVxdWVzdF9hZGQpOgorICAgICAg
ICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKToKKyAgICAgICAgKF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKToKKyAgICAgICAgKF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aXNpYmxlX3RpbGVzX3JlY3QpOgorICAgICAgICAoX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3RpbGVfaXNfaW5zaWRlX3ZpZXdwb3J0KToKKyAgICAgICAgKF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2lzX2FkamFjZW50X3RvX3ZpZXdwb3J0KToKKyAgICAg
ICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwpOgorICAgICAgICAoX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fYWRkKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX2RlbCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9zbW9vdGhfc2NhbGVfc2V0KToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9j
aGFuZ2VkKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5k
X2RlbCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9h
ZGQpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbCk6Cisg
ICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbCk6Cisg
ICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX2FsbF9kZWwpOgorICAg
ICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcik6CisgICAgICAgIChfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZSk6CisgICAgICAgIChfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2RlbCk6CisgICAgICAgIChfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2FkZCk6CisgICAgICAgIChfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfbWVtX2RiZyk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c2lnX3Vzcik6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkKToK
KyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWwpOgorICAgICAgICAo
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21vdmUpOgorICAgICAgICAoX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZSk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc21hcnRfY2FsY3VsYXRlX3NpemUpOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ZpZXdfZGJnKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X3dyYXBfdXApOgorICAgICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9k
b3duKToKKyAgICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdCk6
CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KToKKyAg
ICAgICAgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbCk6CisgICAgICAgIChf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkpOgorICAgICAgICAoX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UpOgorICAgICAg
ICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQpOgorICAg
ICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9wb3MpOgorICAg
ICAgICAoX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKToKKyAgICAgICAg
KF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGUpOgorICAgICAgICAoZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfYWRkKToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX3JlbmRlcl9jYl9zZXQpOgorICAgICAgICAoZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGls
ZV91bnVzZWRfY2FjaGVfZ2V0KToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Rp
bGVfdW51c2VkX2NhY2hlX3NldCk6CisgICAgICAgIChfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbCk6CisgICAgICAgIChld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0KToKKyAgICAgICAgKGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9hZGQpOgorICAgICAgICAoX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKToKKyAgICAgICAgKGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3pvb21fc2V0KToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3pvb21fd2Vha19zZXQpOgorICAgICAgICAoZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29m
ZnNldHMpOgorICAgICAgICAoZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3Ntb290
aF9zY2FsZV9zZXQpOgorICAgICAgICAoZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKToK
KyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wcmVfc2V0
KToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wb3N0
X3NldCk6CisgICAgICAgIChld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3Mp
OgorICAgICAgICAoZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19jbGVhcik6CisgICAg
ICAgIChld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jb250ZW50c19yZXNpemUpOgorICAgICAgICAo
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRfdXBkYXRlX3NldCk6CisgICAgICAgIChl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaCk6CisgICAgICAgIChld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9wcmVfcmVuZGVyX3JlZ2lvbik6CisgICAgICAgIChld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyk6CisgICAgICAgIChld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX2NhbmNlbCk6CisgICAgICAgIChld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9kaXNhYmxlX3JlbmRlcik6CisgICAgICAgIChld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9lbmFibGVfcmVuZGVyKToKKyAgICAgICAgKGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Byb2Nl
c3NfZW50aXJlX3F1ZXVlX3NldCk6CisgICAgICAgICogZXdrL2V3a190aWxlZF9iYWNraW5nX3N0
b3JlLmg6IEFkZGVkLgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRfbWF0cml4LmM6IEFkZGVkLgor
ICAgICAgICAoX2V3a190aWxlX21hdHJpeF9jZWxsX2ZyZWUpOgorICAgICAgICAoX2V3a190aWxl
X21hdHJpeF90aWxlX2ZyZWUpOgorICAgICAgICAoZXdrX3RpbGVfbWF0cml4X25ldyk6CisgICAg
ICAgIChld2tfdGlsZV9tYXRyaXhfZnJlZSk6CisgICAgICAgIChld2tfdGlsZV9tYXRyaXhfcmVz
aXplKToKKyAgICAgICAgKGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KToKKyAgICAg
ICAgKGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldCk6CisgICAgICAgIChld2tfdGlsZV9t
YXRyaXhfdGlsZV9leGFjdF9leGlzdHMpOgorICAgICAgICAoZXdrX3RpbGVfbWF0cml4X3RpbGVf
bmVhcmVzdF9nZXQpOgorICAgICAgICAoZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3KToKKyAgICAg
ICAgKGV3a190aWxlX21hdHJpeF90aWxlX3B1dCk6CisgICAgICAgIChld2tfdGlsZV9tYXRyaXhf
dGlsZV91cGRhdGUpOgorICAgICAgICAoZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlX2Z1bGwp
OgorICAgICAgICAoZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcik6CisgICAgICAg
IChfZXdrX3RpbGVfbWF0cml4X3NsaWNlcl9zZXR1cCk6CisgICAgICAgIChld2tfdGlsZV9tYXRy
aXhfdXBkYXRlKToKKyAgICAgICAgKGV3a190aWxlX21hdHJpeF91cGRhdGVzX3Byb2Nlc3MpOgor
ICAgICAgICAoZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIpOgorICAgICAgICAoZXdrX3Rp
bGVfbWF0cml4X2RiZyk6CisgICAgICAgIChld2tfdGlsZV9tYXRyaXhfZnJlZXplKToKKyAgICAg
ICAgKGV3a190aWxlX21hdHJpeF90aGF3KToKKyAgICAgICAgKiBld2svZXdrX3RpbGVkX21hdHJp
eC5oOiBBZGRlZC4KKyAgICAgICAgKiBld2svZXdrX3RpbGVkX21vZGVsLmM6IEFkZGVkLgorICAg
ICAgICAoX2V3a190aWxlX2FjY291bnRfZ2V0KToKKyAgICAgICAgKF9ld2tfdGlsZV9hY2NvdW50
X2FsbG9jYXRlZCk6CisgICAgICAgIChfZXdrX3RpbGVfYWNjb3VudF9mcmVlZCk6CisgICAgICAg
IChld2tfdGlsZV9hY2NvdW50aW5nX2RiZyk6CisgICAgICAgIChfZXdrX3RpbGVfcGFpbnRfcmdi
ODg4KToKKyAgICAgICAgKF9ld2tfdGlsZV9wYWludF9yZ2I1NjUpOgorICAgICAgICAoX2V3a190
aWxlX3BhaW50KToKKyAgICAgICAgKGV3a190aWxlX25ldyk6CisgICAgICAgIChld2tfdGlsZV9m
cmVlKToKKyAgICAgICAgKGV3a190aWxlX3Nob3cpOgorICAgICAgICAoZXdrX3RpbGVfaGlkZSk6
CisgICAgICAgIChld2tfdGlsZV92aXNpYmxlX2dldCk6CisgICAgICAgIChld2tfdGlsZV91cGRh
dGVfZnVsbCk6CisgICAgICAgIChld2tfdGlsZV91cGRhdGVfYXJlYSk6CisgICAgICAgIChld2tf
dGlsZV91cGRhdGVzX3Byb2Nlc3MpOgorICAgICAgICAoZXdrX3RpbGVfdXBkYXRlc19jbGVhcik6
CisgICAgICAgIChld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KToKKyAgICAgICAgKGV3a190aWxl
X3VudXNlZF9jYWNoZV9sb2NrX2FyZWEpOgorICAgICAgICAoZXdrX3RpbGVfdW51c2VkX2NhY2hl
X3VubG9ja19hcmVhKToKKyAgICAgICAgKGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKToKKyAg
ICAgICAgKGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcik6CisgICAgICAgIChld2tfdGlsZV91
bnVzZWRfY2FjaGVfcmVmKToKKyAgICAgICAgKGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZik6
CisgICAgICAgIChld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X3NldCk6CisgICAgICAgIChld2tf
dGlsZV91bnVzZWRfY2FjaGVfbWF4X2dldCk6CisgICAgICAgIChld2tfdGlsZV91bnVzZWRfY2Fj
aGVfdXNlZF9nZXQpOgorICAgICAgICAoZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKToKKyAg
ICAgICAgKGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKToKKyAgICAgICAgKGV3a190
aWxlX3VudXNlZF9jYWNoZV9kaXJ0eSk6CisgICAgICAgIChld2tfdGlsZV91bnVzZWRfY2FjaGVf
ZnJlZXplKToKKyAgICAgICAgKGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KToKKyAgICAgICAg
KGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCk6CisgICAgICAgIChld2tfdGlsZV91bnVz
ZWRfY2FjaGVfdGlsZV9wdXQpOgorICAgICAgICAoZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RiZyk6
CisgICAgICAgICogZXdrL2V3a190aWxlZF9tb2RlbC5oOiBBZGRlZC4KKyAgICAgICAgKiBld2sv
ZXdrX3RpbGVkX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogZXdrL2V3a192aWV3LmNwcDoK
KyAgICAgICAgKF9ld2tfdmlld19zbWFydF9hZGQpOgorICAgICAgICAoX2V3a192aWV3X3NtYXJ0
X2NhbGN1bGF0ZSk6CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfc2hvdyk6CisgICAgICAgIChf
ZXdrX3ZpZXdfc21hcnRfaGlkZSk6CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfcHJlX3JlbmRl
cl9yZWxhdGl2ZV9yYWRpdXMpOgorICAgICAgICAoX2V3a192aWV3X3pvb21fYW5pbWF0b3JfY2Ip
OgorICAgICAgICAoX2V3a192aWV3X3NtYXJ0X2Rpc2FibGVfcmVuZGVyKToKKyAgICAgICAgKF9l
d2tfdmlld19zbWFydF9lbmFibGVfcmVuZGVyKToKKyAgICAgICAgKGV3a192aWV3X2Jhc2Vfc21h
cnRfc2V0KToKKyAgICAgICAgKGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9uKToKKyAgICAgICAg
KGV3a192aWV3X3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKToKKyAgICAgICAgKGV3a192aWV3
X2VuYWJsZV9yZW5kZXIpOgorICAgICAgICAoZXdrX3ZpZXdfZGlzYWJsZV9yZW5kZXIpOgorICAg
ICAgICAoZXdrX3ZpZXdfc2Nyb2xsKToKKyAgICAgICAgKGV3a192aWV3X2RpZF9maXJzdF92aXN1
YWxseV9ub25lbXB0eV9sYXlvdXQpOgorICAgICAgICAoZXdrX3ZpZXdfZGlzcGF0Y2hfZGlkX2Zp
bmlzaF9sb2FkaW5nKToKKyAgICAgICAgKGV3a192aWV3X3RyYW5zaXRpb25fdG9fY29tbWl0ZWRf
Zm9yX25ld3BhZ2UpOgorICAgICAgICAqIGV3ay9ld2tfdmlldy5oOgorICAgICAgICAqIGV3ay9l
d2tfdmlld190aWxlZC5jOiBBZGRlZC4KKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9yZW5kZXJf
Y2IpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3VwZGF0ZXNfcHJvY2Vzc19wcmUpOgorICAg
ICAgICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0X2JhY2tpbmdfc3RvcmVfYWRkKToKKyAgICAgICAg
KF9ld2tfdmlld190aWxlZF9jb250ZW50c19zaXplX2NoYW5nZWRfY2IpOgorICAgICAgICAoX2V3
a192aWV3X3RpbGVkX3NtYXJ0X2FkZCk6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRf
c2Nyb2xsc19wcm9jZXNzKToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF9yZXBhaW50
c19wcm9jZXNzKToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF9jb250ZW50c19yZXNp
emUpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fc2V0KToKKyAgICAgICAg
KF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3dlYWtfc2V0KToKKyAgICAgICAgKF9ld2tfdmll
d190aWxlZF9zbWFydF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldCk6CisgICAgICAgIChfZXdr
X3ZpZXdfdGlsZWRfc21hcnRfZmx1c2gpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0
X3ByZV9yZW5kZXJfcmVnaW9uKToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVf
cmVuZGVyX3JlbGF0aXZlX3JhZGl1cyk6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRf
cHJlX3JlbmRlcl9jYW5jZWwpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0X2Rpc2Fi
bGVfcmVuZGVyKToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF9lbmFibGVfcmVuZGVy
KToKKyAgICAgICAgKGV3a192aWV3X3RpbGVkX3NtYXJ0X3NldCk6CisgICAgICAgIChfZXdrX3Zp
ZXdfdGlsZWRfc21hcnRfY2xhc3NfbmV3KToKKyAgICAgICAgKGV3a192aWV3X3RpbGVkX2FkZCk6
CisgICAgICAgIChld2tfdmlld190aWxlZF91bnVzZWRfY2FjaGVfZ2V0KToKKyAgICAgICAgKGV3
a192aWV3X3RpbGVkX3VudXNlZF9jYWNoZV9zZXQpOgorICAgICAgICAoZXdrX3ZpZXdfdGlsZWRf
cHJvY2Vzc19lbnRpcmVfcXVldWVfc2V0KToKKwogMjAxMC0xMS0xNiAgTGVhbmRybyBQZXJlaXJh
ICA8bGVhbmRyb0Bwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBbRUZMXSBVbnJldmlld2VkLiBC
dWlsZCBmaXguCkluZGV4OiBXZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQJKHJldmlzaW9uIDcyNTE5KQorKysgV2Vi
S2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjMsOSArNjMsMTMg
QEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBlZmwvZXdrL2V3a19oaXN0b3J5LmNw
cAogICAgIGVmbC9ld2svZXdrX21haW4uY3BwCiAgICAgZWZsL2V3ay9ld2tfc2V0dGluZ3MuY3Bw
CisgICAgZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jCisgICAgZWZsL2V3ay9ld2tf
dGlsZWRfbWF0cml4LmMKKyAgICBlZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jCiAgICAgZWZsL2V3
ay9ld2tfdXRpbC5jcHAKICAgICBlZmwvZXdrL2V3a192aWV3LmNwcAogICAgIGVmbC9ld2svZXdr
X3ZpZXdfc2luZ2xlLmMKKyAgICBlZmwvZXdrL2V3a192aWV3X3RpbGVkLmMKICAgICBlZmwvZXdr
L2V3a193aW5kb3dfZmVhdHVyZXMuY3BwCiApCiAKSW5kZXg6IFdlYktpdC9lZmwvZXdrL2V3a190
aWxlZF9iYWNraW5nX3N0b3JlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2VmbC9ld2svZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmUuYwkocmV2aXNpb24gMCkKKysrIFdlYktpdC9lZmwvZXdrL2V3a190
aWxlZF9iYWNraW5nX3N0b3JlLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEzNyBAQAorLyoK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCIKKwor
I2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgImV3a190aWxlZF9wcml2YXRlLmgiCisjaW5j
bHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNp
bmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4gLy8gWFhYIFJFTU9WRSBNRSBMQVRF
UgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIElE
WChjb2wsIHJvdywgcm93c3BhbikgKGNvbCArIChyb3cgKiByb3dzcGFuKSkKKworI2lmICFkZWZp
bmVkKE1JTikKKyMgZGVmaW5lIE1JTihhLCBiKSAoKGEgPCBiKSA/IGEgOiBiKQorI2VuZGlmCisK
KyNpZiAhZGVmaW5lZChNQVgpCisjIGRlZmluZSBNQVgoYSwgYikgKChhID4gYikgPyBhIDogYikK
KyNlbmRpZgorCit0eXBlZGVmIGVudW0gX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5k
ZXJfUHJpb3JpdHkgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eTsK
K3R5cGVkZWYgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGE7Cit0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtOwordHlwZWRlZiBzdHJ1Y3QgX0V3
a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Q7CisKK2VudW0gX0V3a19UaWxlZF9CYWNraW5nX1N0
b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgeworICAgIFBSRV9SRU5ERVJfUFJJT1JJVFlfTE9XID0g
MCwgLyoqPCBBcHBlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGxpc3QgKi8KKyAgICBQUkVfUkVOREVS
X1BSSU9SSVRZX0hJR0ggICAgIC8qKjwgUHJlcGVuZCB0aGUgcmVxdWVzdCB0byB0aGUgbGlzdCAq
LworfTsKKworc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtIHsKKyAgICBFSU5B
X0lOTElTVDsKKyAgICBFd2tfVGlsZSAqdGlsZTsKKyAgICBzdHJ1Y3QgeworICAgICAgICBFdmFz
X0Nvb3JkIHgsIHksIHcsIGg7CisgICAgfSBnZW9tZXRyeTsKKyAgICBzdHJ1Y3QgeworICAgICAg
ICBFaW5hX0xpc3QgKnByb2Nlc3M7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcm93LCBjb2w7Cisg
ICAgICAgIGZsb2F0IHpvb207CisgICAgfSB1cGRhdGU7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpwcmVfcmVuZGVyOworICAgIEVpbmFfQm9vbCBzbW9v
dGhfc2NhbGU7Cit9OworCitzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5k
ZXJfUmVxdWVzdCB7CisgICAgRUlOQV9JTkxJU1Q7CisgICAgdW5zaWduZWQgbG9uZyBjb2wsIHJv
dzsKKyAgICBmbG9hdCB6b29tOworICAgIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSAqaXQ7Cit9OworCitzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgewor
ICAgIEV2YXNfT2JqZWN0X1NtYXJ0X0NsaXBwZWRfRGF0YSBiYXNlOworICAgIEV2YXNfT2JqZWN0
ICpzZWxmOworICAgIEV2YXNfT2JqZWN0ICpjb250ZW50c19jbGlwcGVyOworICAgIHN0cnVjdCB7
CisgICAgICAgIEVpbmFfSW5saXN0ICoqaXRlbXM7CisgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwg
dywgaDsKKyAgICAgICAgbG9uZyBjb2xzLCByb3dzOworICAgICAgICBzdHJ1Y3QgeworICAgICAg
ICAgICAgRXZhc19Db29yZCB3LCBoOworICAgICAgICAgICAgZmxvYXQgem9vbTsKKyAgICAgICAg
ICAgIEVpbmFfQm9vbCB6b29tX3dlYWtfc21vb3RoX3NjYWxlOjE7CisgICAgICAgIH0gdGlsZTsK
KyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAg
RXZhc19Db29yZCB4LCB5OworICAgICAgICAgICAgfSBjdXIsIG9sZCwgYmFzZSwgem9vbV9jZW50
ZXI7CisgICAgICAgIH0gb2Zmc2V0OworICAgIH0gdmlldzsKKyAgICBFdmFzX0NvbG9yc3BhY2Ug
Y3NwYWNlOworICAgIHN0cnVjdCB7CisgICAgICAgIEV3a19UaWxlX01hdHJpeCAqbWF0cml4Owor
ICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKKyAg
ICAgICAgfSBiYXNlOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyBjb2xzLCByb3dzOworICAgICAgICB9IGN1ciwgb2xkOworICAgICAgICBFdmFzX0Nvb3JkIHdp
ZHRoLCBoZWlnaHQ7CisgICAgfSBtb2RlbDsKKyAgICBzdHJ1Y3QgeworICAgICAgICBFaW5hX0Jv
b2wgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICph
cmVhKTsKKyAgICAgICAgdm9pZCAqZGF0YTsKKyAgICAgICAgRWluYV9MaXN0ICpxdWV1ZTsKKyAg
ICAgICAgRWluYV9Cb29sIHByb2Nlc3NfZW50aXJlX3F1ZXVlOworICAgICAgICBFaW5hX0lubGlz
dCAqcHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICAgICAgRWNvcmVfSWRsZXIgKmlkbGVyOworICAg
ICAgICBFaW5hX0Jvb2wgZGlzYWJsZWQ7CisgICAgICAgIEVpbmFfQm9vbCBzdXNwZW5kOjE7Cisg
ICAgfSByZW5kZXI7CisgICAgc3RydWN0IHsKKyAgICAgICAgdm9pZCAqKCpwcmVfY2IpKHZvaWQg
KmRhdGEsIEV2YXNfT2JqZWN0ICpvKTsKKyAgICAgICAgdm9pZCAqcHJlX2RhdGE7CisgICAgICAg
IHZvaWQgKigqcG9zdF9jYikodm9pZCAqZGF0YSwgdm9pZCAqcHJlX2RhdGEsIEV2YXNfT2JqZWN0
ICpvKTsKKyAgICAgICAgdm9pZCAqcG9zdF9kYXRhOworICAgIH0gcHJvY2VzczsKKyAgICBzdHJ1
Y3QgeworICAgICAgICBFaW5hX0Jvb2wgYW55OjE7CisgICAgICAgIEVpbmFfQm9vbCBwb3M6MTsK
KyAgICAgICAgRWluYV9Cb29sIHNpemU6MTsKKyAgICAgICAgRWluYV9Cb29sIG1vZGVsOjE7Cisg
ICAgICAgIEVpbmFfQm9vbCBvZmZzZXQ6MTsKKyAgICB9IGNoYW5nZWQ7CisjaWZkZWYgREVCVUdf
TUVNX0xFQUtTCisgICAgRWNvcmVfRXZlbnRfSGFuZGxlciAqc2lnX3VzcjsKKyNlbmRpZgorfTsK
Kworc3RhdGljIEV2YXNfU21hcnRfQ2xhc3MgX3BhcmVudF9zYyA9IEVWQVNfU01BUlRfQ0xBU1Nf
SU5JVF9OVUxMOworaW50IF9ld2tfdGlsZWRfbG9nX2RvbSA9IC0xOworCisjZGVmaW5lIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKG9iaiwgcHRyLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHRyID0gZXZhc19vYmplY3Rfc21h
cnRfZGF0YV9nZXQob2JqKTsgXAorICAgIGlmICghcHRyKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDUklUSUNBTCgibm8g
cHJpdmF0ZSBkYXRhIGluIG9iaj0lcCIsIG9iaik7ICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIH0KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX3JlcXVlc3RfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYs
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXF1ZXN0X2FkZChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgaW50
IG1fY29sLCBpbnQgbV9yb3csIGZsb2F0IHpvb20pOworc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEg
KnByaXYpOworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KTsKK3N0YXRpYyBp
bmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2KTsKKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdikKK3sKKyAgICB2b2lkICpkYXRhID0gTlVMTDsKKworICAgIC8qIERvIG5vdCBwcm9j
ZXNzIHVwZGF0ZXMuIE5vdGUgdGhhdCB3ZSBzdGlsbCB3YW50IHRvIGdldCB1cGRhdGVzIHJlcXVl
c3RzCisgICAgICogaW4gdGhlIHF1ZXVlIGluIG9yZGVyIHRvIG5vdCBtaXNzIGFueSB1cGRhdGVz
IGFmdGVyIHRoZSByZW5kZXIgaXMKKyAgICAgKiByZXN1bWVkLgorICAgICAqLworICAgIGlmIChw
cml2LT5yZW5kZXIuc3VzcGVuZCB8fCAhZXZhc19vYmplY3RfdmlzaWJsZV9nZXQocHJpdi0+c2Vs
ZikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwcml2LT5wcm9jZXNzLnByZV9jYikKKyAg
ICAgICAgZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nlc3MucHJlX2RhdGEs
IHByaXYtPnNlbGYpOworCisgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfcHJvY2Vzcyhwcml2
LT5tb2RlbC5tYXRyaXgpOworCisgICAgaWYgKHByaXYtPnByb2Nlc3MucG9zdF9jYikKKyAgICAg
ICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9kYXRhLCBkYXRhLCBw
cml2LT5zZWxmKTsKK30KKworc3RhdGljIGludCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1
c2godm9pZCAqZGF0YSkKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
ID0gZGF0YTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YyA9IGV3a190aWxlX21hdHJp
eF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBpZiAodHVjKSB7
CisgICAgICAgIERCRygiZmx1c2ggdW51c2VkIHRpbGUgY2FjaGUuIik7CisgICAgICAgIGV3a190
aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CisgICAgfSBlbHNlCisgICAgICAgIEVS
Uigibm8gY2FjaGU/ISIpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBFd2tfVGlsZSAq
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnByaXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQg
em9vbSkKK3sKKyAgICBFd2tfVGlsZSAqdDsKKyAgICBFdmFzICpldmFzID0gZXZhc19vYmplY3Rf
ZXZhc19nZXQocHJpdi0+c2VsZik7CisgICAgaWYgKCFldmFzKSB7CisgICAgICAgIENSSVRJQ0FM
KCJldmFzX29iamVjdF9ldmFzX2dldCBmYWlsZWQhIik7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKworICAgIHQgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcKKyAgICAgICAgKHByaXYt
Pm1vZGVsLm1hdHJpeCwgZXZhcywgY29sLCByb3csIHpvb20pOworCisgICAgaWYgKCF0KSB7Cisg
ICAgICAgIENSSVRJQ0FMKCJld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcgZmFpbGVkISIpOworICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gdDsKK30KKworc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdCwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7CisgICAgaXQtPmdl
b21ldHJ5LnggPSB4OworICAgIGl0LT5nZW9tZXRyeS55ID0geTsKKworICAgIGlmIChpdC0+dGls
ZSkKKyAgICAgICAgZXZhc19vYmplY3RfbW92ZShpdC0+dGlsZS0+aW1hZ2UsIHgsIHkpOworfQor
CitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQor
eworICAgIGl0LT5nZW9tZXRyeS53ID0gdzsKKyAgICBpdC0+Z2VvbWV0cnkuaCA9IGg7CisKKyAg
ICBpZiAoaXQtPnRpbGUpIHsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKGl0LT50aWxlLT5p
bWFnZSwgdywgaCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KGl0LT50aWxl
LT5pbWFnZSwgMCwgMCwgdywgaCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdiwgRXdrX1RpbGUgKnQsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0KQor
eworICAgIGlmIChpdC0+dGlsZSkKKyAgICAgICAgQ1JJVElDQUwoIml0LT50aWxlPSVwLCBidXQg
aXQgc2hvdWxkIGJlIE5VTEwhIiwgaXQtPnRpbGUpOworICAgIGl0LT50aWxlID0gdDsKKyAgICBl
dmFzX29iamVjdF9tb3ZlKGl0LT50aWxlLT5pbWFnZSwgaXQtPmdlb21ldHJ5LngsIGl0LT5nZW9t
ZXRyeS55KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoaXQtPnRpbGUtPmltYWdlLCBpdC0+Z2Vv
bWV0cnkudywgaXQtPmdlb21ldHJ5LmgpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0
CisgICAgICAgIChpdC0+dGlsZS0+aW1hZ2UsIDAsIDAsIGl0LT5nZW9tZXRyeS53LCBpdC0+Z2Vv
bWV0cnkuaCk7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdC0+dGls
ZS0+aW1hZ2UsIGl0LT5zbW9vdGhfc2NhbGUpOworCisgICAgaWYgKCFld2tfdGlsZV92aXNpYmxl
X2dldCh0KSkKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZCh0LT5pbWFnZSwg
cHJpdi0+c2VsZik7CisKKyAgICBld2tfdGlsZV9zaG93KHQpOworfQorCitzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCBkb3Vi
bGUgbGFzdF91c2VkKQoreworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworICAgIGV3
a190aWxlX2hpZGUoaXQtPnRpbGUpOworICAgIGlmICghZXdrX3RpbGVfdmlzaWJsZV9nZXQoaXQt
PnRpbGUpKQorICAgICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVsKGl0LT50aWxlLT5p
bWFnZSk7CisgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KHByaXYtPm1vZGVsLm1hdHJpeCwg
aXQtPnRpbGUsIGxhc3RfdXNlZCk7CisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9j
YWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVf
YXV0b19mbHVzaCh0dWMpOworCisgICAgaXQtPnRpbGUgPSBOVUxMOworfQorCitzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIEVpbmFfSW5saXN0ICppdDsKKyAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdGVtOworICAgIGludCBpOworICAgIGRvdWJs
ZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CisKKyAgICBmb3IgKGkgPSAwOyBp
IDwgcHJpdi0+dmlldy5yb3dzOyBpKyspIHsKKyAgICAgICAgaXQgPSBwcml2LT52aWV3Lml0ZW1z
W2ldOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGl0LCBpdGVtKQorICAgICAgICAgICAg
aWYgKGl0ZW0tPnRpbGUpCisgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdGVtLCBsYXN0X3VzZWQpOworICAgIH0KK30KKworc3Rh
dGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJf
cmVxdWVzdF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgdW5zaWduZWQg
bG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tLCBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9JdGVtICppdCwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlv
cml0eSBwcmlvcml0eSkKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVy
X1JlcXVlc3QgKnI7CisKKyAgICBNQUxMT0NfT1JfT09NX1JFVChyLCBzaXplb2YoKnIpLCBFSU5B
X0ZBTFNFKTsKKworICAgIGlmIChwcmlvcml0eSA9PSBQUkVfUkVOREVSX1BSSU9SSVRZX0hJR0gp
CisgICAgICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWluYV9pbmxpc3Rf
cHJlcGVuZAorICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBF
SU5BX0lOTElTVF9HRVQocikpOworICAgIGVsc2UKKyAgICAgICAgcHJpdi0+cmVuZGVyLnByZV9y
ZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9hcHBlbmQKKyAgICAgICAgICAgIChwcml2LT5y
ZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsKKworICAgIHIt
PmNvbCA9IGNvbDsKKyAgICByLT5yb3cgPSByb3c7CisgICAgci0+em9vbSA9IHpvb207CisgICAg
ci0+aXQgPSBpdDsKKworICAgIGlmIChpdCkKKyAgICAgICAgaXQtPnByZV9yZW5kZXIgPSByOwor
ICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVl
c3QgKnIpCit7CisgICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lu
bGlzdF9yZW1vdmUKKyAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBF
SU5BX0lOTElTVF9HRVQocikpOworICAgIGZyZWUocik7Cit9CisKK3N0YXRpYyBpbmxpbmUgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KGNvbnN0IEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgcmV0dXJuIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9H
RVQoCisgICAgICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLAorICAgICAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOworfQorCitzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRWluYV9Jbmxpc3QgKipw
bCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICB3aGlsZSAoKnBsKSB7
CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqcjsK
KyAgICAgICAgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3Rf
Zmlyc3QocHJpdik7CisgICAgICAgIGlmIChyLT5pdCAmJiByLT5pdC0+cHJlX3JlbmRlcikKKyAg
ICAgICAgICAgIHItPml0LT5wcmVfcmVuZGVyID0gTlVMTDsKKyAgICAgICAgKnBsID0gZWluYV9p
bmxpc3RfcmVtb3ZlKCpwbCwgKnBsKTsKKyAgICAgICAgZnJlZShyKTsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfcmVt
b3ZlX3VuYXNzb2NpYXRlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorewor
ICAgIEVpbmFfSW5saXN0ICoqcGwgPSAmcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHM7
CisgICAgRWluYV9Jbmxpc3QgKml0ZXIgPSAqcGwsICp0bXA7CisgICAgd2hpbGUgKGl0ZXIpIHsK
KyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpyID0K
KyAgICAgICAgICAgIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCisgICAgICAgICAgICAgICAg
aXRlciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KTsKKyAgICAg
ICAgaWYgKCFyLT5pdCkgeworICAgICAgICAgICAgdG1wID0gaXRlci0+bmV4dDsKKyAgICAgICAg
ICAgICpwbCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcGwsIGl0ZXIpOworICAgICAgICAgICAgaXRl
ciA9IHRtcDsKKyAgICAgICAgICAgIGZyZWUocik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgaXRlciA9IGl0ZXItPm5leHQ7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3JlbW92ZV9hc3NvY2lhdGVkKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRWluYV9Jbmxpc3QgKipwbCA9
ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICBFaW5hX0lubGlzdCAqaXRl
ciA9ICpwbCwgKnRtcDsKKyAgICB3aGlsZSAoaXRlcikgeworICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIgPQorICAgICAgICAgICAgRUlOQV9JTkxJ
U1RfQ09OVEFJTkVSX0dFVCgKKyAgICAgICAgICAgICAgICBpdGVyLCBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOworICAgICAgICBpZiAoci0+aXQpIHsKKyAgICAg
ICAgICAgIGlmIChyLT5pdC0+cHJlX3JlbmRlcikKKyAgICAgICAgICAgICAgICByLT5pdC0+cHJl
X3JlbmRlciA9IE5VTEw7CisgICAgICAgICAgICB0bXAgPSBpdGVyLT5uZXh0OworICAgICAgICAg
ICAgKnBsID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwbCwgaXRlcik7CisgICAgICAgICAgICBpdGVy
ID0gdG1wOworICAgICAgICAgICAgZnJlZShyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBpdGVyID0gaXRlci0+bmV4dDsKKyAgICB9Cit9CisKKy8qIGFzc3VtZXMgcHJpdi0+cHJvY2Vz
cy5wcmVfY2Igd2FzIGNhbGxlZCBpZiByZXF1aXJlZCEgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnJlcTsKKyAgICBFaW5hX1JlY3RhbmdsZSBhcmVhOwor
ICAgIEV3a19UaWxlX01hdHJpeCAqdG0gPSBwcml2LT5tb2RlbC5tYXRyaXg7CisgICAgRXdrX1Rp
bGUgKnQ7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgdW5zaWduZWQgbG9u
ZyBjb2wsIHJvdzsKKyAgICBmbG9hdCB6b29tOworICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29y
ZV9sb29wX3RpbWVfZ2V0KCk7CisKKyAgICByZXEgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KHByaXYpOworICAgIGlmICghcmVxKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb2wgPSByZXEtPmNvbDsKKyAgICByb3cgPSByZXEtPnJvdzsKKyAgICB6
b29tID0gcmVxLT56b29tOworCisgICAgaWYgKGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4
aXN0cyh0bSwgY29sLCByb3csIHpvb20pKSB7CisgICAgICAgIERCRygibm8gcHJlLXJlbmRlciBy
ZXF1aXJlZCBmb3IgdGlsZSAlbHUsJWx1IEAgJWYuIiwgY29sLCByb3csIHpvb20pOworICAgICAg
ICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAocmVxLT5pdCAmJiByZXEtPml0LT50aWxlKSB7
CisgICAgICAgIENSSVRJQ0FMKCJpdC0+dGlsZSA9ICVwICglbHUsICVsdSksIGJ1dCBzaG91bGQg
YmUgTlVMTCIsIHJlcS0+aXQtPnRpbGUsIHJlcS0+aXQtPnRpbGUtPnJvdywgcmVxLT5pdC0+dGls
ZS0+Y29sKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgdCA9IF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2LCBjb2wsIHJvdywgem9vbSk7CisgICAgaWYgKCF0
KQorICAgICAgICBnb3RvIGVuZDsKKworICAgIGFyZWEueCA9IDA7CisgICAgYXJlYS55ID0gMDsK
KyAgICBhcmVhLncgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBhcmVhLmggPSBwcml2LT52aWV3
LnRpbGUuaDsKKworICAgIHByaXYtPnJlbmRlci5jYihwcml2LT5yZW5kZXIuZGF0YSwgdCwgJmFy
ZWEpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZCgKKyAgICAgICAgdC0+
aW1hZ2UsCisgICAgICAgIGFyZWEueCwgYXJlYS55LCBhcmVhLncsIGFyZWEuaCk7CisgICAgZXdr
X3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcih0bSwgdCk7CisKKyAgICBpZiAocmVxLT5p
dCkgeworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUocHJp
diwgdCwgcmVxLT5pdCk7CisgICAgICAgIGlmIChyZXEtPml0LT5wcmVfcmVuZGVyKQorICAgICAg
ICAgICAgcmVxLT5pdC0+cHJlX3JlbmRlciA9IE5VTEw7CisgICAgfSBlbHNlCisgICAgICAgIGV3
a190aWxlX21hdHJpeF90aWxlX3B1dCh0bSwgdCwgbGFzdF91c2VkKTsKKworZW5kOgorICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKHByaXYsIHJlcSk7
CisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwu
bWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOworfQor
CitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3Nf
aWRsZXJfY2Iodm9pZCAqZGF0YSkKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2ID0gZGF0YTsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCA9IE5V
TEw7CisKKyAgICB3aGlsZSAocHJpdi0+cmVuZGVyLnF1ZXVlKSB7CisgICAgICAgIGl0ID0gcHJp
di0+cmVuZGVyLnF1ZXVlLT5kYXRhOworICAgICAgICBpZiAoaXQtPnRpbGUtPnpvb20gPT0gcHJp
di0+dmlldy50aWxlLnpvb20pIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3JlcXVlc3RfZGVsKHByaXYsIGl0KTsKKyAgICAgICAgICAgIGl0ID0gTlVMTDsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcm93LCBjb2w7CisgICAg
ICAgICAgICBmbG9hdCB6b29tOworICAgICAgICAgICAgRXdrX1RpbGUgKnQ7CisgICAgICAgICAg
ICBpZiAoaXQtPnRpbGUpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgbGFzdF91c2VkID0gZWNv
cmVfbG9vcF90aW1lX2dldCgpOworICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsIGxhc3RfdXNlZCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJvdyA9IGl0LT51cGRhdGUucm93OworICAgICAgICAgICAgY29sID0g
aXQtPnVwZGF0ZS5jb2w7CisgICAgICAgICAgICB6b29tID0gaXQtPnVwZGF0ZS56b29tOworICAg
ICAgICAgICAgdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2LCBjb2ws
IHJvdywgem9vbSk7CisgICAgICAgICAgICBpZiAoIXQpIHsKKyAgICAgICAgICAgICAgICBwcml2
LT5yZW5kZXIuaWRsZXIgPSBOVUxMOworICAgICAgICAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNF
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dGlsZV9hc3NvY2lhdGUocHJpdiwgdCwgaXQpOworICAgICAgICAgICAgaXQtPnVwZGF0ZS5wcm9j
ZXNzID0gTlVMTDsKKyAgICAgICAgICAgIHByaXYtPnJlbmRlci5xdWV1ZSA9IGVpbmFfbGlzdF9y
ZW1vdmVfbGlzdChwcml2LT5yZW5kZXIucXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+cmVuZGVyLnF1ZXVlKTsKKyAgICAg
ICAgICAgIGlmICghcHJpdi0+cmVuZGVyLnByb2Nlc3NfZW50aXJlX3F1ZXVlKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHByaXYtPnByb2Nlc3Mu
cHJlX2NiKQorICAgICAgICBkYXRhID0gcHJpdi0+cHJvY2Vzcy5wcmVfY2IocHJpdi0+cHJvY2Vz
cy5wcmVfZGF0YSwgcHJpdi0+c2VsZik7CisKKyAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19w
cm9jZXNzKHByaXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBpZiAoIWl0KQorICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nfc2luZ2xlKHBy
aXYpOworCisgICAgaWYgKHByaXYtPnByb2Nlc3MucG9zdF9jYikKKyAgICAgICAgcHJpdi0+cHJv
Y2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9kYXRhLCBkYXRhLCBwcml2LT5zZWxmKTsK
KworICAgIGlmICghcHJpdi0+cmVuZGVyLnF1ZXVlICYmICFwcml2LT5yZW5kZXIucHJlX3JlbmRl
cl9yZXF1ZXN0cykgeworICAgICAgICBwcml2LT5yZW5kZXIuaWRsZXIgPSBOVUxMOworICAgICAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vz
c19pZGxlcl9zdG9wKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAg
aWYgKCFwcml2LT5yZW5kZXIuaWRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGVjb3JlX2lk
bGVyX2RlbChwcml2LT5yZW5kZXIuaWRsZXIpOworICAgIHByaXYtPnJlbmRlci5pZGxlciA9IE5V
TEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9wcm9jZXNzX2lkbGVyX3N0YXJ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYp
Cit7CisgICAgaWYgKHByaXYtPnJlbmRlci5pZGxlcikKKyAgICAgICAgcmV0dXJuOworICAgIHBy
aXYtPnJlbmRlci5pZGxlciA9IGVjb3JlX2lkbGVyX2FkZCgKKyAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9jYiwgcHJpdik7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXF1ZXN0X2RlbChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtICppdCkKK3sKKyAgICBwcml2LT5yZW5kZXIucXVldWUgPSBlaW5hX2xpc3RfcmVtb3ZlX2xp
c3QocHJpdi0+cmVuZGVyLnF1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpdC0+dXBkYXRlLnByb2Nlc3MpOworICAgIGl0LT51cGRhdGUucHJvY2Vz
cyA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9yZXF1ZXN0X2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgaW50IG1fY29sLCBpbnQgbV9yb3csIGZs
b2F0IHpvb20pCit7CisgICAgaWYgKGl0LT51cGRhdGUucHJvY2VzcykKKyAgICAgICAgcmV0dXJu
OworCisgICAgaXQtPnVwZGF0ZS5jb2wgPSBtX2NvbDsKKyAgICBpdC0+dXBkYXRlLnJvdyA9IG1f
cm93OworICAgIGl0LT51cGRhdGUuem9vbSA9IHpvb207CisKKyAgICBwcml2LT5yZW5kZXIucXVl
dWUgPSBlaW5hX2xpc3RfYXBwZW5kKHByaXYtPnJlbmRlci5xdWV1ZSwgaXQpOworICAgIGl0LT51
cGRhdGUucHJvY2VzcyA9IGVpbmFfbGlzdF9sYXN0KHByaXYtPnJlbmRlci5xdWV1ZSk7CisKKyAg
ICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kKQorICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KHByaXYpOworfQorCitzdGF0aWMgRWluYV9C
b29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIGlmIChwcml2LT5yZW5kZXIuc3VzcGVuZCkK
KyAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0g
RUlOQV9UUlVFOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRs
ZXJfc3RvcChwcml2KTsKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0aWMgRWluYV9C
b29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCkK
KyAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0g
RUlOQV9GQUxTRTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVy
cyhwcml2KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVy
X3N0YXJ0KHByaXYpOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworLyoqCisgKiBSZXR1
cm5zIGEgcmVjdGFuZ2xlIHdob3NlIGNvb3JkaW5hdGVzIGluZGljYXRlIHdoaWNoIHRpbGVzIGFy
ZQorICogY3VycmVudGx5IGluc2lkZSB0aGUgdmlld3BvcnQuCisgKgorICogU3BlY2lmaWNhbGx5
LCB0aGUgcmV0dXJuZWQgcmVjdGFuZ2xlJ3MgY29vcmRpbmF0ZXMgaGF2ZSB0aGUKKyAqIGZvbGxv
d2luZyBtZWFuaW5nOgorICogIC0geDogQ29sdW1uIG51bWJlciBmb3IgdGhlIHRvcC1sZXZlbCB0
aWxlIGluc2lkZSB0aGUgdmlld3BvcnQuCisgKiAgLSB5OiBSb3cgbnVtYmVyIGZvciB0aGUgdG9w
LWxldmVsIHRpbGUgaW5zaWRlIHRoZSB2aWV3cG9ydC4KKyAqICAtIHc6IE51bWJlciBvZiB0aWxl
cyBob3Jpem9udGFsbHkgaW5zaWRlIHRoZSB2aWV3cG9ydC4KKyAqICAtIGg6IE51bWJlciBvZiB0
aWxlcyB2ZXJ0aWNhbGx5IGluc2lkZSB0aGUgdmlld3BvcnQuCisgKi8KK3N0YXRpYyBFaW5hX1Jl
Y3RhbmdsZSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlzaWJsZV90aWxlc19yZWN0KEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgIEVpbmFfUmVjdGFuZ2xlIHI7
CisKKyAgICAgY29uc3QgRXZhc19Db29yZCBveCA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueDsK
KyAgICAgY29uc3QgRXZhc19Db29yZCBveSA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueTsKKyAg
ICAgY29uc3QgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgICBjb25zdCBF
dmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisKKyAgICAgci54ID0gTUFYKDAsIG94
IC8gdHcpOworICAgICByLnkgPSBNQVgoMCwgb3kgLyB0aCk7CisgICAgIHIudyA9IE1JTihwcml2
LT5tb2RlbC5jdXIuY29scywKKyAgICAgICAgICAgICAgIGNlaWwoKGZsb2F0KShwcml2LT52aWV3
LncgKyAob3ggJSB0dykpIC8gdHcpKTsKKyAgICAgci5oID0gTUlOKHByaXYtPm1vZGVsLmN1ci5y
b3dzLAorICAgICAgICAgICAgICAgY2VpbCgoZmxvYXQpKHByaXYtPnZpZXcuaCArIChveSAlIHRo
KSkgLyB0aCkpOworCisgICAgIERCRygiUmV0dXJuaW5nICVkLCVkKyVkeCVkIiwgci54LCByLnks
IHIudywgci5oKTsKKworICAgICByZXR1cm4gcjsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9pc19pbnNpZGVfdmlld3BvcnQoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgaW50IGNvbCwgaW50IHJvdykKK3sKKyAgICBjb25zdCBF
aW5hX1JlY3RhbmdsZSByID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zpc2libGVfdGlsZXNf
cmVjdChwcml2KTsKKworICAgIHJldHVybiBlaW5hX3JlY3RhbmdsZV9jb29yZHNfaW5zaWRlKCZy
LCBjb2wsIHJvdyk7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3RpbGVfaXNfYWRqYWNlbnRfdG9fdmlld3BvcnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHJpdiwgaW50IGNvbCwgaW50IHJvdykKK3sKKyAgICBjb25zdCBFaW5hX1JlY3Rhbmds
ZSByID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zpc2libGVfdGlsZXNfcmVjdChwcml2KTsK
KworICAgIGlmIChyb3cgPT0gKHIueSAtIDEpIHx8IHJvdyA9PSAoci55ICsgci5oKSkKKyAgICAg
ICAgcmV0dXJuIChjb2wgPj0gKHIueCAtIDEpICYmIGNvbCA8PSAoci54ICsgci53KSk7CisKKyAg
ICBpZiAoY29sID09IChyLnggLSAxKSB8fCBjb2wgPT0gKHIueCArIHIudykpCisgICAgICAgIHJl
dHVybiAocm93ID49IChyLnkgLSAxKSAmJiByb3cgPD0gKHIueSArIHIuaCkpOworCisgICAgcmV0
dXJuIEVJTkFfRkFMU0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIGxvbmcgY29sLCBpbnQgcm93KQor
eworICAgIGludCBtX2NvbCA9IHByaXYtPm1vZGVsLmJhc2UuY29sICsgY29sOworICAgIGludCBt
X3JvdyA9IHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcm93OworICAgIGRvdWJsZSBsYXN0X3VzZWQg
PSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CisKKyAgICBpZiAobV9jb2wgPCAwIHx8IG1fcm93IDwg
MAorICAgICAgICB8fCBtX2NvbCA+PSBwcml2LT5tb2RlbC5jdXIuY29scyB8fCBtX3JvdyA+PSBw
cml2LT5tb2RlbC5jdXIucm93cykgeworCisgICAgICAgIGlmIChpdC0+dGlsZSkgeworICAgICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwg
bGFzdF91c2VkKTsKKyAgICAgICAgICAgIGlmIChpdC0+dXBkYXRlLnByb2Nlc3MpCisgICAgICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVxdWVzdF9kZWwocHJpdiwg
aXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgRXdrX1RpbGUgKnQ7CisgICAg
ICAgIGNvbnN0IGZsb2F0IHpvb20gPSBwcml2LT52aWV3LnRpbGUuem9vbTsKKworICAgICAgICBp
ZiAoaXQtPnVwZGF0ZS5wcm9jZXNzKSB7CisgICAgICAgICAgICBpZiAoaXQtPnVwZGF0ZS5yb3cg
PT0gbV9yb3cKKyAgICAgICAgICAgICAgICAmJiBpdC0+dXBkYXRlLmNvbCA9PSBtX2NvbAorICAg
ICAgICAgICAgICAgICYmIGl0LT51cGRhdGUuem9vbSA9PSB6b29tKQorICAgICAgICAgICAgICAg
IHJldHVybiBFSU5BX1RSVUU7CisKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3JlcXVlc3RfZGVsKHByaXYsIGl0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
dC0+cHJlX3JlbmRlcikgeworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3By
ZV9yZW5kZXJfcmVxdWVzdF9kZWwoCisgICAgICAgICAgICAgICAgcHJpdiwgaXQtPnByZV9yZW5k
ZXIpOworICAgICAgICAgICAgaXQtPnByZV9yZW5kZXIgPSBOVUxMOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGl0LT50aWxlKSB7CisgICAgICAgICAgICBFd2tfVGlsZSAqb2xkID0gaXQtPnRp
bGU7CisgICAgICAgICAgICBpZiAob2xkLT5yb3cgIT0gbV9yb3cgfHwgb2xkLT5jb2wgIT0gbV9j
b2wgfHwgb2xkLT56b29tICE9IHpvb20pIHsKKyAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF91c2VkKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaXQtPnVwZGF0ZS5wcm9jZXNzKQorICAgICAgICAgICAgICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXF1ZXN0X2RlbChwcml2LCBpdCk7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKG9sZC0+cm93ID09IG1fcm93ICYmIG9sZC0+Y29sID09IG1fY29s
CisgICAgICAgICAgICAgICAgICAgICAgICYmIG9sZC0+em9vbSA9PSB6b29tKQorICAgICAgICAg
ICAgICAgIGdvdG8gZW5kOworICAgICAgICB9CisKKyAgICAgICAgdCA9IGV3a190aWxlX21hdHJp
eF90aWxlX2V4YWN0X2dldAorICAgICAgICAgICAgKHByaXYtPm1vZGVsLm1hdHJpeCwgbV9jb2ws
IG1fcm93LCB6b29tKTsKKyAgICAgICAgaWYgKCF0KSB7CisgICAgICAgICAgICAvKiBOT1RFOiBp
dCBuZXZlciByZXR1cm5zIE5VTEwgaWYgaXQtPnRpbGUgd2FzIHNldCEgKi8KKyAgICAgICAgICAg
IGlmIChpdC0+dGlsZSkgeworICAgICAgICAgICAgICAgIENSSVRJQ0FMKCJpdC0+dGlsZT0lcCwg
YnV0IGl0IHNob3VsZCBiZSBOVUxMISIsIGl0LT50aWxlKTsKKyAgICAgICAgICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF91c2Vk
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogRG8gbm90IGFkZCBuZXcgcmVxdWVz
dHMgdG8gdGhlIHJlbmRlciBxdWV1ZSAqLworICAgICAgICAgICAgaWYgKCFwcml2LT5yZW5kZXIu
c3VzcGVuZCkgeworICAgICAgICAgICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3RpbGVfaXNfaW5zaWRlX3ZpZXdwb3J0KAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpdiwg
bV9jb2wsIG1fcm93KSkgeworICAgICAgICAgICAgICAgICAgICBEQkcoIiVkLCVkIGlzIG5vdCBp
bnNpZGUgdGhlIHZpZXdwb3J0IiwgbV9jb2wsIG1fcm93KTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2lzX2FkamFjZW50X3RvX3ZpZXdwb3J0
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYsIG1fY29sLCBtX3JvdykpCisgICAg
ICAgICAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9y
ZXF1ZXN0X2FkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LCBtX2NvbCwgbV9y
b3csIHpvb20sIGl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRV9SRU5ERVJfUFJJ
T1JJVFlfSElHSCk7CisgICAgICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQocHJpdik7CisKKyAgICAgICAgICAgICAgICAgICAg
Z290byBlbmQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdCA9IF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2LCBtX2NvbCwgbV9yb3csIHpvb20pOwor
ICAgICAgICAgICAgICAgIGlmICghdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVJTkFf
RkFMU0U7CisgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNz
b2NpYXRlKHByaXYsIHQsIGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0
ICE9IGl0LT50aWxlKSB7CisgICAgICAgICAgICBpZiAoIWl0LT51cGRhdGUucHJvY2Vzcykgewor
ICAgICAgICAgICAgICAgIGlmIChpdC0+dGlsZSkKKyAgICAgICAgICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LCBsYXN0X3Vz
ZWQpOworICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29j
aWF0ZShwcml2LCB0LCBpdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgZW5k
OgorCisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFf
VFJVRTsKK30KKworc3RhdGljIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKl9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2LCBsb25nIGNvbCwgaW50IHJvdykKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtICppdDsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHR3LCB0aDsKKworICAgIERCRygibz0lcCIs
IHByaXYtPnNlbGYpOworCisgICAgTUFMTE9DX09SX09PTV9SRVQoaXQsIHNpemVvZigqaXQpLCBO
VUxMKTsKKworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgdGggPSBwcml2LT52aWV3
LnRpbGUuaDsKKyAgICB4ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICsgcHJpdi0+dmlldy54
ICsgdHcgICpjb2w7CisgICAgeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIHByaXYtPnZp
ZXcueSArIHRoICAqcm93OworCisgICAgaXQtPnRpbGUgPSBOVUxMOworICAgIGl0LT51cGRhdGUu
cHJvY2VzcyA9IE5VTEw7CisgICAgaXQtPnNtb290aF9zY2FsZSA9IHByaXYtPnZpZXcudGlsZS56
b29tX3dlYWtfc21vb3RoX3NjYWxlOworICAgIGl0LT5wcmVfcmVuZGVyID0gTlVMTDsKKyAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCB4LCB5KTsKKyAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7CisgICAgaWYgKCFfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjb2wsIHJvdykpIHsKKyAg
ICAgICAgZnJlZShpdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVy
biBpdDsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVs
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0gKml0KQoreworICAgIGlmIChpdC0+dGlsZSkgeworICAgICAgICBkb3VibGUgbGFz
dF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOworICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0LCBsYXN0X3VzZWQpOworICAgIH0KKyAg
ICBpZiAoaXQtPnVwZGF0ZS5wcm9jZXNzKQorICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9yZXF1ZXN0X2RlbChwcml2LCBpdCk7CisgICAgaWYgKGl0LT5wcmVfcmVuZGVyKSB7
CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVs
KAorICAgICAgICAgICAgcHJpdiwgaXQtPnByZV9yZW5kZXIpOworICAgICAgICBpdC0+cHJlX3Jl
bmRlciA9IE5VTEw7CisgICAgfQorICAgIGZyZWUoaXQpOworfQorCitzdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9zbW9vdGhfc2NhbGVfc2V0KEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0gKml0LCBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlKQoreworICAgIGlmIChp
dC0+c21vb3RoX3NjYWxlID09IHNtb290aF9zY2FsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGl0LT50aWxlKQorICAgICAgICBldmFzX29iamVjdF9pbWFnZV9zbW9vdGhfc2NhbGVfc2V0
KGl0LT50aWxlLT5pbWFnZSwgc21vb3RoX3NjYWxlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnByaXYpCit7CisgICAgaWYgKHByaXYtPmNoYW5nZWQuYW55KQorICAgICAgICByZXR1
cm47CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2hhbmdlZChwcml2LT5zZWxmKTsKKyAgICBwcml2
LT5jaGFuZ2VkLmFueSA9IEVJTkFfVFJVRTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYsIEVpbmFfSW5saXN0ICoqcF9yb3csIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAg
ICBFaW5hX0lubGlzdCAqbjsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGlmICghY291bnQp
CisgICAgICAgIHJldHVybjsKKworICAgIG4gPSAoKnBfcm93KS0+bGFzdDsKKworICAgIGZvciAo
aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0OworICAgICAgICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQobiwgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CisgICAgICAgIG4gPSBuLT5wcmV2OworICAgICAg
ICAqcF9yb3cgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBfcm93LCBFSU5BX0lOTElTVF9HRVQoaXQp
KTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVsKHByaXYsIGl0KTsK
KyAgICB9Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zp
ZXdfY29sc19lbmRfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEVpbmFf
SW5saXN0ICoqcF9yb3csIHVuc2lnbmVkIGludCBiYXNlX2NvbCwgdW5zaWduZWQgaW50IGNvdW50
KQoreworICAgIHVuc2lnbmVkIGludCBpLCByID0gcF9yb3cgLSBwcml2LT52aWV3Lml0ZW1zOwor
CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGJhc2VfY29sKyspIHsKKyAgICAgICAg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisKKyAgICAgICAgaXQgPSBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQocHJpdiwgYmFzZV9jb2wsIHIpOworICAgICAgICBp
ZiAoIWl0KSB7CisgICAgICAgICAgICBDUklUSUNBTCgiZmFpbGVkIHRvIGFkZCBjb2x1bW4gJXUg
b2YgJXUgaW4gcm93ICV1LiIsIGksIGNvdW50LCByKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBwX3JvdywgaSk7CisgICAgICAg
ICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgICpwX3JvdyA9IGVp
bmFfaW5saXN0X2FwcGVuZCgqcF9yb3csIEVJTkFfSU5MSVNUX0dFVChpdCkpOworICAgIH0KKyAg
ICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdmlld19yb3dfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEVp
bmFfSW5saXN0ICpyb3cpCit7CisgICAgd2hpbGUgKHJvdykgeworICAgICAgICBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlO
RVJfR0VUKHJvdywgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CisgICAgICAgIHJvdyA9
IHJvdy0+bmV4dDsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVsKHBy
aXYsIGl0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYs
IEVpbmFfSW5saXN0ICoqc3RhcnQsIEVpbmFfSW5saXN0ICoqZW5kKQoreworICAgIGZvciAoOyBz
dGFydCA8IGVuZDsgc3RhcnQrKykgeworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19yb3dfZGVsKHByaXYsICpzdGFydCk7CisgICAgICAgICpzdGFydCA9IE5VTEw7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX2Fs
bF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFaW5hX0lu
bGlzdCAqKnN0YXJ0OworICAgIEVpbmFfSW5saXN0ICoqZW5kOworCisgICAgc3RhcnQgPSBwcml2
LT52aWV3Lml0ZW1zOworICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJv
d3M7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwocHJp
diwgc3RhcnQsIGVuZCk7CisKKyAgICBmcmVlKHByaXYtPnZpZXcuaXRlbXMpOworICAgIHByaXYt
PnZpZXcuaXRlbXMgPSBOVUxMOworICAgIHByaXYtPnZpZXcuY29scyA9IDA7CisgICAgcHJpdi0+
dmlldy5yb3dzID0gMDsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3JlbmRlcih2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFy
ZWEpCit7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiA9IGRhdGE7CisK
KyAgICBJTkYoIlRPRE8gJXAgKHZpc2libGU/ICVkKSBbJWx1LCVsdV0gJWQsJWQgKyAlZHglZCIs
CisgICAgICAgIHQsIHQtPnZpc2libGUsIHQtPmNvbCwgdC0+cm93LCBhcmVhLT54LCBhcmVhLT55
LCBhcmVhLT53LCBhcmVhLT5oKTsKKworICAgIGlmICghdC0+dmlzaWJsZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKHByaXYtPnZpZXcudGlsZS53ICE9IHQtPncgfHwgcHJpdi0+dmlldy50
aWxlLmggIT0gdC0+aCkKKyAgICAgICAgcmV0dXJuOyAvLyB0b2RvOiByZW1vdmUgbWUgbGF0ZXIs
IGRvbid0IGV2ZW4gZmxhZyBhcyBkaXJ0eSEKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHByaXYtPnJlbmRlci5jYik7CisgICAgaWYgKCFwcml2LT5yZW5kZXIuY2IocHJpdi0+cmVu
ZGVyLmRhdGEsIHQsIGFyZWEpKQorICAgICAgICByZXR1cm47CisKKyAgICBldmFzX29iamVjdF9p
bWFnZV9kYXRhX3VwZGF0ZV9hZGQodC0+aW1hZ2UsIGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncs
IGFyZWEtPmgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX21vZGVsX21hdHJpeF9jcmVhdGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgaWYgKHByaXYtPm1vZGVsLm1h
dHJpeCkgeworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX2FsbF9k
ZWwocHJpdik7CisKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5vZmZzZXQgPSBFSU5BX0ZBTFNFOwor
ICAgICAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7CisKKyAgICAgICAgZXdrX3Rp
bGVfbWF0cml4X2ZyZWUocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICB9CisKKyAgICBwcml2LT5t
b2RlbC5tYXRyaXggPSBld2tfdGlsZV9tYXRyaXhfbmV3CisgICAgICAgICh0dWMsIHByaXYtPm1v
ZGVsLmN1ci5jb2xzLCBwcml2LT5tb2RlbC5jdXIucm93cywgcHJpdi0+Y3NwYWNlLAorICAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlciwgcHJpdik7Cit9CisKK3N0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfZGVsKEV2YXNfT2JqZWN0
ICpvLCBFdmFzX09iamVjdCAqbWVtYmVyKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KG8sIHByaXYpOworICAgIGlmICghcHJpdi0+Y29udGVudHNfY2xpcHBlcikKKyAgICAgICAgcmV0
dXJuOworICAgIGV2YXNfb2JqZWN0X2NsaXBfdW5zZXQobWVtYmVyKTsKKyAgICBpZiAoIWV2YXNf
b2JqZWN0X2NsaXBlZXNfZ2V0KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpKQorICAgICAgICBldmFz
X29iamVjdF9oaWRlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOworfQorCitzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2FkZChFdmFzX09iamVjdCAqbywg
RXZhc19PYmplY3QgKm1lbWJlcikKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBw
cml2KTsKKyAgICBpZiAoIXByaXYtPmNvbnRlbnRzX2NsaXBwZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBldmFzX29iamVjdF9jbGlwX3NldChtZW1iZXIsIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIp
OworICAgIGlmIChldmFzX29iamVjdF92aXNpYmxlX2dldChvKSkKKyAgICAgICAgZXZhc19vYmpl
Y3Rfc2hvdyhwcml2LT5jb250ZW50c19jbGlwcGVyKTsKK30KKworI2lmZGVmIERFQlVHX01FTV9M
RUFLUworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21lbV9kYmcoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBzdGF0aWMgaW50IHJ1biA9IDA7
CisKKyAgICBydW4rKzsKKworICAgIHByaW50ZigiXG4tLS0gQkVHSU4gREVCVUcgVElMRUQgQkFD
S0lORyBTVE9SRSBNRU1PUlkgWyVkXSAtLVxuIgorICAgICAgICAgICAidD0lMC4yZiwgb2JqPSVw
LCBwcml2PSVwLCB2aWV3Lml0ZW1zPSVwLCBtYXRyaXg9JXBcbiIsCisgICAgICAgICAgIHJ1biwg
ZWNvcmVfbG9vcF90aW1lX2dldCgpLAorICAgICAgICAgICBwcml2LT5zZWxmLCBwcml2LCBwcml2
LT52aWV3Lml0ZW1zLCBwcml2LT5tb2RlbC5tYXRyaXgpOworCisgICAgZXdrX3RpbGVfbWF0cml4
X2RiZyhwcml2LT5tb2RlbC5tYXRyaXgpOworICAgIGV3a190aWxlX2FjY291bnRpbmdfZGJnKCk7
CisKKyAgICBwcmludGYoIi0tLSBFTkQgREVCVUcgVElMRUQgQkFDS0lORyBTVE9SRSBNRU1PUlkg
WyVkXSAtLVxuXG4iLCBydW4pOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9zaWdfdXNyKHZvaWQgKmRhdGEsIGludCB0eXBlLCB2b2lkICpldmVudCkKK3sK
KyAgICBFY29yZV9FdmVudF9TaWduYWxfVXNlciAqc2lnID0gKEVjb3JlX0V2ZW50X1NpZ25hbF9V
c2VyKilldmVudDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2ID0gKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqKWRhdGE7CisKKyAgICBpZiAoc2lnLT5udW1iZXIg
PT0gMikgeworICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKyAgICAgICAgdHVj
ID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsK
KyAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godHVjKTsKKyAgICB9CisK
KyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcocHJpdik7CisgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX21lbV9kYmcocHJpdik7CisgICAgcmV0dXJuIEVJTkFfVFJVRTsK
K30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRf
YWRkKEV2YXNfT2JqZWN0ICpvKQoreworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEg
KnByaXY7CisKKyAgICBEQkcoIm89JXAiLCBvKTsKKworICAgIENBTExPQ19PUl9PT01fUkVUKHBy
aXYsIHNpemVvZigqcHJpdikpOworCisgICAgcHJpdi0+c2VsZiA9IG87CisgICAgcHJpdi0+dmll
dy50aWxlLnpvb20gPSAxLjA7CisgICAgcHJpdi0+dmlldy50aWxlLncgPSBUSUxFX1c7CisgICAg
cHJpdi0+dmlldy50aWxlLmggPSBUSUxFX0g7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngg
PSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gMDsKKyAgICBwcml2LT52aWV3Lm9m
ZnNldC5vbGQueCA9IDA7CisgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSAwOworICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IC1USUxFX1c7CisgICAgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55ID0gLVRJTEVfSDsKKworICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gLTE7CisgICAg
cHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtMTsKKyAgICBwcml2LT5tb2RlbC5jdXIuY29scyA9IDE7
CisgICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MgPSAxOworICAgIHByaXYtPm1vZGVsLm9sZC5jb2xz
ID0gMDsKKyAgICBwcml2LT5tb2RlbC5vbGQucm93cyA9IDA7CisgICAgcHJpdi0+bW9kZWwud2lk
dGggPSAwOworICAgIHByaXYtPm1vZGVsLmhlaWdodCA9IDA7CisgICAgcHJpdi0+cmVuZGVyLnBy
b2Nlc3NfZW50aXJlX3F1ZXVlID0gRUlOQV9UUlVFOworICAgIHByaXYtPnJlbmRlci5zdXNwZW5k
ID0gRUlOQV9GQUxTRTsKKyAgICBwcml2LT5jc3BhY2UgPSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4
ODg7IC8vIFRPRE86IGRldGVjdCBpdC4KKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0
KG8sIHByaXYpOworICAgIF9wYXJlbnRfc2MuYWRkKG8pOworCisgICAgcHJpdi0+Y29udGVudHNf
Y2xpcHBlciA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoCisgICAgICAgIGV2YXNfb2JqZWN0
X2V2YXNfZ2V0KG8pKTsKKyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBw
ZXIsIDAsIDApOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVy
LAorICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwu
aGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9jb2xvcl9zZXQocHJpdi0+Y29udGVudHNfY2xpcHBl
ciwgMjU1LCAyNTUsIDI1NSwgMjU1KTsKKyAgICBldmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRl
bnRzX2NsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQocHJpdi0+Y29u
dGVudHNfY2xpcHBlciwgbyk7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxf
bWF0cml4X2NyZWF0ZShwcml2LCBOVUxMKTsKKyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJh
c2UuY2xpcHBlciwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmJhc2UuY2xp
cHBlciwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfY2xpcF9zZXQocHJpdi0+Y29udGVudHNfY2xp
cHBlciwgcHJpdi0+YmFzZS5jbGlwcGVyKTsKKworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAg
IHByaXYtPnNpZ191c3IgPSBlY29yZV9ldmVudF9oYW5kbGVyX2FkZAorICAgICAgICAoRUNPUkVf
RVZFTlRfU0lHTkFMX1VTRVIsIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zaWdfdXNyLCBwcml2
KTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21h
cnRfZGVsKEV2YXNfT2JqZWN0ICpvKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8s
IHByaXYpOworICAgIERCRygibz0lcCIsIG8pOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjOworCisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+
bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodHVj
KTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChwcml2KTsKKworICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2gocHJpdik7Cisg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKHByaXYp
OworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfYWxsX2RlbChwcml2KTsK
KworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9t
ZW1fZGJnKHByaXYpOworICAgIGlmIChwcml2LT5zaWdfdXNyKQorICAgICAgICBwcml2LT5zaWdf
dXNyID0gZWNvcmVfZXZlbnRfaGFuZGxlcl9kZWwocHJpdi0+c2lnX3Vzcik7CisjZW5kaWYKKwor
ICAgIGV3a190aWxlX21hdHJpeF9mcmVlKHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXZhc19v
YmplY3Rfc21hcnRfbWVtYmVyX2RlbChwcml2LT5jb250ZW50c19jbGlwcGVyKTsKKyAgICBldmFz
X29iamVjdF9kZWwocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CisKKyAgICBfcGFyZW50X3NjLmRl
bChvKTsKKworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIHByaW50ZigiXG5JTVBPUlRBTlQ6
IFRJTEVEIEJBQ0tJTkcgU1RPUkUgREVMRVRFRCAobWF5IGJlIHJlYWwgbGVha3MpXG4iKTsKKyAg
ICBld2tfdGlsZV9hY2NvdW50aW5nX2RiZygpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nv
b3JkIHgsIEV2YXNfQ29vcmQgeSkKK3sKKyAgICBEQkcoIm89JXAsIG5ldyBwb3M6ICVkeCVkIiwg
bywgeCwgeSk7CisKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKworICAg
IGlmIChwcml2LT5jaGFuZ2VkLnBvcykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHByaXYt
PnZpZXcueCA9PSB4ICYmIHByaXYtPnZpZXcueSA9PSB5KQorICAgICAgICByZXR1cm47CisKKyAg
ICBwcml2LT5jaGFuZ2VkLnBvcyA9IEVJTkFfVFJVRTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfY2hhbmdlZChwcml2KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBFdmFzX0Nv
b3JkIGgpCit7CisgICAgREJHKCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBvLCB3LCBoKTsKKwor
ICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisgICAgaWYgKHByaXYtPmNo
YW5nZWQuc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHByaXYtPnZpZXcudyA9PSB3
ICYmIHByaXYtPnZpZXcuaCA9PSBoKQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5jaGFu
Z2VkLnNpemUgPSBFSU5BX1RSVUU7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5n
ZWQocHJpdik7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNh
bGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29v
cmQgdywgRXZhc19Db29yZCBoLCBFdmFzX0Nvb3JkIHR3LCBFdmFzX0Nvb3JkIHRoKQoreworICAg
IGxvbmcgY29scywgcm93cywgb2xkX3Jvd3MsIG9sZF9jb2xzOworICAgIElORigibz0lcCwgbmV3
IHNpemU6ICVkeCVkIiwgcHJpdi0+c2VsZiwgdywgaCk7CisKKyAgICBjb2xzID0gMiArIChpbnQp
Y2VpbCgoZmxvYXQpdyAvIChmbG9hdCl0dyk7CisgICAgcm93cyA9IDIgKyAoaW50KWNlaWwoKGZs
b2F0KWggLyAoZmxvYXQpdGgpOworCisgICAgSU5GKCJvPSVwIG5ldyBncmlkIHNpemUgY29sczog
JWxkLCByb3dzOiAlbGQsIHdhcyAlbGQsICVsZCIsCisgICAgICAgIHByaXYtPnNlbGYsIGNvbHMs
IHJvd3MsIHByaXYtPnZpZXcuY29scywgcHJpdi0+dmlldy5yb3dzKTsKKworICAgIGlmIChwcml2
LT52aWV3LmNvbHMgPT0gY29scyAmJiBwcml2LT52aWV3LnJvd3MgPT0gcm93cykKKyAgICAgICAg
cmV0dXJuOworCisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVz
dF9yZW1vdmVfYXNzb2NpYXRlZChwcml2KTsKKworICAgIG9sZF9jb2xzID0gcHJpdi0+dmlldy5j
b2xzOworICAgIG9sZF9yb3dzID0gcHJpdi0+dmlldy5yb3dzOworCisgICAgaWYgKHJvd3MgPCBv
bGRfcm93cykgeworICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKKyAgICAgICAg
c3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsKKyAgICAgICAgZW5kID0gcHJpdi0+dmll
dy5pdGVtcyArIG9sZF9yb3dzOworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19yb3dzX3JhbmdlX2RlbChwcml2LCBzdGFydCwgZW5kKTsKKyAgICB9CisgICAgUkVBTExPQ19P
Ul9PT01fUkVUKHByaXYtPnZpZXcuaXRlbXMsIHNpemVvZihFaW5hX0lubGlzdCopICogKGludCly
b3dzKTsKKyAgICBwcml2LT52aWV3LnJvd3MgPSByb3dzOworICAgIHByaXYtPnZpZXcuY29scyA9
IGNvbHM7CisgICAgaWYgKHJvd3MgPiBvbGRfcm93cykgeworICAgICAgICBFaW5hX0lubGlzdCAq
KnN0YXJ0LCAqKmVuZDsKKyAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jv
d3M7CisgICAgICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOworICAgICAgICBmb3Ig
KDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspIHsKKyAgICAgICAgICAgIEVpbmFfQm9vbCByOworICAg
ICAgICAgICAgKnN0YXJ0ID0gTlVMTDsKKyAgICAgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQKKyAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQs
IDAsIGNvbHMpOworICAgICAgICAgICAgaWYgKCFyKSB7CisgICAgICAgICAgICAgICAgQ1JJVElD
QUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlbGQgY29sdW1ucyIsIGNvbHMpOworICAgICAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsCisgICAgICAg
ICAgICAgICAgICAgIChwcml2LCBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3MsIHN0YXJ0KTsK
KyAgICAgICAgICAgICAgICBwcml2LT52aWV3LnJvd3MgPSBvbGRfcm93czsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
Y29scyAhPSBvbGRfY29scykgeworICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsK
KyAgICAgICAgaW50IHRvZG8gPSBjb2xzIC0gb2xkX2NvbHM7CisgICAgICAgIHN0YXJ0ID0gcHJp
di0+dmlldy5pdGVtczsKKyAgICAgICAgZW5kID0gc3RhcnQgKyBNSU4ob2xkX3Jvd3MsIHJvd3Mp
OworICAgICAgICBpZiAodG9kbyA+IDApIHsKKyAgICAgICAgICAgIGZvciAoOyBzdGFydCA8IGVu
ZDsgc3RhcnQrKykgeworICAgICAgICAgICAgICAgIEVpbmFfQm9vbCByOworICAgICAgICAgICAg
ICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQKKyAgICAg
ICAgICAgICAgICAgICAgKHByaXYsIHN0YXJ0LCBvbGRfY29scywgdG9kbyk7CisgICAgICAgICAg
ICAgICAgaWYgKCFyKSB7CisgICAgICAgICAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8g
YWxsb2NhdGUgJWQgY29sdW1ucyEiLCB0b2RvKTsKKworICAgICAgICAgICAgICAgICAgICBmb3Ig
KHN0YXJ0LS07IHN0YXJ0ID49IHByaXYtPnZpZXcuaXRlbXM7IHN0YXJ0LS0pCisgICAgICAgICAg
ICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwo
cHJpdiwgc3RhcnQsIHRvZG8pOworICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IG9sZF9y
b3dzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMg
KyBvbGRfcm93czsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHByaXYtPnZpZXcuaXRl
bXMgKyByb3dzOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBz
dGFydCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBzdGFydCwgdG9kbyk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0b2RvIDwgMCkgeworICAgICAgICAg
ICAgdG9kbyA9IC10b2RvOworICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsr
KQorICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5k
X2RlbChwcml2LCBzdGFydCwgdG9kbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMocHJpdik7Cit9CisKK3N0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfc2l6ZShFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3sK
KyAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+YmFzZS5jbGlwcGVyLCB3LCBoKTsKKworICAg
IHByaXYtPnZpZXcudyA9IHc7CisgICAgcHJpdi0+dmlldy5oID0gaDsKKworICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKAorICAgICAgICBwcml2LCB3LCBoLCBw
cml2LT52aWV3LnRpbGUudywgcHJpdi0+dmlldy50aWxlLmgpOworfQorCisvLyBUT0RPOiByZW1v
dmUgbWUgbGF0ZXIuCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7Cisg
ICAgRWluYV9Jbmxpc3QgKipzdGFydCwgKiplbmQ7CisgICAgcHJpbnRmKCJ0aWxlcz0lMmxkLCUy
bGQgIG1vZGVsPSUybGQsJTJsZCBbJWR4JWRdIGJhc2U9JSszbGQsJSs0bGQgb2Zmc2V0PSUrNGQs
JSs0ZCBvbGQ9JSs0ZCwlKzRkIGJhc2U9JSszZCwlKzNkXG4iLAorICAgICAgICAgICBwcml2LT52
aWV3LmNvbHMsIHByaXYtPnZpZXcucm93cywKKyAgICAgICAgICAgcHJpdi0+bW9kZWwuY3VyLmNv
bHMsIHByaXYtPm1vZGVsLmN1ci5yb3dzLAorICAgICAgICAgICBwcml2LT5tb2RlbC53aWR0aCwg
cHJpdi0+bW9kZWwuaGVpZ2h0LAorICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCwgcHJp
di0+bW9kZWwuYmFzZS5yb3csCisgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54LCBw
cml2LT52aWV3Lm9mZnNldC5jdXIueSwKKyAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xk
LngsIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55LAorICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLngsIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSk7CisKKyAgICBzdGFydCA9IHByaXYt
PnZpZXcuaXRlbXM7CisgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93
czsKKyAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspIHsKKyAgICAgICAgY29uc3QgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9S
RUFDSCgqc3RhcnQsIGl0KSB7CisgICAgICAgICAgICBwcmludGYoIiAlKzRkLCUrNGQgIiwgaXQt
Pmdlb21ldHJ5LngsIGl0LT5nZW9tZXRyeS55KTsKKworICAgICAgICAgICAgaWYgKCFpdC0+dGls
ZSkKKyAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgICAgICAgIDsiKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoIiU4cCAlbHUsJWx1OyIsIGl0LT50aWxlLCBp
dC0+dGlsZS0+Y29sLCBpdC0+dGlsZS0+cm93KTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYo
IlxuIik7CisgICAgfQorICAgIHByaW50ZigiLS0tXG4iKTsKK30KKworLyoqCisgKiBAaW50ZXJu
YWwKKyAqIE1vdmUgdG9wIHJvdyBkb3duIGFzIGxhc3QuCisgKgorICogVGhlIGZpbmFsIHJlc3Vs
dCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgdG9wIHRoYXQKKyAqIHdl
bnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgYm90dG9tIGFuZCBmaWxsZWQgd2l0aCBuZXcgbW9k
ZWwgaXRlbXMuCisgKgorICogVGhpcyBpcyB3b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMgc21h
bGxlciB0aGFuIEBjCisgKiBwcml2LT52aWV3LnJvd3MsIGFmdGVyIHRoYXQgb25lIGlzIHJlZmls
bGluZyB0aGUgd2hvbGUgbWF0cml4IHNvIGl0CisgKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBmdWxs
IHJlZmlsbC4KKyAqCisgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBl
YXQgdGhlIHByb2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3dyYXBfdXAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICB1bnNpZ25l
ZCBpbnQgbGFzdF9yb3cgPSBwcml2LT52aWV3LnJvd3MgLSAxOworICAgIEV2YXNfQ29vcmQgdHcg
PSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxl
Lmg7CisgICAgRXZhc19Db29yZCBvZmZfeSA9IChwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgJSB0
aCkgLSB0aDsKKyAgICBFdmFzX0Nvb3JkIG95ID0geSArIChsYXN0X3JvdyAtIGNvdW50ICsgMSkg
KiB0aCArIG9mZl95OworICAgIEVpbmFfSW5saXN0ICoqaXRyX3N0YXJ0LCAqKml0cl9lbmQ7CisK
KyAgICBpdHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHJfc3Rh
cnQgKyBsYXN0X3JvdzsKKworICAgIGZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKyAgICAg
ICAgRWluYV9Jbmxpc3QgKippdHI7CisgICAgICAgIEVpbmFfSW5saXN0ICp0bXAgPSAqaXRyX3N0
YXJ0OworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAg
RXZhc19Db29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgICAgIGlu
dCBjID0gMDsKKworICAgICAgICBmb3IgKGl0ciA9IGl0cl9zdGFydDsgaXRyIDwgaXRyX2VuZDsg
aXRyKyspCisgICAgICAgICAgICAqaXRyID0gKihpdHIgKyAxKTsKKyAgICAgICAgKml0ciA9IHRt
cDsKKworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdysrOworICAgICAgICBFSU5BX0lOTElT
VF9GT1JFQUNIKHRtcCwgaXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX21vdmUoaXQsIG94LCBveSk7CisgICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMsIGxhc3Rf
cm93KTsKKyAgICAgICAgICAgIGMrKzsKKyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAg
ICB9CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2ZmX3k7Cit9CisKKy8qKgorICog
QGludGVybmFsCisgKiBNb3ZlIGJvdHRvbSByb3cgdXAgYXMgZmlyc3QuCisgKgorICogVGhlIGZp
bmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgYm90dG9t
IHRoYXQKKyAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgdG9wIGFuZCBmaWxsZWQgd2l0
aCBuZXcgbW9kZWwgaXRlbXMuCisgKgorICogVGhpcyBpcyB3b3J0aCBqdXN0IHdoZW4gQGEgY291
bnQgaXMgc21hbGxlciB0aGFuIEBjCisgKiBwcml2LT52aWV3LnJvd3MsIGFmdGVyIHRoYXQgb25l
IGlzIHJlZmlsbGluZyB0aGUgd2hvbGUgbWF0cml4IHNvIGl0CisgKiBpcyBiZXR0ZXIgdG8gdHJp
Z2dlciBmdWxsIHJlZmlsbC4KKyAqCisgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1l
cyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQorewor
ICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFzX0Nvb3JkIHRo
ID0gcHJpdi0+dmlldy50aWxlLmg7CisgICAgRXZhc19Db29yZCBvZmZfeSA9IChwcml2LT52aWV3
Lm9mZnNldC5iYXNlLnkgJSB0aCkgLSB0aDsKKyAgICBFdmFzX0Nvb3JkIG95ID0geSArIG9mZl95
ICsgKGNvdW50IC0gMSkgKiB0aDsKKyAgICBFaW5hX0lubGlzdCAqKml0cl9zdGFydCwgKippdHJf
ZW5kOworCisgICAgaXRyX3N0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93
cyAtIDE7CisgICAgaXRyX2VuZCA9IHByaXYtPnZpZXcuaXRlbXM7CisKKyAgICBmb3IgKDsgY291
bnQgPiAwOyBjb3VudC0tKSB7CisgICAgICAgIEVpbmFfSW5saXN0ICoqaXRyOworICAgICAgICBF
aW5hX0lubGlzdCAqdG1wID0gKml0cl9zdGFydDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS54OworICAgICAgICBpbnQgYyA9IDA7CisKKyAgICAgICAgZm9yIChpdHIgPSBp
dHJfc3RhcnQ7IGl0ciA+IGl0cl9lbmQ7IGl0ci0tKQorICAgICAgICAgICAgKml0ciA9ICooaXRy
IC0gMSk7CisgICAgICAgICppdHIgPSB0bXA7CisKKyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5y
b3ctLTsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCh0bXAsIGl0KSB7CisgICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAgICAg
ICAgICAgb3ggKz0gdHc7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9maWxsKHByaXYsIGl0LCBjLCAwKTsKKyAgICAgICAgICAgIGMrKzsKKyAgICAgICAgfQorICAg
ICAgICBveSAtPSB0aDsKKyAgICB9CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2Zm
X3k7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBNb3ZlIGxlZnQtbW9zdCAoZmlyc3QpIGNv
bHVtbiByaWdodCBhcyBsYXN0IChyaWdodC1tb3N0KS4KKyAqCisgKiBUaGUgZmluYWwgcmVzdWx0
IGlzIHZpc3VhbGx5IHRoZSBzYW1lLCBidXQgbG9naWNhbGx5IHRoZSBmaXJzdCBjb2wgdGhhdAor
ICogd2VudCBvdXQgb2Ygc2NyZWVuIGlzIG5vdyBhdCBsYXN0IGFuZCBmaWxsZWQgd2l0aCBuZXcg
bW9kZWwgaXRlbXMuCisgKgorICogVGhpcyBpcyB3b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMg
c21hbGxlciB0aGFuIEBjCisgKiBwcml2LT52aWV3LmNvbHMsIGFmdGVyIHRoYXQgb25lIGlzIHJl
ZmlsbGluZyB0aGUgd2hvbGUgbWF0cml4IHNvIGl0CisgKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBm
dWxsIHJlZmlsbC4KKyAqCisgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byBy
ZXBlYXQgdGhlIHByb2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X3dyYXBfbGVmdChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIHVu
c2lnbmVkIGludCByLCBsYXN0X2NvbCA9IHByaXYtPnZpZXcuY29scyAtIDE7CisgICAgRXZhc19D
b29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52
aWV3LnRpbGUuaDsKKyAgICBFdmFzX0Nvb3JkIG9mZl94ID0gKHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueCAlIHR3KSAtIHR3OworICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS55OworICAgIEVpbmFfSW5saXN0ICoqaXRyOworICAgIEVpbmFfSW5saXN0ICoqaXRy
X2VuZDsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRyX2VuZCA9IGl0ciAr
IHByaXYtPnZpZXcucm93czsKKyAgICByID0gMDsKKworICAgIHByaXYtPm1vZGVsLmJhc2UuY29s
ICs9IGNvdW50OworCisgICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrLCByKyspIHsKKyAg
ICAgICAgRXZhc19Db29yZCBveCA9IHggKyAobGFzdF9jb2wgLSBjb3VudCArIDEpICogdHcgKyBv
ZmZfeDsKKyAgICAgICAgdW5zaWduZWQgaW50IGksIGMgPSBsYXN0X2NvbCAtIGNvdW50ICsgMTsK
KworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYysrLCBveCArPSB0dykgewor
ICAgICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgICAg
ICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoKml0ciwgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSk7CisgICAgICAgICAgICAqaXRyID0gZWluYV9pbmxpc3RfZGVtb3RlKCppdHIs
ICppdHIpOworCisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3Zl
KGl0LCBveCwgb3kpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
ZmlsbChwcml2LCBpdCwgYywgcik7CisgICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7CisgICAg
fQorCisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7Cit9CisKKy8qKgorICog
QGludGVybmFsCisgKiBNb3ZlIHJpZ2h0LW1vc3QgKGxhc3QpIGNvbHVtbiBsZWZ0IGFzIGZpcnN0
IChsZWZ0LW1vc3QpLgorICoKKyAqIFRoZSBmaW5hbCByZXN1bHQgaXMgdmlzdWFsbHkgdGhlIHNh
bWUsIGJ1dCBsb2dpY2FsbHkgdGhlIGxhc3QgY29sIHRoYXQKKyAqIHdlbnQgb3V0IG9mIHNjcmVl
biBpcyBub3cgYXQgZmlyc3QgYW5kIGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVtcy4KKyAqCisg
KiBUaGlzIGlzIHdvcnRoIGp1c3Qgd2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRoYW4gQGMKKyAq
IHByaXYtPnZpZXcuY29scywgYWZ0ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRoZSB3aG9sZSBt
YXRyaXggc28gaXQKKyAqIGlzIGJldHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxsLgorICoKKyAq
IEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4K
KyAqLworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9yaWdo
dChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNf
Q29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIHVuc2lnbmVkIGludCByOworICAg
IEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFzX0Nvb3JkIHRoID0g
cHJpdi0+dmlldy50aWxlLmg7CisgICAgRXZhc19Db29yZCBvZmZfeCA9IChwcml2LT52aWV3Lm9m
ZnNldC5iYXNlLnggJSB0dykgLSB0dzsKKyAgICBFdmFzX0Nvb3JkIG95ID0geSArIHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueTsKKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworCisg
ICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmll
dy5yb3dzOworICAgIHIgPSAwOworCisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgLT0gY291bnQ7
CisKKyAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgeworICAgICAgICBFdmFz
X0Nvb3JkIG94ID0geCArIChjb3VudCAtIDEpICogdHcgKyBvZmZfeDsKKyAgICAgICAgdW5zaWdu
ZWQgaW50IGksIGMgPSBjb3VudCAtIDE7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50
OyBpKyssIGMtLSwgb3ggLT0gdHcpIHsKKyAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0gKml0OworICAgICAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VU
KCgqaXRyKS0+bGFzdCwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CisgICAgICAgICAg
ICAqaXRyID0gZWluYV9pbmxpc3RfcHJvbW90ZSgqaXRyLCAoKml0ciktPmxhc3QpOworCisgICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwor
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwg
Yywgcik7CisgICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorCisgICAgcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3JlZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgaW50IHN0ZXBfeCwgaW50IHN0ZXBfeSkK
K3sKKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworICAgIEV2YXNfQ29vcmQgYmFz
ZV9veCwgb3ksIHR3LCB0aDsKKyAgICB1bnNpZ25lZCBpbnQgcjsKKworICAgIGV2YXNfb2JqZWN0
X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsKKworICAgIHR3ID0gcHJpdi0+dmlldy50
aWxlLnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKworICAgIGJhc2Vfb3ggPSB4ICsg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworICAgIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueTsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRyX2VuZCA9IGl0
ciArIHByaXYtPnZpZXcucm93czsKKyAgICByID0gMDsKKworICAgIHByaXYtPm1vZGVsLmJhc2Uu
Y29sIC09IHN0ZXBfeDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyAtPSBzdGVwX3k7CisKKyAg
ICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgeworICAgICAgICBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7
CisgICAgICAgIHVuc2lnbmVkIGludCBjID0gMDsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFD
SCgqaXRyLCBpdCkgeworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
ZmlsbChwcml2LCBpdCwgYywgcik7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAgICAgICAgICAgYysrOworICAgICAgICAgICAg
b3ggKz0gdHc7CisgICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7
CisgICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFdmFzX0Nvb3JkIGJhc2Vf
b3gsIG95LCB0dywgdGg7CisKKyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBl
ciwgeCwgeSk7CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIHRoID0gcHJpdi0+
dmlldy50aWxlLmg7CisKKyAgICBiYXNlX294ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eDsKKyAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CisKKyAgICBpdHIgPSBw
cml2LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Cisg
ICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0gKml0OworICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKKyAg
ICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgeworICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAgIG94
ICs9IHR3OworICAgICAgICB9CisgICAgICAgIG95ICs9IHRoOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9y
Y2UoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFdmFzX0Nvb3Jk
IGR4ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueDsK
KyAgICBFdmFzX0Nvb3JkIGR5ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3
Lm9mZnNldC5vbGQueTsKKyAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBpbnQgc3RlcF95LCBz
dGVwX3g7CisKKyAgICBJTkYoIm89JXAsIG9mZnNldDogJSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCki
LAorICAgICAgICBwcml2LT5zZWxmLCBkeCwgZHksIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54LCBw
cml2LT52aWV3Lm9mZnNldC5jdXIueSk7CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53Owor
ICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisKKyAgICBzdGVwX3ggPSAoZHggKyBwcml2LT52
aWV3Lm9mZnNldC5iYXNlLnggKyB0dykgLyB0dzsKKyAgICBzdGVwX3kgPSAoZHkgKyBwcml2LT52
aWV3Lm9mZnNldC5iYXNlLnkgKyB0aCkgLyB0aDsKKworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9s
ZC54ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CisgICAgcHJpdi0+dmlldy5vZmZzZXQub2xk
LnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKKyAgICBldmFzX29iamVjdF9tb3ZlKAorICAg
ICAgICBwcml2LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5j
dXIueCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBw
cml2LT52aWV3LnkpOworCisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGR4IC0gc3Rl
cF94ICogdHc7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGR5IC0gc3RlcF95ICog
dGg7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwKKyAgICAgICAg
KHByaXYsIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7Cit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zm
c2V0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZh
c19Db29yZCB5KQoreworICAgIEV2YXNfQ29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eCAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54OworICAgIEV2YXNfQ29vcmQgZHkgPSBwcml2LT52
aWV3Lm9mZnNldC5jdXIueSAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55OworICAgIEV2YXNfQ29v
cmQgdHcsIHRoOworICAgIGludCBzdGVwX3ksIHN0ZXBfeDsKKworICAgIElORigibz0lcCwgb2Zm
c2V0OiAlKzRkLCAlKzRkICglKzRkLCAlKzRkKSIsCisgICAgICAgIHByaXYtPnNlbGYsIGR4LCBk
eSwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KTsKKwor
ICAgIGlmICghZHggJiYgIWR5KQorICAgICAgICByZXR1cm47CisKKyAgICB0dyA9IHByaXYtPnZp
ZXcudGlsZS53OworICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisKKyAgICBzdGVwX3ggPSAo
ZHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyB0dykgLyB0dzsKKyAgICBzdGVwX3kgPSAo
ZHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyB0aCkgLyB0aDsKKworICAgIHByaXYtPnZp
ZXcub2Zmc2V0Lm9sZC54ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CisgICAgcHJpdi0+dmll
dy5vZmZzZXQub2xkLnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKKyAgICBldmFzX29iamVj
dF9tb3ZlKAorICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICBwcml2LT52
aWV3Lm9mZnNldC5jdXIueCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgcHJpdi0+dmlldy5vZmZz
ZXQuY3VyLnkgKyBwcml2LT52aWV3LnkpOworCisgICAgaWYgKChzdGVwX3ggPCAwICYmIHN0ZXBf
eCA8PSAtcHJpdi0+dmlldy5jb2xzKQorICAgICAgICB8fCAoc3RlcF94ID4gMCAmJiBzdGVwX3gg
Pj0gcHJpdi0+dmlldy5jb2xzKQorICAgICAgICB8fCAoc3RlcF95IDwgMCAmJiBzdGVwX3kgPD0g
LXByaXYtPnZpZXcucm93cykKKyAgICAgICAgfHwgKHN0ZXBfeSA+IDAgJiYgc3RlcF95ID49IHBy
aXYtPnZpZXcucm93cykpIHsKKworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0g
ZHggLSBzdGVwX3ggKiB0dzsKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGR5
IC0gc3RlcF95ICogdGg7CisKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
cmVmaWxsCisgICAgICAgICAgICAocHJpdiwgcHJpdi0+dmlldy54LCBwcml2LT52aWV3LnksIHN0
ZXBfeCwgc3RlcF95KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueCArPSBkeDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHk7
CisKKyAgICBpZiAoc3RlcF95IDwgMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfd3JhcF91cChwcml2LCB4LCB5LCAtc3RlcF95KTsKKyAgICBlbHNlIGlmIChzdGVwX3kg
PiAwKQorICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2Rvd24ocHJp
diwgeCwgeSwgc3RlcF95KTsKKworICAgIGlmIChzdGVwX3ggPCAwKQorICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2xlZnQocHJpdiwgeCwgeSwgLXN0ZXBfeCk7Cisg
ICAgZWxzZSBpZiAoc3RlcF94ID4gMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfd3JhcF9yaWdodChwcml2LCB4LCB5LCBzdGVwX3gpOworCisgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KHByaXYsIHgsIHkpOworfQorCitzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3BvcyhFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3sK
KyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkocHJpdiwgeCwgeSk7
CisgICAgcHJpdi0+dmlldy54ID0geDsKKyAgICBwcml2LT52aWV3LnkgPSB5OworICAgIGV2YXNf
b2JqZWN0X21vdmUoCisgICAgICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJpdi0+dmlldy54LAorICAgICAgICBwcml2LT52aWV3
Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhICpwcml2KQoreworICAgIEVpbmFfSW5saXN0ICppdDsKKyAgICBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9JdGVtICppdGVtOworICAgIGludCBpLCBqOworCisgICAgZm9yIChpID0gMDsgaSA8
IHByaXYtPnZpZXcucm93czsgaSsrKSB7CisgICAgICAgIGl0ID0gcHJpdi0+dmlldy5pdGVtc1tp
XTsKKyAgICAgICAgaiA9IDA7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goaXQsIGl0ZW0p
CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0
ZW0sIGorKywgaSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0ICpvKQoreworICAgIEV2YXNfQ29vcmQg
eCwgeSwgdywgaDsKKworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChvLCAmeCwgJnksICZ3
LCAmaCk7CisgICAgREJHKCJvPSVwIGF0ICVkLCVkICsgJWR4JWQiLCBvLCB4LCB5LCB3LCBoKTsK
KworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisgICAgcHJpdi0+Y2hh
bmdlZC5hbnkgPSBFSU5BX0ZBTFNFOworCisgICAgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShwcml2
LT5tb2RlbC5tYXRyaXgpOworCisgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCAmJiBwcml2
LT5jaGFuZ2VkLm1vZGVsKSB7CisgICAgICAgIGxvbmcgY29scywgcm93czsKKworICAgICAgICBj
b2xzID0gcHJpdi0+bW9kZWwud2lkdGggLyBwcml2LT52aWV3LnRpbGUudyArIDE7CisgICAgICAg
IHJvd3MgPSBwcml2LT5tb2RlbC5oZWlnaHQgLyBwcml2LT52aWV3LnRpbGUuaCArIDE7CisKKyAg
ICAgICAgcHJpdi0+bW9kZWwub2xkLmNvbHMgPSBwcml2LT5tb2RlbC5jdXIuY29sczsKKyAgICAg
ICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSBwcml2LT5tb2RlbC5jdXIucm93czsKKyAgICAgICAg
cHJpdi0+bW9kZWwuY3VyLmNvbHMgPSBjb2xzOworICAgICAgICBwcml2LT5tb2RlbC5jdXIucm93
cyA9IHJvd3M7CisgICAgICAgIGlmIChwcml2LT5tb2RlbC5vbGQuY29scyA+IGNvbHMpCisgICAg
ICAgICAgICBjb2xzID0gcHJpdi0+bW9kZWwub2xkLmNvbHM7CisgICAgICAgIGlmIChwcml2LT5t
b2RlbC5vbGQucm93cyA+IHJvd3MpCisgICAgICAgICAgICByb3dzID0gcHJpdi0+bW9kZWwub2xk
LnJvd3M7CisgICAgICAgIGV3a190aWxlX21hdHJpeF9yZXNpemUocHJpdi0+bW9kZWwubWF0cml4
LCBjb2xzLCByb3dzKTsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+Y2hhbmdlZC5wb3MgJiYgKHBy
aXYtPnZpZXcueCAhPSB4IHx8IHByaXYtPnZpZXcueSAhPSB5KSkgeworICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3Bvcyhwcml2LCB4LCB5KTsKKyAgICAg
ICAgcHJpdi0+Y2hhbmdlZC5wb3MgPSBFSU5BX0ZBTFNFOworICAgIH0gZWxzZSBpZiAocHJpdi0+
Y2hhbmdlZC5vZmZzZXQpIHsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0
X2NhbGN1bGF0ZV9vZmZzZXQocHJpdiwgeCwgeSk7CisgICAgICAgIHByaXYtPmNoYW5nZWQub2Zm
c2V0ID0gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+Y2hhbmdlZC5zaXplKSB7
CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfc2l6ZShw
cml2LCB3LCBoKTsKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9GQUxTRTsKKyAg
ICB9CisKKyAgICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kICYmIHByaXYtPmNoYW5nZWQubW9k
ZWwpIHsKKyAgICAgICAgRWluYV9SZWN0YW5nbGUgcmVjdDsKKyAgICAgICAgcmVjdC54ID0gMDsK
KyAgICAgICAgcmVjdC55ID0gMDsKKyAgICAgICAgcmVjdC53ID0gcHJpdi0+bW9kZWwud2lkdGg7
CisgICAgICAgIHJlY3QuaCA9IHByaXYtPm1vZGVsLmhlaWdodDsKKyAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKHByaXYpOworICAgICAgICBld2tfdGlsZV9t
YXRyaXhfcmVzaXplKHByaXYtPm1vZGVsLm1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJp
di0+bW9kZWwuY3VyLnJvd3MpOworICAgICAgICBwcml2LT5jaGFuZ2VkLm1vZGVsID0gRUlOQV9G
QUxTRTsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9k
ZWwuaGVpZ2h0KTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1
bGF0ZV9vZmZzZXRfZm9yY2UocHJpdik7CisKKyAgICAgICAgLyogTWFrZSBzdXJlIHdlIGRvIG5v
dCBtaXNzIGFueSBpbXBvcnRhbnQgcmVwYWludCBieQorICAgICAgICAgKiByZXBhaW50aW5nIHRo
ZSB3aG9sZSB2aWV3cG9ydCAqLworICAgICAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSByID0KKyAg
ICAgICAgICAgIHsgMCwgMCwgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCB9
OworICAgICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKHByaXYtPm1vZGVsLm1hdHJpeCwgJnIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLnpvb20pOwor
ICAgIH0KKworICAgIGV3a190aWxlX21hdHJpeF90aGF3KHByaXYtPm1vZGVsLm1hdHJpeCk7CisK
KyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOworCisg
ICAgaWYgKHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA+PSAwCisgICAgICAgIHx8IHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueCA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS53CisgICAgICAgIHx8IHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueSA+PSAwCisgICAgICAgIHx8IHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5oKQorICAgICAgICBFUlIoImluY29ycmVj
dCBiYXNlIG9mZnNldCAlKzRkLCUrNGQsIHRpbGU9JWR4JWQsIGN1cj0lKzRkLCUrNGRcbiIsCisg
ICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngsIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueSwKKyAgICAgICAgICAgIHByaXYtPnZpZXcudGlsZS53LCBwcml2LT52aWV3LnRpbGUuaCwK
KyAgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5j
dXIueSk7CisKK30KKworRXZhc19PYmplY3QgKmV3a190aWxlZF9iYWNraW5nX3N0b3JlX2FkZChF
dmFzICplKQoreworICAgIHN0YXRpYyBFdmFzX1NtYXJ0ICpzbWFydCA9IE5VTEw7CisKKyAgICBp
ZiAoX2V3a190aWxlZF9sb2dfZG9tIDwgMCkKKyAgICAgICAgX2V3a190aWxlZF9sb2dfZG9tID0g
ZWluYV9sb2dfZG9tYWluX3JlZ2lzdGVyKCJFd2tfVGlsZWRfQmFja2luZ19TdG9yZSIsIE5VTEwp
OworCisgICAgaWYgKCFzbWFydCkgeworICAgICAgICBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBz
YyA9CisgICAgICAgICAgICBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKCJFd2tf
VGlsZWRfQmFja2luZ19TdG9yZSIpOworCisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NsaXBw
ZWRfc21hcnRfc2V0KCZzYyk7CisgICAgICAgIF9wYXJlbnRfc2MgPSBzYzsKKworICAgICAgICBz
Yy5hZGQgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkOworICAgICAgICBzYy5k
ZWwgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsOworICAgICAgICBzYy5yZXNp
emUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfcmVzaXplOworICAgICAgICBzYy5t
b3ZlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21vdmU7CisgICAgICAgIHNjLmNh
bGN1bGF0ZSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGU7CisgICAg
ICAgIHNjLm1lbWJlcl9hZGQgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVy
X2FkZDsKKyAgICAgICAgc2MubWVtYmVyX2RlbCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9tZW1iZXJfZGVsOworCisgICAgICAgIHNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXco
JnNjKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRfYWRkKGUsIHNtYXJ0
KTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXJfY2Jfc2V0KEV2YXNf
T2JqZWN0ICpvLCBFaW5hX0Jvb2wgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlICphcmVhKSwgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihjYik7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywg
cHJpdik7CisgICAgcHJpdi0+cmVuZGVyLmNiID0gY2I7CisgICAgcHJpdi0+cmVuZGVyLmRhdGEg
PSAodm9pZCopZGF0YTsKK30KKworRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCit7
CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgTlVMTCk7CisgICAgcmV0dXJu
IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Cit9
CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfc2V0KEV2
YXNfT2JqZWN0ICpvLCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKworICAgIGlmIChld2tfdGlsZV9tYXRyaXhfdW51
c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpID09IHR1YykKKyAgICAgICAgcmV0dXJu
OworCisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUocHJp
diwgdHVjKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3sKKyAgICAvKiBUT0RPOiBj
aGVjayBvZmZzZXQgZ28gb3V0IG9mIGJvdW5kcywgY2xhbXAgKi8KKyAgICBpZiAocHJpdi0+cmVu
ZGVyLmRpc2FibGVkKQorICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKworICAgIHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci54ID0geDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSA9IHk7CisK
KyAgICBwcml2LT5jaGFuZ2VkLm9mZnNldCA9IEVJTkFfVFJVRTsKKyAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisK
K0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0
KEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3sKKyAgICBEQkco
Im89JXAsIHg9JWQsIHk9JWQiLCBvLCB4LCB5KTsKKworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlmICh4ID09IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54ICYmIHkgPT0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpCisgICAgICAgIHJldHVybiBF
SU5BX1RSVUU7CisKKyAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9m
dWxsX29mZnNldF9zZXRfaW50ZXJuYWwocHJpdiwgeCwgeSk7Cit9CisKK0VpbmFfQm9vbCBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfYWRkKEV2YXNfT2JqZWN0ICpv
LCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5KQoreworICAgIERCRygibz0lcCwgZHg9JWQs
IGR5PSVkIiwgbywgZHgsIGR5KTsKKworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHBy
aXYsIEVJTkFfRkFMU0UpOworICAgIGlmICghZHggJiYgIWR5KQorICAgICAgICByZXR1cm4gRUlO
QV9UUlVFOworCisgICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVs
bF9vZmZzZXRfc2V0X2ludGVybmFsCisgICAgICAgIChwcml2LCBwcml2LT52aWV3Lm9mZnNldC5j
dXIueCArIGR4LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIGR5KTsKK30KKworc3RhdGljIEVp
bmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJuYWwoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgZmxvYXQgKnpvb20sIEV2YXNfQ29vcmQgY3gs
IEV2YXNfQ29vcmQgY3ksIEV2YXNfQ29vcmQgKm9mZngsIEV2YXNfQ29vcmQgKm9mZnkpCit7Cisg
ICAgKm9mZnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICAqb2ZmeSA9IHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55OworCisgICAgaWYgKGZhYnNmKHByaXYtPnZpZXcudGlsZS56b29tIC0g
Knpvb20pIDwgWk9PTV9TVEVQX01JTikgeworICAgICAgICBEQkcoImlnbm9yZWQgYXMgem9vbSBk
aWZmZXJlbmNlIGlzIDwgJWY6ICVmIiwKKyAgICAgICAgICAgIChkb3VibGUpWk9PTV9TVEVQX01J
TiwgZmFic2YocHJpdi0+dmlldy50aWxlLnpvb20gLSAqem9vbSkpOworICAgICAgICByZXR1cm4g
RUlOQV9UUlVFOworICAgIH0KKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVu
ZGVyX3JlcXVlc3RfZmx1c2gocHJpdik7CisgICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgdHcg
PSBUSUxFX1NJWkVfQVRfWk9PTShUSUxFX1csICp6b29tKTsKKyAgICB0dyA9ICh0dyA+PiAxKSA8
PCAxOworICAgICp6b29tID0gVElMRV9XX1pPT01fQVRfU0laRSh0dyk7CisgICAgLyogV0FSTklO
RzogYXNzdW1lIHJldmVyc2Ugem9vbSBpcyB0aGUgc2FtZSBmb3IgYm90aCBheGlzICovCisgICAg
dGggPSBUSUxFX1NJWkVfQVRfWk9PTShUSUxFX0gsICp6b29tKTsKKworICAgIGZsb2F0IHNjYWxl
ID0gKnpvb20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKKworICAgIHByaXYtPnZpZXcudGlsZS56
b29tID0gKnpvb207CisgICAgLy8gdG9kbzogY2hlY2sgY3ggWzAsIHddLi4uCisgICAgcHJpdi0+
dmlldy5vZmZzZXQuem9vbV9jZW50ZXIueCA9IGN4OworICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpv
b21fY2VudGVyLnkgPSBjeTsKKworICAgIHByaXYtPnZpZXcudGlsZS53ID0gdHc7CisgICAgcHJp
di0+dmlldy50aWxlLmggPSB0aDsKKworICAgIGlmICghcHJpdi0+dmlldy53IHx8ICFwcml2LT52
aWV3LmgpIHsKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gLXR3OworICAgICAg
ICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAtdGg7CisgICAgICAgIHJldHVybiBFSU5BX1RS
VUU7CisgICAgfQorICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7CisgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisKKyAgICBFdmFzX0Nvb3JkIG5ld194ID0gY3gg
KyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBjeCkgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3Jk
IG5ld195ID0gY3kgKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBjeSkgKiBzY2FsZTsKKyAg
ICBFdmFzX0Nvb3JkIGJ4ID0gY3ggKyAocHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IC0gY3gpICog
c2NhbGU7CisgICAgRXZhc19Db29yZCBieSA9IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eSAtIGN5KSAqIHNjYWxlOworCisgICAgRXZhc19Db29yZCBtb2RlbF93aWR0aCA9IHByaXYtPm1v
ZGVsLndpZHRoICogc2NhbGU7CisgICAgRXZhc19Db29yZCBtb2RlbF9oZWlnaHQgPSBwcml2LT5t
b2RlbC5oZWlnaHQgKiBzY2FsZTsKKworICAgIGlmIChtb2RlbF93aWR0aCA8IHByaXYtPnZpZXcu
dyB8fCBuZXdfeCA+PSAwKQorICAgICAgICBuZXdfeCA9IDA7CisgICAgZWxzZSBpZiAoLW5ld194
ICsgcHJpdi0+dmlldy53ID49IG1vZGVsX3dpZHRoKQorICAgICAgICBuZXdfeCA9IC1tb2RlbF93
aWR0aCArIHByaXYtPnZpZXcudzsKKworICAgIGlmIChtb2RlbF9oZWlnaHQgPCBwcml2LT52aWV3
LmggfHwgbmV3X3kgPj0gMCkKKyAgICAgICAgbmV3X3kgPSAwOworICAgIGVsc2UgaWYgKC1uZXdf
eSArIHByaXYtPnZpZXcuaCA+PSBtb2RlbF9oZWlnaHQpCisgICAgICAgIG5ld195ID0gLW1vZGVs
X2hlaWdodCArIHByaXYtPnZpZXcuaDsKKworICAgIGJ4ID0gbmV3X3ggJSB0dyAtIHR3OworICAg
IHByaXYtPm1vZGVsLmJhc2UuY29sID0gLSBuZXdfeCAvIHR3IC0gMTsKKyAgICBieSA9IG5ld195
ICUgdGggLSB0aDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IC0gbmV3X3kgLyB0aCAtIDE7
CisKKyAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7CisgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eCA9IG5ld194OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gbmV3X3k7CisgICAgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54ID0gYng7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55
ID0gYnk7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54OworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnk7CisgICAgKm9mZnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICAqb2ZmeSA9
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OworCisgICAgZXZhc19vYmplY3RfbW92ZSgKKyAgICAg
ICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICAgICAgbmV3X3ggKyBwcml2LT52aWV3Lngs
CisgICAgICAgIG5ld195ICsgcHJpdi0+dmlldy55KTsKKworICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKKworICAgIEV2YXNfQ29vcmQgb3kgPSBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7CisgICAgRXZhc19Db29yZCBiYXNl
X294ID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworCisgICAgaXRy
ID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dz
OworCisgICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7CisgICAgICAgIEV2YXNfQ29v
cmQgb3ggPSBiYXNlX294OworICAgICAgICBFaW5hX0lubGlzdCAqbHN0ID0gKml0cjsKKworICAg
ICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7CisgICAgICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7CisgICAgICAgICAg
ICBveCArPSB0dzsKKyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gRUlOQV9UUlVFOworfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
em9vbV9zZXQoRXZhc19PYmplY3QgKm8sIGZsb2F0ICp6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFz
X0Nvb3JkIGN5LCBFdmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5KQoreworICAgIERC
Rygibz0lcCwgem9vbT0lZiIsIG8sIChkb3VibGUpKnpvb20pOworCisgICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisKKyAgICByZXR1cm4gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKHByaXYsIHpvb20sIGN4LCBjeSwgb2Zm
eCwgb2ZmeSk7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dl
YWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nv
b3JkIGN5KQoreworICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChkb3VibGUpem9vbSk7Cisg
ICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYg
KCFwcml2LT52aWV3LncgfHwgIXByaXYtPnZpZXcuaCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFM
U0U7CisgICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtICppdDsKKyAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBFaW5hX0Jv
b2wgcmVjYWxjID0gRUlOQV9GQUxTRTsKKworICAgIHR3ID0gVElMRV9TSVpFX0FUX1pPT00oVElM
RV9XLCB6b29tKTsKKyAgICB6b29tID0gVElMRV9XX1pPT01fQVRfU0laRSh0dyk7CisgICAgLyog
V0FSTklORzogYXNzdW1lIHJldmVyc2Ugem9vbSBpcyB0aGUgc2FtZSBmb3IgYm90aCBheGlzICov
CisgICAgdGggPSBUSUxFX1NJWkVfQVRfWk9PTShUSUxFX0gsIHpvb20pOworCisgICAgZmxvYXQg
c2NhbGUgPSB6b29tIC8gcHJpdi0+dmlldy50aWxlLnpvb207CisKKyAgICBFdmFzX0Nvb3JkIG1v
ZGVsX3dpZHRoID0gcHJpdi0+bW9kZWwud2lkdGggKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1v
ZGVsX2hlaWdodCA9IHByaXYtPm1vZGVsLmhlaWdodCAqIHNjYWxlOworCisgICAgZXZhc19vYmpl
Y3RfcmVzaXplKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgICAgICAgICAgICAgICAg
IG1vZGVsX3dpZHRoLCBtb2RlbF9oZWlnaHQpOworCisgICAgaW50IHZyb3dzID0gY2VpbCgoZmxv
YXQpcHJpdi0+dmlldy5oIC8gKGZsb2F0KXRoKSArIDI7CisgICAgaW50IHZjb2xzID0gY2VpbCgo
ZmxvYXQpcHJpdi0+dmlldy53IC8gKGZsb2F0KXR3KSArIDI7CisgICAgRXZhc19Db29yZCBuZXdf
eCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3gpICogc2NhbGU7CisgICAgRXZh
c19Db29yZCBuZXdfeSA9IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3kpICogc2Nh
bGU7CisgICAgRXZhc19Db29yZCBieCA9IG5ld194ICUgdHcgLSB0dzsKKyAgICBFdmFzX0Nvb3Jk
IGJ5ID0gbmV3X3kgJSB0aCAtIHRoOworICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9yb3cgPSAtbmV3
X3kgLyB0aCAtIDE7CisgICAgdW5zaWduZWQgbG9uZyBiYXNlX2NvbCA9IC1uZXdfeCAvIHR3IC0g
MTsKKworICAgIGlmIChiYXNlX3JvdyAhPSBwcml2LT5tb2RlbC5iYXNlLnJvdyB8fCBiYXNlX2Nv
bCAhPSBwcml2LT5tb2RlbC5iYXNlLmNvbCkgeworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJv
dyA9IGJhc2Vfcm93OworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IGJhc2VfY29sOwor
ICAgICAgICByZWNhbGMgPSBFSU5BX1RSVUU7CisgICAgfQorCisgICAgaWYgKHZyb3dzID4gcHJp
di0+dmlldy5yb3dzIHx8IHZjb2xzID4gcHJpdi0+dmlldy5jb2xzKQorICAgICAgICByZWNhbGMg
PSBFSU5BX1RSVUU7CisKKyAgICBpZiAocmVjYWxjKSB7CisgICAgICAgIEV2YXNfQ29vcmQgdywg
aDsKKyAgICAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sIE5VTEwsIE5VTEwsICZ3LCAm
aCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKHBy
aXYsIHcsIGgsIHR3LCB0aCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxs
X3JlbmRlcmVycyhwcml2KTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0
ZXNfcHJvY2Vzcyhwcml2KTsKKyAgICB9CisKKyAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBieCAr
IHByaXYtPnZpZXcueDsKKyAgICBFdmFzX0Nvb3JkIG95ID0gYnkgKyBwcml2LT52aWV3Lnk7CisK
KyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgICAg
ICAgICAgICAgICBuZXdfeCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgICAgICAgICAgICAgIG5l
d195ICsgcHJpdi0+dmlldy55KTsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAg
aXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKKworICAgIGZvciAoOyBpdHIgPCBpdHJf
ZW5kOyBpdHIrKykgeworICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKKyAgICAgICAg
RWluYV9Jbmxpc3QgKmxzdCA9ICppdHI7CisKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChs
c3QsIGl0KSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3Zl
KGl0LCBveCwgb3kpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
cmVzaXplKGl0LCB0dywgdGgpOworICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgICAgIH0KKyAg
ICAgICAgb3kgKz0gdGg7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKwordm9p
ZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhFdmFzX09iamVjdCAqbywgRXZh
c19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4o
bywgcHJpdik7CisgICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICBFdmFzX0Nvb3JkIG5ld194ID0gcHJpdi0+
dmlldy5vZmZzZXQuY3VyLng7CisgICAgRXZhc19Db29yZCBuZXdfeSA9IHByaXYtPnZpZXcub2Zm
c2V0LmN1ci55OworICAgIEV2YXNfQ29vcmQgYnggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7
CisgICAgRXZhc19Db29yZCBieSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKKyAgICBFdmFz
X0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgRXZhc19Db29yZCB0aCA9IHByaXYt
PnZpZXcudGlsZS5oOworCisgICAgaWYgKC1uZXdfeCA+IHcpIHsKKyAgICAgICAgbmV3X3ggPSAt
dzsKKyAgICAgICAgYnggPSBuZXdfeCAlIHR3IC0gdHc7CisgICAgICAgIHByaXYtPm1vZGVsLmJh
c2UuY29sID0gLW5ld194IC8gdHcgLSAxOworICAgIH0KKworICAgIGlmICgtbmV3X3kgPiBoKSB7
CisgICAgICAgIG5ld195ID0gLWg7CisgICAgICAgIGJ5ID0gbmV3X3kgJSB0aCAtIHRoOworICAg
ICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IC1uZXdfeSAvIHRoIC0gMTsKKyAgICB9CisKKyAg
ICBpZiAoYnggPj0gMCB8fCBieCA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS53KSB7CisgICAgICAg
IGJ4ID0gbmV3X3ggJSB0dyAtIHR3OworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1u
ZXdfeCAvIHR3IC0gMTsKKyAgICB9CisKKyAgICBpZiAoYnkgPj0gMCB8fCBieSA8PSAtMiAqIHBy
aXYtPnZpZXcudGlsZS5oKSB7CisgICAgICAgIGJ5ID0gbmV3X3kgJSB0aCAtIHRoOworICAgICAg
ICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IC1uZXdfeSAvIHRoIC0gMTsKKyAgICB9CisKKyAgICBw
cml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55ID0gbmV3X3k7CisgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBuZXdfeDsKKyAgICBw
cml2LT52aWV3Lm9mZnNldC5vbGQueSA9IG5ld195OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueCA9IGJ4OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IGJ5OworICAgIGV2YXNf
b2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICAgICAgICAgICAgICAgICAg
IG5ld194ICsgcHJpdi0+dmlldy54LAorICAgICAgICAgICAgICAgICAgICAgbmV3X3kgKyBwcml2
LT52aWV3LnkpOworCisgICAgRXZhc19Db29yZCBveSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eSArIHByaXYtPnZpZXcueTsKKyAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBwcml2LT52aWV3Lngg
KyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisKKyAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1z
OworICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisKKyAgICBmb3IgKDsgaXRy
IDwgaXRyX2VuZDsgaXRyKyspIHsKKyAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Cisg
ICAgICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOworCisgICAgICAgIEVJTkFfSU5MSVNUX0ZP
UkVBQ0gobHN0LCBpdCkgeworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKKyAgICAgICAgICAgIG94ICs9IHR3OworICAgICAg
ICB9CisgICAgICAgIG95ICs9IHRoOworICAgIH0KK30KKwordm9pZCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9C
b29sIHNtb290aF9zY2FsZSkKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2
KTsKKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworCisgICAgaXRyID0gcHJpdi0+
dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOworICAgIHBy
aXYtPnZpZXcudGlsZS56b29tX3dlYWtfc21vb3RoX3NjYWxlID0gc21vb3RoX3NjYWxlOworCisg
ICAgZm9yICg7IGl0cjwgaXRyX2VuZDsgaXRyKyspIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKml0ciwgaXQp
CisgICAgICAgICAgICBpZiAoaXQtPnRpbGUpCisgICAgICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldAorICAgICAgICAgICAgICAgICAgICAo
aXQsIHNtb290aF9zY2FsZSk7CisgICAgfQorfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdXBkYXRlKEV2YXNfT2JqZWN0ICpvLCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBk
YXRlKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0Up
OworCisgICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuIEVJTkFf
RkFMU0U7CisKKyAgICByZXR1cm4gZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShwcml2LT5tb2RlbC5t
YXRyaXgsIHVwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT52
aWV3LnRpbGUuem9vbSk7Cit9CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRl
c19wcm9jZXNzX3ByZV9zZXQoRXZhc19PYmplY3QgKm8sIHZvaWQgKigqY2IpKHZvaWQgKmRhdGEs
IEV2YXNfT2JqZWN0ICpvKSwgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKyAgICBQUklWX0RBVEFfR0VU
X09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBwcml2LT5wcm9jZXNzLnByZV9jYiA9IGNiOworICAg
IHByaXYtPnByb2Nlc3MucHJlX2RhdGEgPSAodm9pZCopZGF0YTsKK30KKwordm9pZCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcG9zdF9zZXQoRXZhc19PYmplY3QgKm8s
IHZvaWQgKigqY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnByZV9kYXRhLCBFdmFzX09iamVjdCAqbyks
IGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJp
dik7CisgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiID0gY2I7CisgICAgcHJpdi0+cHJvY2Vzcy5w
b3N0X2RhdGEgPSAodm9pZCopZGF0YTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV91cGRhdGVzX3Byb2Nlc3MoRXZhc19PYmplY3QgKm8pCit7CisgICAgUFJJVl9EQVRBX0dFVF9P
Ul9SRVRVUk4obywgcHJpdik7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNf
cHJvY2Vzcyhwcml2KTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVz
X2NsZWFyKEV2YXNfT2JqZWN0ICpvKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8s
IHByaXYpOworCisgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIocHJpdi0+bW9kZWwu
bWF0cml4KTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jb250ZW50c19yZXNp
emUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQor
eworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisgICAgaWYgKHdpZHRo
ID09IHByaXYtPm1vZGVsLndpZHRoICYmIGhlaWdodCA9PSBwcml2LT5tb2RlbC5oZWlnaHQpCisg
ICAgICAgIHJldHVybjsKKworICAgIHByaXYtPm1vZGVsLndpZHRoID0gd2lkdGg7CisgICAgcHJp
di0+bW9kZWwuaGVpZ2h0ID0gaGVpZ2h0OworICAgIHByaXYtPmNoYW5nZWQubW9kZWwgPSBFSU5B
X1RSVUU7CisKKyAgICBEQkcoIndpZHRoLGhlaWdodD0lZCwgJWQiLCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKK30KKwordm9pZCBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91cGRhdGVfc2V0KEV2YXNfT2JqZWN0ICpv
LCBFaW5hX0Jvb2wgdmFsdWUpCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJp
dik7CisKKyAgICBpZiAodmFsdWUgIT0gcHJpdi0+cmVuZGVyLmRpc2FibGVkKQorICAgICAgICBw
cml2LT5yZW5kZXIuZGlzYWJsZWQgPSB2YWx1ZTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9mbHVzaChFdmFzX09iamVjdCAqbykKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihvLCBwcml2KTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YyA9IE5VTEw7CisK
KyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IDA7CisgICAgcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnkgPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gMDsKKyAgICBwcml2LT52
aWV3Lm9mZnNldC5vbGQueSA9IDA7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gLXBy
aXYtPnZpZXcudGlsZS53OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IC1wcml2LT52
aWV3LnRpbGUuaDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC0xOworICAgIHByaXYtPm1v
ZGVsLmJhc2Uucm93ID0gLTE7CisgICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOwor
CisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCisgICAgcHJpbnRmKCJcbkZMVVNIRUQgQkFDS0lORyBT
VE9SRSwgU1RBVFVTIEJFRk9SRSBERUxFVElORyBUSUxFIE1BVFJJWDpcbiIpOworICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKHByaXYpOworI2VuZGlmCisKKyAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHByaXYpOworICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGVfYWxsKHByaXYpOworICAgIHR1
YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7
CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFyKHR1Yyk7CisKKyNpZmRlZiBERUJVR19N
RU1fTEVBS1MKKyAgICBwcmludGYoIlxuRkxVU0hFRCBCQUNLSU5HIFNUT1JFLCBTVEFUVVMgQUZU
RVIgUkVDUkVBVElORyBUSUxFIE1BVFJJWDpcbiIpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9tZW1fZGJnKHByaXYpOworI2VuZGlmCit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9hdCB6b29tKQor
eworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworICAg
IEVpbmFfVGlsZV9HcmlkX1NsaWNlciBzbGljZXI7CisgICAgY29uc3QgRWluYV9UaWxlX0dyaWRf
SW5mbyAqaW5mbzsKKyAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YzsKKworICAgIHR3ID0gVElMRV9TSVpFX0FUX1pPT00oVElMRV9XLCB6b29tKTsK
KyAgICB0dyA9ICh0dyA+PiAxKSA8PCAxOworICAgIHpvb20gPSBUSUxFX1dfWk9PTV9BVF9TSVpF
KHR3KTsKKyAgICAvKiBXQVJOSU5HOiBhc3N1bWUgcmV2ZXJzZSB6b29tIGlzIHRoZSBzYW1lIGZv
ciBib3RoIGF4aXMgKi8KKyAgICB0aCA9IFRJTEVfU0laRV9BVF9aT09NKFRJTEVfSCwgem9vbSk7
CisKKyAgICBpZiAoIWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5LCB3
LCBoLCB0dywgdGgpKSB7CisgICAgICAgIEVSUigiY291bGQgbm90IHNldHVwIGdyaWQgc2xpY2Vy
IGZvciAlZCwlZCslZHglZCB0aWxlPSVkeCVkIiwKKyAgICAgICAgICAgIHgsIHksIHcsIGgsIHR3
LCB0aCk7CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIHdoaWxlIChl
aW5hX3RpbGVfZ3JpZF9zbGljZXJfbmV4dCgmc2xpY2VyLCAmaW5mbykpIHsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgbG9uZyBjID0gaW5mby0+Y29sOworICAgICAgICBjb25zdCB1bnNpZ25lZCBs
b25nIHIgPSBpbmZvLT5yb3c7CisgICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQocHJpdiwgYywgciwgem9vbSwgTlVMTCwgUFJFX1JFTkRF
Ul9QUklPUklUWV9MT1cpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKKworICAg
IHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJp
eCk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsIHgsIHksIHcsIGgs
IHpvb20pOworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCAqbywg
dW5zaWduZWQgaW50IG4sIGZsb2F0IHpvb20pCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgdW5zaWduZWQgbG9uZyBzdGFydF9yb3csIGVu
ZF9yb3csIHN0YXJ0X2NvbCwgZW5kX2NvbCwgaSwgaiwgdywgaDsKKyAgICBFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUgKnR1YzsKKworICAgIElORigicHJpdi0+bW9kZWwuYmFzZS5yb3cgPSVsZCwgbj0l
dSBwcml2LT52aWV3LnJvd3M9JWx1IiwKKyAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93
LCBuLCBwcml2LT52aWV3LnJvd3MpOworICAgIHN0YXJ0X3JvdyA9IChsb25nKXByaXYtPm1vZGVs
LmJhc2Uucm93IC0gbjsKKyAgICBzdGFydF9jb2wgPSAobG9uZylwcml2LT5tb2RlbC5iYXNlLmNv
bCAtIG47CisgICAgZW5kX3JvdyA9IE1JTihwcml2LT5tb2RlbC5jdXIucm93cyAtIDEsCisgICAg
ICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyArIHByaXYtPnZpZXcucm93cyArIG4g
LSAxKTsKKyAgICBlbmRfY29sID0gTUlOKHByaXYtPm1vZGVsLmN1ci5jb2xzIC0gMSwKKyAgICAg
ICAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sICsgcHJpdi0+dmlldy5jb2xzICsgbiAt
IDEpOworCisgICAgSU5GKCJzdGFydF9yb3c9JWx1LCBlbmRfcm93PSVsdSwgc3RhcnRfY29sPSVs
dSwgZW5kX2NvbD0lbHUiLAorICAgICAgICAgc3RhcnRfcm93LCBlbmRfcm93LCBzdGFydF9jb2ws
IGVuZF9jb2wpOworCisgICAgZm9yIChpID0gc3RhcnRfcm93OyBpIDw9IGVuZF9yb3c7IGkrKykK
KyAgICAgICAgZm9yIChqID0gc3RhcnRfY29sOyBqIDw9IGVuZF9jb2w7IGorKykKKyAgICAgICAg
ICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQo
cHJpdiwgaiwgaSwgem9vbSwgTlVMTCwgUFJFX1JFTkRFUl9QUklPUklUWV9MT1cpKQorICAgICAg
ICAgICAgICAgIGdvdG8gc3RhcnRfcHJvY2Vzc2luZzsKKworc3RhcnRfcHJvY2Vzc2luZzoKKyAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KHByaXYp
OworCisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9k
ZWwubWF0cml4KTsKKyAgICBoID0gKGVuZF9yb3cgLSBzdGFydF9yb3cgKyAxKSAqIFRJTEVfU0la
RV9BVF9aT09NKFRJTEVfSCwgem9vbSk7CisgICAgdyA9IChlbmRfY29sIC0gc3RhcnRfY29sICsg
MSkgKiBUSUxFX1NJWkVfQVRfWk9PTShUSUxFX1csIHpvb20pOworICAgIGV3a190aWxlX3VudXNl
ZF9jYWNoZV9sb2NrX2FyZWEodHVjLAorICAgICAgICAgICAgc3RhcnRfY29sICogVElMRV9TSVpF
X0FUX1pPT00oVElMRV9XLCB6b29tKSwKKyAgICAgICAgICAgIHN0YXJ0X3JvdyAqIFRJTEVfU0la
RV9BVF9aT09NKFRJTEVfSCwgem9vbSksIHcsIGgsIHpvb20pOworCisgICAgcmV0dXJuIEVJTkFf
VFJVRTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX2NhbmNl
bChFdmFzX09iamVjdCAqbykKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2
KTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKworICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfcmVtb3ZlX3VuYXNzb2NpYXRlZChwcml2KTsK
KworICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVs
Lm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKHR1Yyk7Cit9
CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFdmFz
X09iamVjdCAqbykKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5B
X0ZBTFNFKTsKKyAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVu
ZGVyKHByaXYpOworfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxl
X3JlbmRlcihFdmFzX09iamVjdCAqbykKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdl
ZChwcml2KTsKKyAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5k
ZXIocHJpdik7Cit9CisKKy8qKgorICogU2V0IHRoZSBwcm9jZXNzX2VudGlyZV9xdWV1ZSBmbGFn
IG9mIHRoZSByZW5kZXJlciBpZGxlci4KKyAqCisgKgorICogQHBhcmFtIG8gdGhlIHRpbGVkIGJh
Y2tpbmcgc3RvcmUgb2JqZWN0CisgKiBAcGFyYW0gdmFsdWUgRUlOQV9UUlVFIGlmIHdlIHdhbnQg
dG8gcHJvY2VzcyBhbGwgdGhlIHJlcXVlc3Qgb2Ygb3VyIHF1ZXVlLiBFSU5BX0ZBTFNFIG90aGVy
d2lzZS4KKyAqLwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcm9jZXNzX2VudGlyZV9x
dWV1ZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCB2YWx1ZSkKK3sKKyAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBpZiAocHJpdi0+cmVuZGVyLnByb2Nlc3Nf
ZW50aXJlX3F1ZXVlICE9IHZhbHVlKQorICAgICAgICBwcml2LT5yZW5kZXIucHJvY2Vzc19lbnRp
cmVfcXVldWUgPSB2YWx1ZTsKK30KSW5kZXg6IFdlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmUuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaAorI2RlZmluZSBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9oCisK
KyNpbmNsdWRlICJFV2ViS2l0LmgiCisKKy8qIEVuYWJsZSBhY2NvdW50aW5nIG9mIHJlbmRlciB0
aW1lIGluIHRpbGUgc3RhdGlzdGljcyAqLworLy8gI2RlZmluZSBUSUxFX1NUQVRTX0FDQ09VTlRf
UkVOREVSX1RJTUUKKworCisvKiBJZiBkZWZpbmUgZXdrIHdpbGwgZG8gbW9yZSBhY2NvdW50aW5n
IHRvIGNoZWNrIGZvciBtZW1vcnkgbGVha3MKKyAqIHRyeSAia2lsbCAtVVNSMSAkUElEIiB0byBn
ZXQgaW5zdGFudGFuZW91cyBkZWJ1ZworICogdHJ5ICJraWxsIC1VU1IyICRQSUQiIHRvIGdldCBp
bnN0YW50YW5lb3VzIGRlYnVnIGFuZCBmb3JjZSBmbHVzaCBvZiBjYWNoZQorICovCisjZGVmaW5l
IERFQlVHX01FTV9MRUFLUyAxCisKKyNkZWZpbmUgVElMRV9XICgyNTYpCisjZGVmaW5lIFRJTEVf
SCAoMjU2KQorCisjZGVmaW5lIFpPT01fU1RFUF9NSU4gKDAuMDEpCisKKyNkZWZpbmUgVElMRV9T
SVpFX0FUX1pPT00oU0laRSwgWk9PTSkgKChpbnQpcm91bmRmKChTSVpFKSAqIChaT09NKSkpCisj
ZGVmaW5lIFRJTEVfV19aT09NX0FUX1NJWkUoU0laRSkgKChmbG9hdClTSVpFIC8gKGZsb2F0KVRJ
TEVfVykKKyNkZWZpbmUgVElMRV9IX1pPT01fQVRfU0laRShTSVpFKSAoKGZsb2F0KVNJWkUgLyAo
ZmxvYXQpVElMRV9IKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlm
CisKKyNpbmNsdWRlIDxFdmFzLmg+CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKwordHlwZWRlZiBzdHJ1
Y3QgX0V3a19UaWxlICAgICAgICAgICAgICAgICAgICAgRXdrX1RpbGU7Cit0eXBlZGVmIHN0cnVj
dCBfRXdrX1RpbGVfU3RhdHMgICAgICAgICAgICAgICBFd2tfVGlsZV9TdGF0czsKK3R5cGVkZWYg
c3RydWN0IF9Fd2tfVGlsZV9NYXRyaXggICAgICAgICAgICAgIEV3a19UaWxlX01hdHJpeDsKKwor
c3RydWN0IF9Fd2tfVGlsZV9TdGF0cyB7CisgICAgZG91YmxlIGxhc3RfdXNlZDsgICAgICAgIC8q
KjwgdGltZSBvZiBsYXN0IHVzZSAqLworI2lmZGVmIFRJTEVfU1RBVFNfQUNDT1VOVF9SRU5ERVJf
VElNRQorICAgIGRvdWJsZSByZW5kZXJfdGltZTsgICAgICAvKio8IGFtb3VudCBvZiB0aW1lIHRo
aXMgdGlsZSB0b29rIHRvIHJlbmRlciAqLworI2VuZGlmCisgICAgdW5zaWduZWQgaW50IGFyZWE7
ICAgICAgIC8qKjwgY2FjaGUgZm9yICh3ICogaCkgKi8KKyAgICB1bnNpZ25lZCBpbnQgbWlzc2Vz
OyAgICAgLyoqPCBudW1iZXIgb2YgdGltZXMgaXQgYmVjYW1lIGRpcnR5IGJ1dCBub3QKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICogcmVwYWludGVkIGF0IGFsbCBzaW5jZSBpdCB3YXMg
bm90IHZpc2libGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEVpbmFf
Qm9vbCBmdWxsX3VwZGF0ZToxOyAvKio8IHRpbGUgcmVxdWlyZXMgZnVsbCBzaXplIHVwZGF0ZSAq
LworfTsKKworc3RydWN0IF9Fd2tfVGlsZSB7CisgICAgRUlOQV9JTkxJU1Q7ICAgICAgICAgICAg
LyoqPCBzaWJsaW5nIHRpbGVzIGF0IHNhbWUgKGksIGopIGJ1dCBvdGhlciB6b29tICovCisgICAg
RWluYV9UaWxlciAqdXBkYXRlczsgICAgLyoqPCB1cGRhdGVkL2RpcnR5IGFyZWFzICovCisgICAg
RXdrX1RpbGVfU3RhdHMgc3RhdHM7ICAgICAgIC8qKjwgdGlsZSB1c2FnZSBzdGF0aXN0aWNzICov
CisgICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsgLyoqPCB0aWxlIHRpbGUgcG9zaXRpb24gKi8K
KyAgICBFdmFzX0Nvb3JkIHgsIHk7ICAgICAgICAvKio8IHRpbGUgY29vcmRpbmF0ZSBwb3NpdGlv
biAqLworCisgICAgLyogVE9ETzogZG9lcyBpdCB3b3J0aCB0byBrZWVwIHRob3NlIG9yIGNyZWF0
ZSBvbiBkZW1hbmQ/ICovCisgICAgY2Fpcm9fc3VyZmFjZV90ICpzdXJmYWNlOworICAgIGNhaXJv
X3QgKmNhaXJvOworCisgICAgLyoqIE5ldmVyIGV2ZXIgY2hhbmdlIHRob3NlIGFmdGVyIHRpbGUg
aXMgY3JlYXRlZCAocmVzcGVjdCBjb25zdCEpICovCisgICAgY29uc3QgRXZhc19Db29yZCB3LCBo
OyAgICAgICAgLyoqPCB0aWxlIHNpemUgKHNlZSBUSUxFX1NJWkVfQVRfWk9PTSgpKSAqLworICAg
IGNvbnN0IEV2YXNfQ29sb3JzcGFjZSBjc3BhY2U7IC8qKjwgY29sb3JzcGFjZSAqLworICAgIGNv
bnN0IGZsb2F0IHpvb207ICAgICAgICAgICAgIC8qKjwgem9vbSBsZXZlbCBjb250ZW50cyB3ZXJl
IHJlbmRlcmVkIGF0ICovCisgICAgY29uc3Qgc2l6ZV90IGJ5dGVzOyAgICAgICAgICAgLyoqPCBi
eXRlcyB1c2VkIGluIHBpeGVscy4ga2VlcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqIGJlZm9yZSBwaXhlbHMgdG8gZ3VhcmFudGVlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICogYWxpZ25lbWVudCEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKi8KKyAgICBpbnQgdmlzaWJsZTsgICAgICAgICAgICAgICAgICAvKio8IHZpc2liaWxp
dHkgY291bnRlciBvZiB0aGlzIHRpbGUgKi8KKyAgICBFdmFzX09iamVjdCAqaW1hZ2U7ICAgICAg
ICAgICAvKio8IEV2YXMgSW1hZ2UsIHRoZSB0aWxlIHRvIGJlIHJlbmRlcmVkICovCisgICAgdWlu
dDhfdCAqcGl4ZWxzOworfTsKKworI2luY2x1ZGUgImV3a190aWxlZF9tYXRyaXguaCIKKyNpbmNs
dWRlICJld2tfdGlsZWRfbW9kZWwuaCIKKworLyogdmlldyAqLworRUFQSSBFdmFzX09iamVjdCAq
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfYWRkKEV2YXMgKmUpOworCitFQVBJIHZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyX2NiX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29s
ICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJl
YSksIGNvbnN0IHZvaWQgKmRhdGEpOworCitFQVBJIEVpbmFfQm9vbCAgICBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0KEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nv
b3JkIHgsIEV2YXNfQ29vcmQgeSk7CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfYWRkKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3Jk
IGR4LCBFdmFzX0Nvb3JkIGR5KTsKK0VBUEkgRWluYV9Cb29sICAgIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3Njcm9sbF9pbm5lcl9vZmZzZXRfYWRkKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3Jk
IGR4LCBFdmFzX0Nvb3JkIGR5LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29y
ZCB3LCBFdmFzX0Nvb3JkIGgpOworCitFQVBJIEVpbmFfQm9vbCAgICBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV96b29tX3NldChFdmFzX09iamVjdCAqbywgZmxvYXQgKnpvb20sIEV2YXNfQ29vcmQg
Y3gsIEV2YXNfQ29vcmQgY3ksIEV2YXNfQ29vcmQgKm9mZngsIEV2YXNfQ29vcmQgKm9mZnkpOwor
RUFQSSBFaW5hX0Jvb2wgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChF
dmFzX09iamVjdCAqbywgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSk7
CitFQVBJIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMoRXZhc19PYmpl
Y3QgKm8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKTsKK0VBUEkgRWluYV9Cb29sICAgIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZShFdmFzX09iamVjdCAqbywgY29uc3QgRWluYV9S
ZWN0YW5nbGUgKnVwZGF0ZSk7CitFQVBJIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBk
YXRlc19wcm9jZXNzX3ByZV9zZXQoRXZhc19PYmplY3QgKm8sIHZvaWQgKigqY2IpKHZvaWQgKmRh
dGEsIEV2YXNfT2JqZWN0ICpvKSwgY29uc3Qgdm9pZCAqZGF0YSk7CitFQVBJIHZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3Bvc3Rfc2V0KEV2YXNfT2JqZWN0ICpv
LCB2b2lkICooKmNiKSh2b2lkICpkYXRhLCB2b2lkICpwcmVfZGF0YSwgRXZhc19PYmplY3QgKm8p
LCBjb25zdCB2b2lkICpkYXRhKTsKK0VBUEkgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9w
cm9jZXNzX2VudGlyZV9xdWV1ZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCB2YWx1ZSk7
CitFQVBJIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKEV2YXNf
T2JqZWN0ICpvKTsKK0VBUEkgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX2Ns
ZWFyKEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9j
b250ZW50c19yZXNpemUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29v
cmQgaGVpZ2h0KTsKK0VBUEkgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91
cGRhdGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgdmFsdWUpOworRUFQSSB2b2lkIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkgdm9pZCBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfc2NhbGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBF
aW5hX0Jvb2wgdmFsdWUpOworCitFQVBJIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpv
KTsKK0VBUEkgdm9pZCAgICAgICAgICAgICAgICAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV90
aWxlX3VudXNlZF9jYWNoZV9zZXQoRXZhc19PYmplY3QgKm8sIEV3a19UaWxlX1VudXNlZF9DYWNo
ZSAqdHVjKTsKKworRUFQSSBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3Jl
bmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSk7CitFQVBJIEVpbmFfQm9vbCBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09i
amVjdCAqbywgdW5zaWduZWQgaW50IG4sIGZsb2F0IHpvb20pOworRUFQSSB2b2lkIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0ICpvKTsKKworRUFQ
SSBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXZhc19P
YmplY3QgKm8pOworRUFQSSBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxl
X3JlbmRlcihFdmFzX09iamVjdCAqbyk7CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgor
I2VuZGlmIC8vIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2gKSW5kZXg6IFdlYktpdC9lZmwvZXdr
L2V3a190aWxlZF9tYXRyaXguYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZWZsL2V3ay9ld2tfdGls
ZWRfbWF0cml4LmMJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0
cml4LmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzcxIEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJld2tfdGlsZWRfbWF0cml4LmgiCisKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNp
bmNsdWRlICJld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oIgorI2luY2x1ZGUgImV3a190aWxlZF9w
cml2YXRlLmgiCisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4gLy8g
WFhYIHJlbW92ZSBtZSBsYXRlcgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmlu
Zy5oPgorCitzdGF0aWMgY29uc3QgRXZhc19Db29yZCBUSUxFX01BVFJJWF9CQVNFX1RJTEVfU0la
RSA9IDI1NjsKKworc3RydWN0IF9Fd2tfVGlsZV9NYXRyaXggeworICAgIEVpbmFfTWF0cml4c3Bh
cnNlICptYXRyaXg7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgRXZhc19D
b2xvcnNwYWNlIGNzcGFjZTsKKyAgICBzdHJ1Y3QgeworICAgICAgICB2b2lkICgqY2IpKHZvaWQg
KmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKTsKKyAgICAg
ICAgdm9pZCAqZGF0YTsKKyAgICB9IHJlbmRlcjsKKyAgICB1bnNpZ25lZCBpbnQgZnJvemVuOwor
ICAgIEVpbmFfTGlzdCAqdXBkYXRlczsKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MKKyAgICBzdHJ1
Y3QgeworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdWludDY0X3QgYWxsb2NhdGVkLCBm
cmVlZDsKKyAgICAgICAgfSB0aWxlcywgYnl0ZXM7CisgICAgfSBzdGF0czsKKyNlbmRpZgorfTsK
KworI2lmZGVmIERFQlVHX01FTV9MRUFLUworc3RhdGljIHVpbnQ2NF90IHRpbGVzX2xlYWtlZCA9
IDA7CitzdGF0aWMgdWludDY0X3QgYnl0ZXNfbGVha2VkID0gMDsKKyNlbmRpZgorCisvKiBjYWxs
ZWQgd2hlbiBtYXRyaXhzcGFyc2UgaXMgcmVzaXplZCBvciBmcmVlZCAqLworc3RhdGljIHZvaWQg
X2V3a190aWxlX21hdHJpeF9jZWxsX2ZyZWUodm9pZCAqdXNlcl9kYXRhLCB2b2lkICpjZWxsX2Rh
dGEpCit7CisgICAgRXdrX1RpbGVfTWF0cml4ICp0bSA9IHVzZXJfZGF0YTsKKyAgICBFaW5hX0lu
bGlzdCAqbCA9IGNlbGxfZGF0YTsKKworICAgIGlmICghbCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZSh0bS0+dHVjKTsKKworICAgIHdoaWxlIChs
KSB7CisgICAgICAgIEV3a19UaWxlICp0ID0gKEV3a19UaWxlICopbDsKKyAgICAgICAgbCA9IGwt
Pm5leHQ7CisKKyAgICAgICAgaWYgKHQtPnVwZGF0ZXMgfHwgdC0+c3RhdHMuZnVsbF91cGRhdGUp
CisgICAgICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMs
IHQpOworCisgICAgICAgIGlmICh0LT52aXNpYmxlKQorICAgICAgICAgICAgRVJSKCJmcmVlaW5n
IGNlbGwgdGhhdCBpcyB2aXNpYmxlLCBsZWFraW5nIHRpbGUgJXAiLCB0KTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0bS0+
dHVjLCB0KSkKKyAgICAgICAgICAgICAgICBFUlIoInRpbGUgJXAgd2FzIG5vdCBpbiBjYWNoZSAl
cD8gbGVha2luZy4uLiIsIHQsIHRtLT50dWMpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgREJHKCJ0aWxlIGNlbGwgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgZnJlZSBpdCAl
cCIsIHQpOworCisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCisgICAgICAgICAgICAgICAgdG0tPnN0
YXRzLmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOworICAgICAgICAgICAgICAgIHRtLT5zdGF0cy50
aWxlcy5mcmVlZCsrOworI2VuZGlmCisKKyAgICAgICAgICAgICAgICBld2tfdGlsZV9mcmVlKHQp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3RoYXcodG0tPnR1Yyk7Cit9CisKKy8qIGNhbGxlZCB3aGVuIGNhY2hlIG9mIHVudXNl
ZCB0aWxlIGlzIGZsdXNoZWQgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfdGlsZV9m
cmVlKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0KQoreworICAgIEV3a19UaWxlX01hdHJpeCAqdG0g
PSBkYXRhOworICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7CisgICAgRWluYV9Jbmxp
c3QgKmwsICpvbGQ7CisKKyAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2NlbGxfaWR4X2dldCh0
bS0+bWF0cml4LCB0LT5yb3csIHQtPmNvbCwgJmNlbGwpKSB7CisgICAgICAgIEVSUigicmVtb3Zp
bmcgdGlsZSAlcCB0aGF0IHdhcyBub3QgaW4gdGhlIG1hdHJpeD8gTGVha2luZy4uLiIsIHQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHQtPnVwZGF0ZXMgfHwgdC0+c3RhdHMu
ZnVsbF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+
dXBkYXRlcywgdCk7CisKKyAgICBvbGQgPSBlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFfZ2V0
KGNlbGwpOworICAgIGwgPSBlaW5hX2lubGlzdF9yZW1vdmUob2xkLCBFSU5BX0lOTElTVF9HRVQo
dCkpOworICAgIGlmICghbCkgeworICAgICAgICAvKiBzZXQgdG8gbnVsbCB0byBhdm9pZCBkb3Vi
bGUgZnJlZSAqLworICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFfcmVwbGFjZShj
ZWxsLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9jbGVhcihj
ZWxsKTsKKyAgICB9IGVsc2UgaWYgKG9sZCAhPSBsKQorICAgICAgICBlaW5hX21hdHJpeHNwYXJz
ZV9jZWxsX2RhdGFfcmVwbGFjZShjZWxsLCBsLCBOVUxMKTsKKworICAgIGlmIChFSU5BX1VOTElL
RUxZKCEhdC0+dmlzaWJsZSkpIHsKKyAgICAgICAgRVJSKCJjYWNoZSBvZiB1bnVzZWQgdGlsZXMg
cmVxdWVzdGluZyBkZWxldGlvbiBvZiB1c2VkIHRpbGUgJXA/ICIKKyAgICAgICAgICAgICJMZWFr
aW5nLi4uIiwgdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZmRlZiBERUJVR19NRU1f
TEVBS1MKKyAgICB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdC0+Ynl0ZXM7CisgICAgdG0tPnN0
YXRzLnRpbGVzLmZyZWVkKys7CisjZW5kaWYKKworICAgIGV3a190aWxlX2ZyZWUodCk7Cit9CisK
Ky8qKgorICogQ3JlYXRlcyBhIG5ldyBtYXRyaXggb2YgdGlsZXMuCisgKgorICogVGhlIHRpbGUg
bWF0cml4IGlzIHJlc3BvbnNpYmxlIGZvciBrZWVwaW5nIHRpbGVzIGFyb3VuZCBhbmQKKyAqIHBy
b3ZpZGluZyBmYXN0IGFjY2VzcyB0byB0aGVtLiBPbmUgY2FuIHVzZSBpdCB0byByZXRyaWV2ZSBu
ZXcgb3IKKyAqIGV4aXN0aW5nIHRpbGVzIGFuZCBnaXZlIHRoZW0gYmFjaywgYWxsb3dpbmcgdGhl
bSB0byBiZQorICogZnJlZWQvcmVwbGFjZWQgYnkgdGhlIGNhY2hlLgorICoKKyAqIEBwYXJhbSB0
dWMgY2FjaGUgb2YgdW51c2VkIHRpbGVzIG9yIEBjIE5VTEwgdG8gY3JlYXRlIG9uZQorICogICAg
ICAgIGF1dG9tYXRpY2FsbHkuCisgKiBAcGFyYW0gY29scyBudW1iZXIgb2YgY29sdW1ucyBpbiB0
aGUgbWF0cml4LgorICogQHBhcmFtIHJvd3MgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC4K
KyAqIEBwYXJhbSBjc3BhY2UgdGhlIGNvbG9yIHNwYWNlIHVzZWQgdG8gY3JlYXRlIHRpbGVzIGlu
IHRoaXMgbWF0cml4LgorICogQHBhcmFtIHJlbmRlcl9jYiBmdW5jdGlvbiB1c2VkIHRvIHJlbmRl
ciBnaXZlbiB0aWxlIHVwZGF0ZS4KKyAqIEBwYXJhbSBkYXRhIGNvbnRleHQgdG8gZ2l2ZSBiYWNr
IHRvIEBhIHJlbmRlcl9jYi4KKyAqCisgKiBAcmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBpbnN0YW5j
ZSBvbiBzdWNjZXNzLCBAYyBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK0V3a19UaWxlX01hdHJpeCAq
ZXdrX3RpbGVfbWF0cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgdW5zaWduZWQg
bG9uZyBjb2xzLCB1bnNpZ25lZCBsb25nIHJvd3MsIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UsIHZv
aWQgKCpyZW5kZXJfY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3Rh
bmdsZSAqdXBkYXRlKSwgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKyAgICBFd2tfVGlsZV9NYXRyaXgg
KnRtOworCisgICAgQ0FMTE9DX09SX09PTV9SRVQodG0sIHNpemVvZihFd2tfVGlsZV9NYXRyaXgp
LCBOVUxMKTsKKworICAgIHRtLT5tYXRyaXggPSBlaW5hX21hdHJpeHNwYXJzZV9uZXcocm93cywg
Y29scywgX2V3a190aWxlX21hdHJpeF9jZWxsX2ZyZWUsIHRtKTsKKyAgICBpZiAoIXRtLT5tYXRy
aXgpIHsKKyAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHNwYXJzZSBtYXRyaXguIik7Cisg
ICAgICAgIGZyZWUodG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAo
dHVjKQorICAgICAgICB0bS0+dHVjID0gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZih0dWMpOwor
ICAgIGVsc2UgeworICAgICAgICB0bS0+dHVjID0gZXdrX3RpbGVfdW51c2VkX2NhY2hlX25ldyg0
MDk2MDAwMCk7CisgICAgICAgIGlmICghdG0tPnR1YykgeworICAgICAgICAgICAgRVJSKCJubyBj
YWNoZSBvZiB1bnVzZWQgdGlsZSEiKTsKKyAgICAgICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2Zy
ZWUodG0tPm1hdHJpeCk7CisgICAgICAgICAgICBmcmVlKHRtKTsKKyAgICAgICAgICAgIHJldHVy
biBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgdG0tPmNzcGFjZSA9IGNzcGFjZTsKKyAg
ICB0bS0+cmVuZGVyLmNiID0gcmVuZGVyX2NiOworICAgIHRtLT5yZW5kZXIuZGF0YSA9ICh2b2lk
ICopZGF0YTsKKworICAgIHJldHVybiB0bTsKK30KKworLyoqCisgKiBEZXN0cm95cyB0aWxlcyBt
YXRyaXgsIHJlbGVhc2luZyBpdHMgcmVzb3VyY2VzLgorICoKKyAqIFRoZSBjYWNoZSBpbnN0YW5j
ZSBpcyB1bnJlZmVyZW5jZWQsIHBvc3NpYmx5IGZyZWVpbmcgaXQuCisgKi8KK3ZvaWQgZXdrX3Rp
bGVfbWF0cml4X2ZyZWUoRXdrX1RpbGVfTWF0cml4ICp0bSkKK3sKKyNpZmRlZiBERUJVR19NRU1f
TEVBS1MKKyAgICB1aW50NjRfdCB0aWxlcywgYnl0ZXM7CisjZW5kaWYKKworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHRtKTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXpl
KHRtLT50dWMpOworCisgICAgZWluYV9tYXRyaXhzcGFyc2VfZnJlZSh0bS0+bWF0cml4KTsKKwor
ICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRtLT50dWMpOworICAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV91bnJlZih0bS0+dHVjKTsKKworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAg
IHRpbGVzID0gdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCAtIHRtLT5zdGF0cy50aWxlcy5mcmVl
ZDsKKyAgICBieXRlcyA9IHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQgLSB0bS0+c3RhdHMuYnl0
ZXMuZnJlZWQ7CisKKyAgICB0aWxlc19sZWFrZWQgKz0gdGlsZXM7CisgICAgYnl0ZXNfbGVha2Vk
ICs9IGJ5dGVzOworCisgICAgaWYgKHRpbGVzIHx8IGJ5dGVzKQorICAgICAgICBFUlIoInRpbGVk
IG1hdHJpeCBsZWFrZWQ6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2NCJdICIK
KyAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2NCJdIiwKKyAg
ICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVl
ZCwgdGlsZXMsCisgICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkLCB0bS0+c3Rh
dHMuYnl0ZXMuZnJlZWQsIGJ5dGVzKTsKKyAgICBlbHNlIGlmICh0aWxlc19sZWFrZWQgfHwgYnl0
ZXNfbGVha2VkKQorICAgICAgICBXUk4oInRpbGVkIG1hdHJpeCBoYWQgbm8gbGVha3M6IHRpbGVz
WyslIlBSSXU2NCIsLSUiUFJJdTY0Il0gIgorICAgICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0Iiwt
JSJQUkl1NjQiXSwgYnV0IHNvbWUgb3RoZXIgbGVha2VkICIKKyAgICAgICAgICAgICIlIlBSSXU2
NCIgdGlsZXMgKCUiUFJJdTY0IiBieXRlcykiLAorICAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVz
LmFsbG9jYXRlZCwgdG0tPnN0YXRzLnRpbGVzLmZyZWVkLAorICAgICAgICAgICAgdG0tPnN0YXRz
LmJ5dGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkLAorICAgICAgICAgICAgdGls
ZXNfbGVha2VkLCBieXRlc19sZWFrZWQpOworICAgIGVsc2UKKyAgICAgICAgSU5GKCJ0aWxlZCBt
YXRyaXggaGFkIG5vIGxlYWtzOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdICIKKyAgICAg
ICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0Il0iLAorICAgICAgICAgICAgdG0tPnN0
YXRzLnRpbGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLnRpbGVzLmZyZWVkLAorICAgICAgICAgICAg
dG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkKTsKKyNlbmRp
ZgorCisgICAgZnJlZSh0bSk7Cit9CisKKy8qKgorICogUmVzaXplIG1hdHJpeCB0byBnaXZlbiBu
dW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucy4KKyAqLwordm9pZCBld2tfdGlsZV9tYXRyaXhfcmVz
aXplKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29scywgdW5zaWduZWQgbG9u
ZyByb3dzKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKKyAgICBlaW5h
X21hdHJpeHNwYXJzZV9zaXplX3NldCh0bS0+bWF0cml4LCByb3dzLCBjb2xzKTsKK30KKworLyoq
CisgKiBHZXQgdGhlIGNhY2hlIG9mIHVudXNlZCB0aWxlcyBpbiB1c2UgYnkgZ2l2ZW4gbWF0cml4
LgorICoKKyAqIE5vIHJlZmVyZW5jZSBpcyB0YWtlbiB0byB0aGUgY2FjaGUuCisgKi8KK0V3a19U
aWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQoY29uc3Qg
RXdrX1RpbGVfTWF0cml4ICp0bSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwodG0sIE5VTEwpOworICAgIHJldHVybiB0bS0+dHVjOworfQorCisvKioKKyAqIEdldCB0aGUg
ZXhhY3QgdGlsZSBmb3IgdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCB6b29tLgorICoKKyAqIElmIHRo
ZSB0aWxlIHdhcyB1bnVzZWQgdGhlbiBpdCdzIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUuCisgKgor
ICogQWZ0ZXIgdXNhZ2UsIHBsZWFzZSBnaXZlIGl0IGJhY2sgdXNpbmcKKyAqIGV3a190aWxlX21h
dHJpeF90aWxlX3B1dCgpLiBJZiB5b3UganVzdCB3YW50IHRvIGNoZWNrIGlmIGl0IGV4aXN0cywK
KyAqIHRoZW4gdXNlIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cygpLgorICoKKyAq
IEBwYXJhbSB0bSB0aGUgdGlsZSBtYXRyaXggdG8gZ2V0IHRpbGUgZnJvbS4KKyAqIEBwYXJhbSBj
b2wgdGhlIGNvbHVtbiBudW1iZXIuCisgKiBAcGFyYW0gcm93IHRoZSByb3cgbnVtYmVyLgorICog
QHBhcmFtIHpvb20gdGhlIGV4YWN0IHpvb20gdG8gdXNlLgorICoKKyAqIEByZXR1cm4gVGhlIHRp
bGUgaW5zdGFuY2Ugb3IgQGMgTlVMTCBpZiBub25lIGlzIGZvdW5kLiBJZiB0aGUgdGlsZQorICog
ICAgICAgICB3YXMgaW4gdGhlIHVudXNlZCBjYWNoZSBpdCB3aWxsIGJlIEBiIHJlbW92ZWQgKHRo
dXMKKyAqICAgICAgICAgY29uc2lkZXJlZCB1c2VkKSBhbmQgb25lIHNob3VsZCBnaXZlIGl0IGJh
Y2sgd2l0aAorICogICAgICAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoKSBhZnRlcndhcmRz
LgorICoKKyAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RpbGVfbmVhcmVzdF9nZXQoKQorICogQHNl
ZSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoKQorICovCitFd2tfVGlsZSAqZXdrX3Rp
bGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxv
bmcgY29sLCB1bnNpZ25lZCBpbnQgcm93LCBmbG9hdCB6b29tKQoreworICAgIEV3a19UaWxlICp0
LCAqaXRlbSwgKml0ZW1fZm91bmQgPSBOVUxMOworICAgIEVpbmFfSW5saXN0ICppbmw7CisKKyAg
ICB0ID0gZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29s
KTsKKyAgICBpZiAoIXQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHQtPnpvb20g
PT0gem9vbSkKKyAgICAgICAgZ290byBlbmQ7CisKKyAgICBFSU5BX0lOTElTVF9GT1JFQUNIKEVJ
TkFfSU5MSVNUX0dFVCh0KSwgaXRlbSkgeworICAgICAgICBpZiAoaXRlbS0+em9vbSAhPSB6b29t
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGl0ZW1fZm91bmQgPSBpdGVtOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIWl0ZW1fZm91bmQpCisgICAgICAgIHJldHVy
biBOVUxMOworCisgICAgaW5sID0gZWluYV9pbmxpc3RfcHJvbW90ZShFSU5BX0lOTElTVF9HRVQo
dCksIEVJTkFfSU5MSVNUX0dFVChpdGVtX2ZvdW5kKSk7CisgICAgZWluYV9tYXRyaXhzcGFyc2Vf
ZGF0YV9pZHhfcmVwbGFjZSh0bS0+bWF0cml4LCByb3csIGNvbCwgaW5sLCBOVUxMKTsKKworICBl
bmQ6CisgICAgaWYgKCF0LT52aXNpYmxlKSB7CisgICAgICAgIGlmICghZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHQpKQorICAgICAgICAgICAgV1JOKCJFd2tfVGlsZSB3
YXMgdW51c2VkIGJ1dCBub3QgaW4gY2FjaGU/IGJ1ZyEiKTsKKyAgICB9CisKKyAgICByZXR1cm4g
dDsKK30KKworLyoqCisgKiBDaGVja3MgaWYgdGlsZSBvZiBnaXZlbiB6b29tIGV4aXN0cyBpbiBt
YXRyaXguCisgKgorICogQHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0byBjaGVjayB0aWxlIGV4
aXN0ZW5jZS4KKyAqIEBwYXJhbSBjb2wgdGhlIGNvbHVtbiBudW1iZXIuCisgKiBAcGFyYW0gcm93
IHRoZSByb3cgbnVtYmVyLgorICogQHBhcmFtIHpvb20gdGhlIGV4YWN0IHpvb20gdG8gcXVlcnku
CisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgZm91bmQsIEBjIEVJTkFfRkFMU0Ugb3Ro
ZXJ3aXNlLgorICoKKyAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KCkKKyAq
LworRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyhFd2tfVGlsZV9N
YXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgaW50IHJvdywgZmxvYXQgem9v
bSkKK3sKKyAgICBFd2tfVGlsZSAqdCwgKml0ZW07CisKKyAgICB0ID0gZWluYV9tYXRyaXhzcGFy
c2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKTsKKyAgICBpZiAoIXQpCisgICAg
ICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChFSU5BX0lO
TElTVF9HRVQodCksIGl0ZW0pIHsKKyAgICAgICAgaWYgKGl0ZW0tPnpvb20gPT0gem9vbSkKKyAg
ICAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfRkFM
U0U7Cit9CisKKy8qKgorICogR2V0IHRoZSBuZWFyZXN0IHRpbGUgZm9yIGdpdmVuIHBvc2l0aW9u
IGFuZCB6b29tLgorICoKKyAqIFRoZSBuZWFyZXN0IHRpbGUgaXMgdGhlIG9uZSBhdCB0aGUgZ2l2
ZW4gcG9zaXRpb24gYnV0IHdpdGggdGhlCisgKiBjbG9zZXN0IHpvb20sIHRoaXMgYmVpbmcgdGhl
IGRpdmlzaW9uIG9mIHRoZSB0aWxlIHpvb20gYnkgdGhlCisgKiBkZXNpcmVkIHpvb20sIHRoZSBj
bG9zZXN0IHRvIDEuMCBnZXRzIGl0LgorICoKKyAqIElmIHRoZSB0aWxlIHdhcyB1bnVzZWQgdGhl
biBpdCdzIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUuCisgKgorICogQWZ0ZXIgdXNhZ2UsIHBsZWFz
ZSBnaXZlIGl0IGJhY2sgdXNpbmcgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KCkuCisgKgorICog
QHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0byBnZXQgdGlsZSBmcm9tLgorICogQHBhcmFtIGNv
bCB0aGUgY29sdW1uIG51bWJlci4KKyAqIEBwYXJhbSByb3cgdGhlIHJvdyBudW1iZXIuCisgKiBA
cGFyYW0gem9vbSB0aGUgZXhhY3Qgem9vbSB0byB1c2UuCisgKgorICogQHJldHVybiBUaGUgdGls
ZSBpbnN0YW5jZSBvciBAYyBOVUxMIGlmIG5vbmUgaXMgZm91bmQuIElmIHRoZSB0aWxlCisgKiAg
ICAgICAgIHdhcyBpbiB0aGUgdW51c2VkIGNhY2hlIGl0IHdpbGwgYmUgQGIgcmVtb3ZlZCAodGh1
cworICogICAgICAgICBjb25zaWRlcmVkIHVzZWQpIGFuZCBvbmUgc2hvdWxkIGdpdmUgaXQgYmFj
ayB3aXRoCisgKiAgICAgICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dCgpIGFmdGVyd2FyZHMu
CisgKi8KK0V3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9uZWFyZXN0X2dldChFd2tfVGls
ZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgaW50IHJvdywgZmxvYXQg
em9vbSkKK3sKKyAgICBFd2tfVGlsZSAqdCwgKml0ZW0sICppdGVtX2ZvdW5kID0gTlVMTDsKKyAg
ICBFaW5hX0lubGlzdCAqaW5sOworICAgIGZsb2F0IHpvb21fZm91bmQgPSAwOworCisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBOVUxMKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9GQUxTRV9SRVRVUk5fVkFMKHpvb20gPiAwLjAsIE5VTEwpOworCisgICAgdCA9IGVpbmFfbWF0
cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCk7CisgICAgaWYgKCF0
KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICh0LT56b29tID09IHpvb20pIHsKKyAg
ICAgICAgaXRlbV9mb3VuZCA9IHQ7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIEVJ
TkFfSU5MSVNUX0ZPUkVBQ0goRUlOQV9JTkxJU1RfR0VUKHQpLCBpdGVtKSB7CisgICAgICAgIGZs
b2F0IGN1cl96b29tID0gaXRlbS0+em9vbTsKKworICAgICAgICBpZiAoY3VyX3pvb20gPT0gem9v
bSkgeworICAgICAgICAgICAgaXRlbV9mb3VuZCA9IGl0ZW07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGN1cl96b29tID4gem9vbSkKKyAgICAg
ICAgICAgIGN1cl96b29tID0gem9vbSAvIGN1cl96b29tOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBjdXJfem9vbSA9IGN1cl96b29tIC8gem9vbTsKKworICAgICAgICBpZiAoY3VyX3pvb20g
PiB6b29tX2ZvdW5kKSB7CisgICAgICAgICAgICBpdGVtX2ZvdW5kID0gaXRlbTsKKyAgICAgICAg
ICAgIHpvb21fZm91bmQgPSBjdXJfem9vbTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgh
aXRlbV9mb3VuZCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpbmwgPSBlaW5hX2lubGlz
dF9wcm9tb3RlKEVJTkFfSU5MSVNUX0dFVCh0KSwgRUlOQV9JTkxJU1RfR0VUKGl0ZW1fZm91bmQp
KTsKKyAgICBlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9yZXBsYWNlKHRtLT5tYXRyaXgsIHJv
dywgY29sLCBpbmwsIE5VTEwpOworCisgIGVuZDoKKyAgICBpZiAoIWl0ZW1fZm91bmQtPnZpc2li
bGUpIHsKKyAgICAgICAgaWYgKCFld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1
YywgaXRlbV9mb3VuZCkpCisgICAgICAgICAgICBXUk4oIkV3a19UaWxlIHdhcyB1bnVzZWQgYnV0
IG5vdCBpbiBjYWNoZT8gYnVnISIpOworICAgIH0KKworICAgIHJldHVybiBpdGVtX2ZvdW5kOwor
fQorCisvKioKKyAqIENyZWF0ZSBhIG5ldyB0aWxlIGF0IGdpdmVuIHBvc2l0aW9uIGFuZCB6b29t
IGxldmVsIGluIHRoZSBtYXRyaXguCisgKgorICogVGhlIG5ld2x5IGNyZWF0ZWQgdGlsZSBpcyBj
b25zaWRlcmVkIGluIHVzZSBhbmQgbm90IHB1dCBpbnRvIGNhY2hlCisgKiBvZiB1bnVzZWQgdGls
ZXMuIEFmdGVyIGl0IGlzIHVzZWQgb25lIHNob3VsZCBjYWxsCisgKiBld2tfdGlsZV9tYXRyaXhf
dGlsZV9wdXQoKSB0byBnaXZlIGl0IGJhY2sgdG8gbWF0cml4LgorICoKKyAqIEBwYXJhbSB0bSB0
aGUgdGlsZSBtYXRyaXggdG8gY3JlYXRlIHRpbGUgb24uCisgKiBAcGFyYW0gY29sIHRoZSBjb2x1
bW4gbnVtYmVyLgorICogQHBhcmFtIHJvdyB0aGUgcm93IG51bWJlci4KKyAqIEBwYXJhbSB6b29t
IHRoZSBsZXZlbCB0byBjcmVhdGUgdGlsZSwgdXNlZCB0byBkZXRlcm1pbmUgdGlsZSBzaXplLgor
ICovCitFd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3KEV3a19UaWxlX01hdHJpeCAq
dG0sIEV2YXMgKmV2YXMsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBpbnQgcm93LCBmbG9h
dCB6b29tKQoreworICAgIEV2YXNfQ29vcmQgczsKKyAgICBFaW5hX0lubGlzdCAqb2xkOworICAg
IEV3a19UaWxlICp0OworCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBO
VUxMKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKHpvb20gPiAwLjAsIE5V
TEwpOworCisgICAgcyA9IFRJTEVfU0laRV9BVF9aT09NKFRJTEVfTUFUUklYX0JBU0VfVElMRV9T
SVpFLCB6b29tKTsKKyAgICB6b29tID0gKGZsb2F0KXMgLyAoZmxvYXQpVElMRV9NQVRSSVhfQkFT
RV9USUxFX1NJWkU7CisKKyAgICB0ID0gZXdrX3RpbGVfbmV3KGV2YXMsIHMsIHMsIHpvb20sIHRt
LT5jc3BhY2UpOworICAgIGlmICghdCkgeworICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUg
dGlsZSAlZHglZCBhdCAlZiwgY3NwYWNlPSVkIiwKKyAgICAgICAgICAgIHMsIHMsIChkb3VibGUp
em9vbSwgdG0tPmNzcGFjZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG9s
ZCA9IGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCk7
CisgICAgb2xkID0gZWluYV9pbmxpc3RfcHJlcGVuZChvbGQsIEVJTkFfSU5MSVNUX0dFVCh0KSk7
CisgICAgaWYgKCFlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9yZXBsYWNlKHRtLT5tYXRyaXgs
IHJvdywgY29sLCB0LCBOVUxMKSkgeworICAgICAgICBFUlIoImNvdWxkIG5vdCBzZXQgbWF0cml4
IGNlbGwsIHJvdy9jb2wgb3V0c2lkZSBtYXRyaXggZGltZW5zaW9ucyEiKTsKKyAgICAgICAgZXdr
X3RpbGVfZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdC0+Y29s
ID0gY29sOworICAgIHQtPnJvdyA9IHJvdzsKKyAgICB0LT54ID0gY29sICogczsKKyAgICB0LT55
ID0gcm93ICogczsKKworICAgIGNhaXJvX3RyYW5zbGF0ZSh0LT5jYWlybywgLXQtPngsIC10LT55
KTsKKworICAgIHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOworICAgIHRtLT51cGRh
dGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7CisKKyNpZmRlZiBERUJVR19N
RU1fTEVBS1MKKyAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkICs9IHQtPmJ5dGVzOworICAg
IHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQrKzsKKyNlbmRpZgorCisgICAgcmV0dXJuIHQ7Cit9
CisKKy8qKgorICogR2l2ZXMgYmFjayB0aGUgdGlsZSB0byB0aGUgdGlsZSBtYXRyaXguCisgKgor
ICogVGhpcyB3aWxsIHJlcG9ydCB0aGUgdGlsZSBpcyBubyBsb25nZXIgaW4gdXNlIGJ5IHRoZSBv
bmUgdGhhdCBnb3QKKyAqIGl0IHdpdGggZXdrX3RpbGVfbWF0cml4X3RpbGVfbmVhcmVzdF9nZXQo
KSBvcgorICogZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KCkuCisgKgorICogQW55IHBy
ZXZpb3VzIHJlZmVyZW5jZSB0byB0aWxlIHNob3VsZCBiZSByZWxlYXNlZAorICogKGV3a190aWxl
X2hpZGUoKSkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc28gaXQgd2lsbAorICogYmUg
a25vd24gaWYgaXQgaXMgbm90IHZpc2liaWxlIGFueW1vcmUgYW5kIHRodXMgY2FuIGJlIHB1dCBp
bnRvIHRoZQorICogdW51c2VkIGNhY2hlLgorICoKKyAqIEBwYXJhbSB0bSB0aGUgdGlsZSBtYXRy
aXggdG8gcmV0dXJuIHRpbGUgdG8uCisgKiBAcGFyYW0gdCB0aGUgdGlsZSBpbnN0YW5jZSB0byBy
ZXR1cm4sIG11c3QgQGIgbm90IGJlIEBjIE5VTEwuCisgKiBAcGFyYW0gbGFzdF91c2VkIHRpbWUg
aW4gd2hpY2ggdGlsZSB3YXMgbGFzdCB1c2VkLgorICoKKyAqIEByZXR1cm4gI0VJTkFfVFJVRSBv
biBzdWNjZXNzIG9yICNFSU5BX0ZBTFNFIG9uIGZhaWx1cmUuCisgKi8KK0VpbmFfQm9vbCBld2tf
dGlsZV9tYXRyaXhfdGlsZV9wdXQoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXdrX1RpbGUgKnQsIGRv
dWJsZSBsYXN0X3VzZWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRt
LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodCwgRUlO
QV9GQUxTRSk7CisKKyAgICBpZiAodC0+dmlzaWJsZSkKKyAgICAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKKworICAgIHQtPnN0YXRzLmxhc3RfdXNlZCA9IGxhc3RfdXNlZDsKKyAgICByZXR1cm4gZXdr
X3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KHRtLT50dWMsIHQsIF9ld2tfdGlsZV9tYXRyaXhf
dGlsZV9mcmVlLCB0bSk7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRh
dGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGludCBy
b3csIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpCit7CisgICAgRXdrX1RpbGUgKmwsICp0
OworICAgIEVpbmFfUmVjdGFuZ2xlIG5ld191cGRhdGU7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsKKworICAgIG1lbWNweSgmbmV3X3VwZGF0ZSwg
dXBkYXRlLCBzaXplb2YobmV3X3VwZGF0ZSkpOworICAgIC8vIGNoZWNrIHVwZGF0ZSBpcyB2YWxp
ZCwgb3RoZXJ3aXNlIHJldHVybiBFSU5BX0ZBTFNFCisgICAgaWYgKHVwZGF0ZS0+eCA8IDAgfHwg
dXBkYXRlLT55IDwgMCB8fCB1cGRhdGUtPncgPD0gMCB8fCB1cGRhdGUtPmggPD0gMCkgeworICAg
ICAgICBFUlIoImludmFsaWQgdXBkYXRlIHJlZ2lvbi4iKTsKKyAgICAgICAgcmV0dXJuIEVJTkFf
RkFMU0U7CisgICAgfQorCisgICAgaWYgKHVwZGF0ZS0+eCArIHVwZGF0ZS0+dyAtIDEgPj0gVElM
RV9NQVRSSVhfQkFTRV9USUxFX1NJWkUpCisgICAgICAgIG5ld191cGRhdGUudyA9IFRJTEVfTUFU
UklYX0JBU0VfVElMRV9TSVpFIC0gdXBkYXRlLT54OworICAgIGlmICh1cGRhdGUtPnkgKyB1cGRh
dGUtPmggLSAxID49IFRJTEVfTUFUUklYX0JBU0VfVElMRV9TSVpFKQorICAgICAgICBuZXdfdXBk
YXRlLmggPSBUSUxFX01BVFJJWF9CQVNFX1RJTEVfU0laRSAtIHVwZGF0ZS0+eTsKKworICAgIGwg
PSBlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpOwor
CisgICAgaWYgKCFsKQorICAgICAgICByZXR1cm4gRUlOQV9UUlVFOworCisgICAgRUlOQV9JTkxJ
U1RfRk9SRUFDSChFSU5BX0lOTElTVF9HRVQobCksIHQpIHsKKyAgICAgICAgaWYgKCF0LT51cGRh
dGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgICAgIHRtLT51cGRhdGVzID0g
ZWluYV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7CisgICAgICAgIG5ld191cGRhdGUueCA9
IHJvdW5kZih0LT56b29tICogbmV3X3VwZGF0ZS54KTsKKyAgICAgICAgbmV3X3VwZGF0ZS55ID0g
cm91bmRmKHQtPnpvb20gKiBuZXdfdXBkYXRlLnkpOworICAgICAgICBuZXdfdXBkYXRlLncgPSBy
b3VuZGYodC0+em9vbSAqIG5ld191cGRhdGUudyk7CisgICAgICAgIG5ld191cGRhdGUuaCA9IHJv
dW5kZih0LT56b29tICogbmV3X3VwZGF0ZS5oKTsKKyAgICAgICAgZXdrX3RpbGVfdXBkYXRlX2Fy
ZWEodCwgJm5ld191cGRhdGUpOworICAgIH0KKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisK
K0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZV9NYXRy
aXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgaW50IHJvdykKK3sKKyAgICBFd2tf
VGlsZSAqbCwgKnQ7CisgICAgRWluYV9NYXRyaXhzcGFyc2VfQ2VsbCAqY2VsbDsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworCisgICAgaWYgKCFl
aW5hX21hdHJpeHNwYXJzZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wsICZjZWxs
KSkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICBpZiAoIWNlbGwpCisgICAgICAg
IHJldHVybiBFSU5BX1RSVUU7CisKKyAgICBsID0gZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRh
X2dldChjZWxsKTsKKyAgICBpZiAoIWwpIHsKKyAgICAgICAgQ1JJVElDQUwoIm1hdHJpeCBjZWxs
IHdpdGggbm8gdGlsZSEiKTsKKyAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKKyAgICB9CisKKyAg
ICBFSU5BX0lOTElTVF9GT1JFQUNIKEVJTkFfSU5MSVNUX0dFVChsKSwgdCkgeworICAgICAgICBp
ZiAoIXQtPnVwZGF0ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgICAgICAgICAgdG0t
PnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKKyAgICAgICAgZXdr
X3RpbGVfdXBkYXRlX2Z1bGwodCk7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30K
Kwordm9pZCBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJp
eCAqdG0sIEV3a19UaWxlICp0KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRt
KTsKKyAgICBpZiAoIXQtPnVwZGF0ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgICAg
ICByZXR1cm47CisgICAgZXdrX3RpbGVfdXBkYXRlc19jbGVhcih0KTsKKyAgICB0bS0+dXBkYXRl
cyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHQpOworfQorCitzdGF0aWMgRWluYV9C
b29sIF9ld2tfdGlsZV9tYXRyaXhfc2xpY2VyX3NldHVwKEV3a19UaWxlX01hdHJpeCAqdG0sIGNv
bnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhLCBmbG9hdCB6b29tLCBFaW5hX1RpbGVfR3JpZF9TbGlj
ZXIgKnNsaWNlcikKK3sKKyAgICB1bnNpZ25lZCBsb25nIHJvd3MsIGNvbHM7CisgICAgRXZhc19D
b29yZCB4LCB5LCB3LCBoLCB0dywgdGg7CisKKyAgICBpZiAoYXJlYS0+dyA8PSAwIHx8IGFyZWEt
PmggPD0gMCkgeworICAgICAgICBXUk4oImludmFsaWQgYXJlYSByZWdpb246ICVkLCVkKyVkeCVk
LiIsCisgICAgICAgICAgICBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKKyAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgeCA9IGFyZWEtPng7CisgICAg
eSA9IGFyZWEtPnk7CisgICAgdyA9IGFyZWEtPnc7CisgICAgaCA9IGFyZWEtPmg7CisKKyAgICB0
dyA9IFRJTEVfU0laRV9BVF9aT09NKFRJTEVfVywgem9vbSk7CisgICAgdGggPSBUSUxFX1NJWkVf
QVRfWk9PTShUSUxFX0gsIHpvb20pOworCisgICAgLy8gY3JvcHBpbmcgYXJlYSByZWdpb24gdG8g
Zml0IG1hdHJpeAorICAgIGVpbmFfbWF0cml4c3BhcnNlX3NpemVfZ2V0KHRtLT5tYXRyaXgsICZy
b3dzLCAmY29scyk7CisgICAgaWYgKHggPCAwKSB7CisgICAgICAgIHcgKz0geDsKKyAgICAgICAg
eCA9IDA7CisgICAgfQorICAgIGlmICh5IDwgMCkgeworICAgICAgICBoICs9IHk7CisgICAgICAg
IHkgPSAwOworICAgIH0KKworICAgIGlmICh5ICsgaCAtIDEgPiByb3dzICogdGgpCisgICAgICAg
IGggPSByb3dzICogdGggLSB5OworICAgIGlmICh4ICsgdyAtIDEgPiBjb2xzICogdHcpCisgICAg
ICAgIHcgPSBjb2xzICogdHcgLSB4OworCisgICAgcmV0dXJuIGVpbmFfdGlsZV9ncmlkX3NsaWNl
cl9zZXR1cChzbGljZXIsIHgsIHksIHcsIGgsIHR3LCB0aCk7Cit9CisKKworRWluYV9Cb29sIGV3
a190aWxlX21hdHJpeF91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgY29uc3QgRWluYV9SZWN0
YW5nbGUgKnVwZGF0ZSwgZmxvYXQgem9vbSkKK3sKKyAgICBjb25zdCBFaW5hX1RpbGVfR3JpZF9J
bmZvICppbmZvOworICAgIEVpbmFfVGlsZV9HcmlkX1NsaWNlciBzbGljZXI7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsKKworICAgIGlmICh1cGRh
dGUtPncgPCAxIHx8IHVwZGF0ZS0+aCA8IDEpIHsKKyAgICAgICAgREJHKCJXaHkgd2UgZ2V0IHVw
ZGF0ZXMgd2l0aCBlbXB0eSBhcmVhcz8gJWQsJWQrJWR4JWQgYXQgem9vbSAlZiIsCisgICAgICAg
ICAgICB1cGRhdGUtPngsIHVwZGF0ZS0+eSwgdXBkYXRlLT53LCB1cGRhdGUtPmgsIHpvb20pOwor
ICAgICAgICByZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKworICAgIGlmICghX2V3a190aWxlX21h
dHJpeF9zbGljZXJfc2V0dXAodG0sIHVwZGF0ZSwgem9vbSwgJnNsaWNlcikpIHsKKyAgICAgICAg
RVJSKCJDb3VsZCBub3Qgc2V0dXAgc2xpY2VyIGZvciB1cGRhdGUgJWQsJWQrJWR4JWQgYXQgem9v
bSAlZiIsCisgICAgICAgICAgICB1cGRhdGUtPngsIHVwZGF0ZS0+eSwgdXBkYXRlLT53LCB1cGRh
dGUtPmgsIHpvb20pOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAgICB3
aGlsZSAoZWluYV90aWxlX2dyaWRfc2xpY2VyX25leHQoJnNsaWNlciwgJmluZm8pKSB7CisgICAg
ICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7CisgICAgICAgIEV3a19UaWxlICpsLCAqdDsKKyAg
ICAgICAgY29sID0gaW5mby0+Y29sOworICAgICAgICByb3cgPSBpbmZvLT5yb3c7CisKKyAgICAg
ICAgbCA9IGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNv
bCk7CisgICAgICAgIGlmICghbCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEVJ
TkFfSU5MSVNUX0ZPUkVBQ0goRUlOQV9JTkxJU1RfR0VUKGwpLCB0KSB7CisgICAgICAgICAgICBp
ZiAoIXQtPnVwZGF0ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgICAgICAgICAgICAg
IHRtLT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7CisgICAgICAg
ICAgICBpZiAoaW5mby0+ZnVsbCkKKyAgICAgICAgICAgICAgICBld2tfdGlsZV91cGRhdGVfZnVs
bCh0KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh0LT56b29tICE9
IHpvb20pCisgICAgICAgICAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9mdWxsKHQpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZXdrX3RpbGVfdXBkYXRlX2Fy
ZWEodCwgJmluZm8tPnJlY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisK
KyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCit2b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVz
X3Byb2Nlc3MoRXdrX1RpbGVfTWF0cml4ICp0bSkKK3sKKyAgICBFaW5hX0xpc3QgKmwsICpsX25l
eHQ7CisgICAgRXdrX1RpbGUgKnQ7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0p
OworCisgICAgLy8gcHJvY2VzcyB1cGRhdGVzLCB1bmZsYWcgdGlsZXMKKyAgICBFSU5BX0xJU1Rf
Rk9SRUFDSF9TQUZFKHRtLT51cGRhdGVzLCBsLCBsX25leHQsIHQpIHsKKyAgICAgICAgZXdrX3Rp
bGVfdXBkYXRlc19wcm9jZXNzKHQsIHRtLT5yZW5kZXIuY2IsIHRtLT5yZW5kZXIuZGF0YSk7Cisg
ICAgICAgIGlmICh0LT52aXNpYmxlKSB7CisgICAgICAgICAgICBld2tfdGlsZV91cGRhdGVzX2Ns
ZWFyKHQpOworICAgICAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3Qo
dG0tPnVwZGF0ZXMsIGwpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIGV3a190aWxlX21h
dHJpeF91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJpeCAqdG0pCit7CisgICAgRXdrX1RpbGUg
KnQ7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOworCisgICAgRUlOQV9MSVNU
X0ZSRUUodG0tPnVwZGF0ZXMsIHQpCisgICAgICAgIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIodCk7
CisgICAgdG0tPnVwZGF0ZXMgPSBOVUxMOworfQorCisvLyByZW1vdmUgbWUgbGF0ZXIhCit2b2lk
IGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4ICp0bSkKK3sKKyAgICBF
aW5hX0l0ZXJhdG9yICppdCA9IGVpbmFfbWF0cml4c3BhcnNlX2l0ZXJhdG9yX2NvbXBsZXRlX25l
dyh0bS0+bWF0cml4KTsKKyAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsICpjZWxsOworICAgIEVp
bmFfQm9vbCBsYXN0X2VtcHR5ID0gRUlOQV9GQUxTRTsKKworI2lmZGVmIERFQlVHX01FTV9MRUFL
UworICAgIHByaW50ZigiRXdrX1RpbGUgTWF0cml4OiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2
NCI6JSJQUkl1NjQiXSAiCisgICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6
JSJQUkl1NjQiXVxuIiwKKyAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCwgdG0t
PnN0YXRzLnRpbGVzLmZyZWVkLAorICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVk
IC0gdG0tPnN0YXRzLnRpbGVzLmZyZWVkLAorICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuYWxs
b2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsCisgICAgICAgICAgIHRtLT5zdGF0cy5ieXRl
cy5hbGxvY2F0ZWQgLSB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQpOworI2Vsc2UKKyAgICBwcmludGYo
IkV3a19UaWxlIE1hdHJpeDpcbiIpOworI2VuZGlmCisKKyAgICBFSU5BX0lURVJBVE9SX0ZPUkVB
Q0goaXQsIGNlbGwpIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByb3csIGNvbDsKKyAgICAgICAg
RWluYV9Jbmxpc3QgKmw7CisgICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfcG9zaXRpb25f
Z2V0KGNlbGwsICZyb3csICZjb2wpOworICAgICAgICBsID0gZWluYV9tYXRyaXhzcGFyc2VfY2Vs
bF9kYXRhX2dldChjZWxsKTsKKworICAgICAgICBpZiAoIWwpIHsKKyAgICAgICAgICAgIGlmICgh
bGFzdF9lbXB0eSkgeworICAgICAgICAgICAgICAgIGxhc3RfZW1wdHkgPSBFSU5BX1RSVUU7Cisg
ICAgICAgICAgICAgICAgcHJpbnRmKCJFbXB0eToiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHByaW50ZigiIFslbHUsJWx1XSIsIGNvbCwgcm93KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlmIChsYXN0X2VtcHR5KSB7CisgICAgICAgICAgICAgICAgbGFzdF9lbXB0eSA9
IEVJTkFfRkFMU0U7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgRXdrX1RpbGUgKnQ7CisKKyAgICAgICAgICAgIHByaW50ZigiJTNsdSwl
M2x1ICUxMHA6IiwgY29sLCByb3csIGwpOworICAgICAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFD
SChsLCB0KQorICAgICAgICAgICAgICAgIHByaW50ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUw
LjNmXSVjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdC0+Y29sLCB0LT5yb3csIHQtPncsIHQt
PmgsIHQtPnpvb20sCisgICAgICAgICAgICAgICAgICAgICAgIHQtPnZpc2libGUgPyAnKic6ICcg
Jyk7CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg
KGxhc3RfZW1wdHkpCisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICBlaW5hX2l0ZXJhdG9yX2Zy
ZWUoaXQpOworCisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RiZyh0bS0+dHVjKTsKK30KKwor
LyoqCisgKiBGcmVlemUgbWF0cml4IHRvIG5vdCBkbyBtYWludGVuYW5jZSB0YXNrcy4KKyAqCisg
KiBNYWludGVuYW5jZSB0YXNrcyBvcHRpbWl6ZSB1c2FnZSwgYnV0IG1heWJlIHdlIGtub3cgd2Ug
c2hvdWxkIGhvbGQKKyAqIG9uIHRoZW0gdW50aWwgd2UgZG8gdGhlIGxhc3Qgb3BlcmF0aW9uLCBp
biB0aGlzIGNhc2Ugd2UgZnJlZXplCisgKiB3aGlsZSBvcGVyYXRpbmcgYW5kIHRoZW4gdGhhdyB3
aGVuIHdlJ3JlIGRvbmUuCisgKgorICogQHNlZSBld2tfdGlsZV9tYXRyaXhfdGhhdygpCisgKi8K
K3ZvaWQgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKKyAgICBpZiAoIXRtLT5mcm96ZW4pCisg
ICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodG0tPnR1Yyk7CisgICAgdG0tPmZy
b3plbisrOworfQorCisvKioKKyAqIFVuZnJlZXplcyBtYWludGVuYW5jZSB0YXNrcy4KKyAqCisg
KiBJZiB0aGlzIGlzIHRoZSBsYXN0IGNvdW50ZXJwYXJ0IG9mIGZyZWV6ZSwgdGhlbiBtYWludGVu
YW5jZSB0YXNrcworICogd2lsbCBydW4gaW1tZWRpYXRlbHkuCisgKi8KK3ZvaWQgZXdrX3RpbGVf
bWF0cml4X3RoYXcoRXdrX1RpbGVfTWF0cml4ICp0bSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTih0bSk7CisgICAgaWYgKCF0bS0+ZnJvemVuKSB7CisgICAgICAgIEVSUigidGhh
d2luZyBtb3JlIHRoYW4gZnJlZXppbmchIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICB0bS0+ZnJvemVuLS07CisgICAgaWYgKCF0bS0+ZnJvemVuKQorICAgICAgICBld2tfdGlsZV91
bnVzZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKK30KSW5kZXg6IFdlYktpdC9lZmwvZXdrL2V3a190
aWxlZF9tYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0
cml4LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFBy
b0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBld2tfdGlsZWRfbWF0cml4X2gK
KyNkZWZpbmUgZXdrX3RpbGVkX21hdHJpeF9oCisKKyNpbmNsdWRlICJld2tfZWFwaS5oIgorI2lu
Y2x1ZGUgImV3a190aWxlZF9iYWNraW5nX3N0b3JlLmgiCisKKyNpbmNsdWRlIDxFdmFzLmg+CisK
Ky8qIG1hdHJpeCBvZiB0aWxlcyAqLworRUFQSSBFd2tfVGlsZV9NYXRyaXggKmV3a190aWxlX21h
dHJpeF9uZXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHVuc2lnbmVkIGxvbmcgY29scywg
dW5zaWduZWQgbG9uZyByb3dzLCBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlLCB2b2lkICgqcmVuZGVy
X2NiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0
ZSksIGNvbnN0IHZvaWQgKmRhdGEpOworRUFQSSB2b2lkICAgICAgICAgZXdrX3RpbGVfbWF0cml4
X2ZyZWUoRXdrX1RpbGVfTWF0cml4ICp0bSk7CisKK0VBUEkgdm9pZCAgICAgICAgIGV3a190aWxl
X21hdHJpeF9yZXNpemUoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2xzLCB1
bnNpZ25lZCBsb25nIHJvd3MpOworCitFQVBJIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3Rp
bGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXdrX1RpbGVfTWF0cml4ICp0bSk7CisK
K0VBUEkgRXdrX1RpbGUgICAgICpld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdrX1Rp
bGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGludCByb3csIGZsb2F0
IHpvb20pOworRUFQSSBFaW5hX0Jvb2wgICAgIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4
aXN0cyhFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgaW50
IHJvdywgZmxvYXQgem9vbSk7CitFQVBJIEV3a19UaWxlICAgICAqZXdrX3RpbGVfbWF0cml4X3Rp
bGVfbmVhcmVzdF9nZXQoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVu
c2lnbmVkIGludCByb3csIGZsb2F0IHpvb20pOworRUFQSSBFd2tfVGlsZSAgICAgKmV3a190aWxl
X21hdHJpeF90aWxlX25ldyhFd2tfVGlsZV9NYXRyaXggKnRtLCBFdmFzICpldmFzLCB1bnNpZ25l
ZCBsb25nIGNvbCwgdW5zaWduZWQgaW50IHJvdywgZmxvYXQgem9vbSk7CitFQVBJIEVpbmFfQm9v
bCBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXdrX1RpbGUg
KnQsIGRvdWJsZSBsYXN0X3VzZWQpOworCitFQVBJIEVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhf
dGlsZV91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2ln
bmVkIGludCByb3csIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpOworRUFQSSBFaW5hX0Jv
b2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlX2Z1bGwoRXdrX1RpbGVfTWF0cml4ICp0bSwg
dW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGludCByb3cpOworRUFQSSB2b2lkIGV3a190aWxl
X21hdHJpeF90aWxlX3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXdrX1RpbGUg
KnQpOworCitFQVBJIEVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3a19UaWxlX01h
dHJpeCAqdG0sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUsIGZsb2F0IHpvb20pOworRUFQ
SSB2b2lkICAgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZV9NYXRy
aXggKnRtKTsKK0VBUEkgdm9pZCAgICAgIGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKEV3
a19UaWxlX01hdHJpeCAqdG0pOworRUFQSSB2b2lkICAgICAgZXdrX3RpbGVfbWF0cml4X2ZyZWV6
ZShFd2tfVGlsZV9NYXRyaXggKnRtKTsKK0VBUEkgdm9pZCAgICAgIGV3a190aWxlX21hdHJpeF90
aGF3KEV3a19UaWxlX01hdHJpeCAqdG0pOworCisvLyByZW1vdmUgbWUhCisgICAgdm9pZCBld2tf
dGlsZV9tYXRyaXhfZGJnKGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdG0pOworICAgIHZvaWQgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX2RiZyhjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yyk7
CisgICAgdm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2RiZyh2b2lkKTsKKworCisjZW5kaWYgLy8g
ZXdrX3RpbGVkX21hdHJpeF9oCisKSW5kZXg6IFdlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2Rl
bC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jCShyZXZp
c2lvbiAwKQorKysgV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmMJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsOTA1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1
bmcgRWxlY3Ryb25pY3MKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1i
ZWRkZWQgc3lzdGVtcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdGls
ZWRfbW9kZWwuaCIKKworI2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgImV3a190aWxlZF9i
YWNraW5nX3N0b3JlLmgiCisjaW5jbHVkZSAiZXdrX3RpbGVkX3ByaXZhdGUuaCIKKyNpbmNsdWRl
IDxFaW5hLmg+CisjaW5jbHVkZSA8ZWluYV9zYWZldHlfY2hlY2tzLmg+CisjaW5jbHVkZSA8ZXJy
bm8uaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+IC8vIFhYWCBS
RU1PVkUgTUUgTEFURVIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4K
KworI2lmZGVmIFRJTEVfU1RBVFNfQUNDT1VOVF9SRU5ERVJfVElNRQorI2luY2x1ZGUgPHN5cy90
aW1lLmg+CisjZW5kaWYKKworI2lmbmRlZiBDQUlST19GT1JNQVRfUkdCMTZfNTY1CisjZGVmaW5l
IENBSVJPX0ZPUk1BVF9SR0IxNl81NjUgNAorI2VuZGlmCisKKyNkZWZpbmUgSURYKGNvbCwgcm93
LCByb3dzcGFuKSAoY29sICsgKHJvdyAqIHJvd3NwYW4pKQorI2RlZmluZSBNSU4oYSwgYikgKChh
IDwgYikgPyBhIDogYikKKyNkZWZpbmUgTUFYKGEsIGIpICgoYSA+IGIpID8gYSA6IGIpCisKKyNp
ZmRlZiBERUJVR19NRU1fTEVBS1MKK3N0YXRpYyB1aW50NjRfdCB0aWxlc19hbGxvY2F0ZWQgPSAw
Oworc3RhdGljIHVpbnQ2NF90IHRpbGVzX2ZyZWVkID0gMDsKK3N0YXRpYyB1aW50NjRfdCBieXRl
c19hbGxvY2F0ZWQgPSAwOworc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2ZyZWVkID0gMDsKKworc3Ry
dWN0IHRpbGVfYWNjb3VudCB7CisgICAgRXZhc19Db29yZCBzaXplOworICAgIHN0cnVjdCB7Cisg
ICAgICAgIHVpbnQ2NF90IGFsbG9jYXRlZDsKKyAgICAgICAgdWludDY0X3QgZnJlZWQ7CisgICAg
fSB0aWxlcywgYnl0ZXM7Cit9OworCitzdGF0aWMgc2l6ZV90IGFjY291bnRpbmdfbGVuID0gMDsK
K3N0YXRpYyBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2NvdW50aW5nID0gTlVMTDsKKworc3RhdGlj
IGlubGluZSBzdHJ1Y3QgdGlsZV9hY2NvdW50ICpfZXdrX3RpbGVfYWNjb3VudF9nZXQoY29uc3Qg
RXdrX1RpbGUgKnQpCit7CisgICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjOworICAgIHNpemVf
dCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IGFjY291bnRpbmdfbGVuOyBpKyspIHsKKyAgICAg
ICAgaWYgKGFjY291bnRpbmdbaV0uc2l6ZSA9PSB0LT53KQorICAgICAgICAgICAgcmV0dXJuIGFj
Y291bnRpbmcgKyBpOworICAgIH0KKworICAgIGkgPSAoYWNjb3VudGluZ19sZW4gKyAxKSAqIHNp
emVvZihzdHJ1Y3QgdGlsZV9hY2NvdW50KTsKKyAgICBSRUFMTE9DX09SX09PTV9SRVQoYWNjb3Vu
dGluZywgaSwgTlVMTCk7CisKKyAgICBhY2MgPSBhY2NvdW50aW5nICsgYWNjb3VudGluZ19sZW47
CisgICAgYWNjLT5zaXplID0gdC0+dzsKKyAgICBhY2MtPnRpbGVzLmFsbG9jYXRlZCA9IDA7Cisg
ICAgYWNjLT50aWxlcy5mcmVlZCA9IDA7CisgICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQgPSAwOwor
ICAgIGFjYy0+Ynl0ZXMuZnJlZWQgPSAwOworCisgICAgYWNjb3VudGluZ19sZW4rKzsKKworICAg
IHJldHVybiBhY2M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9h
bGxvY2F0ZWQoY29uc3QgRXdrX1RpbGUgKnQpCit7CisgICAgc3RydWN0IHRpbGVfYWNjb3VudCAq
YWNjID0gX2V3a190aWxlX2FjY291bnRfZ2V0KHQpOworICAgIGlmICghYWNjKQorICAgICAgICBy
ZXR1cm47CisgICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7CisgICAgYWNjLT50
aWxlcy5hbGxvY2F0ZWQrKzsKKworICAgIGJ5dGVzX2FsbG9jYXRlZCArPSB0LT5ieXRlczsKKyAg
ICB0aWxlc19hbGxvY2F0ZWQrKzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9h
Y2NvdW50X2ZyZWVkKGNvbnN0IEV3a19UaWxlICp0KQoreworICAgIHN0cnVjdCB0aWxlX2FjY291
bnQgKmFjYyA9IF9ld2tfdGlsZV9hY2NvdW50X2dldCh0KTsKKyAgICBpZiAoIWFjYykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYWNjLT5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKKyAgICBhY2Mt
PnRpbGVzLmZyZWVkKys7CisKKyAgICBieXRlc19mcmVlZCArPSB0LT5ieXRlczsKKyAgICB0aWxl
c19mcmVlZCsrOworfQorCit2b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCit7Cisg
ICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjOworICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFj
Y19lbmQ7CisKKyAgICBwcmludGYoIlRJTEUgQkFMQU5DRTogdGlsZXNbKyUiUFJJdTY0IiwtJSJQ
Ukl1NjQiOiUiUFJJdTY0Il0gIgorICAgICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1
NjQiOiUiUFJJdTY0Il1cbiIsCisgICAgICAgICAgICB0aWxlc19hbGxvY2F0ZWQsIHRpbGVzX2Zy
ZWVkLCB0aWxlc19hbGxvY2F0ZWQgLSB0aWxlc19mcmVlZCwKKyAgICAgICAgICAgIGJ5dGVzX2Fs
bG9jYXRlZCwgYnl0ZXNfZnJlZWQsIGJ5dGVzX2FsbG9jYXRlZCAtIGJ5dGVzX2ZyZWVkKTsKKwor
ICAgIGlmICghYWNjb3VudGluZ19sZW4pCisgICAgICAgIHJldHVybjsKKworICAgIGFjYyA9IGFj
Y291bnRpbmc7CisgICAgYWNjX2VuZCA9IGFjYyArIGFjY291bnRpbmdfbGVuOworICAgIHByaW50
ZigiQkVHSU46IFRJTEUgQkFMQU5DRSBERVRBSUxTIChUTyBUSElTIE1PTUVOVCEpOlxuIik7Cisg
ICAgZm9yICg7IGFjYyA8IGFjY19lbmQ7IGFjYysrKSB7CisgICAgICAgIHVpbnQ2NF90IHRpbGVz
LCBieXRlczsKKworICAgICAgICB0aWxlcyA9IGFjYy0+dGlsZXMuYWxsb2NhdGVkIC0gYWNjLT50
aWxlcy5mcmVlZDsKKyAgICAgICAgYnl0ZXMgPSBhY2MtPmJ5dGVzLmFsbG9jYXRlZCAtIGFjYy0+
Ynl0ZXMuZnJlZWQ7CisKKyAgICAgICAgcHJpbnRmKCIgICAlNGQ6IHRpbGVzWyslNCJQUkl1NjQi
LC0lNCJQUkl1NjQiOiU0IlBSSXU2NCJdICIKKyAgICAgICAgICAgICAgICJieXRlc1srJTgiUFJJ
dTY0IiwtJTgiUFJJdTY0IjolOCJQUkl1NjQiXSVzXG4iLAorICAgICAgICAgICAgICAgYWNjLT5z
aXplLAorICAgICAgICAgICAgICAgYWNjLT50aWxlcy5hbGxvY2F0ZWQsIGFjYy0+dGlsZXMuZnJl
ZWQsIHRpbGVzLAorICAgICAgICAgICAgICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQsIGFjYy0+Ynl0
ZXMuZnJlZWQsIGJ5dGVzLAorICAgICAgICAgICAgICAgKGJ5dGVzIHx8IHRpbGVzKSA/ICIgUE9T
U0lCTEUgTEVBSyIgOiAiIik7CisgICAgfQorICAgIHByaW50ZigiRU5EOiBUSUxFIEJBTEFOQ0Ug
REVUQUlMUyAoVE8gVEhJUyBNT01FTlQhKTpcbiIpOworfQorI2Vsc2UKKworc3RhdGljIGlubGlu
ZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZChjb25zdCBFd2tfVGlsZSAqdCkgeyB9
CitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdrX1Rp
bGUgKnQpIHsgfQorCit2b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCit7CisgICAg
cHJpbnRmKCJjb21waWxlIHdlYmtpdCB3aXRoIERFQlVHX01FTV9MRUFLUyBkZWZpbmVkIVxuIik7
Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludF9yZ2I4ODgo
RXdrX1RpbGUgKnQsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIpCit7CisgICAgdWlu
dDMyX3QgKmRzdDMyLCAqZHN0MzJfZW5kLCBjMTsKKyAgICB1aW50NjRfdCAqZHN0NjQsICpkc3Q2
NF9lbmQsIGMyOworCisgICAgYzEgPSAweGZmMDAwMDAwIHwgKCh1aW50MzJfdClyIDw8IDE2KSB8
ICgodWludDMyX3QpZyA8PCA4KSB8IGI7CisgICAgYzIgPSAoKHVpbnQ2NF90KWMxIDw8IDMyKSB8
IGMxOworCisgICAgZHN0NjQgPSAodWludDY0X3QgKil0LT5waXhlbHM7CisgICAgZHN0NjRfZW5k
ID0gZHN0NjQgKyAoKHQtPmJ5dGVzIC8gOCkgJiB+Nyk7CisgICAgZm9yICg7IGRzdDY0IDwgZHN0
NjRfZW5kOyBkc3Q2NCArPSA4KSB7CisgICAgICAgIC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5F
T04gaW5zdHJ1Y3Rpb25zICovCisgICAgICAgIGRzdDY0WzBdID0gYzI7CisgICAgICAgIGRzdDY0
WzFdID0gYzI7CisgICAgICAgIGRzdDY0WzJdID0gYzI7CisgICAgICAgIGRzdDY0WzNdID0gYzI7
CisgICAgICAgIGRzdDY0WzRdID0gYzI7CisgICAgICAgIGRzdDY0WzVdID0gYzI7CisgICAgICAg
IGRzdDY0WzZdID0gYzI7CisgICAgICAgIGRzdDY0WzddID0gYzI7CisgICAgfQorCisgICAgZHN0
MzIgPSAodWludDMyX3QgKilkc3Q2NF9lbmQ7CisgICAgZHN0MzJfZW5kID0gKHVpbnQzMl90ICop
KHQtPnBpeGVscyArIHQtPmJ5dGVzKTsKKyAgICBmb3IgKDsgZHN0MzIgPCBkc3QzMl9lbmQ7IGRz
dDMyKyspCisgICAgICAgICpkc3QzMiA9IGMxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlX3BhaW50X3JnYjU2NShFd2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVp
bnQ4X3QgYikKK3sKKyAgICB1aW50MTZfdCAqZHN0MTYsICpkc3QxNl9lbmQsIGMxOworICAgIHVp
bnQ2NF90ICpkc3Q2NCwgKmRzdDY0X2VuZCwgYzI7CisKKyAgICBjMSA9ICgoKChyID4+IDMpICYg
MHgxZikgPDwgMTEpIHwKKyAgICAgICAgICAoKChnID4+IDIpICYgMHgzZikgPDwgNSkgfAorICAg
ICAgICAgICgoYiA+PiAzKSAmIDB4MWYpKTsKKworICAgIGMyID0gKCgodWludDY0X3QpYzEgPDwg
NDgpIHwgKCh1aW50NjRfdCljMSA8PCAzMikgfAorICAgICAgICAgICgodWludDY0X3QpYzEgPDwg
MTYpIHwgYzEpOworCisgICAgZHN0NjQgPSAodWludDY0X3QgKil0LT5waXhlbHM7CisgICAgZHN0
NjRfZW5kID0gZHN0NjQgKyAoKHQtPmJ5dGVzIC8gOCkgJiB+Nyk7CisgICAgZm9yICg7IGRzdDY0
IDwgZHN0NjRfZW5kOyBkc3Q2NCArPSA4KSB7CisgICAgICAgIC8qIFRPRE86IEFSTSBhZGQgcGxk
IG9yIE5FT04gaW5zdHJ1Y3Rpb25zICovCisgICAgICAgIGRzdDY0WzBdID0gYzI7CisgICAgICAg
IGRzdDY0WzFdID0gYzI7CisgICAgICAgIGRzdDY0WzJdID0gYzI7CisgICAgICAgIGRzdDY0WzNd
ID0gYzI7CisgICAgICAgIGRzdDY0WzRdID0gYzI7CisgICAgICAgIGRzdDY0WzVdID0gYzI7Cisg
ICAgICAgIGRzdDY0WzZdID0gYzI7CisgICAgICAgIGRzdDY0WzddID0gYzI7CisgICAgfQorCisg
ICAgZHN0MTYgPSAodWludDE2X3QgKilkc3QxNl9lbmQ7CisgICAgZHN0MTZfZW5kID0gKHVpbnQx
Nl90ICopKHQtPnBpeGVscyArIHQtPmJ5dGVzKTsKKyAgICBmb3IgKDsgZHN0MTYgPCBkc3QxNl9l
bmQ7IGRzdDE2KyspCisgICAgICAgICpkc3QxNiA9IGMxOworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgX2V3a190aWxlX3BhaW50KEV3a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWlu
dDhfdCBiKQoreworICAgIGlmICh0LT5jc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4
KQorICAgICAgICBfZXdrX3RpbGVfcGFpbnRfcmdiODg4KHQsIHIsIGcsIGIpOworICAgIGVsc2Ug
aWYgKHQtPmNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfUkdCNTY1X0E1UCkKKyAgICAgICAgX2V3
a190aWxlX3BhaW50X3JnYjU2NSh0LCByLCBnLCBiKTsKKyAgICBlbHNlCisgICAgICAgIEVSUigi
dW5rbm93biBjb2xvciBzcGFjZTogJWQiLCB0LT5jc3BhY2UpOworfQorCisvKioKKyAqIENyZWF0
ZSBhIG5ldyB0aWxlIG9mIGdpdmVuIHNpemUsIHpvb20gbGV2ZWwgYW5kIGNvbG9yc3BhY2UuCisg
KgorICogQWZ0ZXIgY3JlYXRlZCB0aGVzZSBwcm9wZXJ0aWVzIGFyZSBpbW11dGFibGUgYXMgdGhl
eSdyZSB0aGUgYmFzaWMKKyAqIGNoYXJhY3RlcmlzdGljIG9mIHRoZSB0aWxlIGFuZCBhbnkgY2hh
bmdlIHdpbGwgbGVhZCB0byBpbnZhbGlkCisgKiBtZW1vcnkgYWNjZXNzLgorICoKKyAqIE90aGVy
IG1lbWJlcnMgYXJlIG9mIGZyZWUtYWNjZXNzIGFuZCBubyBnZXR0ZXJzL3NldHRlcnMgYXJlCisg
KiBwcm92aWRlZCBpbiBvcmRlcnIgdG8gYXZvaWQgZXhwZW5zaXZlIG9wZXJhdGlvbnMgb24gdGhv
c2UsIGhvd2V2ZXIKKyAqIHNvbWUgYXJlIGJldHRlciBtYW5pcHVsYXRlZCB3aXRoIHByb3ZpZGVk
IGZ1bmN0aW9ucywgc3VjaCBhcworICogZXdrX3RpbGVfc2hvdygpIGFuZCBld2tfdGlsZV9oaWRl
KCkgdG8gY2hhbmdlCisgKiBAYyB2aXNpYmxlIG9yIGV3a190aWxlX3VwZGF0ZV9mdWxsKCksIGV3
a190aWxlX3VwZGF0ZV9hcmVhKCksCisgKiBld2tfdGlsZV91cGRhdGVzX2NsZWFyKCkgdG8gY2hh
bmdlIEBjIHN0YXRzLm1pc3NlcywKKyAqIEBjIHN0YXRzLmZ1bGxfdXBkYXRlIGFuZCBAYyB1cGRh
dGVzLgorICovCitFd2tfVGlsZSAqZXdrX3RpbGVfbmV3KEV2YXMgKmV2YXMsIEV2YXNfQ29vcmQg
dywgRXZhc19Db29yZCBoLCBmbG9hdCB6b29tLCBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlKQorewor
ICAgIEVpbmFfSW5saXN0ICpsOworICAgIEV2YXNfQ29vcmQgKmVjOworICAgIEV2YXNfQ29sb3Jz
cGFjZSAqZWNzOworICAgIGZsb2F0ICpmOworICAgIHNpemVfdCAqczsKKyAgICBFd2tfVGlsZSAq
dDsKKyAgICB1bnNpZ25lZCBpbnQgYXJlYTsKKyAgICBzaXplX3QgYnl0ZXM7CisgICAgY2Fpcm9f
Zm9ybWF0X3QgZm9ybWF0OworICAgIGNhaXJvX3N0YXR1c190IHN0YXR1czsKKyAgICBpbnQgc3Ry
aWRlOworCisgICAgYXJlYSA9IHcgKiBoOworCisgICAgaWYgKGNzcGFjZSA9PSBFVkFTX0NPTE9S
U1BBQ0VfQVJHQjg4ODgpIHsKKyAgICAgICAgYnl0ZXMgPSBhcmVhICogNDsKKyAgICAgICAgc3Ry
aWRlID0gdyAqIDQ7CisgICAgICAgIGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0IyNDsKKyAgICB9
IGVsc2UgaWYgKGNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfUkdCNTY1X0E1UCkgeworICAgICAg
ICBieXRlcyA9IGFyZWEgKiAyOworICAgICAgICBzdHJpZGUgPSB3ICogMjsKKyAgICAgICAgZm9y
bWF0ID0gQ0FJUk9fRk9STUFUX1JHQjE2XzU2NTsKKyAgICB9IGVsc2UgeworICAgICAgICBFUlIo
InVua25vd24gY29sb3Igc3BhY2U6ICVkIiwgY3NwYWNlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorCisgICAgREJHKCJzaXplOiAlZHglZCAoJWQpLCB6b29tOiAlZiwgY3NwYWNlPSVk
IiwKKyAgICAgICAgdywgaCwgYXJlYSwgKGRvdWJsZSl6b29tLCBjc3BhY2UpOworCisgICAgTUFM
TE9DX09SX09PTV9SRVQodCwgc2l6ZW9mKEV3a19UaWxlKSwgTlVMTCk7CisgICAgdC0+aW1hZ2Ug
PSBldmFzX29iamVjdF9pbWFnZV9hZGQoZXZhcyk7CisKKyAgICBsID0gRUlOQV9JTkxJU1RfR0VU
KHQpOworICAgIGwtPnByZXYgPSBOVUxMOworICAgIGwtPm5leHQgPSBOVUxMOworCisgICAgdC0+
dmlzaWJsZSA9IDA7CisgICAgdC0+dXBkYXRlcyA9IE5VTEw7CisKKyAgICBtZW1zZXQoJnQtPnN0
YXRzLCAwLCBzaXplb2YoRXdrX1RpbGVfU3RhdHMpKTsKKyAgICB0LT5zdGF0cy5hcmVhID0gYXJl
YTsKKworICAgIC8qIHVnbHksIGJ1dCBsZXQncyBhdm9pZCBhdCBhbGwgY29zdHMgaGF2aW5nIHVz
ZXJzIHRvIG1vZGlmeSB0aG9zZSAqLworICAgIGVjID0gKEV2YXNfQ29vcmQgKikmdC0+dzsKKyAg
ICAqZWMgPSB3OworCisgICAgZWMgPSAoRXZhc19Db29yZCAqKSZ0LT5oOworICAgICplYyA9IGg7
CisKKyAgICBlY3MgPSAoRXZhc19Db2xvcnNwYWNlICopJnQtPmNzcGFjZTsKKyAgICAqZWNzID0g
Y3NwYWNlOworCisgICAgZiA9IChmbG9hdCAqKSZ0LT56b29tOworICAgICpmID0gem9vbTsKKwor
ICAgIHMgPSAoc2l6ZV90ICopJnQtPmJ5dGVzOworICAgICpzID0gYnl0ZXM7CisKKyAgICBldmFz
X29iamVjdF9pbWFnZV9zaXplX3NldCh0LT5pbWFnZSwgdC0+dywgdC0+aCk7CisgICAgZXZhc19v
YmplY3RfaW1hZ2VfY29sb3JzcGFjZV9zZXQodC0+aW1hZ2UsIHQtPmNzcGFjZSk7CisgICAgdC0+
cGl4ZWxzID0gZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQodC0+aW1hZ2UsIEVJTkFfVFJVRSk7
CisgICAgdC0+c3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhCisg
ICAgICAgICh0LT5waXhlbHMsIGZvcm1hdCwgdywgaCwgc3RyaWRlKTsKKyAgICBzdGF0dXMgPSBj
YWlyb19zdXJmYWNlX3N0YXR1cyh0LT5zdXJmYWNlKTsKKyAgICBpZiAoc3RhdHVzICE9IENBSVJP
X1NUQVRVU19TVUNDRVNTKSB7CisgICAgICAgIEVSUigiZmFpbGVkIHRvIGNyZWF0ZSBjYWlybyBz
dXJmYWNlOiAlcyIsCisgICAgICAgICAgICBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykp
OworICAgICAgICBmcmVlKHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB0
LT5jYWlybyA9IGNhaXJvX2NyZWF0ZSh0LT5zdXJmYWNlKTsKKyAgICBzdGF0dXMgPSBjYWlyb19z
dGF0dXModC0+Y2Fpcm8pOworICAgIGlmIChzdGF0dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1Mp
IHsKKyAgICAgICAgRVJSKCJmYWlsZWQgdG8gY3JlYXRlIGNhaXJvOiAlcyIsIGNhaXJvX3N0YXR1
c190b19zdHJpbmcoc3RhdHVzKSk7CisgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5z
dXJmYWNlKTsKKyAgICAgICAgZXZhc19vYmplY3RfZGVsKHQtPmltYWdlKTsKKyAgICAgICAgZnJl
ZSh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgX2V3a190aWxlX2FjY291
bnRfYWxsb2NhdGVkKHQpOworCisgICAgcmV0dXJuIHQ7Cit9CisKKy8qKgorICogRnJlZSB0aWxl
IG1lbW9yeS4KKyAqLwordm9pZCBld2tfdGlsZV9mcmVlKEV3a19UaWxlICp0KQoreworICAgIF9l
d2tfdGlsZV9hY2NvdW50X2ZyZWVkKHQpOworCisgICAgaWYgKHQtPnVwZGF0ZXMpCisgICAgICAg
IGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKKworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJv
eSh0LT5zdXJmYWNlKTsKKyAgICBjYWlyb19kZXN0cm95KHQtPmNhaXJvKTsKKyAgICBldmFzX29i
amVjdF9kZWwodC0+aW1hZ2UpOworICAgIGZyZWUodCk7Cit9CisKKy8qKgorICogTWFrZSB0aGUg
dGlsZSB2aXNpYmxlLCBpbmNyZW1lbnRpbmcgaXRzIGNvdW50ZXIuCisgKi8KK3ZvaWQgZXdrX3Rp
bGVfc2hvdyhFd2tfVGlsZSAqdCkKK3sKKyAgICB0LT52aXNpYmxlKys7CisgICAgZXZhc19vYmpl
Y3Rfc2hvdyh0LT5pbWFnZSk7Cit9CisKKy8qKgorICogRGVjcmVtZW50IHRoZSB2aXNpYmlsaXR5
IGNvdW50ZXIsIG1ha2luZyBpdCBpbnZpc2libGUgaWYgbmVjZXNzYXJ5LgorICovCit2b2lkIGV3
a190aWxlX2hpZGUoRXdrX1RpbGUgKnQpCit7CisgICAgdC0+dmlzaWJsZS0tOworICAgIGlmICgh
dC0+dmlzaWJsZSkKKyAgICAgICAgZXZhc19vYmplY3RfaGlkZSh0LT5pbWFnZSk7Cit9CisKKy8q
KgorICogUmV0dXJucyBFSU5BX1RSVUUgaWYgdGhlIHRpbGUgaXMgdmlzaWJsZSwgRUlOQV9GQUxT
RSBvdGhlcndpc2UuCisgKi8KK0VpbmFfQm9vbCBld2tfdGlsZV92aXNpYmxlX2dldChFd2tfVGls
ZSAqdCkKK3sKKyAgICByZXR1cm4gISF0LT52aXNpYmxlOworfQorCisvKioKKyAqIE1hcmsgd2hv
bGUgdGlsZSBhcyBkaXJ0eSBhbmQgcmVxdWlyaW5nIHVwZGF0ZS4KKyAqLwordm9pZCBld2tfdGls
ZV91cGRhdGVfZnVsbChFd2tfVGlsZSAqdCkKK3sKKyAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVz
IHBlbmRpbmcgdXBkYXRlcz8gKi8KKyAgICB0LT5zdGF0cy5taXNzZXMrKzsKKworICAgIGlmICgh
dC0+c3RhdHMuZnVsbF91cGRhdGUpIHsKKyAgICAgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBF
SU5BX1RSVUU7CisgICAgICAgIGlmICh0LT51cGRhdGVzKSB7CisgICAgICAgICAgICBlaW5hX3Rp
bGVyX2ZyZWUodC0+dXBkYXRlcyk7CisgICAgICAgICAgICB0LT51cGRhdGVzID0gTlVMTDsKKyAg
ICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBNYXJrIHRoZSBzcGVjaWZpYyBzdWJhcmVhIGFz
IGRpcnR5IGFuZCByZXF1aXJpbmcgdXBkYXRlLgorICovCit2b2lkIGV3a190aWxlX3VwZGF0ZV9h
cmVhKEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqcikKK3sKKyAgICAvKiBUT0RP
OiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRlcz8gKi8KKyAgICB0LT5zdGF0cy5taXNzZXMr
KzsKKworICAgIGlmICh0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFyLT54ICYmICFyLT55ICYmIHItPncgPT0gdC0+dyAmJiByLT5oID09IHQtPmgpIHsK
KyAgICAgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7CisgICAgICAgIGlmICh0
LT51cGRhdGVzKSB7CisgICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Cisg
ICAgICAgICAgICB0LT51cGRhdGVzID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCF0LT51cGRhdGVzKSB7CisgICAgICAgIHQtPnVwZGF0ZXMgPSBl
aW5hX3RpbGVyX25ldyh0LT53LCB0LT5oKTsKKyAgICAgICAgaWYgKCF0LT51cGRhdGVzKSB7Cisg
ICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90IGNyZWF0ZSBlaW5hX3RpbGVyICVkeCVkLiIs
IHQtPncsIHQtPmgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisg
ICAgZWluYV90aWxlcl9yZWN0X2FkZCh0LT51cGRhdGVzLCByKTsKK30KKworLyoqCisgKiBGb3Ig
ZWFjaCB1cGRhdGVkIHJlZ2lvbiwgY2FsbCB0aGUgZ2l2ZW4gZnVuY3Rpb24uCisgKgorICogVGhp
cyB3aWxsIG5vdCBjaGFuZ2UgdGhlIHRpbGUgc3RhdGlzdGljcyBvciBjbGVhciB0aGUgcHJvY2Vz
c2VkCisgKiB1cGRhdGVzLCB1c2UgZXdrX3RpbGVfdXBkYXRlc19jbGVhcigpIGZvciB0aGF0Lgor
ICovCit2b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZSAqdCwgdm9pZCAoKmNi
KSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSks
IGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgaWYgKHQtPnN0YXRzLmZ1bGxfdXBkYXRlKSB7Cisg
ICAgICAgIEVpbmFfUmVjdGFuZ2xlIHI7CisgICAgICAgIHIueCA9IDA7CisgICAgICAgIHIueSA9
IDA7CisgICAgICAgIHIudyA9IHQtPnc7CisgICAgICAgIHIuaCA9IHQtPmg7CisjaWZkZWYgVElM
RV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCisgICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWV2
OworICAgICAgICBkb3VibGUgcmVuZGVyX3N0YXJ0OworICAgICAgICBnZXR0aW1lb2ZkYXkoJnRp
bWV2LCBOVUxMKTsKKyAgICAgICAgcmVuZGVyX3N0YXJ0ID0gKGRvdWJsZSl0aW1ldi50dl9zZWMg
KworICAgICAgICAgICAgKCgoZG91YmxlKXRpbWV2LnR2X3VzZWMpIC8gMTAwMDAwMCk7CisjZW5k
aWYKKyAgICAgICAgY2IoKHZvaWQgKilkYXRhLCB0LCAmcik7CisjaWZkZWYgVElMRV9TVEFUU19B
Q0NPVU5UX1JFTkRFUl9USU1FCisgICAgICAgIGdldHRpbWVvZmRheSgmdGltZXYsIE5VTEwpOwor
ICAgICAgICB0LT5zdGF0cy5yZW5kZXJfdGltZSA9IChkb3VibGUpdGltZXYudHZfc2VjICsKKyAg
ICAgICAgICAgICgoKGRvdWJsZSl0aW1ldi50dl91c2VjKSAvIDEwMDAwMDApIC0gcmVuZGVyX3N0
YXJ0OworI2VuZGlmCisgICAgfSBlbHNlIGlmICh0LT51cGRhdGVzKSB7CisgICAgICAgIEVpbmFf
SXRlcmF0b3IgKml0ciA9IGVpbmFfdGlsZXJfaXRlcmF0b3JfbmV3KHQtPnVwZGF0ZXMpOworICAg
ICAgICBFaW5hX1JlY3RhbmdsZSByID0gezAsIDAsIDAsIDB9OworICAgICAgICBpZiAoIWl0cikg
eworICAgICAgICAgICAgQ1JJVElDQUwoImNvdWxkIG5vdCBjcmVhdGUgdGlsZXIgaXRlcmF0b3Ih
Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgRUlOQV9JVEVSQVRP
Ul9GT1JFQUNIKGl0ciwgcikKKyAgICAgICAgICAgIGNiKCh2b2lkICopZGF0YSwgdCwgJnIpOwor
ICAgICAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXRyKTsKKyAgICB9Cit9CisKKy8qKgorICogQ2xl
YXIgYWxsIHVwZGF0ZXMgaW4gcmVnaW9uLCBpZiBhbnkuCisgKgorICogVGhpcyB3aWxsIGNoYW5n
ZSB0aGUgdGlsZSBzdGF0aXN0aWNzLCBzcGVjaWFsbHkgemVybyBzdGF0Lm1pc3NlcworICogYW5k
IHVuc2V0IHN0YXRzLmZ1bGxfdXBkYXRlLiBJZiB0LT51cGRhdGVzIGV4aXN0ZWQsIHRoZW4gaXQg
d2lsbCBiZQorICogZGVzdHJveWVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBj
YWxsZWQgYWZ0ZXIgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKCkgaXMKKyAqIGNhbGxlZC4KKyAq
Lwordm9pZCBld2tfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlICp0KQoreworICAgIC8qIFRP
RE86IHJlbW92ZSBmcm9tIGxpc3Qgb2YgcGVuZGluZyB1cGRhdGVzPyAqLworICAgIHQtPnN0YXRz
Lm1pc3NlcyA9IDA7CisKKyAgICBpZiAodC0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHQt
PnN0YXRzLmZ1bGxfdXBkYXRlID0gMDsKKyAgICBlbHNlIGlmICh0LT51cGRhdGVzKSB7CisgICAg
ICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKKyAgICAgICAgdC0+dXBkYXRlcyA9IE5V
TEw7CisgICAgfQorfQorCit0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlX0Vu
dHJ5IEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeTsKK3N0cnVjdCBfRXdrX1RpbGVfVW51c2Vk
X0NhY2hlX0VudHJ5IHsKKyAgICBFd2tfVGlsZSAqdGlsZTsKKyAgICBpbnQgd2VpZ2h0OworICAg
IHN0cnVjdCB7CisgICAgICAgIHZvaWQgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpOwor
ICAgICAgICB2b2lkICpkYXRhOworICAgIH0gdGlsZV9mcmVlOworfTsKKworc3RydWN0IF9Fd2tf
VGlsZV9VbnVzZWRfQ2FjaGUgeworICAgIHN0cnVjdCB7CisgICAgICAgIEVpbmFfTGlzdCAqbGlz
dDsKKyAgICAgICAgc2l6ZV90IGNvdW50OworICAgICAgICBzaXplX3QgYWxsb2NhdGVkOworICAg
IH0gZW50cmllczsKKyAgICBzdHJ1Y3QgeworICAgICAgICBzaXplX3QgbWF4OyAgLyoqPCB3YXRl
cm1hcmsgKGluIGJ5dGVzKSB0byBzdGFydCBmcmVlaW5nIHRpbGVzICovCisgICAgICAgIHNpemVf
dCB1c2VkOyAvKio8IGluIGJ5dGVzLCBtYXliZSBtb3JlIHRoYW4gbWF4LiAqLworICAgIH0gbWVt
b3J5OworICAgIHN0cnVjdCB7CisgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAgICAg
ICAgZmxvYXQgem9vbTsKKyAgICAgICAgRWluYV9Cb29sIGxvY2tlZDsKKyAgICB9IGxvY2tlZDsK
KyAgICBpbnQgcmVmZXJlbmNlczsKKyAgICB1bnNpZ25lZCBpbnQgZnJvemVuOworICAgIEVpbmFf
Qm9vbCBkaXJ0eToxOworfTsKKworc3RhdGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNI
RV9BTExPQ0FURV9JTklUSUFMID0gMTI4Oworc3RhdGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNF
RF9DQUNIRV9BTExPQ0FURV9TVEVQID0gMTY7CitzdGF0aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5V
U0VEX0NBQ0hFX01BWF9GUkVFID0gMzI7CisKKy8qKgorICogQ2FjaGUgb2YgdW51c2VkIHRpbGVz
ICh0aG9zZSB0aGF0IGFyZSBub3QgdmlzaWJsZSkuCisgKgorICogVGhlIGNhY2hlIG9mIHVudXNl
ZCB0aWxlcy4KKyAqCisgKiBAcGFyYW0gbWF4IGNhY2hlIHNpemUgaW4gYnl0ZXMuCisgKgorICog
QHJldHVybiBuZXdseSBhbGxvY2F0ZWQgY2FjaGUgb2YgdW51c2VkIHRpbGVzLCB1c2UKKyAqICAg
ICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUoKSB0byByZWxlYXNlIHJlc291cmNlcy4g
SWYgbm90CisgKiAgICAgICAgIHBvc3NpYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSwgQGMgTlVMTCBp
cyByZXR1cm5lZC4KKyAqLworRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRf
Y2FjaGVfbmV3KHNpemVfdCBtYXgpCit7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7
CisKKyAgICBDQUxMT0NfT1JfT09NX1JFVCh0dWMsIHNpemVvZihFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUpLCBOVUxMKTsKKworICAgIERCRygidHVjPSVwIiwgdHVjKTsKKyAgICB0dWMtPm1lbW9yeS5t
YXggPSBtYXg7CisgICAgdHVjLT5yZWZlcmVuY2VzID0gMTsKKyAgICByZXR1cm4gdHVjOworfQor
Cit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlICp0dWMsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNf
Q29vcmQgaCwgZmxvYXQgem9vbSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
dWMpOworCisgICAgdHVjLT5sb2NrZWQubG9ja2VkID0gRUlOQV9UUlVFOworICAgIHR1Yy0+bG9j
a2VkLnggPSB4OworICAgIHR1Yy0+bG9ja2VkLnkgPSB5OworICAgIHR1Yy0+bG9ja2VkLncgPSB3
OworICAgIHR1Yy0+bG9ja2VkLmggPSBoOworICAgIHR1Yy0+bG9ja2VkLnpvb20gPSB6b29tOwor
fQorCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYShFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwor
CisgICAgdHVjLT5sb2NrZWQubG9ja2VkID0gRUlOQV9GQUxTRTsKK30KKworLyoqCisgKiBGcmVl
IGNhY2hlIG9mIHVudXNlZCB0aWxlcy4KKyAqCisgKiBUaG9zZSB0aWxlcyB0aGF0IGFyZSBzdGls
bCB2aXNpYmxlIHdpbGwgcmVtYWluIGxpdmUuIFRoZSB1bnVzZWQKKyAqIHRpbGVzIHdpbGwgYmUg
ZnJlZWQuCisgKgorICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoKQorICovCit2
b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisKKyAgICBEQkcoInR1
Yz0lcCwgIgorICAgICAgICAiZW50cmllcz0oY291bnQ6JXpkLCBhbGxvY2F0ZWQ6JXpkKSwgIgor
ICAgICAgICAibWVtb3J5PShtYXg6JXpkLCB1c2VkOiV6ZCkiLAorICAgICAgICB0dWMsIHR1Yy0+
ZW50cmllcy5jb3VudCwgdHVjLT5lbnRyaWVzLmFsbG9jYXRlZCwKKyAgICAgICAgdHVjLT5tZW1v
cnkubWF4LCB0dWMtPm1lbW9yeS51c2VkKTsKKworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9j
bGVhcih0dWMpOworICAgIGZyZWUodHVjKTsKK30KKworLyoqCisgKiBDbGVhciBjYWNoZSBvZiB1
bnVzZWQgdGlsZXMuCisgKgorICogQW55IHRpbGVzIHRoYXQgYXJlIGluIHRoZSBjYWNoZSBhcmUg
ZnJlZWQuIFRoZSBvbmx5IHRpbGVzIHRoYXQgYXJlCisgKiBrZXB0IGFyZSB0aG9zZSB0aGF0IGFy
ZW4ndCBpbiB0aGUgY2FjaGUgKGkuZS4gdGhhdCBhcmUgdmlzaWJsZSkuCisgKi8KK3ZvaWQgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX2NsZWFyKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQorewor
ICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSAqaXRyOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHR1Yyk7CisKKyAgICBpZiAoIXR1Yy0+ZW50cmllcy5jb3VudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgRUlOQV9MSVNUX0ZSRUUodHVjLT5lbnRyaWVzLmxpc3QsIGl0cikg
eworICAgICAgICBpdHItPnRpbGVfZnJlZS5jYihpdHItPnRpbGVfZnJlZS5kYXRhLCBpdHItPnRp
bGUpOworICAgICAgICBmcmVlKGl0cik7CisgICAgfQorCisgICAgdHVjLT5tZW1vcnkudXNlZCA9
IDA7CisgICAgdHVjLT5lbnRyaWVzLmNvdW50ID0gMDsKKyAgICB0dWMtPmRpcnR5ID0gRUlOQV9G
QUxTRTsKK30KKworLyoqCisgKiBIb2xkIHJlZmVyZW5jZSB0byBjYWNoZS4KKyAqCisgKiBAcmV0
dXJuIHNhbWUgcG9pbnRlciBhcyB0YWtlbi4KKyAqCisgKiBAc2VlIGV3a190aWxlX3VudXNlZF9j
YWNoZV91bnJlZigpCisgKi8KK0V3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3JlZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCBOVUxMKTsKKyAgICB0dWMtPnJlZmVyZW5jZXMrKzsK
KyAgICByZXR1cm4gdHVjOworfQorCisvKioKKyAqIFJlbGVhc2UgY2FjaGUgcmVmZXJlbmNlLCBm
cmVlaW5nIGl0IGlmIGl0IGRyb3BzIHRvIHplcm8uCisgKgorICogQHNlZSBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfcmVmKCkKKyAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUoKQorICov
Cit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUg
KnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOworICAgIHR1Yy0+
cmVmZXJlbmNlcy0tOworICAgIGlmICghdHVjLT5yZWZlcmVuY2VzKQorICAgICAgICBld2tfdGls
ZV91bnVzZWRfY2FjaGVfZnJlZSh0dWMpOworfQorCisvKioKKyAqIENoYW5nZSBjYWNoZSBjYXBh
Y2l0eSwgaW4gYnl0ZXMuCisgKgorICogVGhpcyB3aWxsIG5vdCBmbHVzaCBjYWNoZSwgdXNlIGV3
a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaCgpIG9yCisgKiBld2tfdGlsZV91bnVzZWRfY2FjaGVf
YXV0b19mbHVzaCgpIHRvIGRvIHNvLgorICovCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9t
YXhfc2V0KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgbWF4KQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisgICAgdHVjLT5tZW1vcnkubWF4ID0gbWF4
OworfQorCisvKioKKyAqIFJldHJpZXZlIG1heGltdW0gY2FjaGUgY2FwYWNpdHksIGluIGJ5dGVz
LgorICovCitzaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX21heF9nZXQoY29uc3QgRXdrX1Rp
bGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHR1YywgMCk7CisgICAgcmV0dXJuIHR1Yy0+bWVtb3J5Lm1heDsKK30KKworLyoqCisgKiBS
ZXRyaWV2ZSB0aGUgdXNlZCBjYWNoZSBjYXBhY2l0eSwgaW4gYnl0ZXMuCisgKi8KK3NpemVfdCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfdXNlZF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWMpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7Cisg
ICAgcmV0dXJuIHR1Yy0+bWVtb3J5LnVzZWQ7Cit9CisKKy8qKgorICogRmx1c2ggZ2l2ZW4gYW1v
dW50IG9mIGJ5dGVzIGZyb20gY2FjaGUuCisgKgorICogQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0
aW9uLCBuZWFyIEBhIGJ5dGVzIGFyZSBmcmVlZCBmcm9tIGNhY2hlLiBJdAorICogbWF5IGJlIGxl
c3MgaWYgY2FjaGUgZGlkIG5vdCBjb250YWluIHRoYXQgYW1vdW50IG9mIGJ5dGVzIChpZTogYW4K
KyAqIGVtcHR5IGNhY2hlIGhhcyBub3RoaW5nIHRvIGZyZWUhKSBvciBtb3JlIGlmIHRoZSBjYWNo
ZSBqdXN0CisgKiBjb250YWluZWQgb2JqZWN0cyB0aGF0IHdlcmUgbGFyZ2VyIHRoYW4gdGhlIHJl
cXVlc3RlZCBhbW91bnQgKHRoaXMKKyAqIGlzIHVzdWFsbHkgdGhlIGNhc2UpLgorICoKKyAqIEBw
YXJhbSB0dWMgY2FjaGUgb2YgdW51c2VkIHRpbGVzLgorICogQHBhcmFtIGJ5dGVzIGFtb3VudCB0
byBmcmVlLgorICoKKyAqIEByZXR1cm4gYW1vdW50IHJlYWxseSBmcmVlZC4KKyAqCisgKiBAc2Vl
IGV3a190aWxlX3VudXNlZF9jYWNoZV91c2VkX2dldCgpCisgKi8KK3NpemVfdCBld2tfdGlsZV91
bnVzZWRfY2FjaGVfZmx1c2goRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHNpemVfdCBieXRl
cykKK3sKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkgKml0cjsKKyAgICBFaW5hX0xp
c3QgKmwsICpsX25leHQ7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1Yywg
MCk7CisgICAgc2l6ZV90IGRvbmU7CisgICAgdW5zaWduZWQgaW50IGNvdW50OworCisgICAgaWYg
KCF0dWMtPmVudHJpZXMuY291bnQpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChieXRlcyA8
IDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgLyoKKyAgICAgKiBOT1RFOiB0aGUgY2FjaGUg
aXMgYSBGSUZPIHF1ZXVlIGN1cnJlbnRseS4KKyAgICAgKiBEb24ndCBuZWVkIHRvIHNvcnQgYW55
IG1vcmUuCisgICAgICovCisKKyAgICBpZiAodHVjLT5kaXJ0eSkKKyAgICAgICAgdHVjLT5kaXJ0
eSA9IEVJTkFfRkFMU0U7CisKKyAgICBkb25lID0gMDsKKyAgICBjb3VudCA9IDA7CisgICAgRUlO
QV9MSVNUX0ZPUkVBQ0hfU0FGRSh0dWMtPmVudHJpZXMubGlzdCwgbCwgbF9uZXh0LCBpdHIpIHsK
KyAgICAgICAgRXdrX1RpbGUgKnQgPSBpdHItPnRpbGU7CisgICAgICAgIGlmIChkb25lID4gYnl0
ZXMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKHR1Yy0+bG9ja2VkLmxvY2tlZAor
ICAgICAgICAgICAgJiYgdC0+eCArIHQtPncgPiB0dWMtPmxvY2tlZC54CisgICAgICAgICAgICAm
JiB0LT55ICsgdC0+aCA+IHR1Yy0+bG9ja2VkLnkKKyAgICAgICAgICAgICYmIHQtPnggPCB0dWMt
PmxvY2tlZC54ICsgdHVjLT5sb2NrZWQudworICAgICAgICAgICAgJiYgdC0+eSA8IHR1Yy0+bG9j
a2VkLnkgKyB0dWMtPmxvY2tlZC5oCisgICAgICAgICAgICAmJiB0LT56b29tID09IHR1Yy0+bG9j
a2VkLnpvb20pIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGRv
bmUgKz0gc2l6ZW9mKEV3a19UaWxlKSArIGl0ci0+dGlsZS0+Ynl0ZXM7CisgICAgICAgIGl0ci0+
dGlsZV9mcmVlLmNiKGl0ci0+dGlsZV9mcmVlLmRhdGEsIGl0ci0+dGlsZSk7CisgICAgICAgIHR1
Yy0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHR1Yy0+ZW50cmllcy5saXN0
LCBsKTsKKyAgICAgICAgZnJlZShpdHIpOworICAgICAgICBjb3VudCsrOworICAgIH0KKworICAg
IHR1Yy0+bWVtb3J5LnVzZWQgLT0gZG9uZTsKKyAgICB0dWMtPmVudHJpZXMuY291bnQgLT0gY291
bnQ7CisKKyAgICByZXR1cm4gZG9uZTsKK30KKworLyoqCisgKiBGbHVzaCBlbm91Z2ggYnl0ZXMg
dG8gbWFrZSBjYWNoZSB1c2FnZSBsb3dlciB0aGFuIG1heGltdW0uCisgKgorICogSnVzdCBsaWtl
IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaCgpLCBidXQgdGhpcyB3aWxsIG1ha2UgdGhlIGNh
Y2hlCisgKiBmcmVlIGVub3VnaCB0aWxlcyB0byByZXNwZWN0IG1heGltdW0gY2FjaGUgc2l6ZSBh
cyBkZWZpbmVkIHdpdGgKKyAqIGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfc2V0KCkuCisgKgor
ICogVGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCB3aGVuIHN5c3RlbSBiZWNvbWVzIGlk
bGUuIFRoaXMgd2F5CisgKiB3ZSBrZWVwIG1lbW9yeSBsb3cgYnV0IGRvIG5vdCBpbXBhY3QgcGVy
Zm9ybWFuY2Ugd2hlbgorICogY3JlYXRpbmcvZGVsZXRpbmcgdGlsZXMuCisgKi8KK3ZvaWQgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMp
Cit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKyAgICBpZiAodHVjLT5t
ZW1vcnkudXNlZCA8PSB0dWMtPm1lbW9yeS5tYXgpCisgICAgICAgIHJldHVybjsKKyAgICBld2tf
dGlsZV91bnVzZWRfY2FjaGVfZmx1c2godHVjLCB0dWMtPm1lbW9yeS51c2VkIC0gdHVjLT5tZW1v
cnkubWF4KTsKKyAgICBpZiAodHVjLT5tZW1vcnkudXNlZCA+IHR1Yy0+bWVtb3J5Lm1heCkKKyAg
ICAgICAgQ1JJVElDQUwoIkNhY2hlIHN0aWxsIHVzaW5nIHRvbyBtdWNoIG1lbW9yeTogJXpkIEtC
OyBtYXg6ICV6ZCBLQiIsCisgICAgICAgICAgICAgICAgIHR1Yy0+bWVtb3J5LnVzZWQsIHR1Yy0+
bWVtb3J5Lm1heCk7Cit9CisKKy8qKgorICogRmxhZyBjYWNoZSBhcyBkaXJ0eS4KKyAqCisgKiBJ
ZiBjYWNoZSBpcyBkaXJ0eSB0aGVuIG5leHQgZmx1c2ggb3BlcmF0aW9ucyB3aWxsIGhhdmUgdG8g
cmVjb21wdXRlCisgKiB3ZWlnaHQgYW5kIHNvcnQgYWdhaW4gdG8gZmluZCB0aGUgYmVzdCB0aWxl
cyB0byBleHBpcmUuCisgKgorICogT25lIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gdGls
ZSBwcm9wZXJ0aWVzIHRoYXQgbWF5IGNoYW5nZQorICogbGlrZW5lc3Mgb2YgdGlsZSB0byBiZSBm
bHVzaGVkIGNoYW5nZSwgbGlrZSBUaWxlOjpzdGF0cy4KKyAqLwordm9pZCBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfZGlydHkoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgdHVjLT5k
aXJ0eSA9IEVJTkFfVFJVRTsKK30KKworLyoqCisgKiBGcmVlemUgY2FjaGUgdG8gbm90IGRvIG1h
aW50ZW5hbmNlIHRhc2tzLgorICoKKyAqIE1haW50ZW5hbmNlIHRhc2tzIG9wdGltaXplIGNhY2hl
IHVzYWdlLCBidXQgbWF5YmUgd2Uga25vdyB3ZSBzaG91bGQKKyAqIGhvbGQgb24gdGhlbSB1bnRp
bCB3ZSBkbyB0aGUgbGFzdCBvcGVyYXRpb24sIGluIHRoaXMgY2FzZSB3ZSBmcmVlemUKKyAqIHdo
aWxlIG9wZXJhdGluZyBhbmQgdGhlbiB0aGF3IHdoZW4gd2UncmUgZG9uZS4KKyAqCisgKiBAc2Vl
IGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KCkKKyAqLwordm9pZCBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfZnJlZXplKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIHR1Yy0+ZnJv
emVuKys7Cit9CisKKy8qKgorICogVW5mcmVlemVzIG1haW50ZW5hbmNlIHRhc2tzLgorICoKKyAq
IElmIHRoaXMgaXMgdGhlIGxhc3QgY291bnRlcnBhcnQgb2YgZnJlZXplLCB0aGVuIG1haW50ZW5h
bmNlIHRhc2tzCisgKiB3aWxsIHJ1biBpbW1lZGlhdGVseS4KKyAqLwordm9pZCBld2tfdGlsZV91
bnVzZWRfY2FjaGVfdGhhdyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBpZiAo
IXR1Yy0+ZnJvemVuKSB7CisgICAgICAgIEVSUigidGhhd2luZyBtb3JlIHRoYW4gZnJlZXppbmch
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0dWMtPmZyb3plbi0tOworfQorCisv
KioKKyAqIEdldCB0aWxlIGZyb20gY2FjaGUgb2YgdW51c2VkIHRpbGVzLCByZW1vdmluZyBpdCBm
cm9tIHRoZSBjYWNoZS4KKyAqCisgKiBJZiB0aGUgdGlsZSBpcyB1c2VkLCB0aGVuIGl0J3Mgbm90
IGluIGNhY2hlIG9mIHVudXNlZCB0aWxlcywgc28gaXQKKyAqIGlzIHJlbW92ZWQgZnJvbSB0aGUg
Y2FjaGUgYW5kIG1heSBiZSBnaXZlbiBiYWNrIHdpdGgKKyAqIGV3a190aWxlX3VudXNlZF9jYWNo
ZV90aWxlX3B1dCgpLgorICoKKyAqIEBwYXJhbSB0dWMgY2FjaGUgb2YgdW51c2VkIHRpbGVzCisg
KiBAcGFyYW0gdCB0aGUgdGlsZSB0byBiZSByZW1vdmVkIGZyb20gRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlLgorICoKKyAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNzLCAjRUlOQV9GQUxTRSBv
dGhlcndpc2UuCisgKi8KK0VpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQo
RXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV3a19UaWxlICp0KQoreworICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZV9FbnRyeSAqZW50cnk7CisgICAgRWluYV9MaXN0ICplLCAqbDsKKworICAg
IGUgPSBOVUxMOworICAgIEVJTkFfTElTVF9GT1JFQUNIKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBl
bnRyeSkKKyAgICB7CisgICAgICAgIGlmIChlbnRyeS0+dGlsZSA9PSB0KSB7CisgICAgICAgICAg
ICBlID0gbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmICgh
ZSkgeworICAgICAgICBFUlIoInRpbGUgJXAgbm90IGZvdW5kIGluIGNhY2hlICVwIiwgdCwgdHVj
KTsKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgdHVjLT5lbnRyaWVz
LmNvdW50LS07CisgICAgdHVjLT5tZW1vcnkudXNlZCAtPSBzaXplb2YoRXdrX1RpbGUpICsgdC0+
Ynl0ZXM7CisgICAgdHVjLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodHVj
LT5lbnRyaWVzLmxpc3QsIGUpOworICAgIGZyZWUoZW50cnkpOworICAgIC8vIFRPRE8gYXNzdW1l
IGRpcnR5IGZvciBub3csIGJ1dCBtYXkgaXQncyBub3QsCisgICAgLy8gaWYgdGhlIGl0ZW0gd2Fz
IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHF1ZXVlCisgICAgdHVjLT5kaXJ0eSA9IEVJTkFfVFJV
RTsKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKKy8qKgorICogUHV0IHRpbGUgaW50byBj
YWNoZSBvZiB1bnVzZWQgdGlsZXMsIGFkZGluZyBpdCB0byB0aGUgY2FjaGUuCisgKgorICogVGhp
cyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gQGMgdC0+dmlzaWJsZSBpcyBAYyAwIGFuZCBubyBvYmpl
Y3RzIGFyZQorICogdXNpbmcgdGhlIHRpbGUgYW55bW9yZSwgbWFraW5nIGl0IGF2YWlsYWJsZSB0
byBiZSBleHBpcmVkIGFuZCBoYXZlCisgKiBpdHMgbWVtb3J5IHJlcGxhY2VkLgorICoKKyAqIE5v
dGUgdGhhdCB0aWxlcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgZGVsZXRlZCBpZiBjYWNoZSBpcyBm
dWxsLAorICogaW5zdGVhZCB0aGUgY2FjaGUgd2lsbCBoYXZlIG1vcmUgYnl0ZXMgdXNlZCB0aGFu
IG1heGltdW0gYW5kIG9uZQorICogY2FuIGNhbGwgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9f
Zmx1c2goKSB0byBmcmVlIHRoZW0uIFRoaXMgaXMgZG9uZQorICogYmVjYXVzZSB1c3VhbGx5IHdl
IHdhbnQgYSBsYXp5IG9wZXJhdGlvbiBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLgorICoKKyAqIEBw
YXJhbSB0dWMgY2FjaGUgb2YgdW51c2VkIHRpbGVzCisgKiBAcGFyYW0gdCB0aWxlIHRvIGJlIGFk
ZGVkIHRvIGNhY2hlLgorICogQHBhcmFtIHRpbGVfZnJlZV9jYiBmdW5jdGlvbiB1c2VkIHRvIGZy
ZWUgdGlsZXMuCisgKiBAcGFyYW0gZGF0YSBjb250ZXh0IHRvIGdpdmUgYmFjayB0byBAYSB0aWxl
X2ZyZWVfY2IgYXMgZmlyc3QgYXJndW1lbnQuCisgKgorICogQHJldHVybiAjRUlOQV9UUlVFIG9u
IHN1Y2Nlc3MsICNFSU5BX0ZBTFNFIG90aGVyd2lzZS4gSWYgQGMgdC0+dmlzaWJsZQorICogICAg
ICAgICBpcyBub3QgI0VJTkFfRkFMU0UsIHRoZW4gaXQgd2lsbCByZXR1cm4gI0VJTkFfRkFMU0Uu
CisgKgorICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCgpCisgKi8KK0Vp
bmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlICp0dWMsIEV3a19UaWxlICp0LCB2b2lkICgqdGlsZV9mcmVlX2NiKSh2b2lkICpkYXRhLCBF
d2tfVGlsZSAqdCksIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlX0VudHJ5ICplOworCisgICAgaWYgKHQtPnZpc2libGUpIHsKKyAgICAgICAgRVJSKCJ0aWxl
PSVwIGlzIG5vdCB1bnVzZWQgKHZpc2libGU9JWQpIiwgdCwgdC0+dmlzaWJsZSk7CisgICAgICAg
IHJldHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIE1BTExPQ19PUl9PT01fUkVUKGUsIHNp
emVvZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkpLCBFSU5BX0ZBTFNFKTsKKyAgICB0dWMt
PmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9hcHBlbmQodHVjLT5lbnRyaWVzLmxpc3QsIGUpOwor
ICAgIGlmIChlaW5hX2Vycm9yX2dldCgpKSB7CisgICAgICAgIEVSUigiTGlzdCBhbGxvY2F0aW9u
IGZhaWxlZCIpOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAgICBlLT50
aWxlID0gdDsKKyAgICBlLT53ZWlnaHQgPSAwOyAvKiBjYWxjdWxhdGVkIGp1c3QgYmVmb3JlIHNv
cnQgKi8KKyAgICBlLT50aWxlX2ZyZWUuY2IgPSB0aWxlX2ZyZWVfY2I7CisgICAgZS0+dGlsZV9m
cmVlLmRhdGEgPSAodm9pZCAqKWRhdGE7CisKKyAgICB0dWMtPmVudHJpZXMuY291bnQrKzsKKyAg
ICB0dWMtPm1lbW9yeS51c2VkICs9IHNpemVvZihFd2tfVGlsZSkgKyB0LT5ieXRlczsKKyAgICB0
dWMtPmRpcnR5ID0gRUlOQV9UUlVFOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKwordm9p
ZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjKQoreworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSAqaXRyOworICAgIEVpbmFf
TGlzdCAqbDsKKyAgICBpbnQgY291bnQgPSAwOworICAgIHByaW50ZigiQ2FjaGUgb2YgdW51c2Vk
IHRpbGVzOiBlbnRyaWVzOiAlenUvJXp1LCBtZW1vcnk6ICV6dS8lenVcbiIsCisgICAgICAgICAg
IHR1Yy0+ZW50cmllcy5jb3VudCwgdHVjLT5lbnRyaWVzLmFsbG9jYXRlZCwKKyAgICAgICAgICAg
dHVjLT5tZW1vcnkudXNlZCwgdHVjLT5tZW1vcnkubWF4KTsKKworICAgIEVJTkFfTElTVF9GT1JF
QUNIKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBpdHIpIHsKKyAgICAgICAgY29uc3QgRXdrX1RpbGUg
KnQgPSBpdHItPnRpbGU7CisgICAgICAgIHByaW50ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUw
LjNmXSVjIiwKKyAgICAgICAgICAgICAgIHQtPmNvbCwgdC0+cm93LCB0LT53LCB0LT5oLCB0LT56
b29tLAorICAgICAgICAgICAgICAgdC0+dmlzaWJsZSA/ICcqJzogJyAnKTsKKworICAgICAgICBp
ZiAoIShjb3VudCAlIDQpKQorICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KKworICAg
IHByaW50ZigiXG4iKTsKK30KSW5kZXg6IFdlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5oCShyZXZpc2lv
biAwKQorKysgV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBF
bGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRl
ZCBzeXN0ZW1zCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2lmbmRlZiBld2tfdGlsZWRfbW9kZWxfaAorI2RlZmluZSBld2tfdGls
ZWRfbW9kZWxfaAorCisjaW5jbHVkZSAiZXdrX2VhcGkuaCIKKyNpbmNsdWRlICJld2tfdGlsZWRf
YmFja2luZ19zdG9yZS5oIgorCisjaW5jbHVkZSA8RXZhcy5oPgorCisvKiBtb2RlbCAqLworRUFQ
SSBFd2tfVGlsZSAqZXdrX3RpbGVfbmV3KEV2YXMgKmV2YXMsIEV2YXNfQ29vcmQgdywgRXZhc19D
b29yZCBoLCBmbG9hdCB6b29tLCBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlKTsKK0VBUEkgdm9pZCBl
d2tfdGlsZV9mcmVlKEV3a19UaWxlICp0KTsKK0VBUEkgdm9pZCBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfY2xlYXIoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpOworRUFQSSB2b2lkIGV3a190aWxl
X3Nob3coRXdrX1RpbGUgKnQpOworRUFQSSB2b2lkIGV3a190aWxlX2hpZGUoRXdrX1RpbGUgKnQp
OworRWluYV9Cb29sIGV3a190aWxlX3Zpc2libGVfZ2V0KEV3a19UaWxlICp0KTsKK0VBUEkgdm9p
ZCBld2tfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZSAqdCk7CitFQVBJIHZvaWQgZXdrX3RpbGVf
dXBkYXRlX2FyZWEoRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICpyKTsKK0VBUEkg
dm9pZCBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGUgKnQsIHZvaWQgKCpjYikodm9p
ZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpLCBjb25z
dCB2b2lkICpkYXRhKTsKK0VBUEkgdm9pZCBld2tfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxl
ICp0KTsKKworLyogY2FjaGUgb2YgdW51c2VkIHRpbGVzICovCitFQVBJIEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqZXdrX3RpbGVfdW51c2VkX2NhY2hlX25ldyhzaXplX3QgbWF4KTsKK0VBUEkgdm9p
ZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3Jk
IGgsIGZsb2F0IHpvb20pOworRUFQSSB2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tf
YXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yyk7CitFQVBJIHZvaWQgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX2ZyZWUoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpOworRUFQSSBFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYoRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICp0dWMpOworRUFQSSB2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZihFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yyk7CisKK0VBUEkgdm9pZCBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfZGlydHkoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpOworCitFQVBJIHZvaWQgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2ZyZWV6ZShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yyk7CitFQVBJ
IHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0
dWMpOworCitFQVBJIEVpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQoRXdr
X1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV3a19UaWxlICp0KTsKK0VBUEkgRWluYV9Cb29sIGV3
a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywg
RXdrX1RpbGUgKnQsIHZvaWQgKCp0aWxlX2ZyZWVfY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0
KSwgY29uc3Qgdm9pZCAqZGF0YSk7CisKKyNlbmRpZiAvLyBld2tfdGlsZWRfbW9kZWxfaAorCklu
ZGV4OiBXZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfcHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9lZmwvZXdrL2V3a190aWxlZF9wcml2YXRlLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQv
ZWZsL2V3ay9ld2tfdGlsZWRfcHJpdmF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBA
CisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgZXdrX3RpbGVkX3ByaXZhdGVfaAorI2RlZmluZSBld2tfdGlsZWRfcHJpdmF0ZV9o
CisKKy8qIGxvZ2dpbmcgKi8KK2V4dGVybiBpbnQgX2V3a190aWxlZF9sb2dfZG9tOworCisjZGVm
aW5lIENSSVRJQ0FMKC4uLikgRUlOQV9MT0dfRE9NX0NSSVQoX2V3a190aWxlZF9sb2dfZG9tLCBf
X1ZBX0FSR1NfXykKKyNkZWZpbmUgRVJSKC4uLikgRUlOQV9MT0dfRE9NX0VSUihfZXdrX3RpbGVk
X2xvZ19kb20sIF9fVkFfQVJHU19fKQorI2RlZmluZSBXUk4oLi4uKSBFSU5BX0xPR19ET01fV0FS
TihfZXdrX3RpbGVkX2xvZ19kb20sIF9fVkFfQVJHU19fKQorI2RlZmluZSBJTkYoLi4uKSBFSU5B
X0xPR19ET01fSU5GTyhfZXdrX3RpbGVkX2xvZ19kb20sIF9fVkFfQVJHU19fKQorI2RlZmluZSBE
QkcoLi4uKSBFSU5BX0xPR19ET01fREJHKF9ld2tfdGlsZWRfbG9nX2RvbSwgX19WQV9BUkdTX18p
CisjZGVmaW5lIE9PTShvcCwgc2l6ZSkgQ1JJVElDQUwoImNvdWxkIG5vdCAlcyAlemQgYnl0ZXM6
ICVzIiwgb3AsIHNpemUsIHN0cmVycm9yKGVycm5vKSkKKyNkZWZpbmUgTUFMTE9DX09SX09PTV9S
RVQocHRyLCBzaXplLCAuLi4pICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHRyID0gbWFsbG9jKHNpemUpOyAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCFwdHIgJiYgKHNpemUpID4gMCkgeyAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIE9PTSgibWFsbG9jIiwgKHNpemUpKTsgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdo
aWxlICgwKQorCisjZGVmaW5lIENBTExPQ19PUl9PT01fUkVUKHB0ciwgc2l6ZSwgLi4uKSAgICAg
ICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHB0ciA9IGNhbGxvYygxLCBzaXplKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IGlmICghcHRyICYmIChzaXplKSA+IDApIHsgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBP
T00oImNhbGxvYyIsIChzaXplKSk7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4g
X19WQV9BUkdTX187ICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBSRUFM
TE9DX09SX09PTV9SRVQocHRyLCBzaXplLCAuLi4pICAgICAgXAorICAgIGRvIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB2b2lkICpfX3RtcF9wdHI7
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX3RtcF9wdHIgPSByZWFsbG9jKHB0
ciwgc2l6ZSk7ICAgICAgICAgXAorICAgICAgICBpZiAoIV9fdG1wX3B0ciAmJiAoc2l6ZSkgPiAw
KSB7ICAgICAgICAgXAorICAgICAgICAgICAgT09NKCJyZWFsbG9jIiwgKHNpemUpKTsgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAg
XAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBwdHIgPSBfX3RtcF9wdHI7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hp
bGUgKDApCisKKyNlbmRpZiAvLyBld2tfdGlsZWRfcHJpdmF0ZV9oCkluZGV4OiBXZWJLaXQvZWZs
L2V3ay9ld2tfdmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcu
Y3BwCShyZXZpc2lvbiA3MjUxOSkKKysrIFdlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTQsNiArOTQsOSBAQCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0
YSB7CiAgICAgfSBzY3JvbGxzOwogICAgIHVuc2lnbmVkIGludCBpbWg7IC8qKjwgaW5wdXQgbWV0
aG9kIGhpbnRzICovCiAgICAgc3RydWN0IHsKKyAgICAgICAgRWluYV9Cb29sIHZpZXdfY2xlYXJl
ZDoxOworICAgIH0gZmxhZ3M7CisgICAgc3RydWN0IHsKICAgICAgICAgY29uc3QgY2hhciogdXNl
cl9hZ2VudDsKICAgICAgICAgY29uc3QgY2hhciogdXNlcl9zdHlsZXNoZWV0OwogICAgICAgICBj
b25zdCBjaGFyKiBlbmNvZGluZ19kZWZhdWx0OwpAQCAtNzI1LDYgKzcyOCwxMiBAQCBzdGF0aWMg
dm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqCiAKICAgICBldmFzX29iamVjdF9zbWFy
dF9tZW1iZXJfYWRkKHNkLT5iYWNraW5nX3N0b3JlLCBvKTsKICAgICBldmFzX29iamVjdF9zaG93
KHNkLT5iYWNraW5nX3N0b3JlKTsKKyAgICBldmFzX29iamVjdF9wYXNzX2V2ZW50c19zZXQoc2Qt
PmJhY2tpbmdfc3RvcmUsIEVJTkFfVFJVRSk7CisKKyAgICBzZC0+ZXZlbnRzX3JlY3QgPSBldmFz
X29iamVjdF9yZWN0YW5nbGVfYWRkKHNkLT5iYXNlLmV2YXMpOworICAgIGV2YXNfb2JqZWN0X2Nv
bG9yX3NldChzZC0+ZXZlbnRzX3JlY3QsIDAsIDAsIDAsIDApOworICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X21lbWJlcl9hZGQoc2QtPmV2ZW50c19yZWN0LCBvKTsKKyAgICBldmFzX29iamVjdF9zaG93
KHNkLT5ldmVudHNfcmVjdCk7CiAKICAgICBzZC0+bWFpbl9mcmFtZSA9IGV3a19mcmFtZV9hZGQo
c2QtPmJhc2UuZXZhcyk7CiAgICAgaWYgKCFzZC0+bWFpbl9mcmFtZSkgewpAQCAtODE1LDYgKzgy
NCw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGUoRXYKICAgICAgICAg
ICAgIHZpZXctPmFkanVzdFZpZXdTaXplKCk7CiAgICAgICAgIH0KICAgICAgICAgZXZhc19vYmpl
Y3RfcmVzaXplKHNkLT5tYWluX2ZyYW1lLCB3LCBoKTsKKyAgICAgICAgZXZhc19vYmplY3RfcmVz
aXplKHNkLT5ldmVudHNfcmVjdCwgdywgaCk7CiAgICAgICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3Jl
Y3QgPSBFSU5BX1RSVUU7CiAgICAgICAgIHNkLT52aWV3LncgPSB3OwogICAgICAgICBzZC0+dmll
dy5oID0gaDsKQEAgLTgyNyw2ICs4MzcsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRf
Y2FsY3VsYXRlKEV2CiAgICAgaWYgKHNkLT5jaGFuZ2VkLnBvc2l0aW9uICYmICgoeCAhPSBzZC0+
dmlldy54KSB8fCAoeSAhPSBzZC0+dmlldy55KSkpIHsKICAgICAgICAgZXZhc19vYmplY3RfbW92
ZShzZC0+bWFpbl9mcmFtZSwgeCwgeSk7CiAgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc2QtPmJh
Y2tpbmdfc3RvcmUsIHgsIHkpOworICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNkLT5ldmVudHNf
cmVjdCwgeCwgeSk7CiAgICAgICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7
CiAgICAgICAgIHNkLT52aWV3LnggPSB4OwogICAgICAgICBzZC0+dmlldy55ID0geTsKQEAgLTg1
MCw2ICs4NjEsMjUgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdgog
ICAgIH0KIH0KIAorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3Nob3coRXZhc19PYmplY3Qg
Km8pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNkKTsKKyAgICBFV0tfVklFV19QUklWX0dF
VChzZCwgcHJpdik7CisKKyAgICBpZiAoZXZhc19vYmplY3RfY2xpcGVlc19nZXQoc2QtPmJhc2Uu
Y2xpcHBlcikpCisgICAgICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmJhc2UuY2xpcHBlcik7Cisg
ICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+YmFja2luZ19zdG9yZSk7Cit9CisKK3N0YXRpYyB2b2lk
IF9ld2tfdmlld19zbWFydF9oaWRlKEV2YXNfT2JqZWN0ICpvKQoreworICAgIEVXS19WSUVXX1NE
X0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworCisgICAgZXZh
c19vYmplY3RfaGlkZShzZC0+YmFzZS5jbGlwcGVyKTsKKyAgICBldmFzX29iamVjdF9oaWRlKHNk
LT5iYWNraW5nX3N0b3JlKTsKK30KKwogc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRf
Y29udGVudHNfcmVzaXplKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBpbnQgdywgaW50IGgpCiB7
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTg5Nyw2ICs5MjcsMTMgQEAgc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3ZpZXdfc21hcnRfcHJlX3JlbgogICAgIHJldHVybiBFSU5BX0ZBTFNFOwogfQog
CitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9wcmVfcmVuZGVyX3JlbGF0aXZlX3Jh
ZGl1cyhFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgdW5zaWduZWQgaW50IG4sIGZsb2F0IHpvb20p
Cit7CisgICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2luZS4gc2Q9JXAsIG49JXUgem9vbT0l
ZiIsCisgICAgICAgIHNkLCBuLCB6b29tKTsKKyAgICByZXR1cm4gRUlOQV9GQUxTRTsKK30KKwog
c3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3ByZV9yZW5kZXJfY2FuY2VsKEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNkKQogewogICAgIFdSTigibm90IHN1cHBvcnRlZCBieSBlbmdpbmUuIHNkPSVw
Iiwgc2QpOwpAQCAtOTU0LDYgKzk5MSw3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3pv
b21fYW5pbWF0b3IKICAgICAgICAgfHwgKG5vdyA8IHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5z
dGFydCkpIHsKICAgICAgICAgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfZmluaXNoKHNkKTsKICAg
ICAgICAgZXdrX3ZpZXdfem9vbV9zZXQoc2QtPnNlbGYsIHByaXYtPmFuaW1hdGVkX3pvb20uem9v
bS5lbmQsIGN4LCBjeSk7CisgICAgICAgIHNkLT5hcGktPnNjLmNhbGN1bGF0ZShzZC0+c2VsZik7
CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIApAQCAtOTkxLDYgKzEwMjksMTgg
QEAgc3RhdGljIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBfZXdrXwogICAgIHJldHVybiBh
dHRyaWJ1dGVzOwogfQogCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9kaXNhYmxl
X3JlbmRlcihFd2tfVmlld19TbWFydF9EYXRhICpzZCkKK3sKKyAgICBXUk4oIm5vdCBzdXBwb3J0
ZWQgYnkgZW5naW5lLiBzZD0lcCIsIHNkKTsKKyAgICByZXR1cm4gRUlOQV9GQUxTRTsKK30KKwor
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZW5hYmxlX3JlbmRlcihFd2tfVmlld19T
bWFydF9EYXRhICpzZCkKK3sKKyAgICBXUk4oIm5vdCBzdXBwb3J0ZWQgYnkgZW5naW5lLiBzZD0l
cCIsIHNkKTsKKyAgICByZXR1cm4gRUlOQV9GQUxTRTsKK30KKwogLyoqCiAgKiBTZXRzIHRoZSBz
bWFydCBjbGFzcyBhcGkgd2l0aG91dCBhbnkgYmFja2luZyBzdG9yZSwgZW5hYmxpbmcgdmlldwog
ICogdG8gYmUgaW5oZXJpdGVkLgpAQCAtMTAzMCwxMyArMTA4MCwxOCBAQCBFaW5hX0Jvb2wgZXdr
X3ZpZXdfYmFzZV9zbWFydF9zZXQoRXdrX1ZpCiAgICAgYXBpLT5zYy5yZXNpemUgPSBfZXdrX3Zp
ZXdfc21hcnRfcmVzaXplOwogICAgIGFwaS0+c2MubW92ZSA9IF9ld2tfdmlld19zbWFydF9tb3Zl
OwogICAgIGFwaS0+c2MuY2FsY3VsYXRlID0gX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZTsKKyAg
ICBhcGktPnNjLnNob3cgPSBfZXdrX3ZpZXdfc21hcnRfc2hvdzsKKyAgICBhcGktPnNjLmhpZGUg
PSBfZXdrX3ZpZXdfc21hcnRfaGlkZTsKICAgICBhcGktPnNjLmRhdGEgPSBFV0tfVklFV19UWVBF
X1NUUjsgLyogdXNlZCBieSB0eXBlIGNoZWNraW5nICovCiAKICAgICBhcGktPmNvbnRlbnRzX3Jl
c2l6ZSA9IF9ld2tfdmlld19zbWFydF9jb250ZW50c19yZXNpemU7CiAgICAgYXBpLT56b29tX3Nl
dCA9IF9ld2tfdmlld19zbWFydF96b29tX3NldDsKICAgICBhcGktPmZsdXNoID0gX2V3a192aWV3
X3NtYXJ0X2ZsdXNoOwogICAgIGFwaS0+cHJlX3JlbmRlcl9yZWdpb24gPSBfZXdrX3ZpZXdfc21h
cnRfcHJlX3JlbmRlcl9yZWdpb247CisgICAgYXBpLT5wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1
cyA9IF9ld2tfdmlld19zbWFydF9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1czsKICAgICBhcGkt
PnByZV9yZW5kZXJfY2FuY2VsID0gX2V3a192aWV3X3NtYXJ0X3ByZV9yZW5kZXJfY2FuY2VsOwor
ICAgIGFwaS0+ZGlzYWJsZV9yZW5kZXIgPSBfZXdrX3ZpZXdfc21hcnRfZGlzYWJsZV9yZW5kZXI7
CisgICAgYXBpLT5lbmFibGVfcmVuZGVyID0gX2V3a192aWV3X3NtYXJ0X2VuYWJsZV9yZW5kZXI7
CiAKICAgICBhcGktPmZvY3VzX2luID0gX2V3a192aWV3X3NtYXJ0X2ZvY3VzX2luOwogICAgIGFw
aS0+Zm9jdXNfb3V0ID0gX2V3a192aWV3X3NtYXJ0X2ZvY3VzX291dDsKQEAgLTIxNzEsMTAgKzIy
MjYsMTkgQEAgRWluYV9Cb29sIGV3a192aWV3X3pvb21fdGV4dF9vbmx5X3NldChFdgogRWluYV9C
b29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3Jk
IHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20p
CiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+cHJlX3JlbmRlcl9yZWdp
b24sIEVJTkFfRkFMU0UpOwotICAgIGZsb2F0IGN1cl96b29tID0gZXdrX2ZyYW1lX3pvb21fZ2V0
KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBmbG9hdCBjdXJfem9vbTsKICAgICBFdmFzX0Nvb3JkIGN3
LCBjaDsKIAorICAgIC8qIFdoZW4gZG9pbmcgYW5pbWF0ZWQgem9vbSBpdCdzIG5vdCBwb3NzaWJs
ZSB0byBjYWxsIHByZS1yZW5kZXIgc2luY2UgaXQKKyAgICAgKiB3b3VsZCBzY3JldyB1cCBwYXJh
bWV0ZXJzIHRoYXQgYW5pbWF0aW9uIGlzIGN1cnJlbnRseSB1c2luZworICAgICAqLworICAgIGlm
IChwcml2LT5hbmltYXRlZF96b29tLmFuaW1hdG9yKQorICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKKworICAgIGN1cl96b29tID0gZXdrX2ZyYW1lX3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsK
KwogICAgIGlmIChjdXJfem9vbSA8IDAuMDAwMDEpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNF
OwogICAgIGlmICghZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAm
Y3csICZjaCkpCkBAIC0yMjAzLDYgKzIyNjcsMzUgQEAgRWluYV9Cb29sIGV3a192aWV3X3ByZV9y
ZW5kZXJfcmVnaW9uKEV2YQogfQogCiAvKioKKyAqIEhpbnQgZW5naW5lIHRvIHByZS1yZW5kZXIg
cmVnaW9uLCBnaXZlbiBuIGV4dHJhIGNvbHMvcm93cworICoKKyAqIFRoaXMgaXMgYW4gYWx0ZXJu
YXRpdmUgbWV0aG9kIHRvIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9uKCkuIEl0IGRvZXMgbm90
CisgKiBtYWtlIHNlbnNlIGluIGFsbCBlbmdpbmVzIGFuZCB0aGVyZWZvcmUgaXQgbWlnaHQgbm90
IGJlIGltcGxlbWVudGVkIGF0IGFsbC4KKyAqCisgKiBJdCdzIG9ubHkgdXNlZnVsIGlmIGVuZ2lu
ZSBkaXZpZGUgdGhlIGFyZWEgYmVpbmcgcmVuZGVyZWQgaW4gc21hbGxlciB0aWxlcywKKyAqIGZv
cm1pbmcgYSBncmlkLiBUaGVuLCBicm93c2VyIGNvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBw
cmUtcmVuZGVyIEBwYXJhbSBuCisgKiByb3dzL2NvbHMgaW52b2x2aW5nIHRoZSBjdXJyZW50IHZp
ZXdwb3J0LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgdG8gYXNrIHByZS1yZW5kZXIgb24uCisgKiBA
cGFyYW0gbiBudW1iZXIgb2YgY29scy9yb3dzIHRoYXQgbXVzdCBiZSBwYXJ0IG9mIHRoZSByZWdp
b24gcHJlLXJlbmRlcmVkCisgKgorICogQHNlZSBld2tfdmlld19wcmVfcmVuZGVyX3JlZ2lvbigp
CisgKi8KK0VpbmFfQm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFz
X09iamVjdCogbywgdW5zaWduZWQgaW50IG4pCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMsIEVJTkFfRkFMU0UpOworICAg
IGZsb2F0IGN1cl96b29tOworCisgICAgaWYgKHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3Ip
CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAgY3VyX3pvb20gPSBld2tfZnJhbWVf
em9vbV9nZXQoc2QtPm1haW5fZnJhbWUpOworICAgIHJldHVybiBzZC0+YXBpLT5wcmVfcmVuZGVy
X3JlbGF0aXZlX3JhZGl1cyhzZCwgbiwgY3VyX3pvb20pOworfQorCisvKioKICAqIEdldCBpbnB1
dCBtZXRob2QgaGludHMKICAqCiAgKiBAcGFyYW0gbyBWaWV3LgpAQCAtMjIyOCw2ICsyMzIxLDM2
IEBAIHZvaWQgZXdrX3ZpZXdfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmoKICAgICBzZC0+YXBp
LT5wcmVfcmVuZGVyX2NhbmNlbChzZCk7CiB9CiAKKy8qKgorICAqIEVuYWJsZSBwcm9jZXNzaW5n
IG9mIHVwZGF0ZSByZXF1ZXN0cy4KKyAgKgorICAqIEBwYXJhbSBvIHZpZXcgdG8gZW5hYmxlIHJl
bmRlcmluZy4KKyAgKgorICAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHJlbmRlciB3YXMgZW5h
YmxlZCwgQGMgRUlOQV9GQUxTRQorICAgICAgICAgICAgb3RoZXJ3aXNlIChlcnJvcnMsIHJlbmRl
cmluZyBzdXNwZW5zaW9uIG5vdCBzdXBwb3J0ZWQpLgorICAqLworRWluYV9Cb29sIGV3a192aWV3
X2VuYWJsZV9yZW5kZXIoY29uc3QgRXZhc19PYmplY3QgKm8pCit7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5hcGktPmVuYWJsZV9yZW5kZXIsIEVJTkFfRkFMU0UpOworICAgIHJl
dHVybiBzZC0+YXBpLT5lbmFibGVfcmVuZGVyKHNkKTsKK30KKworLyoqCisgICogRGlzYWJsZSBw
cm9jZXNzaW5nIG9mIHVwZGF0ZSByZXF1ZXN0cy4KKyAgKgorICAqIEBwYXJhbSBvIHZpZXcgdG8g
ZGlzYWJsZSByZW5kZXJpbmcuCisgICoKKyAgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiByZW5k
ZXIgd2FzIGRpc2FibGVkLCBAYyBFSU5BX0ZBTFNFCisgICAgICAgICAgICBvdGhlcndpc2UgKGVy
cm9ycywgcmVuZGVyaW5nIHN1c3BlbnNpb24gbm90IHN1cHBvcnRlZCkuCisgICovCitFaW5hX0Jv
b2wgZXdrX3ZpZXdfZGlzYWJsZV9yZW5kZXIoY29uc3QgRXZhc19PYmplY3QgKm8pCit7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPmRpc2FibGVfcmVuZGVyLCBFSU5BX0ZB
TFNFKTsKKyAgICByZXR1cm4gc2QtPmFwaS0+ZGlzYWJsZV9yZW5kZXIoc2QpOworfQorCiBjb25z
dCBjaGFyKiBld2tfdmlld19zZXR0aW5nX3VzZXJfYWdlbnRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBvKQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOwpAQCAtMzk1
Miw3ICs0MDc1LDYgQEAgdm9pZCBld2tfdmlld19zY3JvbGwoRXZhc19PYmplY3QqIG8sIEV2YQog
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CiAgICAgRUlOQV9TQUZF
VFlfT05fVFJVRV9SRVRVUk4oIWR4ICYmICFkeSk7CiAKLSAgICBfZXdrX3ZpZXdfc2Nyb2xsX2Fk
ZChwcml2LCBkeCwgZHksIHN4LCBzeSwgc3csIHNoLCBtYWluX2ZyYW1lKTsKICAgICBfZXdrX3Zp
ZXdfc21hcnRfY2hhbmdlZChzZCk7CiB9CiAKQEAgLTQyODQsNiArNDQwNiw0MiBAQCBmbG9hdCBl
d2tfdmlld19kZXZpY2VfcGl4ZWxfcmF0aW9fZ2V0KEV2CiAgICAgcmV0dXJuIHByaXYtPnNldHRp
bmdzLmRldmljZV9waXhlbF9yYXRpbzsKIH0KIAordm9pZCBld2tfdmlld19kaWRfZmlyc3Rfdmlz
dWFsbHlfbm9uZW1wdHlfbGF5b3V0KEV2YXNfT2JqZWN0ICpvKQoreworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdik7CisgICAgaWYgKCFwcml2LT5mbGFncy52aWV3X2NsZWFyZWQpIHsKKyAgICAgICAg
ZXdrX3ZpZXdfZnJhbWVfbWFpbl9jbGVhcmVkKG8pOworICAgICAgICBld2tfdmlld19lbmFibGVf
cmVuZGVyKG8pOworICAgICAgICBwcml2LT5mbGFncy52aWV3X2NsZWFyZWQgPSBFSU5BX1RSVUU7
CisgICAgfQorfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogRGlzcGF0Y2ggZmluaXNoZWQgbG9h
ZGluZy4KKyAqCisgKiBAcGFyYW0gbyB2aWV3LgorICovCit2b2lkIGV3a192aWV3X2Rpc3BhdGNo
X2RpZF9maW5pc2hfbG9hZGluZyhFdmFzX09iamVjdCAqbykKK3sKKyAgICAvKiBJZiB3ZSByZWFj
aCB0aGlzIHBvaW50IGFuZCByZW5kZXJpbmcgaXMgc3RpbGwgZGlzYWJsZWQsIFdlYkNvcmUgd2ls
bCBub3QKKyAgICAgKiB0cmlnZ2VyIHRoZSBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQg
c2lnbmFsIGFueW1vcmUuIFNvLCB3ZQorICAgICAqIGZvcmNlZnVsbHkgcmUtZW5hYmxlIHRoZSBy
ZW5kZXJpbmcuCisgICAgICovCisgICAgZXdrX3ZpZXdfZGlkX2ZpcnN0X3Zpc3VhbGx5X25vbmVt
cHR5X2xheW91dChvKTsKK30KKwordm9pZCBld2tfdmlld190cmFuc2l0aW9uX3RvX2NvbW1pdGVk
X2Zvcl9uZXdwYWdlKEV2YXNfT2JqZWN0ICpvKQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7
CisKKyAgICBld2tfdmlld19kaXNhYmxlX3JlbmRlcihvKTsKKyAgICBwcml2LT5mbGFncy52aWV3
X2NsZWFyZWQgPSBFSU5BX0ZBTFNFOworfQorCisKIC8qKgogICogQGludGVybmFsCiAgKiBSZXBv
cnRzIGEgcmVxdWVzZXQgd2lsbCBiZSBsb2FkZWQuIEl0J3MgY2xpZW50IHJlc3BvbnNpYmlsaXR5
IHRvIGRlY2lkZSBpZgpJbmRleDogV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oCShyZXZpc2lvbiA3MjUxOSkKKysrIFdlYktp
dC9lZmwvZXdrL2V3a192aWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsMTEgQEAg
c3RydWN0IF9Fd2tfVmlld19TbWFydF9DbGFzcyB7CiAgICAgdm9pZCAoKmJnX2NvbG9yX3NldCko
RXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIHVuc2lnbmVkIGNoYXIgciwgdW5zaWduZWQgY2hhciBn
LCB1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGNoYXIgYSk7CiAgICAgdm9pZCAoKmZsdXNoKShF
d2tfVmlld19TbWFydF9EYXRhICpzZCk7CiAgICAgRWluYV9Cb29sICgqcHJlX3JlbmRlcl9yZWdp
b24pKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwg
RXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pOworICAgIEVpbmFfQm9vbCAo
KnByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgdW5z
aWduZWQgaW50IG4sIGZsb2F0IHpvb20pOwogICAgIHZvaWQgKCpwcmVfcmVuZGVyX2NhbmNlbCko
RXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpOworICAgIEVpbmFfQm9vbCAoKmRpc2FibGVfcmVuZGVy
KShFd2tfVmlld19TbWFydF9EYXRhICpzZCk7CisgICAgRWluYV9Cb29sICgqZW5hYmxlX3JlbmRl
cikoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpOworCiAgICAgLy8gZXZlbnQgaGFuZGxpbmc6CiAg
ICAgLy8gIC0gcmV0dXJucyB0cnVlIGlmIGhhbmRsZWQKICAgICAvLyAgLSBpZiBvdmVycmlkZGVu
LCBoYXZlIHRvIGNhbGwgcGFyZW50IG1ldGhvZCBpZiBkZXNpcmVkCkBAIC0xNTEsNyArMTU1LDcg
QEAgc3RydWN0IF9Fd2tfVmlld19TbWFydF9DbGFzcyB7CiAgKiBAc2VlIEVXS19WSUVXX1NNQVJU
X0NMQVNTX0lOSVRfVkVSU0lPTgogICogQHNlZSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05B
TUVfVkVSU0lPTgogICovCi0jZGVmaW5lIEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVQoc21hcnRf
Y2xhc3NfaW5pdCkge3NtYXJ0X2NsYXNzX2luaXQsIEVXS19WSUVXX1NNQVJUX0NMQVNTX1ZFUlNJ
T04sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9CisjZGVmaW5lIEVXS19WSUVXX1NNQVJU
X0NMQVNTX0lOSVQoc21hcnRfY2xhc3NfaW5pdCkge3NtYXJ0X2NsYXNzX2luaXQsIEVXS19WSUVX
X1NNQVJUX0NMQVNTX1ZFUlNJT04sIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9
CiAKIC8qKgogICogSW5pdGlhbGl6ZXIgdG8gemVybyBhIHdob2xlIEV3a19WaWV3X1NtYXJ0X0Ns
YXNzIHN0cnVjdHVyZS4KQEAgLTI2OCw2ICsyNzIsNyBAQCBzdHJ1Y3QgX0V3a19WaWV3X1NtYXJ0
X0RhdGEgewogICAgIEV2YXNfT2JqZWN0ICpzZWxmOyAvKio8IHJlZmVyZW5jZSB0byBvd25lciBv
YmplY3QgKi8KICAgICBFdmFzX09iamVjdCAqbWFpbl9mcmFtZTsgLyoqPCByZWZlcmVuY2UgdG8g
bWFpbiBmcmFtZSBvYmplY3QgKi8KICAgICBFdmFzX09iamVjdCAqYmFja2luZ19zdG9yZTsgLyoq
PCByZWZlcmVuY2UgdG8gYmFja2luZyBzdG9yZSAqLworICAgIEV2YXNfT2JqZWN0ICpldmVudHNf
cmVjdDsgLyoqPCByZWN0YW5nbGUgdGhhdCBzaG91bGQgcmVjZWl2ZSBtb3VzZSBldmVudHMgKi8K
ICAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEgKl9wcml2OyAvKio8IHNob3VsZCBuZXZlciBiZSBh
Y2Nlc3NlZCwgYysrIHN0dWZmICovCiAgICAgc3RydWN0IHsKICAgICAgICAgRXZhc19Db29yZCB4
LCB5LCB3LCBoOyAvKio8IGxhc3QgdXNlZCB2aWV3cG9ydCAqLwpAQCAtMjkxLDEwICsyOTYsMzYg
QEAgc3RydWN0IF9Fd2tfVmlld19TbWFydF9EYXRhIHsKICAgICB9IGNoYW5nZWQ7CiB9OwogCisv
KioKKyAqIENhY2hlIChwb29sKSB0aGF0IGNvbnRhaW5zIHVudXNlZCB0aWxlcyBmb3IgZXdrX3Zp
ZXdfdGlsZWQuCisgKgorICogVGhpcyBjYWNoZSB3aWxsIG1haW50YWluIHVudXNlZCB0aWxlcyBh
bmQgZmx1c2ggdGhlbSB3aGVuIHRoZSB0b3RhbAorICogbWVtb3J5IGV4Y2VlZHMgdGhlIHNldCBh
bW91bnQgd2hlbgorICogZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goKSBvciBleHBs
aWNpdGx5IHNldCB2YWx1ZSB3aGVuCisgKiBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goKSBp
cyBjYWxsZWQuCisgKgorICogVGhlIHRpbGUgbWF5IGJlIHNoYXJlZCBhbW9uZyBkaWZmZXJlbnQg
ZXdrX3ZpZXdfdGlsZWQgaW5zdGFuY2VzIHRvCisgKiBncm91cCBtYXhpbXVtIHVudXNlZCBtZW1v
cnkgcmVzaWRlbnQgaW4gdGhlIHN5c3RlbS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxl
X1VudXNlZF9DYWNoZSBFd2tfVGlsZV9VbnVzZWRfQ2FjaGU7CitFQVBJIHZvaWQgICBld2tfdGls
ZV91bnVzZWRfY2FjaGVfbWF4X3NldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90
IG1heCk7CitFQVBJIHNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X2dldChjb25zdCBF
d2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yyk7CitFQVBJIHNpemVfdCBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfdXNlZF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpOworRUFQSSBz
aXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjLCBzaXplX3QgYnl0ZXMpOworRUFQSSB2b2lkICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1
dG9fZmx1c2goRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpOworCiBFQVBJIEVpbmFfQm9vbCAg
ICBld2tfdmlld19iYXNlX3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFzcyAqYXBpKTsKIEVB
UEkgRWluYV9Cb29sICAgIGV3a192aWV3X3NpbmdsZV9zbWFydF9zZXQoRXdrX1ZpZXdfU21hcnRf
Q2xhc3MgKmFwaSk7CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld190aWxlZF9zbWFydF9zZXQo
RXdrX1ZpZXdfU21hcnRfQ2xhc3MgKmFwaSk7CiAKIEVBUEkgRXZhc19PYmplY3QgKmV3a192aWV3
X3NpbmdsZV9hZGQoRXZhcyAqZSk7CitFQVBJIEV2YXNfT2JqZWN0ICpld2tfdmlld190aWxlZF9h
ZGQoRXZhcyAqZSk7CisKK0VBUEkgRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdmlld190aWxl
ZF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkgdm9pZCAgICAg
ICAgICAgICAgICAgICBld2tfdmlld190aWxlZF91bnVzZWRfY2FjaGVfc2V0KEV2YXNfT2JqZWN0
ICpvLCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmNhY2hlKTsKKworLy8gRklYTUU6IHRoaXMgZnVu
Y3Rpb24gc2hvdWxkIGJlIHJlbW92ZWQgbGF0ZXIsIHdoZW4gd2UgZmluZCB0aGUgYmVzdCBmbGFn
IHRvIHVzZS4KK0VBUEkgdm9pZCAgICAgICAgICAgICAgICAgICBld2tfdmlld190aWxlZF9wcm9j
ZXNzX2VudGlyZV9xdWV1ZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBmbGFnKTsKIAog
RUFQSSB2b2lkICAgICAgICAgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KEV2YXNfT2Jq
ZWN0ICpvLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCk7CiBFQVBJIHZvaWQgICAgICAgICBl
d2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9nZXQoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQg
KncsIEV2YXNfQ29vcmQgKmgpOwpAQCAtMzcwLDcgKzQwMSwxMCBAQCBFQVBJIEVpbmFfQm9vbCAg
ICBld2tfdmlld196b29tX3RleHRfb25sCiBFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld196b29t
X3RleHRfb25seV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBzZXR0aW5nKTsKIAogRUFQ
SSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8s
IEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwg
ZmxvYXQgem9vbSk7CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19wcmVfcmVuZGVyX3JlbGF0
aXZlX3JhZGl1cyhFdmFzX09iamVjdCAqbywgdW5zaWduZWQgaW50IG4pOwogRUFQSSB2b2lkICAg
ICAgICAgZXdrX3ZpZXdfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmplY3QgKm8pOworRUFQSSBF
aW5hX0Jvb2wgICAgZXdrX3ZpZXdfZW5hYmxlX3JlbmRlcihjb25zdCBFdmFzX09iamVjdCAqbyk7
CitFQVBJIEVpbmFfQm9vbCAgICBld2tfdmlld19kaXNhYmxlX3JlbmRlcihjb25zdCBFdmFzX09i
amVjdCAqbyk7CiAKIEVBUEkgdW5zaWduZWQgaW50IGV3a192aWV3X2ltaF9nZXQoRXZhc19PYmpl
Y3QgKm8pOwogCkluZGV4OiBXZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9lZmwvZXdrL2V3a192aWV3X3RpbGVkLmMJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0
NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNz
CisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3ZpZXcuaCIKKworI2luY2x1
ZGUgImV3a19sb2dnaW5nLmgiCisKKyNpbmNsdWRlIDxFdmFzLmg+CisjaW5jbHVkZSA8ZWluYV9z
YWZldHlfY2hlY2tzLmg+CisjaW5jbHVkZSA8ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaD4KKwor
c3RhdGljIEV3a19WaWV3X1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2MgPSBFV0tfVklFV19TTUFSVF9D
TEFTU19JTklUX05VTEw7CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3JlbmRl
cl9jYih2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEp
Cit7CisgICAgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhICpwcml2ID0gKEV3a19WaWV3X1ByaXZhdGVf
RGF0YSopZGF0YTsKKyAgICBFaW5hX1JlY3RhbmdsZSByID0ge2FyZWEtPnggKyB0LT54LCBhcmVh
LT55ICsgdC0+eSwgYXJlYS0+dywgYXJlYS0+aH07CisKKyAgICByZXR1cm4gZXdrX3ZpZXdfcGFp
bnRfY29udGVudHMocHJpdiwgdC0+Y2Fpcm8sICZyKTsKK30KKworc3RhdGljIHZvaWQgKl9ld2tf
dmlld190aWxlZF91cGRhdGVzX3Byb2Nlc3NfcHJlKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpv
KQoreworICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSAqcHJpdiA9IChFd2tfVmlld19Qcml2YXRl
X0RhdGEqKWRhdGE7CisgICAgZXdrX3ZpZXdfbGF5b3V0X2lmX25lZWRlZF9yZWN1cnNpdmUocHJp
dik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBFdmFzX09iamVjdCAqX2V3a192aWV3X3Rp
bGVkX3NtYXJ0X2JhY2tpbmdfc3RvcmVfYWRkKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQorewor
ICAgIEV2YXNfT2JqZWN0ICpicyA9IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2FkZChzZC0+YmFz
ZS5ldmFzKTsKKyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXJfY2Jfc2V0CisgICAg
ICAgIChicywgX2V3a192aWV3X3RpbGVkX3JlbmRlcl9jYiwgc2QtPl9wcml2KTsKKyAgICBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcHJlX3NldAorICAgICAgICAoYnMs
IF9ld2tfdmlld190aWxlZF91cGRhdGVzX3Byb2Nlc3NfcHJlLCBzZC0+X3ByaXYpOworICAgIHJl
dHVybiBiczsKK30KKworc3RhdGljIHZvaWQKK19ld2tfdmlld190aWxlZF9jb250ZW50c19zaXpl
X2NoYW5nZWRfY2Iodm9pZCAqZGF0YSwgRXZhc19PYmplY3QgKm8sIHZvaWQgKmV2ZW50X2luZm8p
Cit7CisgICAgRXZhc19Db29yZCAqc2l6ZSA9IChFdmFzX0Nvb3JkKilldmVudF9pbmZvOworICAg
IEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkID0gKEV3a19WaWV3X1NtYXJ0X0RhdGEqKWRhdGE7CisK
KyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jb250ZW50c19yZXNpemUKKyAgICAgICAgKHNk
LT5iYWNraW5nX3N0b3JlLCBzaXplWzBdLCBzaXplWzFdKTsKK30KKworc3RhdGljIHZvaWQgX2V3
a192aWV3X3RpbGVkX3NtYXJ0X2FkZChFdmFzX09iamVjdCAqbykKK3sKKyAgICBFd2tfVmlld19T
bWFydF9EYXRhICpzZDsKKworICAgIF9wYXJlbnRfc2Muc2MuYWRkKG8pOworCisgICAgc2QgPSAo
RXdrX1ZpZXdfU21hcnRfRGF0YSopZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQobyk7CisgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKAorICAgICAgICBzZC0+bWFpbl9mcmFtZSwg
ImNvbnRlbnRzLHNpemUsY2hhbmdlZCIsCisgICAgICAgIF9ld2tfdmlld190aWxlZF9jb250ZW50
c19zaXplX2NoYW5nZWRfY2IsIHNkKTsKKyAgICBld2tfZnJhbWVfcGFpbnRfZnVsbF9zZXQoc2Qt
Pm1haW5fZnJhbWUsIEVJTkFfVFJVRSk7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3
X3RpbGVkX3NtYXJ0X3Njcm9sbHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhICpzZCkKK3sK
KyAgICBjb25zdCBFd2tfU2Nyb2xsX1JlcXVlc3QgKnNyOworICAgIGNvbnN0IEV3a19TY3JvbGxf
UmVxdWVzdCAqc3JfZW5kOworICAgIHNpemVfdCBjb3VudDsKKyAgICBFdmFzX0Nvb3JkIHZ3LCB2
aDsKKworICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJnZ3
LCAmdmgpOworCisgICAgc3IgPSBld2tfdmlld19zY3JvbGxfcmVxdWVzdHNfZ2V0KHNkLT5fcHJp
diwgJmNvdW50KTsKKyAgICBzcl9lbmQgPSBzciArIGNvdW50OworICAgIGZvciAoOyBzciA8IHNy
X2VuZDsgc3IrKykgeworICAgICAgICBpZiAoc3ItPm1haW5fc2Nyb2xsKQorICAgICAgICAgICAg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X2FkZAorICAgICAgICAg
ICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgc3ItPmR4LCBzci0+ZHkpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIEV2YXNfQ29vcmQgc3gsIHN5LCBzdywgc2g7CisKKyAgICAgICAgICAg
IHN4ID0gc3ItPng7CisgICAgICAgICAgICBzeSA9IHNyLT55OworICAgICAgICAgICAgc3cgPSBz
ci0+dzsKKyAgICAgICAgICAgIHNoID0gc3ItPmg7CisKKyAgICAgICAgICAgIGlmIChhYnMoc3It
PmR4KSA+PSBzdyB8fCBhYnMoc3ItPmR5KSA+PSBzaCkgeworICAgICAgICAgICAgICAgIC8qIGRv
dWJ0IHdlYmtpdCB3b3VsZCBiZSBzbyAgICAgc3R1cGlkLi4uICovCisgICAgICAgICAgICAgICAg
REJHKCJmdWxsIHBhZ2Ugc2Nyb2xsICUrMDNkLCUrMDNkLiBjb252ZXJ0IHRvIHJlcGFpbnQgJWQs
JWQgKyAlZHglZCIsCisgICAgICAgICAgICAgICAgICAgIHNyLT5keCwgc3ItPmR5LCBzeCwgc3ks
IHN3LCBzaCk7CisgICAgICAgICAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc2QtPl9wcml2
LCBzeCwgc3ksIHN3LCBzaCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChzeCArIHN3ID4gdncpCisgICAgICAgICAgICAgICAgc3cg
PSB2dyAtIHN4OworICAgICAgICAgICAgaWYgKHN5ICsgc2ggPiB2aCkKKyAgICAgICAgICAgICAg
ICBzaCA9IHZoIC0gc3k7CisKKyAgICAgICAgICAgIGlmIChzdyA8IDApCisgICAgICAgICAgICAg
ICAgc3cgPSAwOworICAgICAgICAgICAgaWYgKHNoIDwgMCkKKyAgICAgICAgICAgICAgICBzaCA9
IDA7CisKKyAgICAgICAgICAgIGlmICghc3cgfHwgIXNoKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICBzeCAtPSBhYnMoc3ItPmR4KTsKKyAgICAgICAgICAgIHN5IC09
IGFicyhzci0+ZHkpOworICAgICAgICAgICAgc3cgKz0gYWJzKHNyLT5keCk7CisgICAgICAgICAg
ICBzaCArPSBhYnMoc3ItPmR5KTsKKyAgICAgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNk
LT5fcHJpdiwgc3gsIHN5LCBzdywgc2gpOworICAgICAgICAgICAgSU5GKCJ1c2luZyByZXBhaW50
IGZvciBpbm5lciBmcmFtZSBzY29sbGluZyEiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3Nt
YXJ0X3JlcGFpbnRzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCit7CisgICAgY29u
c3QgRWluYV9SZWN0YW5nbGUgKnByLCAqcHJfZW5kOworICAgIHNpemVfdCBjb3VudDsKKyAgICBp
bnQgc3gsIHN5OworCisgICAgZXdrX2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KHNkLT5tYWluX2ZyYW1l
LCAmc3gsICZzeSk7CisKKyAgICBwciA9IGV3a192aWV3X3JlcGFpbnRzX2dldChzZC0+X3ByaXYs
ICZjb3VudCk7CisgICAgcHJfZW5kID0gcHIgKyBjb3VudDsKKyAgICBmb3IgKDsgcHIgPCBwcl9l
bmQ7IHByKyspIHsKKyAgICAgICAgRWluYV9SZWN0YW5nbGUgcjsKKyAgICAgICAgci54ID0gcHIt
PnggKyBzeDsKKyAgICAgICAgci55ID0gcHItPnkgKyBzeTsKKyAgICAgICAgci53ID0gcHItPnc7
CisgICAgICAgIHIuaCA9IHByLT5oOworICAgICAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91
cGRhdGUoc2QtPmJhY2tpbmdfc3RvcmUsICZyKTsKKyAgICB9CisgICAgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHNkLT5iYWNraW5nX3N0b3JlKTsKKworICAgIHJldHVy
biBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0
X2NvbnRlbnRzX3Jlc2l6ZShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgaW50IHcsIGludCBoKQor
eworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2NvbnRlbnRzX3Jlc2l6ZShzZC0+YmFja2lu
Z19zdG9yZSwgdywgaCk7CisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSAq
c2QsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpCit7CisgICAgRXZh
c19Db29yZCB4LCB5LCB3LCBoOworICAgIEVpbmFfQm9vbCByOworICAgIHIgPSBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV96b29tX3NldChzZC0+YmFja2luZ19zdG9yZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnpvb20sIGN4LCBjeSwgJngsICZ5KTsKKyAgICBp
ZiAoIXIpCisgICAgICAgIHJldHVybiByOworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rp
c2FibGVkX3VwZGF0ZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIEVJTkFfVFJVRSk7CisgICAgciA9
IF9wYXJlbnRfc2Muem9vbV9zZXQoc2QsIHpvb20sIGN4LCBjeSk7CisgICAgZXdrX2ZyYW1lX3Nj
cm9sbF9zZXQoc2QtPm1haW5fZnJhbWUsIC14LCAteSk7CisgICAgZXdrX2ZyYW1lX3Njcm9sbF9z
aXplX2dldChzZC0+bWFpbl9mcmFtZSwgJncsICZoKTsKKyAgICBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9maXhfb2Zmc2V0cyhzZC0+YmFja2luZ19zdG9yZSwgdywgaCk7CisgICAgZXdrX3ZpZXdf
c2Nyb2xsc19wcm9jZXNzKHNkKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxjdWxhdGUoc2Qt
PmJhY2tpbmdfc3RvcmUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGN1bGF0ZShzZC0+c2Vs
Zik7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRfdXBkYXRlX3NldChzZC0+
YmFja2luZ19zdG9yZSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBF
aW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fd2Vha19zZXQoRXdrX1ZpZXdfU21h
cnRfRGF0YSAqc2QsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpCit7
CisgICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zZXQoc2QtPmJh
Y2tpbmdfc3RvcmUsIHpvb20sIGN4LCBjeSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdmlld190
aWxlZF9zbWFydF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFd2tfVmlld19TbWFydF9EYXRh
ICpzZCwgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKK3sKKyAgICBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChzZC0+YmFja2luZ19zdG9yZSwgc21vb3Ro
X3NjYWxlKTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2ZsdXNoKEV3
a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Zs
dXNoKHNkLT5iYWNraW5nX3N0b3JlKTsKKyAgICBfcGFyZW50X3NjLmZsdXNoKHNkKTsKK30KKwor
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9yZWdpb24o
RXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFz
X0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKK3sKKyAgICByZXR1cm4gZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWdpb24KKyAgICAgICAgKHNkLT5iYWNraW5n
X3N0b3JlLCB4LCB5LCB3LCBoLCB6b29tKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXdrX1ZpZXdfU21hcnRf
RGF0YSAqc2QsIHVuc2lnbmVkIGludCBuLCBmbG9hdCB6b29tKQoreworICAgIHJldHVybiBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cworICAgICAgICAo
c2QtPmJhY2tpbmdfc3RvcmUsIG4sIHpvb20pOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
dGlsZWRfc21hcnRfcHJlX3JlbmRlcl9jYW5jZWwoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCit7
CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9jYW5jZWwoc2QtPmJhY2tp
bmdfc3RvcmUpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9k
aXNhYmxlX3JlbmRlcihFd2tfVmlld19TbWFydF9EYXRhICpzZCkKK3sKKyAgICByZXR1cm4gZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoc2QtPmJhY2tpbmdfc3RvcmUpOwor
fQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9lbmFibGVfcmVuZGVy
KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAgIHJldHVybiBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9lbmFibGVfcmVuZGVyKHNkLT5iYWNraW5nX3N0b3JlKTsKK30KKworLyoqCisgKiBT
ZXRzIHRoZSBzbWFydCBjbGFzcyBhcGkgdXNpbmcgdGlsZWQgYmFja2luZyBzdG9yZSwgZW5hYmxp
bmcgdmlldworICogdG8gYmUgaW5oZXJpdGVkLgorICoKKyAqIEBwYXJhbSBhcGkgY2xhc3MgZGVm
aW5pdGlvbiB0byBiZSBzZXQsIGFsbCBtZW1iZXJzIHdpdGggdGhlCisgKiAgICAgICAgZXhjZXB0
aW9uIG9mIEV2YXNfU21hcnRfQ2xhc3MtPmRhdGEgbWF5IGJlIG92ZXJyaWRkZW4uIE11c3QKKyAq
ICAgICAgICBAYiBub3QgYmUgQGMgTlVMTC4KKyAqCisgKiBAbm90ZSBFdmFzX1NtYXJ0X0NsYXNz
LT5kYXRhIGlzIHVzZWQgdG8gaW1wbGVtZW50IHR5cGUgY2hlY2tpbmcgYW5kCisgKiAgICAgICBp
cyBub3Qgc3VwcG9zZWQgdG8gYmUgY2hhbmdlZC9vdmVycmlkZGVuLiBJZiB5b3UgbmVlZCBleHRy
YQorICogICAgICAgZGF0YSBmb3IgeW91ciBzbWFydCBjbGFzcyB0byB3b3JrLCBqdXN0IGV4dGVu
ZAorICogICAgICAgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgaW5zdGVhZC4KKyAqCisgKiBAcmV0dXJu
IEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzLCBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUgKHByb2Jh
Ymx5CisgKiAgICAgICAgIHZlcnNpb24gbWlzbWF0Y2gpLgorICoKKyAqIEBzZWUgZXdrX3ZpZXdf
YmFzZV9zbWFydF9zZXQoKQorICovCitFaW5hX0Jvb2wgZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2V0
KEV3a19WaWV3X1NtYXJ0X0NsYXNzICphcGkpCit7CisgICAgaWYgKCFld2tfdmlld19iYXNlX3Nt
YXJ0X3NldChhcGkpKQorICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKworICAgIGlmIChFSU5B
X1VOTElLRUxZKCFfcGFyZW50X3NjLnNjLmFkZCkpCisgICAgICAgIGV3a192aWV3X2Jhc2Vfc21h
cnRfc2V0KCZfcGFyZW50X3NjKTsKKworICAgIGFwaS0+c2MuYWRkID0gX2V3a192aWV3X3RpbGVk
X3NtYXJ0X2FkZDsKKworICAgIGFwaS0+YmFja2luZ19zdG9yZV9hZGQgPSBfZXdrX3ZpZXdfdGls
ZWRfc21hcnRfYmFja2luZ19zdG9yZV9hZGQ7CisgICAgYXBpLT5zY3JvbGxzX3Byb2Nlc3MgPSBf
ZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2Nyb2xsc19wcm9jZXNzOworICAgIGFwaS0+cmVwYWludHNf
cHJvY2VzcyA9IF9ld2tfdmlld190aWxlZF9zbWFydF9yZXBhaW50c19wcm9jZXNzOworICAgIGFw
aS0+Y29udGVudHNfcmVzaXplID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X2NvbnRlbnRzX3Jlc2l6
ZTsKKyAgICBhcGktPnpvb21fc2V0ID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fc2V0Owor
ICAgIGFwaS0+em9vbV93ZWFrX3NldCA9IF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3dlYWtf
c2V0OworICAgIGFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQgPSBfZXdrX3ZpZXdfdGls
ZWRfc21hcnRfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQ7CisgICAgYXBpLT5mbHVzaCA9IF9l
d2tfdmlld190aWxlZF9zbWFydF9mbHVzaDsKKyAgICBhcGktPnByZV9yZW5kZXJfcmVnaW9uID0g
X2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJfcmVnaW9uOworICAgIGFwaS0+cHJlX3Jl
bmRlcl9yZWxhdGl2ZV9yYWRpdXMgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9y
ZWxhdGl2ZV9yYWRpdXM7CisgICAgYXBpLT5wcmVfcmVuZGVyX2NhbmNlbCA9IF9ld2tfdmlld190
aWxlZF9zbWFydF9wcmVfcmVuZGVyX2NhbmNlbDsKKyAgICBhcGktPmRpc2FibGVfcmVuZGVyID0g
X2V3a192aWV3X3RpbGVkX3NtYXJ0X2Rpc2FibGVfcmVuZGVyOworICAgIGFwaS0+ZW5hYmxlX3Jl
bmRlciA9IF9ld2tfdmlld190aWxlZF9zbWFydF9lbmFibGVfcmVuZGVyOworICAgIHJldHVybiBF
SU5BX1RSVUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgRXZhc19TbWFydCAqX2V3a192aWV3X3RpbGVk
X3NtYXJ0X2NsYXNzX25ldyh2b2lkKQoreworICAgIHN0YXRpYyBFd2tfVmlld19TbWFydF9DbGFz
cyBhcGkgPSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTigiRVdLX1ZpZXdf
VGlsZWQiKTsKKyAgICBzdGF0aWMgRXZhc19TbWFydCAqc21hcnQgPSAwOworCisgICAgaWYgKEVJ
TkFfVU5MSUtFTFkoIXNtYXJ0KSkgeworICAgICAgICBld2tfdmlld190aWxlZF9zbWFydF9zZXQo
JmFwaSk7CisgICAgICAgIHNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJmFwaS5zYyk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHNtYXJ0OworfQorCisvKioKKyAqIENyZWF0ZXMgYSBuZXcgRUZM
IFdlYktpdCBWaWV3IG9iamVjdCB1c2luZyB0aWxlZCBiYWNraW5nIHN0b3JlLgorICoKKyAqIFZp
ZXcgb2JqZWN0cyBhcmUgdGhlIHJlY29tbWVuZGVkIHdheSB0byBkZWFsIHdpdGggRUZMIFdlYktp
dCBhcyBpdAorICogYWJzdHJhY3RzIHRoZSBjb21wbGV4IHBpZWNlcyBvZiB0aGUgcHJvY2Vzcy4K
KyAqCisgKiBUaGlzIG9iamVjdCBpcyBhbG1vc3QgdGhlIHNhbWUgYXMgdGhlIG9uZSByZXR1cm5l
ZCBieSB0aGUgZXdrX3ZpZXdfYWRkKCkKKyAqIGZ1bmN0aW9uLCBidXQgaXQgdXNlcyB0aGUgdGls
ZWQgYmFja2luZyBzdG9yZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0CisgKiBiYWNraW5nIHN0b3Jl
LgorICoKKyAqIEBwYXJhbSBlIGNhbnZhcyB3aGVyZSB0byBjcmVhdGUgdGhlIHZpZXcgb2JqZWN0
LgorICoKKyAqIEByZXR1cm4gdmlldyBvYmplY3Qgb3IgQGMgTlVMTCBpZiBlcnJvcnMuCisgKgor
ICogQHNlZSBld2tfdmlld191cmlfc2V0KCkKKyAqLworRXZhc19PYmplY3QgKmV3a192aWV3X3Rp
bGVkX2FkZChFdmFzICplKQoreworICAgIHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoZSwg
X2V3a192aWV3X3RpbGVkX3NtYXJ0X2NsYXNzX25ldygpKTsKK30KKworLyoqCisgKiBHZXQgdGhl
IGNhY2hlIG9mIHVudXNlZCB0aWxlcyB1c2VkIGJ5IHRoaXMgdmlldy4KKyAqCisgKiBAcGFyYW0g
byB2aWV3IG9iamVjdCB0byBnZXQgY2FjaGUuCisgKiBAcmV0dXJuIGluc3RhbmNlIG9mICJjYWNo
ZSBvZiB1bnVzZWQgdGlsZXMiIG9yIEBjIE5VTEwgb24gZXJyb3JzLgorICovCitFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgKmV3a192aWV3X3RpbGVkX3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXZhc19P
YmplY3QgKm8pCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QgPSBld2tfdmlld19zbWFy
dF9kYXRhX2dldChvKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QsIDAp
OworICAgIHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9n
ZXQoc2QtPmJhY2tpbmdfc3RvcmUpOworfQorCisvKioKKyAqIFNldCB0aGUgY2FjaGUgb2YgdW51
c2VkIHRpbGVzIHVzZWQgYnkgdGhpcyB2aWV3LgorICoKKyAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0
IHRvIGdldCBjYWNoZS4KKyAqIEBwYXJhbSBjYWNoZSBpbnN0YW5jZSBvZiAiY2FjaGUgb2YgdW51
c2VkIHRpbGVzIi4gVGhpcyBjYW4gYmUgdXNlZAorICogICAgICAgIHRvIHNoYXJlIGEgc2luZ2xl
IGNhY2hlIGFtb25nc3QgZGlmZmVyZW50IHZpZXdzLiBUaGUgdGlsZXMKKyAqICAgICAgICBmcm9t
IG9uZSB2aWV3IHdpbGwgbm90IGJlIHVzZWQgYnkgdGhlIG90aGVyISBUaGlzIGlzIGp1c3QgdG8K
KyAqICAgICAgICBsaW1pdCB0aGUgZ3JvdXAgd2l0aCBhbW91bnQgb2YgdW51c2VkIG1lbW9yeS4K
KyAqICAgICAgICBJZiBAYyBOVUxMIGlzIHByb3ZpZGVkLCB0aGVuIGEgbmV3IGNhY2hlIGlzIGNy
ZWF0ZWQuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX3NldChFdmFzX09i
amVjdCAqbywgRXdrX1RpbGVfVW51c2VkX0NhY2hlICpjYWNoZSkKK3sKKyAgICBFd2tfVmlld19T
bWFydF9EYXRhICpzZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KG8pOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNkKTsKKyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxl
X3VudXNlZF9jYWNoZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIGNhY2hlKTsKK30KKworLyoqCisg
KiBTZXQgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSBvZiB0aGUgdGlsZWQgYmFja2lu
ZyBzdG9yZS4KKyAqIEBwYXJhbSBvIHRoZSB0aWxlZCBiYWNraW5nIHN0b3JlIG9iamVjdC4KKyAq
IEBwYXJhbSBmbGFnIHZhbHVlIG9mIHRoZSB0aWxlZCBiYWNraW5nIHN0b3JlIGZsYWcgdG8gc2V0
LgorICovCit2b2lkIGV3a192aWV3X3RpbGVkX3Byb2Nlc3NfZW50aXJlX3F1ZXVlX3NldChFdmFz
X09iamVjdCAqbywgRWluYV9Cb29sIGZsYWcpCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSAq
c2QgPSBld2tfdmlld19zbWFydF9kYXRhX2dldChvKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzZCk7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJvY2Vzc19lbnRpcmVf
cXVldWVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBmbGFnKTsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>