From: Scott D Phillips Subject: [PATCH i-g-t v2 4/4] tools/intel_aubdump: Add ability to simulate execlist submission Date: Wed, 6 Dec 2017 15:11:23 -0800 Message-ID: <20171206231123.22380-4-scott.d.phillips@intel.com> References: <20171206231123.22380-1-scott.d.phillips@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1732C89C89 for ; Wed, 6 Dec 2017 23:12:44 +0000 (UTC) In-Reply-To: <20171206231123.22380-1-scott.d.phillips@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Benjamin Widawsky List-Id: intel-gfx@lists.freedesktop.org TmV3ZXIgZGV2aWNlcyBkbyBub3QgaGF2ZSB0aGUgbGVnYWN5IHJpbmcgYnVmZmVyIHN1Ym1pc3Np b24gbW9kZWwsCnNvIGF1YiBmaWxlcyBnZW5lcmF0ZWQgdXNpbmcgdGhhdCBtb2RlbCBjYW5ub3Qg YmUgaGFuZGxlZCBieSBzb21lCmludGVybmFsIHRvb2xzLiBUaGUgZXhlY2xpc3Qgc3VibWlzc2lv biBtb2RlbGVkIGJ5IHRoaXMgY2hhbmdlIGlzCnByZXR0eSBzaW1wbGlzdGljLCB1c2luZyBHR1RU IG9ubHkgYW5kIHN5bmNocm9uaXppbmcgYWZ0ZXIgZXZlcnkKYmF0Y2guCgp2MjoKLSBNb3ZlIGFk ZHJfYml0cyBpbml0IGluIHNlcGFyYXRlIHBhdGNoIChKb3JkYW4pCi0gRG9uJ3QgY2hhbmdlIEdU VCBlbnRyaWVzIGluIGdlbiA8IDEwCgpTaWduZWQtb2ZmLWJ5OiBTY290dCBEIFBoaWxsaXBzIDxz Y290dC5kLnBoaWxsaXBzQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IEpvcmRhbiBKdXN0ZW4gPGpv cmRhbi5sLmp1c3RlbkBpbnRlbC5jb20+ClRlc3RlZC1ieTogSm9yZGFuIEp1c3RlbiA8am9yZGFu LmwuanVzdGVuQGludGVsLmNvbT4KLS0tCiB0b29scy9hdWJkdW1wLmMgfCA0MDUgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KIDEgZmlsZSBj aGFuZ2VkLCAzODIgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv dG9vbHMvYXViZHVtcC5jIGIvdG9vbHMvYXViZHVtcC5jCmluZGV4IDVkZWY2OTQ3Li4yYTM3YzFh NyAxMDA2NDQKLS0tIGEvdG9vbHMvYXViZHVtcC5jCisrKyBiL3Rvb2xzL2F1YmR1bXAuYwpAQCAt NDYsNiArNDYsMTc3IEBACiAjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVvZih4KS9zaXplb2Yo KHgpWzBdKSkKICNlbmRpZgogCisjaWZuZGVmIEFMSUdOCisjZGVmaW5lIEFMSUdOKHgsIHkpICgo KHgpICsgKHkpLTEpICYgfigoeSktMSkpCisjZW5kaWYKKworI2RlZmluZSBtaW4oYSwgYikgKHsJ CQlcCisJdHlwZW9mKGEpIF9hID0gKGEpOwkJXAorCXR5cGVvZihiKSBfYiA9IChiKTsJCVwKKwlf YSA8IF9iID8gX2EgOiBfYjsJCVwKK30pCisKKyNkZWZpbmUgSFdTX1BHQV9SQ1NVTklUCQkweDAy MDgwCisjZGVmaW5lIEhXU19QR0FfVkNTVU5JVDAJMHgxMjA4MAorI2RlZmluZSBIV1NfUEdBX0JD U1VOSVQJCTB4MjIwODAKKworI2RlZmluZSBHRlhfTU9ERV9SQ1NVTklUCTB4MDIyOWMKKyNkZWZp bmUgR0ZYX01PREVfVkNTVU5JVDAJMHgxMjI5YworI2RlZmluZSBHRlhfTU9ERV9CQ1NVTklUCTB4 MjIyOWMKKworI2RlZmluZSBFWEVDTElTVF9TVUJNSVRQT1JUX1JDU1VOSVQJMHgwMjIzMAorI2Rl ZmluZSBFWEVDTElTVF9TVUJNSVRQT1JUX1ZDU1VOSVQwCTB4MTIyMzAKKyNkZWZpbmUgRVhFQ0xJ U1RfU1VCTUlUUE9SVF9CQ1NVTklUCTB4MjIyMzAKKworI2RlZmluZSBFWEVDTElTVF9TVEFUVVNf UkNTVU5JVAkJMHgwMjIzNAorI2RlZmluZSBFWEVDTElTVF9TVEFUVVNfVkNTVU5JVDAJMHgxMjIz NAorI2RlZmluZSBFWEVDTElTVF9TVEFUVVNfQkNTVU5JVAkJMHgyMjIzNAorCisjZGVmaW5lIE1F TU9SWV9NQVBfU0laRSAoNjQgLyogTWlCICovICogMTAyNCAqIDEwMjQpCisKKyNkZWZpbmUgUFRF X1NJWkUgNAorI2RlZmluZSBHRU44X1BURV9TSVpFIDgKKworI2RlZmluZSBOVU1fUFRfRU5UUklF UyAoQUxJR04oTUVNT1JZX01BUF9TSVpFLCA0MDk2KSAvIDQwOTYpCisjZGVmaW5lIFBUX1NJWkUg QUxJR04oTlVNX1BUX0VOVFJJRVMgKiBHRU44X1BURV9TSVpFLCA0MDk2KQorCisjZGVmaW5lIFJJ TkdfU0laRQkJCSgxICogNDA5NikKKyNkZWZpbmUgUFBIV1NQX1NJWkUJCQkoMSAqIDQwOTYpCisj ZGVmaW5lIEdFTjEwX0xSX0NPTlRFWFRfUkVOREVSX1NJWkUJKDE5ICogNDA5NikKKyNkZWZpbmUg R0VOOF9MUl9DT05URVhUX09USEVSX1NJWkUJKDIgKiA0MDk2KQorCisjZGVmaW5lIFNUQVRJQ19H R1RUX01BUF9TVEFSVCAwCisKKyNkZWZpbmUgUkVOREVSX1JJTkdfQUREUiBTVEFUSUNfR0dUVF9N QVBfU1RBUlQKKyNkZWZpbmUgUkVOREVSX0NPTlRFWFRfQUREUiAoUkVOREVSX1JJTkdfQUREUiAr IFJJTkdfU0laRSkKKworI2RlZmluZSBCTElUVEVSX1JJTkdfQUREUiAoUkVOREVSX0NPTlRFWFRf QUREUiArIFBQSFdTUF9TSVpFICsgR0VOMTBfTFJfQ09OVEVYVF9SRU5ERVJfU0laRSkKKyNkZWZp bmUgQkxJVFRFUl9DT05URVhUX0FERFIgKEJMSVRURVJfUklOR19BRERSICsgUklOR19TSVpFKQor CisjZGVmaW5lIFZJREVPX1JJTkdfQUREUiAoQkxJVFRFUl9DT05URVhUX0FERFIgKyBQUEhXU1Bf U0laRSArIEdFTjhfTFJfQ09OVEVYVF9PVEhFUl9TSVpFKQorI2RlZmluZSBWSURFT19DT05URVhU X0FERFIgKFZJREVPX1JJTkdfQUREUiArIFJJTkdfU0laRSkKKworI2RlZmluZSBTVEFUSUNfR0dU VF9NQVBfRU5EIChWSURFT19DT05URVhUX0FERFIgKyBQUEhXU1BfU0laRSArIEdFTjhfTFJfQ09O VEVYVF9PVEhFUl9TSVpFKQorI2RlZmluZSBTVEFUSUNfR0dUVF9NQVBfU0laRSAoU1RBVElDX0dH VFRfTUFQX0VORCAtIFNUQVRJQ19HR1RUX01BUF9TVEFSVCkKKworI2RlZmluZSBDT05URVhUX0ZM QUdTICgweDIyOSkJLyogTm9ybWFsIFByaW9yaXR5IHwgTDMtTExDIENvaGVyZW5jeSB8CisJTGVn YWN5IENvbnRleHQgd2l0aCBubyA2NCBiaXQgVkEgc3VwcG9ydCB8IFZhbGlkICovCisKKyNkZWZp bmUgUkVOREVSX0NPTlRFWFRfREVTQ1JJUFRPUiAgKCh1aW50NjRfdCkxIDw8IDMyIHwgUkVOREVS X0NPTlRFWFRfQUREUiAgfCBDT05URVhUX0ZMQUdTKQorI2RlZmluZSBCTElUVEVSX0NPTlRFWFRf REVTQ1JJUFRPUiAoKHVpbnQ2NF90KTIgPDwgMzIgfCBCTElUVEVSX0NPTlRFWFRfQUREUiB8IENP TlRFWFRfRkxBR1MpCisjZGVmaW5lIFZJREVPX0NPTlRFWFRfREVTQ1JJUFRPUiAgICgodWludDY0 X3QpMyA8PCAzMiB8IFZJREVPX0NPTlRFWFRfQUREUiAgIHwgQ09OVEVYVF9GTEFHUykKKworc3Rh dGljIGNvbnN0IHVpbnQzMl90IHJlbmRlcl9jb250ZXh0X2luaXRbR0VOMTBfTFJfQ09OVEVYVF9S RU5ERVJfU0laRSAvCisJCQkJCSAgc2l6ZW9mKHVpbnQzMl90KV0gPSB7CisJMCAvKiBNSV9OT09Q ICovLAorCTB4MTEwMDEwMUIgLyogTUlfTE9BRF9SRUdJU1RFUl9JTU0gKi8sCisJMHgyMjQ0IC8q IENPTlRFWFRfQ09OVFJPTCAqLywJCTB4OTAwMDkgLyogSW5oaWJpdCBTeW5jaHJvbm91cyBDb250 ZXh0IFN3aXRjaCB8IEVuZ2luZSBDb250ZXh0IFJlc3RvcmUgSW5oaWJpdCAqLywKKwkweDIwMzQg LyogUklOR19IRUFEICovLAkJCTAsCisJMHgyMDMwIC8qIFJJTkdfVEFJTCAqLywJCQkwLAorCTB4 MjAzOCAvKiBSSU5HX0JVRkZFUl9TVEFSVCAqLywJCVJFTkRFUl9SSU5HX0FERFIsCisJMHgyMDND IC8qIFJJTkdfQlVGRkVSX0NPTlRST0wgKi8sCShSSU5HX1NJWkUgLSA0MDk2KSB8IDEgLyogQnVm ZmVyIExlbmd0aCB8IFJpbmcgQnVmZmVyIEVuYWJsZSAqLywKKwkweDIxNjggLyogQkJfSEVBRF9V ICovLAkJCTAsCisJMHgyMTQwIC8qIEJCX0hFQURfTCAqLywJCQkwLAorCTB4MjExMCAvKiBCQl9T VEFURSAqLywJCQkwLAorCTB4MjExQyAvKiBTRUNPTkRfQkJfSEVBRF9VICovLAkJMCwKKwkweDIx MTQgLyogU0VDT05EX0JCX0hFQURfTCAqLywJCTAsCisJMHgyMTE4IC8qIFNFQ09ORF9CQl9TVEFU RSAqLywJCTAsCisJMHgyMUMwIC8qIEJCX1BFUl9DVFhfUFRSICovLAkJMCwKKwkweDIxQzQgLyog UkNTX0lORElSRUNUX0NUWCAqLywJCTAsCisJMHgyMUM4IC8qIFJDU19JTkRJUkVDVF9DVFhfT0ZG U0VUICovLAkwLAorCS8qIE1JX05PT1AgKi8KKwkwLCAwLAorCisJMCAvKiBNSV9OT09QICovLAor CTB4MTEwMDEwMTEgLyogTUlfTE9BRF9SRUdJU1RFUl9JTU0gKi8sCisJMHgyM0E4IC8qIENUWF9U SU1FU1RBTVAgKi8sCTAsCisJMHgyMjhDIC8qIFBEUDNfVURXICovLAkJMCwKKwkweDIyODggLyog UERQM19MRFcgKi8sCQkwLAorCTB4MjI4NCAvKiBQRFAyX1VEVyAqLywJCTAsCisJMHgyMjgwIC8q IFBEUDJfTERXICovLAkJMCwKKwkweDIyN0MgLyogUERQMV9VRFcgKi8sCQkwLAorCTB4MjI3OCAv KiBQRFAxX0xEVyAqLywJCTAsCisJMHgyMjc0IC8qIFBEUDBfVURXICovLAkJMCwKKwkweDIyNzAg LyogUERQMF9MRFcgKi8sCQkwLAorCS8qIE1JX05PT1AgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAw LCAwLCAwLCAwLCAwLCAwLAorCisJMCAvKiBNSV9OT09QICovLAorCTB4MTEwMDAwMDEgLyogTUlf TE9BRF9SRUdJU1RFUl9JTU0gKi8sCisJMHgyMEM4IC8qIFJfUFdSX0NMS19TVEFURSAqLywgMHg3 RkZGRkZGRiwKKwkweDA1MDAwMDAxIC8qIE1JX0JBVENIX0JVRkZFUl9FTkQgKi8KK307CisKK3N0 YXRpYyBjb25zdCB1aW50MzJfdCBibGl0dGVyX2NvbnRleHRfaW5pdFtHRU44X0xSX0NPTlRFWFRf T1RIRVJfU0laRSAvCisJCQkJCSAgIHNpemVvZih1aW50MzJfdCldID0geworCTAgLyogTUlfTk9P UCAqLywKKwkweDExMDAxMDE1IC8qIE1JX0xPQURfUkVHSVNURVJfSU1NICovLAorCTB4MjIyNDQg LyogQ09OVEVYVF9DT05UUk9MICovLAkJMHg5MDAwOSAvKiBJbmhpYml0IFN5bmNocm9ub3VzIENv bnRleHQgU3dpdGNoIHwgRW5naW5lIENvbnRleHQgUmVzdG9yZSBJbmhpYml0ICovLAorCTB4MjIw MzQgLyogUklOR19IRUFEICovLAkJMCwKKwkweDIyMDMwIC8qIFJJTkdfVEFJTCAqLywJCTAsCisJ MHgyMjAzOCAvKiBSSU5HX0JVRkZFUl9TVEFSVCAqLywJQkxJVFRFUl9SSU5HX0FERFIsCisJMHgy MjAzQyAvKiBSSU5HX0JVRkZFUl9DT05UUk9MICovLAkoUklOR19TSVpFIC0gNDA5NikgfCAxIC8q IEJ1ZmZlciBMZW5ndGggfCBSaW5nIEJ1ZmZlciBFbmFibGUgKi8sCisJMHgyMjE2OCAvKiBCQl9I RUFEX1UgKi8sCQkwLAorCTB4MjIxNDAgLyogQkJfSEVBRF9MICovLAkJMCwKKwkweDIyMTEwIC8q IEJCX1NUQVRFICovLAkJCTAsCisJMHgyMjExQyAvKiBTRUNPTkRfQkJfSEVBRF9VICovLAkJMCwK KwkweDIyMTE0IC8qIFNFQ09ORF9CQl9IRUFEX0wgKi8sCQkwLAorCTB4MjIxMTggLyogU0VDT05E X0JCX1NUQVRFICovLAkJMCwKKwkvKiBNSV9OT09QICovCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwg MCwKKworCTAgLyogTUlfTk9PUCAqLywKKwkweDExMDAxMDExLAorCTB4MjIzQTggLyogQ1RYX1RJ TUVTVEFNUCAqLywJMCwKKwkweDIyMjhDIC8qIFBEUDNfVURXICovLAkJMCwKKwkweDIyMjg4IC8q IFBEUDNfTERXICovLAkJMCwKKwkweDIyMjg0IC8qIFBEUDJfVURXICovLAkJMCwKKwkweDIyMjgw IC8qIFBEUDJfTERXICovLAkJMCwKKwkweDIyMjdDIC8qIFBEUDFfVURXICovLAkJMCwKKwkweDIy Mjc4IC8qIFBEUDFfTERXICovLAkJMCwKKwkweDIyMjc0IC8qIFBEUDBfVURXICovLAkJMCwKKwkw eDIyMjcwIC8qIFBEUDBfTERXICovLAkJMCwKKwkvKiBNSV9OT09QICovCisJMCwgMCwgMCwgMCwg MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCTB4MDUwMDAwMDEgLyogTUlfQkFUQ0hfQlVGRkVS X0VORCAqLworfTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IHZpZGVvX2NvbnRleHRfaW5pdFtH RU44X0xSX0NPTlRFWFRfT1RIRVJfU0laRSAvCisJCQkJCSBzaXplb2YodWludDMyX3QpXSA9IHsK KwkwIC8qIE1JX05PT1AgKi8sCisJMHgxMTAwMTAxNSAvKiBNSV9MT0FEX1JFR0lTVEVSX0lNTSAq LywKKwkweDFDMjQ0IC8qIENPTlRFWFRfQ09OVFJPTCAqLywJCTB4OTAwMDkgLyogSW5oaWJpdCBT eW5jaHJvbm91cyBDb250ZXh0IFN3aXRjaCB8IEVuZ2luZSBDb250ZXh0IFJlc3RvcmUgSW5oaWJp dCAqLywKKwkweDFDMDM0IC8qIFJJTkdfSEVBRCAqLywJCTAsCisJMHgxQzAzMCAvKiBSSU5HX1RB SUwgKi8sCQkwLAorCTB4MUMwMzggLyogUklOR19CVUZGRVJfU1RBUlQgKi8sCVZJREVPX1JJTkdf QUREUiwKKwkweDFDMDNDIC8qIFJJTkdfQlVGRkVSX0NPTlRST0wgKi8sCShSSU5HX1NJWkUgLSA0 MDk2KSB8IDEgLyogQnVmZmVyIExlbmd0aCB8IFJpbmcgQnVmZmVyIEVuYWJsZSAqLywKKwkweDFD MTY4IC8qIEJCX0hFQURfVSAqLywJCTAsCisJMHgxQzE0MCAvKiBCQl9IRUFEX0wgKi8sCQkwLAor CTB4MUMxMTAgLyogQkJfU1RBVEUgKi8sCQkJMCwKKwkweDFDMTFDIC8qIFNFQ09ORF9CQl9IRUFE X1UgKi8sCQkwLAorCTB4MUMxMTQgLyogU0VDT05EX0JCX0hFQURfTCAqLywJCTAsCisJMHgxQzEx OCAvKiBTRUNPTkRfQkJfU1RBVEUgKi8sCQkwLAorCS8qIE1JX05PT1AgKi8KKwkwLCAwLCAwLCAw LCAwLCAwLCAwLCAwLAorCisJMCAvKiBNSV9OT09QICovLAorCTB4MTEwMDEwMTEsCisJMHgxQzNB OCAvKiBDVFhfVElNRVNUQU1QICovLAkwLAorCTB4MUMyOEMgLyogUERQM19VRFcgKi8sCQkwLAor CTB4MUMyODggLyogUERQM19MRFcgKi8sCQkwLAorCTB4MUMyODQgLyogUERQMl9VRFcgKi8sCQkw LAorCTB4MUMyODAgLyogUERQMl9MRFcgKi8sCQkwLAorCTB4MUMyN0MgLyogUERQMV9VRFcgKi8s CQkwLAorCTB4MUMyNzggLyogUERQMV9MRFcgKi8sCQkwLAorCTB4MUMyNzQgLyogUERQMF9VRFcg Ki8sCQkwLAorCTB4MUMyNzAgLyogUERQMF9MRFcgKi8sCQkwLAorCS8qIE1JX05PT1AgKi8KKwkw LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJMHgwNTAwMDAwMSAvKiBNSV9C QVRDSF9CVUZGRVJfRU5EICovCit9OworCiBzdGF0aWMgaW50IGNsb3NlX2luaXRfaGVscGVyKGlu dCBmZCk7CiBzdGF0aWMgaW50IGlvY3RsX2luaXRfaGVscGVyKGludCBmZCwgdW5zaWduZWQgbG9u ZyByZXF1ZXN0LCAuLi4pOwogCkBAIC0xNzEsMjEgKzM0MiwxMzEgQEAgZGF0YV9vdXQoY29uc3Qg dm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpCiB9CiAKIHN0YXRpYyB1aW50MzJfdAotZ3R0X2VudHJ5 X3NpemUodm9pZCkKK2d0dF9zaXplKHZvaWQpCiB7Ci0JcmV0dXJuIGFkZHJfYml0cyA+IDMyID8g OCA6IDQ7CisJcmV0dXJuIE5VTV9QVF9FTlRSSUVTICogKGFkZHJfYml0cyA+IDMyID8gR0VOOF9Q VEVfU0laRSA6IFBURV9TSVpFKTsKIH0KIAotc3RhdGljIHVpbnQzMl90Ci1ndHRfc2l6ZSh2b2lk KQorc3RhdGljIHZvaWQKK21lbV90cmFjZV9tZW1vcnlfd3JpdGVfaGVhZGVyX291dCh1aW50NjRf dCBhZGRyLCB1aW50MzJfdCBsZW4sCisJCQkJICB1aW50MzJfdCBhZGRyX3NwYWNlKQogewotCS8q IEVub3VnaCBmb3IgNjRNQiBhc3N1bWluZyA0a0IgcGFnZXMuICovCi0JY29uc3QgdW5zaWduZWQg ZW50cmllcyA9IDB4NDAwMDsKLQlyZXR1cm4gZW50cmllcyAqIGd0dF9lbnRyeV9zaXplKCk7CisJ dWludDMyX3QgZHdvcmRzID0gQUxJR04obGVuLCBzaXplb2YodWludDMyX3QpKSAvIHNpemVvZih1 aW50MzJfdCk7CisKKwlkd29yZF9vdXQoQ01EX01FTV9UUkFDRV9NRU1PUllfV1JJVEUgfCAoNSAr IGR3b3JkcyAtIDEpKTsKKwlkd29yZF9vdXQoYWRkciAmIDB4RkZGRkZGRkYpOwkvKiBhZGRyIGxv ICovCisJZHdvcmRfb3V0KGFkZHIgPj4gMzIpOwkvKiBhZGRyIGhpICovCisJZHdvcmRfb3V0KGFk ZHJfc3BhY2UpOwkvKiBndHQgKi8KKwlkd29yZF9vdXQobGVuKTsKIH0KIAogc3RhdGljIHZvaWQK LXdyaXRlX2hlYWRlcih2b2lkKQorcmVnaXN0ZXJfd3JpdGVfb3V0KHVpbnQzMl90IGFkZHIsIHVp bnQzMl90IHZhbHVlKQoreworCXVpbnQzMl90IGR3b3JkcyA9IDE7CisKKwlkd29yZF9vdXQoQ01E X01FTV9UUkFDRV9SRUdJU1RFUl9XUklURSB8ICg1ICsgZHdvcmRzIC0gMSkpOworCWR3b3JkX291 dChhZGRyKTsKKwlkd29yZF9vdXQoQVVCX01FTV9UUkFDRV9SRUdJU1RFUl9TSVpFX0RXT1JEIHwK KwkJICBBVUJfTUVNX1RSQUNFX1JFR0lTVEVSX1NQQUNFX01NSU8pOworCWR3b3JkX291dCgweEZG RkZGRkZGKTsJLyogbWFzayBsbyAqLworCWR3b3JkX291dCgweDAwMDAwMDAwKTsJLyogbWFzayBo aSAqLworCWR3b3JkX291dCh2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitnZW4xMF93cml0ZV9o ZWFkZXIodm9pZCkKK3sKKwljaGFyIGFwcF9uYW1lWzggKiA0XTsKKwlpbnQgYXBwX25hbWVfbGVu LCBkd29yZHM7CisJdWludDMyX3QgZW50cnkgPSAweDM7CS8qIHJlYWQvd3JpdGUgfCBwcmVzZW50 ICovCisKKwlhcHBfbmFtZV9sZW4gPQorCSAgICBzbnByaW50ZihhcHBfbmFtZSwgc2l6ZW9mKGFw cF9uYW1lKSwgIlBDSS1JRD0weCVYICVzIiwgZGV2aWNlLAorCQkgICAgIHByb2dyYW1faW52b2Nh dGlvbl9zaG9ydF9uYW1lKTsKKwlhcHBfbmFtZV9sZW4gPSBBTElHTihhcHBfbmFtZV9sZW4sIHNp emVvZih1aW50MzJfdCkpOworCisJZHdvcmRzID0gNSArIGFwcF9uYW1lX2xlbiAvIHNpemVvZih1 aW50MzJfdCk7CisJZHdvcmRfb3V0KENNRF9NRU1fVFJBQ0VfVkVSU0lPTiB8IChkd29yZHMgLSAx KSk7CisJZHdvcmRfb3V0KEFVQl9NRU1fVFJBQ0VfVkVSU0lPTl9GSUxFX1ZFUlNJT04pOworCWR3 b3JkX291dChBVUJfTUVNX1RSQUNFX1ZFUlNJT05fREVWSUNFX0NOTCB8CisJCSAgQVVCX01FTV9U UkFDRV9WRVJTSU9OX01FVEhPRF9QSFkpOworCWR3b3JkX291dCgwKTsJCS8qIHZlcnNpb24gKi8K Kwlkd29yZF9vdXQoMCk7CQkvKiB2ZXJzaW9uICovCisJZGF0YV9vdXQoYXBwX25hbWUsIGFwcF9u YW1lX2xlbik7CisKKwkvKiBHR1RUIFBUICovCisJZm9yICh1aW50MzJfdCBwYWdlID0gMDsgcGFn ZSA8IEFMSUdOKFBUX1NJWkUsIDQwOTYpIC8gNDA5NjsgcGFnZSsrKSB7CisJCXVpbnQzMl90IHRv X3dyaXRlID0gbWluKFBUX1NJWkUgLSBwYWdlICogNDA5NiwgNDA5Nik7CisJCW1lbV90cmFjZV9t ZW1vcnlfd3JpdGVfaGVhZGVyX291dChwYWdlIDw8IDEyLCB0b193cml0ZSwKKwkJCQkJCSAgQVVC X01FTV9UUkFDRV9NRU1PUllfQUREUkVTU19TUEFDRV9HR1RUX0VOVFJZKTsKKwkJZm9yICh1aW50 MzJfdCBpID0gMDsgaSA8IHRvX3dyaXRlIC8gR0VOOF9QVEVfU0laRTsgaSsrKSB7CisJCQlkd29y ZF9vdXQoZW50cnkgKyAweDEwMDAgKiBpICsgMHgyMDAwMDAgKiBwYWdlKTsKKwkJCWR3b3JkX291 dCgwKTsKKwkJfQorCX0KKworCS8qIFJFTkRFUl9SSU5HICovCisJbWVtX3RyYWNlX21lbW9yeV93 cml0ZV9oZWFkZXJfb3V0KFJFTkRFUl9SSU5HX0FERFIsIFJJTkdfU0laRSwKKwkJCQkJICBBVUJf TUVNX1RSQUNFX01FTU9SWV9BRERSRVNTX1NQQUNFX0xPQ0FMKTsKKwlmb3IgKHVpbnQzMl90IGkg PSAwOyBpIDwgUklOR19TSVpFOyBpICs9IHNpemVvZih1aW50MzJfdCkpCisJCWR3b3JkX291dCgw KTsKKworCS8qIFJFTkRFUl9QUEhXU1AgKi8KKwltZW1fdHJhY2VfbWVtb3J5X3dyaXRlX2hlYWRl cl9vdXQoUkVOREVSX0NPTlRFWFRfQUREUiwKKwkJCQkJICBQUEhXU1BfU0laRSArCisJCQkJCSAg c2l6ZW9mKHJlbmRlcl9jb250ZXh0X2luaXQpLAorCQkJCQkgIEFVQl9NRU1fVFJBQ0VfTUVNT1JZ X0FERFJFU1NfU1BBQ0VfTE9DQUwpOworCWZvciAodWludDMyX3QgaSA9IDA7IGkgPCBQUEhXU1Bf U0laRTsgaSArPSBzaXplb2YodWludDMyX3QpKQorCQlkd29yZF9vdXQoMCk7CisKKwkvKiBSRU5E RVJfQ09OVEVYVCAqLworCWRhdGFfb3V0KHJlbmRlcl9jb250ZXh0X2luaXQsIHNpemVvZihyZW5k ZXJfY29udGV4dF9pbml0KSk7CisKKwkvKiBCTElUVEVSX1JJTkcgKi8KKwltZW1fdHJhY2VfbWVt b3J5X3dyaXRlX2hlYWRlcl9vdXQoQkxJVFRFUl9SSU5HX0FERFIsIFJJTkdfU0laRSwKKwkJCQkJ ICBBVUJfTUVNX1RSQUNFX01FTU9SWV9BRERSRVNTX1NQQUNFX0xPQ0FMKTsKKwlmb3IgKHVpbnQz Ml90IGkgPSAwOyBpIDwgUklOR19TSVpFOyBpICs9IHNpemVvZih1aW50MzJfdCkpCisJCWR3b3Jk X291dCgwKTsKKworCS8qIEJMSVRURVJfUFBIV1NQICovCisJbWVtX3RyYWNlX21lbW9yeV93cml0 ZV9oZWFkZXJfb3V0KEJMSVRURVJfQ09OVEVYVF9BRERSLAorCQkJCQkgIFBQSFdTUF9TSVpFICsK KwkJCQkJICBzaXplb2YoYmxpdHRlcl9jb250ZXh0X2luaXQpLAorCQkJCQkgIEFVQl9NRU1fVFJB Q0VfTUVNT1JZX0FERFJFU1NfU1BBQ0VfTE9DQUwpOworCWZvciAodWludDMyX3QgaSA9IDA7IGkg PCBQUEhXU1BfU0laRTsgaSArPSBzaXplb2YodWludDMyX3QpKQorCQlkd29yZF9vdXQoMCk7CisK KwkvKiBCTElUVEVSX0NPTlRFWFQgKi8KKwlkYXRhX291dChibGl0dGVyX2NvbnRleHRfaW5pdCwg c2l6ZW9mKGJsaXR0ZXJfY29udGV4dF9pbml0KSk7CisKKwkvKiBWSURFT19SSU5HICovCisJbWVt X3RyYWNlX21lbW9yeV93cml0ZV9oZWFkZXJfb3V0KFZJREVPX1JJTkdfQUREUiwgUklOR19TSVpF LAorCQkJCQkgIEFVQl9NRU1fVFJBQ0VfTUVNT1JZX0FERFJFU1NfU1BBQ0VfTE9DQUwpOworCWZv ciAodWludDMyX3QgaSA9IDA7IGkgPCBSSU5HX1NJWkU7IGkgKz0gc2l6ZW9mKHVpbnQzMl90KSkK KwkJZHdvcmRfb3V0KDApOworCisJLyogVklERU9fUFBIV1NQICovCisJbWVtX3RyYWNlX21lbW9y eV93cml0ZV9oZWFkZXJfb3V0KFZJREVPX0NPTlRFWFRfQUREUiwKKwkJCQkJICBQUEhXU1BfU0la RSArCisJCQkJCSAgc2l6ZW9mKHZpZGVvX2NvbnRleHRfaW5pdCksCisJCQkJCSAgQVVCX01FTV9U UkFDRV9NRU1PUllfQUREUkVTU19TUEFDRV9MT0NBTCk7CisJZm9yICh1aW50MzJfdCBpID0gMDsg aSA8IFBQSFdTUF9TSVpFOyBpICs9IHNpemVvZih1aW50MzJfdCkpCisJCWR3b3JkX291dCgwKTsK KworCS8qIFZJREVPX0NPTlRFWFQgKi8KKwlkYXRhX291dCh2aWRlb19jb250ZXh0X2luaXQsIHNp emVvZih2aWRlb19jb250ZXh0X2luaXQpKTsKKworCXJlZ2lzdGVyX3dyaXRlX291dChIV1NfUEdB X1JDU1VOSVQsIFJFTkRFUl9DT05URVhUX0FERFIpOworCXJlZ2lzdGVyX3dyaXRlX291dChIV1Nf UEdBX1ZDU1VOSVQwLCBWSURFT19DT05URVhUX0FERFIpOworCXJlZ2lzdGVyX3dyaXRlX291dChI V1NfUEdBX0JDU1VOSVQsIEJMSVRURVJfQ09OVEVYVF9BRERSKTsKKworCXJlZ2lzdGVyX3dyaXRl X291dChHRlhfTU9ERV9SQ1NVTklULCAweDgwMDA4MDAwIC8qIGV4ZWNsaXN0IGVuYWJsZSAqLyk7 CisJcmVnaXN0ZXJfd3JpdGVfb3V0KEdGWF9NT0RFX1ZDU1VOSVQwLCAweDgwMDA4MDAwIC8qIGV4 ZWNsaXN0IGVuYWJsZSAqLyk7CisJcmVnaXN0ZXJfd3JpdGVfb3V0KEdGWF9NT0RFX0JDU1VOSVQs IDB4ODAwMDgwMDAgLyogZXhlY2xpc3QgZW5hYmxlICovKTsKK30KKworc3RhdGljIHZvaWQgd3Jp dGVfaGVhZGVyKHZvaWQpCiB7CiAJY2hhciBhcHBfbmFtZVs4ICogNF07CiAJY2hhciBjb21tZW50 WzE2XTsKQEAgLTIyMCw3ICs1MDEsNyBAQCB3cml0ZV9oZWFkZXIodm9pZCkKIAlkd29yZF9vdXQo Z3R0X3NpemUoKSk7IC8qIHNpemUgKi8KIAlpZiAoYWRkcl9iaXRzID4gMzIpCiAJCWR3b3JkX291 dCgwKTsKLQlmb3IgKHVpbnQzMl90IGkgPSAwOyBpICogZ3R0X2VudHJ5X3NpemUoKSA8IGd0dF9z aXplKCk7IGkrKykgeworCWZvciAodWludDMyX3QgaSA9IDA7IGkgPCBOVU1fUFRfRU5UUklFUzsg aSsrKSB7CiAJCWR3b3JkX291dChlbnRyeSArIDB4MTAwMCAqIGkpOwogCQlpZiAoYWRkcl9iaXRz ID4gMzIpCiAJCQlkd29yZF9vdXQoMCk7CkBAIC0yNDUsMTUgKzUyNiwyMSBAQCBhdWJfd3JpdGVf dHJhY2VfYmxvY2sodWludDMyX3QgdHlwZSwgdm9pZCAqdmlydHVhbCwgdWludDMyX3Qgc2l6ZSwg dWludDY0X3QgZ3R0XwogCQlpZiAoYmxvY2tfc2l6ZSA+IDggKiA0MDk2KQogCQkJYmxvY2tfc2l6 ZSA9IDggKiA0MDk2OwogCi0JCWR3b3JkX291dChDTURfQVVCX1RSQUNFX0hFQURFUl9CTE9DSyB8 Ci0JCQkgICgoYWRkcl9iaXRzID4gMzIgPyA2IDogNSkgLSAyKSk7Ci0JCWR3b3JkX291dChBVUJf VFJBQ0VfTUVNVFlQRV9HVFQgfAotCQkJICB0eXBlIHwgQVVCX1RSQUNFX09QX0RBVEFfV1JJVEUp OwotCQlkd29yZF9vdXQoc3VidHlwZSk7Ci0JCWR3b3JkX291dChndHRfb2Zmc2V0ICsgb2Zmc2V0 KTsKLQkJZHdvcmRfb3V0KGFsaWduX3UzMihibG9ja19zaXplLCA0KSk7Ci0JCWlmIChhZGRyX2Jp dHMgPiAzMikKLQkJCWR3b3JkX291dCgoZ3R0X29mZnNldCArIG9mZnNldCkgPj4gMzIpOworCQlp ZiAoZ2VuID49IDEwKSB7CisJCQltZW1fdHJhY2VfbWVtb3J5X3dyaXRlX2hlYWRlcl9vdXQoZ3R0 X29mZnNldCArIG9mZnNldCwKKwkJCQkJCQkgIGJsb2NrX3NpemUsCisJCQkJCQkJICBBVUJfTUVN X1RSQUNFX01FTU9SWV9BRERSRVNTX1NQQUNFX0xPQ0FMKTsKKwkJfSBlbHNlIHsKKwkJCWR3b3Jk X291dChDTURfQVVCX1RSQUNFX0hFQURFUl9CTE9DSyB8CisJCQkJICAoKGFkZHJfYml0cyA+IDMy ID8gNiA6IDUpIC0gMikpOworCQkJZHdvcmRfb3V0KEFVQl9UUkFDRV9NRU1UWVBFX0dUVCB8CisJ CQkJICB0eXBlIHwgQVVCX1RSQUNFX09QX0RBVEFfV1JJVEUpOworCQkJZHdvcmRfb3V0KHN1YnR5 cGUpOworCQkJZHdvcmRfb3V0KGd0dF9vZmZzZXQgKyBvZmZzZXQpOworCQkJZHdvcmRfb3V0KGFs aWduX3UzMihibG9ja19zaXplLCA0KSk7CisJCQlpZiAoYWRkcl9iaXRzID4gMzIpCisJCQkJZHdv cmRfb3V0KChndHRfb2Zmc2V0ICsgb2Zmc2V0KSA+PiAzMik7CisJCX0KIAogCQlpZiAodmlydHVh bCkKIAkJCWRhdGFfb3V0KCgoY2hhciAqKSBHRVRfUFRSKHZpcnR1YWwpKSArIG9mZnNldCwgYmxv Y2tfc2l6ZSk7CkBAIC0yOTEsNiArNTc4LDY0IEBAIHdyaXRlX3JlbG9jKHZvaWQgKnAsIHVpbnQ2 NF90IHYpCiAJfQogfQogCitzdGF0aWMgdm9pZAorYXViX2R1bXBfZXhlY2xpc3QodWludDY0X3Qg YmF0Y2hfb2Zmc2V0LCBpbnQgcmluZ19mbGFnKQoreworCXVpbnQzMl90IHJpbmdfYWRkcjsKKwl1 aW50NjRfdCBkZXNjcmlwdG9yOworCXVpbnQzMl90IGVsc3BfcmVnOworCXVpbnQzMl90IHN0YXR1 c19yZWc7CisKKwlzd2l0Y2ggKHJpbmdfZmxhZykgeworCWNhc2UgSTkxNV9FWEVDX0RFRkFVTFQ6 CisJY2FzZSBJOTE1X0VYRUNfUkVOREVSOgorCQlyaW5nX2FkZHIgPSBSRU5ERVJfUklOR19BRERS OworCQlkZXNjcmlwdG9yID0gUkVOREVSX0NPTlRFWFRfREVTQ1JJUFRPUjsKKwkJZWxzcF9yZWcg PSBFWEVDTElTVF9TVUJNSVRQT1JUX1JDU1VOSVQ7CisJCXN0YXR1c19yZWcgPSBFWEVDTElTVF9T VEFUVVNfUkNTVU5JVDsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X0VYRUNfQlNEOgorCQlyaW5nX2Fk ZHIgPSBWSURFT19SSU5HX0FERFI7CisJCWRlc2NyaXB0b3IgPSBWSURFT19DT05URVhUX0RFU0NS SVBUT1I7CisJCWVsc3BfcmVnID0gRVhFQ0xJU1RfU1VCTUlUUE9SVF9WQ1NVTklUMDsKKwkJc3Rh dHVzX3JlZyA9IEVYRUNMSVNUX1NUQVRVU19WQ1NVTklUMDsKKwkJYnJlYWs7CisJY2FzZSBJOTE1 X0VYRUNfQkxUOgorCQlyaW5nX2FkZHIgPSBCTElUVEVSX1JJTkdfQUREUjsKKwkJZGVzY3JpcHRv ciA9IEJMSVRURVJfQ09OVEVYVF9ERVNDUklQVE9SOworCQllbHNwX3JlZyA9IEVYRUNMSVNUX1NV Qk1JVFBPUlRfQkNTVU5JVDsKKwkJc3RhdHVzX3JlZyA9IEVYRUNMSVNUX1NUQVRVU19CQ1NVTklU OworCQlicmVhazsKKwl9CisKKwltZW1fdHJhY2VfbWVtb3J5X3dyaXRlX2hlYWRlcl9vdXQocmlu Z19hZGRyLCAxNiwKKwkJCQkJICBBVUJfTUVNX1RSQUNFX01FTU9SWV9BRERSRVNTX1NQQUNFX0xP Q0FMKTsKKwlkd29yZF9vdXQoQVVCX01JX0JBVENIX0JVRkZFUl9TVEFSVCB8ICgzIC0gMikpOwor CWR3b3JkX291dChiYXRjaF9vZmZzZXQgJiAweEZGRkZGRkZGKTsKKwlkd29yZF9vdXQoYmF0Y2hf b2Zmc2V0ID4+IDMyKTsKKwlkd29yZF9vdXQoMCAvKiBNSV9OT09QICovKTsKKworCW1lbV90cmFj ZV9tZW1vcnlfd3JpdGVfaGVhZGVyX291dChyaW5nX2FkZHIgKyA4MTkyICsgMjAsIDQsCisJCQkJ CSAgQVVCX01FTV9UUkFDRV9NRU1PUllfQUREUkVTU19TUEFDRV9MT0NBTCk7CisJZHdvcmRfb3V0 KDApOyAvKiBSSU5HX0JVRkZFUl9IRUFEICovCisJbWVtX3RyYWNlX21lbW9yeV93cml0ZV9oZWFk ZXJfb3V0KHJpbmdfYWRkciArIDgxOTIgKyAyOCwgNCwKKwkJCQkJICBBVUJfTUVNX1RSQUNFX01F TU9SWV9BRERSRVNTX1NQQUNFX0xPQ0FMKTsKKwlkd29yZF9vdXQoMTYpOyAvKiBSSU5HX0JVRkZF Ul9UQUlMICovCisKKwlyZWdpc3Rlcl93cml0ZV9vdXQoZWxzcF9yZWcsIDApOworCXJlZ2lzdGVy X3dyaXRlX291dChlbHNwX3JlZywgOCk7CisJcmVnaXN0ZXJfd3JpdGVfb3V0KGVsc3BfcmVnLCBk ZXNjcmlwdG9yID4+IDMyKTsKKwlyZWdpc3Rlcl93cml0ZV9vdXQoZWxzcF9yZWcsIGRlc2NyaXB0 b3IgJiAweEZGRkZGRkZGKTsKKworCWR3b3JkX291dChDTURfTUVNX1RSQUNFX1JFR0lTVEVSX1BP TEwgfCAoNSArIDEgLSAxKSk7CisJZHdvcmRfb3V0KHN0YXR1c19yZWcpOworCWR3b3JkX291dChB VUJfTUVNX1RSQUNFX1JFR0lTVEVSX1NJWkVfRFdPUkQgfAorCQkgIEFVQl9NRU1fVFJBQ0VfUkVH SVNURVJfU1BBQ0VfTU1JTyk7CisJZHdvcmRfb3V0KDB4MDAwMDAwMTApOwkvKiBtYXNrIGxvICov CisJZHdvcmRfb3V0KDB4MDAwMDAwMDApOwkvKiBtYXNrIGhpICovCisJZHdvcmRfb3V0KDB4MDAw MDAwMDApOworfQorCiBzdGF0aWMgdm9pZAogYXViX2R1bXBfcmluZ2J1ZmZlcih1aW50NjRfdCBi YXRjaF9vZmZzZXQsIHVpbnQ2NF90IG9mZnNldCwgaW50IHJpbmdfZmxhZykKIHsKQEAgLTQwNCw3 ICs3NDksNyBAQCBkdW1wX2V4ZWNidWZmZXIyKGludCBmZCwgc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjYnVmZmVyMiAqZXhlY2J1ZmZlcjIpCiAJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVj dDIgKmV4ZWNfb2JqZWN0cyA9CiAJCShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAq KSAodWludHB0cl90KSBleGVjYnVmZmVyMi0+YnVmZmVyc19wdHI7CiAJdWludDMyX3QgcmluZ19m bGFnID0gZXhlY2J1ZmZlcjItPmZsYWdzICYgSTkxNV9FWEVDX1JJTkdfTUFTSzsKLQl1aW50MzJf dCBvZmZzZXQgPSBndHRfc2l6ZSgpOworCXVpbnQzMl90IG9mZnNldDsKIAlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqb2JqOwogCXN0cnVjdCBibyAqYm8sICpiYXRjaF9ibzsKIAlp bnQgYmF0Y2hfaW5kZXg7CkBAIC00MjYsNyArNzcxLDEwIEBAIGR1bXBfZXhlY2J1ZmZlcjIoaW50 IGZkLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpleGVjYnVmZmVyMikKIAogCQlh ZGRyX2JpdHMgPSBnZW4gPj0gOCA/IDQ4IDogMzI7CiAKLQkJd3JpdGVfaGVhZGVyKCk7CisJCWlm IChnZW4gPj0gMTApCisJCQlnZW4xMF93cml0ZV9oZWFkZXIoKTsKKwkJZWxzZQorCQkJd3JpdGVf aGVhZGVyKCk7CiAKIAkJaWYgKHZlcmJvc2UpCiAJCQlwcmludGYoIltpbnRlbF9hdWJkdW1wOiBy dW5uaW5nLCAiCkBAIC00MzQsNiArNzgyLDExIEBAIGR1bXBfZXhlY2J1ZmZlcjIoaW50IGZkLCBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpleGVjYnVmZmVyMikKIAkJCSAgICAgICBm aWxlbmFtZSwgZGV2aWNlLCBnZW4pOwogCX0KIAorCWlmIChnZW4gPj0gMTApCisJCW9mZnNldCA9 IFNUQVRJQ19HR1RUX01BUF9FTkQ7CisJZWxzZQorCQlvZmZzZXQgPSBndHRfc2l6ZSgpOworCiAJ aWYgKHZlcmJvc2UpCiAJCXByaW50ZigiRHVtcGluZyBleGVjYnVmZmVyMjpcbiIpOwogCkBAIC00 ODgsOSArODQxLDE1IEBAIGR1bXBfZXhlY2J1ZmZlcjIoaW50IGZkLCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNidWZmZXIyICpleGVjYnVmZmVyMikKIAkJCWZyZWUoZGF0YSk7CiAJfQogCi0JLyog RHVtcCByaW5nIGJ1ZmZlciAqLwotCWF1Yl9kdW1wX3JpbmdidWZmZXIoYmF0Y2hfYm8tPm9mZnNl dCArIGV4ZWNidWZmZXIyLT5iYXRjaF9zdGFydF9vZmZzZXQsCi0JCQkgICAgb2Zmc2V0LCByaW5n X2ZsYWcpOworCWlmIChnZW4gPj0gMTApIHsKKwkJYXViX2R1bXBfZXhlY2xpc3QoYmF0Y2hfYm8t Pm9mZnNldCArCisJCQkJICBleGVjYnVmZmVyMi0+YmF0Y2hfc3RhcnRfb2Zmc2V0LCByaW5nX2Zs YWcpOworCX0gZWxzZSB7CisJCS8qIER1bXAgcmluZyBidWZmZXIgKi8KKwkJYXViX2R1bXBfcmlu Z2J1ZmZlcihiYXRjaF9iby0+b2Zmc2V0ICsKKwkJCQkgICAgZXhlY2J1ZmZlcjItPmJhdGNoX3N0 YXJ0X29mZnNldCwgb2Zmc2V0LAorCQkJCSAgICByaW5nX2ZsYWcpOworCX0KIAogCWZvciAoaW50 IGkgPSAwOyBpIDwgQVJSQVlfU0laRShmaWxlcyk7IGkrKykgewogCQlpZiAoZmlsZXNbaV0gIT0g TlVMTCkKLS0gCjIuMTQuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==