From owner-freebsd-net@FreeBSD.ORG Fri Jan 24 14:56:18 2014 Return-Path: Delivered-To: net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 5A5CB1A6 for ; Fri, 24 Jan 2014 14:56:18 +0000 (UTC) Received: from mail-ob0-x233.google.com (mail-ob0-x233.google.com [IPv6:2607:f8b0:4003:c01::233]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 187C114C5 for ; Fri, 24 Jan 2014 14:56:18 +0000 (UTC) Received: by mail-ob0-f179.google.com with SMTP id wo20so3683154obc.38 for ; Fri, 24 Jan 2014 06:56:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=870Q+KtNtAr/59PL8rdCgjRjHjBxQJGkWUdmfFqPjHU=; b=zj/C1AUOuHOWCzXa/Rmo/Qh2hwKVYPXjVrKjtCZHQA3XWy/p8opfsJr5xZa+Vs2xK+ 9R8b9L2Dsc7eunDjdZGj0ooMxxGDBXPpvYbqqs1pqFxSCJQTweiQhQJQlPVjVV5e4o7M 9Bv1E0r4McP3wcwZEVvcqpUjRn360F/69WgDmjdltw0v2rC26rb8fuRCN5j8+AT7XjXX FmXlG7neA/iJ6kMFH8Tv9T8+zxRQkWYAVFpHYzuqO/QdIkdnyQrQ/v4TdowWggHm7OR9 YvHi4moW7lEZ3LLgkmTSPOCUPhA66SZOZ1OKLLqMrP1wqgcxk1aqqFptu9BQPNf7YPVw a6eA== MIME-Version: 1.0 X-Received: by 10.182.65.36 with SMTP id u4mr12346545obs.31.1390575377301; Fri, 24 Jan 2014 06:56:17 -0800 (PST) Received: by 10.60.103.238 with HTTP; Fri, 24 Jan 2014 06:56:17 -0800 (PST) In-Reply-To: <52E1E272.8060009@huawei.com> References: <52D74E15.1040909@huawei.com> <92C7725B-B30A-4A19-925A-A93A2489A525@iet.unipi.it> <52D8A5E1.9020408@huawei.com> <52DD1914.7090506@iet.unipi.it> <52E1E272.8060009@huawei.com> Date: Fri, 24 Jan 2014 15:56:17 +0100 Message-ID: Subject: Re: netmap: I got some troubles with netmap From: Vincenzo Maffione To: Wang Weidong Content-Type: multipart/mixed; boundary=047d7b604cbc65dca304f0b88f04 X-Content-Filtered-By: Mailman/MimeDel 2.1.17 Cc: =?ISO-8859-1?Q?facolt=E0?= , Giuseppe Lettieri , Luigi Rizzo , net@freebsd.org X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Jan 2014 14:56:18 -0000 --047d7b604cbc65dca304f0b88f04 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable 2014/1/24 Wang Weidong > On 2014/1/20 20:39, Giuseppe Lettieri wrote: > > Hi Wang, > > > > OK, you are using the netmap support in the upstream qemu git. That doe= s > not yet include all our modifications, some of which are very important f= or > high throughput with VALE. In particular, the upstream qemu does not > include the batching improvements in the frontend/backend interface, and = it > does not include the "map ring" optimization of the e1000 frontend. Pleas= e > find attached a gzipped patch that contains all of our qemu code. The pat= ch > is against the latest upstream master (commit 1cf892ca). > > > > Please ./configure the patched qemu with the following option, in > addition to any other option you may need: > > > > --enable-e1000-paravirt --enable-netmap \ > > --extra-cflags=3D-I/path/to/netmap/sys/directory > > > > Note that --enable-e1000-paravirt is needed to enable the "map ring" > optimization in the e1000 frontend, even if you are not going to use the > e1000-paravirt device. > > > > Now you should be able to rerun your tests. I am also attaching a READM= E > file that describes some more tests you may want to run. > > > > Hello, > Yes, I patch the qemu-netmap-bc767e701.patch to the qemu, download the > 20131019-tinycore-netmap.hdd. > And I do some test that: > > 1. I use the bridge below: > qemu-system-x86_64 -m 2048 -boot c -net nic -net bridge,br=3Dbr1 -hda > /home/wwd/tinycores/20131019-tinycore-netmap.hdd -enable-kvm -vnc :0 > test between two vms. > br1 without device. > Use pktgen, I got the 237.95 kpps. > Use the netserver/netperf I got the speed 1037M bits/sec with TCP_STREAM. > The max speed is up to 1621M. > Use the netserver/netperf I got the speed 3296/s with TCP_RR > Use the netserver/netperf I got the speed 234M/86M bits/sec with UDP_STRE= AM > > When I add a device from host to the br1, the speed is 159.86 kpps. > Use the netserver/netperf I got the speed 720M bits/sec with TCP_STREAM. > The max speed is up to 1000M. > Use the netserver/netperf I got the speed 3556/s with TCP_RR > Use the netserver/netperf I got the speed 181M/181M bits/sec with > UDP_STREAM > > What do you think of these data? > You are using the old/deprecated QEMU command line syntax (-net), and therefore honestly It's not clear to me what kind of network configuration you are running. Please use our scripts "launch-qemu.sh", "prep-taps.sh", according to what described in the README.images file (attached). Alternatively, use the syntax like in the following examples (#1) qemu-system-x86_64 archdisk.qcow -enable-kvm -device virtio-net-pci,netdev=3Dmynet -netdev tap,ifname=3Dtap01,id=3Dmynet,script=3Dno,downscript=3Dno -smp 2 (#2) qemu-system-x86_64 archdisk.qcow -enable-kvm -device e1000,mitigation=3Doff,mac=3D00:AA:BB:CC:DD:01,netdev=3Dmynet -netdev netmap,ifname=3Dvale0:01,id=3Dmynet -smp 2 so that it's clear to us what network frontend (e.g. emulated NIC) and network backend (e.g. netmap, tap, vde, ecc..) you are using. In example #1 we are using virtio-net as frontend and tap as backend, while in example #2 we are using e1000 as frontend and netmap as backend. Also consider giving more than one core (e.g. -smp 2) to each guest, to mitigate receiver livelock problems. > > 2. I use the vale below: > qemu-system-x86_64 -m 2048 -boot c -net nic -net netmap,vale0:0 -hda > /home/wwd/tinycores/20131019-tinycore-netmap.hdd -enable-kvm -vnc :0 > > Same for here, it's not clear what you are using. I guess each guest has an e1000 device and is connected to a different port of the same vale switch (e.g. vale0:0 and vale0:1)? Test with 2 vms from the same host > vale0 without device. > I use the pkt-gen, the speed is 938 Kpps > You should get ~4Mpps with e1000 frontend + netmap backend on a reasonably good machine. Make sure you have ./configure'd QEMU with --enable-e1000-paravirt. > I use netperf -H 10.0.0.2 -t UDP_STREAM, I got the speed is 195M/195M, > then add -- -m 8, I only got 1.07M/1.07M. > When use the smaller msg size, the speed will smaller? > If you use e1000 with netperf (without pkt-gen) your performance is doomed to be horrible. Use e1000-paravirt (as a frontend) instead if you are interested in netperf experiment. Also consider that the point in using the "-- -m8" options is experimenting high packet rates, so what you should measure here is not the througput in Mbps, but the packet rate: netperf reports the number of packets sent and received, so you can obtain the packet rate by dividing by the running time= . The throughput in Mbps is uninteresting, if you want high bulk throughput you just don't use "-- -m 8", but leave the defaults. Using virtio-net in this case will help because of the TSO offloadings. cheers Vincenzo > > with vale-ctl -a vale0:eth2, > use pkt-gen, the speed is 928 Kpps > I use netperf -H 10.0.0.2 -t UDP_STREAM, I got the speed is 209M/208M, > then add -- -m 8, I only got 1.06M/1.06M. > > with vale-ctl -h vale0:eth2, > use pkt-gen, the speed is 928 Kpps > I use netperf -H 10.0.0.2 -t UDP_STREAM, I got the speed is 192M/192M, > then add -- -m 8, I only got 1.06M/1.06M. > > Test with 2 vms form two host, > I only can test it by vale-ctl -h vale0:eth2 and set eth2 into promisc > use pkt-gen with the default params, the speed is about 750 Kpps > use netperf -H 10.0.0.2 -t UDP_STREAM, I got the speed is 160M/160M > Is this right? > > 3. I can't use the l2 utils. > When I do the "sudo l2open -t eth0 l2recv[l2send], I got that "l2open > ioctl(TUNSETIFF...): Invalid argument" > and "use l2open -r eth0 l2recv", wait a moment (only several seconds), I > got the result: > TEST-RESULT: 0.901 kpps 1pkts > select/read=3D100.00 err=3D0 > > And I can't find the l2 utils from the net? Is it implemented by your tea= m? > > All of them is tested on vms. > > Cheers. > Wang > > > > > > Cheers, > > Giuseppe > > > > Il 17/01/2014 04:39, Wang Weidong ha scritto: > >> On 2014/1/16 18:24, facolt=E0 wrote: > [...] > >> > >> > > > > > > > --=20 Vincenzo Maffione --047d7b604cbc65dca304f0b88f04 Content-Type: application/octet-stream; name="README.images" Content-Disposition: attachment; filename="README.images" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hqtjyltm0 CUVYUEVSSU1FTlRJTkcgV0lUSCBORVRNQVAsIFZBTEUgQU5EIEZBU1QgUUVNVQoJLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUbyBlYXNlIGV4cGVyaW1lbnRz IHdpdGggTmV0bWFwLCB0aGUgVkFMRSBzd2l0Y2ggYW5kIG91ciBRZW11IGVuaGFuY2VtZW50cwp3 ZSBoYXZlIHByZXBhcmVkIGEgY291cGxlIG9mIGJvb3RhYmxlIGltYWdlcyAobGludXggYW5kIEZy ZWVCU0QpLgpZb3UgY2FuIGZpbmQgdGhlbSBvbiB0aGUgbmV0bWFwIHBhZ2UKCglodHRwOi8vaW5m by5pZXQudW5pcGkuaXQvfmx1aWdpL25ldG1hcC8KCndoZXJlIHlvdSBjYW4gYWxzbyBsb29rIGF0 IG1vcmUgcmVjZW50IHZlcnNpb25zIG9mIHRoaXMgZmlsZS4KCkJlbG93IGFyZSBzdGVwLWJ5LXN0 ZXAgaW5zdHJ1Y3Rpb25zIG9uIGV4cGVyaW1lbnRzIHlvdSBjYW4gcnVuCndpdGggdGhlc2UgaW1h Z2VzLiBUaGUgdHdvIG1haW4gdmVyc2lvbnMgYXJlCgoJcGljb2JzZC5oZGQJLT4gRnJlZUJTRCBI RUFEIChuZXRtYXAgKyBWQUxFKQoJdGlueWNvcmUuaGRkCS0+IExpbnV4IChxZW11ICsgbmV0bWFw ICsgVkFMRSkgICAgICAKCkJvb3RpbmcgdGhlIGltYWdlCi0tLS0tLS0tLS0tLS0tLS0tCkZvciBh bGwgZXhwZXJpbWVudHMgeW91IG5lZWQgdG8gY29weSB0aGUgaW1hZ2Ugb24gYSBVU0Igc3RpY2sK YW5kIGJvb3QgYSBQQyB3aXRoIGl0LiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSB0aGUgaW1h Z2UKd2l0aCBWaXJ0dWFsQm94LCBRZW11IG9yIG90aGVyIGVtdWxhdG9ycywgYXMgYW4gZXhhbXBs ZQoKICAgIHFlbXUtc3lzdGVtLXg4Nl82NCAtaGRhIElNQUdFX0ZJTEUgLW0gMUcgLW1hY2hpbmUg YWNjZWw9a3ZtIC4uLgoKKHJlbW92ZSAnYWNjZWw9a3ZtJyBpZiB5b3VyIGhvc3QgZG9lcyBub3Qg c3VwcG9ydCBrdm0pLgpUaGUgaW1hZ2VzIGRvIG5vdCBpbnN0YWxsIGFueXRoaW5nIG9uIHRoZSBo YXJkIGRpc2suCgpCb3RoIHN5c3RlbXMgaGF2ZSBwcmVsb2FkZWQgZHJpdmVycyBmb3IgYSBudW1i ZXIgb2YgbmV0d29yayBjYXJkcwooaW5jbHVkaW5nIHRoZSBpbnRlbCAxMCBHYml0IG9uZXMpIHdp dGggbmV0bWFwIGV4dGVuc2lvbnMuClRoZSBWQUxFIHN3aXRjaCBpcyBhbHNvIGF2YWlsYWJsZSAo aXQgaXMgcGFydCBvZiB0aGUgbmV0bWFwIG1vZHVsZSkuCnNzaCwgc2NwIGFuZCBhIGZldyBvdGhl ciB1dGlsaXRpZXMgYXJlIGFsc28gaW5jbHVkZWQuCgpGcmVlQlNEIGltYWdlOgoKICArIHRoZSBP UyBib290cyBkaXJlY3RseSBpbiBjb25zb2xlIG1vZGUsIHlvdSBjYW4gc3dpdGNoCiAgICBiZXR3 ZWVuIHRlcm1pbmFscyB3aXRoIEFMVC1Gbi4KICAgIFRoZSBwYXNzd29yZCBmb3IgdGhlICdyb290 JyBhY2NvdW50IGlzICdzZXR1cCcKCiAgKyBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byBhIG5ldHdv cmssIHlvdSBjYW4gdXNlCiAgICAJZGhjbGllbnQgZW0wICMgb3Igb3RoZXIgaW50ZXJmYWNlIG5h bWUKICAgIHRvIG9idGFpbiBhbiBJUCBhZGRyZXNzIGFuZCBleHRlcm5hbCBjb25uZWN0aXZpdHku CgpMaW51eCBpbWFnZToKCiAgKyBpbiBhZGRpdGlvbiB0byB0aGUgbmV0bWFwL1ZBTEUgbW9kdWxl cywgdGhlIEtWTSBrZXJuZWwgbW9kdWxlCiAgICBpcyBhbHNvIHByZWxvYWRlZC4KCiAgKyB0aGUg Ym9vdC1sb2FkZXIgZ2l2ZXMgeW91IHR3byBtYWluIG9wdGlvbnMgKGVhY2ggd2l0aAogICAgYSB2 YXJpYW50IHRvIGRlbGF5IGJvb3QgaW4gY2FzZSB5b3UgaGF2ZSBzbG93IGRldmljZXMpOgoKICAg ICsgIkJvb3QgVGlueUNvcmUiCiAgICAgIGJvb3RzIGluIGFuIFgxMSBlbnZpcm9ubWVudCBhcyB1 c2VyICd0YycuCiAgICAgIFlvdSBjYW4gY3JlYXRlIGEgZmV3IHRlcm1pbmFscyB1c2luZyB0aGUg aWNvbiBhdCB0aGUKICAgICAgYm90dG9tLiBZb3UgY2FuIHVzZSAic3VkbyAtcyIgdG8gZ2V0IHJv b3QgYWNjZXNzLgogICAgICBJbiBjYXNlIG5vIHN1aXRhYmxlIHZpZGVvIGNhcmQgaXMgYXZhaWxh YmxlL2RldGVjdGVkLAogICAgICBpdCBmYWxscyBiYWNrIHRvIGNvbW1hbmQgbGluZSBtb2RlLgoK ICAgICsgIkJvb3QgQ29yZSAoY29tbWFuZCBsaW5lIG9ubHkpIgogICAgICBib290cyBpbiBjb25z b2xlIG1vZGUgd2l0aCB2aXJ0dWFsIHRlcm1pbmFscy4KICAgICAgWW91J3JlIGF1dG9tYXRpY2Fs bHkgbG9nZ2VkIGluIGFzIHVzZXIgJ3RjJy4KICAgICAgVG8gbG9nIGluIHRoZSBvdGhlciB0ZXJt aW5hbHMgdXNlIHRoZSBzYW1lIHVzZXJuYW1lIAogICAgICAobm8gcGFzc3dvcmQgcmVxdWlyZWQp LgoKICArIFRoZSBzeXN0ZW0gc2hvdWxkIGF1dG9tYXRpY2FsbHkgcmVjb2duaXplIHRoZSBleGlz dGluZyBldGhlcm5ldAogICAgZGV2aWNlcywgYW5kIGxvYWQgdGhlIGFwcHJvcHJpYXRlIG5ldG1h cC1jYXBhYmxlIGRldmljZSBkcml2ZXJzCiAgICB3aGVuIGF2YWlsYWJsZS4gIEludGVyZmFjZXMg YXJlIGNvbmZpZ3VyZWQgdGhyb3VnaCBESENQIHdoZW4gcG9zc2libGUuCgoKR2VuZXJhbCB0ZXN0 IHJlY29tbWVuZGF0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk5PVEU6IFRoZSB0 ZXN0cyBvdXRsaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIGNhbiBnZW5lcmF0ZSB2ZXJ5 IGhpZ2gKcGFja2V0IHJhdGVzLCBhbmQgc29tZSBoYXJkd2FyZSBtaXNjb25maWd1cmF0aW9uIHBy b2JsZW1zIG1heSBwcmV2ZW50CnlvdSBmcm9tIGFjaGlldmluZyBtYXhpbXVtIHNwZWVkLgpDb21t b24gcHJvYmxlbXMgYXJlOgoKKyBzbG93IGxpbmsgYXV0b25lZ290aWF0aW9uLgogIE91ciBwcm9n cmFtcyB0eXBpY2FsbHkgd2FpdCAyLTQgc2Vjb25kcyBmb3IKICBsaW5rIG5lZ290aWF0aW9uIHRv IGNvbXBsZXRlLCBidXQgc29tZSBOSUMvc3dpdGNoIGNvbWJpbmF0aW9ucwogIGFyZSBtdWNoIHNs b3dlci4gSW4gdGhpcyBjYXNlIHlvdSBzaG91bGQgaW5jcmVhc2UgdGhlIGRlbGF5CiAgKHBrdC1n ZW4gaGFzIHRoZSAtdyBYWCBvcHRpb24gZm9yIHRoYXQpIG9yIHBvc3NpYmx5IGZvcmNlCiAgdGhl IGxpbmsgc3BlZWQgYW5kIGR1cGxleCBtb2RlIG9uIGJvdGggc2lkZXMuCgogIENoZWNrIHRoZSBs aW5rIHNwZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbm9nb3RpYXRpb24KICBwcm9ibGVt cywgYW5kIHRoYXQgeW91IHNlZSB0aGUgZXhwZWN0ZWQgc3BlZWQuCgogICAgZXRodG9vbCBJRk5B TUUJIyBvbiBsaW51eAogICAgaWZjb25maWcgSUZOQU1FCSMgb24gRnJlZUJTRAoKKyBldGhlcm5l dCBmbG93IGNvbnRyb2wuCiAgSWYgdGhlIHJlY2VpdmluZyBwb3J0IGlzIHNsb3cgKG9mdGVuIHRo ZSBjYXNlIGluIHByZXNlbmNlCiAgb2YgbXVsdGljYXN0L2Jyb2FkY2FzdCB0cmFmZmljLCBvciBh bHNvIHVuaWNhc3QgaWYgeW91IGFyZQogIHNlbmRpbmcgdG8gbm9uLW5ldG1hcCByZWNlaXZlcnMp LCBpdCB3aWxsIGdlbmVyYXRlIGV0aGVybmV0CiAgZmxvdyBjb250cm9sIGZyYW1lcyB0aGF0IHRo cm90dGxlIGRvd24gdGhlIHNlbmRlci4KCiAgV2UgcmVjb21tZW5kIHRvIGRpc2FibGUgQk9USCBS WCBhbmQgVFggZXRoZXJuZXQgZmxvdyBjb250cm9sCiAgb24gQk9USCBzZW5kZXIgYW5kIHJlY2Vp dmVyLgogIE9uIExpbnV4IHRoaXMgY2FuIGJlIGRvbmUgd2l0aCBldGh0b29sOgoKICAgIGV0aHRv b2wgLUEgSUZOQU1FIHR4IG9mZiByeCBvZmYKCiAgd2hlcmVhcyBvbiBGcmVlQlNEIHRoZXJlIGFy ZSBkZXZpY2Utc3BlY2lmaWMgc3lzY3RsCgoJc3lzY3RsIGRldi5peC4wLnF1ZXVlMC5mbG93X2Nv bnRyb2wgPSAwCgorIENQVSBwb3dlciBzYXZpbmcuCiAgVGhlIENQVSBnb3Zlcm5vciBvbiBsaW51 eCwgb3IgZXF1aXZhbGVudCBpbiBGcmVlQlNELCB0ZW5kIHRvCiAgdGhyb3R0bGUgZG93biB0aGUg Y2xvY2sgcmF0ZSByZWR1Y2luZyBwZXJmb3JtYW5jZS4KICBVbmxpa2Ugb3RoZXIgc2ltaWxhciBz eXN0ZW1zLCBuZXRtYXAgZG9lcyBub3QgaGF2ZSBidXN5LXdhaXQKICBsb29wcywgc28gdGhlIENQ VSBsb2FkIGlzIGdlbmVyYWxseSBsb3cgYW5kIHRoaXMgY2FuIHRyaWdnZXIKICB0aGUgY2xvY2sg c2xvd2Rvd24uCgogIE1ha2Ugc3VyZSB0aGF0IEFMTCBDUFVzIHJ1biBhdCBtYXhpbXVtIHNwZWVk IGRpc2FibGluZyB0aGUKICBkeW5hbWljIGZyZXF1ZW5jeS1zY2FsaW5nIG1lY2hhbmlzbXMuCgog ICAgY3B1ZnJlcS1zZXQgLWdwZXJmb3JtYW5jZQkjIG9uIGxpbnV4CgogICAgc3lzY3RsIGRldi5j cHUuMC5mcmVxPTM0MDEJIyBvbiBGcmVlQlNELgoKKyB3cm9uZyBNQUMgYWRkcmVzcwogIG5ldG1h cCBkb2VzIG5vdCBwdXQgdGhlIE5JQyBpbiBwcm9taXNjdW91cyBtb2RlLCBzbyB1bmxlc3MgdGhl CiAgYXBwbGljYXRpb24gZG9lcyBpdCwgdGhlIE5JQyB3aWxsIG9ubHkgcmVjZWl2ZSBicm9hZGNh c3QgdHJhZmZpYyBvcgogIHVuaWNhc3QgZGlyZWN0ZWQgdG8gaXRzIG93biBNQUMgYWRkcmVzcy4K CgpTVEFOREFSRCBTT0NLRVQgVEVTVFMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZvciBtb3N0IHNv Y2tldC1iYXNlZCBleHBlcmltZW50cyB5b3UgY2FuIHVzZSB0aGUgIm5ldHBlcmYiIHRvb2wgaW5z dGFsbGVkCm9uIHRoZSBzeXN0ZW0gKHZlcnNpb24gMi42LjApLiBCZSBjYXJlZnVsIHRvIHVzZSBh IG1hdGNoaW5nIHZlcnNpb24gZm9yCnRoZSBvdGhlciBuZXRwZXJmIGVuZHBvaW50IChlLmcuIG5l dHNlcnZlcikgd2hlbiBydW5uaW5nIHRlc3RzIGJldHdlZW4KZGlmZmVyZW50IG1hY2hpbmVzLgoK SW50ZXJlc3RpbmcgZXhwZXJpbWVudHMgYXJlOgoKICAgIG5ldHBlcmYgLUggeC55LnoudyAtdFRD UF9TVFJFQU0gICMgdGVzdCBUQ1AgdGhyb3VnaHB1dAogICAgbmV0cGVyZiAtSCB4Lnkuei53IC10 VENQX1JSICAgICAgIyB0ZXN0IGxhdGVuY3kKICAgIG5ldHBlcmYgLUggeC55LnoudyAtdFVEUF9T VFJFQU0gLS0gLW04ICAjIHRlc3QgVURQIHRocm91Z2hwdXQgd2l0aCBzaG9ydCBwYWNrZXRzCgp3 aGVyZSB4Lnkuei53IGlzIHRoZSBob3N0IHJ1bm5pbmcgIm5ldHNlcnZlciIuCgoKUkFXIFNPQ0tF VCBBTkQgVEFQIFRFU1RTCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGb3IgZXhwZXJpbWVudHMg d2l0aCByYXcgc29ja2V0cyBhbmQgdGFwIGRldmljZXMgeW91IGNhbiB1c2UgdGhlIGwyCnV0aWxp dGllcyAobDJvcGVuLCBsMnNlbmQsIGwycmVjdikgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0uCldp dGggdGhlc2UgdXRpbGl0aWVzIHlvdSBjYW4gc2VuZC9yZWNlaXZlIGN1c3RvbSBuZXR3b3JrIHBh Y2tldHMKdG8vZnJvbSByYXcgc29ja2V0cyBvciB0YXAgZmlsZSBkZXNjcmlwdG9ycy4KClRoZSBy ZWNlaXZlciBjYW4gYmUgcnVuIHdpdGggb25lIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMKCiAg ICBsMm9wZW4gLXIgSUZOQU1FIGwycmVjdiAgICAgIyByZWNlaXZlIGZyb20gYSByYXcgc29ja2V0 IGF0dGFjaGVkIHRvIElGTkFNRQogICAgbDJvcGVuIC10IElGTkFNRSBsMnJlY3YgICAgICMgcmVj ZWl2ZSBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW5lZCBvbiB0aGUgdGFwIElGTkFNRQoKVGhl IHJlY2VpdmVyIHByb2Nlc3Mgd2lsbCB3YWl0IGluZGVmaW5pdGVseSBmb3IgdGhlIGZpcnN0IHBh Y2tldAphbmQgdGhlbiBrZWVwIHJlY2VpdmluZyBhcyBsb25nIGFzIHBhY2tldHMga2VlcCBjb21p bmcuIFdoZW4gdGhlCmZsb3cgc3RvcHMgKGFmdGVyIGEgMiBzZWNvbmRzIHRpbWVvdXQpIHRoZSBw cm9jZXNzIHRlcm1pbmF0ZXMgYW5kCnByaW50cyB0aGUgcmVjZWl2ZWQgcGFja2V0IHJhdGUgYW5k IHBhY2tldCBjb3VudC4KClRvIHJ1biB0aGUgc2VuZGVyIGluIGFuIGVhc3kgd2F5LCB5b3UgY2Fu IHVzZSB0aGUgc2NyaXB0IGwyLXNlbmQuc2gKaW4gdGhlIGhvbWUgZGlyZWN0b3J5LiBUaGlzIHNj cmlwdCBkZWZpbmVzIHNldmVyYWwgc2hlbGwgdmFyaWFibGVzCnRoYXQgY2FuIGJlIG1hbnVhbGx5 IGNoYW5nZWQgdG8gY3VzdG9taXplIHRoZSB0ZXN0IChzZWUKdGhlIGNvbW1lbnRzIGluIHRoZSBz Y3JpcHQgaXRzZWxmKS4KCkFzIGFuIGV4YW1wbGUsIHlvdSBjYW4gdGVzdCBjb25maWd1cmF0aW9u cyB3aXRoIFZpcnR1YWwKTWFjaGluZXMgYXR0YWNoZWQgdG8gaG9zdCB0YXAgZGV2aWNlcyBicmlk Z2VkIHRvZ2V0aGVyLgoKClRlc3RzIHVzaW5nIHRoZSBMaW51eCBpbi1rZXJuZWwgcGt0Z2VuCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRvIHVzZSB0aGUgTGludXggaW4t a2VybmVsIHBhY2tldCBnZW5lcmF0b3IsIHlvdSBjYW4gdXNlIHRoZQpzY3JpcHQgImxpbnV4LXBr dGdlbi5zaCIgaW4gdGhlIGhvbWUgZGlyZWN0b3J5LgpUaGUgcGt0Z2VuIGNyZWF0ZXMgYSBrZXJu ZWwgdGhyZWFkIGZvciBlYWNoIGhhcmR3YXJlIFRYIHF1ZXVlCm9mIGEgZ2l2ZW4gTklDLgoKQnkg bWFudWFsbHkgY2hhbmdpbmcgdGhlIHNjcmlwdCBzaGVsbCB2YXJpYWJsZSBkZWZpbml0aW9ucyB5 b3UKY2FuIGNoYW5nZSB0aGUgdGVzdCBjb25maWd1cmF0aW9uIChlLmcuIGFkZHJlc3NlcyBpbiB0 aGUgZ2VuZXJhdGVkCnBhY2tldCkuIFBsZWFzZSBjaGFuZ2UgdGhlICJOQ1BVIiB2YXJpYWJsZSB0 byBtYXRjaCB0aGUgbnVtYmVyCm9mIENQVXMgb24geW91ciBtYWNoaW5lLiBUaGUgc2NyaXB0IGhh cyBhbiBhcmd1bWVudCB3aGljaApzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBOSUMgcXVldWVzIChp LmUuIGtlcm5lbCB0aHJlYWRzKQp0byB1c2UgbWludXMgb25lLgoKRm9yIGV4YW1wbGU6CgogICAg Li9saW51eC1wa3RnZW4uc2ggMiAgIyBVc2VzIDMgTklDIHF1ZXVlcwoKV2hlbiB0aGUgc2NyaXB0 IHRlcm1pbmF0ZXMsIGl0IHByaW50cyB0aGUgcGVyLXF1ZXVlIHJhdGVzIGFuZAp0aGUgdG90YWwg cmF0ZSBhY2hpZXZlZC4KCgpORVRNQVAgQU5EIFZBTEUgRVhQRVJJTUVOVFMKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCgpGb3IgbW9zdCBleHBlcmltZW50cyB3aXRoIG5ldG1hcCB5b3UgY2Fu IHVzZSB0aGUgInBrdC1nZW4iIGNvbW1hbmQKKGRvIG5vdCBjb25mdXNlIGl0IHdpdGggdGhlIExp bnV4IGluLWtlcm5lbCBwa3RnZW4pLCB3aGljaCBoYXMgYSBsYXJnZQpudW1iZXIgb2Ygb3B0aW9u cyB0byBzZW5kIGFuZCByZWNlaXZlIHRyYWZmaWMgKGFsc28gb24gVEFQIGRldmljZXMpLgoKcGt0 LWdlbiBub3JtYWxseSBnZW5lcmF0ZXMgVURQIHRyYWZmaWMgZm9yIGEgc3BlY2lmaWMgSVAgYWRk cmVzcwphbmQgdXNpbmcgdGhlIGJyb2RhZGNhc3QgTUFDIGFkZHJlc3MKCk5ldG1hcCB0ZXN0aW5n IHdpdGggbmV0d29yayBpbnRlcmZhY2VzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCgpSZW1lbWJlciB0aGF0IHlvdSBuZWVkIGEgbmV0bWFwLWNhcGFibGUgZHJpdmVyIGlu IG9yZGVyIHRvIHVzZQpuZXRtYXAgb24gYSBzcGVjaWZpYyBOSUMuIEN1cnJlbnRseSBzdXBwb3J0 ZWQgZHJpdmVycyBhcmUgZTEwMDAsCmUxMDAwZSwgaXhnYmUsIGlnYi4gRm9yIHVwZGF0ZWQgaW5m b3JtYXRpb24gcGxlYXNlIHZpc2l0Cmh0dHA6Ly9pbmZvLmlldC51bmlwaS5pdC9+bHVpZ2kvbmV0 bWFwLwoKQmVmb3JlIHJ1bm5pbmcgcGt0LWdlbiwgbWFrZSBzdXJlIHRoYXQgdGhlIGxpbmsgaXMg dXAuCgpSdW4gcGt0LWdlbiBvbiBhbiBpbnRlcmZhY2UgY2FsbGVkICJJRk5BTUUiOgoKICAgIHBr dC1nZW4gLWkgSUZOQU1FIC1mIHR4ICAjIHJ1biBhIHBrdC1nZW4gc2VuZGVyCiAgICBwa3QtZ2Vu IC1pIElGTkFNRSAtZiByeCAgIyBydW4gYSBwa3QtZ2VuIHJlY2VpdmVyCgpwa3QtZ2VuIHdpdGhv dXQgYXJndW1lbnRzIHdpbGwgc2hvdyBvdGhlciBvcHRpb25zLCBlLmcuCiAgKyAtdyBzZWMJbW9k aWZpZXMgdGhlIHdhaXQgdGltZSBmb3IgbGluayBuZWdvdGlvYXRpb24KICArIC1sIGxlbgltb2Rp ZmllcyB0aGUgcGFja2V0IHNpemUKICArIC1kLCAtcwlzZXQgdGhlIElQIGRlc3RpbmF0aW9uL3Nv dXJjZSBhZGRyZXNzZXMgYW5kIHBvcnRzCiAgKyAtRCwgLVMJc2V0IHRoZSBNQUMgZGVzdGluYXRp b24vc291cmNlIGFkZHJlc3NlcwoKYW5kIG1vcmUuCgpUZXN0aW5nIHRoZSBWQUxFIHN3aXRjaAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRvIHVzZSB0aGUgVkFMRSBzd2l0Y2ggaW5zdGVhZCBv ZiBwaHlzaWNhbCBwb3J0cyB5b3Ugb25seSBuZWVkCnRvIGNoYW5nZSB0aGUgaW50ZXJmYWNlIG5h bWUgaW4gdGhlIHBrdC1nZW4gY29tbWFuZC4KQXMgYW4gZXhhbXBsZSwgb24gYSBzaW5nbGUgbWFj aGluZSwgeW91IGNhbiBydW4gc2VuZGVycyBhbmQgcmVjZWl2ZXJzCm9uIG11bHRpcGxlIHBvcnRz IG9mIGEgVkFMRSBzd2l0Y2ggYXMgZm9sbG93cyAocnVuIHRoZSBjb21tYW5kcyBpbnRvCnNlcGFy YXRlIHRlcm1pbmFscyB0byBzZWUgdGhlIG91dHB1dCkKCiAgICBwa3QtZ2VuIC1pdmFsZTA6MDEg LWZ0eCAgIyBydW4gYSBzZW5kZXIgb24gdGhlIHBvcnQgMDEgb2YgdGhlIHN3aXRjaCB2YWxlMAog ICAgcGt0LWdlbiAtaXZhbGUwOjAyIC1mcnggICMgcmVjZWl2ZXIgb24gdGhlIHBvcnQgMDIgb2Yg c2FtZSBzd2l0Y2gKICAgIHBrdC1nZW4gLWl2YWxlMDowMyAtZnR4ICAjIGFub3RoZXIgc2VuZGVy IG9uIHRoZSBwb3J0IDAzCgpUaGUgVkFMRSBzd2l0Y2hlcyBhbmQgcG9ydHMgYXJlIGNyZWF0ZWQg KGFuZCBkZXN0cm95ZWQpIG9uIHRoZSBmbHkuCgoKVHJhbnNwYXJlbnQgY29ubmVjdGlvbiBvZiBw aHlzaWNhbCBwb3J0cyB0byB0aGUgVkFMRSBzd2l0Y2gKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkl0IGlzIGFsc28gcG9zc2libGUg dG8gdXNlIGEgbmV0d29yayBkZXZpY2UgYXMgYSBwb3J0IG9mIGEgVkFMRQpzd2l0Y2guIFlvdSBj YW4gZG8gdGhpcyB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKCiAgICB2YWxlLWN0bCAtaCB2 YWxlMDpldGgwICAjIGF0dGFjaCBpbnRlcmZhY2UgImV0aDAiIHRvIHRoZSAidmFsZTAiIHN3aXRj aAoKVG8gZGV0YWNoIGFuIGludGVyZmFjZSBmcm9tIGEgYnJpZGdlOgoKICAgIHZhbGUtY3RsIC1k IHZhbGUwOmV0aDAgICMgZGV0YWNoIGludGVyZmFjZSAiZXRoMCIgZnJvbSB0aGUgInZhbGUwIiBz d2l0Y2gKClRoZXNlIG9wZXJhdGlvbnMgY2FuIGJlIGlzc3VlZCBhdCBhbnkgbW9tZW50LgoKClRl c3RzIHdpdGggb3VyIG1vZGlmaWVkIFFFTVUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK VGhlIExpbnV4IGltYWdlIGFsc28gY29udGFpbnMgb3VyIG1vZGlmaWVkIFFFTVUsIHdpdGggdGhl IFZBTEUgYmFja2VuZCBhbmQKdGhlICJlMTAwMC1wYXJhdmlydCIgZnJvbnRlbmQgKGEgcGFyYXZp cnR1YWxpemVkIGUxMDAwIGVtdWxhdGlvbikuCgpBZnRlciB5b3UgaGF2ZSBib290ZWQgdGhlIGlt YWdlIG9uIGEgcGh5c2ljYWwgbWFjaGluZSAoc28geW91IGNhbiBleHBsb2l0CktWTSksIHlvdSBj YW4gYm9vdCB0aGUgc2FtZSBpbWFnZSBhIHNlY29uZCB0aW1lIChyZWN1cnNpdmVseSkgd2l0aCBR RU1VLgpUaGVyZWZvcmUsIHlvdSBjYW4gcnVuIGFsbCB0aGUgdGVzdHMgYWJvdmUgYWxzbyBmcm9t IHdpdGhpbiB0aGUgdmlydHVhbAptYWNoaW5lIGVudmlyb25tZW50LgoKVG8gbWFrZSBWTSB0ZXN0 aW5nIGVhc2llciwgdGhlIGhvbWUgZGlyZWN0b3J5IGNvbnRhaW5zIHNvbWUKc29tZSB1c2VmdWwg c2NyaXB0cyB0byBzZXQgdXAgYW5kIGxhdW5jaCBWTXMgb24gdGhlIHBoeXNpY2FsIG1hY2hpbmUu CgorICJwcmVwLXRhcHMuc2giCiAgY3JlYXRlcyBhbmQgc2V0cyB1cCB0d28gcGVybWFuZW50IHRh cCBpbnRlcmZhY2VzICgidGFwMDEiIGFuZCAidGFwMDIiKQogIGFuZCBhIExpbnV4IGluLWtlcm5l bCBicmlkZ2UuIFRoZSB0YXAgaW50ZXJmYWNlcyBhcmUgdGhlbiBicmlkZ2VkCiAgdG9nZXRoZXIg b24gdGhlIHNhbWUgYnJpZGdlLiBUaGUgYnJpZGdlIGludGVyZmFjZSAoImJyMCIpLCBpcyBnaXZl bgogIHRoZSBhZGRyZXNzIDEwLjAuMC4yMDAvMjQuCgogIFRoaXMgc2V0dXAgY2FuIGJlIHVzZWQg dG8gbWFrZSB0d28gVk1zIGNvbW11bmljYXRlIHRocm91Z2ggdGhlCiAgaG9zdCBicmlkZ2UsIG9y IHRvIHRlc3QgdGhlIHNwZWVkIG9mIGEgbGludXggc3dpdGNoIHVzaW5nCiAgbDJvcGVuCgorICJ1 bnByZXAtdGFwcy5zaCIKICB1bmRvZXMgdGhlIGFib3ZlIHNldHVwLgoKKyAibGF1bmNoLXFlbXUu c2giCiAgY2FuIGJlIHVzZWQgdG8gcnVuIFFFTVUgdmlydHVhbCBtYWNoaW5lcy4gSXQgdGFrZXMg Zm91ciBhcmd1bWVudHM6CgogICAgKyBUaGUgZmlyc3QgYXJndW1lbnQgY2FuIGJlICJxZW11IiBv ciAia3ZtIiwgZGVwZW5kaW5nIG9uCiAgICAgIHdoZXRoZXIgd2Ugd2FudCB0byB1c2UgdGhlIHN0 YW5kYXJkIFFFTVUgYmluYXJ5IHRyYW5zbGF0aW9uCiAgICAgIG9yIHRoZSBoYXJkd2FyZSB2aXJ0 dWFsaXphdGlvbiBhY2NlbGVyYXRpb24uCgogICAgKyBUaGUgdGhpcmQgYXJndW1lbnQgY2FuIGJl ICItLXRhcCIsICItLW5ldHVzZXIiIG9yICItLXZhbGUiLAogICAgICBhbmQgdGVsbHMgUUVNVSB3 aGF0IG5ldHdvcmsgYmFja2VuZCB0byB1c2U6IGEgdGFwIGRldmljZSwKICAgICAgdGhlIFFFTVUg dXNlciBuZXR3b3JraW5nIChzbGlycCksIG9yIGEgVkFMRSBzd2l0Y2ggcG9ydC4KCiAgICArIFdo ZW4gdGhlIHRoaXJkIGFyZ3VtZW50IGlzICItLXRhcCIgb3IgIi0tdmFsZSIsIHRoZSBmb3VydGgK ICAgICAgYXJndW1lbnQgc3BlY2lmaWVzIGFuIGluZGV4IChlLmcuICIwMSIsICIwMiIsIGV0Yy4u KSB3aGljaAogICAgICB0ZWxscyBRRU1VIHdoYXQgdGFwIGRldmljZSBvciBWQUxFIHBvcnQgdG8g dXNlIGFzIGJhY2tlbmQuCgogIFlvdSBjYW4gbWFudWFsbHkgbW9kaWZ5IHRoZSBzY3JpcHQgdG8g c2V0IHRoZSBzaGVsbCB2YXJpYWJsZXMgdGhhdAogIHNlbGVjdCB0aGUgdHlwZSBvZiBlbXVsYXRl ZCBkZXZpY2UgKGUuZy4gIGUxMDAwLCB2aXJ0aW8tbmV0LXBjaSwgLi4uKQogIGFuZCByZWxhdGVk IG9wdGlvbnMgKGlvZXZlbnRmZCwgdmlydGlvIHZob3N0LCBlMTAwMCBtaXRpZ2F0aW9uLCAuLi4u KS4KCiAgVGhlIGRlZmF1bHQgc2V0dXAgaGFzIGFuICJlMTAwMCIgZGV2aWNlIHdpdGggaW50ZXJy dXB0IG1pdGlnYXRpb24KICBkaXNhYmxlZC4KCllvdSBjYW4gdHJ5IHRoZSBwYXJhdmlydHVhbGl6 ZWQgZTEwMDAgZGV2aWNlICgiZTEwMDAtcGFyYXZpcnQiKQpvciB0aGUgInZpcnRpby1uZXQiIGRl dmljZSB0byBnZXQgYmV0dGVyIHBlcmZvcm1hbmNlLiBIb3dldmVyLCBiZWFyCmluIG1pbmQgdGhh dCB0aGVzZSBwYXJhdmlydHVhbGl6ZWQgZGV2aWNlcyBkb24ndCBoYXZlIG5ldG1hcCBzdXBwb3J0 Cih3aGVyZWFzIHRoZSBzdGFuZGFyZCBlMTAwMCBkb2VzIGhhdmUgbmV0bWFwIHN1cHBvcnQpLgoK RXhhbXBsZXM6CgogICAgIyBSdW4gYSBrdm0gVk0gYXR0YWNoZWQgdG8gdGhlIHBvcnQgMDEgb2Yg YSBWQUxFIHN3aXRjaAogICAgLi9sYXVuY2gtcWVtdS5zaCBrdm0gLS12YWxlIDAxCgogICAgIyBS dW4gYSBrdm0gVk0gYXR0YWNoZWQgdG8gdGhlIHBvcnQgMDIgb2YgdGhlIHNhbWUgVkFMRSBzd2l0 Y2gKICAgIC4vbGF1bmNoLXFlbXUuc2gga3ZtIC0tdmFsZSAwMgoKICAgICMgUnVuIGEga3ZtIFZN IGF0dGFjaGVkIHRvIHRoZSB0YXAgY2FsbGVkICJ0YXAwMSIKICAgIC4vbGF1bmNoLXFlbXUuc2gg a3ZtIC0tdGFwIDAxCgogICAgIyBSdW4gYSBrdm0gVk0gYXR0YWNoZWQgdG8gdGhlIHRhcCBjYWxs ZWQgInRhcDAyIgogICAgLi9sYXVuY2gtcWVtdS5zaCBrdm0gLS10YXAgMDIKCgpHdWVzdC10by1n dWVzdCB0ZXN0cwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKSWYgeW91IHJ1biB0d28gVk1zIGF0dGFj aGVkIHRvIHRoZSBzYW1lIHN3aXRjaCAod2hpY2ggY2FuIGJlIGEgTGludXgKYnJpZGdlIG9yIGEg VkFMRSBzd2l0Y2gpLCB5b3UgY2FuIHJ1biBndWVzdC10by1ndWVzdCBleHBlcmltZW50cy4KCkFs bCB0aGUgdGVzdHMgcmVwb3J0ZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb25zIGFyZSBwb3NzaWJs ZSAobm9ybWFsCnNvY2tldHMsIHJhdyBzb2NrZXRzLCBwa3QtZ2VuLCAuLi4pLCBpbmRpcGVuZGVu dGx5IG9mIHRoZSBiYWNrZW5kIHVzZWQuCgpJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIHdlIGFz c3VtZSB0aGF0OgoKICAgICsgRWFjaCBWTSBoYXMgYW4gZXRoZXJuZXQgaW50ZXJmYWNlIGNhbGxl ZCAiZXRoMCIuCgogICAgKyBUaGUgaW50ZXJmYWNlIG9mIHRoZSBmaXJzdCBWTSBpcyBnaXZlbiB0 aGUgSVAgMTAuMC4wLjEvMjQuCgogICAgKyBUaGUgaW50ZXJmYWNlIG9mIHRoZSBzZWNvbmQgVk0g aXMgZ2l2ZW4gdGhlIElQIDEwLjAuMC4yLzI0LgoKICAgICsgVGhlIExpbnV4IGJyaWRnZSBpbnRl cmZhY2UgImJyMCIgb24gdGhlIGhvc3QgaXMgZ2l2ZW4gdGhlCiAgICAgIElQIDEwLjAuMC4yMDAv MjQuCgpFeGFtcGxlczoKCiAgICBbMV0gIyMjIFRlc3QgVURQIHNob3J0IHBhY2tldHMgb3ZlciB0 cmFkaXRpb25hbCBzb2NrZXRzICMjIwogICAgICAgICMgT24gdGhlIGd1ZXN0IDEwLjAuMC4yIHJ1 bgogICAgICAgICAgICBuZXRzZXJ2ZXIKICAgICAgICAjIG9uIHRoZSBndWVzdCAxMC4wLjAuMSBy dW4KICAgICAgICAgICAgbmV0cGVyZiAtSDEwLjAuMC4yIC10VURQX1NUUkVBTSAtLSAtbTgKCiAg ICBbMl0gIyMjIFRlc3QgVURQIHNob3J0IHBhY2tldHMgd2l0aCBwa3QtZ2VuICMjIwogICAgICAg ICMgT24gdGhlIGd1ZXN0IDEwLjAuMC4yIHJ1bgogICAgICAgICAgICBwa3QtZ2VuIC1pZXRoMCAt ZnJ4CiAgICAgICAgIyBPbiB0aGUgZ3Vlc3QgMTAuMC4wLjEgcnVuCiAgICAgICAgICAgIHBrdC1n ZW4gLWlldGgwIC1mdHgKCiAgICBbM10gIyMjIFRlc3QgZ3Vlc3QtdG8tZ3Vlc3QgbGF0ZW5jeSAj IyMKICAgICAgICAjIE9uIHRoZSBndWVzdCAxMC4wLjAuMiBydW4KICAgICAgICAgICAgbmV0c2Vy dmVyCiAgICAgICAgIyBPbiB0aGUgZ3Vlc3QgMTAuMC4wLjEgcnVuCiAgICAgICAgICAgIG5ldHBl cmYgLUgxMC4wLjAuMiAtdFRDUF9SUgoKTm90ZSB0aGF0IHlvdSBjYW4gdXNlIHBrdC1nZW4gaW50 byBhIFZNIG9ubHkgaWYgdGhlIGVtdWxhdGVkIGV0aGVybmV0CmRldmljZSBpcyBzdXBwb3J0ZWQg YnkgbmV0bWFwLiBUaGUgZGVmYXVsdCBlbXVsYXRlZCBkZXZpY2UgaXMKImUxMDAwIiwgd2hpY2gg aGFzIG5ldG1hcCBzdXBwb3J0LiAgSWYgeW91IHRyeSB0byBydW4gcGt0LWdlbiBvbgphbiB1bnN1 cHBvcnRlZCBkZXZpY2UsIHBrdC1nZW4gd2lsbCBub3Qgd29yaywgcmVwb3J0aW5nIHRoYXQgaXQg aXMKdW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBpbnRlcmZhY2UuCgoKR3Vlc3QtdG8taG9zdCB0ZXN0 cyAoZm9sbG93cyBmcm9tIHRoZSBwcmV2aW91cyBzZWN0aW9uKQotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJZiB5b3UgcnVuIG9ubHkgYSBW TSBvbiB5b3VyIGhvc3QgbWFjaGluZSwgeW91IGNhbiBtZWFzdXJlIHRoZQpuZXR3b3JrIHBlcmZv cm1hbmNlIGJldHdlZW4gdGhlIFZNIGFuZCB0aGUgaG9zdCBtYWNoaW5lLiAgSW4gdGhpcwpjYXNl IHRoZSBleHBlcmltZW50IHNldHVwIGRlcGVuZHMgb24gdGhlIGJhY2tlbmQgeW91IGFyZSB1c2lu Zy4KCldpdGggdGhlIHRhcCBiYWNrZW5kLCB5b3UgY2FuIHVzZSB0aGUgYnJpZGdlIGludGVyZmFj ZSAiYnIwIiBhcyBhCmNvbW11bmljYXRpb24gZW5kcG9pbnQuIFlvdSBjYW4gcnVuIG5vcm1hbC9y YXcgc29ja2V0cyBleHBlcmltZW50cywKYnV0IHlvdSBjYW5ub3QgdXNlIHBrdC1nZW4gb24gdGhl ICJicjAiIGludGVyZmFjZSwgc2luY2UgdGhlIExpbnV4CmJyaWRnZSBpbnRlcmZhY2UgaXMgbm90 IHN1cHBvcnRlZCBieSBuZXRtYXAuCgpFeGFtcGxlcyB3aXRoIHRoZSB0YXAgYmFja2VuZDoKCiAg ICBbMV0gIyMjIFRlc3QgVENQIHRocm91Z2hwdXQgb3ZlciB0cmFkaXRpb25hbCBzb2NrZXRzICMj IwogICAgICAgICMgT24gdGhlIGhvc3QgcnVuCiAgICAgICAgICAgIG5ldHNlcnZlcgogICAgICAg ICMgb24gdGhlIGd1ZXN0IDEwLjAuMC4xIHJ1bgogICAgICAgICAgICBuZXRwZXJmIC1IMTAuMC4w LjIwMCAtdFRDUF9TVFJFQU0KCiAgICBbMl0gIyMjIFRlc3QgVURQIHNob3J0IHBhY2tldHMgd2l0 aCBwa3QtZ2VuIGFuZCBsMiAjIyMKICAgICAgICAjIE9uIHRoZSBob3N0IHJ1bgogICAgICAgICAg ICBsMm9wZW4gLXIgYnIwIGwycmVjdgogICAgICAgICMgT24gdGhlIGd1ZXN0IDEwLjAuMC4xIHJ1 biAoeHg6eXk6eno6d3c6dXU6dnYgaXMgdGhlCiAgICAgICAgIyAiYnIwIiBoYXJkd2FyZSBhZGRy ZXNzKQogICAgICAgICAgICBwa3QtZ2VuIC1pZXRoMCAtZnR4IC1kMTAuMC4wLjIwMDo3Nzc3IC1E eHg6eXk6eno6d3c6dXU6dnYKCgpXaXRoIHRoZSBWQUxFIGJhY2tlbmQgeW91IGNhbiBwZXJmb3Jt IG9ubHkgVURQIHRlc3RzLCBzaW5jZSB3ZSBkb24ndCBoYXZlCmEgbmV0bWFwIGFwcGxpY2F0aW9u IHdoaWNoIGltcGxlbWVudHMgYSBUQ1AgZW5kcG9pbnQ6IHBrdC1nZW4gZ2VuZXJhdGVzClVEUCBw YWNrZXRzLgpBcyBhIGNvbW11bmljYXRpb24gZW5kcG9pbnQgb24gdGhlIGhvc3QsIHlvdSBjYW4g dXNlIGEgdmlydHVhbCBWQUxFIHBvcnQKb3BlbmVkIG9uIHRoZSBmbHkgYnkgYSBwa3QtZ2VuIGlu c3RhbmNlLgoKRXhhbXBsZXMgd2l0aCB0aGUgVkFMRSBiYWNrZW5kOgoKICAgIFsxXSAjIyMgVGVz dCBVRFAgc2hvcnQgcGFja2V0cyAjIyMKICAgICAgICAjIE9uIHRoZSBob3N0IHJ1bgogICAgICAg ICAgICBwa3QtZ2VuIC1pdmFsZTA6OTkgLWZyeAogICAgICAgICMgT24gdGhlIGd1ZXN0IDEwLjAu MC4xIHJ1bgogICAgICAgICAgICBwa3QtZ2VuIC1pZXRoMCAtZnR4CgogICAgWzJdICMjIyBUZXN0 IFVEUCBiaWcgcGFja2V0cyAocmVjZWl2ZXIgb24gdGhlIGd1ZXN0KSAjIyMKICAgICAgICAjIE9u IHRoZSBndWVzdCAxMC4wLjAuMSBydW4KICAgICAgICAgICAgcGt0LWdlbiAtaWV0aDAgLWZyeAog ICAgICAgICMgT24gdGhlIGhvc3QgcnVuIHBrdC1nZW4gLWl2YWxlMDo5OSAtZnR4IC1sMTQ2MAoK --047d7b604cbc65dca304f0b88f04--