[PATCH v9 12/19] xen: add a hook to perform AP startup
QVAgc3RhcnR1cCBvbiBQVkggZm9sbG93cyB0aGUgUFYgbWV0aG9kLCBzbyB3ZSBuZWVkIHRvIGFk
ZCBhIGhvb2sgaW4Kb3JkZXIgdG8gZGl2ZXJnZSBmcm9tIGJhcmUgbWV0YWwuCi0tLQogc3lzL2Ft
ZDY0L2FtZDY0L21wX21hY2hkZXAuYyB8ICAgMTQgKysrLS0tCiBzeXMvYW1kNjQvaW5jbHVkZS9j
cHUuaCAgICAgIHwgICAgMSArCiBzeXMvYW1kNjQvaW5jbHVkZS9zbXAuaCAgICAgIHwgICAgMSAr
CiBzeXMveDg2L3hlbi9odm0uYyAgICAgICAgICAgIHwgICAxMiArKysrKy0KIHN5cy94ODYveGVu
L3B2LmMgICAgICAgICAgICAgfCAgIDg1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKwogc3lzL3hlbi9wdi5oICAgICAgICAgICAgICAgICB8ICAgMzIgKysrKysrKysr
KysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMzcgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMo
LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXMveGVuL3B2LmgKCmRpZmYgLS1naXQgYS9zeXMvYW1k
NjQvYW1kNjQvbXBfbWFjaGRlcC5jIGIvc3lzL2FtZDY0L2FtZDY0L21wX21hY2hkZXAuYwppbmRl
eCA0ZWY0YjNkLi4wNzM4YTM3IDEwMDY0NAotLS0gYS9zeXMvYW1kNjQvYW1kNjQvbXBfbWFjaGRl
cC5jCisrKyBiL3N5cy9hbWQ2NC9hbWQ2NC9tcF9tYWNoZGVwLmMKQEAgLTkwLDcgKzkwLDcgQEAg
ZXh0ZXJuICBzdHJ1Y3QgcGNwdSBfX3BjcHVbXTsKIAogLyogQVAgdXNlcyB0aGlzIGR1cmluZyBi
b290c3RyYXAuICBEbyBub3Qgc3RhdGljaXplLiAgKi8KIGNoYXIgKmJvb3RTVEs7Ci1zdGF0aWMg
aW50IGJvb3RBUDsKK2ludCBib290QVA7CiAKIC8qIEZyZWUgdGhlc2UgYWZ0ZXIgdXNlICovCiB2
b2lkICpib290c3RhY2tzW01BWENQVV07CkBAIC0xMjQsNyArMTI0LDggQEAgc3RhdGljIHVfbG9u
ZyAqaXBpX2hhcmRjbG9ja19jb3VudHNbTUFYQ1BVXTsKIAogLyogRGVmYXVsdCBjcHVfb3BzIGlt
cGxlbWVudGF0aW9uLiAqLwogc3RydWN0IGNwdV9vcHMgY3B1X29wcyA9IHsKLQkuaXBpX3ZlY3Rv
cmVkID0gbGFwaWNfaXBpX3ZlY3RvcmVkCisJLmlwaV92ZWN0b3JlZCA9IGxhcGljX2lwaV92ZWN0
b3JlZCwKKwkuc3RhcnRfYWxsX2FwcyA9IG5hdGl2ZV9zdGFydF9hbGxfYXBzLAogfTsKIAogZXh0
ZXJuIGludGhhbmRfdCBJRFRWRUMoZmFzdF9zeXNjYWxsKSwgSURUVkVDKGZhc3Rfc3lzY2FsbDMy
KTsKQEAgLTEzOCw3ICsxMzksNyBAQCBleHRlcm4gaW50IHBtYXBfcGNpZF9lbmFibGVkOwogc3Rh
dGljIHZvbGF0aWxlIGNwdXNldF90IGlwaV9ubWlfcGVuZGluZzsKIAogLyogdXNlZCB0byBob2xk
IHRoZSBBUCdzIHVudGlsIHdlIGFyZSByZWFkeSB0byByZWxlYXNlIHRoZW0gKi8KLXN0YXRpYyBz
dHJ1Y3QgbXR4IGFwX2Jvb3RfbXR4Oworc3RydWN0IG10eCBhcF9ib290X210eDsKIAogLyogU2V0
IHRvIDEgb25jZSB3ZSdyZSByZWFkeSB0byBsZXQgdGhlIEFQcyBvdXQgb2YgdGhlIHBlbi4gKi8K
IHN0YXRpYyB2b2xhdGlsZSBpbnQgYXBzX3JlYWR5ID0gMDsKQEAgLTE2NSw3ICsxNjYsNiBAQCBz
dGF0aWMgaW50IGNwdV9jb3JlczsJCQkvKiBjb3JlcyBwZXIgcGFja2FnZSAqLwogCiBzdGF0aWMg
dm9pZAlhc3NpZ25fY3B1X2lkcyh2b2lkKTsKIHN0YXRpYyB2b2lkCXNldF9pbnRlcnJ1cHRfYXBp
Y19pZHModm9pZCk7Ci1zdGF0aWMgaW50CXN0YXJ0X2FsbF9hcHModm9pZCk7CiBzdGF0aWMgaW50
CXN0YXJ0X2FwKGludCBhcGljX2lkKTsKIHN0YXRpYyB2b2lkCXJlbGVhc2VfYXBzKHZvaWQgKmR1
bW15KTsKIApAQCAtNTY5LDcgKzU2OSw3IEBAIGNwdV9tcF9zdGFydCh2b2lkKQogCWFzc2lnbl9j
cHVfaWRzKCk7CiAKIAkvKiBTdGFydCBlYWNoIEFwcGxpY2F0aW9uIFByb2Nlc3NvciAqLwotCXN0
YXJ0X2FsbF9hcHMoKTsKKwljcHVfb3BzLnN0YXJ0X2FsbF9hcHMoKTsKIAogCXNldF9pbnRlcnJ1
cHRfYXBpY19pZHMoKTsKIH0KQEAgLTkwOCw4ICs5MDgsOCBAQCBhc3NpZ25fY3B1X2lkcyh2b2lk
KQogLyoKICAqIHN0YXJ0IGVhY2ggQVAgaW4gb3VyIGxpc3QKICAqLwotc3RhdGljIGludAotc3Rh
cnRfYWxsX2Fwcyh2b2lkKQoraW50CituYXRpdmVfc3RhcnRfYWxsX2Fwcyh2b2lkKQogewogCXZt
X29mZnNldF90IHZhID0gYm9vdF9hZGRyZXNzICsgS0VSTkJBU0U7CiAJdV9pbnQ2NF90ICpwdDQs
ICpwdDMsICpwdDI7CmRpZmYgLS1naXQgYS9zeXMvYW1kNjQvaW5jbHVkZS9jcHUuaCBiL3N5cy9h
bWQ2NC9pbmNsdWRlL2NwdS5oCmluZGV4IDNkOWZmNTMxLi5lZDlmMWRiIDEwMDY0NAotLS0gYS9z
eXMvYW1kNjQvaW5jbHVkZS9jcHUuaAorKysgYi9zeXMvYW1kNjQvaW5jbHVkZS9jcHUuaApAQCAt
NjQsNiArNjQsNyBAQCBzdHJ1Y3QgY3B1X29wcyB7CiAJdm9pZCAoKmNwdV9pbml0KSh2b2lkKTsK
IAl2b2lkICgqY3B1X3Jlc3VtZSkodm9pZCk7CiAJdm9pZCAoKmlwaV92ZWN0b3JlZCkodV9pbnQs
IGludCk7CisJaW50ICAoKnN0YXJ0X2FsbF9hcHMpKHZvaWQpOwogfTsKIAogZXh0ZXJuIHN0cnVj
dAljcHVfb3BzIGNwdV9vcHM7CmRpZmYgLS1naXQgYS9zeXMvYW1kNjQvaW5jbHVkZS9zbXAuaCBi
L3N5cy9hbWQ2NC9pbmNsdWRlL3NtcC5oCmluZGV4IGQxYjM2NmIuLjE1YmM4MjMgMTAwNjQ0Ci0t
LSBhL3N5cy9hbWQ2NC9pbmNsdWRlL3NtcC5oCisrKyBiL3N5cy9hbWQ2NC9pbmNsdWRlL3NtcC5o
CkBAIC03OSw2ICs3OSw3IEBAIHZvaWQJc21wX21hc2tlZF9pbnZscGdfcmFuZ2UoY3B1c2V0X3Qg
bWFzaywgc3RydWN0IHBtYXAgKnBtYXAsCiAJICAgIHZtX29mZnNldF90IHN0YXJ0dmEsIHZtX29m
ZnNldF90IGVuZHZhKTsKIHZvaWQJc21wX2ludmx0bGIoc3RydWN0IHBtYXAgKnBtYXApOwogdm9p
ZAlzbXBfbWFza2VkX2ludmx0bGIoY3B1c2V0X3QgbWFzaywgc3RydWN0IHBtYXAgKnBtYXApOwor
aW50CW5hdGl2ZV9zdGFydF9hbGxfYXBzKHZvaWQpOwogCiAjZW5kaWYgLyogIUxPQ09SRSAqLwog
I2VuZGlmIC8qIFNNUCAqLwpkaWZmIC0tZ2l0IGEvc3lzL3g4Ni94ZW4vaHZtLmMgYi9zeXMveDg2
L3hlbi9odm0uYwppbmRleCBmYjFlZDc5Li40OWNhYWNmIDEwMDY0NAotLS0gYS9zeXMveDg2L3hl
bi9odm0uYworKysgYi9zeXMveDg2L3hlbi9odm0uYwpAQCAtNTMsNiArNTMsOSBAQCBfX0ZCU0RJ
RCgiJEZyZWVCU0QkIik7CiAjaW5jbHVkZSA8eGVuL2h5cGVydmlzb3IuaD4KICNpbmNsdWRlIDx4
ZW4vaHZtLmg+CiAjaW5jbHVkZSA8eGVuL3hlbl9pbnRyLmg+CisjaWZkZWYgX19hbWQ2NF9fCisj
aW5jbHVkZSA8eGVuL3B2Lmg+CisjZW5kaWYKIAogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvaHZt
L3BhcmFtcy5oPgogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvdmNwdS5oPgpAQCAtMTE5LDcgKzEy
MiwxMCBAQCBlbnVtIHhlbl9kb21haW5fdHlwZSB4ZW5fZG9tYWluX3R5cGUgPSBYRU5fTkFUSVZF
Owogc3RydWN0IGNwdV9vcHMgeGVuX2h2bV9jcHVfb3BzID0gewogCS5pcGlfdmVjdG9yZWQJPSBs
YXBpY19pcGlfdmVjdG9yZWQsCiAJLmNwdV9pbml0CT0geGVuX2h2bV9jcHVfaW5pdCwKLQkuY3B1
X3Jlc3VtZQk9IHhlbl9odm1fY3B1X3Jlc3VtZQorCS5jcHVfcmVzdW1lCT0geGVuX2h2bV9jcHVf
cmVzdW1lLAorI2lmZGVmIF9fYW1kNjRfXworCS5zdGFydF9hbGxfYXBzID0gbmF0aXZlX3N0YXJ0
X2FsbF9hcHMsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBNQUxMT0NfREVGSU5FKE1fWEVOSFZNLCAi
eGVuX2h2bSIsICJYZW4gSFZNIFBWIFN1cHBvcnQiKTsKQEAgLTY5OCw2ICs3MDQsMTAgQEAgeGVu
X2h2bV9pbml0KGVudW0geGVuX2h2bV9pbml0X3R5cGUgaW5pdF90eXBlKQogCQlzZXR1cF94ZW5f
ZmVhdHVyZXMoKTsKIAkJY3B1X29wcyA9IHhlbl9odm1fY3B1X29wczsKICAJCXZtX2d1ZXN0ID0g
Vk1fR1VFU1RfWEVOOworI2lmZGVmIF9fYW1kNjRfXworCQlpZiAoeGVuX3B2X2RvbWFpbigpKQor
CQkJY3B1X29wcy5zdGFydF9hbGxfYXBzID0geGVuX3B2X3N0YXJ0X2FsbF9hcHM7CisjZW5kaWYK
IAkJYnJlYWs7CiAJY2FzZSBYRU5fSFZNX0lOSVRfUkVTVU1FOgogCQlpZiAoZXJyb3IgIT0gMCkK
ZGlmZiAtLWdpdCBhL3N5cy94ODYveGVuL3B2LmMgYi9zeXMveDg2L3hlbi9wdi5jCmluZGV4IGQx
MWJjMWEuLjIyZmQ2YTYgMTAwNjQ0Ci0tLSBhL3N5cy94ODYveGVuL3B2LmMKKysrIGIvc3lzL3g4
Ni94ZW4vcHYuYwpAQCAtMzQsOCArMzQsMTEgQEAgX19GQlNESUQoIiRGcmVlQlNEJCIpOwogI2lu
Y2x1ZGUgPHN5cy9rZXJuZWwuaD4KICNpbmNsdWRlIDxzeXMvcmVib290Lmg+CiAjaW5jbHVkZSA8
c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgogI2luY2x1ZGUgPHN5cy9sb2Nr
Lmg+CiAjaW5jbHVkZSA8c3lzL3J3bG9jay5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2lu
Y2x1ZGUgPHN5cy9zbXAuaD4KIAogI2luY2x1ZGUgPHZtL3ZtLmg+CiAjaW5jbHVkZSA8dm0vdm1f
ZXh0ZXJuLmg+CkBAIC00OSw5ICs1MiwxMyBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAjaW5j
bHVkZSA8bWFjaGluZS9zeXNhcmNoLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9jbG9jay5oPgogI2lu
Y2x1ZGUgPG1hY2hpbmUvcGMvYmlvcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvc21wLmg+CiAKICNp
bmNsdWRlIDx4ZW4veGVuLW9zLmg+CiAjaW5jbHVkZSA8eGVuL2h5cGVydmlzb3IuaD4KKyNpbmNs
dWRlIDx4ZW4vcHYuaD4KKworI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvdmNwdS5oPgogCiAvKiBO
YXRpdmUgaW5pdGlhbCBmdW5jdGlvbiAqLwogZXh0ZXJuIHVfaW50NjRfdCBoYW1tZXJfdGltZSh1
X2ludDY0X3QsIHVfaW50NjRfdCk7CkBAIC02NSw2ICs3MiwxNSBAQCBzdGF0aWMgY2FkZHJfdCB4
ZW5fcHZfcGFyc2VfcHJlbG9hZF9kYXRhKHVfaW50NjRfdCk7CiBzdGF0aWMgdm9pZCB4ZW5fcHZf
cGFyc2VfbWVtbWFwKGNhZGRyX3QsIHZtX3BhZGRyX3QgKiwgaW50ICopOwogCiBzdGF0aWMgdm9p
ZCB4ZW5fcHZfc2V0X2luaXRfb3BzKHZvaWQpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEV4dGVybiBEZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8q
IFZhcmlhYmxlcyB1c2VkIGJ5IGFtZDY0IG1wX21hY2hkZXAgdG8gc3RhcnQgQVBzICovCitleHRl
cm4gc3RydWN0IG10eCBhcF9ib290X210eDsKK2V4dGVybiB2b2lkICpib290c3RhY2tzW107Citl
eHRlcm4gY2hhciAqZG91YmxlZmF1bHRfc3RhY2s7CitleHRlcm4gY2hhciAqbm1pX3N0YWNrOwor
ZXh0ZXJuIHZvaWQgKmRwY3B1OworZXh0ZXJuIGludCBib290QVA7CitleHRlcm4gY2hhciAqYm9v
dFNUSzsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWwgRGF0YSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFhlbiBpbml0X29wcyBpbXBsZW1l
bnRhdGlvbi4gKi8KQEAgLTE2OCw2ICsxODQsNzUgQEAgaGFtbWVyX3RpbWVfeGVuKHN0YXJ0X2lu
Zm9fdCAqc2ksIHVfaW50NjRfdCB4ZW5zdGFjaykKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBQViBzcGVjaWZpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KKworc3RhdGljIGludAorc3RhcnRfeGVuX2FwKGludCBjcHUpCit7CisJc3RydWN0IHZjcHVf
Z3Vlc3RfY29udGV4dCAqY3R4dDsKKwlpbnQgbXMsIGNwdXMgPSBtcF9uYXBzOworCisJY3R4dCA9
IG1hbGxvYyhzaXplb2YoKmN0eHQpLCBNX1RFTVAsIE1fTk9XQUlUIHwgTV9aRVJPKTsKKwlpZiAo
Y3R4dCA9PSBOVUxMKQorCQlwYW5pYygidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSIpOworCisJ
Y3R4dC0+ZmxhZ3MgPSBWR0NGX0lOX0tFUk5FTDsKKwljdHh0LT51c2VyX3JlZ3MucmlwID0gKHVu
c2lnbmVkIGxvbmcpIGluaXRfc2Vjb25kYXJ5OworCWN0eHQtPnVzZXJfcmVncy5yc3AgPSAodW5z
aWduZWQgbG9uZykgYm9vdFNUSzsKKworCS8qIFNldCB0aGUgQVAgdG8gdXNlIHRoZSBzYW1lIHBh
Z2UgdGFibGVzICovCisJY3R4dC0+Y3RybHJlZ1szXSA9IEtQTUw0cGh5czsKKworCWlmIChIWVBF
UlZJU09SX3ZjcHVfb3AoVkNQVU9QX2luaXRpYWxpc2UsIGNwdSwgY3R4dCkpCisJCXBhbmljKCJ1
bmFibGUgdG8gaW5pdGlhbGl6ZSBBUCMlZFxuIiwgY3B1KTsKKworCWZyZWUoY3R4dCwgTV9URU1Q
KTsKKworCS8qIExhdW5jaCB0aGUgdkNQVSAqLworCWlmIChIWVBFUlZJU09SX3ZjcHVfb3AoVkNQ
VU9QX3VwLCBjcHUsIE5VTEwpKQorCQlwYW5pYygidW5hYmxlIHRvIHN0YXJ0IEFQIyVkXG4iLCBj
cHUpOworCisJLyogV2FpdCB1cCB0byA1IHNlY29uZHMgZm9yIGl0IHRvIHN0YXJ0LiAqLworCWZv
ciAobXMgPSAwOyBtcyA8IDUwMDA7IG1zKyspIHsKKwkJaWYgKG1wX25hcHMgPiBjcHVzKQorCQkJ
cmV0dXJuICgxKTsJLyogcmV0dXJuIFNVQ0NFU1MgKi8KKwkJREVMQVkoMTAwMCk7CisJfQorCisJ
cmV0dXJuICgwKTsKK30KKworaW50Cit4ZW5fcHZfc3RhcnRfYWxsX2Fwcyh2b2lkKQoreworCWlu
dCBjcHU7CisKKwltdHhfaW5pdCgmYXBfYm9vdF9tdHgsICJhcCBib290IiwgTlVMTCwgTVRYX1NQ
SU4pOworCisJZm9yIChjcHUgPSAxOyBjcHUgPCBtcF9uY3B1czsgY3B1KyspIHsKKworCQkvKiBh
bGxvY2F0ZSBhbmQgc2V0IHVwIGFuIGlkbGUgc3RhY2sgZGF0YSBwYWdlICovCisJCWJvb3RzdGFj
a3NbY3B1XSA9ICh2b2lkICopa21lbV9tYWxsb2Moa2VybmVsX2FyZW5hLAorCQkgICAgS1NUQUNL
X1BBR0VTICogUEFHRV9TSVpFLCBNX1dBSVRPSyB8IE1fWkVSTyk7CisJCWRvdWJsZWZhdWx0X3N0
YWNrID0gKGNoYXIgKilrbWVtX21hbGxvYyhrZXJuZWxfYXJlbmEsCisJCSAgICBQQUdFX1NJWkUs
IE1fV0FJVE9LIHwgTV9aRVJPKTsKKwkJbm1pX3N0YWNrID0gKGNoYXIgKilrbWVtX21hbGxvYyhr
ZXJuZWxfYXJlbmEsIFBBR0VfU0laRSwKKwkJICAgIE1fV0FJVE9LIHwgTV9aRVJPKTsKKwkJZHBj
cHUgPSAodm9pZCAqKWttZW1fbWFsbG9jKGtlcm5lbF9hcmVuYSwgRFBDUFVfU0laRSwKKwkJICAg
IE1fV0FJVE9LIHwgTV9aRVJPKTsKKworCQlib290U1RLID0gKGNoYXIgKilib290c3RhY2tzW2Nw
dV0gKyBLU1RBQ0tfUEFHRVMgKiBQQUdFX1NJWkUgLSA4OworCQlib290QVAgPSBjcHU7CisKKwkJ
LyogYXR0ZW1wdCB0byBzdGFydCB0aGUgQXBwbGljYXRpb24gUHJvY2Vzc29yICovCisJCWlmICgh
c3RhcnRfeGVuX2FwKGNwdSkpCisJCQlwYW5pYygiQVAgIyVkIGZhaWxlZCB0byBzdGFydCEiLCBj
cHUpOworCisJCUNQVV9TRVQoY3B1LCAmYWxsX2NwdXMpOwkvKiByZWNvcmQgQVAgaW4gQ1BVIG1h
cCAqLworCX0KKworCXJldHVybiAobXBfbmFwcyk7Cit9CisKIC8qCiAgKiBGdW5jdGlvbnMgdG8g
Y29udmVydCB0aGUgImV4dHJhIiBwYXJhbWV0ZXJzIHBhc3NlZCBieSBYZW4KICAqIGludG8gRnJl
ZUJTRCBib290IG9wdGlvbnMgKGZyb20gdGhlIGkzODYgWGVuIHBvcnQpLgpkaWZmIC0tZ2l0IGEv
c3lzL3hlbi9wdi5oIGIvc3lzL3hlbi9wdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjQ1Yjc0NzMKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMveGVuL3B2LmgKQEAgLTAsMCAr
MSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBSb2dlciBQYXUgTW9ubsOpIDxyb2dl
ci5wYXVAY2l0cml4LmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRP
UlMgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK
KyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYJX19Y
RU5fUFZfSF9fCisjZGVmaW5lCV9fWEVOX1BWX0hfXworCitpbnQJeGVuX3B2X3N0YXJ0X2FsbF9h
cHModm9pZCk7CisKKyNlbmRpZgkvKiBfX1hFTl9QVl9IX18gKi8KLS0gCjEuNy43LjUgKEFwcGxl
IEdpdC0yNikKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CmZyZWVic2QtY3VycmVudEBmcmVlYnNkLm9yZyBtYWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmZy
ZWVic2Qub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWJzZC1jdXJyZW50ClRvIHVuc3Vic2NyaWJl
LCBzZW5kIGFueSBtYWlsIHRvICJmcmVlYnNkLWN1cnJlbnQtdW5zdWJzY3JpYmVAZnJlZWJzZC5v
cmci