From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi0-x235.google.com (mail-oi0-x235.google.com [IPv6:2607:f8b0:4003:c06::235]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.bufferbloat.net (Postfix) with ESMTPS id 55E3E3B29E for ; Wed, 25 Jan 2017 18:41:19 -0500 (EST) Received: by mail-oi0-x235.google.com with SMTP id w204so127107935oiw.0 for ; Wed, 25 Jan 2017 15:41:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=TJ5rT5Eae5vnrcqvUu66hXSyVXco6sZQ3eXrRHD8Xcc=; b=IqYljSQ0jNwsK8PdH7cz54K5EdLqq+Z2MzsFmJxBKoKGiG4+BEHPKluo1hcXfRkswl vF1EIBMftCzZ0NMi/sq6NPG4rF1kmPCV5eLYj9pbP12tVdBqtM6PPJDfbBQCBa4BZW4e wn6LS2WO/VT79Kf9YOoqLKCxAADBzm4JkISCearEWl/GN5b9lJbbZb+1zxRCThUwXIbi cobkiPs6Sd18VpDmBsbs478OUyCTNbq/pXvrS30WngxV6p2EgXiX3/lusnM5PR+VDBvx DiYAl/v61VxGSMF+Q7STL2ZFb8vSCHqzungmsfKx910i35YvDI/7Ty3W4f1YF1aEF55f 9qlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=TJ5rT5Eae5vnrcqvUu66hXSyVXco6sZQ3eXrRHD8Xcc=; b=myz8rJKP/APf/OiZW6MOss/ASxhF87bCn7Jq4mFdyy+igtFO0/RdrVTp4Rp57SBNY0 LDXeDZFFK7wqt4cVRIShRSxZ/uEoIM35bJ1n0S3PekH3orbEvzHOPIIeAGi2Z8yRhMUp oGFTeq+T/SphjyayjYqqng7Rfdp6j2RJ0b27oXbN9x7q3AeXtzs+DxAA/WHNnylAdlPn q4AciSssJS8hwXkNmQgKzMUItzRRfkChHUNLve8j7XaIoDDKiCNT2Fzrzaw5moaiY18E oSMEkUtLZO1j46r4/pYdWauAptB3Kg+8JLdoRf45BsTWHKFGD+yjfXUERxJX7uo60/+y kqfg== X-Gm-Message-State: AIkVDXLMaQsXE7lxxzxfLNp3yOqLnFASKCkRVd0GMbx/xxUcVxWUSs9+1sixvRXX/PFgVlr1j2rYtBzdvCn4WQ== X-Received: by 10.202.84.193 with SMTP id i184mr19126148oib.73.1485387678704; Wed, 25 Jan 2017 15:41:18 -0800 (PST) MIME-Version: 1.0 Received: by 10.157.1.21 with HTTP; Wed, 25 Jan 2017 15:41:18 -0800 (PST) In-Reply-To: <1485387201.5145.81.camel@edumazet-glaptop3.roam.corp.google.com> References: <1485387201.5145.81.camel@edumazet-glaptop3.roam.corp.google.com> From: Hans-Kristian Bakke Date: Thu, 26 Jan 2017 00:41:18 +0100 Message-ID: To: Eric Dumazet Cc: Neal Cardwell , bloat Content-Type: multipart/alternative; boundary=001a113dececf16b170546f3c4f4 Subject: Re: [Bloat] Initial tests with BBR in kernel 4.9 X-BeenThere: bloat@lists.bufferbloat.net X-Mailman-Version: 2.1.20 Precedence: list List-Id: General list for discussing Bufferbloat List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Jan 2017 23:41:19 -0000 --001a113dececf16b170546f3c4f4 Content-Type: text/plain; charset=UTF-8 I listed the qdiscs and put them with the captures, but the setup is: KVM VM: tun1 (qdisc: fq, OpenVPN UDP to dst 443) eth0 (qdisc: fq, local connection to internet) BBR always set Nics are using virtio and is connected to a Open vSwitch Physical host (Newest proxmox VE with kernel 4.4): fq_codel on all interfaces (default qdisc). 2 x gigabit in OVS bond LACP (with rebalancing every 10 sec) towards the switch Switch is then connected using a 4 x gigabit LACP to a Debian testing linux gateway (fq_codel on all nics). This gateway is using my own traffic shaper script (HTB/FQ_CODEL) based what I could find from your bufferbloat project on the internet and shapes the 500/500 fiber link to just within specs (only upload is touched, no inbound shaping/policing) The script is actually quite useful for it's simplicity and can be found here: https://github.com/hkbakke/tc-gen The VPN connection is terminated in netherlands on a gigabit VPN server with around 35 ms RTT. On 26 January 2017 at 00:33, Eric Dumazet wrote: > > On Thu, 2017-01-26 at 00:04 +0100, Hans-Kristian Bakke wrote: > > I can do that. I guess I should do the capture from tun1 as that is > > the place that the tcp-traffic is visible? My non-virtual nic is only > > seeing OpenVPN encapsulated UDP-traffic. > > > > But is FQ installed at the point TCP sockets are ? > > You should give us "tc -s qdisc show xxx" so that we can check if > pacing (throttling) actually happens. > > > > On 25 January 2017 at 23:48, Neal Cardwell > > wrote: > > On Wed, Jan 25, 2017 at 5:38 PM, Hans-Kristian Bakke > > wrote: > > Actually.. the 1-4 mbit/s results with fq sporadically > > appears again as I keep testing but it is most likely > > caused by all the unknowns between me an my > > testserver. But still, changing to pfifo_qdisc seems > > to normalize the throughput again with BBR, could this > > be one of those times where BBR and pacing actually is > > getting hurt for playing nice in some very variable > > bottleneck on the way? > > > > > > Possibly. Would you be able to take a tcpdump trace of each > > trial (headers only would be ideal), and post on a web site > > somewhere a pcap trace for one of the slow trials? > > > > > > For example: > > > > > > tcpdump -n -w /tmp/out.pcap -s 120 -i eth0 -c 1000000 & > > > > > > > > thanks, > > neal > > > > > > > > > > On 25 January 2017 at 23:01, Neal Cardwell > > wrote: > > On Wed, Jan 25, 2017 at 3:54 PM, Hans-Kristian > > Bakke wrote: > > Hi > > > > > > Kernel 4.9 finally landed in Debian > > testing so I could finally test BBR in > > a real life environment that I have > > struggled with getting any kind of > > performance out of. > > > > > > The challenge at hand is UDP based > > OpenVPN through europe at around 35 ms > > rtt to my VPN-provider with plenty of > > available bandwith available in both > > ends and everything completely unknown > > in between. After tuning the > > UDP-buffers up to make room for my 500 > > mbit/s symmetrical bandwith at 35 ms > > the download part seemed to work > > nicely at an unreliable 150 to 300 > > mbit/s, while the upload was stuck at > > 30 to 60 mbit/s. > > > > > > Just by activating BBR the bandwith > > instantly shot up to around 150 mbit/s > > using a fat tcp test to a public > > iperf3 server located near my VPN exit > > point in the Netherlands. Replace BBR > > with qubic again and the performance > > is once again all over the place > > ranging from very bad to bad, but > > never better than 1/3 of BBRs "steady > > state". In other words "instant WIN!" > > > > > > Glad to hear it. Thanks for the test report! > > > > However, seeing the requirement of fq > > and pacing for BBR and noticing that I > > am running pfifo_fast within a VM with > > virtio NIC on a Proxmox VE host with > > fq_codel on all physical interfaces, I > > was surprised to see that it worked so > > well. > > I then replaced pfifo_fast with fq and > > the performance went right down to > > only 1-4 mbit/s from around 150 > > mbit/s. Removing the fq again regained > > the performance at once. > > > > > > I have got some questions to you guys > > that know a lot more than me about > > these things: > > 1. Do fq (and fq_codel) even work > > reliably in a VM? What is the best > > choice for default qdisc to use in a > > VM in general? > > > > > > Eric covered this one. We are not aware of > > specific issues with fq in VM environments. > > And we have tested that fq works sufficiently > > well on Google Cloud VMs. > > > > 2. Why do BBR immediately "fix" all my > > issues with upload through that > > "unreliable" big BDP link with > > pfifo_fast when fq pacing is a > > requirement? > > > > > > For BBR, pacing is part of the design in order > > to make BBR more "gentle" in terms of the rate > > at which it sends, in order to put less > > pressure on buffers and keep packet loss > > lower. This is particularly important when a > > BBR flow is restarting from idle. In this case > > BBR starts with a full cwnd, and it counts on > > pacing to pace out the packets at the > > estimated bandwidth, so that the queue can > > stay relatively short and yet the pipe can be > > filled immediately. > > > > > > Running BBR without pacing makes BBR more > > aggressive, particularly in restarting from > > idle, but also in the steady state, where BBR > > tries to use pacing to keep the queue short. > > > > > > For bulk transfer tests with one flow, running > > BBR without pacing will likely cause higher > > queues and loss rates at the bottleneck, which > > may negatively impact other traffic sharing > > that bottleneck. > > > > 3. Could fq_codel on the physical host > > be the reason that it still works? > > > > > > Nope, fq_codel does not implement pacing. > > > > 4. Do BBR _only_ work with fq pacing > > or could fq_codel be used as a > > replacement? > > > > > > Nope, BBR needs pacing to work correctly, and > > currently fq is the only Linux qdisc that > > implements pacing. > > > > 5. Is BBR perhaps modified to do the > > right thing without having to change > > the qdisc in the current kernel 4.9? > > > > > > Nope. Linux 4.9 contains the initial public > > release of BBR from September 2016. And there > > have been no code changes since then (just > > expanded comments). > > > > > > Thanks for the test report! > > > > > > neal > > > > > > > > > > > > > > > > > > _______________________________________________ > > Bloat mailing list > > Bloat@lists.bufferbloat.net > > https://lists.bufferbloat.net/listinfo/bloat > > > --001a113dececf16b170546f3c4f4 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFt aWx5OnZlcmRhbmEsc2Fucy1zZXJpZiI+SSBsaXN0ZWQgdGhlIHFkaXNjcyBhbmQgcHV0IHRoZW0g d2l0aCB0aGUgY2FwdHVyZXMsIGJ1dCB0aGUgc2V0dXAgaXM6PGJyPjxicj5LVk0gVk06PC9kaXY+ PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFtaWx5OnZlcmRhbmEsc2Fu cy1zZXJpZiI+dHVuMSAocWRpc2M6IGZxLCBPcGVuVlBOIFVEUCB0byBkc3QgNDQzKTwvZGl2Pjxk aXYgY2xhc3M9ImdtYWlsX2RlZmF1bHQiIHN0eWxlPSJmb250LWZhbWlseTp2ZXJkYW5hLHNhbnMt c2VyaWYiPmV0aDAgKHFkaXNjOiBmcSwgbG9jYWwgY29ubmVjdGlvbiB0byBpbnRlcm5ldCk8L2Rp dj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6dmVyZGFuYSxz YW5zLXNlcmlmIj5CQlIgYWx3YXlzIHNldDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2RlZmF1bHQi IHN0eWxlPSJmb250LWZhbWlseTp2ZXJkYW5hLHNhbnMtc2VyaWYiPk5pY3MgYXJlIHVzaW5nIHZp cnRpbyBhbmQgaXMgY29ubmVjdGVkIHRvIGEgT3BlbiB2U3dpdGNoPC9kaXY+PGRpdiBjbGFzcz0i Z21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFtaWx5OnZlcmRhbmEsc2Fucy1zZXJpZiI+PGJy PjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2RlZmF1bHQiIHN0eWxlPSJmb250LWZhbWlseTp2ZXJk YW5hLHNhbnMtc2VyaWYiPlBoeXNpY2FsIGhvc3QgKE5ld2VzdCBwcm94bW94IFZFIHdpdGgga2Vy bmVsIDQuNCk6PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFt aWx5OnZlcmRhbmEsc2Fucy1zZXJpZiI+ZnFfY29kZWwgb24gYWxsIGludGVyZmFjZXMgKGRlZmF1 bHQgcWRpc2MpLiAyIHggZ2lnYWJpdCBpbiBPVlMgYm9uZCBMQUNQICh3aXRoIHJlYmFsYW5jaW5n IGV2ZXJ5IDEwIHNlYykgdG93YXJkcyB0aGUgc3dpdGNoPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf ZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFtaWx5OnZlcmRhbmEsc2Fucy1zZXJpZiI+PGJyPjwvZGl2 PjxkaXYgY2xhc3M9ImdtYWlsX2RlZmF1bHQiIHN0eWxlPSJmb250LWZhbWlseTp2ZXJkYW5hLHNh bnMtc2VyaWYiPlN3aXRjaCBpcyB0aGVuIGNvbm5lY3RlZCB1c2luZyBhIDQgeCBnaWdhYml0IExB Q1AgdG8gYSBEZWJpYW4gdGVzdGluZyBsaW51eCBnYXRld2F5IChmcV9jb2RlbCBvbiBhbGwgbmlj cykuIFRoaXMgZ2F0ZXdheSBpcyB1c2luZyBteSBvd24gdHJhZmZpYyBzaGFwZXIgc2NyaXB0IChI VEIvRlFfQ09ERUwpIGJhc2VkIHdoYXQgSSBjb3VsZCBmaW5kIGZyb20geW91ciBidWZmZXJibG9h dCBwcm9qZWN0IG9uIHRoZSBpbnRlcm5ldCBhbmQgc2hhcGVzIHRoZSA1MDAvNTAwIGZpYmVyIGxp bmsgdG8ganVzdCB3aXRoaW4gc3BlY3MgKG9ubHkgdXBsb2FkIGlzIHRvdWNoZWQsIG5vIGluYm91 bmQgc2hhcGluZy9wb2xpY2luZyk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHls ZT0iZm9udC1mYW1pbHk6dmVyZGFuYSxzYW5zLXNlcmlmIj48YnI+PC9kaXY+PGRpdiBjbGFzcz0i Z21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFtaWx5OnZlcmRhbmEsc2Fucy1zZXJpZiI+VGhl IHNjcmlwdCBpcyBhY3R1YWxseSBxdWl0ZSB1c2VmdWwgZm9yIGl0JiMzOTtzIHNpbXBsaWNpdHkg YW5kIGNhbiBiZSBmb3VuZCBoZXJlOsKgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2hrYmFr a2UvdGMtZ2VuIj5odHRwczovL2dpdGh1Yi5jb20vaGtiYWtrZS90Yy1nZW48L2E+PC9kaXY+PGRp diBjbGFzcz0iZ21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFtaWx5OnZlcmRhbmEsc2Fucy1z ZXJpZiI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2RlZmF1bHQiIHN0eWxlPSJmb250LWZh bWlseTp2ZXJkYW5hLHNhbnMtc2VyaWYiPlRoZSBWUE4gY29ubmVjdGlvbiBpcyB0ZXJtaW5hdGVk IGluIG5ldGhlcmxhbmRzIG9uIGEgZ2lnYWJpdCBWUE4gc2VydmVyIHdpdGggYXJvdW5kIDM1IG1z IFJUVC7CoDwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGRpdiBjbGFz cz0iZ21haWxfcXVvdGUiPk9uIDI2IEphbnVhcnkgMjAxNyBhdCAwMDozMywgRXJpYyBEdW1hemV0 IDxzcGFuIGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0ibWFpbHRvOmVyaWMuZHVtYXpldEBnbWFpbC5j b20iIHRhcmdldD0iX2JsYW5rIj5lcmljLmR1bWF6ZXRAZ21haWwuY29tPC9hPiZndDs8L3NwYW4+ IHdyb3RlOjxicj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46 MCAwIDAgLjhleDtib3JkZXItbGVmdDoxcHggI2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij48 c3BhbiBjbGFzcz0iIj48YnI+DQpPbiBUaHUsIDIwMTctMDEtMjYgYXQgMDA6MDQgKzAxMDAsIEhh bnMtS3Jpc3RpYW4gQmFra2Ugd3JvdGU6PGJyPg0KJmd0OyBJIGNhbiBkbyB0aGF0LiBJIGd1ZXNz IEkgc2hvdWxkIGRvIHRoZSBjYXB0dXJlIGZyb20gdHVuMSBhcyB0aGF0IGlzPGJyPg0KJmd0OyB0 aGUgcGxhY2UgdGhhdCB0aGUgdGNwLXRyYWZmaWMgaXMgdmlzaWJsZT8gTXkgbm9uLXZpcnR1YWwg bmljIGlzIG9ubHk8YnI+DQomZ3Q7IHNlZWluZyBPcGVuVlBOIGVuY2Fwc3VsYXRlZCBVRFAtdHJh ZmZpYy48YnI+DQomZ3Q7PGJyPg0KPGJyPg0KPC9zcGFuPkJ1dCBpcyBGUSBpbnN0YWxsZWQgYXQg dGhlIHBvaW50IFRDUCBzb2NrZXRzIGFyZSA/PGJyPg0KPGJyPg0KWW91IHNob3VsZCBnaXZlIHVz ICZxdW90O3RjIC1zIHFkaXNjIHNob3cgeHh4JnF1b3Q7wqAgc28gdGhhdCB3ZSBjYW4gY2hlY2sg aWY8YnI+DQpwYWNpbmcgKHRocm90dGxpbmcpIGFjdHVhbGx5IGhhcHBlbnMuPGJyPg0KPGRpdiBj bGFzcz0iSE9FblpiIj48ZGl2IGNsYXNzPSJoNSI+PGJyPg0KPGJyPg0KJmd0OyBPbiAyNSBKYW51 YXJ5IDIwMTcgYXQgMjM6NDgsIE5lYWwgQ2FyZHdlbGwgJmx0OzxhIGhyZWY9Im1haWx0bzpuY2Fy ZHdlbGxAZ29vZ2xlLmNvbSI+bmNhcmR3ZWxsQGdvb2dsZS5jb208L2E+Jmd0Ozxicj4NCiZndDsg d3JvdGU6PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgT24gV2VkLCBKYW4gMjUsIDIwMTcgYXQgNToz OCBQTSwgSGFucy1LcmlzdGlhbiBCYWtrZTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCZsdDs8YSBo cmVmPSJtYWlsdG86aGtiYWtrZUBnbWFpbC5jb20iPmhrYmFra2VAZ21haWwuY29tPC9hPiZndDsg d3JvdGU6PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgQWN0dWFsbHkuLiB0aGUg MS00IG1iaXQvcyByZXN1bHRzIHdpdGggZnEgc3BvcmFkaWNhbGx5PGJyPg0KJmd0O8KgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgYXBwZWFycyBhZ2FpbiBhcyBJIGtlZXAgdGVzdGluZyBidXQgaXQg aXMgbW9zdCBsaWtlbHk8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjYXVzZWQg YnkgYWxsIHRoZSB1bmtub3ducyBiZXR3ZWVuIG1lIGFuIG15PGJyPg0KJmd0O8KgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgdGVzdHNlcnZlci4gQnV0IHN0aWxsLCBjaGFuZ2luZyB0byBwZmlmb19x ZGlzYyBzZWVtczxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRvIG5vcm1hbGl6 ZSB0aGUgdGhyb3VnaHB1dCBhZ2FpbiB3aXRoIEJCUiwgY291bGQgdGhpczxicj4NCiZndDvCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJlIG9uZSBvZiB0aG9zZSB0aW1lcyB3aGVyZSBCQlIgYW5k IHBhY2luZyBhY3R1YWxseSBpczxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGdl dHRpbmcgaHVydCBmb3IgcGxheWluZyBuaWNlIGluIHNvbWUgdmVyeSB2YXJpYWJsZTxicj4NCiZn dDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJvdHRsZW5lY2sgb24gdGhlIHdheT88YnI+DQom Z3Q7PGJyPg0KJmd0Ozxicj4NCiZndDvCoCDCoCDCoCDCoCDCoFBvc3NpYmx5LiBXb3VsZCB5b3Ug YmUgYWJsZSB0byB0YWtlIGEgdGNwZHVtcCB0cmFjZSBvZiBlYWNoPGJyPg0KJmd0O8KgIMKgIMKg IMKgIMKgdHJpYWwgKGhlYWRlcnMgb25seSB3b3VsZCBiZSBpZGVhbCksIGFuZCBwb3N0IG9uIGEg d2ViIHNpdGU8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqBzb21ld2hlcmUgYSBwY2FwIHRyYWNlIGZv ciBvbmUgb2YgdGhlIHNsb3cgdHJpYWxzPzxicj4NCiZndDs8YnI+DQomZ3Q7PGJyPg0KJmd0O8Kg IMKgIMKgIMKgIMKgRm9yIGV4YW1wbGU6PGJyPg0KJmd0Ozxicj4NCiZndDs8YnI+DQomZ3Q7wqAg wqAgwqAgwqAgwqAgwqAgdGNwZHVtcCAtbiAtdyAvdG1wL291dC5wY2FwIC1zIDEyMCAtaSBldGgw IC1jIDEwMDAwMDAgJmFtcDs8YnI+DQomZ3Q7PGJyPg0KJmd0Ozxicj4NCiZndDs8YnI+DQomZ3Q7 wqAgwqAgwqAgwqAgwqB0aGFua3MsPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgbmVhbDxicj4NCiZn dDs8YnI+DQomZ3Q7PGJyPg0KJmd0Ozxicj4NCiZndDs8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqBPbiAyNSBKYW51YXJ5IDIwMTcgYXQgMjM6MDEsIE5lYWwgQ2FyZHdlbGw8YnI+ DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAmbHQ7PGEgaHJlZj0ibWFpbHRvOm5jYXJk d2VsbEBnb29nbGUuY29tIj5uY2FyZHdlbGxAZ29vZ2xlLmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj4N CiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoE9uIFdlZCwgSmFuIDI1 LCAyMDE3IGF0IDM6NTQgUE0sIEhhbnMtS3Jpc3RpYW48YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBCYWtrZSAmbHQ7PGEgaHJlZj0ibWFpbHRvOmhrYmFra2VA Z21haWwuY29tIj5oa2Jha2tlQGdtYWlsLmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj4NCiZndDvCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEhpPGJyPg0KJmd0 Ozxicj4NCiZndDs8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBLZXJuZWwgNC45IGZpbmFsbHkgbGFuZGVkIGluIERlYmlhbjxicj4NCiZn dDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRlc3Rp bmcgc28gSSBjb3VsZCBmaW5hbGx5IHRlc3QgQkJSIGluPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYSByZWFsIGxpZmUgZW52aXJvbm1l bnQgdGhhdCBJIGhhdmU8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBzdHJ1Z2dsZWQgd2l0aCBnZXR0aW5nIGFueSBraW5kIG9mPGJyPg0K Jmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcGVy Zm9ybWFuY2Ugb3V0IG9mLjxicj4NCiZndDs8YnI+DQomZ3Q7PGJyPg0KJmd0O8KgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgVGhlIGNoYWxsZW5nZSBhdCBo YW5kIGlzIFVEUCBiYXNlZDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoE9wZW5WUE4gdGhyb3VnaCBldXJvcGUgYXQgYXJvdW5kIDM1IG1z PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgcnR0IHRvIG15IFZQTi1wcm92aWRlciB3aXRoIHBsZW50eSBvZjxicj4NCiZndDvCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGF2YWlsYWJsZSBiYW5k d2l0aCBhdmFpbGFibGUgaW4gYm90aDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGVuZHMgYW5kIGV2ZXJ5dGhpbmcgY29tcGxldGVseSB1 bmtub3duPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgaW4gYmV0d2Vlbi4gQWZ0ZXIgdHVuaW5nIHRoZTxicj4NCiZndDvCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFVEUC1idWZmZXJzIHVwIHRv IG1ha2Ugcm9vbSBmb3IgbXkgNTAwPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbWJpdC9zIHN5bW1ldHJpY2FsIGJhbmR3aXRoIGF0IDM1 IG1zPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgdGhlIGRvd25sb2FkIHBhcnQgc2VlbWVkIHRvIHdvcms8YnI+DQomZ3Q7wqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBuaWNlbHkgYXQgYW4gdW5y ZWxpYWJsZSAxNTAgdG8gMzAwPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgbWJpdC9zLCB3aGlsZSB0aGUgdXBsb2FkIHdhcyBzdHVjayBh dDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoDMwIHRvIDYwIG1iaXQvcy48YnI+DQomZ3Q7PGJyPg0KJmd0Ozxicj4NCiZndDvCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEp1c3QgYnkgYWN0aXZh dGluZyBCQlIgdGhlIGJhbmR3aXRoPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaW5zdGFudGx5IHNob3QgdXAgdG8gYXJvdW5kIDE1MCBt Yml0L3M8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqB1c2luZyBhIGZhdCB0Y3AgdGVzdCB0byBhIHB1YmxpYzxicj4NCiZndDvCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlwZXJmMyBzZXJ2ZXIg bG9jYXRlZCBuZWFyIG15IFZQTiBleGl0PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcG9pbnQgaW4gdGhlIE5ldGhlcmxhbmRzLiBSZXBs YWNlIEJCUjxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoHdpdGggcXViaWMgYWdhaW4gYW5kIHRoZSBwZXJmb3JtYW5jZTxicj4NCiZndDvC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlzIG9uY2Ug YWdhaW4gYWxsIG92ZXIgdGhlIHBsYWNlPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcmFuZ2luZyBmcm9tIHZlcnkgYmFkIHRvIGJhZCwg YnV0PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgbmV2ZXIgYmV0dGVyIHRoYW4gMS8zIG9mIEJCUnMgJnF1b3Q7c3RlYWR5PGJyPg0KJmd0 O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc3RhdGUm cXVvdDsuIEluIG90aGVyIHdvcmRzICZxdW90O2luc3RhbnQgV0lOISZxdW90Ozxicj4NCiZndDs8 YnI+DQomZ3Q7PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg R2xhZCB0byBoZWFyIGl0LiBUaGFua3MgZm9yIHRoZSB0ZXN0IHJlcG9ydCE8YnI+DQomZ3Q7PGJy Pg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg SG93ZXZlciwgc2VlaW5nIHRoZSByZXF1aXJlbWVudCBvZiBmcTxicj4NCiZndDvCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGFuZCBwYWNpbmcgZm9yIEJC UiBhbmQgbm90aWNpbmcgdGhhdCBJPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYW0gcnVubmluZyBwZmlmb19mYXN0IHdpdGhpbiBhIFZN IHdpdGg8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqB2aXJ0aW8gTklDIG9uIGEgUHJveG1veCBWRSBob3N0IHdpdGg8YnI+DQomZ3Q7wqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBmcV9jb2RlbCBv biBhbGwgcGh5c2ljYWwgaW50ZXJmYWNlcywgSTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHdhcyBzdXJwcmlzZWQgdG8gc2VlIHRoYXQg aXQgd29ya2VkIHNvPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgd2VsbC48YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBJIHRoZW4gcmVwbGFjZWQgcGZpZm9fZmFzdCB3aXRoIGZx IGFuZDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoHRoZSBwZXJmb3JtYW5jZSB3ZW50IHJpZ2h0IGRvd24gdG88YnI+DQomZ3Q7wqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBvbmx5IDEtNCBtYml0 L3MgZnJvbSBhcm91bmQgMTUwPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgbWJpdC9zLiBSZW1vdmluZyB0aGUgZnEgYWdhaW4gcmVnYWlu ZWQ8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqB0aGUgcGVyZm9ybWFuY2UgYXQgb25jZS48YnI+DQomZ3Q7PGJyPg0KJmd0Ozxicj4NCiZn dDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEkgaGF2 ZSBnb3Qgc29tZSBxdWVzdGlvbnMgdG8geW91IGd1eXM8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0aGF0IGtub3cgYSBsb3QgbW9yZSB0 aGFuIG1lIGFib3V0PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgdGhlc2UgdGhpbmdzOjxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDEuIERvIGZxIChhbmQgZnFfY29kZWwpIGV2 ZW4gd29yazxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoHJlbGlhYmx5IGluIGEgVk0/IFdoYXQgaXMgdGhlIGJlc3Q8YnI+DQomZ3Q7wqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjaG9pY2UgZm9y IGRlZmF1bHQgcWRpc2MgdG8gdXNlIGluIGE8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBWTSBpbiBnZW5lcmFsPzxicj4NCiZndDs8YnI+ DQomZ3Q7PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgRXJp YyBjb3ZlcmVkIHRoaXMgb25lLiBXZSBhcmUgbm90IGF3YXJlIG9mPGJyPg0KJmd0O8KgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc3BlY2lmaWMgaXNzdWVzIHdpdGggZnEgaW4g Vk0gZW52aXJvbm1lbnRzLjxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoEFuZMKgIHdlIGhhdmUgdGVzdGVkIHRoYXQgZnEgd29ya3Mgc3VmZmljaWVudGx5PGJy Pg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgd2VsbCBvbiBHb29n bGUgQ2xvdWQgVk1zLjxicj4NCiZndDs8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAyLiBXaHkgZG8gQkJSIGltbWVkaWF0ZWx5ICZxdW90 O2ZpeCZxdW90OyBhbGwgbXk8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBpc3N1ZXMgd2l0aCB1cGxvYWQgdGhyb3VnaCB0aGF0PGJyPg0K Jmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgJnF1 b3Q7dW5yZWxpYWJsZSZxdW90OyBiaWcgQkRQIGxpbmsgd2l0aDxicj4NCiZndDvCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHBmaWZvX2Zhc3Qgd2hlbiBm cSBwYWNpbmcgaXMgYTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoHJlcXVpcmVtZW50Pzxicj4NCiZndDs8YnI+DQomZ3Q7PGJyPg0KJmd0 O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgRm9yIEJCUiwgcGFjaW5nIGlz IHBhcnQgb2YgdGhlIGRlc2lnbiBpbiBvcmRlcjxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoHRvIG1ha2UgQkJSIG1vcmUgJnF1b3Q7Z2VudGxlJnF1b3Q7IGlu IHRlcm1zIG9mIHRoZSByYXRlPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgYXQgd2hpY2ggaXQgc2VuZHMsIGluIG9yZGVyIHRvIHB1dCBsZXNzPGJyPg0KJmd0 O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcHJlc3N1cmUgb24gYnVmZmVy cyBhbmQga2VlcCBwYWNrZXQgbG9zczxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoGxvd2VyLiBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgd2hlbiBh PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgQkJSIGZsb3cg aXMgcmVzdGFydGluZyBmcm9tIGlkbGUuIEluIHRoaXMgY2FzZTxicj4NCiZndDvCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEJCUiBzdGFydHMgd2l0aCBhIGZ1bGwgY3duZCwg YW5kIGl0IGNvdW50cyBvbjxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoHBhY2luZyB0byBwYWNlIG91dCB0aGUgcGFja2V0cyBhdCB0aGU8YnI+DQomZ3Q7wqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBlc3RpbWF0ZWQgYmFuZHdpZHRoLCBz byB0aGF0IHRoZSBxdWV1ZSBjYW48YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqBzdGF5IHJlbGF0aXZlbHkgc2hvcnQgYW5kIHlldCB0aGUgcGlwZSBjYW4gYmU8 YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBmaWxsZWQgaW1t ZWRpYXRlbHkuPGJyPg0KJmd0Ozxicj4NCiZndDs8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBSdW5uaW5nIEJCUiB3aXRob3V0IHBhY2luZyBtYWtlcyBCQlIg bW9yZTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGFnZ3Jl c3NpdmUsIHBhcnRpY3VsYXJseSBpbiByZXN0YXJ0aW5nIGZyb208YnI+DQomZ3Q7wqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZGxlLCBidXQgYWxzbyBpbiB0aGUgc3RlYWR5 IHN0YXRlLCB3aGVyZSBCQlI8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqB0cmllcyB0byB1c2UgcGFjaW5nIHRvIGtlZXAgdGhlIHF1ZXVlIHNob3J0Ljxicj4N CiZndDs8YnI+DQomZ3Q7PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgRm9yIGJ1bGsgdHJhbnNmZXIgdGVzdHMgd2l0aCBvbmUgZmxvdywgcnVubmluZzxicj4N CiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEJCUiB3aXRob3V0IHBh Y2luZyB3aWxsIGxpa2VseSBjYXVzZSBoaWdoZXI8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBxdWV1ZXMgYW5kIGxvc3MgcmF0ZXMgYXQgdGhlIGJvdHRsZW5l Y2ssIHdoaWNoPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg bWF5IG5lZ2F0aXZlbHkgaW1wYWN0IG90aGVyIHRyYWZmaWMgc2hhcmluZzxicj4NCiZndDvCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRoYXQgYm90dGxlbmVjay48YnI+DQom Z3Q7PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgMy4gQ291bGQgZnFfY29kZWwgb24gdGhlIHBoeXNpY2FsIGhvc3Q8YnI+DQomZ3Q7wqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBiZSB0aGUgcmVh c29uIHRoYXQgaXQgc3RpbGwgd29ya3M/PGJyPg0KJmd0Ozxicj4NCiZndDs8YnI+DQomZ3Q7wqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBOb3BlLCBmcV9jb2RlbCBkb2VzIG5v dCBpbXBsZW1lbnQgcGFjaW5nLjxicj4NCiZndDs8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA0LiBEbyBCQlIgX29ubHlfIHdvcmsgd2l0 aCBmcSBwYWNpbmc8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBvciBjb3VsZCBmcV9jb2RlbCBiZSB1c2VkIGFzIGE8YnI+DQomZ3Q7wqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXBsYWNlbWVu dD88YnI+DQomZ3Q7PGJyPg0KJmd0Ozxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoE5vcGUsIEJCUiBuZWVkcyBwYWNpbmcgdG8gd29yayBjb3JyZWN0bHksIGFu ZDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGN1cnJlbnRs eSBmcSBpcyB0aGUgb25seSBMaW51eCBxZGlzYyB0aGF0PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaW1wbGVtZW50cyBwYWNpbmcuPGJyPg0KJmd0Ozxicj4N CiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDUu IElzIEJCUiBwZXJoYXBzIG1vZGlmaWVkIHRvIGRvIHRoZTxicj4NCiZndDvCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJpZ2h0IHRoaW5nIHdpdGhvdXQg aGF2aW5nIHRvIGNoYW5nZTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoHRoZSBxZGlzYyBpbiB0aGUgY3VycmVudCBrZXJuZWwgNC45Pzxi cj4NCiZndDs8YnI+DQomZ3Q7PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgTm9wZS4gTGludXggNC45IGNvbnRhaW5zIHRoZSBpbml0aWFsIHB1YmxpYzxicj4N CiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJlbGVhc2Ugb2YgQkJS IGZyb20gU2VwdGVtYmVyIDIwMTYuIEFuZCB0aGVyZTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoGhhdmUgYmVlbiBubyBjb2RlIGNoYW5nZXMgc2luY2UgdGhl biAoanVzdDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGV4 cGFuZGVkIGNvbW1lbnRzKS48YnI+DQomZ3Q7PGJyPg0KJmd0Ozxicj4NCiZndDvCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFRoYW5rcyBmb3IgdGhlIHRlc3QgcmVwb3J0ITxi cj4NCiZndDs8YnI+DQomZ3Q7PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgbmVhbDxicj4NCiZndDs8YnI+DQomZ3Q7PGJyPg0KJmd0Ozxicj4NCiZndDs8YnI+ DQomZ3Q7PGJyPg0KJmd0Ozxicj4NCiZndDs8YnI+DQomZ3Q7PGJyPg0KPC9kaXY+PC9kaXY+PGRp diBjbGFzcz0iSE9FblpiIj48ZGl2IGNsYXNzPSJoNSI+Jmd0OyBfX19fX19fX19fX19fX19fX19f X19fX19fX19fX188d2JyPl9fX19fX19fX19fX19fX19fPGJyPg0KJmd0OyBCbG9hdCBtYWlsaW5n IGxpc3Q8YnI+DQomZ3Q7IDxhIGhyZWY9Im1haWx0bzpCbG9hdEBsaXN0cy5idWZmZXJibG9hdC5u ZXQiPkJsb2F0QGxpc3RzLmJ1ZmZlcmJsb2F0Lm5ldDwvYT48YnI+DQomZ3Q7IDxhIGhyZWY9Imh0 dHBzOi8vbGlzdHMuYnVmZmVyYmxvYXQubmV0L2xpc3RpbmZvL2Jsb2F0IiByZWw9Im5vcmVmZXJy ZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL2xpc3RzLmJ1ZmZlcmJsb2F0Lm5ldC88d2JyPmxp c3RpbmZvL2Jsb2F0PC9hPjxicj4NCjxicj4NCjxicj4NCjwvZGl2PjwvZGl2PjwvYmxvY2txdW90 ZT48L2Rpdj48YnI+PC9kaXY+DQo= --001a113dececf16b170546f3c4f4--