From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 5344F3858C50 for ; Sun, 27 Nov 2022 14:21:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5344F3858C50 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1669558870; 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=LA/OB9PIWNKOzwNy2urF7NTu8spjHJzAoKZWf9fNWwo=; b=Lyqbyw0i+3r9xE1ZW17iUuthn61kNPBCO6u+Q1yhnLwgnfOMYSczqGJ6WAdGBYe2HFHVlI 8FXP2L7ZQLARwJUdaoIYRHaYcBxxV1f5hHImBpwW8eJPXk3YVmDArK5OzjQdcYAm3O3Ezv VXz0ZhlxcHlfwSgQ6L13QiwmkwtSV18= Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-572-ul5lnuGcNK6U4KXBSCk7ag-1; Sun, 27 Nov 2022 09:21:06 -0500 X-MC-Unique: ul5lnuGcNK6U4KXBSCk7ag-1 Received: by mail-qt1-f200.google.com with SMTP id n12-20020ac85a0c000000b003a5849497f9so10363843qta.20 for ; Sun, 27 Nov 2022 06:21:06 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=LA/OB9PIWNKOzwNy2urF7NTu8spjHJzAoKZWf9fNWwo=; b=5/J2CQHuiPea8Q+xWxPZcXMWrW/p1Th/URa6Ej4fz+OoC631nZ9wN481FLFNXncNZA G6trJ97880J6tLKOoF5PMmc2+35YEPkaAv3QDvnWWx7ApXJSkMcCuwxLinlBtKgsGB6x z2Y+Ofs1kPAEEP+i1rmBjhLmCz5dTV+fmOl0FXb6h2I0Q+ohNQsf2CntGMMjwk9aYOfQ gzoH5nxcsVjam7Y2uePiG42+mRZsXzzlv/HJjy80BOP+2v6nQHU3WIi1gJdLI0rjUc2b S1c0HDV6jUv3wyuTuN64MC9GlZpId5IrOhK1/kjsnbc01e0HKGBXyb0f5wNc6xpV1e9I WN3g== X-Gm-Message-State: ANoB5pky5mrjWBatJnnRLeF2NUosgvqBV2VQPC55PKD08+nr95Gws8Xy /OdQE1Ejy7AOsnFwlOyMw0zp4DFiUkqVqdiTEr8FQM8n+lu0btrVXW1dJpVRPJT35PN6y2/8k3g dEihrlAtICS/9o/j24Q== X-Received: by 2002:a05:6214:3612:b0:4c6:e2b4:8c6c with SMTP id nv18-20020a056214361200b004c6e2b48c6cmr13030890qvb.13.1669558863253; Sun, 27 Nov 2022 06:21:03 -0800 (PST) X-Google-Smtp-Source: AA0mqf7Va3Rl/erRK5dVm7bgOh7R5qqV7YB6B3CSXSsCzS1X0Rwm3YUe+2heckvGX2EzNOjgCr5ymQ== X-Received: by 2002:a05:6214:3612:b0:4c6:e2b4:8c6c with SMTP id nv18-20020a056214361200b004c6e2b48c6cmr13030813qvb.13.1669558862034; Sun, 27 Nov 2022 06:21:02 -0800 (PST) Received: from t14s.localdomain (c-73-69-212-193.hsd1.nh.comcast.net. [73.69.212.193]) by smtp.gmail.com with ESMTPSA id r22-20020ac87ef6000000b00397b1c60780sm5293504qtc.61.2022.11.27.06.21.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Nov 2022 06:21:01 -0800 (PST) Message-ID: <0049ac9c21bb07bc12b7670a51ca07e18a38721a.camel@redhat.com> Subject: Re: [PATCH] rtl: add predicates for addition, subtraction & multiplication From: David Malcolm To: Charlie Sale , gcc-patches@gcc.gnu.org Cc: Richard Biener , jakub@redhat.com Date: Sun, 27 Nov 2022 09:21:00 -0500 In-Reply-To: <20221127021613.432881-1-softwaresale01@gmail.com> References: <20221127021613.432881-1-softwaresale01@gmail.com> User-Agent: Evolution 3.44.4 (3.44.4-1.fc36) MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 X-Spam-Status: No, score=-10.2 required=5.0 tests=BAYES_00,BODY_8BITS,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: T24gU2F0LCAyMDIyLTExLTI2IGF0IDIxOjE2IC0wNTAwLCBDaGFybGllIFNhbGUgdmlhIEdjYy1w YXRjaGVzIHdyb3RlOgo+IFRoaXMgaXMgbXkgZmlyc3QgY29udHJpYnV0aW9uIHRvIEdDQyA6KcKg CgpUaGFua3MsIGFuZCB3ZWxjb21lIHRvIEdDQyBkZXZlbG9wbWVudCEKCj4gb25lIG9mIHRoZSBi ZWdpbm5lciBwcm9qZWN0cwo+IHN1Z2dlc3RlZCBvbiB0aGUgd2Vic2l0ZSB3YXMgdG8gYWRkIGFu ZCB1c2UgUlRMIHR5cGUgcHJlZGljYXRlcy4gSQo+IGFkZGVkIHByZWRpY2F0ZXMgZm9yIGFkZGl0 aW9uLCBzdWJ0cmFjdGlvbiBhbmQgbXVsdGlwbGljYXRpb24uIEkgYWxzbwo+IHdlbnQgdGhyb3Vn aCBhbmQgdXNlZCB0aGVtIGluIHRoZSBjb2RlLgoKVGhhbmtzLgoKV2UncmUgY3VycmVudGx5IGlu ICJzdGFnZSAzIiBvZiBHQ0MgMTMgZGV2ZWxvcG1lbnQsIHdoaWNoIG1lYW5zIHRoYXQKd2UncmUg Zm9jdXNpbmcgb24gYnVnLWZpeGluZywgcmF0aGVyIHRoYW4gY2xlYW51cHMgYW5kIGZlYXR1cmUg d29yay4gClRob3VnaCBleGNlcHRpb25zIGNhbiBiZSBtYWRlIGZvciBsb3ctcmlzayB3b3JrLCBh dCB0aGUgZGlzY3JldGlvbiBvZgp0aGUgcmVsZWFzZSBtYW5hZ2VyczsgSSd2ZSB0YWtlbiB0aGUg bGliZXJ0eSBvZiBDQ2luZyB0aGVtLgoKQWx0aG91Z2ggSSdtIG5vdCBhbiBSVEwgZXhwZXJ0LCBJ IGJyaWVmbHkgZ2xhbmNlZCB0aHJvdWdoIHlvdXIgcGF0Y2gKYW5kIGl0IGxvb2tzIGxpa2UgeW91 J3JlIG9uIHRoZSByaWdodCB0cmFjayB3aXRoIHRoaXMgKHdpdGggc29tZQpjYXZlYXRzIGJlbG93 KS4KCj4gCj4gSSBkaWQgbm90IGFkZCB0ZXN0cyBiZWNhdXNlIEknbSBub3QgYWRkZGluZy9tb2Rp ZnlpbmcgYW55IGJlaGF2aW9yLgo+IEFsbCBleGlzdGluZ3MgdGVzdHMgZGlkIHBhc3MuCgpXZSdy ZSBzb21ldGltZXMgYSBiaXQgc2xvcHB5IHdoZW4gd2UgdGFsayBhYm91dCB0aGUgdGVzdGluZyB3 ZSBkbywgaXQncwpnb29kIHRvIGJlIHByZWNpc2UgYWJvdXQgd2hhdCBidWlsZC9ob3N0L3Rhcmdl dCBjb21iaW5hdGlvbihzKSBhIHBhdGNoCmlzIHRlc3RlZCBvbi4gIEkgbm9ybWFsbHkgc2lnbiBv ZmYgbXkgcGF0Y2hlcyB3aXRoIHNvbWV0aGluZyBsaWtlOgogICJTdWNjZXNzZnVsbHkgYm9vdHN0 cmFwcGVkICYgcmVncnRlc3RlZCBvbiB4ODZfNjQtcGMtbGludXgtZ251LiIKd2hpY2ggaXMgc2hv cnRoYW5kIGZvcjoKICAiSSBjb25maWd1cmVkIGFuZCBidWlsdCB0aGUgY29tcGlsZXIgd2l0aCB0 aGUgcGF0Y2ggb24geDg2XzY0LXBjLQpsaW51eC1nbnUsIHdpdGggdGhlIGZ1bGwgdGhyZWUtc3Rh Z2UgYm9vdHN0cmFwLCB3aGljaCBzdWNjZWVkZWQsIGFuZAp0aGVuIHJhbiB0aGUgZnVsbCB0ZXN0 IHN1aXRlLCB3aGljaCByYW4gd2l0aG91dCByZWdyZXNzaW9ucyIuCgpSVEwgaXMgYW4gYXNwZWN0 IG9mIHRoZSBjb21waWxlciB0aGF0IHRlbmRzIHRvIGhhdmUgdGhlIG1vc3QgcGVyLXRhcmdldApk aWZmZXJlbmNlcywgc28gaXQncyBlc3BlY2lhbGx5IGltcG9ydGFudCB0byBiZSBwcmVjaXNlIGFi b3V0IHdoaWNoCnRhcmdldChzKSB5b3UgYnVpbHQgYW5kIHRlc3RlZCBvbi4KCj4gCj4gTGlrZSBJ IHNhaWQsIHRoaXMgaXMgbXkgZmlyc3QgcGF0Y2guwqAKCldlJ3JlIHNvbWV0aW1lcyBub3QgYXMg d2VsY29taW5nIHRvIG5ld2NvbWVycyBhcyB3ZSBjb3VsZCBiZSwgc28gcGxlYXNlCmJlYXIgd2l0 aCB1cy4gIExldCBtZSBrbm93IGlmIGFueXRoaW5nIGluIHRoaXMgZW1haWwgaXMgdW5jbGVhci4K Cj4gUGxlYXNlIGxldCBtZSBrbm93IGlmIEkgZGlkCj4gYW55dGhpbmcgd3Jvbmcgb3IgaWYgdGhl cmUncyBhbnl0aGluZyBJIGNhbiBpbXByb3ZlIGZvciBuZXh0IHRpbWUuCgpBcyBub3RlZCBpbiBh bm90aGVyIHJlcGx5LCB0aGVyZSBhcmUgbG90cyBvZiBwbGFjZXMgaW4gdGhlIGNvZGUgd2hlcmUK dGhlIHBhdGNoIHRvdWNoZXMgbGluZXMgdGhhdCBpdCBkb2Vzbid0IG5lZWQgdG86IGdlbmVyYWxs eSBmb3JtYXR0aW5nCmFuZCB3aGl0ZXNwYWNlIGNoYW5nZXMuCgpXZSBoYXZlIG92ZXIgMzAgeWVh cnMgb2Ygc291cmNlIGhpc3Rvcnkgd2hpY2ggd2Ugc29tZXRpbWVzIG5lZWQgdG8gbG9vawpiYWNr IG9uLCBhbmQgUlRMIGlzIHNvbWUgb2YgdGhlIG9sZGVzdCBjb2RlIGluIHRoZSBjb21waWxlciwg c28gd2Ugd2FudAp0byBtaW5pbWl6ZSAiY2h1cm4iIHRvIGtlZXAgdG9vbHMgbGlrZSAiZ2l0IGJs YW1lIiB1c2VmdWwuCgpGb3IgdjIgb2YgdGhlIHBhdGNoLCBwbGVhc2UgZ28gdGhyb3VnaCBpdCBs aW5lLWJ5LWxpbmUgKHBlcmhhcHMgdXNpbmcKImdpdCBhZGQgLXAiKSB0byBtYWtlIHN1cmUgdGhh dCB0aGUgcGF0Y2ggaXMgb25seSBtYWtpbmcgdGhlIG1pbmltdW0KY2hhbmdlcyBpdCBuZWVkcyB0 byB0byBtYWtlIHVzZSBvZiB0aGUgbmV3IHR5cGUgcHJlZGljYXRlcy4KCkkgbm90aWNlIHRoYXQg dGhlIHBhdGNoIG9ubHkgdG91Y2hlcyB0aGUgImdjYyIgc3ViZGlyZWN0b3J5IGl0c2VsZiwgYW5k Cm5vdCBhbnkgc3ViZGlyZWN0b3JpZXMuICBUaGVyZSdzIGxvdHMgbW9yZSBwZXItdGFyZ2V0IFJU TCBjb2RlIGluIHRoZQp2YXJpb3VzIGdjYy9jb25maWcvKiBzdWJkaXJlY3Rvcmllcy4gIEkgZG9u J3Qga25vdyBpZiB0aGUgeW91IHdhbnQgdG8KcmVzdHJpY3QgdGhlIHNjb3BlIG9mIHRoZSBwYXRj aCB0byBqdXN0IHRoZSBzaGFyZWQgZ2NjIHN1YmRpcmVjdG9yeSwgb3IKYmUgbW9yZSBhbWJpdGlv dXMgYW5kIGFsc28gdGFja2xlIHRoZSBwZXItdGFyZ2V0IGNvZGUsIGJ1dCB0aGUgbGF0dGVyCmlu dm9sdmVzIGxvdHMgbW9yZSBidWlsZCBkaXJlY3RvcmllcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUg Y29kZSBzdGlsbApidWlsZHMgb24gZXZlcnkgdGFyZ2V0IGNvbmZpZ3VyYXRpb24uCgpBcyBub3Rl ZCBpbiBhbm90aGVyIHJlcGx5LCB3ZSBwdXQgdGhlIENoYW5nZUxvZyBhZGRpdGlvbnMgaW4gdGhl IHRleHQKb2YgdGhlIGVtYWlsLCByYXRoZXIgdGhhbiBpbmxpbmUgYXMgcGFydCBvZiB0aGUgcGF0 Y2ggaXRzZWxmIChkb2luZyB0aGUKbGF0dGVyIHVzZWQgdG8gYmUgYSBjb25zdGFudCBzb3VyY2Ug b2YgYW5ub3lpbmcgY29uZmxpY3RzIHdoZW4gYXBwbHlpbmcKcGF0Y2hlcykuICBUaGVyZSdzIGEg c2NyaXB0OgogIC4vY29udHJpYi9nY2MtY2hhbmdlbG9nL2dpdF9jaGVja19jb21taXQucHkKd2hp Y2ggeW91IGNhbiBydW4gdG8gdmVyaWZ5IHRoYXQgb3VyIHNlcnZlci1zaWRlIGdpdCBob29rcyB3 aWxsIGJlIGFibGUKdG8gY29wZSB3aXRoIHRoZSBjb3ZlciB0ZXh0LgoKSG9wZSB0aGlzIGlzIGNv bnN0cnVjdGl2ZSwgYW5kIHdlbGNvbWUsIGFnYWluIQpEYXZlCgo+IAo+IFNpZ25lZC1vZmYtYnk6 IENoYXJsaWUgU2FsZSA8c29mdHdhcmVzYWxlMDFAZ21haWwuY29tPgo+IC0tLQo+IMKgZ2NjL0No YW5nZUxvZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDQzICsrKysrKysKPiDCoGdjYy9hbGlh cy5jY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMzAgKysrLS0KPiDCoGdjYy9hdXRvLWlu Yy1kZWMuY2PCoMKgwqDCoMKgIHzCoCAxMSArLQo+IMKgZ2NjL2NhbGxzLmNjwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHzCoMKgIDggKy0KPiDCoGdjYy9jZmdleHBhbmQuY2PCoMKgwqDCoMKgwqDC oMKgIHzCoCAxNiArLS0KPiDCoGdjYy9jb21iaW5lLXN0YWNrLWFkai5jYyB8wqAgMzkgKysrLS0t LQo+IMKgZ2NjL2NvbWJpbmUuY2PCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDI0MSArKysrKysrKysr KysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gLS0KPiDCoGdjYy9jb21wYXJlLWVsaW0uY2PC oMKgwqDCoMKgIHzCoMKgIDMgKy0KPiDCoGdjYy9jc2UuY2PCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHzCoCA2NiArKysrKy0tLS0tLQo+IMKgZ2NjL2NzZWxpYi5jY8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfMKgIDM3ICsrKy0tLQo+IMKgZ2NjL2RjZS5jY8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfMKgwqAgNCArLQo+IMKgZ2NjL2R3YXJmMmNmaS5jY8KgwqDCoMKgwqDCoMKgwqAg fMKgwqAgMiArLQo+IMKgZ2NjL2R3YXJmMm91dC5jY8KgwqDCoMKgwqDCoMKgwqAgfMKgIDExICst Cj4gwqBnY2MvZW1pdC1ydGwuY2PCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgNiArLQo+IMKgZ2Nj L2V4cGxvdy5jY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDMxICsrLS0tCj4gwqBnY2MvZXhw ci5jY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAyMyArKy0tCj4gwqBnY2MvZmluYWwu Y2PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDIwICsrLS0KPiDCoGdjYy9mdW5jdGlvbi5j Y8KgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA3ICstCj4gwqBnY2MvZndwcm9wLmNjwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB8wqDCoCAyICstCj4gwqBnY2MvaGFpZmEtc2NoZWQuY2PCoMKgwqDCoMKg wqAgfMKgIDEwICstCj4gwqBnY2MvaWZjdnQuY2PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKg IDExICstCj4gwqBnY2MvaXJhLmNjwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA2 ICstCj4gwqBnY2MvbG9vcC1kb2xvb3AuY2PCoMKgwqDCoMKgwqAgfMKgIDcwICsrKysrKy0tLS0t LQo+IMKgZ2NjL2xvb3AtaXYuY2PCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMjEgKy0tLQo+IMKg Z2NjL2xyYS1jb25zdHJhaW50cy5jY8KgwqAgfMKgIDM0ICsrKy0tLQo+IMKgZ2NjL2xyYS1lbGlt aW5hdGlvbnMuY2PCoCB8wqAgMjUgKystLQo+IMKgZ2NjL2xyYS5jY8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfMKgwqAgNiArLQo+IMKgZ2NjL21vZHVsby1zY2hlZC5jY8KgwqDCoMKgwqAg fMKgwqAgMiArLQo+IMKgZ2NjL3Bvc3RyZWxvYWQuY2PCoMKgwqDCoMKgwqDCoCB8wqAgMjUgKyst LQo+IMKgZ2NjL3JlZ2luZm8uY2PCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMTIgKy0KPiDCoGdj Yy9yZWxvYWQuY2PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMTgwICsrKysrKysrKysrKystLS0t LS0tLS0tLS0tLS0tCj4gwqBnY2MvcmVsb2FkMS5jY8KgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCA4 NSArKysrKystLS0tLS0tLQo+IMKgZ2NjL3Jlb3JnLmNjwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHzCoCAxMiArLQo+IMKgZ2NjL3J0bC5jY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKg wqAgMyArLQo+IMKgZ2NjL3J0bC5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAx MSArKwo+IMKgZ2NjL3J0bGFuYWwuY2PCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMjUgKystLQo+ IMKgZ2NjL3NjaGVkLWRlcHMuY2PCoMKgwqDCoMKgwqDCoCB8wqDCoCA4ICstCj4gwqBnY2Mvc2lt cGxpZnktcnR4LmNjwqDCoMKgwqDCoCB8IDE0MyArKysrKysrKystLS0tLS0tLS0tLS0tLQo+IMKg Z2NjL3Zhci10cmFja2luZy5jY8KgwqDCoMKgwqAgfMKgIDM3ICsrKy0tLQo+IMKgMzkgZmlsZXMg Y2hhbmdlZCwgNTk1IGluc2VydGlvbnMoKyksIDczMSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0t Z2l0IGEvZ2NjL0NoYW5nZUxvZyBiL2djYy9DaGFuZ2VMb2cKPiBpbmRleCBmOTk5ZTJjYmE0My4u MWZkMmM5NGM4NzMgMTAwNjQ0Cj4gLS0tIGEvZ2NjL0NoYW5nZUxvZwo+ICsrKyBiL2djYy9DaGFu Z2VMb2cKPiBAQCAtMSwzICsxLDQ2IEBACj4gKzIwMjItMTEtMjbCoCBDaGFybGllIFNhbGXCoMKg IDxzb2Z0d2FyZXNhbGUwMUBnbWFpbC5jb20+Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCogcnRsLmgg KFBMVVNfUCk6IFJUTCBhZGRpdGlvbiBwcmVkaWNhdGUKPiArwqDCoMKgwqDCoMKgwqAoTUlOVVNf UCk6IFJUTCBzdWJ0cmFjdGlvbiBwcmVkaWNhdGUKPiArwqDCoMKgwqDCoMKgwqAoTVVMVF9QKTog UlRMIG11bHRpcGxpY2F0aW9uIHByZWRpY2F0ZQo+ICvCoMKgwqDCoMKgwqDCoCogYWxpYXMuY2M6 IHVzZSBSVEwgcHJlZGljYXRlcwo+ICvCoMKgwqDCoMKgwqDCoCogYXV0by1pbmMtZGVjLmNjOiB1 c2UgUlRMIHByZWRpY2F0ZXMKPiArwqDCoMKgwqDCoMKgwqAqIGNhbGxzLmNjOiB1c2UgUlRMIHBy ZWRpY2F0ZXMKPiArwqDCoMKgwqDCoMKgwqAqIGNmZ2V4cGFuZC5jYzogdXNlIFJUTCBwcmVkaWNh dGVzCj4gK8KgwqDCoMKgwqDCoMKgKiBjb21iaW5lLXN0YWNrLWFkai5jYzogdXNlIFJUTCBwcmVk aWNhdGVzCj4gK8KgwqDCoMKgwqDCoMKgKiBjb21iaW5lLmNjOiB1c2UgUlRMIHByZWRpY2F0ZXMK PiArwqDCoMKgwqDCoMKgwqAqIGNvbXBhcmUtZWxpbS5jYzogdXNlIFJUTCBwcmVkaWNhdGVzCj4g K8KgwqDCoMKgwqDCoMKgKiBjc2UuY2M6IHVzZSBSVEwgcHJlZGljYXRlcwo+ICvCoMKgwqDCoMKg wqDCoCogY3NlbGliLmNjOiB1c2UgUlRMIHByZWRpY2F0ZXMKPiArwqDCoMKgwqDCoMKgwqAqIGRj ZS5jYzogdXNlIFJUTCBwcmVkaWNhdGVzCj4gK8KgwqDCoMKgwqDCoMKgKiBkd2FyZjJjZmkuY2M6 IHVzZSBSVEwgcHJlZGljYXRlcwo+ICvCoMKgwqDCoMKgwqDCoCogZHdhcmYyb3V0LmNjOiB1c2Ug UlRMIHByZWRpY2F0ZXMKPiArwqDCoMKgwqDCoMKgwqAqIGVtaXQtcnRsLmNjOiB1c2UgUlRMIHBy ZWRpY2F0ZXMKPiArwqDCoMKgwqDCoMKgwqAqIGV4cGxvdy5jYzogdXNlIFJUTCBwcmVkaWNhdGVz Cj4gK8KgwqDCoMKgwqDCoMKgKiBleHByLmNjOiB1c2UgUlRMIHByZWRpY2F0ZXMKPiArwqDCoMKg wqDCoMKgwqAqIGZpbmFsLmNjOiB1c2UgUlRMIHByZWRpY2F0ZXMKPiArwqDCoMKgwqDCoMKgwqAq IGZ1bmN0aW9uLmNjOiB1c2UgUlRMIHByZWRpY2F0ZXMKPiArwqDCoMKgwqDCoMKgwqAqIGZ3cHJv cC5jYzogdXNlIFJUTCBwcmVkaWNhdGVzCj4gK8KgwqDCoMKgwqDCoMKgKiBoYWlmYS1zY2hlZC5j YzogdXNlIFJUTCBwcmVkaWNhdGVzCj4gK8KgwqDCoMKgwqDCoMKgKiBpZmN2dC5jYzogdXNlIFJU TCBwcmVkaWNhdGVzCj4gK8KgwqDCoMKgwqDCoMKgKiBpcmEuY2M6IHVzZSBSVEwgcHJlZGljYXRl cwo+ICvCoMKgwqDCoMKgwqDCoCogbG9vcC1kb2xvb3AuY2M6IHVzZSBSVEwgcHJlZGljYXRlcwo+ ICvCoMKgwqDCoMKgwqDCoCogbG9vcC1pdi5jYzogdXNlIFJUTCBwcmVkaWNhdGVzCj4gK8KgwqDC oMKgwqDCoMKgKiBscmEtY29uc3RyYWludHMuY2M6IHVzZSBSVEwgcHJlZGljYXRlcwo+ICvCoMKg wqDCoMKgwqDCoCogbHJhLWVsaW1pbmF0aW9ucy5jYzogdXNlIFJUTCBwcmVkaWNhdGVzCj4gK8Kg wqDCoMKgwqDCoMKgKiBscmEuY2M6IHVzZSBSVEwgcHJlZGljYXRlcwo+ICvCoMKgwqDCoMKgwqDC oCogbW9kdWxvLXNjaGVkLmNjOiB1c2UgUlRMIHByZWRpY2F0ZXMKPiArwqDCoMKgwqDCoMKgwqAq IHBvc3RyZWxvYWQuY2M6IHVzZSBSVEwgcHJlZGljYXRlcwo+ICvCoMKgwqDCoMKgwqDCoCogcmVn aW5mby5jYzogdXNlIFJUTCBwcmVkaWNhdGVzCj4gK8KgwqDCoMKgwqDCoMKgKiByZWxvYWQuY2M6 IHVzZSBSVEwgcHJlZGljYXRlcwo+ICvCoMKgwqDCoMKgwqDCoCogcmVsb2FkMS5jYzogdXNlIFJU TCBwcmVkaWNhdGVzCj4gK8KgwqDCoMKgwqDCoMKgKiByZW9yZy5jYzogdXNlIFJUTCBwcmVkaWNh dGVzCj4gK8KgwqDCoMKgwqDCoMKgKiBydGwuY2M6IHVzZSBSVEwgcHJlZGljYXRlcwo+ICvCoMKg wqDCoMKgwqDCoCogcnRsYW5hbC5jYzogdXNlIFJUTCBwcmVkaWNhdGVzCj4gK8KgwqDCoMKgwqDC oMKgKiBzY2hlZC1kZXBzLmNjOiB1c2UgUlRMIHByZWRpY2F0ZXMKPiArwqDCoMKgwqDCoMKgwqAq IHNpbXBsaWZ5LXJ0eC5jYzogdXNlIFJUTCBwcmVkaWNhdGVzCj4gK8KgwqDCoMKgwqDCoMKgKiB2 YXItdHJhY2tpbmcuY2M6IHVzZSBSVEwgcHJlZGljYXRlcwo+ICsKPiDCoDIwMjItMTEtMjXCoCBT YW5kcmEgTG9vc2Vtb3JlwqAgPHNhbmRyYUBjb2Rlc291cmNlcnkuY29tPgo+IMKgCj4gwqDCoMKg wqDCoMKgwqDCoCogY29tbW9uLm9wdCAoZm9wZW5tcC10YXJnZXQtc2ltZC1jbG9uZSk6IE5ldyBv cHRpb24uCj4gZGlmZiAtLWdpdCBhL2djYy9hbGlhcy5jYyBiL2djYy9hbGlhcy5jYwo+IGluZGV4 IGM2MjgzN2RkODU0Li4yZDliZDc5ZmUyMSAxMDA2NDQKPiAtLS0gYS9nY2MvYWxpYXMuY2MKPiAr KysgYi9nY2MvYWxpYXMuY2MKPiBAQCAtMTQ3Myw3ICsxNDczLDcgQEAgZmluZF9iYXNlX3ZhbHVl IChydHggc3JjKQo+IMKgwqDCoMKgwqDCoMKgwqAgb3RoZXJ3aXNlLsKgICovCj4gwqDCoMKgwqDC oMKgIGlmIChjb3B5aW5nX2FyZ3VtZW50cwo+IMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAoWEVYUCAo c3JjLCAwKSA9PSBhcmdfcG9pbnRlcl9ydHgKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8 IChHRVRfQ09ERSAoWEVYUCAoc3JjLCAwKSkgPT0gUExVUwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfHwgKFBMVVNfUCAoWEVYUCAoc3JjLCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICYmIFhFWFAgKFhFWFAgKHNyYywgMCksIDApID09IGFyZ19wb2ludGVyX3J0 eCkpKQo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gYXJnX2Jhc2VfdmFsdWU7Cj4gwqDCoMKgwqDC oMKgIHJldHVybiAwOwo+IEBAIC0xNzkwLDcgKzE3OTAsNyBAQCBjYW5vbl9ydHggKHJ0eCB4KQo+ IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gY2Fub25fcnR4ICh0KTsKPiDCoMKgwqDCoCB9Cj4gwqAK PiAtwqAgaWYgKEdFVF9DT0RFICh4KSA9PSBQTFVTKQo+ICvCoCBpZiAoUExVU19QICh4KSkKPiDC oMKgwqDCoCB7Cj4gwqDCoMKgwqDCoMKgIHJ0eCB4MCA9IGNhbm9uX3J0eCAoWEVYUCAoeCwgMCkp Owo+IMKgwqDCoMKgwqDCoCBydHggeDEgPSBjYW5vbl9ydHggKFhFWFAgKHgsIDEpKTsKPiBAQCAt MjM1NywxOSArMjM1NywxNyBAQCBnZXRfYWRkciAocnR4IHgpCj4gwqAKPiDCoMKgIGlmIChHRVRf Q09ERSAoeCkgIT0gVkFMVUUpCj4gwqDCoMKgwqAgewo+IC3CoMKgwqDCoMKgIGlmICgoR0VUX0NP REUgKHgpID09IFBMVVMgfHwgR0VUX0NPREUgKHgpID09IE1JTlVTKQo+IC3CoMKgwqDCoMKgwqDC oMKgICYmIEdFVF9DT0RFIChYRVhQICh4LCAwKSkgPT0gVkFMVUUKPiArwqDCoMKgwqDCoCBpZiAo KFBMVVNfUCAoeCkgfHwgTUlOVVNfUCAoeCkpICYmIEdFVF9DT0RFIChYRVhQICh4LCAwKSkgPT0K PiBWQUxVRQo+IMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVF9TQ0FMQVJfSU5UX1AgKFhFWFAg KHgsIDEpKSkKPiDCoMKgwqDCoMKgwqDCoMKgewo+IMKgwqDCoMKgwqDCoMKgwqDCoCBydHggb3Aw ID0gZ2V0X2FkZHIgKFhFWFAgKHgsIDApKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKG9wMCAh PSBYRVhQICh4LCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBwb2x5X2ludDY0IGM7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiAoR0VUX0NPREUgKHgpID09IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJiYgcG9seV9pbnRfcnR4X3AgKFhFWFAgKHgsIDEpLCAmYykpCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoUExVU19QICh4KSAmJiBwb2x5X2ludF9ydHhfcCAoWEVYUCAoeCwgMSks ICZjKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBwbHVzX2NvbnN0 YW50IChHRVRfTU9ERSAoeCksIG9wMCwgYyk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gc2ltcGxpZnlfZ2VuX2JpbmFyeSAoR0VUX0NPREUgKHgpLCBHRVRfTU9ERSAoeCksCj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wMCwgWEVYUCAoeCwgMSkpOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIHNpbXBsaWZ5X2dlbl9iaW5hcnkgKEdFVF9DT0RFICh4KSwg R0VUX01PREUgKHgpLAo+IG9wMCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgWEVYUCAoeCwg MSkpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqDC oMKgwqDCoMKgIHJldHVybiB4Owo+IEBAIC0yNTcwLDcgKzI1NjgsNyBAQCBtZW1yZWZzX2NvbmZs aWN0X3AgKHBvbHlfaW50NjQgeHNpemUsIHJ0eCB4LAo+IHBvbHlfaW50NjQgeXNpemUsIHJ0eCB5 LAo+IMKgwqAgLyogVGhpcyBjb2RlIHVzZWQgdG8gY2hlY2sgZm9yIGNvbmZsaWN0cyBpbnZvbHZp bmcgc3RhY2sKPiByZWZlcmVuY2VzIGFuZAo+IMKgwqDCoMKgwqAgZ2xvYmFscyBidXQgdGhlIGJh c2UgYWRkcmVzcyBhbGlhcyBjb2RlIG5vdyBoYW5kbGVzIHRoZXNlCj4gY2FzZXMuwqAgKi8KPiDC oAo+IC3CoCBpZiAoR0VUX0NPREUgKHgpID09IFBMVVMpCj4gK8KgIGlmIChQTFVTX1AgKHgpKQo+ IMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqAgLyogVGhlIGZhY3QgdGhhdCBYIGlzIGNhbm9uaWNh bGl6ZWQgbWVhbnMgdGhhdCB0aGlzCj4gwqDCoMKgwqDCoMKgwqDCoCBQTFVTIHJ0eCBpcyBjYW5v bmljYWxpemVkLsKgICovCj4gQEAgLTI1ODUsNyArMjU4Myw3IEBAIG1lbXJlZnNfY29uZmxpY3Rf cCAocG9seV9pbnQ2NCB4c2l6ZSwgcnR4IHgsCj4gcG9seV9pbnQ2NCB5c2l6ZSwgcnR4IHksCj4g wqDCoMKgwqDCoMKgwqDCoHJldHVybiBtZW1yZWZzX2NvbmZsaWN0X3AgKHhzaXplLCB4MCwgeXNp emUsIGNvbnN0MF9ydHgsIGMpOwo+IMKgCj4gwqDCoMKgwqDCoMKgIHBvbHlfaW50NjQgY3gxLCBj eTE7Cj4gLcKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFICh5KSA9PSBQTFVTKQo+ICvCoMKgwqDCoMKg IGlmIChQTFVTX1AgKHkpKQo+IMKgwqDCoMKgwqDCoMKgwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKg IC8qIFRoZSBmYWN0IHRoYXQgWSBpcyBjYW5vbmljYWxpemVkIG1lYW5zIHRoYXQgdGhpcwo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBQTFVTIHJ0eCBpcyBjYW5vbmljYWxpemVkLsKgICovCj4g QEAgLTI2MTcsNyArMjYxNSw3IEBAIG1lbXJlZnNfY29uZmxpY3RfcCAocG9seV9pbnQ2NCB4c2l6 ZSwgcnR4IHgsCj4gcG9seV9pbnQ2NCB5c2l6ZSwgcnR4IHksCj4gwqDCoMKgwqDCoMKgIGVsc2Ug aWYgKHBvbHlfaW50X3J0eF9wICh4MSwgJmN4MSkpCj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBt ZW1yZWZzX2NvbmZsaWN0X3AgKHhzaXplLCB4MCwgeXNpemUsIHksIGMgLSBjeDEpOwo+IMKgwqDC oMKgIH0KPiAtwqAgZWxzZSBpZiAoR0VUX0NPREUgKHkpID09IFBMVVMpCj4gK8KgIGVsc2UgaWYg KFBMVVNfUCAoeSkpCj4gwqDCoMKgwqAgewo+IMKgwqDCoMKgwqDCoCAvKiBUaGUgZmFjdCB0aGF0 IFkgaXMgY2Fub25pY2FsaXplZCBtZWFucyB0aGF0IHRoaXMKPiDCoMKgwqDCoMKgwqDCoMKgIFBM VVMgcnR4IGlzIGNhbm9uaWNhbGl6ZWQuwqAgKi8KPiBAQCAtMzUwNiwxMyArMzUwNCwxMyBAQCBp bml0X2FsaWFzX2FuYWx5c2lzICh2b2lkKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBYRVhQIChub3RlLAo+IDApKSkKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB7Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2V0X3JlZ19rbm93bl92YWx1ZSAo cmVnbm8sIFhFWFAgKG5vdGUsCj4gMCkpOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc2V0X3JlZ19rbm93bl9lcXVpdl9wIChyZWdubywKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSRUdfTk9URV9LSU5EIChub3RlKQo+ ID09IFJFR19FUVVJVik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzZXRfcmVnX2tub3duX2VxdWl2X3AgKHJlZ25vLCBSRUdfTk9URV9LSU5ECj4g KG5vdGUpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgPT0KPiBSRUdfRVFVSVYpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoH0KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBlbHNlIGlmIChERl9SRUdfREVGX0NPVU5UIChyZWdubykgPT0gMQo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdF VF9DT0RFIChzcmMpID09IFBMVVMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBlbHNlIGlmIChERl9SRUdfREVGX0NPVU5UIChyZWdubykgPT0gMSAmJgo+IFBMVVNf UCAoc3JjKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAmJiBSRUdfUCAoWEVYUCAoc3JjLCAwKSkKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAodCA9IGdldF9y ZWdfa25vd25fdmFsdWUgKFJFR05PCj4gKFhFWFAgKHNyYywgMCkpKSkKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAodCA9IGdl dF9yZWdfa25vd25fdmFsdWUgKAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJFR05PIChYRVhQIChzcmMsIDAp KSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICYmIHBvbHlfaW50X3J0eF9wIChYRVhQIChzcmMsIDEpLAo+ICZvZmZzZXQpKQo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHsKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0ID0gcGx1c19j b25zdGFudCAoR0VUX01PREUgKHNyYyksIHQsCj4gb2Zmc2V0KTsKPiBkaWZmIC0tZ2l0IGEvZ2Nj L2F1dG8taW5jLWRlYy5jYyBiL2djYy9hdXRvLWluYy1kZWMuY2MKPiBpbmRleCA0ODFlN2FmNjg5 NS4uZDRjYTVkODk1NGYgMTAwNjQ0Cj4gLS0tIGEvZ2NjL2F1dG8taW5jLWRlYy5jYwo+ICsrKyBi L2djYy9hdXRvLWluYy1kZWMuY2MKPiBAQCAtODgyLDcgKzg4Miw3IEBAIHBhcnNlX2FkZF9vcl9p bmMgKHJ0eF9pbnNuICppbnNuLCBib29sCj4gYmVmb3JlX21lbSkKPiDCoMKgwqDCoCB7Cj4gwqDC oMKgwqDCoMKgIC8qIFByb2Nlc3MgYSA9IGIgKyBjIHdoZXJlIGMgaXMgYSBjb25zdC7CoCAqLwo+ IMKgwqDCoMKgwqDCoCBpbmNfaW5zbi5yZWcxX2lzX2NvbnN0ID0gdHJ1ZTsKPiAtwqDCoMKgwqDC oCBpZiAoR0VUX0NPREUgKFNFVF9TUkMgKHBhdCkpID09IFBMVVMpCj4gK8KgwqDCoMKgwqAgaWYg KFBMVVNfUCAoU0VUX1NSQyAocGF0KSkpCj4gwqDCoMKgwqDCoMKgwqDCoHsKPiDCoMKgwqDCoMKg wqDCoMKgwqAgaW5jX2luc24ucmVnMSA9IFhFWFAgKFNFVF9TUkMgKHBhdCksIDEpOwo+IMKgwqDC oMKgwqDCoMKgwqDCoCBpbmNfaW5zbi5yZWcxX3ZhbCA9IElOVFZBTCAoaW5jX2luc24ucmVnMSk7 Cj4gQEAgLTg5NSw4ICs4OTUsNyBAQCBwYXJzZV9hZGRfb3JfaW5jIChydHhfaW5zbiAqaW5zbiwg Ym9vbAo+IGJlZm9yZV9tZW0pCj4gwqDCoMKgwqDCoMKgIHJldHVybiB0cnVlOwo+IMKgwqDCoMKg IH0KPiDCoMKgIGVsc2UgaWYgKChIQVZFX1BSRV9NT0RJRllfUkVHIHx8IEhBVkVfUE9TVF9NT0RJ RllfUkVHKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqAgJiYgKFJFR19QIChYRVhQIChTRVRfU1JDIChw YXQpLCAxKSkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoCAmJiBHRVRfQ09ERSAoU0VUX1NSQyAocGF0 KSkgPT0gUExVUykKPiArwqDCoMKgwqDCoMKgwqDCoMKgICYmIChSRUdfUCAoWEVYUCAoU0VUX1NS QyAocGF0KSwgMSkpKSAmJiBQTFVTX1AgKFNFVF9TUkMKPiAocGF0KSkpCj4gwqDCoMKgwqAgewo+ IMKgwqDCoMKgwqDCoCAvKiBQcm9jZXNzIGEgPSBiICsgYyB3aGVyZSBjIGlzIGEgcmVnLsKgICov Cj4gwqDCoMKgwqDCoMKgIGluY19pbnNuLnJlZzEgPSBYRVhQIChTRVRfU1JDIChwYXQpLCAxKTsK PiBAQCAtOTY0LDggKzk2Myw3IEBAIGZpbmRfYWRkcmVzcyAocnR4ICphZGRyZXNzX29mX3gsIHJ0 eCBmaW5kcmVnKQo+IMKgwqDCoMKgwqDCoCBtZW1faW5zbi5yZWcxID0gR0VOX0lOVCAobWVtX2lu c24ucmVnMV92YWwpOwo+IMKgwqDCoMKgwqDCoCByZXR1cm4gLTE7Cj4gwqDCoMKgwqAgfQo+IC3C oCBpZiAoY29kZSA9PSBNRU0gJiYgZmluZHJlZyA9PSBpbmNfaW5zbi5yZWdfcmVzCj4gLcKgwqDC oMKgwqAgJiYgR0VUX0NPREUgKFhFWFAgKHgsIDApKSA9PSBQTFVTCj4gK8KgIGlmIChjb2RlID09 IE1FTSAmJiBmaW5kcmVnID09IGluY19pbnNuLnJlZ19yZXMgJiYgUExVU19QIChYRVhQICh4LAo+ IDApKQo+IMKgwqDCoMKgwqDCoCAmJiBydHhfZXF1YWxfcCAoWEVYUCAoWEVYUCAoeCwgMCksIDAp LCBpbmNfaW5zbi5yZWdfcmVzKSkKPiDCoMKgwqDCoCB7Cj4gwqDCoMKgwqDCoMKgIHJ0eCBiID0g WEVYUCAoWEVYUCAoeCwgMCksIDEpOwo+IEBAIC0xMzU3LDggKzEzNTUsNyBAQCBmaW5kX21lbSAo cnR4ICphZGRyZXNzX29mX3gpCj4gwqDCoMKgwqDCoMKgIGlmIChmaW5kX2luYyAodHJ1ZSkpCj4g wqDCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+IMKgwqDCoMKgIH0KPiAtwqAgaWYgKGNvZGUg PT0gTUVNICYmIEdFVF9DT0RFIChYRVhQICh4LCAwKSkgPT0gUExVUwo+IC3CoMKgwqDCoMKgICYm IFJFR19QIChYRVhQIChYRVhQICh4LCAwKSwgMCkpKQo+ICvCoCBpZiAoY29kZSA9PSBNRU0gJiYg UExVU19QIChYRVhQICh4LCAwKSkgJiYgUkVHX1AgKFhFWFAgKFhFWFAgKHgsCj4gMCksIDApKSkK PiDCoMKgwqDCoCB7Cj4gwqDCoMKgwqDCoMKgIHJ0eCByZWcxID0gWEVYUCAoWEVYUCAoeCwgMCks IDEpOwo+IMKgwqDCoMKgwqDCoCBtZW1faW5zbi5tZW1fbG9jID0gYWRkcmVzc19vZl94Owo+IGRp ZmYgLS1naXQgYS9nY2MvY2FsbHMuY2MgYi9nY2MvY2FsbHMuY2MKPiBpbmRleCA2ZGQ2ZjczZTk3 OC4uMWMwMGY0N2M4ZGQgMTAwNjQ0Cj4gLS0tIGEvZ2NjL2NhbGxzLmNjCj4gKysrIGIvZ2NjL2Nh bGxzLmNjCj4gQEAgLTE3ODIsNyArMTc4Miw3IEBAIGNvbXB1dGVfYXJndW1lbnRfYWRkcmVzc2Vz IChzdHJ1Y3QgYXJnX2RhdGEKPiAqYXJncywgcnR4IGFyZ2Jsb2NrLCBpbnQgbnVtX2FjdHVhbHMK PiDCoMKgwqDCoMKgwqAgaW50IGk7Cj4gwqDCoMKgwqDCoMKgIHBvbHlfaW50NjQgYXJnX29mZnNl dCA9IDA7Cj4gwqAKPiAtwqDCoMKgwqDCoCBpZiAoR0VUX0NPREUgKGFyZ2Jsb2NrKSA9PSBQTFVT KQo+ICvCoMKgwqDCoMKgIGlmIChQTFVTX1AgKGFyZ2Jsb2NrKSkKPiDCoMKgwqDCoMKgwqDCoMKg ewo+IMKgwqDCoMKgwqDCoMKgwqDCoCBhcmdfcmVnID0gWEVYUCAoYXJnYmxvY2ssIDApOwo+IMKg wqDCoMKgwqDCoMKgwqDCoCBhcmdfb2Zmc2V0ID0gcnR4X3RvX3BvbHlfaW50NjQgKFhFWFAgKGFy Z2Jsb2NrLCAxKSk7Cj4gQEAgLTE5OTEsNyArMTk5MSw3IEBAIGludGVybmFsX2FyZ19wb2ludGVy X2Jhc2VkX2V4cCAoY29uc3RfcnR4IHJ0bCwKPiBib29sIHRvcGxldmVsKQo+IMKgwqDCoMKgIHJl dHVybiBOVUxMX1JUWDsKPiDCoAo+IMKgwqAgcG9seV9pbnQ2NCBvZmZzZXQ7Cj4gLcKgIGlmIChH RVRfQ09ERSAocnRsKSA9PSBQTFVTICYmIHBvbHlfaW50X3J0eF9wIChYRVhQIChydGwsIDEpLAo+ ICZvZmZzZXQpKQo+ICvCoCBpZiAoUExVU19QIChydGwpICYmIHBvbHlfaW50X3J0eF9wIChYRVhQ IChydGwsIDEpLCAmb2Zmc2V0KSkKPiDCoMKgwqDCoCB7Cj4gwqDCoMKgwqDCoMKgIHJ0eCB2YWwg PSBpbnRlcm5hbF9hcmdfcG9pbnRlcl9iYXNlZF9leHAgKFhFWFAgKHJ0bCwgMCksCj4gdG9wbGV2 ZWwpOwo+IMKgwqDCoMKgwqDCoCBpZiAodmFsID09IE5VTExfUlRYIHx8IHZhbCA9PSBwY19ydHgp Cj4gQEAgLTQ5MDAsNyArNDkwMCw3IEBAIHN0b3JlX29uZV9hcmcgKHN0cnVjdCBhcmdfZGF0YSAq YXJnLCBydHgKPiBhcmdibG9jaywgaW50IGZsYWdzLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIHN0YWNrX3Nsb3QgaXMgbmVnYXRpdmUs IGJ1dCB3ZSB3YW50IHRvIGluZGV4Cj4gc3RhY2tfdXNhZ2VfbWFwCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgd2l0aCBwb3NpdGl2ZSB2YWx1ZXMuwqAgKi8KPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlmIChHRVRfQ09ERSAoWEVYUCAoYXJnLT5zdGFja19zbG90LCAwKSkg PT0gUExVUykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChQTFVTX1AgKFhFWFAgKGFy Zy0+c3RhY2tfc2xvdCwgMCkpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgewo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcnR4IG9mZnNldCA9IFhFWFAgKFhF WFAgKGFyZy0+c3RhY2tfc2xvdCwgMCksIDEpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdXBwZXJfYm91bmQgPSAtcnR4X3RvX3BvbHlfaW50NjQgKG9mZnNldCkgKyAxOwo+ IEBAIC00OTEyLDcgKzQ5MTIsNyBAQCBzdG9yZV9vbmVfYXJnIChzdHJ1Y3QgYXJnX2RhdGEgKmFy ZywgcnR4Cj4gYXJnYmxvY2ssIGludCBmbGFncywKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0K PiDCoMKgwqDCoMKgwqDCoMKgwqAgZWxzZQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgewo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFIChYRVhQIChhcmctPnN0YWNrX3Ns b3QsIDApKSA9PSBQTFVTKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKFBMVVNfUCAo WEVYUCAoYXJnLT5zdGFja19zbG90LCAwKSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBydHggb2Zmc2V0ID0g WEVYUCAoWEVYUCAoYXJnLT5zdGFja19zbG90LCAwKSwgMSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBsb3dlcl9ib3VuZCA9IHJ0eF90b19wb2x5X2ludDY0IChvZmZzZXQp Owo+IGRpZmYgLS1naXQgYS9nY2MvY2ZnZXhwYW5kLmNjIGIvZ2NjL2NmZ2V4cGFuZC5jYwo+IGlu ZGV4IGRkMjlmZmZmYzAzLi5lODM5ZjMwMzc4ZCAxMDA2NDQKPiAtLS0gYS9nY2MvY2ZnZXhwYW5k LmNjCj4gKysrIGIvZ2NjL2NmZ2V4cGFuZC5jYwo+IEBAIC00Mjc3LDggKzQyNzcsNyBAQCBjb252 ZXJ0X2RlYnVnX21lbW9yeV9hZGRyZXNzIChzY2FsYXJfaW50X21vZGUKPiBtb2RlLCBydHggeCwK PiDCoMKgwqDCoMKgwqDCoMKgY2FzZSBTVUJSRUc6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgo U1VCUkVHX1BST01PVEVEX1ZBUl9QICh4KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fHwgKFJFR19QIChTVUJSRUdfUkVHICh4KSkgJiYgUkVHX1BPSU5URVIgKFNVQlJFR19SRUcKPiAo eCkpKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCAoR0VUX0NPREUgKFNVQlJFR19S RUcgKHgpKSA9PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYg UkVHX1AgKFhFWFAgKFNVQlJFR19SRUcgKHgpLCAwKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfHwgKFBMVVNfUCAoU1VCUkVHX1JFRyAoeCkpICYmIFJFR19QIChYRVhQIChTVUJSRUdf UkVHCj4gKHgpLCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYg UkVHX1BPSU5URVIgKFhFWFAgKFNVQlJFR19SRUcgKHgpLCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgQ09OU1RfSU5UX1AgKFhFWFAgKFNVQlJFR19SRUcgKHgp LCAxKSkpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9NT0RFIChTVUJSRUdf UkVHICh4KSkgPT0gbW9kZSkKPiBAQCAtNDM5OCwxMiArNDM5NywxMCBAQCBleHBhbmRfZGVidWdf cGFybV9kZWNsICh0cmVlIGRlY2wpCj4gwqDCoMKgwqDCoMKgIHJldHVybiBydGw7Cj4gwqDCoMKg wqAgfQo+IMKgCj4gLcKgIGlmIChpbmNvbWluZwo+IC3CoMKgwqDCoMKgICYmIEdFVF9NT0RFIChp bmNvbWluZykgIT0gQkxLbW9kZQo+IC3CoMKgwqDCoMKgICYmICFUUkVFX0FERFJFU1NBQkxFIChk ZWNsKQo+ICvCoCBpZiAoaW5jb21pbmcgJiYgR0VUX01PREUgKGluY29taW5nKSAhPSBCTEttb2Rl ICYmCj4gIVRSRUVfQUREUkVTU0FCTEUgKGRlY2wpCj4gwqDCoMKgwqDCoMKgICYmIE1FTV9QIChp bmNvbWluZykKPiDCoMKgwqDCoMKgwqAgJiYgKFhFWFAgKGluY29taW5nLCAwKSA9PSB2aXJ0dWFs X2luY29taW5nX2FyZ3NfcnR4Cj4gLcKgwqDCoMKgwqDCoMKgwqAgfHwgKEdFVF9DT0RFIChYRVhQ IChpbmNvbWluZywgMCkpID09IFBMVVMKPiArwqDCoMKgwqDCoMKgwqDCoCB8fCAoUExVU19QIChY RVhQIChpbmNvbWluZywgMCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgWEVYUCAo WEVYUCAoaW5jb21pbmcsIDApLCAwKSA9PQo+IHZpcnR1YWxfaW5jb21pbmdfYXJnc19ydHgKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAoWEVYUCAoaW5j b21pbmcsIDApLCAxKSkpKSkKPiDCoMKgwqDCoCByZXR1cm4gY29weV9ydHggKGluY29taW5nKTsK PiBAQCAtNDY4Nyw3ICs0Njg0LDcgQEAgZXhwYW5kX2RlYnVnX2V4cHIgKHRyZWUgZXhwKQo+IMKg wqDCoMKgwqDCoCBpZiAoVFJFRV9DT0RFIChleHApID09IE1FTV9SRUYpCj4gwqDCoMKgwqDCoMKg wqDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFIChvcDApID09IERFQlVHX0lN UExJQ0lUX1BUUgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgKEdFVF9DT0RFIChvcDAp ID09IFBMVVMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IChQTFVTX1AgKG9wMCkKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChYRVhQIChvcDAs IDApKSA9PSBERUJVR19JTVBMSUNJVF9QVFIpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyog KG1lbSAoZGVidWdfaW1wbGljaXRfcHRyKSkgbWlnaHQgY29uZnVzZSBhbGlhc2luZy4KPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEluc3RlYWQganVzdCB1c2UgZ2V0X2lubmVyX3JlZmVy ZW5jZS7CoCAqLwo+IEBAIC01MjA0LDExICs1MjAxLDEwIEBAIGV4cGFuZF9kZWJ1Z19leHByICh0 cmVlIGV4cCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBUUkVFX0NPREUgKFRSRUVf T1BFUkFORCAoVFJFRV9PUEVSQU5EIChleHAsIDApLCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCA9PSBBRERSX0VYUFIpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB7Cj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvcDAgPSBleHBhbmRfZGVidWdfZXhwciAoVFJFRV9P UEVSQU5EIChUUkVFX09QRVJBTkQKPiAoZXhwLCAwKSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDApKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IG9wMCA9IGV4cGFuZF9kZWJ1Z19leHByIChUUkVFX09QRVJBTkQgKFRSRUVfT1BFUkFORAo+IChl eHAsIDApLCAwKSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKG9wMCAhPSBOVUxM Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAoR0VUX0NPREUgKG9wMCkg PT0gREVCVUdfSU1QTElDSVRfUFRSCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfHwgKEdFVF9DT0RFIChvcDApID09IFBMVVMKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCAoUExVU19QIChvcDApCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhFWFAgKG9w MCwgMCkpID09Cj4gREVCVUdfSU1QTElDSVRfUFRSCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgQ09OU1RfSU5UX1AgKFhFWFAgKG9wMCwgMSkp KSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB7Cj4gZGlmZiAtLWdpdCBhL2dj Yy9jb21iaW5lLXN0YWNrLWFkai5jYyBiL2djYy9jb21iaW5lLXN0YWNrLWFkai5jYwo+IGluZGV4 IGU3NmQ2MGE4ZjdlLi5jZTMyNzY1MTNlYiAxMDA2NDQKPiAtLS0gYS9nY2MvY29tYmluZS1zdGFj ay1hZGouY2MKPiArKysgYi9nY2MvY29tYmluZS1zdGFjay1hZGouY2MKPiBAQCAtMTAxLDggKzEw MSw3IEBAIHN0YWNrX21lbXJlZl9wIChydHggeCkKPiDCoAo+IMKgwqAgaWYgKHggPT0gc3RhY2tf cG9pbnRlcl9ydHgpCj4gwqDCoMKgwqAgcmV0dXJuIDE7Cj4gLcKgIGlmIChHRVRfQ09ERSAoeCkg PT0gUExVUwo+IC3CoMKgwqDCoMKgICYmIFhFWFAgKHgsIDApID09IHN0YWNrX3BvaW50ZXJfcnR4 Cj4gK8KgIGlmIChQTFVTX1AgKHgpICYmIFhFWFAgKHgsIDApID09IHN0YWNrX3BvaW50ZXJfcnR4 Cj4gwqDCoMKgwqDCoMKgICYmIENPTlNUX0lOVF9QIChYRVhQICh4LCAxKSkpCj4gwqDCoMKgwqAg cmV0dXJuIDE7Cj4gwqAKPiBAQCAtNTcwLDE4ICs1NjksMTYgQEAgY29tYmluZV9zdGFja19hZGp1 c3RtZW50c19mb3JfYmxvY2sKPiAoYmFzaWNfYmxvY2sgYmIsIGJpdG1hcCBsaXZlKQo+IMKgwqDC oMKgwqDCoMKgwqDCoCBIT1NUX1dJREVfSU5UIHRoaXNfYWRqdXN0ID0gMDsKPiDCoAo+IMKgwqDC oMKgwqDCoMKgwqDCoCAvKiBGaW5kIGNvbnN0YW50IGFkZGl0aW9ucyB0byB0aGUgc3RhY2sgcG9p bnRlci7CoCAqLwo+IC3CoMKgwqDCoMKgwqDCoMKgIGlmIChkZXN0ID09IHN0YWNrX3BvaW50ZXJf cnR4Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBHRVRfQ09ERSAoc3JjKSA9PSBQTFVT Cj4gK8KgwqDCoMKgwqDCoMKgwqAgaWYgKGRlc3QgPT0gc3RhY2tfcG9pbnRlcl9ydHggJiYgUExV U19QIChzcmMpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgWEVYUCAoc3JjLCAwKSA9 PSBzdGFja19wb2ludGVyX3J0eAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIENPTlNU X0lOVF9QIChYRVhQIChzcmMsIDEpKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRoaXNfYWRq dXN0ID0gSU5UVkFMIChYRVhQIChzcmMsIDEpKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgLyogT3Ig c3VjaCBhZGRpdGlvbnMgdHVybmVkIGJ5IHBvc3RyZWxvYWQgaW50byBhIHN0b3JlIG9mCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVxdWl2YWxlbnQgcmVnaXN0ZXIuwqAgKi8KPiAtwqDCoMKg wqDCoMKgwqDCoCBlbHNlIGlmIChkZXN0ID09IHN0YWNrX3BvaW50ZXJfcnR4Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgUkVHX1AgKHNyYykKPiArwqDCoMKgwqDCoMKg wqDCoCBlbHNlIGlmIChkZXN0ID09IHN0YWNrX3BvaW50ZXJfcnR4ICYmIFJFR19QIChzcmMpCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIFJFR05PIChzcmMpICE9IFNU QUNLX1BPSU5URVJfUkVHTlVNKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJ0eCBlcXVh bCA9IGZpbmRfcmVnX25vdGUgKGluc24sIFJFR19FUVVBTCwKPiBOVUxMX1JUWCkpCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoR0VUX0NPREUgKFhFWFAgKGVxdWFsLCAwKSkgPT0gUExV Uwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKFBMVVNfUCAoWEVYUCAoZXF1YWwsIDAp KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgWEVYUCAoWEVYUCAoZXF1 YWwsIDApLCAwKSA9PSBzdGFja19wb2ludGVyX3J0eAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgJiYgQ09OU1RfSU5UX1AgKFhFWFAgKFhFWFAgKGVxdWFsLCAwKSwgMSkpKQo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGhpc19hZGp1c3QgPSBJTlRWQUwgKFhF WFAgKFhFWFAgKGVxdWFsLCAwKSwgMSkpOwo+IEBAIC03MTMsMjcgKzcxMCwyNSBAQCBjb21iaW5l X3N0YWNrX2FkanVzdG1lbnRzX2Zvcl9ibG9jawo+IChiYXNpY19ibG9jayBiYiwgYml0bWFwIGxp dmUpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJlIGFuIGFsbG9jYXRpb24uwqAgKi8KPiDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKE1FTV9QIChkZXN0KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICYmICgoU1RBQ0tfR1JPV1NfRE9XTldBUkQKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCA/IChHRVRfQ09ERSAoWEVYUCAoZGVzdCwgMCkpID09IFBSRV9ERUMKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBrbm93bl9lcSAobGFz dF9zcF9hZGp1c3QsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRVRfTU9ERV9TSVpFIChHRVRfTU9ERSAoZGVzdCkp KSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6IChHRVRfQ09ERSAoWEVY UCAoZGVzdCwgMCkpID09IFBSRV9JTkMKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmJiBrbm93bl9lcSAoLWxhc3Rfc3BfYWRqdXN0LAo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VU X01PREVfU0laRSAoR0VUX01PREUgKGRlc3QpKSkpKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB8fCAoKFNUQUNLX0dST1dTX0RPV05XQVJECj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA/IGxhc3Rfc3BfYWRqdXN0ID49IDAgOiBsYXN0X3Nw X2FkanVzdCA8PSAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA/ IChHRVRfQ09ERSAoWEVYUCAoZGVzdCwgMCkpID09IFBSRV9ERUMKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCYmIGtub3duX2VxIChsYXN0X3NwX2FkanVz dCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBHRVRfTU9ERV9TSVpFIChHRVRfTU9ERQo+IChkZXN0KSkpKQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6IChHRVRfQ09ERSAoWEVY UCAoZGVzdCwgMCkpID09IFBSRV9JTkMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCYmIGtub3duX2VxICgtbGFzdF9zcF9hZGp1c3QsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgR0VUX01PREVfU0laRSAoR0VUX01PREUKPiAoZGVzdCkpKSkpCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8ICgoU1RBQ0tfR1JPV1NfRE9XTldBUkQgPyBsYXN0X3Nw X2FkanVzdCA+PSAwCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA6IGxhc3Rfc3BfYWRq dXN0IDw9IDApCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYm IEdFVF9DT0RFIChYRVhQIChkZXN0LCAwKSkgPT0gUFJFX01PRElGWQo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChYRVhQIChYRVhQIChkZXN0 LCAwKSwgMSkpID09IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAmJiBYRVhQIChYRVhQIChYRVhQIChkZXN0LCAwKSwgMSksIDApCj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPT0gc3RhY2tfcG9pbnRlcl9ydHgK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBQTFVTX1AgKFhF WFAgKFhFWFAgKGRlc3QsIDApLCAxKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmJiBYRVhQIChYRVhQIChYRVhQIChkZXN0LCAwKSwgMSksIDApID09Cj4gc3Rh Y2tfcG9pbnRlcl9ydHgKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJiYgR0VUX0NPREUgKFhFWFAgKFhFWFAgKFhFWFAgKGRlc3QsIDApLCAxKSwKPiAxKSkKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9PSBDT05TVF9J TlQKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg PT0gQ09OU1RfSU5UCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICYmIElOVFZBTCAoWEVYUCAoWEVYUCAoWEVYUCAoZGVzdCwgMCksIDEpLCAxKSkKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9PSAtbGFzdF9zcF9hZGp1 c3QpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCA9PSAtbGFzdF9zcF9hZGp1c3QpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIFhF WFAgKFhFWFAgKGRlc3QsIDApLCAwKSA9PSBzdGFja19wb2ludGVyX3J0eAo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICYmICFyZWdfbWVudGlvbmVkX3AgKHN0YWNrX3BvaW50ZXJfcnR4LCBz cmMpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgbWVtb3J5X2FkZHJlc3NfcCAoR0VU X01PREUgKGRlc3QpLAo+IHN0YWNrX3BvaW50ZXJfcnR4KQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgJiYgdHJ5X2FwcGx5X3N0YWNrX2FkanVzdG1lbnQgKGluc24sIHJlZmxpc3QsIDAsCj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC1sYXN0X3NwX2FkanVzdCwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICYmIHRyeV9hcHBseV9zdGFja19hZGp1c3RtZW50IChpbnNuLCBy ZWZsaXN0LCAwLCAtCj4gbGFzdF9zcF9hZGp1c3QsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBOVUxMLCBOVUxMKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAobGFzdDJfc3Bfc2V0KQo+IGRpZmYgLS1naXQgYS9nY2Mv Y29tYmluZS5jYyBiL2djYy9jb21iaW5lLmNjCj4gaW5kZXggYTVmYWJmMzk3ZjcuLmQ2MzQ1NWVm ZDFmIDEwMDY0NAo+IC0tLSBhL2djYy9jb21iaW5lLmNjCj4gKysrIGIvZ2NjL2NvbWJpbmUuY2MK PiBAQCAtMzAxNiwxOSArMzAxNiwxNyBAQCB0cnlfY29tYmluZSAocnR4X2luc24gKmkzLCBydHhf aW5zbiAqaTIsCj4gcnR4X2luc24gKmkxLCBydHhfaW5zbiAqaTAsCj4gwqDCoCAvKiBTZWUgaWYg YW55IG9mIHRoZSBpbnNucyBpcyBhIE1VTFQgb3BlcmF0aW9uLsKgIFVubGVzcyBvbmUgaXMsIHdl Cj4gd2lsbAo+IMKgwqDCoMKgwqAgcmVqZWN0IGEgY29tYmluYXRpb24gdGhhdCBpcywgc2luY2Ug aXQgbXVzdCBiZSBzbG93ZXIuwqAgQmUKPiBjb25zZXJ2YXRpdmUKPiDCoMKgwqDCoMKgIGhlcmUu wqAgKi8KPiAtwqAgaWYgKEdFVF9DT0RFIChpMnNyYykgPT0gTVVMVAo+IC3CoMKgwqDCoMKgIHx8 IChpMSAhPSAwICYmIEdFVF9DT0RFIChpMXNyYykgPT0gTVVMVCkKPiAtwqDCoMKgwqDCoCB8fCAo aTAgIT0gMCAmJiBHRVRfQ09ERSAoaTBzcmMpID09IE1VTFQpCj4gLcKgwqDCoMKgwqAgfHwgKEdF VF9DT0RFIChQQVRURVJOIChpMykpID09IFNFVAo+IC3CoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9D T0RFIChTRVRfU1JDIChQQVRURVJOIChpMykpKSA9PSBNVUxUKSkKPiArwqAgaWYgKE1VTFRfUCAo aTJzcmMpIHx8IChpMSAhPSAwICYmIE1VTFRfUCAoaTFzcmMpKQo+ICvCoMKgwqDCoMKgIHx8IChp MCAhPSAwICYmIE1VTFRfUCAoaTBzcmMpKQo+ICvCoMKgwqDCoMKgIHx8IChHRVRfQ09ERSAoUEFU VEVSTiAoaTMpKSA9PSBTRVQgJiYgTVVMVF9QIChTRVRfU1JDIChQQVRURVJOCj4gKGkzKSkpKSkK PiDCoMKgwqDCoCBoYXZlX211bHQgPSAxOwo+IMKgCj4gLcKgIC8qIElmIEkzIGhhcyBhbiBpbmMs IHRoZW4gZ2l2ZSB1cCBpZiBJMSBvciBJMiB1c2VzIHRoZSByZWcgdGhhdCBpcwo+IGluYydkLgo+ IC3CoMKgwqDCoCBXZSB1c2VkIHRvIGRvIHRoaXMgRVhDRVBUIGluIG9uZSBjYXNlOiBJMyBoYXMg YSBwb3N0LWluYyBpbiBhbgo+IC3CoMKgwqDCoCBvdXRwdXQgb3BlcmFuZC7CoCBIb3dldmVyLCB0 aGF0IGV4Y2VwdGlvbiBjYW4gZ2l2ZSByaXNlIHRvIGluc25zCj4gbGlrZQo+IC3CoMKgwqDCoMKg wqDCoG1vdiByMywocjMpKwo+IC3CoMKgwqDCoCB3aGljaCBpcyBhIGZhbW91cyBpbnNuIG9uIHRo ZSBQRFAtMTEgd2hlcmUgdGhlIHZhbHVlIG9mIHIzIHVzZWQKPiBhcyB0aGUKPiAtwqDCoMKgwqAg c291cmNlIHdhcyBtb2RlbC1kZXBlbmRlbnQuwqAgQXZvaWQgdGhpcyBzb3J0IG9mIHRoaW5nLsKg ICovCj4gK8KgwqDCoCAvKiBJZiBJMyBoYXMgYW4gaW5jLCB0aGVuIGdpdmUgdXAgaWYgSTEgb3Ig STIgdXNlcyB0aGUgcmVnIHRoYXQKPiBpcyBpbmMnZC4KPiArwqDCoMKgwqDCoMKgIFdlIHVzZWQg dG8gZG8gdGhpcyBFWENFUFQgaW4gb25lIGNhc2U6IEkzIGhhcyBhIHBvc3QtaW5jIGluCj4gYW4K PiArwqDCoMKgwqDCoMKgIG91dHB1dCBvcGVyYW5kLsKgIEhvd2V2ZXIsIHRoYXQgZXhjZXB0aW9u IGNhbiBnaXZlIHJpc2UgdG8KPiBpbnNucyBsaWtlCj4gK8KgwqDCoMKgwqDCoMKgwqAgbW92IHIz LChyMykrCj4gK8KgwqDCoMKgwqDCoCB3aGljaCBpcyBhIGZhbW91cyBpbnNuIG9uIHRoZSBQRFAt MTEgd2hlcmUgdGhlIHZhbHVlIG9mIHIzCj4gdXNlZCBhcyB0aGUKPiArwqDCoMKgwqDCoMKgIHNv dXJjZSB3YXMgbW9kZWwtZGVwZW5kZW50LsKgIEF2b2lkIHRoaXMgc29ydCBvZiB0aGluZy7CoCAq Lwo+IMKgCj4gwqAjaWYgMAo+IMKgwqAgaWYgKCEoR0VUX0NPREUgKFBBVFRFUk4gKGkzKSkgPT0g U0VUCj4gQEAgLTMzODMsMTUgKzMzODEsMTIgQEAgdHJ5X2NvbWJpbmUgKHJ0eF9pbnNuICppMywg cnR4X2luc24gKmkyLAo+IHJ0eF9pbnNuICppMSwgcnR4X2luc24gKmkwLAo+IMKgCj4gwqDCoCAv KiBGYWlsIGlmIGFuIGF1dG9pbmNyZW1lbnQgc2lkZS1lZmZlY3QgaGFzIGJlZW4gZHVwbGljYXRl ZC7CoCBCZQo+IGNhcmVmdWwKPiDCoMKgwqDCoMKgIHRvIGNvdW50IGFsbCB0aGUgd2F5cyB0aGF0 IEkyU1JDIGFuZCBJMVNSQyBjYW4gYmUgdXNlZC7CoCAqLwo+IC3CoCBpZiAoKEZJTkRfUkVHX0lO Q19OT1RFIChpMiwgTlVMTF9SVFgpICE9IDAKPiAtwqDCoMKgwqDCoMKgICYmIGkyX2lzX3VzZWQg KyBhZGRlZF9zZXRzXzIgPiAxKQo+ICvCoCBpZiAoKEZJTkRfUkVHX0lOQ19OT1RFIChpMiwgTlVM TF9SVFgpICE9IDAgJiYgaTJfaXNfdXNlZCArCj4gYWRkZWRfc2V0c18yID4gMSkKPiDCoMKgwqDC oMKgwqAgfHwgKGkxICE9IDAgJiYgRklORF9SRUdfSU5DX05PVEUgKGkxLCBOVUxMX1JUWCkgIT0g MAo+IC3CoMKgwqDCoMKgwqDCoMKgICYmIChpMV9pc191c2VkICsgYWRkZWRfc2V0c18xICsgKGFk ZGVkX3NldHNfMiAmJgo+IGkxX2ZlZWRzX2kyX24pCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCA+IDEpKQo+ICvCoMKgwqDCoMKgwqDCoMKgICYmIChpMV9pc191c2VkICsgYWRkZWRfc2V0c18x ICsgKGFkZGVkX3NldHNfMiAmJgo+IGkxX2ZlZWRzX2kyX24pID4gMSkpCj4gwqDCoMKgwqDCoMKg IHx8IChpMCAhPSAwICYmIEZJTkRfUkVHX0lOQ19OT1RFIChpMCwgTlVMTF9SVFgpICE9IDAKPiAt wqDCoMKgwqDCoMKgwqDCoCAmJiAobl9vY2N1cnJlbmNlcyArIGFkZGVkX3NldHNfMAo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKyAoYWRkZWRfc2V0c18xICYmIGkwX2ZlZWRzX2kxX24pCj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArIChhZGRlZF9zZXRzXzIgJiYgaTBfZmVlZHNfaTJf bikKPiArwqDCoMKgwqDCoMKgwqDCoCAmJiAobl9vY2N1cnJlbmNlcyArIGFkZGVkX3NldHNfMCAr IChhZGRlZF9zZXRzXzEgJiYKPiBpMF9mZWVkc19pMV9uKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqArIChhZGRlZF9zZXRzXzIgJiYgaTBfZmVlZHNfaTJfbikKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCA+IDEpKQo+IMKgwqDCoMKgwqDCoCAvKiBGYWlsIGlmIHdlIHRyaWVk IHRvIG1ha2UgYSBuZXcgcmVnaXN0ZXIuwqAgKi8KPiDCoMKgwqDCoMKgwqAgfHwgbWF4X3JlZ19u dW0gKCkgIT0gbWF4cmVnCj4gQEAgLTMzOTksOCArMzM5NCw4IEBAIHRyeV9jb21iaW5lIChydHhf aW5zbiAqaTMsIHJ0eF9pbnNuICppMiwKPiBydHhfaW5zbiAqaTEsIHJ0eF9pbnNuICppMCwKPiDC oMKgwqDCoMKgwqAgfHwgR0VUX0NPREUgKG5ld3BhdCkgPT0gQ0xPQkJFUgo+IMKgwqDCoMKgwqDC oCAvKiBGYWlsIGlmIHRoaXMgbmV3IHBhdHRlcm4gaXMgYSBNVUxUIGFuZCB3ZSBkaWRuJ3QgaGF2 ZSBvbmUKPiBiZWZvcmUKPiDCoMKgwqDCoMKgwqDCoMKgIGF0IHRoZSBvdXRlciBsZXZlbC7CoCAq Lwo+IC3CoMKgwqDCoMKgIHx8IChHRVRfQ09ERSAobmV3cGF0KSA9PSBTRVQgJiYgR0VUX0NPREUg KFNFVF9TUkMgKG5ld3BhdCkpID09Cj4gTVVMVAo+IC3CoMKgwqDCoMKgwqDCoMKgICYmICEgaGF2 ZV9tdWx0KSkKPiArwqDCoMKgwqDCoCB8fCBHRVRfQ09ERSAobmV3cGF0KSA9PSBTRVQKPiArwqDC oMKgwqDCoMKgwqDCoMKgICYmIE1VTFRfUCAoR0VUX0NPREUgKFNFVF9TUkMgKG5ld3BhdCkpICYm ICFoYXZlX211bHQpKQo+IMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqAgdW5kb19hbGwgKCk7Cj4g wqDCoMKgwqDCoMKgIHJldHVybiAwOwo+IEBAIC0zNzY2LDggKzM3NjEsNyBAQCB0cnlfY29tYmlu ZSAocnR4X2luc24gKmkzLCBydHhfaW5zbiAqaTIsCj4gcnR4X2luc24gKmkxLCBydHhfaW5zbiAq aTAsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgwqAg LyogU2ltaWxhcmx5IGZvciAocGx1cyAobXVsdCBGT08gKGNvbnN0X2ludCBwb3cyKSkpLsKgICov Cj4gLcKgwqDCoMKgwqDCoMKgwqAgaWYgKHNwbGl0X2NvZGUgPT0gUExVUwo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhFWFAgKCpzcGxpdCwgMCkpID09IE1VTFQKPiAr wqDCoMKgwqDCoMKgwqDCoCBpZiAoc3BsaXRfY29kZSA9PSBQTFVTICYmIE1VTFRfUCAoWEVYUCAo KnNwbGl0LCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVF9JTlRfUCAo WEVYUCAoWEVYUCAoKnNwbGl0LCAwKSwgMSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg JiYgSU5UVkFMIChYRVhQIChYRVhQICgqc3BsaXQsIDApLCAxKSkgPiAwCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJiYgKGkgPSBleGFjdF9sb2cyIChVSU5UVkFMIChYRVhQIChYRVhQICgq c3BsaXQsIDApLAo+IDEpKSkpID49IDApCj4gQEAgLTQ4ODAsMTQgKzQ4NzQsMTMgQEAgZmluZF9z cGxpdF9wb2ludCAocnR4ICpsb2MsIHJ0eF9pbnNuICppbnNuLAo+IGJvb2wgc2V0X3NyYykKPiDC oMKgwqDCoMKgwqDCoMKgIHRoZSBtYWNoaW5lLXNwZWNpZmljIHdheSB0byBzcGxpdCBsYXJnZSBj b25zdGFudHMuwqAgV2UgdXNlCj4gwqDCoMKgwqDCoMKgwqDCoCB0aGUgZmlyc3QgcHNldWRvLXJl ZyAob25lIG9mIHRoZSB2aXJ0dWFsIHJlZ3MpIGFzIGEKPiBwbGFjZWhvbGRlcjsKPiDCoMKgwqDC oMKgwqDCoMKgIGl0IHdpbGwgbm90IHJlbWFpbiBpbiB0aGUgcmVzdWx0LsKgICovCj4gLcKgwqDC oMKgwqAgaWYgKEdFVF9DT0RFIChYRVhQICh4LCAwKSkgPT0gUExVUwo+IC3CoMKgwqDCoMKgwqDC oMKgICYmIENPTlNUX0lOVF9QIChYRVhQIChYRVhQICh4LCAwKSwgMSkpCj4gLcKgwqDCoMKgwqDC oMKgwqAgJiYgISBtZW1vcnlfYWRkcmVzc19hZGRyX3NwYWNlX3AgKEdFVF9NT0RFICh4KSwgWEVY UCAoeCwKPiAwKSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE1FTV9BRERSX1NQQUNF ICh4KSkpCj4gK8KgwqDCoMKgwqAgaWYgKFBMVVNfUCAoWEVYUCAoeCwgMCkpICYmIENPTlNUX0lO VF9QIChYRVhQIChYRVhQICh4LCAwKSwKPiAxKSkKPiArwqDCoMKgwqDCoMKgwqDCoCAmJiAhbWVt b3J5X2FkZHJlc3NfYWRkcl9zcGFjZV9wIChHRVRfTU9ERSAoeCksIFhFWFAgKHgsIDApLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE1FTV9BRERSX1NQQUNFICh4KSkpCj4gwqDCoMKgwqDC oMKgwqDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgcnR4IHJlZyA9IHJlZ25vX3JlZ19ydHhbRklS U1RfUFNFVURPX1JFR0lTVEVSXTsKPiAtwqDCoMKgwqDCoMKgwqDCoCBydHhfaW5zbiAqc2VxID0g Y29tYmluZV9zcGxpdF9pbnNucyAoZ2VuX3J0eF9TRVQgKHJlZywgWEVYUAo+ICh4LCAwKSksCj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdWJzdF9pbnNuKTsKPiArwqDCoMKg wqDCoMKgwqDCoCBydHhfaW5zbiAqc2VxCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgID0gY29tYmlu ZV9zcGxpdF9pbnNucyAoZ2VuX3J0eF9TRVQgKHJlZywgWEVYUCAoeCwgMCkpLAo+IHN1YnN0X2lu c24pOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFRoaXMgc2hvdWxkIGhhdmUgcHJvZHVj ZWQgdHdvIGluc25zLCBlYWNoIG9mIHdoaWNoIHNldHMKPiBvdXIKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcGxhY2Vob2xkZXIuwqAgSWYgdGhlIHNvdXJjZSBvZiB0aGUgc2Vjb25kIGlzIGEg dmFsaWQKPiBhZGRyZXNzLAo+IEBAIC00OTM1LDEyICs0OTI4LDExIEBAIGZpbmRfc3BsaXRfcG9p bnQgKHJ0eCAqbG9jLCBydHhfaW5zbiAqaW5zbiwKPiBib29sIHNldF9zcmMpCj4gwqDCoMKgwqDC oMKgwqDCoMKgIC8qIElmIHRoYXQgZGlkbid0IHdvcmsgYW5kIHdlIGhhdmUgYSBuZXN0ZWQgcGx1 cywgbGlrZToKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKChSRUcxICogQ09OU1QxKSArIFJF RzIpICsgQ09OU1QyIGFuZCAoUkVHMSArIFJFRzIpICsKPiBDT05TVDIKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaXMgdmFsaWQgYWRkcmVzcywgdHJ5IHRvIHNwbGl0IChSRUcxICogQ09OU1Qx KS7CoCAqLwo+IC3CoMKgwqDCoMKgwqDCoMKgIGlmIChHRVRfQ09ERSAoWEVYUCAoWEVYUCAoeCwg MCksIDApKSA9PSBQTFVTCj4gK8KgwqDCoMKgwqDCoMKgwqAgaWYgKFBMVVNfUCAoWEVYUCAoWEVY UCAoeCwgMCksIDApKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmICFPQkpFQ1RfUCAo WEVYUCAoWEVYUCAoWEVYUCAoeCwgMCksIDApLCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAmJiBPQkpFQ1RfUCAoWEVYUCAoWEVYUCAoWEVYUCAoeCwgMCksIDApLCAxKSkKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmICEgKEdFVF9DT0RFIChYRVhQIChYRVhQIChYRVhQICh4 LCAwKSwgMCksIDApKSA9PQo+IFNVQlJFRwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJiYgT0JKRUNUX1AgKFNVQlJFR19SRUcgKFhFWFAgKFhFWFAgKFhFWFAgKHgsIDAp LAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAwKSwgMCkpKSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAhKEdFVF9DT0RFIChY RVhQIChYRVhQIChYRVhQICh4LCAwKSwgMCksIDApKSA9PQo+IFNVQlJFRwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIE9CSkVDVF9QIChTVUJSRUdfUkVHIChYRVhQIChY RVhQIChYRVhQICh4LCAwKSwKPiAwKSwgMCkpKSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB7 Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcnR4IHRlbSA9IFhFWFAgKFhFWFAgKFhFWFAg KHgsIDApLCAwKSwgMCk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgWEVYUCAoWEVYUCAo WEVYUCAoeCwgMCksIDApLCAwKSA9IHJlZzsKPiBAQCAtNDk1MiwxMiArNDk0NCwxMiBAQCBmaW5k X3NwbGl0X3BvaW50IChydHggKmxvYywgcnR4X2luc24gKmluc24sCj4gYm9vbCBzZXRfc3JjKQo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIFhFWFAgKFhFWFAgKFhFWFAgKHgsIDApLCAwKSwgMCkgPSB0ZW07Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB9Cj4gLcKgwqDCoMKgwqDCoMKgwqAgZWxzZSBpZiAoR0VUX0NPREUgKFhF WFAgKFhFWFAgKHgsIDApLCAwKSkgPT0gUExVUwo+ICvCoMKgwqDCoMKgwqDCoMKgIGVsc2UgaWYg KFBMVVNfUCAoWEVYUCAoWEVYUCAoeCwgMCksIDApKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAmJiBPQkpFQ1RfUCAoWEVYUCAoWEVYUCAoWEVYUCAoeCwgMCksIDApLCAw KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgIU9CSkVDVF9QIChY RVhQIChYRVhQIChYRVhQICh4LCAwKSwgMCksIDEpKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICYmICEgKEdFVF9DT0RFIChYRVhQIChYRVhQIChYRVhQICh4LCAwKSwgMCks IDEpKQo+ID09IFNVQlJFRwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICYmIE9CSkVDVF9QIChTVUJSRUdfUkVHIChYRVhQIChYRVhQIChYRVhQCj4gKHgs IDApLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgMCksCj4gMSkpKSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJiYgIShHRVRfQ09ERSAoWEVYUCAoWEVYUCAoWEVYUCAoeCwgMCksIDApLCAxKSkg PT0KPiBTVUJSRUcKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCYmIE9CSkVDVF9QICgKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIFNVQlJFR19SRUcgKFhFWFAgKFhFWFAgKFhFWFAgKHgsIDApLCAwKSwKPiAx KSkpKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBydHggdGVtID0gWEVYUCAoWEVYUCAoWEVYUCAoeCwgMCksIDApLCAxKTsKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBYRVhQIChYRVhQIChYRVhQICh4LCAwKSwgMCksIDEpID0gcmVn Owo+IEBAIC00OTgyLDEzICs0OTc0LDEzIEBAIGZpbmRfc3BsaXRfcG9pbnQgKHJ0eCAqbG9jLCBy dHhfaW5zbiAqaW5zbiwKPiBib29sIHNldF9zcmMpCj4gwqAKPiDCoMKgwqDCoMKgwqAgLyogSWYg d2UgaGF2ZSBhIFBMVVMgd2hvc2UgZmlyc3Qgb3BlcmFuZCBpcyBjb21wbGV4LCB0cnkKPiBjb21w dXRpbmcgaXQKPiDCoMKgwqDCoMKgwqDCoMKgwqAgc2VwYXJhdGVseSBieSBtYWtpbmcgYSBzcGxp dCB0aGVyZS7CoCAqLwo+IC3CoMKgwqDCoMKgIGlmIChHRVRfQ09ERSAoWEVYUCAoeCwgMCkpID09 IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDCoMKgICYmICEgbWVtb3J5X2FkZHJlc3NfYWRkcl9zcGFj ZV9wIChHRVRfTU9ERSAoeCksIFhFWFAgKHgsCj4gMCksCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBNRU1fQUREUl9TUEFDRSAoeCkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoCAmJiAhIE9C SkVDVF9QIChYRVhQIChYRVhQICh4LCAwKSwgMCkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoCAmJiAh IChHRVRfQ09ERSAoWEVYUCAoWEVYUCAoeCwgMCksIDApKSA9PSBTVUJSRUcKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIE9CSkVDVF9QIChTVUJSRUdfUkVHIChYRVhQIChYRVhQ ICh4LCAwKSwgMCkpKSkpCj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiAmWEVYUCAoWEVYUCAoeCwg MCksIDApOwo+ICvCoMKgwqDCoMKgIGlmIChQTFVTX1AgKFhFWFAgKHgsIDApKQo+ICvCoMKgwqDC oMKgwqDCoMKgICYmICFtZW1vcnlfYWRkcmVzc19hZGRyX3NwYWNlX3AgKEdFVF9NT0RFICh4KSwg WEVYUCAoeCwgMCksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTUVNX0FERFJfU1BBQ0Ug KHgpKQo+ICvCoMKgwqDCoMKgwqDCoMKgICYmICFPQkpFQ1RfUCAoWEVYUCAoWEVYUCAoeCwgMCks IDApKQo+ICvCoMKgwqDCoMKgwqDCoMKgICYmICEoR0VUX0NPREUgKFhFWFAgKFhFWFAgKHgsIDAp LCAwKSkgPT0gU1VCUkVHCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIE9CSkVDVF9Q IChTVUJSRUdfUkVHIChYRVhQIChYRVhQICh4LCAwKSwgMCkpKSkpCj4gK8KgwqDCoMKgwqDCoMKg cmV0dXJuICZYRVhQIChYRVhQICh4LCAwKSwgMCk7Cj4gwqDCoMKgwqDCoMKgIGJyZWFrOwo+IMKg Cj4gwqDCoMKgwqAgY2FzZSBTRVQ6Cj4gQEAgLTUyMzksNyArNTIzMSw3IEBAIGZpbmRfc3BsaXRf cG9pbnQgKHJ0eCAqbG9jLCBydHhfaW5zbiAqaW5zbiwKPiBib29sIHNldF9zcmMpCj4gwqDCoMKg wqDCoMKgIC8qIENhbm9uaWNhbGl6YXRpb24gY2FuIHByb2R1Y2UgKG1pbnVzIEEgKG11bHQgQiBD KSksIHdoZXJlIEMKPiBpcyBhCj4gwqDCoMKgwqDCoMKgwqDCoCBjb25zdGFudC7CoCBJdCBtYXkg YmUgYmV0dGVyIHRvIHRyeSBzcGxpdHRpbmcgKHBsdXMgKG11bHQgQiAtCj4gQykgQSkKPiDCoMKg wqDCoMKgwqDCoMKgIGluc3RlYWQgaWYgdGhpcyBpc24ndCBhIG11bHRpcGx5IGJ5IGEgcG93ZXIg b2YgdHdvLsKgICovCj4gLcKgwqDCoMKgwqAgaWYgKHNldF9zcmMgJiYgY29kZSA9PSBNSU5VUyAm JiBHRVRfQ09ERSAoWEVYUCAoeCwgMSkpID09IE1VTFQKPiArwqDCoMKgwqDCoCBpZiAoc2V0X3Ny YyAmJiBjb2RlID09IE1JTlVTICYmIE1VTFRfUCAoWEVYUCAoeCwgMSkpCj4gwqDCoMKgwqDCoMKg wqDCoMKgICYmIEdFVF9DT0RFIChYRVhQIChYRVhQICh4LCAxKSwgMSkpID09IENPTlNUX0lOVAo+ IMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAhcG93MnBfaHdpIChJTlRWQUwgKFhFWFAgKFhFWFAgKHgs IDEpLCAxKSkpKQo+IMKgwqDCoMKgwqDCoMKgwqB7Cj4gQEAgLTUyNTksMTAgKzUyNTEsMTAgQEAg ZmluZF9zcGxpdF9wb2ludCAocnR4ICpsb2MsIHJ0eF9pbnNuICppbnNuLAo+IGJvb2wgc2V0X3Ny YykKPiDCoMKgwqDCoMKgwqDCoMKgwqAgdGhlIFNFVF9TUkMsIHdlIGxpa2VseSBkbyBub3QgaGF2 ZSBzdWNoIGFuIGluc3RydWN0aW9uIGFuZAo+IGl0J3MKPiDCoMKgwqDCoMKgwqDCoMKgwqAgd29y dGhsZXNzIHRvIHRyeSB0aGlzIHNwbGl0LsKgICovCj4gwqDCoMKgwqDCoMKgIGlmICghc2V0X3Ny Ywo+IC3CoMKgwqDCoMKgwqDCoMKgICYmIChHRVRfQ09ERSAoWEVYUCAoeCwgMCkpID09IE1VTFQK PiArwqDCoMKgwqDCoMKgwqDCoCAmJiAoTVVMVF9QIChYRVhQICh4LCAwKSkKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB8fCAoR0VUX0NPREUgKFhFWFAgKHgsIDApKSA9PSBBU0hJRlQKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChYRVhQIChYRVhQ ICh4LCAwKSwgMSkpID09IENPTlNUX0lOVCkpKQo+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gbG9j Owo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBsb2M7Cj4gwqAKPiDCoMKgwqDCoCBkZWZhdWx0Ogo+ IMKgwqDCoMKgwqDCoCBicmVhazsKPiBAQCAtNjA5Miw3ICs2MDg0LDcgQEAgY29tYmluZV9zaW1w bGlmeV9ydHggKHJ0eCB4LCBtYWNoaW5lX21vZGUKPiBvcDBfbW9kZSwgaW50IGluX2Rlc3QsCj4g wqDCoMKgwqDCoMKgwqDCoCB0aGUgaW52ZXJzZSBkaXN0cmlidXRpdmUgbGF3IHRvIHNlZSBpZiB0 aGluZ3Mgc2ltcGxpZnkuwqAKPiBUaGlzCj4gwqDCoMKgwqDCoMKgwqDCoCBvY2N1cnMgbW9zdGx5 IGluIGFkZHJlc3Nlcywgb2Z0ZW4gd2hlbiB1bnJvbGxpbmcgbG9vcHMuwqAgKi8KPiDCoAo+IC3C oMKgwqDCoMKgIGlmIChHRVRfQ09ERSAoWEVYUCAoeCwgMCkpID09IFBMVVMpCj4gK8KgwqDCoMKg wqAgaWYgKFBMVVNfUCAoWEVYUCAoeCwgMCkpKQo+IMKgwqDCoMKgwqDCoMKgwqB7Cj4gwqDCoMKg wqDCoMKgwqDCoMKgIHJ0eCByZXN1bHQgPSBkaXN0cmlidXRlX2FuZF9zaW1wbGlmeV9ydHggKHgs IDApOwo+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocmVzdWx0KQo+IEBAIC02NTg0LDIzICs2NTc2 LDIwIEBAIHNpbXBsaWZ5X2lmX3RoZW5fZWxzZSAocnR4IHgpCj4gwqDCoMKgwqDCoMKgIHNjYWxh cl9pbnRfbW9kZSBtID0gaW50X21vZGU7Cj4gwqDCoMKgwqDCoMKgIHJ0eCB6ID0gMCwgYzEgPSBO VUxMX1JUWDsKPiDCoAo+IC3CoMKgwqDCoMKgIGlmICgoR0VUX0NPREUgKHQpID09IFBMVVMgfHwg R0VUX0NPREUgKHQpID09IE1JTlVTCj4gLcKgwqDCoMKgwqDCoMKgwqDCoCB8fCBHRVRfQ09ERSAo dCkgPT0gSU9SIHx8IEdFVF9DT0RFICh0KSA9PSBYT1IKPiAtwqDCoMKgwqDCoMKgwqDCoMKgIHx8 IEdFVF9DT0RFICh0KSA9PSBBU0hJRlQKPiArwqDCoMKgwqDCoCBpZiAoKFBMVVNfUCAodCkgfHwg TUlOVVNfUCAodCkgfHwgR0VUX0NPREUgKHQpID09IElPUgo+ICvCoMKgwqDCoMKgwqDCoMKgwqAg fHwgR0VUX0NPREUgKHQpID09IFhPUiB8fCBHRVRfQ09ERSAodCkgPT0gQVNISUZUCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqAgfHwgR0VUX0NPREUgKHQpID09IExTSElGVFJUIHx8IEdFVF9DT0RFICh0 KSA9PSBBU0hJRlRSVCkKPiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgcnR4X2VxdWFsX3AgKFhFWFAg KHQsIDApLCBmKSkKPiDCoMKgwqDCoMKgwqDCoMKgYzEgPSBYRVhQICh0LCAxKSwgb3AgPSBHRVRf Q09ERSAodCksIHogPSBmOwo+IMKgCj4gwqDCoMKgwqDCoMKgIC8qIElmIGFuIGlkZW50aXR5LXpl cm8gb3AgaXMgY29tbXV0YXRpdmUsIGNoZWNrIHdoZXRoZXIgdGhlcmUKPiDCoMKgwqDCoMKgwqDC oMKgIHdvdWxkIGJlIGEgbWF0Y2ggaWYgd2Ugc3dhcHBlZCB0aGUgb3BlcmFuZHMuwqAgKi8KPiAt wqDCoMKgwqDCoCBlbHNlIGlmICgoR0VUX0NPREUgKHQpID09IFBMVVMgfHwgR0VUX0NPREUgKHQp ID09IElPUgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8fCBHRVRfQ09ERSAodCkg PT0gWE9SKQo+ICvCoMKgwqDCoMKgIGVsc2UgaWYgKChQTFVTX1AgKHQpIHx8IEdFVF9DT0RFICh0 KSA9PSBJT1IgfHwgR0VUX0NPREUgKHQpID09Cj4gWE9SKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJiYgcnR4X2VxdWFsX3AgKFhFWFAgKHQsIDEpLCBmKSkKPiDCoMKgwqDCoMKgwqDC oMKgYzEgPSBYRVhQICh0LCAwKSwgb3AgPSBHRVRfQ09ERSAodCksIHogPSBmOwo+IMKgwqDCoMKg wqDCoCBlbHNlIGlmIChHRVRfQ09ERSAodCkgPT0gU0lHTl9FWFRFTkQKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJiYgaXNfYSA8c2NhbGFyX2ludF9tb2RlPiAoR0VUX01PREUgKFhFWFAg KHQsIDApKSwKPiAmaW5uZXJfbW9kZSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYg KEdFVF9DT0RFIChYRVhQICh0LCAwKSkgPT0gUExVUwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHx8IEdFVF9DT0RFIChYRVhQICh0LCAwKSkgPT0gTUlOVVMKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgaXNfYTxzY2FsYXJfaW50X21vZGU+IChHRVRfTU9ERSAo WEVYUCAodCwgMCkpLAo+ICZpbm5lcl9tb2RlKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAmJiAoUExVU19QIChYRVhQICh0LCAwKSkgfHwgTUlOVVNfUCAoWEVYUCAodCwgMCkpCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IEdFVF9DT0RFIChYRVhQICh0LCAw KSkgPT0gSU9SCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IEdFVF9D T0RFIChYRVhQICh0LCAwKSkgPT0gWE9SCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHx8IEdFVF9DT0RFIChYRVhQICh0LCAwKSkgPT0gQVNISUZUCj4gQEAgLTY2MTAsMzUg KzY1OTksMzEgQEAgc2ltcGxpZnlfaWZfdGhlbl9lbHNlIChydHggeCkKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICYmIHN1YnJlZ19sb3dwYXJ0X3AgKFhFWFAgKFhFWFAgKHQsIDApLCAw KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIHJ0eF9lcXVhbF9wIChTVUJSRUdf UkVHIChYRVhQIChYRVhQICh0LCAwKSwgMCkpLCBmKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgJiYgKG51bV9zaWduX2JpdF9jb3BpZXMgKGYsIEdFVF9NT0RFIChmKSkKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA+ICh1bnNpZ25lZCBpbnQpCj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChHRVRfTU9ERV9QUkVDSVNJT04gKGludF9t b2RlKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC0gR0VUX01P REVfUFJFQ0lTSU9OIChpbm5lcl9tb2RlKSkpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgID4gKHVuc2lnbmVkIGludCkgKEdFVF9NT0RFX1BSRUNJU0lPTiAoaW50X21vZGUp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgLSBHRVRfTU9ERV9QUkVDSVNJT04KPiAoaW5uZXJfbW9kZSkpKSkK PiDCoMKgwqDCoMKgwqDCoMKgewo+IMKgwqDCoMKgwqDCoMKgwqDCoCBjMSA9IFhFWFAgKFhFWFAg KHQsIDApLCAxKTsgeiA9IGY7IG9wID0gR0VUX0NPREUgKFhFWFAgKHQsCj4gMCkpOwo+IMKgwqDC oMKgwqDCoMKgwqDCoCBleHRlbmRfb3AgPSBTSUdOX0VYVEVORDsKPiDCoMKgwqDCoMKgwqDCoMKg wqAgbSA9IGlubmVyX21vZGU7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKgwqAgZWxz ZSBpZiAoR0VUX0NPREUgKHQpID09IFNJR05fRVhURU5ECj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICYmIGlzX2EgPHNjYWxhcl9pbnRfbW9kZT4gKEdFVF9NT0RFIChYRVhQICh0LCAwKSks Cj4gJmlubmVyX21vZGUpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChHRVRfQ09E RSAoWEVYUCAodCwgMCkpID09IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB8fCBHRVRfQ09ERSAoWEVYUCAodCwgMCkpID09IElPUgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmJiBpc19hPHNjYWxhcl9pbnRfbW9kZT4gKEdFVF9NT0RFIChYRVhQICh0LCAw KSksCj4gJmlubmVyX21vZGUpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChQTFVT X1AgKFhFWFAgKHQsIDApKSB8fCBHRVRfQ09ERSAoWEVYUCAodCwgMCkpID09Cj4gSU9SCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IEdFVF9DT0RFIChYRVhQICh0LCAw KSkgPT0gWE9SKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhF WFAgKFhFWFAgKHQsIDApLCAxKSkgPT0gU1VCUkVHCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAmJiBzdWJyZWdfbG93cGFydF9wIChYRVhQIChYRVhQICh0LCAwKSwgMSkpCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBydHhfZXF1YWxfcCAoU1VCUkVHX1JFRyAoWEVYUCAo WEVYUCAodCwgMCksIDEpKSwgZikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChu dW1fc2lnbl9iaXRfY29waWVzIChmLCBHRVRfTU9ERSAoZikpCj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgPiAodW5zaWduZWQgaW50KQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAoR0VUX01PREVfUFJFQ0lTSU9OIChpbnRfbW9kZSkKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAtIEdFVF9NT0RFX1BSRUNJU0lP TiAoaW5uZXJfbW9kZSkpKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA+ ICh1bnNpZ25lZCBpbnQpIChHRVRfTU9ERV9QUkVDSVNJT04gKGludF9tb2RlKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC0gR0VUX01PREVfUFJFQ0lTSU9OCj4gKGlubmVyX21vZGUpKSkpCj4gwqDCoMKgwqDC oMKgwqDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgYzEgPSBYRVhQIChYRVhQICh0LCAwKSwgMCk7 IHogPSBmOyBvcCA9IEdFVF9DT0RFIChYRVhQICh0LAo+IDApKTsKPiDCoMKgwqDCoMKgwqDCoMKg wqAgZXh0ZW5kX29wID0gU0lHTl9FWFRFTkQ7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIG0gPSBpbm5l cl9tb2RlOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqDCoMKgwqDCoMKgIGVsc2UgaWYgKEdFVF9D T0RFICh0KSA9PSBaRVJPX0VYVEVORAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBp c19hIDxzY2FsYXJfaW50X21vZGU+IChHRVRfTU9ERSAoWEVYUCAodCwgMCkpLAo+ICZpbm5lcl9t b2RlKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAoR0VUX0NPREUgKFhFWFAgKHQs IDApKSA9PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgR0VU X0NPREUgKFhFWFAgKHQsIDApKSA9PSBNSU5VUwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAmJiBpc19hPHNjYWxhcl9pbnRfbW9kZT4gKEdFVF9NT0RFIChYRVhQICh0LCAwKSksCj4gJmlu bmVyX21vZGUpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChQTFVTX1AgKFhFWFAg KHQsIDApKSB8fCBNSU5VU19QIChYRVhQICh0LCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfHwgR0VUX0NPREUgKFhFWFAgKHQsIDApKSA9PSBJT1IKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgR0VUX0NPREUgKFhFWFAgKHQsIDApKSA9 PSBYT1IKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgR0VUX0NPREUg KFhFWFAgKHQsIDApKSA9PSBBU0hJRlQKPiBAQCAtNjY1Nyw5ICs2NjQyLDggQEAgc2ltcGxpZnlf aWZfdGhlbl9lbHNlIChydHggeCkKPiDCoMKgwqDCoMKgwqDCoMKgwqAgbSA9IGlubmVyX21vZGU7 Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKgwqAgZWxzZSBpZiAoR0VUX0NPREUgKHQp ID09IFpFUk9fRVhURU5ECj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIGlzX2EgPHNj YWxhcl9pbnRfbW9kZT4gKEdFVF9NT0RFIChYRVhQICh0LCAwKSksCj4gJmlubmVyX21vZGUpCj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChHRVRfQ09ERSAoWEVYUCAodCwgMCkpID09 IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCBHRVRfQ09ERSAo WEVYUCAodCwgMCkpID09IElPUgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBpc19h PHNjYWxhcl9pbnRfbW9kZT4gKEdFVF9NT0RFIChYRVhQICh0LCAwKSksCj4gJmlubmVyX21vZGUp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChQTFVTX1AgKFhFWFAgKHQsIDApKSB8 fCBHRVRfQ09ERSAoWEVYUCAodCwgMCkpID09Cj4gSU9SCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHx8IEdFVF9DT0RFIChYRVhQICh0LCAwKSkgPT0gWE9SKQo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhFWFAgKFhFWFAgKHQsIDApLCAx KSkgPT0gU1VCUkVHCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBIV0lfQ09NUFVU QUJMRV9NT0RFX1AgKGludF9tb2RlKQo+IEBAIC03Mzg2LDggKzczNzAsNyBAQCBleHBhbmRfZmll bGRfYXNzaWdubWVudCAoY29uc3RfcnR4IHgpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB7Cj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKENPTlNUX0lOVF9QIChwb3MpKQo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcG9zID0gR0VOX0lOVCAoaW5uZXJfbGVuIC0gbGVu IC0gSU5UVkFMIChwb3MpKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKEdF VF9DT0RFIChwb3MpID09IE1JTlVTCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAocG9zLCAxKSkKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGVsc2UgaWYgKE1JTlVTX1AgKHBvcykgJiYgQ09OU1RfSU5UX1AgKFhFWFAg KHBvcywgMSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg JiYgSU5UVkFMIChYRVhQIChwb3MsIDEpKSA9PSBpbm5lcl9sZW4gLSBsZW4pCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBJZiBwb3NpdGlvbiBpcyBBREpVU1QgLSBYLCBuZXcg cG9zaXRpb24gaXMgWC7CoCAqLwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcG9z ID0gWEVYUCAocG9zLCAwKTsKPiBAQCAtNzU0MSw5ICs3NTI0LDggQEAgbWFrZV9leHRyYWN0aW9u IChtYWNoaW5lX21vZGUgbW9kZSwgcnR4IGlubmVyLAo+IEhPU1RfV0lERV9JTlQgcG9zLAo+IMKg wqDCoMKgwqDCoCBpZiAobmV3X3J0eCAhPSAwKQo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZ2Vu X3J0eF9BU0hJRlQgKG1vZGUsIG5ld19ydHgsIFhFWFAgKGlubmVyLCAxKSk7Cj4gwqDCoMKgwqAg fQo+IC3CoCBlbHNlIGlmIChHRVRfQ09ERSAoaW5uZXIpID09IE1VTFQKPiAtwqDCoMKgwqDCoMKg wqDCoMKgICYmIENPTlNUX0lOVF9QIChYRVhQIChpbm5lciwgMSkpCj4gLcKgwqDCoMKgwqDCoMKg wqDCoCAmJiBwb3NfcnR4ID09IDAgJiYgcG9zID09IDApCj4gK8KgIGVsc2UgaWYgKE1VTFRfUCAo aW5uZXIpICYmIENPTlNUX0lOVF9QIChYRVhQIChpbm5lciwgMSkpICYmCj4gcG9zX3J0eCA9PSAw Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoCAmJiBwb3MgPT0gMCkKPiDCoMKgwqDCoCB7Cj4gwqDCoMKg wqDCoMKgIC8qIFdlJ3JlIGV4dHJhY3RpbmcgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2Yg YW4gcnR4Cj4gwqDCoMKgwqDCoMKgwqDCoCAobXVsdCBYIChjb25zdF9pbnQgMl5DKSksIHdoZXJl IExFTiA+IEMuwqAgRXh0cmFjdCB0aGUKPiBAQCAtODAxNywxOSArNzk5OSwxOCBAQCBtYWtlX2Nv bXBvdW5kX29wZXJhdGlvbl9pbnQgKHNjYWxhcl9pbnRfbW9kZQo+IG1vZGUsIHJ0eCAqeF9wdHIs Cj4gwqDCoMKgwqDCoMKgIHJocyA9IFhFWFAgKHgsIDEpOwo+IMKgwqDCoMKgwqDCoCBsaHMgPSBt YWtlX2NvbXBvdW5kX29wZXJhdGlvbiAobGhzLCBuZXh0X2NvZGUpOwo+IMKgwqDCoMKgwqDCoCBy aHMgPSBtYWtlX2NvbXBvdW5kX29wZXJhdGlvbiAocmhzLCBuZXh0X2NvZGUpOwo+IC3CoMKgwqDC oMKgIGlmIChHRVRfQ09ERSAobGhzKSA9PSBNVUxUICYmIEdFVF9DT0RFIChYRVhQIChsaHMsIDAp KSA9PSBORUcpCj4gK8KgwqDCoMKgwqAgaWYgKE1VTFRfUCAobGhzKSAmJiBHRVRfQ09ERSAoWEVY UCAobGhzLCAwKSkgPT0gTkVHKQo+IMKgwqDCoMKgwqDCoMKgwqB7Cj4gwqDCoMKgwqDCoMKgwqDC oMKgIHRlbSA9IHNpbXBsaWZ5X2dlbl9iaW5hcnkgKE1VTFQsIG1vZGUsIFhFWFAgKFhFWFAgKGxo cywgMCksCj4gMCksCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFhFWFAgKGxocywgMSkpOwo+IMKgwqDCoMKg wqDCoMKgwqDCoCBuZXdfcnR4ID0gc2ltcGxpZnlfZ2VuX2JpbmFyeSAoTUlOVVMsIG1vZGUsIHJo cywgdGVtKTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IC3CoMKgwqDCoMKgIGVsc2UgaWYgKEdFVF9D T0RFIChsaHMpID09IE1VTFQKPiArwqDCoMKgwqDCoCBlbHNlIGlmIChNVUxUX1AgKGxocykKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChDT05TVF9JTlRfUCAoWEVYUCAobGhzLCAx KSkgJiYgSU5UVkFMIChYRVhQIChsaHMsCj4gMSkpIDwgMCkpCj4gwqDCoMKgwqDCoMKgwqDCoHsK PiDCoMKgwqDCoMKgwqDCoMKgwqAgdGVtID0gc2ltcGxpZnlfZ2VuX2JpbmFyeSAoTVVMVCwgbW9k ZSwgWEVYUCAobGhzLCAwKSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2ltcGxpZnlfZ2VuX3VuYXJ5IChO RUcsIG1vZGUsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIFhFWFAgKGxocywKPiAxKSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbW9kZSkpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBYRVhQIChsaHMsCj4gMSksIG1vZGUp KTsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgbmV3X3J0eCA9IHNpbXBsaWZ5X2dlbl9iaW5hcnkgKE1J TlVTLCBtb2RlLCByaHMsIHRlbSk7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKgwqAg ZWxzZQo+IEBAIC04MDQ1LDE5ICs4MDI2LDE4IEBAIG1ha2VfY29tcG91bmRfb3BlcmF0aW9uX2lu dCAoc2NhbGFyX2ludF9tb2RlCj4gbW9kZSwgcnR4ICp4X3B0ciwKPiDCoMKgwqDCoMKgwqAgcmhz ID0gWEVYUCAoeCwgMSk7Cj4gwqDCoMKgwqDCoMKgIGxocyA9IG1ha2VfY29tcG91bmRfb3BlcmF0 aW9uIChsaHMsIG5leHRfY29kZSk7Cj4gwqDCoMKgwqDCoMKgIHJocyA9IG1ha2VfY29tcG91bmRf b3BlcmF0aW9uIChyaHMsIG5leHRfY29kZSk7Cj4gLcKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFIChy aHMpID09IE1VTFQgJiYgR0VUX0NPREUgKFhFWFAgKHJocywgMCkpID09IE5FRykKPiArwqDCoMKg wqDCoCBpZiAoTVVMVF9QIChyaHMpICYmIEdFVF9DT0RFIChYRVhQIChyaHMsIDApKSA9PSBORUcp Cj4gwqDCoMKgwqDCoMKgwqDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgdGVtID0gc2ltcGxpZnlf Z2VuX2JpbmFyeSAoTVVMVCwgbW9kZSwgWEVYUCAoWEVYUCAocmhzLCAwKSwKPiAwKSwKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgWEVYUCAocmhzLCAxKSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBz aW1wbGlmeV9nZW5fYmluYXJ5IChQTFVTLCBtb2RlLCB0ZW0sIGxocyk7Cj4gwqDCoMKgwqDCoMKg wqDCoH0KPiAtwqDCoMKgwqDCoCBlbHNlIGlmIChHRVRfQ09ERSAocmhzKSA9PSBNVUxUCj4gK8Kg wqDCoMKgwqAgZWxzZSBpZiAoTVVMVF9QIChyaHMpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAmJiAoQ09OU1RfSU5UX1AgKFhFWFAgKHJocywgMSkpICYmIElOVFZBTCAoWEVYUCAocmhz LAo+IDEpKSA8IDApKQo+IMKgwqDCoMKgwqDCoMKgwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIHRl bSA9IHNpbXBsaWZ5X2dlbl9iaW5hcnkgKE1VTFQsIG1vZGUsIFhFWFAgKHJocywgMCksCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHNpbXBsaWZ5X2dlbl91bmFyeSAoTkVHLCBtb2RlLAo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBYRVhQIChyaHMsCj4g MSksCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIG1vZGUpKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgWEVYUCAocmhzLAo+IDEpLCBtb2RlKSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiBzaW1wbGlmeV9nZW5fYmluYXJ5IChQTFVTLCBtb2RlLCB0ZW0sIGxocyk7Cj4gwqDC oMKgwqDCoMKgwqDCoH0KPiDCoMKgwqDCoMKgwqAgZWxzZQo+IEBAIC05Mjg4LDExICs5MjY4LDEw IEBAIGlmX3RoZW5fZWxzZV9jb25kIChydHggeCwgcnR4ICpwdHJ1ZSwgcnR4Cj4gKnBmYWxzZSkK PiDCoMKgwqDCoMKgwqAgLyogU2VlIGlmIHdlIGhhdmUgUExVUywgSU9SLCBYT1IsIE1JTlVTIG9y IFVNQVgsIHdoZXJlIG9uZSBvZgo+IHRoZQo+IMKgwqDCoMKgwqDCoMKgwqAgb3BlcmFuZHMgaXMg emVybyB3aGVuIHRoZSBvdGhlciBpcyBub256ZXJvLCBhbmQgdmljZS12ZXJzYSwKPiDCoMKgwqDC oMKgwqDCoMKgIGFuZCBTVE9SRV9GTEFHX1ZBTFVFIGlzIDEgb3IgLTEuwqAgKi8KPiAtCj4gwqDC oMKgwqDCoMKgIGlmICgoU1RPUkVfRkxBR19WQUxVRSA9PSAxIHx8IFNUT1JFX0ZMQUdfVkFMVUUg PT0gLTEpCj4gwqDCoMKgwqDCoMKgwqDCoMKgICYmIChjb2RlID09IFBMVVMgfHwgY29kZSA9PSBJ T1IgfHwgY29kZSA9PSBYT1IgfHwgY29kZSA9PQo+IE1JTlVTCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfHwgY29kZSA9PSBVTUFYKQo+IC3CoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RF IChYRVhQICh4LCAwKSkgPT0gTVVMVCAmJiBHRVRfQ09ERSAoWEVYUCAoeCwgMSkpCj4gPT0gTVVM VCkKPiArwqDCoMKgwqDCoMKgwqDCoCAmJiBNVUxUX1AgKFhFWFAgKHgsIDApKSAmJiBNVUxUX1Ag KFhFWFAgKHgsIDEpKSkKPiDCoMKgwqDCoMKgwqDCoMKgewo+IMKgwqDCoMKgwqDCoMKgwqDCoCBy dHggb3AwID0gWEVYUCAoWEVYUCAoeCwgMCksIDEpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoCBydHgg b3AxID0gWEVYUCAoWEVYUCAoeCwgMSksIDEpOwo+IEBAIC05MzAwLDggKzkyNzksNyBAQCBpZl90 aGVuX2Vsc2VfY29uZCAocnR4IHgsIHJ0eCAqcHRydWUsIHJ0eAo+ICpwZmFsc2UpCj4gwqDCoMKg wqDCoMKgwqDCoMKgIGNvbmQwID0gWEVYUCAoWEVYUCAoeCwgMCksIDApOwo+IMKgwqDCoMKgwqDC oMKgwqDCoCBjb25kMSA9IFhFWFAgKFhFWFAgKHgsIDEpLCAwKTsKPiDCoAo+IC3CoMKgwqDCoMKg wqDCoMKgIGlmIChDT01QQVJJU09OX1AgKGNvbmQwKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJiYgQ09NUEFSSVNPTl9QIChjb25kMSkKPiArwqDCoMKgwqDCoMKgwqDCoCBpZiAoQ09NUEFS SVNPTl9QIChjb25kMCkgJiYgQ09NUEFSSVNPTl9QIChjb25kMSkKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmJiBTQ0FMQVJfSU5UX01PREVfUCAobW9kZSkKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmJiAoKEdFVF9DT0RFIChjb25kMCkgPT0gcmV2ZXJzZWRfY29tcGFyaXNvbl9j b2RlCj4gKGNvbmQxLCBOVUxMKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAmJiBydHhfZXF1YWxfcCAoWEVYUCAoY29uZDAsIDApLCBYRVhQIChjb25kMSwgMCkpCj4gQEAg LTkzMTAsMTUgKzkyODgsMTQgQEAgaWZfdGhlbl9lbHNlX2NvbmQgKHJ0eCB4LCBydHggKnB0cnVl LCBydHgKPiAqcGZhbHNlKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgID09IHJldmVyc2VkX2NvbXBhcmlzb25fY29kZSAoY29uZDEsIE5VTEwpKQo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBydHhfZXF1YWxfcCAoWEVY UCAoY29uZDAsIDApLCBYRVhQIChjb25kMSwKPiAxKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgcnR4X2VxdWFsX3AgKFhFWFAgKGNvbmQwLCAxKSwgWEVY UCAoY29uZDEsCj4gMCkpKSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmICEgc2lkZV9l ZmZlY3RzX3AgKHgpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgIXNpZGVfZWZmZWN0 c19wICh4KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAqcHRydWUgPSBzaW1wbGlmeV9nZW5fYmluYXJ5IChNVUxULCBtb2RlLCBvcDAsCj4g Y29uc3RfdHJ1ZV9ydHgpOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnBmYWxzZSA9IHNp bXBsaWZ5X2dlbl9iaW5hcnkgKE1VTFQsIG1vZGUsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIChjb2RlID09IE1JTlVTCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg PyBzaW1wbGlmeV9nZW5fdW5hcnkKPiAoTkVHLCBtb2RlLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAK PiBvcDEsIG1vZGUpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOiBvcDEpLAo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0X3RydWVfcnR4KTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICpwZmFsc2UgPSBzaW1wbGlmeV9nZW5fYmluYXJ5ICgKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTVVMVCwgbW9kZSwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgKGNvZGUgPT0gTUlOVVMgPyBzaW1wbGlmeV9nZW5fdW5hcnkgKE5F RywgbW9kZSwgb3AxLAo+IG1vZGUpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOiBvcDEpLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBjb25zdF90cnVlX3J0eCk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIGNvbmQwOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKgwqDCoMKgwqDCoMKg wqB9Cj4gQEAgLTkzMjcsMjUgKzkzMDQsMjQgQEAgaWZfdGhlbl9lbHNlX2NvbmQgKHJ0eCB4LCBy dHggKnB0cnVlLCBydHgKPiAqcGZhbHNlKQo+IMKgwqDCoMKgwqDCoMKgwqAgaXMgYWx3YXlzIHpl cm8uwqAgKi8KPiDCoMKgwqDCoMKgwqAgaWYgKChTVE9SRV9GTEFHX1ZBTFVFID09IDEgfHwgU1RP UkVfRkxBR19WQUxVRSA9PSAtMSkKPiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKGNvZGUgPT0gTVVM VCB8fCBjb2RlID09IEFORCB8fCBjb2RlID09IFVNSU4pCj4gLcKgwqDCoMKgwqDCoMKgwqAgJiYg R0VUX0NPREUgKFhFWFAgKHgsIDApKSA9PSBNVUxUICYmIEdFVF9DT0RFIChYRVhQICh4LCAxKSkK PiA9PSBNVUxUKQo+IC3CoMKgwqDCoMKgwqDCoHsKPiAtwqDCoMKgwqDCoMKgwqDCoCBjb25kMCA9 IFhFWFAgKFhFWFAgKHgsIDApLCAwKTsKPiAtwqDCoMKgwqDCoMKgwqDCoCBjb25kMSA9IFhFWFAg KFhFWFAgKHgsIDEpLCAwKTsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgwqAgaWYgKENPTVBBUklTT05f UCAoY29uZDApCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBDT01QQVJJU09OX1AgKGNv bmQxKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKChHRVRfQ09ERSAoY29uZDApID09 IHJldmVyc2VkX2NvbXBhcmlzb25fY29kZQo+IChjb25kMSwgTlVMTCkKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBydHhfZXF1YWxfcCAoWEVYUCAoY29uZDAsIDApLCBY RVhQIChjb25kMSwgMCkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYg cnR4X2VxdWFsX3AgKFhFWFAgKGNvbmQwLCAxKSwgWEVYUCAoY29uZDEsIDEpKSkKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgKChzd2FwX2NvbmRpdGlvbiAoR0VUX0NPREUg KGNvbmQwKSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID09 IHJldmVyc2VkX2NvbXBhcmlzb25fY29kZSAoY29uZDEsIE5VTEwpKQo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIHJ0eF9lcXVhbF9wIChYRVhQIChjb25kMCwg MCksIFhFWFAgKGNvbmQxLAo+IDEpKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICYmIHJ0eF9lcXVhbF9wIChYRVhQIChjb25kMCwgMSksIFhFWFAgKGNvbmQxLAo+ IDApKSkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAhIHNpZGVfZWZmZWN0c19wICh4 KSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqAgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KnB0cnVlID0gKnBmYWxzZSA9IGNvbnN0MF9ydHg7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gY29uZDA7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgICYmIE1V TFRfUCAoWEVYUCAoeCwgMCkpICYmIE1VTFRfUCAoWEVYUCAoeCwgMSkpCj4gK8KgwqDCoMKgwqDC oMKgewo+ICvCoMKgwqDCoMKgwqDCoGNvbmQwID0gWEVYUCAoWEVYUCAoeCwgMCksIDApOwo+ICvC oMKgwqDCoMKgwqDCoGNvbmQxID0gWEVYUCAoWEVYUCAoeCwgMSksIDApOwo+ICsKPiArwqDCoMKg wqDCoMKgwqBpZiAoQ09NUEFSSVNPTl9QIChjb25kMCkgJiYgQ09NUEFSSVNPTl9QIChjb25kMSkK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKChHRVRfQ09ERSAoY29uZDApID09IHJldmVyc2Vk X2NvbXBhcmlzb25fY29kZSAoY29uZDEsCj4gTlVMTCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICYmIHJ0eF9lcXVhbF9wIChYRVhQIChjb25kMCwgMCksIFhFWFAgKGNvbmQxLCAw KSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIHJ0eF9lcXVhbF9wIChYRVhQ IChjb25kMCwgMSksIFhFWFAgKGNvbmQxLCAxKSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHx8ICgoc3dhcF9jb25kaXRpb24gKEdFVF9DT0RFIChjb25kMCkpCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID09IHJldmVyc2VkX2NvbXBhcmlzb25fY29k ZSAoY29uZDEsIE5VTEwpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg JiYgcnR4X2VxdWFsX3AgKFhFWFAgKGNvbmQwLCAwKSwgWEVYUCAoY29uZDEsIDEpKQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgcnR4X2VxdWFsX3AgKFhFWFAgKGNv bmQwLCAxKSwgWEVYUCAoY29uZDEsCj4gMCkpKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYg IXNpZGVfZWZmZWN0c19wICh4KSkKPiArwqDCoMKgwqDCoMKgwqDCoCB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgICpwdHJ1ZSA9ICpwZmFsc2UgPSBjb25zdDBfcnR4Owo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gY29uZDA7Cj4gK8KgwqDCoMKgwqDCoMKgwqAgfQo+IMKgwqDCoMKgwqDC oMKgwqB9Cj4gwqDCoMKgwqAgfQo+IMKgCj4gQEAgLTEwMTAwLDcgKzEwMDc2LDcgQEAgc2ltcGxp ZnlfYW5kX2NvbnN0X2ludF8xIChzY2FsYXJfaW50X21vZGUKPiBtb2RlLCBydHggdmFyb3AsCj4g wqDCoMKgwqDCoCB0aGUgQU5EIGFuZCBzZWUgaWYgb25lIG9mIHRoZSBvcGVyYW5kcyBzaW1wbGlm aWVzIHRvIHplcm8uwqAgSWYKPiBzbywgd2UKPiDCoMKgwqDCoMKgIG1heSBlbGltaW5hdGUgaXQu wqAgKi8KPiDCoAo+IC3CoCBpZiAoR0VUX0NPREUgKHZhcm9wKSA9PSBQTFVTCj4gK8KgIGlmIChQ TFVTX1AgKHZhcm9wKQo+IMKgwqDCoMKgwqDCoCAmJiBwb3cycF9od2kgKGNvbnN0b3AgKyAxKSkK PiDCoMKgwqDCoCB7Cj4gwqDCoMKgwqDCoMKgIHJ0eCBvMCwgbzE7Cj4gQEAgLTEwOTM5LDcgKzEw OTE1LDcgQEAgc2ltcGxpZnlfc2hpZnRfY29uc3RfMSAoZW51bSBydHhfY29kZSBjb2RlLAo+IG1h Y2hpbmVfbW9kZSByZXN1bHRfbW9kZSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYW5kIFNU T1JFX0ZMQUdfVkFMVUUgaXMgMSBvciB3ZSBoYXZlIGEgbG9naWNhbCBzaGlmdAo+IHdpdGgKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU1RPUkVfRkxBR19WQUxVRSBvZiAtMSwgd2UgaGF2ZSBh IChuZWcgKGxlIFggMCkpCj4gb3BlcmF0aW9uLsKgICovCj4gwqAKPiAtwqDCoMKgwqDCoMKgwqDC oCBpZiAoR0VUX0NPREUgKHZhcm9wKSA9PSBJT1IgJiYgR0VUX0NPREUgKFhFWFAgKHZhcm9wLCAw KSkKPiA9PSBQTFVTCj4gK8KgwqDCoMKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFICh2YXJvcCkgPT0g SU9SICYmIFBMVVNfUCAoWEVYUCAodmFyb3AsIDApKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICYmIFhFWFAgKFhFWFAgKHZhcm9wLCAwKSwgMSkgPT0gY29uc3RtMV9ydHgKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAoU1RPUkVfRkxBR19WQUxVRSA9PSAxIHx8IFNUT1JFX0ZM QUdfVkFMVUUgPT0gLTEpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKGNvZGUgPT0g TFNISUZUUlQgfHwgY29kZSA9PSBBU0hJRlRSVCkKPiBAQCAtMTA5NDcsOCArMTA5MjMsNyBAQCBz aW1wbGlmeV9zaGlmdF9jb25zdF8xIChlbnVtIHJ0eF9jb2RlIGNvZGUsCj4gbWFjaGluZV9tb2Rl IHJlc3VsdF9tb2RlLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIHJ0eF9lcXVhbF9w IChYRVhQIChYRVhQICh2YXJvcCwgMCksIDApLCBYRVhQICh2YXJvcCwKPiAxKSkpCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY291bnQgPSAw Owo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFyb3AgPSBnZW5fcnR4X0xFIChpbnRfdmFy b3BfbW9kZSwgWEVYUCAodmFyb3AsIDEpLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0MF9ydHgpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFyb3AgPSBnZW5fcnR4X0xFIChpbnRfdmFyb3BfbW9kZSwg WEVYUCAodmFyb3AsIDEpLAo+IGNvbnN0MF9ydHgpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaWYgKFNUT1JFX0ZMQUdfVkFMVUUgPT0gMSA/IGNvZGUgPT0gQVNISUZUUlQgOiBj b2RlID09Cj4gTFNISUZUUlQpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YXJv cCA9IGdlbl9ydHhfTkVHIChpbnRfdmFyb3BfbW9kZSwgdmFyb3ApOwo+IEBAIC0xMjQwMiwzMyAr MTIzNzcsMzMgQEAgc2ltcGxpZnlfY29tcGFyaXNvbiAoZW51bSBydHhfY29kZSBjb2RlLAo+IHJ0 eCAqcG9wMCwgcnR4ICpwb3AxKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIGlzX2Eg PHNjYWxhcl9pbnRfbW9kZT4gKEdFVF9NT0RFIChTVUJSRUdfUkVHIChvcDApKSwKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAmaW5uZXJfbW9kZSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAmJiBHRVRfTU9ERV9QUkVDSVNJT04gKGlubmVyX21vZGUpID4gbW9kZV93aWR0aAo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFNVQlJFR19SRUcgKG9wMCkpID09IFBM VVMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIFBMVVNfUCAoU1VCUkVHX1JFRyAob3Aw KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAoU1VC UkVHX1JFRyAob3AwKSwgMSkpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgewo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJ0eCBhID0gWEVYUCAoU1VCUkVHX1JFRyAob3AwKSwgMCk7Cj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSE9TVF9XSURFX0lOVCBjMSA9IC1JTlRWQUwgKFhF WFAgKFNVQlJFR19SRUcgKG9wMCksCj4gMSkpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKChjMSA+IDAKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAm JiAodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgYzEKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIDwgSE9TVF9XSURFX0lOVF8xVSA8PCAobW9kZV93aWR0aCAtIDEp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKHVuc2lnbmVkIEhPU1Rf V0lERV9JTlQpIGMxIDwgSE9TVF9XSURFX0lOVF8xVQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA8PCAobW9kZV93aWR0aAo+IC0gMSkKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKGVxdWFsaXR5X2NvbXBhcmlzb25fcCB8 fAo+IHVuc2lnbmVkX2NvbXBhcmlzb25fcCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgLyogKEEgLSBDMSkgemVyby1leHRlbmRzIGlmIGl0IGlzIHBvc2l0aXZlIGFuZAo+ IHNpZ24tZXh0ZW5kcwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBpZiBpdCBpcyBuZWdhdGl2ZSwgQzIgYm90aCB6ZXJvLSBhbmQgc2lnbi0KPiBleHRlbmRzLsKg ICovCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKCgobm9uemVyb19i aXRzIChhLCBpbm5lcl9tb2RlKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICYgfkdFVF9NT0RFX01BU0sgKG1vZGUpKSA9PSAwCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKCgobm9uemVyb19iaXRzIChhLCBpbm5lcl9tb2Rl KSAmCj4gfkdFVF9NT0RFX01BU0sgKG1vZGUpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPT0gMAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCYmIGNvbnN0X29wID49IDApCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogKEEgLSBDMSkgc2lnbi1leHRlbmRzIGlm IGl0IGlzIHBvc2l0aXZlIGFuZAo+IDEtZXh0ZW5kcwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIGl0IGlzIG5lZ2F0aXZlLCBDMiBib3RoIHNp Z24tIGFuZCAxLQo+IGV4dGVuZHMuwqAgKi8KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB8fCAobnVtX3NpZ25fYml0X2NvcGllcyAoYSwgaW5uZXJfbW9kZSkK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPiAo dW5zaWduZWQgaW50KSAoR0VUX01PREVfUFJFQ0lTSU9OCj4gKGlubmVyX21vZGUpCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC0gbW9kZV93aWR0aCkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID4gKHVuc2lnbmVkIGludCkg KEdFVF9NT0RFX1BSRUNJU0lPTgo+IChpbm5lcl9tb2RlKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLSBtb2RlX3dpZHRoKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgY29uc3Rfb3AgPCAwKSkpCj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8ICgodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgYzEK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDwgSE9TVF9XSURF X0lOVF8xVSA8PCAobW9kZV93aWR0aCAtIDIpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHx8ICgodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgYzEgPCBIT1NUX1dJREVfSU5UXzFV Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDw8ICht b2RlX3dpZHRoCj4gLSAyKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAvKiAoQSAtIEMxKSBhbHdheXMgc2lnbi1leHRlbmRzLCBsaWtlIEMyLsKgICovCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIG51bV9zaWduX2JpdF9j b3BpZXMgKGEsIGlubmVyX21vZGUpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgPiAodW5zaWduZWQgaW50KSAoR0VUX01PREVfUFJFQ0lTSU9OCj4gKGlu bmVyX21vZGUpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLSAobW9kZV93aWR0aCAtIDEp KSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ID4gKHVuc2lnbmVkIGludCkgKEdFVF9NT0RFX1BSRUNJU0lPTgo+IChpbm5lcl9tb2RlKQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAtIChtb2RlX3dpZHRoIC0gMSkpKSkKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIG9wMCA9IFNVQlJFR19SRUcgKG9wMCk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPiBAQCAtMTI1NTksNyArMTI1MzQsNyBAQCBzaW1wbGlm eV9jb21wYXJpc29uIChlbnVtIHJ0eF9jb2RlIGNvZGUsIHJ0eAo+ICpwb3AwLCBydHggKnBvcDEp Cj4gwqDCoMKgwqDCoMKgwqDCoGNhc2UgSU9SOgo+IMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBUaGUg c2lnbiBiaXQgb2YgKGlvciAocGx1cyBYIChjb25zdF9pbnQgLTEpKSBYKSBpcwo+IG5vbnplcm8K PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWZmIFggPD0gMC7CoCAqLwo+IC3CoMKgwqDCoMKg wqDCoMKgIGlmIChzaWduX2JpdF9jb21wYXJpc29uX3AgJiYgR0VUX0NPREUgKFhFWFAgKG9wMCwg MCkpID09Cj4gUExVUwo+ICvCoMKgwqDCoMKgwqDCoMKgIGlmIChzaWduX2JpdF9jb21wYXJpc29u X3AgJiYgUExVU19QIChYRVhQIChvcDAsIDApKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICYmIFhFWFAgKFhFWFAgKG9wMCwgMCksIDEpID09IGNvbnN0bTFfcnR4Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJiYgcnR4X2VxdWFsX3AgKFhFWFAgKFhFWFAgKG9wMCwgMCksIDApLCBY RVhQIChvcDAsCj4gMSkpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgewo+IEBAIC0xMjgxMiwx NCArMTI3ODcsMTIgQEAgc2ltcGxpZnlfY29tcGFyaXNvbiAoZW51bSBydHhfY29kZSBjb2RlLAo+ IHJ0eCAqcG9wMCwgcnR4ICpwb3AxKQo+IMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBMaWtld2lzZSBp ZiBPUDAgaXMgYSBQTFVTIG9mIGEgc2lnbiBleHRlbnNpb24gd2l0aCBhCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNvbnN0YW50LCB3aGljaCBpcyB1c3VhbGx5IHJlcHJlc2VudGVkIHdpdGgg dGhlIFBMVVMKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmV0d2VlbiB0aGUgc2hpZnRzLsKg ICovCj4gLcKgwqDCoMKgwqDCoMKgwqAgaWYgKCEgdW5zaWduZWRfY29tcGFyaXNvbl9wCj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAob3AwLCAxKSkKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChYRVhQIChvcDAsIDApKSA9PSBQ TFVTCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAoWEVY UCAob3AwLCAwKSwgMSkpCj4gK8KgwqDCoMKgwqDCoMKgwqAgaWYgKCF1bnNpZ25lZF9jb21wYXJp c29uX3AgJiYgQ09OU1RfSU5UX1AgKFhFWFAgKG9wMCwgMSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAmJiBQTFVTX1AgKFhFWFAgKG9wMCwgMCkpICYmIENPTlNUX0lOVF9QIChYRVhQIChY RVhQCj4gKG9wMCwgMCksIDEpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9D T0RFIChYRVhQIChYRVhQIChvcDAsIDApLCAwKSkgPT0gQVNISUZUCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgJiYgWEVYUCAob3AwLCAxKSA9PSBYRVhQIChYRVhQIChYRVhQIChvcDAsIDAp LCAwKSwgMSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAoaW50X21vZGVfZm9yX3Np emUgKG1vZGVfd2lkdGggLSBJTlRWQUwgKFhFWFAgKG9wMCwKPiAxKSksIDEpCj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5leGlzdHMgKCZ0bW9kZSkpCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuZXhpc3RzICgmdG1vZGUpKQo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICYmICgoKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIGNvbnN0X29wCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICsgKEdFVF9NT0RFX01BU0sgKHRt b2RlKSA+PiAxKSArIDEpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA8PSBH RVRfTU9ERV9NQVNLICh0bW9kZSkpKQo+IGRpZmYgLS1naXQgYS9nY2MvY29tcGFyZS1lbGltLmNj IGIvZ2NjL2NvbXBhcmUtZWxpbS5jYwo+IGluZGV4IDRhMjMyMDJmOGZmLi45NDI3YjgxZGM5ZSAx MDA2NDQKPiAtLS0gYS9nY2MvY29tcGFyZS1lbGltLmNjCj4gKysrIGIvZ2NjL2NvbXBhcmUtZWxp bS5jYwo+IEBAIC04MzEsOCArODMxLDcgQEAgdHJ5X2VsaW1pbmF0ZV9jb21wYXJlIChzdHJ1Y3Qg Y29tcGFyaXNvbiAqY21wKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIChtaW51czpTSSAocmVnOlNJ KSAocmVnOlNJKSkpKQo+IMKgwqDCoMKgwqDCoCAoc2V0IChyZWc6Q0MgZmxhZ3MpCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqAgKGNvbXBhcmU6Q0MgKHJlZzpTSSkgKHJlZzpTSSkpKV0gKi8KPiAtwqAg ZWxzZSBpZiAoUkVHX1AgKGluX2IpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoCAmJiBHRVRfQ09ERSAo U0VUX1NSQyAoeCkpID09IE1JTlVTCj4gK8KgIGVsc2UgaWYgKFJFR19QIChpbl9iKSAmJiBNSU5V U19QIChTRVRfU1JDICh4KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBydHhfZXF1YWxfcCAo WEVYUCAoU0VUX1NSQyAoeCksIDApLCBpbl9hKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIHJ0 eF9lcXVhbF9wIChYRVhQIChTRVRfU1JDICh4KSwgMSksIGluX2IpKQo+IMKgwqDCoMKgIGNtcF9h ID0gaW5fYTsKPiBkaWZmIC0tZ2l0IGEvZ2NjL2NzZS5jYyBiL2djYy9jc2UuY2MKPiBpbmRleCBi MTNhZmQ0YmE3Mi4uY2Y1NDJjYmQ3MmMgMTAwNjQ0Cj4gLS0tIGEvZ2NjL2NzZS5jYwo+ICsrKyBi L2djYy9jc2UuY2MKPiBAQCAtMTI2NCw4ICsxMjY0LDcgQEAgZmluZF9yZWdfb2Zmc2V0X2Zvcl9j b25zdCAoc3RydWN0IHRhYmxlX2VsdAo+ICphbmNob3JfZWx0LCBIT1NUX1dJREVfSU5UIG9mZnMs Cj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBtYXRjaDsKPiDCoAo+IMKgwqDCoMKgwqDCoCBpZiAo UkVHX1AgKGVsdC0+ZXhwKQo+IC3CoMKgwqDCoMKgwqDCoMKgIHx8IChHRVRfQ09ERSAoZWx0LT5l eHApID09IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIFJFR19QIChYRVhQIChl bHQtPmV4cCwgMCkpCj4gK8KgwqDCoMKgwqDCoMKgwqAgfHwgKFBMVVNfUCAoZWx0LT5leHApICYm IFJFR19QIChYRVhQIChlbHQtPmV4cCwgMCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg JiYgR0VUX0NPREUgKFhFWFAgKGVsdC0+ZXhwLCAxKSkgPT0gQ09OU1RfSU5UKSkKPiDCoMKgwqDC oMKgwqDCoMKgewo+IMKgwqDCoMKgwqDCoMKgwqDCoCBydHggeDsKPiBAQCAtMTI3Niw5ICsxMjc1 LDggQEAgZmluZF9yZWdfb2Zmc2V0X2Zvcl9jb25zdCAoc3RydWN0IHRhYmxlX2VsdAo+ICphbmNo b3JfZWx0LCBIT1NUX1dJREVfSU5UIG9mZnMsCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgwqAgeCA9 IHBsdXNfY29uc3RhbnQgKEdFVF9NT0RFIChlbHQtPmV4cCksIGVsdC0+ZXhwLCBvZmZzKTsKPiDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKFJFR19QICh4KQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfHwgKEdFVF9DT0RFICh4KSA9PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICYmIElOX1JBTkdFIChJTlRWQUwgKFhFWFAgKHgsIDEpKSwKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAtdGFyZ2V0bS5j b25zdF9hbmNob3IsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCAoUExVU19QICh4KQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBJTl9SQU5HRSAoSU5UVkFMIChY RVhQICh4LCAxKSksIC0KPiB0YXJnZXRtLmNvbnN0X2FuY2hvciwKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGFyZ2V0bS5jb25z dF9hbmNob3IgLSAxKSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB7Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbWF0Y2ggPSB4Owo+IEBAIC0zNDkyLDQwICszNDkwLDQ4IEBAIGZvbGRf cnR4IChydHggeCwgcnR4X2luc24gKmluc24pCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFE RFJfRElGRl9WRUMgdGFibGUuwqAgKi8KPiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGNvbnN0X2Fy ZzEgJiYgR0VUX0NPREUgKGNvbnN0X2FyZzEpID09IExBQkVMX1JFRikKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJ0eCB5Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0gR0VUX0NPREUgKGZvbGRlZF9hcmcwKSA9PSBNSU5VUyA/ IGZvbGRlZF9hcmcwCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDogbG9va3VwX2Fz X2Z1bmN0aW9uIChmb2xkZWRfYXJnMCwgTUlOVVMpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcnR4IHkgPSBNSU5VU19QIChmb2xkZWRfYXJnMCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD8gZm9sZGVkX2FyZzAKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDogbG9va3VwX2FzX2Z1bmN0aW9uIChmb2xk ZWRfYXJnMCwgTUlOVVMpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHkg IT0gMCAmJiBHRVRfQ09ERSAoWEVYUCAoeSwgMSkpID09IExBQkVMX1JFRgo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBsYWJlbF9yZWZfbGFiZWwgKFhFWFAgKHksIDEpKSA9 PSBsYWJlbF9yZWZfbGFiZWwKPiAoY29uc3RfYXJnMSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICYmIGxhYmVsX3JlZl9sYWJlbCAoWEVYUCAoeSwgMSkpCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9PSBsYWJlbF9yZWZfbGFiZWwgKGNv bnN0X2FyZzEpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIFhFWFAg KHksIDApOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogTm93IHRyeSBmb3Ig YSBDT05TVCBvZiBhIE1JTlVTIGxpa2UgdGhlIGFib3ZlLsKgICovCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoKHkgPSAoR0VUX0NPREUgKGZvbGRlZF9hcmcwKSA9PSBDT05TVCA/IGZv bGRlZF9hcmcwCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqA6IGxvb2t1cF9hc19mdW5jdGlvbiAoZm9sZGVkX2FyZzAsIENPTlNUKSkpCj4gIT0gMAo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBHRVRfQ09ERSAoWEVYUCAoeSwgMCkp ID09IE1JTlVTCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoKHkgPSAoR0VUX0NPREUg KGZvbGRlZF9hcmcwKSA9PSBDT05TVAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgPyBmb2xkZWRfYXJnMAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOiBsb29rdXBfYXNfZnVuY3Rpb24gKGZvbGRlZF9h cmcwLCBDT05TVCkpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIT0g MAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBNSU5VU19QIChYRVhQICh5 LCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChY RVhQIChYRVhQICh5LCAwKSwgMSkpID09IExBQkVMX1JFRgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAmJiBsYWJlbF9yZWZfbGFiZWwgKFhFWFAgKFhFWFAgKHksIDApLCAxKSkg PT0KPiBsYWJlbF9yZWZfbGFiZWwgKGNvbnN0X2FyZzEpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAmJiBsYWJlbF9yZWZfbGFiZWwgKFhFWFAgKFhFWFAgKHksIDApLCAxKSkK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID09IGxhYmVsX3Jl Zl9sYWJlbCAoY29uc3RfYXJnMSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gWEVYUCAoWEVYUCAoeSwgMCksIDApOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgIC8qIExpa2V3aXNlIGlmIHRoZSBvcGVyYW5kcyBhcmUg aW4gdGhlIG90aGVyIG9yZGVyLsKgICovCj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChjb25zdF9h cmcwICYmIEdFVF9DT0RFIChjb25zdF9hcmcwKSA9PSBMQUJFTF9SRUYpCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBydHggeQo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IEdFVF9DT0RFIChmb2xkZWRfYXJnMSkgPT0gTUlOVVMg PyBmb2xkZWRfYXJnMQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA6IGxvb2t1cF9h c19mdW5jdGlvbiAoZm9sZGVkX2FyZzEsIE1JTlVTKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJ0eCB5ID0gTUlOVVNfUCAoZm9sZGVkX2FyZzEpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA/IGZvbGRlZF9hcmcxCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA6IGxvb2t1cF9hc19mdW5jdGlvbiAoZm9s ZGVkX2FyZzEsIE1JTlVTKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICh5 ICE9IDAgJiYgR0VUX0NPREUgKFhFWFAgKHksIDEpKSA9PSBMQUJFTF9SRUYKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgbGFiZWxfcmVmX2xhYmVsIChYRVhQICh5LCAxKSkg PT0gbGFiZWxfcmVmX2xhYmVsCj4gKGNvbnN0X2FyZzApKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAmJiBsYWJlbF9yZWZfbGFiZWwgKFhFWFAgKHksIDEpKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPT0gbGFiZWxfcmVmX2xhYmVsIChj b25zdF9hcmcwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBYRVhQ ICh5LCAwKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIE5vdyB0cnkgZm9y IGEgQ09OU1Qgb2YgYSBNSU5VUyBsaWtlIHRoZSBhYm92ZS7CoCAqLwo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKCh5ID0gKEdFVF9DT0RFIChmb2xkZWRfYXJnMSkgPT0gQ09OU1QgPyBm b2xkZWRfYXJnMQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgOiBsb29rdXBfYXNfZnVuY3Rpb24gKGZvbGRlZF9hcmcxLCBDT05TVCkpKQo+ICE9IDAKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhFWFAgKHksIDAp KSA9PSBNSU5VUwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCh5ID0gKEdFVF9DT0RF IChmb2xkZWRfYXJnMSkgPT0gQ09OU1QKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgID8gZm9sZGVkX2FyZzEKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDogbG9va3VwX2FzX2Z1bmN0aW9uIChmb2xkZWRf YXJnMSwgQ09OU1QpKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICE9 IDAKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgTUlOVVNfUCAoWEVYUCAo eSwgMCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBHRVRfQ09ERSAo WEVYUCAoWEVYUCAoeSwgMCksIDEpKSA9PSBMQUJFTF9SRUYKPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJiYgbGFiZWxfcmVmX2xhYmVsIChYRVhQIChYRVhQICh5LCAwKSwgMSkp ID09Cj4gbGFiZWxfcmVmX2xhYmVsIChjb25zdF9hcmcwKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJiYgbGFiZWxfcmVmX2xhYmVsIChYRVhQIChYRVhQICh5LCAwKSwgMSkp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9PSBsYWJlbF9y ZWZfbGFiZWwgKGNvbnN0X2FyZzApKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIFhFWFAgKFhFWFAgKHksIDApLCAwKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0K PiDCoAo+IEBAIC00ODE3LDcgKzQ4MjMsNyBAQCBjc2VfaW5zbiAocnR4X2luc24gKmluc24pCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogQ29uc2lkZXIgKG1pbnVzIChsYWJlbF9yZWYg TDEpIChsYWJlbF9yZWYgTDIpKSBhcwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICJjb25zdGFudCIgaGVyZSBzbyB3ZSB3aWxsIHJlY29yZCBpdC4gVGhpcyBhbGxvd3MgdXMKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0byBmb2xkIHN3aXRjaCBzdGF0ZW1lbnRz IHdoZW4gYW4gQUREUl9ESUZGX1ZFQyBpcwo+IHVzZWQuwqAgKi8KPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHx8IChHRVRfQ09ERSAoc3JjX2ZvbGRlZCkgPT0gTUlOVVMKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHx8IChNSU5VU19QIChzcmNfZm9sZGVkKQo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhFWFAgKHNyY19mb2xkZWQsIDApKSA9 PSBMQUJFTF9SRUYKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9D T0RFIChYRVhQIChzcmNfZm9sZGVkLCAxKSkgPT0gTEFCRUxfUkVGKSkpCj4gwqDCoMKgwqDCoMKg wqDCoHNyY19jb25zdCA9IHNyY19mb2xkZWQsIHNyY19jb25zdF9lbHQgPSBlbHQ7Cj4gQEAgLTUz NjQsOSArNTM3MCwxMCBAQCBjc2VfaW5zbiAocnR4X2luc24gKmluc24pCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChHRVRfQ09ERSAoWEVYUCAodHJpYWwsIDApKSA9 PSBUUlVOQ0FURQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IC8qIExpa2V3aXNlIG9uIElBLTY0LCBleGNlcHQgd2l0aG91dCB0aGUKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0cnVuY2F0ZS7CoCAqLwo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgKEdFVF9DT0RFIChY RVhQICh0cmlhbCwgMCkpID09IE1JTlVTCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB8fCAoTUlOVVNfUCAoWEVYUCAodHJpYWwsIDApKQo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhF WFAgKFhFWFAgKHRyaWFsLCAwKSwgMCkpID09Cj4gTEFCRUxfUkVGCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChYRVhQIChY RVhQICh0cmlhbCwgMCksIDEpKSA9PQo+IExBQkVMX1JFRikpKQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBHRVRfQ09ERSAoWEVYUCAoWEVY UCAodHJpYWwsIDApLCAxKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9PSBMQUJFTF9SRUYpKSkKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIC8qIERvIG5vdGhpbmcgZm9yIHRoaXMgY2FzZS7CoCAqLwo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgOwo+IMKgCj4gQEAgLTU0ODksMTQgKzU0OTYsOSBAQCBjc2VfaW5zbiAocnR4 X2luc24gKmluc24pCj4gwqDCoMKgwqDCoMKgwqDCoCBBdm9pZCBhIFJFR19FUVVBTCBub3RlIGZv ciAoQ09OU1QgKE1JTlVTIChMQUJFTF9SRUYpCj4gKExBQkVMX1JFRikpKQo+IMKgwqDCoMKgwqDC oMKgwqAgd2hpY2ggY2FuIGJlIGNyZWF0ZWQgZm9yIGEgcmVmZXJlbmNlIHRvIGEgY29tcGlsZSB0 aW1lCj4gY29tcHV0YWJsZQo+IMKgwqDCoMKgwqDCoMKgwqAgZW50cnkgaW4gYSBqdW1wIHRhYmxl LsKgICovCj4gLcKgwqDCoMKgwqAgaWYgKG5fc2V0cyA9PSAxCj4gLcKgwqDCoMKgwqDCoMKgwqAg JiYgUkVHX1AgKGRlc3QpCj4gLcKgwqDCoMKgwqDCoMKgwqAgJiYgc3JjX2NvbnN0Cj4gLcKgwqDC oMKgwqDCoMKgwqAgJiYgIVJFR19QIChzcmNfY29uc3QpCj4gLcKgwqDCoMKgwqDCoMKgwqAgJiYg IShHRVRfQ09ERSAoc3JjX2NvbnN0KSA9PSBTVUJSRUcKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgJiYgUkVHX1AgKFNVQlJFR19SRUcgKHNyY19jb25zdCkpKQo+IC3CoMKgwqDCoMKgwqDC oMKgICYmICEoR0VUX0NPREUgKHNyY19jb25zdCkgPT0gQ09OU1QKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhFWFAgKHNyY19jb25zdCwgMCkpID09IE1JTlVTCj4g K8KgwqDCoMKgwqAgaWYgKG5fc2V0cyA9PSAxICYmIFJFR19QIChkZXN0KSAmJiBzcmNfY29uc3Qg JiYgIVJFR19QCj4gKHNyY19jb25zdCkKPiArwqDCoMKgwqDCoMKgwqDCoCAmJiAhKEdFVF9DT0RF IChzcmNfY29uc3QpID09IFNVQlJFRyAmJiBSRUdfUCAoU1VCUkVHX1JFRwo+IChzcmNfY29uc3Qp KSkKPiArwqDCoMKgwqDCoMKgwqDCoCAmJiAhKEdFVF9DT0RFIChzcmNfY29uc3QpID09IENPTlNU ICYmIE1JTlVTX1AgKFhFWFAKPiAoc3JjX2NvbnN0LCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICYmIEdFVF9DT0RFIChYRVhQIChYRVhQIChzcmNfY29uc3QsIDApLCAwKSkgPT0K PiBMQUJFTF9SRUYKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChY RVhQIChYRVhQIChzcmNfY29uc3QsIDApLCAxKSkgPT0KPiBMQUJFTF9SRUYpCj4gwqDCoMKgwqDC oMKgwqDCoMKgICYmICFydHhfZXF1YWxfcCAoc3JjLCBzcmNfY29uc3QpKQo+IGRpZmYgLS1naXQg YS9nY2MvY3NlbGliLmNjIGIvZ2NjL2NzZWxpYi5jYwo+IGluZGV4IDJhYmM3NjNhM2Y4Li45ZDdl YThhZTMyMCAxMDA2NDQKPiAtLS0gYS9nY2MvY3NlbGliLmNjCj4gKysrIGIvZ2NjL2NzZWxpYi5j Ywo+IEBAIC00ODEsOCArNDgxLDcgQEAgaW52YXJpYW50X29yX2VxdWl2X3AgKGNzZWxpYl92YWwg KnYpCj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+IMKgCj4gwqDCoMKgwqDCoMKgIC8q IChwbHVzICh2YWx1ZSBWKSAoY29uc3RfaW50IEMpKSBpcyBpbnZhcmlhbnQgaWZmIFYgaXMKPiBp bnZhcmlhbnQuwqAgKi8KPiAtwqDCoMKgwqDCoCBpZiAoR0VUX0NPREUgKHYtPmxvY3MtPmxvYykg PT0gUExVUwo+IC3CoMKgwqDCoMKgwqDCoMKgICYmIENPTlNUX0lOVF9QIChYRVhQICh2LT5sb2Nz LT5sb2MsIDEpKQo+ICvCoMKgwqDCoMKgIGlmIChQTFVTX1AgKHYtPmxvY3MtPmxvYykgJiYgQ09O U1RfSU5UX1AgKFhFWFAgKHYtPmxvY3MtPmxvYywKPiAxKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqAg JiYgR0VUX0NPREUgKFhFWFAgKHYtPmxvY3MtPmxvYywgMCkpID09IFZBTFVFCj4gwqDCoMKgwqDC oMKgwqDCoMKgICYmIGludmFyaWFudF9vcl9lcXVpdl9wIChDU0VMSUJfVkFMX1BUUiAoWEVYUCAo di0+bG9jcy0KPiA+bG9jLCAwKSkpKQo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiBA QCAtNTQ3LDEwICs1NDYsOSBAQCBjc2VsaWJfcmVzZXRfdGFibGUgKHVuc2lnbmVkIGludCBudW0p Cj4gwqAKPiDCoMKgwqDCoMKgwqAgLyogSWYgY2ZhX2Jhc2UgaXMgc3AgKyBjb25zdF9pbnQsIG5l ZWQgdG8gcHJlc2VydmUgYWxzbyB0aGUKPiDCoMKgwqDCoMKgwqDCoMKgIFNQX0RFUklWRURfVkFM VUVfUCB2YWx1ZS7CoCAqLwo+IC3CoMKgwqDCoMKgIGZvciAoc3RydWN0IGVsdF9sb2NfbGlzdCAq bCA9IGNmYV9iYXNlX3ByZXNlcnZlZF92YWwtPmxvY3M7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoCBs OyBsID0gbC0+bmV4dCkKPiAtwqDCoMKgwqDCoMKgwqBpZiAoR0VUX0NPREUgKGwtPmxvYykgPT0g UExVUwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBHRVRfQ09ERSAoWEVYUCAobC0+bG9jLCAw KSkgPT0gVkFMVUUKPiArwqDCoMKgwqDCoCBmb3IgKHN0cnVjdCBlbHRfbG9jX2xpc3QgKmwgPSBj ZmFfYmFzZV9wcmVzZXJ2ZWRfdmFsLT5sb2NzOyBsOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqAgbCA9 IGwtPm5leHQpCj4gK8KgwqDCoMKgwqDCoMKgaWYgKFBMVVNfUCAobC0+bG9jKSAmJiBHRVRfQ09E RSAoWEVYUCAobC0+bG9jLCAwKSkgPT0gVkFMVUUKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYm IFNQX0RFUklWRURfVkFMVUVfUCAoWEVYUCAobC0+bG9jLCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICYmIENPTlNUX0lOVF9QIChYRVhQIChsLT5sb2MsIDEpKSkKPiDCoMKgwqDCoMKgwqDC oMKgwqAgewo+IEBAIC04OTMsOCArODkxLDcgQEAgYXV0b2luY19zcGxpdCAocnR4IHgsIHJ0eCAq b2ZmLCBtYWNoaW5lX21vZGUKPiBtZW1tb2RlKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiBlLT52YWxfcnR4Owo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKgwqDCoMKg wqDCoMKgwqDCoCBmb3IgKHN0cnVjdCBlbHRfbG9jX2xpc3QgKmwgPSBlLT5sb2NzOyBsOyBsID0g bC0+bmV4dCkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFIChsLT5sb2MpID09 IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgJiYgR0VUX0NPREUgKFhFWFAg KGwtPmxvYywgMCkpID09IFZBTFVFCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChQTFVTX1Ag KGwtPmxvYykgJiYgR0VUX0NPREUgKFhFWFAgKGwtPmxvYywgMCkpID09Cj4gVkFMVUUKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCYmIFNQX0RFUklWRURfVkFMVUVfUCAoWEVYUCAo bC0+bG9jLCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCYmIENPTlNUX0lO VF9QIChYRVhQIChsLT5sb2MsIDEpKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB7Cj4g QEAgLTEwMTUsOSArMTAxMiw3IEBAIHJ0eF9lcXVhbF9mb3JfY3NlbGliXzEgKHJ0eCB4LCBydHgg eSwKPiBtYWNoaW5lX21vZGUgbWVtbW9kZSwgaW50IGRlcHRoKQo+IMKgwqDCoMKgIHJldHVybiAw Owo+IMKgCj4gwqDCoCBpZiAoR0VUX0NPREUgKHgpICE9IEdFVF9DT0RFICh5KQo+IC3CoMKgwqDC oMKgIHx8IChHRVRfQ09ERSAoeCkgPT0gUExVUwo+IC3CoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9N T0RFICh4KSA9PSBQbW9kZQo+IC3CoMKgwqDCoMKgwqDCoMKgICYmIENPTlNUX0lOVF9QIChYRVhQ ICh4LCAxKSkKPiArwqDCoMKgwqDCoCB8fCAoUExVU19QICh4KSAmJiBHRVRfTU9ERSAoeCkgPT0g UG1vZGUgJiYgQ09OU1RfSU5UX1AgKFhFWFAKPiAoeCwgMSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKg ICYmIENPTlNUX0lOVF9QIChYRVhQICh5LCAxKSkpKQo+IMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKg wqAgcnR4IHhvcmlnID0geCwgeW9yaWcgPSB5Owo+IEBAIC0xMjM4LDEwICsxMjMzLDkgQEAgY3Nl bGliX2hhc2hfcGx1c19jb25zdF9pbnQgKHJ0eCB4LAo+IEhPU1RfV0lERV9JTlQgYywgaW50IGNy ZWF0ZSwKPiDCoMKgIGlmICghIGUpCj4gwqDCoMKgwqAgcmV0dXJuIDA7Cj4gwqAKPiAtwqAgaWYg KCEgU1BfREVSSVZFRF9WQUxVRV9QIChlLT52YWxfcnR4KSkKPiArwqAgaWYgKCFTUF9ERVJJVkVE X1ZBTFVFX1AgKGUtPnZhbF9ydHgpKQo+IMKgwqDCoMKgIGZvciAoc3RydWN0IGVsdF9sb2NfbGlz dCAqbCA9IGUtPmxvY3M7IGw7IGwgPSBsLT5uZXh0KQo+IC3CoMKgwqDCoMKgIGlmIChHRVRfQ09E RSAobC0+bG9jKSA9PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhFWFAg KGwtPmxvYywgMCkpID09IFZBTFVFCj4gK8KgwqDCoMKgwqAgaWYgKFBMVVNfUCAobC0+bG9jKSAm JiBHRVRfQ09ERSAoWEVYUCAobC0+bG9jLCAwKSkgPT0gVkFMVUUKPiDCoMKgwqDCoMKgwqDCoMKg wqAgJiYgU1BfREVSSVZFRF9WQUxVRV9QIChYRVhQIChsLT5sb2MsIDApKQo+IMKgwqDCoMKgwqDC oMKgwqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAobC0+bG9jLCAxKSkpCj4gwqDCoMKgwqDCoMKg wqDCoHsKPiBAQCAtMjE5NSwxMCArMjE4OSw5IEBAIGNzZWxpYl9zdWJzdF90b192YWx1ZXMgKHJ0 eCB4LCBtYWNoaW5lX21vZGUKPiBtZW1tb2RlKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgewo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChTUF9ERVJJVkVEX1ZBTFVFX1AgKHQpICYm IFhFWFAgKHgsIDEpID09Cj4gY29uc3QwX3J0eCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiB0Owo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yIChzdHJ1Y3Qg ZWx0X2xvY19saXN0ICpsID0gQ1NFTElCX1ZBTF9QVFIgKHQpLT5sb2NzOwo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGw7IGwgPSBsLT5uZXh0KQo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoR0VUX0NPREUgKGwtPmxvYykgPT0gUExVUwo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhFWFAgKGwtPmxvYywg MCkpID09IFZBTFVFCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKHN0cnVjdCBlbHRf bG9jX2xpc3QgKmwgPSBDU0VMSUJfVkFMX1BUUiAodCktPmxvY3M7Cj4gbDsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsID0gbC0+bmV4dCkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKFBMVVNfUCAobC0+bG9jKSAmJiBHRVRfQ09ERSAoWEVYUCAobC0+ bG9jLCAwKSkgPT0KPiBWQUxVRQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICYmIFNQX0RFUklWRURfVkFMVUVfUCAoWEVYUCAobC0+bG9jLCAwKSkKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAobC0+bG9j LCAxKSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcGx1c19j b25zdGFudCAoUG1vZGUsIGwtPmxvYywgSU5UVkFMIChYRVhQCj4gKHgsIDEpKSk7Cj4gQEAgLTI3 NzQsOCArMjc2Nyw3IEBAIGNzZWxpYl9yZWNvcmRfc3BfY2ZhX2Jhc2VfZXF1aXYgKEhPU1RfV0lE RV9JTlQKPiBvZmZzZXQsIHJ0eF9pbnNuICppbnNuKQo+IMKgwqDCoMKgwqDCoMKgwqBzcF9kZXJp dmVkX3ZhbHVlID0gbC0+bG9jOwo+IMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiDCoMKgwqDCoMKg wqAgfQo+IC3CoMKgwqAgZWxzZSBpZiAoR0VUX0NPREUgKGwtPmxvYykgPT0gUExVUwo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChYRVhQIChsLT5sb2MsIDApKSA9PSBWQUxV RQo+ICvCoMKgwqAgZWxzZSBpZiAoUExVU19QIChsLT5sb2MpICYmIEdFVF9DT0RFIChYRVhQIChs LT5sb2MsIDApKSA9PSBWQUxVRQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBTUF9ERVJJ VkVEX1ZBTFVFX1AgKFhFWFAgKGwtPmxvYywgMCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICYmIENPTlNUX0lOVF9QIChYRVhQIChsLT5sb2MsIDEpKSkKPiDCoMKgwqDCoMKgwqAgewo+IEBA IC0yODAzLDggKzI3OTUsNyBAQCBjc2VsaWJfc3BfZGVyaXZlZF92YWx1ZV9wIChjc2VsaWJfdmFs ICp2KQo+IMKgewo+IMKgwqAgaWYgKCFTUF9ERVJJVkVEX1ZBTFVFX1AgKHYtPnZhbF9ydHgpKQo+ IMKgwqDCoMKgIGZvciAoc3RydWN0IGVsdF9sb2NfbGlzdCAqbCA9IHYtPmxvY3M7IGw7IGwgPSBs LT5uZXh0KQo+IC3CoMKgwqDCoMKgIGlmIChHRVRfQ09ERSAobC0+bG9jKSA9PSBQTFVTCj4gLcKg wqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhFWFAgKGwtPmxvYywgMCkpID09IFZBTFVFCj4g K8KgwqDCoMKgwqAgaWYgKFBMVVNfUCAobC0+bG9jKSAmJiBHRVRfQ09ERSAoWEVYUCAobC0+bG9j LCAwKSkgPT0gVkFMVUUKPiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgU1BfREVSSVZFRF9WQUxVRV9Q IChYRVhQIChsLT5sb2MsIDApKQo+IMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVF9JTlRfUCAo WEVYUCAobC0+bG9jLCAxKSkpCj4gwqDCoMKgwqDCoMKgwqDCoHYgPSBDU0VMSUJfVkFMX1BUUiAo WEVYUCAobC0+bG9jLCAwKSk7Cj4gQEAgLTI4MTMsNyArMjgwNCw3IEBAIGNzZWxpYl9zcF9kZXJp dmVkX3ZhbHVlX3AgKGNzZWxpYl92YWwgKnYpCj4gwqDCoCBmb3IgKHN0cnVjdCBlbHRfbG9jX2xp c3QgKmwgPSB2LT5sb2NzOyBsOyBsID0gbC0+bmV4dCkKPiDCoMKgwqDCoCBpZiAobC0+bG9jID09 IGNmYV9iYXNlX3ByZXNlcnZlZF92YWwtPnZhbF9ydHgpCj4gwqDCoMKgwqDCoMKgIHJldHVybiB0 cnVlOwo+IC3CoMKgwqAgZWxzZSBpZiAoR0VUX0NPREUgKGwtPmxvYykgPT0gUExVUwo+ICvCoMKg wqAgZWxzZSBpZiAoUExVU19QIChsLT5sb2MpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYm IFhFWFAgKGwtPmxvYywgMCkgPT0gY2ZhX2Jhc2VfcHJlc2VydmVkX3ZhbC0+dmFsX3J0eAo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAobC0+bG9jLCAxKSkp Cj4gwqDCoMKgwqDCoMKgIHJldHVybiB0cnVlOwo+IGRpZmYgLS1naXQgYS9nY2MvZGNlLmNjIGIv Z2NjL2RjZS5jYwo+IGluZGV4IDY0YWEwYWE0NzFkLi42MTU3ZjI2MzBmNiAxMDA2NDQKPiAtLS0g YS9nY2MvZGNlLmNjCj4gKysrIGIvZ2NjL2RjZS5jYwo+IEBAIC0zMDAsOSArMzAwLDcgQEAgc3Bf YmFzZWRfbWVtX29mZnNldCAocnR4X2NhbGxfaW5zbiAqY2FsbF9pbnNuLAo+IGNvbnN0X3J0eCBt ZW0sIGJvb2wgZmFzdCkKPiDCoHsKPiDCoMKgIEhPU1RfV0lERV9JTlQgb2ZmID0gMDsKPiDCoMKg IHJ0eCBhZGRyID0gWEVYUCAobWVtLCAwKTsKPiAtwqAgaWYgKEdFVF9DT0RFIChhZGRyKSA9PSBQ TFVTCj4gLcKgwqDCoMKgwqAgJiYgUkVHX1AgKFhFWFAgKGFkZHIsIDApKQo+IC3CoMKgwqDCoMKg ICYmIENPTlNUX0lOVF9QIChYRVhQIChhZGRyLCAxKSkpCj4gK8KgIGlmIChQTFVTX1AgKGFkZHIp ICYmIFJFR19QIChYRVhQIChhZGRyLCAwKSkgJiYgQ09OU1RfSU5UX1AgKFhFWFAKPiAoYWRkciwg MSkpKQo+IMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqAgb2ZmID0gSU5UVkFMIChYRVhQIChhZGRy LCAxKSk7Cj4gwqDCoMKgwqDCoMKgIGFkZHIgPSBYRVhQIChhZGRyLCAwKTsKPiBkaWZmIC0tZ2l0 IGEvZ2NjL2R3YXJmMmNmaS5jYyBiL2djYy9kd2FyZjJjZmkuY2MKPiBpbmRleCBiZWYzMTY1ZTY5 MS4uNDU3YTY0ODdkNjQgMTAwNjQ0Cj4gLS0tIGEvZ2NjL2R3YXJmMmNmaS5jYwo+ICsrKyBiL2dj Yy9kd2FyZjJjZmkuY2MKPiBAQCAtMjA5NCw3ICsyMDk0LDcgQEAgZHdhcmYyb3V0X2ZyYW1lX2Rl YnVnX2V4cHIgKHJ0eCBleHByKQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnY2NfYXNz ZXJ0IChSRUdfUCAoWEVYUCAoWEVYUCAoZGVzdCwgMCksIDApKSk7Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBvZmZzZXQgPSBydHhfdG9fcG9seV9pbnQ2NCAoWEVYUCAoWEVYUCAoZGVzdCwgMCks IDEpKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFIChYRVhQIChkZXN0LCAw KSkgPT0gTUlOVVMpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChNSU5VU19QIChYRVhQIChk ZXN0LCAwKSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2Zmc2V0ID0gLW9mZnNldDsK PiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVnbm8gPSBkd2ZfY2ZhX3JlZyAoWEVYUCAo WEVYUCAoZGVzdCwgMCksIDApKTsKPiBkaWZmIC0tZ2l0IGEvZ2NjL2R3YXJmMm91dC5jYyBiL2dj Yy9kd2FyZjJvdXQuY2MKPiBpbmRleCBlODEwNDRiOGM0OC4uOTJjYThlM2IwODEgMTAwNjQ0Cj4g LS0tIGEvZ2NjL2R3YXJmMm91dC5jYwo+ICsrKyBiL2djYy9kd2FyZjJvdXQuY2MKPiBAQCAtMTQ5 MDYsMTAgKzE0OTA2LDEwIEBAIGJhc2VkX2xvY19kZXNjciAocnR4IHJlZywgcG9seV9pbnQ2NAo+ IG9mZnNldCwKPiDCoHN0YXRpYyBpbmxpbmUgaW50Cj4gwqBpc19iYXNlZF9sb2MgKGNvbnN0X3J0 eCBydGwpCj4gwqB7Cj4gLcKgIHJldHVybiAoR0VUX0NPREUgKHJ0bCkgPT0gUExVUwo+IC3CoMKg wqDCoMKgwqDCoMKgICYmICgoUkVHX1AgKFhFWFAgKHJ0bCwgMCkpCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICYmIFJFR05PIChYRVhQIChydGwsIDApKSA8IEZJUlNUX1BTRVVET19SRUdJ U1RFUgo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAo cnRsLCAxKSkpKSk7Cj4gK8KgIHJldHVybiAoCj4gK8KgwqDCoCBQTFVTX1AgKHJ0bCkKPiArwqDC oMKgICYmICgoUkVHX1AgKFhFWFAgKHJ0bCwgMCkpICYmIFJFR05PIChYRVhQIChydGwsIDApKSA8 Cj4gRklSU1RfUFNFVURPX1JFR0lTVEVSCj4gK8KgwqDCoMKgwqDCoMKgICYmIENPTlNUX0lOVF9Q IChYRVhQIChydGwsIDEpKSkpKTsKPiDCoH0KPiDCoAo+IMKgLyogVHJ5IHRvIGhhbmRsZSBUTFMg TUVNcywgZm9yIHdoaWNoIG1lbV9sb2NfZGVzY3JpcHRvciBvbiBYRVhQCj4gKG1lbSwgMCkKPiBA QCAtMzA2ODYsOCArMzA2ODYsNyBAQCBvcHRpbWl6ZV9vbmVfYWRkcl9pbnRvX2ltcGxpY2l0X3B0 cgo+IChkd19sb2NfZGVzY3JfcmVmIGxvYykKPiDCoMKgIGR3X2RpZV9yZWYgcmVmID0gTlVMTDsK PiDCoMKgIHRyZWUgZGVjbDsKPiDCoAo+IC3CoCBpZiAoR0VUX0NPREUgKHJ0bCkgPT0gQ09OU1QK PiAtwqDCoMKgwqDCoCAmJiBHRVRfQ09ERSAoWEVYUCAocnRsLCAwKSkgPT0gUExVUwo+ICvCoCBp ZiAoR0VUX0NPREUgKHJ0bCkgPT0gQ09OU1QgJiYgUExVU19QIChYRVhQIChydGwsIDApKQo+IMKg wqDCoMKgwqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAoWEVYUCAocnRsLCAwKSwgMSkpKQo+IMKg wqDCoMKgIHsKPiDCoMKgwqDCoMKgwqAgb2Zmc2V0ID0gSU5UVkFMIChYRVhQIChYRVhQIChydGws IDApLCAxKSk7Cj4gZGlmZiAtLWdpdCBhL2djYy9lbWl0LXJ0bC5jYyBiL2djYy9lbWl0LXJ0bC5j Ywo+IGluZGV4IGYyNWZiNzBhYjk3Li41NGU3OTNiYzk0OSAxMDA2NDQKPiAtLS0gYS9nY2MvZW1p dC1ydGwuY2MKPiArKysgYi9nY2MvZW1pdC1ydGwuY2MKPiBAQCAtMjUxNCwxMCArMjUxNCw4IEBA IG9mZnNldF9hZGRyZXNzIChydHggbWVtcmVmLCBydHggb2Zmc2V0LAo+IHVuc2lnbmVkIEhPU1Rf V0lERV9JTlQgcG93MikKPiDCoMKgwqDCoMKgIGJlaW5nIGFibGUgdG8gcmVjb2duaXplIHRoZSBt YWdpYyBhcm91bmQgcGljX29mZnNldF90YWJsZV9ydHguCj4gwqDCoMKgwqDCoCBUaGlzIHN0dWZm IGlzIGZyYWdpbGUsIGFuZCBpcyB5ZXQgYW5vdGhlciBleGFtcGxlIG9mIHdoeSBpdCBpcwo+IMKg wqDCoMKgwqAgYmFkIHRvIGV4cG9zZSBQSUMgbWFjaGluZXJ5IHRvbyBlYXJseS7CoCAqLwo+IC3C oCBpZiAoISBtZW1vcnlfYWRkcmVzc19hZGRyX3NwYWNlX3AgKEdFVF9NT0RFIChtZW1yZWYpLCBu ZXdfcnR4LAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF0dHJzLmFkZHJzcGFjZSkKPiAtwqDCoMKgwqDCoCAm JiBHRVRfQ09ERSAoYWRkcikgPT0gUExVUwo+IC3CoMKgwqDCoMKgICYmIFhFWFAgKGFkZHIsIDAp ID09IHBpY19vZmZzZXRfdGFibGVfcnR4KQo+ICvCoCBpZiAoIW1lbW9yeV9hZGRyZXNzX2FkZHJf c3BhY2VfcCAoR0VUX01PREUgKG1lbXJlZiksIG5ld19ydHgsCj4gYXR0cnMuYWRkcnNwYWNlKQo+ ICvCoMKgwqDCoMKgICYmIFBMVVNfUCAoYWRkcikgJiYgWEVYUCAoYWRkciwgMCkgPT0gcGljX29m ZnNldF90YWJsZV9ydHgpCj4gwqDCoMKgwqAgewo+IMKgwqDCoMKgwqDCoCBhZGRyID0gZm9yY2Vf cmVnIChHRVRfTU9ERSAoYWRkciksIGFkZHIpOwo+IMKgwqDCoMKgwqDCoCBuZXdfcnR4ID0gc2lt cGxpZnlfZ2VuX2JpbmFyeSAoUExVUywgYWRkcmVzc19tb2RlLCBhZGRyLAo+IG9mZnNldCk7Cj4g ZGlmZiAtLWdpdCBhL2djYy9leHBsb3cuY2MgYi9nY2MvZXhwbG93LmNjCj4gaW5kZXggNTY4ZTBl YjFhMTUuLjczNDM1ZGYxNTMxIDEwMDY0NAo+IC0tLSBhL2djYy9leHBsb3cuY2MKPiArKysgYi9n Y2MvZXhwbG93LmNjCj4gQEAgLTI2OCwxMSArMjY4LDkgQEAgc3RhdGljIHJ0eAo+IMKgYnJlYWtf b3V0X21lbW9yeV9yZWZzIChydHggeCkKPiDCoHsKPiDCoMKgIGlmIChNRU1fUCAoeCkKPiAtwqDC oMKgwqDCoCB8fCAoQ09OU1RBTlRfUCAoeCkgJiYgQ09OU1RBTlRfQUREUkVTU19QICh4KQo+IC3C oMKgwqDCoMKgwqDCoMKgICYmIEdFVF9NT0RFICh4KSAhPSBWT0lEbW9kZSkpCj4gK8KgwqDCoMKg wqAgfHwgKENPTlNUQU5UX1AgKHgpICYmIENPTlNUQU5UX0FERFJFU1NfUCAoeCkgJiYgR0VUX01P REUgKHgpCj4gIT0gVk9JRG1vZGUpKQo+IMKgwqDCoMKgIHggPSBmb3JjZV9yZWcgKEdFVF9NT0RF ICh4KSwgeCk7Cj4gLcKgIGVsc2UgaWYgKEdFVF9DT0RFICh4KSA9PSBQTFVTIHx8IEdFVF9DT0RF ICh4KSA9PSBNSU5VUwo+IC3CoMKgwqDCoMKgwqDCoMKgwqAgfHwgR0VUX0NPREUgKHgpID09IE1V TFQpCj4gK8KgIGVsc2UgaWYgKFBMVVNfUCAoeCkgfHwgTUlOVVNfUCAoeCkgfHwgTVVMVF9QICh4 KSkKPiDCoMKgwqDCoCB7Cj4gwqDCoMKgwqDCoMKgIHJ0eCBvcDAgPSBicmVha19vdXRfbWVtb3J5 X3JlZnMgKFhFWFAgKHgsIDApKTsKPiDCoMKgwqDCoMKgwqAgcnR4IG9wMSA9IGJyZWFrX291dF9t ZW1vcnlfcmVmcyAoWEVYUCAoeCwgMSkpOwo+IEBAIC0zNjMsMTMgKzM2MSwxMiBAQCBjb252ZXJ0 X21lbW9yeV9hZGRyZXNzX2FkZHJfc3BhY2VfMQo+IChzY2FsYXJfaW50X21vZGUgdG9fbW9kZSBB VFRSSUJVVEVfVU5VU0VELAo+IMKgwqDCoMKgwqDCoMKgwqAgbmFycm93ZXIuIEluc2lkZSBhIENP TlNUIFJUTCwgdGhpcyBpcyBzYWZlIGZvciBib3RoIHBvaW50ZXJzCj4gwqDCoMKgwqDCoMKgwqDC oCB6ZXJvIG9yIHNpZ24gZXh0ZW5kZWQgYXMgcG9pbnRlcnMgY2Fubm90IHdyYXAuICovCj4gwqDC oMKgwqDCoMKgIGlmIChHRVRfTU9ERV9TSVpFICh0b19tb2RlKSA8IEdFVF9NT0RFX1NJWkUgKGZy b21fbW9kZSkKPiAtwqDCoMKgwqDCoMKgwqDCoCB8fCAoR0VUX0NPREUgKHgpID09IFBMVVMKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIENPTlNUX0lOVF9QIChYRVhQICh4LCAxKSkKPiAr wqDCoMKgwqDCoMKgwqDCoCB8fCAoUExVU19QICh4KSAmJiBDT05TVF9JTlRfUCAoWEVYUCAoeCwg MSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKChpbl9jb25zdCAmJiBQT0lOVEVS U19FWFRFTkRfVU5TSUdORUQgIT0gMCkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfHwgWEVYUCAoeCwgMSkgPT0KPiBjb252ZXJ0X21lbW9yeV9hZGRyZXNzX2FkZHJfc3BhY2Vf MQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICh0b19tb2RlLCBYRVhQICh4LCAxKSwgYXMsCj4gaW5fY29uc3Qs Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBub19lbWl0KQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHx8IFBPSU5URVJTX0VYVEVORF9VTlNJR05FRCA8IDApKSkKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgWEVYUCAoeCwgMSkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID09IGNvbnZlcnRfbWVtb3J5X2FkZHJlc3NfYWRk cl9zcGFjZV8xICgKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB0b19tb2RlLCBYRVhQICh4LCAxKSwgYXMsIGluX2NvbnN0LCBub19lbWl0KQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCBQT0lOVEVSU19FWFRFTkRfVU5TSUdORUQg PCAwKSkpCj4gwqDCoMKgwqDCoMKgwqDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgdGVtcCA9IGNv bnZlcnRfbWVtb3J5X2FkZHJlc3NfYWRkcl9zcGFjZV8xICh0b19tb2RlLCBYRVhQCj4gKHgsIDAp LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXMs IGluX2NvbnN0LAo+IG5vX2VtaXQpOwo+IEBAIC00ODMsNyArNDgwLDcgQEAgbWVtb3J5X2FkZHJl c3NfYWRkcl9zcGFjZSAobWFjaGluZV9tb2RlIG1vZGUsIHJ0eAo+IHgsIGFkZHJfc3BhY2VfdCBh cykKPiDCoMKgwqDCoMKgwqDCoMKgIGFuZCBpbmRleCBvZmYgb2YgaXQuwqAgV2UgZG8gdGhpcyBi ZWNhdXNlIGl0IG9mdGVuIG1ha2VzCj4gwqDCoMKgwqDCoMKgwqDCoCBzaG9ydGVyIGNvZGUsIGFu ZCBiZWNhdXNlIHRoZSBhZGRyZXNzZXMgdGh1cyBnZW5lcmF0ZWQKPiDCoMKgwqDCoMKgwqDCoMKg IGluIHJlZ2lzdGVycyBvZnRlbiBiZWNvbWUgY29tbW9uIHN1YmV4cHJlc3Npb25zLsKgICovCj4g LcKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFICh4KSA9PSBQTFVTKQo+ICvCoMKgwqDCoMKgIGlmIChQ TFVTX1AgKHgpKQo+IMKgwqDCoMKgwqDCoMKgwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJ0eCBj b25zdGFudF90ZXJtID0gY29uc3QwX3J0eDsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgcnR4IHkgPSBl bGltaW5hdGVfY29uc3RhbnRfdGVybSAoeCwgJmNvbnN0YW50X3Rlcm0pOwo+IEBAIC01MDAsNyAr NDk3LDcgQEAgbWVtb3J5X2FkZHJlc3NfYWRkcl9zcGFjZSAobWFjaGluZV9tb2RlIG1vZGUsIHJ0 eAo+IHgsIGFkZHJfc3BhY2VfdCBhcykKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiDCoMKg wqDCoMKgwqDCoMKgfQo+IMKgCj4gLcKgwqDCoMKgwqAgZWxzZSBpZiAoR0VUX0NPREUgKHgpID09 IE1VTFQgfHwgR0VUX0NPREUgKHgpID09IE1JTlVTKQo+ICvCoMKgwqDCoMKgIGVsc2UgaWYgKE1J TlVTX1AgKHgpIHx8IE1VTFRfUCAoeCkpCj4gwqDCoMKgwqDCoMKgwqDCoHggPSBmb3JjZV9vcGVy YW5kICh4LCBOVUxMX1JUWCk7Cj4gwqAKPiDCoMKgwqDCoMKgwqAgLyogSWYgd2UgaGF2ZSBhIHJl Z2lzdGVyIHRoYXQncyBhbiBpbnZhbGlkIGFkZHJlc3MsCj4gQEAgLTUyMyw5ICs1MjAsNyBAQCBt ZW1vcnlfYWRkcmVzc19hZGRyX3NwYWNlIChtYWNoaW5lX21vZGUgbW9kZSwgcnR4Cj4geCwgYWRk cl9zcGFjZV90IGFzKQo+IMKgwqDCoMKgIHJldHVybiB4Owo+IMKgwqAgZWxzZSBpZiAoUkVHX1Ag KHgpKQo+IMKgwqDCoMKgIG1hcmtfcmVnX3BvaW50ZXIgKHgsIEJJVFNfUEVSX1VOSVQpOwo+IC3C oCBlbHNlIGlmIChHRVRfQ09ERSAoeCkgPT0gUExVUwo+IC3CoMKgwqDCoMKgwqDCoMKgwqAgJiYg UkVHX1AgKFhFWFAgKHgsIDApKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqAgJiYgQ09OU1RfSU5UX1Ag KFhFWFAgKHgsIDEpKSkKPiArwqAgZWxzZSBpZiAoUExVU19QICh4KSAmJiBSRUdfUCAoWEVYUCAo eCwgMCkpICYmIENPTlNUX0lOVF9QIChYRVhQCj4gKHgsIDEpKSkKPiDCoMKgwqDCoCBtYXJrX3Jl Z19wb2ludGVyIChYRVhQICh4LCAwKSwgQklUU19QRVJfVU5JVCk7Cj4gwqAKPiDCoMKgIC8qIE9M RFggbWF5IGhhdmUgYmVlbiB0aGUgYWRkcmVzcyBvbiBhIHRlbXBvcmFyeS7CoCBVcGRhdGUgdGhl Cj4gYWRkcmVzcwo+IEBAIC01NzIsOCArNTY3LDcgQEAgdXNlX2FuY2hvcmVkX2FkZHJlc3MgKHJ0 eCB4KQo+IMKgwqAgLyogU3BsaXQgdGhlIGFkZHJlc3MgaW50byBhIGJhc2UgYW5kIG9mZnNldC7C oCAqLwo+IMKgwqAgYmFzZSA9IFhFWFAgKHgsIDApOwo+IMKgwqAgb2Zmc2V0ID0gMDsKPiAtwqAg aWYgKEdFVF9DT0RFIChiYXNlKSA9PSBDT05TVAo+IC3CoMKgwqDCoMKgICYmIEdFVF9DT0RFIChY RVhQIChiYXNlLCAwKSkgPT0gUExVUwo+ICvCoCBpZiAoR0VUX0NPREUgKGJhc2UpID09IENPTlNU ICYmIFBMVVNfUCAoWEVYUCAoYmFzZSwgMCkpCj4gwqDCoMKgwqDCoMKgICYmIENPTlNUX0lOVF9Q IChYRVhQIChYRVhQIChiYXNlLCAwKSwgMSkpKQo+IMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqAg b2Zmc2V0ICs9IElOVFZBTCAoWEVYUCAoWEVYUCAoYmFzZSwgMCksIDEpKTsKPiBAQCAtNzExLDgg KzcwNSw3IEBAIGZvcmNlX3JlZyAobWFjaGluZV9tb2RlIG1vZGUsIHJ0eCB4KQo+IMKgwqDCoMKg wqDCoCB9Cj4gwqDCoMKgwqAgZWxzZSBpZiAoR0VUX0NPREUgKHgpID09IExBQkVMX1JFRikKPiDC oMKgwqDCoMKgwqAgYWxpZ24gPSBCSVRTX1BFUl9VTklUOwo+IC3CoMKgwqAgZWxzZSBpZiAoR0VU X0NPREUgKHgpID09IENPTlNUCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUg KFhFWFAgKHgsIDApKSA9PSBQTFVTCj4gK8KgwqDCoCBlbHNlIGlmIChHRVRfQ09ERSAoeCkgPT0g Q09OU1QgJiYgUExVU19QIChYRVhQICh4LCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg JiYgR0VUX0NPREUgKFhFWFAgKFhFWFAgKHgsIDApLCAwKSkgPT0gU1lNQk9MX1JFRgo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAoWEVYUCAoeCwgMCksIDEp KSkKPiDCoMKgwqDCoMKgwqAgewo+IGRpZmYgLS1naXQgYS9nY2MvZXhwci5jYyBiL2djYy9leHBy LmNjCj4gaW5kZXggZDk0MDc0MzJlYTUuLmRlNjQ4MWMxZmJlIDEwMDY0NAo+IC0tLSBhL2djYy9l eHByLmNjCj4gKysrIGIvZ2NjL2V4cHIuY2MKPiBAQCAtMzg2NSw5ICszODY1LDkgQEAgZW1pdF9t b3ZlX3Jlc29sdmVfcHVzaCAobWFjaGluZV9tb2RlIG1vZGUsIHJ0eAo+IHgpCj4gwqDCoMKgwqAg ewo+IMKgwqDCoMKgwqDCoCBydHggZXhwciA9IFhFWFAgKFhFWFAgKHgsIDApLCAxKTsKPiDCoAo+ IC3CoMKgwqDCoMKgIGdjY19hc3NlcnQgKEdFVF9DT0RFIChleHByKSA9PSBQTFVTIHx8IEdFVF9D T0RFIChleHByKSA9PQo+IE1JTlVTKTsKPiArwqDCoMKgwqDCoCBnY2NfYXNzZXJ0IChQTFVTX1Ag KGV4cHIpIHx8IE1JTlVTX1AgKGV4cHIpKTsKPiDCoMKgwqDCoMKgwqAgcG9seV9pbnQ2NCB2YWwg PSBydHhfdG9fcG9seV9pbnQ2NCAoWEVYUCAoZXhwciwgMSkpOwo+IC3CoMKgwqDCoMKgIGlmIChH RVRfQ09ERSAoZXhwcikgPT0gTUlOVVMpCj4gK8KgwqDCoMKgwqAgaWYgKE1JTlVTX1AgKGV4cHIp KQo+IMKgwqDCoMKgwqDCoMKgwqB2YWwgPSAtdmFsOwo+IMKgwqDCoMKgwqDCoCBnY2NfYXNzZXJ0 IChrbm93bl9lcSAoYWRqdXN0LCB2YWwpIHx8IGtub3duX2VxIChhZGp1c3QsIC0KPiB2YWwpKTsK PiDCoMKgwqDCoMKgwqAgYWRqdXN0ID0gdmFsOwo+IEBAIC00NjUzLDcgKzQ2NTMsNyBAQCBmaW5k X2FyZ3Nfc2l6ZV9hZGp1c3QgKHJ0eF9pbnNuICppbnNuKQo+IMKgwqDCoMKgwqDCoMKgwqBjYXNl IFBSRV9NT0RJRlk6Cj4gwqDCoMKgwqDCoMKgwqDCoGNhc2UgUE9TVF9NT0RJRlk6Cj4gwqDCoMKg wqDCoMKgwqDCoMKgIGFkZHIgPSBYRVhQIChhZGRyLCAxKTsKPiAtwqDCoMKgwqDCoMKgwqDCoCBn Y2NfYXNzZXJ0IChHRVRfQ09ERSAoYWRkcikgPT0gUExVUyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqAg Z2NjX2Fzc2VydCAoUExVU19QIChhZGRyKSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdjY19hc3Nl cnQgKFhFWFAgKGFkZHIsIDApID09IHN0YWNrX3BvaW50ZXJfcnR4KTsKPiDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuIHJ0eF90b19wb2x5X2ludDY0IChYRVhQIChhZGRyLCAxKSk7Cj4gwqDCoMKg wqDCoMKgwqDCoGRlZmF1bHQ6Cj4gQEAgLTgxNzAsMTMgKzgxNzAsMTIgQEAgZm9yY2Vfb3BlcmFu ZCAocnR4IHZhbHVlLCBydHggdGFyZ2V0KQo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiDCoMKg wqDCoMKgwqAgLyogQ2hlY2sgZm9yIGFuIGFkZGl0aW9uIHdpdGggT1AyIGEgY29uc3RhbnQgaW50 ZWdlciBhbmQgb3VyCj4gZmlyc3QKPiAtwqDCoMKgwqDCoMKgwqDCoCBvcGVyYW5kIGEgUExVUyBv ZiBhIHZpcnR1YWwgcmVnaXN0ZXIgYW5kIHNvbWV0aGluZyBlbHNlLsKgCj4gSW4gdGhhdAo+IC3C oMKgwqDCoMKgwqDCoMKgIGNhc2UsIHdlIHdhbnQgdG8gZW1pdCB0aGUgc3VtIG9mIHRoZSB2aXJ0 dWFsIHJlZ2lzdGVyIGFuZAo+IHRoZQo+IC3CoMKgwqDCoMKgwqDCoMKgIGNvbnN0YW50IGZpcnN0 IGFuZCB0aGVuIGFkZCB0aGUgb3RoZXIgdmFsdWUuwqAgVGhpcyBhbGxvd3MKPiB2aXJ0dWFsCj4g LcKgwqDCoMKgwqDCoMKgwqAgcmVnaXN0ZXIgaW5zdGFudGlhdGlvbiB0byBzaW1wbHkgbW9kaWZ5 IHRoZSBjb25zdGFudCByYXRoZXIKPiB0aGFuCj4gLcKgwqDCoMKgwqDCoMKgwqAgY3JlYXRpbmcg YW5vdGhlciBvbmUgYXJvdW5kIHRoaXMgYWRkaXRpb24uwqAgKi8KPiAtwqDCoMKgwqDCoCBpZiAo Y29kZSA9PSBQTFVTICYmIENPTlNUX0lOVF9QIChvcDIpCj4gLcKgwqDCoMKgwqDCoMKgwqAgJiYg R0VUX0NPREUgKFhFWFAgKHZhbHVlLCAwKSkgPT0gUExVUwo+ICvCoMKgwqDCoMKgwqDCoCBvcGVy YW5kIGEgUExVUyBvZiBhIHZpcnR1YWwgcmVnaXN0ZXIgYW5kIHNvbWV0aGluZyBlbHNlLsKgIElu Cj4gdGhhdAo+ICvCoMKgwqDCoMKgwqDCoCBjYXNlLCB3ZSB3YW50IHRvIGVtaXQgdGhlIHN1bSBv ZiB0aGUgdmlydHVhbCByZWdpc3RlciBhbmQKPiB0aGUKPiArwqDCoMKgwqDCoMKgwqAgY29uc3Rh bnQgZmlyc3QgYW5kIHRoZW4gYWRkIHRoZSBvdGhlciB2YWx1ZS7CoCBUaGlzIGFsbG93cwo+IHZp cnR1YWwKPiArwqDCoMKgwqDCoMKgwqAgcmVnaXN0ZXIgaW5zdGFudGlhdGlvbiB0byBzaW1wbHkg bW9kaWZ5IHRoZSBjb25zdGFudCByYXRoZXIKPiB0aGFuCj4gK8KgwqDCoMKgwqDCoMKgIGNyZWF0 aW5nIGFub3RoZXIgb25lIGFyb3VuZCB0aGlzIGFkZGl0aW9uLsKgICovCj4gK8KgwqDCoMKgwqAg aWYgKGNvZGUgPT0gUExVUyAmJiBDT05TVF9JTlRfUCAob3AyKSAmJiBQTFVTX1AgKFhFWFAgKHZh bHVlLAo+IDApKQo+IMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBSRUdfUCAoWEVYUCAoWEVYUCAodmFs dWUsIDApLCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgUkVHTk8gKFhFWFAgKFhFWFAgKHZh bHVlLCAwKSwgMCkpID49Cj4gRklSU1RfVklSVFVBTF9SRUdJU1RFUgo+IMKgwqDCoMKgwqDCoMKg wqDCoCAmJiBSRUdOTyAoWEVYUCAoWEVYUCAodmFsdWUsIDApLCAwKSkgPD0KPiBMQVNUX1ZJUlRV QUxfUkVHSVNURVIpCj4gQEAgLTgyOTUsMTIgKzgyOTQsMTIgQEAgc2FmZV9mcm9tX3AgKGNvbnN0 X3J0eCB4LCB0cmVlIGV4cCwgaW50Cj4gdG9wX3ApCj4gwqDCoMKgwqDCoMKgwqDCoMKgICYmIChU UkVFX0NPREUgKFRSRUVfVFlQRSAoZXhwKSkgIT0gQVJSQVlfVFlQRQo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHx8IFRZUEVfQVJSQVlfTUFYX1NJWkUgKFRSRUVfVFlQRSAoZXhwKSkgPT0g TlVMTF9UUkVFCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgVFJFRV9DT0RFIChUWVBF X0FSUkFZX01BWF9TSVpFIChUUkVFX1RZUEUgKGV4cCkpKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgIT0gSU5URUdFUl9DU1QpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgIT0gSU5URUdFUl9DU1QpCj4gwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9NT0RFICh4KSA9 PSBCTEttb2RlKQo+IMKgwqDCoMKgwqDCoCAvKiBJZiBYIGlzIGluIHRoZSBvdXRnb2luZyBhcmd1 bWVudCBhcmVhLCBpdCBpcyBhbHdheXMgc2FmZS7CoAo+ICovCj4gwqDCoMKgwqDCoMKgIHx8IChN RU1fUCAoeCkKPiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKFhFWFAgKHgsIDApID09IHZpcnR1YWxf b3V0Z29pbmdfYXJnc19ydHgKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IChHRVRfQ09E RSAoWEVYUCAoeCwgMCkpID09IFBMVVMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IChQ TFVTX1AgKFhFWFAgKHgsIDApKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg JiYgWEVYUCAoWEVYUCAoeCwgMCksIDApID09Cj4gdmlydHVhbF9vdXRnb2luZ19hcmdzX3J0eCkp KSkKPiDCoMKgwqDCoCByZXR1cm4gMTsKPiDCoAo+IGRpZmYgLS1naXQgYS9nY2MvZmluYWwuY2Mg Yi9nY2MvZmluYWwuY2MKPiBpbmRleCBlZWE1NzIyMzhmNi4uZjZkNGE2MmYxMGYgMTAwNjQ0Cj4g LS0tIGEvZ2NjL2ZpbmFsLmNjCj4gKysrIGIvZ2NjL2ZpbmFsLmNjCj4gQEAgLTMwNjEsMTMgKzMw NjEsMTQgQEAgY2xlYW51cF9zdWJyZWdfb3BlcmFuZHMgKHJ0eF9pbnNuICppbnNuKQo+IMKgwqDC oMKgwqDCoMKgwqAgZXhwcmVzc2lvbiBkaXJlY3RseS7CoCAqLwo+IMKgwqDCoMKgwqDCoCBpZiAo R0VUX0NPREUgKCpyZWNvZ19kYXRhLm9wZXJhbmRfbG9jW2ldKSA9PSBTVUJSRUcpCj4gwqDCoMKg wqDCoMKgwqDCoHsKPiAtwqDCoMKgwqDCoMKgwqDCoCByZWNvZ19kYXRhLm9wZXJhbmRbaV0gPSBh bHRlcl9zdWJyZWcKPiAocmVjb2dfZGF0YS5vcGVyYW5kX2xvY1tpXSwgdHJ1ZSk7Cj4gK8KgwqDC oMKgwqDCoMKgwqAgcmVjb2dfZGF0YS5vcGVyYW5kW2ldCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg ID0gYWx0ZXJfc3VicmVnIChyZWNvZ19kYXRhLm9wZXJhbmRfbG9jW2ldLCB0cnVlKTsKPiDCoMKg wqDCoMKgwqDCoMKgwqAgY2hhbmdlZCA9IHRydWU7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiAtwqDC oMKgwqDCoCBlbHNlIGlmIChHRVRfQ09ERSAocmVjb2dfZGF0YS5vcGVyYW5kW2ldKSA9PSBQTFVT Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IEdFVF9DT0RFIChyZWNvZ19kYXRhLm9w ZXJhbmRbaV0pID09IE1VTFQKPiArwqDCoMKgwqDCoCBlbHNlIGlmIChQTFVTX1AgKHJlY29nX2Rh dGEub3BlcmFuZFtpXSkgfHwgTVVMVF9QCj4gKHJlY29nX2RhdGEub3BlcmFuZFtpXSkKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IE1FTV9QIChyZWNvZ19kYXRhLm9wZXJhbmRbaV0p KQo+IC3CoMKgwqDCoMKgwqDCoHJlY29nX2RhdGEub3BlcmFuZFtpXSA9IHdhbGtfYWx0ZXJfc3Vi cmVnCj4gKHJlY29nX2RhdGEub3BlcmFuZF9sb2NbaV0sICZjaGFuZ2VkKTsKPiArwqDCoMKgwqDC oMKgwqByZWNvZ19kYXRhLm9wZXJhbmRbaV0KPiArwqDCoMKgwqDCoMKgwqDCoCA9IHdhbGtfYWx0 ZXJfc3VicmVnIChyZWNvZ19kYXRhLm9wZXJhbmRfbG9jW2ldLCAmY2hhbmdlZCk7Cj4gwqDCoMKg wqAgfQo+IMKgCj4gwqDCoCBmb3IgKGkgPSAwOyBpIDwgcmVjb2dfZGF0YS5uX2R1cHM7IGkrKykK PiBAQCAtMzA3NywxMCArMzA3OCwxMSBAQCBjbGVhbnVwX3N1YnJlZ19vcGVyYW5kcyAocnR4X2lu c24gKmluc24pCj4gwqDCoMKgwqDCoMKgwqDCoMKgICpyZWNvZ19kYXRhLmR1cF9sb2NbaV0gPSBh bHRlcl9zdWJyZWcKPiAocmVjb2dfZGF0YS5kdXBfbG9jW2ldLCB0cnVlKTsKPiDCoMKgwqDCoMKg wqDCoMKgwqAgY2hhbmdlZCA9IHRydWU7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiAtwqDCoMKgwqDC oCBlbHNlIGlmIChHRVRfQ09ERSAoKnJlY29nX2RhdGEuZHVwX2xvY1tpXSkgPT0gUExVUwo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCBHRVRfQ09ERSAoKnJlY29nX2RhdGEuZHVwX2xv Y1tpXSkgPT0gTVVMVAo+ICvCoMKgwqDCoMKgIGVsc2UgaWYgKFBMVVNfUCAoKnJlY29nX2RhdGEu ZHVwX2xvY1tpXSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgTVVMVF9QICgqcmVj b2dfZGF0YS5kdXBfbG9jW2ldKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgTUVN X1AgKCpyZWNvZ19kYXRhLmR1cF9sb2NbaV0pKQo+IC3CoMKgwqDCoMKgwqDCoCpyZWNvZ19kYXRh LmR1cF9sb2NbaV0gPSB3YWxrX2FsdGVyX3N1YnJlZwo+IChyZWNvZ19kYXRhLmR1cF9sb2NbaV0s ICZjaGFuZ2VkKTsKPiArwqDCoMKgwqDCoMKgwqAqcmVjb2dfZGF0YS5kdXBfbG9jW2ldCj4gK8Kg wqDCoMKgwqDCoMKgwqAgPSB3YWxrX2FsdGVyX3N1YnJlZyAocmVjb2dfZGF0YS5kdXBfbG9jW2ld LCAmY2hhbmdlZCk7Cj4gwqDCoMKgwqAgfQo+IMKgwqAgaWYgKGNoYW5nZWQpCj4gwqDCoMKgwqAg ZGZfaW5zbl9yZXNjYW4gKGluc24pOwo+IEBAIC0zMjUyLDkgKzMyNTQsOSBAQCBnZXRfbWVtX2V4 cHJfZnJvbV9vcCAocnR4IG9wLCBpbnQgKnBhZGRyZXNzcCkKPiDCoMKgIC8qIEZpcnN0IGNoZWNr IGlmIHdlIGhhdmUgYSBkZWNsIGZvciB0aGUgYWRkcmVzcywgdGhlbiBsb29rIGF0IHRoZQo+IHJp Z2h0IHNpZGUKPiDCoMKgwqDCoMKgIGlmIGl0IGlzIGEgUExVUy7CoCBPdGhlcndpc2UsIHN0cmlw IG9mZiBhcml0aG1ldGljIGFuZCBrZWVwCj4gbG9va2luZy4KPiDCoMKgwqDCoMKgIEJ1dCBkb24n dCBhbGxvdyB0aGUgYWRkcmVzcyB0byBpdHNlbGYgYmUgaW5kaXJlY3QuwqAgKi8KPiAtwqAgaWYg KChleHByID0gZ2V0X21lbV9leHByX2Zyb21fb3AgKG9wLCAmaW5uZXJfYWRkcmVzc3ApKSAmJiAh Cj4gaW5uZXJfYWRkcmVzc3ApCj4gK8KgIGlmICgoZXhwciA9IGdldF9tZW1fZXhwcl9mcm9tX29w IChvcCwgJmlubmVyX2FkZHJlc3NwKSkgJiYKPiAhaW5uZXJfYWRkcmVzc3ApCj4gwqDCoMKgwqAg cmV0dXJuIGV4cHI7Cj4gLcKgIGVsc2UgaWYgKEdFVF9DT0RFIChvcCkgPT0gUExVUwo+ICvCoCBl bHNlIGlmIChQTFVTX1AgKG9wKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChleHByID0gZ2V0 X21lbV9leHByX2Zyb21fb3AgKFhFWFAgKG9wLCAxKSwKPiAmaW5uZXJfYWRkcmVzc3ApKSkKPiDC oMKgwqDCoCByZXR1cm4gZXhwcjsKPiDCoAo+IGRpZmYgLS1naXQgYS9nY2MvZnVuY3Rpb24uY2Mg Yi9nY2MvZnVuY3Rpb24uY2MKPiBpbmRleCA5Yzg3NzNiYmM1OS4uOGFiMmYwZTdmNjIgMTAwNjQ0 Cj4gLS0tIGEvZ2NjL2Z1bmN0aW9uLmNjCj4gKysrIGIvZ2NjL2Z1bmN0aW9uLmNjCj4gQEAgLTc1 NywxMCArNzU3LDEwIEBAIGZpbmRfdGVtcF9zbG90X2Zyb21fYWRkcmVzcyAocnR4IHgpCj4gwqAK PiDCoMKgIC8qIElmIHdlIGhhdmUgYSBzdW0gaW52b2x2aW5nIGEgcmVnaXN0ZXIsIHNlZSBpZiBp dCBwb2ludHMgdG8gYQo+IHRlbXAKPiDCoMKgwqDCoMKgIHNsb3QuwqAgKi8KPiAtwqAgaWYgKEdF VF9DT0RFICh4KSA9PSBQTFVTICYmIFJFR19QIChYRVhQICh4LCAwKSkKPiArwqAgaWYgKFBMVVNf UCAoeCkgJiYgUkVHX1AgKFhFWFAgKHgsIDApKQo+IMKgwqDCoMKgwqDCoCAmJiAocCA9IGZpbmRf dGVtcF9zbG90X2Zyb21fYWRkcmVzcyAoWEVYUCAoeCwgMCkpKSAhPSAwKQo+IMKgwqDCoMKgIHJl dHVybiBwOwo+IC3CoCBlbHNlIGlmIChHRVRfQ09ERSAoeCkgPT0gUExVUyAmJiBSRUdfUCAoWEVY UCAoeCwgMSkpCj4gK8KgIGVsc2UgaWYgKFBMVVNfUCAoeCkgJiYgUkVHX1AgKFhFWFAgKHgsIDEp KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChwID0gZmluZF90ZW1wX3Nsb3RfZnJvbV9hZGRy ZXNzIChYRVhQICh4LCAxKSkpICE9IDApCj4gwqDCoMKgwqAgcmV0dXJuIHA7Cj4gwqAKPiBAQCAt MTYxNCw4ICsxNjE0LDcgQEAgaW5zdGFudGlhdGVfdmlydHVhbF9yZWdzX2luX2luc24gKHJ0eF9p bnNuCj4gKmluc24pCj4gwqDCoMKgwqDCoMKgIC8qIEhhbmRsZSBhIHBsdXMgaW52b2x2aW5nIGEg dmlydHVhbCByZWdpc3RlciBieSBkZXRlcm1pbmluZwo+IGlmIHRoZQo+IMKgwqDCoMKgwqDCoMKg wqAgb3BlcmFuZHMgcmVtYWluIHZhbGlkIGlmIHRoZXkncmUgbW9kaWZpZWQgaW4gcGxhY2UuwqAg Ki8KPiDCoMKgwqDCoMKgwqAgcG9seV9pbnQ2NCBkZWx0YTsKPiAtwqDCoMKgwqDCoCBpZiAoR0VU X0NPREUgKFNFVF9TUkMgKHNldCkpID09IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDCoCAmJiByZWNv Z19kYXRhLm5fb3BlcmFuZHMgPj0gMwo+ICvCoMKgwqDCoMKgIGlmIChQTFVTX1AgKFNFVF9TUkMg KHNldCkpICYmIHJlY29nX2RhdGEubl9vcGVyYW5kcyA+PSAzCj4gwqDCoMKgwqDCoMKgwqDCoMKg ICYmIHJlY29nX2RhdGEub3BlcmFuZF9sb2NbMV0gPT0gJlhFWFAgKFNFVF9TUkMgKHNldCksIDAp Cj4gwqDCoMKgwqDCoMKgwqDCoMKgICYmIHJlY29nX2RhdGEub3BlcmFuZF9sb2NbMl0gPT0gJlhF WFAgKFNFVF9TUkMgKHNldCksIDEpCj4gwqDCoMKgwqDCoMKgwqDCoMKgICYmIHBvbHlfaW50X3J0 eF9wIChyZWNvZ19kYXRhLm9wZXJhbmRbMl0sICZkZWx0YSkKPiBkaWZmIC0tZ2l0IGEvZ2NjL2Z3 cHJvcC5jYyBiL2djYy9md3Byb3AuY2MKPiBpbmRleCBmYzY1MmFiOWExZi4uYTkwNWFmZjVmODUg MTAwNjQ0Cj4gLS0tIGEvZ2NjL2Z3cHJvcC5jYwo+ICsrKyBiL2djYy9md3Byb3AuY2MKPiBAQCAt MTIwLDcgKzEyMCw3IEBAIGNhbl9zaW1wbGlmeV9hZGRyIChydHggYWRkcikKPiDCoMKgIGlmIChD T05TVEFOVF9BRERSRVNTX1AgKGFkZHIpKQo+IMKgwqDCoMKgIHJldHVybiBmYWxzZTsKPiDCoAo+ IC3CoCBpZiAoR0VUX0NPREUgKGFkZHIpID09IFBMVVMpCj4gK8KgIGlmIChQTFVTX1AgKGFkZHIp KQo+IMKgwqDCoMKgIHJlZyA9IFhFWFAgKGFkZHIsIDApOwo+IMKgwqAgZWxzZQo+IMKgwqDCoMKg IHJlZyA9IGFkZHI7Cj4gZGlmZiAtLWdpdCBhL2djYy9oYWlmYS1zY2hlZC5jYyBiL2djYy9oYWlm YS1zY2hlZC5jYwo+IGluZGV4IDRlZmFhOTQ0NThkLi4wNTY5YTQwZmRmMSAxMDA2NDQKPiAtLS0g YS9nY2MvaGFpZmEtc2NoZWQuY2MKPiArKysgYi9nY2MvaGFpZmEtc2NoZWQuY2MKPiBAQCAtMzc4 LDEyICszNzgsMTAgQEAgc3RhdGljIHZlYzxydHhfaW5zbiAqPiBzY2hlZHVsZWRfaW5zbnM7Cj4g wqBzdGF0aWMgaW50IG1heV90cmFwX2V4cCAoY29uc3RfcnR4LCBpbnQpOwo+IMKgCj4gwqAvKiBO b256ZXJvIGlmZiB0aGUgYWRkcmVzcyBpcyBjb21wcmlzZWQgZnJvbSBhdCBtb3N0IDEgcmVnaXN0 ZXIuwqAgKi8KPiAtI2RlZmluZSBDT05TVF9CQVNFRF9BRERSRVNTX1AoeCnCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+IC3CoCAoUkVHX1AgKHgpwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoFwKPiAtwqDCoCB8fCAoKEdFVF9DT0RFICh4KSA9PSBQTFVTIHx8IEdFVF9DT0RFICh4 KSA9PSBNSU5VU8KgwqBcCj4gLcKgwqDCoMKgwqDCoMKgfHwgKEdFVF9DT0RFICh4KSA9PSBMT19T VU0pKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gLcKgwqDCoMKg wqDCoCAmJiAoQ09OU1RBTlRfUCAoWEVYUCAoeCwgMCkpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoFwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgIHx8IENPTlNUQU5UX1AgKFhF WFAgKHgsIDEpKSkpKQo+ICsjZGVmaW5lCj4gQ09OU1RfQkFTRURfQUREUkVTU19QKHgpwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gwqAgXAo+ICvCoCAoUkVHX1AKPiAoeCnCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAKPiBcCj4gK8KgwqAgfHwgKChQTFVTX1AgKHgpIHx8IE1JTlVTX1AgKHgp IHx8IChHRVRfQ09ERSAoeCkgPT0KPiBMT19TVU0pKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIFwKPiArwqDCoMKgwqDCoMKgICYmIChDT05TVEFOVF9QIChYRVhQICh4LCAwKSkgfHwg Q09OU1RBTlRfUCAoWEVYUCAoeCwgMSkpKSkpCj4gwqAKPiDCoC8qIFJldHVybnMgYSBjbGFzcyB0 aGF0IGluc24gd2l0aCBHRVRfREVTVChpbnNuKT14IG1heSBiZWxvbmcgdG8sCj4gwqDCoMKgIGFz IGZvdW5kIGJ5IGFuYWx5emluZyBpbnNuJ3MgZXhwcmVzc2lvbi7CoCAqLwo+IGRpZmYgLS1naXQg YS9nY2MvaWZjdnQuY2MgYi9nY2MvaWZjdnQuY2MKPiBpbmRleCBlYjhlZmI4OWE4OS4uZDYzNDM0 YzI0NTMgMTAwNjQ0Cj4gLS0tIGEvZ2NjL2lmY3Z0LmNjCj4gKysrIGIvZ2NjL2lmY3Z0LmNjCj4g QEAgLTEzNjAsMTYgKzEzNjAsMTQgQEAgbm9jZV90cnlfc3RvcmVfZmxhZ19jb25zdGFudHMgKHN0 cnVjdAo+IG5vY2VfaWZfaW5mbyAqaWZfaW5mbykKPiDCoMKgIHJ0eCBiID0gaWZfaW5mby0+YjsK PiDCoAo+IMKgwqAgLyogSGFuZGxlIGNhc2VzIGxpa2UgeCA6PSB0ZXN0ID8geSArIDMgOiB5ICsg NC7CoCAqLwo+IC3CoCBpZiAoR0VUX0NPREUgKGEpID09IFBMVVMKPiAtwqDCoMKgwqDCoCAmJiBH RVRfQ09ERSAoYikgPT0gUExVUwo+IC3CoMKgwqDCoMKgICYmIENPTlNUX0lOVF9QIChYRVhQIChh LCAxKSkKPiArwqAgaWYgKFBMVVNfUCAoYSkgJiYgUExVU19QIChiKSAmJiBDT05TVF9JTlRfUCAo WEVYUCAoYSwgMSkpCj4gwqDCoMKgwqDCoMKgICYmIENPTlNUX0lOVF9QIChYRVhQIChiLCAxKSkK PiDCoMKgwqDCoMKgwqAgJiYgcnR4X2VxdWFsX3AgKFhFWFAgKGEsIDApLCBYRVhQIChiLCAwKSkK PiDCoMKgwqDCoMKgwqAgLyogQWxsb3cgZXhwcmVzc2lvbnMgdGhhdCBhcmUgbm90IHVzaW5nIHRo ZSByZXN1bHQgb3IgcGxhaW4KPiAtwqDCoMKgwqDCoMKgwqDCoCByZWdpc3RlcnMgd2hlcmUgd2Ug aGFuZGxlIG92ZXJsYXAgYmVsb3cuwqAgKi8KPiArwqDCoMKgwqDCoMKgwqAgcmVnaXN0ZXJzIHdo ZXJlIHdlIGhhbmRsZSBvdmVybGFwIGJlbG93LsKgICovCj4gwqDCoMKgwqDCoMKgICYmIChSRUdf UCAoWEVYUCAoYSwgMCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgIHx8IChub2NlX29wZXJhbmRfb2sg KFhFWFAgKGEsIDApKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgISByZWdfb3Zlcmxh cF9tZW50aW9uZWRfcCAoaWZfaW5mby0+eCwgWEVYUCAoYSwKPiAwKSkpKSkKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICYmICFyZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCAoaWZfaW5mby0+eCwg WEVYUCAoYSwKPiAwKSkpKSkKPiDCoMKgwqDCoCB7Cj4gwqDCoMKgwqDCoMKgIGNvbW1vbiA9IFhF WFAgKGEsIDApOwo+IMKgwqDCoMKgwqDCoCBhID0gWEVYUCAoYSwgMSk7Cj4gQEAgLTE1NzIsOCAr MTU3MCw3IEBAIG5vY2VfdHJ5X2FkZGNjIChzdHJ1Y3Qgbm9jZV9pZl9pbmZvICppZl9pbmZvKQo+ IMKgwqAgaWYgKCFub2NlX3NpbXBsZV9iYnMgKGlmX2luZm8pKQo+IMKgwqDCoMKgIHJldHVybiBG QUxTRTsKPiDCoAo+IC3CoCBpZiAoR0VUX0NPREUgKGlmX2luZm8tPmEpID09IFBMVVMKPiAtwqDC oMKgwqDCoCAmJiBydHhfZXF1YWxfcCAoWEVYUCAoaWZfaW5mby0+YSwgMCksIGlmX2luZm8tPmIp Cj4gK8KgIGlmIChQTFVTX1AgKGlmX2luZm8tPmEpICYmIHJ0eF9lcXVhbF9wIChYRVhQIChpZl9p bmZvLT5hLCAwKSwKPiBpZl9pbmZvLT5iKQo+IMKgwqDCoMKgwqDCoCAmJiBub2NlX3JldmVyc2Vk X2NvbmRfY29kZSAoaWZfaW5mbykgIT0gVU5LTk9XTikKPiDCoMKgwqDCoCB7Cj4gwqDCoMKgwqDC oMKgIHJ0eCBjb25kID0gaWZfaW5mby0+cmV2X2NvbmQ7Cj4gZGlmZiAtLWdpdCBhL2djYy9pcmEu Y2MgYi9nY2MvaXJhLmNjCj4gaW5kZXggZDI4YTY3YjI1NDYuLmUxNjg2N2Q0ZDE3IDEwMDY0NAo+ IC0tLSBhL2djYy9pcmEuY2MKPiArKysgYi9nY2MvaXJhLmNjCj4gQEAgLTQxNjMsMTAgKzQxNjMs MTAgQEAgc2V0dXBfcmVnX2VxdWl2ICh2b2lkKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZWxzZSBpZiAoZnVuY3Rpb25faW52YXJpYW50X3AgKHgpKQo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIG1hY2hpbmVfbW9kZSBtb2RlOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgCj4gKwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1v ZGUgPSBHRVRfTU9ERSAoU0VUX0RFU1QgKHNldCkpOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFICh4KSA9PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8fCB4ID09IGZyYW1lX3BvaW50ZXJfcnR4 IHx8IHggPT0KPiBhcmdfcG9pbnRlcl9ydHgpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoUExVU19QICh4KSB8fCB4ID09IGZyYW1lX3BvaW50ZXJfcnR4Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8fCB4ID09IGFyZ19w b2ludGVyX3J0eCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg LyogVGhpcyBpcyBQTFVTIG9mIGZyYW1lIHBvaW50ZXIgYW5kIGEKPiBjb25zdGFudCwKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3IgZnAsIG9yIGFy Z3AuwqAgKi8KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaXJh X3JlZ19lcXVpdltpXS5pbnZhcmlhbnQgPSB4Owo+IGRpZmYgLS1naXQgYS9nY2MvbG9vcC1kb2xv b3AuY2MgYi9nY2MvbG9vcC1kb2xvb3AuY2MKPiBpbmRleCAzMGI0NWM4MDcxYS4uMTM2Nzc2YjQz MGYgMTAwNjQ0Cj4gLS0tIGEvZ2NjL2xvb3AtZG9sb29wLmNjCj4gKysrIGIvZ2NjL2xvb3AtZG9s b29wLmNjCj4gQEAgLTIwNCw1MiArMjA0LDUwIEBAIGRvbG9vcF9jb25kaXRpb25fZ2V0IChydHhf aW5zbiAqZG9sb29wX3BhdCkKPiDCoMKgwqDCoCByZXR1cm4gMDsKPiDCoAo+IMKgwqAgaWYgKChY RVhQIChjb25kaXRpb24sIDApID09IHJlZykKPiAtwqDCoMKgwqDCoCAvKiBGb3IgdGhlIHRoaXJk IGNhc2U6wqAgKi/CoCAKPiAtwqDCoMKgwqDCoCB8fCAoKGNjX3JlZyAhPSBOVUxMX1JUWCkKPiAt wqDCoMKgwqDCoMKgwqDCoCAmJiAoWEVYUCAoY29uZGl0aW9uLCAwKSA9PSBjY19yZWcpCj4gK8Kg wqDCoMKgwqAgLyogRm9yIHRoZSB0aGlyZCBjYXNlOsKgICovCj4gK8KgwqDCoMKgwqAgfHwgKChj Y19yZWcgIT0gTlVMTF9SVFgpICYmIChYRVhQIChjb25kaXRpb24sIDApID09IGNjX3JlZykKPiDC oMKgwqDCoMKgwqDCoMKgwqAgJiYgKHJlZ19vcmlnID09IHJlZykpCj4gLcKgwqDCoMKgwqAgfHwg KEdFVF9DT0RFIChYRVhQIChjb25kaXRpb24sIDApKSA9PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKg wqAgJiYgWEVYUCAoWEVYUCAoY29uZGl0aW9uLCAwKSwgMCkgPT0gcmVnKSkKPiAtwqDCoCB7Cj4g LcKgwqDCoMKgIGlmIChHRVRfQ09ERSAocGF0dGVybikgIT0gUEFSQUxMRUwpCj4gLcKgwqDCoMKg IC8qwqAgRm9yIHRoZSBzZWNvbmQgZm9ybSB3ZSBleHBlY3Q6Cj4gK8KgwqDCoMKgwqAgfHwgKFBM VVNfUCAoWEVYUCAoY29uZGl0aW9uLCAwKSkgJiYgWEVYUCAoWEVYUCAoY29uZGl0aW9uLCAwKSwK PiAwKSA9PSByZWcpKQo+ICvCoMKgwqAgewo+ICvCoMKgwqDCoMKgIGlmIChHRVRfQ09ERSAocGF0 dGVybikgIT0gUEFSQUxMRUwpCj4gK8KgwqDCoMKgwqDCoMKgLyrCoCBGb3IgdGhlIHNlY29uZCBm b3JtIHdlIGV4cGVjdDoKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgIChzZXQgKHJlZykgKHBsdXMg KHJlZykgKGNvbnN0X2ludCAtMSkpCj4gLcKgwqDCoMKgwqDCoMKgwqAgKHNldCAocGMpIChpZl90 aGVuX2Vsc2UgKHJlZyAhPSAwKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChsYWJlbF9yZWYgKGxhYmVsKSkKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAocGMpKSkuCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIChzZXQgKHJlZykgKHBsdXMgKHJl ZykgKGNvbnN0X2ludCAtMSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIChzZXQgKHBjKSAoaWZf dGhlbl9lbHNlIChyZWcgIT0gMCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGxhYmVsX3JlZiAobGFiZWwpKQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAocGMpKSkuCj4gwqAKPiAtwqDCoMKgwqDCoMKgwqDCoCBpcyBlcXVpdmFs ZW50IHRvIHRoZSBmb2xsb3dpbmc6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGlzIGVxdWl2YWxl bnQgdG8gdGhlIGZvbGxvd2luZzoKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgIChwYXJhbGxlbCBb KHNldCAocGMpIChpZl90aGVuX2Vsc2UgKHJlZyAhPSAxKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAobGFiZWxfcmVmIChsYWJlbCkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIChwYykpKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IChzZXQgKHJlZykgKHBsdXMgKHJlZykgKGNvbnN0X2ludCAtMSkpKQo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChhZGRpdGlvbmFsIGNsb2JiZXJzIGFuZCB1c2Vz KV0pCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIChwYXJhbGxlbCBbKHNldCAocGMpIChpZl90aGVu X2Vsc2UgKHJlZyAhPSAxKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGxh YmVsX3JlZiAobGFiZWwpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHBj KSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoc2V0 IChyZWcpIChwbHVzIChyZWcpIChjb25zdF9pbnQgLTEpKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoChhZGRpdGlvbmFsIGNsb2JiZXJzIGFuZCB1c2Vz KV0pCj4gwqAKPiAtwqDCoMKgwqDCoMKgwqAgRm9yIHRoZSB0aGlyZCBmb3JtIHdlIGV4cGVjdDoK PiArwqDCoMKgwqDCoMKgwqDCoMKgIEZvciB0aGUgdGhpcmQgZm9ybSB3ZSBleHBlY3Q6Cj4gwqAK PiAtwqDCoMKgwqDCoMKgwqAgKHBhcmFsbGVsIFsoc2V0IChjYykgKGNvbXBhcmUgKChwbHVzIChy ZWcpIChjb25zdF9pbnQgLTEpKSwKPiAwKSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIChzZXQgKHJlZykgKHBsdXMgKHJlZykgKGNvbnN0X2ludCAtMSkpKV0pCj4gLcKg wqDCoMKgwqDCoMKgIChzZXQgKHBjKSAoaWZfdGhlbl9lbHNlIChjYyA9PSBORSkKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KGxhYmVsX3JlZiAobGFiZWwpKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAocGMpKSkgCj4gK8KgwqDCoMKgwqDCoMKgwqDC oCAocGFyYWxsZWwgWyhzZXQgKGNjKSAoY29tcGFyZSAoKHBsdXMgKHJlZykgKGNvbnN0X2ludCAt Cj4gMSkpLCAwKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAo c2V0IChyZWcpIChwbHVzIChyZWcpIChjb25zdF9pbnQgLTEpKSldKQo+ICvCoMKgwqDCoMKgwqDC oMKgwqAgKHNldCAocGMpIChpZl90aGVuX2Vsc2UgKGNjID09IE5FKQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGxh YmVsX3JlZiAobGFiZWwpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHBjKSkpCj4gwqAKPiAtwqDCoMKgwqDCoMKg wqAgd2hpY2ggaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nOgo+ICvCoMKgwqDCoMKgwqDC oMKgwqAgd2hpY2ggaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nOgo+IMKgCj4gLcKgwqDC oMKgwqDCoMKgIChwYXJhbGxlbCBbKHNldCAoY2MpIChjb21wYXJlIChyZWcswqAgMSkpCj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoc2V0IChyZWcpIChwbHVzIChyZWcp IChjb25zdF9pbnQgLTEpKSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IChzZXQgKHBjKSAoaWZfdGhlbl9lbHNlIChORSA9PSBjYykKPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIChsYWJlbF9yZWYgKGxhYmVsKSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIChwYykpKSldKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqAgKHBhcmFsbGVsIFsoc2V0IChjYykg KGNvbXBhcmUgKHJlZyzCoCAxKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAoc2V0IChyZWcpIChwbHVzIChyZWcpIChjb25zdF9pbnQgLTEpKSkKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoc2V0IChwYykgKGlmX3RoZW5fZWxz ZSAoTkUgPT0gY2MpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGxhYmVsX3Jl ZiAobGFiZWwpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChwYykpKSldKQo+ IMKgCj4gLcKgwqDCoMKgwqDCoMKgIFNvIHdlIHJldHVybiB0aGUgc2Vjb25kIGZvcm0gaW5zdGVh ZCBmb3IgdGhlIHR3byBjYXNlcy4KPiArwqDCoMKgwqDCoMKgwqDCoMKgIFNvIHdlIHJldHVybiB0 aGUgc2Vjb25kIGZvcm0gaW5zdGVhZCBmb3IgdGhlIHR3byBjYXNlcy4KPiDCoAo+IC3CoMKgwqDC oCAqLwo+ICvCoMKgwqDCoMKgwqDCoCovCj4gwqDCoMKgwqDCoMKgwqDCoCBjb25kaXRpb24gPSBn ZW5fcnR4X2ZtdF9lZSAoTkUsIFZPSURtb2RlLCBpbmNfc3JjLAo+IGNvbnN0MV9ydHgpOwo+IMKg Cj4gwqDCoMKgwqAgcmV0dXJuIGNvbmRpdGlvbjsKPiAtwqDCoCB9Cj4gK8KgwqDCoCB9Cj4gwqAK PiDCoMKgIC8qID8/PyBJZiBhIG1hY2hpbmUgdXNlcyBhIGZ1bm55IGNvbXBhcmlzb24sIHdlIGNv dWxkIHJldHVybiBhCj4gwqDCoMKgwqDCoCBjYW5vbmljYWxpemVkIGZvcm0gaGVyZS7CoCAqLwo+ IEBAIC00MTcsNyArNDE1LDcgQEAgZG9sb29wX3NpbXBsaWZ5X2NvdW50IChjbGFzcyBsb29wICps b29wLAo+IHNjYWxhcl9pbnRfbW9kZSBtb2RlLCBydHggY291bnQpCj4gwqDCoCBpZiAoR0VUX0NP REUgKGNvdW50KSA9PSBaRVJPX0VYVEVORCkKPiDCoMKgwqDCoCB7Cj4gwqDCoMKgwqDCoMKgIHJ0 eCBleHRvcDAgPSBYRVhQIChjb3VudCwgMCk7Cj4gLcKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFIChl eHRvcDApID09IFBMVVMpCj4gK8KgwqDCoMKgwqAgaWYgKFBMVVNfUCAoZXh0b3AwKSkKPiDCoMKg wqDCoMKgwqDCoMKgewo+IMKgwqDCoMKgwqDCoMKgwqDCoCBydHggYWRkb3AwID0gWEVYUCAoZXh0 b3AwLCAwKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgcnR4IGFkZG9wMSA9IFhFWFAgKGV4dG9wMCwg MSk7Cj4gQEAgLTQ3MSwxMCArNDY5LDEwIEBAIGRvbG9vcF9tb2RpZnkgKGNsYXNzIGxvb3AgKmxv b3AsIGNsYXNzCj4gbml0ZXJfZGVzYyAqZGVzYywKPiDCoMKgIGRlbGV0ZV9pbnNuIChqdW1wX2lu c24pOwo+IMKgCj4gwqDCoCBjb3VudGVyX3JlZyA9IFhFWFAgKGNvbmRpdGlvbiwgMCk7Cj4gLcKg IGlmIChHRVRfQ09ERSAoY291bnRlcl9yZWcpID09IFBMVVMpCj4gK8KgIGlmIChQTFVTX1AgKGNv dW50ZXJfcmVnKSkKPiDCoMKgwqDCoCBjb3VudGVyX3JlZyA9IFhFWFAgKGNvdW50ZXJfcmVnLCAw KTsKPiDCoMKgIC8qIFRoZXNlIHBhdHRlcm5zIG11c3Qgb3BlcmF0ZSBvbiBpbnRlZ2VyIGNvdW50 ZXJzLsKgICovCj4gLcKgIG1vZGUgPSBhc19hIDxzY2FsYXJfaW50X21vZGU+IChHRVRfTU9ERSAo Y291bnRlcl9yZWcpKTsKPiArwqAgbW9kZSA9IGFzX2E8c2NhbGFyX2ludF9tb2RlPiAoR0VUX01P REUgKGNvdW50ZXJfcmVnKSk7Cj4gwqAKPiDCoMKgIGluY3JlbWVudF9jb3VudCA9IGZhbHNlOwo+ IMKgwqAgc3dpdGNoIChHRVRfQ09ERSAoY29uZGl0aW9uKSkKPiBkaWZmIC0tZ2l0IGEvZ2NjL2xv b3AtaXYuY2MgYi9nY2MvbG9vcC1pdi5jYwo+IGluZGV4IGQ2MzkzMzY0NDVhLi5kYTY4NWYxNWFm YyAxMDA2NDQKPiAtLS0gYS9nY2MvbG9vcC1pdi5jYwo+ICsrKyBiL2djYy9sb29wLWl2LmNjCj4g QEAgLTE1NDMsMzUgKzE1NDMsMjYgQEAgaW1wbGllc19wIChydHggYSwgcnR4IGIpCj4gwqDCoMKg wqAgfQo+IMKgCj4gwqDCoCAvKiBBICE9IE4gaXMgZXF1aXZhbGVudCB0byBBIC0gKE4gKyAxKSA8 dSAtMS7CoCAqLwo+IC3CoCBpZiAoR0VUX0NPREUgKGEpID09IE5FCj4gLcKgwqDCoMKgwqAgJiYg Q09OU1RfSU5UX1AgKG9wMSkKPiAtwqDCoMKgwqDCoCAmJiBHRVRfQ09ERSAoYikgPT0gTFRVCj4g LcKgwqDCoMKgwqAgJiYgb3BiMSA9PSBjb25zdG0xX3J0eAo+IC3CoMKgwqDCoMKgICYmIEdFVF9D T0RFIChvcGIwKSA9PSBQTFVTCj4gK8KgIGlmIChHRVRfQ09ERSAoYSkgPT0gTkUgJiYgQ09OU1Rf SU5UX1AgKG9wMSkgJiYgR0VUX0NPREUgKGIpID09IExUVQo+ICvCoMKgwqDCoMKgICYmIG9wYjEg PT0gY29uc3RtMV9ydHggJiYgUExVU19QIChvcGIwKQo+IMKgwqDCoMKgwqDCoCAmJiBDT05TVF9J TlRfUCAoWEVYUCAob3BiMCwgMSkpCj4gwqDCoMKgwqDCoMKgIC8qIEF2b2lkIG92ZXJmbG93cy7C oCAqLwo+IMKgwqDCoMKgwqDCoCAmJiAoKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIElOVFZBTCAo WEVYUCAob3BiMCwgMSkpCj4gLcKgwqDCoMKgwqDCoMKgwqAgIT0gKCh1bnNpZ25lZCBIT1NUX1dJ REVfSU5UKTEKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDw8IChIT1NUX0JJVFNfUEVSX1dJ REVfSU5UIC0gMSkpIC0gMSkKPiArwqDCoMKgwqDCoMKgwqDCoCAhPSAoKHVuc2lnbmVkIEhPU1Rf V0lERV9JTlQpIDEgPDwgKEhPU1RfQklUU19QRVJfV0lERV9JTlQgLQo+IDEpKSAtIDEpCj4gwqDC oMKgwqDCoMKgICYmIElOVFZBTCAoWEVYUCAob3BiMCwgMSkpICsgMSA9PSAtSU5UVkFMIChvcDEp KQo+IMKgwqDCoMKgIHJldHVybiBydHhfZXF1YWxfcCAob3AwLCBYRVhQIChvcGIwLCAwKSk7Cj4g wqAKPiDCoMKgIC8qIExpa2V3aXNlLCBBICE9IE4gaW1wbGllcyBBIC0gTiA+IDAuwqAgKi8KPiAt wqAgaWYgKEdFVF9DT0RFIChhKSA9PSBORQo+IC3CoMKgwqDCoMKgICYmIENPTlNUX0lOVF9QIChv cDEpKQo+ICvCoCBpZiAoR0VUX0NPREUgKGEpID09IE5FICYmIENPTlNUX0lOVF9QIChvcDEpKQo+ IMKgwqDCoMKgIHsKPiAtwqDCoMKgwqDCoCBpZiAoR0VUX0NPREUgKGIpID09IEdUVQo+IC3CoMKg wqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChvcGIwKSA9PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKg wqAgJiYgb3BiMSA9PSBjb25zdDBfcnR4Cj4gK8KgwqDCoMKgwqAgaWYgKEdFVF9DT0RFIChiKSA9 PSBHVFUgJiYgUExVU19QIChvcGIwKSAmJiBvcGIxID09IGNvbnN0MF9ydHgKPiDCoMKgwqDCoMKg wqDCoMKgwqAgJiYgQ09OU1RfSU5UX1AgKFhFWFAgKG9wYjAsIDEpKQo+IMKgwqDCoMKgwqDCoMKg wqDCoCAvKiBBdm9pZCBvdmVyZmxvd3MuwqAgKi8KPiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKCh1 bnNpZ25lZCBIT1NUX1dJREVfSU5UKSBJTlRWQUwgKFhFWFAgKG9wYjAsIDEpKQo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICE9IChIT1NUX1dJREVfSU5UXzFVIDw8IChIT1NUX0JJVFNfUEVS X1dJREVfSU5UIC0gMSkpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBydHhfZXF1YWxfcCAoWEVY UCAob3BiMCwgMCksIG9wMCkpCj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBJTlRWQUwgKG9wMSkg PT0gLUlOVFZBTCAoWEVYUCAob3BiMCwgMSkpOwo+IC3CoMKgwqDCoMKgIGlmIChHRVRfQ09ERSAo YikgPT0gR0VVCj4gLcKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKG9wYjApID09IFBMVVMK PiAtwqDCoMKgwqDCoMKgwqDCoCAmJiBvcGIxID09IGNvbnN0MV9ydHgKPiArwqDCoMKgwqDCoCBp ZiAoR0VUX0NPREUgKGIpID09IEdFVSAmJiBQTFVTX1AgKG9wYjApICYmIG9wYjEgPT0gY29uc3Qx X3J0eAo+IMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAob3BiMCwgMSkp Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIC8qIEF2b2lkIG92ZXJmbG93cy7CoCAqLwo+IMKgwqDCoMKg wqDCoMKgwqDCoCAmJiAoKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIElOVFZBTCAoWEVYUCAob3Bi MCwgMSkpCj4gZGlmZiAtLWdpdCBhL2djYy9scmEtY29uc3RyYWludHMuY2MgYi9nY2MvbHJhLWNv bnN0cmFpbnRzLmNjCj4gaW5kZXggZDkyYWI3NjkwOGMuLmMyMDQwN2ZjZWRhIDEwMDY0NAo+IC0t LSBhL2djYy9scmEtY29uc3RyYWludHMuY2MKPiArKysgYi9nY2MvbHJhLWNvbnN0cmFpbnRzLmNj Cj4gQEAgLTYwOCw3ICs2MDgsNyBAQCBjYW5vbmljYWxpemVfcmVsb2FkX2FkZHIgKHJ0eCBhZGRy KQo+IMKgwqAgRk9SX0VBQ0hfU1VCUlRYX1ZBUiAoaXRlciwgYXJyYXksIGFkZHIsIE5PTkNPTlNU KQo+IMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqAgcnR4IHggPSAqaXRlcjsKPiAtwqDCoMKgwqDC oCBpZiAoR0VUX0NPREUgKHgpID09IE1VTFQgJiYgQ09OU1RfSU5UX1AgKFhFWFAgKHgsIDEpKSkK PiArwqDCoMKgwqDCoCBpZiAoTVVMVF9QICh4KSAmJiBDT05TVF9JTlRfUCAoWEVYUCAoeCwgMSkp KQo+IMKgwqDCoMKgwqDCoMKgwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IEhPU1RfV0lE RV9JTlQgY2kgPSBJTlRWQUwgKFhFWFAgKHgsIDEpKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgY29u c3QgaW50IHB3cjIgPSBleGFjdF9sb2cyIChjaSk7Cj4gQEAgLTE3NjMsMTkgKzE3NjMsMTkgQEAg c2ltcGxpZnlfb3BlcmFuZF9zdWJyZWcgKGludCBub3AsCj4gbWFjaGluZV9tb2RlIHJlZ19tb2Rl KQo+IMKgwqAgLyogRm9yY2UgYSByZWxvYWQgb2YgdGhlIFNVQlJFR19SRUcgaWYgdGhpcyBpcyBh IGNvbnN0YW50IG9yIFBMVVMKPiBvcgo+IMKgwqDCoMKgwqAgaWYgdGhlcmUgbWF5IGJlIGEgcHJv YmxlbSBhY2Nlc3NpbmcgT1BFUkFORCBpbiB0aGUgb3V0ZXIKPiDCoMKgwqDCoMKgIG1vZGUuwqAg Ki8KPiAtwqAgaWYgKChSRUdfUCAocmVnKQo+IC3CoMKgwqDCoMKgwqAgJiYgUkVHTk8gKHJlZykg Pj0gRklSU1RfUFNFVURPX1JFR0lTVEVSCj4gK8KgIGlmICgoUkVHX1AgKHJlZykgJiYgUkVHTk8g KHJlZykgPj0gRklSU1RfUFNFVURPX1JFR0lTVEVSCj4gwqDCoMKgwqDCoMKgwqAgJiYgKGhhcmRf cmVnbm8gPSBscmFfZ2V0X3JlZ25vX2hhcmRfcmVnbm8gKFJFR05PIChyZWcpKSkgPj0gMAo+IMKg wqDCoMKgwqDCoMKgIC8qIERvbid0IHJlbG9hZCBwYXJhZG94aWNhbCBzdWJyZWdzIGJlY2F1c2Ug d2UgY291bGQgYmUKPiBsb29waW5nCj4gwqDCoMKgwqDCoMKgwqDCoMKgIGhhdmluZyByZXBlYXRl ZGx5IGZpbmFsIHJlZ25vIG91dCBvZiBoYXJkIHJlZ3MgcmFuZ2UuwqAgKi8KPiDCoMKgwqDCoMKg wqDCoCAmJiAoaGFyZF9yZWdub19ucmVncyAoaGFyZF9yZWdubywgaW5uZXJtb2RlKQo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgID49IGhhcmRfcmVnbm9fbnJlZ3MgKGhhcmRfcmVnbm8sIG1vZGUpKQo+ IC3CoMKgwqDCoMKgwqAgJiYgc2ltcGxpZnlfc3VicmVnX3JlZ25vIChoYXJkX3JlZ25vLCBpbm5l cm1vZGUsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIFNVQlJFR19CWVRFIChvcGVyYW5kKSwgbW9kZSkgPCAwCj4gK8KgwqDC oMKgwqDCoCAmJiBzaW1wbGlmeV9zdWJyZWdfcmVnbm8gKGhhcmRfcmVnbm8sIGlubmVybW9kZSwg U1VCUkVHX0JZVEUKPiAob3BlcmFuZCksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1vZGUpCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgIDwgMAo+IMKgwqDCoMKgwqDCoMKgIC8qIERvbid0IHJlbG9hZCBzdWJyZWcgZm9yIG1h dGNoaW5nIHJlbG9hZC7CoCBJdCBpcyBhY3R1YWxseQo+IMKgwqDCoMKgwqDCoMKgwqDCoCB2YWxp ZCBzdWJyZWcgaW4gTFJBLsKgICovCj4gLcKgwqDCoMKgwqDCoCAmJiAhIExSQV9TVUJSRUdfUCAo b3BlcmFuZCkpCj4gLcKgwqDCoMKgwqAgfHwgQ09OU1RBTlRfUCAocmVnKSB8fCBHRVRfQ09ERSAo cmVnKSA9PSBQTFVTIHx8IE1FTV9QIChyZWcpKQo+ICvCoMKgwqDCoMKgwqAgJiYgIUxSQV9TVUJS RUdfUCAob3BlcmFuZCkpCj4gK8KgwqDCoMKgwqAgfHwgQ09OU1RBTlRfUCAocmVnKSB8fCBQTFVT X1AgKHJlZykgfHwgTUVNX1AgKHJlZykpCj4gwqDCoMKgwqAgewo+IMKgwqDCoMKgwqDCoCBlbnVt IHJlZ19jbGFzcyByY2xhc3M7Cj4gwqAKPiBAQCAtMzM3Nyw4ICszMzc3LDcgQEAgZXF1aXZfYWRk cmVzc19zdWJzdGl0dXRpb24gKHN0cnVjdCBhZGRyZXNzX2luZm8KPiAqYWQpCj4gwqDCoMKgwqDC oMKgwqDCoMKgICpiYXNlX3Rlcm0gPSBuZXdfYmFzZV9yZWc7Cj4gwqDCoMKgwqDCoMKgwqDCoMKg IGNoYW5nZV9wID0gdHJ1ZTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IC3CoMKgwqDCoMKgIGVsc2Ug aWYgKEdFVF9DT0RFIChuZXdfYmFzZV9yZWcpID09IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJiYgUkVHX1AgKFhFWFAgKG5ld19iYXNlX3JlZywgMCkpCj4gK8KgwqDCoMKgwqAg ZWxzZSBpZiAoUExVU19QIChuZXdfYmFzZV9yZWcpICYmIFJFR19QIChYRVhQIChuZXdfYmFzZV9y ZWcsCj4gMCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBwb2x5X2ludF9ydHhf cCAoWEVYUCAobmV3X2Jhc2VfcmVnLCAxKSwgJm9mZnNldCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICYmIGNhbl9hZGRfZGlzcF9wIChhZCkpCj4gwqDCoMKgwqDCoMKgwqDCoHsKPiBA QCAtMzM5NywxMSArMzM5Niw5IEBAIGVxdWl2X2FkZHJlc3Nfc3Vic3RpdHV0aW9uIChzdHJ1Y3QK PiBhZGRyZXNzX2luZm8gKmFkKQo+IMKgwqDCoMKgwqDCoMKgwqDCoCAqaW5kZXhfdGVybSA9IG5l d19pbmRleF9yZWc7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIGNoYW5nZV9wID0gdHJ1ZTsKPiDCoMKg wqDCoMKgwqDCoMKgfQo+IC3CoMKgwqDCoMKgIGVsc2UgaWYgKEdFVF9DT0RFIChuZXdfaW5kZXhf cmVnKSA9PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIFJFR19QIChYRVhQ IChuZXdfaW5kZXhfcmVnLCAwKSkKPiArwqDCoMKgwqDCoCBlbHNlIGlmIChQTFVTX1AgKG5ld19p bmRleF9yZWcpICYmIFJFR19QIChYRVhQIChuZXdfaW5kZXhfcmVnLAo+IDApKQo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgcG9seV9pbnRfcnR4X3AgKFhFWFAgKG5ld19pbmRleF9y ZWcsIDEpLCAmb2Zmc2V0KQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBjYW5fYWRk X2Rpc3BfcCAoYWQpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChzY2FsZSA9IGdl dF9pbmRleF9zY2FsZSAoYWQpKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgY2Fu X2FkZF9kaXNwX3AgKGFkKSAmJiAoc2NhbGUgPSBnZXRfaW5kZXhfc2NhbGUKPiAoYWQpKSkKPiDC oMKgwqDCoMKgwqDCoMKgewo+IMKgwqDCoMKgwqDCoMKgwqDCoCBkaXNwICs9IG9mZnNldCAqIHNj YWxlOwo+IMKgwqDCoMKgwqDCoMKgwqDCoCAqaW5kZXhfdGVybSA9IFhFWFAgKG5ld19pbmRleF9y ZWcsIDApOwo+IEBAIC0zNzIwLDExICszNzE3LDkgQEAgcHJvY2Vzc19hZGRyZXNzXzEgKGludCBu b3AsIGJvb2wgY2hlY2tfb25seV9wLAo+IMKgwqDCoMKgwqDCoCBsYXN0X2luc24gPSBnZXRfbGFz dF9pbnNuICgpOwo+IMKgwqDCoMKgwqDCoCAvKiBJZiB3ZSBnZW5lcmF0ZWQgYXQgbGVhc3QgdHdv IGluc25zLCB0cnkgbGFzdCBpbnNuIHNvdXJjZSBhcwo+IMKgwqDCoMKgwqDCoMKgwqAgYW4gYWRk cmVzcy7CoCBJZiB3ZSBzdWNjZWVkLCB3ZSBnZW5lcmF0ZSBvbmUgbGVzcyBpbnNuLsKgICovCj4g LcKgwqDCoMKgwqAgaWYgKFJFR19QIChuZXdfcmVnKQo+IC3CoMKgwqDCoMKgwqDCoMKgICYmIGxh c3RfaW5zbiAhPSBpbnNucwo+ICvCoMKgwqDCoMKgIGlmIChSRUdfUCAobmV3X3JlZykgJiYgbGFz dF9pbnNuICE9IGluc25zCj4gwqDCoMKgwqDCoMKgwqDCoMKgICYmIChzZXQgPSBzaW5nbGVfc2V0 IChsYXN0X2luc24pKSAhPSBOVUxMX1JUWAo+IC3CoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RF IChTRVRfU1JDIChzZXQpKSA9PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKgwqAgJiYgUkVHX1AgKFhF WFAgKFNFVF9TUkMgKHNldCksIDApKQo+ICvCoMKgwqDCoMKgwqDCoMKgICYmIFBMVVNfUCAoU0VU X1NSQyAoc2V0KSkgJiYgUkVHX1AgKFhFWFAgKFNFVF9TUkMgKHNldCksCj4gMCkpCj4gwqDCoMKg wqDCoMKgwqDCoMKgICYmIENPTlNUQU5UX1AgKFhFWFAgKFNFVF9TUkMgKHNldCksIDEpKSkKPiDC oMKgwqDCoMKgwqDCoMKgewo+IMKgwqDCoMKgwqDCoMKgwqDCoCAqYWQuaW5uZXIgPSBTRVRfU1JD IChzZXQpOwo+IEBAIC0zODM5LDEwICszODM0LDkgQEAgZW1pdF9pbmMgKGVudW0gcmVnX2NsYXNz IG5ld19yY2xhc3MsIHJ0eCBpbiwKPiBydHggdmFsdWUsIHBvbHlfaW50NjQgaW5jX2Ftb3VudCkK PiDCoAo+IMKgwqAgaWYgKEdFVF9DT0RFICh2YWx1ZSkgPT0gUFJFX01PRElGWSB8fCBHRVRfQ09E RSAodmFsdWUpID09Cj4gUE9TVF9NT0RJRlkpCj4gwqDCoMKgwqAgewo+IC3CoMKgwqDCoMKgIGxy YV9hc3NlcnQgKEdFVF9DT0RFIChYRVhQICh2YWx1ZSwgMSkpID09IFBMVVMKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgR0VUX0NPREUgKFhFWFAgKHZhbHVlLCAxKSkgPT0g TUlOVVMpOwo+ICvCoMKgwqDCoMKgIGxyYV9hc3NlcnQgKFBMVVNfUCAoWEVYUCAodmFsdWUsIDEp KSB8fCBNSU5VU19QIChYRVhQICh2YWx1ZSwKPiAxKSkpOwo+IMKgwqDCoMKgwqDCoCBscmFfYXNz ZXJ0IChydHhfZXF1YWxfcCAoWEVYUCAoWEVYUCAodmFsdWUsIDEpLCAwKSwgWEVYUAo+ICh2YWx1 ZSwgMCkpKTsKPiAtwqDCoMKgwqDCoCBwbHVzX3AgPSBHRVRfQ09ERSAoWEVYUCAodmFsdWUsIDEp KSA9PSBQTFVTOwo+ICvCoMKgwqDCoMKgIHBsdXNfcCA9IFBMVVNfUCAoWEVYUCAodmFsdWUsIDEp KTsKPiDCoMKgwqDCoMKgwqAgaW5jID0gWEVYUCAoWEVYUCAodmFsdWUsIDEpLCAxKTsKPiDCoMKg wqDCoCB9Cj4gwqDCoCBlbHNlCj4gZGlmZiAtLWdpdCBhL2djYy9scmEtZWxpbWluYXRpb25zLmNj IGIvZ2NjL2xyYS1lbGltaW5hdGlvbnMuY2MKPiBpbmRleCBjNjMwZmY0YWYyZC4uZWM4MWQyNzI0 MDEgMTAwNjQ0Cj4gLS0tIGEvZ2NjL2xyYS1lbGltaW5hdGlvbnMuY2MKPiArKysgYi9nY2MvbHJh LWVsaW1pbmF0aW9ucy5jYwo+IEBAIC0yMTMsMTMgKzIxMywxMyBAQCBmb3JtX3N1bSAocnR4IHgs IHJ0eCB5KQo+IMKgwqAgZWxzZSBpZiAoQ09OU1RBTlRfUCAoeCkpCj4gwqDCoMKgwqAgc3RkOjpz d2FwICh4LCB5KTsKPiDCoAo+IC3CoCBpZiAoR0VUX0NPREUgKHgpID09IFBMVVMgJiYgQ09OU1RB TlRfUCAoWEVYUCAoeCwgMSkpKQo+ICvCoCBpZiAoUExVU19QICh4KSAmJiBDT05TVEFOVF9QIChY RVhQICh4LCAxKSkpCj4gwqDCoMKgwqAgcmV0dXJuIGZvcm1fc3VtIChYRVhQICh4LCAwKSwgZm9y bV9zdW0gKFhFWFAgKHgsIDEpLCB5KSk7Cj4gwqAKPiDCoMKgIC8qIE5vdGUgdGhhdCBpZiB0aGUg b3BlcmFuZHMgb2YgWSBhcmUgc3BlY2lmaWVkIGluIHRoZSBvcHBvc2l0ZQo+IMKgwqDCoMKgwqAg b3JkZXIgaW4gdGhlIHJlY3Vyc2l2ZSBjYWxscyBiZWxvdywgaW5maW5pdGUgcmVjdXJzaW9uIHdp bGwKPiDCoMKgwqDCoMKgIG9jY3VyLsKgICovCj4gLcKgIGlmIChHRVRfQ09ERSAoeSkgPT0gUExV UyAmJiBDT05TVEFOVF9QIChYRVhQICh5LCAxKSkpCj4gK8KgIGlmIChQTFVTX1AgKHkpICYmIENP TlNUQU5UX1AgKFhFWFAgKHksIDEpKSkKPiDCoMKgwqDCoCByZXR1cm4gZm9ybV9zdW0gKGZvcm1f c3VtICh4LCBYRVhQICh5LCAwKSksIFhFWFAgKHksIDEpKTsKPiDCoAo+IMKgwqAgLyogSWYgYm90 aCBjb25zdGFudCwgZW5jYXBzdWxhdGUgc3VtLsKgwqDCoMKgwqDCoMKgwqAgT3RoZXJ3aXNlLCBq dXN0IGZvcm0KPiBzdW0uwqAgQQo+IEBAIC0yOTIsOCArMjkyLDcgQEAgbW92ZV9wbHVzX3VwIChy dHggeCkKPiDCoMKgIHN1YnJlZ19yZWcgPSBTVUJSRUdfUkVHICh4KTsKPiDCoMKgIHhfbW9kZSA9 IEdFVF9NT0RFICh4KTsKPiDCoMKgIHN1YnJlZ19yZWdfbW9kZSA9IEdFVF9NT0RFIChzdWJyZWdf cmVnKTsKPiAtwqAgaWYgKCFwYXJhZG94aWNhbF9zdWJyZWdfcCAoeCkKPiAtwqDCoMKgwqDCoCAm JiBHRVRfQ09ERSAoc3VicmVnX3JlZykgPT0gUExVUwo+ICvCoCBpZiAoIXBhcmFkb3hpY2FsX3N1 YnJlZ19wICh4KSAmJiBQTFVTX1AgKHN1YnJlZ19yZWcpCj4gwqDCoMKgwqDCoMKgICYmIENPTlNU QU5UX1AgKFhFWFAgKHN1YnJlZ19yZWcsIDEpKQo+IMKgwqDCoMKgwqDCoCAmJiBHRVRfTU9ERV9D TEFTUyAoeF9tb2RlKSA9PSBNT0RFX0lOVAo+IMKgwqDCoMKgwqDCoCAmJiBHRVRfTU9ERV9DTEFT UyAoc3VicmVnX3JlZ19tb2RlKSA9PSBNT0RFX0lOVCkKPiBAQCAtNTcwLDggKzU2OSw3IEBAIGxy YV9lbGltaW5hdGVfcmVnc18xIChydHhfaW5zbiAqaW5zbiwgcnR4IHgsCj4gbWFjaGluZV9tb2Rl IG1lbV9tb2RlLAo+IMKgwqDCoMKgwqDCoMKgwqAgbW9kaWZpZWQuwqAgTFJBIGhhcyBhbHJlYWR5 IG1ha2Ugc3VyZSB0aGF0IHRoaXMgZG9lcyBub3QKPiDCoMKgwqDCoMKgwqDCoMKgIGhhcHBlbi4g VGhlIG9ubHkgcmVtYWluaW5nIGNhc2Ugd2UgbmVlZCB0byBjb25zaWRlciBoZXJlIGlzCj4gwqDC oMKgwqDCoMKgwqDCoCB0aGF0IHRoZSBpbmNyZW1lbnQgdmFsdWUgbWF5IGJlIGFuIGVsaW1pbmFi bGUgcmVnaXN0ZXIuwqAgKi8KPiAtwqDCoMKgwqDCoCBpZiAoR0VUX0NPREUgKFhFWFAgKHgsIDEp KSA9PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKgwqAgJiYgWEVYUCAoWEVYUCAoeCwgMSksIDApID09 IFhFWFAgKHgsIDApKQo+ICvCoMKgwqDCoMKgIGlmIChQTFVTX1AgKFhFWFAgKHgsIDEpKSAmJiBY RVhQIChYRVhQICh4LCAxKSwgMCkgPT0gWEVYUCAoeCwKPiAwKSkKPiDCoMKgwqDCoMKgwqDCoMKg ewo+IMKgwqDCoMKgwqDCoMKgwqDCoCBydHggbmV3X3J0eCA9IGxyYV9lbGltaW5hdGVfcmVnc18x IChpbnNuLCBYRVhQIChYRVhQICh4LAo+IDEpLCAxKSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgbWVtX21vZGUsIHN1YnN0X3AsCj4gdXBkYXRlX3AsCj4gQEAgLTc0NCw4ICs3 NDIsNyBAQCBtYXJrX25vdF9lbGltaW5hYmxlIChydHggeCwgbWFjaGluZV9tb2RlCj4gbWVtX21v ZGUpCj4gwqDCoMKgwqAgY2FzZSBQUkVfTU9ESUZZOgo+IMKgwqDCoMKgwqDCoCBpZiAoWEVYUCAo eCwgMCkgPT0gc3RhY2tfcG9pbnRlcl9ydHgKPiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKChjb2Rl ICE9IFBSRV9NT0RJRlkgJiYgY29kZSAhPSBQT1NUX01PRElGWSkKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHx8IChHRVRfQ09ERSAoWEVYUCAoeCwgMSkpID09IFBMVVMKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgWEVYUCAoeCwgMCkgPT0gWEVYUCAoWEVYUCAoeCwg MSksIDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCAoUExVU19QIChYRVhQICh4LCAx KSkgJiYgWEVYUCAoeCwgMCkgPT0gWEVYUCAoWEVYUAo+ICh4LCAxKSwgMCkKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIHBvbHlfaW50X3J0eF9wIChYRVhQIChYRVhQICh4 LCAxKSwgMSksCj4gJm9mZnNldCkpKSkKPiDCoMKgwqDCoMKgwqDCoMKgewo+IMKgwqDCoMKgwqDC oMKgwqDCoCBwb2x5X2ludDY0IHNpemUgPSBHRVRfTU9ERV9TSVpFIChtZW1fbW9kZSk7Cj4gQEAg LTgwNyw4ICs4MDQsNyBAQCBtYXJrX25vdF9lbGltaW5hYmxlIChydHggeCwgbWFjaGluZV9tb2Rl Cj4gbWVtX21vZGUpCj4gwqDCoMKgwqDCoMKgIHJldHVybjsKPiDCoAo+IMKgwqDCoMKgIGNhc2Ug U0VUOgo+IC3CoMKgwqDCoMKgIGlmIChTRVRfREVTVCAoeCkgPT0gc3RhY2tfcG9pbnRlcl9ydHgK PiAtwqDCoMKgwqDCoMKgwqDCoCAmJiBHRVRfQ09ERSAoU0VUX1NSQyAoeCkpID09IFBMVVMKPiAr wqDCoMKgwqDCoCBpZiAoU0VUX0RFU1QgKHgpID09IHN0YWNrX3BvaW50ZXJfcnR4ICYmIFBMVVNf UCAoU0VUX1NSQyAoeCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgICYmIFhFWFAgKFNFVF9TUkMgKHgp LCAwKSA9PSBTRVRfREVTVCAoeCkKPiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgcG9seV9pbnRfcnR4 X3AgKFhFWFAgKFNFVF9TUkMgKHgpLCAxKSwgJm9mZnNldCkpCj4gwqDCoMKgwqDCoMKgwqDCoHsK PiBAQCAtOTA5LDcgKzkwNSw3IEBAIGVsaW1pbmF0ZV9yZWdzX2luX2luc24gKHJ0eF9pbnNuICpp bnNuLCBib29sCj4gcmVwbGFjZV9wLCBib29sIGZpcnN0X3AsCj4gwqDCoCBwb2x5X2ludDY0IG9m ZnNldCA9IDA7Cj4gwqDCoCBpZiAob2xkX3NldCAmJiBSRUdfUCAoU0VUX0RFU1QgKG9sZF9zZXQp KSkKPiDCoMKgwqDCoCB7Cj4gLcKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFIChTRVRfU1JDIChvbGRf c2V0KSkgPT0gUExVUykKPiArwqDCoMKgwqDCoCBpZiAoUExVU19QIChTRVRfU1JDIChvbGRfc2V0 KSkpCj4gwqDCoMKgwqDCoMKgwqDCoHBsdXNfc3JjID0gU0VUX1NSQyAob2xkX3NldCk7Cj4gwqDC oMKgwqDCoMKgIC8qIEZpcnN0IHNlZSBpZiB0aGUgc291cmNlIGlzIG9mIHRoZSBmb3JtIChwbHVz ICguLi4pIENTVCkuwqAKPiAqLwo+IMKgwqDCoMKgwqDCoCBpZiAocGx1c19zcmMgJiYgcG9seV9p bnRfcnR4X3AgKFhFWFAgKHBsdXNfc3JjLCAxKSwgJm9mZnNldCkpCj4gQEAgLTEwNDIsMTIgKzEw MzgsMTEgQEAgZWxpbWluYXRlX3JlZ3NfaW5faW5zbiAocnR4X2luc24gKmluc24sIGJvb2wKPiBy ZXBsYWNlX3AsIGJvb2wgZmlyc3RfcCwKPiDCoMKgwqDCoMKgIGFmdGVyIGFsbCByZWxvYWRzIGNh bGN1bGF0aW5nIGl0cyBvZmZzZXQuwqAgVGhpcyBwZXJtaXRzIHRvIGtlZXAKPiByZWdpc3Rlcgo+ IMKgwqDCoMKgwqAgcHJlc3N1cmUgdW5kZXIgY29udHJvbCBhbmQgaGVscHMgdG8gYXZvaWQgTFJB IGN5Y2xpbmcgaW4KPiBwYXRhbG9naWNhbAo+IMKgwqDCoMKgwqAgY2FzZXMuwqAgKi8KPiAtwqAg aWYgKCEgcmVwbGFjZV9wICYmIChzZXQgPSBzaW5nbGVfc2V0IChpbnNuKSkgIT0gTlVMTAo+IC3C oMKgwqDCoMKgICYmIEdFVF9DT0RFIChTRVRfU1JDIChzZXQpKSA9PSBQTFVTCj4gLcKgwqDCoMKg wqAgJiYgR0VUX0NPREUgKFhFWFAgKFNFVF9TUkMgKHNldCksIDApKSA9PSBQTFVTKQo+ICvCoCBp ZiAoIXJlcGxhY2VfcCAmJiAoc2V0ID0gc2luZ2xlX3NldCAoaW5zbikpICE9IE5VTEwgJiYgUExV U19QCj4gKFNFVF9TUkMgKHNldCkpCj4gK8KgwqDCoMKgwqAgJiYgUExVU19QIChYRVhQIChTRVRf U1JDIChzZXQpLCAwKSkpCj4gwqDCoMKgwqAgewo+IMKgwqDCoMKgwqDCoCBydHggcmVnMSwgcmVn Miwgb3AxLCBvcDI7Cj4gLcKgwqDCoMKgwqAgCj4gKwo+IMKgwqDCoMKgwqDCoCByZWcxID0gb3Ax ID0gWEVYUCAoWEVYUCAoU0VUX1NSQyAoc2V0KSwgMCksIDApOwo+IMKgwqDCoMKgwqDCoCByZWcy ID0gb3AyID0gWEVYUCAoU0VUX1NSQyAoc2V0KSwgMSk7Cj4gwqDCoMKgwqDCoMKgIGlmIChHRVRf Q09ERSAocmVnMSkgPT0gU1VCUkVHKQo+IGRpZmYgLS1naXQgYS9nY2MvbHJhLmNjIGIvZ2NjL2xy YS5jYwo+IGluZGV4IDE0NDRjYjc1OTE0Li5jZjBlZGQ4YjQ4NyAxMDA2NDQKPiAtLS0gYS9nY2Mv bHJhLmNjCj4gKysrIGIvZ2NjL2xyYS5jYwo+IEBAIC0zNTUsNyArMzU1LDcgQEAgbHJhX2VtaXRf YWRkIChydHggeCwgcnR4IHksIHJ0eCB6KQo+IMKgwqAgZWxzZQo+IMKgwqDCoMKgIHsKPiDCoMKg wqDCoMKgwqAgZGlzcCA9IGEyID0gTlVMTF9SVFg7Cj4gLcKgwqDCoMKgwqAgaWYgKEdFVF9DT0RF ICh5KSA9PSBQTFVTKQo+ICvCoMKgwqDCoMKgIGlmIChQTFVTX1AgKHkpKQo+IMKgwqDCoMKgwqDC oMKgwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIGExID0gWEVYUCAoeSwgMCk7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgIGEyID0gWEVYUCAoeSwgMSk7Cj4gQEAgLTM3MCwxNCArMzcwLDE0IEBAIGxyYV9l bWl0X2FkZCAocnR4IHgsIHJ0eCB5LCBydHggeikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGEy ID0gejsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgwqDCoMKgwqDCoCBpbmRleF9zY2FsZSA9IHNj YWxlID0gTlVMTF9SVFg7Cj4gLcKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFIChhMSkgPT0gTVVMVCkK PiArwqDCoMKgwqDCoCBpZiAoTVVMVF9QIChhMSkpCj4gwqDCoMKgwqDCoMKgwqDCoHsKPiDCoMKg wqDCoMKgwqDCoMKgwqAgaW5kZXhfc2NhbGUgPSBhMTsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgaW5k ZXggPSBYRVhQIChhMSwgMCk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNjYWxlID0gWEVYUCAoYTEs IDEpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoCBiYXNlID0gYTI7Cj4gwqDCoMKgwqDCoMKgwqDCoH0K PiAtwqDCoMKgwqDCoCBlbHNlIGlmIChhMiAhPSBOVUxMX1JUWCAmJiBHRVRfQ09ERSAoYTIpID09 IE1VTFQpCj4gK8KgwqDCoMKgwqAgZWxzZSBpZiAoYTIgIT0gTlVMTF9SVFggJiYgTVVMVF9QIChh MikpCj4gwqDCoMKgwqDCoMKgwqDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgaW5kZXhfc2NhbGUg PSBhMjsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgaW5kZXggPSBYRVhQIChhMiwgMCk7Cj4gZGlmZiAt LWdpdCBhL2djYy9tb2R1bG8tc2NoZWQuY2MgYi9nY2MvbW9kdWxvLXNjaGVkLmNjCj4gaW5kZXgg MTYyZGUxOTlkYTYuLjk1ZjZmODA1ZTllIDEwMDY0NAo+IC0tLSBhL2djYy9tb2R1bG8tc2NoZWQu Y2MKPiArKysgYi9nY2MvbW9kdWxvLXNjaGVkLmNjCj4gQEAgLTM1NCw3ICszNTQsNyBAQCBkb2xv b3BfcmVnaXN0ZXJfZ2V0IChydHhfaW5zbiAqaGVhZCwgcnR4X2luc24KPiAqdGFpbCkKPiDCoAo+ IMKgwqAgaWYgKFJFR19QIChYRVhQIChjb25kaXRpb24sIDApKSkKPiDCoMKgwqDCoCByZWcgPSBY RVhQIChjb25kaXRpb24sIDApOwo+IC3CoCBlbHNlIGlmIChHRVRfQ09ERSAoWEVYUCAoY29uZGl0 aW9uLCAwKSkgPT0gUExVUwo+ICvCoCBlbHNlIGlmIChQTFVTX1AgKFhFWFAgKGNvbmRpdGlvbiwg MCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgUkVHX1AgKFhFWFAgKFhFWFAgKGNvbmRpdGlv biwgMCksIDApKSkKPiDCoMKgwqDCoCByZWcgPSBYRVhQIChYRVhQIChjb25kaXRpb24sIDApLCAw KTsKPiDCoMKgIGVsc2UKPiBkaWZmIC0tZ2l0IGEvZ2NjL3Bvc3RyZWxvYWQuY2MgYi9nY2MvcG9z dHJlbG9hZC5jYwo+IGluZGV4IDQxZjYxZDMyNjQ4Li5jMWIyYTgzNzA2NiAxMDA2NDQKPiAtLS0g YS9nY2MvcG9zdHJlbG9hZC5jYwo+ICsrKyBiL2djYy9wb3N0cmVsb2FkLmNjCj4gQEAgLTg5LDkg Kzg5LDggQEAgcmVsb2FkX2NzZV9zaW1wbGlmeSAocnR4X2luc24gKmluc24sIHJ0eCB0ZXN0cmVn KQo+IMKgwqAgLyogUmVtZW1iZXIgaWYgdGhpcyBpbnNuIGhhcyBiZWVuIHNwICs9IGNvbnN0X2lu dC7CoCAqLwo+IMKgwqAgcnR4IHNwX3NldCA9IHNldF9mb3JfcmVnX25vdGVzIChpbnNuKTsKPiDC oMKgIHJ0eCBzcF9hZGRlbmQgPSBOVUxMX1JUWDsKPiAtwqAgaWYgKHNwX3NldAo+IC3CoMKgwqDC oMKgICYmIFNFVF9ERVNUIChzcF9zZXQpID09IHN0YWNrX3BvaW50ZXJfcnR4Cj4gLcKgwqDCoMKg wqAgJiYgR0VUX0NPREUgKFNFVF9TUkMgKHNwX3NldCkpID09IFBMVVMKPiArwqAgaWYgKHNwX3Nl dCAmJiBTRVRfREVTVCAoc3Bfc2V0KSA9PSBzdGFja19wb2ludGVyX3J0eAo+ICvCoMKgwqDCoMKg ICYmIFBMVVNfUCAoU0VUX1NSQyAoc3Bfc2V0KSkKPiDCoMKgwqDCoMKgwqAgJiYgWEVYUCAoU0VU X1NSQyAoc3Bfc2V0KSwgMCkgPT0gc3RhY2tfcG9pbnRlcl9ydHgKPiDCoMKgwqDCoMKgwqAgJiYg Q09OU1RfSU5UX1AgKFhFWFAgKFNFVF9TUkMgKHNwX3NldCksIDEpKSkKPiDCoMKgwqDCoCBzcF9h ZGRlbmQgPSBYRVhQIChTRVRfU1JDIChzcF9zZXQpLCAxKTsKPiBAQCAtODk3LDkgKzg5Niw3IEBA IHRyeV9yZXBsYWNlX2luX3VzZSAoc3RydWN0IHJlZ191c2UgKnVzZSwgcnR4IHJlZywKPiBydHgg c3JjKQo+IMKgwqAgZWxzZQo+IMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqAgcnR4IG5ld19zZXQg PSBzaW5nbGVfc2V0ICh1c2VfaW5zbik7Cj4gLcKgwqDCoMKgwqAgaWYgKG5ld19zZXQKPiAtwqDC oMKgwqDCoMKgwqDCoCAmJiBSRUdfUCAoU0VUX0RFU1QgKG5ld19zZXQpKQo+IC3CoMKgwqDCoMKg wqDCoMKgICYmIEdFVF9DT0RFIChTRVRfU1JDIChuZXdfc2V0KSkgPT0gUExVUwo+ICvCoMKgwqDC oMKgIGlmIChuZXdfc2V0ICYmIFJFR19QIChTRVRfREVTVCAobmV3X3NldCkpICYmIFBMVVNfUCAo U0VUX1NSQwo+IChuZXdfc2V0KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgUkVHX1AgKFhFWFAg KFNFVF9TUkMgKG5ld19zZXQpLCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgQ09OU1RBTlRf UCAoWEVYUCAoU0VUX1NSQyAobmV3X3NldCksIDEpKSkKPiDCoMKgwqDCoMKgwqDCoMKgewo+IEBA IC0xMTEwLDExICsxMTA3LDggQEAgcmVsb2FkX2NvbWJpbmVfcmVjb2duaXplX3BhdHRlcm4gKHJ0 eF9pbnNuCj4gKmluc24pCj4gwqDCoMKgwqDCoCBBbHNvLCBleHBsaWNpdGx5IGNoZWNrIHRoYXQg UkVHWCAhPSBSRUdZOyBvdXIgbGlmZSBpbmZvcm1hdGlvbgo+IMKgwqDCoMKgwqAgZG9lcyBub3Qg eWV0IHNob3cgd2hldGhlciBSRUdZIGNoYW5nZXMgaW4gdGhpcyBpbnNuLsKgICovCj4gwqAKPiAt wqAgaWYgKEdFVF9DT0RFIChzcmMpID09IFBMVVMKPiAtwqDCoMKgwqDCoCAmJiByZWdfc3RhdGVb cmVnbm9dLmFsbF9vZmZzZXRzX21hdGNoCj4gLcKgwqDCoMKgwqAgJiYgbGFzdF9pbmRleF9yZWcg IT0gLTEKPiAtwqDCoMKgwqDCoCAmJiBSRUdfUCAoWEVYUCAoc3JjLCAxKSkKPiAtwqDCoMKgwqDC oCAmJiBydHhfZXF1YWxfcCAoWEVYUCAoc3JjLCAwKSwgcmVnKQo+ICvCoCBpZiAoUExVU19QIChz cmMpICYmIHJlZ19zdGF0ZVtyZWdub10uYWxsX29mZnNldHNfbWF0Y2ggJiYKPiBsYXN0X2luZGV4 X3JlZyAhPSAtMQo+ICvCoMKgwqDCoMKgICYmIFJFR19QIChYRVhQIChzcmMsIDEpKSAmJiBydHhf ZXF1YWxfcCAoWEVYUCAoc3JjLCAwKSwgcmVnKQo+IMKgwqDCoMKgwqDCoCAmJiAhcnR4X2VxdWFs X3AgKFhFWFAgKHNyYywgMSksIHJlZykKPiDCoMKgwqDCoMKgwqAgJiYgbGFzdF9sYWJlbF9ydWlk IDwgcmVnX3N0YXRlW3JlZ25vXS51c2VfcnVpZCkKPiDCoMKgwqDCoCB7Cj4gQEAgLTE5ODcsOSAr MTk4MSw3IEBAIHJlbG9hZF9jc2VfbW92ZTJhZGQgKHJ0eF9pbnNuICpmaXJzdCkKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJ0eCBzZXQgPSBOVUxMX1JUWDsKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChuZXh0KQo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNldCA9IHNpbmdsZV9zZXQgKG5leHQpOwo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoc2V0Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgU0VUX0RFU1QgKHNldCkgPT0gcmVnCj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFNFVF9TUkMgKHNl dCkpID09IFBMVVMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHNldCAm JiBTRVRfREVTVCAoc2V0KSA9PSByZWcgJiYgUExVU19QIChTRVRfU1JDCj4gKHNldCkpCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIFhFWFAgKFNFVF9TUkMg KHNldCksIDApID09IHJlZwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAoU0VUX1NSQyAoc2V0KSwgMSkpKQo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsKPiBAQCAtMjA1Miw4ICsyMDQ0LDcgQEAg cmVsb2FkX2NzZV9tb3ZlMmFkZCAocnR4X2luc24gKmZpcnN0KQo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAuLi4KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHNldCAoUkVHWSkgKENPTlNU IChQTFVTIChSRUdYKSAoQ09OU1RfSU5UIEItQSkpKSnCoCAqLwo+IMKgwqDCoMKgwqDCoMKgwqDC oCBpZiAoKEdFVF9DT0RFIChzcmMpID09IFNZTUJPTF9SRUYKPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfHwgKEdFVF9DT0RFIChzcmMpID09IENPTlNUCj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhFWFAgKHNyYywgMCkpID09IFBMVVMKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgKEdFVF9DT0RFIChzcmMpID09IENPTlNUICYm IFBMVVNfUCAoWEVYUCAoc3JjLCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgJiYgR0VUX0NPREUgKFhFWFAgKFhFWFAgKHNyYywgMCksIDApKSA9PQo+IFNZTUJPTF9S RUYKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgQ09OU1RfSU5UX1Ag KFhFWFAgKFhFWFAgKHNyYywgMCksIDEpKSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg JiYgZGJnX2NudCAoY3NlMl9tb3ZlMmFkZCkpCj4gQEAgLTIxOTMsNyArMjE4NCw3IEBAIG1vdmUy YWRkX25vdGVfc3RvcmUgKHJ0eCBkc3QsIGNvbnN0X3J0eCBzZXQsCj4gdm9pZCAqZGF0YSkKPiDC oMKgwqDCoMKgwqDCoMKgwqAgb2ZmID0gY29uc3QwX3J0eDsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+ IMKgwqDCoMKgwqDCoCBlbHNlIGlmIChub3RlICYmIEdFVF9DT0RFIChYRVhQIChub3RlLCAwKSkg PT0gQ09OU1QKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhFWFAg KFhFWFAgKG5vdGUsIDApLCAwKSkgPT0gUExVUwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAmJiBQTFVTX1AgKFhFWFAgKFhFWFAgKG5vdGUsIDApLCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChYRVhQIChYRVhQIChYRVhQIChub3RlLCAwKSwgMCks IDApKSA9PQo+IFNZTUJPTF9SRUYKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIENP TlNUX0lOVF9QIChYRVhQIChYRVhQIChYRVhQIChub3RlLCAwKSwgMCksIDEpKSkKPiDCoMKgwqDC oMKgwqDCoMKgewo+IGRpZmYgLS1naXQgYS9nY2MvcmVnaW5mby5jYyBiL2djYy9yZWdpbmZvLmNj Cj4gaW5kZXggNzA1Nzc5ZDVjMTguLjkyNjE0MDc0Njc2IDEwMDY0NAo+IC0tLSBhL2djYy9yZWdp bmZvLmNjCj4gKysrIGIvZ2NjL3JlZ2luZm8uY2MKPiBAQCAtMTA4MCwxMiArMTA4MCw5IEBAIHJl Z19zY2FuX21hcmtfcmVmcyAocnR4IHgsIHJ0eF9pbnNuICppbnNuKQo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBvcHRpbWl6YXRpb25zKS7CoCBTbyBvbmx5IHNldCBSRUdfUE9JTlRFUiBvbiB0 aGUKPiBkZXN0aW5hdGlvbgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwc2V1ZG8gaWYgdGhp cyBpcyB0aGUgb25seSBzZXQgb2YgdGhhdCBwc2V1ZG8uwqAgKi8KPiDCoMKgwqDCoMKgwqDCoMKg wqAgJiYgREZfUkVHX0RFRl9DT1VOVCAoUkVHTk8gKFNFVF9ERVNUICh4KSkpID09IDEKPiAtwqDC oMKgwqDCoMKgwqDCoCAmJiAhIFJFR19VU0VSVkFSX1AgKFNFVF9ERVNUICh4KSkKPiAtwqDCoMKg wqDCoMKgwqDCoCAmJiAhIFJFR19QT0lOVEVSIChTRVRfREVTVCAoeCkpCj4gLcKgwqDCoMKgwqDC oMKgwqAgJiYgKChSRUdfUCAoU0VUX1NSQyAoeCkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICYmIFJFR19QT0lOVEVSIChTRVRfU1JDICh4KSkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB8fCAoKEdFVF9DT0RFIChTRVRfU1JDICh4KSkgPT0gUExVUwo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IEdFVF9DT0RFIChTRVRfU1JDICh4KSkgPT0gTE9fU1VN KQo+ICvCoMKgwqDCoMKgwqDCoMKgICYmICFSRUdfVVNFUlZBUl9QIChTRVRfREVTVCAoeCkpICYm ICFSRUdfUE9JTlRFUiAoU0VUX0RFU1QKPiAoeCkpCj4gK8KgwqDCoMKgwqDCoMKgwqAgJiYgKChS RUdfUCAoU0VUX1NSQyAoeCkpICYmIFJFR19QT0lOVEVSIChTRVRfU1JDICh4KSkpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB8fCAoKFBMVVNfUCAoU0VUX1NSQyAoeCkpIHx8IEdFVF9DT0RF IChTRVRfU1JDICh4KSkgPT0KPiBMT19TVU0pCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAoU0VUX1NSQyAoeCksIDEpKQo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgUkVHX1AgKFhFWFAgKFNFVF9TUkMgKHgpLCAw KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIFJFR19QT0lOVEVSIChY RVhQIChTRVRfU1JDICh4KSwgMCkpKQo+IEBAIC0xMDk2LDggKzEwOTMsNyBAQCByZWdfc2Nhbl9t YXJrX3JlZnMgKHJ0eCB4LCBydHhfaW5zbiAqaW5zbikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICYmIChHRVRfQ09ERSAoWEVYUCAoU0VUX1NSQyAoeCksIDApKSA9PSBDT05T VAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCBHRVRfQ09E RSAoWEVYUCAoU0VUX1NSQyAoeCksIDApKSA9PQo+IFNZTUJPTF9SRUYKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgR0VUX0NPREUgKFhFWFAgKFNFVF9TUkMg KHgpLCAwKSkgPT0KPiBMQUJFTF9SRUYpKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwg KChHRVRfQ09ERSAoU0VUX1NSQyAoeCkpID09IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB8fCBHRVRfQ09ERSAoU0VUX1NSQyAoeCkpID09IExPX1NVTSkKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8ICgoUExVU19QIChTRVRfU1JDICh4KSkgfHwgR0VUX0NP REUgKFNFVF9TUkMgKHgpKSA9PQo+IExPX1NVTSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICYmIChHRVRfQ09ERSAoWEVYUCAoU0VUX1NSQyAoeCksIDEpKSA9PSBDT05TVAo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCBHRVRfQ09ERSAo WEVYUCAoU0VUX1NSQyAoeCksIDEpKSA9PQo+IFNZTUJPTF9SRUYKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgR0VUX0NPREUgKFhFWFAgKFNFVF9TUkMgKHgp LCAxKSkgPT0KPiBMQUJFTF9SRUYpKQo+IGRpZmYgLS1naXQgYS9nY2MvcmVsb2FkLmNjIGIvZ2Nj L3JlbG9hZC5jYwo+IGluZGV4IDNlZDkwMWUzOTQ0Li5mNzY1OWMyZDQzZSAxMDA2NDQKPiAtLS0g YS9nY2MvcmVsb2FkLmNjCj4gKysrIGIvZ2NjL3JlbG9hZC5jYwo+IEBAIC04NDYsNyArODQ2LDcg QEAgcmVsb2FkX2lubmVyX3JlZ19vZl9zdWJyZWcgKHJ0eCB4LCBtYWNoaW5lX21vZGUKPiBtb2Rl LCBib29sIG91dHB1dCkKPiDCoMKgIGlubmVyID0gU1VCUkVHX1JFRyAoeCk7Cj4gwqAKPiDCoMKg IC8qIElmIElOTkVSIGlzIGEgY29uc3RhbnQgb3IgUExVUywgdGhlbiBJTk5FUiB3aWxsIG5lZWQK PiByZWxvYWRpbmcuwqAgKi8KPiAtwqAgaWYgKENPTlNUQU5UX1AgKGlubmVyKSB8fCBHRVRfQ09E RSAoaW5uZXIpID09IFBMVVMpCj4gK8KgIGlmIChDT05TVEFOVF9QIChpbm5lcikgfHwgUExVU19Q IChpbm5lcikpCj4gwqDCoMKgwqAgcmV0dXJuIHRydWU7Cj4gwqAKPiDCoMKgIC8qIElmIElOTkVS IGlzIG5vdCBhIGhhcmQgcmVnaXN0ZXIsIHRoZW4gSU5ORVIgd2lsbCBub3QgbmVlZAo+IHJlbG9h ZGluZy7CoCAqLwo+IEBAIC0xMDU4LDMzICsxMDU4LDMwIEBAIHB1c2hfcmVsb2FkIChydHggaW4s IHJ0eCBvdXQsIHJ0eCAqaW5sb2MsIHJ0eAo+ICpvdXRsb2MsCj4gwqAKPiDCoMKgIHNjYWxhcl9p bnRfbW9kZSBpbm5lcl9tb2RlOwo+IMKgwqAgaWYgKGluICE9IDAgJiYgR0VUX0NPREUgKGluKSA9 PSBTVUJSRUcKPiAtwqDCoMKgwqDCoCAmJiB0YXJnZXRtLmNhbl9jaGFuZ2VfbW9kZV9jbGFzcyAo R0VUX01PREUgKFNVQlJFR19SRUcgKGluKSksCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlubW9k ZSwgcmNsYXNzKQo+ICvCoMKgwqDCoMKgICYmIHRhcmdldG0uY2FuX2NoYW5nZV9tb2RlX2NsYXNz IChHRVRfTU9ERSAoU1VCUkVHX1JFRyAoaW4pKSwKPiBpbm1vZGUsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJjbGFzcykKPiDCoMKgwqDCoMKgwqAgJiYgY29udGFpbnNfYWxsb2NhdGFibGVfcmVn X29mX21vZGVbcmNsYXNzXVtHRVRfTU9ERQo+IChTVUJSRUdfUkVHIChpbikpXQo+IMKgwqDCoMKg wqDCoCAmJiAoc3RyaWN0X2xvdwo+IMKgwqDCoMKgwqDCoMKgwqDCoCB8fCAoc3VicmVnX2xvd3Bh cnRfcCAoaW4pCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAoQ09OU1RBTlRfUCAoU1VC UkVHX1JFRyAoaW4pKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCBHRVRf Q09ERSAoU1VCUkVHX1JFRyAoaW4pKSA9PSBQTFVTCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAmJiAoQ09OU1RBTlRfUCAoU1VCUkVHX1JFRyAoaW4pKSB8fCBQTFVTX1AgKFNVQlJFR19SRUcK PiAoaW4pKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgKCgoUkVHX1Ag KFNVQlJFR19SRUcgKGluKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAmJiBSRUdOTyAoU1VCUkVHX1JFRyAoaW4pKSA+PQo+IEZJUlNUX1BTRVVET19S RUdJU1RFUikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8 fCBNRU1fUCAoU1VCUkVHX1JFRyAoaW4pKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJiYgKHBhcmFkb3hpY2FsX3N1YnJlZ19wIChpbm1vZGUsCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0VUX01PREUgKFNVQlJFR19SRUcKPiAo aW4pKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB8fCAoa25vd25fbGUgKEdFVF9NT0RFX1NJWkUgKGlubW9kZSksCj4gVU5JVFNfUEVSX1dPUkQp Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICYmIGlzX2EgPHNjYWxhcl9pbnRfbW9kZT4gKEdFVF9NT0RFCj4gKFNVQlJFR19SRUcKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoAo+IChpbikpLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmaW5uZXJfbW9kZSkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgaXNfYTxzY2FsYXJf aW50X21vZGU+ICgKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBHRVRfTU9ERSAoU1VCUkVHX1JFRyAoaW4pKSwKPiAmaW5uZXJf bW9kZSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICYmIEdFVF9NT0RFX1NJWkUgKGlubmVyX21vZGUpIDw9Cj4gVU5JVFNfUEVSX1dP UkQKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICYmIHBhcmFkb3hpY2FsX3N1YnJlZ19wIChpbm1vZGUsCj4gaW5uZXJfbW9kZSkKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICYmIExPQURfRVhURU5EX09QIChpbm5lcl9tb2RlKSAhPQo+IFVOS05PV04pCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgKFdPUkRfUkVHSVNU RVJfT1BFUkFUSU9OUwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgJiYgcGFydGlhbF9zdWJyZWdfcCAoaW5tb2RlLAo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VUX01PREUKPiAoU1VCUkVHX1JF RyAoaW4pKSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgJiYgKGtub3duX2VxdWFsX2FmdGVyX2FsaWduX2Rvd24KPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAo R0VUX01PREVfU0laRSAoaW5tb2RlKSAtIDEsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRVRfTU9ERV9TSVpFIChH RVRfTU9ERQo+IChTVUJSRUdfUkVHCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChpbikpKSAtCj4gMSwKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFVO SVRTX1BFUl9XT1JEKSkpKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKGtub3duX2VxdWFsX2FmdGVyX2FsaWduX2Rvd24gKAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoEdFVF9NT0RFX1NJWkUgKGlubW9kZSkgLSAxLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEdFVF9NT0RFX1NJWkUg KEdFVF9NT0RFIChTVUJSRUdfUkVHCj4gKGluKSkpIC0gMSwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBVTklUU19QRVJfV09S RCkpKSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCAoUkVHX1AgKFNV QlJFR19SRUcgKGluKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJiYgUkVHTk8gKFNVQlJFR19SRUcgKGluKSkgPAo+IEZJUlNUX1BTRVVET19SRUdJU1RFUgo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBUaGUgY2FzZSB3 aGVyZSBvdXQgaXMgbm9uemVybwo+IEBAIC0xMTA2LDkgKzExMDMsOSBAQCBwdXNoX3JlbG9hZCAo cnR4IGluLCBydHggb3V0LCBydHggKmlubG9jLCBydHgKPiAqb3V0bG9jLAo+IMKgwqDCoMKgwqDC oMKgwqDCoCB8fCAoUkVHX1AgKFNVQlJFR19SRUcgKGluKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAmJiBSRUdOTyAoU1VCUkVHX1JFRyAoaW4pKSA+PSBGSVJTVF9QU0VVRE9fUkVHSVNU RVIKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiByZWdfZXF1aXZfbWVtIChSRUdOTyAo U1VCUkVHX1JFRyAoaW4pKSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChtb2RlX2Rl cGVuZGVudF9hZGRyZXNzX3AKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKFhF WFAgKHJlZ19lcXVpdl9tZW0gKFJFR05PIChTVUJSRUdfUkVHIChpbikpKSwgMCksCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTUVNX0FERFJfU1BBQ0UgKHJlZ19lcXVpdl9t ZW0gKFJFR05PIChTVUJSRUdfUkVHCj4gKGluKSkpKSkpKSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAmJiAobW9kZV9kZXBlbmRlbnRfYWRkcmVzc19wICgKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgWEVYUCAocmVnX2VxdWl2X21lbSAoUkVHTk8gKFNVQlJFR19SRUcgKGlu KSkpLCAwKSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTUVNX0FERFJfU1BBQ0Ug KHJlZ19lcXVpdl9tZW0gKFJFR05PIChTVUJSRUdfUkVHCj4gKGluKSkpKSkpKSkpCj4gwqDCoMKg wqAgewo+IMKgI2lmZGVmIExJTUlUX1JFTE9BRF9DTEFTUwo+IMKgwqDCoMKgwqDCoCBpbl9zdWJy ZWdfbG9jID0gaW5sb2M7Cj4gQEAgLTExNDYsMTEgKzExNDMsOSBAQCBwdXNoX3JlbG9hZCAocnR4 IGluLCBydHggb3V0LCBydHggKmlubG9jLCBydHgKPiAqb3V0bG9jLAo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU1VCUkVHX0JZVEUgKGluKSwKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFVF9NT0RFIChpbikpLAo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg UkVHTk8gKFNVQlJFR19SRUcgKGluKSkpOwo+IC3CoMKgwqDCoMKgIGVsc2UgaWYgKENPTlNUQU5U X1AgKFNVQlJFR19SRUcgKGluKSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCBH RVRfQ09ERSAoU1VCUkVHX1JFRyAoaW4pKSA9PSBQTFVTKQo+IC3CoMKgwqDCoMKgwqDCoHN1YnJl Z19pbl9jbGFzcyA9IGZpbmRfdmFsaWRfY2xhc3NfMSAoaW5tb2RlLAo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIEdFVF9NT0RFIChTVUJSRUdfUkVHCj4gKGluKSksCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmNsYXNzKTsKPiArwqDCoMKgwqDCoCBlbHNlIGlm IChDT05TVEFOVF9QIChTVUJSRUdfUkVHIChpbikpIHx8IFBMVVNfUCAoU1VCUkVHX1JFRwo+IChp bikpKQo+ICvCoMKgwqDCoMKgwqDCoHN1YnJlZ19pbl9jbGFzcwo+ICvCoMKgwqDCoMKgwqDCoMKg ID0gZmluZF92YWxpZF9jbGFzc18xIChpbm1vZGUsIEdFVF9NT0RFIChTVUJSRUdfUkVHIChpbikp LAo+IHJjbGFzcyk7Cj4gwqAKPiDCoMKgwqDCoMKgwqAgLyogVGhpcyByZWxpZXMgb24gdGhlIGZh Y3QgdGhhdCBlbWl0X3JlbG9hZF9pbnNucyBvdXRwdXRzIHRoZQo+IMKgwqDCoMKgwqDCoMKgwqAg aW5zdHJ1Y3Rpb25zIGZvciBpbnB1dCByZWxvYWRzIG9mIHR5cGUgUkVMT0FEX09USEVSIGluIHRo ZQo+IHNhbWUKPiBAQCAtMTI0NCw3ICsxMjM5LDcgQEAgcHVzaF9yZWxvYWQgKHJ0eCBpbiwgcnR4 IG91dCwgcnR4ICppbmxvYywgcnR4Cj4gKm91dGxvYywKPiDCoAo+IMKgwqAgLyogSWYgSU4gYXBw ZWFycyBpbiBPVVQsIHdlIGNhbid0IHNoYXJlIGFueSBpbnB1dC1vbmx5IHJlbG9hZCBmb3IKPiBJ Ti7CoCAqLwo+IMKgwqAgaWYgKGluICE9IDAgJiYgb3V0ICE9IDAgJiYgTUVNX1AgKG91dCkKPiAt wqDCoMKgwqDCoCAmJiAoUkVHX1AgKGluKSB8fCBNRU1fUCAoaW4pIHx8IEdFVF9DT0RFIChpbikg PT0gUExVUykKPiArwqDCoMKgwqDCoCAmJiAoUkVHX1AgKGluKSB8fCBNRU1fUCAoaW4pIHx8IFBM VVNfUCAoaW4pKQo+IMKgwqDCoMKgwqDCoCAmJiByZWdfb3ZlcmxhcF9tZW50aW9uZWRfZm9yX3Jl bG9hZF9wIChpbiwgWEVYUCAob3V0LCAwKSkpCj4gwqDCoMKgwqAgZG9udF9zaGFyZSA9IDE7Cj4g wqAKPiBAQCAtMjM5OSw3ICsyMzk0LDcgQEAgZGVjb21wb3NlIChydHggeCkKPiDCoAo+IMKgwqDC oMKgwqDCoMKgwqBpZiAoR0VUX0NPREUgKGFkZHIpID09IFBSRV9NT0RJRlkgfHwgR0VUX0NPREUg KGFkZHIpID09Cj4gUE9TVF9NT0RJRlkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgIHsKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFIChYRVhQIChhZGRyLCAxKSkgPT0gUExVUwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoUExVU19QIChYRVhQIChhZGRyLCAxKSkKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCYmIFhFWFAgKGFkZHIsIDApID09IFhFWFAgKFhFWFAg KGFkZHIsIDEpLCAwKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgJiYgQ09OU1RB TlRfUCAoWEVYUCAoWEVYUCAoYWRkciwgMSksIDEpKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB7Cj4gQEAgLTI0MTYsNyArMjQxMSw3IEBAIGRlY29tcG9zZSAocnR4IHgpCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBhZGRyID0gWEVYUCAoYWRkciwgMCk7Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBhbGxfY29uc3QgPSAxOwo+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gLcKgwqDCoMKg wqDCoMKgaWYgKEdFVF9DT0RFIChhZGRyKSA9PSBQTFVTKQo+ICvCoMKgwqDCoMKgwqDCoGlmIChQ TFVTX1AgKGFkZHIpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoCB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAoQ09OU1RBTlRfUCAoWEVYUCAoYWRkciwgMCkpKQo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHsKPiBAQCAtMjQzNyw3ICsyNDMyLDcgQEAgZGVjb21wb3NlIChydHggeCkKPiDC oMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoR0VUX0NPREUgKG9mZnNl dCkgPT0gQ09OU1QpCj4gwqDCoMKgwqDCoMKgwqDCoMKgIG9mZnNldCA9IFhFWFAgKG9mZnNldCwg MCk7Cj4gLcKgwqDCoMKgwqDCoMKgaWYgKEdFVF9DT0RFIChvZmZzZXQpID09IFBMVVMpCj4gK8Kg wqDCoMKgwqDCoMKgaWYgKFBMVVNfUCAob2Zmc2V0KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqAgewo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKENPTlNUX0lOVF9QIChYRVhQIChvZmZzZXQsIDAp KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB7Cj4gQEAgLTI0NjEsNyArMjQ1Niw3IEBA IGRlY29tcG9zZSAocnR4IHgpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvZmZzZXQgPSBjb25z dDBfcnR4Owo+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBpZiAo YWxsX2NvbnN0ICYmIEdFVF9DT0RFIChiYXNlKSA9PSBQTFVTKQo+ICvCoMKgwqDCoMKgwqDCoGlm IChhbGxfY29uc3QgJiYgUExVU19QIChiYXNlKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqAgYmFzZSA9 IGdlbl9ydHhfQ09OU1QgKEdFVF9NT0RFIChiYXNlKSwgYmFzZSk7Cj4gwqAKPiDCoMKgwqDCoMKg wqDCoMKgZ2NjX2Fzc2VydCAoQ09OU1RfSU5UX1AgKG9mZnNldCkpOwo+IEBAIC0yODQ5LDkgKzI4 NDQsOSBAQCBmaW5kX3JlbG9hZHMgKHJ0eF9pbnNuICppbnNuLCBpbnQgcmVwbGFjZSwgaW50Cj4g aW5kX2xldmVscywgaW50IGxpdmVfa25vd24sCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFBM VVMgb3IgTVVMVCBvciBBU0hJRlQsIHJlLXJlY29nbml6ZSBhbmQgdHJ5IGFnYWluLsKgICovCj4g wqDCoMKgwqDCoMKgwqDCoMKgIGlmICgoT0JKRUNUX1AgKCpyZWNvZ19kYXRhLm9wZXJhbmRfbG9j W2ldKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgR0VUX0NPREUgKCpyZWNvZ19k YXRhLm9wZXJhbmRfbG9jW2ldKSA9PSBTVUJSRUcpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAmJiAoR0VUX0NPREUgKHJlY29nX2RhdGEub3BlcmFuZFtpXSkgPT0gTVVMVAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgJiYgKE1VTFRfUCAocmVjb2dfZGF0YS5vcGVyYW5kW2ldKQo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgR0VUX0NPREUgKHJlY29nX2RhdGEu b3BlcmFuZFtpXSkgPT0gQVNISUZUCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHx8IEdFVF9DT0RFIChyZWNvZ19kYXRhLm9wZXJhbmRbaV0pID09IFBMVVMpKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCBQTFVTX1AgKHJlY29nX2RhdGEub3BlcmFuZFtp XSkpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIElOU05fQ09ERSAoaW5zbikgPSAtMTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR2YWwgPSBmaW5kX3JlbG9hZHMgKGluc24sIHJlcGxhY2UsIGluZF9sZXZlbHMsCj4gbGl2ZV9r bm93biwKPiBAQCAtMzExMCw3ICszMTA1LDcgQEAgZmluZF9yZWxvYWRzIChydHhfaW5zbiAqaW5z biwgaW50IHJlcGxhY2UsIGludAo+IGluZF9sZXZlbHMsIGludCBsaXZlX2tub3duLAo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmUgYSBwcm9ibGVtIGFjY2Vzc2lu ZyBPUEVSQU5EIGluIHRoZSBvdXRlcgo+IG1vZGUuwqAgKi8KPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNjYWxhcl9pbnRfbW9kZSBpbm5lcl9tb2RlOwo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKENPTlNUQU5UX1AgKG9wZXJhbmQpCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgR0VUX0NPREUgKG9wZXJhbmQp ID09IFBMVVMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCBQ TFVTX1AgKG9wZXJhbmQpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIC8qIFdlIG11c3QgZm9yY2UgYSByZWxvYWQgb2YgcGFyYWRveGljYWwKPiBTVUJSRUdzCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9mIGEgTUVN IGJlY2F1c2UgdGhlIGFsaWdubWVudCBvZiB0aGUgaW5uZXIKPiB2YWx1ZQo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtYXkgbm90IGJlIGVub3VnaCB0 byBkbyB0aGUgb3V0ZXIKPiByZWZlcmVuY2UuwqAgT24KPiBAQCAtMzExOCwxNCArMzExMywxNCBA QCBmaW5kX3JlbG9hZHMgKHJ0eF9pbnNuICppbnNuLCBpbnQgcmVwbGFjZSwKPiBpbnQgaW5kX2xl dmVscywgaW50IGxpdmVfa25vd24sCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHRoZSBvYmplY3QuCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgT24gbWFjaGluZXMgdGhhdCBleHRlbmQgYnl0ZSBv cGVyYXRpb25zIGFuZAo+IHdlIGhhdmUgYQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIFNVQlJFRyB3aGVyZSBib3RoIHRoZSBpbm5lciBhbmQgb3V0ZXIg bW9kZXMKPiBhcmUgbm8gd2lkZXIKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB0aGFuIGEgd29yZCBhbmQgdGhlIGlubmVyIG1vZGUgaXMgbmFycm93ZXIs Cj4gaXMgaW50ZWdyYWwsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYW5kIGdldHMgZXh0ZW5kZWQgd2hlbiBsb2FkZWQgZnJvbSBtZW1vcnksCj4gY29t YmluZS5jYyBoYXMKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBtYWRlIGFzc3VtcHRpb25zIGFib3V0IHRoZSBiZWhhdmlvciBvZiB0aGUKPiBtYWNoaW5l IGluIHN1Y2gKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZWdpc3RlciBhY2Nlc3MuwqAgSWYgdGhlIGRhdGEgaXMsIGluIGZhY3QsCj4gaW4gbWVtb3J5 IHdlCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbXVz dCBhbHdheXMgbG9hZCB1c2luZyB0aGUgc2l6ZSBhc3N1bWVkIHRvCj4gYmUgaW4gdGhlCj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVnaXN0ZXIgYW5k IGxldCB0aGUgaW5zbiBkbyB0aGUgZGlmZmVyZW50LQo+IHNpemVkCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWNjZXNzZXMuCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU1VCUkVHIHdoZXJlIGJvdGggdGhl IGlubmVyIGFuZCBvdXRlciBtb2Rlcwo+IGFyZSBubwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdpZGVyIHRoYW4gYSB3b3JkIGFuZCB0aGUgaW5uZXIg bW9kZSBpcwo+IG5hcnJvd2VyLCBpcwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGludGVncmFsLCBhbmQgZ2V0cyBleHRlbmRlZCB3aGVuIGxvYWRlZCBm cm9tCj4gbWVtb3J5LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGNvbWJpbmUuY2MgaGFzIG1hZGUgYXNzdW1wdGlvbnMgYWJvdXQgdGhlCj4gYmVoYXZp b3Igb2YKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0 aGUgbWFjaGluZSBpbiBzdWNoIHJlZ2lzdGVyIGFjY2Vzcy7CoCBJZiB0aGUKPiBkYXRhIGlzLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGluIGZhY3Qs IGluIG1lbW9yeSB3ZSBtdXN0IGFsd2F5cyBsb2FkIHVzaW5nCj4gdGhlIHNpemUKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3N1bWVkIHRvIGJlIGlu IHRoZSByZWdpc3RlciBhbmQgbGV0IHRoZQo+IGluc24gZG8gdGhlCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGlmZmVyZW50LXNpemVkIGFjY2Vzc2Vz Lgo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFRoaXMgaXMgZG91Ymx5IHRydWUgaWYKPiBXT1JEX1JFR0lTVEVSX09QRVJBVElPTlMuwqAgSW4K PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGhpcyBj YXNlIGVsaW1pbmF0ZV9yZWdzIGhhcyBsZWZ0IG5vbi0KPiBwYXJhZG94aWNhbAo+IEBAIC0zMTM5 LDE2ICszMTM0LDE2IEBAIGZpbmRfcmVsb2FkcyAocnR4X2luc24gKmluc24sIGludCByZXBsYWNl LAo+IGludCBpbmRfbGV2ZWxzLCBpbnQgbGl2ZV9rbm93biwKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IChSRUdfUCAob3BlcmFuZCkKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJiYgUkVHTk8gKG9wZXJhbmQpID49Cj4gRklSU1RfUFNFVURPX1JFR0lTVEVSKSkKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAoV09SRF9S RUdJU1RFUl9PUEVSQVRJT05TCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8ICgoKG1heWJlX2x0Cj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChHRVRf TU9ERV9CSVRTSVpFIChHRVRfTU9ERQo+IChvcGVyYW5kKSksCj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklH R0VTVF9BTElHTk1FTlQpKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKHBhcmFkb3hpY2FsX3N1YnJlZ19wCj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIChvcGVyYW5kX21vZGVbaV0sIEdFVF9NT0RFCj4gKG9wZXJhbmQp KSkpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB8fCAoKChtYXliZV9sdCAoR0VUX01PREVfQklUU0laRSAoCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBHRVRfTU9ERSAob3BlcmFuZCkpLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJR0dFU1RfQUxJR05NRU5UKSkKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICYmIChwYXJhZG94aWNhbF9zdWJyZWdfcCAoCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3BlcmFuZF9tb2Rl W2ldLCBHRVRfTU9ERQo+IChvcGVyYW5kKSkpKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IEJZVEVTX0JJR19FTkRJQU4KPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHx8IChrbm93bl9sZSAoR0VUX01PREVfU0laRQo+IChvcGVyYW5kX21vZGVbaV0pLAo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFVOSVRTX1BFUl9XT1JEKQo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChp c19hIDxzY2FsYXJfaW50X21vZGU+Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoR0VUX01PREUgKG9wZXJh bmQpLAo+ICZpbm5lcl9tb2RlKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAoaXNfYTxzY2FsYXJfaW50X21vZGU+ IChHRVRfTU9ERQo+IChvcGVyYW5kKSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ICZpbm5lcl9tb2RlKSkKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJiYgKEdFVF9NT0RFX1NJWkUgKGlubmVyX21vZGUpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPD0g VU5JVFNfUEVSX1dPUkQpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIHBhcmFkb3hpY2FsX3N1YnJlZ19wCj4gKG9w ZXJhbmRfbW9kZVtpXSwKPiBAQCAtMzE2MywxMSArMzE1OCwxMCBAQCBmaW5kX3JlbG9hZHMgKHJ0 eF9pbnNuICppbnNuLCBpbnQgcmVwbGFjZSwKPiBpbnQgaW5kX2xldmVscywgaW50IGxpdmVfa25v d24sCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IChSRUdf UCAob3BlcmFuZCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAmJiBSRUdOTyAob3BlcmFuZCkgPj0gRklSU1RfUFNFVURPX1JFR0lTVEVSCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgcmVnX2Vx dWl2X21lbSAoUkVHTk8gKG9wZXJhbmQpKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKG1vZGVfZGVwZW5kZW50X2FkZHJlc3NfcAo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoWEVY UCAocmVnX2VxdWl2X21lbSAoUkVHTk8gKG9wZXJhbmQpKSwKPiAwKSwKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoTUVNX0FERFJf U1BBQ0UKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAocmVnX2VxdWl2X21lbSAoUkVHTk8gKG9wZXJhbmQpKSkpKSkpCj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKG1vZGVfZGVwZW5kZW50X2Fk ZHJlc3NfcCAoCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgWEVYUCAocmVnX2VxdWl2X21lbSAoUkVHTk8gKG9wZXJhbmQpKSwKPiAwKSwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoTUVN X0FERFJfU1BBQ0UgKAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZWdfZXF1aXZfbWVtIChSRUdOTyAob3BlcmFuZCkpKSkpKSkpCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yY2VfcmVsb2FkID0gMTsK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IEBAIC0zOTQ0LDcgKzM5 MzgsNyBAQCBmaW5kX3JlbG9hZHMgKHJ0eF9pbnNuICppbnNuLCBpbnQgcmVwbGFjZSwgaW50Cj4g aW5kX2xldmVscywgaW50IGxpdmVfa25vd24sCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtb2Rl ID0gR0VUX01PREUgKG9wKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKgCj4gLcKgwqDCoMKg wqDCoMKgaWYgKEdFVF9DT0RFIChvcCkgPT0gUExVUykKPiArwqDCoMKgwqDCoMKgwqBpZiAoUExV U19QIChvcCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHBsdXMgPSBvcDsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wID0gWEVYUCAob3AsIDEpOwo+ IEBAIC00OTI3LDcgKzQ5MjEsNyBAQCBmaW5kX3JlbG9hZHNfYWRkcmVzcyAobWFjaGluZV9tb2Rl IG1vZGUsIHJ0eAo+ICptZW1yZWZsb2MsIHJ0eCBhZCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAoaW5kX2xldmVscyA+IDAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICYmIHN0cmljdF9tZW1vcnlfYWRkcmVzc19hZGRyX3NwYWNlX3AgKG1vZGUsIHRlbSwKPiBh cykKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChSRUdfUCAoWEVYUCAo dGVtLCAwKSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCAo R0VUX0NPREUgKFhFWFAgKHRlbSwgMCkpID09IFBMVVMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB8fCAoUExVU19QIChYRVhQICh0ZW0sIDApKQo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIFJFR19QIChYRVhQ IChYRVhQICh0ZW0sIDApLCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVEFOVF9QIChYRVhQIChYRVhQICh0ZW0sIDApLCAxKSkp KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHsKPiBAQCAtNDk4MCw5ICs0OTc0 LDcgQEAgZmluZF9yZWxvYWRzX2FkZHJlc3MgKG1hY2hpbmVfbW9kZSBtb2RlLCBydHgKPiAqbWVt cmVmbG9jLCBydHggYWQsCj4gwqDCoMKgwqDCoMKgwqDCoCBTbyBkbyBhIHRyZWUtd2FsayB0byBm aW5kIGFuZCBlbGltaW5hdGUgYWxsIHN1Y2ggcmVncy7CoCAqLwo+IMKgCj4gwqDCoMKgwqDCoMKg IC8qIEJ1dCBmaXJzdCBxdWlja2x5IGRpc3Bvc2Ugb2YgYSBjb21tb24gY2FzZS7CoCAqLwo+IC3C oMKgwqDCoMKgIGlmIChHRVRfQ09ERSAoYWQpID09IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDCoCAm JiBDT05TVF9JTlRfUCAoWEVYUCAoYWQsIDEpKQo+IC3CoMKgwqDCoMKgwqDCoMKgICYmIFJFR19Q IChYRVhQIChhZCwgMCkpCj4gK8KgwqDCoMKgwqAgaWYgKFBMVVNfUCAoYWQpICYmIENPTlNUX0lO VF9QIChYRVhQIChhZCwgMSkpICYmIFJFR19QIChYRVhQCj4gKGFkLCAwKSkKPiDCoMKgwqDCoMKg wqDCoMKgwqAgJiYgcmVnX2VxdWl2X2NvbnN0YW50IChSRUdOTyAoWEVYUCAoYWQsIDApKSkgPT0g MCkKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gwqAKPiBAQCAtNTA1NiwxMiArNTA0OCwx MSBAQCBmaW5kX3JlbG9hZHNfYWRkcmVzcyAobWFjaGluZV9tb2RlIG1vZGUsIHJ0eAo+ICptZW1y ZWZsb2MsIHJ0eCBhZCwKPiDCoMKgwqDCoMKgwqDCoMKgIHRha2VuIGNhcmUgb2YgYWJvdmUuwqAg Ki8KPiDCoAo+IMKgwqDCoMKgwqDCoCBpZiAoaW5kX2xldmVscyA9PSAwCj4gLcKgwqDCoMKgwqDC oMKgwqAgfHwgKEdFVF9DT0RFIChYRVhQICh0ZW0sIDApKSA9PSBTWU1CT0xfUkVGICYmICEKPiBp bmRpcmVjdF9zeW1yZWZfb2spCj4gK8KgwqDCoMKgwqDCoMKgwqAgfHwgKEdFVF9DT0RFIChYRVhQ ICh0ZW0sIDApKSA9PSBTWU1CT0xfUkVGICYmCj4gIWluZGlyZWN0X3N5bXJlZl9vaykKPiDCoMKg wqDCoMKgwqDCoMKgwqAgfHwgTUVNX1AgKFhFWFAgKHRlbSwgMCkpCj4gLcKgwqDCoMKgwqDCoMKg wqAgfHwgISAoUkVHX1AgKFhFWFAgKHRlbSwgMCkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHx8IChHRVRfQ09ERSAoWEVYUCAodGVtLCAwKSkgPT0gUExVUwo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgUkVHX1AgKFhFWFAgKFhFWFAgKHRlbSwgMCks IDApKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgQ09OU1RfSU5U X1AgKFhFWFAgKFhFWFAgKHRlbSwgMCksIDEpKSkpKQo+ICvCoMKgwqDCoMKgwqDCoMKgIHx8ICEo UkVHX1AgKFhFWFAgKHRlbSwgMCkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IChQ TFVTX1AgKFhFWFAgKHRlbSwgMCkpICYmIFJFR19QIChYRVhQIChYRVhQICh0ZW0sCj4gMCksIDAp KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIENPTlNUX0lOVF9QIChY RVhQIChYRVhQICh0ZW0sIDApLCAxKSkpKSkKPiDCoMKgwqDCoMKgwqDCoMKgewo+IMKgwqDCoMKg wqDCoMKgwqDCoCAvKiBNdXN0IHVzZSBURU0gaGVyZSwgbm90IEFELCBzaW5jZSBpdCBpcyB0aGUg b25lIHRoYXQgd2lsbAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoYXZlIGFueSBzdWJleHBy ZXNzaW9ucyByZWxvYWRlZCwgaWYgbmVlZGVkLsKgICovCj4gQEAgLTUwODAsOCArNTA3MSw3IEBA IGZpbmRfcmVsb2Fkc19hZGRyZXNzIChtYWNoaW5lX21vZGUgbW9kZSwgcnR4Cj4gKm1lbXJlZmxv YywgcnR4IGFkLAo+IMKgwqDCoMKgwqAgSGFuZGxlIGFsbCBiYXNlIHJlZ2lzdGVycyBoZXJlLCBu b3QganVzdCBmcC9hcC9zcCwgYmVjYXVzZSBvbgo+IHNvbWUKPiDCoMKgwqDCoMKgIHRhcmdldHMg KG5hbWVseSBTSCkgd2UgY2FuIGFsc28gZ2V0IHRvbyBsYXJnZSBkaXNwbGFjZW1lbnRzCj4gZnJv bQo+IMKgwqDCoMKgwqAgYmlnLWVuZGlhbiBjb3JyZWN0aW9ucy7CoCAqLwo+IC3CoCBlbHNlIGlm IChHRVRfQ09ERSAoYWQpID09IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDCoMKgICYmIFJFR19QIChY RVhQIChhZCwgMCkpCj4gK8KgIGVsc2UgaWYgKFBMVVNfUCAoYWQpICYmIFJFR19QIChYRVhQIChh ZCwgMCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgUkVHTk8gKFhFWFAgKGFkLCAwKSkgPCBG SVJTVF9QU0VVRE9fUkVHSVNURVIKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVF9JTlRf UCAoWEVYUCAoYWQsIDEpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChyZWdub19va19mb3Jf YmFzZV9wIChSRUdOTyAoWEVYUCAoYWQsIDApKSwgbW9kZSwgYXMsCj4gUExVUywKPiBAQCAtNTA4 OSw4ICs1MDc5LDggQEAgZmluZF9yZWxvYWRzX2FkZHJlc3MgKG1hY2hpbmVfbW9kZSBtb2RlLCBy dHgKPiAqbWVtcmVmbG9jLCBydHggYWQsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAv KiBTaW1pbGFybHksIGlmIHdlIHdlcmUgdG8gcmVsb2FkIHRoZSBiYXNlIHJlZ2lzdGVyCj4gYW5k IHRoZQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtK29mZnNldCBhZGRy ZXNzIGlzIHN0aWxsIGludmFsaWQsIHRoZW4gd2Ugd2FudAo+IHRvIHJlbG9hZAo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGhlIHdob2xlIGFkZHJlc3MsIG5vdCBqdXN0IHRo ZSBiYXNlIHJlZ2lzdGVyLsKgICovCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8ICEg bWF5YmVfbWVtb3J5X2FkZHJlc3NfYWRkcl9zcGFjZV9wCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIChtb2RlLCBhZCwgYXMsICYoWEVYUCAoYWQsIDApKSkpKQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCAhbWF5YmVfbWVtb3J5X2FkZHJlc3NfYWRkcl9z cGFjZV9wIChtb2RlLCBhZCwgYXMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICYoWEVYUCAoYWQsCj4gMCkpKSkpCj4gwqAKPiDCoMKgwqDCoCB7Cj4g wqDCoMKgwqDCoMKgIC8qIFVuc2hhcmUgdGhlIE1FTSBydHggc28gd2UgY2FuIHNhZmVseSBhbHRl ciBpdC7CoCAqLwo+IEBAIC01MTYwLDExICs1MTUwLDEwIEBAIGZpbmRfcmVsb2Fkc19hZGRyZXNz IChtYWNoaW5lX21vZGUgbW9kZSwgcnR4Cj4gKm1lbXJlZmxvYywgcnR4IGFkLAo+IMKgwqDCoMKg wqDCoCBlbnVtIHJ0eF9jb2RlIGlubmVyX2NvZGU7Cj4gwqAKPiDCoMKgwqDCoMKgwqAgaWYgKEdF VF9DT0RFIChhZCkgIT0gUExVUykKPiAtwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPiArwqDC oMKgwqDCoMKgwqBjb250aW51ZTsKPiDCoAo+IMKgwqDCoMKgwqDCoCBpbm5lcl9jb2RlID0gR0VU X0NPREUgKFhFWFAgKGFkLCAwKSk7Cj4gLcKgwqDCoMKgwqAgaWYgKCEoR0VUX0NPREUgKGFkKSA9 PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIENPTlNUX0lOVF9QIChYRVhQIChhZCwg MSkpCj4gK8KgwqDCoMKgwqAgaWYgKCEoUExVU19QIChhZCkgJiYgQ09OU1RfSU5UX1AgKFhFWFAg KGFkLCAxKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChpbm5lcl9jb2RlID09IFBMVVMg fHwgaW5uZXJfY29kZSA9PSBMT19TVU0pKSkKPiDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4g wqAKPiBAQCAtNTE4OCwxMSArNTE3NywxMSBAQCBmaW5kX3JlbG9hZHNfYWRkcmVzcyAobWFjaGlu ZV9tb2RlIG1vZGUsIHJ0eAo+ICptZW1yZWZsb2MsIHJ0eCBhZCwKPiDCoMKgwqDCoMKgwqDCoMKg wqAgcnR4IG9mZnNldF9yZWc7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gcmVnX2NsYXNzIGNs czsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgIG9mZnNldF9yZWcgPSBwbHVzX2NvbnN0YW50IChH RVRfTU9ERSAoYWQpLCBvcGVyYW5kLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSU5UVkFMIChYRVhQIChh ZCwgMSkpKTsKPiArwqDCoMKgwqDCoMKgwqDCoCBvZmZzZXRfcmVnCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgID0gcGx1c19jb25zdGFudCAoR0VUX01PREUgKGFkKSwgb3BlcmFuZCwgSU5UVkFMIChY RVhQCj4gKGFkLCAxKSkpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgIC8qIEZvcm0gdGhlIGFk anVzdGVkIGFkZHJlc3MuwqAgKi8KPiAtwqDCoMKgwqDCoMKgwqDCoCBpZiAoR0VUX0NPREUgKFhF WFAgKGFkLCAwKSkgPT0gUExVUykKPiArwqDCoMKgwqDCoMKgwqDCoCBpZiAoUExVU19QIChYRVhQ IChhZCwgMCkpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWQgPSBnZW5fcnR4X1BMVVMgKEdF VF9NT0RFIChhZCksCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIG9wX2luZGV4ID09IDAgPyBvZmZzZXRfcmVnIDogYWRkZW5kLAo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBvcF9pbmRleCA9PSAwID8gYWRkZW5kIDogb2Zmc2V0X3JlZyk7Cj4gQEAgLTUyMjAsNyAr NTIwOSw3IEBAIGZpbmRfcmVsb2Fkc19hZGRyZXNzIChtYWNoaW5lX21vZGUgbW9kZSwgcnR4Cj4g Km1lbXJlZmxvYywgcnR4IGFkLAo+IMKgwqDCoMKgwqAgaW4gYSBzdW0gaXMgcmVwbGFjZWQuwqAg Ki8KPiDCoAo+IMKgwqAgdGVtID0gYWQ7Cj4gLcKgIGlmIChHRVRfQ09ERSAoYWQpID09IFBMVVMp Cj4gK8KgIGlmIChQTFVTX1AgKGFkKSkKPiDCoMKgwqDCoCB0ZW0gPSBzdWJzdF9pbmRleGVkX2Fk ZHJlc3MgKGFkKTsKPiDCoMKgIGlmICh0ZW0gIT0gYWQgJiYgc3RyaWN0X21lbW9yeV9hZGRyZXNz X2FkZHJfc3BhY2VfcCAobW9kZSwgdGVtLAo+IGFzKSkKPiDCoMKgwqDCoCB7Cj4gQEAgLTUzNTgs MTIgKzUzNDcsMTIgQEAgZm9ybV9zdW0gKG1hY2hpbmVfbW9kZSBtb2RlLCBydHggeCwgcnR4IHkp Cj4gwqDCoCBlbHNlIGlmIChDT05TVEFOVF9QICh4KSkKPiDCoMKgwqDCoCB0ZW0gPSB4LCB4ID0g eSwgeSA9IHRlbTsKPiDCoAo+IC3CoCBpZiAoR0VUX0NPREUgKHgpID09IFBMVVMgJiYgQ09OU1RB TlRfUCAoWEVYUCAoeCwgMSkpKQo+ICvCoCBpZiAoUExVU19QICh4KSAmJiBDT05TVEFOVF9QIChY RVhQICh4LCAxKSkpCj4gwqDCoMKgwqAgcmV0dXJuIGZvcm1fc3VtIChtb2RlLCBYRVhQICh4LCAw KSwgZm9ybV9zdW0gKG1vZGUsIFhFWFAgKHgsIDEpLAo+IHkpKTsKPiDCoAo+IMKgwqAgLyogTm90 ZSB0aGF0IGlmIHRoZSBvcGVyYW5kcyBvZiBZIGFyZSBzcGVjaWZpZWQgaW4gdGhlIG9wcG9zaXRl Cj4gwqDCoMKgwqDCoCBvcmRlciBpbiB0aGUgcmVjdXJzaXZlIGNhbGxzIGJlbG93LCBpbmZpbml0 ZSByZWN1cnNpb24gd2lsbAo+IG9jY3VyLsKgICovCj4gLcKgIGlmIChHRVRfQ09ERSAoeSkgPT0g UExVUyAmJiBDT05TVEFOVF9QIChYRVhQICh5LCAxKSkpCj4gK8KgIGlmIChQTFVTX1AgKHkpICYm IENPTlNUQU5UX1AgKFhFWFAgKHksIDEpKSkKPiDCoMKgwqDCoCByZXR1cm4gZm9ybV9zdW0gKG1v ZGUsIGZvcm1fc3VtIChtb2RlLCB4LCBYRVhQICh5LCAwKSksIFhFWFAgKHksCj4gMSkpOwo+IMKg Cj4gwqDCoCAvKiBJZiBib3RoIGNvbnN0YW50LCBlbmNhcHN1bGF0ZSBzdW0uwqAgT3RoZXJ3aXNl LCBqdXN0IGZvcm0gc3VtLsKgCj4gQQo+IEBAIC01NDAwLDcgKzUzODksNyBAQCBzdWJzdF9pbmRl eGVkX2FkZHJlc3MgKHJ0eCBhZGRyKQo+IMKgwqAgcnR4IHRlbTsKPiDCoMKgIGludCByZWdubzsK PiDCoAo+IC3CoCBpZiAoR0VUX0NPREUgKGFkZHIpID09IFBMVVMpCj4gK8KgIGlmIChQTFVTX1Ag KGFkZHIpKQo+IMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqAgLyogVHJ5IHRvIGZpbmQgYSByZWdp c3RlciB0byByZXBsYWNlLsKgICovCj4gwqDCoMKgwqDCoMKgIG9wMCA9IFhFWFAgKGFkZHIsIDAp LCBvcDEgPSBYRVhQIChhZGRyLCAxKSwgb3AyID0gMDsKPiBAQCAtNTQwOSwyNCArNTM5OCwyMCBA QCBzdWJzdF9pbmRleGVkX2FkZHJlc3MgKHJ0eCBhZGRyKQo+IMKgwqDCoMKgwqDCoMKgwqDCoCAm JiByZWdfcmVudW1iZXJbcmVnbm9dIDwgMAo+IMKgwqDCoMKgwqDCoMKgwqDCoCAmJiByZWdfZXF1 aXZfY29uc3RhbnQgKHJlZ25vKSAhPSAwKQo+IMKgwqDCoMKgwqDCoMKgwqBvcDAgPSByZWdfZXF1 aXZfY29uc3RhbnQgKHJlZ25vKTsKPiAtwqDCoMKgwqDCoCBlbHNlIGlmIChSRUdfUCAob3AxKQo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAocmVnbm8gPSBSRUdOTyAob3AxKSkgPj0g RklSU1RfUFNFVURPX1JFR0lTVEVSCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIHJl Z19yZW51bWJlcltyZWdub10gPCAwCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIHJl Z19lcXVpdl9jb25zdGFudCAocmVnbm8pICE9IDApCj4gK8KgwqDCoMKgwqAgZWxzZSBpZiAoUkVH X1AgKG9wMSkgJiYgKHJlZ25vID0gUkVHTk8gKG9wMSkpID49Cj4gRklSU1RfUFNFVURPX1JFR0lT VEVSCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIHJlZ19yZW51bWJlcltyZWdub10g PCAwICYmIHJlZ19lcXVpdl9jb25zdGFudAo+IChyZWdubykgIT0gMCkKPiDCoMKgwqDCoMKgwqDC oMKgb3AxID0gcmVnX2VxdWl2X2NvbnN0YW50IChyZWdubyk7Cj4gLcKgwqDCoMKgwqAgZWxzZSBp ZiAoR0VUX0NPREUgKG9wMCkgPT0gUExVUwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAm JiAodGVtID0gc3Vic3RfaW5kZXhlZF9hZGRyZXNzIChvcDApKSAhPSBvcDApCj4gK8KgwqDCoMKg wqAgZWxzZSBpZiAoUExVU19QIChvcDApICYmICh0ZW0gPSBzdWJzdF9pbmRleGVkX2FkZHJlc3Mg KG9wMCkpCj4gIT0gb3AwKQo+IMKgwqDCoMKgwqDCoMKgwqBvcDAgPSB0ZW07Cj4gLcKgwqDCoMKg wqAgZWxzZSBpZiAoR0VUX0NPREUgKG9wMSkgPT0gUExVUwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAmJiAodGVtID0gc3Vic3RfaW5kZXhlZF9hZGRyZXNzIChvcDEpKSAhPSBvcDEpCj4g K8KgwqDCoMKgwqAgZWxzZSBpZiAoUExVU19QIChvcDEpICYmICh0ZW0gPSBzdWJzdF9pbmRleGVk X2FkZHJlc3MgKG9wMSkpCj4gIT0gb3AxKQo+IMKgwqDCoMKgwqDCoMKgwqBvcDEgPSB0ZW07Cj4g wqDCoMKgwqDCoMKgIGVsc2UKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGFkZHI7Cj4gwqAKPiDC oMKgwqDCoMKgwqAgLyogUGljayBvdXQgdXAgdG8gdGhyZWUgdGhpbmdzIHRvIGFkZC7CoCAqLwo+ IC3CoMKgwqDCoMKgIGlmIChHRVRfQ09ERSAob3AxKSA9PSBQTFVTKQo+ICvCoMKgwqDCoMKgIGlm IChQTFVTX1AgKG9wMSkpCj4gwqDCoMKgwqDCoMKgwqDCoG9wMiA9IFhFWFAgKG9wMSwgMSksIG9w MSA9IFhFWFAgKG9wMSwgMCk7Cj4gLcKgwqDCoMKgwqAgZWxzZSBpZiAoR0VUX0NPREUgKG9wMCkg PT0gUExVUykKPiArwqDCoMKgwqDCoCBlbHNlIGlmIChQTFVTX1AgKG9wMCkpCj4gwqDCoMKgwqDC oMKgwqDCoG9wMiA9IG9wMSwgb3AxID0gWEVYUCAob3AwLCAxKSwgb3AwID0gWEVYUCAob3AwLCAw KTsKPiDCoAo+IMKgwqDCoMKgwqDCoCAvKiBDb21wdXRlIHRoZSBzdW0uwqAgKi8KPiBAQCAtNTY5 Myw3ICs1Njc4LDcgQEAgZmluZF9yZWxvYWRzX2FkZHJlc3NfMSAobWFjaGluZV9tb2RlIG1vZGUs Cj4gYWRkcl9zcGFjZV90IGFzLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnNlcnZhdGl2ZSBh bmQgY2xhc3MgaXQgYXMgUkVMT0FEX09USEVSLsKgICovCj4gwqDCoMKgwqDCoMKgwqDCoGlmICgo UkVHX1AgKFhFWFAgKG9wMSwgMSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmICFSRUdO T19PS19GT1JfSU5ERVhfUCAoUkVHTk8gKFhFWFAgKG9wMSwgMSkpKSkKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqAgfHwgR0VUX0NPREUgKFhFWFAgKG9wMSwgMSkpID09IFBMVVMpCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgIHx8IFBMVVNfUCAoWEVYUCAob3AxLCAxKSkpCj4gwqDCoMKgwqDCoMKgwqDC oMKgIGZpbmRfcmVsb2Fkc19hZGRyZXNzXzEgKG1vZGUsIGFzLCBYRVhQIChvcDEsIDEpLCAxLCBj b2RlLAo+IFNDUkFUQ0gsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZYRVhQIChvcDEsIDEpLCBvcG51bSwKPiBSRUxP QURfT1RIRVIsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGluZF9sZXZlbHMsIGluc24pOwo+IEBAIC02MDkyLDE1ICs2 MDc3LDE0IEBAIGZpbmRfcmVsb2Fkc19hZGRyZXNzX3BhcnQgKHJ0eCB4LCBydHggKmxvYywKPiBl bnVtIHJlZ19jbGFzcyByY2xhc3MsCj4gwqDCoMKgwqDCoMKgwqDCoMKgIHx8IHRhcmdldG0ucHJl ZmVycmVkX3JlbG9hZF9jbGFzcyAoeCwgcmNsYXNzKSA9PSBOT19SRUdTKSkKPiDCoMKgwqDCoCB7 Cj4gwqDCoMKgwqDCoMKgIHggPSBmb3JjZV9jb25zdF9tZW0gKG1vZGUsIHgpOwo+IC3CoMKgwqDC oMKgIGZpbmRfcmVsb2Fkc19hZGRyZXNzIChtb2RlLCAmeCwgWEVYUCAoeCwgMCksICZYRVhQICh4 LCAwKSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBvcG51bSwgdHlwZSwgaW5kX2xldmVscywgMCk7Cj4gK8KgwqDCoMKgwqAgZmluZF9yZWxv YWRzX2FkZHJlc3MgKG1vZGUsICZ4LCBYRVhQICh4LCAwKSwgJlhFWFAgKHgsIDApLAo+IG9wbnVt LCB0eXBlLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGluZF9sZXZlbHMsIDApOwo+IMKgwqDCoMKgIH0KPiDCoAo+IC3CoCBlbHNlIGlmIChH RVRfQ09ERSAoeCkgPT0gUExVUwo+IC3CoMKgwqDCoMKgwqDCoMKgwqAgJiYgQ09OU1RBTlRfUCAo WEVYUCAoeCwgMSkpCj4gK8KgIGVsc2UgaWYgKFBMVVNfUCAoeCkgJiYgQ09OU1RBTlRfUCAoWEVY UCAoeCwgMSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKCF0YXJnZXRtLmxlZ2l0aW1hdGVf Y29uc3RhbnRfcCAoR0VUX01PREUgKHgpLCBYRVhQICh4LAo+IDEpKQo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfHwgdGFyZ2V0bS5wcmVmZXJyZWRfcmVsb2FkX2NsYXNzIChYRVhQICh4 LCAxKSwKPiByY2xhc3MpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPT0g Tk9fUkVHUykpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9PSBOT19S RUdTKSkKPiDCoMKgwqDCoCB7Cj4gwqDCoMKgwqDCoMKgIHJ0eCB0ZW07Cj4gwqAKPiBAQCAtNjM5 NSw4ICs2Mzc5LDcgQEAgZmluZF9yZXBsYWNlbWVudCAocnR4ICpsb2MpCj4gwqAKPiDCoMKgIC8q IElmICpMT0MgaXMgYSBQTFVTLCBNSU5VUywgb3IgTVVMVCwgc2VlIGlmIGEgcmVwbGFjZW1lbnQg aXMKPiBzY2hlZHVsZWQgZm9yCj4gwqDCoMKgwqDCoCB3aGF0J3MgaW5zaWRlIGFuZCBtYWtlIGEg bmV3IHJ0bCBpZiBzby7CoCAqLwo+IC3CoCBpZiAoR0VUX0NPREUgKCpsb2MpID09IFBMVVMgfHwg R0VUX0NPREUgKCpsb2MpID09IE1JTlVTCj4gLcKgwqDCoMKgwqAgfHwgR0VUX0NPREUgKCpsb2Mp ID09IE1VTFQpCj4gK8KgIGlmIChQTFVTX1AgKCpsb2MpIHx8IE1JTlVTX1AgKCpsb2MpIHx8IE1V TFRfUCAoKmxvYykpCj4gwqDCoMKgwqAgewo+IMKgwqDCoMKgwqDCoCBydHggeCA9IGZpbmRfcmVw bGFjZW1lbnQgKCZYRVhQICgqbG9jLCAwKSk7Cj4gwqDCoMKgwqDCoMKgIHJ0eCB5ID0gZmluZF9y ZXBsYWNlbWVudCAoJlhFWFAgKCpsb2MsIDEpKTsKPiBAQCAtNjU5MCw3ICs2NTczLDcgQEAgcmVn X292ZXJsYXBfbWVudGlvbmVkX2Zvcl9yZWxvYWRfcCAocnR4IHgsIHJ0eAo+IGluKQo+IMKgwqDC oMKgIHJldHVybiByZWdfbWVudGlvbmVkX3AgKHgsIGluKTsKPiDCoMKgIGVsc2UKPiDCoMKgwqDC oCB7Cj4gLcKgwqDCoMKgwqAgZ2NjX2Fzc2VydCAoR0VUX0NPREUgKHgpID09IFBMVVMpOwo+ICvC oMKgwqDCoMKgIGdjY19hc3NlcnQgKFBMVVNfUCAoeCkpOwo+IMKgCj4gwqDCoMKgwqDCoMKgIC8q IFdlIGFjdHVhbGx5IHdhbnQgdG8ga25vdyBpZiBYIGlzIG1lbnRpb25lZCBzb21ld2hlcmUgaW5z aWRlCj4gSU4uCj4gwqDCoMKgwqDCoMKgwqDCoCBXZSBtdXN0IG5vdCBzYXkgdGhhdCAocGx1cyAo c3ApIChjb25zdF9pbnQgMTI0KSkgaXMgaW4KPiBAQCAtNjYwMSw3ICs2NTg0LDcgQEAgcmVnX292 ZXJsYXBfbWVudGlvbmVkX2Zvcl9yZWxvYWRfcCAocnR4IHgsIHJ0eAo+IGluKQo+IMKgwqDCoMKg wqDCoMKgwqBpbiA9IFhFWFAgKGluLCAwKTsKPiDCoMKgwqDCoMKgwqAgaWYgKFJFR19QIChpbikp Cj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+IC3CoMKgwqDCoMKgIGVsc2UgaWYgKEdFVF9D T0RFIChpbikgPT0gUExVUykKPiArwqDCoMKgwqDCoCBlbHNlIGlmIChQTFVTX1AgKGluKSkKPiDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIChydHhfZXF1YWxfcCAoeCwgaW4pCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB8fCByZWdfb3ZlcmxhcF9tZW50aW9uZWRfZm9yX3JlbG9hZF9w ICh4LCBYRVhQIChpbiwKPiAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHx8 IHJlZ19vdmVybGFwX21lbnRpb25lZF9mb3JfcmVsb2FkX3AgKHgsIFhFWFAgKGluLAo+IDEpKSk7 Cj4gQEAgLTY3MTAsMTIgKzY2OTMsMTAgQEAgZmluZF9lcXVpdl9yZWcgKHJ0eCBnb2FsLCBydHhf aW5zbiAqaW5zbiwKPiBlbnVtIHJlZ19jbGFzcyByY2xhc3MsIGludCBvdGhlciwKPiDCoMKgwqDC oCB9Cj4gwqDCoCBlbHNlIGlmIChDT05TVEFOVF9QIChnb2FsKSkKPiDCoMKgwqDCoCBnb2FsX2Nv bnN0ID0gMTsKPiAtwqAgZWxzZSBpZiAoR0VUX0NPREUgKGdvYWwpID09IFBMVVMKPiAtwqDCoMKg wqDCoMKgwqDCoMKgICYmIFhFWFAgKGdvYWwsIDApID09IHN0YWNrX3BvaW50ZXJfcnR4Cj4gK8Kg IGVsc2UgaWYgKFBMVVNfUCAoZ29hbCkgJiYgWEVYUCAoZ29hbCwgMCkgPT0gc3RhY2tfcG9pbnRl cl9ydHgKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVEFOVF9QIChYRVhQIChnb2FsLCAx KSkpCj4gwqDCoMKgwqAgZ29hbF9jb25zdCA9IG5lZWRfc3RhYmxlX3NwID0gMTsKPiAtwqAgZWxz ZSBpZiAoR0VUX0NPREUgKGdvYWwpID09IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDCoMKgICYmIFhF WFAgKGdvYWwsIDApID09IGZyYW1lX3BvaW50ZXJfcnR4Cj4gK8KgIGVsc2UgaWYgKFBMVVNfUCAo Z29hbCkgJiYgWEVYUCAoZ29hbCwgMCkgPT0gZnJhbWVfcG9pbnRlcl9ydHgKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmJiBDT05TVEFOVF9QIChYRVhQIChnb2FsLCAxKSkpCj4gwqDCoMKgwqAgZ29h bF9jb25zdCA9IDE7Cj4gwqDCoCBlbHNlCj4gQEAgLTcxMTQsOSArNzA5NSw4IEBAIGZpbmRfaW5j X2Ftb3VudCAocnR4IHgsIHJ0eCBpbmNlZCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCBHRVRf Q09ERSAoYWRkcikgPT0gUE9TVF9JTkMpCj4gwqDCoMKgwqDCoMKgwqDCoMKgICYmIFhFWFAgKGFk ZHIsIDApID09IGluY2VkKQo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gR0VUX01PREVfU0laRSAo R0VUX01PREUgKHgpKTsKPiAtwqDCoMKgwqDCoCBlbHNlIGlmICgoR0VUX0NPREUgKGFkZHIpID09 IFBSRV9NT0RJRlkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfHwgR0VUX0NPREUg KGFkZHIpID09IFBPU1RfTU9ESUZZKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBH RVRfQ09ERSAoWEVYUCAoYWRkciwgMSkpID09IFBMVVMKPiArwqDCoMKgwqDCoCBlbHNlIGlmICgo R0VUX0NPREUgKGFkZHIpID09IFBSRV9NT0RJRlkgfHwgR0VUX0NPREUgKGFkZHIpID09Cj4gUE9T VF9NT0RJRlkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIFBMVVNfUCAoWEVYUCAo YWRkciwgMSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBYRVhQIChhZGRyLCAw KSA9PSBYRVhQIChYRVhQIChhZGRyLCAxKSwgMCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICYmIFhFWFAgKGFkZHIsIDApID09IGluY2VkCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAoWEVYUCAoYWRkciwgMSksIDEpKSkKPiBkaWZmIC0t Z2l0IGEvZ2NjL3JlbG9hZDEuY2MgYi9nY2MvcmVsb2FkMS5jYwo+IGluZGV4IDcyOGRjMmExYTVj Li4wOWZlYjc3YjIxNSAxMDA2NDQKPiAtLS0gYS9nY2MvcmVsb2FkMS5jYwo+ICsrKyBiL2djYy9y ZWxvYWQxLmNjCj4gQEAgLTkyOSw4ICs5MjksNyBAQCByZWxvYWQgKHJ0eF9pbnNuICpmaXJzdCwg aW50IGdsb2JhbCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKENPTlNUQU5UX1Ag KFhFWFAgKHgsIDApKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fHwgKFJFR19QIChYRVhQICh4LCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgJiYgUkVHTk8gKFhFWFAgKHgsIDApKSA8Cj4gRklSU1RfUFNFVURP X1JFR0lTVEVSKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCAo R0VUX0NPREUgKFhFWFAgKHgsIDApKSA9PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgUkVHX1AgKFhFWFAgKFhFWFAgKHgsIDApLCAwKSkK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgKFBMVVNfUCAoWEVY UCAoeCwgMCkpICYmIFJFR19QIChYRVhQIChYRVhQCj4gKHgsIDApLCAwKSkKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKFJFR05PIChYRVhQIChY RVhQICh4LCAwKSwgMCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgPCBGSVJTVF9QU0VVRE9fUkVHSVNURVIpCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIENPTlNUQU5UX1AgKFhFWFAg KFhFWFAgKHgsIDApLCAxKSkpKQo+IEBAIC0yNjQzLDEzICsyNjQyLDEyIEBAIGVsaW1pbmF0ZV9y ZWdzXzEgKHJ0eCB4LCBtYWNoaW5lX21vZGUKPiBtZW1fbW9kZSwgcnR4IGluc24sCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkaWRuJ3QgZ2V0IGEgaGFyZCByZWdpc3RlciBidXQgaGFz IGEKPiByZWdfZXF1aXZfY29uc3RhbnQsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3 ZSBtdXN0IHJlcGxhY2UgdGhlIGNvbnN0YW50IGhlcmUgc2luY2UgaXQgbWF5IG5vCj4gbG9uZ2Vy Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiZSBpbiB0aGUgcG9zaXRpb24gb2YgYW55 IG9wZXJhbmQuwqAgKi8KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFIChuZXcw KSA9PSBQTFVTICYmIFJFR19QIChuZXcxKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoUExV U19QIChuZXcwKSAmJiBSRUdfUCAobmV3MSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCYmIFJFR05PIChuZXcxKSA+PSBGSVJTVF9QU0VVRE9fUkVHSVNURVIKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgJiYgcmVnX3JlbnVtYmVyW1JFR05PIChuZXcxKV0gPCAwCj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCYmIHJlZ19lcXVpdnMKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgJiYgcmVnX3JlbnVtYmVyW1JFR05PIChuZXcxKV0gPCAwICYm IHJlZ19lcXVpdnMKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCYmIHJlZ19lcXVp dl9jb25zdGFudCAoUkVHTk8gKG5ldzEpKSAhPSAwKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIG5ldzEgPSByZWdfZXF1aXZfY29uc3RhbnQgKFJFR05PIChuZXcxKSk7Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgIGVsc2UgaWYgKEdFVF9DT0RFIChuZXcxKSA9PSBQTFVTICYmIFJFR19QIChu ZXcwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlIGlmIChQTFVTX1AgKG5ldzEpICYmIFJF R19QIChuZXcwKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYg UkVHTk8gKG5ldzApID49IEZJUlNUX1BTRVVET19SRUdJU1RFUgo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgcmVnX3JlbnVtYmVyW1JFR05PIChuZXcwKV0gPCAw Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiByZWdfZXF1aXZf Y29uc3RhbnQgKFJFR05PIChuZXcwKSkgIT0gMCkKPiBAQCAtMjc3NCwxMSArMjc3MiwxMCBAQCBl bGltaW5hdGVfcmVnc18xIChydHggeCwgbWFjaGluZV9tb2RlCj4gbWVtX21vZGUsIHJ0eCBpbnNu LAo+IMKgwqDCoMKgwqDCoMKgwqAgZWxpbWluYXRpb25fZWZmZWN0cyBoYXMgYWxyZWFkeSBtYWtl IHN1cmUgdGhhdCB0aGlzIGRvZXMgbm90Cj4gwqDCoMKgwqDCoMKgwqDCoCBoYXBwZW4uwqAgVGhl IG9ubHkgcmVtYWluaW5nIGNhc2Ugd2UgbmVlZCB0byBjb25zaWRlciBoZXJlIGlzCj4gwqDCoMKg wqDCoMKgwqDCoCB0aGF0IHRoZSBpbmNyZW1lbnQgdmFsdWUgbWF5IGJlIGFuIGVsaW1pbmFibGUg cmVnaXN0ZXIuwqAgKi8KPiAtwqDCoMKgwqDCoCBpZiAoR0VUX0NPREUgKFhFWFAgKHgsIDEpKSA9 PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKgwqAgJiYgWEVYUCAoWEVYUCAoeCwgMSksIDApID09IFhF WFAgKHgsIDApKQo+ICvCoMKgwqDCoMKgIGlmIChQTFVTX1AgKFhFWFAgKHgsIDEpKSAmJiBYRVhQ IChYRVhQICh4LCAxKSwgMCkgPT0gWEVYUCAoeCwKPiAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgewo+ IC3CoMKgwqDCoMKgwqDCoMKgIHJ0eCBuZXdfcnR4ID0gZWxpbWluYXRlX3JlZ3NfMSAoWEVYUCAo WEVYUCAoeCwgMSksIDEpLAo+IG1lbV9tb2RlLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp bnNuLCB0cnVlLCBmb3JfY29zdHMpOwo+ICvCoMKgwqDCoMKgwqDCoMKgIHJ0eCBuZXdfcnR4ID0g ZWxpbWluYXRlX3JlZ3NfMSAoWEVYUCAoWEVYUCAoeCwgMSksIDEpLAo+IG1lbV9tb2RlLCBpbnNu LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0cnVlLCBmb3JfY29zdHMpOwo+IMKgCj4gwqDC oMKgwqDCoMKgwqDCoMKgIGlmIChuZXdfcnR4ICE9IFhFWFAgKFhFWFAgKHgsIDEpLCAxKSkKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBnZW5fcnR4X2ZtdF9lZSAoY29kZSwgR0VUX01P REUgKHgpLCBYRVhQICh4LCAwKSwKPiBAQCAtMzAyMSw4ICszMDE4LDcgQEAgZWxpbWluYXRpb25f ZWZmZWN0cyAocnR4IHgsIG1hY2hpbmVfbW9kZQo+IG1lbV9tb2RlKQo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGVwLT5vZmZzZXQgLT0gc2l6ZTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGVsc2UgaWYgKGNvZGUgPT0gUFJFX01PRElGWSB8fCBjb2RlID09IFBPU1RfTU9ESUZZKQo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKEdFVF9DT0RFIChYRVhQICh4LCAxKSkgPT0gUExVUwo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgWEVYUCAoeCwgMCkgPT0gWEVYUCAoWEVYUCAoeCwgMSks IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChQTFVTX1AgKFhFWFAgKHgs IDEpKSAmJiBYRVhQICh4LCAwKSA9PSBYRVhQIChYRVhQCj4gKHgsIDEpLCAwKQo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIENPTlNUX0lOVF9QIChYRVhQIChYRVhQ ICh4LCAxKSwgMSkpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXAtPm9m ZnNldCAtPSBJTlRWQUwgKFhFWFAgKFhFWFAgKHgsIDEpLCAxKSk7Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBlbHNlCj4gQEAgLTMxMDksOCArMzEwNSw3IEBAIGVsaW1pbmF0aW9u X2VmZmVjdHMgKHJ0eCB4LCBtYWNoaW5lX21vZGUKPiBtZW1fbW9kZSkKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGhpcyBlbGltaW5hdGlvbiBjYW4ndCBiZSBkb25lLsKg ICovCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBydHggc3JjID0gU0VUX1NSQyAo eCk7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKEdFVF9DT0RFIChz cmMpID09IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIFhF WFAgKHNyYywgMCkgPT0gU0VUX0RFU1QgKHgpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmIChQTFVTX1AgKHNyYykgJiYgWEVYUCAoc3JjLCAwKSA9PSBTRVRfREVTVCAoeCkKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVF9JTlRfUCAoWEVY UCAoc3JjLCAxKSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcC0+b2Zm c2V0IC09IElOVFZBTCAoWEVYUCAoc3JjLCAxKSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBlbHNlCj4gQEAgLTMyMjksMTEgKzMyMjQsMTAgQEAgZWxpbWluYXRlX3JlZ3NfaW5f aW5zbiAocnR4X2luc24gKmluc24sIGludAo+IHJlcGxhY2UpCj4gwqDCoCBwbHVzX3NyYyA9IHBs dXNfY3N0X3NyYyA9IDA7Cj4gwqDCoCBpZiAob2xkX3NldCAmJiBSRUdfUCAoU0VUX0RFU1QgKG9s ZF9zZXQpKSkKPiDCoMKgwqDCoCB7Cj4gLcKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFIChTRVRfU1JD IChvbGRfc2V0KSkgPT0gUExVUykKPiArwqDCoMKgwqDCoCBpZiAoUExVU19QIChTRVRfU1JDIChv bGRfc2V0KSkpCj4gwqDCoMKgwqDCoMKgwqDCoHBsdXNfc3JjID0gU0VUX1NSQyAob2xkX3NldCk7 Cj4gwqDCoMKgwqDCoMKgIC8qIEZpcnN0IHNlZSBpZiB0aGUgc291cmNlIGlzIG9mIHRoZSBmb3Jt IChwbHVzICguLi4pIENTVCkuwqAKPiAqLwo+IC3CoMKgwqDCoMKgIGlmIChwbHVzX3NyYwo+IC3C oMKgwqDCoMKgwqDCoMKgICYmIENPTlNUX0lOVF9QIChYRVhQIChwbHVzX3NyYywgMSkpKQo+ICvC oMKgwqDCoMKgIGlmIChwbHVzX3NyYyAmJiBDT05TVF9JTlRfUCAoWEVYUCAocGx1c19zcmMsIDEp KSkKPiDCoMKgwqDCoMKgwqDCoMKgcGx1c19jc3Rfc3JjID0gcGx1c19zcmM7Cj4gwqDCoMKgwqDC oMKgIGVsc2UgaWYgKFJFR19QIChTRVRfU1JDIChvbGRfc2V0KSkKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHx8IHBsdXNfc3JjKQo+IEBAIC0zMjQ1LDcgKzMyMzksNyBAQCBlbGltaW5h dGVfcmVnc19pbl9pbnNuIChydHhfaW5zbiAqaW5zbiwgaW50Cj4gcmVwbGFjZSkKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoKFJFR19O T1RFX0tJTkQgKGxpbmtzKSA9PSBSRUdfRVFVQUwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfHwgUkVHX05PVEVfS0lORCAobGlua3MpID09IFJFR19FUVVJVikKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhFWFAgKGxpbmtzLCAw KSkgPT0gUExVUwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBQTFVTX1Ag KFhFWFAgKGxpbmtzLCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYm IENPTlNUX0lOVF9QIChYRVhQIChYRVhQIChsaW5rcywgMCksIDEpKSkKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHBsdXNfY3N0X3NyYyA9IFhFWFAgKGxpbmtzLCAwKTsKPiBAQCAtMzQzNSwxMSArMzQyOSw5IEBA IGVsaW1pbmF0ZV9yZWdzX2luX2luc24gKHJ0eF9pbnNuICppbnNuLCBpbnQKPiByZXBsYWNlKQo+ IMKgwqDCoMKgwqDCoMKgwqAgaHVydCBpbiB0aGlzIHJhcmUgY2FzZS7CoCAqLwo+IMKgwqDCoMKg wqDCoCAvKiA/Pz8gV2h5IHRoaXMgaHVnZSBpZiBzdGF0ZW1lbnQgLSB3aHkgZG9uJ3Qgd2UganVz dAo+IHJlcmVjb2duaXplIHRoZQo+IMKgwqDCoMKgwqDCoMKgwqAgdGhpbmcgYWx3YXlzP8KgICov Cj4gLcKgwqDCoMKgwqAgaWYgKCEgaW5zbl9pc19hc20KPiAtwqDCoMKgwqDCoMKgwqDCoCAmJiBv bGRfc2V0ICE9IDAKPiArwqDCoMKgwqDCoCBpZiAoIWluc25faXNfYXNtICYmIG9sZF9zZXQgIT0g MAo+IMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAoKFJFR19QIChTRVRfU1JDIChvbGRfc2V0KSkKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKEdFVF9DT0RFIChuZXdfYm9keSkgIT0gU0VU Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgIVJFR19QIChTRVRfU1JD IChuZXdfYm9keSkpKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgKEdFVF9DT0RF IChuZXdfYm9keSkgIT0gU0VUIHx8ICFSRUdfUCAoU0VUX1NSQwo+IChuZXdfYm9keSkpKSkKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBJZiB0aGlzIHdhcyBhIGxvYWQgZnJvbSBvciBz dG9yZSB0byBtZW1vcnksIGNvbXBhcmUKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB0aGUgTUVNIGluIHJlY29nX2RhdGEub3BlcmFuZCB0byB0aGUgb25lIGluIHRoZQo+IGluc24u Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSWYgdGhleSBhcmUgbm90IGVxdWFs LCB0aGVuIHJlcmVjb2duaXplIHRoZSBpbnNuLsKgCj4gKi8KPiBAQCAtMzQ0OSw3ICszNDQxLDcg QEAgZWxpbWluYXRlX3JlZ3NfaW5faW5zbiAocnR4X2luc24gKmluc24sIGludAo+IHJlcGxhY2Up Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IChNRU1fUCAo U0VUX0RFU1QgKG9sZF9zZXQpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICYmIFNFVF9ERVNUIChvbGRfc2V0KSAhPQo+IHJlY29nX2RhdGEub3Bl cmFuZFswXSkpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIElmIHRoaXMgd2FzIGFu IGFkZCBpbnNuIGJlZm9yZSwgcmVyZWNvZ25pemUuwqAgKi8KPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHx8IEdFVF9DT0RFIChTRVRfU1JDIChvbGRfc2V0KSkgPT0gUExVUykpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB8fCBQTFVTX1AgKFNFVF9TUkMgKG9sZF9zZXQpKSkpCj4gwqDC oMKgwqDCoMKgwqDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IG5ld19pY29kZSA9IHJlY29n IChQQVRURVJOIChpbnNuKSwgaW5zbiwgMCk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChuZXdf aWNvZGUgPj0gMCkKPiBAQCAtMzU1NywxMSArMzU0OSwxMCBAQCBlbGltaW5hdGlvbl9jb3N0c19p bl9pbnNuIChydHhfaW5zbiAqaW5zbikKPiDCoMKgIGlmIChvbGRfc2V0ICYmIFJFR19QIChTRVRf REVTVCAob2xkX3NldCkpKQo+IMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqAgc2V0c19yZWdfcCA9 IHRydWU7Cj4gLcKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFIChTRVRfU1JDIChvbGRfc2V0KSkgPT0g UExVUykKPiArwqDCoMKgwqDCoCBpZiAoUExVU19QIChTRVRfU1JDIChvbGRfc2V0KSkpCj4gwqDC oMKgwqDCoMKgwqDCoHBsdXNfc3JjID0gU0VUX1NSQyAob2xkX3NldCk7Cj4gwqDCoMKgwqDCoMKg IC8qIEZpcnN0IHNlZSBpZiB0aGUgc291cmNlIGlzIG9mIHRoZSBmb3JtIChwbHVzICguLi4pIENT VCkuwqAKPiAqLwo+IC3CoMKgwqDCoMKgIGlmIChwbHVzX3NyYwo+IC3CoMKgwqDCoMKgwqDCoMKg ICYmIENPTlNUX0lOVF9QIChYRVhQIChwbHVzX3NyYywgMSkpKQo+ICvCoMKgwqDCoMKgIGlmIChw bHVzX3NyYyAmJiBDT05TVF9JTlRfUCAoWEVYUCAocGx1c19zcmMsIDEpKSkKPiDCoMKgwqDCoMKg wqDCoMKgcGx1c19jc3Rfc3JjID0gcGx1c19zcmM7Cj4gwqDCoMKgwqDCoMKgIGVsc2UgaWYgKFJF R19QIChTRVRfU1JDIChvbGRfc2V0KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8 IHBsdXNfc3JjKQo+IEBAIC0zNTczLDcgKzM1NjQsNyBAQCBlbGltaW5hdGlvbl9jb3N0c19pbl9p bnNuIChydHhfaW5zbiAqaW5zbikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoKFJFR19OT1RFX0tJTkQgKGxpbmtzKSA9PSBSRUdfRVFV QUwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgUkVHX05PVEVfS0lO RCAobGlua3MpID09IFJFR19FUVVJVikKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJiYgR0VUX0NPREUgKFhFWFAgKGxpbmtzLCAwKSkgPT0gUExVUwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBQTFVTX1AgKFhFWFAgKGxpbmtzLCAwKSkKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIENPTlNUX0lOVF9QIChYRVhQIChYRVhQIChs aW5rcywgMCksIDEpKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHsKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBsdXNfY3N0X3NyYyA9IFhFWFAgKGxpbmtz LCAwKTsKPiBAQCAtNDA3Nyw3ICs0MDY4LDcgQEAgaW5pdF9lbGltaW5hYmxlX2ludmFyaWFudHMg KHJ0eF9pbnNuICpmaXJzdCwKPiBib29sIGRvX3N1YnJlZ3MpCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBtYWNoaW5lX21vZGUgbW9kZTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgbW9kZSA9IEdFVF9NT0RFIChTRVRfREVTVCAoc2V0KSk7Cj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChHRVRfQ09ERSAoeCkgPT0gUExV UykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKFBMVVNfUCAoeCkpCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgewo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBUaGlzIGlzIFBMVVMgb2YgZnJhbWUgcG9p bnRlciBhbmQgYQo+IGNvbnN0YW50LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBhbmQgbWlnaHQgYmUgc2hhcmVkLsKgIFVuc2hhcmUgaXQuwqAgKi8K PiBAQCAtNTU1OCwxNCArNTU0OSwxMSBAQCBnZW5fcmVsb2FkX2NoYWluX3dpdGhvdXRfaW50ZXJt X3JlZ19wIChpbnQKPiByMSwgaW50IHIyKQo+IMKgwqDCoMKgwqAgb3Bwb3NpdGUgU1VCUkVHIG9u IE9VVC7CoCBMaWtld2lzZSBmb3IgYSBwYXJhZG94aWNhbCBTVUJSRUcgb24KPiBPVVQuwqAgKi8K PiDCoMKgIHN0cmlwX3BhcmFkb3hpY2FsX3N1YnJlZyAoJmluLCAmb3V0KTsKPiDCoAo+IC3CoCBp ZiAoR0VUX0NPREUgKGluKSA9PSBQTFVTCj4gLcKgwqDCoMKgwqAgJiYgKFJFR19QIChYRVhQIChp biwgMCkpCj4gLcKgwqDCoMKgwqDCoMKgwqAgfHwgR0VUX0NPREUgKFhFWFAgKGluLCAwKSkgPT0g U1VCUkVHCj4gK8KgIGlmIChQTFVTX1AgKGluKQo+ICvCoMKgwqDCoMKgICYmIChSRUdfUCAoWEVY UCAoaW4sIDApKSB8fCBHRVRfQ09ERSAoWEVYUCAoaW4sIDApKSA9PSBTVUJSRUcKPiDCoMKgwqDC oMKgwqDCoMKgwqAgfHwgTUVNX1AgKFhFWFAgKGluLCAwKSkpCj4gLcKgwqDCoMKgwqAgJiYgKFJF R19QIChYRVhQIChpbiwgMSkpCj4gLcKgwqDCoMKgwqDCoMKgwqAgfHwgR0VUX0NPREUgKFhFWFAg KGluLCAxKSkgPT0gU1VCUkVHCj4gLcKgwqDCoMKgwqDCoMKgwqAgfHwgQ09OU1RBTlRfUCAoWEVY UCAoaW4sIDEpKQo+IC3CoMKgwqDCoMKgwqDCoMKgIHx8IE1FTV9QIChYRVhQIChpbiwgMSkpKSkK PiArwqDCoMKgwqDCoCAmJiAoUkVHX1AgKFhFWFAgKGluLCAxKSkgfHwgR0VUX0NPREUgKFhFWFAg KGluLCAxKSkgPT0gU1VCUkVHCj4gK8KgwqDCoMKgwqDCoMKgwqAgfHwgQ09OU1RBTlRfUCAoWEVY UCAoaW4sIDEpKSB8fCBNRU1fUCAoWEVYUCAoaW4sIDEpKSkpCj4gwqDCoMKgwqAgewo+IMKgwqDC oMKgwqDCoCBpbnNuID0gZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAob3V0LCBpbikpOwo+IMKgwqDC oMKgwqDCoCBjb2RlID0gcmVjb2dfbWVtb2l6ZWQgKGluc24pOwo+IEBAIC01OTYzLDcgKzU5NTEs NyBAQCBmdW5jdGlvbl9pbnZhcmlhbnRfcCAoY29uc3RfcnR4IHgpCj4gwqDCoMKgwqAgcmV0dXJu IDE7Cj4gwqDCoCBpZiAoeCA9PSBmcmFtZV9wb2ludGVyX3J0eCB8fCB4ID09IGFyZ19wb2ludGVy X3J0eCkKPiDCoMKgwqDCoCByZXR1cm4gMTsKPiAtwqAgaWYgKEdFVF9DT0RFICh4KSA9PSBQTFVT Cj4gK8KgIGlmIChQTFVTX1AgKHgpCj4gwqDCoMKgwqDCoMKgICYmIChYRVhQICh4LCAwKSA9PSBm cmFtZV9wb2ludGVyX3J0eCB8fCBYRVhQICh4LCAwKSA9PQo+IGFyZ19wb2ludGVyX3J0eCkKPiDC oMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhFWFAgKHgsIDEpKSA9PSBDT05TVF9JTlQpCj4gwqDC oMKgwqAgcmV0dXJuIDE7Cj4gQEAgLTY2MDUsMTYgKzY1OTMsMTIgQEAgY2hvb3NlX3JlbG9hZF9y ZWdzIChjbGFzcyBpbnNuX2NoYWluICpjaGFpbikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0K PiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBIZXJlJ3MgYW5vdGhlciB3YXkgdG8gc2VlIGlm IHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGx5aW5nCj4gYXJvdW5kLsKgICovCj4gLcKgwqDCoMKgwqDC oMKgwqAgaWYgKGluaGVyaXRhbmNlCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBybGRb cl0uaW4gIT0gMAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgISByZWxvYWRfaW5oZXJp dGVkW3JdCj4gK8KgwqDCoMKgwqDCoMKgwqAgaWYgKGluaGVyaXRhbmNlICYmIHJsZFtyXS5pbiAh PSAwICYmICFyZWxvYWRfaW5oZXJpdGVkW3JdCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg JiYgcmxkW3JdLm91dCA9PSAwCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAoQ09OU1RB TlRfUCAocmxkW3JdLmluKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCBH RVRfQ09ERSAocmxkW3JdLmluKSA9PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHx8IFJFR19QIChybGRbcl0uaW4pCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHx8IE1FTV9QIChybGRbcl0uaW4pKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg JiYgKENPTlNUQU5UX1AgKHJsZFtyXS5pbikgfHwgUExVU19QIChybGRbcl0uaW4pCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IFJFR19QIChybGRbcl0uaW4pIHx8IE1FTV9Q IChybGRbcl0uaW4pKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIChybGRbcl0ubnJl Z3MgPT0gbWF4X2dyb3VwX3NpemUKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fHwgISByZWdfY2xhc3Nlc19pbnRlcnNlY3RfcCAocmxkW3JdLnJjbGFzcywKPiBncm91cF9jbGFz cykpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCAhcmVnX2NsYXNzZXNf aW50ZXJzZWN0X3AgKHJsZFtyXS5yY2xhc3MsCj4gZ3JvdXBfY2xhc3MpKSkKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHNlYXJjaF9lcXVpdiA9IHJsZFtyXS5pbjsKPiDCoAo+IMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAoc2VhcmNoX2VxdWl2KQo+IEBAIC04NDUzLDE0ICs4NDM3LDExIEBAIGdlbl9y ZWxvYWQgKHJ0eCBvdXQsIHJ0eCBpbiwgaW50IG9wbnVtLCBlbnVtCj4gcmVsb2FkX3R5cGUgdHlw ZSkKPiDCoAo+IMKgwqDCoMKgwqAgPz8/IEF0IHNvbWUgcG9pbnQsIHRoaXMgd2hvbGUgdGhpbmcg bmVlZHMgdG8gYmUgcmV0aG91Z2h0LsKgICovCj4gwqAKPiAtwqAgaWYgKEdFVF9DT0RFIChpbikg PT0gUExVUwo+IC3CoMKgwqDCoMKgICYmIChSRUdfUCAoWEVYUCAoaW4sIDApKQo+IC3CoMKgwqDC oMKgwqDCoMKgIHx8IEdFVF9DT0RFIChYRVhQIChpbiwgMCkpID09IFNVQlJFRwo+ICvCoCBpZiAo UExVU19QIChpbikKPiArwqDCoMKgwqDCoCAmJiAoUkVHX1AgKFhFWFAgKGluLCAwKSkgfHwgR0VU X0NPREUgKFhFWFAgKGluLCAwKSkgPT0gU1VCUkVHCj4gwqDCoMKgwqDCoMKgwqDCoMKgIHx8IE1F TV9QIChYRVhQIChpbiwgMCkpKQo+IC3CoMKgwqDCoMKgICYmIChSRUdfUCAoWEVYUCAoaW4sIDEp KQo+IC3CoMKgwqDCoMKgwqDCoMKgIHx8IEdFVF9DT0RFIChYRVhQIChpbiwgMSkpID09IFNVQlJF Rwo+IC3CoMKgwqDCoMKgwqDCoMKgIHx8IENPTlNUQU5UX1AgKFhFWFAgKGluLCAxKSkKPiAtwqDC oMKgwqDCoMKgwqDCoCB8fCBNRU1fUCAoWEVYUCAoaW4sIDEpKSkpCj4gK8KgwqDCoMKgwqAgJiYg KFJFR19QIChYRVhQIChpbiwgMSkpIHx8IEdFVF9DT0RFIChYRVhQIChpbiwgMSkpID09IFNVQlJF Rwo+ICvCoMKgwqDCoMKgwqDCoMKgIHx8IENPTlNUQU5UX1AgKFhFWFAgKGluLCAxKSkgfHwgTUVN X1AgKFhFWFAgKGluLCAxKSkpKQo+IMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqAgLyogV2UgbmVl ZCB0byBjb21wdXRlIHRoZSBzdW0gb2YgYSByZWdpc3RlciBvciBhIE1FTSBhbmQKPiBhbm90aGVy Cj4gwqDCoMKgwqDCoMKgwqDCoCByZWdpc3RlciwgY29uc3RhbnQsIG9yIE1FTSwgYW5kIHB1dCBp dCBpbnRvIHRoZSByZWxvYWQKPiBAQCAtODk5MSw3ICs4OTcyLDcgQEAgaW5jX2Zvcl9yZWxvYWQg KHJ0eCByZWxvYWRyZWcsIHJ0eCBpbiwgcnR4Cj4gdmFsdWUsIHBvbHlfaW50NjQgaW5jX2Ftb3Vu dCkKPiDCoAo+IMKgwqAgaWYgKEdFVF9DT0RFICh2YWx1ZSkgPT0gUFJFX01PRElGWSB8fCBHRVRf Q09ERSAodmFsdWUpID09Cj4gUE9TVF9NT0RJRlkpCj4gwqDCoMKgwqAgewo+IC3CoMKgwqDCoMKg IGdjY19hc3NlcnQgKEdFVF9DT0RFIChYRVhQICh2YWx1ZSwgMSkpID09IFBMVVMpOwo+ICvCoMKg wqDCoMKgIGdjY19hc3NlcnQgKFBMVVNfUCAoWEVYUCAodmFsdWUsIDEpKSk7Cj4gwqDCoMKgwqDC oMKgIGluYyA9IGZpbmRfcmVwbGFjZW1lbnQgKCZYRVhQIChYRVhQICh2YWx1ZSwgMSksIDEpKTsK PiDCoMKgwqDCoCB9Cj4gwqDCoCBlbHNlCj4gZGlmZiAtLWdpdCBhL2djYy9yZW9yZy5jYyBiL2dj Yy9yZW9yZy5jYwo+IGluZGV4IDA3YjIwNDU5ODZjLi45YTU5NmUwNDJjNyAxMDA2NDQKPiAtLS0g YS9nY2MvcmVvcmcuY2MKPiArKysgYi9nY2MvcmVvcmcuY2MKPiBAQCAtMjY2MywxMiArMjY2Mywx MCBAQCBmaWxsX3Nsb3RzX2Zyb21fdGhyZWFkIChydHhfanVtcF9pbnNuICppbnNuLAo+IHJ0eCBj b25kaXRpb24sCj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiDCoAo+IMKgwqDCoMKgwqDCoCBk ZXN0ID0gU0VUX0RFU1QgKHBhdCksIHNyYyA9IFNFVF9TUkMgKHBhdCk7Cj4gLcKgwqDCoMKgwqAg aWYgKChHRVRfQ09ERSAoc3JjKSA9PSBQTFVTIHx8IEdFVF9DT0RFIChzcmMpID09IE1JTlVTKQo+ IC3CoMKgwqDCoMKgwqDCoMKgICYmIHJ0eF9lcXVhbF9wIChYRVhQIChzcmMsIDApLCBkZXN0KQo+ IC3CoMKgwqDCoMKgwqDCoMKgICYmICghRkxPQVRfTU9ERV9QIChHRVRfTU9ERSAoc3JjKSkKPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IGZsYWdfdW5zYWZlX21hdGhfb3B0aW1pemF0aW9u cykKPiAtwqDCoMKgwqDCoMKgwqDCoCAmJiAhIHJlZ19vdmVybGFwX21lbnRpb25lZF9wIChkZXN0 LCBYRVhQIChzcmMsIDEpKQo+IC3CoMKgwqDCoMKgwqDCoMKgICYmICEgc2lkZV9lZmZlY3RzX3Ag KHBhdCkpCj4gK8KgwqDCoMKgwqAgaWYgKChQTFVTX1AgKHNyYykgfHwgTUlOVVNfUCAoc3JjKSkg JiYgcnR4X2VxdWFsX3AgKFhFWFAgKHNyYywKPiAwKSwgZGVzdCkKPiArwqDCoMKgwqDCoMKgwqDC oCAmJiAoIUZMT0FUX01PREVfUCAoR0VUX01PREUgKHNyYykpIHx8Cj4gZmxhZ191bnNhZmVfbWF0 aF9vcHRpbWl6YXRpb25zKQo+ICvCoMKgwqDCoMKgwqDCoMKgICYmICFyZWdfb3ZlcmxhcF9tZW50 aW9uZWRfcCAoZGVzdCwgWEVYUCAoc3JjLCAxKSkKPiArwqDCoMKgwqDCoMKgwqDCoCAmJiAhc2lk ZV9lZmZlY3RzX3AgKHBhdCkpCj4gwqDCoMKgwqDCoMKgwqDCoHsKPiDCoMKgwqDCoMKgwqDCoMKg wqAgcnR4IG90aGVyID0gWEVYUCAoc3JjLCAxKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgcnR4IG5l d19hcml0aDsKPiBAQCAtMjY4MSw3ICsyNjc5LDcgQEAgZmlsbF9zbG90c19mcm9tX3RocmVhZCAo cnR4X2p1bXBfaW5zbiAqaW5zbiwKPiBydHggY29uZGl0aW9uLAo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgbmV3X2FyaXRoID0gZ2VuX3J0eF9mbXRfZWUgKEdFVF9DT0RFIChzcmMpLCBHRVRfTU9E RQo+IChzcmMpLCBkZXN0LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbmVnYXRlX3J0eCAoR0VU X01PREUgKHNyYyksCj4gb3RoZXIpKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgZWxzZQo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoCBuZXdfYXJpdGggPSBnZW5fcnR4X2ZtdF9lZSAoR0VUX0NPREUgKHNy YykgPT0gUExVUyA/Cj4gTUlOVVMgOiBQTFVTLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBuZXdf YXJpdGggPSBnZW5fcnR4X2ZtdF9lZSAoUExVU19QIChzcmMpID8gTUlOVVMgOiBQTFVTLAo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgR0VUX01PREUgKHNyYyksIGRlc3QsIG90aGVyKTsKPiDCoAo+ IMKgwqDCoMKgwqDCoMKgwqDCoCBuaW5zbiA9IGVtaXRfaW5zbl9hZnRlciAoZ2VuX3J0eF9TRVQg KGRlc3QsIG5ld19hcml0aCksCj4gaW5zbik7Cj4gZGlmZiAtLWdpdCBhL2djYy9ydGwuY2MgYi9n Y2MvcnRsLmNjCj4gaW5kZXggODZjMzIyYjE5Y2EuLjQ2MGI4ZWQwNWQ1IDEwMDY0NAo+IC0tLSBh L2djYy9ydGwuY2MKPiArKysgYi9nY2MvcnRsLmNjCj4gQEAgLTI2OSwxMiArMjY5LDExIEBAIHNo YXJlZF9jb25zdF9wIChjb25zdF9ydHggb3JpZykKPiDCoMKgIC8qIENPTlNUIGNhbiBiZSBzaGFy ZWQgaWYgaXQgY29udGFpbnMgYSBTWU1CT0xfUkVGLsKgIElmIGl0Cj4gY29udGFpbnMKPiDCoMKg wqDCoMKgIGEgTEFCRUxfUkVGLCBpdCBpc24ndCBzaGFyYWJsZS7CoCAqLwo+IMKgwqAgcG9seV9p bnQ2NCBvZmZzZXQ7Cj4gLcKgIHJldHVybiAoR0VUX0NPREUgKFhFWFAgKG9yaWcsIDApKSA9PSBQ TFVTCj4gK8KgIHJldHVybiAoUExVU19QIChYRVhQIChvcmlnLCAwKSkKPiDCoMKgwqDCoMKgwqDC oMKgwqAgJiYgR0VUX0NPREUgKFhFWFAgKFhFWFAgKG9yaWcsIDApLCAwKSkgPT0gU1lNQk9MX1JF Rgo+IMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBwb2x5X2ludF9ydHhfcCAoWEVYUCAoWEVYUCAob3Jp ZywgMCksIDEpLCAmb2Zmc2V0KSk7Cj4gwqB9Cj4gwqAKPiAtCj4gwqAvKiBDcmVhdGUgYSBuZXcg Y29weSBvZiBhbiBydHguCj4gwqDCoMKgIFJlY3Vyc2l2ZWx5IGNvcGllcyB0aGUgb3BlcmFuZHMg b2YgdGhlIHJ0eCwKPiDCoMKgwqAgZXhjZXB0IGZvciB0aG9zZSBmZXcgcnR4IGNvZGVzIHRoYXQg YXJlIHNoYXJhYmxlLsKgICovCj4gZGlmZiAtLWdpdCBhL2djYy9ydGwuaCBiL2djYy9ydGwuaAo+ IGluZGV4IDdhOGM0NzA5MjU3Li5iZjAzMmViNTdhNSAxMDA2NDQKPiAtLS0gYS9nY2MvcnRsLmgK PiArKysgYi9nY2MvcnRsLmgKPiBAQCAtODgyLDYgKzg4MiwxNyBAQCBzdHJ1Y3QgR1RZKCgpKSBy dHZlY19kZWYgewo+IMKgLyogUHJlZGljYXRlIHlpZWxkaW5nIHRydWUgaWZmIFJUWCBpcyBhIHN5 bWJvbCByZWYuwqAgKi8KPiDCoCNkZWZpbmUgU1lNQk9MX1JFRl9QKFJUWCkgKEdFVF9DT0RFIChS VFgpID09IFNZTUJPTF9SRUYpCj4gwqAKPiArLyogUlRMIHByZWRpY2F0ZXMgZm9yIHZhbHVlIGJp bmFyeSBvcGVyYXRvcnMuwqAgKi8KPiArLyogUHJlZGljYXRlIHlpZWxkaW5nIG5vbnplcm8gaWZm IFJUWCBpcyBhbiBhZGRpdGlvbiBvcGVyYXRpb24uwqAgKi8KPiArI2RlZmluZSBQTFVTX1AoUlRY KSAoR0VUX0NPREUgKFJUWCkgPT0gUExVUykKPiArCj4gKy8qIFByZWRpY2F0ZSB5aWVsZGluZyBu b256ZXJvIGlmZiBSVFggaXMgYSBzdWJ0cmFjdGlvbiBvcGVyYXRpb24uwqAKPiAqLwo+ICsjZGVm aW5lIE1JTlVTX1AoUlRYKSAoR0VUX0NPREUoUlRYKSA9PSBNSU5VUykKPiArCj4gKy8qIFByZWRp Y2F0ZSB5aWVsZGluZyBub256ZXJvIGlmZiBSVFggaXMgYSBtdWx0aXBsaWNhdGlvbgo+IG9wZXJh dGlvbi7CoCAqLwo+ICsjZGVmaW5lIE1VTFRfUChSVFgpIChHRVRfQ09ERShSVFgpID09IE1VTFQp Cj4gKwo+ICsKPiDCoHRlbXBsYXRlIDw+Cj4gwqB0ZW1wbGF0ZSA8Pgo+IMKgaW5saW5lIGJvb2wK PiBkaWZmIC0tZ2l0IGEvZ2NjL3J0bGFuYWwuY2MgYi9nY2MvcnRsYW5hbC5jYwo+IGluZGV4IDU2 ZGE3NDM1YTI4Li41MjY2ZmJiZGQ5ZCAxMDA2NDQKPiAtLS0gYS9nY2MvcnRsYW5hbC5jYwo+ICsr KyBiL2djYy9ydGxhbmFsLmNjCj4gQEAgLTg1OSwxMSArODU5LDkgQEAgZ2V0X2ludGVnZXJfdGVy bSAoY29uc3RfcnR4IHgpCj4gwqDCoCBpZiAoR0VUX0NPREUgKHgpID09IENPTlNUKQo+IMKgwqDC oMKgIHggPSBYRVhQICh4LCAwKTsKPiDCoAo+IC3CoCBpZiAoR0VUX0NPREUgKHgpID09IE1JTlVT Cj4gLcKgwqDCoMKgwqAgJiYgQ09OU1RfSU5UX1AgKFhFWFAgKHgsIDEpKSkKPiAtwqDCoMKgIHJl dHVybiAtIElOVFZBTCAoWEVYUCAoeCwgMSkpOwo+IC3CoCBpZiAoR0VUX0NPREUgKHgpID09IFBM VVMKPiAtwqDCoMKgwqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAoeCwgMSkpKQo+ICvCoCBpZiAo TUlOVVNfUCAoeCkgJiYgQ09OU1RfSU5UX1AgKFhFWFAgKHgsIDEpKSkKPiArwqDCoMKgIHJldHVy biAtSU5UVkFMIChYRVhQICh4LCAxKSk7Cj4gK8KgIGlmIChQTFVTX1AgKHgpICYmIENPTlNUX0lO VF9QIChYRVhQICh4LCAxKSkpCj4gwqDCoMKgwqAgcmV0dXJuIElOVFZBTCAoWEVYUCAoeCwgMSkp Owo+IMKgwqAgcmV0dXJuIDA7Cj4gwqB9Cj4gQEAgLTg3OCwxMSArODc2LDkgQEAgZ2V0X3JlbGF0 ZWRfdmFsdWUgKGNvbnN0X3J0eCB4KQo+IMKgwqAgaWYgKEdFVF9DT0RFICh4KSAhPSBDT05TVCkK PiDCoMKgwqDCoCByZXR1cm4gMDsKPiDCoMKgIHggPSBYRVhQICh4LCAwKTsKPiAtwqAgaWYgKEdF VF9DT0RFICh4KSA9PSBQTFVTCj4gLcKgwqDCoMKgwqAgJiYgQ09OU1RfSU5UX1AgKFhFWFAgKHgs IDEpKSkKPiArwqAgaWYgKFBMVVNfUCAoeCkgJiYgQ09OU1RfSU5UX1AgKFhFWFAgKHgsIDEpKSkK PiDCoMKgwqDCoCByZXR1cm4gWEVYUCAoeCwgMCk7Cj4gLcKgIGVsc2UgaWYgKEdFVF9DT0RFICh4 KSA9PSBNSU5VUwo+IC3CoMKgwqDCoMKgwqDCoMKgwqAgJiYgQ09OU1RfSU5UX1AgKFhFWFAgKHgs IDEpKSkKPiArwqAgZWxzZSBpZiAoTUlOVVNfUCAoeCkgJiYgQ09OU1RfSU5UX1AgKFhFWFAgKHgs IDEpKSkKPiDCoMKgwqDCoCByZXR1cm4gWEVYUCAoeCwgMCk7Cj4gwqDCoCByZXR1cm4gMDsKPiDC oH0KPiBAQCAtOTMxLDcgKzkyNyw3IEBAIHNwbGl0X2NvbnN0IChydHggeCwgcnR4ICpiYXNlX291 dCwgcnR4Cj4gKm9mZnNldF9vdXQpCj4gwqDCoCBpZiAoR0VUX0NPREUgKHgpID09IENPTlNUKQo+ IMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqAgeCA9IFhFWFAgKHgsIDApOwo+IC3CoMKgwqDCoMKg IGlmIChHRVRfQ09ERSAoeCkgPT0gUExVUyAmJiBDT05TVF9JTlRfUCAoWEVYUCAoeCwgMSkpKQo+ ICvCoMKgwqDCoMKgIGlmIChQTFVTX1AgKHgpICYmIENPTlNUX0lOVF9QIChYRVhQICh4LCAxKSkp Cj4gwqDCoMKgwqDCoMKgwqDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgKmJhc2Vfb3V0ID0gWEVY UCAoeCwgMCk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgICpvZmZzZXRfb3V0ID0gWEVYUCAoeCwgMSk7 Cj4gQEAgLTk1Myw3ICs5NDksNyBAQCBzdHJpcF9vZmZzZXQgKHJ0eCB4LCBwb2x5X2ludDY0X3Bv ZCAqb2Zmc2V0X291dCkKPiDCoMKgIHJ0eCB0ZXN0ID0geDsKPiDCoMKgIGlmIChHRVRfQ09ERSAo dGVzdCkgPT0gQ09OU1QpCj4gwqDCoMKgwqAgdGVzdCA9IFhFWFAgKHRlc3QsIDApOwo+IC3CoCBp ZiAoR0VUX0NPREUgKHRlc3QpID09IFBMVVMpCj4gK8KgIGlmIChQTFVTX1AgKHRlc3QpKQo+IMKg wqDCoMKgIHsKPiDCoMKgwqDCoMKgwqAgYmFzZSA9IFhFWFAgKHRlc3QsIDApOwo+IMKgwqDCoMKg wqDCoCB0ZXN0ID0gWEVYUCAodGVzdCwgMSk7Cj4gQEAgLTY1OTcsNyArNjU5Myw3IEBAIGRlY29t cG9zZV9hdXRvbW9kX2FkZHJlc3MgKHN0cnVjdCBhZGRyZXNzX2luZm8KPiAqaW5mbykKPiDCoMKg IGdjY19jaGVja2luZ19hc3NlcnQgKGluZm8tPmJhc2UgPT0gaW5mby0+YmFzZV90ZXJtKTsKPiDC oAo+IMKgwqAgcnR4IHBsdXMgPSBYRVhQICgqaW5mby0+aW5uZXIsIDEpOwo+IC3CoCBnY2NfYXNz ZXJ0IChHRVRfQ09ERSAocGx1cykgPT0gUExVUyk7Cj4gK8KgIGdjY19hc3NlcnQgKFBMVVNfUCAo cGx1cykpOwo+IMKgCj4gwqDCoCBpbmZvLT5iYXNlX3Rlcm0yID0gJlhFWFAgKHBsdXMsIDApOwo+ IMKgwqAgZ2NjX2NoZWNraW5nX2Fzc2VydCAocnR4X2VxdWFsX3AgKCppbmZvLT5iYXNlX3Rlcm0s ICppbmZvLQo+ID5iYXNlX3Rlcm0yKSk7Cj4gQEAgLTY2MTcsNyArNjYxMyw3IEBAIHN0YXRpYyBy dHggKioKPiDCoGV4dHJhY3RfcGx1c19vcGVyYW5kcyAocnR4ICpsb2MsIHJ0eCAqKnB0ciwgcnR4 ICoqZW5kKQo+IMKgewo+IMKgwqAgcnR4IHggPSAqbG9jOwo+IC3CoCBpZiAoR0VUX0NPREUgKHgp ID09IFBMVVMpCj4gK8KgIGlmIChQTFVTX1AgKHgpKQo+IMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKg wqAgcHRyID0gZXh0cmFjdF9wbHVzX29wZXJhbmRzICgmWEVYUCAoeCwgMCksIHB0ciwgZW5kKTsK PiDCoMKgwqDCoMKgwqAgcHRyID0gZXh0cmFjdF9wbHVzX29wZXJhbmRzICgmWEVYUCAoeCwgMSks IHB0ciwgZW5kKTsKPiBAQCAtNjgwOCw4ICs2ODA0LDcgQEAgSE9TVF9XSURFX0lOVAo+IMKgZ2V0 X2luZGV4X3NjYWxlIChjb25zdCBzdHJ1Y3QgYWRkcmVzc19pbmZvICppbmZvKQo+IMKgewo+IMKg wqAgcnR4IGluZGV4ID0gKmluZm8tPmluZGV4Owo+IC3CoCBpZiAoR0VUX0NPREUgKGluZGV4KSA9 PSBNVUxUCj4gLcKgwqDCoMKgwqAgJiYgQ09OU1RfSU5UX1AgKFhFWFAgKGluZGV4LCAxKSkKPiAr wqAgaWYgKE1VTFRfUCAoaW5kZXgpICYmIENPTlNUX0lOVF9QIChYRVhQIChpbmRleCwgMSkpCj4g wqDCoMKgwqDCoMKgICYmIGluZm8tPmluZGV4X3Rlcm0gPT0gJlhFWFAgKGluZGV4LCAwKSkKPiDC oMKgwqDCoCByZXR1cm4gSU5UVkFMIChYRVhQIChpbmRleCwgMSkpOwo+IMKgCj4gZGlmZiAtLWdp dCBhL2djYy9zY2hlZC1kZXBzLmNjIGIvZ2NjL3NjaGVkLWRlcHMuY2MKPiBpbmRleCA5NDhhYTBj M2I2MC4uM2RkMDVjYzdiNmEgMTAwNjQ0Cj4gLS0tIGEvZ2NjL3NjaGVkLWRlcHMuY2MKPiArKysg Yi9nY2Mvc2NoZWQtZGVwcy5jYwo+IEBAIC0zNDM5LDkgKzM0MzksNyBAQCBzY2hlZF9hbmFseXpl X2luc24gKGNsYXNzIGRlcHNfZGVzYyAqZGVwcywgcnR4Cj4geCwgcnR4X2luc24gKmluc24pCj4g wqDCoMKgwqDCoMKgIHRtcCA9IFNFVF9TUkMgKHNldCk7Cj4gwqDCoMKgwqDCoMKgIGlmIChHRVRf Q09ERSAodG1wKSA9PSBTVUJSRUcpCj4gwqDCoMKgwqDCoMKgwqDCoHRtcCA9IFNVQlJFR19SRUcg KHRtcCk7Cj4gLcKgwqDCoMKgwqAgaWYgKChHRVRfQ09ERSAodG1wKSA9PSBQTFVTCj4gLcKgwqDC oMKgwqDCoMKgwqDCoCB8fCBHRVRfQ09ERSAodG1wKSA9PSBNSU5VUykKPiAtwqDCoMKgwqDCoMKg wqDCoCAmJiBSRUdfUCAoWEVYUCAodG1wLCAwKSkKPiArwqDCoMKgwqDCoCBpZiAoKFBMVVNfUCAo dG1wKSB8fCBNSU5VU19QICh0bXApKSAmJiBSRUdfUCAoWEVYUCAodG1wLCAwKSkKPiDCoMKgwqDC oMKgwqDCoMKgwqAgJiYgUkVHTk8gKFhFWFAgKHRtcCwgMCkpID09IFNUQUNLX1BPSU5URVJfUkVH TlVNCj4gwqDCoMKgwqDCoMKgwqDCoMKgICYmIGRlc3RfcmVnbm8gPT0gU1RBQ0tfUE9JTlRFUl9S RUdOVU0pCj4gwqDCoMKgwqDCoMKgwqDCoHNyY19yZWdubyA9IFNUQUNLX1BPSU5URVJfUkVHTlVN Owo+IEBAIC00ODY3LDEyICs0ODY1LDEyIEBAIGZpbmRfbWVtIChzdHJ1Y3QgbWVtX2luY19pbmZv ICptaWksIHJ0eAo+ICphZGRyZXNzX29mX3gpCj4gwqDCoMKgwqDCoMKgIG1paS0+bWVtX2xvYyA9 IGFkZHJlc3Nfb2ZfeDsKPiDCoMKgwqDCoMKgwqAgbWlpLT5tZW1faW5kZXggPSBOVUxMX1JUWDsK PiDCoMKgwqDCoMKgwqAgbWlpLT5tZW1fY29uc3RhbnQgPSAwOwo+IC3CoMKgwqDCoMKgIGlmIChH RVRfQ09ERSAocmVnMCkgPT0gUExVUyAmJiBDT05TVF9JTlRfUCAoWEVYUCAocmVnMCwgMSkpKQo+ ICvCoMKgwqDCoMKgIGlmIChQTFVTX1AgKHJlZzApICYmIENPTlNUX0lOVF9QIChYRVhQIChyZWcw LCAxKSkpCj4gwqDCoMKgwqDCoMKgwqDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgbWlpLT5tZW1f Y29uc3RhbnQgPSBJTlRWQUwgKFhFWFAgKHJlZzAsIDEpKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqAg cmVnMCA9IFhFWFAgKHJlZzAsIDApOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gLcKgwqDCoMKgwqAg aWYgKEdFVF9DT0RFIChyZWcwKSA9PSBQTFVTKQo+ICvCoMKgwqDCoMKgIGlmIChQTFVTX1AgKHJl ZzApKQo+IMKgwqDCoMKgwqDCoMKgwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIG1paS0+bWVtX2lu ZGV4ID0gWEVYUCAocmVnMCwgMSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJlZzAgPSBYRVhQIChy ZWcwLCAwKTsKPiBkaWZmIC0tZ2l0IGEvZ2NjL3NpbXBsaWZ5LXJ0eC5jYyBiL2djYy9zaW1wbGlm eS1ydHguY2MKPiBpbmRleCBmYzBkNmMzY2EyYS4uZGM3MzgzYTM4ZTMgMTAwNjQ0Cj4gLS0tIGEv Z2NjL3NpbXBsaWZ5LXJ0eC5jYwo+ICsrKyBiL2djYy9zaW1wbGlmeS1ydHguY2MKPiBAQCAtNjQz LDExICs2NDMsOCBAQCBzaW1wbGlmeV9jb250ZXh0OjpzaW1wbGlmeV90cnVuY2F0aW9uCj4gKG1h Y2hpbmVfbW9kZSBtb2RlLCBydHggb3AsCj4gwqDCoCAvKiBJZiB0aGUgbWFjaGluZSBjYW4gcGVy Zm9ybSBvcGVyYXRpb25zIGluIHRoZSB0cnVuY2F0ZWQgbW9kZSwKPiBkaXN0cmlidXRlCj4gwqDC oMKgwqDCoCB0aGUgdHJ1bmNhdGlvbiwgaS5lLiBzaW1wbGlmeSAodHJ1bmNhdGU6UUkgKG9wOlNJ ICh4OlNJKQo+ICh5OlNJKSkpIGludG8KPiDCoMKgwqDCoMKgIChvcDpRSSAodHJ1bmNhdGU6UUkg KHg6U0kpKSAodHJ1bmNhdGU6UUkgKHk6U0kpKSkuwqAgKi8KPiAtwqAgaWYgKDEKPiAtwqDCoMKg wqDCoCAmJiAoIVdPUkRfUkVHSVNURVJfT1BFUkFUSU9OUyB8fCBwcmVjaXNpb24gPj0gQklUU19Q RVJfV09SRCkKPiAtwqDCoMKgwqDCoCAmJiAoR0VUX0NPREUgKG9wKSA9PSBQTFVTCj4gLcKgwqDC oMKgwqDCoMKgwqAgfHwgR0VUX0NPREUgKG9wKSA9PSBNSU5VUwo+IC3CoMKgwqDCoMKgwqDCoMKg IHx8IEdFVF9DT0RFIChvcCkgPT0gTVVMVCkpCj4gK8KgIGlmICgxICYmICghV09SRF9SRUdJU1RF Ul9PUEVSQVRJT05TIHx8IHByZWNpc2lvbiA+PSBCSVRTX1BFUl9XT1JEKQo+ICvCoMKgwqDCoMKg ICYmIChQTFVTX1AgKG9wKSB8fCBNSU5VU19QIChvcCkgfHwgTVVMVF9QIChvcCkpKQo+IMKgwqDC oMKgIHsKPiDCoMKgwqDCoMKgwqAgcnR4IG9wMCA9IHNpbXBsaWZ5X2dlbl91bmFyeSAoVFJVTkNB VEUsIG1vZGUsIFhFWFAgKG9wLCAwKSwKPiBvcF9tb2RlKTsKPiDCoMKgwqDCoMKgwqAgaWYgKG9w MCkKPiBAQCAtOTQ3LDggKzk0NCw3IEBAIHNpbXBsaWZ5X2NvbnRleHQ6OnNpbXBsaWZ5X3VuYXJ5 X29wZXJhdGlvbl8xCj4gKHJ0eF9jb2RlIGNvZGUsIG1hY2hpbmVfbW9kZSBtb2RlLAo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgWEVYUCAob3AsIDApLCBYRVhQIChvcCwgMSkpOwo+IMKgCj4gwqDC oMKgwqDCoMKgIC8qIChub3QgKHBsdXMgWCAtMSkpIGNhbiBiZWNvbWUgKG5lZyBYKS7CoCAqLwo+ IC3CoMKgwqDCoMKgIGlmIChHRVRfQ09ERSAob3ApID09IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDC oCAmJiBYRVhQIChvcCwgMSkgPT0gY29uc3RtMV9ydHgpCj4gK8KgwqDCoMKgwqAgaWYgKFBMVVNf UCAob3ApICYmIFhFWFAgKG9wLCAxKSA9PSBjb25zdG0xX3J0eCkKPiDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIHNpbXBsaWZ5X2dlbl91bmFyeSAoTkVHLCBtb2RlLCBYRVhQIChvcCwgMCksIG1vZGUp Owo+IMKgCj4gwqDCoMKgwqDCoMKgIC8qIFNpbWlsYXJseSwgKG5vdCAobmVnIFgpKSBpcyAocGx1 cyBYIC0xKS7CoCBPbmx5IGRvIHRoaXMgZm9yCj4gQEAgLTk2NiwxNCArOTYyLDEyIEBAIHNpbXBs aWZ5X2NvbnRleHQ6OnNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbl8xCj4gKHJ0eF9jb2RlIGNvZGUs IG1hY2hpbmVfbW9kZSBtb2RlLAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gc2ltcGxpZnlfZ2Vu X2JpbmFyeSAoWE9SLCBtb2RlLCBYRVhQIChvcCwgMCksIHRlbXApOwo+IMKgCj4gwqDCoMKgwqDC oMKgIC8qIChub3QgKHBsdXMgWCBDKSkgZm9yIHNpZ25iaXQgQyBpcyAoeG9yIFggRCkgd2l0aCBE ID0gfkMuwqAKPiAqLwo+IC3CoMKgwqDCoMKgIGlmIChHRVRfQ09ERSAob3ApID09IFBMVVMKPiAt wqDCoMKgwqDCoMKgwqDCoCAmJiBDT05TVF9JTlRfUCAoWEVYUCAob3AsIDEpKQo+ICvCoMKgwqDC oMKgIGlmIChQTFVTX1AgKG9wKSAmJiBDT05TVF9JTlRfUCAoWEVYUCAob3AsIDEpKQo+IMKgwqDC oMKgwqDCoMKgwqDCoCAmJiBtb2RlX3NpZ25iaXRfcCAobW9kZSwgWEVYUCAob3AsIDEpKQo+IC3C oMKgwqDCoMKgwqDCoMKgICYmICh0ZW1wID0gc2ltcGxpZnlfdW5hcnlfb3BlcmF0aW9uIChOT1Qs IG1vZGUsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBYRVhQIChvcCwgMSks IG1vZGUpKQo+ICE9IDApCj4gK8KgwqDCoMKgwqDCoMKgwqAgJiYgKHRlbXAgPSBzaW1wbGlmeV91 bmFyeV9vcGVyYXRpb24gKE5PVCwgbW9kZSwgWEVYUCAob3AsCj4gMSksIG1vZGUpKQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAhPSAwKQo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gc2lt cGxpZnlfZ2VuX2JpbmFyeSAoWE9SLCBtb2RlLCBYRVhQIChvcCwgMCksIHRlbXApOwo+IMKgCj4g LQo+IMKgwqDCoMKgwqDCoCAvKiAobm90IChhc2hpZnQgMSBYKSkgaXMgKHJvdGF0ZSB+MSBYKS7C oCBXZSB1c2VkIHRvIGRvIHRoaXMKPiBmb3IKPiDCoMKgwqDCoMKgwqDCoMKgIG9wZXJhbmRzIG90 aGVyIHRoYW4gMSwgYnV0IHRoYXQgaXMgbm90IHZhbGlkLsKgIFdlIGNvdWxkIGRvIGEKPiDCoMKg wqDCoMKgwqDCoMKgIHNpbWlsYXIgc2ltcGxpZmljYXRpb24gZm9yIChub3QgKGxzaGlmdHJ0IEMg WCkpIHdoZXJlIEMgaXMKPiBAQCAtMTA3OSw4ICsxMDczLDcgQEAgc2ltcGxpZnlfY29udGV4dDo6 c2ltcGxpZnlfdW5hcnlfb3BlcmF0aW9uXzEKPiAocnR4X2NvZGUgY29kZSwgbWFjaGluZV9tb2Rl IG1vZGUsCj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IMKgwqDCoMKgwqDCoCAvKiAobmVnIChw bHVzIFggMSkpIGNhbiBiZWNvbWUgKG5vdCBYKS7CoCAqLwo+IC3CoMKgwqDCoMKgIGlmIChHRVRf Q09ERSAob3ApID09IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDCoCAmJiBYRVhQIChvcCwgMSkgPT0g Y29uc3QxX3J0eCkKPiArwqDCoMKgwqDCoCBpZiAoUExVU19QIChvcCkgJiYgWEVYUCAob3AsIDEp ID09IGNvbnN0MV9ydHgpCj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBzaW1wbGlmeV9nZW5fdW5h cnkgKE5PVCwgbW9kZSwgWEVYUCAob3AsIDApLCBtb2RlKTsKPiDCoAo+IMKgwqDCoMKgwqDCoCAv KiBTaW1pbGFybHksIChuZWcgKG5vdCBYKSkgaXMgKHBsdXMgWCAxKS7CoCAqLwo+IEBAIC0xMDkz LDEzICsxMDg2LDExIEBAIHNpbXBsaWZ5X2NvbnRleHQ6OnNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlv bl8xCj4gKHJ0eF9jb2RlIGNvZGUsIG1hY2hpbmVfbW9kZSBtb2RlLAo+IMKgwqDCoMKgwqDCoMKg wqAgYm90aCArMCwgKG1pbnVzIFkgWCkgaXMgdGhlIHNhbWUgYXMgKG1pbnVzIFggWSkuwqAgSWYg dGhlCj4gwqDCoMKgwqDCoMKgwqDCoCByb3VuZGluZyBtb2RlIGlzIHRvd2FyZHMgK2luZmluaXR5 IChvciAtaW5maW5pdHkpIHRoZW4gdGhlCj4gdHdvCj4gwqDCoMKgwqDCoMKgwqDCoCBleHByZXNz aW9ucyB3aWxsIGJlIHJvdW5kZWQgZGlmZmVyZW50bHkuwqAgKi8KPiAtwqDCoMKgwqDCoCBpZiAo R0VUX0NPREUgKG9wKSA9PSBNSU5VUwo+IC3CoMKgwqDCoMKgwqDCoMKgICYmICFIT05PUl9TSUdO RURfWkVST1MgKG1vZGUpCj4gK8KgwqDCoMKgwqAgaWYgKE1JTlVTX1AgKG9wKSAmJiAhSE9OT1Jf U0lHTkVEX1pFUk9TIChtb2RlKQo+IMKgwqDCoMKgwqDCoMKgwqDCoCAmJiAhSE9OT1JfU0lHTl9E RVBFTkRFTlRfUk9VTkRJTkcgKG1vZGUpKQo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gc2ltcGxp ZnlfZ2VuX2JpbmFyeSAoTUlOVVMsIG1vZGUsIFhFWFAgKG9wLCAxKSwgWEVYUAo+IChvcCwgMCkp Owo+IMKgCj4gLcKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFIChvcCkgPT0gUExVUwo+IC3CoMKgwqDC oMKgwqDCoMKgICYmICFIT05PUl9TSUdORURfWkVST1MgKG1vZGUpCj4gK8KgwqDCoMKgwqAgaWYg KFBMVVNfUCAob3ApICYmICFIT05PUl9TSUdORURfWkVST1MgKG1vZGUpCj4gwqDCoMKgwqDCoMKg wqDCoMKgICYmICFIT05PUl9TSUdOX0RFUEVOREVOVF9ST1VORElORyAobW9kZSkpCj4gwqDCoMKg wqDCoMKgwqDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgLyogKG5lZyAocGx1cyBBIEMpKSBpcyBz aW1wbGlmaWVkIHRvIChtaW51cyAtQyBBKS7CoCAqLwo+IEBAIC0xMTE4LDggKzExMDksNyBAQCBz aW1wbGlmeV9jb250ZXh0OjpzaW1wbGlmeV91bmFyeV9vcGVyYXRpb25fMQo+IChydHhfY29kZSBj b2RlLCBtYWNoaW5lX21vZGUgbW9kZSwKPiDCoAo+IMKgwqDCoMKgwqDCoCAvKiAobmVnIChtdWx0 IEEgQikpIGJlY29tZXMgKG11bHQgQSAobmVnIEIpKS4KPiDCoMKgwqDCoMKgwqDCoMKgIFRoaXMg d29ya3MgZXZlbiBmb3IgZmxvYXRpbmctcG9pbnQgdmFsdWVzLsKgICovCj4gLcKgwqDCoMKgwqAg aWYgKEdFVF9DT0RFIChvcCkgPT0gTVVMVAo+IC3CoMKgwqDCoMKgwqDCoMKgICYmICFIT05PUl9T SUdOX0RFUEVOREVOVF9ST1VORElORyAobW9kZSkpCj4gK8KgwqDCoMKgwqAgaWYgKE1VTFRfUCAo b3ApICYmICFIT05PUl9TSUdOX0RFUEVOREVOVF9ST1VORElORyAobW9kZSkpCj4gwqDCoMKgwqDC oMKgwqDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgdGVtcCA9IHNpbXBsaWZ5X2dlbl91bmFyeSAo TkVHLCBtb2RlLCBYRVhQIChvcCwgMSksIG1vZGUpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gc2ltcGxpZnlfZ2VuX2JpbmFyeSAoTVVMVCwgbW9kZSwgWEVYUCAob3AsIDApLAo+IHRlbXAp Owo+IEBAIC0xMjA5LDggKzExOTksNyBAQCBzaW1wbGlmeV9jb250ZXh0OjpzaW1wbGlmeV91bmFy eV9vcGVyYXRpb25fMQo+IChydHhfY29kZSBjb2RlLCBtYWNoaW5lX21vZGUgbW9kZSwKPiDCoMKg wqDCoCBjYXNlIFRSVU5DQVRFOgo+IMKgwqDCoMKgwqDCoCAvKiBEb24ndCBvcHRpbWl6ZSAobHNo aWZ0cnQgKG11bHQgLi4uKSkgYXMgaXQgd291bGQgaW50ZXJmZXJlCj4gwqDCoMKgwqDCoMKgwqDC oCB3aXRoIHRoZSB1bXVsWGkzX2hpZ2hwYXJ0IHBhdHRlcm5zLsKgICovCj4gLcKgwqDCoMKgwqAg aWYgKEdFVF9DT0RFIChvcCkgPT0gTFNISUZUUlQKPiAtwqDCoMKgwqDCoMKgwqDCoCAmJiBHRVRf Q09ERSAoWEVYUCAob3AsIDApKSA9PSBNVUxUKQo+ICvCoMKgwqDCoMKgIGlmIChHRVRfQ09ERSAo b3ApID09IExTSElGVFJUICYmIE1VTFRfUCAoWEVYUCAob3AsIDApKSkKPiDCoMKgwqDCoMKgwqDC oMKgYnJlYWs7Cj4gwqAKPiDCoMKgwqDCoMKgwqAgaWYgKEdFVF9NT0RFX0NMQVNTIChtb2RlKSA9 PSBNT0RFX1BBUlRJQUxfSU5UKQo+IEBAIC0xNDgyLDE2ICsxNDcxLDE1IEBAIHNpbXBsaWZ5X2Nv bnRleHQ6OnNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbl8xCj4gKHJ0eF9jb2RlIGNvZGUsIG1hY2hp bmVfbW9kZSBtb2RlLAo+IMKgwqDCoMKgwqDCoMKgwqAgYmVjb21lcyBqdXN0IHRoZSBNSU5VUyBp ZiBpdHMgbW9kZSBpcyBNT0RFLsKgIFRoaXMgYWxsb3dzCj4gwqDCoMKgwqDCoMKgwqDCoCBmb2xk aW5nIHN3aXRjaCBzdGF0ZW1lbnRzIG9uIG1hY2hpbmVzIHVzaW5nIGNhc2VzaSAoc3VjaCBhcwo+ IMKgwqDCoMKgwqDCoMKgwqAgdGhlIFZBWCkuwqAgKi8KPiAtwqDCoMKgwqDCoCBpZiAoR0VUX0NP REUgKG9wKSA9PSBUUlVOQ0FURQo+IC3CoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9NT0RFIChYRVhQ IChvcCwgMCkpID09IG1vZGUKPiAtwqDCoMKgwqDCoMKgwqDCoCAmJiBHRVRfQ09ERSAoWEVYUCAo b3AsIDApKSA9PSBNSU5VUwo+ICvCoMKgwqDCoMKgIGlmIChHRVRfQ09ERSAob3ApID09IFRSVU5D QVRFICYmIEdFVF9NT0RFIChYRVhQIChvcCwgMCkpID09Cj4gbW9kZQo+ICvCoMKgwqDCoMKgwqDC oMKgICYmIE1JTlVTX1AgKFhFWFAgKG9wLCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VU X0NPREUgKFhFWFAgKFhFWFAgKG9wLCAwKSwgMCkpID09IExBQkVMX1JFRgo+IMKgwqDCoMKgwqDC oMKgwqDCoCAmJiBHRVRfQ09ERSAoWEVYUCAoWEVYUCAob3AsIDApLCAxKSkgPT0gTEFCRUxfUkVG KQo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gWEVYUCAob3AsIDApOwo+IMKgCj4gwqDCoMKgwqDC oMKgIC8qIEV4dGVuZGluZyBhIHdpZGVuaW5nIG11bHRpcGxpY2F0aW9uIHNob3VsZCBiZSBjYW5v bmljYWxpemVkCj4gdG8KPiDCoMKgwqDCoMKgwqDCoMKgIGEgd2lkZXIgd2lkZW5pbmcgbXVsdGlw bGljYXRpb24uwqAgKi8KPiAtwqDCoMKgwqDCoCBpZiAoR0VUX0NPREUgKG9wKSA9PSBNVUxUKQo+ ICvCoMKgwqDCoMKgIGlmIChNVUxUX1AgKG9wKSkKPiDCoMKgwqDCoMKgwqDCoMKgewo+IMKgwqDC oMKgwqDCoMKgwqDCoCBydHggbGhzID0gWEVYUCAob3AsIDApOwo+IMKgwqDCoMKgwqDCoMKgwqDC oCBydHggcmhzID0gWEVYUCAob3AsIDEpOwo+IEBAIC0xNzE3LDcgKzE3MDUsNyBAQCBzaW1wbGlm eV9jb250ZXh0OjpzaW1wbGlmeV91bmFyeV9vcGVyYXRpb25fMQo+IChydHhfY29kZSBjb2RlLCBt YWNoaW5lX21vZGUgbW9kZSwKPiDCoAo+IMKgwqDCoMKgwqDCoCAvKiBFeHRlbmRpbmcgYSB3aWRl bmluZyBtdWx0aXBsaWNhdGlvbiBzaG91bGQgYmUgY2Fub25pY2FsaXplZAo+IHRvCj4gwqDCoMKg wqDCoMKgwqDCoCBhIHdpZGVyIHdpZGVuaW5nIG11bHRpcGxpY2F0aW9uLsKgICovCj4gLcKgwqDC oMKgwqAgaWYgKEdFVF9DT0RFIChvcCkgPT0gTVVMVCkKPiArwqDCoMKgwqDCoCBpZiAoTVVMVF9Q IChvcCkpCj4gwqDCoMKgwqDCoMKgwqDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgcnR4IGxocyA9 IFhFWFAgKG9wLCAwKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgcnR4IHJocyA9IFhFWFAgKG9wLCAx KTsKPiBAQCAtMjgwMyw4ICsyNzkxLDcgQEAgc2ltcGxpZnlfY29udGV4dDo6c2ltcGxpZnlfYmlu YXJ5X29wZXJhdGlvbl8xCj4gKHJ0eF9jb2RlIGNvZGUsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY29lZmYwID0gd2k6Om1pbnVzX29uZSAoR0VUX01PREVfUFJFQ0lTSU9OIChpbnRfbW9k ZSkpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxocyA9IFhFWFAgKGxocywgMCk7Cj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gLcKgwqDCoMKgwqDCoMKgwqAgZWxzZSBpZiAoR0VU X0NPREUgKGxocykgPT0gTVVMVAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICYmIENPTlNUX1NDQUxBUl9JTlRfUCAoWEVYUCAobGhzLCAxKSkpCj4gK8KgwqDCoMKgwqDCoMKg wqAgZWxzZSBpZiAoTVVMVF9QIChsaHMpICYmIENPTlNUX1NDQUxBUl9JTlRfUCAoWEVYUCAobGhz LAo+IDEpKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjb2VmZjAgPSBydHhfbW9kZV90IChYRVhQIChsaHMsIDEpLCBpbnRfbW9kZSk7Cj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGhzID0gWEVYUCAobGhzLCAwKTsKPiBAQCAtMjgy NCw4ICsyODExLDcgQEAgc2ltcGxpZnlfY29udGV4dDo6c2ltcGxpZnlfYmluYXJ5X29wZXJhdGlv bl8xCj4gKHJ0eF9jb2RlIGNvZGUsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29lZmYx ID0gd2k6Om1pbnVzX29uZSAoR0VUX01PREVfUFJFQ0lTSU9OIChpbnRfbW9kZSkpOwo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJocyA9IFhFWFAgKHJocywgMCk7Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB9Cj4gLcKgwqDCoMKgwqDCoMKgwqAgZWxzZSBpZiAoR0VUX0NPREUgKHJocykg PT0gTVVMVAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIENPTlNUX0lO VF9QIChYRVhQIChyaHMsIDEpKSkKPiArwqDCoMKgwqDCoMKgwqDCoCBlbHNlIGlmIChNVUxUX1Ag KHJocykgJiYgQ09OU1RfSU5UX1AgKFhFWFAgKHJocywgMSkpKQo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvZWZmMSA9IHJ0eF9tb2RlX3Qg KFhFWFAgKHJocywgMSksIGludF9tb2RlKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy aHMgPSBYRVhQIChyaHMsIDApOwo+IEBAIC0yODU2LDMyICsyODQyLDMyIEBAIHNpbXBsaWZ5X2Nv bnRleHQ6OnNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb25fMQo+IChydHhfY29kZSBjb2RlLAo+IMKg wqDCoMKgwqDCoMKgwqDCoCAvKiBPcHRpbWl6ZSAoWCAtIDEpICogWSArIFkgdG8gWCAqIFkuwqAg Ki8KPiDCoMKgwqDCoMKgwqDCoMKgwqAgbGhzID0gb3AwOwo+IMKgwqDCoMKgwqDCoMKgwqDCoCBy aHMgPSBvcDE7Cj4gLcKgwqDCoMKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFIChvcDApID09IE1VTFQp Cj4gK8KgwqDCoMKgwqDCoMKgwqAgaWYgKE1VTFRfUCAob3AwKSkKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgoKEdFVF9DT0RFIChYRVhQ IChvcDAsIDApKSA9PSBQTFVTCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoKChQTFVT X1AgKFhFWFAgKG9wMCwgMCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJiYgWEVYUCAoWEVYUCAob3AwLCAwKSwgMSkgPT0gY29uc3RtMV9ydHgpCj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgKEdFVF9DT0RFIChYRVhQIChvcDAsIDApKSA9 PSBNSU5VUwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IChNSU5VU19Q IChYRVhQIChvcDAsIDApKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICYmIFhFWFAgKFhFWFAgKG9wMCwgMCksIDEpID09IGNvbnN0MV9ydHgpKQo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgcnR4X2VxdWFsX3AgKFhFWFAgKG9wMCwg MSksIG9wMSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaHMgPSBYRVhQIChY RVhQIChvcDAsIDApLCAwKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKCgo R0VUX0NPREUgKFhFWFAgKG9wMCwgMSkpID09IFBMVVMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGVsc2UgaWYgKCgoUExVU19QIChYRVhQIChvcDAsIDEpKQo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBYRVhQIChYRVhQIChvcDAsIDEpLCAx KSA9PSBjb25zdG0xX3J0eCkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHx8IChHRVRfQ09ERSAoWEVYUCAob3AwLCAxKSkgPT0gTUlOVVMKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHx8IChNSU5VU19QIChYRVhQ IChvcDAsIDEpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmJiBYRVhQIChYRVhQIChvcDAsIDEpLCAxKSA9PQo+IGNvbnN0MV9ydHgpKQo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIHJ0eF9lcXVh bF9wIChYRVhQIChvcDAsIDApLCBvcDEpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgbGhzID0gWEVYUCAoWEVYUCAob3AwLCAxKSwgMCk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB9Cj4gLcKgwqDCoMKgwqDCoMKgwqAgZWxzZSBpZiAoR0VUX0NPREUgKG9wMSkgPT0gTVVMVCkK PiArwqDCoMKgwqDCoMKgwqDCoCBlbHNlIGlmIChNVUxUX1AgKG9wMSkpCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoKChHRVRfQ09ERSAo WEVYUCAob3AxLCAwKSkgPT0gUExVUwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCgo UExVU19QIChYRVhQIChvcDEsIDApKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICYmIFhFWFAgKFhFWFAgKG9wMSwgMCksIDEpID09IGNvbnN0bTFfcnR4KQo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IChHRVRfQ09ERSAoWEVYUCAob3AxLCAw KSkgPT0gTUlOVVMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCAoTUlO VVNfUCAoWEVYUCAob3AxLCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmJiBYRVhQIChYRVhQIChvcDEsIDApLCAxKSA9PSBjb25zdDFfcnR4KSkKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIHJ0eF9lcXVhbF9wIChYRVhQIChv cDEsIDEpLCBvcDApKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmhzID0gWEVY UCAoWEVYUCAob3AxLCAwKSwgMCk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlIGlm ICgoKEdFVF9DT0RFIChYRVhQIChvcDEsIDEpKSA9PSBQTFVTCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBlbHNlIGlmICgoKFBMVVNfUCAoWEVYUCAob3AxLCAxKSkKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgWEVYUCAoWEVYUCAob3AxLCAx KSwgMSkgPT0gY29uc3RtMV9ydHgpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB8fCAoR0VUX0NPREUgKFhFWFAgKG9wMSwgMSkpID09IE1JTlVTCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8fCAoTUlOVVNfUCAo WEVYUCAob3AxLCAxKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJiYgWEVYUCAoWEVYUCAob3AxLCAxKSwgMSkgPT0KPiBjb25zdDFfcnR4 KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBydHhf ZXF1YWxfcCAoWEVYUCAob3AxLCAwKSwgb3AwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJocyA9IFhFWFAgKFhFWFAgKG9wMSwgMSksIDApOwo+IEBAIC0yOTAwLDggKzI4ODYs NyBAQCBzaW1wbGlmeV9jb250ZXh0OjpzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uXzEKPiAocnR4 X2NvZGUgY29kZSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIFhFWFAgKG9wMCwKPiAxKSkpOwo+IMKgCj4gwqDCoMKgwqDCoMKgIC8qIENh bm9uaWNhbGl6ZSAocGx1cyAobXVsdCAobmVnIEIpIEMpIEEpIHRvIChtaW51cyBBIChtdWx0IEIK PiBDKSkuwqAgKi8KPiAtwqDCoMKgwqDCoCBpZiAoIUhPTk9SX1NJR05fREVQRU5ERU5UX1JPVU5E SU5HIChtb2RlKQo+IC3CoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChvcDApID09IE1VTFQK PiArwqDCoMKgwqDCoCBpZiAoIUhPTk9SX1NJR05fREVQRU5ERU5UX1JPVU5ESU5HIChtb2RlKSAm JiBNVUxUX1AgKG9wMCkKPiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhFWFAgKG9w MCwgMCkpID09IE5FRykKPiDCoMKgwqDCoMKgwqDCoMKgewo+IMKgwqDCoMKgwqDCoMKgwqDCoCBy dHggaW4xLCBpbjI7Cj4gQEAgLTMwMjIsOCArMzAwNyw3IEBAIHNpbXBsaWZ5X2NvbnRleHQ6OnNp bXBsaWZ5X2JpbmFyeV9vcGVyYXRpb25fMQo+IChydHhfY29kZSBjb2RlLAo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGNvZWZmMCA9IHdpOjptaW51c19vbmUgKEdFVF9NT0RFX1BSRUNJU0lP TiAoaW50X21vZGUpKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsaHMgPSBYRVhQIChs aHMsIDApOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+IC3CoMKgwqDCoMKgwqDCoMKgIGVs c2UgaWYgKEdFVF9DT0RFIChsaHMpID09IE1VTFQKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmJiBDT05TVF9TQ0FMQVJfSU5UX1AgKFhFWFAgKGxocywgMSkpKQo+ICvCoMKg wqDCoMKgwqDCoMKgIGVsc2UgaWYgKE1VTFRfUCAobGhzKSAmJiBDT05TVF9TQ0FMQVJfSU5UX1Ag KFhFWFAgKGxocywKPiAxKSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY29lZmYwID0gcnR4X21vZGVfdCAoWEVYUCAobGhzLCAxKSwgaW50 X21vZGUpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxocyA9IFhFWFAgKGxocywgMCk7 Cj4gQEAgLTMwNDMsOCArMzAyNyw3IEBAIHNpbXBsaWZ5X2NvbnRleHQ6OnNpbXBsaWZ5X2JpbmFy eV9vcGVyYXRpb25fMQo+IChydHhfY29kZSBjb2RlLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIG5lZ2NvZWZmMSA9IHdpOjpvbmUgKEdFVF9NT0RFX1BSRUNJU0lPTiAoaW50X21vZGUpKTsK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByaHMgPSBYRVhQIChyaHMsIDApOwo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfQo+IC3CoMKgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKEdFVF9DT0RF IChyaHMpID09IE1VTFQKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBD T05TVF9JTlRfUCAoWEVYUCAocmhzLCAxKSkpCj4gK8KgwqDCoMKgwqDCoMKgwqAgZWxzZSBpZiAo TVVMVF9QIChyaHMpICYmIENPTlNUX0lOVF9QIChYRVhQIChyaHMsIDEpKSkKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuZWdjb2VmZjEgPSB3 aTo6bmVnIChydHhfbW9kZV90IChYRVhQIChyaHMsIDEpLAo+IGludF9tb2RlKSk7Cj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmhzID0gWEVYUCAocmhzLCAwKTsKPiBAQCAtMzA3NSwxNyAr MzA1OCwxNyBAQCBzaW1wbGlmeV9jb250ZXh0OjpzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uXzEK PiAocnR4X2NvZGUgY29kZSwKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBPcHRpbWl6ZSAo WCArIDEpICogWSAtIFkgdG8gWCAqIFkuwqAgKi8KPiDCoMKgwqDCoMKgwqDCoMKgwqAgbGhzID0g b3AwOwo+IC3CoMKgwqDCoMKgwqDCoMKgIGlmIChHRVRfQ09ERSAob3AwKSA9PSBNVUxUKQo+ICvC oMKgwqDCoMKgwqDCoMKgIGlmIChNVUxUX1AgKG9wMCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoKChHRVRfQ09ERSAoWEVYUCAob3Aw LCAwKSkgPT0gUExVUwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCgoUExVU19QIChY RVhQIChvcDAsIDApKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYm IFhFWFAgKFhFWFAgKG9wMCwgMCksIDEpID09IGNvbnN0MV9ydHgpCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgKEdFVF9DT0RFIChYRVhQIChvcDAsIDApKSA9PSBNSU5V Uwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IChNSU5VU19QIChYRVhQ IChvcDAsIDApKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICYmIFhFWFAgKFhFWFAgKG9wMCwgMCksIDEpID09IGNvbnN0bTFfcnR4KSkKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIHJ0eF9lcXVhbF9wIChYRVhQIChvcDAsIDEpLCBv cDEpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGhzID0gWEVYUCAoWEVYUCAo b3AwLCAwKSwgMCk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlIGlmICgoKEdFVF9D T0RFIChYRVhQIChvcDAsIDEpKSA9PSBQTFVTCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBl bHNlIGlmICgoKFBMVVNfUCAoWEVYUCAob3AwLCAxKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgWEVYUCAoWEVYUCAob3AwLCAxKSwgMSkgPT0g Y29uc3QxX3J0eCkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHx8IChHRVRfQ09ERSAoWEVYUCAob3AwLCAxKSkgPT0gTUlOVVMKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHx8IChNSU5VU19QIChYRVhQIChvcDAs IDEpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAmJiBYRVhQIChYRVhQIChvcDAsIDEpLCAxKSA9PQo+IGNvbnN0bTFfcnR4KSkKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBydHhfZXF1YWxfcCAo WEVYUCAob3AwLCAwKSwgb3AxKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxo cyA9IFhFWFAgKFhFWFAgKG9wMCwgMSksIDApOwo+IEBAIC0zMTQ1LDggKzMxMjgsNyBAQCBzaW1w bGlmeV9jb250ZXh0OjpzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uXzEKPiAocnR4X2NvZGUgY29k ZSwKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldmVyc2VkOwo+IMKgCj4gwqDCoMKgwqDCoMKg IC8qIENhbm9uaWNhbGl6ZSAobWludXMgQSAobXVsdCAobmVnIEIpIEMpKSB0byAocGx1cyAobXVs dCBCIEMpCj4gQSkuwqAgKi8KPiAtwqDCoMKgwqDCoCBpZiAoIUhPTk9SX1NJR05fREVQRU5ERU5U X1JPVU5ESU5HIChtb2RlKQo+IC3CoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChvcDEpID09 IE1VTFQKPiArwqDCoMKgwqDCoCBpZiAoIUhPTk9SX1NJR05fREVQRU5ERU5UX1JPVU5ESU5HICht b2RlKSAmJiBNVUxUX1AgKG9wMSkKPiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhF WFAgKG9wMSwgMCkpID09IE5FRykKPiDCoMKgwqDCoMKgwqDCoMKgewo+IMKgwqDCoMKgwqDCoMKg wqDCoCBydHggaW4xLCBpbjI7Cj4gQEAgLTMxNjEsOCArMzE0Myw3IEBAIHNpbXBsaWZ5X2NvbnRl eHQ6OnNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb25fMQo+IChydHhfY29kZSBjb2RlLAo+IMKgCj4g wqDCoMKgwqDCoMKgIC8qIENhbm9uaWNhbGl6ZSAobWludXMgKG5lZyBBKSAobXVsdCBCIEMpKSB0 bwo+IMKgwqDCoMKgwqDCoMKgwqAgKG1pbnVzIChtdWx0IChuZWcgQikgQykgQSkuwqAgKi8KPiAt wqDCoMKgwqDCoCBpZiAoIUhPTk9SX1NJR05fREVQRU5ERU5UX1JPVU5ESU5HIChtb2RlKQo+IC3C oMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChvcDEpID09IE1VTFQKPiArwqDCoMKgwqDCoCBp ZiAoIUhPTk9SX1NJR05fREVQRU5ERU5UX1JPVU5ESU5HIChtb2RlKSAmJiBNVUxUX1AgKG9wMSkK PiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKG9wMCkgPT0gTkVHKQo+IMKgwqDCoMKg wqDCoMKgwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJ0eCBpbjEsIGluMjsKPiBAQCAtMzIwOCw5 ICszMTg5LDcgQEAgc2ltcGxpZnlfY29udGV4dDo6c2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbl8x Cj4gKHJ0eF9jb2RlIGNvZGUsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGp1c3QgbW92ZWQg dGhlIE5FRyB0byB0aGUgc2Vjb25kIG9wZXJhbmQsCj4gc2ltcGxpZnlfZ2VuX2JpbmFyeQo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiZWxvdyBjb3VsZCB0aHJvdWdoIHNpbXBsaWZ5X2Fzc29j aWF0aXZlX29wZXJhdGlvbiBtb3ZlCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRoZSBORUcg YXJvdW5kIGFnYWluIGFuZCByZWN1cnNlIGVuZGxlc3NseS7CoCAqLwo+IC3CoMKgwqDCoMKgwqDC oMKgIGlmICh0ZW1wCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBHRVRfQ09ERSAob3Ax KSA9PSBNVUxUCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBHRVRfQ09ERSAodGVtcCkg PT0gTVVMVAo+ICvCoMKgwqDCoMKgwqDCoMKgIGlmICh0ZW1wICYmIE1VTFRfUCAob3AxKSAmJiBN VUxUX1AgKHRlbXApCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgWEVYUCAob3AxLCAw KSA9PSBYRVhQICh0ZW1wLCAwKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9D T0RFIChYRVhQICh0ZW1wLCAxKSkgPT0gTkVHCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg JiYgWEVYUCAob3AxLCAxKSA9PSBYRVhQIChYRVhQICh0ZW1wLCAxKSwgMCkpCj4gQEAgLTMyMjUs OSArMzIwNCw3IEBAIHNpbXBsaWZ5X2NvbnRleHQ6OnNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb25f MQo+IChydHhfY29kZSBjb2RlLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBqdXN0IG1vdmVk IHRoZSBORUcgdG8gdGhlIHNlY29uZCBvcGVyYW5kLAo+IHNpbXBsaWZ5X2dlbl9iaW5hcnkKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmVsb3cgY291bGQgdGhyb3VnaCBzaW1wbGlmeV9hc3Nv Y2lhdGl2ZV9vcGVyYXRpb24gbW92ZQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0aGUgTkVH IGFyb3VuZCBhZ2FpbiBhbmQgcmVjdXJzZSBlbmRsZXNzbHkuwqAgKi8KPiAtwqDCoMKgwqDCoMKg wqDCoCBpZiAodGVtcAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKG9w MCkgPT0gTVVMVAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKHRlbXAp ID09IE1VTFQKPiArwqDCoMKgwqDCoMKgwqDCoCBpZiAodGVtcCAmJiBNVUxUX1AgKG9wMCkgJiYg TVVMVF9QICh0ZW1wKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIFhFWFAgKG9wMCwg MCkgPT0gWEVYUCAodGVtcCwgMCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiBHRVRf Q09ERSAoWEVYUCAodGVtcCwgMSkpID09IE5FRwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICYmIFhFWFAgKG9wMCwgMSkgPT0gWEVYUCAoWEVYUCAodGVtcCwgMSksIDApKQo+IEBAIC0zNDA1 LDExICszMzgyLDEwIEBAIHNpbXBsaWZ5X2NvbnRleHQ6OnNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRp b25fMQo+IChydHhfY29kZSBjb2RlLAo+IMKgwqDCoMKgwqDCoMKgwqAgdGhlIElPUiBhcyBhIFBM VVMgYW5kIHdlIGNhbiBhc3NvY2lhdGUuwqAgVGhpcyBpcyB2YWxpZCBpZgo+IE9QMQo+IMKgwqDC oMKgwqDCoMKgwqDCoCBjYW4gYmUgc2FmZWx5IHNoaWZ0ZWQgbGVmdCBDIGJpdHMuwqAgKi8KPiDC oMKgwqDCoMKgwqAgaWYgKENPTlNUX0lOVF9QICh0cnVlb3AxKSAmJiBHRVRfQ09ERSAob3AwKSA9 PSBBU0hJRlRSVAo+IC3CoMKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKFhFWFAgKG9wMCwg MCkpID09IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDCoMKgICYmIENPTlNUX0lOVF9QIChYRVhQIChY RVhQIChvcDAsIDApLCAxKSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgICYmIENPTlNUX0lOVF9QIChY RVhQIChvcDAsIDEpKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqAgJiYgSU5UVkFMIChYRVhQIChvcDAs IDEpKSA8IEhPU1RfQklUU19QRVJfV0lERV9JTlQpCj4gLcKgwqDCoMKgwqDCoMKgIHsKPiArwqDC oMKgwqDCoMKgwqDCoCAmJiBQTFVTX1AgKFhFWFAgKG9wMCwgMCkpICYmIENPTlNUX0lOVF9QIChY RVhQIChYRVhQIChvcDAsCj4gMCksIDEpKQo+ICvCoMKgwqDCoMKgwqDCoMKgICYmIENPTlNUX0lO VF9QIChYRVhQIChvcDAsIDEpKQo+ICvCoMKgwqDCoMKgwqDCoMKgICYmIElOVFZBTCAoWEVYUCAo b3AwLCAxKSkgPCBIT1NUX0JJVFNfUEVSX1dJREVfSU5UKQo+ICvCoMKgwqDCoMKgwqDCoHsKPiDC oMKgwqDCoMKgwqDCoMKgwqAgaW50IGNvdW50ID0gSU5UVkFMIChYRVhQIChvcDAsIDEpKTsKPiDC oMKgwqDCoMKgwqDCoMKgwqAgSE9TVF9XSURFX0lOVCBtYXNrID0gVUlOVFZBTCAodHJ1ZW9wMSkg PDwgY291bnQ7Cj4gwqAKPiBAQCAtMzQyMCw3ICszMzk2LDcgQEAgc2ltcGxpZnlfY29udGV4dDo6 c2ltcGxpZnlfYmluYXJ5X29wZXJhdGlvbl8xCj4gKHJ0eF9jb2RlIGNvZGUsCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBwbHVzX2NvbnN0YW50IChtb2RlLCBYRVhQCj4gKG9wMCwgMCksCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1hc2spLAo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgWEVYUCAob3AwLCAxKSk7Cj4gLcKgwqDCoMKgwqDCoMKg IH0KPiArwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiDCoMKgwqDCoMKgwqAgLyogVGhlIGZvbGxvd2lu ZyBoYXBwZW5zIHdpdGggYml0ZmllbGQgbWVyZ2luZy4KPiDCoMKgwqDCoMKgwqDCoMKgwqAgKFgg JiBDKSB8ICgoWCB8IFkpICYgfkMpIC0+IFggfCAoWSAmIH5DKSAqLwo+IEBAIC0zNDk3LDggKzM0 NzMsNyBAQCBzaW1wbGlmeV9jb250ZXh0OjpzaW1wbGlmeV9iaW5hcnlfb3BlcmF0aW9uXzEKPiAo cnR4X2NvZGUgY29kZSwKPiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgbW9kZV9zaWduYml0X3AgKG1v ZGUsIG9wMSkpCj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBzaW1wbGlmeV9nZW5fYmluYXJ5IChQ TFVTLCBtb2RlLCBvcDAsIG9wMSk7Cj4gwqDCoMKgwqDCoMKgIC8qICh4b3IgKHBsdXMgWCBDMSkg QzIpIGlzICh4b3IgWCAoQzFeQzIpKSBpZiBDMSBpcyBzaWduYml0LsKgCj4gKi8KPiAtwqDCoMKg wqDCoCBpZiAoQ09OU1RfU0NBTEFSX0lOVF9QIChvcDEpCj4gLcKgwqDCoMKgwqDCoMKgwqAgJiYg R0VUX0NPREUgKG9wMCkgPT0gUExVUwo+ICvCoMKgwqDCoMKgIGlmIChDT05TVF9TQ0FMQVJfSU5U X1AgKG9wMSkgJiYgUExVU19QIChvcDApCj4gwqDCoMKgwqDCoMKgwqDCoMKgICYmIENPTlNUX1ND QUxBUl9JTlRfUCAoWEVYUCAob3AwLCAxKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgbW9kZV9z aWduYml0X3AgKG1vZGUsIFhFWFAgKG9wMCwgMSkpKQo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g c2ltcGxpZnlfZ2VuX2JpbmFyeSAoWE9SLCBtb2RlLCBYRVhQIChvcDAsIDApLAo+IEBAIC0zODQ5 LDExICszODI0LDEwIEBAIHNpbXBsaWZ5X2NvbnRleHQ6OnNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRp b25fMQo+IChydHhfY29kZSBjb2RlLAo+IMKgwqDCoMKgwqDCoMKgwqAgYW5kIGZvciAtIGluc3Rl YWQgb2YgKyBhbmQvb3IgXiBpbnN0ZWFkIG9mIHwuCj4gwqDCoMKgwqDCoMKgwqDCoMKgIEFsc28s IGlmIChOICYgTSkgPT0gMCwgdGhlbgo+IMKgwqDCoMKgwqDCoMKgwqAgKEEgKy0gTikgJiBNIC0+ IEEgJiBNLsKgICovCj4gLcKgwqDCoMKgwqAgaWYgKENPTlNUX0lOVF9QICh0cnVlb3AxKQo+IC3C oMKgwqDCoMKgwqDCoMKgICYmIEhXSV9DT01QVVRBQkxFX01PREVfUCAobW9kZSkKPiArwqDCoMKg wqDCoCBpZiAoQ09OU1RfSU5UX1AgKHRydWVvcDEpICYmIEhXSV9DT01QVVRBQkxFX01PREVfUCAo bW9kZSkKPiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgflVJTlRWQUwgKHRydWVvcDEpCj4gwqDCoMKg wqDCoMKgwqDCoMKgICYmIChVSU5UVkFMICh0cnVlb3AxKSAmIChVSU5UVkFMICh0cnVlb3AxKSAr IDEpKSA9PSAwCj4gLcKgwqDCoMKgwqDCoMKgwqAgJiYgKEdFVF9DT0RFIChvcDApID09IFBMVVMg fHwgR0VUX0NPREUgKG9wMCkgPT0gTUlOVVMpKQo+ICvCoMKgwqDCoMKgwqDCoMKgICYmIChQTFVT X1AgKG9wMCkgfHwgTUlOVVNfUCAob3AwKSkpCj4gwqDCoMKgwqDCoMKgwqDCoHsKPiDCoMKgwqDC oMKgwqDCoMKgwqAgcnR4IHBtb3BbMl07Cj4gwqDCoMKgwqDCoMKgwqDCoMKgIGludCB3aGljaDsK PiBAQCAtNTQxMyw4ICs1Mzg3LDcgQEAgc2ltcGxpZnlfY29udGV4dDo6c2ltcGxpZnlfcGx1c19t aW51cyAocnR4X2NvZGUKPiBjb2RlLCBtYWNoaW5lX21vZGUgbW9kZSwKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBicmVhazsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2FzZSBD T05TVDoKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChuX29wcyAhPSBBUlJBWV9TSVpF IChvcHMpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChY RVhQICh0aGlzX29wLCAwKSkgPT0gUExVUwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KG5fb3BzICE9IEFSUkFZX1NJWkUgKG9wcykgJiYgUExVU19QIChYRVhQICh0aGlzX29wLAo+IDAp KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgQ09OU1RBTlRfUCAoWEVY UCAoWEVYUCAodGhpc19vcCwgMCksIDApKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgJiYgQ09OU1RBTlRfUCAoWEVYUCAoWEVYUCAodGhpc19vcCwgMCksIDEpKSkKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHsKPiBAQCAtNTY3MiwxMCArNTY0NSw4IEBAIHNp bXBsaWZ5X2NvbnRleHQ6OnNpbXBsaWZ5X3BsdXNfbWludXMKPiAocnR4X2NvZGUgY29kZSwgbWFj aGluZV9tb2RlIG1vZGUsCj4gwqBzdGF0aWMgYm9vbAo+IMKgcGx1c19taW51c19vcGVyYW5kX3Ag KGNvbnN0X3J0eCB4KQo+IMKgewo+IC3CoCByZXR1cm4gR0VUX0NPREUgKHgpID09IFBMVVMKPiAt wqDCoMKgwqDCoMKgwqDCoCB8fCBHRVRfQ09ERSAoeCkgPT0gTUlOVVMKPiAtwqDCoMKgwqDCoMKg wqAgfHwgKEdFVF9DT0RFICh4KSA9PSBDT05TVAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYm IEdFVF9DT0RFIChYRVhQICh4LCAwKSkgPT0gUExVUwo+ICvCoCByZXR1cm4gUExVU19QICh4KSB8 fCBNSU5VU19QICh4KQo+ICvCoMKgwqDCoMKgwqDCoCB8fCAoR0VUX0NPREUgKHgpID09IENPTlNU ICYmIFBMVVNfUCAoWEVYUCAoeCwgMCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIENP TlNUQU5UX1AgKFhFWFAgKFhFWFAgKHgsIDApLCAwKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJiYgQ09OU1RBTlRfUCAoWEVYUCAoWEVYUCAoeCwgMCksIDEpKSk7Cj4gwqB9Cj4gQEAgLTU3 NjEsMTEgKzU3MzIsOSBAQAo+IHNpbXBsaWZ5X2NvbnRleHQ6OnNpbXBsaWZ5X3JlbGF0aW9uYWxf b3BlcmF0aW9uXzEgKHJ0eF9jb2RlIGNvZGUsCj4gwqAKPiDCoMKgIC8qIChMVFUvR0VVIChQTFVT IGEgQykgQyksIHdoZXJlIEMgaXMgY29uc3RhbnQsIGNhbiBiZSBzaW1wbGlmaWVkCj4gdG8KPiDC oMKgwqDCoMKgIChHRVUvTFRVIGEgLUMpLsKgIExpa2V3aXNlIGZvciAoTFRVL0dFVSAoUExVUyBh IEMpIGEpLsKgICovCj4gLcKgIGlmICgoY29kZSA9PSBMVFUgfHwgY29kZSA9PSBHRVUpCj4gLcKg wqDCoMKgwqAgJiYgR0VUX0NPREUgKG9wMCkgPT0gUExVUwo+ICvCoCBpZiAoKGNvZGUgPT0gTFRV IHx8IGNvZGUgPT0gR0VVKSAmJiBQTFVTX1AgKG9wMCkKPiDCoMKgwqDCoMKgwqAgJiYgQ09OU1Rf SU5UX1AgKFhFWFAgKG9wMCwgMSkpCj4gLcKgwqDCoMKgwqAgJiYgKHJ0eF9lcXVhbF9wIChvcDEs IFhFWFAgKG9wMCwgMCkpCj4gLcKgwqDCoMKgwqDCoMKgwqAgfHwgcnR4X2VxdWFsX3AgKG9wMSwg WEVYUCAob3AwLCAxKSkpCj4gK8KgwqDCoMKgwqAgJiYgKHJ0eF9lcXVhbF9wIChvcDEsIFhFWFAg KG9wMCwgMCkpIHx8IHJ0eF9lcXVhbF9wIChvcDEsIFhFWFAKPiAob3AwLCAxKSkpCj4gwqDCoMKg wqDCoMKgIC8qIChMVFUvR0VVIChQTFVTIGEgMCkgMCkgaXMgbm90IHRoZSBzYW1lIGFzIChHRVUv TFRVIGEgMCkuICovCj4gwqDCoMKgwqDCoMKgICYmIFhFWFAgKG9wMCwgMSkgIT0gY29uc3QwX3J0 eCkKPiDCoMKgwqDCoCB7Cj4gQEAgLTU3NzcsMjAgKzU3NDYsMTggQEAKPiBzaW1wbGlmeV9jb250 ZXh0OjpzaW1wbGlmeV9yZWxhdGlvbmFsX29wZXJhdGlvbl8xIChydHhfY29kZSBjb2RlLAo+IMKg Cj4gwqDCoCAvKiAoR1RVIChQTFVTIGEgQykgKEMgLSAxKSkgd2hlcmUgQyBpcyBhIG5vbi16ZXJv IGNvbnN0YW50IGNhbiBiZQo+IMKgwqDCoMKgwqAgdHJhbnNmb3JtZWQgaW50byAoTFRVIGEgLUMp LsKgICovCj4gLcKgIGlmIChjb2RlID09IEdUVSAmJiBHRVRfQ09ERSAob3AwKSA9PSBQTFVTICYm IENPTlNUX0lOVF9QIChvcDEpCj4gK8KgIGlmIChjb2RlID09IEdUVSAmJiBQTFVTX1AgKG9wMCkg JiYgQ09OU1RfSU5UX1AgKG9wMSkKPiDCoMKgwqDCoMKgwqAgJiYgQ09OU1RfSU5UX1AgKFhFWFAg KG9wMCwgMSkpCj4gwqDCoMKgwqDCoMKgICYmIChVSU5UVkFMIChvcDEpID09IFVJTlRWQUwgKFhF WFAgKG9wMCwgMSkpIC0gMSkKPiDCoMKgwqDCoMKgwqAgJiYgWEVYUCAob3AwLCAxKSAhPSBjb25z dDBfcnR4KQo+IMKgwqDCoMKgIHsKPiAtwqDCoMKgwqDCoCBydHggbmV3X2NtcAo+IC3CoMKgwqDC oMKgwqDCoD0gc2ltcGxpZnlfZ2VuX3VuYXJ5IChORUcsIGNtcF9tb2RlLCBYRVhQIChvcDAsIDEp LAo+IGNtcF9tb2RlKTsKPiArwqDCoMKgwqDCoCBydHggbmV3X2NtcCA9IHNpbXBsaWZ5X2dlbl91 bmFyeSAoTkVHLCBjbXBfbW9kZSwgWEVYUCAob3AwLAo+IDEpLCBjbXBfbW9kZSk7Cj4gwqDCoMKg wqDCoMKgIHJldHVybiBzaW1wbGlmeV9nZW5fcmVsYXRpb25hbCAoTFRVLCBtb2RlLCBjbXBfbW9k ZSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFhFWFAgKG9wMCwgMCksIG5ld19jbXApOwo+IMKgwqDC oMKgIH0KPiDCoAo+IMKgwqAgLyogQ2Fub25pY2FsaXplIChMVFUvR0VVIChQTFVTIGEgYikgYikg YXMgKExUVS9HRVUgKFBMVVMgYSBiKSBhKS7CoAo+ICovCj4gLcKgIGlmICgoY29kZSA9PSBMVFUg fHwgY29kZSA9PSBHRVUpCj4gLcKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKG9wMCkgPT0gUExVUwo+ ICvCoCBpZiAoKGNvZGUgPT0gTFRVIHx8IGNvZGUgPT0gR0VVKSAmJiBQTFVTX1AgKG9wMCkKPiDC oMKgwqDCoMKgwqAgJiYgcnR4X2VxdWFsX3AgKG9wMSwgWEVYUCAob3AwLCAxKSkKPiDCoMKgwqDC oMKgwqAgLyogRG9uJ3QgcmVjdXJzZSAiaW5maW5pdGVseSIgZm9yIChMVFUvR0VVIChQTFVTIGIg YikgYikuwqAgKi8KPiDCoMKgwqDCoMKgwqAgJiYgIXJ0eF9lcXVhbF9wIChvcDEsIFhFWFAgKG9w MCwgMCkpKQo+IGRpZmYgLS1naXQgYS9nY2MvdmFyLXRyYWNraW5nLmNjIGIvZ2NjL3Zhci10cmFj a2luZy5jYwo+IGluZGV4IDljNDBlYzRmYjhiLi4zN2JkN2YyZTAxNyAxMDA2NDQKPiAtLS0gYS9n Y2MvdmFyLXRyYWNraW5nLmNjCj4gKysrIGIvZ2NjL3Zhci10cmFja2luZy5jYwo+IEBAIC03Mzks MTAgKzczOSw5IEBAIHN0YWNrX2FkanVzdF9vZmZzZXRfcHJlX3Bvc3RfY2IgKHJ0eCwgcnR4IG9w LAo+IHJ0eCBkZXN0LCBydHggc3JjLCBydHggc3Jjb2ZmLAo+IMKgwqDCoMKgIGNhc2UgUFJFX01P RElGWToKPiDCoMKgwqDCoCBjYXNlIFBPU1RfTU9ESUZZOgo+IMKgwqDCoMKgwqDCoCAvKiBXZSBo YW5kbGUgb25seSBhZGp1c3RtZW50cyBieSBjb25zdGFudCBhbW91bnQuwqAgKi8KPiAtwqDCoMKg wqDCoCBnY2NfYXNzZXJ0IChHRVRfQ09ERSAoc3JjKSA9PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICYmIENPTlNUX0lOVF9QIChYRVhQIChzcmMsIDEpKQo+ICvCoMKg wqDCoMKgIGdjY19hc3NlcnQgKFBMVVNfUCAoc3JjKSAmJiBDT05TVF9JTlRfUCAoWEVYUCAoc3Jj LCAxKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIFhFWFAgKHNyYywg MCkgPT0gc3RhY2tfcG9pbnRlcl9ydHgpOwo+IC3CoMKgwqDCoMKgICgoSE9TVF9XSURFX0lOVCAq KWFyZylbR0VUX0NPREUgKG9wKSA9PSBQT1NUX01PRElGWV0KPiArwqDCoMKgwqDCoCAoKEhPU1Rf V0lERV9JTlQgKikgYXJnKVtHRVRfQ09ERSAob3ApID09IFBPU1RfTU9ESUZZXQo+IMKgwqDCoMKg wqDCoMKgwqAtPSBJTlRWQUwgKFhFWFAgKHNyYywgMSkpOwo+IMKgwqDCoMKgwqDCoCByZXR1cm4g MDsKPiDCoMKgwqDCoCBkZWZhdWx0Ogo+IEBAIC0xMTQ5LDE1ICsxMTQ4LDEzIEBAIGFkanVzdF9t ZW1zIChydHggbG9jLCBjb25zdF9ydHggb2xkX3J0eCwgdm9pZAo+ICpkYXRhKQo+IMKgwqDCoMKg wqDCoCBpZiAodGVtID09IE5VTExfUlRYKQo+IMKgwqDCoMKgwqDCoMKgwqB0ZW0gPSBnZW5fcnR4 X3Jhd19TVUJSRUcgKEdFVF9NT0RFIChsb2MpLCBhZGRyLCBTVUJSRUdfQllURQo+IChsb2MpKTsK PiDCoMKgwqDCoCBmaW5pc2hfc3VicmVnOgo+IC3CoMKgwqDCoMKgIGlmIChNQVlfSEFWRV9ERUJV R19CSU5EX0lOU05TCj4gLcKgwqDCoMKgwqDCoMKgwqAgJiYgR0VUX0NPREUgKHRlbSkgPT0gU1VC UkVHCj4gLcKgwqDCoMKgwqDCoMKgwqAgJiYgKEdFVF9DT0RFIChTVUJSRUdfUkVHICh0ZW0pKSA9 PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCBHRVRfQ09ERSAoU1VCUkVHX1JF RyAodGVtKSkgPT0gTUlOVVMKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IEdFVF9DT0RF IChTVUJSRUdfUkVHICh0ZW0pKSA9PSBNVUxUCj4gK8KgwqDCoMKgwqAgaWYgKE1BWV9IQVZFX0RF QlVHX0JJTkRfSU5TTlMgJiYgR0VUX0NPREUgKHRlbSkgPT0gU1VCUkVHCj4gK8KgwqDCoMKgwqDC oMKgwqAgJiYgKFBMVVNfUCAoU1VCUkVHX1JFRyAodGVtKSkgfHwgTUlOVVNfUCAoU1VCUkVHX1JF RyAodGVtKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHx8IE1VTFRfUCAoU1VCUkVHX1JF RyAodGVtKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCBHRVRfQ09ERSAoU1VCUkVH X1JFRyAodGVtKSkgPT0gQVNISUZUKQo+IC3CoMKgwqDCoMKgwqDCoMKgICYmIGlzX2EgPHNjYWxh cl9pbnRfbW9kZT4gKEdFVF9NT0RFICh0ZW0pLCAmdGVtX21vZGUpCj4gLcKgwqDCoMKgwqDCoMKg wqAgJiYgaXNfYSA8c2NhbGFyX2ludF9tb2RlPiAoR0VUX01PREUgKFNVQlJFR19SRUcgKHRlbSkp LAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICZ0ZW1fc3VicmVnX21vZGUpCj4gK8KgwqDCoMKgwqDCoMKgwqAg JiYgaXNfYTxzY2FsYXJfaW50X21vZGU+IChHRVRfTU9ERSAodGVtKSwgJnRlbV9tb2RlKQo+ICvC oMKgwqDCoMKgwqDCoMKgICYmIGlzX2E8c2NhbGFyX2ludF9tb2RlPiAoR0VUX01PREUgKFNVQlJF R19SRUcgKHRlbSkpLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmdGVtX3N1YnJlZ19tb2RlKQo+IMKgwqDCoMKg wqDCoMKgwqDCoCAmJiAoR0VUX01PREVfUFJFQ0lTSU9OICh0ZW1fbW9kZSkKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCA8IEdFVF9NT0RFX1BSRUNJU0lPTiAodGVtX3N1YnJlZ19tb2RlKSkK PiDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgc3VicmVnX2xvd3BhcnRfcCAodGVtKQo+IEBAIC0yMDQ5 LDggKzIwNDYsNyBAQCBuZWdhdGl2ZV9wb3dlcl9vZl90d29fcCAoSE9TVF9XSURFX0lOVCBpKQo+ IMKgc3RhdGljIHJ0eAo+IMKgdnRfZ2V0X2Nhbm9uaWNhbGl6ZV9iYXNlIChydHggbG9jKQo+IMKg ewo+IC3CoCB3aGlsZSAoKEdFVF9DT0RFIChsb2MpID09IFBMVVMKPiAtwqDCoMKgwqDCoMKgwqDC oCB8fCBHRVRfQ09ERSAobG9jKSA9PSBBTkQpCj4gK8KgIHdoaWxlICgoUExVU19QIChsb2MpIHx8 IEdFVF9DT0RFIChsb2MpID09IEFORCkKPiDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChY RVhQIChsb2MsIDEpKSA9PSBDT05TVF9JTlQKPiDCoMKgwqDCoMKgwqDCoMKgICYmIChHRVRfQ09E RSAobG9jKSAhPSBBTkQKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfHwgbmVnYXRpdmVfcG93 ZXJfb2ZfdHdvX3AgKElOVFZBTCAoWEVYUCAobG9jLCAxKSkpKSkKPiBAQCAtMjE5Miw4ICsyMTg4 LDcgQEAgdnRfY2Fub25pY2FsaXplX2FkZHIgKGRhdGFmbG93X3NldCAqc2V0LCBydHgKPiBvbG9j KQo+IMKgCj4gwqDCoCB3aGlsZSAocmV0cnkpCj4gwqDCoMKgwqAgewo+IC3CoMKgwqDCoMKgIHdo aWxlIChHRVRfQ09ERSAobG9jKSA9PSBQTFVTCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYg cG9seV9pbnRfcnR4X3AgKFhFWFAgKGxvYywgMSksICZ0ZXJtKSkKPiArwqDCoMKgwqDCoCB3aGls ZSAoUExVU19QIChsb2MpICYmIHBvbHlfaW50X3J0eF9wIChYRVhQIChsb2MsIDEpLCAmdGVybSkp Cj4gwqDCoMKgwqDCoMKgwqDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgb2ZzdCArPSB0ZXJtOwo+ IMKgwqDCoMKgwqDCoMKgwqDCoCBsb2MgPSBYRVhQIChsb2MsIDApOwo+IEBAIC0yMjIwLDggKzIy MTUsNyBAQCB2dF9jYW5vbmljYWxpemVfYWRkciAoZGF0YWZsb3dfc2V0ICpzZXQsIHJ0eAo+IG9s b2MpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsb2MgPSBnZXRfYWRkcl9mcm9tX2dsb2JhbF9j YWNoZSAobG9jKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBDb25zb2xpZGF0ZSBwbHVz X2NvbnN0YW50cy7CoCAqLwo+IC3CoMKgwqDCoMKgwqDCoMKgIHdoaWxlIChtYXliZV9uZSAob2Zz dCwgMCkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9DT0RFIChsb2Mp ID09IFBMVVMKPiArwqDCoMKgwqDCoMKgwqDCoCB3aGlsZSAobWF5YmVfbmUgKG9mc3QsIDApICYm IFBMVVNfUCAobG9jKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIHBvbHlf aW50X3J0eF9wIChYRVhQIChsb2MsIDEpLCAmdGVybSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2ZzdCArPSB0ZXJtOwo+IEBAIC04ODQx LDggKzg4MzUsNyBAQCBlbWl0X25vdGVfaW5zbl92YXJfbG9jYXRpb24gKHZhcmlhYmxlICoqdmFy cCwKPiBlbWl0X25vdGVfZGF0YSAqZGF0YSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBSRUdfQVRUUlMgKG5ld19sb2MpID0gUkVHX0FUVFJTCj4gKGxvY1tuX3Zhcl9w YXJ0c10pOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfQo+IC3CoMKgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKE1FTV9QIChsb2Nbbl92 YXJfcGFydHNdKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIEdFVF9D T0RFIChYRVhQIChsb2MyLCAwKSkgPT0gUExVUwo+ICvCoMKgwqDCoMKgwqDCoMKgIGVsc2UgaWYg KE1FTV9QIChsb2Nbbl92YXJfcGFydHNdKSAmJiBQTFVTX1AgKFhFWFAgKGxvYzIsCj4gMCkpCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYmIFJFR19QIChYRVhQIChYRVhQ IChsb2MyLCAwKSwgMCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICYm IHBvbHlfaW50X3J0eF9wIChYRVhQIChYRVhQIChsb2MyLCAwKSwgMSksCj4gJm9mZnNldDIpKQo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgewo+IEBAIC0xMDE1Myw3ICsxMDE0Niw3IEBAIHZ0X2lu aXRpYWxpemUgKHZvaWQpCj4gwqDCoMKgwqDCoMKgIGVsaW0gPSBlbGltaW5hdGVfcmVncyAocmVn LCBWT0lEbW9kZSwgTlVMTF9SVFgpOwo+IMKgwqDCoMKgwqDCoCBpZiAoZWxpbSAhPSByZWcpCj4g wqDCoMKgwqDCoMKgwqDCoHsKPiAtwqDCoMKgwqDCoMKgwqDCoCBpZiAoR0VUX0NPREUgKGVsaW0p ID09IFBMVVMpCj4gK8KgwqDCoMKgwqDCoMKgwqAgaWYgKFBMVVNfUCAoZWxpbSkpCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBlbGltID0gWEVYUCAoZWxpbSwgMCk7Cj4gwqDCoMKgwqDCoMKgwqDC oMKgIGlmIChlbGltID09IHN0YWNrX3BvaW50ZXJfcnR4KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdnRfaW5pdF9jZmFfYmFzZSAoKTsKPiBAQCAtMTAxNzMsNyArMTAxNjYsNyBAQCB2dF9pbml0 aWFsaXplICh2b2lkKQo+IMKgwqDCoMKgwqDCoCBlbGltID0gZWxpbWluYXRlX3JlZ3MgKHJlZywg Vk9JRG1vZGUsIE5VTExfUlRYKTsKPiDCoMKgwqDCoMKgwqAgaWYgKGVsaW0gIT0gcmVnKQo+IMKg wqDCoMKgwqDCoMKgwqB7Cj4gLcKgwqDCoMKgwqDCoMKgwqAgaWYgKEdFVF9DT0RFIChlbGltKSA9 PSBQTFVTKQo+ICvCoMKgwqDCoMKgwqDCoMKgIGlmIChQTFVTX1AgKGVsaW0pKQo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZwX2NmYV9vZmZz ZXQgLT0gcnR4X3RvX3BvbHlfaW50NjQgKFhFWFAgKGVsaW0sIDEpKTsKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBlbGltID0gWEVYUCAoZWxpbSwgMCk7Cj4gQEAgLTEwMjA1LDcgKzEwMTk4 LDcgQEAgdnRfaW5pdGlhbGl6ZSAodm9pZCkKPiDCoMKgwqDCoMKgwqAgZWxpbSA9IGVsaW1pbmF0 ZV9yZWdzIChyZWcsIFZPSURtb2RlLCBOVUxMX1JUWCk7Cj4gwqDCoMKgwqDCoMKgIGlmIChlbGlt ICE9IHJlZykKPiDCoMKgwqDCoMKgwqDCoMKgewo+IC3CoMKgwqDCoMKgwqDCoMKgIGlmIChHRVRf Q09ERSAoZWxpbSkgPT0gUExVUykKPiArwqDCoMKgwqDCoMKgwqDCoCBpZiAoUExVU19QIChlbGlt KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVsaW0gPSBYRVhQIChlbGltLCAwKTsKPiDCoMKg wqDCoMKgwqDCoMKgwqAgaWYgKGVsaW0gPT0gaGFyZF9mcmFtZV9wb2ludGVyX3J0eCkKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHZ0X2luaXRfY2ZhX2Jhc2UgKCk7Cgo=