<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>27989</bug_id>
          
          <creation_ts>2012-11-16 18:53:52 +0400</creation_ts>
          <short_desc>Добавить поддержку mtp</short_desc>
          <delta_ts>2012-11-20 13:06:59 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>gvfs</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>27685</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Anton V. Boyarshinov">boyarsh</reporter>
          <assigned_to name="Yuri N. Sedunov">aris</assigned_to>
          <cc>aen</cc>
    
    <cc>aris</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>134924</commentid>
    <comment_count>0</comment_count>
      <attachid>5637</attachid>
    <who name="Anton V. Boyarshinov">boyarsh</who>
    <bug_when>2012-11-16 18:53:52 +0400</bug_when>
    <thetext>Created attachment 5637
Одним патчем к сизифному gvfs

по адресу git://github.com/philipl/gvfs.git дают модифицированный gvfs с поддержкой mtp через libmtp.

Я собрал на пробу: по крайней мере с некоторыми телефонами на android 4.x работает нормально, хорошо бы приложить..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134927</commentid>
    <comment_count>1</comment_count>
    <who name="Yuri N. Sedunov">aris</who>
    <bug_when>2012-11-16 19:29:06 +0400</bug_when>
    <thetext>У нас gvfs специально изготовлен таким образом, чтобы можно было собирать сторонние бэкэнды не суясь в основной пакет.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134996</commentid>
    <comment_count>2</comment_count>
    <who name="Anton V. Boyarshinov">boyarsh</who>
    <bug_when>2012-11-19 14:21:01 +0400</bug_when>
    <thetext>Если я правильно понял, там, увы, есть изменения в основном gvfs (как минимум для того, чтоб за эти устройства не хватался gphoto, который всё равно с ними не справляется)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135038</commentid>
    <comment_count>3</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2012-11-20 12:34:10 +0400</bug_when>
    <thetext>gvfs-1.14.2-alt2 -&gt; sisyphus:

* Tue Nov 20 2012 Yuri N. Sedunov &lt;aris@altlinux&gt; 1.14.2-alt2
- mtp devices support via libmtp (ALT #27989)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135040</commentid>
    <comment_count>4</comment_count>
    <who name="Anton V. Boyarshinov">boyarsh</who>
    <bug_when>2012-11-20 13:06:59 +0400</bug_when>
    <thetext>Спасибо!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5637</attachid>
            <date>2012-11-16 18:53:52 +0400</date>
            <delta_ts>2012-11-16 18:53:52 +0400</delta_ts>
            <desc>Одним патчем к сизифному gvfs</desc>
            <filename>gvfs-add-mtp.patch</filename>
            <type>text/plain</type>
            <size>84760</size>
            <attacher name="Anton V. Boyarshinov">boyarsh</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2NsaWVudC9nZGFlbW9uZmlsZS5jIGIvY2xpZW50L2dkYWVtb25maWxlLmMK
aW5kZXggMTQ0MTA0Yi4uYThiY2Q0MSAxMDA2NDQKLS0tIGEvY2xpZW50L2dkYWVtb25maWxlLmMK
KysrIGIvY2xpZW50L2dkYWVtb25maWxlLmMKQEAgLTI4MDcsNiArMjgwNyw5IEBAIHJldHJ5Ogog
ICBpZiAocHJveHkgPT0gTlVMTCkKICAgICBnb3RvIG91dDsKIAorICAvKiBGaWxlIHRyYW5zZmVy
cyBjYW4gdGFrZSBhcmJpdHJhcmlseSBsb25nIGFtb3VudHMgb2YgdGltZS4gKi8KKyAgZ19kYnVz
X3Byb3h5X3NldF9kZWZhdWx0X3RpbWVvdXQgKEdfREJVU19QUk9YWSAocHJveHkpLCBHX01BWElO
VCk7CisKICAgZGF0YS5wcm9ncmVzc19jYWxsYmFjayA9IHByb2dyZXNzX2NhbGxiYWNrOwogICBk
YXRhLnByb2dyZXNzX2NhbGxiYWNrX2RhdGEgPSBwcm9ncmVzc19jYWxsYmFja19kYXRhOwogICBk
YXRhLmNvbnRleHQgPSBnX21haW5fY29udGV4dF9uZXcgKCk7CmRpZmYgLS1naXQgYS9jb21tb24v
TWFrZWZpbGUuYW0gYi9jb21tb24vTWFrZWZpbGUuYW0KaW5kZXggMDdhYzhmNC4uYTBkNjA3MiAx
MDA2NDQKLS0tIGEvY29tbW9uL01ha2VmaWxlLmFtCisrKyBiL2NvbW1vbi9NYWtlZmlsZS5hbQpA
QCAtMSw2ICsxLDggQEAKIE5VTEwgPQogCi1saWJfTFRMSUJSQVJJRVM9bGliZ3Zmc2NvbW1vbi5s
YQorcHJpdmxpYmRpcj0kKGxpYmRpcikvZ3ZmcworcHJpdmxpYl9MVExJQlJBUklFUz1saWJndmZz
Y29tbW9uLmxhCisKIG5vaW5zdF9MVExJQlJBUklFUyA9IGxpYmd2ZnNjb21tb24tbW9uaXRvci5s
YQogCiBJTkNMVURFUyA9IC1JJCh0b3Bfc3JjZGlyKSAtSSQodG9wX3NyY2RpcikvZ3ZmcyBcCkBA
IC0zMSw3ICszMyw3IEBAIGxpYmd2ZnNjb21tb25fbGFfU09VUkNFUyA9IAlcCiAJJChOVUxMKQog
CiAjIG5lZWRlZCBieSBjeWd3aW4gKHNlZSBidWcgIzU2NDAwMykKLWxpYmd2ZnNjb21tb25fbGFf
TERGTEFHUyA9IC1uby11bmRlZmluZWQKK2xpYmd2ZnNjb21tb25fbGFfTERGTEFHUyA9IC1uby11
bmRlZmluZWQgIC1hdm9pZC12ZXJzaW9uCiAKIGxpYmd2ZnNjb21tb25fbGFfTElCQUREID0JXAog
CSQoR0xJQl9MSUJTKQkJXApkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFj
CmluZGV4IGY1ZDhmMmQuLjRiYzlkMjEgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9j
b25maWd1cmUuYWMKQEAgLTQ5Myw2ICs0OTMsMzggQEAgQUNfU1VCU1QoQkxVUkFZX0NGTEFHUykK
IEFDX1NVQlNUKEJMVVJBWV9MSUJTKQogQU1fQ09ORElUSU9OQUwoSEFWRV9CTFVSQVksIFt0ZXN0
ICIkbXNnX2JsdXJheSIgPSAieWVzIl0pCiAKK2RubCAqKioqKioqKioqKioqKioqKioqKioqKioq
CitkbmwgKioqIENoZWNrIGZvciBsaWJtdHAgKioqCitkbmwgKioqKioqKioqKioqKioqKioqKioq
KioqKgorQUNfQVJHX0VOQUJMRShsaWJtdHAsIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGli
bXRwXSxbYnVpbGQgd2l0aG91dCBsaWJtdHAgc3VwcG9ydF0pKQorbXNnX2xpYm10cD1ubworTElC
TVRQX0xJQlM9CitMSUJNVFBfQ0ZMQUdTPQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9saWJtdHAiICE9
ICJ4bm8iIC1hICJ4JG1zZ19ndWRldiIgPSAieHllcyI7IHRoZW4KKyAgUEtHX0NIRUNLX0VYSVNU
UyhsaWJtdHAsIG1zZ19saWJtdHA9eWVzKQorCisgIGlmIHRlc3QgIngkbXNnX2xpYm10cCIgPSAi
eHllcyI7IHRoZW4KKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJNVFAsIGxpYm10cCA+PSAxLjEu
MCkKKyAgICBBQ19ERUZJTkUoSEFWRV9MSUJNVFAsIDEsIFtEZWZpbmUgdG8gMSBpZiBsaWJtdHAg
aXMgYXZhaWxhYmxlXSkKKworICAgIHNhdmVfbGlicz0iJExJQlMiCisgICAgTElCUz0iJExJQk1U
UF9MSUJTIgorICAgIEFDX0NIRUNLX0xJQihtdHAsIExJQk1UUF9HZXRfVGh1bWJuYWlsLCBoYXZl
X2xpYm10cF9nZXRfdGh1bWJuYWlsPXllcykKKyAgICBpZiB0ZXN0ICJ4JGhhdmVfbGlibXRwX2dl
dF90aHVtYm5haWwiID0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19ERUZJTkUoSEFWRV9MSUJNVFBf
R0VUX1RIVU1CTkFJTCwgMSwgW0RlZmluZSB0byAxIGlmIExJQk1UUF9HZXRfVGh1bWJuYWlsIGlz
IGF2YWlsYWJsZV0pCisgICAgZmkKKworICAgIEFDX0NIRUNLX0xJQihtdHAsIExJQk1UUF9SZWFk
X0V2ZW50LCBoYXZlX2xpYm10cF9yZWFkX2V2ZW50PXllcykKKyAgICBpZiB0ZXN0ICJ4JGhhdmVf
bGlibXRwX3JlYWRfZXZlbnQiID0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19ERUZJTkUoSEFWRV9M
SUJNVFBfUkVBRF9FVkVOVCwgMSwgW0RlZmluZSB0byAxIGlmIExJQk1UUF9SZWFkX0V2ZW50IGlz
IGF2YWlsYWJsZV0pCisgICAgZmkKKyAgICBMSUJTPSIkc2F2ZV9saWJzIgorICBmaQorZmkKKwor
QU1fQ09ORElUSU9OQUwoVVNFX0xJQk1UUCwgW3Rlc3QgIiRtc2dfbGlibXRwIiA9ICJ5ZXMiXSkK
KwogZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CiBkbmwgU2FtYmEgMy4wCiAKQEAgLTgzMCw2ICs4NjIs
NyBAQCBtb25pdG9yL2dkdS9NYWtlZmlsZQogbW9uaXRvci91ZGlza3MyL01ha2VmaWxlCiBtb25p
dG9yL2dwaG90bzIvTWFrZWZpbGUKIG1vbml0b3IvYWZjL01ha2VmaWxlCittb25pdG9yL210cC9N
YWtlZmlsZQogcHJvZ3JhbXMvTWFrZWZpbGUKIG1hbi9NYWtlZmlsZQogdGVzdC9NYWtlZmlsZQpA
QCAtODUwLDYgKzg4Myw3IEBAIGVjaG8gIgogCUZVU0Ugc3VwcG9ydDogICAgICAgICAgICAgICAg
ICRtc2dfZnVzZQogICAgICAgICBDRERBIHN1cHBvcnQ6ICAgICAgICAgICAgICAgICAkbXNnX2Nk
ZGEKICAgICAgICAgR3Bob3RvMiBzdXBwb3J0OiAgICAgICAgICAgICAgJG1zZ19ncGhvdG8yCisg
ICAgICAgIE1UUCBzdXBwb3J0OiAgICAgICAgICAgICAgICAgICRtc2dfbGlibXRwCiAJYXJjaGl2
ZSBzdXBwb3J0OiAgICAgICAgICAgICAgJG1zZ19hcmNoaXZlCiAJQUZDIHN1cHBvcnQ6ICAgICAg
ICAgICAgICAgICAgJG1zZ19hZmMKICAgICAgICAgQUZQIHN1cHBvcnQ6ICAgICAgICAgICAgICAg
ICAgJG1zZ19hZnAKZGlmZiAtLWdpdCBhL2RhZW1vbi9NYWtlZmlsZS5hbSBiL2RhZW1vbi9NYWtl
ZmlsZS5hbQppbmRleCAxY2IwY2JhLi40NWI3NmY1IDEwMDY0NAotLS0gYS9kYWVtb24vTWFrZWZp
bGUuYW0KKysrIGIvZGFlbW9uL01ha2VmaWxlLmFtCkBAIC03OSw2ICs3OSwxMiBAQCBtb3VudF9E
QVRBICs9IGdwaG90bzIubW91bnQKIGxpYmV4ZWNfUFJPR1JBTVMgKz0gZ3Zmc2QtZ3Bob3RvMgog
ZW5kaWYKIAorbW91bnRfaW5fZmlsZXMgKz0gbXRwLm1vdW50LmluCitpZiBVU0VfTElCTVRQCitt
b3VudF9EQVRBICs9IG10cC5tb3VudAorbGliZXhlY19QUk9HUkFNUyArPSBndmZzZC1tdHAKK2Vu
ZGlmCisKIG1vdW50X2luX2ZpbGVzICs9IG9iZXhmdHAubW91bnQuaW4KIGlmIFVTRV9PQkVYRlRQ
CiBtb3VudF9EQVRBICs9IG9iZXhmdHAubW91bnQKQEAgLTQ0MCw2ICs0NDYsMTkgQEAgZWxzZQog
Z3Zmc2RfZ3Bob3RvMl9MREFERCA9ICQobGlicmFyaWVzKSAkKEdQSE9UTzJfTElCUykgJChIQUxf
TElCUykKIGVuZGlmCiAKK2d2ZnNkX210cF9TT1VSQ0VTID0gXAorCWd2ZnNiYWNrZW5kbXRwLmMg
Z3Zmc2JhY2tlbmRtdHAuaCBcCisJZGFlbW9uLW1haW4uYyBkYWVtb24tbWFpbi5oIFwKKwlkYWVt
b24tbWFpbi1nZW5lcmljLmMKKworZ3Zmc2RfbXRwX0NQUEZMQUdTID0gXAorCS1EQkFDS0VORF9I
RUFERVI9Z3Zmc2JhY2tlbmRtdHAuaCBcCisJLURERUZBVUxUX0JBQ0tFTkRfVFlQRT1tdHAgXAor
CS1EQkFDS0VORF9UWVBFUz0nIm10cCIsIEdfVkZTX1RZUEVfQkFDS0VORF9NVFAsJyBcCisJJChH
VURFVl9DRkxBR1MpICQoTElCTVRQX0NGTEFHUykKKworZ3Zmc2RfbXRwX0xEQUREID0gJChsaWJy
YXJpZXMpICQoR1VERVZfTElCUykgJChMSUJNVFBfTElCUykKKwogZ3Zmc2RfaHR0cF9TT1VSQ0VT
ID0gXAogCXNvdXAtaW5wdXQtc3RyZWFtLmMgc291cC1pbnB1dC1zdHJlYW0uaCBcCiAJZ3Zmc2Jh
Y2tlbmRodHRwLmMgZ3Zmc2JhY2tlbmRodHRwLmggXApkaWZmIC0tZ2l0IGEvZGFlbW9uL2d2ZnNi
YWNrZW5kbXRwLmMgYi9kYWVtb24vZ3Zmc2JhY2tlbmRtdHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5hYzBmMzUwCi0tLSAvZGV2L251bGwKKysrIGIvZGFlbW9uL2d2ZnNi
YWNrZW5kbXRwLmMKQEAgLTAsMCArMSwxNDAxIEBACisvKiBHSU8gLSBHTGliIElucHV0LCBPdXRw
dXQgYW5kIFN0cmVhbWluZyBMaWJyYXJ5CisgKiAgIE1UUCBCYWNrZW5kCisgKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFBoaWxpcCBMYW5nZGFsZSA8cGhpbGlwbEBvdmVydC5vcmc+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcs
IFVTQS4KKyAqLworCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHN5cy90eXBl
cy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRl
IDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxn
bGliL2dpMThuLmg+CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorCisjaW5jbHVkZSA8bGlibXRwLmg+
CisKKyNpbmNsdWRlICJndmZzYmFja2VuZG10cC5oIgorI2luY2x1ZGUgImd2ZnNpY29uLmgiCisj
aW5jbHVkZSAiZ3Zmc2pvYm9wZW5mb3JyZWFkLmgiCisjaW5jbHVkZSAiZ3Zmc2pvYnJlYWQuaCIK
KyNpbmNsdWRlICJndmZzam9ic2Vla3JlYWQuaCIKKyNpbmNsdWRlICJndmZzam9ib3BlbmZvcndy
aXRlLmgiCisjaW5jbHVkZSAiZ3Zmc2pvYndyaXRlLmgiCisjaW5jbHVkZSAiZ3Zmc2pvYmNsb3Nl
d3JpdGUuaCIKKyNpbmNsdWRlICJndmZzam9ic2Vla3dyaXRlLmgiCisjaW5jbHVkZSAiZ3Zmc2pv
YnNldGRpc3BsYXluYW1lLmgiCisjaW5jbHVkZSAiZ3Zmc2pvYnF1ZXJ5aW5mby5oIgorI2luY2x1
ZGUgImd2ZnNqb2JkZWxldGUuaCIKKyNpbmNsdWRlICJndmZzam9icXVlcnlmc2luZm8uaCIKKyNp
bmNsdWRlICJndmZzam9icXVlcnlhdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiZ3Zmc2pvYmVudW1l
cmF0ZS5oIgorI2luY2x1ZGUgImd2ZnNkYWVtb25wcm90b2NvbC5oIgorI2luY2x1ZGUgImd2ZnNq
b2JjcmVhdGVtb25pdG9yLmgiCisjaW5jbHVkZSAiZ3Zmc2pvYm1ha2VkaXJlY3RvcnkuaCIKKyNp
bmNsdWRlICJndmZzbW9uaXRvci5oIgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gKi8KKworLyogc2hvd2luZyBkZWJ1ZyB0cmFjZXMgKi8KKyNkZWZpbmUg
REVCVUdfU0hPV19UUkFDRVMgMQorI2RlZmluZSBERUJVR19TSE9XX0VOVU1FUkFURV9UUkFDRVMg
MAorCitzdGF0aWMgdm9pZAorREVCVUcgKGNvbnN0IGdjaGFyICptZXNzYWdlLCAuLi4pCit7Cisj
aWYgREVCVUdfU0hPV19UUkFDRVMKKyAgdmFfbGlzdCBhcmdzOworICB2YV9zdGFydCAoYXJncywg
bWVzc2FnZSk7CisgIGdfdmZwcmludGYgKHN0ZGVyciwgbWVzc2FnZSwgYXJncyk7CisgIHZhX2Vu
ZCAoYXJncyk7CisgIGdfZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgZmZsdXNoIChzdGRlcnIp
OworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkCitERUJVR19FTlVNRVJBVEUgKGNvbnN0IGdjaGFy
ICptZXNzYWdlLCAuLi4pCit7CisjaWYgREVCVUdfU0hPV19FTlVNRVJBVEVfVFJBQ0VTCisgIHZh
X2xpc3QgYXJnczsKKyAgdmFfc3RhcnQgKGFyZ3MsIG1lc3NhZ2UpOworICBnX3ZmcHJpbnRmIChz
dGRlcnIsIG1lc3NhZ2UsIGFyZ3MpOworICB2YV9lbmQgKGFyZ3MpOworICBnX2ZwcmludGYgKHN0
ZGVyciwgIlxuIik7CisgIGZmbHVzaCAoc3RkZXJyKTsKKyNlbmRpZgorfQorCisKKy8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN0b3JhZ2UgY29u
c3RhbnRzIGNvcGllZCBmcm9tIHB0cC5oCisgKgorICogcHRwLmggaXMgdHJlYXRlZCBhcyBhIHBy
aXZhdGUgaGVhZGVyIGJ5IGxpYm10cAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKworLyogUFRQIFN0b3JhZ2UgVHlwZXMgKi8KKworI2RlZmluZSBQ
VFBfU1RfVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIFBU
UF9TVF9GaXhlZFJPTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgUFRQ
X1NUX1JlbW92YWJsZVJPTSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBQVFBf
U1RfRml4ZWRSQU0gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzCisjZGVmaW5lIFBUUF9T
VF9SZW1vdmFibGVSQU0gICAgICAgICAgICAgICAgICAgICAweDAwMDQKKworCisvKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJbml0aWFsaXphdGlv
bgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwor
R19ERUZJTkVfVFlQRSAoR1Zmc0JhY2tlbmRNdHAsIGdfdmZzX2JhY2tlbmRfbXRwLCBHX1ZGU19U
WVBFX0JBQ0tFTkQpCisKK3N0YXRpYyB2b2lkCitnX3Zmc19iYWNrZW5kX210cF9pbml0IChHVmZz
QmFja2VuZE10cCAqYmFja2VuZCkKK3sKKyAgREVCVUcgKCIoSSkgZ192ZnNfYmFja2VuZF9tdHBf
aW5pdCIpOworICBHTW91bnRTcGVjICptb3VudF9zcGVjOworCisgIGdfbXV0ZXhfaW5pdCAoJmJh
Y2tlbmQtPm11dGV4KTsKKyAgZ192ZnNfYmFja2VuZF9zZXRfZGlzcGxheV9uYW1lIChHX1ZGU19C
QUNLRU5EIChiYWNrZW5kKSwgIm10cCIpOworICBnX3Zmc19iYWNrZW5kX3NldF9pY29uX25hbWUg
KEdfVkZTX0JBQ0tFTkQgKGJhY2tlbmQpLCAibXVsdGltZWRpYS1wbGF5ZXIiKTsKKworICBtb3Vu
dF9zcGVjID0gZ19tb3VudF9zcGVjX25ldyAoIm10cCIpOworICBnX3Zmc19iYWNrZW5kX3NldF9t
b3VudF9zcGVjIChHX1ZGU19CQUNLRU5EIChiYWNrZW5kKSwgbW91bnRfc3BlYyk7CisgIGdfbW91
bnRfc3BlY191bnJlZiAobW91bnRfc3BlYyk7CisKKyAgYmFja2VuZC0+bW9uaXRvcnMgPSBnX2hh
c2hfdGFibGVfbmV3IChnX2RpcmVjdF9oYXNoLCBnX2RpcmVjdF9lcXVhbCk7CisKKyAgREVCVUcg
KCIoSSkgZ192ZnNfYmFja2VuZF9tdHBfaW5pdCBkb25lLiIpOworfQorCitzdGF0aWMgdm9pZAor
Z192ZnNfYmFja2VuZF9tdHBfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKyAgR1Zmc0Jh
Y2tlbmRNdHAgKmJhY2tlbmQ7CisKKyAgREVCVUcgKCIoSSkgZ192ZnNfYmFja2VuZF9tdHBfZmlu
YWxpemUiKTsKKworICBiYWNrZW5kID0gR19WRlNfQkFDS0VORF9NVFAgKG9iamVjdCk7CisKKyAg
Z19oYXNoX3RhYmxlX3VucmVmIChiYWNrZW5kLT5tb25pdG9ycyk7CisgIGdfbXV0ZXhfY2xlYXIg
KCZiYWNrZW5kLT5tdXRleCk7CisKKyAgaWYgKEdfT0JKRUNUX0NMQVNTIChnX3Zmc19iYWNrZW5k
X210cF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSkKKyAgICAoKkdfT0JKRUNUX0NMQVNTIChnX3Zm
c19iYWNrZW5kX210cF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSkgKG9iamVjdCk7CisKKyAgREVC
VUcgKCIoSSkgZ192ZnNfYmFja2VuZF9tdHBfZmluYWxpemUgZG9uZS4iKTsKK30KKworCisvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNb25pdG9y
cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwor
c3RhdGljIHZvaWQKK2RvX2NyZWF0ZV9kaXJfbW9uaXRvciAoR1Zmc0JhY2tlbmQgKmJhY2tlbmQs
CisgICAgICAgICAgICAgICAgICAgICAgIEdWZnNKb2JDcmVhdGVNb25pdG9yICpqb2IsCisgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICBHRmlsZU1vbml0b3JGbGFncyBmbGFncykKK3sKKyAgR1Zmc0JhY2tlbmRNdHAgKm10
cF9iYWNrZW5kID0gR19WRlNfQkFDS0VORF9NVFAgKGJhY2tlbmQpOworCisgIERFQlVHICgiKEkp
IGNyZWF0ZV9kaXJfbW9uaXRvciAoJXMpIiwgZmlsZW5hbWUpOworCisgIEdWZnNNb25pdG9yICp2
ZnNfbW9uaXRvciA9IGdfdmZzX21vbml0b3JfbmV3IChiYWNrZW5kKTsKKworICBnX29iamVjdF9z
ZXRfZGF0YV9mdWxsIChHX09CSkVDVCAodmZzX21vbml0b3IpLCAiZ3Zmc2JhY2tlbmRtdHA6cGF0
aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdfc3RyZHVwIChmaWxlbmFtZSksIGdfZnJl
ZSk7CisKKyAgZ192ZnNfam9iX2NyZWF0ZV9tb25pdG9yX3NldF9tb25pdG9yIChqb2IsIHZmc19t
b25pdG9yKTsKKyAgZ19oYXNoX3RhYmxlX2luc2VydCAobXRwX2JhY2tlbmQtPm1vbml0b3JzLCB2
ZnNfbW9uaXRvciwgTlVMTCk7CisgIGdfb2JqZWN0X3dlYWtfcmVmIChHX09CSkVDVCAodmZzX21v
bml0b3IpLCAoR1dlYWtOb3RpZnkpZ19oYXNoX3RhYmxlX3JlbW92ZSwgbXRwX2JhY2tlbmQtPm1v
bml0b3JzKTsKKyAgZ19vYmplY3RfdW5yZWYgKHZmc19tb25pdG9yKTsKKyAgZ192ZnNfam9iX3N1
Y2NlZWRlZCAoR19WRlNfSk9CIChqb2IpKTsKKworICBERUJVRyAoIihJKSBjcmVhdGVfZGlyX21v
bml0b3IgZG9uZS4iKTsKK30KKworCitzdGF0aWMgdm9pZAorZG9fY3JlYXRlX2ZpbGVfbW9uaXRv
ciAoR1Zmc0JhY2tlbmQgKmJhY2tlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICBHVmZzSm9i
Q3JlYXRlTW9uaXRvciAqam9iLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
ZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBHRmlsZU1vbml0b3JGbGFncyBmbGFn
cykKK3sKKyAgR1Zmc0JhY2tlbmRNdHAgKm10cF9iYWNrZW5kID0gR19WRlNfQkFDS0VORF9NVFAg
KGJhY2tlbmQpOworCisgIERFQlVHICgiKEkpIGNyZWF0ZV9maWxlX21vbml0b3IgKCVzKSIsIGZp
bGVuYW1lKTsKKworICBHVmZzTW9uaXRvciAqdmZzX21vbml0b3IgPSBnX3Zmc19tb25pdG9yX25l
dyAoYmFja2VuZCk7CisKKyAgZ19vYmplY3Rfc2V0X2RhdGFfZnVsbCAoR19PQkpFQ1QgKHZmc19t
b25pdG9yKSwgImd2ZnNiYWNrZW5kbXRwOnBhdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3N0cmR1cCAoZmlsZW5hbWUpLCBnX2ZyZWUpOworCisgIGdfdmZzX2pvYl9jcmVhdGVfbW9u
aXRvcl9zZXRfbW9uaXRvciAoam9iLCB2ZnNfbW9uaXRvcik7CisgIGdfaGFzaF90YWJsZV9pbnNl
cnQgKG10cF9iYWNrZW5kLT5tb25pdG9ycywgdmZzX21vbml0b3IsIE5VTEwpOworICBnX29iamVj
dF93ZWFrX3JlZiAoR19PQkpFQ1QgKHZmc19tb25pdG9yKSwgKEdXZWFrTm90aWZ5KWdfaGFzaF90
YWJsZV9yZW1vdmUsIG10cF9iYWNrZW5kLT5tb25pdG9ycyk7CisgIGdfb2JqZWN0X3VucmVmICh2
ZnNfbW9uaXRvcik7CisgIGdfdmZzX2pvYl9zdWNjZWVkZWQgKEdfVkZTX0pPQiAoam9iKSk7CisK
KyAgREVCVUcgKCIoSSkgY3JlYXRlX2ZpbGVfbW9uaXRvciBkb25lLiIpOworfQorCitzdGF0aWMg
dm9pZAorZW1pdF9ldmVudF9pbnRlcm5hbCAoR1Zmc01vbml0b3IgKm1vbml0b3IsCisgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgR0Zp
bGVNb25pdG9yRXZlbnQgZXZlbnQpCit7CisgIERFQlVHICgiKElJSSkgZW1pdF9ldmVudF9pbnRl
cm5hbCAoJXMsICVkKSIsIHBhdGgsIGV2ZW50KTsKKworICBjaGFyICpkaXIgPSBnX2Rpcm5hbWUg
KHBhdGgpOworICBjb25zdCBjaGFyICptb25pdG9yZWRfcGF0aCA9IGdfb2JqZWN0X2dldF9kYXRh
IChHX09CSkVDVCAobW9uaXRvciksICJndmZzYmFja2VuZG10cDpwYXRoIik7CisgIGlmIChnX3N0
cmNtcDAgKGRpciwgbW9uaXRvcmVkX3BhdGgpID09IDApIHsKKyAgICBERUJVRyAoIihJSUkpIGVt
aXRfZXZlbnRfaW50ZXJuYWw6IEV2ZW50ICVkIG9uIGRpcmVjdG9yeSAlcyBmb3IgJXMiLCBldmVu
dCwgZGlyLCBwYXRoKTsKKyAgICBnX3Zmc19tb25pdG9yX2VtaXRfZXZlbnQgKG1vbml0b3IsIGV2
ZW50LCBwYXRoLCBOVUxMKTsKKyAgfSBlbHNlIGlmIChnX3N0cmNtcDAgKHBhdGgsIG1vbml0b3Jl
ZF9wYXRoKSA9PSAwKSB7CisgICAgREVCVUcgKCIoSUlJKSBlbWl0X2V2ZW50X2ludGVybmFsOiBF
dmVudCAlZCBvbiBmaWxlICVzIiwgZXZlbnQsIHBhdGgpOworICAgIGdfdmZzX21vbml0b3JfZW1p
dF9ldmVudCAobW9uaXRvciwgZXZlbnQsIHBhdGgsIE5VTEwpOworICB9CisgIGdfZnJlZSAoZGly
KTsKKworICBERUJVRyAoIihJSUkpIGVtaXRfZXZlbnRfaW50ZXJuYWwgZG9uZS4iKTsKK30KKwor
c3RhdGljIHZvaWQKK2VtaXRfY3JlYXRlX2V2ZW50IChncG9pbnRlciBrZXksCisgICAgICAgICAg
ICAgICAgICAgZ3BvaW50ZXIgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNl
cl9kYXRhKQoreworICBERUJVRyAoIihJSSkgZW1pdF9jcmVhdGVfZXZlbnQuIik7CisgIGVtaXRf
ZXZlbnRfaW50ZXJuYWwgKGtleSwgdXNlcl9kYXRhLCBHX0ZJTEVfTU9OSVRPUl9FVkVOVF9DUkVB
VEVEKTsKK30KKworc3RhdGljIHZvaWQKK2VtaXRfZGVsZXRlX2V2ZW50IChncG9pbnRlciBrZXks
CisgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdmFsdWUsCisgICAgICAgICAgICAgICAgICAg
Z3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBERUJVRyAoIihJSSkgZW1pdF9kZWxldGVfZXZlbnQu
Iik7CisgIGVtaXRfZXZlbnRfaW50ZXJuYWwgKGtleSwgdXNlcl9kYXRhLCBHX0ZJTEVfTU9OSVRP
Ul9FVkVOVF9ERUxFVEVEKTsKK30KKworc3RhdGljIHZvaWQKK2VtaXRfY2hhbmdlX2V2ZW50IChn
cG9pbnRlciBrZXksCisgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdmFsdWUsCisgICAgICAg
ICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBERUJVRyAoIihJSSkgZW1pdF9j
aGFuZ2VfZXZlbnQuIik7CisgIGVtaXRfZXZlbnRfaW50ZXJuYWwgKGtleSwgdXNlcl9kYXRhLCBH
X0ZJTEVfTU9OSVRPUl9FVkVOVF9DSEFOR0VEKTsKK30KKworCisvKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFcnJvcnMKKyAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkCitmYWls
X2pvYiAoR1Zmc0pvYiAqam9iLCBMSUJNVFBfbXRwZGV2aWNlX3QgKmRldmljZSkKK3sKKyAgTElC
TVRQX2Vycm9yX3QgKmVycm9yID0gTElCTVRQX0dldF9FcnJvcnN0YWNrIChkZXZpY2UpOworCisg
IGdfdmZzX2pvYl9mYWlsZWQgKGpvYiwgR19JT19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAg
Z192ZnNfam9iX2lzX2NhbmNlbGxlZCAoam9iKSA/CisgICAgICAgICAgICAgICAgICAgICAgR19J
T19FUlJPUl9DQU5DRUxMRUQgOgorICAgICAgICAgICAgICAgICAgICAgIEdfSU9fRVJST1JfRkFJ
TEVELAorICAgICAgICAgICAgICAgICAgICBfKCJsaWJtdHAgZXJyb3I6ICVzIiksCisgICAgICAg
ICAgICAgICAgICAgIGdfc3RycnN0ciAoZXJyb3ItPmVycm9yX3RleHQsICI6IikgKyAxKTsKKwor
ICBMSUJNVFBfQ2xlYXJfRXJyb3JzdGFjayAoZGV2aWNlKTsKK30KKworCisvKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNb3VudHMKKyAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBMSUJN
VFBfbXRwZGV2aWNlX3QgKgorZ2V0X2RldmljZSAoR1Zmc0JhY2tlbmQgKmJhY2tlbmQsIGNvbnN0
IGNoYXIgKmlkLCBHVmZzSm9iICpqb2IpOworCisKK3N0YXRpYyB2b2lkCitvbl91ZXZlbnQgKEdV
ZGV2Q2xpZW50ICpjbGllbnQsIGdjaGFyICphY3Rpb24sIEdVZGV2RGV2aWNlICpkZXZpY2UsIGdw
b2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgY29uc3QgY2hhciAqZGV2X3BhdGggPSBnX3VkZXZfZGV2
aWNlX2dldF9kZXZpY2VfZmlsZSAoZGV2aWNlKTsKKyAgREVCVUcgKCIoSSkgb25fdWV2ZW50IChh
Y3Rpb24gJXMsIGRldmljZSAlcykiLCBhY3Rpb24sIGRldl9wYXRoKTsKKworICBpZiAoZGV2X3Bh
dGggPT0gTlVMTCkgeworICAgIHJldHVybjsKKyAgfQorCisgIEdWZnNCYWNrZW5kTXRwICpvcF9i
YWNrZW5kID0gR19WRlNfQkFDS0VORF9NVFAgKHVzZXJfZGF0YSk7CisKKyAgaWYgKGdfc3RyY21w
MCAob3BfYmFja2VuZC0+ZGV2X3BhdGgsIGRldl9wYXRoKSA9PSAwICYmCisgICAgICBnX3N0cl9l
cXVhbCAoYWN0aW9uLCAicmVtb3ZlIikpIHsKKyAgICBERUJVRyAoIihJKSBvbl91ZXZlbnQ6IFF1
aXRpbmcgYWZ0ZXIgcmVtb3ZlIGV2ZW50IG9uIGRldmljZSAlcyIsIGRldl9wYXRoKTsKKyAgICAv
KiBUT0RPOiBuZWVkIGEgY2xlYW5lciB3YXkgdG8gZm9yY2UgdW5tb3VudCBvdXJzZWx2ZXMgKi8K
KyAgICBleGl0ICgxKTsKKyAgfQorCisgIERFQlVHICgiKEkpIG9uX3VldmVudCBkb25lLiIpOwor
fQorCisjaWYgSEFWRV9MSUJNVFBfUkVBRF9FVkVOVAorc3RhdGljIGdwb2ludGVyCitjaGVja19l
dmVudCAoZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBHVmZzQmFja2VuZE10cCAqYmFja2VuZCA9
IHVzZXJfZGF0YTsKKworICBMSUJNVFBfZXZlbnRfdCBldmVudDsKKyAgaW50IHJldCA9IDA7Cisg
IHdoaWxlIChyZXQgPT0gMCkgeworICAgIHVpbnQzMl90IHBhcmFtMTsKKyAgICBjaGFyICpwYXRo
OworICAgIHJldCA9IExJQk1UUF9SZWFkX0V2ZW50IChiYWNrZW5kLT5kZXZpY2UsICZldmVudCwg
JnBhcmFtMSk7CisgICAgc3dpdGNoIChldmVudCkgeworICAgIGNhc2UgTElCTVRQX0VWRU5UX1NU
T1JFX0FEREVEOgorICAgICAgcGF0aCA9IGdfc3RyZHVwX3ByaW50ZiAoIi8ldSIsIHBhcmFtMSk7
CisgICAgICBnX211dGV4X2xvY2sgKCZiYWNrZW5kLT5tdXRleCk7CisgICAgICBnX2hhc2hfdGFi
bGVfZm9yZWFjaCAoYmFja2VuZC0+bW9uaXRvcnMsIGVtaXRfY3JlYXRlX2V2ZW50LCBwYXRoKTsK
KyAgICAgIGdfbXV0ZXhfdW5sb2NrICgmYmFja2VuZC0+bXV0ZXgpOworICAgICAgZ19mcmVlIChw
YXRoKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9Cisg
IH0KKyAgcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworc3RhdGljIGdib29sZWFuCittdHBfaGVh
cnRiZWF0IChHVmZzQmFja2VuZE10cCAqYmFja2VuZCkKK3sKKyAgaWYgKGdfbXV0ZXhfdHJ5bG9j
ayAoJmJhY2tlbmQtPm11dGV4KSkgeworICAgIExJQk1UUF9EdW1wX0RldmljZV9JbmZvKGJhY2tl
bmQtPmRldmljZSk7CisgICAgZ19tdXRleF91bmxvY2sgKCZiYWNrZW5kLT5tdXRleCk7CisgIH0K
KyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitkb19tb3VudCAoR1Zmc0JhY2tlbmQg
KmJhY2tlbmQsCisgICAgICAgICAgIEdWZnNKb2JNb3VudCAqam9iLAorICAgICAgICAgICBHTW91
bnRTcGVjICptb3VudF9zcGVjLAorICAgICAgICAgICBHTW91bnRTb3VyY2UgKm1vdW50X3NvdXJj
ZSwKKyAgICAgICAgICAgZ2Jvb2xlYW4gaXNfYXV0b21vdW50KQoreworICBHVmZzQmFja2VuZE10
cCAqb3BfYmFja2VuZCA9IEdfVkZTX0JBQ0tFTkRfTVRQIChiYWNrZW5kKTsKKworICBERUJVRyAo
IihJKSBkb19tb3VudCIpOworCisgIGNvbnN0IGNoYXIgKmhvc3QgPSBnX21vdW50X3NwZWNfZ2V0
IChtb3VudF9zcGVjLCAiaG9zdCIpOworICBERUJVRyAoIihJKSBkb19tb3VudDogaG9zdD0lcyIs
IGhvc3QpOworICBpZiAoaG9zdCA9PSBOVUxMKSB7CisgICAgR0Vycm9yICplcnJvcjsKKyAgICBn
X3NldF9lcnJvcl9saXRlcmFsICgmZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfRkFJTEVE
LCBfKCJObyBkZXZpY2Ugc3BlY2lmaWVkIikpOworICAgIGdfdmZzX2pvYl9mYWlsZWRfZnJvbV9l
cnJvciAoR19WRlNfSk9CIChqb2IpLCBlcnJvcik7CisgICAgZ19lcnJvcl9mcmVlIChlcnJvcik7
CisgICAgcmV0dXJuOworICB9CisKKyAgY29uc3QgY2hhciAqc3Vic3lzdGVtc1tdID0geyJ1c2Ii
LCBOVUxMfTsKKyAgb3BfYmFja2VuZC0+Z3VkZXZfY2xpZW50ID0gZ191ZGV2X2NsaWVudF9uZXcg
KHN1YnN5c3RlbXMpOworICBpZiAob3BfYmFja2VuZC0+Z3VkZXZfY2xpZW50ID09IE5VTEwpIHsK
KyAgICBHRXJyb3IgKmVycm9yOworICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwgKCZlcnJvciwgR19J
T19FUlJPUiwgR19JT19FUlJPUl9GQUlMRUQsIF8oIkNhbm5vdCBjcmVhdGUgZ3VkZXYgY2xpZW50
IikpOworICAgIGdfdmZzX2pvYl9mYWlsZWRfZnJvbV9lcnJvciAoR19WRlNfSk9CIChqb2IpLCBl
cnJvcik7CisgICAgZ19lcnJvcl9mcmVlIChlcnJvcik7CisgICAgcmV0dXJuOworICB9CisgIGdf
c2lnbmFsX2Nvbm5lY3QgKG9wX2JhY2tlbmQtPmd1ZGV2X2NsaWVudCwgInVldmVudCIsIEdfQ0FM
TEJBQ0sgKG9uX3VldmVudCksIG9wX2JhY2tlbmQpOworCisgIC8qIHR1cm4gdXNiOjAwMSwwNDEg
c3RyaW5nIGludG8gYW4gdWRldiBkZXZpY2UgbmFtZSAqLworICBpZiAoIWdfc3RyX2hhc19wcmVm
aXggKGhvc3QsICJbdXNiOiIpKSB7CisgICAgZ192ZnNfam9iX2ZhaWxlZCAoR19WRlNfSk9CIChq
b2IpLAorICAgICAgICAgICAgICAgICAgICAgIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfTk9UX1NV
UFBPUlRFRCwKKyAgICAgICAgICAgICAgICAgICAgICBfKCJVbmV4cGVjdGVkIGhvc3QgdXJpIGZv
cm1hdC4iKSk7CisgICAgcmV0dXJuOworICB9CisKKyAgY2hhciAqY29tbWE7CisgIGNoYXIgKmRl
dl9wYXRoID0gZ19zdHJjb25jYXQgKCIvZGV2L2J1cy91c2IvIiwgaG9zdCArIDUsIE5VTEwpOwor
ICBpZiAoKGNvbW1hID0gc3RyY2hyIChkZXZfcGF0aCwgJywnKSkgPT0gTlVMTCkgeworICAgIGdf
ZnJlZSAoZGV2X3BhdGgpOworICAgIGdfdmZzX2pvYl9mYWlsZWQgKEdfVkZTX0pPQiAoam9iKSwK
KyAgICAgICAgICAgICAgICAgICAgICBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PVF9TVVBQT1JU
RUQsCisgICAgICAgICAgICAgICAgICAgICAgXygiTWFsZm9ybWVkIGhvc3QgdXJpLiIpKTsKKyAg
ICByZXR1cm47CisgIH0KKyAgKmNvbW1hID0gJy8nOworICBkZXZfcGF0aFtzdHJsZW4gKGRldl9w
YXRoKSAtMV0gPSAnXDAnOworICBERUJVRyAoIihJKSBkb19tb3VudDogUGFyc2VkICclcycgaW50
byBkZXZpY2UgbmFtZSAlcyIsIGhvc3QsIGRldl9wYXRoKTsKKworICAvKiBmaW5kIGNvcnJlc3Bv
bmRpbmcgR1VkZXZEZXZpY2UgKi8KKyAgaWYgKCFnX3VkZXZfY2xpZW50X3F1ZXJ5X2J5X2Rldmlj
ZV9maWxlIChvcF9iYWNrZW5kLT5ndWRldl9jbGllbnQsIGRldl9wYXRoKSkgeworICAgIGdfZnJl
ZSAoZGV2X3BhdGgpOworICAgIGdfdmZzX2pvYl9mYWlsZWQgKEdfVkZTX0pPQiAoam9iKSwKKyAg
ICAgICAgICAgICAgICAgICAgICBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PVF9GT1VORCwKKyAg
ICAgICAgICAgICAgICAgICAgICBfKCJDb3VsZG4ndCBmaW5kIG1hdGNoaW5nIHVkZXYgZGV2aWNl
LiIpKTsKKyAgICByZXR1cm47CisgIH0KKworICBvcF9iYWNrZW5kLT5kZXZfcGF0aCA9IGRldl9w
YXRoOworCisgIExJQk1UUF9Jbml0ICgpOworCisgIGdldF9kZXZpY2UgKGJhY2tlbmQsIGhvc3Qs
IEdfVkZTX0pPQiAoam9iKSk7CisgIGlmICghR19WRlNfSk9CIChqb2IpLT5mYWlsZWQpIHsKKyAg
ICBHTW91bnRTcGVjICptdHBfbW91bnRfc3BlYyA9IGdfbW91bnRfc3BlY19uZXcgKCJtdHAiKTsK
KyAgICBnX21vdW50X3NwZWNfc2V0IChtdHBfbW91bnRfc3BlYywgImhvc3QiLCBob3N0KTsKKyAg
ICBnX3Zmc19iYWNrZW5kX3NldF9tb3VudF9zcGVjIChiYWNrZW5kLCBtdHBfbW91bnRfc3BlYyk7
CisgICAgZ19tb3VudF9zcGVjX3VucmVmIChtdHBfbW91bnRfc3BlYyk7CisKKyAgICBnX3Zmc19q
b2Jfc3VjY2VlZGVkIChHX1ZGU19KT0IgKGpvYikpOworCisgICAgb3BfYmFja2VuZC0+aGJfaWQg
PQorICAgICAgZ190aW1lb3V0X2FkZF9zZWNvbmRzICg5MDAsIChHU291cmNlRnVuYyltdHBfaGVh
cnRiZWF0LCBvcF9iYWNrZW5kKTsKKworI2lmIEhBVkVfTElCTVRQX1JFQURfRVZFTlQKKyAgICBn
X3RocmVhZF9uZXcgKCJldmVudHMiLCBjaGVja19ldmVudCwgYmFja2VuZCk7CisjZW5kaWYKKyAg
fQorICBERUJVRyAoIihJKSBkb19tb3VudCBkb25lLiIpOworfQorCisKK3N0YXRpYyB2b2lkCitk
b191bm1vdW50IChHVmZzQmFja2VuZCAqYmFja2VuZCwgR1Zmc0pvYlVubW91bnQgKmpvYiwKKyAg
ICAgICAgICAgIEdNb3VudFVubW91bnRGbGFncyBmbGFncywKKyAgICAgICAgICAgIEdNb3VudFNv
dXJjZSAqbW91bnRfc291cmNlKQoreworICBHVmZzQmFja2VuZE10cCAqb3BfYmFja2VuZDsKKwor
ICBERUJVRyAoIihJKSBkb191bW91bnQiKTsKKworICBvcF9iYWNrZW5kID0gR19WRlNfQkFDS0VO
RF9NVFAgKGJhY2tlbmQpOworCisgIGdfc291cmNlX3JlbW92ZSAob3BfYmFja2VuZC0+aGJfaWQp
OworICBnX29iamVjdF91bnJlZiAob3BfYmFja2VuZC0+Z3VkZXZfY2xpZW50KTsKKyAgZ19mcmVl
IChvcF9iYWNrZW5kLT5kZXZfcGF0aCk7CisKKyAgZ19tdXRleF9sb2NrICgmR19WRlNfQkFDS0VO
RF9NVFAgKGJhY2tlbmQpLT5tdXRleCk7CisgIExJQk1UUF9SZWxlYXNlX0RldmljZSAob3BfYmFj
a2VuZC0+ZGV2aWNlKTsKKyAgZ19tdXRleF91bmxvY2sgKCZHX1ZGU19CQUNLRU5EX01UUCAoYmFj
a2VuZCktPm11dGV4KTsKKworICBnX3Zmc19qb2Jfc3VjY2VlZGVkIChHX1ZGU19KT0IgKGpvYikp
OworCisgIERFQlVHICgiKEkpIGRvX3Vtb3VudCBkb25lLiIpOworfQorCisKKworCisKKworCisv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAJICBR
dWVyaWVzCisgKiAKKyAqLworCitMSUJNVFBfbXRwZGV2aWNlX3QgKgorZ2V0X2RldmljZSAoR1Zm
c0JhY2tlbmQgKmJhY2tlbmQsIGNvbnN0IGNoYXIgKmlkLCBHVmZzSm9iICpqb2IpIHsKKyAgREVC
VUcgKCIoSUkpIGdldF9kZXZpY2U6ICVzIiwgaWQpOworCisgIExJQk1UUF9tdHBkZXZpY2VfdCAq
ZGV2aWNlID0gTlVMTDsKKworICBpZiAoR19WRlNfQkFDS0VORF9NVFAgKGJhY2tlbmQpLT5kZXZp
Y2UgIT0gTlVMTCkgeworICAgIERFQlVHICgiKElJKSBnZXRfZGV2aWNlOiBSZXR1cm5pbmcgY2Fj
aGVkIGRldmljZSAlcCIsIGRldmljZSk7CisgICAgcmV0dXJuIEdfVkZTX0JBQ0tFTkRfTVRQIChi
YWNrZW5kKS0+ZGV2aWNlOworICB9CisKKyAgTElCTVRQX3Jhd19kZXZpY2VfdCAqIHJhd2Rldmlj
ZXM7CisgIGludCBudW1yYXdkZXZpY2VzOworICBMSUJNVFBfZXJyb3JfbnVtYmVyX3QgZXJyOwor
CisgIGVyciA9IExJQk1UUF9EZXRlY3RfUmF3X0RldmljZXMgKCZyYXdkZXZpY2VzLCAmbnVtcmF3
ZGV2aWNlcyk7CisgIHN3aXRjaCAoZXJyKSB7CisgIGNhc2UgTElCTVRQX0VSUk9SX05PTkU6Cisg
ICAgYnJlYWs7CisgIGNhc2UgTElCTVRQX0VSUk9SX05PX0RFVklDRV9BVFRBQ0hFRDoKKyAgICBn
X3Zmc19qb2JfZmFpbGVkIChHX1ZGU19KT0IgKGpvYiksCisgICAgICAgICAgICAgICAgICAgICAg
R19JT19FUlJPUiwgR19JT19FUlJPUl9OT1RfRk9VTkQsCisgICAgICAgICAgICAgICAgICAgICAg
XygiTm8gTVRQIGRldmljZXMgZm91bmQiKSk7CisgICAgZ290byBleGl0OworICBjYXNlIExJQk1U
UF9FUlJPUl9DT05ORUNUSU5HOgorICAgIGdfdmZzX2pvYl9mYWlsZWQgKEdfVkZTX0pPQiAoam9i
KSwKKyAgICAgICAgICAgICAgICAgICAgICBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NPTk5FQ1RJ
T05fUkVGVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICBfKCJVbmFibGUgdG8gY29ubmVjdCB0
byBNVFAgZGV2aWNlIikpOworICAgIGdvdG8gZXhpdDsKKyAgY2FzZSBMSUJNVFBfRVJST1JfTUVN
T1JZX0FMTE9DQVRJT046CisgICAgZ192ZnNfam9iX2ZhaWxlZCAoR19WRlNfSk9CIChqb2IpLAor
ICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9FUlJPUiwgR19GSUxFX0VSUk9SX05PTUVNLAor
ICAgICAgICAgICAgICAgICAgICAgIF8oIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgd2hpbGUg
ZGV0ZWN0aW5nIE1UUCBkZXZpY2VzIikpOworICAgIGdvdG8gZXhpdDsKKyAgY2FzZSBMSUJNVFBf
RVJST1JfR0VORVJBTDoKKyAgZGVmYXVsdDoKKyAgICBnX3Zmc19qb2JfZmFpbGVkIChHX1ZGU19K
T0IgKGpvYiksCisgICAgICAgICAgICAgICAgICAgICAgR19JT19FUlJPUiwgR19JT19FUlJPUl9G
QUlMRUQsCisgICAgICAgICAgICAgICAgICAgICAgXygiR2VuZXJpYyBsaWJtdHAgZXJyb3IiKSk7
CisgICAgZ290byBleGl0OworICB9CisKKyAgLyogSXRlcmF0ZSBvdmVyIGNvbm5lY3RlZCBNVFAg
ZGV2aWNlcyAqLworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IG51bXJhd2RldmljZXM7IGkr
KykgeworICAgIGNoYXIgKm5hbWU7CisgICAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIlt1c2I6
JTAzdSwlMDN1XSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3ZGV2aWNlc1tpXS5i
dXNfbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3ZGV2aWNlc1tpXS5k
ZXZudW0pOworCisgICAgaWYgKHN0cmNtcCAoaWQsIG5hbWUpID09IDApIHsKKyAgICAgIGRldmlj
ZSA9IExJQk1UUF9PcGVuX1Jhd19EZXZpY2VfVW5jYWNoZWQgKCZyYXdkZXZpY2VzW2ldKTsKKyAg
ICAgIGlmIChkZXZpY2UgPT0gTlVMTCkgeworICAgICAgICBnX3Zmc19qb2JfZmFpbGVkIChHX1ZG
U19KT0IgKGpvYiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdfSU9fRVJST1IsIEdfSU9f
RVJST1JfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJVbmFibGUgdG8gb3Bl
biBNVFAgZGV2aWNlICclcyciKSwgbmFtZSk7CisgICAgICAgIGdfZnJlZSAobmFtZSk7CisgICAg
ICAgIGdvdG8gZXhpdDsKKyAgICAgIH0KKworICAgICAgREVCVUcgKCIoSUkpIGdldF9kZXZpY2U6
IFN0b3JpbmcgZGV2aWNlICVzIiwgbmFtZSk7CisgICAgICBHX1ZGU19CQUNLRU5EX01UUCAoYmFj
a2VuZCktPmRldmljZSA9IGRldmljZTsKKworICAgICAgTElCTVRQX0R1bXBfRXJyb3JzdGFjayAo
ZGV2aWNlKTsKKyAgICAgIExJQk1UUF9DbGVhcl9FcnJvcnN0YWNrIChkZXZpY2UpOworICAgICAg
YnJlYWs7CisgICAgfSBlbHNlIHsKKyAgICAgIGdfZnJlZSAobmFtZSk7CisgICAgfQorICB9CisK
KyBleGl0OgorICBERUJVRyAoIihJSSkgZ2V0X2RldmljZSBkb25lLiIpOworICByZXR1cm4gZGV2
aWNlOworfQorCitzdGF0aWMgdm9pZAorZ2V0X2RldmljZV9pbmZvIChHVmZzQmFja2VuZE10cCAq
YmFja2VuZCwgR0ZpbGVJbmZvICppbmZvKQoreworICBMSUJNVFBfbXRwZGV2aWNlX3QgKmRldmlj
ZSA9IGJhY2tlbmQtPmRldmljZTsKKyAgY29uc3QgY2hhciAqbmFtZTsKKworICBuYW1lID0gZ19t
b3VudF9zcGVjX2dldCAoZ192ZnNfYmFja2VuZF9nZXRfbW91bnRfc3BlYyAoR19WRlNfQkFDS0VO
RCAoYmFja2VuZCkpLCAiaG9zdCIpOworCisgIERFQlVHX0VOVU1FUkFURSAoIihJSSkgZ2V0X2Rl
dmljZV9pbmZvOiAlcyIsIG5hbWUpOworCisgIGdfZmlsZV9pbmZvX3NldF9maWxlX3R5cGUgKGlu
Zm8sIEdfRklMRV9UWVBFX0RJUkVDVE9SWSk7CisgIGdfZmlsZV9pbmZvX3NldF9uYW1lIChpbmZv
LCBuYW1lKTsKKworICBjaGFyICpmcmllbmRseW5hbWUgPSBMSUJNVFBfR2V0X0ZyaWVuZGx5bmFt
ZSAoZGV2aWNlKTsKKyAgZ19maWxlX2luZm9fc2V0X2Rpc3BsYXlfbmFtZSAoaW5mbywgZnJpZW5k
bHluYW1lID09IE5VTEwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJVbm5hbWVkIERldmljZSIpIDogZnJpZW5kbHluYW1lKTsKKyAgZnJlZSAoZnJpZW5kbHluYW1l
KTsKKworICBnX2ZpbGVfaW5mb19zZXRfZmlsZV90eXBlIChpbmZvLCBHX0ZJTEVfVFlQRV9ESVJF
Q1RPUlkpOworICBnX2ZpbGVfaW5mb19zZXRfY29udGVudF90eXBlIChpbmZvLCAiaW5vZGUvZGly
ZWN0b3J5Iik7CisgIGdfZmlsZV9pbmZvX3NldF9zaXplIChpbmZvLCAwKTsKKworICBHSWNvbiAq
aWNvbiA9IGdfdGhlbWVkX2ljb25fbmV3ICgibXVsdGltZWRpYS1wbGF5ZXIiKTsKKyAgZ19maWxl
X2luZm9fc2V0X2ljb24gKGluZm8sIGljb24pOworICBnX29iamVjdF91bnJlZiAoaWNvbik7CisK
KyAgZ19maWxlX2luZm9fc2V0X2F0dHJpYnV0ZV9ib29sZWFuIChpbmZvLCBHX0ZJTEVfQVRUUklC
VVRFX0FDQ0VTU19DQU5fUkVBRCwgVFJVRSk7CisgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVf
Ym9vbGVhbiAoaW5mbywgR19GSUxFX0FUVFJJQlVURV9BQ0NFU1NfQ0FOX1dSSVRFLCBUUlVFKTsK
KyAgZ19maWxlX2luZm9fc2V0X2F0dHJpYnV0ZV9ib29sZWFuIChpbmZvLCBHX0ZJTEVfQVRUUklC
VVRFX0FDQ0VTU19DQU5fREVMRVRFLCBGQUxTRSk7CisgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1
dGVfYm9vbGVhbiAoaW5mbywgR19GSUxFX0FUVFJJQlVURV9BQ0NFU1NfQ0FOX0VYRUNVVEUsIFRS
VUUpOworICBnX2ZpbGVfaW5mb19zZXRfYXR0cmlidXRlX2Jvb2xlYW4gKGluZm8sIEdfRklMRV9B
VFRSSUJVVEVfQUNDRVNTX0NBTl9UUkFTSCwgRkFMU0UpOworICBnX2ZpbGVfaW5mb19zZXRfYXR0
cmlidXRlX2Jvb2xlYW4gKGluZm8sIEdfRklMRV9BVFRSSUJVVEVfQUNDRVNTX0NBTl9SRU5BTUUs
IFRSVUUpOyAKKworICBnX2ZpbGVfaW5mb19zZXRfYXR0cmlidXRlX3N0cmluZyAoaW5mbywgR19G
SUxFX0FUVFJJQlVURV9GSUxFU1lTVEVNX1RZUEUsICJtdHBmcyIpOworCisgIGludCByZXQgPSBM
SUJNVFBfR2V0X1N0b3JhZ2UgKGRldmljZSwgTElCTVRQX1NUT1JBR0VfU09SVEJZX05PVFNPUlRF
RCk7CisgIGlmIChyZXQgIT0gMCkgeworICAgIExJQk1UUF9EdW1wX0Vycm9yc3RhY2sgKGRldmlj
ZSk7CisgICAgTElCTVRQX0NsZWFyX0Vycm9yc3RhY2sgKGRldmljZSk7CisgICAgREVCVUdfRU5V
TUVSQVRFICgiKElJKSBnZXRfZGV2aWNlX2luZm8gZG9uZSB3aXRoIG5vIHN0b3Jlcy4iKTsKKyAg
ICByZXR1cm47CisgIH0KKyAgZ3VpbnQ2NCBmcmVlU3BhY2UgPSAwOworICBndWludDY0IG1heFNw
YWNlID0gMDsKKyAgTElCTVRQX2RldmljZXN0b3JhZ2VfdCAqc3RvcmFnZTsKKyAgZm9yIChzdG9y
YWdlID0gZGV2aWNlLT5zdG9yYWdlOyBzdG9yYWdlICE9IDA7IHN0b3JhZ2UgPSBzdG9yYWdlLT5u
ZXh0KSB7CisgICAgZnJlZVNwYWNlICs9IHN0b3JhZ2UtPkZyZWVTcGFjZUluQnl0ZXM7CisgICAg
bWF4U3BhY2UgKz0gc3RvcmFnZS0+TWF4Q2FwYWNpdHk7CisgIH0KKworICBnX2ZpbGVfaW5mb19z
ZXRfYXR0cmlidXRlX3VpbnQ2NCAoaW5mbywgR19GSUxFX0FUVFJJQlVURV9GSUxFU1lTVEVNX0ZS
RUUsIGZyZWVTcGFjZSk7CisgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfdWludDY0IChpbmZv
LCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fU0laRSwgbWF4U3BhY2UpOworCisgIERFQlVH
X0VOVU1FUkFURSAoIihJSSkgZ2V0X2RldmljZV9pbmZvIGRvbmUuIik7Cit9CisKK3N0YXRpYyB2
b2lkCitnZXRfc3RvcmFnZV9pbmZvIChMSUJNVFBfZGV2aWNlc3RvcmFnZV90ICpzdG9yYWdlLCBH
RmlsZUluZm8gKmluZm8pIHsKKworICBjaGFyICppZCA9IGdfc3RyZHVwX3ByaW50ZiAoIiV1Iiwg
c3RvcmFnZS0+aWQpOworICBnX2ZpbGVfaW5mb19zZXRfbmFtZSAoaW5mbywgaWQpOworICBnX2Zy
ZWUgKGlkKTsKKworICBERUJVR19FTlVNRVJBVEUgKCIoSUkpIGdldF9zdG9yYWdlX2luZm86ICVz
Iiwgc3RvcmFnZS0+aWQpOworCisgIGdfZmlsZV9pbmZvX3NldF9kaXNwbGF5X25hbWUgKGluZm8s
IHN0b3JhZ2UtPlN0b3JhZ2VEZXNjcmlwdGlvbik7CisgIGdfZmlsZV9pbmZvX3NldF9maWxlX3R5
cGUgKGluZm8sIEdfRklMRV9UWVBFX0RJUkVDVE9SWSk7CisgIGdfZmlsZV9pbmZvX3NldF9jb250
ZW50X3R5cGUgKGluZm8sICJpbm9kZS9kaXJlY3RvcnkiKTsKKyAgZ19maWxlX2luZm9fc2V0X3Np
emUgKGluZm8sIDApOworCisgIEdJY29uICppY29uOworICBzd2l0Y2ggKHN0b3JhZ2UtPlN0b3Jh
Z2VUeXBlKSB7CisgIGNhc2UgUFRQX1NUX0ZpeGVkUk9NOgorICAgIGdfZmlsZV9pbmZvX3NldF9h
dHRyaWJ1dGVfYm9vbGVhbiAoaW5mbywgR19GSUxFX0FUVFJJQlVURV9GSUxFU1lTVEVNX1JFQURP
TkxZLCBUUlVFKTsKKyAgICBpY29uID0gZ190aGVtZWRfaWNvbl9uZXdfd2l0aF9kZWZhdWx0X2Zh
bGxiYWNrcyAoImRyaXZlLWhhcmRkaXNrIik7CisgICAgYnJlYWs7CisgIGNhc2UgUFRQX1NUX1Jl
bW92YWJsZVJPTToKKyAgICBnX2ZpbGVfaW5mb19zZXRfYXR0cmlidXRlX2Jvb2xlYW4gKGluZm8s
IEdfRklMRV9BVFRSSUJVVEVfRklMRVNZU1RFTV9SRUFET05MWSwgVFJVRSk7CisgICAgaWNvbiA9
IGdfdGhlbWVkX2ljb25fbmV3X3dpdGhfZGVmYXVsdF9mYWxsYmFja3MgKCJtZWRpYS1tZW1vcnkt
c2QiKTsKKyAgICBicmVhazsKKyAgY2FzZSBQVFBfU1RfUmVtb3ZhYmxlUkFNOgorICAgIGdfZmls
ZV9pbmZvX3NldF9hdHRyaWJ1dGVfYm9vbGVhbiAoaW5mbywgR19GSUxFX0FUVFJJQlVURV9GSUxF
U1lTVEVNX1JFQURPTkxZLCBGQUxTRSk7CisgICAgaWNvbiA9IGdfdGhlbWVkX2ljb25fbmV3X3dp
dGhfZGVmYXVsdF9mYWxsYmFja3MgKCJtZWRpYS1tZW1vcnktc2QiKTsKKyAgICBicmVhazsKKyAg
Y2FzZSBQVFBfU1RfRml4ZWRSQU06CisgIGRlZmF1bHQ6CisgICAgZ19maWxlX2luZm9fc2V0X2F0
dHJpYnV0ZV9ib29sZWFuIChpbmZvLCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fUkVBRE9O
TFksIEZBTFNFKTsKKyAgICBpY29uID0gZ190aGVtZWRfaWNvbl9uZXdfd2l0aF9kZWZhdWx0X2Zh
bGxiYWNrcyAoImRyaXZlLWhhcmRkaXNrIik7CisgICAgYnJlYWs7CisgIH0KKyAgZ19maWxlX2lu
Zm9fc2V0X2ljb24gKGluZm8sIGljb24pOworICBnX29iamVjdF91bnJlZiAoaWNvbik7CisKKyAg
Z19maWxlX2luZm9fc2V0X2F0dHJpYnV0ZV9ib29sZWFuIChpbmZvLCBHX0ZJTEVfQVRUUklCVVRF
X0FDQ0VTU19DQU5fUkVBRCwgVFJVRSk7CisgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfYm9v
bGVhbiAoaW5mbywgR19GSUxFX0FUVFJJQlVURV9BQ0NFU1NfQ0FOX1dSSVRFLCBUUlVFKTsKKyAg
Z19maWxlX2luZm9fc2V0X2F0dHJpYnV0ZV9ib29sZWFuIChpbmZvLCBHX0ZJTEVfQVRUUklCVVRF
X0FDQ0VTU19DQU5fREVMRVRFLCBGQUxTRSk7CisgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVf
Ym9vbGVhbiAoaW5mbywgR19GSUxFX0FUVFJJQlVURV9BQ0NFU1NfQ0FOX0VYRUNVVEUsIFRSVUUp
OworICBnX2ZpbGVfaW5mb19zZXRfYXR0cmlidXRlX2Jvb2xlYW4gKGluZm8sIEdfRklMRV9BVFRS
SUJVVEVfQUNDRVNTX0NBTl9UUkFTSCwgRkFMU0UpOworICBnX2ZpbGVfaW5mb19zZXRfYXR0cmli
dXRlX2Jvb2xlYW4gKGluZm8sIEdfRklMRV9BVFRSSUJVVEVfQUNDRVNTX0NBTl9SRU5BTUUsIEZB
TFNFKTsgCisKKyAgZ19maWxlX2luZm9fc2V0X2F0dHJpYnV0ZV91aW50NjQgKGluZm8sIEdfRklM
RV9BVFRSSUJVVEVfRklMRVNZU1RFTV9GUkVFLCBzdG9yYWdlLT5GcmVlU3BhY2VJbkJ5dGVzKTsK
KyAgZ19maWxlX2luZm9fc2V0X2F0dHJpYnV0ZV91aW50NjQgKGluZm8sIEdfRklMRV9BVFRSSUJV
VEVfRklMRVNZU1RFTV9TSVpFLCBzdG9yYWdlLT5NYXhDYXBhY2l0eSk7CisgIGdfZmlsZV9pbmZv
X3NldF9hdHRyaWJ1dGVfc3RyaW5nIChpbmZvLCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1f
VFlQRSwgIm10cGZzIik7CisKKyAgREVCVUdfRU5VTUVSQVRFICgiKElJKSBnZXRfc3RvcmFnZV9p
bmZvIGRvbmUuIik7Cit9CisKK3N0YXRpYyB2b2lkCitnZXRfZmlsZV9pbmZvIChHVmZzQmFja2Vu
ZCAqYmFja2VuZCwKKyAgICAgICAgICAgICAgIExJQk1UUF9tdHBkZXZpY2VfdCAqZGV2aWNlLAor
ICAgICAgICAgICAgICAgR0ZpbGVJbmZvICppbmZvLAorICAgICAgICAgICAgICAgTElCTVRQX2Zp
bGVfdCAqZmlsZSkgeworICBHSWNvbiAqaWNvbiA9IE5VTEw7CisgIGNoYXIgKmNvbnRlbnRfdHlw
ZSA9IE5VTEw7CisKKyAgY2hhciAqaWQgPSBnX3N0cmR1cF9wcmludGYgKCIldSIsIGZpbGUtPml0
ZW1faWQpOworICBnX2ZpbGVfaW5mb19zZXRfbmFtZSAoaW5mbywgaWQpOworICBnX2ZyZWUgKGlk
KTsKKworICBERUJVR19FTlVNRVJBVEUgKCIoSUkpIGdldF9maWxlX2luZm86ICV1IiwgZmlsZS0+
aXRlbV9pZCk7CisKKyAgZ19maWxlX2luZm9fc2V0X2Rpc3BsYXlfbmFtZSAoaW5mbywgZmlsZS0+
ZmlsZW5hbWUpOworCisgIHN3aXRjaCAoZmlsZS0+ZmlsZXR5cGUpIHsKKyAgY2FzZSBMSUJNVFBf
RklMRVRZUEVfRk9MREVSOgorICAgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfYm9vbGVhbiAo
aW5mbywgR19GSUxFX0FUVFJJQlVURV9BQ0NFU1NfQ0FOX0VYRUNVVEUsIFRSVUUpOworICAgIGdf
ZmlsZV9pbmZvX3NldF9maWxlX3R5cGUgKGluZm8sIEdfRklMRV9UWVBFX0RJUkVDVE9SWSk7Cisg
ICAgZ19maWxlX2luZm9fc2V0X2NvbnRlbnRfdHlwZSAoaW5mbywgImlub2RlL2RpcmVjdG9yeSIp
OworICAgIGljb24gPSBnX3RoZW1lZF9pY29uX25ldyAoImZvbGRlciIpOworICAgIGJyZWFrOwor
ICBkZWZhdWx0OgorICAgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfYm9vbGVhbiAoaW5mbywg
R19GSUxFX0FUVFJJQlVURV9BQ0NFU1NfQ0FOX0VYRUNVVEUsIEZBTFNFKTsKKyAgICBnX2ZpbGVf
aW5mb19zZXRfZmlsZV90eXBlIChpbmZvLCBHX0ZJTEVfVFlQRV9SRUdVTEFSKTsKKyAgICBjb250
ZW50X3R5cGUgPSBnX2NvbnRlbnRfdHlwZV9ndWVzcyAoZmlsZS0+ZmlsZW5hbWUsIE5VTEwsIDAs
IE5VTEwpOworICAgIGdfZmlsZV9pbmZvX3NldF9jb250ZW50X3R5cGUgKGluZm8sIGNvbnRlbnRf
dHlwZSk7CisgICAgaWNvbiA9IGdfY29udGVudF90eXBlX2dldF9pY29uIChjb250ZW50X3R5cGUp
OworICAgIGJyZWFrOworICB9CisKKworI2lmIEhBVkVfTElCTVRQX0dFVF9USFVNQk5BSUwKKyAg
aWYgKExJQk1UUF9GSUxFVFlQRV9JU19JTUFHRSAoZmlsZS0+ZmlsZXR5cGUpIHx8CisgICAgICBM
SUJNVFBfRklMRVRZUEVfSVNfVklERU8gKGZpbGUtPmZpbGV0eXBlKSB8fAorICAgICAgTElCTVRQ
X0ZJTEVUWVBFX0lTX0FVRElPVklERU8gKGZpbGUtPmZpbGV0eXBlKSkgeworCisgICAgY2hhciAq
aWNvbl9pZDsKKyAgICBHSWNvbiAqaWNvbjsKKyAgICBHTW91bnRTcGVjICptb3VudF9zcGVjOwor
CisgICAgbW91bnRfc3BlYyA9IGdfdmZzX2JhY2tlbmRfZ2V0X21vdW50X3NwZWMgKGJhY2tlbmQp
OworICAgIGljb25faWQgPSBnX3N0cmR1cF9wcmludGYgKCIldSIsIGZpbGUtPml0ZW1faWQpOwor
ICAgIGljb24gPSBnX3Zmc19pY29uX25ldyAobW91bnRfc3BlYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGljb25faWQpOworICAgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfb2JqZWN0
IChpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfQVRU
UklCVVRFX1BSRVZJRVdfSUNPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR19PQkpFQ1QgKGljb24pKTsKKyAgICBnX29iamVjdF91bnJlZiAoaWNvbik7CisgICAgZ19m
cmVlIChpY29uX2lkKTsKKyAgfQorI2VuZGlmCisKKyAgZ19maWxlX2luZm9fc2V0X3NpemUgKGlu
Zm8sIGZpbGUtPmZpbGVzaXplKTsKKworICBHVGltZVZhbCBtb2R0aW1lID0geyBmaWxlLT5tb2Rp
ZmljYXRpb25kYXRlLCAwIH07CisgIGdfZmlsZV9pbmZvX3NldF9tb2RpZmljYXRpb25fdGltZSAo
aW5mbywgJm1vZHRpbWUpOworCisgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfYm9vbGVhbiAo
aW5mbywgR19GSUxFX0FUVFJJQlVURV9BQ0NFU1NfQ0FOX1JFQUQsIFRSVUUpOworICBnX2ZpbGVf
aW5mb19zZXRfYXR0cmlidXRlX2Jvb2xlYW4gKGluZm8sIEdfRklMRV9BVFRSSUJVVEVfQUNDRVNT
X0NBTl9XUklURSwgVFJVRSk7CisgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfYm9vbGVhbiAo
aW5mbywgR19GSUxFX0FUVFJJQlVURV9BQ0NFU1NfQ0FOX0RFTEVURSwgVFJVRSk7CisgIGdfZmls
ZV9pbmZvX3NldF9hdHRyaWJ1dGVfYm9vbGVhbiAoaW5mbywgR19GSUxFX0FUVFJJQlVURV9BQ0NF
U1NfQ0FOX1RSQVNILCBGQUxTRSk7CisgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfYm9vbGVh
biAoaW5mbywgR19GSUxFX0FUVFJJQlVURV9BQ0NFU1NfQ0FOX1JFTkFNRSwgVFJVRSk7CisgIGdf
ZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfc3RyaW5nIChpbmZvLCBHX0ZJTEVfQVRUUklCVVRFX1NU
QU5EQVJEX0NPUFlfTkFNRSwgZmlsZS0+ZmlsZW5hbWUpOworCisKKyAgaWYgKGljb24gIT0gTlVM
TCkgeworICAgIGdfZmlsZV9pbmZvX3NldF9pY29uIChpbmZvLCBpY29uKTsKKyAgICBnX29iamVj
dF91bnJlZiAoaWNvbik7CisgIH0KKyAgZ19mcmVlIChjb250ZW50X3R5cGUpOworCisgIERFQlVH
X0VOVU1FUkFURSAoIihJSSkgZ2V0X2ZpbGVfaW5mbyBkb25lLiIpOworfQorCisKK3N0YXRpYyB2
b2lkCitkb19lbnVtZXJhdGUgKEdWZnNCYWNrZW5kICpiYWNrZW5kLAorICAgICAgICAgICAgICAg
R1Zmc0pvYkVudW1lcmF0ZSAqam9iLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5h
bWUsCisgICAgICAgICAgICAgICBHRmlsZUF0dHJpYnV0ZU1hdGNoZXIgKmF0dHJpYnV0ZV9tYXRj
aGVyLAorICAgICAgICAgICAgICAgR0ZpbGVRdWVyeUluZm9GbGFncyBmbGFncykKK3sKKyAgR1Zm
c0JhY2tlbmRNdHAgKm9wX2JhY2tlbmQgPSBHX1ZGU19CQUNLRU5EX01UUCAoYmFja2VuZCk7Cisg
IEdGaWxlSW5mbyAqaW5mbzsKKworICBnY2hhciAqKmVsZW1lbnRzID0gZ19zdHJzcGxpdF9zZXQg
KGZpbGVuYW1lLCAiLyIsIC0xKTsKKyAgdW5zaWduZWQgaW50IG5lID0gMDsKKyAgZm9yIChuZSA9
IDA7IGVsZW1lbnRzW25lXSAhPSBOVUxMOyBuZSsrKTsKKworICBERUJVRyAoIihJKSBkb19lbnVt
ZXJhdGUgKGZpbGVuYW1lID0gJXMsIG5fZWxlbWVudHMgPSAlZCkgIiwgZmlsZW5hbWUsIG5lKTsK
KworICBnX211dGV4X2xvY2sgKCZHX1ZGU19CQUNLRU5EX01UUCAoYmFja2VuZCktPm11dGV4KTsK
KworICBMSUJNVFBfbXRwZGV2aWNlX3QgKmRldmljZTsKKyAgZGV2aWNlID0gb3BfYmFja2VuZC0+
ZGV2aWNlOworCisgIGlmIChuZSA9PSAyICYmIGVsZW1lbnRzWzFdWzBdID09ICdcMCcpIHsKKyAg
ICBMSUJNVFBfZGV2aWNlc3RvcmFnZV90ICpzdG9yYWdlOworCisgICAgaW50IHJldCA9IExJQk1U
UF9HZXRfU3RvcmFnZSAoZGV2aWNlLCBMSUJNVFBfU1RPUkFHRV9TT1JUQllfTk9UU09SVEVEKTsK
KyAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgIExJQk1UUF9EdW1wX0Vycm9yc3RhY2sgKGRldmlj
ZSk7CisgICAgICBMSUJNVFBfQ2xlYXJfRXJyb3JzdGFjayAoZGV2aWNlKTsKKyAgICAgIGdvdG8g
c3VjY2VzczsKKyAgICB9CisgICAgZm9yIChzdG9yYWdlID0gZGV2aWNlLT5zdG9yYWdlOyBzdG9y
YWdlICE9IDA7IHN0b3JhZ2UgPSBzdG9yYWdlLT5uZXh0KSB7CisgICAgICBpbmZvID0gZ19maWxl
X2luZm9fbmV3ICgpOworICAgICAgZ2V0X3N0b3JhZ2VfaW5mbyAoc3RvcmFnZSwgaW5mbyk7Cisg
ICAgICBnX3Zmc19qb2JfZW51bWVyYXRlX2FkZF9pbmZvIChqb2IsIGluZm8pOworICAgICAgZ19v
YmplY3RfdW5yZWYgKGluZm8pOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBMSUJNVFBfZmlsZV90
ICpmaWxlczsKKworICAgIGludCBwaWQgPSAobmUgPT0gMiA/IC0xIDogc3RydG9sIChlbGVtZW50
c1tuZS0xXSwgTlVMTCwgMTApKTsKKworICAgIExJQk1UUF9DbGVhcl9FcnJvcnN0YWNrIChkZXZp
Y2UpOworICAgIGZpbGVzID0gTElCTVRQX0dldF9GaWxlc19BbmRfRm9sZGVycyAoZGV2aWNlLCBz
dHJ0b2wgKGVsZW1lbnRzWzFdLCBOVUxMLCAxMCksIHBpZCk7CisgICAgaWYgKGZpbGVzID09IE5V
TEwgJiYgTElCTVRQX0dldF9FcnJvcnN0YWNrIChkZXZpY2UpICE9IE5VTEwpIHsKKyAgICAgIGZh
aWxfam9iIChHX1ZGU19KT0IgKGpvYiksIGRldmljZSk7CisgICAgICBnb3RvIGV4aXQ7CisgICAg
fQorICAgIHdoaWxlIChmaWxlcyAhPSBOVUxMKSB7CisgICAgICBMSUJNVFBfZmlsZV90ICpmaWxl
ID0gZmlsZXM7CisgICAgICBmaWxlcyA9IGZpbGVzLT5uZXh0OworCisgICAgICBpbmZvID0gZ19m
aWxlX2luZm9fbmV3ICgpOworICAgICAgZ2V0X2ZpbGVfaW5mbyAoYmFja2VuZCwgZGV2aWNlLCBp
bmZvLCBmaWxlKTsKKyAgICAgIGdfdmZzX2pvYl9lbnVtZXJhdGVfYWRkX2luZm8gKGpvYiwgaW5m
byk7CisgICAgICBnX29iamVjdF91bnJlZiAoaW5mbyk7CisKKyAgICAgIExJQk1UUF9kZXN0cm95
X2ZpbGVfdCAoZmlsZSk7CisgICAgfQorICB9CisKKyBzdWNjZXNzOgorICBnX3Zmc19qb2JfZW51
bWVyYXRlX2RvbmUgKGpvYik7CisgIGdfdmZzX2pvYl9zdWNjZWVkZWQgKEdfVkZTX0pPQiAoam9i
KSk7CisKKyBleGl0OgorICBnX3N0cmZyZWV2IChlbGVtZW50cyk7CisgIGdfbXV0ZXhfdW5sb2Nr
ICgmR19WRlNfQkFDS0VORF9NVFAgKGJhY2tlbmQpLT5tdXRleCk7CisgIERFQlVHICgiKEkpIGRv
X2VudW1lcmF0ZSBkb25lLiIpOworfQorCitzdGF0aWMgdm9pZAorZG9fcXVlcnlfaW5mbyAoR1Zm
c0JhY2tlbmQgKmJhY2tlbmQsCisgICAgICAgICAgICAgICAgR1Zmc0pvYlF1ZXJ5SW5mbyAqam9i
LAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAg
IEdGaWxlUXVlcnlJbmZvRmxhZ3MgZmxhZ3MsCisgICAgICAgICAgICAgICAgR0ZpbGVJbmZvICpp
bmZvLAorICAgICAgICAgICAgICAgIEdGaWxlQXR0cmlidXRlTWF0Y2hlciAqbWF0Y2hlcikKK3sK
KyAgREVCVUcgKCIoSSkgZG9fcXVlcnlfaW5mbyAoZmlsZW5hbWUgPSAlcykgIiwgZmlsZW5hbWUp
OworICBnX211dGV4X2xvY2sgKCZHX1ZGU19CQUNLRU5EX01UUCAoYmFja2VuZCktPm11dGV4KTsK
KworICBnY2hhciAqKmVsZW1lbnRzID0gZ19zdHJzcGxpdF9zZXQgKGZpbGVuYW1lLCAiLyIsIC0x
KTsKKyAgdW5zaWduZWQgaW50IG5lID0gMDsKKyAgZm9yIChuZSA9IDA7IGVsZW1lbnRzW25lXSAh
PSBOVUxMOyBuZSsrKTsKKworICBMSUJNVFBfbXRwZGV2aWNlX3QgKmRldmljZTsKKyAgZGV2aWNl
ID0gR19WRlNfQkFDS0VORF9NVFAgKGJhY2tlbmQpLT5kZXZpY2U7CisKKyAgaWYgKG5lID09IDIg
JiYgZWxlbWVudHNbMV1bMF0gPT0gJ1wwJykgeworICAgIGdldF9kZXZpY2VfaW5mbyAoR19WRlNf
QkFDS0VORF9NVFAgKGJhY2tlbmQpLCBpbmZvKTsKKyAgfSBlbHNlIGlmIChuZSA8IDMpIHsKKyAg
ICBMSUJNVFBfZGV2aWNlc3RvcmFnZV90ICpzdG9yYWdlOworICAgIGludCByZXQgPSBMSUJNVFBf
R2V0X1N0b3JhZ2UgKGRldmljZSwgTElCTVRQX1NUT1JBR0VfU09SVEJZX05PVFNPUlRFRCk7Cisg
ICAgaWYgKHJldCAhPSAwKSB7CisgICAgICBMSUJNVFBfRHVtcF9FcnJvcnN0YWNrIChkZXZpY2Up
OworICAgICAgTElCTVRQX0NsZWFyX0Vycm9yc3RhY2sgKGRldmljZSk7CisgICAgICBnX3Zmc19q
b2JfZmFpbGVkIChHX1ZGU19KT0IgKGpvYiksCisgICAgICAgICAgICAgICAgICAgICAgICBHX0lP
X0VSUk9SLCBHX0lPX0VSUk9SX05PVF9GT1VORCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF8o
Ik5vIHN0b3JhZ2Ugdm9sdW1lcyBmb3VuZCIpKTsKKyAgICAgIGdvdG8gZXhpdDsKKyAgICB9Cisg
ICAgZm9yIChzdG9yYWdlID0gZGV2aWNlLT5zdG9yYWdlOyBzdG9yYWdlICE9IDA7IHN0b3JhZ2Ug
PSBzdG9yYWdlLT5uZXh0KSB7CisgICAgICBpZiAoc3RvcmFnZS0+aWQgPT0gc3RydG9sIChlbGVt
ZW50c1tuZS0xXSwgTlVMTCwgMTApKSB7CisgICAgICAgIERFQlVHICgiKElJSSkgZm91bmQgc3Rv
cmFnZSAldSIsIHN0b3JhZ2UtPmlkKTsKKyAgICAgICAgZ2V0X3N0b3JhZ2VfaW5mbyAoc3RvcmFn
ZSwgaW5mbyk7CisgICAgICB9CisgICAgfQorICB9IGVsc2UgeworICAgIExJQk1UUF9maWxlX3Qg
KmZpbGUgPSBOVUxMOworICAgIGNoYXIgKmVuZHB0cjsKKyAgICBpZiAoc3RydG9sIChlbGVtZW50
c1tuZS0xXSwgJmVuZHB0ciwgMTApID09IDAgfHwKKyAgICAgICAgKmVuZHB0ciAhPSAnXDAnKSB7
CisgICAgICBERUJVRyAoIihJSSkgdHJ5IGdldCBmaWxlcyBhbmQgZm9sZGVycyIpOworICAgICAg
aW50IHBhcmVudF9pZCA9IC0xOworICAgICAgaWYgKG5lID4gMykgeworICAgICAgICBwYXJlbnRf
aWQgPSBzdHJ0b2wgKGVsZW1lbnRzW25lLTJdLCBOVUxMLCAxMCk7CisgICAgICB9CisgICAgICBM
SUJNVFBfZmlsZV90ICppID0gTElCTVRQX0dldF9GaWxlc19BbmRfRm9sZGVycyAoZGV2aWNlLCBz
dHJ0b2wgKGVsZW1lbnRzWzFdLCBOVUxMLCAxMCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50X2lkKTsKKyAgICAgIHdoaWxlIChp
ICE9IE5VTEwpIHsKKyAgICAgICAgREVCVUcgKCIoSUkpIGJhY2t1cCBxdWVyeSAoZW50aXR5ID0g
JXMsIG5hbWUgPSAlcykgIiwgaS0+ZmlsZW5hbWUsIGVsZW1lbnRzW25lLTFdKTsKKyAgICAgICAg
aWYgKHN0cmNtcCAoaS0+ZmlsZW5hbWUsIGVsZW1lbnRzW25lLTFdKSA9PSAwKSB7CisgICAgICAg
ICAgZmlsZSA9IGk7CisgICAgICAgICAgaSA9IGktPm5leHQ7CisgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgTElCTVRQX2ZpbGVfdCAqdG1wID0gaTsKKyAgICAg
ICAgICBpID0gaS0+bmV4dDsKKyAgICAgICAgICBMSUJNVFBfZGVzdHJveV9maWxlX3QgKHRtcCk7
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHdoaWxlIChpICE9IE5VTEwpIHsKKyAgICAgICAg
TElCTVRQX2ZpbGVfdCAqdG1wID0gaTsKKyAgICAgICAgaSA9IGktPm5leHQ7CisgICAgICAgIExJ
Qk1UUF9kZXN0cm95X2ZpbGVfdCAodG1wKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ZmlsZSA9IExJQk1UUF9HZXRfRmlsZW1ldGFkYXRhIChkZXZpY2UsIHN0cnRvbCAoZWxlbWVudHNb
bmUtMV0sIE5VTEwsIDEwKSk7CisgICAgfQorCisgICAgaWYgKGZpbGUgIT0gTlVMTCkgeworICAg
ICAgZ2V0X2ZpbGVfaW5mbyAoYmFja2VuZCwgZGV2aWNlLCBpbmZvLCBmaWxlKTsKKyAgICAgIExJ
Qk1UUF9kZXN0cm95X2ZpbGVfdCAoZmlsZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGZhaWxfam9i
IChHX1ZGU19KT0IgKGpvYiksIGRldmljZSk7CisgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICB9
CisKKyAgZ192ZnNfam9iX3N1Y2NlZWRlZCAoR19WRlNfSk9CIChqb2IpKTsKKworIGV4aXQ6Cisg
IGdfc3RyZnJlZXYgKGVsZW1lbnRzKTsKKyAgZ19tdXRleF91bmxvY2sgKCZHX1ZGU19CQUNLRU5E
X01UUCAoYmFja2VuZCktPm11dGV4KTsKKyAgREVCVUcgKCIoSSkgZG9fcXVlcnlfaW5mbyBkb25l
LiIpOworfQorCisKK3N0YXRpYyB2b2lkCitkb19xdWVyeV9mc19pbmZvIChHVmZzQmFja2VuZCAq
YmFja2VuZCwKKwkJICBHVmZzSm9iUXVlcnlGc0luZm8gKmpvYiwKKwkJICBjb25zdCBjaGFyICpm
aWxlbmFtZSwKKwkJICBHRmlsZUluZm8gKmluZm8sCisJCSAgR0ZpbGVBdHRyaWJ1dGVNYXRjaGVy
ICphdHRyaWJ1dGVfbWF0Y2hlcikKK3sKKyAgREVCVUcgKCIoSSkgZG9fcXVlcnlfZnNfaW5mbyAo
ZmlsZW5hbWUgPSAlcykgIiwgZmlsZW5hbWUpOworICBnX211dGV4X2xvY2sgKCZHX1ZGU19CQUNL
RU5EX01UUCAoYmFja2VuZCktPm11dGV4KTsKKworICBnY2hhciAqKmVsZW1lbnRzID0gZ19zdHJz
cGxpdF9zZXQgKGZpbGVuYW1lLCAiLyIsIC0xKTsKKyAgdW5zaWduZWQgaW50IG5lID0gMDsKKyAg
Zm9yIChuZSA9IDA7IGVsZW1lbnRzW25lXSAhPSBOVUxMOyBuZSsrKTsKKworICBMSUJNVFBfbXRw
ZGV2aWNlX3QgKmRldmljZTsKKyAgZGV2aWNlID0gR19WRlNfQkFDS0VORF9NVFAgKGJhY2tlbmQp
LT5kZXZpY2U7CisKKyAgaWYgKG5lID09IDIgJiYgZWxlbWVudHNbMV1bMF0gPT0gJ1wwJykgewor
ICAgIGdldF9kZXZpY2VfaW5mbyAoR19WRlNfQkFDS0VORF9NVFAgKGJhY2tlbmQpLCBpbmZvKTsK
KyAgfSBlbHNlIHsKKyAgICBMSUJNVFBfZGV2aWNlc3RvcmFnZV90ICpzdG9yYWdlOworICAgIGlu
dCByZXQgPSBMSUJNVFBfR2V0X1N0b3JhZ2UgKGRldmljZSwgTElCTVRQX1NUT1JBR0VfU09SVEJZ
X05PVFNPUlRFRCk7CisgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICBMSUJNVFBfRHVtcF9FcnJv
cnN0YWNrIChkZXZpY2UpOworICAgICAgTElCTVRQX0NsZWFyX0Vycm9yc3RhY2sgKGRldmljZSk7
CisgICAgICBnX3Zmc19qb2JfZmFpbGVkIChHX1ZGU19KT0IgKGpvYiksCisgICAgICAgICAgICAg
ICAgICAgICAgICBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PVF9GT1VORCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIk5vIHN0b3JhZ2Ugdm9sdW1lcyBmb3VuZCIpKTsKKyAgICAgIGdvdG8g
ZXhpdDsKKyAgICB9CisgICAgZm9yIChzdG9yYWdlID0gZGV2aWNlLT5zdG9yYWdlOyBzdG9yYWdl
ICE9IDA7IHN0b3JhZ2UgPSBzdG9yYWdlLT5uZXh0KSB7CisgICAgICBpZiAoc3RvcmFnZS0+aWQg
PT0gc3RydG9sIChlbGVtZW50c1sxXSwgTlVMTCwgMTApKSB7CisgICAgICAgIGdldF9zdG9yYWdl
X2luZm8gKHN0b3JhZ2UsIGluZm8pOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGdfdmZzX2pv
Yl9zdWNjZWVkZWQgKEdfVkZTX0pPQiAoam9iKSk7CisKKyBleGl0OgorICBnX3N0cmZyZWV2IChl
bGVtZW50cyk7CisgIGdfbXV0ZXhfdW5sb2NrICgmR19WRlNfQkFDS0VORF9NVFAgKGJhY2tlbmQp
LT5tdXRleCk7CisKKyAgREVCVUcgKCIoSSkgZG9fcXVlcnlfZnNfaW5mbyBkb25lLiIpOworfQor
CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAq
IAkgIE9wZXJhdGlvbnMKKyAqIAorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgR0ZpbGVQcm9n
cmVzc0NhbGxiYWNrIHByb2dyZXNzX2NhbGxiYWNrOworICBncG9pbnRlciBwcm9ncmVzc19jYWxs
YmFja19kYXRhOworICBHVmZzSm9iICpqb2I7Cit9IE10cFByb2dyZXNzRGF0YTsKKworCitzdGF0
aWMgaW50IG10cF9wcm9ncmVzcyAodWludDY0X3QgY29uc3Qgc2VudCwgdWludDY0X3QgY29uc3Qg
dG90YWwsCisgICAgICAgICAgICAgICAgICBNdHBQcm9ncmVzc0RhdGEgY29uc3QgKiBjb25zdCBk
YXRhKQoreworICBpZiAoZGF0YS0+cHJvZ3Jlc3NfY2FsbGJhY2spIHsKKyAgICBkYXRhLT5wcm9n
cmVzc19jYWxsYmFjayAoc2VudCwgdG90YWwsIGRhdGEtPnByb2dyZXNzX2NhbGxiYWNrX2RhdGEp
OworICB9CisgIHJldHVybiBnX3Zmc19qb2JfaXNfY2FuY2VsbGVkIChkYXRhLT5qb2IpOworfQor
CitzdGF0aWMgdm9pZAorZG9fbWFrZV9kaXJlY3RvcnkgKEdWZnNCYWNrZW5kICpiYWNrZW5kLAor
ICAgICAgICAgICAgICAgICAgICBHVmZzSm9iTWFrZURpcmVjdG9yeSAqam9iLAorICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgREVCVUcgKCIoSSkgZG9fbWFr
ZV9kaXJlY3RvcnkgKGZpbGVuYW1lID0gJXMpICIsIGZpbGVuYW1lKTsKKyAgZ19tdXRleF9sb2Nr
ICgmR19WRlNfQkFDS0VORF9NVFAgKGJhY2tlbmQpLT5tdXRleCk7CisKKyAgZ2NoYXIgKiplbGVt
ZW50cyA9IGdfc3Ryc3BsaXRfc2V0IChmaWxlbmFtZSwgIi8iLCAtMSk7CisgIHVuc2lnbmVkIGlu
dCBuZSA9IDA7CisgIGZvciAobmUgPSAwOyBlbGVtZW50c1tuZV0gIT0gTlVMTDsgbmUrKyk7CisK
KyAgaWYgKG5lIDwgMykgeworICAgIGdfdmZzX2pvYl9mYWlsZWQgKEdfVkZTX0pPQiAoam9iKSwK
KyAgICAgICAgICAgICAgICAgICAgICBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0ZBSUxFRCwKKyAg
ICAgICAgICAgICAgICAgICAgICBfKCJDYW5ub3QgbWFrZSBkaXJlY3RvcnkgaW4gdGhpcyBsb2Nh
dGlvbiIpKTsKKyAgICBnb3RvIGV4aXQ7CisgIH0KKworICBMSUJNVFBfbXRwZGV2aWNlX3QgKmRl
dmljZTsKKyAgZGV2aWNlID0gR19WRlNfQkFDS0VORF9NVFAgKGJhY2tlbmQpLT5kZXZpY2U7CisK
KyAgaW50IHBhcmVudF9pZCA9IDA7CisgIGlmIChuZSA+IDMpIHsKKyAgICBwYXJlbnRfaWQgPSBz
dHJ0b2wgKGVsZW1lbnRzW25lLTJdLCBOVUxMLCAxMCk7CisgIH0KKworICBpbnQgcmV0ID0gTElC
TVRQX0NyZWF0ZV9Gb2xkZXIgKGRldmljZSwgZWxlbWVudHNbbmUtMV0sIHBhcmVudF9pZCwgc3Ry
dG9sIChlbGVtZW50c1sxXSwgTlVMTCwgMTApKTsKKyAgaWYgKHJldCA9PSAwKSB7CisgICAgZmFp
bF9qb2IgKEdfVkZTX0pPQiAoam9iKSwgZGV2aWNlKTsKKyAgICBnb3RvIGV4aXQ7CisgIH0KKwor
ICBnX3Zmc19qb2Jfc3VjY2VlZGVkIChHX1ZGU19KT0IgKGpvYikpOworCisgIGdfaGFzaF90YWJs
ZV9mb3JlYWNoIChHX1ZGU19CQUNLRU5EX01UUCAoYmFja2VuZCktPm1vbml0b3JzLCBlbWl0X2Ny
ZWF0ZV9ldmVudCwgKGNoYXIgKilmaWxlbmFtZSk7CisKKyBleGl0OgorICBnX3N0cmZyZWV2IChl
bGVtZW50cyk7CisgIGdfbXV0ZXhfdW5sb2NrICgmR19WRlNfQkFDS0VORF9NVFAgKGJhY2tlbmQp
LT5tdXRleCk7CisKKyAgREVCVUcgKCIoSSkgZG9fbWFrZV9kaXJlY3RvcnkgZG9uZS4iKTsKK30K
KworCitzdGF0aWMgdm9pZAorZG9fcHVsbCAoR1Zmc0JhY2tlbmQgKmJhY2tlbmQsCisgICAgICAg
ICBHVmZzSm9iUHVsbCAqam9iLAorICAgICAgICAgY29uc3QgY2hhciAqc291cmNlLAorICAgICAg
ICAgY29uc3QgY2hhciAqbG9jYWxfcGF0aCwKKyAgICAgICAgIEdGaWxlQ29weUZsYWdzIGZsYWdz
LAorICAgICAgICAgZ2Jvb2xlYW4gcmVtb3ZlX3NvdXJjZSwKKyAgICAgICAgIEdGaWxlUHJvZ3Jl
c3NDYWxsYmFjayBwcm9ncmVzc19jYWxsYmFjaywKKyAgICAgICAgIGdwb2ludGVyIHByb2dyZXNz
X2NhbGxiYWNrX2RhdGEpCit7CisgIERFQlVHICgiKEkpIGRvX3B1bGwgKGZpbGVuYW1lID0gJXMs
IGxvY2FsX3BhdGggPSAlcykgIiwgc291cmNlLCBsb2NhbF9wYXRoKTsKKyAgZ19tdXRleF9sb2Nr
ICgmR19WRlNfQkFDS0VORF9NVFAgKGJhY2tlbmQpLT5tdXRleCk7CisKKyAgR0ZpbGVJbmZvICpp
bmZvID0gTlVMTDsKKyAgZ2NoYXIgKiplbGVtZW50cyA9IGdfc3Ryc3BsaXRfc2V0IChzb3VyY2Us
ICIvIiwgLTEpOworICB1bnNpZ25lZCBpbnQgbmUgPSAwOworICBmb3IgKG5lID0gMDsgZWxlbWVu
dHNbbmVdICE9IE5VTEw7IG5lKyspOworCisgIGlmIChuZSA8IDMpIHsKKyAgICBnX3Zmc19qb2Jf
ZmFpbGVkIChHX1ZGU19KT0IgKGpvYiksCisgICAgICAgICAgICAgICAgICAgICAgR19JT19FUlJP
UiwgR19JT19FUlJPUl9OT1RfUkVHVUxBUl9GSUxFLAorICAgICAgICAgICAgICAgICAgICAgIF8o
Ik5vdCBhIHJlZ3VsYXIgZmlsZSIpKTsKKyAgICBnb3RvIGV4aXQ7CisgIH0KKworICBMSUJNVFBf
bXRwZGV2aWNlX3QgKmRldmljZTsKKyAgZGV2aWNlID0gR19WRlNfQkFDS0VORF9NVFAgKGJhY2tl
bmQpLT5kZXZpY2U7CisKKyAgTElCTVRQX2ZpbGVfdCAqZmlsZSA9IExJQk1UUF9HZXRfRmlsZW1l
dGFkYXRhIChkZXZpY2UsIHN0cnRvbCAoZWxlbWVudHNbbmUtMV0sIE5VTEwsIDEwKSk7CisgIGlm
IChmaWxlID09IE5VTEwpIHsKKyAgICBnX3Zmc19qb2JfZmFpbGVkIChHX1ZGU19KT0IgKGpvYiks
CisgICAgICAgICAgICAgICAgICAgICAgR19JT19FUlJPUiwgR19JT19FUlJPUl9OT1RfRk9VTkQs
CisgICAgICAgICAgICAgICAgICAgICAgXygiRmlsZSBkb2VzIG5vdCBleGlzdCIpKTsKKyAgICBn
b3RvIGV4aXQ7CisgIH0KKworICBpbmZvID0gZ19maWxlX2luZm9fbmV3ICgpOworICBnZXRfZmls
ZV9pbmZvIChiYWNrZW5kLCBkZXZpY2UsIGluZm8sIGZpbGUpOworICBMSUJNVFBfZGVzdHJveV9m
aWxlX3QgKGZpbGUpOworICBmaWxlID0gTlVMTDsKKyAgaWYgKGdfZmlsZV9pbmZvX2dldF9maWxl
X3R5cGUgKGluZm8pID09IEdfRklMRV9UWVBFX0RJUkVDVE9SWSkgeworICAgIEdFcnJvciAqZXJy
b3I7CisgICAgR0ZpbGUgKmZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoIChsb2NhbF9wYXRoKTsK
KyAgICBnX2Fzc2VydCAoZmlsZSAhPSBOVUxMKTsKKyAgICBpZiAoZmlsZSkgeworICAgICAgZXJy
b3IgPSBOVUxMOworICAgICAgaWYgKGdfZmlsZV9tYWtlX2RpcmVjdG9yeSAoZmlsZSwgR19WRlNf
Sk9CIChqb2IpLT5jYW5jZWxsYWJsZSwgJmVycm9yKSkgeworICAgICAgICBnX3Zmc19qb2Jfc3Vj
Y2VlZGVkIChHX1ZGU19KT0IgKGpvYikpOworICAgICAgfSBlbHNlIGlmIChlcnJvci0+Y29kZSA9
PSBHX0lPX0VSUk9SX0VYSVNUUykgeworICAgICAgICBnX3Zmc19qb2Jfc3VjY2VlZGVkIChHX1ZG
U19KT0IgKGpvYikpOworICAgICAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIGdfdmZzX2pvYl9mYWlsZWRfZnJvbV9lcnJvciAoR19WRlNfSk9CIChqb2Ip
LCBlcnJvcik7IAorICAgICAgICBERUJVRyAoIihJSSkgcHVsbCBkaXIgZmFpbGVkOiAlcyIsIGVy
cm9yLT5tZXNzYWdlKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlIChlcnJvcik7CisgICAgICB9Cisg
ICAgICBnX29iamVjdF91bnJlZiAoZmlsZSk7CisgICAgfQorICB9IGVsc2UgeworICAgICAgTXRw
UHJvZ3Jlc3NEYXRhICptdHBfcHJvZ3Jlc3NfZGF0YSA9IGdfbmV3MCAoTXRwUHJvZ3Jlc3NEYXRh
LCAxKTsKKyAgICAgIG10cF9wcm9ncmVzc19kYXRhLT5wcm9ncmVzc19jYWxsYmFjayA9IHByb2dy
ZXNzX2NhbGxiYWNrOworICAgICAgbXRwX3Byb2dyZXNzX2RhdGEtPnByb2dyZXNzX2NhbGxiYWNr
X2RhdGEgPSBwcm9ncmVzc19jYWxsYmFja19kYXRhOworICAgICAgbXRwX3Byb2dyZXNzX2RhdGEt
PmpvYiA9IEdfVkZTX0pPQiAoam9iKTsKKyAgICAgIGludCByZXQgPSBMSUJNVFBfR2V0X0ZpbGVf
VG9fRmlsZSAoZGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ0b2wgKGVsZW1lbnRzW25lLTFdLCBOVUxMLCAxMCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChMSUJNVFBfcHJvZ3Jlc3NmdW5jX3QpbXRwX3Byb2dyZXNzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdHBfcHJvZ3Jlc3NfZGF0
YSk7CisgICAgICBnX2ZyZWUgKG10cF9wcm9ncmVzc19kYXRhKTsKKyAgICAgIGlmIChyZXQgIT0g
MCkgeworICAgICAgICBmYWlsX2pvYiAoR19WRlNfSk9CIChqb2IpLCBkZXZpY2UpOworICAgICAg
ICBnb3RvIGV4aXQ7CisgICAgICB9CisgICAgZ192ZnNfam9iX3N1Y2NlZWRlZCAoR19WRlNfSk9C
IChqb2IpKTsKKyAgfQorCisgZXhpdDoKKyAgaWYgKGluZm8gIT0gTlVMTCkgeworICAgIGdfb2Jq
ZWN0X3VucmVmIChpbmZvKTsKKyAgfQorICBnX3N0cmZyZWV2IChlbGVtZW50cyk7CisgIGdfbXV0
ZXhfdW5sb2NrICgmR19WRlNfQkFDS0VORF9NVFAgKGJhY2tlbmQpLT5tdXRleCk7CisKKyAgREVC
VUcgKCIoSSkgZG9fcHVsbCBkb25lLiIpOworfQorCisKK3N0YXRpYyB2b2lkCitkb19wdXNoIChH
VmZzQmFja2VuZCAqYmFja2VuZCwKKyAgICAgICAgIEdWZnNKb2JQdXNoICpqb2IsCisgICAgICAg
ICBjb25zdCBjaGFyICpkZXN0aW5hdGlvbiwKKyAgICAgICAgIGNvbnN0IGNoYXIgKmxvY2FsX3Bh
dGgsCisgICAgICAgICBHRmlsZUNvcHlGbGFncyBmbGFncywKKyAgICAgICAgIGdib29sZWFuIHJl
bW92ZV9zb3VyY2UsCisgICAgICAgICBHRmlsZVByb2dyZXNzQ2FsbGJhY2sgcHJvZ3Jlc3NfY2Fs
bGJhY2ssCisgICAgICAgICBncG9pbnRlciBwcm9ncmVzc19jYWxsYmFja19kYXRhKQoreworICBE
RUJVRyAoIihJKSBkb19wdXNoIChmaWxlbmFtZSA9ICVzLCBsb2NhbF9wYXRoID0gJXMpICIsIGRl
c3RpbmF0aW9uLCBsb2NhbF9wYXRoKTsKKyAgZ19tdXRleF9sb2NrICgmR19WRlNfQkFDS0VORF9N
VFAgKGJhY2tlbmQpLT5tdXRleCk7CisKKyAgR0ZpbGUgKmZpbGUgPSBOVUxMOworICBHRmlsZUlu
Zm8gKmluZm8gPSBOVUxMOworICBnY2hhciAqKmVsZW1lbnRzID0gZ19zdHJzcGxpdF9zZXQgKGRl
c3RpbmF0aW9uLCAiLyIsIC0xKTsKKyAgdW5zaWduZWQgaW50IG5lID0gMDsKKyAgZm9yIChuZSA9
IDA7IGVsZW1lbnRzW25lXSAhPSBOVUxMOyBuZSsrKTsKKworICBpZiAobmUgPCAzKSB7CisgICAg
Z192ZnNfam9iX2ZhaWxlZCAoR19WRlNfSk9CIChqb2IpLAorICAgICAgICAgICAgICAgICAgICAg
IEdfSU9fRVJST1IsIEdfSU9fRVJST1JfTk9UX1JFR1VMQVJfRklMRSwKKyAgICAgICAgICAgICAg
ICAgICAgICBfKCJDYW5ub3Qgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbiIpKTsKKyAgICBnb3RvIGV4
aXQ7CisgIH0KKworICBMSUJNVFBfbXRwZGV2aWNlX3QgKmRldmljZTsKKyAgZGV2aWNlID0gR19W
RlNfQkFDS0VORF9NVFAgKGJhY2tlbmQpLT5kZXZpY2U7CisKKyAgaW50IHBhcmVudF9pZCA9IDA7
CisKKyAgaWYgKG5lID4gMykgeworICAgIHBhcmVudF9pZCA9IHN0cnRvbCAoZWxlbWVudHNbbmUt
Ml0sIE5VTEwsIDEwKTsKKyAgfQorCisgIGZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoIChsb2Nh
bF9wYXRoKTsKKyAgaWYgKCFmaWxlKSB7CisgICAgZ192ZnNfam9iX2ZhaWxlZCAoR19WRlNfSk9C
IChqb2IpLAorICAgICAgICAgICAgICAgICAgICAgIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfTk9U
X0ZPVU5ELAorICAgICAgICAgICAgICAgICAgICAgIF8oIkZpbGUgbm90IGZvdW5kIikpOworICAg
IGdvdG8gZXhpdDsKKyAgfQorCisgIGlmIChnX2ZpbGVfcXVlcnlfZmlsZV90eXBlIChmaWxlLCBH
X0ZJTEVfUVVFUllfSU5GT19OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19W
RlNfSk9CIChqb2IpLT5jYW5jZWxsYWJsZSkgPT0KKyAgICAgIEdfRklMRV9UWVBFX0RJUkVDVE9S
WSkgeworICAgIC8qCisgICAgICogSXQgaGFwcGVucyB0byBiZSB0aGUgY2FzZSB0aGF0IHdlIGNh
biByZXVzZSBkb19tYWtlX2RpcmVjdG9yeQorICAgICAqIGhlcmUuCisgICAgICovCisgICAgcmV0
dXJuIGRvX21ha2VfZGlyZWN0b3J5IChiYWNrZW5kLCBHX1ZGU19KT0JfTUFLRV9ESVJFQ1RPUlkg
KGpvYiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tuZS0xXSk7Cisg
IH0KKworICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgaW5mbyA9IGdfZmlsZV9xdWVyeV9pbmZv
IChmaWxlLCBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR19GSUxFX1FVRVJZX0lORk9fTk9ORSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHX1ZGU19KT0IgKGpvYiktPmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZlcnJvcik7CisgIGlmICghaW5mbykgeworICAgIGdfdmZzX2pvYl9mYWlsZWRf
ZnJvbV9lcnJvciAoR19WRlNfSk9CIChqb2IpLCBlcnJvcik7IAorICAgIGdfZXJyb3JfZnJlZSAo
ZXJyb3IpOworICAgIGdvdG8gZXhpdDsKKyAgfQorCisgIExJQk1UUF9maWxlX3QgKm10cGZpbGUg
PSBMSUJNVFBfbmV3X2ZpbGVfdCAoKTsKKyAgbXRwZmlsZS0+ZmlsZW5hbWUgPSBzdHJkdXAgKGVs
ZW1lbnRzW25lLTFdKTsKKyAgbXRwZmlsZS0+cGFyZW50X2lkID0gcGFyZW50X2lkOworICBtdHBm
aWxlLT5zdG9yYWdlX2lkID0gc3RydG9sIChlbGVtZW50c1sxXSwgTlVMTCwgMTApOworICBtdHBm
aWxlLT5maWxldHlwZSA9IExJQk1UUF9GSUxFVFlQRV9VTktOT1dOOyAKKyAgbXRwZmlsZS0+Zmls
ZXNpemUgPSBnX2ZpbGVfaW5mb19nZXRfc2l6ZSAoaW5mbyk7CisKKyAgTXRwUHJvZ3Jlc3NEYXRh
ICptdHBfcHJvZ3Jlc3NfZGF0YSA9IGdfbmV3MCAoTXRwUHJvZ3Jlc3NEYXRhLCAxKTsKKyAgbXRw
X3Byb2dyZXNzX2RhdGEtPnByb2dyZXNzX2NhbGxiYWNrID0gcHJvZ3Jlc3NfY2FsbGJhY2s7Cisg
IG10cF9wcm9ncmVzc19kYXRhLT5wcm9ncmVzc19jYWxsYmFja19kYXRhID0gcHJvZ3Jlc3NfY2Fs
bGJhY2tfZGF0YTsKKyAgbXRwX3Byb2dyZXNzX2RhdGEtPmpvYiA9IEdfVkZTX0pPQiAoam9iKTsK
KyAgaW50IHJldCA9IExJQk1UUF9TZW5kX0ZpbGVfRnJvbV9GaWxlIChkZXZpY2UsIGxvY2FsX3Bh
dGgsIG10cGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExJ
Qk1UUF9wcm9ncmVzc2Z1bmNfdCltdHBfcHJvZ3Jlc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbXRwX3Byb2dyZXNzX2RhdGEpOworICBnX2ZyZWUgKG10cF9wcm9n
cmVzc19kYXRhKTsKKyAgTElCTVRQX2Rlc3Ryb3lfZmlsZV90IChtdHBmaWxlKTsKKyAgaWYgKHJl
dCAhPSAwKSB7CisgICAgZmFpbF9qb2IgKEdfVkZTX0pPQiAoam9iKSwgZGV2aWNlKTsKKyAgICBn
b3RvIGV4aXQ7CisgIH0KKworICBnX3Zmc19qb2Jfc3VjY2VlZGVkIChHX1ZGU19KT0IgKGpvYikp
OworCisgIGdfaGFzaF90YWJsZV9mb3JlYWNoIChHX1ZGU19CQUNLRU5EX01UUCAoYmFja2VuZCkt
Pm1vbml0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgZW1pdF9jcmVhdGVfZXZlbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKWRlc3RpbmF0aW9uKTsKKworIGV4aXQ6Cisg
IGlmIChmaWxlKSB7CisgICAgZ19vYmplY3RfdW5yZWYgKGZpbGUpOworICB9CisgIGlmIChpbmZv
KSB7CisgICAgZ19vYmplY3RfdW5yZWYgKGluZm8pOworICB9CisgIGdfc3RyZnJlZXYgKGVsZW1l
bnRzKTsKKyAgZ19tdXRleF91bmxvY2sgKCZHX1ZGU19CQUNLRU5EX01UUCAoYmFja2VuZCktPm11
dGV4KTsKKworICBERUJVRyAoIihJKSBkb19wdXNoIGRvbmUuIik7Cit9CisKKworc3RhdGljIHZv
aWQKK2RvX2RlbGV0ZSAoR1Zmc0JhY2tlbmQgKmJhY2tlbmQsCisgICAgICAgICAgICBHVmZzSm9i
RGVsZXRlICpqb2IsCisgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgREVC
VUcgKCIoSSkgZG9fZGVsZXRlIChmaWxlbmFtZSA9ICVzKSAiLCBmaWxlbmFtZSk7CisgIGdfbXV0
ZXhfbG9jayAoJkdfVkZTX0JBQ0tFTkRfTVRQIChiYWNrZW5kKS0+bXV0ZXgpOworCisgIGdjaGFy
ICoqZWxlbWVudHMgPSBnX3N0cnNwbGl0X3NldCAoZmlsZW5hbWUsICIvIiwgLTEpOworICB1bnNp
Z25lZCBpbnQgbmUgPSAwOworICBmb3IgKG5lID0gMDsgZWxlbWVudHNbbmVdICE9IE5VTEw7IG5l
KyspOworCisgIGlmIChuZSA8IDMpIHsKKyAgICBnX3Zmc19qb2JfZmFpbGVkIChHX1ZGU19KT0Ig
KGpvYiksCisgICAgICAgICAgICAgICAgICAgICAgR19JT19FUlJPUiwgR19JT19FUlJPUl9GQUlM
RUQsCisgICAgICAgICAgICAgICAgICAgICAgXygiQ2Fubm90IGRlbGV0ZSB0aGlzIGVudGl0eSIp
KTsKKyAgICBnb3RvIGV4aXQ7CisgIH0KKworICBMSUJNVFBfbXRwZGV2aWNlX3QgKmRldmljZTsK
KyAgZGV2aWNlID0gR19WRlNfQkFDS0VORF9NVFAgKGJhY2tlbmQpLT5kZXZpY2U7CisKKyAgaW50
IHJldCA9IExJQk1UUF9EZWxldGVfT2JqZWN0IChkZXZpY2UsIHN0cnRvbCAoZWxlbWVudHNbbmUt
MV0sIE5VTEwsIDEwKSk7CisgIGlmIChyZXQgIT0gMCkgeworICAgIGZhaWxfam9iIChHX1ZGU19K
T0IgKGpvYiksIGRldmljZSk7CisgICAgZ290byBleGl0OworICB9CisgIGdfdmZzX2pvYl9zdWNj
ZWVkZWQgKEdfVkZTX0pPQiAoam9iKSk7CisKKyAgZ19oYXNoX3RhYmxlX2ZvcmVhY2ggKEdfVkZT
X0JBQ0tFTkRfTVRQIChiYWNrZW5kKS0+bW9uaXRvcnMsCisgICAgICAgICAgICAgICAgICAgICAg
ICBlbWl0X2RlbGV0ZV9ldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopZmls
ZW5hbWUpOworCisgZXhpdDoKKyAgZ19zdHJmcmVldiAoZWxlbWVudHMpOworICBnX211dGV4X3Vu
bG9jayAoJkdfVkZTX0JBQ0tFTkRfTVRQIChiYWNrZW5kKS0+bXV0ZXgpOworCisgIERFQlVHICgi
KEkpIGRvX2RlbGV0ZSBkb25lLiIpOworfQorCisKK3N0YXRpYyB2b2lkCitkb19zZXRfZGlzcGxh
eV9uYW1lIChHVmZzQmFja2VuZCAqYmFja2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICBHVmZz
Sm9iU2V0RGlzcGxheU5hbWUgKmpvYiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkaXNwbGF5X25h
bWUpCit7CisgIERFQlVHICgiKEkpIGRvX3NldF9kaXNwbGF5X25hbWUgJyVzJyAtLT4gJyVzJyAi
LCBmaWxlbmFtZSwgZGlzcGxheV9uYW1lKTsKKyAgZ19tdXRleF9sb2NrICgmR19WRlNfQkFDS0VO
RF9NVFAgKGJhY2tlbmQpLT5tdXRleCk7CisKKyAgZ2NoYXIgKiplbGVtZW50cyA9IGdfc3Ryc3Bs
aXRfc2V0IChmaWxlbmFtZSwgIi8iLCAtMSk7CisgIHVuc2lnbmVkIGludCBuZSA9IDA7CisgIGZv
ciAobmUgPSAwOyBlbGVtZW50c1tuZV0gIT0gTlVMTDsgbmUrKyk7CisKKyAgaWYgKG5lIDwgMykg
eworICAgIGdfdmZzX2pvYl9mYWlsZWQgKEdfVkZTX0pPQiAoam9iKSwKKyAgICAgICAgICAgICAg
ICAgICAgICBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PVF9TVVBQT1JURUQsCisgICAgICAgICAg
ICAgICAgICAgICAgXygiQ2FuJ3QgcmVuYW1lIHZvbHVtZSIpKTsKKyAgICBnb3RvIGV4aXQ7Cisg
IH0KKworICBMSUJNVFBfbXRwZGV2aWNlX3QgKmRldmljZTsKKyAgZGV2aWNlID0gR19WRlNfQkFD
S0VORF9NVFAgKGJhY2tlbmQpLT5kZXZpY2U7CisKKyAgTElCTVRQX2ZpbGVfdCAqZmlsZSA9IExJ
Qk1UUF9HZXRfRmlsZW1ldGFkYXRhIChkZXZpY2UsIHN0cnRvbCAoZWxlbWVudHNbbmUtMV0sIE5V
TEwsIDEwKSk7CisgIGludCByZXQgPSBMSUJNVFBfU2V0X0ZpbGVfTmFtZSAoZGV2aWNlLCBmaWxl
LCBkaXNwbGF5X25hbWUpOworICBpZiAocmV0ICE9IDApIHsKKyAgICBmYWlsX2pvYiAoR19WRlNf
Sk9CIChqb2IpLCBkZXZpY2UpOworICAgIGdvdG8gZXhpdDsKKyAgfQorICBMSUJNVFBfZGVzdHJv
eV9maWxlX3QgKGZpbGUpOworICBmaWxlID0gTlVMTDsKKyAgZ192ZnNfam9iX3NldF9kaXNwbGF5
X25hbWVfc2V0X25ld19wYXRoIChqb2IsIGZpbGVuYW1lKTsKKyAgZ192ZnNfam9iX3N1Y2NlZWRl
ZCAoR19WRlNfSk9CIChqb2IpKTsKKworICBnX2hhc2hfdGFibGVfZm9yZWFjaCAoR19WRlNfQkFD
S0VORF9NVFAgKGJhY2tlbmQpLT5tb25pdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVt
aXRfY2hhbmdlX2V2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilmaWxlbmFt
ZSk7CisKKyBleGl0OgorICBnX3N0cmZyZWV2IChlbGVtZW50cyk7CisgIGdfbXV0ZXhfdW5sb2Nr
ICgmR19WRlNfQkFDS0VORF9NVFAgKGJhY2tlbmQpLT5tdXRleCk7CisKKyAgREVCVUcgKCIoSSkg
ZG9fc2V0X2Rpc3BsYXlfbmFtZSBkb25lLiIpOworfQorCisKKyNpZiBIQVZFX0xJQk1UUF9HRVRf
VEhVTUJOQUlMCitzdGF0aWMgdm9pZAorZG9fb3Blbl9pY29uX2Zvcl9yZWFkIChHVmZzQmFja2Vu
ZCAqYmFja2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgR1Zmc0pvYk9wZW5JY29uRm9yUmVh
ZCAqam9iLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppY29uX2lkKQorewor
ICBERUJVRyAoIihJKSBkb19vcGVuX2ljb25fZm9yX3JlYWQgKCVzKSIsIGljb25faWQpOworICBn
X211dGV4X2xvY2sgKCZHX1ZGU19CQUNLRU5EX01UUCAoYmFja2VuZCktPm11dGV4KTsKKworICBn
dWludCBpZCA9IHN0cnRvbCAoaWNvbl9pZCwgTlVMTCwgMTApOworCisgIGlmIChpZCA+IDApIHsK
KyAgICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAgIHVuc2lnbmVkIGludCBzaXplOworICAgIGlu
dCByZXQgPSBMSUJNVFBfR2V0X1RodW1ibmFpbCAoR19WRlNfQkFDS0VORF9NVFAgKGJhY2tlbmQp
LT5kZXZpY2UsIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEs
ICZzaXplKTsKKyAgICBpZiAocmV0ID09IDApIHsKKyAgICAgIERFQlVHICgiRmlsZSAldSBoYXMg
dGh1bWJuYWlsOiAldSIsIGlkLCBzaXplKTsKKyAgICAgIEdCeXRlQXJyYXkgKmJ5dGVzID0gZ19i
eXRlX2FycmF5X3NpemVkX25ldyAoc2l6ZSk7CisgICAgICBnX2J5dGVfYXJyYXlfYXBwZW5kIChi
eXRlcywgZGF0YSwgc2l6ZSk7CisgICAgICBmcmVlIChkYXRhKTsKKyAgICAgIGdfdmZzX2pvYl9v
cGVuX2Zvcl9yZWFkX3NldF9jYW5fc2VlayAoR19WRlNfSk9CX09QRU5fRk9SX1JFQUQgKGpvYiks
IEZBTFNFKTsKKyAgICAgIGdfdmZzX2pvYl9vcGVuX2Zvcl9yZWFkX3NldF9oYW5kbGUgKEdfVkZT
X0pPQl9PUEVOX0ZPUl9SRUFEIChqb2IpLCBieXRlcyk7CisgICAgICBnX3Zmc19qb2Jfc3VjY2Vl
ZGVkIChHX1ZGU19KT0IgKGpvYikpOworICAgIH0gZWxzZSB7CisgICAgICBMSUJNVFBfZmlsZXNh
bXBsZWRhdGFfdCAqc2FtcGxlX2RhdGEgPSBMSUJNVFBfbmV3X2ZpbGVzYW1wbGVkYXRhX3QgKCk7
CisgICAgICByZXQgPSBMSUJNVFBfR2V0X1JlcHJlc2VudGF0aXZlX1NhbXBsZSAoR19WRlNfQkFD
S0VORF9NVFAgKGJhY2tlbmQpLT5kZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWQsIHNhbXBsZV9kYXRhKTsKKyAgICAgIGlmIChyZXQgPT0gMCkg
eworICAgICAgICBERUJVRyAoIkZpbGUgJXUgaGFzIHNhbXBsZWRhdGE6ICV1IiwgaWQsIHNpemUp
OworICAgICAgICBHQnl0ZUFycmF5ICpieXRlcyA9IGdfYnl0ZV9hcnJheV9zaXplZF9uZXcgKHNh
bXBsZV9kYXRhLT5zaXplKTsKKyAgICAgICAgZ19ieXRlX2FycmF5X2FwcGVuZCAoYnl0ZXMsIChj
b25zdCBndWludDggKilzYW1wbGVfZGF0YS0+ZGF0YSwgc2FtcGxlX2RhdGEtPnNpemUpOworICAg
ICAgICBMSUJNVFBfZGVzdHJveV9maWxlc2FtcGxlZGF0YV90IChzYW1wbGVfZGF0YSk7CisgICAg
ICAgIGdfdmZzX2pvYl9vcGVuX2Zvcl9yZWFkX3NldF9jYW5fc2VlayAoR19WRlNfSk9CX09QRU5f
Rk9SX1JFQUQgKGpvYiksIEZBTFNFKTsKKyAgICAgICAgZ192ZnNfam9iX29wZW5fZm9yX3JlYWRf
c2V0X2hhbmRsZSAoR19WRlNfSk9CX09QRU5fRk9SX1JFQUQgKGpvYiksIGJ5dGVzKTsKKyAgICAg
ICAgZ192ZnNfam9iX3N1Y2NlZWRlZCAoR19WRlNfSk9CIChqb2IpKTsKKyAgICAgIH0gZWxzZSB7
CisgICAgICAgIERFQlVHICgiRmlsZSAldSBoYXMgbm8gdGh1bWJuYWlsOiIsIGlkKTsKKyAgICAg
ICAgZ192ZnNfam9iX2ZhaWxlZCAoR19WRlNfSk9CIChqb2IpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBHX0lPX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHX0lPX0VSUk9S
X05PVF9GT1VORCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTm8gdGh1bWJuYWlsIGZv
ciBlbnRpdHkgJyVzJyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uX2lkKTsKKyAg
ICAgIH0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgZ192ZnNfam9iX2ZhaWxlZCAoR19WRlNfSk9C
IChqb2IpLAorICAgICAgICAgICAgICAgICAgICAgIEdfSU9fRVJST1IsCisgICAgICAgICAgICAg
ICAgICAgICAgR19JT19FUlJPUl9JTlZBTElEX0FSR1VNRU5ULAorICAgICAgICAgICAgICAgICAg
ICAgIF8oIk1hbGZvcm1lZCBpY29uIGlkZW50aWZpZXIgJyVzJyIpLAorICAgICAgICAgICAgICAg
ICAgICAgIGljb25faWQpOworICB9CisgIGdfbXV0ZXhfdW5sb2NrICgmR19WRlNfQkFDS0VORF9N
VFAgKGJhY2tlbmQpLT5tdXRleCk7CisKKyAgREVCVUcgKCIoSSkgZG9fb3Blbl9pY29uX2Zvcl9y
ZWFkIGRvbmUuIik7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgordHJ5X3JlYWQgKEdWZnNCYWNrZW5k
ICpiYWNrZW5kLAorICAgICAgICAgIEdWZnNKb2JSZWFkICpqb2IsCisgICAgICAgICAgR1Zmc0Jh
Y2tlbmRIYW5kbGUgaGFuZGxlLAorICAgICAgICAgIGNoYXIgKmJ1ZmZlciwKKyAgICAgICAgICBn
c2l6ZSBieXRlc19yZXF1ZXN0ZWQpCit7CisgIEdCeXRlQXJyYXkgKmJ5dGVzID0gaGFuZGxlOwor
CisgIERFQlVHICgiKEkpIHRyeV9yZWFkICgldSAlbHUpIiwgYnl0ZXMtPmxlbiwgYnl0ZXNfcmVx
dWVzdGVkKTsKKworICBnc2l6ZSBieXRlc190b19jb3B5ID0gIE1JTiAoYnl0ZXMtPmxlbiwgYnl0
ZXNfcmVxdWVzdGVkKTsKKyAgaWYgKGJ5dGVzX3RvX2NvcHkgPT0gMCkgeworICAgIGdvdG8gb3V0
OworICB9CisgIG1lbWNweSAoYnVmZmVyLCBieXRlcy0+ZGF0YSwgYnl0ZXNfdG9fY29weSk7Cisg
IGdfYnl0ZV9hcnJheV9yZW1vdmVfcmFuZ2UgKGJ5dGVzLCAwLCBieXRlc190b19jb3B5KTsKKwor
IG91dDoKKyAgZ192ZnNfam9iX3JlYWRfc2V0X3NpemUgKGpvYiwgYnl0ZXNfdG9fY29weSk7Cisg
IGdfdmZzX2pvYl9zdWNjZWVkZWQgKEdfVkZTX0pPQiAoam9iKSk7CisKKyAgREVCVUcgKCIoSSkg
dHJ5X3JlYWQgZG9uZS4iKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitkb19j
bG9zZV9yZWFkIChHVmZzQmFja2VuZCAqYmFja2VuZCwKKyAgICAgICAgICAgICAgICBHVmZzSm9i
Q2xvc2VSZWFkICpqb2IsCisgICAgICAgICAgICAgICAgR1Zmc0JhY2tlbmRIYW5kbGUgaGFuZGxl
KQoreworICBERUJVRyAoIihJKSBkb19jbG9zZV9yZWFkIik7CisgIGdfYnl0ZV9hcnJheV91bnJl
ZiAoaGFuZGxlKTsKKyAgZ192ZnNfam9iX3N1Y2NlZWRlZCAoR19WRlNfSk9CIChqb2IpKTsKKyAg
REVCVUcgKCIoSSkgZG9fY2xvc2VfcmVhZCBkb25lLiIpOworfQorI2VuZGlmIC8qIEhBVkVfTElC
TVRQX0dFVF9USFVNQk5BSUwgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCisgKiAJICBDbGFzcyBpbml0CisgKgorICovCisKKworc3RhdGlj
IHZvaWQKK2dfdmZzX2JhY2tlbmRfbXRwX2NsYXNzX2luaXQgKEdWZnNCYWNrZW5kTXRwQ2xhc3Mg
KmtsYXNzKQoreworICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFT
UyAoa2xhc3MpOworICBHVmZzQmFja2VuZENsYXNzICpiYWNrZW5kX2NsYXNzID0gR19WRlNfQkFD
S0VORF9DTEFTUyAoa2xhc3MpOworCisgIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ192ZnNf
YmFja2VuZF9tdHBfZmluYWxpemU7CisKKyAgYmFja2VuZF9jbGFzcy0+bW91bnQgPSBkb19tb3Vu
dDsKKyAgYmFja2VuZF9jbGFzcy0+dW5tb3VudCA9IGRvX3VubW91bnQ7CisgIGJhY2tlbmRfY2xh
c3MtPnF1ZXJ5X2luZm8gPSBkb19xdWVyeV9pbmZvOworICBiYWNrZW5kX2NsYXNzLT5lbnVtZXJh
dGUgPSBkb19lbnVtZXJhdGU7CisgIGJhY2tlbmRfY2xhc3MtPnF1ZXJ5X2ZzX2luZm8gPSBkb19x
dWVyeV9mc19pbmZvOworICBiYWNrZW5kX2NsYXNzLT5wdWxsID0gZG9fcHVsbDsKKyAgYmFja2Vu
ZF9jbGFzcy0+cHVzaCA9IGRvX3B1c2g7CisgIGJhY2tlbmRfY2xhc3MtPm1ha2VfZGlyZWN0b3J5
ID0gZG9fbWFrZV9kaXJlY3Rvcnk7CisgIGJhY2tlbmRfY2xhc3MtPmRlbGV0ZSA9IGRvX2RlbGV0
ZTsKKyAgYmFja2VuZF9jbGFzcy0+c2V0X2Rpc3BsYXlfbmFtZSA9IGRvX3NldF9kaXNwbGF5X25h
bWU7CisgIGJhY2tlbmRfY2xhc3MtPmNyZWF0ZV9kaXJfbW9uaXRvciA9IGRvX2NyZWF0ZV9kaXJf
bW9uaXRvcjsKKyAgYmFja2VuZF9jbGFzcy0+Y3JlYXRlX2ZpbGVfbW9uaXRvciA9IGRvX2NyZWF0
ZV9maWxlX21vbml0b3I7CisjaWYgSEFWRV9MSUJNVFBfR0VUX1RIVU1CTkFJTAorICBiYWNrZW5k
X2NsYXNzLT5vcGVuX2ljb25fZm9yX3JlYWQgPSBkb19vcGVuX2ljb25fZm9yX3JlYWQ7CisgIGJh
Y2tlbmRfY2xhc3MtPnRyeV9yZWFkID0gdHJ5X3JlYWQ7CisgIGJhY2tlbmRfY2xhc3MtPmNsb3Nl
X3JlYWQgPSBkb19jbG9zZV9yZWFkOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9kYWVtb24vZ3Zm
c2JhY2tlbmRtdHAuaCBiL2RhZW1vbi9ndmZzYmFja2VuZG10cC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjkzYzFjYjkKLS0tIC9kZXYvbnVsbAorKysgYi9kYWVtb24vZ3Zm
c2JhY2tlbmRtdHAuaApAQCAtMCwwICsxLDY5IEBACisvKiBHSU8gLSBHTGliIElucHV0LCBPdXRw
dXQgYW5kIFN0cmVhbWluZyBMaWJyYXJ5CisgKiAgIE1UUCBCYWNrZW5kCisgKiAKKyAqIENvcHly
aWdodCAoQykgMjAxMiBQaGlsaXAgTGFuZ2RhbGUgPHBoaWxpcGxAb3ZlcnQub3JnPgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3
LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0dfVkZTX0JBQ0tFTkRfTVRQX0hfXworI2RlZmluZSBf
X0dfVkZTX0JBQ0tFTkRfTVRQX0hfXworCisjaW5jbHVkZSA8Z3Zmc2JhY2tlbmQuaD4KKyNpbmNs
dWRlIDxnbW91bnRzcGVjLmg+CisjaWZkZWYgSEFWRV9HVURFVgorI2luY2x1ZGUgPGd1ZGV2L2d1
ZGV2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaWJtdHAuaD4KKworR19CRUdJTl9ERUNMUworCisj
ZGVmaW5lIEdfVkZTX1RZUEVfQkFDS0VORF9NVFAgICAgICAgICAoZ192ZnNfYmFja2VuZF9tdHBf
Z2V0X3R5cGUgKCkpCisjZGVmaW5lIEdfVkZTX0JBQ0tFTkRfTVRQKG8pICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvKSwgR19WRlNfVFlQRV9CQUNLRU5EX01UUCwgR1Zm
c0JhY2tlbmRNdHApKQorI2RlZmluZSBHX1ZGU19CQUNLRU5EX01UUF9DTEFTUyhrKSAgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrKSwgR19WRlNfVFlQRV9CQUNLRU5EX01UUCwgR1Zmc0Jh
Y2tlbmRNdHBDbGFzcykpCisjZGVmaW5lIEdfVkZTX0lTX0JBQ0tFTkRfTVRQKG8pICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvKSwgR19WRlNfVFlQRV9CQUNLRU5EX01UUCkp
CisjZGVmaW5lIEdfVkZTX0lTX0JBQ0tFTkRfTVRQX0NMQVNTKGspICAoR19UWVBFX0NIRUNLX0NM
QVNTX1RZUEUgKChrKSwgR19WRlNfVFlQRV9CQUNLRU5EX01UUCkpCisjZGVmaW5lIEdfVkZTX0JB
Q0tFTkRfTVRQX0dFVF9DTEFTUyhvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG8pLCBH
X1ZGU19UWVBFX0JBQ0tFTkRfTVRQLCBHVmZzQmFja2VuZE10cENsYXNzKSkKKwordHlwZWRlZiBz
dHJ1Y3QgX0dWZnNCYWNrZW5kTXRwICAgICAgICBHVmZzQmFja2VuZE10cDsKK3R5cGVkZWYgc3Ry
dWN0IF9HVmZzQmFja2VuZE10cENsYXNzICAgR1Zmc0JhY2tlbmRNdHBDbGFzczsKKworc3RydWN0
IF9HVmZzQmFja2VuZE10cAoreworICBHVmZzQmFja2VuZCBwYXJlbnRfaW5zdGFuY2U7CisKKyNp
ZmRlZiBIQVZFX0dVREVWCisgIEdVZGV2Q2xpZW50ICpndWRldl9jbGllbnQ7CisjZW5kaWYKKwor
ICBHTXV0ZXggbXV0ZXg7CisgIExJQk1UUF9tdHBkZXZpY2VfdCAqZGV2aWNlOworICBjaGFyICpk
ZXZfcGF0aDsKKworICBHSGFzaFRhYmxlICptb25pdG9yczsKKyAgZ3VpbnQgaGJfaWQ7Cit9Owor
CitzdHJ1Y3QgX0dWZnNCYWNrZW5kTXRwQ2xhc3MKK3sKKyAgR1Zmc0JhY2tlbmRDbGFzcyBwYXJl
bnRfY2xhc3M7Cit9OworCitHVHlwZSBnX3Zmc19iYWNrZW5kX210cF9nZXRfdHlwZSAodm9pZCkg
R19HTlVDX0NPTlNUOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19HX1ZGU19CQUNLRU5E
X01UUF9IX18gKi8KZGlmZiAtLWdpdCBhL2RhZW1vbi9tdHAubW91bnQuaW4gYi9kYWVtb24vbXRw
Lm1vdW50LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNzI4YTcKLS0t
IC9kZXYvbnVsbAorKysgYi9kYWVtb24vbXRwLm1vdW50LmluCkBAIC0wLDAgKzEsNCBAQAorW01v
dW50XQorVHlwZT1tdHAKK0V4ZWM9QGxpYmV4ZWNkaXJAL2d2ZnNkLW10cAorQXV0b01vdW50PWZh
bHNlCmRpZmYgLS1naXQgYS9tb25pdG9yL01ha2VmaWxlLmFtIGIvbW9uaXRvci9NYWtlZmlsZS5h
bQppbmRleCBkOTAzZGYxLi43YTRlODdmIDEwMDY0NAotLS0gYS9tb25pdG9yL01ha2VmaWxlLmFt
CisrKyBiL21vbml0b3IvTWFrZWZpbGUuYW0KQEAgLTEsNCArMSw0IEBACi1ESVNUX1NVQkRJUlMg
PSBwcm94eSBoYWwgZ2R1IGdwaG90bzIgYWZjIHVkaXNrczIKK0RJU1RfU1VCRElSUyA9IHByb3h5
IGhhbCBnZHUgZ3Bob3RvMiBhZmMgdWRpc2tzMiBtdHAKIFNVQkRJUlMgPSBwcm94eQogCiBpZiBV
U0VfSEFMCkBAIC0yMCwzICsyMCw3IEBAIGVuZGlmCiBpZiBVU0VfQUZDCiBTVUJESVJTICs9IGFm
YwogZW5kaWYKKworaWYgVVNFX0xJQk1UUAorU1VCRElSUyArPSBtdHAKK2VuZGlmCmRpZmYgLS1n
aXQgYS9tb25pdG9yL2dwaG90bzIvZ2dwaG90bzJ2b2x1bWVtb25pdG9yLmMgYi9tb25pdG9yL2dw
aG90bzIvZ2dwaG90bzJ2b2x1bWVtb25pdG9yLmMKaW5kZXggNjRlZjM4My4uMjQ4MTFkNCAxMDA2
NDQKLS0tIGEvbW9uaXRvci9ncGhvdG8yL2dncGhvdG8ydm9sdW1lbW9uaXRvci5jCisrKyBiL21v
bml0b3IvZ3Bob3RvMi9nZ3Bob3RvMnZvbHVtZW1vbml0b3IuYwpAQCAtMjAxLDYgKzIwMSwxMyBA
QCBndWRldl9hZGRfY2FtZXJhIChHR1Bob3RvMlZvbHVtZU1vbml0b3IgKm1vbml0b3IsIEdVZGV2
RGV2aWNlICpkZXZpY2UsIGdib29sZWFuCiAJcmV0dXJuOwogICAgICAgfQogI2VuZGlmIC8qIEhB
VkVfQUZDICovCisjaWZkZWYgSEFWRV9MSUJNVFAKKyAgICBpZiAoZ191ZGV2X2RldmljZV9nZXRf
cHJvcGVydHlfYXNfYm9vbGVhbiAoZGV2aWNlLCAiSURfTVRQX0RFVklDRSIpKQorICAgICAgewor
CS8qIGdfZGVidWcgKCJpZ25vcmluZyBkZXZpY2UsIGlzIE1UUCIpOyAqLworCXJldHVybjsKKyAg
ICAgIH0KKyNlbmRpZiAvKiBIQVZFX0xJQk1UUCAqLwogCiAgICAgdXNiX2J1c19udW0gPSBnX3Vk
ZXZfZGV2aWNlX2dldF9wcm9wZXJ0eSAoZGV2aWNlLCAiQlVTTlVNIik7CiAgICAgaWYgKHVzYl9i
dXNfbnVtID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL21vbml0b3IvbXRwL01ha2VmaWxlLmFtIGIv
bW9uaXRvci9tdHAvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMmY1ODVjNgotLS0gL2Rldi9udWxsCisrKyBiL21vbml0b3IvbXRwL01ha2VmaWxlLmFtCkBA
IC0wLDAgKzEsNTEgQEAKKworTlVMTCA9CisKK2xpYmV4ZWNfUFJPR1JBTVMgPSBndmZzLW10cC12
b2x1bWUtbW9uaXRvcgorCitndmZzX210cF92b2x1bWVfbW9uaXRvcl9TT1VSQ0VTID0KKworZ3Zm
c19tdHBfdm9sdW1lX21vbml0b3JfU09VUkNFUyArPQkJCVwKKyAgICAgICAgbXRwLXZvbHVtZS1t
b25pdG9yLWRhZW1vbi5jIFwKKwlnbXRwdm9sdW1lLmMJZ210cHZvbHVtZS5oCVwKKwlnbXRwdm9s
dW1lbW9uaXRvci5jCWdtdHB2b2x1bWVtb25pdG9yLmgJXAorCSQoTlVMTCkKKworZ3Zmc19tdHBf
dm9sdW1lX21vbml0b3JfQ0ZMQUdTID0JCVwKKwktREdfTE9HX0RPTUFJTj1cIkdWRlMtTVRQXCIJ
CVwKKwktSSQodG9wX3NyY2RpcikvY29tbW9uICAgICAgICAgICAgICAgICAgXAorCS1JJCh0b3Bf
c3JjZGlyKS9tb25pdG9yL3Byb3h5ICAgICAgICAgICBcCisJJChHTElCX0NGTEFHUykgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKwktREdJT19NT0RVTEVfRElSPVwiJChHSU9fTU9EVUxFX0RJ
UilcIglcCisJLURHVkZTX0xPQ0FMRURJUj1cIiIkKGxvY2FsZWRpcikiXCIJXAorCS1ER19VREVW
X0FQSV9JU19TVUJKRUNUX1RPX0NIQU5HRQlcCisJJChOVUxMKQorCitndmZzX210cF92b2x1bWVf
bW9uaXRvcl9DRkxBR1MgKz0gJChHVURFVl9DRkxBR1MpCisKK2d2ZnNfbXRwX3ZvbHVtZV9tb25p
dG9yX0xERkxBR1MgPQlcCisJJChOVUxMKQorCitndmZzX210cF92b2x1bWVfbW9uaXRvcl9MREFE
RCAgPQkJICAgICAJCQkgICAgICBcCisJJChHTElCX0xJQlMpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCQkJICAgICAgXAorCSQodG9wX2J1aWxkZGlyKS9jb21tb24vbGliZ3Zmc2Nv
bW1vbi5sYSAJCQkgICAgICBcCisJJCh0b3BfYnVpbGRkaXIpL21vbml0b3IvcHJveHkvbGliZ3Zm
c3Byb3h5dm9sdW1lbW9uaXRvcmRhZW1vbi1ub2luLmxhIFwKKwkkKE5VTEwpCisKK2d2ZnNfbXRw
X3ZvbHVtZV9tb25pdG9yX0xEQUREICs9ICQoR1VERVZfTElCUykKKworCityZW1vdGVfdm9sdW1l
X21vbml0b3JzZGlyID0gJChkYXRhZGlyKS9ndmZzL3JlbW90ZS12b2x1bWUtbW9uaXRvcnMKK3Jl
bW90ZV92b2x1bWVfbW9uaXRvcnNfREFUQSA9IG10cC5tb25pdG9yCisKK3NlcnZpY2VkaXIgICAg
ICAgPSAkKGRhdGFkaXIpL2RidXMtMS9zZXJ2aWNlcworc2VydmljZV9pbl9maWxlcyA9IG9yZy5n
dGsuUHJpdmF0ZS5NVFBWb2x1bWVNb25pdG9yLnNlcnZpY2UuaW4KK3NlcnZpY2VfREFUQSAgICAg
PSAkKHNlcnZpY2VfaW5fZmlsZXM6LnNlcnZpY2UuaW49LnNlcnZpY2UpCisKKyQoc2VydmljZV9E
QVRBKTogJChzZXJ2aWNlX2luX2ZpbGVzKSBNYWtlZmlsZQorCSQoQU1fVl9HRU4pICQoU0VEKSAt
ZSAic3xcQGxpYmV4ZWNkaXJcQHwkKGxpYmV4ZWNkaXIpfCIgJDwgPiAkQAorCitjbGVhbi1sb2Nh
bDoKKwlybSAtZiAqfiAqLmxvVCAkKHNlcnZpY2VfREFUQSkKKworRVhUUkFfRElTVCA9ICQoc2Vy
dmljZV9pbl9maWxlcykgbXRwLm1vbml0b3IKZGlmZiAtLWdpdCBhL21vbml0b3IvbXRwL2dtdHB2
b2x1bWUuYyBiL21vbml0b3IvbXRwL2dtdHB2b2x1bWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45ZjQ0Zjg0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9uaXRvci9tdHAvZ210
cHZvbHVtZS5jCkBAIC0wLDAgKzEsNDMzIEBACisvKiBHSU8gLSBHTGliIElucHV0LCBPdXRwdXQg
YW5kIFN0cmVhbWluZyBMaWJyYXJ5CisgKiAgIFZvbHVtZSBNb25pdG9yIGZvciBNVFAgQmFja2Vu
ZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBQaGlsaXAgTGFuZ2RhbGUgPHBoaWxpcGxAb3Zl
cnQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICogQm9zdG9u
LCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5j
bHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQu
aD4KKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2lu
Y2x1ZGUgPGdpby9naW8uaD4KKworI2luY2x1ZGUgImdtdHB2b2x1bWUuaCIKKworR19MT0NLX0RF
RklORV9TVEFUSUMgKG10cF92b2x1bWUpOworCitzdHJ1Y3QgX0dNdHBWb2x1bWUgeworICBHT2Jq
ZWN0IHBhcmVudDsKKworICBHVm9sdW1lTW9uaXRvciAqdm9sdW1lX21vbml0b3I7IC8qIG93bmVk
IGJ5IHZvbHVtZSBtb25pdG9yICovCisKKyAgY2hhciAqZGV2aWNlX3BhdGg7CisgIEdVZGV2RGV2
aWNlICpkZXZpY2U7CisKKyAgR0ZpbGUgKmFjdGl2YXRpb25fcm9vdDsKKworICBjaGFyICpuYW1l
OworICBjaGFyICppY29uOworfTsKKworc3RhdGljIHZvaWQgZ19tdHBfdm9sdW1lX3ZvbHVtZV9p
ZmFjZV9pbml0IChHVm9sdW1lSWZhY2UgKmlmYWNlKTsKKworR19ERUZJTkVfVFlQRV9FWFRFTkRF
RCAoR010cFZvbHVtZSwgZ19tdHBfdm9sdW1lLCBHX1RZUEVfT0JKRUNULCAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHX1RZUEVfVk9MVU1FLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX210cF92b2x1bWVf
dm9sdW1lX2lmYWNlX2luaXQpKQorCitzdGF0aWMgdm9pZAorZ19tdHBfdm9sdW1lX2ZpbmFsaXpl
IChHT2JqZWN0ICpvYmplY3QpCit7CisgIEdNdHBWb2x1bWUgKnZvbHVtZTsKKworICB2b2x1bWUg
PSBHX01UUF9WT0xVTUUgKG9iamVjdCk7CisKKyAgaWYgKHZvbHVtZS0+ZGV2aWNlICE9IE5VTEwp
CisgICAgZ19vYmplY3RfdW5yZWYgKHZvbHVtZS0+ZGV2aWNlKTsKKworICBpZiAodm9sdW1lLT5h
Y3RpdmF0aW9uX3Jvb3QgIT0gTlVMTCkKKyAgICBnX29iamVjdF91bnJlZiAodm9sdW1lLT5hY3Rp
dmF0aW9uX3Jvb3QpOworCisgIGlmICh2b2x1bWUtPnZvbHVtZV9tb25pdG9yICE9IE5VTEwpCisg
ICAgZ19vYmplY3RfcmVtb3ZlX3dlYWtfcG9pbnRlciAoR19PQkpFQ1QgKHZvbHVtZS0+dm9sdW1l
X21vbml0b3IpLCAoZ3BvaW50ZXIpICYodm9sdW1lLT52b2x1bWVfbW9uaXRvcikpOworCisgIGdf
ZnJlZSAodm9sdW1lLT5uYW1lKTsKKyAgZ19mcmVlICh2b2x1bWUtPmljb24pOworCisgIGlmIChH
X09CSkVDVF9DTEFTUyAoZ19tdHBfdm9sdW1lX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKQorICAg
ICgqR19PQkpFQ1RfQ0xBU1MgKGdfbXRwX3ZvbHVtZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSkg
KG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCitnX210cF92b2x1bWVfY2xhc3NfaW5pdCAoR010
cFZvbHVtZUNsYXNzICprbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0g
R19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKworICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdf
bXRwX3ZvbHVtZV9maW5hbGl6ZTsKK30KKworc3RhdGljIHZvaWQKK2dfbXRwX3ZvbHVtZV9pbml0
IChHTXRwVm9sdW1lICptdHBfdm9sdW1lKQoreworfQorCitzdGF0aWMgaW50IGhleGRpZ2l0IChj
aGFyIGMpCit7CisgIGlmIChjID49ICdhJykKKyAgICByZXR1cm4gYyAtICdhJyArIDEwOworICBp
ZiAoYyA+PSAnQScpCisgICByZXR1cm4gYyAtICdBJyArIDEwOworICBnX3JldHVybl92YWxfaWZf
ZmFpbCAoYyA+PSAnMCcgJiYgYyA8PSAnOScsIDApOworICByZXR1cm4gYyAtICcwJzsKK30KKwor
LyogRG8gbm90IGZyZWUgcmVzdWx0LCBpdCdzIGEgc3RhdGljIGJ1ZmZlciAqLworc3RhdGljIGNv
bnN0IGNoYXIqCit1ZGV2X2RlY29kZV9zdHJpbmcgKGNvbnN0IGNoYXIqIGVuY29kZWQpCit7Cisg
IHN0YXRpYyBjaGFyIGRlY29kZWRbNDA5Nl07CisgIGludCBsZW47CisgIGNvbnN0IGNoYXIqIHM7
CisKKyAgaWYgKGVuY29kZWQgPT0gTlVMTCkKKyAgICByZXR1cm4gTlVMTDsKKworICBmb3IgKGxl
biA9IDAsIHMgPSBlbmNvZGVkOyAqcyAmJiBsZW4gPCBzaXplb2YgKGRlY29kZWQpIC0gMTsgKyts
ZW4sICsrcykgeworICAgIC8qIG5lZWQgdG8gY2hlY2sgZm9yIE5VTCB0ZXJtaW5hdG9yIGluIGFk
dmFuY2UgKi8KKyAgICBpZiAoc1swXSA9PSAnXFwnICYmIHNbMV0gPT0gJ3gnICYmIHNbMl0gPj0g
JzAnICYmIHNbM10gPj0gJzAnKSB7CisgICAgICBkZWNvZGVkW2xlbl0gPSAoaGV4ZGlnaXQgKHNb
Ml0pIDw8IDQpIHwgaGV4ZGlnaXQgKHNbM10pOworICAgICAgcyArPSAzOworICAgIH0gZWxzZSB7
CisgICAgICBkZWNvZGVkW2xlbl0gPSAqczsKKyAgICB9CisgIH0KKyAgZGVjb2RlZFtsZW5dID0g
J1wwJzsKKyAgcmV0dXJuIGRlY29kZWQ7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfdm9sdW1lX25h
bWUgKEdNdHBWb2x1bWUgKnYpCit7CisgIGNvbnN0IGNoYXIgKmdwaG90b19uYW1lOworICBjb25z
dCBjaGFyICpwcm9kdWN0ID0gTlVMTDsKKyAgY29uc3QgY2hhciAqdmVuZG9yOworICBjb25zdCBj
aGFyICptb2RlbDsKKworICAvKiBvdXIgcHJlZmVyZW5jZTogSURfTVRQID4gSURfTUVESUFfUExB
WUVSX3tWRU5ET1IsUFJPRFVDVH0gPiBwcm9kdWN0ID4KKyAgICogSURfe1ZFTkRPUixNT0RFTH0g
Ki8KKworICBncGhvdG9fbmFtZSA9IGdfdWRldl9kZXZpY2VfZ2V0X3Byb3BlcnR5ICh2LT5kZXZp
Y2UsICJJRF9NVFAiKTsKKyAgaWYgKGdwaG90b19uYW1lICE9IE5VTEwgJiYgc3RyY21wIChncGhv
dG9fbmFtZSwgIjEiKSAhPSAwKSB7CisgICAgdi0+bmFtZSA9IGdfc3RyZHVwIChncGhvdG9fbmFt
ZSk7CisgICAgcmV0dXJuOworICB9CisKKyAgdmVuZG9yID0gZ191ZGV2X2RldmljZV9nZXRfcHJv
cGVydHkgKHYtPmRldmljZSwgIklEX01FRElBX1BMQVlFUl9WRU5ET1IiKTsKKyAgaWYgKHZlbmRv
ciA9PSBOVUxMKQorICAgIHZlbmRvciA9IGdfdWRldl9kZXZpY2VfZ2V0X3Byb3BlcnR5ICh2LT5k
ZXZpY2UsICJJRF9WRU5ET1JfRU5DIik7CisgIG1vZGVsID0gZ191ZGV2X2RldmljZV9nZXRfcHJv
cGVydHkgKHYtPmRldmljZSwgIklEX01FRElBX1BMQVlFUl9NT0RFTCIpOworICBpZiAobW9kZWwg
PT0gTlVMTCkgeworICAgIG1vZGVsID0gZ191ZGV2X2RldmljZV9nZXRfcHJvcGVydHkgKHYtPmRl
dmljZSwgIklEX01PREVMX0VOQyIpOworICAgIHByb2R1Y3QgPSBnX3VkZXZfZGV2aWNlX2dldF9z
eXNmc19hdHRyICh2LT5kZXZpY2UsICJwcm9kdWN0Iik7CisgIH0KKworICB2LT5uYW1lID0gTlVM
TDsKKyAgaWYgKHByb2R1Y3QgIT0gTlVMTCAmJiBzdHJsZW4gKHByb2R1Y3QpID4gMCkgeworICAg
IHYtPm5hbWUgPSBnX3N0cmR1cCAocHJvZHVjdCk7CisgIH0gZWxzZSBpZiAodmVuZG9yID09IE5V
TEwpIHsKKyAgICBpZiAobW9kZWwgIT0gTlVMTCkKKyAgICAgIHYtPm5hbWUgPSBnX3N0cmR1cCAo
dWRldl9kZWNvZGVfc3RyaW5nIChtb2RlbCkpOworICB9IGVsc2UgeworICAgIGlmIChtb2RlbCAh
PSBOVUxMKSB7CisgICAgICAvKiB3ZSBjYW4ndCBjYWxsIHVkZXZfZGVjb2RlX3N0cmluZygpIHR3
aWNlIGluIG9uZSBnX3N0cmR1cF9wcmludGYoKSwKKyAgICAgICAqIGl0IHJldHVybnMgYSBzdGF0
aWMgYnVmZmVyICovCisgICAgICBnY2hhciAqdGVtcCA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzICVz
IiwgdmVuZG9yLCBtb2RlbCk7CisgICAgICB2LT5uYW1lID0gZ19zdHJkdXAgKHVkZXZfZGVjb2Rl
X3N0cmluZyAodGVtcCkpOworICAgICAgZ19mcmVlICh0ZW1wKTsKKyAgICB9IGVsc2UgeworICAg
ICAgaWYgKGdfdWRldl9kZXZpY2VfaGFzX3Byb3BlcnR5ICh2LT5kZXZpY2UsICJJRF9NRURJQV9Q
TEFZRVIiKSkgeworICAgICAgICAvKiBUcmFuc2xhdG9yczogJXMgaXMgdGhlIGRldmljZSB2ZW5k
b3IgKi8KKyAgICAgICAgdi0+bmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoXygiJXMgQXVkaW8gUGxh
eWVyIiksIHVkZXZfZGVjb2RlX3N0cmluZyAodmVuZG9yKSk7CisgICAgICB9IGVsc2UgeworICAg
ICAgICAvKiBUcmFuc2xhdG9yczogJXMgaXMgdGhlIGRldmljZSB2ZW5kb3IgKi8KKyAgICAgICAg
di0+bmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoXygiJXMgQ2FtZXJhIiksIHVkZXZfZGVjb2RlX3N0
cmluZyAodmVuZG9yKSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKHYtPm5hbWUgPT0g
TlVMTCkKKyAgICB2LT5uYW1lID0gZ19zdHJkdXAgKF8oIkNhbWVyYSIpKTsKK30KKworc3RhdGlj
IHZvaWQKK3NldF92b2x1bWVfaWNvbiAoR010cFZvbHVtZSAqdm9sdW1lKQoreworICBpZiAoZ191
ZGV2X2RldmljZV9oYXNfcHJvcGVydHkgKHZvbHVtZS0+ZGV2aWNlLCAiSURfTUVESUFfUExBWUVS
X0lDT05fTkFNRSIpKQorICAgIHZvbHVtZS0+aWNvbiA9IGdfc3RyZHVwIChnX3VkZXZfZGV2aWNl
X2dldF9wcm9wZXJ0eSAodm9sdW1lLT5kZXZpY2UsICJJRF9NRURJQV9QTEFZRVJfSUNPTl9OQU1F
IikpOworICBlbHNlIGlmIChnX3VkZXZfZGV2aWNlX2hhc19wcm9wZXJ0eSAodm9sdW1lLT5kZXZp
Y2UsICJJRF9NRURJQV9QTEFZRVIiKSkKKyAgICB2b2x1bWUtPmljb24gPSBnX3N0cmR1cCAoIm11
bHRpbWVkaWEtcGxheWVyIik7CisgIGVsc2UKKyAgICB2b2x1bWUtPmljb24gPSBnX3N0cmR1cCAo
ImNhbWVyYS1waG90byIpOworfQorCitHTXRwVm9sdW1lICoKK2dfbXRwX3ZvbHVtZV9uZXcgKEdW
b2x1bWVNb25pdG9yICAgKnZvbHVtZV9tb25pdG9yLAorICAgICAgICAgICAgICAgICAgR1VkZXZE
ZXZpY2UgICAgICAqZGV2aWNlLAorICAgICAgICAgICAgICAgICAgR1VkZXZDbGllbnQgICAgICAq
Z3VkZXZfY2xpZW50LAorICAgICAgICAgICAgICAgICAgR0ZpbGUgICAgICAgICAgICAqYWN0aXZh
dGlvbl9yb290KQoreworICBHTXRwVm9sdW1lICp2b2x1bWU7CisgIGNvbnN0IGNoYXIgKmRldmlj
ZV9wYXRoOworCisgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2b2x1bWVfbW9uaXRvciAhPSBOVUxM
LCBOVUxMKTsKKyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRldmljZSAhPSBOVUxMLCBOVUxMKTsK
KyAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGd1ZGV2X2NsaWVudCAhPSBOVUxMLCBOVUxMKTsKKyAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwgKGFjdGl2YXRpb25fcm9vdCAhPSBOVUxMLCBOVUxMKTsKKwor
ICBpZiAoIWdfdWRldl9kZXZpY2VfaGFzX3Byb3BlcnR5IChkZXZpY2UsICJJRF9NVFBfREVWSUNF
IikpCisgICAgcmV0dXJuIE5VTEw7CisgIGRldmljZV9wYXRoID0gZ191ZGV2X2RldmljZV9nZXRf
ZGV2aWNlX2ZpbGUgKGRldmljZSk7CisKKyAgdm9sdW1lID0gZ19vYmplY3RfbmV3IChHX1RZUEVf
TVRQX1ZPTFVNRSwgTlVMTCk7CisgIHZvbHVtZS0+dm9sdW1lX21vbml0b3IgPSB2b2x1bWVfbW9u
aXRvcjsKKyAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlciAoR19PQkpFQ1QgKHZvbHVtZV9tb25p
dG9yKSwgKGdwb2ludGVyKSAmKHZvbHVtZS0+dm9sdW1lX21vbml0b3IpKTsKKyAgdm9sdW1lLT5k
ZXZpY2VfcGF0aCA9IGdfc3RyZHVwIChkZXZpY2VfcGF0aCk7CisgIHZvbHVtZS0+ZGV2aWNlID0g
Z19vYmplY3RfcmVmIChkZXZpY2UpOworICB2b2x1bWUtPmFjdGl2YXRpb25fcm9vdCA9IGdfb2Jq
ZWN0X3JlZiAoYWN0aXZhdGlvbl9yb290KTsKKworICBzZXRfdm9sdW1lX25hbWUgKHZvbHVtZSk7
CisgIHNldF92b2x1bWVfaWNvbiAodm9sdW1lKTsKKyAgLyogd2UgZG8gbm90IHJlYWxseSBuZWVk
IHRvIGxpc3RlbiBmb3IgY2hhbmdlcyAqLworCisgIHJldHVybiB2b2x1bWU7Cit9CisKK3ZvaWQK
K2dfbXRwX3ZvbHVtZV9yZW1vdmVkIChHTXRwVm9sdW1lICp2b2x1bWUpCit7Cit9CisKK3N0YXRp
YyBHSWNvbiAqCitnX210cF92b2x1bWVfZ2V0X2ljb24gKEdWb2x1bWUgKnZvbHVtZSkKK3sKKyAg
R010cFZvbHVtZSAqbXRwX3ZvbHVtZSA9IEdfTVRQX1ZPTFVNRSAodm9sdW1lKTsKKyAgR0ljb24g
Kmljb247CisKKyAgR19MT0NLIChtdHBfdm9sdW1lKTsKKyAgaWNvbiA9IGdfdGhlbWVkX2ljb25f
bmV3IChtdHBfdm9sdW1lLT5pY29uKTsKKyAgR19VTkxPQ0sgKG10cF92b2x1bWUpOworICByZXR1
cm4gaWNvbjsKK30KKworc3RhdGljIGNoYXIgKgorZ19tdHBfdm9sdW1lX2dldF9uYW1lIChHVm9s
dW1lICp2b2x1bWUpCit7CisgIEdNdHBWb2x1bWUgKm10cF92b2x1bWUgPSBHX01UUF9WT0xVTUUg
KHZvbHVtZSk7CisgIGNoYXIgKm5hbWU7CisKKyAgR19MT0NLIChtdHBfdm9sdW1lKTsKKyAgbmFt
ZSA9IGdfc3RyZHVwIChtdHBfdm9sdW1lLT5uYW1lKTsKKyAgR19VTkxPQ0sgKG10cF92b2x1bWUp
OworCisgIHJldHVybiBuYW1lOworfQorCitzdGF0aWMgY2hhciAqCitnX210cF92b2x1bWVfZ2V0
X3V1aWQgKEdWb2x1bWUgKnZvbHVtZSkKK3sKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbgorZ19tdHBfdm9sdW1lX2Nhbl9tb3VudCAoR1ZvbHVtZSAqdm9sdW1lKQoreworICBy
ZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCitnX210cF92b2x1bWVfY2FuX2VqZWN0
IChHVm9sdW1lICp2b2x1bWUpCit7CisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29s
ZWFuCitnX210cF92b2x1bWVfc2hvdWxkX2F1dG9tb3VudCAoR1ZvbHVtZSAqdm9sdW1lKQorewor
ICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIEdEcml2ZSAqCitnX210cF92b2x1bWVfZ2V0X2Ry
aXZlIChHVm9sdW1lICp2b2x1bWUpCit7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgR01v
dW50ICoKK2dfbXRwX3ZvbHVtZV9nZXRfbW91bnQgKEdWb2x1bWUgKnZvbHVtZSkKK3sKKyAgcmV0
dXJuIE5VTEw7Cit9CisKK2dib29sZWFuCitnX210cF92b2x1bWVfaGFzX3BhdGggKEdNdHBWb2x1
bWUgICp2b2x1bWUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgKnN5c2ZzX3Bh
dGgpCit7CisgIEdNdHBWb2x1bWUgKm10cF92b2x1bWUgPSBHX01UUF9WT0xVTUUgKHZvbHVtZSk7
CisgIGdib29sZWFuIHJlczsKKworICBHX0xPQ0sgKG10cF92b2x1bWUpOworICByZXMgPSBGQUxT
RTsKKyAgaWYgKG10cF92b2x1bWUtPmRldmljZSAhPSBOVUxMKQorICAgIHJlcyA9IHN0cmNtcCAo
Z191ZGV2X2RldmljZV9nZXRfc3lzZnNfcGF0aCAobXRwX3ZvbHVtZS0+ZGV2aWNlKSwgc3lzZnNf
cGF0aCkgPT0gMDsKKyAgR19VTkxPQ0sgKG10cF92b2x1bWUpOworICByZXR1cm4gcmVzOworfQor
Cit0eXBlZGVmIHN0cnVjdAoreworICBHTXRwVm9sdW1lICplbmNsb3Npbmdfdm9sdW1lOworICBH
QXN5bmNSZWFkeUNhbGxiYWNrICBjYWxsYmFjazsKKyAgZ3BvaW50ZXIgdXNlcl9kYXRhOworfSBB
Y3RpdmF0aW9uTW91bnRPcDsKKworc3RhdGljIHZvaWQKK21vdW50X2NhbGxiYWNrIChHT2JqZWN0
ICpzb3VyY2Vfb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICpy
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIEFj
dGl2YXRpb25Nb3VudE9wICpkYXRhID0gdXNlcl9kYXRhOworICBkYXRhLT5jYWxsYmFjayAoR19P
QkpFQ1QgKGRhdGEtPmVuY2xvc2luZ192b2x1bWUpLCByZXMsIGRhdGEtPnVzZXJfZGF0YSk7Cisg
IGdfZnJlZSAoZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkCitnX210cF92b2x1bWVfbW91bnQgKEdW
b2x1bWUgICAgICAgICAgICAgKnZvbHVtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdNb3Vu
dE1vdW50RmxhZ3MgICAgIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgR01vdW50T3Bl
cmF0aW9uICAgICAqbW91bnRfb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgR0Nh
bmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBH
QXN5bmNSZWFkeUNhbGxiYWNrICBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgIGdw
b2ludGVyICAgICAgICAgICAgIHVzZXJfZGF0YSkKK3sKKyAgR010cFZvbHVtZSAqbXRwX3ZvbHVt
ZSA9IEdfTVRQX1ZPTFVNRSAodm9sdW1lKTsKKyAgQWN0aXZhdGlvbk1vdW50T3AgKmRhdGE7CisK
KyAgLypnX3dhcm5pbmcgKCJtdHBfdm9sdW1lX21vdW50IChjYW5fbW91bnQ9JWQgZm9yZWlnbj0l
cCBkZXZpY2VfcGF0aD0lcykiLAorICAgICAgICAgICAgICBnX210cF92b2x1bWVfY2FuX21vdW50
ICh2b2x1bWUpLAorICAgICAgICAgICAgICBtdHBfdm9sdW1lLT5hY3RpdmF0aW9uX3Jvb3QsCisg
ICAgICAgICAgICAgIG10cF92b2x1bWUtPmRldmljZV9wYXRoKTsqLworCisgIEdfTE9DSyAobXRw
X3ZvbHVtZSk7CisKKyAgZGF0YSA9IGdfbmV3MCAoQWN0aXZhdGlvbk1vdW50T3AsIDEpOworICBk
YXRhLT5lbmNsb3Npbmdfdm9sdW1lID0gbXRwX3ZvbHVtZTsKKyAgZGF0YS0+Y2FsbGJhY2sgPSBj
YWxsYmFjazsKKyAgZGF0YS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworCisgIGdfZmlsZV9tb3Vu
dF9lbmNsb3Npbmdfdm9sdW1lIChtdHBfdm9sdW1lLT5hY3RpdmF0aW9uX3Jvb3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbW91bnRfb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VudF9jYWxs
YmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOworCisgIEdfVU5M
T0NLIChtdHBfdm9sdW1lKTsKK30KKworc3RhdGljIGdib29sZWFuCitnX210cF92b2x1bWVfbW91
bnRfZmluaXNoIChHVm9sdW1lICAgICAgICp2b2x1bWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQXN5bmNSZXN1bHQgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBH
RXJyb3IgICAgICAgKiplcnJvcikKK3sKKyAgR010cFZvbHVtZSAqbXRwX3ZvbHVtZSA9IEdfTVRQ
X1ZPTFVNRSAodm9sdW1lKTsKKyAgZ2Jvb2xlYW4gcmVzOworCisgIEdfTE9DSyAobXRwX3ZvbHVt
ZSk7CisgIHJlcyA9IGdfZmlsZV9tb3VudF9lbmNsb3Npbmdfdm9sdW1lX2ZpbmlzaCAobXRwX3Zv
bHVtZS0+YWN0aXZhdGlvbl9yb290LCByZXN1bHQsIGVycm9yKTsKKyAgR19VTkxPQ0sgKG10cF92
b2x1bWUpOworCisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBjaGFyICoKK2dfbXRwX3ZvbHVt
ZV9nZXRfaWRlbnRpZmllciAoR1ZvbHVtZSAgICAqdm9sdW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpraW5kKQoreworICBHTXRwVm9sdW1lICptdHBfdm9sdW1l
ID0gR19NVFBfVk9MVU1FICh2b2x1bWUpOworICBjaGFyICppZDsKKworICBHX0xPQ0sgKG10cF92
b2x1bWUpOworICBpZCA9IE5VTEw7CisgIGlmIChzdHJjbXAgKGtpbmQsIEdfVk9MVU1FX0lERU5U
SUZJRVJfS0lORF9VTklYX0RFVklDRSkgPT0gMCkKKyAgICBpZCA9IGdfc3RyZHVwIChtdHBfdm9s
dW1lLT5kZXZpY2VfcGF0aCk7CisgIEdfVU5MT0NLIChtdHBfdm9sdW1lKTsKKworICByZXR1cm4g
aWQ7Cit9CisKK3N0YXRpYyBjaGFyICoqCitnX210cF92b2x1bWVfZW51bWVyYXRlX2lkZW50aWZp
ZXJzIChHVm9sdW1lICp2b2x1bWUpCit7CisgIEdNdHBWb2x1bWUgKm10cF92b2x1bWUgPSBHX01U
UF9WT0xVTUUgKHZvbHVtZSk7CisgIEdQdHJBcnJheSAqcmVzOworCisgIEdfTE9DSyAobXRwX3Zv
bHVtZSk7CisKKyAgcmVzID0gZ19wdHJfYXJyYXlfbmV3ICgpOworCisgIGlmIChtdHBfdm9sdW1l
LT5kZXZpY2VfcGF0aCAmJiAqbXRwX3ZvbHVtZS0+ZGV2aWNlX3BhdGggIT0gMCkKKyAgICBnX3B0
cl9hcnJheV9hZGQgKHJlcywKKyAgICAgICAgICAgICAgICAgICAgIGdfc3RyZHVwIChHX1ZPTFVN
RV9JREVOVElGSUVSX0tJTkRfVU5JWF9ERVZJQ0UpKTsKKworICAvKiBOdWxsLXRlcm1pbmF0ZSAq
LworICBnX3B0cl9hcnJheV9hZGQgKHJlcywgTlVMTCk7CisKKyAgR19VTkxPQ0sgKG10cF92b2x1
bWUpOworCisgIHJldHVybiAoY2hhciAqKilnX3B0cl9hcnJheV9mcmVlIChyZXMsIEZBTFNFKTsK
K30KKworc3RhdGljIEdGaWxlICoKK2dfbXRwX3ZvbHVtZV9nZXRfYWN0aXZhdGlvbl9yb290IChH
Vm9sdW1lICp2b2x1bWUpCit7CisgIEdNdHBWb2x1bWUgKm10cF92b2x1bWUgPSBHX01UUF9WT0xV
TUUgKHZvbHVtZSk7CisKKyAgcmV0dXJuIGdfb2JqZWN0X3JlZiAobXRwX3ZvbHVtZS0+YWN0aXZh
dGlvbl9yb290KTsKK30KKworc3RhdGljIHZvaWQKK2dfbXRwX3ZvbHVtZV92b2x1bWVfaWZhY2Vf
aW5pdCAoR1ZvbHVtZUlmYWNlICppZmFjZSkKK3sKKyAgaWZhY2UtPmdldF9uYW1lID0gZ19tdHBf
dm9sdW1lX2dldF9uYW1lOworICBpZmFjZS0+Z2V0X2ljb24gPSBnX210cF92b2x1bWVfZ2V0X2lj
b247CisgIGlmYWNlLT5nZXRfdXVpZCA9IGdfbXRwX3ZvbHVtZV9nZXRfdXVpZDsKKyAgaWZhY2Ut
PmdldF9kcml2ZSA9IGdfbXRwX3ZvbHVtZV9nZXRfZHJpdmU7CisgIGlmYWNlLT5nZXRfbW91bnQg
PSBnX210cF92b2x1bWVfZ2V0X21vdW50OworICBpZmFjZS0+Y2FuX21vdW50ID0gZ19tdHBfdm9s
dW1lX2Nhbl9tb3VudDsKKyAgaWZhY2UtPmNhbl9lamVjdCA9IGdfbXRwX3ZvbHVtZV9jYW5fZWpl
Y3Q7CisgIGlmYWNlLT5zaG91bGRfYXV0b21vdW50ID0gZ19tdHBfdm9sdW1lX3Nob3VsZF9hdXRv
bW91bnQ7CisgIGlmYWNlLT5tb3VudF9mbiA9IGdfbXRwX3ZvbHVtZV9tb3VudDsKKyAgaWZhY2Ut
Pm1vdW50X2ZpbmlzaCA9IGdfbXRwX3ZvbHVtZV9tb3VudF9maW5pc2g7CisgIGlmYWNlLT5lamVj
dCA9IE5VTEw7CisgIGlmYWNlLT5lamVjdF9maW5pc2ggPSBOVUxMOworICBpZmFjZS0+Z2V0X2lk
ZW50aWZpZXIgPSBnX210cF92b2x1bWVfZ2V0X2lkZW50aWZpZXI7CisgIGlmYWNlLT5lbnVtZXJh
dGVfaWRlbnRpZmllcnMgPSBnX210cF92b2x1bWVfZW51bWVyYXRlX2lkZW50aWZpZXJzOworICBp
ZmFjZS0+Z2V0X2FjdGl2YXRpb25fcm9vdCA9IGdfbXRwX3ZvbHVtZV9nZXRfYWN0aXZhdGlvbl9y
b290OworfQpkaWZmIC0tZ2l0IGEvbW9uaXRvci9tdHAvZ210cHZvbHVtZS5oIGIvbW9uaXRvci9t
dHAvZ210cHZvbHVtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZDJl
NmIKLS0tIC9kZXYvbnVsbAorKysgYi9tb25pdG9yL210cC9nbXRwdm9sdW1lLmgKQEAgLTAsMCAr
MSw1OSBAQAorLyogR0lPIC0gR0xpYiBJbnB1dCwgT3V0cHV0IGFuZCBTdHJlYW1pbmcgTGlicmFy
eQorICogICBWb2x1bWUgTW9uaXRvciBmb3IgTVRQIEJhY2tlbmQKKyAqCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgUGhpbGlwIExhbmdkYWxlIDxwaGlsaXBsQG92ZXJ0Lm9yZz4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgorICovCisKKyNpZm5kZWYgX19HX01UUF9WT0xVTUVfSF9fCisjZGVmaW5lIF9fR19NVFBfVk9M
VU1FX0hfXworCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+
CisKKyNpbmNsdWRlIDxndWRldi9ndWRldi5oPgorI2luY2x1ZGUgImdtdHB2b2x1bWVtb25pdG9y
LmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBHX1RZUEVfTVRQX1ZPTFVNRSAgICAgICAg
KGdfbXRwX3ZvbHVtZV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgR19NVFBfVk9MVU1FKG8pICAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG8pLCBHX1RZUEVfTVRQX1ZPTFVNRSwg
R010cFZvbHVtZSkpCisjZGVmaW5lIEdfTVRQX1ZPTFVNRV9DTEFTUyhrKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QoKGspLCBHX1RZUEVfTVRQX1ZPTFVNRSwgR010cFZvbHVtZUNsYXNzKSkK
KyNkZWZpbmUgR19JU19NVFBfVk9MVU1FKG8pICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSAoKG8pLCBHX1RZUEVfTVRQX1ZPTFVNRSkpCisjZGVmaW5lIEdfSVNfTVRQX1ZPTFVNRV9D
TEFTUyhrKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrKSwgR19UWVBFX01UUF9WT0xVTUUp
KQorCit0eXBlZGVmIHN0cnVjdCBfR010cFZvbHVtZUNsYXNzIEdNdHBWb2x1bWVDbGFzczsKKwor
c3RydWN0IF9HTXRwVm9sdW1lQ2xhc3MgeworICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsK
K307CisKK0dUeXBlIGdfbXRwX3ZvbHVtZV9nZXRfdHlwZSAodm9pZCkgR19HTlVDX0NPTlNUOwor
CitHTXRwVm9sdW1lICpnX210cF92b2x1bWVfbmV3ICAgICAgKEdWb2x1bWVNb25pdG9yICp2b2x1
bWVfbW9uaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1VkZXZEZXZp
Y2UgICAgKmRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1VkZXZD
bGllbnQgICAgKmd1ZGV2X2NsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0ZpbGUgICAgICAgICAgKmFjdGl2YXRpb25fcm9vdCk7CisKK2dib29sZWFuICAgIGdfbXRw
X3ZvbHVtZV9oYXNfcGF0aCAoR010cFZvbHVtZSAgICAgKnZvbHVtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgKnBhdGgpOworCit2b2lkICAgICAg
ICBnX210cF92b2x1bWVfcmVtb3ZlZCAgKEdNdHBWb2x1bWUgICAgICp2b2x1bWUpOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLyogX19HX01UUF9WT0xVTUVfSF9fICovCmRpZmYgLS1naXQgYS9t
b25pdG9yL210cC9nbXRwdm9sdW1lbW9uaXRvci5jIGIvbW9uaXRvci9tdHAvZ210cHZvbHVtZW1v
bml0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmQxYWJiCi0tLSAv
ZGV2L251bGwKKysrIGIvbW9uaXRvci9tdHAvZ210cHZvbHVtZW1vbml0b3IuYwpAQCAtMCwwICsx
LDMyOSBAQAorLyogR0lPIC0gR0xpYiBJbnB1dCwgT3V0cHV0IGFuZCBTdHJlYW1pbmcgTGlicmFy
eQorICogICBWb2x1bWUgTW9uaXRvciBmb3IgTVRQIEJhY2tlbmQKKyAqCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgUGhpbGlwIExhbmdkYWxlIDxwaGlsaXBsQG92ZXJ0Lm9yZz4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lu
Y2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8Z2xpYi5o
PgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorCisj
aW5jbHVkZSAiZ210cHZvbHVtZW1vbml0b3IuaCIKKyNpbmNsdWRlICJnbXRwdm9sdW1lLmgiCisK
KyNpbmNsdWRlIDxnaW8vZ3VuaXhtb3VudHMuaD4KKworR19MT0NLX0RFRklORV9TVEFUSUModm1f
bG9jayk7CisKK3N0YXRpYyBHTXRwVm9sdW1lTW9uaXRvciAqdGhlX3ZvbHVtZV9tb25pdG9yID0g
TlVMTDsKKworc3RydWN0IF9HTXRwVm9sdW1lTW9uaXRvciB7CisgIEdOYXRpdmVWb2x1bWVNb25p
dG9yIHBhcmVudDsKKworICBHVW5peE1vdW50TW9uaXRvciAqbW91bnRfbW9uaXRvcjsKKworICBH
VWRldkNsaWVudCAqZ3VkZXZfY2xpZW50OworCisgIEdMaXN0ICpsYXN0X2RldmljZXM7CisKKyAg
R0xpc3QgKmRldmljZV92b2x1bWVzOworfTsKKworc3RhdGljIHZvaWQgb25fdWV2ZW50IChHVWRl
dkNsaWVudCAqY2xpZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKmFjdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgR1VkZXZEZXZpY2UgKmRldmljZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKKworR19ERUZJTkVfVFlQRSAoR010cFZv
bHVtZU1vbml0b3IsIGdfbXRwX3ZvbHVtZV9tb25pdG9yLCBHX1RZUEVfVk9MVU1FX01PTklUT1Ip
CisKK3N0YXRpYyB2b2lkCitsaXN0X2ZyZWUgKEdMaXN0ICpvYmplY3RzKQoreworICBnX2xpc3Rf
Zm9yZWFjaCAob2JqZWN0cywgKEdGdW5jKWdfb2JqZWN0X3VucmVmLCBOVUxMKTsKKyAgZ19saXN0
X2ZyZWUgKG9iamVjdHMpOworfQorCitzdGF0aWMgdm9pZAorZ19tdHBfdm9sdW1lX21vbml0b3Jf
ZGlzcG9zZSAoR09iamVjdCAqb2JqZWN0KQoreworICBHX0xPQ0sgKHZtX2xvY2spOworICB0aGVf
dm9sdW1lX21vbml0b3IgPSBOVUxMOworICBHX1VOTE9DSyAodm1fbG9jayk7CisKKyAgaWYgKEdf
T0JKRUNUX0NMQVNTIChnX210cF92b2x1bWVfbW9uaXRvcl9wYXJlbnRfY2xhc3MpLT5kaXNwb3Nl
KQorICAgICgqR19PQkpFQ1RfQ0xBU1MgKGdfbXRwX3ZvbHVtZV9tb25pdG9yX3BhcmVudF9jbGFz
cyktPmRpc3Bvc2UpIChvYmplY3QpOworfQorCitzdGF0aWMgdm9pZAorZ19tdHBfdm9sdW1lX21v
bml0b3JfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKyAgR010cFZvbHVtZU1vbml0b3Ig
Km1vbml0b3I7CisKKyAgbW9uaXRvciA9IEdfTVRQX1ZPTFVNRV9NT05JVE9SIChvYmplY3QpOwor
CisgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyAobW9uaXRvci0+Z3VkZXZf
Y2xpZW50LCBvbl91ZXZlbnQsIG1vbml0b3IpOworCisgIGdfb2JqZWN0X3VucmVmIChtb25pdG9y
LT5ndWRldl9jbGllbnQpOworCisgIGxpc3RfZnJlZSAobW9uaXRvci0+bGFzdF9kZXZpY2VzKTsK
KyAgbGlzdF9mcmVlIChtb25pdG9yLT5kZXZpY2Vfdm9sdW1lcyk7CisKKyAgaWYgKEdfT0JKRUNU
X0NMQVNTIChnX210cF92b2x1bWVfbW9uaXRvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSkKKyAg
ICAoKkdfT0JKRUNUX0NMQVNTIChnX210cF92b2x1bWVfbW9uaXRvcl9wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZSkgKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHTGlzdCAqCitnZXRfbW91bnRzIChHVm9s
dW1lTW9uaXRvciAqdm9sdW1lX21vbml0b3IpCit7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0
aWMgR0xpc3QgKgorZ2V0X3ZvbHVtZXMgKEdWb2x1bWVNb25pdG9yICp2b2x1bWVfbW9uaXRvcikK
K3sKKyAgR010cFZvbHVtZU1vbml0b3IgKm1vbml0b3I7CisgIEdMaXN0ICpsOworCisgIG1vbml0
b3IgPSBHX01UUF9WT0xVTUVfTU9OSVRPUiAodm9sdW1lX21vbml0b3IpOworCisgIEdfTE9DSyAo
dm1fbG9jayk7CisKKyAgbCA9IGdfbGlzdF9jb3B5IChtb25pdG9yLT5kZXZpY2Vfdm9sdW1lcyk7
CisgIGdfbGlzdF9mb3JlYWNoIChsLCAoR0Z1bmMpZ19vYmplY3RfcmVmLCBOVUxMKTsKKworICBH
X1VOTE9DSyAodm1fbG9jayk7CisKKyAgcmV0dXJuIGw7Cit9CisKK3N0YXRpYyBHTGlzdCAqCitn
ZXRfY29ubmVjdGVkX2RyaXZlcyAoR1ZvbHVtZU1vbml0b3IgKnZvbHVtZV9tb25pdG9yKQorewor
ICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIEdWb2x1bWUgKgorZ2V0X3ZvbHVtZV9mb3JfdXVp
ZCAoR1ZvbHVtZU1vbml0b3IgKnZvbHVtZV9tb25pdG9yLCBjb25zdCBjaGFyICp1dWlkKQorewor
ICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIEdNb3VudCAqCitnZXRfbW91bnRfZm9yX3V1aWQg
KEdWb2x1bWVNb25pdG9yICp2b2x1bWVfbW9uaXRvciwgY29uc3QgY2hhciAqdXVpZCkKK3sKKyAg
cmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitndWRldl9hZGRfZGV2aWNlIChHTXRwVm9s
dW1lTW9uaXRvciAqbW9uaXRvciwgR1VkZXZEZXZpY2UgKmRldmljZSwgZ2Jvb2xlYW4gZG9fZW1p
dCkKK3sKKyAgR010cFZvbHVtZSAqdm9sdW1lOworICBjb25zdCBjaGFyICp1c2JfYnVzX251bSwg
KnVzYl9kZXZpY2VfbnVtLCAqdXJpOworICBHRmlsZSAqYWN0aXZhdGlvbl9tb3VudF9yb290Owor
CisgIHVzYl9idXNfbnVtID0gZ191ZGV2X2RldmljZV9nZXRfcHJvcGVydHkgKGRldmljZSwgIkJV
U05VTSIpOworICBpZiAodXNiX2J1c19udW0gPT0gTlVMTCkgeworICAgIGdfd2FybmluZyAoImRl
dmljZSAlcyBoYXMgbm8gQlVTTlVNIHByb3BlcnR5LCBpZ25vcmluZyIsIGdfdWRldl9kZXZpY2Vf
Z2V0X2RldmljZV9maWxlIChkZXZpY2UpKTsKKyAgICByZXR1cm47CisgIH0KKworICB1c2JfZGV2
aWNlX251bSA9IGdfdWRldl9kZXZpY2VfZ2V0X3Byb3BlcnR5IChkZXZpY2UsICJERVZOVU0iKTsK
KyAgaWYgKHVzYl9kZXZpY2VfbnVtID09IE5VTEwpIHsKKyAgICBnX3dhcm5pbmcgKCJkZXZpY2Ug
JXMgaGFzIG5vIERFVk5VTSBwcm9wZXJ0eSwgaWdub3JpbmciLCBnX3VkZXZfZGV2aWNlX2dldF9k
ZXZpY2VfZmlsZSAoZGV2aWNlKSk7CisgICAgcmV0dXJuOworICB9CisKKyAgZ19kZWJ1ZyAoImd1
ZGV2X2FkZF9kZXZpY2U6IGRldmljZSAlcyAoYnVzOiAlaSwgZGV2aWNlOiAlaSkiLAorICAgICAg
ICAgICBnX3VkZXZfZGV2aWNlX2dldF9kZXZpY2VfZmlsZSAoZGV2aWNlKSwKKyAgICAgICAgICAg
dXNiX2J1c19udW0sIHVzYl9kZXZpY2VfbnVtKTsKKworICB1cmkgPSBnX3N0cmR1cF9wcmludGYg
KCJtdHA6Ly9bdXNiOiVzLCVzXSIsIHVzYl9idXNfbnVtLCB1c2JfZGV2aWNlX251bSk7CisgIGFj
dGl2YXRpb25fbW91bnRfcm9vdCA9IGdfZmlsZV9uZXdfZm9yX3VyaSAodXJpKTsKKyAgZ19mcmVl
ICh1cmkpOworCisgIHZvbHVtZSA9IGdfbXRwX3ZvbHVtZV9uZXcgKEdfVk9MVU1FX01PTklUT1Ig
KG1vbml0b3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1vbml0b3ItPmd1ZGV2X2NsaWVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWN0aXZhdGlvbl9tb3VudF9yb290KTsKKyAgaWYgKHZvbHVtZSAh
PSBOVUxMKSB7CisgICAgbW9uaXRvci0+ZGV2aWNlX3ZvbHVtZXMgPSBnX2xpc3RfcHJlcGVuZCAo
bW9uaXRvci0+ZGV2aWNlX3ZvbHVtZXMsIHZvbHVtZSk7CisgICAgaWYgKGRvX2VtaXQpCisgICAg
ICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKG1vbml0b3IsICJ2b2x1bWVfYWRkZWQiLCB2b2x1bWUp
OworICB9CisKKyAgaWYgKGFjdGl2YXRpb25fbW91bnRfcm9vdCAhPSBOVUxMKQorICAgIGdfb2Jq
ZWN0X3VucmVmIChhY3RpdmF0aW9uX21vdW50X3Jvb3QpOworfQorCitzdGF0aWMgdm9pZAorZ3Vk
ZXZfcmVtb3ZlX2RldmljZSAoR010cFZvbHVtZU1vbml0b3IgKm1vbml0b3IsIEdVZGV2RGV2aWNl
ICpkZXZpY2UpCit7CisgIEdMaXN0ICpsLCAqbGw7CisgIGNvbnN0IGdjaGFyKiBzeXNmc19wYXRo
OworCisgIHN5c2ZzX3BhdGggPSBnX3VkZXZfZGV2aWNlX2dldF9zeXNmc19wYXRoIChkZXZpY2Up
OworCisgIGdfZGVidWcgKCJndWRldl9yZW1vdmVfZGV2aWNlOiAlcyIsIGdfdWRldl9kZXZpY2Vf
Z2V0X2RldmljZV9maWxlIChkZXZpY2UpKTsKKworICBmb3IgKGwgPSBtb25pdG9yLT5kZXZpY2Vf
dm9sdW1lczsgbCAhPSBOVUxMOyBsID0gbGwpIHsKKyAgICBHTXRwVm9sdW1lICp2b2x1bWUgPSBH
X01UUF9WT0xVTUUgKGwtPmRhdGEpOworCisgICAgbGwgPSBsLT5uZXh0OworCisgICAgaWYgKGdf
bXRwX3ZvbHVtZV9oYXNfcGF0aCAodm9sdW1lLCBzeXNmc19wYXRoKSkgeworICAgICAgZ19kZWJ1
ZyAoImd1ZGV2X3JlbW92ZV9kZXZpY2U6IGZvdW5kIHZvbHVtZSAlcywgZGVsZXRpbmciLCBzeXNm
c19wYXRoKTsKKyAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAobW9uaXRvciwgInZvbHVtZV9y
ZW1vdmVkIiwgdm9sdW1lKTsKKyAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAodm9sdW1lLCAi
cmVtb3ZlZCIpOworICAgICAgZ19tdHBfdm9sdW1lX3JlbW92ZWQgKHZvbHVtZSk7CisgICAgICBt
b25pdG9yLT5kZXZpY2Vfdm9sdW1lcyA9IGdfbGlzdF9yZW1vdmUgKG1vbml0b3ItPmRldmljZV92
b2x1bWVzLCB2b2x1bWUpOworICAgICAgZ19vYmplY3RfdW5yZWYgKHZvbHVtZSk7CisgICAgfQor
ICB9Cit9CisKK3N0YXRpYyB2b2lkCitvbl91ZXZlbnQgKEdVZGV2Q2xpZW50ICpjbGllbnQsIGdj
aGFyICphY3Rpb24sIEdVZGV2RGV2aWNlICpkZXZpY2UsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sK
KyAgR010cFZvbHVtZU1vbml0b3IgKm1vbml0b3IgPSBHX01UUF9WT0xVTUVfTU9OSVRPUiAodXNl
cl9kYXRhKTsKKworICBnX2RlYnVnICgib25fdWV2ZW50OiBhY3Rpb249JXMsIGRldmljZT0lcyIs
IGFjdGlvbiwgZ191ZGV2X2RldmljZV9nZXRfZGV2aWNlX2ZpbGUoZGV2aWNlKSk7CisKKyAgLyog
ZmlsdGVyIG91dCB1bmludGVyZXN0aW5nIGV2ZW50cyAqLworICBpZiAoIWdfdWRldl9kZXZpY2Vf
aGFzX3Byb3BlcnR5IChkZXZpY2UsICJJRF9NVFBfREVWSUNFIikpCisgICAgeworICAgICAgZ19k
ZWJ1ZyAoIm9uX3VldmVudDogZGlzY2FyZGluZywgbm90IElEX01UUCIpOworICAgICAgcmV0dXJu
OworICAgIH0KKworICBpZiAoc3RyY21wIChhY3Rpb24sICJhZGQiKSA9PSAwKQorICAgICBndWRl
dl9hZGRfZGV2aWNlIChtb25pdG9yLCBkZXZpY2UsIFRSVUUpOyAKKyAgZWxzZSBpZiAoc3RyY21w
IChhY3Rpb24sICJyZW1vdmUiKSA9PSAwKQorICAgICBndWRldl9yZW1vdmVfZGV2aWNlIChtb25p
dG9yLCBkZXZpY2UpOyAKK30KKworc3RhdGljIHZvaWQKK2d1ZGV2X2NvbGRwbHVnX2RldmljZXMg
KEdNdHBWb2x1bWVNb25pdG9yICptb25pdG9yKQoreworICBHTGlzdCAqdXNiX2RldmljZXMsICps
OworCisgIHVzYl9kZXZpY2VzID0gZ191ZGV2X2NsaWVudF9xdWVyeV9ieV9zdWJzeXN0ZW0gKG1v
bml0b3ItPmd1ZGV2X2NsaWVudCwgInVzYiIpOworICBmb3IgKGwgPSB1c2JfZGV2aWNlczsgbCAh
PSBOVUxMOyBsID0gbC0+bmV4dCkgeworICAgIEdVZGV2RGV2aWNlICpkID0gbC0+ZGF0YTsKKyAg
ICBpZiAoZ191ZGV2X2RldmljZV9oYXNfcHJvcGVydHkgKGQsICJJRF9NVFBfREVWSUNFIikpCisg
ICAgICAgIGd1ZGV2X2FkZF9kZXZpY2UgKG1vbml0b3IsIGQsIEZBTFNFKTsKKyAgfQorfQorCitz
dGF0aWMgR09iamVjdCAqCitnX210cF92b2x1bWVfbW9uaXRvcl9jb25zdHJ1Y3RvciAoR1R5cGUg
ICAgICAgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGd1aW50ICAgICAgICAgICAgICAgICAgbl9jb25zdHJ1Y3RfcHJvcGVydGllcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHT2JqZWN0Q29uc3RydWN0UGFyYW0gKmNvbnN0cnVj
dF9wcm9wZXJ0aWVzKQoreworICBHT2JqZWN0ICpvYmplY3Q7CisgIEdNdHBWb2x1bWVNb25pdG9y
ICptb25pdG9yOworICBHTXRwVm9sdW1lTW9uaXRvckNsYXNzICprbGFzczsKKyAgR09iamVjdENs
YXNzICpwYXJlbnRfY2xhc3M7CisKKyAgR19MT0NLICh2bV9sb2NrKTsKKyAgaWYgKHRoZV92b2x1
bWVfbW9uaXRvciAhPSBOVUxMKSB7CisgICAgb2JqZWN0ID0gZ19vYmplY3RfcmVmICh0aGVfdm9s
dW1lX21vbml0b3IpOworICAgIEdfVU5MT0NLICh2bV9sb2NrKTsKKyAgICByZXR1cm4gb2JqZWN0
OworICB9CisgIEdfVU5MT0NLICh2bV9sb2NrKTsKKworICAvKmdfd2FybmluZyAoImNyZWF0aW5n
IHZtIHNpbmdsZXRvbiIpOyovCisKKyAgb2JqZWN0ID0gTlVMTDsKKworICAvKiBJbnZva2UgcGFy
ZW50IGNvbnN0cnVjdG9yLiAqLworICBrbGFzcyA9IEdfTVRQX1ZPTFVNRV9NT05JVE9SX0NMQVNT
IChnX3R5cGVfY2xhc3NfcGVlayAoR19UWVBFX01UUF9WT0xVTUVfTU9OSVRPUikpOworICBwYXJl
bnRfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFz
cykpOworICBvYmplY3QgPSBwYXJlbnRfY2xhc3MtPmNvbnN0cnVjdG9yICh0eXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2NvbnN0cnVjdF9wcm9wZXJ0aWVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RfcHJvcGVydGll
cyk7CisKKyAgbW9uaXRvciA9IEdfTVRQX1ZPTFVNRV9NT05JVE9SIChvYmplY3QpOworCisgIGNv
bnN0IGNoYXIgKnN1YnN5c3RlbXNbXSA9IHsgInVzYiIsIE5VTEwgfTsKKyAgbW9uaXRvci0+Z3Vk
ZXZfY2xpZW50ID0gZ191ZGV2X2NsaWVudF9uZXcgKHN1YnN5c3RlbXMpOworCisgIGdfc2lnbmFs
X2Nvbm5lY3QgKG1vbml0b3ItPmd1ZGV2X2NsaWVudCwgCisgICAgICAgICAgICAgICAgICAgICJ1
ZXZlbnQiLCBHX0NBTExCQUNLIChvbl91ZXZlbnQpLCAKKyAgICAgICAgICAgICAgICAgICAgbW9u
aXRvcik7CisKKyAgZ3VkZXZfY29sZHBsdWdfZGV2aWNlcyAobW9uaXRvcik7CisKKyAgR19MT0NL
ICh2bV9sb2NrKTsKKyAgdGhlX3ZvbHVtZV9tb25pdG9yID0gbW9uaXRvcjsKKyAgR19VTkxPQ0sg
KHZtX2xvY2spOworCisgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkCitnX210cF92
b2x1bWVfbW9uaXRvcl9pbml0IChHTXRwVm9sdW1lTW9uaXRvciAqbW9uaXRvcikKK3sKK30KKwor
c3RhdGljIGdib29sZWFuCitpc19zdXBwb3J0ZWQgKHZvaWQpCit7CisgIC8qIFRvZGF5J3MgTGlu
dXggZGVza3RvcHMgcHJldHR5IG11Y2ggbmVlZCB1ZGV2IHRvIGhhdmUgYW55dGhpbmcgd29ya2lu
Zywgc28KKyAgICogYXNzdW1lIGl0J3MgdGhlcmUgKi8KKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0
YXRpYyB2b2lkCitnX210cF92b2x1bWVfbW9uaXRvcl9jbGFzc19pbml0IChHTXRwVm9sdW1lTW9u
aXRvckNsYXNzICprbGFzcykKK3sKKyAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19P
QkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKyAgR1ZvbHVtZU1vbml0b3JDbGFzcyAqbW9uaXRvcl9jbGFz
cyA9IEdfVk9MVU1FX01PTklUT1JfQ0xBU1MgKGtsYXNzKTsKKworICBnb2JqZWN0X2NsYXNzLT5j
b25zdHJ1Y3RvciA9IGdfbXRwX3ZvbHVtZV9tb25pdG9yX2NvbnN0cnVjdG9yOworICBnb2JqZWN0
X2NsYXNzLT5maW5hbGl6ZSA9IGdfbXRwX3ZvbHVtZV9tb25pdG9yX2ZpbmFsaXplOworICBnb2Jq
ZWN0X2NsYXNzLT5kaXNwb3NlID0gZ19tdHBfdm9sdW1lX21vbml0b3JfZGlzcG9zZTsKKworICBt
b25pdG9yX2NsYXNzLT5nZXRfbW91bnRzID0gZ2V0X21vdW50czsKKyAgbW9uaXRvcl9jbGFzcy0+
Z2V0X3ZvbHVtZXMgPSBnZXRfdm9sdW1lczsKKyAgbW9uaXRvcl9jbGFzcy0+Z2V0X2Nvbm5lY3Rl
ZF9kcml2ZXMgPSBnZXRfY29ubmVjdGVkX2RyaXZlczsKKyAgbW9uaXRvcl9jbGFzcy0+Z2V0X3Zv
bHVtZV9mb3JfdXVpZCA9IGdldF92b2x1bWVfZm9yX3V1aWQ7CisgIG1vbml0b3JfY2xhc3MtPmdl
dF9tb3VudF9mb3JfdXVpZCA9IGdldF9tb3VudF9mb3JfdXVpZDsKKyAgbW9uaXRvcl9jbGFzcy0+
aXNfc3VwcG9ydGVkID0gaXNfc3VwcG9ydGVkOworfQorCisvKioKKyAqIGdfbXRwX3ZvbHVtZV9t
b25pdG9yX25ldzoKKyAqCisgKiBSZXR1cm5zOiAgYSBuZXcgI0dWb2x1bWVNb25pdG9yLgorICoq
LworR1ZvbHVtZU1vbml0b3IgKgorZ19tdHBfdm9sdW1lX21vbml0b3JfbmV3ICh2b2lkKQorewor
ICBHTXRwVm9sdW1lTW9uaXRvciAqbW9uaXRvcjsKKworICBtb25pdG9yID0gZ19vYmplY3RfbmV3
IChHX1RZUEVfTVRQX1ZPTFVNRV9NT05JVE9SLCBOVUxMKTsKKworICByZXR1cm4gR19WT0xVTUVf
TU9OSVRPUiAobW9uaXRvcik7Cit9CmRpZmYgLS1naXQgYS9tb25pdG9yL210cC9nbXRwdm9sdW1l
bW9uaXRvci5oIGIvbW9uaXRvci9tdHAvZ210cHZvbHVtZW1vbml0b3IuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTM2YTliCi0tLSAvZGV2L251bGwKKysrIGIvbW9uaXRv
ci9tdHAvZ210cHZvbHVtZW1vbml0b3IuaApAQCAtMCwwICsxLDUzIEBACisvKiBHSU8gLSBHTGli
IElucHV0LCBPdXRwdXQgYW5kIFN0cmVhbWluZyBMaWJyYXJ5CisgKiAgIFZvbHVtZSBNb25pdG9y
IGZvciBNVFAgQmFja2VuZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBQaGlsaXAgTGFuZ2Rh
bGUgPHBoaWxpcGxAb3ZlcnQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICogUHVibGlj
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisg
KiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUg
MzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0df
TVRQX1ZPTFVNRV9NT05JVE9SX0hfXworI2RlZmluZSBfX0dfTVRQX1ZPTFVNRV9NT05JVE9SX0hf
XworCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBHX1RZUEVfTVRQX1ZPTFVNRV9NT05JVE9SICAgICAgICAo
Z19tdHBfdm9sdW1lX21vbml0b3JfZ2V0X3R5cGUgKCkpCisjZGVmaW5lIEdfTVRQX1ZPTFVNRV9N
T05JVE9SKG8pICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG8pLCBHX1RZ
UEVfTVRQX1ZPTFVNRV9NT05JVE9SLCBHTXRwVm9sdW1lTW9uaXRvcikpCisjZGVmaW5lIEdfTVRQ
X1ZPTFVNRV9NT05JVE9SX0NMQVNTKGspICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoayks
IEdfVFlQRV9NVFBfVk9MVU1FX01PTklUT1IsIEdNdHBWb2x1bWVNb25pdG9yQ2xhc3MpKQorI2Rl
ZmluZSBHX0lTX01UUF9WT0xVTUVfTU9OSVRPUihvKSAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUgKChvKSwgR19UWVBFX01UUF9WT0xVTUVfTU9OSVRPUikpCisjZGVmaW5lIEdfSVNf
TVRQX1ZPTFVNRV9NT05JVE9SX0NMQVNTKGspIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGsp
LCBHX1RZUEVfTVRQX1ZPTFVNRV9NT05JVE9SKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0dNdHBWb2x1
bWVNb25pdG9yIEdNdHBWb2x1bWVNb25pdG9yOwordHlwZWRlZiBzdHJ1Y3QgX0dNdHBWb2x1bWVN
b25pdG9yQ2xhc3MgR010cFZvbHVtZU1vbml0b3JDbGFzczsKKworLyogRm9yd2FyZCBkZWZpbml0
aW9ucyAqLwordHlwZWRlZiBzdHJ1Y3QgX0dNdHBWb2x1bWUgR010cFZvbHVtZTsKKworc3RydWN0
IF9HTXRwVm9sdW1lTW9uaXRvckNsYXNzIHsKKyAgR1ZvbHVtZU1vbml0b3JDbGFzcyBwYXJlbnRf
Y2xhc3M7Cit9OworCitHVHlwZSBnX210cF92b2x1bWVfbW9uaXRvcl9nZXRfdHlwZSAodm9pZCkg
R19HTlVDX0NPTlNUOworCitHVm9sdW1lTW9uaXRvciAqZ19tdHBfdm9sdW1lX21vbml0b3JfbmV3
ICAgICAgICAgICh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBnX210cF92b2x1bWVfbW9uaXRvcl9m
b3JjZV91cGRhdGUgKEdNdHBWb2x1bWVNb25pdG9yICptb25pdG9yKTsKKworR19FTkRfREVDTFMK
KworI2VuZGlmIC8qIF9fR19NVFBfVk9MVU1FX01PTklUT1JfSF9fICovCmRpZmYgLS1naXQgYS9t
b25pdG9yL210cC9tdHAtdm9sdW1lLW1vbml0b3ItZGFlbW9uLmMgYi9tb25pdG9yL210cC9tdHAt
dm9sdW1lLW1vbml0b3ItZGFlbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjAxOTk0MAotLS0gL2Rldi9udWxsCisrKyBiL21vbml0b3IvbXRwL210cC12b2x1bWUtbW9u
aXRvci1kYWVtb24uYwpAQCAtMCwwICsxLDM2IEBACisvKiBHSU8gLSBHTGliIElucHV0LCBPdXRw
dXQgYW5kIFN0cmVhbWluZyBMaWJyYXJ5CisgKiAgIFZvbHVtZSBNb25pdG9yIGZvciBNVFAgQmFj
a2VuZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBQaGlsaXAgTGFuZ2RhbGUgPHBoaWxpcGxA
b3ZlcnQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICogQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisj
aW5jbHVkZSA8Z3Zmc3Byb3h5dm9sdW1lbW9uaXRvcmRhZW1vbi5oPgorCisjaW5jbHVkZSAiZ210
cHZvbHVtZW1vbml0b3IuaCIKKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQor
eworICBnX3Zmc19wcm94eV92b2x1bWVfbW9uaXRvcl9kYWVtb25faW5pdCAoKTsKKyAgcmV0dXJu
IGdfdmZzX3Byb3h5X3ZvbHVtZV9tb25pdG9yX2RhZW1vbl9tYWluIChhcmdjLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3YsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZy5ndGsuUHJpdmF0ZS5N
VFBWb2x1bWVNb25pdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHX1RZUEVfTVRQX1ZPTFVNRV9NT05JVE9SKTsKK30KZGlmZiAtLWdpdCBhL21v
bml0b3IvbXRwL210cC5tb25pdG9yIGIvbW9uaXRvci9tdHAvbXRwLm1vbml0b3IKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZiMGM3ZgotLS0gL2Rldi9udWxsCisrKyBiL21v
bml0b3IvbXRwL210cC5tb25pdG9yCkBAIC0wLDAgKzEsNCBAQAorW1JlbW90ZVZvbHVtZU1vbml0
b3JdCitOYW1lPUdQcm94eVZvbHVtZU1vbml0b3JNVFAKK0RCdXNOYW1lPW9yZy5ndGsuUHJpdmF0
ZS5NVFBWb2x1bWVNb25pdG9yCitJc05hdGl2ZT1mYWxzZQpkaWZmIC0tZ2l0IGEvbW9uaXRvci9t
dHAvb3JnLmd0ay5Qcml2YXRlLk1UUFZvbHVtZU1vbml0b3Iuc2VydmljZS5pbiBiL21vbml0b3Iv
bXRwL29yZy5ndGsuUHJpdmF0ZS5NVFBWb2x1bWVNb25pdG9yLnNlcnZpY2UuaW4KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkN2QxOQotLS0gL2Rldi9udWxsCisrKyBiL21v
bml0b3IvbXRwL29yZy5ndGsuUHJpdmF0ZS5NVFBWb2x1bWVNb25pdG9yLnNlcnZpY2UuaW4KQEAg
LTAsMCArMSwzIEBACitbRC1CVVMgU2VydmljZV0KK05hbWU9b3JnLmd0ay5Qcml2YXRlLk1UUFZv
bHVtZU1vbml0b3IKK0V4ZWM9QGxpYmV4ZWNkaXJAL2d2ZnMtbXRwLXZvbHVtZS1tb25pdG9yCmRp
ZmYgLS1naXQgYS9wcm9ncmFtcy9ndmZzLWxzLmMgYi9wcm9ncmFtcy9ndmZzLWxzLmMKaW5kZXgg
YjE1Y2Y5MS4uMmM0NTI3MyAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvZ3Zmcy1scy5jCisrKyBiL3By
b2dyYW1zL2d2ZnMtbHMuYwpAQCAtNzgsNyArNzgsNyBAQCB0eXBlX3RvX3N0cmluZyAoR0ZpbGVU
eXBlIHR5cGUpCiBzdGF0aWMgdm9pZAogc2hvd19pbmZvIChHRmlsZUluZm8gKmluZm8pCiB7Ci0g
IGNvbnN0IGNoYXIgKm5hbWUsICp0eXBlOworICBjb25zdCBjaGFyICpuYW1lLCAqZGlzcGxheV9u
YW1lLCAqdHlwZTsKICAgZ29mZnNldCBzaXplOwogICBjaGFyICoqYXR0cmlidXRlczsKICAgaW50
IGk7CkBAIC05MSwxMiArOTEsMTYgQEAgc2hvd19pbmZvIChHRmlsZUluZm8gKmluZm8pCiAgIGlm
IChuYW1lID09IE5VTEwpCiAgICAgbmFtZSA9ICIiOwogCisgIGRpc3BsYXlfbmFtZSA9IGdfZmls
ZV9pbmZvX2dldF9kaXNwbGF5X25hbWUgKGluZm8pOworICBpZiAoZGlzcGxheV9uYW1lID09IE5V
TEwpCisgICAgZGlzcGxheV9uYW1lID0gbmFtZTsKKwogICBzaXplID0gZ19maWxlX2luZm9fZ2V0
X3NpemUgKGluZm8pOwogICB0eXBlID0gdHlwZV90b19zdHJpbmcgKGdfZmlsZV9pbmZvX2dldF9m
aWxlX3R5cGUgKGluZm8pKTsKICAgaWYgKHNob3dfbG9uZykKLSAgICBnX3ByaW50ICgiJXNcdCUi
R19HVUlOVDY0X0ZPUk1BVCJcdCglcykiLCBuYW1lLCAoZ3VpbnQ2NClzaXplLCB0eXBlKTsKKyAg
ICBnX3ByaW50ICgiJXNcdCVzXHRcdFx0JSJHX0dVSU5UNjRfRk9STUFUIlx0KCVzKSIsIG5hbWUs
IGRpc3BsYXlfbmFtZSwgKGd1aW50NjQpc2l6ZSwgdHlwZSk7CiAgIGVsc2UKLSAgICBnX3ByaW50
ICgiJXMiLCBuYW1lKTsKKyAgICBnX3ByaW50ICgiJXMiLCBkaXNwbGF5X25hbWUpOwogCiAgIGZp
cnN0X2F0dHIgPSBUUlVFOwogICBhdHRyaWJ1dGVzID0gZ19maWxlX2luZm9fbGlzdF9hdHRyaWJ1
dGVzIChpbmZvLCBOVUxMKTsKQEAgLTEwNiw2ICsxMTAsNyBAQCBzaG93X2luZm8gKEdGaWxlSW5m
byAqaW5mbykKIAogICAgICAgaWYgKCFzaG93X2xvbmcgfHwKIAkgIHN0cmNtcCAoYXR0cmlidXRl
c1tpXSwgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9OQU1FKSA9PSAwIHx8CisJICBzdHJjbXAg
KGF0dHJpYnV0ZXNbaV0sIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfRElTUExBWV9OQU1FKSA9
PSAwIHx8CiAJICBzdHJjbXAgKGF0dHJpYnV0ZXNbaV0sIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRB
UkRfU0laRSkgPT0gMCB8fAogCSAgc3RyY21wIChhdHRyaWJ1dGVzW2ldLCBHX0ZJTEVfQVRUUklC
VVRFX1NUQU5EQVJEX1RZUEUpID09IDAgfHwKIAkgIHN0cmNtcCAoYXR0cmlidXRlc1tpXSwgR19G
SUxFX0FUVFJJQlVURV9TVEFOREFSRF9JU19ISURERU4pID09IDApCkBAIC00MjYsNiArNDMxLDcg
QEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKICAgICB9CiAKICAgYXR0cmlidXRlcyA9
IGdfc3RyY29uY2F0IChHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX05BTUUgIiwiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9ESVNQTEFZX05B
TUUgIiwiCiAJCQkgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9UWVBFICIsIgogCQkJICAg
IEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSAiLCIKIAkJCSAgICBHX0ZJTEVfQVRUUklC
VVRFX1NUQU5EQVJEX0lTX0hJRERFTiwKZGlmZiAtLWdpdCBhL2d2ZnMvcG8vUE9URklMRVMuaW4g
Yi9ndmZzL3BvL1BPVEZJTEVTLmluCmluZGV4IDA3ZTQ3OGUuLjVlMmY1NjcgMTAwNjQ0Ci0tLSBh
L2d2ZnMvcG8vUE9URklMRVMuaW4KKysrIGIvZ3Zmcy9wby9QT1RGSUxFUy5pbgpAQCAtMzIsNiAr
MzIsNyBAQCBkYWVtb24vZ3Zmc2JhY2tlbmRmdHAuYwogZGFlbW9uL2d2ZnNiYWNrZW5kZ3Bob3Rv
Mi5jCiBkYWVtb24vZ3Zmc2JhY2tlbmRodHRwLmMKIGRhZW1vbi9ndmZzYmFja2VuZGxvY2FsdGVz
dC5jCitkYWVtb24vZ3Zmc2JhY2tlbmRtdHAuYwogZGFlbW9uL2d2ZnNiYWNrZW5kbmV0d29yay5j
CiBkYWVtb24vZ3Zmc2JhY2tlbmRvYmV4ZnRwLmMKIGRhZW1vbi9ndmZzYmFja2VuZHJlY2VudC5j
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>