Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp2150969rwd; Fri, 19 May 2023 01:31:25 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6uuJcICmFY28iBW8toJSZe8zgJHXLW8BFlXjH4DhcZXiLgDM+oSLbYC8K/Xx2mj6PCKzjS X-Received: by 2002:a17:902:e851:b0:1a9:57b4:9d5a with SMTP id t17-20020a170902e85100b001a957b49d5amr1777557plg.31.1684485084661; Fri, 19 May 2023 01:31:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684485084; cv=none; d=google.com; s=arc-20160816; b=Znh799pKjWrOk+FdofKIGBYDpO7TS8GuV2IN61986Y7epUkp3z0vP4Rm9M5dUAOTfw GtbkaXUt3/IhrYNEQyOwbyBCd4KcJHaBoOtXglXDfAlHbw70AxtPjbJ6fteQ/tcDXQJF LmRKS/ZNkYnM+6Y4YMe7V3OuljEC7q++QMffXeWKb7bIXuCncb7m2SMah4t1o2iB+I86 /u47g3zLtrN8ma8t2TrVw9FDxcNwUh/58dFYiAAJRDQf+zEY8esbw/sQRiodo9k24aVm ou19LJvwJ7ebMS8p2A+p+3L2LrN/HgJZI8BAx3gfQYDMn3CQU4Q8Z6Q6yCWIiIhiHjze yR/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:date:cc:to:from:subject:message-id :dkim-signature; bh=9nwz6WM1FbOl8Ms78rScRTZQ2b+bz8YgJX5kqoasnlI=; b=b/ANggK4SDJ0vQcjvxbgGb3jeMPnDifkNa7Wk2EZTWu6HtCSmVC1c0gQ2LSS3yvreQ rMGbt4Uazkf994ub7avTgWi+r2rW49wA1E3mmx7SsPCCP6LAXX1orsXGd48yFPS2riVS 1j24iY2JonYCGmQ+hr+9Ybj5qS4in14/yM+oUiJ++i5Lp+wY1HvpTNphJK09751uVnXN Nzw6rCJKp6ko19+eoWxykyizeAjPd5wzpTQTnR4BeuGGO/5c8cLprWd+IYw9Y7VeTP45 83bp++Nf/SrdAMe+D8DXxGxy6IfDsHlD2CskRv5y0Z+y0BiXxotY6oR3FJiSketl4I+A 3ICA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@crapouillou.net header.s=mail header.b=SSQ92CCE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id jc9-20020a17090325c900b001a6a636eb6dsi3090415plb.215.2023.05.19.01.31.12; Fri, 19 May 2023 01:31:24 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@crapouillou.net header.s=mail header.b=SSQ92CCE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230255AbjESIRL (ORCPT + 99 others); Fri, 19 May 2023 04:17:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52608 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229763AbjESIRJ (ORCPT ); Fri, 19 May 2023 04:17:09 -0400 Received: from aposti.net (aposti.net [89.234.176.197]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 79D73E6; Fri, 19 May 2023 01:17:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=crapouillou.net; s=mail; t=1684484219; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9nwz6WM1FbOl8Ms78rScRTZQ2b+bz8YgJX5kqoasnlI=; b=SSQ92CCEhDBEznnMP75Qp6krjkhXLVS4H1d6GBKzL5vhjnAj0FbuVsZ9OppN0UUdarY/94 MDj0CskN1eCkLgkfvJsqu/mReFrF3WGcmhSZ2FOP5rBuMW6Y0P/lm4jUidXnWjs2wC2Y3b RsV87jDnd3TLjkq4OEUo05lNPZRgSVs= Message-ID: <0d165c7efbb71a65803abddc364e1c5252b8b939.camel@crapouillou.net> Subject: Re: [PATCH v1 2/3] usb: phy: Add driver for the Realtek SoC USB 2.0/3.0 PHY From: Paul Cercueil To: Stanley Chang , Greg Kroah-Hartman Cc: Vinod Koul , Kishon Vijay Abraham I , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alan Stern , Ray Chi , Bagas Sanjaya , Eugeniu Rosca , Michael Grzeschik , Matthias Kaehlcke , Flavio Suligoi , Mathias Nyman , Bhuvanesh Surachari , Arnd Bergmann , Linus Walleij , linux-phy@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org Date: Fri, 19 May 2023 10:16:56 +0200 In-Reply-To: <20230519045825.28369-2-stanley_chang@realtek.com> References: <20230519045825.28369-1-stanley_chang@realtek.com> <20230519045825.28369-2-stanley_chang@realtek.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgU3RhbmxleSwKCkxlIHZlbmRyZWRpIDE5IG1haSAyMDIzIMOgIDEyOjU4ICswODAwLCBTdGFu bGV5IENoYW5nIGEgw6ljcml0wqA6Cj4gUmVhbHRlayBESEMgKGRpZ2l0YWwgaG9tZSBjZW50ZXIp IFJURCBTb0NzIHN1cHBvcnQgRFdDMyBYSENJIFVTQgo+IDIuMC8zLjAKPiBjb250cm9sbGVyLiBB ZGRlZCB0d28gZHJpdmVycyB0byBkcml2ZSB0aGXCoCBVU0IgMi4wLzMuMCBQSFkKPiB0cmFuc2Nl aXZlcnMuCj4gRm9yIFVTQiAzLjAgdHJhbnNjZWl2ZXJzLCBhIGRyaXZlciBwaHktcnRrLXVzYjMg aXMgcHJvdmlkZWQuCj4gVGhlIGRyaXZlciBwaHktcnRrLXVzYjIgaXMgdXNlZCB0byBzdXBwb3J0 IFVTQiAyLjAgdHJhbnNjZWl2ZXJzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFN0YW5sZXkgQ2hhbmcg PHN0YW5sZXlfY2hhbmdAcmVhbHRlay5jb20+Cj4gLS0tCj4gwqBkcml2ZXJzL3VzYi9waHkvS2Nv bmZpZ8KgwqDCoMKgwqDCoMKgIHzCoMKgIDE0ICsKPiDCoGRyaXZlcnMvdXNiL3BoeS9NYWtlZmls ZcKgwqDCoMKgwqDCoCB8wqDCoMKgIDIgKwo+IMKgZHJpdmVycy91c2IvcGh5L3BoeS1ydGstdXNi LmjCoCB8wqDCoCA4OCArKwo+IMKgZHJpdmVycy91c2IvcGh5L3BoeS1ydGstdXNiMi5jIHwgMjE5 Ngo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gwqBkcml2ZXJzL3VzYi9waHkv cGh5LXJ0ay11c2IzLmMgfCAxMTY1ICsrKysrKysrKysrKysrKysrCj4gwqA1IGZpbGVzIGNoYW5n ZWQsIDM0NjUgaW5zZXJ0aW9ucygrKQo+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNi L3BoeS9waHktcnRrLXVzYi5oCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvcGh5 L3BoeS1ydGstdXNiMi5jCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvcGh5L3Bo eS1ydGstdXNiMy5jCgpJJ20gcHJldHR5IHN1cmUgdGhhdCBkcml2ZXJzL3VzYi9waHkvIGlzIGRl cHJlY2F0ZWQgbm93Li4uCgpOZXcgZHJpdmVycyBzaG91bGQgYmUgd3JpdHRlbiBmb3IgdGhlIGdl bmVyaWMgUEhZIHN1YnN5c3RlbSBpbgpkcml2ZXJzL3BoeS8uCgpDaGVlcnMsCi1QYXVsCgo+IAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9waHkvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3BoeS9L Y29uZmlnCj4gaW5kZXggNWY2MjlkN2NhZDY0Li5iMmU1ZmViOWYzN2EgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy91c2IvcGh5L0tjb25maWcKPiArKysgYi9kcml2ZXJzL3VzYi9waHkvS2NvbmZpZwo+ IEBAIC0xNzIsNCArMTcyLDE4IEBAIGNvbmZpZyBVU0JfVUxQSV9WSUVXUE9SVAo+IMKgwqDCoMKg wqDCoMKgwqDCoCBQcm92aWRlcyByZWFkL3dyaXRlIG9wZXJhdGlvbnMgdG8gdGhlIFVMUEkgcGh5 IHJlZ2lzdGVyIHNldAo+IGZvcgo+IMKgwqDCoMKgwqDCoMKgwqDCoCBjb250cm9sbGVycyB3aXRo IGEgdmlld3BvcnQgcmVnaXN0ZXIgKGUuZy4gQ2hpcGlkZWEvQVJDCj4gY29udHJvbGxlcnMpLgo+ IMKgCj4gK2NvbmZpZyBSVEtfVVNCMlBIWQo+ICvCoMKgwqDCoMKgwqDCoHRyaXN0YXRlICJSZWFs dGVrIFJURCBVU0IyIFBIWSBUcmFuc2NlaXZlciBEcml2ZXIiCj4gK8KgwqDCoMKgwqDCoMKgc2Vs ZWN0IFVTQl9QSFkKPiArwqDCoMKgwqDCoMKgwqBoZWxwCj4gK8KgwqDCoMKgwqDCoMKgwqAgRW5h YmxlIHRoaXMgdG8gc3VwcG9ydCBSZWFsdGVrIFNvQyBVU0IyIHBoeSB0cmFuc2NlaXZlci4KPiAr wqDCoMKgwqDCoMKgwqDCoCBTdXBwb3J0IHRoZSBESEMgKGRpZ2l0YWwgaG9tZSBjZW50ZXIpIFJU RCBzZXJpZXMgU29Dcy4KPiArCj4gK2NvbmZpZyBSVEtfVVNCM1BIWQo+ICvCoMKgwqDCoMKgwqDC oHRyaXN0YXRlICJSZWFsdGVrIFJURCBVU0IzIFBIWSBUcmFuc2NlaXZlciBEcml2ZXIiCj4gK8Kg wqDCoMKgwqDCoMKgc2VsZWN0IFVTQl9QSFkKPiArwqDCoMKgwqDCoMKgwqBoZWxwCj4gK8KgwqDC oMKgwqDCoMKgwqAgRW5hYmxlIHRoaXMgdG8gc3VwcG9ydCBSZWFsdGVrIFNvQyBVU0IzIHBoeSB0 cmFuc2NlaXZlci4KPiArwqDCoMKgwqDCoMKgwqDCoCBTdXBwb3J0IHRoZSBESEMgKGRpZ2l0YWwg aG9tZSBjZW50ZXIpIFJURCBzZXJpZXMgU29Dcy4KPiArCj4gwqBlbmRtZW51Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvdXNiL3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3BoeS9NYWtlZmlsZQo+ IGluZGV4IGU1ZDYxOWI0ZDhmNi4uMWU2NDI1NWZjZDFmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv dXNiL3BoeS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvdXNiL3BoeS9NYWtlZmlsZQo+IEBAIC0y MywzICsyMyw1IEBAIG9iai0kKENPTkZJR19VU0JfTVhTX1BIWSnCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCs9IHBoeS1teHMtCj4gdXNiLm8KPiDCoG9iai0kKENPTkZJR19VU0JfVUxQSSnCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKz0gcGh5LXVscGkubwo+IMKgb2JqLSQoQ09O RklHX1VTQl9VTFBJX1ZJRVdQT1JUKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKz0g cGh5LXVscGktCj4gdmlld3BvcnQubwo+IMKgb2JqLSQoQ09ORklHX0tFWVNUT05FX1VTQl9QSFkp wqDCoMKgwqDCoMKgwqDCoMKgKz0gcGh5LWtleXN0b25lLm8KPiArb2JqLSQoQ09ORklHX1JUS19V U0IyUEhZKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqArPSBwaHktcnRrLXVzYjIubwo+ICtv YmotJChDT05GSUdfUlRLX1VTQjNQSFkpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCs9IHBo eS1ydGstdXNiMy5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3BoeS9waHktcnRrLXVzYi5o IGIvZHJpdmVycy91c2IvcGh5L3BoeS1ydGstCj4gdXNiLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNTY1Mjg2NmQwYjAyCj4gLS0tIC9kZXYvbnVsbAo+ICsr KyBiL2RyaXZlcnMvdXNiL3BoeS9waHktcnRrLXVzYi5oCj4gQEAgLTAsMCArMSw4OCBAQAo+ICsv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+ICsvKgo+ICsgKsKgIHBoeS1y dGstdXNiLmggUmVhbHRlayB1c2IgcGh5IGhlYWRlciBmaWxlCj4gKyAqCj4gKyAqIGNvcHlyaWdo dCAoYykgMjAyMyByZWFsdGVrIHNlbWljb25kdWN0b3IgY29ycG9yYXRpb24KPiArICoKPiArICov Cj4gKwo+ICsjaWZuZGVmIF9fUEhZX1JUS19VU0JfSF9fCj4gKyNkZWZpbmUgX19QSFlfUlRLX1VT Ql9IX18KPiArCj4gK3N0cnVjdCBydGtfdXNiX3BoeSB7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IHVzYl9waHkgcGh5Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldjsKPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgcmVnbWFwICp1c2JfcmVnczsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgcmVnbWFwICptYWNfcmVnczsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcmVnbWFwICp1c2Jf Y3RybF9yZWdzOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpbnQgcG9ydF9pbmRleDsKPiArwqDCoMKg wqDCoMKgwqBpbnQgcGh5TjsKPiArwqDCoMKgwqDCoMKgwqB2b2lkICpyZWdfYWRkcjsKPiArwqDC oMKgwqDCoMKgwqB2b2lkICpwaHlfZGF0YTsKPiArCj4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMK PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z19kaXI7Cj4gKyNlbmRpZgo+ICt9 Owo+ICsKPiArI2RlZmluZSBwaHlfcmVhZChhZGRyKSBfX3Jhd19yZWFkbChhZGRyKQo+ICsjZGVm aW5lIHBoeV93cml0ZShhZGRyLCB2YWwpIGRvIHsgXAo+ICvCoMKgwqDCoMKgwqDCoC8qIERvIHNt cF93bWIgKi8gXAo+ICvCoMKgwqDCoMKgwqDCoHNtcF93bWIoKTsgX19yYXdfd3JpdGVsKHZhbCwg YWRkcik7IFwKPiArfSB3aGlsZSAoMCkKPiArI2RlZmluZSBQSFlfSU9fVElNRU9VVF9NU0VDwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgKDUwKQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQgdXRtaV93 YWl0X3JlZ2lzdGVyKHZvaWQgX19pb21lbSAqcmVnLCB1MzIgbWFzaywKPiB1MzIgcmVzdWx0KQo+ ICt7Cj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArCj4g bXNlY3NfdG9famlmZmllcyhQSFlfSU9fVElNRU9VVF9NU0VDKTsKPiArCj4gK8KgwqDCoMKgwqDC oMKgd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC8qIERvIHNtcF9ybWIgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgc21wX3JtYigpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAoKHBoeV9yZWFkKHJlZykgJiBtYXNrKSA9PSByZXN1bHQpCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdWRlbGF5KDEwMCk7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDC oMKgwqDCoHByX2VycigiXDAzM1swOzMyOzMxbSBjYW4ndCBwcm9ncmFtIFVTQiBwaHkgXDAzM1tt XG4iKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIC1FVElNRURPVVQ7Cj4gK30KPiArCj4g KyNkZWZpbmUgREVGQVVMVF9DSElQX1JFVklTSU9OIDB4QTAwCj4gKyNkZWZpbmUgTUFYX0NISVBf UkVWSVNJT04gMHhDMDAKPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IF9fZ2V0X2NoaXBfcmV2aXNp b24odm9pZCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoGludCBjaGlwX3JldmlzaW9uID0gMHhGRkY7 Cj4gK8KgwqDCoMKgwqDCoMKgY2hhciByZXZpc2lvbltdID0gIkZGRiI7Cj4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IHNvY19kZXZpY2VfYXR0cmlidXRlIHNvY19hdHRbXSA9IHt7LnJldmlzaW9uID0K PiByZXZpc2lvbn0sIHt9fTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc29jX2RldmljZV9hdHRy aWJ1dGUgKnNvY19hdHRfbWF0Y2ggPSBOVUxMOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB3aGlsZSAo c29jX2F0dF9tYXRjaCA9PSBOVUxMKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGNoaXBfcmV2aXNpb24tLTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlm IChjaGlwX3JldmlzaW9uIDw9IERFRkFVTFRfQ0hJUF9SRVZJU0lPTikKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoY2hpcF9yZXZpc2lvbiA+IE1BWF9DSElQX1JFVklTSU9OKQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hpcF9yZXZp c2lvbiA9IE1BWF9DSElQX1JFVklTSU9OOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBlbHNlIGlmICgoY2hpcF9yZXZpc2lvbiAmIDB4RkYpID4gMHhGKQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hpcF9yZXZpc2lvbiA9IChjaGlwX3Jl dmlzaW9uICYgMHhGMDApICsKPiAweEY7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBzbnByaW50ZihyZXZpc2lvbiwgNCwgIiVYIiwgY2hpcF9yZXZpc2lvbik7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzb2NfYXR0X21hdGNoID0gKHN0cnVjdCBzb2Nf ZGV2aWNlX2F0dHJpYnV0ZSAqKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHNvY19kZXZpY2VfbWF0Y2goc29jX2F0dCk7Cj4gK8KgwqDCoMKg wqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoc29jX2F0dF9tYXRjaCkgewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcl9kZWJ1ZygiJXMgZ2V0IGNoaXBfcmV2aXNpb24g JXhcbiIsIF9fZnVuY19fLAo+IGNoaXBfcmV2aXNpb24pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gY2hpcF9yZXZpc2lvbjsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoHByX2RlYnVnKCIlczogVXNlIGRlZmF1bHQgY2hpcF9yZXZpc2lvbiAl eFxuIiwgX19mdW5jX18sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBE RUZBVUxUX0NISVBfUkVWSVNJT04pOwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBERUZBVUxUX0NI SVBfUkVWSVNJT047Cj4gK30KPiArCj4gKyNlbmRpZiAvKiBfX1BIWV9SVEtfVVNCX0hfXyAqLwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9waHkvcGh5LXJ0ay11c2IyLmMgYi9kcml2ZXJzL3Vz Yi9waHkvcGh5LQo+IHJ0ay11c2IyLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAwMDAwMC4uY2U5MzA1Y2NiNmZiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv dXNiL3BoeS9waHktcnRrLXVzYjIuYwo+IEBAIC0wLDAgKzEsMjE5NiBAQAo+ICsvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKsKgIHBoeS1ydGstdXNiMi5jIFJU SyB1c2IyLjAgUEhZIGRyaXZlcgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjMgUmVhbHRl ayBTZW1pY29uZHVjdG9yIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiArI2luY2x1ZGUgPGxp bnV4L29mX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+ICsjaW5j bHVkZSA8bGludXgvdWFjY2Vzcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgo+ICsj aW5jbHVkZSA8bGludXgvbnZtZW0tY29uc3VtZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ21h cC5oPgo+ICsjaW5jbHVkZSA8bGludXgvc3lzX3NvYy5oPgo+ICsjaW5jbHVkZSA8bGludXgvbWZk L3N5c2Nvbi5oPgo+ICsjaW5jbHVkZSA8bGludXgvdXNiLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC91 c2IvcGh5Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC91c2IvaGNkLmg+Cj4gKwo+ICsjaW5jbHVkZSAi cGh5LXJ0ay11c2IuaCIKPiArCj4gKyNkZWZpbmUgUlRLX1VTQjJQSFlfTkFNRSAicnRrLXVzYjJw aHkiCj4gKwo+ICsvKiBHVVNCMlBIWUFDQ24gcmVnaXN0ZXIgKi8KPiArI2RlZmluZSBQSFlfTkVX X1JFR19SRVEgQklUKDI1KQo+ICsjZGVmaW5lIFBIWV9WU1RTX0JVU1nCoMKgIEJJVCgyMykKPiAr I2RlZmluZSBQSFlfVkNUUkxfU0hJRlQgOAo+ICsjZGVmaW5lIFBIWV9SRUdfREFUQV9NQVNLIDB4 ZmYKPiArCj4gKyNkZWZpbmUgR0VUX0xPV19OSUJCTEUoYWRkcikgKGFkZHIgJiAweDBmKQo+ICsj ZGVmaW5lIEdFVF9ISUdIX05JQkJMRShhZGRyKSAoKGFkZHIgJiAweGYwKT4+NCkKPiArCj4gKyNk ZWZpbmUgRUZVU19VU0JfRENfQ0FMX1JBVEUgMgo+ICsjZGVmaW5lIEVGVVNfVVNCX0RDX0NBTF9N QVggNwo+ICsKPiArI2RlZmluZSBFRlVTX1VTQl9EQ19ESVNfUkFURSAxCj4gKyNkZWZpbmUgRUZV U19VU0JfRENfRElTX01BWCA3Cj4gKwo+ICsjZGVmaW5lIE1BWF9QSFlfREFUQV9TSVpFIDIwCj4g KyNkZWZpbmUgT0ZGRVNUX1BIWV9SRUFEIDB4MjAKPiArCj4gKyNkZWZpbmUgU0VUX1BBR0VfT0ZG U0VUIDB4ZjQKPiArI2RlZmluZSBTRVRfUEFHRV8wIDB4OWIKPiArI2RlZmluZSBTRVRfUEFHRV8x IDB4YmIKPiArI2RlZmluZSBTRVRfUEFHRV8yIDB4ZGIKPiArCj4gKyNkZWZpbmUgUEFHRV9TVEFS VCAweGUwCj4gKyNkZWZpbmUgUEFHRTBfMHhFNCAweGU0Cj4gKyNkZWZpbmUgUEFHRTBfMHhFNyAw eGU3Cj4gKyNkZWZpbmUgUEFHRTFfMHhFMCAweGUwCj4gKyNkZWZpbmUgUEFHRTFfMHhFMiAweGUy Cj4gKwo+ICsvKiBtYXBwaW5nIDB4RTAgdG8gMCAuLi4gMHhFNyB0byA3LCAweEYwIHRvIDggLCws IDB4RjcgdG8gMTUgKi8KPiArI2RlZmluZSBQQUdFX0FERFJfTUFQX0FSUkFZX0lOREVYKGFkZHIp IFwKPiArwqDCoMKgwqDCoMKgwqAoKChhZGRyIC0gUEFHRV9TVEFSVCkmMHg3KSArIFwKPiArwqDC oMKgwqDCoMKgwqAoKChhZGRyIC0gUEFHRV9TVEFSVCkmMHgxMCk+PjEpKQo+ICsjZGVmaW5lIEFS UkFZX0lOREVYX01BUF9QQUdFX0FERFIoaW5kZXgpIFwKPiArwqDCoMKgwqDCoMKgwqAoKChpbmRl eCArIFBBR0VfU1RBUlQpJjB4NykgKyBcCj4gK8KgwqDCoMKgwqDCoMKgKCgoaW5kZXgmMHg4KTw8 MSkgKyBQQUdFX1NUQVJUKSkKPiArCj4gK3N0cnVjdCByZWdfYWRkciB7Cj4gK8KgwqDCoMKgwqDC oMKgdm9pZCBfX2lvbWVtICpyZWdfd3JhcF92c3RhdHVzOwo+ICvCoMKgwqDCoMKgwqDCoHZvaWQg X19pb21lbSAqcmVnX2d1c2IycGh5YWNjMDsKPiArwqDCoMKgwqDCoMKgwqBpbnQgdnN0YXR1c19p bmRleDsKPiArfTsKPiArCj4gK3N0cnVjdCBwaHlfcGFyYW1ldGVyIHsKPiArwqDCoMKgwqDCoMKg wqB1OCBhZGRyOwo+ICvCoMKgwqDCoMKgwqDCoHU4IGRhdGE7Cj4gK307Cj4gKwo+ICtzdHJ1Y3Qg cGh5X2RhdGEgewo+ICvCoMKgwqDCoMKgwqDCoGludCBwYWdlMF9zaXplOwo+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBwaHlfcGFyYW1ldGVyICpwYWdlMDsKPiArwqDCoMKgwqDCoMKgwqBpbnQgcGFn ZTFfc2l6ZTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X3BhcmFtZXRlciAqcGFnZTE7Cj4g K8KgwqDCoMKgwqDCoMKgaW50IHBhZ2UyX3NpemU7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHBo eV9wYXJhbWV0ZXIgKnBhZ2UyOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBib29sIGNoZWNrX2VmdXNl Owo+ICvCoMKgwqDCoMKgwqDCoGludCBjaGVja19lZnVzZV92ZXJzaW9uOwo+ICsjZGVmaW5lIENI RUNLX0VGVVNFX1YxIDEKPiArI2RlZmluZSBDSEVDS19FRlVTRV9WMiAyCj4gK8KgwqDCoMKgwqDC oMKgaW50OF90IGVmdXNlX3VzYl9kY19jYWw7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IGVmdXNlX3Vz Yl9kY19jYWxfcmF0ZTsKPiArwqDCoMKgwqDCoMKgwqBpbnQgdXNiX2RjX2NhbF9tYXNrOwo+ICvC oMKgwqDCoMKgwqDCoGludDhfdCBlZnVzZV91c2JfZGNfZGlzOwo+ICvCoMKgwqDCoMKgwqDCoGlu dCBlZnVzZV91c2JfZGNfZGlzX3JhdGU7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHVzYl9kY19kaXNf bWFzazsKPiArwqDCoMKgwqDCoMKgwqBib29sIHVzYl9kY19kaXNfYXRfcGFnZTA7Cj4gK8KgwqDC oMKgwqDCoMKgYm9vbCBkb190b2dnbGU7Cj4gK8KgwqDCoMKgwqDCoMKgYm9vbCBkb190b2dnbGVf ZHJpdmluZzsKPiArwqDCoMKgwqDCoMKgwqBpbnQgZGlzY29ubmVjdF9kcml2aW5nX3VwZGF0ZWQ7 Cj4gK8KgwqDCoMKgwqDCoMKgYm9vbCB1c2VfZGVmYXVsdF9wYXJhbWV0ZXI7Cj4gK8KgwqDCoMKg wqDCoMKgYm9vbCBpc19kb3VibGVfc2Vuc2l0aXZpdHlfbW9kZTsKPiArwqDCoMKgwqDCoMKgwqBi b29sIGxkb19mb3JjZV9lbmFibGU7Cj4gK8KgwqDCoMKgwqDCoMKgYm9vbCBsZG9fZW5hYmxlOwo+ ICvCoMKgwqDCoMKgwqDCoHMzMiBsZG9fcGFnZTBfZTRfY29tcGVuc2F0ZTsKPiArwqDCoMKgwqDC oMKgwqBzMzIgcGFnZTBfZTRfY29tcGVuc2F0ZTsKPiArfTsKPiArCj4gK3N0YXRpYyBjaGFyIHJ0 a191c2JfcGh5X3JlYWQoc3RydWN0IHJlZ19hZGRyICpyZWdBZGRyLCBjaGFyIGFkZHIpCj4gK3sK PiArwqDCoMKgwqDCoMKgwqB2b2lkIF9faW9tZW0gKnJlZ19ndXNiMnBoeWFjYzAgPSByZWdBZGRy LT5yZWdfZ3VzYjJwaHlhY2MwOwo+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCByZWdWYWw7 Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldCA9IDA7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGFkZHIg LT0gT0ZGRVNUX1BIWV9SRUFEOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBwb2xsaW5nIHVudGls IFZCdXN5ID09IDAgKi8KPiArwqDCoMKgwqDCoMKgwqByZXQgPSB1dG1pX3dhaXRfcmVnaXN0ZXIo cmVnX2d1c2IycGh5YWNjMCwgUEhZX1ZTVFNfQlVTWSwgMCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYg KHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIChjaGFyKXJldDsK PiArCj4gK8KgwqDCoMKgwqDCoMKgLyogVkN0cmwgPSBsb3cgbmliYmxlIG9mIGFkZHIsIGFuZCBz ZXQgUEhZX05FV19SRUdfUkVRICovCj4gK8KgwqDCoMKgwqDCoMKgcmVnVmFsID0gUEhZX05FV19S RUdfUkVRIHwgKEdFVF9MT1dfTklCQkxFKGFkZHIpIDw8Cj4gUEhZX1ZDVFJMX1NISUZUKTsKPiAr wqDCoMKgwqDCoMKgwqBwaHlfd3JpdGUocmVnX2d1c2IycGh5YWNjMCwgcmVnVmFsKTsKPiArwqDC oMKgwqDCoMKgwqByZXQgPSB1dG1pX3dhaXRfcmVnaXN0ZXIocmVnX2d1c2IycGh5YWNjMCwgUEhZ X1ZTVFNfQlVTWSwgMCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIChjaGFyKXJldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKg LyogVkN0cmwgPSBoaWdoIG5pYmJsZSBvZiBhZGRyLCBhbmQgc2V0IFBIWV9ORVdfUkVHX1JFUSAq Lwo+ICvCoMKgwqDCoMKgwqDCoHJlZ1ZhbCA9IFBIWV9ORVdfUkVHX1JFUSB8IChHRVRfSElHSF9O SUJCTEUoYWRkcikgPDwKPiBQSFlfVkNUUkxfU0hJRlQpOwo+ICvCoMKgwqDCoMKgwqDCoHBoeV93 cml0ZShyZWdfZ3VzYjJwaHlhY2MwLCByZWdWYWwpOwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IHV0 bWlfd2FpdF9yZWdpc3RlcihyZWdfZ3VzYjJwaHlhY2MwLCBQSFlfVlNUU19CVVNZLCAwKTsKPiAr wqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gKGNoYXIpcmV0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBybWIgZm9yIHJlZyByZWFk ICovCj4gK8KgwqDCoMKgwqDCoMKgc21wX3JtYigpOwo+ICvCoMKgwqDCoMKgwqDCoHJlZ1ZhbCA9 IHBoeV9yZWFkKHJlZ19ndXNiMnBoeWFjYzApOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4g KGNoYXIpIChyZWdWYWwgJiBQSFlfUkVHX0RBVEFfTUFTSyk7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgcnRrX3VzYl9waHlfd3JpdGUoc3RydWN0IHJlZ19hZGRyICpyZWdBZGRyLCBjaGFyIGFkZHIs Cj4gY2hhciBkYXRhKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IHJlZ1ZhbDsK PiArwqDCoMKgwqDCoMKgwqB2b2lkIF9faW9tZW0gKnJlZ193cmFwX3ZzdGF0dXMgPSByZWdBZGRy LT5yZWdfd3JhcF92c3RhdHVzOwo+ICvCoMKgwqDCoMKgwqDCoHZvaWQgX19pb21lbSAqcmVnX2d1 c2IycGh5YWNjMCA9IHJlZ0FkZHItPnJlZ19ndXNiMnBoeWFjYzA7Cj4gK8KgwqDCoMKgwqDCoMKg aW50IHNoaWZ0X2JpdHMgPSByZWdBZGRyLT52c3RhdHVzX2luZGV4ICogODsKPiArwqDCoMKgwqDC oMKgwqBpbnQgcmV0ID0gMDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogd3JpdGUgZGF0YSB0byBW U3RhdHVzT3V0MiAoZGF0YSBvdXRwdXQgdG8gcGh5KSAqLwo+ICvCoMKgwqDCoMKgwqDCoHBoeV93 cml0ZShyZWdfd3JhcF92c3RhdHVzLCAodTMyKWRhdGE8PHNoaWZ0X2JpdHMpOwo+ICsKPiArwqDC oMKgwqDCoMKgwqByZXQgPSB1dG1pX3dhaXRfcmVnaXN0ZXIocmVnX2d1c2IycGh5YWNjMCwgUEhZ X1ZTVFNfQlVTWSwgMCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogVkN0 cmwgPSBsb3cgbmliYmxlIG9mIGFkZHIsIHNldCBQSFlfTkVXX1JFR19SRVEgKi8KPiArwqDCoMKg wqDCoMKgwqByZWdWYWwgPSBQSFlfTkVXX1JFR19SRVEgfCAoR0VUX0xPV19OSUJCTEUoYWRkcikg PDwKPiBQSFlfVkNUUkxfU0hJRlQpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBwaHlfd3JpdGUocmVn X2d1c2IycGh5YWNjMCwgcmVnVmFsKTsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSB1dG1pX3dhaXRf cmVnaXN0ZXIocmVnX2d1c2IycGh5YWNjMCwgUEhZX1ZTVFNfQlVTWSwgMCk7Cj4gK8KgwqDCoMKg wqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJl dDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogVkN0cmwgPSBoaWdoIG5pYmJsZSBvZiBhZGRyLCBz ZXQgUEhZX05FV19SRUdfUkVRICovCj4gK8KgwqDCoMKgwqDCoMKgcmVnVmFsID0gUEhZX05FV19S RUdfUkVRIHwgKEdFVF9ISUdIX05JQkJMRShhZGRyKSA8PAo+IFBIWV9WQ1RSTF9TSElGVCk7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoHBoeV93cml0ZShyZWdfZ3VzYjJwaHlhY2MwLCByZWdWYWwpOwo+ ICvCoMKgwqDCoMKgwqDCoHJldCA9IHV0bWlfd2FpdF9yZWdpc3RlcihyZWdfZ3VzYjJwaHlhY2Mw LCBQSFlfVlNUU19CVVNZLCAwKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBydGtfdXNiX3BoeV9zZXRfcGFnZShzdHJ1 Y3QgcmVnX2FkZHIgKnJlZ0FkZHIsIGludCBwYWdlKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3dp dGNoIChwYWdlKSB7Cj4gK8KgwqDCoMKgwqDCoMKgY2FzZSAwOgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gcnRrX3VzYl9waHlfd3JpdGUocmVnQWRkciwgU0VUX1BBR0Vf T0ZGU0VULAo+IFNFVF9QQUdFXzApOwo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgMToKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJ0a191c2JfcGh5X3dyaXRlKHJlZ0FkZHIs IFNFVF9QQUdFX09GRlNFVCwKPiBTRVRfUEFHRV8xKTsKPiArwqDCoMKgwqDCoMKgwqBjYXNlIDI6 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBydGtfdXNiX3BoeV93cml0 ZShyZWdBZGRyLCBTRVRfUEFHRV9PRkZTRVQsCj4gU0VUX1BBR0VfMik7Cj4gK8KgwqDCoMKgwqDC oMKgZGVmYXVsdDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJfZXJyKCIlcyBl cnJvciBwYWdlPSVkXG4iLCBfX2Z1bmNfXywgcGFnZSk7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsK PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7Cj4gK30KPiArCj4gKyNkZWZpbmUgVVNCX0NUUkwg MHgwIC8qIHVzYiBjdHJsIGF0IDB4OTgwMDdGQjAgKi8KPiArI2RlZmluZSBJU09fVVNCX1UyUEhZ X1JFR19MRE9fUFcgKEJJVCgyMCkgfCBCSVQoMjEpIHwgQklUKDIyKSB8Cj4gQklUKDIzKSkKPiAr Cj4gK3N0YXRpYyBpbnQgY29udHJvbF9waHlfcG93ZXIoc3RydWN0IHJ0a191c2JfcGh5ICpydGtf cGh5LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcGh5X2RhdGEgKnBoeV9kYXRhLCBz dHJ1Y3QgcmVnX2FkZHIgKnJlZ0FkZHIpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBpbnQgdXNlX2xk byA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IHZhbDsKPiArCj4gK8KgwqDCoMKg wqDCoMKgaWYgKCFydGtfcGh5LT51c2JfY3RybF9yZWdzKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRldl9pbmZvKHJ0a19waHktPmRldiwgIiVzIE5vIHVzYl9jdHJsX3JlZ3Mg Y2FuJ3Qgc2V0Cj4gVVNCX0NUUkxcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gdXNlX2xkbzsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoGlmIChyZWdtYXBfcmVhZChydGtfcGh5LT51c2JfY3RybF9yZWdzLCBVU0JfQ1RS TCwgJnZhbCkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihydGtf cGh5LT5kZXYsICIlcyBHZXQgVVNCX0NUUkwgZmFpbFxuIiwKPiBfX2Z1bmNfXyk7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiB1c2VfbGRvOwo+ICvCoMKgwqDCoMKgwqDC oH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCh2YWwgJiBJU09fVVNCX1UyUEhZX1JFR19MRE9f UFcpID09Cj4gSVNPX1VTQl9VMlBIWV9SRUdfTERPX1BXKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRldl9pbmZvKHJ0a19waHktPmRldiwgIiVzIHBoeSB1c2UgbGRvIHBvd2Vy IQo+IChVU0JfQ1RSTCB2YWw9MHgleClcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18sIHZhbCk7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHVzZV9sZG8gPSAxOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBnb3RvIG91dDsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oGlmIChwaHlfZGF0YS0+bGRvX2ZvcmNlX2VuYWJsZSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZWdtYXBfdXBkYXRlX2JpdHMocnRrX3BoeS0+dXNiX2N0cmxfcmVncywgVVNC X0NUUkwsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKHVuc2lnbmVkIGludClJU09fVVNCX1UyUEhZX1JFR19MRE9fUFcsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHVuc2lnbmVkIGlu dClJU09fVVNCX1UyUEhZX1JFR19MRE9fUFcpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB1c2VfbGRvID0gMTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRl dl9pbmZvKHJ0a19waHktPmRldiwgIiVzIHBoeSAlcyB0aGVuIHR1cm4gb24gbGRvIQo+IFVTQl9D VFJMIHZhbD0weCV4XG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBoeV9kYXRhLT5sZG9fZm9yY2VfZW5hYmxlID8KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Imxkb19mb3JjZV9lbmFibGUiOiJubyBwb3dlciIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFsKTsKPiArwqDCoMKgwqDCoMKgwqB9Cj4g Kwo+ICtvdXQ6Cj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHVzZV9sZG87Cj4gK30KPiArCj4gK3N0 YXRpYyB1OCBfX3VwZGF0ZWRfcGFnZTBfMHhlNF9wYXJhbWV0ZXIoc3RydWN0IHBoeV9kYXRhICpw aHlfZGF0YSwKPiB1OCBkYXRhKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgdTggdmFsOwo+ICvCoMKg wqDCoMKgwqDCoHMzMiBfX3ZhbDsKPiArwqDCoMKgwqDCoMKgwqBzMzIgcGFnZTBfZTRfY29tcGVu c2F0ZSA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgczMyIHVzYl9kY19jYWxfbWFzayA9IHBoeV9kYXRh LT51c2JfZGNfY2FsX21hc2s7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChwaHlfZGF0YS0+Y2hl Y2tfZWZ1c2VfdmVyc2lvbiA9PSBDSEVDS19FRlVTRV9WMSkgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAocGh5X2RhdGEtPmxkb19lbmFibGUpCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYWdlMF9lNF9jb21wZW5zYXRlID0gcGh5 X2RhdGEtCj4gPmxkb19wYWdlMF9lNF9jb21wZW5zYXRlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgX192YWwgPSAoczMyKShkYXRhICYgdXNiX2RjX2NhbF9tYXNrKSArCj4g cGFnZTBfZTRfY29tcGVuc2F0ZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICsgcGh5X2RhdGEtPmVmdXNlX3VzYl9kY19jYWw7Cj4gK8KgwqDC oMKgwqDCoMKgfSBlbHNlIHsgLyogZm9yIENIRUNLX0VGVVNFX1YyIG9yIG5vIGVmdXNlICovCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBhZ2UwX2U0X2NvbXBlbnNhdGUgPSBwaHlf ZGF0YS0+cGFnZTBfZTRfY29tcGVuc2F0ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmIChwaHlfZGF0YS0+ZWZ1c2VfdXNiX2RjX2NhbCkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoF9fdmFsID0gKHMzMikoKHBoeV9kYXRhLT5l ZnVzZV91c2JfZGNfY2FsICYKPiB1c2JfZGNfY2FsX21hc2spCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICsgcGFn ZTBfZTRfY29tcGVuc2F0ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVsc2UK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoF9fdmFsID0g KHMzMikoZGF0YSAmIHVzYl9kY19jYWxfbWFzayk7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiAr wqDCoMKgwqDCoMKgwqBpZiAoX192YWwgPiB1c2JfZGNfY2FsX21hc2spCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoF9fdmFsID0gdXNiX2RjX2NhbF9tYXNrOwo+ICvCoMKgwqDCoMKg wqDCoGVsc2UgaWYgKF9fdmFsIDwgMCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg X192YWwgPSAwOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB2YWwgPSAoZGF0YSAmICh+dXNiX2RjX2Nh bF9tYXNrKSkgfCAoX192YWwgJgo+IHVzYl9kY19jYWxfbWFzayk7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoHJldHVybiB2YWw7Cj4gK30KPiArCj4gK3N0YXRpYyB1OCBfX3VwZGF0ZWRfZGNfZGlzY29u bmVjdF9sZXZlbF9wYWdlMF8weGU0KHN0cnVjdCBwaHlfZGF0YQo+ICpwaHlfZGF0YSwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqAgdTggZGF0YSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHU4IHZhbDsK PiArwqDCoMKgwqDCoMKgwqBzMzIgX192YWw7Cj4gK8KgwqDCoMKgwqDCoMKgczMyIHVzYl9kY19k aXNfbWFzayA9IHBoeV9kYXRhLT51c2JfZGNfZGlzX21hc2s7Cj4gK8KgwqDCoMKgwqDCoMKgaW50 IG9mZnNldCA9IDQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoF9fdmFsID0gKHMzMikoKGRhdGEgPj4g b2Zmc2V0KSAmIHVzYl9kY19kaXNfbWFzaykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKyBwaHlfZGF0YS0+ZWZ1c2VfdXNiX2RjX2RpczsKPiArCj4gK8KgwqDCoMKg wqDCoMKgaWYgKF9fdmFsID4gdXNiX2RjX2Rpc19tYXNrKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBfX3ZhbCA9IHVzYl9kY19kaXNfbWFzazsKPiArwqDCoMKgwqDCoMKgwqBlbHNl IGlmIChfX3ZhbCA8IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoF9fdmFsID0g MDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgdmFsID0gKGRhdGEgJiAofih1c2JfZGNfZGlzX21hc2sg PDwgb2Zmc2V0KSkpIHwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChf X3ZhbCAmIHVzYl9kY19kaXNfbWFzaykgPDwgb2Zmc2V0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gdmFsOwo+ICt9Cj4gKwo+ICsvKiB1cGRhdGVkIGRpc2Nvbm5lY3QgbGV2ZWwgYXQgcGFn ZTAgMHhlNCAqLwo+ICtzdGF0aWMgdm9pZCB1cGRhdGVfZGNfZGlzY29ubmVjdF9sZXZlbF9hdF9w YWdlMChzdHJ1Y3QgcnRrX3VzYl9waHkKPiAqcnRrX3BoeSwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IHJlZ19hZGRyICpyZWdBZGRyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgcGh5X2RhdGEgKnBoeV9kYXRhLCBib29sIGlzVXBkYXRlKQo+ICt7Cj4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IHBoeV9wYXJhbWV0ZXIgKnBoeV9wYWdlX3NldHRpbmc7Cj4gK8KgwqDCoMKgwqDC oMKgaW50IGk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIFNldCBwYWdlIDAgKi8KPiArwqDCoMKg wqDCoMKgwqBwaHlfcGFnZV9zZXR0aW5nID0gcGh5X2RhdGEtPnBhZ2UwOwo+ICvCoMKgwqDCoMKg wqDCoHJ0a191c2JfcGh5X3NldF9wYWdlKHJlZ0FkZHIsIDApOwo+ICsKPiArwqDCoMKgwqDCoMKg wqBpID0gUEFHRV9BRERSX01BUF9BUlJBWV9JTkRFWChQQUdFMF8weEU0KTsKPiArCj4gK8KgwqDC oMKgwqDCoMKgaWYgKGkgPCBwaHlfZGF0YS0+cGFnZTBfc2l6ZSkgewo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB1OCBhZGRyID0gKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0+YWRkcjsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTggZGF0YSA9IChwaHlfcGFnZV9zZXR0 aW5nICsgaSktPmRhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU4IF9fZGF0 YTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50IG9mZnNldCA9IDQ7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMzMiB1c2JfZGNfZGlzX21hc2sgPSBwaHlfZGF0 YS0+dXNiX2RjX2Rpc19tYXNrOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKCFhZGRyKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBhZGRyID0gQVJSQVlfSU5ERVhfTUFQX1BBR0VfQUREUihpKTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRhdGEgPSBydGtfdXNiX3BoeV9yZWFk KHJlZ0FkZHIsIGFkZHIpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoChwaHlfcGFnZV9zZXR0aW5nICsgaSktPmFkZHIgPSBhZGRyOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKHBoeV9wYWdlX3NldHRp bmcgKyBpKS0+ZGF0YSA9IGRhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBkZXZfZGJnKHJ0a19waHktPmRldiwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkdldCBk ZWZhdWx0IGFkZHIgJXggdmFsdWUgJXhcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChwaHlfcGFnZV9zZXR0 aW5nICsgaSktPmFkZHIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChwaHlfcGFnZV9zZXR0aW5nICsgaSktPmRh dGEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoF9fZGF0YSA9IHJ0a191c2JfcGh5X3JlYWQocmVnQWRkciwgYWRkcik7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBrZWVwIGRlZmF1bHQgZGMg ZGlzIGFuZCByZWFsIGRjIGNhbCAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBk YXRhID0gKGRhdGEgJiAoKHVzYl9kY19kaXNfbWFzayA8PCBvZmZzZXQpKSkgfAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChfX2RhdGEgJiAo fih1c2JfZGNfZGlzX21hc2sgPDwKPiBvZmZzZXQpKSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAoaXNVcGRhdGUpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkYXRhID0KPiBfX3VwZGF0ZWRfZGNfZGlzY29ubmVjdF9sZXZl bF9wYWdlMF8weGU0KHBoeV9kYXRhLCBkYXRhKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmIChydGtfdXNiX3BoeV93cml0ZShyZWdBZGRyLCBhZGRyLCBkYXRhKSkgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2Vycihy dGtfcGh5LT5kZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJbJXM6JWRdIEVycm9yIHBhZ2UxIGFkZHI9MHgl eAo+IHZhbHVlPTB4JXhcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBfX0xJTkVfXywKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYWRkciwgZGF0YSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9pbmZvKHJ0a19waHkt PmRldiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAiJXMgdG8gc2V0IFBhZ2UwIDB4RTQ9JXggZm9yIGRjCj4gZGlzY29ubmVjdCBsZXZlbCAo JXMpXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIF9fZnVuY19fLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJ0a191c2JfcGh5X3JlYWQocmVnQWRkciwgYWRkciksCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaXNVcGRhdGU/ IlVwZGF0ZSI6InJlc3RvcmUiKTsKPiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKHJ0a19waHktPmRldiwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiRVJST1I6ICVzICVk IGluZGV4PSVkIGFkZHIgTm90Cj4gUEFHRTBfMHhFNFxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgX19MSU5FX18sIGkp Owo+ICvCoMKgwqDCoMKgwqDCoH0KPiArfQo+ICsKPiArc3RhdGljIHU4IF9fdXBkYXRlZF9kY19k aXNjb25uZWN0X2xldmVsX3BhZ2UxXzB4ZTIoc3RydWN0IHBoeV9kYXRhCj4gKnBoeV9kYXRhLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCB1OCBkYXRhKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgdTgg dmFsOwo+ICvCoMKgwqDCoMKgwqDCoHMzMiBfX3ZhbDsKPiArwqDCoMKgwqDCoMKgwqBzMzIgdXNi X2RjX2Rpc19tYXNrID0gcGh5X2RhdGEtPnVzYl9kY19kaXNfbWFzazsKPiArCj4gK8KgwqDCoMKg wqDCoMKgaWYgKHBoeV9kYXRhLT5jaGVja19lZnVzZV92ZXJzaW9uID09IENIRUNLX0VGVVNFX1Yx KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoF9fdmFsID0gKHMzMikoZGF0YSAm IHVzYl9kY19kaXNfbWFzaykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCArIHBoeV9kYXRhLT5lZnVzZV91c2JfZGNfZGlzOwo+ICvCoMKgwqDC oMKgwqDCoH0gZWxzZSB7IC8qIGZvciBDSEVDS19FRlVTRV9WMiBvciBubyBlZnVzZSAqLwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocGh5X2RhdGEtPmVmdXNlX3VzYl9kY19k aXMpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX3Zh bCA9IChzMzIpKHBoeV9kYXRhLT5lZnVzZV91c2JfZGNfZGlzICYKPiB1c2JfZGNfZGlzX21hc2sp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX3ZhbCA9IChzMzIpKGRhdGEgJiB1c2Jf ZGNfZGlzX21hc2spOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYg KF9fdmFsID4gdXNiX2RjX2Rpc19tYXNrKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBfX3ZhbCA9IHVzYl9kY19kaXNfbWFzazsKPiArwqDCoMKgwqDCoMKgwqBlbHNlIGlmIChfX3Zh bCA8IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoF9fdmFsID0gMDsKPiArCj4g K8KgwqDCoMKgwqDCoMKgdmFsID0gKGRhdGEgJiAofnVzYl9kY19kaXNfbWFzaykpIHwgKF9fdmFs ICYKPiB1c2JfZGNfZGlzX21hc2spOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gdmFsOwo+ ICt9Cj4gKwo+ICsvKiB1cGRhdGVkIGRpc2Nvbm5lY3QgbGV2ZWwgYXQgcGFnZTEgMHhlMiAqLwo+ ICtzdGF0aWMgdm9pZCB1cGRhdGVfZGNfZGlzY29ubmVjdF9sZXZlbF9hdF9wYWdlMShzdHJ1Y3Qg cnRrX3VzYl9waHkKPiAqcnRrX3BoeSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHJl Z19hZGRyICpyZWdBZGRyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcGh5X2RhdGEg KnBoeV9kYXRhLCBib29sIGlzVXBkYXRlKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHBo eV9wYXJhbWV0ZXIgKnBoeV9wYWdlX3NldHRpbmc7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IGk7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoC8qIFNldCBwYWdlIDEgKi8KPiArwqDCoMKgwqDCoMKgwqBwaHlf cGFnZV9zZXR0aW5nID0gcGh5X2RhdGEtPnBhZ2UxOwo+ICvCoMKgwqDCoMKgwqDCoHJ0a191c2Jf cGh5X3NldF9wYWdlKHJlZ0FkZHIsIDEpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpID0gUEFHRV9B RERSX01BUF9BUlJBWV9JTkRFWChQQUdFMV8weEUyKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYg KGkgPCBwaHlfZGF0YS0+cGFnZTFfc2l6ZSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB1OCBhZGRyID0gKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0+YWRkcjsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgdTggZGF0YSA9IChwaHlfcGFnZV9zZXR0aW5nICsgaSktPmRh dGE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU4IF9fZGF0YTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgczMyIHVzYl9kY19kaXNfbWFzayA9IHBoeV9kYXRhLT51 c2JfZGNfZGlzX21hc2s7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo IWFkZHIpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGFkZHIgPSBBUlJBWV9JTkRFWF9NQVBfUEFHRV9BRERSKGkpOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGF0YSA9IHJ0a191c2JfcGh5X3JlYWQocmVn QWRkciwgYWRkcik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0+YWRkciA9IGFkZHI7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAocGh5X3BhZ2Vfc2V0dGluZyAr IGkpLT5kYXRhID0gZGF0YTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRldl9kYmcocnRrX3BoeS0+ZGV2LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiR2V0IGRlZmF1 bHQgYWRkciAleCB2YWx1ZSAleFxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHBoeV9wYWdlX3NldHRpbmcg KyBpKS0+YWRkciwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0+ZGF0YSk7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgX19kYXRhID0gcnRrX3VzYl9waHlfcmVhZChyZWdBZGRyLCBhZGRyKTsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRhdGEgPSAoZGF0YSAmIHVzYl9kY19k aXNfbWFzaykgfCAoX19kYXRhICYKPiB+KHVzYl9kY19kaXNfbWFzaykpOwo+ICsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGlzVXBkYXRlKQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGF0YSA9Cj4gX191cGRhdGVkX2RjX2Rpc2Nv bm5lY3RfbGV2ZWxfcGFnZTFfMHhlMihwaHlfZGF0YSwgZGF0YSk7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocnRrX3VzYl9waHlfd3JpdGUocmVnQWRkciwgYWRkciwg ZGF0YSkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGRldl9lcnIocnRrX3BoeS0+ZGV2LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiWyVzOiVkXSBFcnJvciBwYWdl MSBhZGRyPTB4JXgKPiB2YWx1ZT0weCV4XG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgX19M SU5FX18sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFkZHIsIGRhdGEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfaW5m byhydGtfcGh5LT5kZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgIiVzIHRvIHNldCBQYWdlMSAweEUyPSV4IGZvciBkYwo+IGRpc2Nvbm5l Y3QgbGV2ZWwgKCVzKVxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBydGtfdXNiX3BoeV9yZWFkKHJlZ0FkZHIsIGFkZHIp LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlzVXBkYXRlPyJVcGRhdGUiOiJyZXN0b3JlIik7Cj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihydGtfcGh5LT5kZXYsCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkVS Uk9SOiAlcyAlZCBpbmRleD0lZCBhZGRyIE5vdAo+IFBBR0UxXzB4RTJcbiIsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18sIF9f TElORV9fLCBpKTsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHVw ZGF0ZV9kY19kaXNjb25uZWN0X2xldmVsKHN0cnVjdCBydGtfdXNiX3BoeSAqcnRrX3BoeSwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHJlZ19hZGRyICpyZWdBZGRyLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcGh5X2RhdGEgKnBoeV9kYXRhLCBib29sIGlzVXBkYXRlKQo+ ICt7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHBoeV9kYXRhLT51c2JfZGNfZGlzX2F0X3BhZ2UwKQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1cGRhdGVfZGNfZGlzY29ubmVjdF9sZXZl bF9hdF9wYWdlMCgKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBydGtfcGh5LCByZWdBZGRyLCBwaHlfZGF0YSwgaXNVcGRhdGUpOwo+ICvCoMKg wqDCoMKgwqDCoGVsc2UKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdXBkYXRlX2Rj X2Rpc2Nvbm5lY3RfbGV2ZWxfYXRfcGFnZTEoCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcnRrX3BoeSwgcmVnQWRkciwgcGh5X2RhdGEsIGlz VXBkYXRlKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZG9fcnRrX3VzYjJfcGh5X3RvZ2dsZShz dHJ1Y3QgcnRrX3VzYl9waHkgKnJ0a19waHksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBp bmRleCwgYm9vbCBpc0Nvbm5lY3QpOwo+ICsKPiArc3RhdGljIGludCBkb19ydGtfdXNiX3BoeV9p bml0KHN0cnVjdCBydGtfdXNiX3BoeSAqcnRrX3BoeSwgaW50Cj4gaW5kZXgpCj4gK3sKPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgcmVnX2FkZHIgKnJlZ0FkZHI7Cj4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IHBoeV9kYXRhICpwaHlfZGF0YTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X3BhcmFt ZXRlciAqcGh5X3BhZ2Vfc2V0dGluZzsKPiArwqDCoMKgwqDCoMKgwqBpbnQgaTsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgaWYgKCFydGtfcGh5KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHByX2VycigiJXMsIHJ0a19waHkgaXMgTlVMTFxuIiwgX19mdW5jX18pOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiArwqDCoMKgwqDCoMKgwqB9 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRldl9kYmcocnRrX3BoeS0+ZGV2LCAiJXM6IGluaXQgcGh5 IyVkXG4iLCBfX2Z1bmNfXywgaW5kZXgpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZWdBZGRyID0g Jigoc3RydWN0IHJlZ19hZGRyICopcnRrX3BoeS0+cmVnX2FkZHIpW2luZGV4XTsKPiArwqDCoMKg wqDCoMKgwqBwaHlfZGF0YSA9ICYoKHN0cnVjdCBwaHlfZGF0YSAqKXJ0a19waHktPnBoeV9kYXRh KVtpbmRleF07Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICghcGh5X2RhdGEpIHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJfZXJyKCIlcywgcGh5X2RhdGEgaXMgTlVMTFxuIiwg X19mdW5jX18pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZB TDsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChjb250cm9sX3Bo eV9wb3dlcihydGtfcGh5LCBwaHlfZGF0YSwgcmVnQWRkcikpIHsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEtPmxkb19lbmFibGUgPSB0cnVlOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfaW5mbyhydGtfcGh5LT5kZXYsICIlcyBVU0IgcGh5IHVz ZSBsZG8gcG93ZXIKPiBjb21wZW5zYXRlIHBoeSBwYXJhbWV0ZXIgKCVkKVxuIiwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBwaHlfZGF0YS0+bGRvX3Bh Z2UwX2U0X2NvbXBlbnNhdGUpOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDC oMKgaWYgKHBoeV9kYXRhLT51c2VfZGVmYXVsdF9wYXJhbWV0ZXIpIHsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZGV2X2luZm8ocnRrX3BoeS0+ZGV2LCAiJXMgcGh5IyVkIHVzZSBk ZWZhdWx0Cj4gcGFyYW1ldGVyXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBpbmRleCk7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGdvdG8gZG9fdG9nZ2xlOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4g K8KgwqDCoMKgwqDCoMKgLyogU2V0IHBhZ2UgMCAqLwo+ICvCoMKgwqDCoMKgwqDCoHBoeV9wYWdl X3NldHRpbmcgPSBwaHlfZGF0YS0+cGFnZTA7Cj4gK8KgwqDCoMKgwqDCoMKgcnRrX3VzYl9waHlf c2V0X3BhZ2UocmVnQWRkciwgMCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkg PCBwaHlfZGF0YS0+cGFnZTBfc2l6ZTsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHU4IGFkZHIgPSAocGh5X3BhZ2Vfc2V0dGluZyArIGkpLT5hZGRyOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1OCBkYXRhID0gKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0+ ZGF0YTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghYWRkcikKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVlOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGFkZHIgPT0gUEFHRTBfMHhF NCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRhdGEg PQo+IF9fdXBkYXRlZF9wYWdlMF8weGU0X3BhcmFtZXRlcihwaHlfZGF0YSwgZGF0YSk7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocnRrX3VzYl9waHlfd3JpdGUocmVn QWRkciwgYWRkciwgZGF0YSkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRldl9lcnIocnRrX3BoeS0+ZGV2LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiWyVzOiVk XSBFcnJvciBwYWdlMCBhZGRyPTB4JXgKPiB2YWx1ZT0weCV4XG4iLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBf X2Z1bmNfXywgX19MSU5FX18sIGFkZHIsIGRhdGEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC0xOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9kYmcocnRr X3BoeS0+ZGV2LCAiWyVzOiVkXSBHb29kIHBhZ2UwIGFkZHI9MHgleAo+IHZhbHVlPTB4JXhcbiIs Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg X19mdW5jX18sIF9fTElORV9fLCBhZGRyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJ0a191c2JfcGh5X3JlYWQocmVnQWRkciwgYWRkcikp Owo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogU2V0IHBhZ2UgMSAq Lwo+ICvCoMKgwqDCoMKgwqDCoHBoeV9wYWdlX3NldHRpbmcgPSBwaHlfZGF0YS0+cGFnZTE7Cj4g K8KgwqDCoMKgwqDCoMKgcnRrX3VzYl9waHlfc2V0X3BhZ2UocmVnQWRkciwgMSk7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBwaHlfZGF0YS0+cGFnZTFfc2l6ZTsgaSsrKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU4IGFkZHIgPSAocGh5X3BhZ2Vfc2V0 dGluZyArIGkpLT5hZGRyOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1OCBkYXRh ID0gKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0+ZGF0YTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmICghYWRkcikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKHJ0a191c2JfcGh5X3dyaXRlKHJlZ0FkZHIsIGFkZHIsIGRhdGEpKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKHJ0a19w aHktPmRldiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIlslczolZF0gRXJyb3IgcGFnZTEgYWRkcj0weCV4Cj4g dmFsdWU9MHgleFxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18sIF9fTElORV9fLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBhZGRyLCBkYXRhKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiAtMTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg fQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZGJnKHJ0a19waHktPmRldiwg IlslczolZF0gR29vZCBwYWdlMSBhZGRyPTB4JXgKPiB2YWx1ZT0weCV4XG4iLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBf X0xJTkVfXywgYWRkciwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBydGtfdXNiX3BoeV9yZWFkKHJlZ0FkZHIsIGFkZHIpKTsKPiArwqDCoMKg wqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChwaHlfZGF0YS0+cGFnZTJfc2l6ZSA9 PSAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGRvX3RvZ2dsZTsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgLyogU2V0IHBhZ2UgMiAqLwo+ICvCoMKgwqDCoMKgwqDCoHBoeV9w YWdlX3NldHRpbmcgPSBwaHlfZGF0YS0+cGFnZTI7Cj4gK8KgwqDCoMKgwqDCoMKgcnRrX3VzYl9w aHlfc2V0X3BhZ2UocmVnQWRkciwgMik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7 IGkgPCBwaHlfZGF0YS0+cGFnZTJfc2l6ZTsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHU4IGFkZHIgPSAocGh5X3BhZ2Vfc2V0dGluZyArIGkpLT5hZGRyOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1OCBkYXRhID0gKHBoeV9wYWdlX3NldHRpbmcgKyBp KS0+ZGF0YTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghYWRkcikK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVl Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJ0a191c2JfcGh5X3dy aXRlKHJlZ0FkZHIsIGFkZHIsIGRhdGEpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKHJ0a19waHktPmRldiwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg IlslczolZF0gRXJyb3IgcGFnZTIgYWRkcj0weCV4Cj4gdmFsdWU9MHgleFxuIiwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgX19mdW5jX18sIF9fTElORV9fLCBhZGRyLCBkYXRhKTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtMTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZf ZGJnKHJ0a19waHktPmRldiwgIlslczolZF0gR29vZCBwYWdlMiBhZGRyPTB4JXgKPiB2YWx1ZT0w eCV4XG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIF9fZnVuY19fLCBfX0xJTkVfXywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAocGh5X3BhZ2Vfc2V0dGluZyArIGkpLT5hZGRyLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJ0 a191c2JfcGh5X3JlYWQocmVnQWRkciwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0+YWRkcikp Owo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK2RvX3RvZ2dsZToKPiArwqDCoMKgwqDCoMKgwqBk b19ydGtfdXNiMl9waHlfdG9nZ2xlKHJ0a19waHksIGluZGV4LCBmYWxzZSk7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJ0a191c2JfcGh5X2lu aXQoc3RydWN0IHVzYl9waHkgKnBoeSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBydGtf dXNiX3BoeSAqcnRrX3BoeSA9IGNvbnRhaW5lcl9vZihwaHksIHN0cnVjdAo+IHJ0a191c2JfcGh5 LCBwaHkpOwo+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxvbmcgcGh5X2luaXRfdGltZSA9IGpp ZmZpZXM7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IGksIHJldCA9IDA7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoGRldl9kYmcocGh5LT5kZXYsICJJbml0IFJUSyBVU0IgMi4wIFBIWVxuIik7Cj4gK8KgwqDC oMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IHJ0a19waHktPnBoeU47IGkrKykKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gZG9fcnRrX3VzYl9waHlfaW5pdChydGtfcGh5LCBp KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZGV2X2luZm8ocGh5LT5kZXYsICJJbml0aWFsaXplZCBS VEsgVVNCIDIuMCBQSFkgKHRha2UKPiAlZG1zKVxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHBoeV9pbml0X3RpbWUp KTsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBy dGtfdXNiX3BoeV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3BoeSAqcGh5KQo+ICt7Cj4gK8KgwqDCoMKg wqDCoMKgZGV2X2luZm8ocGh5LT5kZXYsICJTaHV0ZG93biBSVEsgVVNCIDIuMCBQSFlcbiIpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkb19ydGtfdXNiMl9waHlfdG9nZ2xlKHN0cnVjdCBydGtf dXNiX3BoeSAqcnRrX3BoeSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGluZGV4LCBib29s IGlzQ29ubmVjdCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByZWdfYWRkciAqcmVnQWRk cjsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X2RhdGEgKnBoeV9kYXRhOwo+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBwaHlfcGFyYW1ldGVyICpwaHlfcGFnZV9zZXR0aW5nOwo+ICvCoMKgwqDC oMKgwqDCoGludCBpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXJ0a19waHkpIHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJfZXJyKCIlcyBwaHlfZGF0YSBpcyBOVUxMXG4i LCBfX2Z1bmNfXyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiAr wqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJlZ0FkZHIgPSAmKChzdHJ1Y3Qg cmVnX2FkZHIgKilydGtfcGh5LT5yZWdfYWRkcilbaW5kZXhdOwo+ICvCoMKgwqDCoMKgwqDCoHBo eV9kYXRhID0gJigoc3RydWN0IHBoeV9kYXRhICopcnRrX3BoeS0+cGh5X2RhdGEpW2luZGV4XTsK PiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFwaHlfZGF0YSkgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBkZXZfZXJyKHJ0a19waHktPmRldiwgIiVzIHBoeV9kYXRhIGlzIE5VTExc biIsCj4gX19mdW5jX18pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47 Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXBoeV9kYXRhLT5k b190b2dnbGUpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+ICsK PiArwqDCoMKgwqDCoMKgwqBpZiAocGh5X2RhdGEtPmlzX2RvdWJsZV9zZW5zaXRpdml0eV9tb2Rl KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGRvX3RvZ2dsZV9kcml2aW5n Owo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBTZXQgcGFnZSAwICovCj4gK8KgwqDCoMKgwqDCoMKg cGh5X3BhZ2Vfc2V0dGluZyA9IHBoeV9kYXRhLT5wYWdlMDsKPiArwqDCoMKgwqDCoMKgwqBydGtf dXNiX3BoeV9zZXRfcGFnZShyZWdBZGRyLCAwKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaSA9IFBB R0VfQUREUl9NQVBfQVJSQVlfSU5ERVgoUEFHRTBfMHhFNyk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oGlmIChpIDwgcGh5X2RhdGEtPnBhZ2UwX3NpemUpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgdTggYWRkciA9IChwaHlfcGFnZV9zZXR0aW5nICsgaSktPmFkZHI7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU4IGRhdGEgPSAocGh5X3BhZ2Vfc2V0dGluZyArIGkp LT5kYXRhOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFhZGRyKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhZGRyID0g QVJSQVlfSU5ERVhfTUFQX1BBR0VfQUREUihpKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRhdGEgPSBydGtfdXNiX3BoeV9yZWFkKHJlZ0FkZHIsIGFk ZHIpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oChwaHlfcGFnZV9zZXR0aW5nICsgaSktPmFkZHIgPSBhZGRyOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0+ZGF0 YSA9IGRhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBkZXZfZGJnKHJ0a19waHktPmRldiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkdldCBkZWZhdWx0IGFkZHIg JXggdmFsdWUgJXhcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChwaHlfcGFnZV9zZXR0aW5nICsgaSktPmFk ZHIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIChwaHlfcGFnZV9zZXR0aW5nICsgaSktPmRhdGEpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoaXNDb25uZWN0KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBydGtfdXNiX3BoeV93cml0ZShyZWdBZGRyLCBhZGRyLCBkYXRhICYK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKH4oQklUKDQpIHwgQklUKDUpIHwgQklUKDYpKSkpOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcnRrX3VzYl9waHlfd3JpdGUocmVnQWRkciwgYWRkciwg ZGF0YSB8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIChCSVQoNCkgfCBCSVQoNSkgfCBCSVQoNikpKTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkZXZfaW5mbyhydGtfcGh5LT5kZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIiVzICVzY29ubmVjdCB0byBzZXQgUGFnZTAgMHhF Nz0leFxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBfX2Z1bmNfXywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpc0Nvbm5lY3Q/IiI6ImRpcyIsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcnRrX3VzYl9waHlfcmVhZChyZWdB ZGRyLCBhZGRyKSk7Cj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZGV2X2VycihydGtfcGh5LT5kZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkVSUk9SOiAlcyAlZCBpbmRleD0l ZCBhZGRyIE5vdAo+IFBBR0UwXzB4RTdcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18sIF9fTElORV9fLCBpKTsKPiArwqDC oMKgwqDCoMKgwqB9Cj4gKwo+ICtkb190b2dnbGVfZHJpdmluZzoKPiArCj4gK8KgwqDCoMKgwqDC oMKgaWYgKCFwaHlfZGF0YS0+ZG9fdG9nZ2xlX2RyaXZpbmcpCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGdvdG8gZG9fdG9nZ2xlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBQYWdl IDAgYWRkciAweEU0IGRyaXZpbmcgY2FwYWJpbGl0eSAqLwo+ICsKPiArwqDCoMKgwqDCoMKgwqAv KiBTZXQgcGFnZSAwICovCj4gK8KgwqDCoMKgwqDCoMKgcGh5X3BhZ2Vfc2V0dGluZyA9IHBoeV9k YXRhLT5wYWdlMDsKPiArwqDCoMKgwqDCoMKgwqBydGtfdXNiX3BoeV9zZXRfcGFnZShyZWdBZGRy LCAwKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaSA9IFBBR0VfQUREUl9NQVBfQVJSQVlfSU5ERVgo UEFHRTBfMHhFNCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChpIDwgcGh5X2RhdGEtPnBhZ2Uw X3NpemUpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTggYWRkciA9IChwaHlf cGFnZV9zZXR0aW5nICsgaSktPmFkZHI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHU4IGRhdGEgPSAocGh5X3BhZ2Vfc2V0dGluZyArIGkpLT5kYXRhOwo+ICsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFhZGRyKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhZGRyID0gQVJSQVlfSU5ERVhfTUFQX1BBR0VfQURE UihpKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRh dGEgPSBydGtfdXNiX3BoeV9yZWFkKHJlZ0FkZHIsIGFkZHIpOwo+ICsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoChwaHlfcGFnZV9zZXR0aW5nICsgaSkt PmFkZHIgPSBhZGRyOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0+ZGF0YSA9IGRhdGE7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZGJnKHJ0a19waHktPmRldiwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgIkdldCBkZWZhdWx0IGFkZHIgJXggdmFsdWUgJXhcbiIsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIChwaHlfcGFnZV9zZXR0aW5nICsgaSktPmFkZHIsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChwaHlf cGFnZV9zZXR0aW5nICsgaSktPmRhdGEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoYWRkciA9PSBQQUdF MF8weEU0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZGF0YSA9Cj4gX191cGRhdGVkX3BhZ2UwXzB4ZTRfcGFyYW1ldGVyKHBoeV9kYXRhLCBkYXRhKTsK PiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChpc0Nvbm5lY3QpIHsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJ0a191c2JfcGh5 X3dyaXRlKHJlZ0FkZHIsIGFkZHIsIGRhdGEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB9IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgdTggdmFsOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgczMyIF9fdmFsOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgczMyIGRyaXZpbmdfdXBkYXRlZCA9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBoeV9kYXRhLQo+ ID5kaXNjb25uZWN0X2RyaXZpbmdfdXBkYXRlZDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMzMiB1c2JfZGNfY2FsX21hc2sgPSBwaHlfZGF0YS0KPiA+ dXNiX2RjX2NhbF9tYXNrOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoF9fdmFsID0gKHMzMikoZGF0YSAmIHVzYl9kY19jYWxfbWFzaykgKwo+IGRy aXZpbmdfdXBkYXRlZDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAoX192YWwgPiB1c2JfZGNfY2FsX21hc2spCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgX192YWwgPSB1 c2JfZGNfY2FsX21hc2s7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBlbHNlIGlmIChfX3ZhbCA8IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgX192YWwgPSAwOwo+ICsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCA9IChkYXRhICYg KH51c2JfZGNfY2FsX21hc2spKSB8IChfX3ZhbCAmCj4gdXNiX2RjX2NhbF9tYXNrKTsKPiArCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBydGtfdXNiX3Bo eV93cml0ZShyZWdBZGRyLCBhZGRyLCB2YWwpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9pbmZvKHJ0a19waHkt PmRldiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAiJXMgJXNjb25uZWN0IHRvIHNldCBQYWdlMCAweEU0PSV4IGZvcgo+IGRyaXZpbmdcbiIs Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg X19mdW5jX18sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaXNDb25uZWN0PyIiOiJkaXMiLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJ0a191c2JfcGh5X3JlYWQocmVnQWRkciwgYWRk cikpOwo+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRldl9lcnIocnRrX3BoeS0+ZGV2LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJFUlJPUjogJXMgJWQgaW5kZXg9JWQgYWRkciBO b3QKPiBQQUdFMF8weEU0XG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBfX0xJTkVfXywgaSk7Cj4gK8KgwqDCoMKgwqDC oMKgfQo+ICsKPiArZG9fdG9nZ2xlOgo+ICvCoMKgwqDCoMKgwqDCoC8qIHJlc3RvcmUgZGMgZGlz Y29ubmVjdCBsZXZlbCBiZWZvcmUgdG9nZ2xlICovCj4gK8KgwqDCoMKgwqDCoMKgdXBkYXRlX2Rj X2Rpc2Nvbm5lY3RfbGV2ZWwocnRrX3BoeSwgcmVnQWRkciwgcGh5X2RhdGEsCj4gZmFsc2UpOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBTZXQgcGFnZSAxICovCj4gK8KgwqDCoMKgwqDCoMKgcGh5 X3BhZ2Vfc2V0dGluZyA9IHBoeV9kYXRhLT5wYWdlMTsKPiArwqDCoMKgwqDCoMKgwqBydGtfdXNi X3BoeV9zZXRfcGFnZShyZWdBZGRyLCAxKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaSA9IFBBR0Vf QUREUl9NQVBfQVJSQVlfSU5ERVgoUEFHRTFfMHhFMCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlm IChpIDwgcGh5X2RhdGEtPnBhZ2UxX3NpemUpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgdTggYWRkciA9IChwaHlfcGFnZV9zZXR0aW5nICsgaSktPmFkZHI7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU4IGRhdGEgPSAocGh5X3BhZ2Vfc2V0dGluZyArIGkpLT5k YXRhOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFhZGRyKSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhZGRyID0gQVJS QVlfSU5ERVhfTUFQX1BBR0VfQUREUihpKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGRhdGEgPSBydGtfdXNiX3BoeV9yZWFkKHJlZ0FkZHIsIGFkZHIp Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoChw aHlfcGFnZV9zZXR0aW5nICsgaSktPmFkZHIgPSBhZGRyOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0+ZGF0YSA9 IGRhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBk ZXZfZGJnKHJ0a19waHktPmRldiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkdldCBkZWZhdWx0IGFkZHIgJXgg dmFsdWUgJXhcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChwaHlfcGFnZV9zZXR0aW5nICsgaSktPmFkZHIs Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIChwaHlfcGFnZV9zZXR0aW5nICsgaSktPmRhdGEpOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkZXZfaW5mbyhydGtfcGh5LT5kZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIiVzICMjIyMjIyMjIyMgdG8gdG9nZ2xlIFBBR0Ux XzB4RTAKPiBCSVQoMilcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBydGtfdXNiX3BoeV93cml0ZShyZWdBZGRyLCBhZGRyLCBkYXRhICYgKH5CSVQoMikpKTsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWRlbGF5KDEpOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBydGtfdXNiX3BoeV93cml0ZShyZWdBZGRyLCBhZGRyLCBkYXRh IHwgKEJJVCgyKSkpOwo+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRldl9lcnIocnRrX3BoeS0+ZGV2LAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJFUlJPUjogJXMgJWQgaW5kZXg9 JWQgYWRkciBOb3QKPiBQQUdFMV8weEUwXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBfX0xJTkVfXywgaSk7Cj4gK8Kg wqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiB1cGRhdGUgZGMgZGlzY29ubmVj dCBsZXZlbCBhZnRlciB0b2dnbGUgKi8KPiArwqDCoMKgwqDCoMKgwqB1cGRhdGVfZGNfZGlzY29u bmVjdF9sZXZlbChydGtfcGh5LCByZWdBZGRyLCBwaHlfZGF0YSwgdHJ1ZSk7Cj4gKwo+ICtvdXQ6 Cj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBydGtfdXNi Ml9waHlfdG9nZ2xlKHN0cnVjdCB1c2JfcGh5ICp1c2IyX3BoeSwgYm9vbAo+IGlzQ29ubmVjdCwg aW50IHBvcnQpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBpbnQgaW5kZXggPSBwb3J0Owo+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBydGtfdXNiX3BoeSAqcnRrX3BoeSA9IE5VTEw7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoGlmICh1c2IyX3BoeSAhPSBOVUxMICYmIHVzYjJfcGh5LT5kZXYgIT0gTlVMTCkK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcnRrX3BoeSA9IGRldl9nZXRfZHJ2ZGF0 YSh1c2IyX3BoeS0+ZGV2KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJ0a19waHkgPT0gTlVM TCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcl9lcnIoIiVzICVkIEVSUk9S ISBOTyB0aGlzIGRldmljZVxuIiwgX19mdW5jX18sCj4gX19MSU5FX18pOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDC oMKgwqDCoGlmIChpbmRleCA+IHJ0a19waHktPnBoeU4pIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcHJfZXJyKCIlcyAlZCBFUlJPUiEgcG9ydD0lZCA+IHBoeU49JWRcbiIsCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19m dW5jX18sIF9fTElORV9fLCBpbmRleCwgcnRrX3BoeS0KPiA+cGh5Tik7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoGRvX3J0a191c2IyX3BoeV90b2dnbGUocnRrX3BoeSwgaW5kZXgsIGlzQ29ubmVj dCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcnRrX3VzYl9waHlfbm90aWZ5X3BvcnRfc3RhdHVz KHN0cnVjdCB1c2JfcGh5ICp4LCBpbnQKPiBwb3J0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCB1 MTYgcG9ydHN0YXR1cywgdTE2IHBvcnRjaGFuZ2UpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBib29s IGlzQ29ubmVjdCA9IGZhbHNlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBwcl9kZWJ1ZygiJXMgcG9y dD0lZCBwb3J0c3RhdHVzPTB4JXggcG9ydGNoYW5nZT0weCV4XG4iLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18sIHBvcnQsIChpbnQpcG9ydHN0YXR1cywK PiAoaW50KXBvcnRjaGFuZ2UpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChwb3J0c3RhdHVzICYgVVNC X1BPUlRfU1RBVF9DT05ORUNUSU9OKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp c0Nvbm5lY3QgPSB0cnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAocG9ydGNoYW5nZSAmIFVT Ql9QT1JUX1NUQVRfQ19DT05ORUNUSU9OKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBydGtfdXNiMl9waHlfdG9nZ2xlKHgsIGlzQ29ubmVjdCwgcG9ydCk7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoHJldHVybiAwOwo+ICt9Cj4gKwo+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4gK3N0 YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjcmVhdGVfcGh5X2RlYnVnX3Jvb3Qodm9pZCkKPiArewo+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBkZW50cnkgKnBoeV9kZWJ1Z19yb290Owo+ICsKPiArwqDCoMKg wqDCoMKgwqBwaHlfZGVidWdfcm9vdCA9IGRlYnVnZnNfbG9va3VwKCJwaHkiLCB1c2JfZGVidWdf cm9vdCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFwaHlfZGVidWdfcm9vdCkgewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfZGVidWdfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2Rp cigicGh5IiwKPiB1c2JfZGVidWdfcm9vdCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmICghcGh5X2RlYnVnX3Jvb3QpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBwcl9lcnIoIiVzIEVycm9yIHBoeV9kZWJ1Z19yb290IGlzIE5VTExc biIsCj4gX19mdW5jX18pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNlCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcl9kZWJ1Zygi JXMgQ3JlYXRlIHBoeV9kZWJ1Z19yb290IGZvbGRlclxuIiwKPiBfX2Z1bmNfXyk7Cj4gK8KgwqDC oMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcGh5X2RlYnVnX3Jvb3Q7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgcnRrX3VzYjJfcGFyYW1ldGVyX3Nob3coc3RydWN0IHNlcV9m aWxlICpzLCB2b2lkICp1bnVzZWQpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcnRrX3Vz Yl9waHnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKnJ0a19waHkgPSBzLT5wcml2YXRlOwo+ ICvCoMKgwqDCoMKgwqDCoGludCBpLCBpbmRleDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZm9yIChp bmRleCA9IDA7IGluZGV4IDwgcnRrX3BoeS0+cGh5TjsgaW5kZXgrKykgewo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcmVnX2FkZHIgKnJlZ0FkZHIgPQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYoKHN0cnVjdCBy ZWdfYWRkciAqKXJ0a19waHktCj4gPnJlZ19hZGRyKVtpbmRleF07Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBwaHlfZGF0YSAqcGh5X2RhdGEgPQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYoKHN0cnVjdCBwaHlf ZGF0YSAqKXJ0a19waHktCj4gPnBoeV9kYXRhKVtpbmRleF07Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHN0cnVjdCBwaHlfcGFyYW1ldGVyICpwaHlfcGFnZV9zZXR0aW5nOwo+ICsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihzLCAiUEhZICVkOlxu IiwgaW5kZXgpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VxX3B1dHMo cywgIlBhZ2UgMDpcbiIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBTZXQg cGFnZSAwICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9wYWdlX3NldHRp bmcgPSBwaHlfZGF0YS0+cGFnZTA7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJ0 a191c2JfcGh5X3NldF9wYWdlKHJlZ0FkZHIsIDApOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IHBoeV9kYXRhLT5wYWdlMF9zaXplOyBpKyspIHsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU4IGFkZHIg PSBBUlJBWV9JTkRFWF9NQVBfUEFHRV9BRERSKGkpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTggZGF0YSA9IChwaHlfcGFnZV9zZXR0aW5nICsgaSkt PmRhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1 OCB2YWx1ZSA9IHJ0a191c2JfcGh5X3JlYWQocmVnQWRkciwgYWRkcik7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKChwaHlfcGFnZV9zZXR0 aW5nICsgaSktPmFkZHIpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihzLCAiUGFnZSAwOiBhZGRyPTB4JXgK PiBkYXRhPTB4JTAyeCA9PT4gcmVhZCB2YWx1ZT0weCUwMnhcbiIsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBhZGRyLCBkYXRhLCB2YWx1ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihzLCAiUGFn ZSAwOiBhZGRyPTB4JXgKPiBkYXRhPW5vbmUgPT0+IHJlYWQgdmFsdWU9MHglMDJ4XG4iLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWRkciwgdmFsdWUpOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz ZXFfcHV0cyhzLCAiUGFnZSAxOlxuIik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC8qIFNldCBwYWdlIDEgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X3Bh Z2Vfc2V0dGluZyA9IHBoeV9kYXRhLT5wYWdlMTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcnRrX3VzYl9waHlfc2V0X3BhZ2UocmVnQWRkciwgMSk7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgcGh5X2RhdGEtPnBhZ2UxX3NpemU7 IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg dTggYWRkciA9IEFSUkFZX0lOREVYX01BUF9QQUdFX0FERFIoaSk7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1OCBkYXRhID0gKHBoeV9wYWdlX3NldHRp bmcgKyBpKS0+ZGF0YTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHU4IHZhbHVlID0gcnRrX3VzYl9waHlfcmVhZChyZWdBZGRyLCBhZGRyKTsKPiArCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoKHBoeV9w YWdlX3NldHRpbmcgKyBpKS0+YWRkcikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRmKHMsICJQYWdlIDE6IGFk ZHI9MHgleAo+IGRhdGE9MHglMDJ4ID09PiByZWFkIHZhbHVlPTB4JTAyeFxuIiwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFkZHIsIGRhdGEsIHZhbHVlKTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVsc2UKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRm KHMsICJQYWdlIDE6IGFkZHI9MHgleAo+IGRhdGE9bm9uZSA9PT4gcmVhZCB2YWx1ZT0weCUwMnhc biIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhZGRyLCB2YWx1ZSk7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmIChwaHlfZGF0YS0+cGFnZTJfc2l6ZSA9PSAwKQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHV0cyhzLCAiUGFnZSAyOlxuIik7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIFNldCBwYWdlIDIgKi8KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcGh5X3BhZ2Vfc2V0dGluZyA9IHBoeV9kYXRhLT5wYWdlMjsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcnRrX3VzYl9waHlfc2V0X3BhZ2UocmVnQWRkciwg Mik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwg cGh5X2RhdGEtPnBhZ2UyX3NpemU7IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgdTggYWRkciA9IEFSUkFZX0lOREVYX01BUF9QQUdFX0FERFIo aSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1OCBk YXRhID0gKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0+ZGF0YTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU4IHZhbHVlID0gcnRrX3VzYl9waHlfcmVhZChy ZWdBZGRyLCBhZGRyKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAoKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0+YWRkcikKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFf cHJpbnRmKHMsICJQYWdlIDI6IGFkZHI9MHgleAo+IGRhdGE9MHglMDJ4ID09PiByZWFkIHZhbHVl PTB4JTAyeFxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFkZHIsIGRhdGEsIHZh bHVlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVs c2UKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzZXFfcHJpbnRmKHMsICJQYWdlIDI6IGFkZHI9MHgleAo+IGRhdGE9bm9uZSA9 PT4gcmVhZCB2YWx1ZT0weCUwMnhcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBh ZGRyLCB2YWx1ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNlcV9wdXRzKHMsICJQcm9wZXJ0eTpcbiIpOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRmKHMsICJjaGVja19lZnVz ZTogJXNcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcGh5X2RhdGEtCj4gPmNoZWNrX2VmdXNlPyJFbmFibGUiOiJEaXNhYmxlIik7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNlcV9wcmludGYocywgImNoZWNrX2VmdXNl X3ZlcnNpb246ICVkXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHBoeV9kYXRhLT5jaGVja19lZnVzZV92ZXJzaW9uKTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihzLCAiZWZ1c2VfdXNiX2RjX2NhbDog JWRcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKGludClwaHlfZGF0YS0+ZWZ1c2VfdXNiX2RjX2NhbCk7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHNlcV9wcmludGYocywgImVmdXNlX3VzYl9kY19jYWxfcmF0ZTogJWRc biIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcGh5X2RhdGEtPmVmdXNlX3VzYl9kY19jYWxfcmF0ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHNlcV9wcmludGYocywgInVzYl9kY19jYWxfbWFzazogMHgleFxuIiwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlf ZGF0YS0+dXNiX2RjX2NhbF9tYXNrKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg c2VxX3ByaW50ZihzLCAiZWZ1c2VfdXNiX2RjX2RpczogJWRcbiIsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGludClwaHlfZGF0YS0+ZWZ1 c2VfdXNiX2RjX2Rpcyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNlcV9wcmlu dGYocywgImVmdXNlX3VzYl9kY19kaXNfcmF0ZTogJWRcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGh5X2RhdGEtPmVmdXNlX3VzYl9k Y19kaXNfcmF0ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNlcV9wcmludGYo cywgInVzYl9kY19kaXNfbWFzazogMHgleFxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlfZGF0YS0+dXNiX2RjX2Rpc19tYXNrKTsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihzLCAidXNiX2RjX2Rp c19hdF9wYWdlMDogJXNcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcGh5X2RhdGEtCj4gPnVzYl9kY19kaXNfYXRfcGFnZTA/InRydWUi OiJmYWxzZSIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRmKHMs ICJkb190b2dnbGU6ICVzXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHBoeV9kYXRhLT5kb190b2dnbGU/IkVuYWJsZSI6IkRpc2FibGUi KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihzLCAiZG9fdG9n Z2xlX2RyaXZpbmc6ICVzXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHBoeV9kYXRhLQo+ID5kb190b2dnbGVfZHJpdmluZz8iRW5hYmxl IjoiRGlzYWJsZSIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRm KHMsICJkaXNjb25uZWN0X2RyaXZpbmdfdXBkYXRlZDogMHgleFxuIiwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlfZGF0YS0+ZGlzY29u bmVjdF9kcml2aW5nX3VwZGF0ZWQpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz ZXFfcHJpbnRmKHMsICJ1c2VfZGVmYXVsdF9wYXJhbWV0ZXI6ICVzXG4iLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBoeV9kYXRhLQo+ID51 c2VfZGVmYXVsdF9wYXJhbWV0ZXI/IkVuYWJsZSI6IkRpc2FibGUiKTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihzLCAiaXNfZG91YmxlX3NlbnNpdGl2aXR5X21v ZGU6ICVzXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHBoeV9kYXRhLQo+ID5pc19kb3VibGVfc2Vuc2l0aXZpdHlfbW9kZT8iRW5hYmxl IjoiRGlzYWJsZSIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRm KHMsICJsZG9fZm9yY2VfZW5hYmxlOiAlc1xuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlfZGF0YS0KPiA+bGRvX2ZvcmNlX2VuYWJs ZT8iRW5hYmxlIjoiRGlzYWJsZSIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz ZXFfcHJpbnRmKHMsICJsZG9fZW5hYmxlOiAlc1xuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlfZGF0YS0+bGRvX2VuYWJsZT8iRW5h YmxlIjoiRGlzYWJsZSIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJp bnRmKHMsICJsZG9fcGFnZTBfZTRfY29tcGVuc2F0ZTogJWRcbiIsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGh5X2RhdGEtPmxkb19wYWdl MF9lNF9jb21wZW5zYXRlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VxX3By aW50ZihzLCAicGFnZTBfZTRfY29tcGVuc2F0ZTogJWRcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGh5X2RhdGEtPnBhZ2UwX2U0X2Nv bXBlbnNhdGUpOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK291dDoKPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBydGtfdXNiMl9wYXJhbWV0ZXJfb3Bl bihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZQo+ICpmaWxlKQo+ICt7Cj4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJ0a191c2IyX3BhcmFtZXRlcl9zaG93 LCBpbm9kZS0KPiA+aV9wcml2YXRlKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBm aWxlX29wZXJhdGlvbnMgcnRrX3VzYjJfcGFyYW1ldGVyX2ZvcHMgPSB7Cj4gK8KgwqDCoMKgwqDC oMKgLm9wZW7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0gcnRrX3VzYjJf cGFyYW1ldGVyX29wZW4sCj4gK8KgwqDCoMKgwqDCoMKgLnJlYWTCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoD0gc2VxX3JlYWQsCj4gK8KgwqDCoMKgwqDCoMKgLmxsc2Vla8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IHNlcV9sc2VlaywKPiArwqDCoMKgwqDC oMKgwqAucmVsZWFzZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBzaW5nbGVfcmVs ZWFzZSwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgX19nZXRfcGFyYW1ldGVyX2F0X3BhZ2Uoc3Ry dWN0IHNlcV9maWxlICpzLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcnRrX3VzYl9w aHkgKnJ0a19waHksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBwaHlfcGFyYW1ldGVy ICpwaHlfcGFyYW1ldGVyX2FycmF5LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBjaGFy ICpwaHlfcGFnZSwgY29uc3QgY2hhciAqcGh5X2FkZHIpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgcGh5X3BhcmFtZXRlciAqcGh5X3BhcmFtZXRlcjsKPiArwqDCoMKgwqDCoMKgwqB1aW50 MzJfdCBhZGRyOwo+ICvCoMKgwqDCoMKgwqDCoGludCBpLCByZXQ7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoHJldCA9IGtzdHJ0b3VpbnQocGh5X2FkZHIsIDE2LCAmYWRkcik7Cj4gK8KgwqDCoMKgwqDC oMKgaWYgKHJldCA8IDApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJfZXJy KCIlczo6a3N0cnRvdWludCgpIGZhaWxlZFxuIiwgX19mdW5jX18pOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gK8Kg wqDCoMKgwqDCoMKgaSA9IFBBR0VfQUREUl9NQVBfQVJSQVlfSU5ERVgoYWRkcik7Cj4gK8KgwqDC oMKgwqDCoMKgcGh5X3BhcmFtZXRlciA9IChwaHlfcGFyYW1ldGVyX2FycmF5ICsgaSk7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoGlmIChwaHlfcGFyYW1ldGVyLT5hZGRyKQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRmKHMsICJOb3cgUGFyYW1ldGVyICVzIGFkZHIgMHgl MDJ4ID0KPiAweCUwMnhcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcGh5X3BhZ2UsIHBoeV9wYXJhbWV0ZXItPmFkZHIsCj4gcGh5X3Bh cmFtZXRlci0+ZGF0YSk7Cj4gK8KgwqDCoMKgwqDCoMKgZWxzZQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRmKHMsICJOb3cgUGFyYW1ldGVyICVzIGFkZHIgMHglMDJ4 IGlzCj4gZGVmYXVsdFxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBwaHlfcGFnZSwgYWRkcik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRl dl9kYmcocnRrX3BoeS0+ZGV2LCAiJXMgYWRkcj0weCUwMnggZGF0YT0weCUwMnhcbiIsCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgcGh5X3BhcmFtZXRl ci0+YWRkciwgcGh5X3BhcmFtZXRlci0KPiA+ZGF0YSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9fc2V0X3BhcmFtZXRlcl9hdF9wYWdlKAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcnRrX3VzYl9waHkgKnJ0a19waHksCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCByZWdfYWRkciAqcmVnQWRkciwgc3RydWN0IHBoeV9k YXRhICpwaHlfZGF0YSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHBoeV9wYXJhbWV0 ZXIgKnBoeV9wYXJhbWV0ZXJfYXJyYXksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IGNo YXIgKnBoeV9wYWdlLCBjb25zdCBjaGFyICpwaHlfYWRkciwgY29uc3QgY2hhcgo+ICpwaHlfdmFs dWUpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X3BhcmFtZXRlciAqcGh5X3BhcmFt ZXRlcjsKPiArwqDCoMKgwqDCoMKgwqB1aW50MzJfdCBhZGRyLCB2YWx1ZTsKPiArwqDCoMKgwqDC oMKgwqBpbnQgaSwgcmV0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSBrc3RydG91aW50KHBo eV9hZGRyLCAxNiwgJmFkZHIpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByX2VycigiJXM6OmtzdHJ0b3VpbnQoKSBmYWls ZWRcbiIsIF9fZnVuY19fKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IC1FSU5WQUw7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGtzdHJ0 b3VpbnQocGh5X3ZhbHVlLCAxNiwgJnZhbHVlKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwg MCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcl9lcnIoIiVzOjprc3RydG91 aW50KCkgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiAtRUlOVkFMOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDC oMKgaSA9IFBBR0VfQUREUl9NQVBfQVJSQVlfSU5ERVgoYWRkcik7Cj4gK8KgwqDCoMKgwqDCoMKg cGh5X3BhcmFtZXRlciA9IChwaHlfcGFyYW1ldGVyX2FycmF5ICsgaSk7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoGlmIChwaHlfcGFyYW1ldGVyLT5hZGRyKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHBoeV9wYXJhbWV0ZXItPmRhdGEgPSB2YWx1ZTsKPiArwqDCoMKgwqDCoMKgwqB9 IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfcGFyYW1ldGVyLT5h ZGRyID0gYWRkcjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X3BhcmFtZXRl ci0+ZGF0YSA9IHZhbHVlOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKg ZGV2X2RiZyhydGtfcGh5LT5kZXYsICIlcyBhZGRyPTB4JTAyeCBkYXRhPTB4JTAyeFxuIiwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBwaHlfcGFyYW1l dGVyLT5hZGRyLCBwaHlfcGFyYW1ldGVyLQo+ID5kYXRhKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKg aWYgKHN0cmNtcCgicGFnZTAiLCBwaHlfcGFnZSkgPT0gMCAmJiAoYWRkciA9PSBQQUdFMF8weEU0 KSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsdWUgPSBfX3VwZGF0ZWRfcGFn ZTBfMHhlNF9wYXJhbWV0ZXIocGh5X2RhdGEsCj4gdmFsdWUpOwo+ICsKPiArwqDCoMKgwqDCoMKg wqBpZiAocnRrX3VzYl9waHlfd3JpdGUocmVnQWRkciwgYWRkciwgdmFsdWUpKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKHJ0a19waHktPmRldiwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgIlslczolZF0gRXJyb3I6IGFkZHI9MHglMDJ4Cj4gdmFsdWU9MHglMDJ4XG4iLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBfX2Z1bmNfXywgX19MSU5FX18sIGFkZHIsIHZhbHVlKTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcnRrX3VzYjJfc2V0X3BhcmFt ZXRlcl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZAo+ICp1bnVzZWQpCj4gK3sKPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgcnRrX3VzYl9waHkgKnJ0a19waHkgPSBzLT5wcml2YXRlOwo+ICvC oMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlID0gcy0+ZmlsZTsKPiArwqDCoMKg wqDCoMKgwqBjb25zdCBjaGFyICpmaWxlX25hbWUgPSBmaWxlX2RlbnRyeShmaWxlKS0+ZF9pbmFt ZTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGVudHJ5ICpwX2RlbnRyeSA9IGZpbGVfZGVudHJ5 KGZpbGUpLT5kX3BhcmVudDsKPiArwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpkaXJfbmFtZSA9 IHBfZGVudHJ5LT5kX2luYW1lOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZW50cnkgKnBwX2Rl bnRyeSA9IHBfZGVudHJ5LT5kX3BhcmVudDsKPiArwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpw aHlfZGlyX25hbWUgPSBwcF9kZW50cnktPmRfaW5hbWU7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHJl dCwgaW5kZXg7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHBoeV9kYXRhICpwaHlfZGF0YTsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcnRrX3BoeS0+cGh5Tjsg aW5kZXgrKykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzaXplX3Qgc3ogPSAz MDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhciBuYW1lWzMwXSA9IHswfTsK PiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNucHJpbnRmKG5hbWUsIHN6LCAi cGh5JWQiLCBpbmRleCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzdHJu Y21wKG5hbWUsIHBoeV9kaXJfbmFtZSwgc3RybGVuKG5hbWUpKSA9PSAwKSB7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0YSA9ICYoKHN0cnVj dCBwaHlfZGF0YSAqKXJ0a19waHktCj4gPnBoeV9kYXRhKVtpbmRleF07Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqBp ZiAoIXBoeV9kYXRhKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIo cnRrX3BoeS0+ZGV2LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiJXM6IE5vIHBoeV9kYXRhIGZvciAlcy8lcy8l c1xuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18sIHBoeV9kaXJfbmFtZSwgZGlyX25hbWUsCj4g ZmlsZV9uYW1lKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5W QUw7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoc3RyY21wKCJw YWdlMCIsIGRpcl9uYW1lKSA9PSAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXQgPSBfX2dldF9wYXJhbWV0ZXJfYXRfcGFnZShzLCBydGtfcGh5LCBwaHlfZGF0YS0KPiA+cGFn ZTAsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZGlyX25hbWUsIGZpbGVfbmFtZSk7Cj4gK8KgwqDCoMKgwqDCoMKgZWxzZSBpZiAoc3RyY21w KCJwYWdlMSIsIGRpcl9uYW1lKSA9PSAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXQgPSBfX2dldF9wYXJhbWV0ZXJfYXRfcGFnZShzLCBydGtfcGh5LCBwaHlfZGF0YS0KPiA+ cGFnZTEsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZGlyX25hbWUsIGZpbGVfbmFtZSk7Cj4gK8KgwqDCoMKgwqDCoMKgZWxzZSBpZiAoc3Ry Y21wKCJwYWdlMiIsIGRpcl9uYW1lKSA9PSAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXQgPSBfX2dldF9wYXJhbWV0ZXJfYXRfcGFnZShzLCBydGtfcGh5LCBwaHlfZGF0YS0K PiA+cGFnZTIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZGlyX25hbWUsIGZpbGVfbmFtZSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChy ZXQgPCAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICsK PiArwqDCoMKgwqDCoMKgwqBzZXFfcHV0cyhzLCAiU2V0IHBoeSBwYXJhbWV0ZXIgYnkgZm9sbG93 aW5nIGNvbW1hbmRcbiIpOwo+ICvCoMKgwqDCoMKgwqDCoHNlcV9wcmludGYocywgImVjaG8gXCJ2 YWx1ZVwiID4gJXMvJXMvJXNcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBwaHlfZGlyX25hbWUsIGRpcl9uYW1lLCBmaWxlX25hbWUpOwo+ICsKPiArwqDCoMKgwqDC oMKgwqByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBydGtfdXNiMl9zZXRfcGFyYW1l dGVyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0Cj4gZmlsZSAqZmlsZSkKPiArewo+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBydGtfdXNiMl9zZXRfcGFy YW1ldGVyX3Nob3csIGlub2RlLQo+ID5pX3ByaXZhdGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3Np emVfdCBydGtfdXNiMl9zZXRfcGFyYW1ldGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6 ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFy ICpmaWxlX25hbWUgPSBmaWxlX2RlbnRyeShmaWxlKS0+ZF9pbmFtZTsKPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgZGVudHJ5ICpwX2RlbnRyeSA9IGZpbGVfZGVudHJ5KGZpbGUpLT5kX3BhcmVudDsK PiArwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpkaXJfbmFtZSA9IHBfZGVudHJ5LT5kX2luYW1l Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZW50cnkgKnBwX2RlbnRyeSA9IHBfZGVudHJ5LT5k X3BhcmVudDsKPiArwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpwaHlfZGlyX25hbWUgPSBwcF9k ZW50cnktPmRfaW5hbWU7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHNlcV9maWxlwqDCoMKgwqDC oMKgwqDCoMKgKnMgPSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IHJ0a191c2JfcGh5wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCpydGtfcGh5ID0gcy0+cHJp dmF0ZTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcmVnX2FkZHIgKnJlZ0FkZHI7Cj4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IHBoeV9kYXRhICpwaHlfZGF0YTsKPiArwqDCoMKgwqDCoMKgwqBpbnQg cmV0ID0gMDsKPiArwqDCoMKgwqDCoMKgwqBjaGFyIGJ1ZmZlcls0MF0gPSB7MH07Cj4gK8KgwqDC oMKgwqDCoMKgaW50IGluZGV4Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoY29weV9mcm9tX3Vz ZXIoJmJ1ZmZlciwgdWJ1ZiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IG1pbl90KHNpemVfdCwgc2l6ZW9mKGJ1ZmZlcikgLSAxLCBjb3VudCkpKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVGQVVMVDsKPiArCj4gK8KgwqDCoMKgwqDCoMKg Zm9yIChpbmRleCA9IDA7IGluZGV4IDwgcnRrX3BoeS0+cGh5TjsgaW5kZXgrKykgewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzaXplX3Qgc3ogPSAzMDsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY2hhciBuYW1lWzMwXSA9IHswfTsKPiArCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHNucHJpbnRmKG5hbWUsIHN6LCAicGh5JWQiLCBpbmRleCk7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzdHJuY21wKG5hbWUsIHBoeV9kaXJf bmFtZSwgc3RybGVuKG5hbWUpKSA9PSAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZWdBZGRyID0gJigoc3RydWN0IHJlZ19hZGRyICopcnRrX3Bo eS0KPiA+cmVnX2FkZHIpW2luZGV4XTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhID0gJigoc3RydWN0IHBoeV9kYXRhICopcnRrX3BoeS0K PiA+cGh5X2RhdGEpW2luZGV4XTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4g K8KgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoGlmICghcmVnQWRkcikgewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKHJ0a19waHktPmRldiwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgIiVzOiBObyByZWdBZGRyIGZvciAlcy8lcy8lc1xuIiwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19m dW5jX18sIHBoeV9kaXJfbmFtZSwgZGlyX25hbWUsCj4gZmlsZV9uYW1lKTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ ICvCoMKgwqDCoMKgwqDCoGlmICghcGh5X2RhdGEpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZGV2X2VycihydGtfcGh5LT5kZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICIlczogTm8gcGh5 X2RhdGEgZm9yICVzLyVzLyVzXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgcGh5X2Rpcl9u YW1lLCBkaXJfbmFtZSwKPiBmaWxlX25hbWUpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gLUVJTlZBTDsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoGlmIChzdHJjbXAoInBhZ2UwIiwgZGlyX25hbWUpID09IDApIHsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcnRrX3VzYl9waHlfc2V0X3BhZ2UocmVnQWRkciwgMCk7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IF9fc2V0X3BhcmFtZXRlcl9hdF9wYWdl KHJ0a19waHksIHJlZ0FkZHIsCj4gcGh5X2RhdGEsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGh5X2RhdGEtPnBhZ2UwLCBkaXJfbmFtZSwg ZmlsZV9uYW1lLAo+IGJ1ZmZlcik7Cj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIGlmIChzdHJjbXAo InBhZ2UxIiwgZGlyX25hbWUpID09IDApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcnRrX3VzYl9waHlfc2V0X3BhZ2UocmVnQWRkciwgMSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldCA9IF9fc2V0X3BhcmFtZXRlcl9hdF9wYWdlKHJ0a19waHksIHJlZ0Fk ZHIsCj4gcGh5X2RhdGEsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcGh5X2RhdGEtPnBhZ2UxLCBkaXJfbmFtZSwgZmlsZV9uYW1lLAo+IGJ1 ZmZlcik7Cj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIGlmIChzdHJjbXAoInBhZ2UyIiwgZGlyX25h bWUpID09IDApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcnRrX3VzYl9waHlf c2V0X3BhZ2UocmVnQWRkciwgMik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dCA9IF9fc2V0X3BhcmFtZXRlcl9hdF9wYWdlKHJ0a19waHksIHJlZ0FkZHIsCj4gcGh5X2RhdGEs Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cGh5X2RhdGEtPnBhZ2UyLCBkaXJfbmFtZSwgZmlsZV9uYW1lLAo+IGJ1ZmZlcik7Cj4gK8KgwqDC oMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4g Y291bnQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJ0 a191c2IyX3NldF9wYXJhbWV0ZXJfZm9wcyA9IHsKPiArwqDCoMKgwqDCoMKgwqAub3BlbsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBydGtfdXNiMl9zZXRfcGFyYW1ldGVy X29wZW4sCj4gK8KgwqDCoMKgwqDCoMKgLndyaXRlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgPSBydGtfdXNiMl9zZXRfcGFyYW1ldGVyX3dyaXRlLAo+ICvCoMKgwqDCoMKgwqDC oC5yZWFkwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IHNlcV9yZWFkLAo+ ICvCoMKgwqDCoMKgwqDCoC5sbHNlZWvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg PSBzZXFfbHNlZWssCj4gK8KgwqDCoMKgwqDCoMKgLnJlbGVhc2XCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoD0gc2luZ2xlX3JlbGVhc2UsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHJ0 a191c2IyX3RvZ2dsZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQo+ICt7 Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHJ0a191c2JfcGh5ICpydGtfcGh5ID0gcy0+cHJpdmF0 ZTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X2RhdGEgKnBoeV9kYXRhOwo+ICvCoMKgwqDC oMKgwqDCoGludCBpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgcnRrX3Bo eS0+cGh5TjsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRh ID0gJigoc3RydWN0IHBoeV9kYXRhICopcnRrX3BoeS0KPiA+cGh5X2RhdGEpW2ldOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRmKHMsICJOb3cgcGh5IyVkIGRvX3Rv Z2dsZSBpcyAlcy5cbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaSwgcGh5X2RhdGEtCj4gPmRvX3RvZ2dsZT8iRW5hYmxlIjoiRGlzYWJs ZSIpOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqBzZXFfcHV0cyhzLCAiZWhj byAxIHRvIGVuYWJsZSB0b2dnbGUgcGh5IHBhcmFtZXRlci5cbiIpOwo+ICsKPiArwqDCoMKgwqDC oMKgwqByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBydGtfdXNiMl90b2dnbGVfb3Bl bihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZQo+ICpmaWxlKQo+ICt7Cj4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJ0a191c2IyX3RvZ2dsZV9zaG93LCBp bm9kZS0KPiA+aV9wcml2YXRlKTsKPiArfQo+ICsKPiArc3RhdGljIHNzaXplX3QgcnRrX3VzYjJf dG9nZ2xlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBw b3MpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc2VxX2ZpbGXCoMKgwqDCoMKgwqDCoMKg wqAqcyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcnRrX3Vz Yl9waHnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKnJ0a19waHkgPSBzLT5wcml2YXRlOwo+ ICvCoMKgwqDCoMKgwqDCoGNoYXLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgYnVmWzMyXTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X2RhdGEgKnBoeV9kYXRhOwo+ ICvCoMKgwqDCoMKgwqDCoGJvb2wgZW5hYmxlID0gZmFsc2U7Cj4gK8KgwqDCoMKgwqDCoMKgaW50 IGk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBt aW5fdChzaXplX3QsIHNpemVvZihidWYpIC0gMSwKPiBjb3VudCkpKQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVGQVVMVDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYg KCFzdHJuY21wKGJ1ZiwgIjEiLCAxKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZW5hYmxlID0gdHJ1ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IHJ0a19w aHktPnBoeU47IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0 YSA9ICYoKHN0cnVjdCBwaHlfZGF0YSAqKXJ0a19waHktCj4gPnBoeV9kYXRhKVtpXTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEtPmRvX3RvZ2dsZSA9IGVuYWJsZTsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2luZm8ocnRrX3BoeS0+ZGV2LCAi U2V0IHBoeSMlZCBkb190b2dnbGUgaXMKPiAlcy5cbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaSwgcGh5X2RhdGEtCj4gPmRvX3RvZ2ds ZT8iRW5hYmxlIjoiRGlzYWJsZSIpOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKg wqDCoMKgcmV0dXJuIGNvdW50Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVf b3BlcmF0aW9ucyBydGtfdXNiMl90b2dnbGVfZm9wcyA9IHsKPiArwqDCoMKgwqDCoMKgwqAub3Bl bsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBydGtfdXNiMl90b2dnbGVf b3BlbiwKPiArwqDCoMKgwqDCoMKgwqAud3JpdGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqA9IHJ0a191c2IyX3RvZ2dsZV93cml0ZSwKPiArwqDCoMKgwqDCoMKgwqAucmVhZMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBzZXFfcmVhZCwKPiArwqDCoMKg wqDCoMKgwqAubGxzZWVrwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0gc2VxX2xz ZWVrLAo+ICvCoMKgwqDCoMKgwqDCoC5yZWxlYXNlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqA9IHNpbmdsZV9yZWxlYXNlLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBjcmVhdGVfZGVi dWdfc2V0X3BhcmFtZXRlcl9maWxlcyhzdHJ1Y3QgcnRrX3VzYl9waHkKPiAqcnRrX3BoeSwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRlbnRyeSAqcGh5X2RpciwgY29uc3QgY2hhciAq cGFnZSwgc2l6ZV90Cj4gYWRkcl9zaXplKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRl bnRyeSAqcGFnZV9kaXI7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IGk7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoHBhZ2VfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKHBhZ2UsIHBoeV9kaXIpOwo+ICvCoMKg wqDCoMKgwqDCoGlmICghcGFnZV9kaXIpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZGV2X2VycihydGtfcGh5LT5kZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIiVzIEVycm9yIGNyZWF0ZSBmb2xkZXIgJXMgZmFpbFxu IiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBfX2Z1bmNfXywgcGFnZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biAtRUlOVkFMOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgZm9yIChp ID0gMDsgaSA8IGFkZHJfc2l6ZTsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHNpemVfdCBzeiA9IDMwOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGFy IG5hbWVbMzBdID0gezB9Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc25w cmludGYobmFtZSwgc3osICIleCIsCj4gQVJSQVlfSU5ERVhfTUFQX1BBR0VfQUREUihpKSk7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIWRlYnVnZnNfY3JlYXRlX2Zp bGUobmFtZSwgMDY0NCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBwYWdlX2RpciwgcnRrX3BoeSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcnRrX3VzYjJfc2V0X3BhcmFtZXRlcl9m b3BzKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRl dl9lcnIocnRrX3BoeS0+ZGV2LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiJXMgRXJyb3IgY3JlYXRlIGZpbGUg JXMvJXMKPiBmYWlsIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFnZSwgbmFtZSwgX19mdW5jX18pOwo+ICvC oMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbmxpbmUgdm9pZCBjcmVhdGVfZGVidWdfZmlsZXMoc3RydWN0IHJ0a191c2JfcGh5 ICpydGtfcGh5KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRlbnRyeSAqcGh5X2RlYnVn X3Jvb3QgPSBOVUxMOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZW50cnkgKnNldF9wYXJhbWV0 ZXJfZGlyID0gTlVMTDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcGh5X2RlYnVnX3Jvb3QgPSBjcmVh dGVfcGh5X2RlYnVnX3Jvb3QoKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFwaHlfZGVidWdf cm9vdCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKHJ0a19waHkt PmRldiwgIiVzIEVycm9yIHBoeV9kZWJ1Z19yb290IGlzCj4gTlVMTCIsCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18pOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ ICsKPiArwqDCoMKgwqDCoMKgwqBydGtfcGh5LT5kZWJ1Z19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9k aXIoZGV2X25hbWUocnRrX3BoeS0KPiA+ZGV2KSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHBoeV9kZWJ1Z19yb290KTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXJ0a19w aHktPmRlYnVnX2Rpcikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJy KHJ0a19waHktPmRldiwgIiVzIEVycm9yIGRlYnVnX2RpciBpcyBOVUxMIiwKPiBfX2Z1bmNfXyk7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiArwqDCoMKgwqDCoMKg wqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICghZGVidWdmc19jcmVhdGVfZmlsZSgicGFyYW1l dGVyIiwgMDQ0NCwgcnRrX3BoeS0KPiA+ZGVidWdfZGlyLCBydGtfcGh5LAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnJ0a191c2IyX3BhcmFtZXRlcl9mb3BzKSkKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmaWxlX2Vycm9yOwo+ICsKPiArwqDC oMKgwqDCoMKgwqBzZXRfcGFyYW1ldGVyX2RpciA9IGRlYnVnZnNfY3JlYXRlX2Rpcigic2V0X3Bh cmFtZXRlciIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBydGtfcGh5 LT5kZWJ1Z19kaXIpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChzZXRfcGFyYW1ldGVyX2Rpcikgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgaW5kZXgsIHJldDsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHJ0a19w aHktPnBoeU47IGluZGV4KyspIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHN0cnVjdCBkZW50cnkgKnBoeV9kaXI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X2RhdGEgKnBoeV9kYXRhOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2l6ZV90IHN6 ID0gMzA7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj aGFyIG5hbWVbMzBdID0gezB9Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHNucHJpbnRmKG5hbWUsIHN6LCAicGh5JWQiLCBpbmRleCk7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEg PSAmKChzdHJ1Y3QgcGh5X2RhdGEgKilydGtfcGh5LQo+ID5waHlfZGF0YSlbaW5kZXhdOwo+ICsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kaXIg PSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwKPiBzZXRfcGFyYW1ldGVyX2Rpcik7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIXBoeV9kaXIpIHsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkZXZfZXJyKHJ0a19waHktPmRldiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICIlcyBFcnJvciBjcmVhdGUgZm9sZGVyCj4gJXMgZmFpbFxuIiwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIG5hbWUsIF9fZnVuY19fKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZpbGVfZXJyb3I7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0KPiBj cmVhdGVfZGVidWdfc2V0X3BhcmFtZXRlcl9maWxlcyhydGtfcGh5LCBwaHlfZGlyLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAicGFnZTAiLCBwaHlfZGF0YS0+cGFnZTBfc2l6ZSk7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRl dl9lcnIocnRrX3BoeS0+ZGV2LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIiVzIEVy cm9yIGNyZWF0ZSBmaWxlcwo+IGZvciBwYWdlMCBmYWlsXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgX19mdW5jX18pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZmlsZV9lcnJvcjsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPQo+IGNyZWF0ZV9kZWJ1 Z19zZXRfcGFyYW1ldGVyX2ZpbGVzKHJ0a19waHksIHBoeV9kaXIsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJw YWdlMSIsIHBoeV9kYXRhLT5wYWdlMV9zaXplKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihydGtf cGh5LT5kZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiJXMgRXJyb3IgY3JlYXRl IGZpbGVzCj4gZm9yIHBhZ2UxIGZhaWxcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBfX2Z1bmNfXyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmaWxlX2Vycm9yOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9Cj4gY3JlYXRlX2RlYnVnX3NldF9wYXJh bWV0ZXJfZmlsZXMocnRrX3BoeSwgcGh5X2RpciwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgInBhZ2UyIiwgcGh5 X2RhdGEtPnBhZ2UyX3NpemUpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaWYgKHJldCA8IDApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKHJ0a19waHktPmRldiwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICIlcyBFcnJvciBjcmVhdGUgZmlsZXMKPiBm b3IgcGFnZTIgZmFpbFxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19f KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBnb3RvIGZpbGVfZXJyb3I7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0K PiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICghZGVidWdmc19jcmVh dGVfZmlsZSgidG9nZ2xlIiwgMDY0NCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJ0a19waHktPmRlYnVnX2RpciwgcnRrX3BoeSwKPiAmcnRrX3VzYjJfdG9nZ2xlX2Zv cHMpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZpbGVfZXJyb3I7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybjsKPiArCj4gK2ZpbGVfZXJyb3I6Cj4gK8KgwqDCoMKg wqDCoMKgZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHJ0a19waHktPmRlYnVnX2Rpcik7Cj4gK30K PiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZGVidWdfZmlsZXMoc3RydWN0IHJ0a191 c2JfcGh5ICpydGtfcGh5KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgZGVidWdmc19yZW1vdmVfcmVj dXJzaXZlKHJ0a19waHktPmRlYnVnX2Rpcik7Cj4gK30KPiArI2Vsc2UKPiArc3RhdGljIGlubGlu ZSB2b2lkIGNyZWF0ZV9kZWJ1Z19maWxlcyhzdHJ1Y3QgcnRrX3VzYl9waHkgKnJ0a19waHkpIHsK PiB9Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZGVidWdfZmlsZXMoc3RydWN0IHJ0a191 c2JfcGh5ICpydGtfcGh5KSB7Cj4gfQo+ICsjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCj4g Kwo+ICtzdGF0aWMgaW50IF9fZ2V0X3BoeV9wYXJhbWV0ZXJfYnlfZWZ1c2Uoc3RydWN0IHJ0a191 c2JfcGh5ICpydGtfcGh5LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcGh5X2RhdGEg KnBoeV9kYXRhLCBpbnQgaW5kZXgpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqB1OCB2YWx1ZSA9IDA7 Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG52bWVtX2NlbGwgKmNlbGw7Cj4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IHNvY19kZXZpY2VfYXR0cmlidXRlIHJ0a19zb2NfZ3Jvb3RbXSA9IHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHsgLmZhbWlseSA9ICJS ZWFsdGVrIEdyb290Iix9LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgeyAvKiBlbXB0eSAqLyB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oH07Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHNvY19kZXZpY2VfYXR0cmlidXRlIHJ0a19zb2Nf aGFua1tdID0gewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgeyAuZmFtaWx5ID0gIlJlYWx0ZWsgSGFuayIsfSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHsgLyogZW1wdHkgKi8gfQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB9Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBzb2NfZGV2aWNlX2F0 dHJpYnV0ZSBydGtfc29jX2VmdXNlX3YxW10gPSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB7IC5mYW1pbHkgPSAiUmVhbHRlayBQaG9lbml4Iix9LAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeyAuZmFtaWx5 ID0gIlJlYWx0ZWsgS3lsaW4iLH0sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB7IC5mYW1pbHkgPSAiUmVhbHRlayBIZXJjdWxlcyIsfSwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHsgLmZhbWlseSA9ICJSZWFs dGVrIFRob3IiLH0sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB7IC5mYW1pbHkgPSAiUmVhbHRlayBIYW5rIix9LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeyAuZmFtaWx5ID0gIlJlYWx0ZWsgR3Jvb3QiLH0s Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB7IC5mYW1p bHkgPSAiUmVhbHRlayBTdGFyayIsfSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHsgLmZhbWlseSA9ICJSZWFsdGVrIFBhcmtlciIsfSwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHsgLyogZW1wdHkgKi8gfQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBzb2NfZGV2aWNlX2F0dHJpYnV0ZSBydGtfc29jX2Rpc19sZXZlbF9hdF9wYWdlMFtdID0gewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeyAuZmFtaWx5 ID0gIlJlYWx0ZWsgUGhvZW5peCIsfSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHsgLmZhbWlseSA9ICJSZWFsdGVrIEt5bGluIix9LAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeyAuZmFtaWx5ID0gIlJlYWx0 ZWsgSGVyY3VsZXMiLH0sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB7IC5mYW1pbHkgPSAiUmVhbHRlayBUaG9yIix9LAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeyAuZmFtaWx5ID0gIlJlYWx0ZWsgSGFuayIs fSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHsgLmZh bWlseSA9ICJSZWFsdGVrIEdyb290Iix9LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgeyAvKiBlbXB0eSAqLyB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH07Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChzb2NfZGV2aWNlX21hdGNoKHJ0 a19zb2NfZWZ1c2VfdjEpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9k YmcocnRrX3BoeS0+ZGV2LCAiVXNlIGVmdXNlIHYxIHRvIHVwZGF0ZWQgcGh5Cj4gcGFyYW1ldGVy XG4iKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEtPmNoZWNrX2Vm dXNlX3ZlcnNpb24gPSBDSEVDS19FRlVTRV9WMTsKPiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZGJnKHJ0a19waHktPmRldiwgIlVz ZSBlZnVzZSB2MiB0byB1cGRhdGVkIHBoeQo+IHBhcmFtZXRlclxuIik7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhLT5jaGVja19lZnVzZV92ZXJzaW9uID0gQ0hFQ0tf RUZVU0VfVjI7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoc29j X2RldmljZV9tYXRjaChydGtfc29jX2Rpc19sZXZlbF9hdF9wYWdlMCkpIHsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2RiZyhydGtfcGh5LT5kZXYsICJVc2UgdXNiX2RjX2Rp c19hdF9wYWdlMFxcbiIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0 YS0+dXNiX2RjX2Rpc19hdF9wYWdlMCA9IHRydWU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBwaHlfZGF0YS0+dXNiX2RjX2NhbF9tYXNrID0gMHhmOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0YS0+dXNiX2RjX2Rpc19tYXNrID0gMHhmOwo+ICsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEtPmRpc2Nvbm5lY3RfZHJp dmluZ191cGRhdGVkID0gMHhmOwo+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9kYmcocnRrX3BoeS0+ZGV2LCAiTm8gdXNlCj4gdXNi X2RjX2Rpc19hdF9wYWdlMFxuIik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBo eV9kYXRhLT51c2JfZGNfZGlzX2F0X3BhZ2UwID0gZmFsc2U7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0YS0+dXNiX2RjX2NhbF9tYXNrID0gMHgxZjsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEtPnVzYl9kY19kaXNfbWFzayA9IDB4 ZjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhLT5kaXNjb25u ZWN0X2RyaXZpbmdfdXBkYXRlZCA9IDB4ODsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoHBoeV9kYXRhLT5lZnVzZV91c2JfZGNfY2FsX3JhdGUgPSBFRlVTX1VTQl9EQ19D QUxfUkFURTsKPiArwqDCoMKgwqDCoMKgwqBwaHlfZGF0YS0+ZWZ1c2VfdXNiX2RjX2Rpc19yYXRl ID0gRUZVU19VU0JfRENfRElTX1JBVEU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChzb2NfZGV2 aWNlX21hdGNoKHJ0a19zb2NfaGFuaykpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHBoeV9kYXRhLT5lZnVzZV91c2JfZGNfY2FsX3JhdGUgPSAxOwo+ICsKPiArwqDCoMKgwqDCoMKg wqBpZiAoIXBoeV9kYXRhLT5jaGVja19lZnVzZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZ290byBvdXQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIFJlYWQgZWZ1c2UgZm9yIHVz YiBkYyBjYWwgKi8KPiArwqDCoMKgwqDCoMKgwqBjZWxsID0gbnZtZW1fY2VsbF9nZXQocnRrX3Bo eS0+ZGV2LCAidXNiLWRjLWNhbCIpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoY2VsbCkp IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X3dhcm4ocnRrX3BoeS0+ZGV2 LCAiJXMgZmFpbGVkIHRvIGdldCB1c2ItZGMtY2FsOgo+ICVsZFxuIiwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgUFRSX0VS UihjZWxsKSk7Cj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdW5zaWduZWQgY2hhciAqYnVmOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBzaXplX3QgYnVmX3NpemU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgJmJ1Zl9zaXplKTsKPiArCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbHVlID0gYnVmWzBdICYgcGh5X2RhdGEtPnVzYl9k Y19jYWxfbWFzazsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9kYmco cnRrX3BoeS0+ZGV2LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICJidWY9MHgleCBidWZfc2l6ZT0lZCB2YWx1ZT0weCV4XG4iLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1ZlswXSwg KGludClidWZfc2l6ZSwgdmFsdWUpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKga2ZyZWUoYnVmKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbnZtZW1fY2Vs bF9wdXQoY2VsbCk7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAo cGh5X2RhdGEtPmNoZWNrX2VmdXNlX3ZlcnNpb24gPT0gQ0hFQ0tfRUZVU0VfVjEpIHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50IHJhdGUgPSBwaHlfZGF0YS0+ZWZ1c2VfdXNi X2RjX2NhbF9yYXRlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHZh bHVlIDw9IEVGVVNfVVNCX0RDX0NBTF9NQVgpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0YS0+ZWZ1c2VfdXNiX2RjX2NhbCA9IChpbnQ4X3Qp KHZhbHVlICoKPiByYXRlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEt PmVmdXNlX3VzYl9kY19jYWwgPSAtKGludDhfdCkoCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChFRlVTX1VTQl9E Q19DQUxfTUFYICYgdmFsdWUpICoKPiByYXRlKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmIChzb2NfZGV2aWNlX21hdGNoKHJ0a19zb2NfZ3Jvb3QpKSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfaW5mbyhydGtfcGh5 LT5kZXYsICJGb3IgZ3Jvb3QgSUMgd2UgbmVlZAo+IGEgd29ya2Fyb3VuZCB0byBhZGp1c3QgZWZ1 c2VfdXNiX2RjX2NhbFxuIik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgLyogV2UgZG9uJ3QgbXVsdGlwbGUgZGNfY2FsX3JhdGU9MiBmb3IKPiBw b3NpdGl2ZSBkYyBjYWwgY29tcGVuc2F0ZSAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHZhbHVlIDw9IEVGVVNfVVNCX0RDX0NBTF9NQVgpCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcGh5X2RhdGEtPmVmdXNlX3VzYl9kY19jYWwgPQo+IChpbnQ4X3QpKHZhbHVlKTsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBXZSBz ZXQgbWF4IGRjIGNhbCBjb21wZW5zYXRlIGlzIDB4OCBpZiBvdHAKPiBpcyAweDcgKi8KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh2YWx1ZSA9PSAw eDcpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcGh5X2RhdGEtPmVmdXNlX3VzYl9kY19jYWwgPQo+IChpbnQ4X3QpKHZhbHVl ICsgMSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKg wqB9IGVsc2UgeyAvKiBmb3IgQ0hFQ0tfRUZVU0VfVjIgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcGh5X2RhdGEtPmVmdXNlX3VzYl9kY19jYWwgPSB2YWx1ZSAmIHBoeV9kYXRh LQo+ID51c2JfZGNfY2FsX21hc2s7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDC oMKgwqBkZXZfZGJnKHJ0a19waHktPmRldiwgIkdldCBFZnVzZSB1c2JfZGNfY2FsPSVkIGZvciBp bmRleD0lZAo+IHZhbHVlPSV4XG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcGh5X2RhdGEtPmVmdXNlX3VzYl9kY19jYWwsIGluZGV4LCB2YWx1ZSk7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoC8qIFJlYWQgZWZ1c2UgZm9yIHVzYiBkYyBkaXNjb25uZWN0IGxldmVsICov Cj4gK8KgwqDCoMKgwqDCoMKgdmFsdWUgPSAwOwo+ICvCoMKgwqDCoMKgwqDCoGNlbGwgPSBudm1l bV9jZWxsX2dldChydGtfcGh5LT5kZXYsICJ1c2ItZGMtZGlzIik7Cj4gK8KgwqDCoMKgwqDCoMKg aWYgKElTX0VSUihjZWxsKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZf d2FybihydGtfcGh5LT5kZXYsICIlcyBmYWlsZWQgdG8gZ2V0IHVzYi1kYy1kaXM6Cj4gJWxkXG4i LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IF9fZnVuY19fLCBQVFJfRVJSKGNlbGwpKTsKPiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBjaGFyICpidWY7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNpemVfdCBidWZfc2l6ZTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJ1ZiA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCAmYnVmX3Np emUpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsdWUgPSBidWZbMF0g JiBwaHlfZGF0YS0+dXNiX2RjX2Rpc19tYXNrOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZGV2X2RiZyhydGtfcGh5LT5kZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgImJ1Zj0weCV4IGJ1Zl9zaXplPSVkIHZhbHVl PTB4JXhcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYnVmWzBdLCAoaW50KWJ1Zl9zaXplLCB2YWx1ZSk7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBrZnJlZShidWYpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBudm1lbV9jZWxsX3B1dChjZWxsKTsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoGlmIChwaHlfZGF0YS0+Y2hlY2tfZWZ1c2VfdmVyc2lvbiA9PSBDSEVDS19F RlVTRV9WMSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgcmF0ZSA9IHBo eV9kYXRhLT5lZnVzZV91c2JfZGNfZGlzX3JhdGU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAodmFsdWUgPD0gRUZVU19VU0JfRENfRElTX01BWCkKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhLT5lZnVzZV91c2Jf ZGNfZGlzID0gKGludDhfdCkodmFsdWUgKgo+IHJhdGUpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBwaHlfZGF0YS0+ZWZ1c2VfdXNiX2RjX2RpcyA9IC0oaW50OF90KSgKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKEVGVVNfVVNCX0RDX0RJU19NQVggJiB2YWx1ZSkgKgo+IHJhdGUpOwo+ICvCoMKgwqDC oMKgwqDCoH0gZWxzZSB7IC8qIGZvciBDSEVDS19FRlVTRV9WMiAqLwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0YS0+ZWZ1c2VfdXNiX2RjX2RpcyA9IHZhbHVlICYgcGh5 X2RhdGEtCj4gPnVzYl9kY19kaXNfbWFzazsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoGRldl9kYmcocnRrX3BoeS0+ZGV2LCAiR2V0IEVmdXNlIHVzYl9kY19kaXM9JWQg Zm9yIGluZGV4PSVkCj4gdmFsdWU9JXhcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBwaHlfZGF0YS0+ZWZ1c2VfdXNiX2RjX2RpcywgaW5kZXgsIHZhbHVlKTsKPiAr Cj4gK291dDoKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiArfQo+ICsKPiArLyogR2V0IGRl ZmF1bHQgcGh5IHBhcmFtZXRlciBmb3IgdXBkYXRlIGJ5IGVmdXNlIG9yCj4gbGRvX3BhZ2UwX2U0 X2NvbXBlbnNhdGUgKi8KPiArc3RhdGljIGludCBfX2dldF9kZWZhdWx0X3BoeV9wYXJhbWV0ZXJf Zm9yX3VwZGF0ZWQoCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBydGtfdXNiX3BoeSAq cnRrX3BoeSwgaW50IGluZGV4KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IGk7Cj4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IHJlZ19hZGRyICpyZWdBZGRyOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBwaHlfZGF0YSAqcGh5X2RhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHBoeV9wYXJhbWV0 ZXIgKnBoeV9wYWdlX3NldHRpbmc7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJlZ0FkZHIgPSAmKChz dHJ1Y3QgcmVnX2FkZHIgKilydGtfcGh5LT5yZWdfYWRkcilbaW5kZXhdOwo+ICvCoMKgwqDCoMKg wqDCoHBoeV9kYXRhID0gJigoc3RydWN0IHBoeV9kYXRhICopcnRrX3BoeS0+cGh5X2RhdGEpW2lu ZGV4XTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogR2V0IFBBR0UwXzB4RTQgZGVmYXVsdCB2YWx1 ZSAqLwo+ICvCoMKgwqDCoMKgwqDCoGlmIChwaHlfZGF0YS0+ZWZ1c2VfdXNiX2RjX2NhbCB8fCBw aHlfZGF0YS0KPiA+bGRvX3BhZ2UwX2U0X2NvbXBlbnNhdGUgfHwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIChwaHlfZGF0YS0+ZWZ1c2VfdXNiX2RjX2RpcyAmJiBwaHlf ZGF0YS0KPiA+dXNiX2RjX2Rpc19hdF9wYWdlMCkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcGh5X3BhZ2Vfc2V0dGluZyA9IHBoeV9kYXRhLT5wYWdlMDsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcnRrX3VzYl9waHlfc2V0X3BhZ2UocmVnQWRkciwgMCk7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpID0gUEFHRV9BRERSX01BUF9BUlJB WV9JTkRFWChQQUdFMF8weEU0KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KGkgPCBwaHlfZGF0YS0+cGFnZTBfc2l6ZSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgdTggYWRkciA9IChwaHlfcGFnZV9zZXR0aW5nICsgaSktPmFk ZHI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1OCBk YXRhID0gKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0+ZGF0YTsKPiArCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIWFkZHIpIHsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhZGRy ID0gQVJSQVlfSU5ERVhfTUFQX1BBR0VfQUREUihpKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkYXRhID0gcnRrX3VzYl9w aHlfcmVhZChyZWdBZGRyLAo+IGFkZHIpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAocGh5X3BhZ2Vfc2V0dGluZyAr IGkpLT5hZGRyID0gYWRkcjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAocGh5X3BhZ2Vfc2V0dGluZyArIGkpLT5kYXRhID0g ZGF0YTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBkZXZfZGJnKHJ0a19waHktPmRldiwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICJHZXQgZGVmYXVsdCBhZGRyICV4Cj4gdmFsdWUgJXhcbiIsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAocGh5X3BhZ2Vfc2V0dGluZyArIGkpLQo+ID5hZGRyLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0KPiA+ZGF0 YSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoC8qIEdldCBQQUdFMV8weEUyIGRlZmF1bHQgdmFsdWUgKi8KPiArwqDC oMKgwqDCoMKgwqBpZiAocGh5X2RhdGEtPmVmdXNlX3VzYl9kY19kaXMgJiYgIXBoeV9kYXRhLQo+ ID51c2JfZGNfZGlzX2F0X3BhZ2UwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHBoeV9wYWdlX3NldHRpbmcgPSBwaHlfZGF0YS0+cGFnZTE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJ0a191c2JfcGh5X3NldF9wYWdlKHJlZ0FkZHIsIDEpOwo+ICsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaSA9IFBBR0VfQUREUl9NQVBfQVJSQVlfSU5ERVgo UEFHRTFfMHhFMik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChpIDwgcGh5 X2RhdGEtPnBhZ2UxX3NpemUpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHU4IGFkZHIgPSAocGh5X3BhZ2Vfc2V0dGluZyArIGkpLT5hZGRyOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTggZGF0YSA9IChw aHlfcGFnZV9zZXR0aW5nICsgaSktPmRhdGE7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFhZGRyKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYWRkciA9IEFSUkFZ X0lOREVYX01BUF9QQUdFX0FERFIoaSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGF0YSA9IHJ0a191c2JfcGh5X3JlYWQo cmVnQWRkciwKPiBhZGRyKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0+YWRk ciA9IGFkZHI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0+ZGF0YSA9IGRhdGE7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZGV2X2RiZyhydGtfcGh5LT5kZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAiR2V0IGRlZmF1bHQgcGFnZTEgYWRkcgo+ICV4IHZhbHVlICV4XG4iLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKHBoeV9wYWdlX3NldHRpbmcgKyBpKS0KPiA+YWRkciwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChwaHlfcGFnZV9zZXR0aW5nICsgaSktCj4gPmRhdGEp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiAr wqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX2dldF9waHlf cGFyYW1ldGVyX3YxKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0Cj4gcGh5X2RhdGEgKnBoeV9k YXRhLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlX25vZGUgKnN1Yl9ub2Rl KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHBoeV9kYXRhX3BhZ2UwX3NpemUsIHBoeV9kYXRh X3BhZ2UxX3NpemU7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHBoeV9kYXRhX3BhZ2UyX3NpemU7Cj4g K8KgwqDCoMKgwqDCoMKgY2hhciB0bXBfYWRkcltNQVhfUEhZX0RBVEFfU0laRV07Cj4gK8KgwqDC oMKgwqDCoMKgY2hhciB0bXBfZGF0YVtNQVhfUEhZX0RBVEFfU0laRV07Cj4gK8KgwqDCoMKgwqDC oMKgaW50IGksIGNoaXBfcmV2aXNpb24sIHJldmlzaW9uLCByZXQgPSAwOwo+ICsKPiArwqDCoMKg wqDCoMKgwqBjaGlwX3JldmlzaW9uID0gX19nZXRfY2hpcF9yZXZpc2lvbigpOwo+ICsKPiArwqDC oMKgwqDCoMKgwqBkZXZfZGJnKGRldiwgIiVzOiBDaGlwIHJldmlzaW9uIGlzICV4XG4iLCBfX2Z1 bmNfXywKPiBjaGlwX3JldmlzaW9uKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gb2ZfcHJv cGVydHlfcmVhZF91MzJfaW5kZXgoc3ViX25vZGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAicmVhbHRlayxwaHktZGF0YS1wYWdlMC1zaXplIiwgMCwKPiAmcGh5X2Rh dGFfcGFnZTBfc2l6ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZ290byBlcnI7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG9m X3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KHN1Yl9ub2RlLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgInJlYWx0ZWsscGh5LWRhdGEtcGFnZTEtc2l6ZSIsIDAsCj4gJnBo eV9kYXRhX3BhZ2UxX3NpemUpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBkZXZf ZGJnKGRldiwgIiVzICVkIHBoeV9kYXRhX3BhZ2UwX3NpemU9JWQsCj4gcGh5X2RhdGFfcGFnZTFf c2l6ZT0lZFxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVu Y19fLCBfX0xJTkVfXywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBo eV9kYXRhX3BhZ2UwX3NpemUsIHBoeV9kYXRhX3BhZ2UxX3NpemUpOwo+ICsKPiArwqDCoMKgwqDC oMKgwqBpZiAocGh5X2RhdGFfcGFnZTBfc2l6ZSA+IE1BWF9QSFlfREFUQV9TSVpFIHx8Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlfZGF0YV9wYWdlMV9zaXplID4g TUFYX1BIWV9EQVRBX1NJWkUpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2 X2VycihkZXYsICIlcyBwaHlfZGF0YSBzaXplID4KPiBNQVhfUEhZX0RBVEFfU0laRVxuIiwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1 bmNfXyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyOwo+ICvCoMKg wqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91 MzJfaW5kZXgoc3ViX25vZGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAicmVhbHRlayxwaHktZGF0YS1wYWdlMi1zaXplIiwgMCwKPiAmcGh5X2RhdGFfcGFnZTJfc2l6 ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcGh5X2RhdGFfcGFnZTJfc2l6ZSA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgZGV2X2RiZyhk ZXYsICIlcyAlZCBwaHlfZGF0YV9wYWdlMl9zaXplPSVkXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18sIF9fTElORV9fLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGh5X2RhdGFfcGFnZTJfc2l6ZSk7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoGlmIChwaHlfZGF0YV9wYWdlMl9zaXplID4gTUFYX1BIWV9EQVRBX1NJWkUpIHsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihkZXYsICIlcyBwYWdlMiBw aHlfZGF0YSBzaXplPSVkID4KPiBNQVhfUEhZX0RBVEFfU0laRVxuIiwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgcGh5X2Rh dGFfcGFnZTJfc2l6ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJy Owo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgcGh5X2RhdGEtPnBhZ2Uw X3NpemUgPSBwaHlfZGF0YV9wYWdlMF9zaXplOwo+ICvCoMKgwqDCoMKgwqDCoHBoeV9kYXRhLT5w YWdlMCA9IGRldm1fa3phbGxvYyhkZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzaXplb2Yoc3RydWN0IHBoeV9wYXJhbWV0ZXIpICoKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhX3BhZ2UwX3NpemUsCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRlBfS0VSTkVMKTsKPiArwqDCoMKg wqDCoMKgwqBpZiAoIXBoeV9kYXRhLT5wYWdlMCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXQgPSAtRU5PTUVNOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBn b3RvIGVycjsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHBoeV9kYXRh LT5wYWdlMV9zaXplID0gcGh5X2RhdGFfcGFnZTFfc2l6ZTsKPiArwqDCoMKgwqDCoMKgwqBwaHlf ZGF0YS0+cGFnZTEgPSBkZXZtX2t6YWxsb2MoZGV2LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc2l6ZW9mKHN0cnVjdCBwaHlfcGFyYW1ldGVyKSAqCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0YV9wYWdlMV9zaXpl LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0ZQX0tFUk5FTCk7Cj4g K8KgwqDCoMKgwqDCoMKgaWYgKCFwaHlfZGF0YS0+cGFnZTEpIHsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0ID0gLUVOT01FTTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZ290byBlcnI7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBw aHlfZGF0YS0+cGFnZTJfc2l6ZSA9IHBoeV9kYXRhX3BhZ2UyX3NpemU7Cj4gK8KgwqDCoMKgwqDC oMKgaWYgKHBoeV9kYXRhLT5wYWdlMl9zaXplID4gMCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBwaHlfZGF0YS0+cGFnZTIgPSBkZXZtX2t6YWxsb2MoZGV2LAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZihzdHJ1 Y3QgcGh5X3BhcmFtZXRlcikgKgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhLT5wYWdlMl9zaXplLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdGUF9LRVJO RUwpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIXBoeV9kYXRhLT5wYWdl Mikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 ID0gLUVOT01FTTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGdvdG8gZXJyOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDC oMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3U4 X2FycmF5KHN1Yl9ub2RlLCAicmVhbHRlayxwaHktZGF0YS0KPiBwYWdlMC1hZGRyIiwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRtcF9hZGRyLCBwaHlfZGF0YV9wYWdl MF9zaXplKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBnb3RvIGVycjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV2aXNpb24gPSBjaGlw X3JldmlzaW9uOwo+ICvCoMKgwqDCoMKgwqDCoHdoaWxlIChyZXZpc2lvbiA+PSBERUZBVUxUX0NI SVBfUkVWSVNJT04pIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhciBwaHlf ZGF0YV9yZXZpc2lvblszMl0gPSB7MH07Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBzbnByaW50ZihwaHlfZGF0YV9yZXZpc2lvbiwgMjcsICJyZWFsdGVrLHBoeS1kYXRhLQo+ IHBhZ2UwLSVYIiwgcmV2aXNpb24pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91OF9hcnJheShzdWJfbm9kZSwKPiBwaHlfZGF0YV9y ZXZpc2lvbiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB0bXBfZGF0YSwgcGh5X2RhdGFfcGFnZTBfc2l6ZSk7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmICghcmV0KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZGJnKGRldiwgIiVzIGxvYWQgJXMgcGFyYW1ldGVyXG4i LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgcGh5X2RhdGFfcmV2aXNpb24pOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV2aXNpb24tLTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKChyZXZpc2lv biAmIDB4RkYpID4gMHhGKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV2aXNpb24gPSAocmV2aXNpb24gJiAweEYwMCkgKyAweEY7Cj4gK8KgwqDCoMKg wqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBGb3Igb2xkIGRldmljZSB0cmVlICovCj4g K8KgwqDCoMKgwqDCoMKgaWYgKHJldCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3U4X2FycmF5KHN1Yl9ub2RlLAo+ICJyZWFsdGVrLHBo eS1kYXRhLXBhZ2UwLWRhdGEiLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHRtcF9kYXRhLCBwaHlfZGF0YV9wYWdlMF9zaXplKTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkZXZfaW5mbyhkZXYsICIlcyBsb2FkIHBhZ2UwIHBhcmFtZXRlclxuIiwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgX19mdW5jX18pOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKg wqDCoMKgZm9yIChpID0gMDsgaSA8IHBoeV9kYXRhX3BhZ2UwX3NpemU7IGkrKykgewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X3BhcmFtZXRlciAqcGh5X2RhdGFf cGFnZTAgPQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIChwaHlfZGF0YS0+cGFnZTAgKyBpKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHBoeV9kYXRhX3BhZ2UwLT5hZGRyID0gdG1wX2FkZHJbaV07Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhX3BhZ2UwLT5kYXRhID0gdG1wX2RhdGFbaV07 Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSBvZl9wcm9wZXJ0 eV9yZWFkX3U4X2FycmF5KHN1Yl9ub2RlLCAicmVhbHRlayxwaHktZGF0YS0KPiBwYWdlMS1hZGRy IiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRtcF9hZGRyLCBwaHlf ZGF0YV9wYWdlMV9zaXplKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVycjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV2aXNp b24gPSBjaGlwX3JldmlzaW9uOwo+ICvCoMKgwqDCoMKgwqDCoHdoaWxlIChyZXZpc2lvbiA+PSBE RUZBVUxUX0NISVBfUkVWSVNJT04pIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Y2hhciBwaHlfZGF0YV9yZXZpc2lvblszMl0gPSB7MH07Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzbnByaW50ZihwaHlfZGF0YV9yZXZpc2lvbiwgMjcsICJyZWFsdGVrLHBo eS1kYXRhLQo+IHBhZ2UxLSVYIiwgcmV2aXNpb24pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91OF9hcnJheShzdWJfbm9kZSwKPiBw aHlfZGF0YV9yZXZpc2lvbiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB0bXBfZGF0YSwgcGh5X2RhdGFfcGFnZTFfc2l6ZSk7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghcmV0KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZGJnKGRldiwgIiVzIGxvYWQgJXMgcGFy YW1ldGVyXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgcGh5X2RhdGFfcmV2aXNpb24pOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV2aXNpb24tLTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KChyZXZpc2lvbiAmIDB4RkYpID4gMHhGKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV2aXNpb24gPSAocmV2aXNpb24gJiAweEYwMCkgKyAweEY7Cj4g K8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBGb3Igb2xkIGRldmljZSB0 cmVlICovCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3U4X2FycmF5KHN1Yl9ub2RlLAo+ICJy ZWFsdGVrLHBoeS1kYXRhLXBhZ2UxLWRhdGEiLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRtcF9kYXRhLCBwaHlfZGF0YV9wYWdlMV9zaXpl KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfaW5mbyhkZXYsICIlcyBsb2FkIHBhZ2UxIHBhcmFtZXRl clxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18pOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4g K8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IHBoeV9kYXRhX3BhZ2UxX3NpemU7IGkrKykg ewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X3BhcmFtZXRlciAq cGh5X2RhdGFfcGFnZTEgPQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIChwaHlfZGF0YS0+cGFnZTEgKyBpKTsKPiArCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhX3BhZ2UxLT5hZGRyID0gdG1wX2FkZHJbaV07Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhX3BhZ2UxLT5kYXRhID0gdG1w X2RhdGFbaV07Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAocGh5 X2RhdGEtPnBhZ2UyX3NpemUgPiAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdThfYXJyYXkoc3ViX25vZGUsCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgInJlYWx0ZWsscGh5LWRh dGEtcGFnZTItYWRkciIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdG1wX2FkZHIsIHBoeV9kYXRhLT5wYWdlMl9zaXplKTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV2aXNpb24gPSBjaGlwX3JldmlzaW9uOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB3aGlsZSAocmV2aXNpb24gPj0gREVGQVVMVF9DSElQX1JFVklTSU9O KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGFy IHBoeV9kYXRhX3JldmlzaW9uWzMyXSA9IHswfTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzbnByaW50ZihwaHlfZGF0YV9yZXZpc2lvbiwgMjcs ICJyZWFsdGVrLHBoeS0KPiBkYXRhLXBhZ2UyLSVYIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV2aXNpb24p Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dCA9IG9mX3Byb3BlcnR5X3JlYWRfdThfYXJyYXkoc3ViX25vZGUsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBo eV9kYXRhX3JldmlzaW9uLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0bXBfZGF0YSwgcGh5X2RhdGFfcGFnZTJf c2l6ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAoIXJldCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGRldl9kYmcoZGV2LCAiJXMgbG9hZCAlcwo+IHBhcmFtZXRlclxu IiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLAo+IHBoeV9kYXRhX3Jl dmlzaW9uKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldmlzaW9uLS07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAoKHJldmlzaW9uICYgMHhGRikgPiAweEYpCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV2aXNp b24gPSAocmV2aXNpb24gJiAweEYwMCkgKyAweEY7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEZvciBvbGQg ZGV2aWNlIHRyZWUgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkg ewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0g b2ZfcHJvcGVydHlfcmVhZF91OF9hcnJheShzdWJfbm9kZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgInJlYWx0 ZWsscGh5LWRhdGEtcGFnZTItZGF0YSIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRtcF9kYXRhLCBwaHlfZGF0 YS0+cGFnZTJfc2l6ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAocmV0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9pbmZvKGRldiwgIiVz IGxvYWQgcGFnZTIKPiBwYXJhbWV0ZXJcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBfX2Z1bmNfXyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IHBoeV9kYXRhLT5wYWdlMl9z aXplOyBpKyspIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHN0cnVjdCBwaHlfcGFyYW1ldGVyICpwaHlfZGF0YV9wYWdlMiA9Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IChwaHlfZGF0YS0+cGFnZTIgKyBpKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhX3BhZ2UyLT5hZGRyID0gdG1wX2FkZHJbaV07Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0YV9wYWdl Mi0+ZGF0YSA9IHRtcF9kYXRhW2ldOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9 Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArZXJyOgo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBy ZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19nZXRfcGh5X3BhcmFtZXRlcl92MihzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHN0cnVjdAo+IHBoeV9kYXRhICpwaHlfZGF0YSwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqAgc3RydWN0IGRldmljZV9ub2RlICpzdWJfbm9kZSkKPiArewo+ICvCoMKgwqDCoMKg wqDCoHUzMiBwYWdlX3NpemUgPSAwOwo+ICvCoMKgwqDCoMKgwqDCoHUzMiBudW1fY2VsbHMgPSAy OyAvKjwgYWRkciB2YWx1ZSA+ICovCj4gK8KgwqDCoMKgwqDCoMKgdTMyIGRhdGFfc2l6ZTsKPiAr wqDCoMKgwqDCoMKgwqBpbnQgaSwgb2Zmc2V0LCBjaGlwX3JldmlzaW9uLCByZXZpc2lvbiwgcmV0 ID0gMDsKPiArwqDCoMKgwqDCoMKgwqBjaGFyIHBoeV9kYXRhX3JldmlzaW9uWzMyXSA9IHswfTsK PiArCj4gK8KgwqDCoMKgwqDCoMKgY2hpcF9yZXZpc2lvbiA9IF9fZ2V0X2NoaXBfcmV2aXNpb24o KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogUGFnZSAwICovCj4gK8KgwqDCoMKgwqDCoMKgcmV0 ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgoc3ViX25vZGUsICJyZWFsdGVrLHBhZ2UwLQo+ IHNpemUiLCAwLCAmcGFnZV9zaXplKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KSB7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoZGV2LCAiJXMgTm8gcGFnZTBfc2l6 ZVxuIiwgX19mdW5jX18pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIHBh cnNlX3BhZ2UxOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgcGh5X2Rh dGEtPnBhZ2UwX3NpemUgPSBwYWdlX3NpemU7Cj4gK8KgwqDCoMKgwqDCoMKgcGh5X2RhdGEtPnBh Z2UwID0gZGV2bV9remFsbG9jKGRldiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHNpemVvZihzdHJ1Y3QgcGh5X3BhcmFtZXRlcikgKiBwYWdlX3NpemUsCj4gR0ZQX0tF Uk5FTCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFwaHlfZGF0YS0+cGFnZTApIHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gLUVOT01FTTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKg wqDCoMKgwqByZXZpc2lvbiA9IGNoaXBfcmV2aXNpb247Cj4gK8KgwqDCoMKgwqDCoMKgd2hpbGUg KHJldmlzaW9uID49IERFRkFVTFRfQ0hJUF9SRVZJU0lPTikgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzbnByaW50ZihwaHlfZGF0YV9yZXZpc2lvbiwgMjMsICJyZWFsdGVrLHBh Z2UwLWRhdGEtCj4gJVgiLCByZXZpc2lvbik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAob2ZfZ2V0X3Byb3BlcnR5KHN1Yl9ub2RlLCBwaHlfZGF0YV9yZXZpc2lvbiwK PiAmZGF0YV9zaXplKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZGV2X2RiZyhkZXYsICIlcyBsb2FkICVzIHBhcmFtZXRlcgo+IChkYXRhX3NpemU9 JWQpXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgcGh5X2RhdGFfcmV2aXNpb24sCj4gZGF0 YV9zaXplKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldmlzaW9uLS07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmICgocmV2aXNpb24gJiAweEZGKSA+IDB4RikKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldmlzaW9uID0gKHJldmlzaW9uICYgMHhGMDAp ICsgMHhGOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGF0YV9zaXplID0g MDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gMDsKPiArwqDCoMKgwqDC oMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgZGF0YV9zaXplID0gZGF0YV9zaXplIC8gKHNpemVvZih1 MzIpICogbnVtX2NlbGxzKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IGRh dGFfc2l6ZTsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBw aHlfcGFyYW1ldGVyICpwaHlfZGF0YV9wYWdlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB1MzIgYWRkciwgZGF0YTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50 IGluZGV4Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb2Zmc2V0ID0gaSAq IG51bV9jZWxsczsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IG9m X3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KHN1Yl9ub2RlLAo+IHBoeV9kYXRhX3JldmlzaW9uLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9m ZnNldCwgJmFkZHIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0KSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJy KGRldiwgIkVSUk9SOiBUbyBnZXQgJXMgaT0lZAo+IGFkZHI9MHgleFxuIiwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcGh5X2RhdGFfcmV2aXNpb24sIGksIGFkZHIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IG9mX3By b3BlcnR5X3JlYWRfdTMyX2luZGV4KHN1Yl9ub2RlLAo+IHBoeV9kYXRhX3JldmlzaW9uLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9mZnNl dCArIDEsICZkYXRhKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkg ewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2Vy cihkZXYsICJFUlJPUjogVG8gZ2V0ICVzIGk9JWQKPiBhZGRyPTB4JXhcbiIsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHBoeV9kYXRhX3JldmlzaW9uLCBpLCBkYXRhKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbmRleCA9IFBB R0VfQUREUl9NQVBfQVJSQVlfSU5ERVgoYWRkcik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHBoeV9kYXRhX3BhZ2UgPSAocGh5X2RhdGEtPnBhZ2UwICsgaW5kZXgpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0YV9wYWdlLT5hZGRyID0gKGNoYXIpYWRk cjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X2RhdGFfcGFnZS0+ZGF0YSA9 IChjaGFyKWRhdGE7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZGJn KGRldiwgIiVzIGluZGV4PSVkIGFkZHI9MHgleCBkYXRhPTB4JXhcbiIsCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGh5X2RhdGFfcmV2aXNp b24sIGluZGV4LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHBoeV9kYXRhX3BhZ2UtPmFkZHIsIHBoeV9kYXRhX3BhZ2UtCj4gPmRhdGEpOwo+ ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK3BhcnNlX3BhZ2UxOgo+ICvCoMKgwqDCoMKgwqDCoC8q IFBhZ2UgMSAqLwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2lu ZGV4KHN1Yl9ub2RlLCAicmVhbHRlayxwYWdlMS0KPiBzaXplIiwgMCwgJnBhZ2Vfc2l6ZSk7Cj4g K8KgwqDCoMKgwqDCoMKgaWYgKHJldCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBkZXZfZXJyKGRldiwgIiVzIE5vIHBhZ2UwX3NpemVcbiIsIF9fZnVuY19fKTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBwYXJzZV9wYWdlMjsKPiArwqDCoMKgwqDCoMKg wqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHBoeV9kYXRhLT5wYWdlMV9zaXplID0gcGFnZV9zaXpl Owo+ICvCoMKgwqDCoMKgwqDCoHBoeV9kYXRhLT5wYWdlMSA9IGRldm1fa3phbGxvYyhkZXYsCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2Yoc3RydWN0IHBoeV9w YXJhbWV0ZXIpICogcGFnZV9zaXplLAo+IEdGUF9LRVJORUwpOwo+ICvCoMKgwqDCoMKgwqDCoGlm ICghcGh5X2RhdGEtPnBhZ2UxKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dCA9IC1FTk9NRU07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+ ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV2aXNpb24gPSBjaGlwX3Jl dmlzaW9uOwo+ICvCoMKgwqDCoMKgwqDCoHdoaWxlIChyZXZpc2lvbiA+PSBERUZBVUxUX0NISVBf UkVWSVNJT04pIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc25wcmludGYocGh5 X2RhdGFfcmV2aXNpb24sIDIzLCAicmVhbHRlayxwYWdlMS0KPiBkYXRhXyVYIiwgcmV2aXNpb24p Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKG9mX2dldF9wcm9wZXJ0 eShzdWJfbm9kZSwgcGh5X2RhdGFfcmV2aXNpb24sCj4gJmRhdGFfc2l6ZSkpIHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9kYmcoZGV2LCAiJXMg bG9hZCAlcyBwYXJhbWV0ZXIKPiAoZGF0YV9zaXplPSVkKVxuIiwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19m dW5jX18sIHBoeV9kYXRhX3JldmlzaW9uLAo+IGRhdGFfc2l6ZSk7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXZpc2lv bi0tOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoKHJldmlzaW9uICYgMHhG RikgPiAweEYpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXZpc2lvbiA9IChyZXZpc2lvbiAmIDB4RjAwKSArIDB4RjsKPiArCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGRhdGFfc2l6ZSA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldCA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoGRh dGFfc2l6ZSA9IGRhdGFfc2l6ZSAvIChzaXplb2YodTMyKSAqIG51bV9jZWxscyk7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBkYXRhX3NpemU7IGkrKykgewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X3BhcmFtZXRlciAqcGh5X2RhdGFfcGFn ZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTMyIGFkZHIsIGRhdGE7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBpbmRleDsKPiArCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoG9mZnNldCA9IGkgKiBudW1fY2VsbHM7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChz dWJfbm9kZSwKPiBwaHlfZGF0YV9yZXZpc2lvbiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvZmZzZXQsICZhZGRyKTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihkZXYsICJFUlJPUjogVG8gZ2V0ICVzIGk9 JWQKPiBhZGRyPTB4JXhcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBoeV9kYXRhX3JldmlzaW9uLCBpLCBh ZGRyKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJy ZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChzdWJf bm9kZSwKPiBwaHlfZGF0YV9yZXZpc2lvbiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvZmZzZXQgKyAxLCAmZGF0YSk7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoZGV2LCAiRVJST1I6IFRvIGdldCAlcyBp PSVkCj4gYWRkcj0weCV4XG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlfZGF0YV9yZXZpc2lvbiwgaSwg ZGF0YSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBi cmVhazsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaW5kZXggPSBQQUdFX0FERFJfTUFQX0FSUkFZX0lOREVYKGFk ZHIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0YV9wYWdlID0gcGh5 X2RhdGEtPnBhZ2UxICsgaW5kZXg7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBo eV9kYXRhX3BhZ2UtPmFkZHIgPSAoY2hhcilhZGRyOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBwaHlfZGF0YV9wYWdlLT5kYXRhID0gKGNoYXIpZGF0YTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9kYmcoZGV2LCAiJXMgaW5kZXg9JWQgYWRkcj0weCV4 IGRhdGE9MHgleFxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBwaHlfZGF0YV9yZXZpc2lvbiwgaW5kZXgsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGh5X2RhdGFfcGFnZS0+YWRk ciwgcGh5X2RhdGFfcGFnZS0KPiA+ZGF0YSk7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArcGFy c2VfcGFnZTI6Cj4gK8KgwqDCoMKgwqDCoMKgLyogUGFnZSAyICovCj4gK8KgwqDCoMKgwqDCoMKg cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgoc3ViX25vZGUsICJyZWFsdGVrLHBhZ2Uy LQo+IHNpemUiLCAwLCAmcGFnZV9zaXplKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9kYmcoZGV2LCAiJXMgTm8gcGFnZTJf c2l6ZVxuIiwgX19mdW5jX18pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3Rv IG91dDsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHBoeV9kYXRhLT5w YWdlMl9zaXplID0gcGFnZV9zaXplOwo+ICvCoMKgwqDCoMKgwqDCoHBoeV9kYXRhLT5wYWdlMiA9 IGRldm1fa3phbGxvYyhkZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzaXplb2Yoc3RydWN0IHBoeV9wYXJhbWV0ZXIpICogcGFnZV9zaXplLAo+IEdGUF9LRVJORUwp Owo+ICvCoMKgwqDCoMKgwqDCoGlmICghcGh5X2RhdGEtPnBhZ2UyKSB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IC1FTk9NRU07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGdvdG8gb3V0Owo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDC oMKgcmV2aXNpb24gPSBjaGlwX3JldmlzaW9uOwo+ICvCoMKgwqDCoMKgwqDCoHdoaWxlIChyZXZp c2lvbiA+PSBERUZBVUxUX0NISVBfUkVWSVNJT04pIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgc25wcmludGYocGh5X2RhdGFfcmV2aXNpb24sIDIzLCAicmVhbHRlayxwYWdlMi1k YXRhLQo+ICVYIiwgcmV2aXNpb24pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKG9mX2dldF9wcm9wZXJ0eShzdWJfbm9kZSwgcGh5X2RhdGFfcmV2aXNpb24sCj4gJmRh dGFfc2l6ZSkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRldl9kYmcoZGV2LCAiJXMgbG9hZCAlcyBwYXJhbWV0ZXIKPiAoZGF0YV9zaXplPSVkKVxu IiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18sIHBoeV9kYXRhX3JldmlzaW9uLAo+IGRhdGFfc2l6 ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVh azsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXZpc2lvbi0tOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAoKHJldmlzaW9uICYgMHhGRikgPiAweEYpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXZpc2lvbiA9IChyZXZpc2lvbiAmIDB4RjAwKSArIDB4 RjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRhdGFfc2l6ZSA9IDA7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKg fQo+ICvCoMKgwqDCoMKgwqDCoGRhdGFfc2l6ZSA9IGRhdGFfc2l6ZSAvIChzaXplb2YodTMyKSAq IG51bV9jZWxscyk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBkYXRhX3Np emU7IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X3Bh cmFtZXRlciAqcGh5X2RhdGFfcGFnZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg dTMyIGFkZHIsIGRhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBpbmRl eDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9mZnNldCA9IGkgKiBudW1f Y2VsbHM7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBvZl9wcm9w ZXJ0eV9yZWFkX3UzMl9pbmRleChzdWJfbm9kZSwKPiBwaHlfZGF0YV9yZXZpc2lvbiwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvZmZzZXQs ICZhZGRyKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkgewo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihkZXYs ICJFUlJPUjogVG8gZ2V0ICVzIGk9JWQKPiBhZGRyPTB4JXhcbiIsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBo eV9kYXRhX3JldmlzaW9uLCBpLCBhZGRyKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBvZl9wcm9wZXJ0 eV9yZWFkX3UzMl9pbmRleChzdWJfbm9kZSwKPiBwaHlfZGF0YV9yZXZpc2lvbiwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvZmZzZXQgKyAx LCAmZGF0YSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQpIHsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoZGV2 LCAiRVJST1I6IFRvIGdldCAlcyBpPSVkCj4gYWRkcj0weCV4XG4iLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBw aHlfZGF0YV9yZXZpc2lvbiwgaSwgZGF0YSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW5kZXggPSBQQUdFX0FE RFJfTUFQX0FSUkFZX0lOREVYKGFkZHIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBwaHlfZGF0YV9wYWdlID0gcGh5X2RhdGEtPnBhZ2UyICsgaW5kZXg7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhX3BhZ2UtPmFkZHIgPSAoY2hhcilhZGRyOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0YV9wYWdlLT5kYXRhID0gKGNoYXIp ZGF0YTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9kYmcoZGV2LCAi JXMgaW5kZXg9JWQgYWRkcj0weCV4IGRhdGE9MHgleFxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlfZGF0YV9yZXZpc2lvbiwgaW5k ZXgsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcGh5X2RhdGFfcGFnZS0+YWRkciwgcGh5X2RhdGFfcGFnZS0KPiA+ZGF0YSk7Cj4gK8KgwqDC oMKgwqDCoMKgfQo+ICsKPiArb3V0Ogo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgX19nZXRfcGh5X3BhcmFtZXRlcihzdHJ1Y3QgcnRrX3VzYl9waHkg KnJ0a19waHksIGludAo+IGluZGV4KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmlj ZSAqZGV2ID0gcnRrX3BoeS0+ZGV2Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByZWdfYWRkciAq YWRkciA9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmKChzdHJ1Y3Qg cmVnX2FkZHIgKilydGtfcGh5LT5yZWdfYWRkcilbaW5kZXhdOwo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBwaHlfZGF0YSAqcGh5X2RhdGEgPQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJigoc3RydWN0IHBoeV9kYXRhICopcnRrX3BoeS0+cGh5X2RhdGEpW2luZGV4XTsK PiArwqDCoMKgwqDCoMKgwqBjaGFyIHBoeV9uYW1lWzVdLCBwaHlfbmFtZV92MlsxMF07Cj4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IGRldmljZV9ub2RlICpzdWJfbm9kZTsKPiArwqDCoMKgwqDCoMKg wqBpbnQgcmV0ID0gMDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgYWRkci0+cmVnX3dyYXBfdnN0YXR1 cyA9IG9mX2lvbWFwKGRldi0+b2Zfbm9kZSwgMCk7Cj4gK8KgwqDCoMKgwqDCoMKgYWRkci0+cmVn X2d1c2IycGh5YWNjMCA9IG9mX2lvbWFwKGRldi0+b2Zfbm9kZSwgaW5kZXggKyAxKTsKPiArwqDC oMKgwqDCoMKgwqBhZGRyLT52c3RhdHVzX2luZGV4ID0gaW5kZXg7Cj4gK8KgwqDCoMKgwqDCoMKg ZGV2X2RiZyhkZXYsICIlcyAlZCAjJWQgcmVnX3dyYXBfdnN0YXR1cz0lcFxuIiwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBfX0xJTkVfXywKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGluZGV4LCBhZGRyLT5yZWdfd3JhcF92 c3RhdHVzKTsKPiArwqDCoMKgwqDCoMKgwqBkZXZfZGJnKGRldiwgIiVzICVkICMlZCByZWdfZ3Vz YjJwaHlhY2MwPSVwXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg X19mdW5jX18sIF9fTElORV9fLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaW5kZXgsIGFkZHItPnJlZ19ndXNiMnBoeWFjYzApOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBz bnByaW50ZihwaHlfbmFtZSwgNSwgInBoeSVkIiwgaW5kZXgpOwo+ICsKPiArwqDCoMKgwqDCoMKg wqBzdWJfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi0+b2Zfbm9kZSwgcGh5X25hbWUp Owo+ICvCoMKgwqDCoMKgwqDCoGlmIChzdWJfbm9kZSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkZXZfZGJnKGRldiwgIiVzICVkOiAjJWQgR2V0IHBoeSBkYXRhIHYxIHN1Yl9u b2RlIGZvcgo+ICVzXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBfX0xJTkVfXywgaW5kZXgsIHBoeV9uYW1lKTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gX19nZXRfcGh5X3BhcmFtZXRlcl92 MShkZXYsIHBoeV9kYXRhLAo+IHN1Yl9ub2RlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGdvdG8gZXJyOwo+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHNucHJpbnRmKHBoeV9uYW1lX3YyLCAxMCwgInBoeSVkX2RhdGEi LCBpbmRleCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN1Yl9ub2RlID0gb2Zf Z2V0X2NoaWxkX2J5X25hbWUoZGV2LT5vZl9ub2RlLAo+IHBoeV9uYW1lX3YyKTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHN1Yl9ub2RlKSB7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZGJnKGRldiwgIiVzICVkOiAjJWQg R2V0IHBoeSBkYXRhIHYyCj4gc3ViX25vZGUgZm9yICVzXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBfX0xJTkVfXywg aW5kZXgsIHBoeV9uYW1lX3YyKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldCA9IF9fZ2V0X3BoeV9wYXJhbWV0ZXJfdjIoZGV2LCBwaHlfZGF0YSwK PiBzdWJfbm9kZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAocmV0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXN1 Yl9ub2RlKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVycjsKPiArCj4g K8KgwqDCoMKgwqDCoMKgaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChzdWJfbm9kZSwgInJlYWx0 ZWssZG8tdG9nZ2xlIikpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRh LT5kb190b2dnbGUgPSB0cnVlOwo+ICvCoMKgwqDCoMKgwqDCoGVsc2UKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEtPmRvX3RvZ2dsZSA9IGZhbHNlOwo+ICsKPiArwqDC oMKgwqDCoMKgwqBpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKHN1Yl9ub2RlLCAicmVhbHRlayxk by10b2dnbGUtCj4gZHJpdmluZyIpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBw aHlfZGF0YS0+ZG9fdG9nZ2xlX2RyaXZpbmcgPSB0cnVlOwo+ICvCoMKgwqDCoMKgwqDCoGVsc2UK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEtPmRvX3RvZ2dsZV9kcml2 aW5nID0gZmFsc2U7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jv b2woc3ViX25vZGUsICJyZWFsdGVrLGNoZWNrLWVmdXNlIikpCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHBoeV9kYXRhLT5jaGVja19lZnVzZSA9IHRydWU7Cj4gK8KgwqDCoMKgwqDC oMKgZWxzZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0YS0+Y2hlY2tf ZWZ1c2UgPSBmYWxzZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKG9mX3Byb3BlcnR5X3JlYWRf Ym9vbChzdWJfbm9kZSwgInJlYWx0ZWssdXNlLWRlZmF1bHQtCj4gcGFyYW1ldGVyIikpCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhLT51c2VfZGVmYXVsdF9wYXJhbWV0 ZXIgPSB0cnVlOwo+ICvCoMKgwqDCoMKgwqDCoGVsc2UKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcGh5X2RhdGEtPnVzZV9kZWZhdWx0X3BhcmFtZXRlciA9IGZhbHNlOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqBpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKHN1Yl9ub2RlLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgInJlYWx0ZWssaXMtZG91YmxlLXNlbnNp dGl2aXR5LW1vZGUiKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEt PmlzX2RvdWJsZV9zZW5zaXRpdml0eV9tb2RlID0gdHJ1ZTsKPiArwqDCoMKgwqDCoMKgwqBlbHNl Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhLT5pc19kb3VibGVfc2Vu c2l0aXZpdHlfbW9kZSA9IGZhbHNlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAob2ZfcHJvcGVy dHlfcmVhZF9ib29sKHN1Yl9ub2RlLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgInJlYWx0ZWssbGRvLWZvcmNlLWVuYWJsZSIpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBwaHlfZGF0YS0+bGRvX2ZvcmNlX2VuYWJsZSA9IHRydWU7Cj4gK8KgwqDCoMKg wqDCoMKgZWxzZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0YS0+bGRv X2ZvcmNlX2VuYWJsZSA9IGZhbHNlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAob2ZfcHJvcGVy dHlfcmVhZF9zMzIoc3ViX25vZGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAi cmVhbHRlayxsZG8tcGFnZTAtZTQtY29tcGVuc2F0ZSIsICZwaHlfZGF0YS0KPiA+bGRvX3BhZ2Uw X2U0X2NvbXBlbnNhdGUpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0 YS0+bGRvX3BhZ2UwX2U0X2NvbXBlbnNhdGUgPSAwOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAo b2ZfcHJvcGVydHlfcmVhZF9zMzIoc3ViX25vZGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAicmVhbHRlayxwYWdlMC1lNC1jb21wZW5zYXRlIiwgJnBoeV9kYXRhLQo+ID5wYWdl MF9lNF9jb21wZW5zYXRlKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X2Rh dGEtPnBhZ2UwX2U0X2NvbXBlbnNhdGUgPSAwOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBfX2dldF9w aHlfcGFyYW1ldGVyX2J5X2VmdXNlKHJ0a19waHksIHBoeV9kYXRhLCBpbmRleCk7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoF9fZ2V0X2RlZmF1bHRfcGh5X3BhcmFtZXRlcl9mb3JfdXBkYXRlZChydGtf cGh5LCBpbmRleCk7Cj4gK2VycjoKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IHJ0a191c2IycGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcnRrX3VzYl9waHkgKnJ0a19waHk7 Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArwqDC oMKgwqDCoMKgwqBpbnQgaW5kZXgsIHJldCA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHBvcnRf aW5kZXgsIHBoeU47Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJ0a19waHkgPSBkZXZtX2t6YWxsb2Mo ZGV2LCBzaXplb2YoKnJ0a19waHkpLCBHRlBfS0VSTkVMKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAo IXJ0a19waHkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PTUVN Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBydGtfcGh5LT5kZXbCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgPSAmcGRldi0+ZGV2Owo+ICvCoMKgwqDCoMKgwqDCoHJ0a19waHkt PnBoeS5kZXbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0gcnRrX3BoeS0+ZGV2Owo+ ICvCoMKgwqDCoMKgwqDCoHJ0a19waHktPnBoeS5sYWJlbMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqA9IFJUS19VU0IyUEhZX05BTUU7Cj4gK8KgwqDCoMKgwqDCoMKgcnRrX3BoeS0+cGh5Lmlu aXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IHJ0a191c2JfcGh5X2luaXQ7Cj4gK8Kg wqDCoMKgwqDCoMKgcnRrX3BoeS0+cGh5LnNodXRkb3duwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0g cnRrX3VzYl9waHlfc2h1dGRvd247Cj4gK8KgwqDCoMKgwqDCoMKgcnRrX3BoeS0+cGh5Lm5vdGlm eV9wb3J0X3N0YXR1cyA9Cj4gcnRrX3VzYl9waHlfbm90aWZ5X3BvcnRfc3RhdHVzOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqBpZiAoIWRldi0+b2Zfbm9kZSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkZXZfZXJyKGRldiwgIiVzICVkIE5vIGRldmljZSBub2RlXG4iLCBfX2Z1bmNf XywKPiBfX0xJTkVfXyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJy Owo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgcnRrX3BoeS0+dXNiX3Jl Z3MgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKGRldi0KPiA+b2Zfbm9kZSwgInJl YWx0ZWssdXNiIik7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihydGtfcGh5LT51c2JfcmVn cykpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2luZm8oZGV2LCAiJXM6 IERUUyBubyBzdXBwb3J0IHVzYiByZWdzIHN5c2NvblxuIiwKPiBfX2Z1bmNfXyk7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJ0a19waHktPnVzYl9yZWdzID0gTlVMTDsKPiArwqDC oMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJ0a19waHktPm1hY19yZWdzID0gc3lz Y29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShkZXYtCj4gPm9mX25vZGUsICJyZWFsdGVrLG1h YyIpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIocnRrX3BoeS0+bWFjX3JlZ3MpKSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9pbmZvKGRldiwgIiVzOiBEVFMgbm8g c3VwcG9ydCBtYWMgcmVncyBzeXNjb25cbiIsCj4gX19mdW5jX18pOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBydGtfcGh5LT5tYWNfcmVncyA9IE5VTEw7Cj4gK8KgwqDCoMKgwqDC oMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBydGtfcGh5LT51c2JfY3RybF9yZWdzID0gc3lzY29u X3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShkZXYtCj4gPm9mX25vZGUsICJyZWFsdGVrLHVzYl9j dHJsIik7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihydGtfcGh5LT51c2JfY3RybF9yZWdz KSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfaW5mbyhkZXYsICIlczog RFRTIG5vIHN1cHBvcnQgdXNiX2N0cmwgcmVncwo+IHN5c2NvblxuIiwgX19mdW5jX18pOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBydGtfcGh5LT51c2JfY3RybF9yZWdzID0gTlVM TDsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG9mX3Byb3Bl cnR5X3JlYWRfdTMyX2luZGV4KGRldi0+b2Zfbm9kZSwgInJlYWx0ZWsscG9ydC0KPiBpbmRleCIs IDAsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcG9ydF9pbmRleCk7 Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcG9ydF9pbmRleCA9IC0xOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSBvZl9wcm9wZXJ0 eV9yZWFkX3UzMl9pbmRleChkZXYtPm9mX25vZGUsCj4gInJlYWx0ZWsscGh5TiIsIDAsCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcGh5Tik7Cj4gK8KgwqDCoMKgwqDC oMKgaWYgKHJldCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGRl diwgIiVzIGdldCBwaHlOIGZhaWwgKHJldD0lZClcbiIsIF9fZnVuY19fLAo+IHJldCk7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyOwo+ICvCoMKgwqDCoMKgwqDCoH0K PiArCj4gK8KgwqDCoMKgwqDCoMKgZGV2X2RiZyhkZXYsICIlcyBwb3J0X2luZGV4PSVkIHBoeU49 JWRcbiIsIF9fZnVuY19fLAo+IHBvcnRfaW5kZXgsIHBoeU4pOwo+ICsKPiArwqDCoMKgwqDCoMKg wqBydGtfcGh5LT5wb3J0X2luZGV4ID0gcG9ydF9pbmRleDsKPiArwqDCoMKgwqDCoMKgwqBydGtf cGh5LT5waHlOID0gcGh5TjsKPiArwqDCoMKgwqDCoMKgwqBydGtfcGh5LT5yZWdfYWRkciA9IGRl dm1fa3phbGxvYyhkZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz aXplb2Yoc3RydWN0IHJlZ19hZGRyKSAqIHBoeU4sIEdGUF9LRVJORUwpOwo+ICvCoMKgwqDCoMKg wqDCoGlmICghcnRrX3BoeS0+cmVnX2FkZHIpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiAtRU5PTUVNOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBydGtfcGh5LT5waHlfZGF0 YSA9IGRldm1fa3phbGxvYyhkZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzaXplb2Yoc3RydWN0IHBoeV9kYXRhKSAqIHBoeU4sIEdGUF9LRVJORUwpOwo+ICvCoMKg wqDCoMKgwqDCoGlmICghcnRrX3BoeS0+cGh5X2RhdGEpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiAtRU5PTUVNOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBmb3IgKGluZGV4 ID0gMDsgaW5kZXggPCBwaHlOOyBpbmRleCsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldCA9IF9fZ2V0X3BoeV9wYXJhbWV0ZXIocnRrX3BoeSwgaW5kZXgpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGRldiwgIiVzOiBfX2dldF9waHlf cGFyYW1ldGVyIGZhaWwKPiByZXQ9JWRcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCByZXQp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBl cnI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqB9 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0a19waHkp Owo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSB1c2JfYWRkX3BoeV9kZXYoJnJ0a19waHktPnBo eSk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZ290byBlcnI7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGNyZWF0ZV9kZWJ1Z19maWxlcyhy dGtfcGh5KTsKPiArCj4gK2VycjoKPiArwqDCoMKgwqDCoMKgwqBkZXZfZGJnKGRldiwgIlByb2Jl IFJUSyBVU0IgMi4wIFBIWSAocmV0PSVkKVxuIiwgcmV0KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKg cmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBydGtfdXNiMnBoeV9yZW1vdmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBy dGtfdXNiX3BoeSAqcnRrX3BoeSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqByZW1vdmVfZGVidWdfZmlsZXMocnRrX3BoeSk7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoHVzYl9yZW1vdmVfcGh5KCZydGtfcGh5LT5waHkpOwo+ICsKPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gMDsKPiArfQo+ICsKPiArI2lmZGVmIENPTkZJR19PRgo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IG9mX2RldmljZV9pZCB1c2JwaHlfcnRrX2R0X21hdGNoW10gPSB7Cj4gK8KgwqDCoMKg wqDCoMKgeyAuY29tcGF0aWJsZSA9ICJyZWFsdGVrLHVzYjJwaHkiLCB9LAo+ICvCoMKgwqDCoMKg wqDCoHsgLmNvbXBhdGlibGUgPSAicmVhbHRlayxydGQtdXNiMnBoeSIsIH0sCj4gK8KgwqDCoMKg wqDCoMKgeyAuY29tcGF0aWJsZSA9ICJyZWFsdGVrLHJ0ZDEyOTUtdXNiMnBoeSIsIH0sCj4gK8Kg wqDCoMKgwqDCoMKgeyAuY29tcGF0aWJsZSA9ICJyZWFsdGVrLHJ0ZDEzOTUtdXNiMnBoeSIsIH0s Cj4gK8KgwqDCoMKgwqDCoMKgeyAuY29tcGF0aWJsZSA9ICJyZWFsdGVrLHJ0ZDE2MTktdXNiMnBo eSIsIH0sCj4gK8KgwqDCoMKgwqDCoMKgeyAuY29tcGF0aWJsZSA9ICJyZWFsdGVrLHJ0ZDEzMTkt dXNiMnBoeSIsIH0sCj4gK8KgwqDCoMKgwqDCoMKgeyAuY29tcGF0aWJsZSA9ICJyZWFsdGVrLHJ0 ZDE2MTliLXVzYjJwaHkiLCB9LAo+ICvCoMKgwqDCoMKgwqDCoHsgLmNvbXBhdGlibGUgPSAicmVh bHRlayxydGQxMzEyYy11c2IycGh5IiwgfSwKPiArwqDCoMKgwqDCoMKgwqB7IC5jb21wYXRpYmxl ID0gInJlYWx0ZWsscnRkMTMxOWQtdXNiMnBoeSIsIH0sCj4gK8KgwqDCoMKgwqDCoMKgeyAuY29t cGF0aWJsZSA9ICJyZWFsdGVrLHJ0ZDEzMTVlLXVzYjJwaHkiLCB9LAo+ICvCoMKgwqDCoMKgwqDC oHt9LAo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB1c2JwaHlfcnRrX2R0X21hdGNo KTsKPiArI2VuZGlmCj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBydGtfdXNi MnBoeV9kcml2ZXIgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgLnByb2JlwqDCoMKgwqDCoMKgwqDCoMKg wqA9IHJ0a191c2IycGh5X3Byb2JlLAo+ICvCoMKgwqDCoMKgwqDCoC5yZW1vdmXCoMKgwqDCoMKg wqDCoMKgwqA9IHJ0a191c2IycGh5X3JlbW92ZSwKPiArwqDCoMKgwqDCoMKgwqAuZHJpdmVywqDC oMKgwqDCoMKgwqDCoMKgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5uYW1l wqDCoMKgPSBSVEtfVVNCMlBIWV9OQU1FLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAub3duZXLCoMKgPSBUSElTX01PRFVMRSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKHVzYnBoeV9ydGtfZHRfbWF0Y2gpLAo+ ICvCoMKgwqDCoMKgwqDCoH0sCj4gK307Cj4gKwo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHJ0 a191c2IycGh5X2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gK01PRFVM RV9BTElBUygicGxhdGZvcm06IiBSVEtfVVNCMlBIWV9OQU1FKTsKPiArTU9EVUxFX0FVVEhPUigi UmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnBvcmF0aW9uIik7Cj4gK01PRFVMRV9ERVNDUklQVElP TigiUlRLIHVzYiAyLjAgcGh5IGRyaXZlciIpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9w aHkvcGh5LXJ0ay11c2IzLmMgYi9kcml2ZXJzL3VzYi9waHkvcGh5LQo+IHJ0ay11c2IzLmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZGQ2NjlmZDc1ZWU2Cj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvdXNiL3BoeS9waHktcnRrLXVzYjMuYwo+IEBA IC0wLDAgKzEsMTE2NSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ ICsvKgo+ICsgKsKgIHBoeS1ydGstdXNiMy5jIFJUSyB1c2IzLjAgcGh5IGRyaXZlcgo+ICsgKgo+ ICsgKiBjb3B5cmlnaHQgKGMpIDIwMjMgcmVhbHRlayBzZW1pY29uZHVjdG9yIGNvcnBvcmF0aW9u Cj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvb2YuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgo+ICsj aW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvbnZtZW0tY29uc3Vt ZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgo+ICsjaW5jbHVkZSA8bGludXgvc3lz X3NvYy5oPgo+ICsjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvdXNiLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC91c2IvaGNkLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC91c2IvcGh5Lmg+Cj4gKwo+ICsjaW5jbHVkZSAicGh5LXJ0ay11c2IuaCIKPiArCj4gKyNkZWZp bmUgUlRLX1VTQjNQSFlfTkFNRSAicnRrLXVzYjNwaHkiCj4gKwo+ICsjZGVmaW5lIFVTQl9NRElP X0NUUkxfUEhZX0JVU1kgQklUKDcpCj4gKyNkZWZpbmUgVVNCX01ESU9fQ1RSTF9QSFlfV1JJVEUg QklUKDApCj4gKyNkZWZpbmUgVVNCX01ESU9fQ1RSTF9QSFlfQUREUl9TSElGVCA4Cj4gKyNkZWZp bmUgVVNCX01ESU9fQ1RSTF9QSFlfREFUQV9TSElGVCAxNgo+ICsKPiArI2RlZmluZSBQSFlfQURE Ul8weDA5IDB4MDkKPiArI2RlZmluZSBQSFlfQUREUl8weDBCIDB4MEIKPiArI2RlZmluZSBQSFlf QUREUl8weDBEIDB4MEQKPiArI2RlZmluZSBQSFlfQUREUl8weDEwIDB4MTAKPiArI2RlZmluZSBQ SFlfQUREUl8weDFGIDB4MUYKPiArI2RlZmluZSBQSFlfQUREUl8weDIwIDB4MjAKPiArI2RlZmlu ZSBQSFlfQUREUl8weDMwIDB4MzAKPiArCj4gKyNkZWZpbmUgUkVHXzB4MEJfUlhfT0ZGU0VUX1JB TkdFX01BU0sgMHhDCj4gKyNkZWZpbmUgUkVHXzB4MERfUlhfREVCVUdfVEVTVF9FTiBCSVQoNikK PiArI2RlZmluZSBSRUdfMHgxMF9ERUJVR19NT0RFX1NFVFRJTkcgMHgzQzAKPiArI2RlZmluZSBS RUdfMHgxMF9ERUJVR19NT0RFX1NFVFRJTkdfTUFTSyAweDNGOAo+ICsjZGVmaW5lIFJFR18weDFG X1JYX09GRlNFVF9DT0RFX01BU0sgMHgxRQo+ICsKPiArI2RlZmluZSBVU0JfVTNfVFhfTEZQU19T V0lOR19UUklNX1NISUZUIDQKPiArI2RlZmluZSBVU0JfVTNfVFhfTEZQU19TV0lOR19UUklNX01B U0sgMHhGCj4gKwo+ICsjZGVmaW5lIFBIWV9BRERSX01BUF9BUlJBWV9JTkRFWChhZGRyKSAoYWRk cikKPiArI2RlZmluZSBBUlJBWV9JTkRFWF9NQVBfUEhZX0FERFIoaW5kZXgpIChpbmRleCkKPiAr Cj4gKyNkZWZpbmUgV1JBUF9DVFJfcmVnwqAgMHgwCj4gKyNkZWZpbmUgUElQRTNfUE9XRVJfRE9X Tl9TRUwgQklUKDEwKQo+ICsKPiArc3RydWN0IHJlZ19hZGRyIHsKPiArwqDCoMKgwqDCoMKgwqB2 b2lkIF9faW9tZW0gKnJlZ19tZGlvX2N0bDsKPiArfTsKPiArCj4gK3N0cnVjdCBwaHlfcGFyYW1l dGVyIHsKPiArwqDCoMKgwqDCoMKgwqB1OCBhZGRyOwo+ICvCoMKgwqDCoMKgwqDCoHUxNiBkYXRh Owo+ICt9Owo+ICsKPiArc3RydWN0IHBoeV9kYXRhIHsKPiArwqDCoMKgwqDCoMKgwqBpbnQgc2l6 ZTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X3BhcmFtZXRlciAqcGFyYW1ldGVyOwo+ICsK PiArwqDCoMKgwqDCoMKgwqBib29sIGNoZWNrX2VmdXNlOwo+ICvCoMKgwqDCoMKgwqDCoHU4IGVm dXNlX3VzYl91M190eF9sZnBzX3N3aW5nX3RyaW07Cj4gK8KgwqDCoMKgwqDCoMKgYm9vbCBkb190 b2dnbGU7Cj4gK8KgwqDCoMKgwqDCoMKgYm9vbCBkb190b2dnbGVfb25jZTsKPiArwqDCoMKgwqDC oMKgwqBib29sIHVzZV9kZWZhdWx0X3BhcmFtZXRlcjsKPiArwqDCoMKgwqDCoMKgwqBib29sIGNo ZWNrX3J4X2Zyb250X2VuZF9vZmZzZXQ7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHJ0a191c2Jf cGh5M193YWl0X3ZidXN5KHN0cnVjdCByZWdfYWRkciAqcmVnQWRkcikKPiArewo+ICvCoMKgwqDC oMKgwqDCoHJldHVybiB1dG1pX3dhaXRfcmVnaXN0ZXIocmVnQWRkci0+cmVnX21kaW9fY3RsLAo+ IFVTQl9NRElPX0NUUkxfUEhZX0JVU1ksIDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTE2IHJ0a191 c2JfcGh5X3JlYWQoc3RydWN0IHJlZ19hZGRyICpyZWdBZGRyLCBjaGFyIGFkZHIpCj4gK3sKPiAr wqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgcmVnVmFsOwo+ICvCoMKgwqDCoMKgwqDCoHUzMiB2 YWx1ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmVnVmFsID0gKGFkZHIgPDwgVVNCX01ESU9fQ1RS TF9QSFlfQUREUl9TSElGVCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHdyaXRlbChyZWdWYWwsIHJl Z0FkZHItPnJlZ19tZGlvX2N0bCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJ0a191c2JfcGh5M193 YWl0X3ZidXN5KHJlZ0FkZHIpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB2YWx1ZSA9IHJlYWRsKHJl Z0FkZHItPnJlZ19tZGlvX2N0bCk7Cj4gK8KgwqDCoMKgwqDCoMKgdmFsdWUgPSB2YWx1ZSA+PiBV U0JfTURJT19DVFJMX1BIWV9EQVRBX1NISUZUOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4g KHUxNil2YWx1ZTsKPiArfQo+ICsKPiArc3RhdGljIGludCBydGtfdXNiX3BoeV93cml0ZShzdHJ1 Y3QgcmVnX2FkZHIgKnJlZ0FkZHIsIGNoYXIgYWRkciwKPiB1MTYgZGF0YSkKPiArewo+ICvCoMKg wqDCoMKgwqDCoHVuc2lnbmVkIGludCByZWdWYWw7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJlZ1Zh bCA9IFVTQl9NRElPX0NUUkxfUEhZX1dSSVRFIHwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIChhZGRyIDw8IFVTQl9NRElPX0NUUkxfUEhZX0FERFJfU0hJRlQpIHwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChkYXRhIDw8IFVTQl9NRElPX0NU UkxfUEhZX0RBVEFfU0hJRlQpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB3cml0ZWwocmVnVmFsLCBy ZWdBZGRyLT5yZWdfbWRpb19jdGwpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBydGtfdXNiX3BoeTNf d2FpdF92YnVzeShyZWdBZGRyKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGRvX3J0a191c2IzX3BoeV90b2dnbGUoc3RydWN0IHJ0a191c2Jf cGh5ICpydGtfcGh5LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgaW5kZXgsIGJvb2wgaXND b25uZWN0KTsKPiArCj4gK3N0YXRpYyBpbnQgZG9fcnRrX3VzYl9waHlfaW5pdChzdHJ1Y3QgcnRr X3VzYl9waHkgKnJ0a19waHksIGludAo+IHBoeV9pbmRleCkKPiArewo+ICvCoMKgwqDCoMKgwqDC oHN0cnVjdCByZWdfYWRkciAqcmVnQWRkciA9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmKChzdHJ1Y3QgcmVnX2FkZHIgKilydGtfcGh5LQo+ID5yZWdfYWRkcilbcGh5 X2luZGV4XTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X2RhdGEgKnBoeV9kYXRhID0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYoKHN0cnVjdCBwaHlfZGF0YSAq KXJ0a19waHktCj4gPnBoeV9kYXRhKVtwaHlfaW5kZXhdOwo+ICvCoMKgwqDCoMKgwqDCoGludCBp bmRleCA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHBoeV9wYXJhbWV0ZXIgKnBoeV9wYXJh bWV0ZXIgPSBwaHlfZGF0YS0+cGFyYW1ldGVyOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBkZXZfZGJn KHJ0a19waHktPmRldiwgIiVzOiBpbml0IHBoeSMlZFxuIiwgX19mdW5jX18sCj4gcGh5X2luZGV4 KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHBoeV9kYXRhLT51c2VfZGVmYXVsdF9wYXJhbWV0 ZXIpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2luZm8ocnRrX3BoeS0+ ZGV2LCAiJXMgcGh5IyVkIHVzZSBkZWZhdWx0Cj4gcGFyYW1ldGVyXG4iLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBwaHlf aW5kZXgpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGRvX3RvZ2dsZTsK PiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGZvciAoaW5kZXggPSAwOyBp bmRleCA8IHBoeV9kYXRhLT5zaXplOyBpbmRleCsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHU4IGFkZHIgPSAocGh5X3BhcmFtZXRlciArIGluZGV4KS0+YWRkcjsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTE2IGRhdGEgPSAocGh5X3BhcmFtZXRlciArIGlu ZGV4KS0+ZGF0YTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChhZGRy ID09IDB4RkYpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBjb250aW51ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChhZGRy ID09IFBIWV9BRERSXzB4MjApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHU4IGVmdXNlX3ZhbCA9IHBoeV9kYXRhLQo+ID5lZnVzZV91c2JfdTNfdHhf bGZwc19zd2luZ190cmltOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgdTE2IHZhbF9tYXNrID0KPiBVU0JfVTNfVFhfTEZQU19TV0lOR19UUklNX01BU0s7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgdmFs X3NoaWZ0ID0KPiBVU0JfVTNfVFhfTEZQU19TV0lOR19UUklNX1NISUZUOwo+ICsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChlZnVzZV92YWwpIHsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkYXRhICY9IH4odmFsX21hc2sgPDwgdmFsX3NoaWZ0KTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkYXRhIHw9 ICgoZWZ1c2VfdmFsICYgdmFsX21hc2spIDw8Cj4gdmFsX3NoaWZ0KTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcnRrX3Vz Yl9waHlfd3JpdGUocmVnQWRkciwgYWRkciwgZGF0YSk7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsK PiArwqDCoMKgwqDCoMKgwqBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwaHlfZGF0YS0+c2l6ZTsg aW5kZXgrKykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1OCBhZGRyID0gKHBo eV9wYXJhbWV0ZXIgKyBpbmRleCktPmFkZHI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHUxNiBkYXRhID0gKHBoeV9wYXJhbWV0ZXIgKyBpbmRleCktPmRhdGE7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoYWRkciA9PSAweEZGKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZGJnKHJ0a19waHktPmRldiwgIltVU0IzX1BI WV0sIGFkZHIgPSAweCUwMngsCj4gZGF0YSA9IDB4JTA0eCA9PT4gcmVhZCB2YWx1ZSA9IDB4JTA0 eFxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBhZGRyLCBkYXRhLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJ0a191c2JfcGh5X3JlYWQocmVnQWRkciwgYWRkcikpOwo+ICvCoMKg wqDCoMKgwqDCoH0KPiArCj4gK2RvX3RvZ2dsZToKPiArwqDCoMKgwqDCoMKgwqBpZiAocGh5X2Rh dGEtPmRvX3RvZ2dsZV9vbmNlKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlf ZGF0YS0+ZG9fdG9nZ2xlID0gdHJ1ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZG9fcnRrX3VzYjNf cGh5X3RvZ2dsZShydGtfcGh5LCBwaHlfaW5kZXgsIGZhbHNlKTsKPiArCj4gK8KgwqDCoMKgwqDC oMKgaWYgKHBoeV9kYXRhLT5kb190b2dnbGVfb25jZSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB1MTYgY2hlY2tfdmFsdWUgPSAwOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpbnQgY291bnQgPSAxMDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg dTE2IHZhbHVlXzB4MEQsIHZhbHVlXzB4MTA7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAvKiBFbmFibGUgRGVidWcgbW9kZSBieSBzZXQgMHgwRCBhbmQgMHgxMCAqLwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWx1ZV8weDBEID0gcnRrX3VzYl9waHlfcmVh ZChyZWdBZGRyLAo+IFBIWV9BRERSXzB4MEQpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB2YWx1ZV8weDEwID0gcnRrX3VzYl9waHlfcmVhZChyZWdBZGRyLAo+IFBIWV9BRERSXzB4 MTApOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcnRrX3VzYl9waHlfd3Jp dGUocmVnQWRkciwgUEhZX0FERFJfMHgwRCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YWx1ZV8weDBEIHwgUkVHXzB4MERfUlhfREVCVUdf VEVTVF9FTik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJ0a191c2JfcGh5X3dy aXRlKHJlZ0FkZHIsIFBIWV9BRERSXzB4MTAsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHZhbHVlXzB4MTAgJgo+IH5SRUdfMHgxMF9ERUJV R19NT0RFX1NFVFRJTkdfTUFTSykgfAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJFR18weDEwX0RFQlVHX01PREVfU0VUVElORyk7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGVja192YWx1ZSA9IHJ0a191c2JfcGh5 X3JlYWQocmVnQWRkciwKPiBQSFlfQUREUl8weDMwKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHdoaWxlICghKGNoZWNrX3ZhbHVlICYgQklUKDE1KSkpIHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoZWNrX3ZhbHVlID0gcnRr X3VzYl9waHlfcmVhZChyZWdBZGRyLAo+IFBIWV9BRERSXzB4MzApOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWRlbGF5KDEpOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNvdW50LS0gPCAwKQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIShjaGVja192YWx1ZSAmIEJJVCgxNSkpKQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2luZm8o cnRrX3BoeS0+ZGV2LCAidG9nZ2xlIGZhaWwKPiBhZGRyPTB4JTAyeCwgZGF0YT0weCUwNHhcbiIs Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIFBIWV9BRERSXzB4MzAsIGNoZWNrX3ZhbHVlKTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZGV2X2luZm8ocnRrX3BoeS0+ZGV2LCAidG9nZ2xlIG9rYXkKPiBh ZGRyPTB4JTAyeCwgZGF0YT0weCUwNHhcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFBIWV9BRERSXzB4MzAs IGNoZWNrX3ZhbHVlKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIERp c2FibGUgRGVidWcgbW9kZSBieSBzZXQgMHgwRCBhbmQgMHgxMCB0bwo+IGRlZmF1bHQqLwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBydGtfdXNiX3BoeV93cml0ZShyZWdBZGRyLCBQ SFlfQUREUl8weDBELAo+IHZhbHVlXzB4MEQpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBydGtfdXNiX3BoeV93cml0ZShyZWdBZGRyLCBQSFlfQUREUl8weDEwLAo+IHZhbHVlXzB4 MTApOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEtPmRvX3Rv Z2dsZSA9IGZhbHNlOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gKwo+ICvCoMKgwqDCoMKgwqDC oGlmIChwaHlfZGF0YS0+Y2hlY2tfcnhfZnJvbnRfZW5kX29mZnNldCkgewo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB1MTYgcnhfb2Zmc2V0X2NvZGUsIHJ4X29mZnNldF9yYW5nZTsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYm9vbCBkb191cGRhdGUgPSBmYWxzZTsK PiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJ4X29mZnNldF9jb2RlID0gcnRr X3VzYl9waHlfcmVhZChyZWdBZGRyLAo+IFBIWV9BRERSXzB4MUYpOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoKChyeF9vZmZzZXRfY29kZSAmIFJFR18weDFGX1JYX09GRlNF VF9DT0RFX01BU0spCj4gPT0gMHgwKSB8fAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICgocnhfb2Zmc2V0X2NvZGUgJgo+IFJFR18weDFGX1JY X09GRlNFVF9DT0RFX01BU0spID09Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJFR18weDFGX1JYX09GRlNFVF9DT0RFX01BU0spKQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZG9fdXBkYXRl ID0gdHJ1ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJ4X29mZnNldF9y YW5nZSA9IHJ0a191c2JfcGh5X3JlYWQocmVnQWRkciwKPiBQSFlfQUREUl8weDBCKTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCgocnhfb2Zmc2V0X3JhbmdlICYKPiBSRUdf MHgwQl9SWF9PRkZTRVRfUkFOR0VfTUFTSykgPT0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUkVHXzB4MEJfUlhf T0ZGU0VUX1JBTkdFX01BU0spICYmCj4gZG9fdXBkYXRlKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfd2FybihydGtfcGh5LT5kZXYsICJEb24n dCB1cGRhdGUKPiByeF9vZmZzZXRfcmFuZ2UgKHJ4X29mZnNldF9jb2RlPTB4JXgsIHJ4X29mZnNl dF9yYW5nZT0weCV4KVxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcnhfb2Zmc2V0X2NvZGUsIHJ4X29mZnNl dF9yYW5nZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBkb191cGRhdGUgPSBmYWxzZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGRvX3VwZGF0ZSkgewo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTE2IHRtcDEsIHRt cDI7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg dG1wMSA9IHJ4X29mZnNldF9yYW5nZSAmCj4gKH5SRUdfMHgwQl9SWF9PRkZTRVRfUkFOR0VfTUFT Syk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0bXAy ID0gcnhfb2Zmc2V0X3JhbmdlICYKPiBSRUdfMHgwQl9SWF9PRkZTRVRfUkFOR0VfTUFTSzsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRtcDIgKz0gKDEg PDwgMik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy eF9vZmZzZXRfcmFuZ2UgPSB0bXAxIHwgKHRtcDIgJgo+IFJFR18weDBCX1JYX09GRlNFVF9SQU5H RV9NQVNLKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJ0a191c2JfcGh5X3dyaXRlKHJlZ0FkZHIsIFBIWV9BRERSXzB4MEIsCj4gcnhfb2Zmc2V0X3Jh bmdlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdv dG8gZG9fdG9nZ2xlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDC oMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGludCBydGtfdXNiX3BoeV9pbml0KHN0cnVjdCB1c2JfcGh5ICpwaHkpCj4gK3sKPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgcnRrX3VzYl9waHkgKnJ0a19waHkgPSBjb250YWluZXJfb2YocGh5 LCBzdHJ1Y3QKPiBydGtfdXNiX3BoeSwgcGh5KTsKPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0ID0g MDsKPiArwqDCoMKgwqDCoMKgwqBpbnQgaTsKPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBsb25n IHBoeV9pbml0X3RpbWUgPSBqaWZmaWVzOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXJ0a19w aHkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJfZXJyKCIlcyBydGtfcGh5 IGlzIE5VTEwhXG4iLCBfX2Z1bmNfXyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiAtRU5PREVWOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKg ZGV2X2RiZyhwaHktPmRldiwgIkluaXQgUlRLIFVTQiAzLjAgUEhZXG4iKTsKPiArwqDCoMKgwqDC oMKgwqBmb3IgKGkgPSAwOyBpIDwgcnRrX3BoeS0+cGh5TjsgaSsrKQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXQgPSBkb19ydGtfdXNiX3BoeV9pbml0KHJ0a19waHksIGkpOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqBkZXZfaW5mbyhwaHktPmRldiwgIkluaXRpYWxpemVkIFJUSyBV U0IgMy4wIFBIWSAodGFrZQo+ICVkbXMpXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gcGh5X2luaXRfdGltZSkpOwo+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHJ0a191 c2JfcGh5aHV0ZG93bihzdHJ1Y3QgdXNiX3BoeSAqcGh5KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKg ZGV2X2RiZyhwaHktPmRldiwgIlNodXRkb3duIFJUSyBVU0IgMy4wIFBIWVxuIik7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIGRvX3J0a191c2IzX3BoeV90b2dnbGUoc3RydWN0IHJ0a191c2JfcGh5 ICpydGtfcGh5LCBpbnQKPiBpLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBib29sIGlzQ29ubmVj dCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByZWdfYWRkciAqcmVnQWRkciA9ICYoKHN0 cnVjdCByZWdfYWRkciAqKXJ0a19waHktCj4gPnJlZ19hZGRyKVtpXTsKPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgcGh5X2RhdGEgKnBoeV9kYXRhID0gJigoc3RydWN0IHBoeV9kYXRhICopcnRrX3Bo eS0KPiA+cGh5X2RhdGEpW2ldOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBwaHlfcGFyYW1ldGVy ICpwaHlfcGFyYW1ldGVyOwo+ICvCoMKgwqDCoMKgwqDCoHNpemVfdCBpbmRleDsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgaWYgKCFydGtfcGh5KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHByX2VycigiJXMgcnRrX3BoeSBpcyBOVUxMIVxuIiwgX19mdW5jX18pOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiAr wqDCoMKgwqDCoMKgwqByZWdBZGRyID0gJigoc3RydWN0IHJlZ19hZGRyICopcnRrX3BoeS0+cmVn X2FkZHIpW2ldOwo+ICvCoMKgwqDCoMKgwqDCoHBoeV9kYXRhID0gJigoc3RydWN0IHBoeV9kYXRh ICopcnRrX3BoeS0+cGh5X2RhdGEpW2ldOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXBoeV9k YXRhKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIocnRrX3BoeS0+ ZGV2LCAiJXMgcGh5X2RhdGEgaXMgTlVMTCFcbiIsCj4gX19mdW5jX18pOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDC oMKgwqDCoMKgwqBpZiAoIXBoeV9kYXRhLT5kb190b2dnbGUpCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogRGlzYWJsZSB1c2Iz IHBoeSBzdXNwZW5kIGZvcm0gdXNiIHdyYXBwZXIgKi8KPiArwqDCoMKgwqDCoMKgwqBpZiAocnRr X3BoeS0+dXNiX3JlZ3MpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlZ21hcF91 cGRhdGVfYml0cyhydGtfcGh5LT51c2JfcmVncywgV1JBUF9DVFJfcmVnLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh1bnNpZ25lZCBpbnQp UElQRTNfUE9XRVJfRE9XTl9TRUwsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKHVuc2lnbmVkIGludClQSVBFM19QT1dFUl9ET1dOX1NFTCk7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHBoeV9wYXJhbWV0ZXIgPSBwaHlfZGF0YS0+cGFyYW1ldGVy Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBpbmRleCA9IFBIWV9BRERSX01BUF9BUlJBWV9JTkRFWChQ SFlfQUREUl8weDA5KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGluZGV4IDwgcGh5X2RhdGEt PnNpemUpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTggYWRkciA9IChwaHlf cGFyYW1ldGVyICsgaW5kZXgpLT5hZGRyOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB1MTYgZGF0YSA9IChwaHlfcGFyYW1ldGVyICsgaW5kZXgpLT5kYXRhOwo+ICsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGFkZHIgPT0gMHhGRikgewo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYWRkciA9IEFSUkFZX0lOREVYX01B UF9QSFlfQUREUihpbmRleCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkYXRhID0gcnRrX3VzYl9waHlfcmVhZChyZWdBZGRyLCBhZGRyKTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoChwaHlfcGFyYW1ldGVy ICsgaW5kZXgpLT5hZGRyID0gYWRkcjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoChwaHlfcGFyYW1ldGVyICsgaW5kZXgpLT5kYXRhID0gZGF0YTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBtZGVsYXkoMSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9p bmZvKHJ0a19waHktPmRldiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAiJXMgIyMjIyMjIyMjIyB0byB0b2dnbGUgUEhZIGFkZHIgMHgwOQo+ IEJJVCg5KVxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBfX2Z1bmNfXyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJ0 a191c2JfcGh5X3dyaXRlKHJlZ0FkZHIsIGFkZHIsIGRhdGEmKH5CSVQoOSkpKTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWRlbGF5KDEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBydGtfdXNiX3BoeV93cml0ZShyZWdBZGRyLCBhZGRyLCBkYXRhKTsKPiArwqDC oMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgZGV2X2luZm8ocnRrX3BoeS0+ZGV2LCAiJXMg IyMjIyMjIyMjIyBQSFkgYWRkciAweDFmID0KPiAweCUwNHhcbiIsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgcnRrX3VzYl9waHlfcmVhZChyZWdBZGRy LAo+IFBIWV9BRERSXzB4MUYpKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogRW5hYmxlIHVzYjMg cGh5IHN1c3BlbmQgZm9ybSB1c2Igd3JhcHBlciwgcG93ZXIgY29udHJvbCBieQo+IG1hYyAqLwo+ ICvCoMKgwqDCoMKgwqDCoGlmIChydGtfcGh5LT51c2JfcmVncykKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0a19waHktPnVzYl9yZWdzLCBXUkFQ X0NUUl9yZWcsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKHVuc2lnbmVkIGludClQSVBFM19QT1dFUl9ET1dOX1NFTCwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAodW5zaWduZWQgaW50 KSh+UElQRTNfUE9XRVJfRE9XTl9TRUwpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcnRrX3Vz YjNfcGh5X3RvZ2dsZShzdHJ1Y3QgdXNiX3BoeSAqdXNiM19waHksIGJvb2wKPiBpc0Nvbm5lY3Qs IGludCBwb3J0KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IGluZGV4ID0gcG9ydDsKPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgcnRrX3VzYl9waHkgKnJ0a19waHkgPSBOVUxMOwo+ICsKPiArwqDC oMKgwqDCoMKgwqBpZiAodXNiM19waHkgIT0gTlVMTCAmJiB1c2IzX3BoeS0+ZGV2ICE9IE5VTEwp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJ0a19waHkgPSBkZXZfZ2V0X2RydmRh dGEodXNiM19waHktPmRldik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChydGtfcGh5ID09IE5V TEwpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJfZXJyKCIlcyBFUlJPUiEg Tk8gdGhpcyBkZXZpY2VcbiIsIF9fZnVuY19fKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYg KGluZGV4ID4gcnRrX3BoeS0+cGh5Tikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBwcl9lcnIoIiVzICVkIEVSUk9SISBwb3J0PSVkID4gcGh5Tj0lZFxuIiwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgX19M SU5FX18sIGluZGV4LCBydGtfcGh5LQo+ID5waHlOKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKg ZG9fcnRrX3VzYjNfcGh5X3RvZ2dsZShydGtfcGh5LCBpbmRleCwgaXNDb25uZWN0KTsKPiArfQo+ ICsKPiArc3RhdGljIGludCBydGtfdXNiX3BoeV9ub3RpZnlfcG9ydF9zdGF0dXMoc3RydWN0IHVz Yl9waHkgKngsIGludAo+IHBvcnQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHUxNiBwb3J0c3Rh dHVzLCB1MTYgcG9ydGNoYW5nZSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoGJvb2wgaXNDb25uZWN0 ID0gZmFsc2U7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHByX2RlYnVnKCIlcyBwb3J0PSVkIHBvcnRz dGF0dXM9MHgleCBwb3J0Y2hhbmdlPTB4JXhcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgcG9ydCwgKGludClwb3J0c3RhdHVzLAo+IChpbnQpcG9y dGNoYW5nZSk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFU X0NPTk5FQ1RJT04pCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlzQ29ubmVjdCA9 IHRydWU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RB VF9DX0NPTk5FQ1RJT04pCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJ0a191c2Iz X3BoeV90b2dnbGUoeCwgaXNDb25uZWN0LCBwb3J0KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0 dXJuIDA7Cj4gK30KPiArCj4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKPiArc3RhdGljIHN0cnVj dCBkZW50cnkgKmNyZWF0ZV9waHlfZGVidWdfcm9vdCh2b2lkKQo+ICt7Cj4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IGRlbnRyeSAqcGh5X2RlYnVnX3Jvb3Q7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHBo eV9kZWJ1Z19yb290ID0gZGVidWdmc19sb29rdXAoInBoeSIsIHVzYl9kZWJ1Z19yb290KTsKPiAr wqDCoMKgwqDCoMKgwqBpZiAoIXBoeV9kZWJ1Z19yb290KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHBoeV9kZWJ1Z19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJwaHkiLAo+ IHVzYl9kZWJ1Z19yb290KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFw aHlfZGVidWdfcm9vdCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHByX2VycigiJXMgRXJyb3IgcGh5X2RlYnVnX3Jvb3QgaXMgTlVMTFxuIiwKPiBfX2Z1 bmNfXyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVsc2UKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByX2RlYnVnKCIlcyBDcmVhdGUg cGh5X2RlYnVnX3Jvb3QgZm9sZGVyXG4iLAo+IF9fZnVuY19fKTsKPiArwqDCoMKgwqDCoMKgwqB9 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBwaHlfZGVidWdfcm9vdDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBydGtfdXNiM19wYXJhbWV0ZXJfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZv aWQgKnVudXNlZCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBydGtfdXNiX3BoecKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqcnRrX3BoeSA9IHMtPnByaXZhdGU7Cj4gK8KgwqDCoMKg wqDCoMKgaW50IGksIGluZGV4Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwg cnRrX3BoeS0+cGh5TjsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0 cnVjdCByZWdfYWRkciAqcmVnQWRkciA9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJigoc3RydWN0IHJlZ19hZGRyICopcnRrX3BoeS0KPiA+ cmVnX2FkZHIpW2ldOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5 X2RhdGEgKnBoeV9kYXRhID0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAmKChzdHJ1Y3QgcGh5X2RhdGEgKilydGtfcGh5LQo+ID5waHlfZGF0 YSlbaV07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBwaHlfcGFyYW1l dGVyICpwaHlfcGFyYW1ldGVyOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cGh5X3BhcmFtZXRlciA9IHBoeV9kYXRhLT5wYXJhbWV0ZXI7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRmKHMsICJbVVNCM19QSFldIFBIWSAlZFxuIiwgaSk7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmb3IgKGluZGV4ID0gMDsgaW5k ZXggPCBwaHlfZGF0YS0+c2l6ZTsgaW5kZXgrKykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTggYWRkciA9IEFSUkFZX0lOREVYX01BUF9QSFlfQURE UihpbmRleCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB1MTYgZGF0YSA9IChwaHlfcGFyYW1ldGVyICsgaW5kZXgpLT5kYXRhOwo+ICsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICgocGh5X3BhcmFtZXRl ciArIGluZGV4KS0+YWRkciA9PSAweEZGKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNlcV9wcmludGYocywgIltVU0IzX1BI WV0sIGFkZHIgPQo+IDB4JTAyeCwgZGF0YSA9IG5vbmXCoMKgID09PiByZWFkIHZhbHVlID0gMHgl MDR4XG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWRkciwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJ0a191c2JfcGh5X3JlYWQocmVnQWRkciwKPiBhZGRyKSk7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNlCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgc2VxX3ByaW50ZihzLCAiW1VTQjNfUEhZXSwgYWRkciA9Cj4gMHglMDJ4LCBkYXRhID0gMHgl MDR4ID09PiByZWFkIHZhbHVlID0gMHglMDR4XG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYWRkciwgZGF0YSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJ0a191c2Jf cGh5X3JlYWQocmVnQWRkciwKPiBhZGRyKSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNlcV9wdXRzKHMsICJQ cm9wZXJ0eTpcbiIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRm KHMsICJjaGVja19lZnVzZTogJXNcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGh5X2RhdGEtCj4gPmNoZWNrX2VmdXNlPyJFbmFibGUi OiJEaXNhYmxlIik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNlcV9wcmludGYo cywgImVmdXNlX3VzYl91M190eF9sZnBzX3N3aW5nX3RyaW06Cj4gMHgleFxuIiwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoaW50KXBoeV9k YXRhLQo+ID5lZnVzZV91c2JfdTNfdHhfbGZwc19zd2luZ190cmltKTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihzLCAiZG9fdG9nZ2xlOiAlc1xuIiwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlfZGF0 YS0+ZG9fdG9nZ2xlPyJFbmFibGUiOiJEaXNhYmxlIik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHNlcV9wcmludGYocywgImRvX3RvZ2dsZV9vbmNlOiAlc1xuIiwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlfZGF0YS0K PiA+ZG9fdG9nZ2xlX29uY2U/IkVuYWJsZSI6IkRpc2FibGUiKTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihzLCAidXNlX2RlZmF1bHRfcGFyYW1ldGVyOiAlc1xu IiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBwaHlfZGF0YS0KPiA+dXNlX2RlZmF1bHRfcGFyYW1ldGVyPyJFbmFibGUiOiJEaXNhYmxlIik7 Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHJ0a191c2IzX3BhcmFtZXRlcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUs IHN0cnVjdCBmaWxlCj4gKmZpbGUpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gc2luZ2xl X29wZW4oZmlsZSwgcnRrX3VzYjNfcGFyYW1ldGVyX3Nob3csIGlub2RlLQo+ID5pX3ByaXZhdGUp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBydGtfdXNi M19wYXJhbWV0ZXJfZm9wcyA9IHsKPiArwqDCoMKgwqDCoMKgwqAub3BlbsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBydGtfdXNiM19wYXJhbWV0ZXJfb3BlbiwKPiArwqDC oMKgwqDCoMKgwqAucmVhZMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBz ZXFfcmVhZCwKPiArwqDCoMKgwqDCoMKgwqAubGxzZWVrwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoD0gc2VxX2xzZWVrLAo+ICvCoMKgwqDCoMKgwqDCoC5yZWxlYXNlwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IHNpbmdsZV9yZWxlYXNlLAo+ICt9Owo+ICsKPiArc3Rh dGljIGludCBfX2dldF9wYXJhbWV0ZXJfYXRfcGFnZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBydGtfdXNiX3BoeSAqcnRrX3BoeSwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RydWN0IHBoeV9wYXJhbWV0ZXIgKnBoeV9wYXJhbWV0ZXJfYXJyYXks Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IGNoYXIgKnBoeV9hZGRyKQo+ICt7Cj4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IHBoeV9wYXJhbWV0ZXIgKnBoeV9wYXJhbWV0ZXI7Cj4gK8KgwqDC oMKgwqDCoMKgdWludDMyX3QgYWRkcjsKPiArwqDCoMKgwqDCoMKgwqBpbnQgaSwgcmV0Owo+ICsK PiArwqDCoMKgwqDCoMKgwqByZXQgPSBrc3RydG91aW50KHBoeV9hZGRyLCAxNiwgJmFkZHIpOwo+ ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHByX2VycigiJXM6OmtzdHJ0b3VpbnQoKSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gK8KgwqDCoMKg wqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBpID0gUEhZX0FERFJfTUFQX0FSUkFZX0lOREVY KGFkZHIpOwo+ICvCoMKgwqDCoMKgwqDCoHBoeV9wYXJhbWV0ZXIgPSAocGh5X3BhcmFtZXRlcl9h cnJheSArIGkpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAocGh5X3BhcmFtZXRlci0+YWRkciAh PSAweEZGKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRmKHMsICJO b3cgUGFyYW1ldGVyIGFkZHIgMHglMDJ4ID0gMHglMDR4XG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBoeV9wYXJhbWV0ZXItPmFkZHIs IHBoeV9wYXJhbWV0ZXItCj4gPmRhdGEpOwo+ICvCoMKgwqDCoMKgwqDCoGVsc2UKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihzLCAiTm93IFBhcmFtZXRlciBhZGRy IDB4JTAyeCBpcwo+IGRlZmF1bHRcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWRkcik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRldl9k YmcocnRrX3BoeS0+ZGV2LCAiJXMgYWRkcj0weCUwMnggZGF0YT0weCUwNHhcbiIsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgcGh5X3BhcmFtZXRlci0+ YWRkciwgcGh5X3BhcmFtZXRlci0KPiA+ZGF0YSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9fc2V0X3BhcmFtZXRlcl9hdF9wYWdlKAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcnRrX3VzYl9waHkgKnJ0a19waHksCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgIHN0cnVjdCByZWdfYWRkciAqcmVnQWRkciwgc3RydWN0IHBoeV9kYXRh ICpwaHlfZGF0YSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHBoeV9wYXJhbWV0ZXIg KnBoeV9wYXJhbWV0ZXJfYXJyYXksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IGNoYXIg KnBoeV9hZGRyLCBjb25zdCBjaGFyICpwaHlfdmFsdWUpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgcGh5X3BhcmFtZXRlciAqcGh5X3BhcmFtZXRlcjsKPiArwqDCoMKgwqDCoMKgwqB1aW50 MzJfdCBhZGRyLCB2YWx1ZTsKPiArwqDCoMKgwqDCoMKgwqBpbnQgaSwgcmV0Owo+ICsKPiArwqDC oMKgwqDCoMKgwqByZXQgPSBrc3RydG91aW50KHBoeV9hZGRyLCAxNiwgJmFkZHIpOwo+ICvCoMKg wqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHByX2VycigiJXM6OmtzdHJ0b3VpbnQoKSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gK8KgwqDCoMKgwqDCoMKg fQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGtzdHJ0b3VpbnQocGh5X3ZhbHVlLCAxNiwgJnZhbHVl KTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBwcl9lcnIoIiVzOjprc3RydG91aW50KCkgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ICvCoMKg wqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgaSA9IFBIWV9BRERSX01BUF9BUlJBWV9J TkRFWChhZGRyKTsKPiArwqDCoMKgwqDCoMKgwqBwaHlfcGFyYW1ldGVyID0gKHBoeV9wYXJhbWV0 ZXJfYXJyYXkgKyBpKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHBoeV9wYXJhbWV0ZXItPmFk ZHIgIT0gMHhGRikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfcGFyYW1l dGVyLT5kYXRhID0gdmFsdWU7Cj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X3BhcmFtZXRlci0+YWRkciA9IGFkZHI7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9wYXJhbWV0ZXItPmRhdGEgPSB2YWx1ZTsKPiAr wqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRldl9pbmZvKHJ0a19waHktPmRl diwgIiVzIGFkZHI9MHglMDJ4IGRhdGE9MHglMDR4XG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18sIHBoeV9wYXJhbWV0ZXItPmFkZHIsIHBoeV9wYXJh bWV0ZXItCj4gPmRhdGEpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoYWRkciA9PSBQSFlfQURE Ul8weDIwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfaW5mbyhydGtfcGh5 LT5kZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgIiVzIFBIWV9BRERSXzB4MjAgTk9UIHVzZSBlZnVzZQo+IHUzX3R4X2xmcHNfc3dpbmdf dHJpbSB2YWx1ZVxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBfX2Z1bmNfXyk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChydGtfdXNi X3BoeV93cml0ZShyZWdBZGRyLCBhZGRyLCB2YWx1ZSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRldl9lcnIocnRrX3BoeS0+ZGV2LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiWyVzOiVkXSBF cnJvcjogYWRkcj0weCUwMngKPiB2YWx1ZT0weCUwNHhcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVu Y19fLCBfX0xJTkVfXywgYWRkciwgdmFsdWUpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCBydGtfdXNiM19zZXRfcGFyYW1ldGVyX3Nob3coc3Ry dWN0IHNlcV9maWxlICpzLCB2b2lkCj4gKnVudXNlZCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBydGtfdXNiX3BoeSAqcnRrX3BoeSA9IHMtPnByaXZhdGU7Cj4gK8KgwqDCoMKgwqDCoMKg Y29uc3Qgc3RydWN0IGZpbGUgKmZpbGUgPSBzLT5maWxlOwo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0 IGNoYXIgKmZpbGVfbmFtZSA9IGZpbGVfZGVudHJ5KGZpbGUpLT5kX2luYW1lOwo+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBkZW50cnkgKnBfZGVudHJ5ID0gZmlsZV9kZW50cnkoZmlsZSktPmRfcGFy ZW50Owo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKnBoeV9kaXJfbmFtZSA9IHBfZGVudHJ5 LT5kX2luYW1lOwo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQsIGluZGV4Owo+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBwaHlfZGF0YSAqcGh5X2RhdGE7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGZvciAo aW5kZXggPSAwOyBpbmRleCA8IHJ0a19waHktPnBoeU47IGluZGV4KyspIHsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgc2l6ZV90IHN6ID0gMzA7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGNoYXIgbmFtZVszMF0gPSB7MH07Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzbnByaW50ZihuYW1lLCBzeiwgInBoeSVkIiwgaW5kZXgpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoc3RybmNtcChuYW1lLCBwaHlfZGlyX25hbWUs IHN0cmxlbihuYW1lKSkgPT0gMCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEgPSAmKChzdHJ1Y3QgcGh5X2RhdGEgKilydGtfcGh5LQo+ ID5waHlfZGF0YSlbaW5kZXhdOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiAr wqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFwaHlfZGF0YSkgewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKHJ0a19waHktPmRldiwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgIiVzOiBObyBwaHlfZGF0YSBmb3IgJXMvJXNcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVu Y19fLCBwaHlfZGlyX25hbWUsCj4gZmlsZV9uYW1lKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKg wqDCoMKgwqByZXQgPSBfX2dldF9wYXJhbWV0ZXJfYXRfcGFnZShzLCBydGtfcGh5LCBwaHlfZGF0 YS0KPiA+cGFyYW1ldGVyLCBmaWxlX25hbWUpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAw KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICsKPiArwqDC oMKgwqDCoMKgwqBzZXFfcHV0cyhzLCAiU2V0IHBoeSBwYXJhbWV0ZXIgYnkgZm9sbG93aW5nIGNv bW1hbmRcbiIpOwo+ICvCoMKgwqDCoMKgwqDCoHNlcV9wcmludGYocywgImVjaG8gXCJ2YWx1ZVwi ID4gJXMvJXNcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlf ZGlyX25hbWUsIGZpbGVfbmFtZSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IHJ0a191c2IzX3NldF9wYXJhbWV0ZXJfb3BlbihzdHJ1Y3QgaW5v ZGUgKmlub2RlLCBzdHJ1Y3QKPiBmaWxlICpmaWxlKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgcmV0 dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJ0a191c2IzX3NldF9wYXJhbWV0ZXJfc2hvdywgaW5vZGUt Cj4gPmlfcHJpdmF0ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IHJ0a191c2IzX3NldF9w YXJhbWV0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGNvbnN0IGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAq cHBvcykKPiArewo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKmZpbGVfbmFtZSA9IGZpbGVf ZGVudHJ5KGZpbGUpLT5kX2luYW1lOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZW50cnkgKnBf ZGVudHJ5ID0gZmlsZV9kZW50cnkoZmlsZSktPmRfcGFyZW50Owo+ICvCoMKgwqDCoMKgwqDCoGNv bnN0IGNoYXIgKnBoeV9kaXJfbmFtZSA9IHBfZGVudHJ5LT5kX2luYW1lOwo+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBzZXFfZmlsZcKgwqDCoMKgwqDCoMKgwqDCoCpzID0gZmlsZS0+cHJpdmF0ZV9k YXRhOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBydGtfdXNiX3BoecKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAqcnRrX3BoeSA9IHMtPnByaXZhdGU7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IHJlZ19hZGRyICpyZWdBZGRyOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBwaHlfZGF0YSAqcGh5 X2RhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldCA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgY2hh ciBidWZmZXJbNDBdID0gezB9Owo+ICvCoMKgwqDCoMKgwqDCoGludCBpbmRleDsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgaWYgKGNvcHlfZnJvbV91c2VyKCZidWZmZXIsIHVidWYsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtaW5fdChzaXplX3QsIHNpemVvZihidWZmZXIp IC0gMSwgY291bnQpKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1F RkFVTFQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHJ0a19w aHktPnBoeU47IGluZGV4KyspIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2l6 ZV90IHN6ID0gMzA7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYXIgbmFtZVsz MF0gPSB7MH07Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzbnByaW50Zihu YW1lLCBzeiwgInBoeSVkIiwgaW5kZXgpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAoc3RybmNtcChuYW1lLCBwaHlfZGlyX25hbWUsIHN0cmxlbihuYW1lKSkgPT0gMCkgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVnQWRkciA9 ICYoKHN0cnVjdCByZWdfYWRkciAqKXJ0a19waHktCj4gPnJlZ19hZGRyKVtpbmRleF07Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0YSA9ICYo KHN0cnVjdCBwaHlfZGF0YSAqKXJ0a19waHktCj4gPnBoeV9kYXRhKVtpbmRleF07Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDC oMKgwqBpZiAoIXJlZ0FkZHIpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2 X2VycihydGtfcGh5LT5kZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICIlczogTm8gcmVnQWRkciBmb3IgJXMv JXNcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBwaHlfZGlyX25hbWUsCj4gZmlsZV9uYW1l KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gK8Kg wqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoGlmICghcGh5X2RhdGEpIHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihydGtfcGh5LT5kZXYsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICIlczogTm8gcGh5X2RhdGEgZm9yICVzLyVzXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNf XywgcGh5X2Rpcl9uYW1lLAo+IGZpbGVfbmFtZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKg wqDCoMKgcmV0ID0gX19zZXRfcGFyYW1ldGVyX2F0X3BhZ2UocnRrX3BoeSwgcmVnQWRkciwgcGh5 X2RhdGEsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlfZGF0YS0+ cGFyYW1ldGVyLCBmaWxlX25hbWUsIGJ1ZmZlcik7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8 IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoHJldHVybiBjb3VudDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBmaWxlX29wZXJhdGlvbnMgcnRrX3VzYjNfc2V0X3BhcmFtZXRlcl9mb3BzID0gewo+ICvCoMKg wqDCoMKgwqDCoC5vcGVuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IHJ0 a191c2IzX3NldF9wYXJhbWV0ZXJfb3BlbiwKPiArwqDCoMKgwqDCoMKgwqAud3JpdGXCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IHJ0a191c2IzX3NldF9wYXJhbWV0ZXJfd3Jp dGUsCj4gK8KgwqDCoMKgwqDCoMKgLnJlYWTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoD0gc2VxX3JlYWQsCj4gK8KgwqDCoMKgwqDCoMKgLmxsc2Vla8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqA9IHNlcV9sc2VlaywKPiArwqDCoMKgwqDCoMKgwqAucmVsZWFz ZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBzaW5nbGVfcmVsZWFzZSwKPiArfTsK PiArCj4gK3N0YXRpYyBpbnQgcnRrX3VzYjNfdG9nZ2xlX3Nob3coc3RydWN0IHNlcV9maWxlICpz LCB2b2lkICp1bnVzZWQpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcnRrX3VzYl9waHnC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKnJ0a19waHkgPSBzLT5wcml2YXRlOwo+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBwaHlfZGF0YSAqcGh5X2RhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgaW50 IGk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBydGtfcGh5LT5waHlOOyBp KyspIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEgPSAmKChzdHJ1 Y3QgcGh5X2RhdGEgKilydGtfcGh5LQo+ID5waHlfZGF0YSlbaV07Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHNlcV9wcmludGYocywgIk5vdyBwaHkjJWQgZG9fdG9nZ2xlIGlzICVz LlxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpLCBwaHlfZGF0YS0KPiA+ZG9fdG9nZ2xlPyJFbmFibGUiOiJEaXNhYmxlIik7Cj4gK8Kg wqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoHNlcV9wdXRzKHMsICJlaGNvIDEgdG8gZW5h YmxlIHRvZ2dsZSBwaHkgcGFyYW1ldGVyLlxuIik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJ0a191c2IzX3RvZ2dsZV9vcGVuKHN0cnVjdCBp bm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlCj4gKmZpbGUpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcnRrX3VzYjNfdG9nZ2xlX3Nob3csIGlub2RlLQo+ID5p X3ByaXZhdGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBydGtfdXNiM190b2dnbGVfd3Jp dGUoc3RydWN0IGZpbGUgKmZpbGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNv bnN0IGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKPiArewo+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBzZXFfZmlsZcKgwqDCoMKgwqDCoMKgwqDCoCpzID0gZmls ZS0+cHJpdmF0ZV9kYXRhOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBydGtfdXNiX3BoecKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqcnRrX3BoeSA9IHMtPnByaXZhdGU7Cj4gK8KgwqDCoMKg wqDCoMKgY2hhcsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBidWZbMzJd Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBwaHlfZGF0YSAqcGh5X2RhdGE7Cj4gK8KgwqDCoMKg wqDCoMKgYm9vbCBlbmFibGUgPSBmYWxzZTsKPiArwqDCoMKgwqDCoMKgwqBpbnQgaTsKPiArCj4g K8KgwqDCoMKgwqDCoMKgaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIG1pbl90KHNpemVf dCwgc2l6ZW9mKGJ1ZikgLSAxLAo+IGNvdW50KSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiAtRUZBVUxUOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXN0cm5jbXAo YnVmLCAiMSIsIDEpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbmFibGUgPSB0 cnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgcnRrX3BoeS0+cGh5Tjsg aSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhID0gJigoc3Ry dWN0IHBoeV9kYXRhICopcnRrX3BoeS0KPiA+cGh5X2RhdGEpW2ldOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0YS0+ZG9fdG9nZ2xlID0gZW5hYmxlOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfaW5mbyhydGtfcGh5LT5kZXYsICJTZXQgcGh5IyVk IGRvX3RvZ2dsZSBpcwo+ICVzLlxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpLCBwaHlfZGF0YS0KPiA+ZG9fdG9nZ2xlPyJFbmFibGUi OiJEaXNhYmxlIik7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gY291bnQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z IHJ0a191c2IzX3RvZ2dsZV9mb3BzID0gewo+ICvCoMKgwqDCoMKgwqDCoC5vcGVuwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IHJ0a191c2IzX3RvZ2dsZV9vcGVuLAo+ICvC oMKgwqDCoMKgwqDCoC53cml0ZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0g cnRrX3VzYjNfdG9nZ2xlX3dyaXRlLAo+ICvCoMKgwqDCoMKgwqDCoC5yZWFkwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IHNlcV9yZWFkLAo+ICvCoMKgwqDCoMKgwqDCoC5s bHNlZWvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBzZXFfbHNlZWssCj4gK8Kg wqDCoMKgwqDCoMKgLnJlbGVhc2XCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0gc2lu Z2xlX3JlbGVhc2UsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGNyZWF0ZV9kZWJ1Z19zZXRfcGFy YW1ldGVyX2ZpbGVzKHN0cnVjdCBydGtfdXNiX3BoeQo+ICpydGtfcGh5LAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgZGVudHJ5ICpwaHlfZGlyLCBzaXplX3QgYWRkcl9zaXplKQo+ICt7 Cj4gK8KgwqDCoMKgwqDCoMKgaW50IGk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7 IGkgPCBhZGRyX3NpemU7IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz aXplX3Qgc3ogPSAzMDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhciBuYW1l WzMwXSA9IHswfTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNucHJpbnRm KG5hbWUsIHN6LCAiJTAyeCIsCj4gQVJSQVlfSU5ERVhfTUFQX1BIWV9BRERSKGkpKTsKPiArCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghZGVidWdmc19jcmVhdGVfZmlsZShu YW1lLCAwNjQ0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHBoeV9kaXIsIHJ0a19waHksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnJ0a191c2IzX3NldF9wYXJhbWV0ZXJfZm9wcykp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJy KHJ0a19waHktPmRldiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIiVzIEVycm9yIGNyZWF0ZSBmaWxlICVzIGZh aWwiLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBuYW1lLCBfX2Z1bmNfXyk7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2 b2lkIGNyZWF0ZV9kZWJ1Z19maWxlcyhzdHJ1Y3QgcnRrX3VzYl9waHkgKnJ0a19waHkpCj4gK3sK PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGVudHJ5ICpwaHlfZGVidWdfcm9vdCA9IE5VTEw7Cj4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IGRlbnRyeSAqc2V0X3BhcmFtZXRlcl9kaXIgPSBOVUxMOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqBwaHlfZGVidWdfcm9vdCA9IGNyZWF0ZV9waHlfZGVidWdfcm9v dCgpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXBoeV9kZWJ1Z19yb290KSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIocnRrX3BoeS0+ZGV2LCAiJXMgRXJyb3Ig cGh5X2RlYnVnX3Jvb3QgaXMKPiBOVUxMIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybjsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKg cnRrX3BoeS0+ZGVidWdfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRldl9uYW1lKHJ0a19waHkt Cj4gPmRldiksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlfZGVi dWdfcm9vdCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFydGtfcGh5LT5kZWJ1Z19kaXIpIHsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihydGtfcGh5LT5kZXYsICIlcyBF cnJvciBkZWJ1Z19kaXIgaXMgTlVMTCIsCj4gX19mdW5jX18pOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDC oMKgwqBpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoInBhcmFtZXRlciIsIDA0NDQsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBydGtfcGh5LT5kZWJ1Z19kaXIsIHJ0a19w aHksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcnRrX3VzYjNfcGFy YW1ldGVyX2ZvcHMpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZpbGVf ZXJyb3I7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHNldF9wYXJhbWV0ZXJfZGlyID0gZGVidWdmc19j cmVhdGVfZGlyKCJzZXRfcGFyYW1ldGVyIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHJ0a19waHktPmRlYnVnX2Rpcik7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHNldF9w YXJhbWV0ZXJfZGlyKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBpbmRl eCwgcmV0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZm9yIChpbmRleCA9 IDA7IGluZGV4IDwgcnRrX3BoeS0+cGh5TjsgaW5kZXgrKykgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRlbnRyeSAqcGh5X2RpcjsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBwaHlf ZGF0YSAqcGh5X2RhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBzaXplX3Qgc3ogPSAzMDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGNoYXIgbmFtZVszMF0gPSB7MH07Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc25wcmludGYobmFtZSwgc3osICJwaHkl ZCIsIGluZGV4KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBwaHlfZGF0YSA9ICYoKHN0cnVjdCBwaHlfZGF0YSAqKXJ0a19waHktCj4gPnBoeV9k YXRhKVtpbmRleF07Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcGh5X2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihuYW1lLAo+IHNldF9wYXJhbWV0 ZXJfZGlyKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmICghcGh5X2Rpcikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIocnRrX3BoeS0+ZGV2LAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgIiVzIEVycm9yIGNyZWF0ZSBmb2xkZXIKPiAlcyBmYWlsXG4i LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmFtZSwgX19mdW5jX18pOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGdvdG8gZmlsZV9lcnJvcjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXQgPQo+IGNyZWF0ZV9kZWJ1Z19zZXRfcGFyYW1ldGVyX2ZpbGVzKHJ0a19waHks IHBoeV9kaXIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBoeV9kYXRhLT5zaXplKTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZGV2X2VycihydGtfcGh5LT5kZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiJXMg RXJyb3IgY3JlYXRlIGZpbGVzCj4gZmFpbFxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIF9fZnVuY19fKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZpbGVfZXJyb3I7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICgh ZGVidWdmc19jcmVhdGVfZmlsZSgidG9nZ2xlIiwgMDY0NCwgcnRrX3BoeS0+ZGVidWdfZGlyLAo+ IHJ0a19waHksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcnRrX3Vz YjNfdG9nZ2xlX2ZvcHMpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZp bGVfZXJyb3I7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybjsKPiArCj4gK2ZpbGVfZXJyb3I6 Cj4gK8KgwqDCoMKgwqDCoMKgZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHJ0a19waHktPmRlYnVn X2Rpcik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZGVidWdfZmlsZXMo c3RydWN0IHJ0a191c2JfcGh5ICpydGtfcGh5KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgZGVidWdm c19yZW1vdmVfcmVjdXJzaXZlKHJ0a19waHktPmRlYnVnX2Rpcik7Cj4gK30KPiArI2Vsc2UKPiAr c3RhdGljIGlubGluZSB2b2lkIGNyZWF0ZV9kZWJ1Z19maWxlcyhzdHJ1Y3QgcnRrX3VzYl9waHkg KnJ0a19waHkpIHsKPiB9Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZGVidWdfZmlsZXMo c3RydWN0IHJ0a191c2JfcGh5ICpydGtfcGh5KSB7Cj4gfQo+ICsjZW5kaWYgLyogQ09ORklHX0RF QlVHX0ZTICovCj4gKwo+ICtzdGF0aWMgaW50IF9fZ2V0X3BoeV9wYXJhbWV0ZXJfYnlfZWZ1c2Uo c3RydWN0IHJ0a191c2JfcGh5ICpydGtfcGh5LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgcGh5X2RhdGEgKnBoeV9kYXRhLCBpbnQgaW5kZXgpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqB1 OCB2YWx1ZSA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG52bWVtX2NlbGwgKmNlbGw7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoGlmICghcGh5X2RhdGEtPmNoZWNrX2VmdXNlKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgY2Vs bCA9IG52bWVtX2NlbGxfZ2V0KHJ0a19waHktPmRldiwKPiAidXNiX3UzX3R4X2xmcHNfc3dpbmdf dHJpbSIpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoY2VsbCkpIHsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X3dhcm4ocnRrX3BoeS0+ZGV2LAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICIlcyBmYWlsZWQgdG8g Z2V0Cj4gdXNiX3UzX3R4X2xmcHNfc3dpbmdfdHJpbTogJWxkXG4iLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBQVFJfRVJS KGNlbGwpKTsKPiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB1bnNpZ25lZCBjaGFyICpidWY7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHNpemVfdCBidWZfc2l6ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGJ1ZiA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCAmYnVmX3NpemUpOwo+ICsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsdWUgPSBidWZbMF0gJiBVU0JfVTNfVFhfTEZQU19T V0lOR19UUklNX01BU0s7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZf ZGJnKHJ0a19waHktPmRldiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAicGh5IGluZGV4PSVkIGJ1Zj0weCV4IGJ1Zl9zaXplPSVkCj4gdmFs dWU9MHgleFxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpbmRleCwgYnVmWzBdLCAoaW50KWJ1Zl9zaXplLCB2YWx1ZSk7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtmcmVlKGJ1Zik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoG52bWVtX2NlbGxfcHV0KGNlbGwpOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiAr Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCh2YWx1ZSA+IDApICYmICh2YWx1ZSA8IDB4OCkpCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhLT5lZnVzZV91c2JfdTNfdHhfbGZw c19zd2luZ190cmltID0gMHg4Owo+ICvCoMKgwqDCoMKgwqDCoGVsc2UKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEtPmVmdXNlX3VzYl91M190eF9sZnBzX3N3aW5nX3Ry aW0gPQo+ICh1OCl2YWx1ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZGV2X2RiZyhydGtfcGh5LT5k ZXYsICJHZXQgRWZ1c2UKPiB1c2JfdTNfdHhfbGZwc19zd2luZ190cmltPTB4JXggKHZhbHVlPTB4 JXgpXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGh5X2RhdGEt PmVmdXNlX3VzYl91M190eF9sZnBzX3N3aW5nX3RyaW0sCj4gdmFsdWUpOwo+ICsKPiArb3V0Ogo+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9fZ2V0X3Bo eV9wYXJhbWV0ZXJfdjEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QKPiBwaHlfZGF0YSAqcGh5 X2RhdGEsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqc3ViX25v ZGUpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X3BhcmFtZXRlciAqcGh5X3BhcmFt ZXRlcjsKPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV2aXNpb24sIGksIHJldCA9IDA7Cj4gK8KgwqDC oMKgwqDCoMKgdTggKmFkZHI7Cj4gK8KgwqDCoMKgwqDCoMKgdTE2ICpkYXRhOwo+ICsKPiArwqDC oMKgwqDCoMKgwqByZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChzdWJfbm9kZSwgInJl YWx0ZWsscGh5LWRhdGEtCj4gc2l6ZSIsIDAsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmcGh5X2RhdGEtPnNpemUpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+ICsKPiArwqDCoMKgwqDC oMKgwqBwaHlfZGF0YS0+cGFyYW1ldGVyID0gZGV2bV9remFsbG9jKGRldiwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZihzdHJ1Y3QgcGh5X3BhcmFtZXRlcikg KiBwaHlfZGF0YS0+c2l6ZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEdGUF9LRVJORUwpOwo+ICvCoMKgwqDCoMKgwqDCoGlmICghcGh5X2RhdGEtPnBhcmFtZXRlcikK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoGFkZHIgPSBrY2FsbG9jKHBoeV9kYXRhLT5zaXplLCBzaXplb2YodTgpLCBH RlBfS0VSTkVMKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIWFkZHIpIHsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKga2ZyZWUocGh5X2RhdGEtPnBhcmFtZXRlcik7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhLT5wYXJhbWV0ZXIgPSBOVUxMOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPiArwqDCoMKgwqDCoMKg wqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRhdGEgPSBrY2FsbG9jKHBoeV9kYXRhLT5zaXplLCBz aXplb2YodTE2KSwgR0ZQX0tFUk5FTCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFkYXRhKSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtmcmVlKHBoeV9kYXRhLT5wYXJhbWV0ZXIp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBrZnJlZShhZGRyKTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEtPnBhcmFtZXRlciA9IE5VTEw7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PTUVNOwo+ICvCoMKgwqDCoMKg wqDCoH0KPiArwqDCoMKgwqDCoMKgwqByZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3U4X2FycmF5KHN1 Yl9ub2RlLCAicmVhbHRlayxwaHktZGF0YS0KPiBhZGRyIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGFkZHIsIHBoeV9kYXRhLT5zaXplKTsKPiArwqDCoMKgwqDCoMKg wqBpZiAocmV0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgcmV2aXNpb24gPSBfX2dldF9jaGlwX3JldmlzaW9uKCk7Cj4gK8Kg wqDCoMKgwqDCoMKgZGV2X2RiZyhkZXYsICIlczogQ2hpcCByZXZpc2lvbiBpcyAleFxuIiwgX19m dW5jX18sCj4gcmV2aXNpb24pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB3aGlsZSAocmV2aXNpb24g Pj0gREVGQVVMVF9DSElQX1JFVklTSU9OKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGNoYXIgcGh5X2RhdGFfcmV2aXNpb25bMzJdID0gezB9Owo+ICsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgc25wcmludGYocGh5X2RhdGFfcmV2aXNpb24sIDIxLCAicmVhbHRl ayxwaHktZGF0YS0KPiAlWCIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV2aXNpb24pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UxNl9hcnJheShzdWJfbm9kZSwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlfZGF0YV9y ZXZpc2lvbiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBkYXRhLCBwaHlfZGF0YS0+c2l6ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmICghcmV0KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkZXZfZGJnKGRldiwgIiVzIGxvYWQgJXMgcGFyYW1ldGVyXG4iLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBfX2Z1bmNfXywgcGh5X2RhdGFfcmV2aXNpb24pOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV2aXNpb24t LTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKChyZXZpc2lvbiAmIDB4RkYp ID4gMHhGKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV2aXNpb24gPSAocmV2aXNpb24gJiAweEYwMCkgKyAweEY7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBGb3Igb2xkIGRldmljZSB0cmVlICovCj4gK8KgwqDCoMKg wqDCoMKgaWYgKHJldCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBv Zl9wcm9wZXJ0eV9yZWFkX3UxNl9hcnJheShzdWJfbm9kZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAicmVhbHRlayxwaHktZGF0YS1yZXZB IiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBkYXRhLCBwaHlfZGF0YS0+c2l6ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChyZXQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBnb3RvIG91dDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2luZm8oZGV2LCAi JXMgbG9hZCBwYXJhbWV0ZXJcbiIsCj4gX19mdW5jX18pOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiAr Cj4gK8KgwqDCoMKgwqDCoMKgcGh5X3BhcmFtZXRlciA9IHBoeV9kYXRhLT5wYXJhbWV0ZXI7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBwaHlfZGF0YS0+c2l6ZTsgaSsrKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoChwaHlfcGFyYW1ldGVyICsgaSktPmFk ZHIgPSAqKGFkZHIgKyBpKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKHBoeV9w YXJhbWV0ZXIgKyBpKS0+ZGF0YSA9ICooZGF0YSArIGkpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkZXZfZGJnKGRldiwgIiVzIGk9JWQgYWRkcj0weCV4IGRhdGE9MHgleFxuIiwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBf X2Z1bmNfXywgaSwgKHBoeV9wYXJhbWV0ZXIgKyBpKS0+YWRkciwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAocGh5X3BhcmFtZXRlciArIGkp LT5kYXRhKTsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICtvdXQ6Cj4gK8KgwqDCoMKgwqDCoMKg a2ZyZWUoYWRkcik7Cj4gK8KgwqDCoMKgwqDCoMKga2ZyZWUoZGF0YSk7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19nZXRfcGh5X3BhcmFt ZXRlcl92MihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdAo+IHBoeV9kYXRhICpwaHlfZGF0YSwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRldmljZV9ub2RlICpzdWJfbm9kZSkKPiAr ewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBwaHlfcGFyYW1ldGVyICpwaHlfcGFyYW1ldGVyOwo+ ICvCoMKgwqDCoMKgwqDCoGludCByZXZpc2lvbiwgaSwgcmV0ID0gMDsKPiArwqDCoMKgwqDCoMKg wqBpbnQgZGF0YV9zaXplLCBudW1fY2VsbHMgPSAyOwo+ICvCoMKgwqDCoMKgwqDCoGNoYXIgcGh5 X2RhdGFfcmV2aXNpb25bMzJdID0gezB9Owo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSBvZl9w cm9wZXJ0eV9yZWFkX3UzMl9pbmRleChzdWJfbm9kZSwgInJlYWx0ZWsscGh5LWRhdGEtCj4gc2l6 ZSIsIDAsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcGh5X2RhdGEt PnNpemUpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGdvdG8gb3V0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBwaHlfZGF0YS0+cGFyYW1l dGVyID0gZGV2bV9remFsbG9jKGRldiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHNpemVvZihzdHJ1Y3QgcGh5X3BhcmFtZXRlcikgKiBwaHlfZGF0YS0+c2l6ZSwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdGUF9LRVJORUwpOwo+ICvCoMKg wqDCoMKgwqDCoGlmICghcGh5X2RhdGEtPnBhcmFtZXRlcikKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldmlzaW9u ID0gX19nZXRfY2hpcF9yZXZpc2lvbigpOwo+ICvCoMKgwqDCoMKgwqDCoGRldl9kYmcoZGV2LCAi JXM6IENoaXAgcmV2aXNpb24gaXMgJXhcbiIsIF9fZnVuY19fLAo+IHJldmlzaW9uKTsKPiArCj4g K8KgwqDCoMKgwqDCoMKgd2hpbGUgKHJldmlzaW9uID49IERFRkFVTFRfQ0hJUF9SRVZJU0lPTikg ewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzbnByaW50ZihwaHlfZGF0YV9yZXZp c2lvbiwgMjEsICJyZWFsdGVrLHBoeS1kYXRhLQo+ICVYIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXZpc2lvbik7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChvZl9nZXRfcHJvcGVydHkoc3ViX25vZGUsIHBoeV9k YXRhX3JldmlzaW9uLAo+ICZkYXRhX3NpemUpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZGJnKGRldiwgIiVzIGxvYWQgJXMgcGFyYW1ldGVy Cj4gKGRhdGFfc2l6ZT0lZClcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBwaHlfZGF0YV9y ZXZpc2lvbiwKPiBkYXRhX3NpemUpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV2aXNpb24tLTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKChyZXZpc2lvbiAmIDB4RkYpID4gMHhGKQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV2aXNpb24gPSAocmV2 aXNpb24gJiAweEYwMCkgKyAweEY7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBkYXRhX3NpemUgPSAwOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSAw Owo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgcGh5X3BhcmFtZXRlciA9 IHBoeV9kYXRhLT5wYXJhbWV0ZXI7Cj4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IHBo eV9kYXRhLT5zaXplOyBpKyspCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoChwaHlf cGFyYW1ldGVyICsgaSktPmFkZHIgPSAweEZGOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBkYXRhX3Np emUgPSBkYXRhX3NpemUgLyAoc2l6ZW9mKHUzMikgKiBudW1fY2VsbHMpOwo+ICvCoMKgwqDCoMKg wqDCoGZvciAoaSA9IDA7IGkgPCBkYXRhX3NpemU7IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X3BhcmFtZXRlciAqcGFyYW1ldGVyOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MzIgYWRkciwgZGF0YTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaW50IG9mZnNldCwgaW5kZXg7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBvZmZzZXQgPSBpICogbnVtX2NlbGxzOwo+ICsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgoc3ViX25v ZGUsCj4gcGh5X2RhdGFfcmV2aXNpb24sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2Zmc2V0LCAmYWRkcik7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmIChyZXQpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoZGV2LCAiRVJST1I6IFRvIGdldCAlcyBpPSVkCj4g YWRkcj0weCV4XG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlfZGF0YV9yZXZpc2lvbiwgaSwgYWRkcik7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgoc3ViX25vZGUs Cj4gcGh5X2RhdGFfcmV2aXNpb24sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgb2Zmc2V0ICsgMSwgJmRhdGEpOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGRldiwgIkVSUk9SOiBUbyBnZXQgJXMgaT0lZAo+ IGFkZHI9MHgleFxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGh5X2RhdGFfcmV2aXNpb24sIGksIGRhdGEp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGluZGV4ID0gUEhZX0FERFJfTUFQX0FSUkFZX0lOREVYKGFkZHIpOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXJhbWV0ZXIgPSAocGh5X3BhcmFtZXRl ciArIGluZGV4KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGFyYW1ldGVyLT5h ZGRyID0gKHU4KWFkZHI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBhcmFtZXRl ci0+ZGF0YSA9ICh1MTYpZGF0YTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGRldl9kYmcoZGV2LCAiJXMgaW5kZXg9JWQgYWRkcj0weCV4IGRhdGE9MHgleFxuIiwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaHlfZGF0 YV9yZXZpc2lvbiwgaW5kZXgsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcGFyYW1ldGVyLT5hZGRyLCBwYXJhbWV0ZXItPmRhdGEpOwo+ICvC oMKgwqDCoMKgwqDCoH0KPiArCj4gK291dDoKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJ0a191c2IzcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcnRrX3VzYl9waHkgKnJ0 a19waHk7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsK PiArwqDCoMKgwqDCoMKgwqBpbnQgaSwgcmV0LCBwaHlOOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBy dGtfcGh5ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpydGtfcGh5KSwgR0ZQX0tFUk5FTCk7 Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFydGtfcGh5KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcnRrX3BoeS0+ZGV2 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0gJnBkZXYtPmRldjsKPiAr wqDCoMKgwqDCoMKgwqBydGtfcGh5LT5waHkuZGV2wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqA9IHJ0a19waHktPmRldjsKPiArwqDCoMKgwqDCoMKgwqBydGtfcGh5LT5waHkubGFiZWzC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBSVEtfVVNCM1BIWV9OQU1FOwo+ICvCoMKgwqDC oMKgwqDCoHJ0a19waHktPnBoeS5pbml0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBy dGtfdXNiX3BoeV9pbml0Owo+ICvCoMKgwqDCoMKgwqDCoHJ0a19waHktPnBoeS5zaHV0ZG93bsKg wqDCoMKgwqDCoMKgwqDCoMKgwqA9IHJ0a191c2JfcGh5aHV0ZG93bjsKPiArwqDCoMKgwqDCoMKg wqBydGtfcGh5LT5waHkubm90aWZ5X3BvcnRfc3RhdHVzID0KPiBydGtfdXNiX3BoeV9ub3RpZnlf cG9ydF9zdGF0dXM7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICghZGV2LT5vZl9ub2RlKSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoZGV2LCAiJXMgJWQgTm8gZGV2 aWNlIG5vZGVcbiIsIF9fZnVuY19fLAo+IF9fTElORV9fKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0ID0gLUVOT0RFVjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZ290byBlcnI7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBydGtf cGh5LT51c2JfcmVncyA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUoZGV2LQo+ID5v Zl9ub2RlLCAicmVhbHRlayx1c2IiKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKHJ0a19w aHktPnVzYl9yZWdzKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfaW5m byhkZXYsICIlczogRFRTIG5vIHN1cHBvcnQgdXNiIHJlZ3Mgc3lzY29uXG4iLAo+IF9fZnVuY19f KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcnRrX3BoeS0+dXNiX3JlZ3MgPSBO VUxMOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgcnRrX3BoeS0+bWFj X3JlZ3MgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKGRldi0KPiA+b2Zfbm9kZSwg InJlYWx0ZWssbWFjIik7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihydGtfcGh5LT5tYWNf cmVncykpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2luZm8oZGV2LCAi JXM6IERUUyBubyBzdXBwb3J0IG1hYyByZWdzIHN5c2NvblxuIiwKPiBfX2Z1bmNfXyk7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJ0a19waHktPm1hY19yZWdzID0gTlVMTDsKPiAr wqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJ0a19waHktPnVzYl9jdHJsX3Jl Z3MgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKGRldi0KPiA+b2Zfbm9kZSwgInJl YWx0ZWssdXNiX2N0cmwiKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKHJ0a19waHktPnVz Yl9jdHJsX3JlZ3MpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9pbmZv KGRldiwgIiVzOiBEVFMgbm8gc3VwcG9ydCB1c2JfY3RybCByZWdzCj4gc3lzY29uXG4iLCBfX2Z1 bmNfXyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJ0a19waHktPnVzYl9jdHJs X3JlZ3MgPSBOVUxMOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0 ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgoZGV2LT5vZl9ub2RlLAo+ICJyZWFsdGVrLHBo eU4iLCAwLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnBoeU4pOwo+ ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGdvdG8gZXJyOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBydGtfcGh5LT5waHlOID0gcGh5TjsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgcnRrX3BoeS0+cmVnX2FkZHIgPSBkZXZtX2t6YWxsb2MoZGV2LAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKHN0cnVjdCByZWdf YWRkcikgKiBwaHlOLCBHRlBfS0VSTkVMKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXJ0a19waHkt PnJlZ19hZGRyKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT01F TTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcnRrX3BoeS0+cGh5X2RhdGEgPSBkZXZtX2t6YWxsb2Mo ZGV2LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKHN0cnVj dCBwaHlfZGF0YSkgKiBwaHlOLCBHRlBfS0VSTkVMKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXJ0 a19waHktPnBoeV9kYXRhKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g LUVOT01FTTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IHBoeU47IGkrKykg ewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcmVnX2FkZHIgKmFkZHIg PQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICYoKHN0cnVjdCByZWdfYWRkciAqKXJ0a19waHktCj4gPnJlZ19hZGRyKVtpXTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHBoeV9kYXRhICpwaHlfZGF0YSA9Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJigoc3Ry dWN0IHBoeV9kYXRhICopcnRrX3BoeS0KPiA+cGh5X2RhdGEpW2ldOwo+ICsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhciBwaHlfbmFtZVs1XSwgcGh5X25hbWVfdjJbMTBdOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlX25vZGUgKnN1Yl9u b2RlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYWRkci0+cmVnX21kaW9f Y3RsID0gb2ZfaW9tYXAoZGV2LT5vZl9ub2RlLCBpKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZGV2X2RiZyhkZXYsICIlcyAlZCAjJWQgcmVnX21kaW9fY3RsPSVwXG4iLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVu Y19fLCBfX0xJTkVfXywgaSwgYWRkci0KPiA+cmVnX21kaW9fY3RsKTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNucHJpbnRmKHBoeV9uYW1lLCA1LCAicGh5JWQiLCBpKTsK PiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN1Yl9ub2RlID0gb2ZfZ2V0X2No aWxkX2J5X25hbWUoZGV2LT5vZl9ub2RlLAo+IHBoeV9uYW1lKTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKHN1Yl9ub2RlKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZGJnKGRldiwgIiVzICVkOiAjJWQgR2V0IHBoeSBk YXRhIHYxCj4gc3ViX25vZGUgZm9yICVzXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgX19M SU5FX18sIGksIHBoeV9uYW1lKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldCA9IF9fZ2V0X3BoeV9wYXJhbWV0ZXJfdjEoZGV2LCBwaHlfZGF0YSwK PiBzdWJfbm9kZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAocmV0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB9IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgc25wcmludGYocGh5X25hbWVfdjIsIDEwLCAicGh5JWRfZGF0YSIsIGkpOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3ViX25vZGUgPSBv Zl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtPm9mX25vZGUsCj4gcGh5X25hbWVfdjIpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHN1Yl9ub2RlKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZGV2X2RiZyhkZXYsICIlcyAlZDogIyVkIEdldCBwaHkgZGF0YQo+IHYyIHN1Yl9u b2RlIGZvciAlc1xuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBf X0xJTkVfXywgaSwKPiBwaHlfbmFtZV92Mik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gX19nZXRfcGh5X3BhcmFt ZXRlcl92MihkZXYsCj4gcGh5X2RhdGEsIHN1Yl9ub2RlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVycjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg fQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFzdWJfbm9kZSkgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2Vycihk ZXYsICIlcyAlZCBObyBkZXZpY2Ugc3ViIG5vZGUgZm9yCj4gJXNcbiIsCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IF9fZnVuY19fLCBfX0xJTkVfXywgcGh5X25hbWUpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBlcnI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChvZl9w cm9wZXJ0eV9yZWFkX2Jvb2woc3ViX25vZGUsICJyZWFsdGVrLGRvLQo+IHRvZ2dsZS1vbmNlIikp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaHlfZGF0 YS0+ZG9fdG9nZ2xlX29uY2UgPSB0cnVlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBw aHlfZGF0YS0+ZG9fdG9nZ2xlX29uY2UgPSBmYWxzZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woc3ViX25vZGUsICJyZWFsdGVr LGRvLQo+IHRvZ2dsZSIpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcGh5X2RhdGEtPmRvX3RvZ2dsZSA9IHRydWU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGVsc2UKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHBoeV9kYXRhLT5kb190b2dnbGUgPSBmYWxzZTsKPiArCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woc3ViX25vZGUsICJy ZWFsdGVrLHVzZS0KPiBkZWZhdWx0LXBhcmFtZXRlciIpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEtPnVzZV9kZWZhdWx0X3BhcmFtZXRl ciA9IHRydWU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVsc2UKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhLT51c2VfZGVm YXVsdF9wYXJhbWV0ZXIgPSBmYWxzZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woc3ViX25vZGUsICJyZWFsdGVrLGNoZWNrLQo+ IHJ4LWZyb250LWVuZC1vZmZzZXQiKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHBoeV9kYXRhLT5jaGVja19yeF9mcm9udF9lbmRfb2Zmc2V0ID0gdHJ1 ZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGh5X2RhdGEtPmNoZWNrX3J4X2Zyb250 X2VuZF9vZmZzZXQgPSBmYWxzZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woc3ViX25vZGUsICJyZWFsdGVrLGNoZWNrLQo+IGVm dXNlIikpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBw aHlfZGF0YS0+Y2hlY2tfZWZ1c2UgPSB0cnVlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBwaHlfZGF0YS0+Y2hlY2tfZWZ1c2UgPSBmYWxzZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoF9fZ2V0X3BoeV9wYXJhbWV0ZXJfYnlfZWZ1c2UocnRrX3BoeSwgcGh5X2Rh dGEsIGkpOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgcGxhdGZvcm1f c2V0X2RydmRhdGEocGRldiwgcnRrX3BoeSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IHVz Yl9hZGRfcGh5X2RldigmcnRrX3BoeS0+cGh5KTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVycjsKPiArCj4gK8KgwqDCoMKg wqDCoMKgY3JlYXRlX2RlYnVnX2ZpbGVzKHJ0a19waHkpOwo+ICsKPiArZXJyOgo+ICvCoMKgwqDC oMKgwqDCoGRldl9kYmcoJnBkZXYtPmRldiwgIlByb2JlIFJUSyBVU0IgMy4wIFBIWSAocmV0PSVk KVxuIiwgcmV0KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBydGtfdXNiM3BoeV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBydGtfdXNiX3BoeSAqcnRrX3BoeSA9IHBs YXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZW1vdmVfZGVi dWdfZmlsZXMocnRrX3BoeSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHVzYl9yZW1vdmVfcGh5KCZy dGtfcGh5LT5waHkpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiArfQo+ICsKPiAr I2lmZGVmIENPTkZJR19PRgo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB1c2Jw aHlfcnRrX2R0X21hdGNoW10gPSB7Cj4gK8KgwqDCoMKgwqDCoMKgeyAuY29tcGF0aWJsZSA9ICJy ZWFsdGVrLHVzYjNwaHkiLCB9LAo+ICvCoMKgwqDCoMKgwqDCoHsgLmNvbXBhdGlibGUgPSAicmVh bHRlayxydGQtdXNiM3BoeSIsIH0sCj4gK8KgwqDCoMKgwqDCoMKgeyAuY29tcGF0aWJsZSA9ICJy ZWFsdGVrLHJ0ZDEyOTUtdXNiM3BoeSIsIH0sCj4gK8KgwqDCoMKgwqDCoMKgeyAuY29tcGF0aWJs ZSA9ICJyZWFsdGVrLHJ0ZDE2MTktdXNiM3BoeSIsIH0sCj4gK8KgwqDCoMKgwqDCoMKgeyAuY29t cGF0aWJsZSA9ICJyZWFsdGVrLHJ0ZDEzMTktdXNiM3BoeSIsIH0sCj4gK8KgwqDCoMKgwqDCoMKg eyAuY29tcGF0aWJsZSA9ICJyZWFsdGVrLHJ0ZDE2MTliLXVzYjNwaHkiLCB9LAo+ICvCoMKgwqDC oMKgwqDCoHsgLmNvbXBhdGlibGUgPSAicmVhbHRlayxydGQxMzE5ZC11c2IzcGh5IiwgfSwKPiAr wqDCoMKgwqDCoMKgwqB7fSwKPiArfTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdXNicGh5 X3J0a19kdF9tYXRjaCk7Cj4gKyNlbmRpZgo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgcnRrX3VzYjNwaHlfZHJpdmVyID0gewo+ICvCoMKgwqDCoMKgwqDCoC5wcm9iZcKgwqDC oMKgwqDCoMKgwqDCoMKgPSBydGtfdXNiM3BoeV9wcm9iZSwKPiArwqDCoMKgwqDCoMKgwqAucmVt b3ZlwqDCoMKgwqDCoMKgwqDCoMKgPSBydGtfdXNiM3BoeV9yZW1vdmUsCj4gK8KgwqDCoMKgwqDC oMKgLmRyaXZlcsKgwqDCoMKgwqDCoMKgwqDCoD0gewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAubmFtZcKgwqDCoD0gUlRLX1VTQjNQSFlfTkFNRSwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgLm93bmVywqDCoD0gVEhJU19NT0RVTEUsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cih1c2JwaHlfcnRr X2R0X21hdGNoKSwKPiArwqDCoMKgwqDCoMKgwqB9LAo+ICt9Owo+ICsKPiArbW9kdWxlX3BsYXRm b3JtX2RyaXZlcihydGtfdXNiM3BoeV9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQ TCIpOwo+ICtNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgUlRLX1VTQjNQSFlfTkFNRSk7Cj4gK01P RFVMRV9BVVRIT1IoIlJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3Jwb3JhdGlvbiIpOwo+ICtNT0RV TEVfREVTQ1JJUFRJT04oIlJUSyB1c2IgMy4wIHBoeSBkcml2ZXIiKTsKCg==