From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jordan Crouse Subject: [PATCH 09/10] drm/msm/a6xx: Add a6xx gpu state Date: Fri, 2 Nov 2018 09:25:25 -0600 Message-ID: <20181102152526.23854-10-jcrouse@codeaurora.org> References: <20181102152526.23854-1-jcrouse@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181102152526.23854-1-jcrouse@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: freedreno@lists.freedesktop.org Cc: linux-arm-msm@vger.kernel.org, hoegsberg@chromium.org, smasetty@codeaurora.org, dri-devel@lists.freedesktop.org List-Id: linux-arm-msm@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIGdhdGhlcmluZyBhbmQgZHVtcGluZyB0aGUgYTZ4eCBHUFUgc3RhdGUg aW5jbHVkaW5nCnJlZ2lzdGVycywgR01VIHJlZ2lzdGVycywgaW5kZXhlZCByZWdpc3RlcnMsIHNo YWRlciBibG9ja3MsCmNvbnRleHQgY2x1c3RlcnMgYW5kIGRlYnVnYnVzLgoKdjI6IEZpeCBidWdz IGRpc2NvdmVyZWQgYnkgU2hhcmF0IE1hc2V0dHkKClNpZ25lZC1vZmYtYnk6IEpvcmRhbiBDcm91 c2UgPGpjcm91c2VAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9NYWtl ZmlsZSAgICAgICAgICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8v YTZ4eF9nbXUuYyAgICAgICB8ICAgMjUgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2 eHhfZ211LmggICAgICAgfCAgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhf Z3B1LmMgICAgICAgfCAgIDM5ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dw dS5oICAgICAgIHwgICAgOCArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9z dGF0ZS5jIHwgMTE1OSArKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Fk cmVuby9hNnh4X2dwdV9zdGF0ZS5oIHwgIDQzMCArKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDE2 MjcgaW5zZXJ0aW9ucygrKSwgMzggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHVfc3RhdGUuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmgKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21zbS9N YWtlZmlsZQppbmRleCA1ZGUyZDhmMGE3ZTUuLmZhYmMxN2JmMWE1OCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2Vm aWxlCkBAIC0xNCw2ICsxNCw3IEBAIG1zbS15IDo9IFwKIAlhZHJlbm8vYTZ4eF9ncHUubyBcCiAJ YWRyZW5vL2E2eHhfZ211Lm8gXAogCWFkcmVuby9hNnh4X2hmaS5vIFwKKwlhZHJlbm8vYTZ4eF9n cHVfc3RhdGUubyBcCiAJaGRtaS9oZG1pLm8gXAogCWhkbWkvaGRtaV9hdWRpby5vIFwKIAloZG1p L2hkbWlfYnJpZGdlLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8v YTZ4eF9nbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ211LmMKaW5kZXgg ZTgxNjk0N2FjN2Q4Li5jNThlOTUzZmVmYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vYWRyZW5vL2E2eHhfZ211LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4 eF9nbXUuYwpAQCAtNTEsMTAgKzUxLDMxIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhNnh4X2hmaV9p cnEoaW50IGlycSwgdm9pZCAqZGF0YSkKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK2Jvb2wg YTZ4eF9nbXVfc3B0cHJhY19pc19vbihzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwl1MzIgdmFs OworCisJLyogVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gZ3B1IHN0YXRlIGNvZGUgc28gbWFrZSBz dXJlIEdNVSBpcyB2YWxpZCAqLworCWlmIChJU19FUlJfT1JfTlVMTChnbXUtPm1taW8pKQorCQly ZXR1cm4gZmFsc2U7CisKKwl2YWwgPSBnbXVfcmVhZChnbXUsIFJFR19BNlhYX0dNVV9TUFRQUkFD X1BXUl9DTEtfU1RBVFVTKTsKKworCXJldHVybiAhKHZhbCAmCisJCShBNlhYX0dNVV9TUFRQUkFD X1BXUl9DTEtfU1RBVFVTX1NQVFBSQUNfR0RTQ19QT1dFUl9PRkYgfAorCQlBNlhYX0dNVV9TUFRQ UkFDX1BXUl9DTEtfU1RBVFVTX1NQX0NMT0NLX09GRikpOworfQorCiAvKiBDaGVjayB0byBzZWUg aWYgdGhlIEdYIHJhaWwgaXMgc3RpbGwgcG93ZXJlZCAqLwotc3RhdGljIGJvb2wgYTZ4eF9nbXVf Z3hfaXNfb24oc3RydWN0IGE2eHhfZ211ICpnbXUpCitib29sIGE2eHhfZ211X2d4X2lzX29uKHN0 cnVjdCBhNnh4X2dtdSAqZ211KQogewotCXUzMiB2YWwgPSBnbXVfcmVhZChnbXUsIFJFR19BNlhY X0dNVV9TUFRQUkFDX1BXUl9DTEtfU1RBVFVTKTsKKwl1MzIgdmFsOworCisJLyogVGhpcyBjYW4g YmUgY2FsbGVkIGZyb20gZ3B1IHN0YXRlIGNvZGUgc28gbWFrZSBzdXJlIEdNVSBpcyB2YWxpZCAq LworCWlmIChJU19FUlJfT1JfTlVMTChnbXUtPm1taW8pKQorCQlyZXR1cm4gZmFsc2U7CisKKwl2 YWwgPSBnbXVfcmVhZChnbXUsIFJFR19BNlhYX0dNVV9TUFRQUkFDX1BXUl9DTEtfU1RBVFVTKTsK IAogCXJldHVybiAhKHZhbCAmCiAJCShBNlhYX0dNVV9TUFRQUkFDX1BXUl9DTEtfU1RBVFVTX0dY X0hNX0dEU0NfUE9XRVJfT0ZGIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRy ZW5vL2E2eHhfZ211LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dtdS5oCmlu ZGV4IDM1Zjc2NWFmYWU0NS4uYzcyMWQ5MTY1ZDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2FkcmVuby9hNnh4X2dtdS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5v L2E2eHhfZ211LmgKQEAgLTE2NCw0ICsxNjQsNyBAQCB2b2lkIGE2eHhfaGZpX2luaXQoc3RydWN0 IGE2eHhfZ211ICpnbXUpOwogaW50IGE2eHhfaGZpX3N0YXJ0KHN0cnVjdCBhNnh4X2dtdSAqZ211 LCBpbnQgYm9vdF9zdGF0ZSk7CiB2b2lkIGE2eHhfaGZpX3N0b3Aoc3RydWN0IGE2eHhfZ211ICpn bXUpOwogCitib29sIGE2eHhfZ211X2d4X2lzX29uKHN0cnVjdCBhNnh4X2dtdSAqZ211KTsKK2Jv b2wgYTZ4eF9nbXVfc3B0cHJhY19pc19vbihzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSk7CisKICNlbmRp ZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUuYyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmMKaW5kZXggZTBhOTE4ZThlOTY5Li4x MWYwYjk5Zjk0YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhf Z3B1LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUuYwpAQCAtNjcw LDMzICs2NzAsNiBAQCBzdGF0aWMgY29uc3QgdTMyIGE2eHhfcmVnaXN0ZXJfb2Zmc2V0c1tSRUdf QURSRU5PX1JFR0lTVEVSX01BWF0gPSB7CiAJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19D UF9SQl9DTlRMLCBSRUdfQTZYWF9DUF9SQl9DTlRMKSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIg YTZ4eF9yZWdpc3RlcnNbXSA9IHsKLQkweDAwMDAsIDB4MDAwMiwgMHgwMDEwLCAweDAwMTAsIDB4 MDAxMiwgMHgwMDEyLCAweDAwMTgsIDB4MDAxYiwKLQkweDAwMWUsIDB4MDAzMiwgMHgwMDM4LCAw eDAwM2MsIDB4MDA0MiwgMHgwMDQyLCAweDAwNDQsIDB4MDA0NCwKLQkweDAwNDcsIDB4MDA0Nywg MHgwMDU2LCAweDAwNTYsIDB4MDBhZCwgMHgwMGFlLCAweDAwYjAsIDB4MDBmYiwKLQkweDAxMDAs IDB4MDExZCwgMHgwMjAwLCAweDAyMGQsIDB4MDIxMCwgMHgwMjEzLCAweDAyMTgsIDB4MDIzZCwK LQkweDA0MDAsIDB4MDRmOSwgMHgwNTAwLCAweDA1MDAsIDB4MDUwNSwgMHgwNTBiLCAweDA1MGUs IDB4MDUxMSwKLQkweDA1MzMsIDB4MDUzMywgMHgwNTQwLCAweDA1NTUsIDB4MDgwMCwgMHgwODA4 LCAweDA4MTAsIDB4MDgxMywKLQkweDA4MjAsIDB4MDgyMSwgMHgwODIzLCAweDA4MjcsIDB4MDgz MCwgMHgwODMzLCAweDA4NDAsIDB4MDg0MywKLQkweDA4NGYsIDB4MDg2ZiwgMHgwODgwLCAweDA4 OGEsIDB4MDhhMCwgMHgwOGFiLCAweDA4YzAsIDB4MDhjNCwKLQkweDA4ZDAsIDB4MDhkZCwgMHgw OGYwLCAweDA4ZjMsIDB4MDkwMCwgMHgwOTAzLCAweDA5MDgsIDB4MDkxMSwKLQkweDA5MjgsIDB4 MDkzZSwgMHgwOTQyLCAweDA5NGQsIDB4MDk4MCwgMHgwOTg0LCAweDA5OGQsIDB4MDk5NiwKLQkw eDA5OTgsIDB4MDk5ZSwgMHgwOWEwLCAweDA5YTYsIDB4MDlhOCwgMHgwOWFlLCAweDA5YjAsIDB4 MDliMSwKLQkweDA5YzIsIDB4MDljOCwgMHgwYTAwLCAweDBhMDMsIDB4MGMwMCwgMHgwYzA0LCAw eDBjMDYsIDB4MGMwNiwKLQkweDBjMTAsIDB4MGNkOSwgMHgwZTAwLCAweDBlMGUsIDB4MGUxMCwg MHgwZTEzLCAweDBlMTcsIDB4MGUxOSwKLQkweDBlMWMsIDB4MGUyYiwgMHgwZTMwLCAweDBlMzIs IDB4MGUzOCwgMHgwZTM5LCAweDg2MDAsIDB4ODYwMSwKLQkweDg2MTAsIDB4ODYxYiwgMHg4NjIw LCAweDg2MjAsIDB4ODYyOCwgMHg4NjJiLCAweDg2MzAsIDB4ODYzNywKLQkweDhlMDEsIDB4OGUw MSwgMHg4ZTA0LCAweDhlMDUsIDB4OGUwNywgMHg4ZTA4LCAweDhlMGMsIDB4OGUwYywKLQkweDhl MTAsIDB4OGUxYywgMHg4ZTIwLCAweDhlMjUsIDB4OGUyOCwgMHg4ZTI4LCAweDhlMmMsIDB4OGUy ZiwKLQkweDhlM2IsIDB4OGUzZSwgMHg4ZTQwLCAweDhlNDMsIDB4OGU1MCwgMHg4ZTVlLCAweDhl NzAsIDB4OGU3NywKLQkweDk2MDAsIDB4OTYwNCwgMHg5NjI0LCAweDk2MzcsIDB4OWUwMCwgMHg5 ZTAxLCAweDllMDMsIDB4OWUwZSwKLQkweDllMTEsIDB4OWUxNiwgMHg5ZTE5LCAweDllMTksIDB4 OWUxYywgMHg5ZTFjLCAweDllMjAsIDB4OWUyMywKLQkweDllMzAsIDB4OWUzMSwgMHg5ZTM0LCAw eDllMzQsIDB4OWU3MCwgMHg5ZTcyLCAweDllNzgsIDB4OWU3OSwKLQkweDllODAsIDB4OWZmZiwg MHhhNjAwLCAweGE2MDEsIDB4YTYwMywgMHhhNjAzLCAweGE2MGEsIDB4YTYwYSwKLQkweGE2MTAs IDB4YTYxNywgMHhhNjMwLCAweGE2MzAsCi0JfjAKLX07Ci0KIHN0YXRpYyBpbnQgYTZ4eF9wbV9y ZXN1bWUoc3RydWN0IG1zbV9ncHUgKmdwdSkKIHsKIAlzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRyZW5v X2dwdSA9IHRvX2FkcmVub19ncHUoZ3B1KTsKQEAgLTc0OSwxNCArNzIyLDYgQEAgc3RhdGljIGlu dCBhNnh4X2dldF90aW1lc3RhbXAoc3RydWN0IG1zbV9ncHUgKmdwdSwgdWludDY0X3QgKnZhbHVl KQogCXJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIHx8IGRlZmlu ZWQoQ09ORklHX0RFVl9DT1JFRFVNUCkKLXN0YXRpYyB2b2lkIGE2eHhfc2hvdyhzdHJ1Y3QgbXNt X2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGUsCi0JCXN0cnVjdCBkcm1fcHJp bnRlciAqcCkKLXsKLQlhZHJlbm9fc2hvdyhncHUsIHN0YXRlLCBwKTsKLX0KLSNlbmRpZgotCiBz dGF0aWMgc3RydWN0IG1zbV9yaW5nYnVmZmVyICphNnh4X2FjdGl2ZV9yaW5nKHN0cnVjdCBtc21f Z3B1ICpncHUpCiB7CiAJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSB0b19hZHJlbm9f Z3B1KGdwdSk7CkBAIC04MjEsNiArNzg2LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhZHJlbm9f Z3B1X2Z1bmNzIGZ1bmNzID0gewogCQkuZ3B1X2J1c3kgPSBhNnh4X2dwdV9idXN5LAogCQkuZ3B1 X2dldF9mcmVxID0gYTZ4eF9nbXVfZ2V0X2ZyZXEsCiAJCS5ncHVfc2V0X2ZyZXEgPSBhNnh4X2dt dV9zZXRfZnJlcSwKKwkJLmdwdV9zdGF0ZV9nZXQgPSBhNnh4X2dwdV9zdGF0ZV9nZXQsCisJCS5n cHVfc3RhdGVfcHV0ID0gYTZ4eF9ncHVfc3RhdGVfcHV0LAogCX0sCiAJLmdldF90aW1lc3RhbXAg PSBhNnh4X2dldF90aW1lc3RhbXAsCiB9OwpAQCAtODQyLDcgKzgwOSw3IEBAIHN0cnVjdCBtc21f Z3B1ICphNnh4X2dwdV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJYWRyZW5vX2dwdSA9 ICZhNnh4X2dwdS0+YmFzZTsKIAlncHUgPSAmYWRyZW5vX2dwdS0+YmFzZTsKIAotCWFkcmVub19n cHUtPnJlZ2lzdGVycyA9IGE2eHhfcmVnaXN0ZXJzOworCWFkcmVub19ncHUtPnJlZ2lzdGVycyA9 IE5VTEw7CiAJYWRyZW5vX2dwdS0+cmVnX29mZnNldHMgPSBhNnh4X3JlZ2lzdGVyX29mZnNldHM7 CiAKIAlyZXQgPSBhZHJlbm9fZ3B1X2luaXQoZGV2LCBwZGV2LCBhZHJlbm9fZ3B1LCAmZnVuY3Ms IDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUuaCBi L2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmgKaW5kZXggNDEyN2RjZWJjMjAy Li41MjhhNGNmZTA3Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2 eHhfZ3B1LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUuaApAQCAt NTYsNiArNTYsMTQgQEAgdm9pZCBhNnh4X2dtdV9jbGVhcl9vb2Ioc3RydWN0IGE2eHhfZ211ICpn bXUsIGVudW0gYTZ4eF9nbXVfb29iX3N0YXRlIHN0YXRlKTsKIAogaW50IGE2eHhfZ211X3Byb2Jl KHN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSk7CiB2 b2lkIGE2eHhfZ211X3JlbW92ZShzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1KTsKKwogdm9pZCBh Nnh4X2dtdV9zZXRfZnJlcShzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCB1bnNpZ25lZCBsb25nIGZyZXEp OwogdW5zaWduZWQgbG9uZyBhNnh4X2dtdV9nZXRfZnJlcShzdHJ1Y3QgbXNtX2dwdSAqZ3B1KTsK Kwordm9pZCBhNnh4X3Nob3coc3RydWN0IG1zbV9ncHUgKmdwdSwgc3RydWN0IG1zbV9ncHVfc3Rh dGUgKnN0YXRlLAorCQlzdHJ1Y3QgZHJtX3ByaW50ZXIgKnApOworCitzdHJ1Y3QgbXNtX2dwdV9z dGF0ZSAqYTZ4eF9ncHVfc3RhdGVfZ2V0KHN0cnVjdCBtc21fZ3B1ICpncHUpOworaW50IGE2eHhf Z3B1X3N0YXRlX3B1dChzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGUpOworCiAjZW5kaWYgLyog X19BNlhYX0dQVV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5v L2E2eHhfZ3B1X3N0YXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9z dGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjBmNWI5MTRj NmZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9n cHVfc3RhdGUuYwpAQCAtMCwwICsxLDExNTkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCisvKiBDb3B5cmlnaHQgKGMpIDIwMTggVGhlIExpbnV4IEZvdW5kYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuICovCisKKyNpbmNsdWRlIDxsaW51eC9hc2NpaTg1Lmg+CisjaW5j bHVkZSAibXNtX2dlbS5oIgorI2luY2x1ZGUgImE2eHhfZ3B1LmgiCisjaW5jbHVkZSAiYTZ4eF9n bXUuaCIKKyNpbmNsdWRlICJhNnh4X2dwdV9zdGF0ZS5oIgorI2luY2x1ZGUgImE2eHhfZ211Lnht bC5oIgorCitzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqIHsKKwljb25zdCB2b2lkICpoYW5kbGU7 CisJdTMyICpkYXRhOworfTsKKworc3RydWN0IGE2eHhfZ3B1X3N0YXRlIHsKKwlzdHJ1Y3QgbXNt X2dwdV9zdGF0ZSBiYXNlOworCisJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqZ211X3JlZ2lz dGVyczsKKwlpbnQgbnJfZ211X3JlZ2lzdGVyczsKKworCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZV9v YmogKnJlZ2lzdGVyczsKKwlpbnQgbnJfcmVnaXN0ZXJzOworCisJc3RydWN0IGE2eHhfZ3B1X3N0 YXRlX29iaiAqc2hhZGVyczsKKwlpbnQgbnJfc2hhZGVyczsKKworCXN0cnVjdCBhNnh4X2dwdV9z dGF0ZV9vYmogKmNsdXN0ZXJzOworCWludCBucl9jbHVzdGVyczsKKworCXN0cnVjdCBhNnh4X2dw dV9zdGF0ZV9vYmogKmRiZ2FoYl9jbHVzdGVyczsKKwlpbnQgbnJfZGJnYWhiX2NsdXN0ZXJzOwor CisJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqaW5kZXhlZF9yZWdzOworCWludCBucl9pbmRl eGVkX3JlZ3M7CisKKwlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpkZWJ1Z2J1czsKKwlpbnQg bnJfZGVidWdidXM7CisKKwlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICp2YmlmX2RlYnVnYnVz OworCisJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqY3hfZGVidWdidXM7CisJaW50IG5yX2N4 X2RlYnVnYnVzOworfTsKKworc3RhdGljIGlubGluZSBpbnQgQ1JBU0hEVU1QX1dSSVRFKHU2NCAq aW4sIHUzMiByZWcsIHUzMiB2YWwpCit7CisJaW5bMF0gPSB2YWw7CisJaW5bMV0gPSAoKCh1NjQp IHJlZykgPDwgNDQgfCAoMSA8PCAyMSkgfCAxKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMg aW5saW5lIGludCBDUkFTSERVTVBfUkVBRCh1NjQgKmluLCB1MzIgcmVnLCB1MzIgZHdvcmRzLCB1 NjQgdGFyZ2V0KQoreworCWluWzBdID0gdGFyZ2V0OworCWluWzFdID0gKCgodTY0KSByZWcpIDw8 IDQ0IHwgZHdvcmRzKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW5saW5lIGludCBDUkFT SERVTVBfRklOSSh1NjQgKmluKQoreworCWluWzBdID0gMDsKKwlpblsxXSA9IDA7CisKKwlyZXR1 cm4gMjsKK30KKworc3RydWN0IGE2eHhfY3Jhc2hkdW1wZXIgeworCXZvaWQgKnB0cjsKKwlzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKmJvOworCXU2NCBpb3ZhOworfTsKKworLyoKKyAqIEFsbG9jYXRl IDFNQiBmb3IgdGhlIGNyYXNoZHVtcGVyIHNjcmF0Y2ggcmVnaW9uIC0gOGsgZm9yIHRoZSBzY3Jp cHQgYW5kCisgKiB0aGUgcmVzdCBmb3IgdGhlIGRhdGEKKyAqLworI2RlZmluZSBBNlhYX0NEX0RB VEFfT0ZGU0VUIDgxOTIKKyNkZWZpbmUgQTZYWF9DRF9EQVRBX1NJWkUgIChTWl8xTSAtIDgxOTIp CisKK3N0YXRpYyBpbnQgYTZ4eF9jcmFzaGR1bXBlcl9pbml0KHN0cnVjdCBtc21fZ3B1ICpncHUs CisJCXN0cnVjdCBhNnh4X2NyYXNoZHVtcGVyICpkdW1wZXIpCit7CisJZHVtcGVyLT5wdHIgPSBt c21fZ2VtX2tlcm5lbF9uZXdfbG9ja2VkKGdwdS0+ZGV2LAorCQlTWl8xTSwgTVNNX0JPX1VOQ0FD SEVELCBncHUtPmFzcGFjZSwKKwkJJmR1bXBlci0+Ym8sICZkdW1wZXItPmlvdmEpOworCisJcmV0 dXJuIElTX0VSUihkdW1wZXItPnB0cikgPyBQVFJfRVJSKGR1bXBlci0+cHRyKSA6IDA7Cit9CisK K3N0YXRpYyBpbnQgYTZ4eF9jcmFzaGR1bXBlcl9ydW4oc3RydWN0IG1zbV9ncHUgKmdwdSwKKwkJ c3RydWN0IGE2eHhfY3Jhc2hkdW1wZXIgKmR1bXBlcikKK3sKKwlzdHJ1Y3QgYWRyZW5vX2dwdSAq YWRyZW5vX2dwdSA9IHRvX2FkcmVub19ncHUoZ3B1KTsKKwlzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhf Z3B1ID0gdG9fYTZ4eF9ncHUoYWRyZW5vX2dwdSk7CisJdTMyIHZhbDsKKwlpbnQgcmV0OworCisJ aWYgKElTX0VSUl9PUl9OVUxMKGR1bXBlci0+cHRyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlp ZiAoIWE2eHhfZ211X3NwdHByYWNfaXNfb24oJmE2eHhfZ3B1LT5nbXUpKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCS8qIE1ha2Ugc3VyZSBhbGwgcGVuZGluZyBtZW1vcnkgd3JpdGVzIGFyZSBwb3N0 ZWQgKi8KKwl3bWIoKTsKKworCWdwdV93cml0ZTY0KGdwdSwgUkVHX0E2WFhfQ1BfQ1JBU0hfU0NS SVBUX0JBU0VfTE8sCisJCVJFR19BNlhYX0NQX0NSQVNIX1NDUklQVF9CQVNFX0hJLCBkdW1wZXIt PmlvdmEpOworCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfQ1JBU0hfRFVNUF9DTlRMLCAx KTsKKworCXJldCA9IGdwdV9wb2xsX3RpbWVvdXQoZ3B1LCBSRUdfQTZYWF9DUF9DUkFTSF9EVU1Q X1NUQVRVUywgdmFsLAorCQl2YWwgJiAweDAyLCAxMDAsIDEwMDAwKTsKKworCWdwdV93cml0ZShn cHUsIFJFR19BNlhYX0NQX0NSQVNIX0RVTVBfQ05UTCwgMCk7CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgdm9pZCBhNnh4X2NyYXNoZHVtcGVyX2ZyZWUoc3RydWN0IG1zbV9ncHUgKmdwdSwK KwkJc3RydWN0IGE2eHhfY3Jhc2hkdW1wZXIgKmR1bXBlcikKK3sKKwltc21fZ2VtX3B1dF9pb3Zh KGR1bXBlci0+Ym8sIGdwdS0+YXNwYWNlKTsKKwltc21fZ2VtX3B1dF92YWRkcihkdW1wZXItPmJv KTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGR1bXBlci0+Ym8pOworfQorCisvKiBy ZWFkIGEgdmFsdWUgZnJvbSB0aGUgR1ggZGVidWcgYnVzICovCitzdGF0aWMgaW50IGRlYnVnYnVz X3JlYWQoc3RydWN0IG1zbV9ncHUgKmdwdSwgdTMyIGJsb2NrLCB1MzIgb2Zmc2V0LAorCQl1MzIg KmRhdGEpCit7CisJdTMyIHJlZyA9IEE2WFhfREJHQ19DRkdfREJHQlVTX1NFTF9EX1BJTkdfSU5E RVgob2Zmc2V0KSB8CisJCUE2WFhfREJHQ19DRkdfREJHQlVTX1NFTF9EX1BJTkdfQkxLX1NFTChi bG9jayk7CisKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfU0VMX0Es IHJlZyk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfREJHQ19DRkdfREJHQlVTX1NFTF9CLCBy ZWcpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19TRUxfQywgcmVn KTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfU0VMX0QsIHJlZyk7 CisKKwkvKiBXYWl0IDEgdXMgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIGlzIGZsb3dpbmcgKi8KKwl1 ZGVsYXkoMSk7CisKKwlkYXRhWzBdID0gZ3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9EQkdDX0NGR19E QkdCVVNfVFJBQ0VfQlVGMik7CisJZGF0YVsxXSA9IGdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfREJH Q19DRkdfREJHQlVTX1RSQUNFX0JVRjEpOworCisJcmV0dXJuIDI7Cit9CisKKyNkZWZpbmUgY3hk Ymdfd3JpdGUocHRyLCBvZmZzZXQsIHZhbCkgXAorCW1zbV93cml0ZWwoKHZhbCksIChwdHIpICsg KChvZmZzZXQpIDw8IDIpKQorCisjZGVmaW5lIGN4ZGJnX3JlYWQocHRyLCBvZmZzZXQpIFwKKwlt c21fcmVhZGwoKHB0cikgKyAoKG9mZnNldCkgPDwgMikpCisKKy8qIHJlYWQgYSB2YWx1ZSBmcm9t IHRoZSBDWCBkZWJ1ZyBidXMgKi8KK3N0YXRpYyBpbnQgY3hfZGVidWdidXNfcmVhZCh2b2lkICpf X2lvbWVtIGN4ZGJnLCB1MzIgYmxvY2ssIHUzMiBvZmZzZXQsCisJCXUzMiAqZGF0YSkKK3sKKwl1 MzIgcmVnID0gQTZYWF9DWF9EQkdDX0NGR19EQkdCVVNfU0VMX0FfUElOR19JTkRFWChvZmZzZXQp IHwKKwkJQTZYWF9DWF9EQkdDX0NGR19EQkdCVVNfU0VMX0FfUElOR19CTEtfU0VMKGJsb2NrKTsK KworCWN4ZGJnX3dyaXRlKGN4ZGJnLCBSRUdfQTZYWF9DWF9EQkdDX0NGR19EQkdCVVNfU0VMX0Es IHJlZyk7CisJY3hkYmdfd3JpdGUoY3hkYmcsIFJFR19BNlhYX0NYX0RCR0NfQ0ZHX0RCR0JVU19T RUxfQiwgcmVnKTsKKwljeGRiZ193cml0ZShjeGRiZywgUkVHX0E2WFhfQ1hfREJHQ19DRkdfREJH QlVTX1NFTF9DLCByZWcpOworCWN4ZGJnX3dyaXRlKGN4ZGJnLCBSRUdfQTZYWF9DWF9EQkdDX0NG R19EQkdCVVNfU0VMX0QsIHJlZyk7CisKKwkvKiBXYWl0IDEgdXMgdG8gbWFrZSBzdXJlIHRoZSBk YXRhIGlzIGZsb3dpbmcgKi8KKwl1ZGVsYXkoMSk7CisKKwlkYXRhWzBdID0gY3hkYmdfcmVhZChj eGRiZywgUkVHX0E2WFhfQ1hfREJHQ19DRkdfREJHQlVTX1RSQUNFX0JVRjIpOworCWRhdGFbMV0g PSBjeGRiZ19yZWFkKGN4ZGJnLCBSRUdfQTZYWF9DWF9EQkdDX0NGR19EQkdCVVNfVFJBQ0VfQlVG MSk7CisKKwlyZXR1cm4gMjsKK30KKworLyogUmVhZCBhIGNodW5rIG9mIGRhdGEgZnJvbSB0aGUg VkJJRiBkZWJ1ZyBidXMgKi8KK3N0YXRpYyBpbnQgdmJpZl9kZWJ1Z2J1c19yZWFkKHN0cnVjdCBt c21fZ3B1ICpncHUsIHUzMiBjdHJsMCwgdTMyIGN0cmwxLAorCQl1MzIgcmVnLCBpbnQgY291bnQs IHUzMiAqZGF0YSkKK3sKKwlpbnQgaTsKKworCWdwdV93cml0ZShncHUsIGN0cmwwLCByZWcpOwor CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJZ3B1X3dyaXRlKGdwdSwgY3RybDEs IGkpOworCQlkYXRhW2ldID0gZ3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9WQklGX1RFU1RfQlVTX09V VCk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisjZGVmaW5lIEFYSV9BUkJfQkxPQ0tTIDIK KyNkZWZpbmUgWElOX0FYSV9CTE9DS1MgNQorI2RlZmluZSBYSU5fQ09SRV9CTE9DS1MgNAorCisj ZGVmaW5lIFZCSUZfREVCVUdCVVNfQkxPQ0tfU0laRSBcCisJKCgxNiAqIEFYSV9BUkJfQkxPQ0tT KSArIFwKKwkgKDE4ICogWElOX0FYSV9CTE9DS1MpICsgXAorCSAoMTIgKiBYSU5fQ09SRV9CTE9D S1MpKQorCitzdGF0aWMgdm9pZCBhNnh4X2dldF92YmlmX2RlYnVnYnVzX2Jsb2NrKHN0cnVjdCBt c21fZ3B1ICpncHUsCisJCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZV9vYmogKm9iaikKK3sKKwl1MzIg Y2xrLCAqcHRyOworCWludCBpOworCisJb2JqLT5kYXRhID0ga2NhbGxvYyhWQklGX0RFQlVHQlVT X0JMT0NLX1NJWkUsIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsKKwlvYmotPmhhbmRsZSA9IE5V TEw7CisKKwkvKiBHZXQgdGhlIGN1cnJlbnQgY2xvY2sgc2V0dGluZyAqLworCWNsayA9IGdwdV9y ZWFkKGdwdSwgUkVHX0E2WFhfVkJJRl9DTEtPTik7CisKKwkvKiBGb3JjZSBvbiB0aGUgYnVzIHNv IHdlIGNhbiByZWFkIGl0ICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfVkJJRl9DTEtPTiwK KwkJY2xrIHwgQTZYWF9WQklGX0NMS09OX0ZPUkNFX09OX1RFU1RCVVMpOworCisJLyogV2Ugd2ls bCByZWFkIGZyb20gQlVTMiBmaXJzdCwgc28gZGlzYWJsZSBCVVMxICovCisJZ3B1X3dyaXRlKGdw dSwgUkVHX0E2WFhfVkJJRl9URVNUX0JVUzFfQ1RSTDAsIDApOworCisJLyogRW5hYmxlIHRoZSBW QklGIGJ1cyBmb3IgcmVhZGluZyAqLworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1ZCSUZfVEVT VF9CVVNfT1VUX0NUUkwsIDEpOworCisJcHRyID0gb2JqLT5kYXRhOworCisJZm9yIChpID0gMDsg aSA8IEFYSV9BUkJfQkxPQ0tTOyBpKyspCisJCXB0ciArPSB2YmlmX2RlYnVnYnVzX3JlYWQoZ3B1 LAorCQkJUkVHX0E2WFhfVkJJRl9URVNUX0JVUzJfQ1RSTDAsCisJCQlSRUdfQTZYWF9WQklGX1RF U1RfQlVTMl9DVFJMMSwKKwkJCTEgPDwgKGkgKyAxNiksIDE2LCBwdHIpOworCisJZm9yIChpID0g MDsgaSA8IFhJTl9BWElfQkxPQ0tTOyBpKyspCisJCXB0ciArPSB2YmlmX2RlYnVnYnVzX3JlYWQo Z3B1LAorCQkJUkVHX0E2WFhfVkJJRl9URVNUX0JVUzJfQ1RSTDAsCisJCQlSRUdfQTZYWF9WQklG X1RFU1RfQlVTMl9DVFJMMSwKKwkJCTEgPDwgaSwgMTgsIHB0cik7CisKKwkvKiBTdG9wIEJVUzIg c28gd2UgY2FuIHR1cm4gb24gQlVTMSAqLworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1ZCSUZf VEVTVF9CVVMyX0NUUkwwLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBYSU5fQ09SRV9CTE9DS1M7 IGkrKykKKwkJcHRyICs9IHZiaWZfZGVidWdidXNfcmVhZChncHUsCisJCQlSRUdfQTZYWF9WQklG X1RFU1RfQlVTMV9DVFJMMCwKKwkJCVJFR19BNlhYX1ZCSUZfVEVTVF9CVVMxX0NUUkwxLAorCQkJ MSA8PCBpLCAxMiwgcHRyKTsKKworCS8qIFJlc3RvcmUgdGhlIFZCSUYgY2xvY2sgc2V0dGluZyAq LworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1ZCSUZfQ0xLT04sIGNsayk7Cit9CisKK3N0YXRp YyB2b2lkIGE2eHhfZ2V0X2RlYnVnYnVzX2Jsb2NrKHN0cnVjdCBtc21fZ3B1ICpncHUsCisJCWNv bnN0IHN0cnVjdCBhNnh4X2RlYnVnYnVzX2Jsb2NrICpibG9jaywKKwkJc3RydWN0IGE2eHhfZ3B1 X3N0YXRlX29iaiAqb2JqKQoreworCWludCBpOworCXUzMiAqcHRyOworCisJb2JqLT5kYXRhID0g a2NhbGxvYyhibG9jay0+Y291bnQsIHNpemVvZih1NjQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9i ai0+ZGF0YSkKKwkJcmV0dXJuOworCisJb2JqLT5oYW5kbGUgPSBibG9jazsKKworCWZvciAocHRy ID0gb2JqLT5kYXRhLCBpID0gMDsgaSA8IGJsb2NrLT5jb3VudDsgaSsrKQorCQlwdHIgKz0gZGVi dWdidXNfcmVhZChncHUsIGJsb2NrLT5pZCwgaSwgcHRyKTsKK30KKworc3RhdGljIHZvaWQgYTZ4 eF9nZXRfY3hfZGVidWdidXNfYmxvY2sodm9pZCBfX2lvbWVtICpjeGRiZywKKwkJY29uc3Qgc3Ry dWN0IGE2eHhfZGVidWdidXNfYmxvY2sgKmJsb2NrLAorCQlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVf b2JqICpvYmopCit7CisJaW50IGk7CisJdTMyICpwdHI7CisKKwlvYmotPmRhdGEgPSBrY2FsbG9j KGJsb2NrLT5jb3VudCwgc2l6ZW9mKHU2NCksIEdGUF9LRVJORUwpOworCWlmICghb2JqLT5kYXRh KQorCQlyZXR1cm47CisKKwlvYmotPmhhbmRsZSA9IGJsb2NrOworCisJZm9yIChwdHIgPSBvYmot PmRhdGEsIGkgPSAwOyBpIDwgYmxvY2stPmNvdW50OyBpKyspCisJCXB0ciArPSBjeF9kZWJ1Z2J1 c19yZWFkKGN4ZGJnLCBibG9jay0+aWQsIGksIHB0cik7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhf Z2V0X2RlYnVnYnVzKHN0cnVjdCBtc21fZ3B1ICpncHUsCisJCXN0cnVjdCBhNnh4X2dwdV9zdGF0 ZSAqYTZ4eF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl2b2lkIF9faW9tZW0g KmN4ZGJnID0gTlVMTDsKKworCS8qIFNldCB1cCB0aGUgR1ggZGVidWcgYnVzICovCisKKwlncHVf d3JpdGUoZ3B1LCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfQ05UTFQsCisJCUE2WFhfREJHQ19D RkdfREJHQlVTX0NOVExUX1NFR1QoMHhmKSk7CisKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9E QkdDX0NGR19EQkdCVVNfQ05UTE0sCisJCUE2WFhfREJHQ19DRkdfREJHQlVTX0NOVExNX0VOQUJM RSgweGYpKTsKKworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19JVlRM XzAsIDApOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19JVlRMXzEs IDApOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19JVlRMXzIsIDAp OworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19JVlRMXzMsIDApOwor CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfREJHQ19DRkdfREJHQlVTX0JZVEVMXzAsIDB4NzY1 NDMyMTApOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19CWVRFTF8x LCAweEZFRENCQTk4KTsKKworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JV U19NQVNLTF8wLCAwKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNf TUFTS0xfMSwgMCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfREJHQ19DRkdfREJHQlVTX01B U0tMXzIsIDApOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19NQVNL TF8zLCAwKTsKKworCS8qIFNldCB1cCB0aGUgQ1ggZGVidWcgYnVzIC0gaXQgbGl2ZXMgZWxzZXdo ZXJlIGluIHRoZSBzeXN0ZW0gc28gZG8gYQorCSAqIHRlbXBvcmFyeSBpb3JlbWFwIGZvciB0aGUg cmVnaXN0ZXJzCisJICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShncHUt PnBkZXYsIElPUkVTT1VSQ0VfTUVNLAorCQkJImN4X2RiZ2MiKTsKKworCWlmIChyZXMpCisJCWN4 ZGJnID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCisJaWYgKGN4 ZGJnKSB7CisJCWN4ZGJnX3dyaXRlKGN4ZGJnLCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfQ05U TFQsCisJCQlBNlhYX0RCR0NfQ0ZHX0RCR0JVU19DTlRMVF9TRUdUKDB4ZikpOworCisJCWN4ZGJn X3dyaXRlKGN4ZGJnLCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfQ05UTE0sCisJCQlBNlhYX0RC R0NfQ0ZHX0RCR0JVU19DTlRMTV9FTkFCTEUoMHhmKSk7CisKKwkJY3hkYmdfd3JpdGUoY3hkYmcs IFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19JVlRMXzAsIDApOworCQljeGRiZ193cml0ZShjeGRi ZywgUkVHX0E2WFhfREJHQ19DRkdfREJHQlVTX0lWVExfMSwgMCk7CisJCWN4ZGJnX3dyaXRlKGN4 ZGJnLCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfSVZUTF8yLCAwKTsKKwkJY3hkYmdfd3JpdGUo Y3hkYmcsIFJFR19BNlhYX0RCR0NfQ0ZHX0RCR0JVU19JVlRMXzMsIDApOworCisJCWN4ZGJnX3dy aXRlKGN4ZGJnLCBSRUdfQTZYWF9EQkdDX0NGR19EQkdCVVNfQllURUxfMCwKKwkJCTB4NzY1NDMy MTApOworCQljeGRiZ193cml0ZShjeGRiZywgUkVHX0E2WFhfREJHQ19DRkdfREJHQlVTX0JZVEVM XzEsCisJCQkweEZFRENCQTk4KTsKKworCQljeGRiZ193cml0ZShjeGRiZywgUkVHX0E2WFhfREJH Q19DRkdfREJHQlVTX01BU0tMXzAsIDApOworCQljeGRiZ193cml0ZShjeGRiZywgUkVHX0E2WFhf REJHQ19DRkdfREJHQlVTX01BU0tMXzEsIDApOworCQljeGRiZ193cml0ZShjeGRiZywgUkVHX0E2 WFhfREJHQ19DRkdfREJHQlVTX01BU0tMXzIsIDApOworCQljeGRiZ193cml0ZShjeGRiZywgUkVH X0E2WFhfREJHQ19DRkdfREJHQlVTX01BU0tMXzMsIDApOworCX0KKworCWE2eHhfc3RhdGUtPmRl YnVnYnVzID0ga2NhbGxvYyhBUlJBWV9TSVpFKGE2eHhfZGVidWdidXNfYmxvY2tzKSwKKwkJc2l6 ZW9mKCphNnh4X3N0YXRlLT5kZWJ1Z2J1cyksIEdGUF9LRVJORUwpOworCisJaWYgKGE2eHhfc3Rh dGUtPmRlYnVnYnVzKSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGE2eHhfZGVidWdidXNfYmxvY2tzKTsgaSsrKQorCQkJYTZ4eF9nZXRfZGVidWdidXNfYmxvY2so Z3B1LAorCQkJCSZhNnh4X2RlYnVnYnVzX2Jsb2Nrc1tpXSwKKwkJCQkmYTZ4eF9zdGF0ZS0+ZGVi dWdidXNbaV0pOworCisJCWE2eHhfc3RhdGUtPm5yX2RlYnVnYnVzID0gQVJSQVlfU0laRShhNnh4 X2RlYnVnYnVzX2Jsb2Nrcyk7CisJfQorCisJYTZ4eF9zdGF0ZS0+dmJpZl9kZWJ1Z2J1cyA9IGt6 YWxsb2Moc2l6ZW9mKCphNnh4X3N0YXRlLT52YmlmX2RlYnVnYnVzKSwKKwkJR0ZQX0tFUk5FTCk7 CisKKwlpZiAoYTZ4eF9zdGF0ZS0+dmJpZl9kZWJ1Z2J1cykKKwkJYTZ4eF9nZXRfdmJpZl9kZWJ1 Z2J1c19ibG9jayhncHUsIGE2eHhfc3RhdGUtPnZiaWZfZGVidWdidXMpOworCisJaWYgKGN4ZGJn KSB7CisJCWE2eHhfc3RhdGUtPmN4X2RlYnVnYnVzID0KKwkJCWtjYWxsb2MoQVJSQVlfU0laRShh Nnh4X2N4X2RlYnVnYnVzX2Jsb2NrcyksCisJCQlzaXplb2YoKmE2eHhfc3RhdGUtPmN4X2RlYnVn YnVzKSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKGE2eHhfc3RhdGUtPmN4X2RlYnVnYnVzKSB7CisJ CQlpbnQgaTsKKworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYTZ4eF9jeF9kZWJ1Z2J1 c19ibG9ja3MpOyBpKyspCisJCQkJYTZ4eF9nZXRfY3hfZGVidWdidXNfYmxvY2soY3hkYmcsCisJ CQkJCSZhNnh4X2N4X2RlYnVnYnVzX2Jsb2Nrc1tpXSwKKwkJCQkJJmE2eHhfc3RhdGUtPmN4X2Rl YnVnYnVzW2ldKTsKKworCQkJYTZ4eF9zdGF0ZS0+bnJfY3hfZGVidWdidXMgPQorCQkJCUFSUkFZ X1NJWkUoYTZ4eF9jeF9kZWJ1Z2J1c19ibG9ja3MpOworCQl9CisKKwkJaW91bm1hcChjeGRiZyk7 CisJfQorfQorCisjZGVmaW5lIFJBTkdFKHJlZywgYSkgKChyZWcpWyhhKSArIDFdIC0gKHJlZylb KGEpXSArIDEpCisKKy8qIFJlYWQgYSBkYXRhIGNsdXN0ZXIgZnJvbSBiZWhpbmQgdGhlIEFIQiBh cGVydHVyZSAqLworc3RhdGljIHZvaWQgYTZ4eF9nZXRfZGJnYWhiX2NsdXN0ZXIoc3RydWN0IG1z bV9ncHUgKmdwdSwKKwkJY29uc3Qgc3RydWN0IGE2eHhfZGJnYWhiX2NsdXN0ZXIgKmRiZ2FoYiwK KwkJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqb2JqLAorCQlzdHJ1Y3QgYTZ4eF9jcmFzaGR1 bXBlciAqZHVtcGVyKQoreworCXU2NCAqaW4gPSBkdW1wZXItPnB0cjsKKwl1NjQgb3V0ID0gZHVt cGVyLT5pb3ZhICsgQTZYWF9DRF9EQVRBX09GRlNFVDsKKwlzaXplX3QgZGF0YXNpemU7CisJaW50 IGksIHJlZ2NvdW50ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBNlhYX05VTV9DT05URVhUUzsg aSsrKSB7CisJCWludCBqOworCisJCWluICs9IENSQVNIRFVNUF9XUklURShpbiwgUkVHX0E2WFhf SExTUV9EQkdfUkVBRF9TRUwsCisJCQkoZGJnYWhiLT5zdGF0ZXR5cGUgKyBpICogMikgPDwgOCk7 CisKKwkJZm9yIChqID0gMDsgaiA8IGRiZ2FoYi0+Y291bnQ7IGogKz0gMikgeworCQkJaW50IGNv dW50ID0gUkFOR0UoZGJnYWhiLT5yZWdpc3RlcnMsIGopOworCQkJdTMyIG9mZnNldCA9IFJFR19B NlhYX0hMU1FfREJHX0FIQl9SRUFEX0FQRVJUVVJFICsKKwkJCQlkYmdhaGItPnJlZ2lzdGVyc1tq XSAtIChkYmdhaGItPmJhc2UgPj4gMik7CisKKwkJCWluICs9IENSQVNIRFVNUF9SRUFEKGluLCBv ZmZzZXQsIGNvdW50LCBvdXQpOworCisJCQlvdXQgKz0gY291bnQgKiBzaXplb2YodTMyKTsKKwor CQkJaWYgKGkgPT0gMCkKKwkJCQlyZWdjb3VudCArPSBjb3VudDsKKwkJfQorCX0KKworCUNSQVNI RFVNUF9GSU5JKGluKTsKKworCWRhdGFzaXplID0gcmVnY291bnQgKiBBNlhYX05VTV9DT05URVhU UyAqIHNpemVvZih1MzIpOworCisJaWYgKFdBUk5fT04oZGF0YXNpemUgPiBBNlhYX0NEX0RBVEFf U0laRSkpCisJCXJldHVybjsKKworCWlmIChhNnh4X2NyYXNoZHVtcGVyX3J1bihncHUsIGR1bXBl cikpCisJCXJldHVybjsKKworCW9iai0+aGFuZGxlID0gZGJnYWhiOworCW9iai0+ZGF0YSA9IGtt ZW1kdXAoZHVtcGVyLT5wdHIgKyBBNlhYX0NEX0RBVEFfT0ZGU0VULAorCQlkYXRhc2l6ZSwgR0ZQ X0tFUk5FTCk7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfZ2V0X2RiZ2FoYl9jbHVzdGVycyhzdHJ1 Y3QgbXNtX2dwdSAqZ3B1LAorCQlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGUgKmE2eHhfc3RhdGUsCisJ CXN0cnVjdCBhNnh4X2NyYXNoZHVtcGVyICpkdW1wZXIpCit7CisJaW50IGk7CisKKwlhNnh4X3N0 YXRlLT5kYmdhaGJfY2x1c3RlcnMgPSBrY2FsbG9jKEFSUkFZX1NJWkUoYTZ4eF9kYmdhaGJfY2x1 c3RlcnMpLAorCQlzaXplb2YoKmE2eHhfc3RhdGUtPmRiZ2FoYl9jbHVzdGVycyksIEdGUF9LRVJO RUwpOworCisJaWYgKCFhNnh4X3N0YXRlLT5kYmdhaGJfY2x1c3RlcnMpCisJCXJldHVybjsKKwor CWE2eHhfc3RhdGUtPm5yX2RiZ2FoYl9jbHVzdGVycyA9IEFSUkFZX1NJWkUoYTZ4eF9kYmdhaGJf Y2x1c3RlcnMpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYTZ4eF9kYmdhaGJfY2x1 c3RlcnMpOyBpKyspCisJCWE2eHhfZ2V0X2RiZ2FoYl9jbHVzdGVyKGdwdSwgJmE2eHhfZGJnYWhi X2NsdXN0ZXJzW2ldLAorCQkJJmE2eHhfc3RhdGUtPmRiZ2FoYl9jbHVzdGVyc1tpXSwgZHVtcGVy KTsKK30KKworLyogUmVhZCBhIGRhdGEgY2x1c3RlciBmcm9tIHRoZSBDUCBhcGVydHVyZSB3aXRo IHRoZSBjcmFzaGR1bXBlciAqLworc3RhdGljIHZvaWQgYTZ4eF9nZXRfY2x1c3RlcihzdHJ1Y3Qg bXNtX2dwdSAqZ3B1LAorCQljb25zdCBzdHJ1Y3QgYTZ4eF9jbHVzdGVyICpjbHVzdGVyLAorCQlz dHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpvYmosCisJCXN0cnVjdCBhNnh4X2NyYXNoZHVtcGVy ICpkdW1wZXIpCit7CisJdTY0ICppbiA9IGR1bXBlci0+cHRyOworCXU2NCBvdXQgPSBkdW1wZXIt PmlvdmEgKyBBNlhYX0NEX0RBVEFfT0ZGU0VUOworCXNpemVfdCBkYXRhc2l6ZTsKKwlpbnQgaSwg cmVnY291bnQgPSAwOworCisJLyogU29tZSBjbHVzdGVycyBuZWVkIGEgc2VsZWN0b3IgcmVnaXN0 ZXIgdG8gYmUgcHJvZ3JhbW1lZCB0b28gKi8KKwlpZiAoY2x1c3Rlci0+c2VsX3JlZykKKwkJaW4g Kz0gQ1JBU0hEVU1QX1dSSVRFKGluLCBjbHVzdGVyLT5zZWxfcmVnLCBjbHVzdGVyLT5zZWxfdmFs KTsKKworCWZvciAoaSA9IDA7IGkgPCBBNlhYX05VTV9DT05URVhUUzsgaSsrKSB7CisJCWludCBq OworCisJCWluICs9IENSQVNIRFVNUF9XUklURShpbiwgUkVHX0E2WFhfQ1BfQVBFUlRVUkVfQ05U TF9DRCwKKwkJCShjbHVzdGVyLT5pZCA8PCA4KSB8IChpIDw8IDQpIHwgaSk7CisKKwkJZm9yIChq ID0gMDsgaiA8IGNsdXN0ZXItPmNvdW50OyBqICs9IDIpIHsKKwkJCWludCBjb3VudCA9IFJBTkdF KGNsdXN0ZXItPnJlZ2lzdGVycywgaik7CisKKwkJCWluICs9IENSQVNIRFVNUF9SRUFEKGluLCBj bHVzdGVyLT5yZWdpc3RlcnNbal0sCisJCQkJY291bnQsIG91dCk7CisKKwkJCW91dCArPSBjb3Vu dCAqIHNpemVvZih1MzIpOworCisJCQlpZiAoaSA9PSAwKQorCQkJCXJlZ2NvdW50ICs9IGNvdW50 OworCQl9CisJfQorCisJQ1JBU0hEVU1QX0ZJTkkoaW4pOworCisJZGF0YXNpemUgPSByZWdjb3Vu dCAqIEE2WFhfTlVNX0NPTlRFWFRTICogc2l6ZW9mKHUzMik7CisKKwlpZiAoV0FSTl9PTihkYXRh c2l6ZSA+IEE2WFhfQ0RfREFUQV9TSVpFKSkKKwkJcmV0dXJuOworCisJaWYgKGE2eHhfY3Jhc2hk dW1wZXJfcnVuKGdwdSwgZHVtcGVyKSkKKwkJcmV0dXJuOworCisJb2JqLT5oYW5kbGUgPSBjbHVz dGVyOworCW9iai0+ZGF0YSA9IGttZW1kdXAoZHVtcGVyLT5wdHIgKyBBNlhYX0NEX0RBVEFfT0ZG U0VULAorCQlkYXRhc2l6ZSwgR0ZQX0tFUk5FTCk7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfZ2V0 X2NsdXN0ZXJzKHN0cnVjdCBtc21fZ3B1ICpncHUsCisJCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZSAq YTZ4eF9zdGF0ZSwKKwkJc3RydWN0IGE2eHhfY3Jhc2hkdW1wZXIgKmR1bXBlcikKK3sKKwlpbnQg aTsKKworCWE2eHhfc3RhdGUtPmNsdXN0ZXJzID0ga2NhbGxvYyhBUlJBWV9TSVpFKGE2eHhfY2x1 c3RlcnMpLAorCQlzaXplb2YoKmE2eHhfc3RhdGUtPmNsdXN0ZXJzKSwgR0ZQX0tFUk5FTCk7CisK KwlpZiAoIWE2eHhfc3RhdGUtPmNsdXN0ZXJzKQorCQlyZXR1cm47CisKKwlhNnh4X3N0YXRlLT5u cl9jbHVzdGVycyA9IEFSUkFZX1NJWkUoYTZ4eF9jbHVzdGVycyk7CisKKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShhNnh4X2NsdXN0ZXJzKTsgaSsrKQorCQlhNnh4X2dldF9jbHVzdGVyKGdw dSwgJmE2eHhfY2x1c3RlcnNbaV0sCisJCQkmYTZ4eF9zdGF0ZS0+Y2x1c3RlcnNbaV0sIGR1bXBl cik7Cit9CisKKy8qIFJlYWQgYSBzaGFkZXIgLyBkZWJ1ZyBibG9jayBmcm9tIHRoZSBITFNRIGFw ZXJ0dXJlIHdpdGggdGhlIGNyYXNoZHVtcGVyICovCitzdGF0aWMgdm9pZCBhNnh4X2dldF9zaGFk ZXJfYmxvY2soc3RydWN0IG1zbV9ncHUgKmdwdSwKKwkJY29uc3Qgc3RydWN0IGE2eHhfc2hhZGVy X2Jsb2NrICpibG9jaywKKwkJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqb2JqLAorCQlzdHJ1 Y3QgYTZ4eF9jcmFzaGR1bXBlciAqZHVtcGVyKQoreworCXU2NCAqaW4gPSBkdW1wZXItPnB0cjsK KwlzaXplX3QgZGF0YXNpemUgPSBibG9jay0+c2l6ZSAqIEE2WFhfTlVNX1NIQURFUl9CQU5LUyAq IHNpemVvZih1MzIpOworCWludCBpOworCisJaWYgKFdBUk5fT04oZGF0YXNpemUgPiBBNlhYX0NE X0RBVEFfU0laRSkpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBBNlhYX05VTV9TSEFE RVJfQkFOS1M7IGkrKykgeworCQlpbiArPSBDUkFTSERVTVBfV1JJVEUoaW4sIFJFR19BNlhYX0hM U1FfREJHX1JFQURfU0VMLAorCQkJKGJsb2NrLT50eXBlIDw8IDgpIHwgaSk7CisKKwkJaW4gKz0g Q1JBU0hEVU1QX1JFQUQoaW4sIFJFR19BNlhYX0hMU1FfREJHX0FIQl9SRUFEX0FQRVJUVVJFLAor CQkJYmxvY2stPnNpemUsIGR1bXBlci0+aW92YSArIEE2WFhfQ0RfREFUQV9PRkZTRVQpOworCX0K KworCUNSQVNIRFVNUF9GSU5JKGluKTsKKworCWlmIChhNnh4X2NyYXNoZHVtcGVyX3J1bihncHUs IGR1bXBlcikpCisJCXJldHVybjsKKworCW9iai0+aGFuZGxlID0gYmxvY2s7CisJb2JqLT5kYXRh ID0ga21lbWR1cChkdW1wZXItPnB0ciArIEE2WFhfQ0RfREFUQV9PRkZTRVQsCisJCWRhdGFzaXpl LCBHRlBfS0VSTkVMKTsKK30KKworc3RhdGljIHZvaWQgYTZ4eF9nZXRfc2hhZGVycyhzdHJ1Y3Qg bXNtX2dwdSAqZ3B1LAorCQlzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGUgKmE2eHhfc3RhdGUsCisJCXN0 cnVjdCBhNnh4X2NyYXNoZHVtcGVyICpkdW1wZXIpCit7CisJaW50IGk7CisKKwlhNnh4X3N0YXRl LT5zaGFkZXJzID0ga2NhbGxvYyhBUlJBWV9TSVpFKGE2eHhfc2hhZGVyX2Jsb2NrcyksCisJCXNp emVvZigqYTZ4eF9zdGF0ZS0+c2hhZGVycyksIEdGUF9LRVJORUwpOworCisJaWYgKCFhNnh4X3N0 YXRlLT5zaGFkZXJzKQorCQlyZXR1cm47CisKKwlhNnh4X3N0YXRlLT5ucl9zaGFkZXJzID0gQVJS QVlfU0laRShhNnh4X3NoYWRlcl9ibG9ja3MpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoYTZ4eF9zaGFkZXJfYmxvY2tzKTsgaSsrKQorCQlhNnh4X2dldF9zaGFkZXJfYmxvY2soZ3B1 LCAmYTZ4eF9zaGFkZXJfYmxvY2tzW2ldLAorCQkJJmE2eHhfc3RhdGUtPnNoYWRlcnNbaV0sIGR1 bXBlcik7Cit9CisKKy8qIFJlYWQgcmVnaXN0ZXJzIGZyb20gYmVoaW5kIHRoZSBITFNRIGFwZXJ0 dXJlIHdpdGggdGhlIGNyYXNoZHVtcGVyICovCitzdGF0aWMgdm9pZCBhNnh4X2dldF9jcmFzaGR1 bXBlcl9obHNxX3JlZ2lzdGVycyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1LAorCQljb25zdCBzdHJ1Y3Qg YTZ4eF9yZWdpc3RlcnMgKnJlZ3MsCisJCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZV9vYmogKm9iaiwK KwkJc3RydWN0IGE2eHhfY3Jhc2hkdW1wZXIgKmR1bXBlcikKKworeworCXU2NCAqaW4gPSBkdW1w ZXItPnB0cjsKKwl1NjQgb3V0ID0gZHVtcGVyLT5pb3ZhICsgQTZYWF9DRF9EQVRBX09GRlNFVDsK KwlpbnQgaSwgcmVnY291bnQgPSAwOworCisJaW4gKz0gQ1JBU0hEVU1QX1dSSVRFKGluLCBSRUdf QTZYWF9ITFNRX0RCR19SRUFEX1NFTCwgcmVncy0+dmFsMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwg cmVncy0+Y291bnQ7IGkgKz0gMikgeworCQl1MzIgY291bnQgPSBSQU5HRShyZWdzLT5yZWdpc3Rl cnMsIGkpOworCQl1MzIgb2Zmc2V0ID0gUkVHX0E2WFhfSExTUV9EQkdfQUhCX1JFQURfQVBFUlRV UkUgKworCQkJcmVncy0+cmVnaXN0ZXJzW2ldIC0gKHJlZ3MtPnZhbDAgPj4gMik7CisKKwkJaW4g Kz0gQ1JBU0hEVU1QX1JFQUQoaW4sIG9mZnNldCwgY291bnQsIG91dCk7CisKKwkJb3V0ICs9IGNv dW50ICogc2l6ZW9mKHUzMik7CisJCXJlZ2NvdW50ICs9IGNvdW50OworCX0KKworCUNSQVNIRFVN UF9GSU5JKGluKTsKKworCWlmIChXQVJOX09OKChyZWdjb3VudCAqIHNpemVvZih1MzIpKSA+IEE2 WFhfQ0RfREFUQV9TSVpFKSkKKwkJcmV0dXJuOworCisJaWYgKGE2eHhfY3Jhc2hkdW1wZXJfcnVu KGdwdSwgZHVtcGVyKSkKKwkJcmV0dXJuOworCisJb2JqLT5oYW5kbGUgPSByZWdzOworCW9iai0+ ZGF0YSA9IGttZW1kdXAoZHVtcGVyLT5wdHIgKyBBNlhYX0NEX0RBVEFfT0ZGU0VULAorCQlyZWdj b3VudCAqIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsKK30KKworLyogUmVhZCBhIGJsb2NrIG9m IHJlZ2lzdGVycyB1c2luZyB0aGUgY3Jhc2hkdW1wZXIgKi8KK3N0YXRpYyB2b2lkIGE2eHhfZ2V0 X2NyYXNoZHVtcGVyX3JlZ2lzdGVycyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1LAorCQljb25zdCBzdHJ1 Y3QgYTZ4eF9yZWdpc3RlcnMgKnJlZ3MsCisJCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZV9vYmogKm9i aiwKKwkJc3RydWN0IGE2eHhfY3Jhc2hkdW1wZXIgKmR1bXBlcikKKworeworCXU2NCAqaW4gPSBk dW1wZXItPnB0cjsKKwl1NjQgb3V0ID0gZHVtcGVyLT5pb3ZhICsgQTZYWF9DRF9EQVRBX09GRlNF VDsKKwlpbnQgaSwgcmVnY291bnQgPSAwOworCisJLyogU29tZSBibG9ja3MgbWlnaHQgbmVlZCB0 byBwcm9ncmFtIGEgc2VsZWN0b3IgcmVnaXN0ZXIgZmlyc3QgKi8KKwlpZiAocmVncy0+dmFsMCkK KwkJaW4gKz0gQ1JBU0hEVU1QX1dSSVRFKGluLCByZWdzLT52YWwwLCByZWdzLT52YWwxKTsKKwor CWZvciAoaSA9IDA7IGkgPCByZWdzLT5jb3VudDsgaSArPSAyKSB7CisJCXUzMiBjb3VudCA9IFJB TkdFKHJlZ3MtPnJlZ2lzdGVycywgaSk7CisKKwkJaW4gKz0gQ1JBU0hEVU1QX1JFQUQoaW4sIHJl Z3MtPnJlZ2lzdGVyc1tpXSwgY291bnQsIG91dCk7CisKKwkJb3V0ICs9IGNvdW50ICogc2l6ZW9m KHUzMik7CisJCXJlZ2NvdW50ICs9IGNvdW50OworCX0KKworCUNSQVNIRFVNUF9GSU5JKGluKTsK KworCWlmIChXQVJOX09OKChyZWdjb3VudCAqIHNpemVvZih1MzIpKSA+IEE2WFhfQ0RfREFUQV9T SVpFKSkKKwkJcmV0dXJuOworCisJaWYgKGE2eHhfY3Jhc2hkdW1wZXJfcnVuKGdwdSwgZHVtcGVy KSkKKwkJcmV0dXJuOworCisJb2JqLT5oYW5kbGUgPSByZWdzOworCW9iai0+ZGF0YSA9IGttZW1k dXAoZHVtcGVyLT5wdHIgKyBBNlhYX0NEX0RBVEFfT0ZGU0VULAorCQlyZWdjb3VudCAqIHNpemVv Zih1MzIpLCBHRlBfS0VSTkVMKTsKK30KKworLyogUmVhZCBhIGJsb2NrIG9mIHJlZ2lzdGVycyB2 aWEgQUhCICovCitzdGF0aWMgdm9pZCBhNnh4X2dldF9haGJfZ3B1X3JlZ2lzdGVycyhzdHJ1Y3Qg bXNtX2dwdSAqZ3B1LAorCQljb25zdCBzdHJ1Y3QgYTZ4eF9yZWdpc3RlcnMgKnJlZ3MsCisJCXN0 cnVjdCBhNnh4X2dwdV9zdGF0ZV9vYmogKm9iaikKK3sKKwlpbnQgaSwgcmVnY291bnQgPSAwLCBp bmRleCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVncy0+Y291bnQ7IGkgKz0gMikKKwkJcmVn Y291bnQgKz0gUkFOR0UocmVncy0+cmVnaXN0ZXJzLCBpKTsKKworCW9iai0+aGFuZGxlID0gKGNv bnN0IHZvaWQgKikgcmVnczsKKwlvYmotPmRhdGEgPSBrY2FsbG9jKHJlZ2NvdW50LCBzaXplb2Yo dTMyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvYmotPmRhdGEpCisJCXJldHVybjsKKworCWZvciAo aSA9IDA7IGkgPCByZWdzLT5jb3VudDsgaSArPSAyKSB7CisJCXUzMiBjb3VudCA9IFJBTkdFKHJl Z3MtPnJlZ2lzdGVycywgaSk7CisJCWludCBqOworCisJCWZvciAoaiA9IDA7IGogPCBjb3VudDsg aisrKQorCQkJb2JqLT5kYXRhW2luZGV4KytdID0gZ3B1X3JlYWQoZ3B1LAorCQkJCXJlZ3MtPnJl Z2lzdGVyc1tpXSArIGopOworCX0KK30KKworLyogUmVhZCBhIGJsb2NrIG9mIEdNVSByZWdpc3Rl cnMgKi8KK3N0YXRpYyB2b2lkIF9hNnh4X2dldF9nbXVfcmVnaXN0ZXJzKHN0cnVjdCBtc21fZ3B1 ICpncHUsCisJCWNvbnN0IHN0cnVjdCBhNnh4X3JlZ2lzdGVycyAqcmVncywKKwkJc3RydWN0IGE2 eHhfZ3B1X3N0YXRlX29iaiAqb2JqKQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1 ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19h Nnh4X2dwdShhZHJlbm9fZ3B1KTsKKwlzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSA9ICZhNnh4X2dwdS0+ Z211OworCWludCBpLCByZWdjb3VudCA9IDAsIGluZGV4ID0gMDsKKworCWZvciAoaSA9IDA7IGkg PCByZWdzLT5jb3VudDsgaSArPSAyKQorCQlyZWdjb3VudCArPSBSQU5HRShyZWdzLT5yZWdpc3Rl cnMsIGkpOworCisJb2JqLT5oYW5kbGUgPSAoY29uc3Qgdm9pZCAqKSByZWdzOworCW9iai0+ZGF0 YSA9IGtjYWxsb2MocmVnY291bnQsIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9i ai0+ZGF0YSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHJlZ3MtPmNvdW50OyBpICs9 IDIpIHsKKwkJdTMyIGNvdW50ID0gUkFOR0UocmVncy0+cmVnaXN0ZXJzLCBpKTsKKwkJaW50IGo7 CisKKwkJZm9yIChqID0gMDsgaiA8IGNvdW50OyBqKyspCisJCQlvYmotPmRhdGFbaW5kZXgrK10g PSBnbXVfcmVhZChnbXUsCisJCQkJcmVncy0+cmVnaXN0ZXJzW2ldICsgaik7CisJfQorfQorCitz dGF0aWMgdm9pZCBhNnh4X2dldF9nbXVfcmVnaXN0ZXJzKHN0cnVjdCBtc21fZ3B1ICpncHUsCisJ CXN0cnVjdCBhNnh4X2dwdV9zdGF0ZSAqYTZ4eF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgYWRyZW5vX2dw dSAqYWRyZW5vX2dwdSA9IHRvX2FkcmVub19ncHUoZ3B1KTsKKwlzdHJ1Y3QgYTZ4eF9ncHUgKmE2 eHhfZ3B1ID0gdG9fYTZ4eF9ncHUoYWRyZW5vX2dwdSk7CisKKwlhNnh4X3N0YXRlLT5nbXVfcmVn aXN0ZXJzID0ga2NhbGxvYygyLAorCQlzaXplb2YoKmE2eHhfc3RhdGUtPmdtdV9yZWdpc3RlcnMp LCBHRlBfS0VSTkVMKTsKKworCWlmICghYTZ4eF9zdGF0ZS0+Z211X3JlZ2lzdGVycykKKwkJcmV0 dXJuOworCisJYTZ4eF9zdGF0ZS0+bnJfZ211X3JlZ2lzdGVycyA9IDI7CisKKwkvKiBHZXQgdGhl IENYIEdNVSByZWdpc3RlcnMgZnJvbSBBSEIgKi8KKwlfYTZ4eF9nZXRfZ211X3JlZ2lzdGVycyhn cHUsICZhNnh4X2dtdV9yZWdsaXN0WzBdLAorCQkmYTZ4eF9zdGF0ZS0+Z211X3JlZ2lzdGVyc1sw XSk7CisKKwlpZiAoIWE2eHhfZ211X2d4X2lzX29uKCZhNnh4X2dwdS0+Z211KSkKKwkJcmV0dXJu OworCisJLyogU2V0IHRoZSBmZW5jZSB0byBBTExPVyBtb2RlIHNvIHdlIGNhbiBhY2Nlc3MgdGhl IHJlZ2lzdGVycyAqLworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0dNVV9BT19BSEJfRkVOQ0Vf Q1RSTCwgMCk7CisKKwlfYTZ4eF9nZXRfZ211X3JlZ2lzdGVycyhncHUsICZhNnh4X2dtdV9yZWds aXN0WzFdLAorCQkmYTZ4eF9zdGF0ZS0+Z211X3JlZ2lzdGVyc1sxXSk7Cit9CisKK3N0YXRpYyB2 b2lkIGE2eHhfZ2V0X3JlZ2lzdGVycyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1LAorCQlzdHJ1Y3QgYTZ4 eF9ncHVfc3RhdGUgKmE2eHhfc3RhdGUsCisJCXN0cnVjdCBhNnh4X2NyYXNoZHVtcGVyICpkdW1w ZXIpCit7CisJaW50IGksIGNvdW50ID0gQVJSQVlfU0laRShhNnh4X2FoYl9yZWdsaXN0KSArCisJ CUFSUkFZX1NJWkUoYTZ4eF9yZWdsaXN0KSArCisJCUFSUkFZX1NJWkUoYTZ4eF9obHNxX3JlZ2xp c3QpOworCWludCBpbmRleCA9IDA7CisKKwlhNnh4X3N0YXRlLT5yZWdpc3RlcnMgPSBrY2FsbG9j KGNvdW50LCBzaXplb2YoKmE2eHhfc3RhdGUtPnJlZ2lzdGVycyksCisJCUdGUF9LRVJORUwpOwor CisJaWYgKCFhNnh4X3N0YXRlLT5yZWdpc3RlcnMpCisJCXJldHVybjsKKworCWE2eHhfc3RhdGUt Pm5yX3JlZ2lzdGVycyA9IGNvdW50OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYTZ4 eF9haGJfcmVnbGlzdCk7IGkrKykKKwkJYTZ4eF9nZXRfYWhiX2dwdV9yZWdpc3RlcnMoZ3B1LAor CQkJJmE2eHhfYWhiX3JlZ2xpc3RbaV0sCisJCQkmYTZ4eF9zdGF0ZS0+cmVnaXN0ZXJzW2luZGV4 KytdKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGE2eHhfcmVnbGlzdCk7IGkrKykK KwkJYTZ4eF9nZXRfY3Jhc2hkdW1wZXJfcmVnaXN0ZXJzKGdwdSwKKwkJCSZhNnh4X3JlZ2xpc3Rb aV0sCisJCQkmYTZ4eF9zdGF0ZS0+cmVnaXN0ZXJzW2luZGV4KytdLAorCQkJZHVtcGVyKTsKKwor CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGE2eHhfaGxzcV9yZWdsaXN0KTsgaSsrKQorCQlh Nnh4X2dldF9jcmFzaGR1bXBlcl9obHNxX3JlZ2lzdGVycyhncHUsCisJCQkmYTZ4eF9obHNxX3Jl Z2xpc3RbaV0sCisJCQkmYTZ4eF9zdGF0ZS0+cmVnaXN0ZXJzW2luZGV4KytdLAorCQkJZHVtcGVy KTsKK30KKworLyogUmVhZCBhIGJsb2NrIG9mIGRhdGEgZnJvbSBhbiBpbmRleGVkIHJlZ2lzdGVy IHBhaXIgKi8KK3N0YXRpYyB2b2lkIGE2eHhfZ2V0X2luZGV4ZWRfcmVncyhzdHJ1Y3QgbXNtX2dw dSAqZ3B1LAorCQljb25zdCBzdHJ1Y3QgYTZ4eF9pbmRleGVkX3JlZ2lzdGVycyAqaW5kZXhlZCwK KwkJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqb2JqKQoreworCWludCBpOworCisJb2JqLT5o YW5kbGUgPSAoY29uc3Qgdm9pZCAqKSBpbmRleGVkOworCW9iai0+ZGF0YSA9IGtjYWxsb2MoaW5k ZXhlZC0+Y291bnQsIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9iai0+ZGF0YSkK KwkJcmV0dXJuOworCisJLyogQWxsIHRoZSBpbmRleGVkIGJhbmtzIHN0YXJ0IGF0IGFkZHJlc3Mg MCAqLworCWdwdV93cml0ZShncHUsIGluZGV4ZWQtPmFkZHIsIDApOworCisJLyogUmVhZCB0aGUg ZGF0YSAtIGVhY2ggcmVhZCBpbmNyZW1lbnRzIHRoZSBpbnRlcm5hbCBhZGRyZXNzIGJ5IDEgKi8K Kwlmb3IgKGkgPSAwOyBpIDwgaW5kZXhlZC0+Y291bnQ7IGkrKykKKwkJb2JqLT5kYXRhW2ldID0g Z3B1X3JlYWQoZ3B1LCBpbmRleGVkLT5kYXRhKTsKK30KKworc3RhdGljIHZvaWQgYTZ4eF9nZXRf aW5kZXhlZF9yZWdpc3RlcnMoc3RydWN0IG1zbV9ncHUgKmdwdSwKKwkJc3RydWN0IGE2eHhfZ3B1 X3N0YXRlICphNnh4X3N0YXRlKQoreworCXUzMiBtZW1wb29sX3NpemU7CisJaW50IGNvdW50ID0g QVJSQVlfU0laRShhNnh4X2luZGV4ZWRfcmVnbGlzdCkgKyAxOworCWludCBpOworCisJYTZ4eF9z dGF0ZS0+aW5kZXhlZF9yZWdzID0ga2NhbGxvYyhjb3VudCwKKwkJc2l6ZW9mKGE2eHhfc3RhdGUt PmluZGV4ZWRfcmVncyksIEdGUF9LRVJORUwpOworCWlmICghYTZ4eF9zdGF0ZS0+aW5kZXhlZF9y ZWdzKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhNnh4X2luZGV4 ZWRfcmVnbGlzdCk7IGkrKykKKwkJYTZ4eF9nZXRfaW5kZXhlZF9yZWdzKGdwdSwgJmE2eHhfaW5k ZXhlZF9yZWdsaXN0W2ldLAorCQkJJmE2eHhfc3RhdGUtPmluZGV4ZWRfcmVnc1tpXSk7CisKKwkv KiBTZXQgdGhlIENQIG1lbXBvb2wgc2l6ZSB0byAwIHRvIHN0YWJpbGl6ZSBpdCB3aGlsZSBkdW1w aW5nICovCisJbWVtcG9vbF9zaXplID0gZ3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9DUF9NRU1fUE9P TF9TSVpFKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9NRU1fUE9PTF9TSVpFLCAwKTsK KworCS8qIEdldCB0aGUgY29udGVudHMgb2YgdGhlIENQIG1lbXBvb2wgKi8KKwlhNnh4X2dldF9p bmRleGVkX3JlZ3MoZ3B1LCAmYTZ4eF9jcF9tZW1wb29sX2luZGV4ZWQsCisJCSZhNnh4X3N0YXRl LT5pbmRleGVkX3JlZ3NbaV0pOworCisJLyoKKwkgKiBPZmZzZXQgMHgyMDAwIGluIHRoZSBtZW1w b29sIGlzIHRoZSBzaXplIC0gY29weSB0aGUgc2F2ZWQgc2l6ZSBvdmVyCisJICogc28gdGhlIGRh dGEgaXMgY29uc2lzdGVudAorCSAqLworCWE2eHhfc3RhdGUtPmluZGV4ZWRfcmVnc1tpXS5kYXRh WzB4MjAwMF0gPSBtZW1wb29sX3NpemU7CisKKwkvKiBSZXN0b3JlIHRoZSBzaXplIGluIHRoZSBo YXJkd2FyZSAqLworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX01FTV9QT09MX1NJWkUsIG1l bXBvb2xfc2l6ZSk7CisKKwlhNnh4X3N0YXRlLT5ucl9pbmRleGVkX3JlZ3MgPSBjb3VudDsKK30K Kworc3RydWN0IG1zbV9ncHVfc3RhdGUgKmE2eHhfZ3B1X3N0YXRlX2dldChzdHJ1Y3QgbXNtX2dw dSAqZ3B1KQoreworCXN0cnVjdCBhNnh4X2NyYXNoZHVtcGVyIGR1bXBlciA9IHsgMCB9OworCXN0 cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVj dCBhNnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19hNnh4X2dwdShhZHJlbm9fZ3B1KTsKKwlzdHJ1Y3Qg YTZ4eF9ncHVfc3RhdGUgKmE2eHhfc3RhdGUgPSBremFsbG9jKHNpemVvZigqYTZ4eF9zdGF0ZSks CisJCUdGUF9LRVJORUwpOworCisJaWYgKCFhNnh4X3N0YXRlKQorCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKKworCS8qIEdldCB0aGUgZ2VuZXJpYyBzdGF0ZSBmcm9tIHRoZSBhZHJlbm8gY29y ZSAqLworCWFkcmVub19ncHVfc3RhdGVfZ2V0KGdwdSwgJmE2eHhfc3RhdGUtPmJhc2UpOworCisJ YTZ4eF9nZXRfZ211X3JlZ2lzdGVycyhncHUsIGE2eHhfc3RhdGUpOworCisJLyogSWYgR1ggaXNu J3Qgb24gdGhlIHJlc3Qgb2YgdGhlIGRhdGEgaXNuJ3QgZ29pbmcgdG8gYmUgYWNjZXNzaWJsZSAq LworCWlmICghYTZ4eF9nbXVfZ3hfaXNfb24oJmE2eHhfZ3B1LT5nbXUpKQorCQlyZXR1cm4gJmE2 eHhfc3RhdGUtPmJhc2U7CisKKwkvKiBHZXQgdGhlIGJhbmtzIG9mIGluZGV4ZWQgcmVnaXN0ZXJz ICovCisJYTZ4eF9nZXRfaW5kZXhlZF9yZWdpc3RlcnMoZ3B1LCBhNnh4X3N0YXRlKTsKKworCS8q IFRyeSB0byBpbml0aWFsaXplIHRoZSBjcmFzaGR1bXBlciAqLworCWlmICghYTZ4eF9jcmFzaGR1 bXBlcl9pbml0KGdwdSwgJmR1bXBlcikpIHsKKwkJYTZ4eF9nZXRfcmVnaXN0ZXJzKGdwdSwgYTZ4 eF9zdGF0ZSwgJmR1bXBlcik7CisJCWE2eHhfZ2V0X3NoYWRlcnMoZ3B1LCBhNnh4X3N0YXRlLCAm ZHVtcGVyKTsKKwkJYTZ4eF9nZXRfY2x1c3RlcnMoZ3B1LCBhNnh4X3N0YXRlLCAmZHVtcGVyKTsK KwkJYTZ4eF9nZXRfZGJnYWhiX2NsdXN0ZXJzKGdwdSwgYTZ4eF9zdGF0ZSwgJmR1bXBlcik7CisK KwkJYTZ4eF9jcmFzaGR1bXBlcl9mcmVlKGdwdSwgJmR1bXBlcik7CisJfQorCisJYTZ4eF9nZXRf ZGVidWdidXMoZ3B1LCBhNnh4X3N0YXRlKTsKKworCXJldHVybiAgJmE2eHhfc3RhdGUtPmJhc2U7 Cit9CisKK3ZvaWQgYTZ4eF9ncHVfc3RhdGVfZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sK KwlzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGUgPSBjb250YWluZXJfb2Yoa3JlZiwKKwkJCXN0 cnVjdCBtc21fZ3B1X3N0YXRlLCByZWYpOworCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZSAqYTZ4eF9z dGF0ZSA9IGNvbnRhaW5lcl9vZihzdGF0ZSwKKwkJCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZSwgYmFz ZSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYTZ4eF9zdGF0ZS0+bnJfZ211X3JlZ2lz dGVyczsgaSsrKQorCQlrZnJlZShhNnh4X3N0YXRlLT5nbXVfcmVnaXN0ZXJzW2ldLmRhdGEpOwor CisJa2ZyZWUoYTZ4eF9zdGF0ZS0+Z211X3JlZ2lzdGVycyk7CisKKwlmb3IgKGkgPSAwOyBpIDwg YTZ4eF9zdGF0ZS0+bnJfcmVnaXN0ZXJzOyBpKyspCisJCWtmcmVlKGE2eHhfc3RhdGUtPnJlZ2lz dGVyc1tpXS5kYXRhKTsKKworCWtmcmVlKGE2eHhfc3RhdGUtPnJlZ2lzdGVycyk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgYTZ4eF9zdGF0ZS0+bnJfc2hhZGVyczsgaSsrKQorCQlrZnJlZShhNnh4X3N0 YXRlLT5zaGFkZXJzW2ldLmRhdGEpOworCisJa2ZyZWUoYTZ4eF9zdGF0ZS0+c2hhZGVycyk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgYTZ4eF9zdGF0ZS0+bnJfY2x1c3RlcnM7IGkrKykKKwkJa2ZyZWUo YTZ4eF9zdGF0ZS0+Y2x1c3RlcnNbaV0uZGF0YSk7CisKKwlrZnJlZShhNnh4X3N0YXRlLT5jbHVz dGVycyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYTZ4eF9zdGF0ZS0+bnJfZGJnYWhiX2NsdXN0ZXJz OyBpKyspCisJCWtmcmVlKGE2eHhfc3RhdGUtPmRiZ2FoYl9jbHVzdGVyc1tpXS5kYXRhKTsKKwor CWtmcmVlKGE2eHhfc3RhdGUtPmRiZ2FoYl9jbHVzdGVycyk7CisKKwlmb3IgKGkgPSAwOyBpIDwg YTZ4eF9zdGF0ZS0+bnJfaW5kZXhlZF9yZWdzOyBpKyspCisJCWtmcmVlKGE2eHhfc3RhdGUtPmlu ZGV4ZWRfcmVnc1tpXS5kYXRhKTsKKworCWtmcmVlKGE2eHhfc3RhdGUtPmluZGV4ZWRfcmVncyk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgYTZ4eF9zdGF0ZS0+bnJfZGVidWdidXM7IGkrKykKKwkJa2Zy ZWUoYTZ4eF9zdGF0ZS0+ZGVidWdidXNbaV0uZGF0YSk7CisKKwlrZnJlZShhNnh4X3N0YXRlLT5k ZWJ1Z2J1cyk7CisKKwlpZiAoYTZ4eF9zdGF0ZS0+dmJpZl9kZWJ1Z2J1cykKKwkJa2ZyZWUoYTZ4 eF9zdGF0ZS0+dmJpZl9kZWJ1Z2J1cy0+ZGF0YSk7CisKKwlrZnJlZShhNnh4X3N0YXRlLT52Ymlm X2RlYnVnYnVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBhNnh4X3N0YXRlLT5ucl9jeF9kZWJ1Z2J1 czsgaSsrKQorCQlrZnJlZShhNnh4X3N0YXRlLT5jeF9kZWJ1Z2J1c1tpXS5kYXRhKTsKKworCWtm cmVlKGE2eHhfc3RhdGUtPmN4X2RlYnVnYnVzKTsKKworCWFkcmVub19ncHVfc3RhdGVfZGVzdHJv eShzdGF0ZSk7CisJa2ZyZWUoYTZ4eF9zdGF0ZSk7Cit9CisKK2ludCBhNnh4X2dwdV9zdGF0ZV9w dXQoc3RydWN0IG1zbV9ncHVfc3RhdGUgKnN0YXRlKQoreworCWlmIChJU19FUlJfT1JfTlVMTChz dGF0ZSkpCisJCXJldHVybiAxOworCisJcmV0dXJuIGtyZWZfcHV0KCZzdGF0ZS0+cmVmLCBhNnh4 X2dwdV9zdGF0ZV9kZXN0cm95KTsKK30KKworc3RhdGljIHZvaWQgYTZ4eF9zaG93X3JlZ2lzdGVy cyhjb25zdCB1MzIgKnJlZ2lzdGVycywgdTMyICpkYXRhLCBzaXplX3QgY291bnQsCisJCXN0cnVj dCBkcm1fcHJpbnRlciAqcCkKK3sKKwlpbnQgaSwgaW5kZXggPSAwOworCisJaWYgKCFkYXRhKQor CQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkgKz0gMikgeworCQl1MzIgY291 bnQgPSBSQU5HRShyZWdpc3RlcnMsIGkpOworCQl1MzIgb2Zmc2V0ID0gcmVnaXN0ZXJzW2ldOwor CQlpbnQgajsKKworCQlmb3IgKGogPSAwOyBqIDwgY291bnQ7IGluZGV4KyssIG9mZnNldCsrLCBq KyspIHsKKwkJCWlmIChkYXRhW2luZGV4XSA9PSAweGRlYWZiZWFkKQorCQkJCWNvbnRpbnVlOwor CisJCQlkcm1fcHJpbnRmKHAsICIgIC0geyBvZmZzZXQ6IDB4JTA2eCwgdmFsdWU6IDB4JTA4eCB9 XG4iLAorCQkJCW9mZnNldCA8PCAyLCBkYXRhW2luZGV4XSk7CisJCX0KKwl9Cit9CisKK3N0YXRp YyB2b2lkIHByaW50X2FzY2lpODUoc3RydWN0IGRybV9wcmludGVyICpwLCBzaXplX3QgbGVuLCB1 MzIgKmRhdGEpCit7CisJY2hhciBvdXRbQVNDSUk4NV9CVUZTWl07CisJbG9uZyBpLCBsLCBkYXRh bGVuID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBsZW4gPj4gMjsgaSsrKSB7CisJCWlmIChkYXRh W2ldKQorCQkJZGF0YWxlbiA9IChpICsgMSkgPDwgMjsKKwl9CisKKwlpZiAoZGF0YWxlbiA9PSAw KQorCQlyZXR1cm47CisKKwlkcm1fcHV0cyhwLCAiICAgIGRhdGE6ICEhYXNjaWk4NSB8XG4iKTsK Kwlkcm1fcHV0cyhwLCAiICAgICAgIik7CisKKworCWwgPSBhc2NpaTg1X2VuY29kZV9sZW4oZGF0 YWxlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKQorCQlkcm1fcHV0cyhwLCBhc2NpaTg1 X2VuY29kZShkYXRhW2ldLCBvdXQpKTsKKworCWRybV9wdXRzKHAsICJcbiIpOworfQorCitzdGF0 aWMgdm9pZCBwcmludF9uYW1lKHN0cnVjdCBkcm1fcHJpbnRlciAqcCwgY29uc3QgY2hhciAqZm10 LCBjb25zdCBjaGFyICpuYW1lKQoreworCWRybV9wdXRzKHAsIGZtdCk7CisJZHJtX3B1dHMocCwg bmFtZSk7CisJZHJtX3B1dHMocCwgIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfc2hvd19z aGFkZXIoc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqb2JqLAorCQlzdHJ1Y3QgZHJtX3ByaW50 ZXIgKnApCit7CisJY29uc3Qgc3RydWN0IGE2eHhfc2hhZGVyX2Jsb2NrICpibG9jayA9IG9iai0+ aGFuZGxlOworCWludCBpOworCisJaWYgKCFvYmotPmhhbmRsZSkKKwkJcmV0dXJuOworCisJcHJp bnRfbmFtZShwLCAiICAtIHR5cGU6ICIsIGJsb2NrLT5uYW1lKTsKKworCWZvciAoaSA9IDA7IGkg PCBBNlhYX05VTV9TSEFERVJfQkFOS1M7IGkrKykgeworCQlkcm1fcHJpbnRmKHAsICIgICAgLSBi YW5rOiAlZFxuIiwgaSk7CisJCWRybV9wcmludGYocCwgIiAgICAgIHNpemU6ICVkXG4iLCBibG9j ay0+c2l6ZSk7CisKKwkJaWYgKCFvYmotPmRhdGEpCisJCQljb250aW51ZTsKKworCQlwcmludF9h c2NpaTg1KHAsIGJsb2NrLT5zaXplIDw8IDIsCisJCQlvYmotPmRhdGEgKyAoYmxvY2stPnNpemUg KiBpKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhNnh4X3Nob3dfY2x1c3Rlcl9kYXRhKGNvbnN0 IHUzMiAqcmVnaXN0ZXJzLCBpbnQgc2l6ZSwgdTMyICpkYXRhLAorCQlzdHJ1Y3QgZHJtX3ByaW50 ZXIgKnApCit7CisJaW50IGN0eCwgaW5kZXggPSAwOworCisJZm9yIChjdHggPSAwOyBjdHggPCBB NlhYX05VTV9DT05URVhUUzsgY3R4KyspIHsKKwkJaW50IGo7CisKKwkJZHJtX3ByaW50ZihwLCAi ICAgIC0gY29udGV4dDogJWRcbiIsIGN0eCk7CisKKwkJZm9yIChqID0gMDsgaiA8IHNpemU7IGog Kz0gMikgeworCQkJdTMyIGNvdW50ID0gUkFOR0UocmVnaXN0ZXJzLCBqKTsKKwkJCXUzMiBvZmZz ZXQgPSByZWdpc3RlcnNbal07CisJCQlpbnQgazsKKworCQkJZm9yIChrID0gMDsgayA8IGNvdW50 OyBpbmRleCsrLCBvZmZzZXQrKywgaysrKSB7CisJCQkJaWYgKGRhdGFbaW5kZXhdID09IDB4ZGVh ZmJlYWQpCisJCQkJCWNvbnRpbnVlOworCisJCQkJZHJtX3ByaW50ZihwLCAiICAgICAgLSB7IG9m ZnNldDogMHglMDZ4LCB2YWx1ZTogMHglMDh4IH1cbiIsCisJCQkJCW9mZnNldCA8PCAyLCBkYXRh W2luZGV4XSk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfc2hvd19kYmdh aGJfY2x1c3RlcihzdHJ1Y3QgYTZ4eF9ncHVfc3RhdGVfb2JqICpvYmosCisJCXN0cnVjdCBkcm1f cHJpbnRlciAqcCkKK3sKKwljb25zdCBzdHJ1Y3QgYTZ4eF9kYmdhaGJfY2x1c3RlciAqZGJnYWhi ID0gb2JqLT5oYW5kbGU7CisKKwlpZiAoZGJnYWhiKSB7CisJCXByaW50X25hbWUocCwgIiAgLSBj bHVzdGVyLW5hbWU6ICIsIGRiZ2FoYi0+bmFtZSk7CisJCWE2eHhfc2hvd19jbHVzdGVyX2RhdGEo ZGJnYWhiLT5yZWdpc3RlcnMsIGRiZ2FoYi0+Y291bnQsCisJCQlvYmotPmRhdGEsIHApOworCX0K K30KKworc3RhdGljIHZvaWQgYTZ4eF9zaG93X2NsdXN0ZXIoc3RydWN0IGE2eHhfZ3B1X3N0YXRl X29iaiAqb2JqLAorCQlzdHJ1Y3QgZHJtX3ByaW50ZXIgKnApCit7CisJY29uc3Qgc3RydWN0IGE2 eHhfY2x1c3RlciAqY2x1c3RlciA9IG9iai0+aGFuZGxlOworCisJaWYgKGNsdXN0ZXIpIHsKKwkJ cHJpbnRfbmFtZShwLCAiICAtIGNsdXN0ZXItbmFtZTogIiwgY2x1c3Rlci0+bmFtZSk7CisJCWE2 eHhfc2hvd19jbHVzdGVyX2RhdGEoY2x1c3Rlci0+cmVnaXN0ZXJzLCBjbHVzdGVyLT5jb3VudCwK KwkJCW9iai0+ZGF0YSwgcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhNnh4X3Nob3dfaW5kZXhl ZF9yZWdzKHN0cnVjdCBhNnh4X2dwdV9zdGF0ZV9vYmogKm9iaiwKKwkJc3RydWN0IGRybV9wcmlu dGVyICpwKQoreworCWNvbnN0IHN0cnVjdCBhNnh4X2luZGV4ZWRfcmVnaXN0ZXJzICppbmRleGVk ID0gb2JqLT5oYW5kbGU7CisKKwlpZiAoIWluZGV4ZWQpCisJCXJldHVybjsKKworCXByaW50X25h bWUocCwgIiAgLSByZWdzLW5hbWU6ICIsIGluZGV4ZWQtPm5hbWUpOworCWRybV9wcmludGYocCwg IiAgICBkd29yZHM6ICVkXG4iLCBpbmRleGVkLT5jb3VudCk7CisKKwlwcmludF9hc2NpaTg1KHAs IGluZGV4ZWQtPmNvdW50IDw8IDIsIG9iai0+ZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhf c2hvd19kZWJ1Z2J1c19ibG9jayhjb25zdCBzdHJ1Y3QgYTZ4eF9kZWJ1Z2J1c19ibG9jayAqYmxv Y2ssCisJCXUzMiAqZGF0YSwgc3RydWN0IGRybV9wcmludGVyICpwKQoreworCWlmIChibG9jaykg eworCQlwcmludF9uYW1lKHAsICIgIC0gZGVidWdidXMtYmxvY2s6ICIsIGJsb2NrLT5uYW1lKTsK KworCQkvKgorCQkgKiBjb3VudCBmb3IgcmVndWxhciBkZWJ1Z2J1cyBkYXRhIGlzIGluIHF1YWR3 b3JkcywKKwkJICogYnV0IHByaW50IHRoZSBzaXplIGluIGR3b3JkcyBmb3IgY29uc2lzdGVuY3kK KwkJICovCisJCWRybV9wcmludGYocCwgIiAgICBjb3VudDogJWRcbiIsIGJsb2NrLT5jb3VudCA8 PCAxKTsKKworCQlwcmludF9hc2NpaTg1KHAsIGJsb2NrLT5jb3VudCA8PCAzLCBkYXRhKTsKKwl9 Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfc2hvd19kZWJ1Z2J1cyhzdHJ1Y3QgYTZ4eF9ncHVfc3Rh dGUgKmE2eHhfc3RhdGUsCisJCXN0cnVjdCBkcm1fcHJpbnRlciAqcCkKK3sKKwlpbnQgaTsKKwor CWZvciAoaSA9IDA7IGkgPCBhNnh4X3N0YXRlLT5ucl9kZWJ1Z2J1czsgaSsrKSB7CisJCXN0cnVj dCBhNnh4X2dwdV9zdGF0ZV9vYmogKm9iaiA9ICZhNnh4X3N0YXRlLT5kZWJ1Z2J1c1tpXTsKKwor CQlhNnh4X3Nob3dfZGVidWdidXNfYmxvY2sob2JqLT5oYW5kbGUsIG9iai0+ZGF0YSwgcCk7CisJ fQorCisJaWYgKGE2eHhfc3RhdGUtPnZiaWZfZGVidWdidXMpIHsKKwkJc3RydWN0IGE2eHhfZ3B1 X3N0YXRlX29iaiAqb2JqID0gYTZ4eF9zdGF0ZS0+dmJpZl9kZWJ1Z2J1czsKKworCQlkcm1fcHV0 cyhwLCAiICAtIGRlYnVnYnVzLWJsb2NrOiBBNlhYX0RCR0JVU19WQklGXG4iKTsKKwkJZHJtX3By aW50ZihwLCAiICAgIGNvdW50OiAlZFxuIiwgVkJJRl9ERUJVR0JVU19CTE9DS19TSVpFKTsKKwor CQkvKiB2YmlmIGRlYnVnYnVzIGRhdGEgaXMgaW4gZHdvcmRzLiAgQ29uZnVzaW5nLCBodWg/ICov CisJCXByaW50X2FzY2lpODUocCwgVkJJRl9ERUJVR0JVU19CTE9DS19TSVpFIDw8IDIsIG9iai0+ ZGF0YSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGE2eHhfc3RhdGUtPm5yX2N4X2RlYnVnYnVz OyBpKyspIHsKKwkJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqb2JqID0gJmE2eHhfc3RhdGUt PmN4X2RlYnVnYnVzW2ldOworCisJCWE2eHhfc2hvd19kZWJ1Z2J1c19ibG9jayhvYmotPmhhbmRs ZSwgb2JqLT5kYXRhLCBwKTsKKwl9Cit9CisKK3ZvaWQgYTZ4eF9zaG93KHN0cnVjdCBtc21fZ3B1 ICpncHUsIHN0cnVjdCBtc21fZ3B1X3N0YXRlICpzdGF0ZSwKKwkJc3RydWN0IGRybV9wcmludGVy ICpwKQoreworCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZSAqYTZ4eF9zdGF0ZSA9IGNvbnRhaW5lcl9v ZihzdGF0ZSwKKwkJCXN0cnVjdCBhNnh4X2dwdV9zdGF0ZSwgYmFzZSk7CisJaW50IGk7CisKKwlp ZiAoSVNfRVJSX09SX05VTEwoc3RhdGUpKQorCQlyZXR1cm47CisKKwlhZHJlbm9fc2hvdyhncHUs IHN0YXRlLCBwKTsKKworCWRybV9wdXRzKHAsICJyZWdpc3RlcnM6XG4iKTsKKwlmb3IgKGkgPSAw OyBpIDwgYTZ4eF9zdGF0ZS0+bnJfcmVnaXN0ZXJzOyBpKyspIHsKKwkJc3RydWN0IGE2eHhfZ3B1 X3N0YXRlX29iaiAqb2JqID0gJmE2eHhfc3RhdGUtPnJlZ2lzdGVyc1tpXTsKKwkJY29uc3Qgc3Ry dWN0IGE2eHhfcmVnaXN0ZXJzICpyZWdzID0gb2JqLT5oYW5kbGU7CisKKwkJaWYgKCFvYmotPmhh bmRsZSkKKwkJCWNvbnRpbnVlOworCisJCWE2eHhfc2hvd19yZWdpc3RlcnMocmVncy0+cmVnaXN0 ZXJzLCBvYmotPmRhdGEsIHJlZ3MtPmNvdW50LCBwKTsKKwl9CisKKwlkcm1fcHV0cyhwLCAicmVn aXN0ZXJzLWdtdTpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBhNnh4X3N0YXRlLT5ucl9nbXVfcmVn aXN0ZXJzOyBpKyspIHsKKwkJc3RydWN0IGE2eHhfZ3B1X3N0YXRlX29iaiAqb2JqID0gJmE2eHhf c3RhdGUtPmdtdV9yZWdpc3RlcnNbaV07CisJCWNvbnN0IHN0cnVjdCBhNnh4X3JlZ2lzdGVycyAq cmVncyA9IG9iai0+aGFuZGxlOworCisJCWlmICghb2JqLT5oYW5kbGUpCisJCQljb250aW51ZTsK KworCQlhNnh4X3Nob3dfcmVnaXN0ZXJzKHJlZ3MtPnJlZ2lzdGVycywgb2JqLT5kYXRhLCByZWdz LT5jb3VudCwgcCk7CisJfQorCisJZHJtX3B1dHMocCwgImluZGV4ZWQtcmVnaXN0ZXJzOlxuIik7 CisJZm9yIChpID0gMDsgaSA8IGE2eHhfc3RhdGUtPm5yX2luZGV4ZWRfcmVnczsgaSsrKQorCQlh Nnh4X3Nob3dfaW5kZXhlZF9yZWdzKCZhNnh4X3N0YXRlLT5pbmRleGVkX3JlZ3NbaV0sIHApOwor CisJZHJtX3B1dHMocCwgInNoYWRlci1ibG9ja3M6XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgYTZ4 eF9zdGF0ZS0+bnJfc2hhZGVyczsgaSsrKQorCQlhNnh4X3Nob3dfc2hhZGVyKCZhNnh4X3N0YXRl LT5zaGFkZXJzW2ldLCBwKTsKKworCWRybV9wdXRzKHAsICJjbHVzdGVyczpcbiIpOworCWZvciAo aSA9IDA7IGkgPCBhNnh4X3N0YXRlLT5ucl9jbHVzdGVyczsgaSsrKQorCQlhNnh4X3Nob3dfY2x1 c3RlcigmYTZ4eF9zdGF0ZS0+Y2x1c3RlcnNbaV0sIHApOworCisJZm9yIChpID0gMDsgaSA8IGE2 eHhfc3RhdGUtPm5yX2RiZ2FoYl9jbHVzdGVyczsgaSsrKQorCQlhNnh4X3Nob3dfZGJnYWhiX2Ns dXN0ZXIoJmE2eHhfc3RhdGUtPmRiZ2FoYl9jbHVzdGVyc1tpXSwgcCk7CisKKwlkcm1fcHV0cyhw LCAiZGVidWdidXM6XG4iKTsKKwlhNnh4X3Nob3dfZGVidWdidXMoYTZ4eF9zdGF0ZSwgcCk7Cit9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdV9zdGF0ZS5o IGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHVfc3RhdGUuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY4Y2NjZmEyODcwYQotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1X3N0YXRlLmgKQEAgLTAs MCArMSw0MzAgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKiBDb3B5 cmlnaHQgKGMpIDIwMTggVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu ICovCisKKyNpZm5kZWYgX0E2WFhfQ1JBU0hfRFVNUF9IXworI2RlZmluZSBfQTZYWF9DUkFTSF9E VU1QX0hfCisKKyNpbmNsdWRlICJhNnh4LnhtbC5oIgorCisjZGVmaW5lIEE2WFhfTlVNX0NPTlRF WFRTIDIKKyNkZWZpbmUgQTZYWF9OVU1fU0hBREVSX0JBTktTIDMKKworc3RhdGljIGNvbnN0IHUz MiBhNnh4X2dyYXNfY2x1c3RlcltdID0geworCTB4ODAwMCwgMHg4MDA2LCAweDgwMTAsIDB4ODA5 MiwgMHg4MDk0LCAweDgwOWQsIDB4ODBhMCwgMHg4MGE2LAorCTB4ODBhZiwgMHg4MGYxLCAweDgx MDAsIDB4ODEwNywgMHg4MTA5LCAweDgxMDksIDB4ODExMCwgMHg4MTEwLAorCTB4ODQwMCwgMHg4 NDBiLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3BzX2NsdXN0ZXJfcmFjW10gPSB7CisJ MHg4ODAwLCAweDg4MDYsIDB4ODgwOSwgMHg4ODExLCAweDg4MTgsIDB4ODgxZSwgMHg4ODIwLCAw eDg4NjUsCisJMHg4ODcwLCAweDg4NzksIDB4ODg4MCwgMHg4ODg5LCAweDg4OTAsIDB4ODg5MSwg MHg4ODk4LCAweDg4OTgsCisJMHg4OGMwLCAweDg4YzEsIDB4ODhkMCwgMHg4OGUzLCAweDg5MDAs IDB4ODkwYywgMHg4OTBmLCAweDg5MWEsCisJMHg4YzAwLCAweDhjMDEsIDB4OGMwOCwgMHg4YzEw LCAweDhjMTcsIDB4OGMxZiwgMHg4YzI2LCAweDhjMzMsCit9OworCitzdGF0aWMgY29uc3QgdTMy IGE2eHhfcHNfY2x1c3Rlcl9yYnBbXSA9IHsKKwkweDg4ZjAsIDB4ODhmMywgMHg4OTBkLCAweDg5 MGUsIDB4ODkyNywgMHg4OTI4LCAweDhiZjAsIDB4OGJmMSwKKwkweDhjMDIsIDB4OGMwNywgMHg4 YzExLCAweDhjMTYsIDB4OGMyMCwgMHg4YzI1LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4 X3BzX2NsdXN0ZXJbXSA9IHsKKwkweDkyMDAsIDB4OTIxNiwgMHg5MjE4LCAweDkyMzYsIDB4OTMw MCwgMHg5MzA2LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X2ZlX2NsdXN0ZXJbXSA9IHsK KwkweDkzMDAsIDB4OTMwNiwgMHg5ODAwLCAweDk4MDYsIDB4OWIwMCwgMHg5YjA3LCAweGEwMDAs IDB4YTAwOSwKKwkweGEwMGUsIDB4YTBlZiwgMHhhMGY4LCAweGEwZjgsCit9OworCitzdGF0aWMg Y29uc3QgdTMyIGE2eHhfcGNfdnNfY2x1c3RlcltdID0geworCTB4OTEwMCwgMHg5MTA4LCAweDkz MDAsIDB4OTMwNiwgMHg5OTgwLCAweDk5ODEsIDB4OWIwMCwgMHg5YjA3LAorfTsKKworI2RlZmlu ZSBDTFVTVEVSX0ZFICAgIDAKKyNkZWZpbmUgQ0xVU1RFUl9TUF9WUyAxCisjZGVmaW5lIENMVVNU RVJfUENfVlMgMgorI2RlZmluZSBDTFVTVEVSX0dSQVMgIDMKKyNkZWZpbmUgQ0xVU1RFUl9TUF9Q UyA0CisjZGVmaW5lIENMVVNURVJfUFMgICAgNQorCisjZGVmaW5lIENMVVNURVIoX2lkLCBfcmVn LCBfc2VsX3JlZywgX3NlbF92YWwpIFwKKwl7IC5pZCA9IF9pZCwgLm5hbWUgPSAjX2lkLFwKKwkJ LnJlZ2lzdGVycyA9IF9yZWcsIFwKKwkJLmNvdW50ID0gQVJSQVlfU0laRShfcmVnKSwgXAorCQku c2VsX3JlZyA9IF9zZWxfcmVnLCAuc2VsX3ZhbCA9IF9zZWxfdmFsIH0KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBhNnh4X2NsdXN0ZXIgeworCXUzMiBpZDsKKwljb25zdCBjaGFyICpuYW1lOworCWNv bnN0IHUzMiAqcmVnaXN0ZXJzOworCXNpemVfdCBjb3VudDsKKwl1MzIgc2VsX3JlZzsKKwl1MzIg c2VsX3ZhbDsKK30gYTZ4eF9jbHVzdGVyc1tdID0geworCUNMVVNURVIoQ0xVU1RFUl9HUkFTLCBh Nnh4X2dyYXNfY2x1c3RlciwgMCwgMCksCisJQ0xVU1RFUihDTFVTVEVSX1BTLCBhNnh4X3BzX2Ns dXN0ZXJfcmFjLCBSRUdfQTZYWF9SQl9SQl9TVUJfQkxPQ0tfU0VMX0NOVExfQ0QsIDB4MCksCisJ Q0xVU1RFUihDTFVTVEVSX1BTLCBhNnh4X3BzX2NsdXN0ZXJfcmJwLCBSRUdfQTZYWF9SQl9SQl9T VUJfQkxPQ0tfU0VMX0NOVExfQ0QsIDB4OSksCisJQ0xVU1RFUihDTFVTVEVSX1BTLCBhNnh4X3Bz X2NsdXN0ZXIsIDAsIDApLAorCUNMVVNURVIoQ0xVU1RFUl9GRSwgYTZ4eF9mZV9jbHVzdGVyLCAw LCAwKSwKKwlDTFVTVEVSKENMVVNURVJfUENfVlMsIGE2eHhfcGNfdnNfY2x1c3RlciwgMCwgMCks Cit9OworCitzdGF0aWMgY29uc3QgdTMyIGE2eHhfc3BfdnNfaGxzcV9jbHVzdGVyW10gPSB7CisJ MHhiODAwLCAweGI4MDMsIDB4YjgyMCwgMHhiODIyLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBh Nnh4X3NwX3ZzX3NwX2NsdXN0ZXJbXSA9IHsKKwkweGE4MDAsIDB4YTgyNCwgMHhhODMwLCAweGE4 M2MsIDB4YTg0MCwgMHhhODY0LCAweGE4NzAsIDB4YTg5NSwKKwkweGE4YTAsIDB4YThhZiwgMHhh OGMwLCAweGE4YzMsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGE2eHhfaGxzcV9kdXBsaWNhdGVf Y2x1c3RlcltdID0geworCTB4YmIxMCwgMHhiYjExLCAweGJiMjAsIDB4YmIyOSwKK307CisKK3N0 YXRpYyBjb25zdCB1MzIgYTZ4eF9obHNxXzJkX2R1cGxpY2F0ZV9jbHVzdGVyW10gPSB7CisJMHhi ZDgwLCAweGJkODAsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGE2eHhfc3BfZHVwbGljYXRlX2Ns dXN0ZXJbXSA9IHsKKwkweGFiMDAsIDB4YWIwMCwgMHhhYjA0LCAweGFiMDUsIDB4YWIxMCwgMHhh YjFiLCAweGFiMjAsIDB4YWIyMCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYTZ4eF90cF9kdXBs aWNhdGVfY2x1c3RlcltdID0geworCTB4YjMwMCwgMHhiMzA3LCAweGIzMDksIDB4YjMwOSwgMHhi MzgwLCAweGIzODIsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGE2eHhfc3BfcHNfaGxzcV9jbHVz dGVyW10gPSB7CisJMHhiOTgwLCAweGI5ODAsIDB4Yjk4MiwgMHhiOTg3LCAweGI5OTAsIDB4Yjk5 YiwgMHhiOWEwLCAweGI5YTIsCisJMHhiOWMwLCAweGI5YzksCit9OworCitzdGF0aWMgY29uc3Qg dTMyIGE2eHhfc3BfcHNfaGxzcV8yZF9jbHVzdGVyW10gPSB7CisJMHhiZDgwLCAweGJkODAsCit9 OworCitzdGF0aWMgY29uc3QgdTMyIGE2eHhfc3BfcHNfc3BfY2x1c3RlcltdID0geworCTB4YTk4 MCwgMHhhOWE4LCAweGE5YjAsIDB4YTliYywgMHhhOWQwLCAweGE5ZDMsIDB4YTllMCwgMHhhOWYz LAorCTB4YWEwMCwgMHhhYTAwLCAweGFhMzAsIDB4YWEzMSwKK307CisKK3N0YXRpYyBjb25zdCB1 MzIgYTZ4eF9zcF9wc19zcF8yZF9jbHVzdGVyW10gPSB7CisJMHhhY2MwLCAweGFjYzAsCit9Owor CitzdGF0aWMgY29uc3QgdTMyIGE2eHhfc3BfcHNfdHBfY2x1c3RlcltdID0geworCTB4YjE4MCwg MHhiMTgzLCAweGIxOTAsIDB4YjE5MSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYTZ4eF9zcF9w c190cF8yZF9jbHVzdGVyW10gPSB7CisJMHhiNGMwLCAweGI0ZDEsCit9OworCisjZGVmaW5lIENM VVNURVJfREJHQUhCKF9pZCwgX2Jhc2UsIF90eXBlLCBfcmVnKSBcCisJeyAubmFtZSA9ICNfaWQs IC5zdGF0ZXR5cGUgPSBfdHlwZSwgLmJhc2UgPSBfYmFzZSwgXAorCQkucmVnaXN0ZXJzID0gX3Jl ZywgLmNvdW50ID0gQVJSQVlfU0laRShfcmVnKSB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYTZ4 eF9kYmdhaGJfY2x1c3RlciB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1MzIgc3RhdGV0eXBlOwor CXUzMiBiYXNlOworCWNvbnN0IHUzMiAqcmVnaXN0ZXJzOworCXNpemVfdCBjb3VudDsKK30gYTZ4 eF9kYmdhaGJfY2x1c3RlcnNbXSA9IHsKKwlDTFVTVEVSX0RCR0FIQihDTFVTVEVSX1NQX1ZTLCAw eDAwMDJlMDAwLCAweDQxLCBhNnh4X3NwX3ZzX2hsc3FfY2x1c3RlciksCisJQ0xVU1RFUl9EQkdB SEIoQ0xVU1RFUl9TUF9WUywgMHgwMDAyYTAwMCwgMHgyMSwgYTZ4eF9zcF92c19zcF9jbHVzdGVy KSwKKwlDTFVTVEVSX0RCR0FIQihDTFVTVEVSX1NQX1ZTLCAweDAwMDJlMDAwLCAweDQxLCBhNnh4 X2hsc3FfZHVwbGljYXRlX2NsdXN0ZXIpLAorCUNMVVNURVJfREJHQUhCKENMVVNURVJfU1BfVlMs IDB4MDAwMmYwMDAsIDB4NDUsIGE2eHhfaGxzcV8yZF9kdXBsaWNhdGVfY2x1c3RlciksCisJQ0xV U1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9WUywgMHgwMDAyYTAwMCwgMHgyMSwgYTZ4eF9zcF9kdXBs aWNhdGVfY2x1c3RlciksCisJQ0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9WUywgMHgwMDAyYzAw MCwgMHgxLCBhNnh4X3RwX2R1cGxpY2F0ZV9jbHVzdGVyKSwKKwlDTFVTVEVSX0RCR0FIQihDTFVT VEVSX1NQX1BTLCAweDAwMDJlMDAwLCAweDQyLCBhNnh4X3NwX3BzX2hsc3FfY2x1c3RlciksCisJ Q0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9QUywgMHgwMDAyZjAwMCwgMHg0NiwgYTZ4eF9zcF9w c19obHNxXzJkX2NsdXN0ZXIpLAorCUNMVVNURVJfREJHQUhCKENMVVNURVJfU1BfUFMsIDB4MDAw MmEwMDAsIDB4MjIsIGE2eHhfc3BfcHNfc3BfY2x1c3RlciksCisJQ0xVU1RFUl9EQkdBSEIoQ0xV U1RFUl9TUF9QUywgMHgwMDAyYjAwMCwgMHgyNiwgYTZ4eF9zcF9wc19zcF8yZF9jbHVzdGVyKSwK KwlDTFVTVEVSX0RCR0FIQihDTFVTVEVSX1NQX1BTLCAweDAwMDJjMDAwLCAweDIsIGE2eHhfc3Bf cHNfdHBfY2x1c3RlciksCisJQ0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9QUywgMHgwMDAyZDAw MCwgMHg2LCBhNnh4X3NwX3BzX3RwXzJkX2NsdXN0ZXIpLAorCUNMVVNURVJfREJHQUhCKENMVVNU RVJfU1BfUFMsIDB4MDAwMmUwMDAsIDB4NDIsIGE2eHhfaGxzcV9kdXBsaWNhdGVfY2x1c3Rlciks CisJQ0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9QUywgMHgwMDAyYTAwMCwgMHgyMiwgYTZ4eF9z cF9kdXBsaWNhdGVfY2x1c3RlciksCisJQ0xVU1RFUl9EQkdBSEIoQ0xVU1RFUl9TUF9QUywgMHgw MDAyYzAwMCwgMHgyLCBhNnh4X3RwX2R1cGxpY2F0ZV9jbHVzdGVyKSwKK307CisKK3N0YXRpYyBj b25zdCB1MzIgYTZ4eF9obHNxX3JlZ2lzdGVyc1tdID0geworCTB4YmUwMCwgMHhiZTAxLCAweGJl MDQsIDB4YmUwNSwgMHhiZTA4LCAweGJlMDksIDB4YmUxMCwgMHhiZTE1LAorCTB4YmUyMCwgMHhi ZTIzLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3NwX3JlZ2lzdGVyc1tdID0geworCTB4 YWUwMCwgMHhhZTA0LCAweGFlMGMsIDB4YWUwYywgMHhhZTBmLCAweGFlMmIsIDB4YWUzMCwgMHhh ZTMyLAorCTB4YWUzNSwgMHhhZTM1LCAweGFlM2EsIDB4YWUzZiwgMHhhZTUwLCAweGFlNTIsCit9 OworCitzdGF0aWMgY29uc3QgdTMyIGE2eHhfdHBfcmVnaXN0ZXJzW10gPSB7CisJMHhiNjAwLCAw eGI2MDEsIDB4YjYwNCwgMHhiNjA1LCAweGI2MTAsIDB4YjYxYiwgMHhiNjIwLCAweGI2MjMsCit9 OworCitzdHJ1Y3QgYTZ4eF9yZWdpc3RlcnMgeworCWNvbnN0IHUzMiAqcmVnaXN0ZXJzOworCXNp emVfdCBjb3VudDsKKwl1MzIgdmFsMDsKKwl1MzIgdmFsMTsKK307CisKKyNkZWZpbmUgSExTUV9E QkdfUkVHUyhfYmFzZSwgX3R5cGUsIF9hcnJheSkgXAorCXsgLnZhbDAgPSBfYmFzZSwgLnZhbDEg PSBfdHlwZSwgLnJlZ2lzdGVycyA9IF9hcnJheSwgXAorCQkuY291bnQgPSBBUlJBWV9TSVpFKF9h cnJheSksIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhNnh4X3JlZ2lzdGVycyBhNnh4X2hsc3Ff cmVnbGlzdFtdID0geworCUhMU1FfREJHX1JFR1MoMHgwMDAyRjgwMCwgMHg0MCwgYTZ4eF9obHNx X3JlZ2lzdGVycyksCisJSExTUV9EQkdfUkVHUygweDAwMDJCODAwLCAweDIwLCBhNnh4X3NwX3Jl Z2lzdGVycyksCisJSExTUV9EQkdfUkVHUygweDAwMDJEODAwLCAweDAsIGE2eHhfdHBfcmVnaXN0 ZXJzKSwKK307CisKKyNkZWZpbmUgU0hBREVSKF90eXBlLCBfc2l6ZSkgXAorCXsgLnR5cGUgPSBf dHlwZSwgLm5hbWUgPSAjX3R5cGUsIC5zaXplID0gX3NpemUgfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGE2eHhfc2hhZGVyX2Jsb2NrIHsKKwljb25zdCBjaGFyICpuYW1lOworCXUzMiB0eXBlOwor CXUzMiBzaXplOworfSBhNnh4X3NoYWRlcl9ibG9ja3NbXSA9IHsKKwlTSEFERVIoQTZYWF9UUDBf VE1PX0RBVEEsIDB4MjAwKSwKKwlTSEFERVIoQTZYWF9UUDBfU01PX0RBVEEsIDB4ODApLAorCVNI QURFUihBNlhYX1RQMF9NSVBNQVBfQkFTRV9EQVRBLCAweDNjMCksCisJU0hBREVSKEE2WFhfVFAx X1RNT19EQVRBLCAweDIwMCksCisJU0hBREVSKEE2WFhfVFAxX1NNT19EQVRBLCAweDgwKSwKKwlT SEFERVIoQTZYWF9UUDFfTUlQTUFQX0JBU0VfREFUQSwgMHgzYzApLAorCVNIQURFUihBNlhYX1NQ X0lOU1RfREFUQSwgMHg4MDApLAorCVNIQURFUihBNlhYX1NQX0xCXzBfREFUQSwgMHg4MDApLAor CVNIQURFUihBNlhYX1NQX0xCXzFfREFUQSwgMHg4MDApLAorCVNIQURFUihBNlhYX1NQX0xCXzJf REFUQSwgMHg4MDApLAorCVNIQURFUihBNlhYX1NQX0xCXzNfREFUQSwgMHg4MDApLAorCVNIQURF UihBNlhYX1NQX0xCXzRfREFUQSwgMHg4MDApLAorCVNIQURFUihBNlhYX1NQX0xCXzVfREFUQSwg MHgyMDApLAorCVNIQURFUihBNlhYX1NQX0NCX0JJTkRMRVNTX0RBVEEsIDB4MjAwMCksCisJU0hB REVSKEE2WFhfU1BfQ0JfTEVHQUNZX0RBVEEsIDB4MjgwKSwKKwlTSEFERVIoQTZYWF9TUF9VQVZf REFUQSwgMHg4MCksCisJU0hBREVSKEE2WFhfU1BfSU5TVF9UQUcsIDB4ODApLAorCVNIQURFUihB NlhYX1NQX0NCX0JJTkRMRVNTX1RBRywgMHg4MCksCisJU0hBREVSKEE2WFhfU1BfVE1PX1VNT19U QUcsIDB4ODApLAorCVNIQURFUihBNlhYX1NQX1NNT19UQUcsIDB4ODApLAorCVNIQURFUihBNlhY X1NQX1NUQVRFX0RBVEEsIDB4M2YpLAorCVNIQURFUihBNlhYX0hMU1FfQ0hVTktfQ1ZTX1JBTSwg MHgxYzApLAorCVNIQURFUihBNlhYX0hMU1FfQ0hVTktfQ1BTX1JBTSwgMHgyODApLAorCVNIQURF UihBNlhYX0hMU1FfQ0hVTktfQ1ZTX1JBTV9UQUcsIDB4NDApLAorCVNIQURFUihBNlhYX0hMU1Ff Q0hVTktfQ1BTX1JBTV9UQUcsIDB4NDApLAorCVNIQURFUihBNlhYX0hMU1FfSUNCX0NWU19DQl9C QVNFX1RBRywgMHg0KSwKKwlTSEFERVIoQTZYWF9ITFNRX0lDQl9DUFNfQ0JfQkFTRV9UQUcsIDB4 NCksCisJU0hBREVSKEE2WFhfSExTUV9DVlNfTUlTQ19SQU0sIDB4MWMwKSwKKwlTSEFERVIoQTZY WF9ITFNRX0NQU19NSVNDX1JBTSwgMHg1ODApLAorCVNIQURFUihBNlhYX0hMU1FfSU5TVF9SQU0s IDB4ODAwKSwKKwlTSEFERVIoQTZYWF9ITFNRX0dGWF9DVlNfQ09OU1RfUkFNLCAweDgwMCksCisJ U0hBREVSKEE2WFhfSExTUV9HRlhfQ1BTX0NPTlNUX1JBTSwgMHg4MDApLAorCVNIQURFUihBNlhY X0hMU1FfQ1ZTX01JU0NfUkFNX1RBRywgMHg4KSwKKwlTSEFERVIoQTZYWF9ITFNRX0NQU19NSVND X1JBTV9UQUcsIDB4NCksCisJU0hBREVSKEE2WFhfSExTUV9JTlNUX1JBTV9UQUcsIDB4ODApLAor CVNIQURFUihBNlhYX0hMU1FfR0ZYX0NWU19DT05TVF9SQU1fVEFHLCAweGMpLAorCVNIQURFUihB NlhYX0hMU1FfR0ZYX0NQU19DT05TVF9SQU1fVEFHLCAweDEwKSwKKwlTSEFERVIoQTZYWF9ITFNR X1BXUl9SRVNUX1JBTSwgMHgyOCksCisJU0hBREVSKEE2WFhfSExTUV9QV1JfUkVTVF9UQUcsIDB4 MTQpLAorCVNIQURFUihBNlhYX0hMU1FfREFUQVBBVEhfTUVUQSwgMHg0MCksCisJU0hBREVSKEE2 WFhfSExTUV9GUk9OVEVORF9NRVRBLCAweDQwKSwKKwlTSEFERVIoQTZYWF9ITFNRX0lORElSRUNU X01FVEEsIDB4NDApLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3JiX3JhY19yZWdpc3Rl cnNbXSA9IHsKKwkweDhlMDQsIDB4OGUwNSwgMHg4ZTA3LCAweDhlMDgsIDB4OGUxMCwgMHg4ZTFj LCAweDhlMjAsIDB4OGUyNSwKKwkweDhlMjgsIDB4OGUyOCwgMHg4ZTJjLCAweDhlMmYsIDB4OGU1 MCwgMHg4ZTUyLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3JiX3JicF9yZWdpc3RlcnNb XSA9IHsKKwkweDhlMDEsIDB4OGUwMSwgMHg4ZTBjLCAweDhlMGMsIDB4OGUzYiwgMHg4ZTNlLCAw eDhlNDAsIDB4OGU0MywKKwkweDhlNTMsIDB4OGU1ZiwgMHg4ZTcwLCAweDhlNzcsCit9OworCitz dGF0aWMgY29uc3QgdTMyIGE2eHhfcmVnaXN0ZXJzW10gPSB7CisJLyogUkJCTSAqLworCTB4MDAw MCwgMHgwMDAyLCAweDAwMTAsIDB4MDAxMCwgMHgwMDEyLCAweDAwMTIsIDB4MDAxOCwgMHgwMDFi LAorCTB4MDAxZSwgMHgwMDMyLCAweDAwMzgsIDB4MDAzYywgMHgwMDQyLCAweDAwNDIsIDB4MDA0 NCwgMHgwMDQ0LAorCTB4MDA0NywgMHgwMDQ3LCAweDAwNTYsIDB4MDA1NiwgMHgwMGFkLCAweDAw YWUsIDB4MDBiMCwgMHgwMGZiLAorCTB4MDEwMCwgMHgwMTFkLCAweDAyMDAsIDB4MDIwZCwgMHgw MjE4LCAweDAyM2QsIDB4MDQwMCwgMHgwNGY5LAorCTB4MDUwMCwgMHgwNTAwLCAweDA1MDUsIDB4 MDUwYiwgMHgwNTBlLCAweDA1MTEsIDB4MDUzMywgMHgwNTMzLAorCTB4MDU0MCwgMHgwNTU1LAor CS8qIENQICovCisJMHgwODAwLCAweDA4MDgsIDB4MDgxMCwgMHgwODEzLCAweDA4MjAsIDB4MDgy MSwgMHgwODIzLCAweDA4MjQsCisJMHgwODI2LCAweDA4MjcsIDB4MDgzMCwgMHgwODMzLCAweDA4 NDAsIDB4MDg0MywgMHgwODRmLCAweDA4NmYsCisJMHgwODgwLCAweDA4OGEsIDB4MDhhMCwgMHgw OGFiLCAweDA4YzAsIDB4MDhjNCwgMHgwOGQwLCAweDA4ZGQsCisJMHgwOGYwLCAweDA4ZjMsIDB4 MDkwMCwgMHgwOTAzLCAweDA5MDgsIDB4MDkxMSwgMHgwOTI4LCAweDA5M2UsCisJMHgwOTQyLCAw eDA5NGQsIDB4MDk4MCwgMHgwOTg0LCAweDA5OGQsIDB4MDk5NiwgMHgwOTk4LCAweDA5OWUsCisJ MHgwOWEwLCAweDA5YTYsIDB4MDlhOCwgMHgwOWFlLCAweDA5YjAsIDB4MDliMSwgMHgwOWMyLCAw eDA5YzgsCisJMHgwYTAwLCAweDBhMDMsCisJLyogVlNDICovCisJMHgwYzAwLCAweDBjMDQsIDB4 MGMwNiwgMHgwYzA2LCAweDBjMTAsIDB4MGNkOSwgMHgwZTAwLCAweDBlMGUsCisJLyogVUNIRSAq LworCTB4MGUxMCwgMHgwZTEzLCAweDBlMTcsIDB4MGUxOSwgMHgwZTFjLCAweDBlMmIsIDB4MGUz MCwgMHgwZTMyLAorCTB4MGUzOCwgMHgwZTM5LAorCS8qIEdSQVMgKi8KKwkweDg2MDAsIDB4ODYw MSwgMHg4NjEwLCAweDg2MWIsIDB4ODYyMCwgMHg4NjIwLCAweDg2MjgsIDB4ODYyYiwKKwkweDg2 MzAsIDB4ODYzNywKKwkvKiBWUEMgKi8KKwkweDk2MDAsIDB4OTYwNCwgMHg5NjI0LCAweDk2Mzcs CisJLyogUEMgKi8KKwkweDllMDAsIDB4OWUwMSwgMHg5ZTAzLCAweDllMGUsIDB4OWUxMSwgMHg5 ZTE2LCAweDllMTksIDB4OWUxOSwKKwkweDllMWMsIDB4OWUxYywgMHg5ZTIwLCAweDllMjMsIDB4 OWUzMCwgMHg5ZTMxLCAweDllMzQsIDB4OWUzNCwKKwkweDllNzAsIDB4OWU3MiwgMHg5ZTc4LCAw eDllNzksIDB4OWU4MCwgMHg5ZmZmLAorCS8qIFZGRCAqLworCTB4YTYwMCwgMHhhNjAxLCAweGE2 MDMsIDB4YTYwMywgMHhhNjBhLCAweGE2MGEsIDB4YTYxMCwgMHhhNjE3LAorCTB4YTYzMCwgMHhh NjMwLAorfTsKKworI2RlZmluZSBSRUdTKF9hcnJheSwgX3NlbF9yZWcsIF9zZWxfdmFsKSBcCisJ eyAucmVnaXN0ZXJzID0gX2FycmF5LCAuY291bnQgPSBBUlJBWV9TSVpFKF9hcnJheSksIFwKKwkJ LnZhbDAgPSBfc2VsX3JlZywgLnZhbDEgPSBfc2VsX3ZhbCB9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgYTZ4eF9yZWdpc3RlcnMgYTZ4eF9yZWdsaXN0W10gPSB7CisJUkVHUyhhNnh4X3JlZ2lzdGVy cywgMCwgMCksCisJUkVHUyhhNnh4X3JiX3JhY19yZWdpc3RlcnMsIFJFR19BNlhYX1JCX1JCX1NV Ql9CTE9DS19TRUxfQ05UTF9DRCwgMCksCisJUkVHUyhhNnh4X3JiX3JicF9yZWdpc3RlcnMsIFJF R19BNlhYX1JCX1JCX1NVQl9CTE9DS19TRUxfQ05UTF9DRCwgOSksCit9OworCitzdGF0aWMgY29u c3QgdTMyIGE2eHhfYWhiX3JlZ2lzdGVyc1tdID0geworCS8qIFJCQk1fU1RBVFVTIC0gUkJCTV9T VEFUVVMzICovCisJMHgyMTAsIDB4MjEzLAorCS8qIENQX1NUQVRVU18xICovCisJMHg4MjUsIDB4 ODI1LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3ZiaWZfcmVnaXN0ZXJzW10gPSB7CisJ MHgzMDAwLCAweDMwMDcsIDB4MzAwYywgMHgzMDE0LCAweDMwMTgsIDB4MzAyZCwgMHgzMDMwLCAw eDMwMzEsCisJMHgzMDM0LCAweDMwMzYsIDB4MzAzYywgMHgzMDNkLCAweDMwNDAsIDB4MzA0MCwg MHgzMDQyLCAweDMwNDIsCisJMHgzMDQ5LCAweDMwNDksIDB4MzA1OCwgMHgzMDU4LCAweDMwNWEs IDB4MzA2MSwgMHgzMDY0LCAweDMwNjgsCisJMHgzMDZjLCAweDMwNmQsIDB4MzA4MCwgMHgzMDg4 LCAweDMwOGIsIDB4MzA4YywgMHgzMDkwLCAweDMwOTQsCisJMHgzMDk4LCAweDMwOTgsIDB4MzA5 YywgMHgzMDljLCAweDMwYzAsIDB4MzBjMCwgMHgzMGM4LCAweDMwYzgsCisJMHgzMGQwLCAweDMw ZDAsIDB4MzBkOCwgMHgzMGQ4LCAweDMwZTAsIDB4MzBlMCwgMHgzMTAwLCAweDMxMDAsCisJMHgz MTA4LCAweDMxMDgsIDB4MzExMCwgMHgzMTEwLCAweDMxMTgsIDB4MzExOCwgMHgzMTIwLCAweDMx MjAsCisJMHgzMTI0LCAweDMxMjUsIDB4MzEyOSwgMHgzMTI5LCAweDMxMzEsIDB4MzEzMSwgMHgz MTU0LCAweDMxNTQsCisJMHgzMTU2LCAweDMxNTYsIDB4MzE1OCwgMHgzMTU4LCAweDMxNWEsIDB4 MzE1YSwgMHgzMTVjLCAweDMxNWMsCisJMHgzMTVlLCAweDMxNWUsIDB4MzE2MCwgMHgzMTYwLCAw eDMxNjIsIDB4MzE2MiwgMHgzNDBjLCAweDM0MGMsCisJMHgzNDEwLCAweDM0MTAsIDB4MzgwMCwg MHgzODAxLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhNnh4X3JlZ2lzdGVycyBhNnh4X2Fo Yl9yZWdsaXN0W10gPSB7CisJUkVHUyhhNnh4X2FoYl9yZWdpc3RlcnMsIDAsIDApLAorCVJFR1Mo YTZ4eF92YmlmX3JlZ2lzdGVycywgMCwgMCksCit9OworCitzdGF0aWMgY29uc3QgdTMyIGE2eHhf Z211X2d4X3JlZ2lzdGVyc1tdID0geworCS8qIEdNVSBHWCAqLworCTB4MDAwMCwgMHgwMDAwLCAw eDAwMTAsIDB4MDAxMywgMHgwMDE2LCAweDAwMTYsIDB4MDAxOCwgMHgwMDFiLAorCTB4MDAxZSwg MHgwMDFlLCAweDAwMjAsIDB4MDAyMywgMHgwMDI2LCAweDAwMjYsIDB4MDAyOCwgMHgwMDJiLAor CTB4MDAyZSwgMHgwMDJlLCAweDAwMzAsIDB4MDAzMywgMHgwMDM2LCAweDAwMzYsIDB4MDAzOCwg MHgwMDNiLAorCTB4MDAzZSwgMHgwMDNlLCAweDAwNDAsIDB4MDA0MywgMHgwMDQ2LCAweDAwNDYs IDB4MDA4MCwgMHgwMDg0LAorCTB4MDEwMCwgMHgwMTJiLCAweDAxNDAsIDB4MDE0MCwKK307CisK K3N0YXRpYyBjb25zdCB1MzIgYTZ4eF9nbXVfY3hfcmVnaXN0ZXJzW10gPSB7CisJLyogR01VIENY ICovCisJMHg0YzAwLCAweDRjMDcsIDB4NGMxMCwgMHg0YzEyLCAweDRkMDAsIDB4NGQwMCwgMHg0 ZDA3LCAweDRkMGEsCisJMHg1MDAwLCAweDUwMDQsIDB4NTAwNywgMHg1MDA4LCAweDUwMGIsIDB4 NTAwYywgMHg1MDBmLCAweDUwMWMsCisJMHg1MDI0LCAweDUwMmEsIDB4NTAyZCwgMHg1MDMwLCAw eDUwNDAsIDB4NTA1MywgMHg1MDg3LCAweDUwODksCisJMHg1MGEwLCAweDUwYTIsIDB4NTBhNCwg MHg1MGFmLCAweDUwYzAsIDB4NTBjMywgMHg1MGQwLCAweDUwZDAsCisJMHg1MGU0LCAweDUwZTQs IDB4NTBlOCwgMHg1MGVjLCAweDUxMDAsIDB4NTEwMywgMHg1MTQwLCAweDUxNDAsCisJMHg1MTQy LCAweDUxNDQsIDB4NTE0YywgMHg1MTRkLCAweDUxNGYsIDB4NTE1MSwgMHg1MTU0LCAweDUxNTQs CisJMHg1MTU3LCAweDUxNTgsIDB4NTE1ZCwgMHg1MTVkLCAweDUxNjIsIDB4NTE2MiwgMHg1MTY0 LCAweDUxNjUsCisJMHg1MTgwLCAweDUxODYsIDB4NTE5MCwgMHg1MTllLCAweDUxYzAsIDB4NTFj MCwgMHg1MWM1LCAweDUxY2MsCisJMHg1MWUwLCAweDUxZTIsIDB4NTFmMCwgMHg1MWYwLCAweDUy MDAsIDB4NTIwMSwKKwkvKiBHUFUgUlNDQyAqLworCTB4OGM4YywgMHg4YzhjLCAweDhkMDEsIDB4 OGQwMiwgMHg4ZjQwLCAweDhmNDIsIDB4OGY0NCwgMHg4ZjQ3LAorCTB4OGY0YywgMHg4Zjg3LCAw eDhmZWMsIDB4OGZlZiwgMHg4ZmY0LCAweDkwMmYsIDB4OTA5NCwgMHg5MDk3LAorCTB4OTA5Yywg MHg5MGQ3LCAweDkxM2MsIDB4OTEzZiwgMHg5MTQ0LCAweDkxN2YsCisJLyogR01VIEFPICovCisJ MHg5MzAwLCAweDkzMTYsIDB4OTQwMCwgMHg5NDAwLAorCS8qIEdQVSBDQyAqLworCTB4OTgwMCwg MHg5ODEyLCAweDk4NDAsIDB4OTg1MiwgMHg5YzAwLCAweDljMDQsIDB4OWMwNywgMHg5YzBiLAor CTB4OWMxNSwgMHg5YzFjLCAweDljMWUsIDB4OWMyZCwgMHg5YzNjLCAweDljM2QsIDB4OWMzZiwg MHg5YzQwLAorCTB4OWM0MiwgMHg5YzQ5LCAweDljNTgsIDB4OWM1YSwgMHg5ZDQwLCAweDlkNWUs IDB4YTAwMCwgMHhhMDAyLAorCTB4YTQwMCwgMHhhNDAyLCAweGFjMDAsIDB4YWMwMiwgMHhiMDAw LCAweGIwMDIsIDB4YjQwMCwgMHhiNDAyLAorCTB4YjgwMCwgMHhiODAyLAorCS8qIEdQVSBDQyBB Q0QgKi8KKwkweGJjMDAsIDB4YmMxNiwgMHhiYzIwLCAweGJjMjcsCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGE2eHhfcmVnaXN0ZXJzIGE2eHhfZ211X3JlZ2xpc3RbXSA9IHsKKwlSRUdTKGE2 eHhfZ211X2N4X3JlZ2lzdGVycywgMCwgMCksCisJUkVHUyhhNnh4X2dtdV9neF9yZWdpc3RlcnMs IDAsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhNnh4X2luZGV4ZWRfcmVnaXN0ZXJz IHsKKwljb25zdCBjaGFyICpuYW1lOworCXUzMiBhZGRyOworCXUzMiBkYXRhOworCXUzMiBjb3Vu dDsKK30gYTZ4eF9pbmRleGVkX3JlZ2xpc3RbXSA9IHsKKwl7ICJDUF9TRVFfU1RBVCIsIFJFR19B NlhYX0NQX1NRRV9TVEFUX0FERFIsCisJCVJFR19BNlhYX0NQX1NRRV9TVEFUX0RBVEEsIDB4MzMg fSwKKwl7ICJDUF9EUkFXX1NUQVRFIiwgUkVHX0E2WFhfQ1BfRFJBV19TVEFURV9BRERSLAorCQlS RUdfQTZYWF9DUF9EUkFXX1NUQVRFX0RBVEEsIDB4MTAwIH0sCisJeyAiQ1BfVUNPREVfREJHX0RB VEEiLCBSRUdfQTZYWF9DUF9TUUVfVUNPREVfREJHX0FERFIsCisJCVJFR19BNlhYX0NQX1NRRV9V Q09ERV9EQkdfREFUQSwgMHg2MDAwIH0sCisJeyAiQ1BfUk9RIiwgUkVHX0E2WFhfQ1BfUk9RX0RC R19BRERSLAorCQlSRUdfQTZYWF9DUF9ST1FfREJHX0RBVEEsIDB4NDAwIH0sCit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IGE2eHhfaW5kZXhlZF9yZWdpc3RlcnMgYTZ4eF9jcF9tZW1wb29sX2lu ZGV4ZWQgPSB7CisJIkNQX01FTVBPT09MIiwgUkVHX0E2WFhfQ1BfTUVNX1BPT0xfREJHX0FERFIs CisJCVJFR19BNlhYX0NQX01FTV9QT09MX0RCR19EQVRBLCAweDIwNjAsCit9OworCisjZGVmaW5l IERFQlVHQlVTKF9pZCwgX2NvdW50KSB7IC5pZCA9IF9pZCwgLm5hbWUgPSAjX2lkLCAuY291bnQg PSBfY291bnQgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGE2eHhfZGVidWdidXNfYmxvY2sgewor CWNvbnN0IGNoYXIgKm5hbWU7CisJdTMyIGlkOworCXUzMiBjb3VudDsKK30gYTZ4eF9kZWJ1Z2J1 c19ibG9ja3NbXSA9IHsKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19DUCwgMHgxMDApLAorCURFQlVH QlVTKEE2WFhfREJHQlVTX1JCQk0sIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19ITFNR LCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfVUNIRSwgMHgxMDApLAorCURFQlVHQlVT KEE2WFhfREJHQlVTX0RQTSwgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVTX1RFU1MsIDB4 MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19QQywgMHgxMDApLAorCURFQlVHQlVTKEE2WFhf REJHQlVTX1ZGRFAsIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19WUEMsIDB4MTAwKSwK KwlERUJVR0JVUyhBNlhYX0RCR0JVU19UU0UsIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JV U19SQVMsIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19WU0MsIDB4MTAwKSwKKwlERUJV R0JVUyhBNlhYX0RCR0JVU19DT00sIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19MUlos IDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19BMkQsIDB4MTAwKSwKKwlERUJVR0JVUyhB NlhYX0RCR0JVU19DQ1VGQ0hFLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfUkJQLCAw eDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfRENTLCAweDEwMCksCisJREVCVUdCVVMoQTZY WF9EQkdCVVNfREJHQywgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVTX0dNVV9HWCwgMHgx MDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVTX1RQRkNIRSwgMHgxMDApLAorCURFQlVHQlVTKEE2 WFhfREJHQlVTX0dQQywgMHgxMDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVTX0xBUkMsIDB4MTAw KSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19ITFNRX1NQVFAsIDB4MTAwKSwKKwlERUJVR0JVUyhB NlhYX0RCR0JVU19SQl8wLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfUkJfMSwgMHgx MDApLAorCURFQlVHQlVTKEE2WFhfREJHQlVTX1VDSEVfV1JBUFBFUiwgMHgxMDApLAorCURFQlVH QlVTKEE2WFhfREJHQlVTX0NDVV8wLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfQ0NV XzEsIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19WRkRfMCwgMHgxMDApLAorCURFQlVH QlVTKEE2WFhfREJHQlVTX1ZGRF8xLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfVkZE XzIsIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19WRkRfMywgMHgxMDApLAorCURFQlVH QlVTKEE2WFhfREJHQlVTX1NQXzAsIDB4MTAwKSwKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19TUF8x LCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfVFBMMV8wLCAweDEwMCksCisJREVCVUdC VVMoQTZYWF9EQkdCVVNfVFBMMV8xLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfVFBM MV8yLCAweDEwMCksCisJREVCVUdCVVMoQTZYWF9EQkdCVVNfVFBMMV8zLCAweDEwMCksCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IGE2eHhfZGVidWdidXNfYmxvY2sgYTZ4eF9jeF9kZWJ1Z2J1 c19ibG9ja3NbXSA9IHsKKwlERUJVR0JVUyhBNlhYX0RCR0JVU19HTVVfQ1gsIDB4MTAwKSwKKwlE RUJVR0JVUyhBNlhYX0RCR0JVU19DWCwgMHgxMDApLAorfTsKKworI2VuZGlmCi0tIAoyLjE4LjAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=