From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============3927824149569988714==" MIME-Version: 1.0 From: Kirubakaran Kaliannan Subject: Re: [SPDK] how to use spdk's nvme over fabrics Date: Thu, 01 Dec 2016 09:45:24 +0530 Message-ID: <829dcf39f64c9f86c4992fea1cc3af80@mail.gmail.com> In-Reply-To: 37B08312E007AE46A00101F43DA919DD43D07DDA@FMSMSX105.amr.corp.intel.com List-ID: To: spdk@lists.01.org --===============3927824149569988714== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi, I have a question regarding this, 1. Do the target to be on the same version (linux kernel 4.8) as of initiator. ? or is there any minimum version I have to be in. ? I am using 3.18 linux kernel 2. Since the support is through the Mellanox, do we need to have the same OFED version to be installed on both initiator and target ? Thanks -kiru *From:* SPDK [mailto:spdk-bounces(a)lists.01.org] *On Behalf Of *Walker, Benjamin *Sent:* Wednesday, November 30, 2016 10:27 PM *To:* Storage Performance Development Kit *Subject:* Re: [SPDK] how to use spdk's nvme over fabrics The guide linked below is our best attempt at documentation so far. I do really need to write more. The general outline is the following, assuming you have two systems (initiator and target) connected via RDMA NICs: 1) On the target system, compile SPDK. Follow the guide linked below to start the SPDK NVMe-oF target application. A fully documented example configuration file is in /etc/nvmf/nvmf.conf.in =EF=BF=BDC use t= hat as the starting point. 2) On the initiator system, make sure you are running Linux kernel 4.8 and have nvme-cli installed. This is outside of SPDK, so we don=E2=80=99t p= rovide instructions on how to do this. By far, the easiest way is to just install Fedora 24/25 on the initiator. It has a suitable kernel by default and the nvme-cli tool is packaged, so you have zero additional configuration to do. 3) The nvme-cli tool is capable of configuring the Linux kernel=E2=80= =99s built-in NVMe-oF initiator to connect to a target. You simply type something like =E2=80=9Cnvme connect =EF=BF=BDCt rdma =EF=BF=BDCa -s <= port> -n =E2=80=9D, where the values match the ones you put into the SPDK NVMe-oF target=E2=80=99s configuration file. The initiator will then connect and a block device will appear on the initiator system at /dev/nvmeX. Only step #1 is SPDK-specific. Step #2 and #3 are the same if you are using the Linux kernel=E2=80=99s NVMe-oF target =EF=BF=BDC that=E2=80=99s why we = don=E2=80=99t really document those today. *From:* SPDK [mailto:spdk-bounces(a)lists.01.org ] *On Behalf Of *Lei Zhu *Sent:* Tuesday, November 29, 2016 7:54 PM *To:* Storage Performance Development Kit *Subject:* [SPDK] =E7=AD=94=E5=A4=8D: how to use spdk's nvme over fabrics *Hi,* *You can follow this guide:* *NVMe over Fabrics Target Getting Started Guide* http://www.spdk.io/spdk/doc/nvmf_getting_started.html *=E5=8F=91=E4=BB=B6=E4=BA=BA**:* SPDK [mailto:spdk-bounces(a)lists.01.org <= spdk-bounces(a)lists.01.org>] *=E4=BB=A3=E8=A1=A8 *Wang, Teng *=E5=8F=91=E9=80=81=E6=97=B6=E9=97=B4:* 2016=E5=B9=B411=E6=9C=8830=E6=97=A5= 6:45 *=E6=94=B6=E4=BB=B6=E4=BA=BA:* spdk(a)lists.01.org *=E4=B8=BB=E9=A2=98:* [SPDK] how to use spdk's nvme over fabrics Hi all, Is there any detailed instruction or sample code for using SPDK's NVMe over fabrics? How to set up the experiment? I would really appreciate if anyone give me some Instructions or materials on this. Thanks, Teng --===============3927824149569988714== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0 L2h0bWw7IGNoYXJzZXQ9Z2IyMzEyIj48bWV0YSBuYW1lPSJHZW5lcmF0b3IiIGNvbnRlbnQ9Ik1p Y3Jvc29mdCBXb3JkIDEyIChmaWx0ZXJlZCBtZWRpdW0pIj48c3R5bGU+PCEtLQovKiBGb250IERl ZmluaXRpb25zICovCkBmb250LWZhY2UKCXtmb250LWZhbWlseTpTaW1TdW47CglwYW5vc2UtMToy IDEgNiAwIDMgMSAxIDEgMSAxO30KQGZvbnQtZmFjZQoJe2ZvbnQtZmFtaWx5OiJDYW1icmlhIE1h dGgiOwoJcGFub3NlLTE6MiA0IDUgMyA1IDQgNiAzIDIgNDt9CkBmb250LWZhY2UKCXtmb250LWZh bWlseTpDYWxpYnJpOwoJcGFub3NlLTE6MiAxNSA1IDIgMiAyIDQgMyAyIDQ7fQpAZm9udC1mYWNl Cgl7Zm9udC1mYW1pbHk6VGFob21hOwoJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7fQpA Zm9udC1mYWNlCgl7Zm9udC1mYW1pbHk6Ik1pY3Jvc29mdCBZYUhlaSI7CglwYW5vc2UtMToyIDEx IDUgMyAyIDIgNCAyIDIgNDt9CkBmb250LWZhY2UKCXtmb250LWZhbWlseToiXEBNaWNyb3NvZnQg WWFIZWkiOwoJcGFub3NlLTE6MiAxMSA1IDMgMiAyIDQgMiAyIDQ7fQpAZm9udC1mYWNlCgl7Zm9u dC1mYW1pbHk6IlxAU2ltU3VuIjsKCXBhbm9zZS0xOjIgMSA2IDAgMyAxIDEgMSAxIDE7fQovKiBT dHlsZSBEZWZpbml0aW9ucyAqLwpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9y bWFsCgl7bWFyZ2luOjBpbjsKCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKCWZvbnQtc2l6ZToxMS4w cHQ7Cglmb250LWZhbWlseToiQ2FsaWJyaSIsInNhbnMtc2VyaWYiO30KYTpsaW5rLCBzcGFuLk1z b0h5cGVybGluawoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsKCWNvbG9yOiMwNTYzQzE7Cgl0ZXh0 LWRlY29yYXRpb246dW5kZXJsaW5lO30KYTp2aXNpdGVkLCBzcGFuLk1zb0h5cGVybGlua0ZvbGxv d2VkCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5OwoJY29sb3I6Izk1NEY3MjsKCXRleHQtZGVjb3Jh dGlvbjp1bmRlcmxpbmU7fQpwLk1zb0FjZXRhdGUsIGxpLk1zb0FjZXRhdGUsIGRpdi5Nc29BY2V0 YXRlCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5OwoJbXNvLXN0eWxlLWxpbms6IkJhbGxvb24gVGV4 dCBDaGFyIjsKCW1hcmdpbjowaW47CgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Cglmb250LXNpemU6 OC4wcHQ7Cglmb250LWZhbWlseToiVGFob21hIiwic2Fucy1zZXJpZiI7fQpwLk1zb0xpc3RQYXJh Z3JhcGgsIGxpLk1zb0xpc3RQYXJhZ3JhcGgsIGRpdi5Nc29MaXN0UGFyYWdyYXBoCgl7bXNvLXN0 eWxlLXByaW9yaXR5OjM0OwoJbWFyZ2luLXRvcDowaW47CgltYXJnaW4tcmlnaHQ6MGluOwoJbWFy Z2luLWJvdHRvbTowaW47CgltYXJnaW4tbGVmdDouNWluOwoJbWFyZ2luLWJvdHRvbTouMDAwMXB0 OwoJZm9udC1zaXplOjExLjBwdDsKCWZvbnQtZmFtaWx5OiJDYWxpYnJpIiwic2Fucy1zZXJpZiI7 fQpzcGFuLkVtYWlsU3R5bGUxOAoJe21zby1zdHlsZS10eXBlOnBlcnNvbmFsOwoJZm9udC1mYW1p bHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjsKCWNvbG9yOndpbmRvd3RleHQ7fQpzcGFuLkVtYWls U3R5bGUxOQoJe21zby1zdHlsZS10eXBlOnBlcnNvbmFsOwoJZm9udC1mYW1pbHk6IkNhbGlicmki LCJzYW5zLXNlcmlmIjsKCWNvbG9yOiMxRjQ5N0Q7fQpzcGFuLkVtYWlsU3R5bGUyMAoJe21zby1z dHlsZS10eXBlOnBlcnNvbmFsOwoJZm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjsK CWNvbG9yOiMxRjQ5N0Q7fQpzcGFuLkVtYWlsU3R5bGUyMQoJe21zby1zdHlsZS10eXBlOnBlcnNv bmFsLXJlcGx5OwoJZm9udC1mYW1pbHk6IkNhbGlicmkiLCJzYW5zLXNlcmlmIjsKCWNvbG9yOiMx RjQ5N0Q7fQpzcGFuLkJhbGxvb25UZXh0Q2hhcgoJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRl eHQgQ2hhciI7Cgltc28tc3R5bGUtcHJpb3JpdHk6OTk7Cgltc28tc3R5bGUtbGluazoiQmFsbG9v biBUZXh0IjsKCWZvbnQtZmFtaWx5OiJUYWhvbWEiLCJzYW5zLXNlcmlmIjt9Ci5Nc29DaHBEZWZh dWx0Cgl7bXNvLXN0eWxlLXR5cGU6ZXhwb3J0LW9ubHk7Cglmb250LXNpemU6MTAuMHB0O30KQHBh Z2UgV29yZFNlY3Rpb24xCgl7c2l6ZTo4LjVpbiAxMS4waW47CgltYXJnaW46MS4waW4gMS4waW4g MS4waW4gMS4waW47fQpkaXYuV29yZFNlY3Rpb24xCgl7cGFnZTpXb3JkU2VjdGlvbjE7fQovKiBM aXN0IERlZmluaXRpb25zICovCkBsaXN0IGwwCgl7bXNvLWxpc3QtaWQ6MTQ5MDgyNDg1NDsKCW1z by1saXN0LXR5cGU6aHlicmlkOwoJbXNvLWxpc3QtdGVtcGxhdGUtaWRzOi0xODQxMTMyNTMyIDY3 Njk4NzAzIDY3Njk4NzEzIDY3Njk4NzE1IDY3Njk4NzAzIDY3Njk4NzEzIDY3Njk4NzE1IDY3Njk4 NzAzIDY3Njk4NzEzIDY3Njk4NzE1O30KQGxpc3QgbDA6bGV2ZWwxCgl7bXNvLWxldmVsLXRhYi1z dG9wOm5vbmU7Cgltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7Cgl0ZXh0LWluZGVudDot LjI1aW47fQpvbAoJe21hcmdpbi1ib3R0b206MGluO30KdWwKCXttYXJnaW4tYm90dG9tOjBpbjt9 Ci0tPjwvc3R5bGU+PC9oZWFkPjxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPSIjMDU2M0MxIiB2bGlu az0iIzk1NEY3MiI+PGRpdiBjbGFzcz0iV29yZFNlY3Rpb24xIj48cCBjbGFzcz0iTXNvTm9ybWFs Ij48c3BhbiBzdHlsZT0iY29sb3I6IzFmNDk3ZCI+wqA8L3NwYW4+PC9wPjxwIGNsYXNzPSJNc29O b3JtYWwiPjxzcGFuIHN0eWxlPSJjb2xvcjojMWY0OTdkIj5IaSw8L3NwYW4+PC9wPjxwIGNsYXNz PSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJjb2xvcjojMWY0OTdkIj7CoDwvc3Bhbj48L3A+PHAg Y2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxZjQ5N2QiPkkgaGF2ZSBhIHF1 ZXN0aW9uIHJlZ2FyZGluZyB0aGlzLDwvc3Bhbj48L3A+PHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw YW4gc3R5bGU9ImNvbG9yOiMxZjQ5N2QiPsKgPC9zcGFuPjwvcD48cCBjbGFzcz0iTXNvTGlzdFBh cmFncmFwaCIgc3R5bGU9InRleHQtaW5kZW50Oi0uMjVpbjttc28tbGlzdDpsMCBsZXZlbDEgbGZv MSI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxZjQ5N2QiPjxzcGFuIHN0eWxlPSJtc28tbGlzdDpJZ25v cmUiPjEuPHNwYW4gc3R5bGU9ImZvbnQ6Ny4wcHQgJnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7 Ij7CoMKgwqDCoMKgwqAgPC9zcGFuPjwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiMx ZjQ5N2QiPkRvIHRoZSB0YXJnZXQgdG8gYmUgb24gdGhlIHNhbWUgdmVyc2lvbiAobGludXgga2Vy bmVsIDQuOCkgYXMgb2YgaW5pdGlhdG9yLiA/IMKgb3IgaXMgdGhlcmUgYW55IG1pbmltdW0gdmVy c2lvbiBJIGhhdmUgdG8gYmUgaW4uID8gSSBhbSB1c2luZyAzLjE4IGxpbnV4IGtlcm5lbDwvc3Bh bj48L3A+PHAgY2xhc3M9Ik1zb0xpc3RQYXJhZ3JhcGgiIHN0eWxlPSJ0ZXh0LWluZGVudDotLjI1 aW47bXNvLWxpc3Q6bDAgbGV2ZWwxIGxmbzEiPjxzcGFuIHN0eWxlPSJjb2xvcjojMWY0OTdkIj48 c3BhbiBzdHlsZT0ibXNvLWxpc3Q6SWdub3JlIj4yLjxzcGFuIHN0eWxlPSJmb250OjcuMHB0ICZx dW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyI+wqDCoMKgwqDCoMKgIDwvc3Bhbj48L3NwYW4+PC9z cGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojMWY0OTdkIj5TaW5jZSB0aGUgc3VwcG9ydCBpcyB0aHJv dWdoIHRoZSBNZWxsYW5veCwgZG8gd2UgbmVlZCB0byBoYXZlIHRoZSBzYW1lIE9GRUQgdmVyc2lv biB0byBiZSBpbnN0YWxsZWQgb24gYm90aCBpbml0aWF0b3IgYW5kIHRhcmdldCA/PC9zcGFuPjwv cD48cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iY29sb3I6IzFmNDk3ZCI+wqA8L3Nw YW4+PC9wPjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJjb2xvcjojMWY0OTdkIj5U aGFua3M8L3NwYW4+PC9wPjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJjb2xvcjoj MWY0OTdkIj4ta2lydTwvc3Bhbj48L3A+PHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9 ImNvbG9yOiMxZjQ5N2QiPsKgPC9zcGFuPjwvcD48ZGl2PjxkaXYgc3R5bGU9ImJvcmRlcjpub25l O2JvcmRlci10b3A6c29saWQgI2I1YzRkZiAxLjBwdDtwYWRkaW5nOjMuMHB0IDBpbiAwaW4gMGlu Ij48cCBjbGFzcz0iTXNvTm9ybWFsIj48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtm b250LWZhbWlseTomcXVvdDtUYWhvbWEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OyI+RnJv bTo8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZx dW90O1RhaG9tYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7Ij4gU1BESyBbbWFpbHRvOjxh IGhyZWY9Im1haWx0bzpzcGRrLWJvdW5jZXNAbGlzdHMuMDEub3JnIj5zcGRrLWJvdW5jZXNAbGlz dHMuMDEub3JnPC9hPl0gPGI+T24gQmVoYWxmIE9mIDwvYj5XYWxrZXIsIEJlbmphbWluPGJyPjxi PlNlbnQ6PC9iPiBXZWRuZXNkYXksIE5vdmVtYmVyIDMwLCAyMDE2IDEwOjI3IFBNPGJyPjxiPlRv OjwvYj4gU3RvcmFnZSBQZXJmb3JtYW5jZSBEZXZlbG9wbWVudCBLaXQ8YnI+PGI+U3ViamVjdDo8 L2I+IFJlOiBbU1BES10gaG93IHRvIHVzZSBzcGRrJiMzOTtzIG52bWUgb3ZlciBmYWJyaWNzPC9z cGFuPjwvcD48L2Rpdj48L2Rpdj48cCBjbGFzcz0iTXNvTm9ybWFsIj7CoDwvcD48cCBjbGFzcz0i TXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iY29sb3I6IzFmNDk3ZCI+VGhlIGd1aWRlIGxpbmtlZCBi ZWxvdyBpcyBvdXIgYmVzdCBhdHRlbXB0IGF0IGRvY3VtZW50YXRpb24gc28gZmFyLiBJIGRvIHJl YWxseSBuZWVkIHRvIHdyaXRlIG1vcmUuIFRoZSBnZW5lcmFsIG91dGxpbmUgaXMgdGhlIGZvbGxv d2luZywgYXNzdW1pbmcgeW91IGhhdmUgdHdvIHN5c3RlbXMgKGluaXRpYXRvciBhbmQgdGFyZ2V0 KSBjb25uZWN0ZWQgdmlhIFJETUEgTklDczo8L3NwYW4+PC9wPjxwIGNsYXNzPSJNc29Ob3JtYWwi PjxzcGFuIHN0eWxlPSJjb2xvcjojMWY0OTdkIj7CoDwvc3Bhbj48L3A+PHAgY2xhc3M9Ik1zb0xp c3RQYXJhZ3JhcGgiIHN0eWxlPSJ0ZXh0LWluZGVudDotLjI1aW4iPjxzcGFuIHN0eWxlPSJjb2xv cjojMWY0OTdkIj4xKTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjcuMHB0O2ZvbnQtZmFt aWx5OiZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OywmcXVvdDtzZXJpZiZxdW90Oztjb2xvcjoj MWY0OTdkIj7CoMKgwqDCoMKgIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IzFmNDk3ZCI+T24g dGhlIHRhcmdldCBzeXN0ZW0sIGNvbXBpbGUgU1BESy4gRm9sbG93IHRoZSBndWlkZSBsaW5rZWQg YmVsb3cgdG8gc3RhcnQgdGhlIFNQREsgTlZNZS1vRiB0YXJnZXQgYXBwbGljYXRpb24uIEEgZnVs bHkgZG9jdW1lbnRlZCBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBpbiAmbHQ7c3BkayBy ZXBvJmd0Oy9ldGMvbnZtZi88YSBocmVmPSJodHRwOi8vbnZtZi5jb25mLmluIj5udm1mLmNvbmYu aW48L2E+IO+/vUMgdXNlIHRoYXQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50Ljwvc3Bhbj48L3A+PHAg Y2xhc3M9Ik1zb0xpc3RQYXJhZ3JhcGgiIHN0eWxlPSJ0ZXh0LWluZGVudDotLjI1aW4iPjxzcGFu IHN0eWxlPSJjb2xvcjojMWY0OTdkIj4yKTwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjcu MHB0O2ZvbnQtZmFtaWx5OiZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OywmcXVvdDtzZXJpZiZx dW90Oztjb2xvcjojMWY0OTdkIj7CoMKgwqDCoMKgIDwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6 IzFmNDk3ZCI+T24gdGhlIGluaXRpYXRvciBzeXN0ZW0sIG1ha2Ugc3VyZSB5b3UgYXJlIHJ1bm5p bmcgTGludXgga2VybmVsIDQuOCBhbmQgaGF2ZSBudm1lLWNsaSBpbnN0YWxsZWQuIFRoaXMgaXMg b3V0c2lkZSBvZiBTUERLLCBzbyB3ZSBkb27igJl0IHByb3ZpZGUgaW5zdHJ1Y3Rpb25zIG9uIGhv dyB0byBkbyB0aGlzLiBCeSBmYXIsIHRoZSBlYXNpZXN0IHdheSBpcyB0byBqdXN0IGluc3RhbGwg RmVkb3JhIDI0LzI1IG9uIHRoZSBpbml0aWF0b3IuIEl0IGhhcyBhIHN1aXRhYmxlIGtlcm5lbCBi eSBkZWZhdWx0IGFuZCB0aGUgbnZtZS1jbGkgdG9vbCBpcyBwYWNrYWdlZCwgc28geW91IGhhdmUg emVybyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gdG8gZG8uPC9zcGFuPjwvcD48cCBjbGFzcz0i TXNvTGlzdFBhcmFncmFwaCIgc3R5bGU9InRleHQtaW5kZW50Oi0uMjVpbiI+PHNwYW4gc3R5bGU9 ImNvbG9yOiMxZjQ5N2QiPjMpPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6Ny4wcHQ7Zm9u dC1mYW1pbHk6JnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7LCZxdW90O3NlcmlmJnF1b3Q7O2Nv bG9yOiMxZjQ5N2QiPsKgwqDCoMKgwqAgPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjojMWY0OTdk Ij5UaGUgbnZtZS1jbGkgdG9vbCBpcyBjYXBhYmxlIG9mIGNvbmZpZ3VyaW5nIHRoZSBMaW51eCBr ZXJuZWzigJlzIGJ1aWx0LWluIE5WTWUtb0YgaW5pdGlhdG9yIHRvIGNvbm5lY3QgdG8gYSB0YXJn ZXQuIFlvdSBzaW1wbHkgdHlwZSBzb21ldGhpbmcgbGlrZSDigJxudm1lIGNvbm5lY3Qg77+9Q3Qg cmRtYSDvv71DYSAmbHQ7aXAmZ3Q7IC1zICZsdDtwb3J0Jmd0OyAtbiAmbHQ7bnFuJmd0O+KAnSwg d2hlcmUgdGhlIHZhbHVlcyBtYXRjaCB0aGUgb25lcyB5b3UgcHV0IGludG8gdGhlIFNQREsgTlZN ZS1vRiB0YXJnZXTigJlzIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhlIGluaXRpYXRvciB3aWxsIHRo ZW4gY29ubmVjdCBhbmQgYSBibG9jayBkZXZpY2Ugd2lsbCBhcHBlYXIgb24gdGhlIGluaXRpYXRv ciBzeXN0ZW0gYXQgL2Rldi9udm1lWC48L3NwYW4+PC9wPjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxz cGFuIHN0eWxlPSJjb2xvcjojMWY0OTdkIj7CoDwvc3Bhbj48L3A+PHAgY2xhc3M9Ik1zb05vcm1h bCI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxZjQ5N2QiPk9ubHkgc3RlcCAjMSBpcyBTUERLLXNwZWNp ZmljLiBTdGVwICMyIGFuZCAjMyBhcmUgdGhlIHNhbWUgaWYgeW91IGFyZSB1c2luZyB0aGUgTGlu dXgga2VybmVs4oCZcyBOVk1lLW9GIHRhcmdldCDvv71DIHRoYXTigJlzIHdoeSB3ZSBkb27igJl0 IHJlYWxseSBkb2N1bWVudCB0aG9zZSB0b2RheS48L3NwYW4+PC9wPjxwIGNsYXNzPSJNc29Ob3Jt YWwiPjxhIG5hbWU9Il9NYWlsRW5kQ29tcG9zZSI+PC9hPjxzcGFuIHN0eWxlPSJjb2xvcjojMWY0 OTdkIj7CoDwvc3Bhbj48L3A+PGRpdj48ZGl2IHN0eWxlPSJib3JkZXI6bm9uZTtib3JkZXItdG9w OnNvbGlkICNlMWUxZTEgMS4wcHQ7cGFkZGluZzozLjBwdCAwaW4gMGluIDBpbiI+PHAgY2xhc3M9 Ik1zb05vcm1hbCI+PGEgbmFtZT0iX19fX19yZXBseXNlcGFyYXRvciI+PC9hPjxiPkZyb206PC9i PiBTUERLIFs8YSBocmVmPSJtYWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZyI+bWFpbHRv OnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmc8L2E+XSA8Yj5PbiBCZWhhbGYgT2YgPC9iPkxlaSBa aHU8YnI+PGI+U2VudDo8L2I+IFR1ZXNkYXksIE5vdmVtYmVyIDI5LCAyMDE2IDc6NTQgUE08YnI+ PGI+VG86PC9iPiBTdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50IEtpdCAmbHQ7PGEgaHJl Zj0ibWFpbHRvOnNwZGtAbGlzdHMuMDEub3JnIj5zcGRrQGxpc3RzLjAxLm9yZzwvYT4mZ3Q7PGJy PjxiPlN1YmplY3Q6PC9iPiBbU1BES10gPHNwYW4gbGFuZz0iWkgtQ04iIHN0eWxlPSJmb250LWZh bWlseTpTaW1TdW4iPuetlOWkjTwvc3Bhbj46IGhvdyB0byB1c2Ugc3BkayYjMzk7cyBudm1lIG92 ZXIgZmFicmljczwvcD48L2Rpdj48L2Rpdj48cCBjbGFzcz0iTXNvTm9ybWFsIj7CoDwvcD48cCBj bGFzcz0iTXNvTm9ybWFsIj48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjguMHB0O2ZvbnQtZmFt aWx5OiZxdW90O0FyaWFsJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Y29sb3I6IzMzMzMz MyI+SGksPC9zcGFuPjwvYj48L3A+PHAgY2xhc3M9Ik1zb05vcm1hbCI+PGI+PHNwYW4gc3R5bGU9 ImZvbnQtc2l6ZTo4LjBwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OywmcXVvdDtzYW5z LXNlcmlmJnF1b3Q7O2NvbG9yOiMzMzMzMzMiPsKgPC9zcGFuPjwvYj48L3A+PHAgY2xhc3M9Ik1z b05vcm1hbCI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo4LjBwdDtmb250LWZhbWlseTomcXVv dDtBcmlhbCZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7O2NvbG9yOiMzMzMzMzMiPllvdSBj YW4gZm9sbG93IHRoaXMgZ3VpZGU6PC9zcGFuPjwvYj48L3A+PHAgY2xhc3M9Ik1zb05vcm1hbCI+ PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToyNy4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7QXJpYWwm cXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90Oztjb2xvcjojMzMzMzMzIj5OVk1lIG92ZXIgRmFi cmljcyBUYXJnZXQgR2V0dGluZyBTdGFydGVkIEd1aWRlPC9zcGFuPjwvYj48c3BhbiBzdHlsZT0i Zm9udC1zaXplOjEwLjVwdDtjb2xvcjojMWY0OTdkIj48L3NwYW4+PC9wPjxwIGNsYXNzPSJNc29O b3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuNXB0O2NvbG9yOiMxZjQ5N2QiPjxhIGhy ZWY9Imh0dHA6Ly93d3cuc3Bkay5pby9zcGRrL2RvYy9udm1mX2dldHRpbmdfc3RhcnRlZC5odG1s Ij5odHRwOi8vd3d3LnNwZGsuaW8vc3Bkay9kb2MvbnZtZl9nZXR0aW5nX3N0YXJ0ZWQuaHRtbDwv YT48L3NwYW4+PC9wPjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6 MTAuNXB0O2NvbG9yOiMxZjQ5N2QiPsKgPC9zcGFuPjwvcD48ZGl2PjxkaXYgc3R5bGU9ImJvcmRl cjpub25lO2JvcmRlci10b3A6c29saWQgI2UxZTFlMSAxLjBwdDtwYWRkaW5nOjMuMHB0IDBpbiAw aW4gMGluIj48cCBjbGFzcz0iTXNvTm9ybWFsIj48Yj48c3BhbiBsYW5nPSJaSC1DTiIgc3R5bGU9 ImZvbnQtZmFtaWx5OiZxdW90O01pY3Jvc29mdCBZYUhlaSZxdW90OywmcXVvdDtzYW5zLXNlcmlm JnF1b3Q7Ij7lj5Hku7bkuro8L3NwYW4+PC9iPjxiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTom cXVvdDtNaWNyb3NvZnQgWWFIZWkmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OyI+Ojwvc3Bh bj48L2I+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O01pY3Jvc29mdCBZYUhlaSZxdW90 OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7Ij4gU1BESyBbPGEgaHJlZj0ibWFpbHRvOnNwZGstYm91 bmNlc0BsaXN0cy4wMS5vcmciPm1haWx0bzpzcGRrLWJvdW5jZXNAbGlzdHMuMDEub3JnPC9hPl0g PGI+PHNwYW4gbGFuZz0iWkgtQ04iPuS7o+ihqCA8L3NwYW4+PC9iPldhbmcsIFRlbmc8YnI+PGI+ PHNwYW4gbGFuZz0iWkgtQ04iPuWPkemAgeaXtumXtDwvc3Bhbj46PC9iPiAyMDE2PHNwYW4gbGFu Zz0iWkgtQ04iPuW5tDwvc3Bhbj4xMTxzcGFuIGxhbmc9IlpILUNOIj7mnIg8L3NwYW4+MzA8c3Bh biBsYW5nPSJaSC1DTiI+5pelPC9zcGFuPiA2OjQ1PGJyPjxiPjxzcGFuIGxhbmc9IlpILUNOIj7m lLbku7bkuro8L3NwYW4+OjwvYj4gPGEgaHJlZj0ibWFpbHRvOnNwZGtAbGlzdHMuMDEub3JnIj5z cGRrQGxpc3RzLjAxLm9yZzwvYT48YnI+PGI+PHNwYW4gbGFuZz0iWkgtQ04iPuS4u+mimDwvc3Bh bj46PC9iPiBbU1BES10gaG93IHRvIHVzZSBzcGRrJiMzOTtzIG52bWUgb3ZlciBmYWJyaWNzPC9z cGFuPjwvcD48L2Rpdj48L2Rpdj48cCBjbGFzcz0iTXNvTm9ybWFsIj7CoDwvcD48cCBjbGFzcz0i TXNvTm9ybWFsIj5IaSBhbGwsPC9wPjxwIGNsYXNzPSJNc29Ob3JtYWwiPsKgPC9wPjxwIGNsYXNz PSJNc29Ob3JtYWwiPklzIHRoZXJlIGFueSBkZXRhaWxlZCBpbnN0cnVjdGlvbiBvciBzYW1wbGUg Y29kZSBmb3IgdXNpbmcgU1BESyYjMzk7cyBOVk1lIG92ZXIgZmFicmljcz88L3A+PHAgY2xhc3M9 Ik1zb05vcm1hbCI+SG93IHRvIHNldCB1cCB0aGUgZXhwZXJpbWVudD8gSSB3b3VsZCByZWFsbHkg YXBwcmVjaWF0ZSBpZiBhbnlvbmUgZ2l2ZSBtZSBzb21lIDwvcD48cCBjbGFzcz0iTXNvTm9ybWFs Ij5JbnN0cnVjdGlvbnMgb3IgbWF0ZXJpYWxzIG9uIHRoaXMuIDwvcD48cCBjbGFzcz0iTXNvTm9y bWFsIj7CoDwvcD48cCBjbGFzcz0iTXNvTm9ybWFsIj5UaGFua3MsPC9wPjxwIGNsYXNzPSJNc29O b3JtYWwiPlRlbmc8L3A+PHAgY2xhc3M9Ik1zb05vcm1hbCI+wqA8L3A+PC9kaXY+PC9ib2R5Pjwv aHRtbD4K --===============3927824149569988714==--