From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, FROM_EXCESS_BASE64,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B4E68C43387 for ; Wed, 16 Jan 2019 07:24:17 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8174820840 for ; Wed, 16 Jan 2019 07:24:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="qJbwmZw5"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="C/k5rc1J" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8174820840 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+infradead-linux-riscv=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=EdPnX9PxTof8wqQuAvvGQVNVs16kkelxJ7DtWfnOxaM=; b=qJbwmZw5r1SbUB 967dbZdBb7YNAyJrGTo1W7iF+vcOALt4iZ9kk+dduIhUkTFC/ntteyKGILsoX/pNWwnxjmFXmIb+E ivcYZxxnn88C7L4n8YgmL81RyONkdTf1ZhNOaCalt/uedYhdEtDKbmOXRj3PMCDR/pJchqLMfCUS6 S92XtzBA4js+CrN3cNClw2rTmbXmJPyn0JMyp0qmqJr5s9RMqWl7WLE7lMeLA3QDADHnqTJHgSDot cRp8ehSbYjrJJGEEVT1RbZCQ+cGXmoMTmeBptb5dme9fDoCjOKEj0Z+5KF3q2jHHS2RoGPGhYriyn a/GnQLJ5TyXl1+XNXjXg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gjfYd-0003Jz-NT; Wed, 16 Jan 2019 07:24:15 +0000 Received: from mail-qt1-x843.google.com ([2607:f8b0:4864:20::843]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gjfYa-0003JY-1c for linux-riscv@lists.infradead.org; Wed, 16 Jan 2019 07:24:14 +0000 Received: by mail-qt1-x843.google.com with SMTP id y20so6028671qtm.13 for ; Tue, 15 Jan 2019 23:24:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=dKvOC089S4I4I8Vt8+CwS++1M4BEvZ0vmrrEcdxHbUw=; b=C/k5rc1JX9xpGQQUn3w2hfLxAP/ogBlRhzbxFHbJytbiIxCt+ddNJMQqrKjVTHy7LZ Ixb7P4ECUpZs2YsoP9gHrUhDIy1Qix7DaJ3S9rfxK46Cr10WbkpHAtqTyrV49MThYGQy qxA8pklYnw48wv2KM4IQBuSbHXDuBoLHLqW6UthofxItE54Vj9YSAB9/RZusxldEz2dT cH/z9Rp2uvC/k93n0OzM88xfpvO8d1hYv2DwkEBM8KcALcDPO0VamTUCJ63iIJNO8GpJ Eoy+4hePwyivOITyW9jho4c+hT1eNsquSC7H8PH6waA7pLyv8x4sSxzp9uvXhNUQxBFu vzGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=dKvOC089S4I4I8Vt8+CwS++1M4BEvZ0vmrrEcdxHbUw=; b=Zlv3T5HSq8L7ldjGGfbFz3TLwSwRPNe0yEOTc2TRIsiJhZ5W0C0AgDe48e8qx6l7RM ggNUGIbUGsqEPCJK2PhL3x44BQfAYW4xvgEznHVPxU1oe8nJT/DZy1DvNtlj3bbjpiz7 an6ViK9PdQ9b4XYDm9naL1S0veZi88JIPLaSTthHkE4P7G/YJXpqMnGtd8eyguMQiBVv X9n0u21tfeGrlWw4Jqj3//m2FC69AKqFzN4eHexvpeCysRYkdApR892qaDZLDe4Zgraw KJfgqrJigdoLerGjAyhdc01kkPUsQrmsqHq0vg0xJ26SI92mcp49BJq6SEJHZxsLju4s apDg== X-Gm-Message-State: AJcUukfRA1rkzb+MKzCUfvImb7tvaKW9yW1+fx0dvJncC+bkZUfr2WRp JDF9/i6SnwQP5vyAylRzuDTkJw79oZSnE+9943A= X-Google-Smtp-Source: ALg8bN7lXkTCdRVcq3nyQaWvyRgMRL/n/8NwjIxi4wR54Ulu8atR/rBgOz2+MQXfYOstc2xA6XucBy4o1PDrtwi2wJA= X-Received: by 2002:ac8:4454:: with SMTP id m20mr5809055qtn.381.1547623448004; Tue, 15 Jan 2019 23:24:08 -0800 (PST) MIME-Version: 1.0 References: <20190115083518.10149-1-bjorn.topel@gmail.com> <20190115083518.10149-4-bjorn.topel@gmail.com> In-Reply-To: From: =?UTF-8?B?QmrDtnJuIFTDtnBlbA==?= Date: Wed, 16 Jan 2019 08:23:56 +0100 Message-ID: Subject: Re: [RFC PATCH 3/3] bpf, riscv: added eBPF JIT for RV64G To: Daniel Borkmann X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190115_232412_122148_C92FB4FF X-CRM114-Status: GOOD ( 28.48 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Netdev , linux-riscv@lists.infradead.org, Palmer Dabbelt , davidlee@sifive.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+infradead-linux-riscv=archiver.kernel.org@lists.infradead.org RGVuIG9ucyAxNiBqYW4uIDIwMTkga2wgMDA6NTAgc2tyZXYgRGFuaWVsIEJvcmttYW5uIDxkYW5p ZWxAaW9nZWFyYm94Lm5ldD46Cj4KPiBPbiAwMS8xNS8yMDE5IDA5OjM1IEFNLCBCasO2cm4gVMO2 cGVsIHdyb3RlOgo+ID4gVGhpcyBjb21taXQgYWRkcyBlQlBGIEpJVCBmb3IgUlY2NEcuCj4gPgo+ ID4gQ29kZXdpc2UsIGl0IG5lZWRzIHNvbWUgcmVmYWN0b3JpbmcuIEN1cnJlbnRseSB0aGVyZSdz IGEgYml0IHRvbyBtdWNoCj4gPiBjb3B5LWFuZC1wYXN0ZSBnb2luZyBvbiwgYW5kIEkga25vdyBz b21lIHBsYWNlcyB3aGVyZSBJIGNvdWxkIG9wdGltaXplCj4gPiB0aGUgY29kZSBnZW5lcmF0aW9u IGEgYml0IChtb3N0bHkgQlBGX0sgdHlwZSBvZiBpbnN0cnVjdGlvbnMsIGRlYWxpbmcKPiA+IHdp dGggaW1tZWRpYXRlcykuCj4KPiBOaWNlIHdvcmshIDopCj4KPiA+IEZyb20gYSBmZWF0dXJlcyBw ZXJzcGVjdGl2ZSwgdHdvIHRoaW5ncyBhcmUgbWlzc2luZzoKPiA+Cj4gPiAqIHRhaWwgY2FsbHMK PiA+ICogImZhci1icmFuY2hlcyIsIGkuZS4gY29uZGl0aW9uYWwgYnJhbmNoZXMgdGhhdCByZWFj aCBiZXlvbmQgMTNiLgo+ID4KPiA+IFRoZSB0ZXN0X2JwZi5rbyBwYXNzZXMgYWxsIHRlc3RzLgo+ Cj4gRGlkIHlvdSBhbHNvIGNoZWNrIHRlc3RfdmVyaWZpZXIgdW5kZXIgaml0IHdpdGgvd2l0aG91 dCBqaXQgaGFyZGVuaW5nCj4gZW5hYmxlZD8gVGhhdCBvbmUgY29udGFpbnMgbG90cyBvZiBydW50 aW1lIHRlc3RzIGFzIHdlbGwuIFByb2JhYmx5IG1ha2VzCj4gc2Vuc2UgdG8gY2hlY2sgdW5kZXIg Q09ORklHX0JQRl9KSVRfQUxXQVlTX09OIHRvIHNlZSB3aGF0IGZhaWxzIHRoZSBKSVQ7Cj4gdGhl IHRlc3RfdmVyaWZpZXIgYWxzbyBjb250YWlucyB2YXJpb3VzIHRhaWwgY2FsbCB0ZXN0cyB0YXJn ZXRlZCBhdCBKSVRzLAo+IGZvciBleGFtcGxlLgo+CgpHb29kIHBvaW50ISBJIHdpbGwgZG8gdGhh dC4gVGhlIG9ubHkgc2VsZnRlc3RzL2JwZiBwcm9ncmFtIHRoYXQgSSByYW4KKGFuZCBwYXNzZWQp IHdhcyAidGVzdF9wcm9ncyIuIEknbGwgbWFrZSBzdXJlIHRoYXQgdGhlIGNvbXBsZXRlIGJwZgpz ZWxmdGVzdHMgc3VpdGUgcGFzc2VzIGFzIHdlbGwhCgo+IE5pdDogcGxlYXNlIGRlZmluaXRlbHkg YWxzbyBhZGQgYSBNQUlOVEFJTkVSUyBlbnRyeSB3aXRoIGF0IGxlYXN0IHlvdXJzZWxmCj4gdW5k ZXIgQlBGIEpJVCBzZWN0aW9uLCBhbmQgdXBkYXRlIERvY3VtZW50YXRpb24vc3lzY3RsL25ldC50 eHQgd2l0aCByaXNjdjY0Lgo+CgpBaCEgWWVzLCBJJ2xsIGZpeCB0aGF0LgoKPiA+IFNpZ25lZC1v ZmYtYnk6IEJqw7ZybiBUw7ZwZWwgPGJqb3JuLnRvcGVsQGdtYWlsLmNvbT4KPiA+IC0tLQo+ID4g IGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcC5jIHwgMTYwOCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKPiA+ICAxIGZpbGUgY2hhbmdlZCwgMTYwOCBpbnNlcnRpb25zKCspCj4g Pgo+ID4gZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9y aXNjdi9uZXQvYnBmX2ppdF9jb21wLmMKPiA+IGluZGV4IDdlMzU5ZDMyNDllZS4uNTYyZDU2ZWI4 ZDIzIDEwMDY0NAo+ID4gLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wLmMKPiA+ICsr KyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcC5jCj4gPiBAQCAtMSw0ICsxLDE2MTIgQEAK PiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ID4gKy8qCj4gPiArICog QlBGIEpJVCBjb21waWxlciBmb3IgUlY2NEcKPiA+ICsgKgo+ID4gKyAqIENvcHlyaWdodChjKSAy MDE5IEJqw7ZybiBUw7ZwZWwgPGJqb3JuLnRvcGVsQGdtYWlsLmNvbT4KPiA+ICsgKgo+ID4gKyAq Lwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9icGYuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgv ZmlsdGVyLmg+Cj4gPiArI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Cj4gPiArCj4gPiArI2Rl ZmluZSBUTVBfUkVHXzAgKE1BWF9CUEZfSklUX1JFRyArIDApCj4gPiArI2RlZmluZSBUTVBfUkVH XzEgKE1BWF9CUEZfSklUX1JFRyArIDEpCj4KPiBOb3QgdXNlZD8KPgoKQ29ycmVjdCEgSSdsbCBn ZXQgcmlkIG9mIHRoZW0uCgo+ID4gKyNkZWZpbmUgVEFJTF9DQUxMX1JFRyAoTUFYX0JQRl9KSVRf UkVHICsgMikKPiA+ICsKPiA+ICtlbnVtIHJ2X3JlZ2lzdGVyIHsKPiA+ICsgICAgIFJWX1JFR19a RVJPID0gICAwLCAgICAgIC8qIFRoZSBjb25zdGFudCB2YWx1ZSAwICovCj4gPiArICAgICBSVl9S RUdfUkEgPSAgICAgMSwgICAgICAvKiBSZXR1cm4gYWRkcmVzcyAqLwo+ID4gKyAgICAgUlZfUkVH X1NQID0gICAgIDIsICAgICAgLyogU3RhY2sgcG9pbnRlciAqLwo+ID4gKyAgICAgUlZfUkVHX0dQ ID0gICAgIDMsICAgICAgLyogR2xvYmFsIHBvaW50ZXIgKi8KPiA+ICsgICAgIFJWX1JFR19UUCA9 ICAgICA0LCAgICAgIC8qIFRocmVhZCBwb2ludGVyICovCj4gPiArICAgICBSVl9SRUdfVDAgPSAg ICAgNSwgICAgICAvKiBUZW1wb3JhcmllcyAqLwo+ID4gKyAgICAgUlZfUkVHX1QxID0gICAgIDYs Cj4gPiArICAgICBSVl9SRUdfVDIgPSAgICAgNywKPiA+ICsgICAgIFJWX1JFR19GUCA9ICAgICA4 LAo+ID4gKyAgICAgUlZfUkVHX1MxID0gICAgIDksICAgICAgLyogU2F2ZWQgcmVnaXN0ZXJzICov Cj4gPiArICAgICBSVl9SRUdfQTAgPSAgICAgMTAsICAgICAvKiBGdW5jdGlvbiBhcmd1bWVudC9y ZXR1cm4gdmFsdWVzICovCj4gPiArICAgICBSVl9SRUdfQTEgPSAgICAgMTEsICAgICAvKiBGdW5j dGlvbiBhcmd1bWVudHMgKi8KPiA+ICsgICAgIFJWX1JFR19BMiA9ICAgICAxMiwKPiA+ICsgICAg IFJWX1JFR19BMyA9ICAgICAxMywKPiA+ICsgICAgIFJWX1JFR19BNCA9ICAgICAxNCwKPiA+ICsg ICAgIFJWX1JFR19BNSA9ICAgICAxNSwKPiA+ICsgICAgIFJWX1JFR19BNiA9ICAgICAxNiwKPiA+ ICsgICAgIFJWX1JFR19BNyA9ICAgICAxNywKPiA+ICsgICAgIFJWX1JFR19TMiA9ICAgICAxOCwg ICAgIC8qIFNhdmVkIHJlZ2lzdGVycyAqLwo+ID4gKyAgICAgUlZfUkVHX1MzID0gICAgIDE5LAo+ ID4gKyAgICAgUlZfUkVHX1M0ID0gICAgIDIwLAo+ID4gKyAgICAgUlZfUkVHX1M1ID0gICAgIDIx LAo+ID4gKyAgICAgUlZfUkVHX1M2ID0gICAgIDIyLAo+ID4gKyAgICAgUlZfUkVHX1M3ID0gICAg IDIzLAo+ID4gKyAgICAgUlZfUkVHX1M4ID0gICAgIDI0LAo+ID4gKyAgICAgUlZfUkVHX1M5ID0g ICAgIDI1LAo+ID4gKyAgICAgUlZfUkVHX1MxMCA9ICAgIDI2LAo+ID4gKyAgICAgUlZfUkVHX1Mx MSA9ICAgIDI3LAo+ID4gKyAgICAgUlZfUkVHX1QzID0gICAgIDI4LCAgICAgLyogVGVtcG9yYXJp ZXMgKi8KPiA+ICsgICAgIFJWX1JFR19UNCA9ICAgICAyOSwKPiA+ICsgICAgIFJWX1JFR19UNSA9 ICAgICAzMCwKPiA+ICsgICAgIFJWX1JFR19UNiA9ICAgICAzMSwKPiA+ICt9Owo+ID4gKwo+ID4g K3N0cnVjdCBydl9qaXRfY29udGV4dCB7Cj4gPiArICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7 Cj4gPiArICAgICB1MzIgKmluc25zOyAvKiBSViBpbnNucyAqLwo+ID4gKyAgICAgaW50IG5pbnNu czsKPiA+ICsgICAgIGludCBlcGlsb2d1ZV9vZmZzZXQ7Cj4gPiArICAgICBpbnQgKm9mZnNldDsg LyogQlBGIHRvIFJWICovCj4gPiArICAgICB1bnNpZ25lZCBsb25nIHNlZW5fcmVnX2JpdHM7Cj4g PiArICAgICBpbnQgc3RhY2tfc2l6ZTsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCBydl9qaXRf ZGF0YSB7Cj4gPiArICAgICBzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhlYWRlcjsKPiA+ICsg ICAgIHU4ICppbWFnZTsKPiA+ICsgICAgIHN0cnVjdCBydl9qaXRfY29udGV4dCBjdHg7Cj4gPiAr fTsKPiA+ICsKPiA+ICtzdGF0aWMgdTggYnBmX3RvX3J2X3JlZyhpbnQgYnBmX3JlZywgc3RydWN0 IHJ2X2ppdF9jb250ZXh0ICpjdHgpCj4gPiArewo+Cj4gVGhpcyBvbmUgY2FuIGFsc28gYmUgc2lt cGxpZmllZCBieSBoYXZpbmcgYSBzaW1wbGUgbWFwcGluZyBhcyBpbgo+IG90aGVyIEpJVHMgYW5k IHRoZW4gbWFyayBfX3NldF9iaXQoPHJlZz4pIGluIHRoZSBzbWFsbCBicGZfdG9fcnZfcmVnKCkK PiBoZWxwZXIuCj4KClllYWgsIEkgYWdyZWUuIE11Y2ggYmV0dGVyLiBJJ2xsIHRha2UgdGhhdCBy b3V0ZS4KCj4gPiArICAgICBzd2l0Y2ggKGJwZl9yZWcpIHsKPiA+ICsgICAgIC8qIFJldHVybiB2 YWx1ZSAqLwo+ID4gKyAgICAgY2FzZSBCUEZfUkVHXzA6Cj4gPiArICAgICAgICAgICAgIF9fc2V0 X2JpdChSVl9SRUdfQTUsICZjdHgtPnNlZW5fcmVnX2JpdHMpOwo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gUlZfUkVHX0E1Owo+ID4gKyAgICAgLyogRnVuY3Rpb24gYXJndW1lbnRzICovCj4gPiAr ICAgICBjYXNlIEJQRl9SRUdfMToKPiA+ICsgICAgICAgICAgICAgX19zZXRfYml0KFJWX1JFR19B MCwgJmN0eC0+c2Vlbl9yZWdfYml0cyk7Cj4gPiArICAgICAgICAgICAgIHJldHVybiBSVl9SRUdf QTA7Cj4gPiArICAgICBjYXNlIEJQRl9SRUdfMjoKPiA+ICsgICAgICAgICAgICAgX19zZXRfYml0 KFJWX1JFR19BMSwgJmN0eC0+c2Vlbl9yZWdfYml0cyk7Cj4gPiArICAgICAgICAgICAgIHJldHVy biBSVl9SRUdfQTE7Cj4gPiArICAgICBjYXNlIEJQRl9SRUdfMzoKPiA+ICsgICAgICAgICAgICAg X19zZXRfYml0KFJWX1JFR19BMiwgJmN0eC0+c2Vlbl9yZWdfYml0cyk7Cj4gPiArICAgICAgICAg ICAgIHJldHVybiBSVl9SRUdfQTI7Cj4gPiArICAgICBjYXNlIEJQRl9SRUdfNDoKPiA+ICsgICAg ICAgICAgICAgX19zZXRfYml0KFJWX1JFR19BMywgJmN0eC0+c2Vlbl9yZWdfYml0cyk7Cj4gPiAr ICAgICAgICAgICAgIHJldHVybiBSVl9SRUdfQTM7Cj4gPiArICAgICBjYXNlIEJQRl9SRUdfNToK PiA+ICsgICAgICAgICAgICAgX19zZXRfYml0KFJWX1JFR19BNCwgJmN0eC0+c2Vlbl9yZWdfYml0 cyk7Cj4gPiArICAgICAgICAgICAgIHJldHVybiBSVl9SRUdfQTQ7Cj4gPiArICAgICAvKiBDYWxs ZWUgc2F2ZWQgcmVnaXN0ZXJzICovCj4gPiArICAgICBjYXNlIEJQRl9SRUdfNjoKPiA+ICsgICAg ICAgICAgICAgX19zZXRfYml0KFJWX1JFR19TMSwgJmN0eC0+c2Vlbl9yZWdfYml0cyk7Cj4gPiAr ICAgICAgICAgICAgIHJldHVybiBSVl9SRUdfUzE7Cj4gPiArICAgICBjYXNlIEJQRl9SRUdfNzoK PiA+ICsgICAgICAgICAgICAgX19zZXRfYml0KFJWX1JFR19TMiwgJmN0eC0+c2Vlbl9yZWdfYml0 cyk7Cj4gPiArICAgICAgICAgICAgIHJldHVybiBSVl9SRUdfUzI7Cj4gPiArICAgICBjYXNlIEJQ Rl9SRUdfODoKPiA+ICsgICAgICAgICAgICAgX19zZXRfYml0KFJWX1JFR19TMywgJmN0eC0+c2Vl bl9yZWdfYml0cyk7Cj4gPiArICAgICAgICAgICAgIHJldHVybiBSVl9SRUdfUzM7Cj4gPiArICAg ICBjYXNlIEJQRl9SRUdfOToKPiA+ICsgICAgICAgICAgICAgX19zZXRfYml0KFJWX1JFR19TNCwg JmN0eC0+c2Vlbl9yZWdfYml0cyk7Cj4gPiArICAgICAgICAgICAgIHJldHVybiBSVl9SRUdfUzQ7 Cj4gPiArICAgICAvKiBTdGFjayByZWFkLW9ubHkgZnJhbWUgcG9pbnRlciB0byBhY2Nlc3Mgc3Rh Y2sgKi8KPiA+ICsgICAgIGNhc2UgQlBGX1JFR19GUDoKPiA+ICsgICAgICAgICAgICAgX19zZXRf Yml0KFJWX1JFR19TNSwgJmN0eC0+c2Vlbl9yZWdfYml0cyk7Cj4gPiArICAgICAgICAgICAgIHJl dHVybiBSVl9SRUdfUzU7Cj4gPiArICAgICAvKiBUZW1wb3JhcnkgcmVnaXN0ZXIgKi8KPiA+ICsg ICAgIGNhc2UgQlBGX1JFR19BWDoKPiA+ICsgICAgICAgICAgICAgX19zZXRfYml0KFJWX1JFR19U MCwgJmN0eC0+c2Vlbl9yZWdfYml0cyk7Cj4gPiArICAgICAgICAgICAgIHJldHVybiBSVl9SRUdf VDA7Cj4gPiArICAgICAvKiBUYWlsIGNhbGwgY291bnRlciAqLwo+ID4gKyAgICAgY2FzZSBUQUlM X0NBTExfUkVHOgo+ID4gKyAgICAgICAgICAgICBfX3NldF9iaXQoUlZfUkVHX1M2LCAmY3R4LT5z ZWVuX3JlZ19iaXRzKTsKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIFJWX1JFR19TNjsKPiA+ICsg ICAgIGRlZmF1bHQ6Cj4gPiArICAgICAgICAgICAgIHJldHVybiAwOwo+ID4gKyAgICAgfQo+ID4g K307Cj4gWy4uLl0KPiA+ICsgICAgIC8qIHRhaWwgY2FsbCAqLwo+ID4gKyAgICAgY2FzZSBCUEZf Sk1QIHwgQlBGX1RBSUxfQ0FMTDoKPiA+ICsgICAgICAgICAgICAgcmQgPSBicGZfdG9fcnZfcmVn KFRBSUxfQ0FMTF9SRUcsIGN0eCk7Cj4gPiArICAgICAgICAgICAgIHByX2VycigiYnBmLWppdDog dGFpbCBjYWxsIG5vdCBzdXBwb3J0ZWQgeWV0IVxuIik7Cj4gPiArICAgICAgICAgICAgIHJldHVy biAtMTsKPgo+IFRoZXJlIGFyZSB0d28gb3B0aW9ucyBoZXJlLCBlaXRoZXIgZml4ZWQgc2l6ZSBw cm9sb2d1ZSB3aGVyZSB5b3UgY2FuCj4gdGhlbiBqdW1wIG92ZXIgaXQgaW4gdGFpbCBjYWxsIGNh c2UsIG9yIGR5bmFtaWMgb25lIHdoaWNoIHdvdWxkIG1ha2UKPiBpdCBzbG93ZXIgZHVlIHRvIHJl ZyByZXN0b3JlIGJ1dCBzaHJpbmtzIGltYWdlIGZvciBub24tdGFpbCBjYWxscy4KPgoKU28sIGl0 IHdvdWxkIGJlIHRoZSBsYXR0ZXIgdGhlbiwgd2hpY2ggaXMgcHJldHR5IG11Y2ggbGlrZSBhIG1v cmUKZXhwZW5zaXZlIChkdWUgdG8gdGhlIHRhaWwgY2FsbCBkZXB0aCBjaGVja3MpIGZ1bmN0aW9u IGNhbGwuCgpGb3IgdGhlIGZpeGVkIHByb2xvZ3VlOiBob3cgZG9lcywgc2F5IHg4NiwgZGVhbCB3 aXRoIEJQRiBzdGFjayB1c2FnZQppbiB0aGUgdGFpbCBjYWxsIGNhc2U/IElmIHRoZSBjYWxsZXIg ZG9lc24ndCB1c2UgdGhlIGJwZiBzdGFjaywgYnV0CnRoZSBjYWxsZWUgZG9lcy4gRnJvbSBhIHF1 aWNrIGdsYW5jZSBpbiB0aGUgY29kZSwgdGhlIHg4NiBwcm9sb2d1ZQpzdGlsbCB1c2VzIGF1eC0+ c3RhY2tfZGVwdGguIElmIHRoZSBjYWxsZWUgaGFzIGEgZGlmZmVyZW50IHN0YWNrIHVzYWdlCnRo YXQgdGhlIGNhbGxlciwgYW5kIHRoZW4gdGhlIGNhbGxlZSBkb2VzIGEgZnVuY3Rpb24gY2FsbCwg d291bGRuJ3QKdGhpcyBtZXNzIHVwIHRoZSBmcmFtZT8gKFllYWgsIG9idmlvdXNseSBtaXNzaW5n IHNvbWV0aGluZyEgOi0pKQoKPiA+ICsgICAgIC8qIGZ1bmN0aW9uIHJldHVybiAqLwo+ID4gKyAg ICAgY2FzZSBCUEZfSk1QIHwgQlBGX0VYSVQ6Cj4gPiArICAgICAgICAgICAgIGlmIChpID09IGN0 eC0+cHJvZy0+bGVuIC0gMSkKPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsK PiA+ICsgICAgICAgICAgICAgcnZvZmYgPSBlcGlsb2d1ZV9vZmZzZXQoY3R4KTsKPiA+ICsgICAg ICAgICAgICAgaWYgKCFpc18yMWJfaW50KHJ2b2ZmKSkgewo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIHByX2VycigiYnBmLWppdDogJWQgb2Zmc2V0PSVkIG5vdCBzdXBwb3J0ZWQgeWV0IVxuIiwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19MSU5FX18sIHJ2b2ZmKTsKPiA+ICsg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsK PiA+ICsgICAgICAgICAgICAgZW1pdChydl9qYWwoUlZfUkVHX1pFUk8sIHJ2b2ZmID4+IDEpLCBj dHgpOwo+ID4gKyAgICAgICAgICAgICBicmVhazsKPiA+ICsKPiA+ICsgICAgIC8qIGRzdCA9IGlt bTY0ICovCj4gPiArICAgICBjYXNlIEJQRl9MRCB8IEJQRl9JTU0gfCBCUEZfRFc6Cj4gPiArICAg ICB7Cj4gPiArICAgICAgICAgICAgIHN0cnVjdCBicGZfaW5zbiBpbnNuMSA9IGluc25bMV07Cj4g PiArICAgICAgICAgICAgIHU2NCBpbW02NDsKPiA+ICsKPiBbLi4uXQo+ID4gKwo+ID4gK3N0YXRp YyB2b2lkIGJ1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KQo+ID4gK3sK PiA+ICsgICAgIGludCBzdGFja19hZGp1c3QgPSAwLCBzdG9yZV9vZmZzZXQsIGJwZl9zdGFja19h ZGp1c3Q7Cj4gPiArCj4gPiArICAgICBpZiAoc2Vlbl9yZWcoUlZfUkVHX1JBLCBjdHgpKQo+ID4g KyAgICAgICAgICAgICBzdGFja19hZGp1c3QgKz0gODsKPiA+ICsgICAgIHN0YWNrX2FkanVzdCAr PSA4OyAvKiBSVl9SRUdfRlAgKi8KPiA+ICsgICAgIGlmIChzZWVuX3JlZyhSVl9SRUdfUzEsIGN0 eCkpCj4gPiArICAgICAgICAgICAgIHN0YWNrX2FkanVzdCArPSA4Owo+ID4gKyAgICAgaWYgKHNl ZW5fcmVnKFJWX1JFR19TMiwgY3R4KSkKPiA+ICsgICAgICAgICAgICAgc3RhY2tfYWRqdXN0ICs9 IDg7Cj4gPiArICAgICBpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKQo+ID4gKyAgICAgICAg ICAgICBzdGFja19hZGp1c3QgKz0gODsKPiA+ICsgICAgIGlmIChzZWVuX3JlZyhSVl9SRUdfUzQs IGN0eCkpCj4gPiArICAgICAgICAgICAgIHN0YWNrX2FkanVzdCArPSA4Owo+ID4gKyAgICAgaWYg KHNlZW5fcmVnKFJWX1JFR19TNSwgY3R4KSkKPiA+ICsgICAgICAgICAgICAgc3RhY2tfYWRqdXN0 ICs9IDg7Cj4gPiArICAgICBpZiAoc2Vlbl9yZWcoUlZfUkVHX1M2LCBjdHgpKQo+ID4gKyAgICAg ICAgICAgICBzdGFja19hZGp1c3QgKz0gODsKPiA+ICsKPiA+ICsgICAgIHN0YWNrX2FkanVzdCA9 IHJvdW5kX3VwKHN0YWNrX2FkanVzdCwgMTYpOwo+ID4gKyAgICAgYnBmX3N0YWNrX2FkanVzdCA9 IHJvdW5kX3VwKGN0eC0+cHJvZy0+YXV4LT5zdGFja19kZXB0aCwgMTYpOwo+ID4gKyAgICAgc3Rh Y2tfYWRqdXN0ICs9IGJwZl9zdGFja19hZGp1c3Q7Cj4gPiArCj4gPiArICAgICBzdG9yZV9vZmZz ZXQgPSBzdGFja19hZGp1c3QgLSA4Owo+ID4gKwo+ID4gKyAgICAgZW1pdChydl9hZGRpKFJWX1JF R19TUCwgUlZfUkVHX1NQLCAtc3RhY2tfYWRqdXN0KSwgY3R4KTsKPiA+ICsKPiA+ICsgICAgIGlm IChzZWVuX3JlZyhSVl9SRUdfUkEsIGN0eCkpIHsKPiA+ICsgICAgICAgICAgICAgZW1pdChydl9z ZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1JBKSwgY3R4KTsKPiA+ICsgICAgICAg ICAgICAgc3RvcmVfb2Zmc2V0IC09IDg7Cj4gPiArICAgICB9Cj4gPiArICAgICBlbWl0KHJ2X3Nk KFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfRlApLCBjdHgpOwo+ID4gKyAgICAgc3Rv cmVfb2Zmc2V0IC09IDg7Cj4gPiArICAgICBpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKSB7 Cj4gPiArICAgICAgICAgICAgIGVtaXQocnZfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJW X1JFR19TMSksIGN0eCk7Cj4gPiArICAgICAgICAgICAgIHN0b3JlX29mZnNldCAtPSA4Owo+ID4g KyAgICAgfQo+ID4gKyAgICAgaWYgKHNlZW5fcmVnKFJWX1JFR19TMiwgY3R4KSkgewo+ID4gKyAg ICAgICAgICAgICBlbWl0KHJ2X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzIp LCBjdHgpOwo+ID4gKyAgICAgICAgICAgICBzdG9yZV9vZmZzZXQgLT0gODsKPiA+ICsgICAgIH0K PiA+ICsgICAgIGlmIChzZWVuX3JlZyhSVl9SRUdfUzMsIGN0eCkpIHsKPiA+ICsgICAgICAgICAg ICAgZW1pdChydl9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1MzKSwgY3R4KTsK PiA+ICsgICAgICAgICAgICAgc3RvcmVfb2Zmc2V0IC09IDg7Cj4gPiArICAgICB9Cj4gPiArICAg ICBpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKSB7Cj4gPiArICAgICAgICAgICAgIGVtaXQo cnZfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TNCksIGN0eCk7Cj4gPiArICAg ICAgICAgICAgIHN0b3JlX29mZnNldCAtPSA4Owo+ID4gKyAgICAgfQo+ID4gKyAgICAgaWYgKHNl ZW5fcmVnKFJWX1JFR19TNSwgY3R4KSkgewo+ID4gKyAgICAgICAgICAgICBlbWl0KHJ2X3NkKFJW X1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzUpLCBjdHgpOwo+ID4gKyAgICAgICAgICAg ICBzdG9yZV9vZmZzZXQgLT0gODsKPiA+ICsgICAgIH0KPiA+ICsgICAgIGlmIChzZWVuX3JlZyhS Vl9SRUdfUzYsIGN0eCkpIHsKPiA+ICsgICAgICAgICAgICAgZW1pdChydl9zZChSVl9SRUdfU1As IHN0b3JlX29mZnNldCwgUlZfUkVHX1M2KSwgY3R4KTsKPiA+ICsgICAgICAgICAgICAgc3RvcmVf b2Zmc2V0IC09IDg7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICBlbWl0KHJ2X2FkZGkoUlZf UkVHX0ZQLCBSVl9SRUdfU1AsIHN0YWNrX2FkanVzdCksIGN0eCk7Cj4gPiArCj4gPiArICAgICBp ZiAoYnBmX3N0YWNrX2FkanVzdCkgewo+ID4gKyAgICAgICAgICAgICBpZiAoIXNlZW5fcmVnKFJW X1JFR19TNSwgY3R4KSkKPiA+ICsgICAgICAgICAgICAgICAgICAgICBwcl93YXJuKCJicGYtaml0 OiBub3Qgc2VlbiBCUEZfUkVHX0ZQLCBzdGFjayBpcyAlZFxuIiwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJwZl9zdGFja19hZGp1c3QpOwo+ID4gKyAgICAgICAgICAgICBlbWl0 KHJ2X2FkZGkoUlZfUkVHX1M1LCBSVl9SRUdfU1AsIGJwZl9zdGFja19hZGp1c3QpLCBjdHgpOwo+ ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgY3R4LT5zdGFja19zaXplID0gc3RhY2tfYWRqdXN0 Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3QgcnZf aml0X2NvbnRleHQgKmN0eCkKPiA+ICt7Cj4gPiArICAgICBpbnQgc3RhY2tfYWRqdXN0ID0gY3R4 LT5zdGFja19zaXplLCBzdG9yZV9vZmZzZXQgPSBzdGFja19hZGp1c3QgLSA4Owo+ID4gKwo+ID4g KyAgICAgaWYgKHNlZW5fcmVnKFJWX1JFR19SQSwgY3R4KSkgewo+ID4gKyAgICAgICAgICAgICBl bWl0KHJ2X2xkKFJWX1JFR19SQSwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfU1ApLCBjdHgpOwo+ID4g KyAgICAgICAgICAgICBzdG9yZV9vZmZzZXQgLT0gODsKPiA+ICsgICAgIH0KPiA+ICsgICAgIGVt aXQocnZfbGQoUlZfUkVHX0ZQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TUCksIGN0eCk7Cj4gPiAr ICAgICBzdG9yZV9vZmZzZXQgLT0gODsKPiA+ICsgICAgIGlmIChzZWVuX3JlZyhSVl9SRUdfUzEs IGN0eCkpIHsKPiA+ICsgICAgICAgICAgICAgZW1pdChydl9sZChSVl9SRUdfUzEsIHN0b3JlX29m ZnNldCwgUlZfUkVHX1NQKSwgY3R4KTsKPiA+ICsgICAgICAgICAgICAgc3RvcmVfb2Zmc2V0IC09 IDg7Cj4gPiArICAgICB9Cj4gPiArICAgICBpZiAoc2Vlbl9yZWcoUlZfUkVHX1MyLCBjdHgpKSB7 Cj4gPiArICAgICAgICAgICAgIGVtaXQocnZfbGQoUlZfUkVHX1MyLCBzdG9yZV9vZmZzZXQsIFJW X1JFR19TUCksIGN0eCk7Cj4gPiArICAgICAgICAgICAgIHN0b3JlX29mZnNldCAtPSA4Owo+ID4g KyAgICAgfQo+ID4gKyAgICAgaWYgKHNlZW5fcmVnKFJWX1JFR19TMywgY3R4KSkgewo+ID4gKyAg ICAgICAgICAgICBlbWl0KHJ2X2xkKFJWX1JFR19TMywgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfU1Ap LCBjdHgpOwo+ID4gKyAgICAgICAgICAgICBzdG9yZV9vZmZzZXQgLT0gODsKPiA+ICsgICAgIH0K PiA+ICsgICAgIGlmIChzZWVuX3JlZyhSVl9SRUdfUzQsIGN0eCkpIHsKPiA+ICsgICAgICAgICAg ICAgZW1pdChydl9sZChSVl9SRUdfUzQsIHN0b3JlX29mZnNldCwgUlZfUkVHX1NQKSwgY3R4KTsK PiA+ICsgICAgICAgICAgICAgc3RvcmVfb2Zmc2V0IC09IDg7Cj4gPiArICAgICB9Cj4gPiArICAg ICBpZiAoc2Vlbl9yZWcoUlZfUkVHX1M1LCBjdHgpKSB7Cj4gPiArICAgICAgICAgICAgIGVtaXQo cnZfbGQoUlZfUkVHX1M1LCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TUCksIGN0eCk7Cj4gPiArICAg ICAgICAgICAgIHN0b3JlX29mZnNldCAtPSA4Owo+ID4gKyAgICAgfQo+ID4gKyAgICAgaWYgKHNl ZW5fcmVnKFJWX1JFR19TNiwgY3R4KSkgewo+ID4gKyAgICAgICAgICAgICBlbWl0KHJ2X2xkKFJW X1JFR19TNiwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfU1ApLCBjdHgpOwo+ID4gKyAgICAgICAgICAg ICBzdG9yZV9vZmZzZXQgLT0gODsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIGVtaXQocnZf YWRkaShSVl9SRUdfU1AsIFJWX1JFR19TUCwgc3RhY2tfYWRqdXN0KSwgY3R4KTsKPiA+ICsgICAg IC8qIFNldCByZXR1cm4gdmFsdWUuICovCj4gPiArICAgICBlbWl0KHJ2X2FkZGkoUlZfUkVHX0Ew LCBSVl9SRUdfQTUsIDApLCBjdHgpOwo+ID4gKyAgICAgZW1pdChydl9qYWxyKFJWX1JFR19aRVJP LCBSVl9SRUdfUkEsIDApLCBjdHgpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGJ1aWxk X2JvZHkoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgZXh0cmFfcGFzcykKPiA+ICt7 Cj4gPiArICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBjdHgtPnByb2c7Cj4gPiAr ICAgICBpbnQgaTsKPiA+ICsKPiA+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9nLT5sZW47IGkr Kykgewo+ID4gKyAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24gPSAmcHJv Zy0+aW5zbnNpW2ldOwo+ID4gKyAgICAgICAgICAgICBpbnQgcmV0Owo+ID4gKwo+ID4gKyAgICAg ICAgICAgICByZXQgPSBlbWl0X2luc24oaW5zbiwgY3R4LCBleHRyYV9wYXNzKTsKPiA+ICsgICAg ICAgICAgICAgaWYgKHJldCA+IDApIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBpKys7Cj4g PiArICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+aW5zbnMgPT0gTlVMTCkKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+b2Zmc2V0W2ldID0gY3R4LT5uaW5zbnM7Cj4g PiArICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ ICsgICAgICAgICAgICAgaWYgKGN0eC0+aW5zbnMgPT0gTlVMTCkKPiA+ICsgICAgICAgICAgICAg ICAgICAgICBjdHgtPm9mZnNldFtpXSA9IGN0eC0+bmluc25zOwo+ID4gKyAgICAgICAgICAgICBp ZiAocmV0KQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgICB9 Cj4gPiArICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgYnBmX2Zp bGxfaWxsX2luc25zKHZvaWQgKmFyZWEsIHVuc2lnbmVkIGludCBzaXplKQo+ID4gK3sKPiA+ICsg ICAgIG1lbXNldChhcmVhLCAwLCBzaXplKTsKPgo+IE5lZWRzIHVwZGF0ZSBhcyB3ZWxsPwo+CgpO bywgYml0cGF0dGVybiBvZiBhbGwgemVyb3MgaXMgYW4gaWxsZWdhbCBpbnN0cnVjdGlvbiwgYnV0 IGEgY29tbWVudAp3b3VsZCBiZSBnb29kIQoKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQg YnBmX2ZsdXNoX2ljYWNoZSh2b2lkICpzdGFydCwgdm9pZCAqZW5kKQo+ID4gK3sKPiA+ICsgICAg IGZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylzdGFydCwgKHVuc2lnbmVkIGxvbmcp ZW5kKTsKPiA+ICt9Cj4gPiArCgpUaGFua3MgYSBsb3QgZm9yIHRoZSBjb21tZW50cywgRGFuaWVs ISBJJ2xsIGdldCBiYWNrIHdpdGggYSB2Mi4KCgpCasO2cm4KCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51 eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtcmlzY3YK