From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============3298682052081390938==" MIME-Version: 1.0 From: Sreeni (Sreenivasa) Busam (Stellus) Subject: Re: [SPDK] Request for comments regarding latency measurements Date: Tue, 14 Nov 2017 19:20:53 +0000 Message-ID: In-Reply-To: 622F4407872BA447A16110F65453358C070FB4C9A1A6@FMSAMAIL.fmsa.local List-ID: To: spdk@lists.01.org --===============3298682052081390938== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Paul, That would be great. Please add me as the reviewer for this task. It would be really helpful. Thanks, Sreeni From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Paul Von-Stamw= itz Sent: Tuesday, November 14, 2017 10:46 AM To: Storage Performance Development Kit Subject: Re: [SPDK] Request for comments regarding latency measurements Hi Sreeni, Since we have consensus on Option #2, we do plan on submitting a patch for = it. We can certainly include you as a reviewer if you like. -Paul From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Sreeni (Sreeni= vasa) Busam (Stellus) Sent: Tuesday, November 14, 2017 10:28 AM To: Storage Performance Development Kit Subject: Re: [SPDK] Request for comments regarding latency measurements Hi Jim, I am not an SPDK driver expert. As I have been working on the same problem = in the last 2 weeks, in my investigation, I concluded the same as you have = written in the email, option 2 looked like easy and good solution. The bdev interfaces have been well developed for NVMe devices and it looks = similar to the Linux kernel Storage driver except for the polling and inter= rupt differences to get the status. These are just my comments based on wha= t I understood so far. I have already been working on collecting the I/O statistics for the applic= ations on NVMe layer. For any applications using the bdev layer, I would li= ke to use your changes. When you are planning to submit the patch to reposi= tory ? Please let me know when you complete your investigation. Thanks, Sreeni From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Harris, James R Sent: Tuesday, November 14, 2017 7:43 AM To: Storage Performance Development Kit > Subject: Re: [SPDK] Request for comments regarding latency measurements Agreed - #2 is the way to go. While we=E2=80=99re on the topic - should we be resetting the stats when sp= dk_bdev_get_io_stat() is called? This eliminates the ability for two separ= ate applications to monitor stats in parallel =E2=80=93 or even a separate = application plus some future yet-to-be-written internal load-balancing moni= tor. I=E2=80=99m thinking that bdev should just keep the running total and= let the caller own tracking differences from the last time it called spdk_= bdev_get_io_stat(). -Jim From: SPDK = > on behalf of Nathan Marushak > Reply-To: Storage Performance Development Kit > Date: Tuesday, November 14, 2017 at 7:29 AM To: Storage Performance Development Kit > Subject: Re: [SPDK] Request for comments regarding latency measurements So, not being the technical expert so to speak =E2=98=BA, please take this = with a grain of salt. Agree with option #2. Seems like this would allow for= keeping stats across the different device types e.g. NVMe, NVML, NVMe-oF (= although that has a transport within NVMe, so it might be covered for eithe= r option). From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Luse, Paul E Sent: Tuesday, November 14, 2017 7:57 AM To: Storage Performance Development Kit > Subject: Re: [SPDK] Request for comments regarding latency measurements FWIW option 2 sounds like the most appropriate to me=E2=80=A6 Thx Paul From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Paul Von-Stamw= itz Sent: Monday, November 13, 2017 7:29 PM To: spdk(a)lists.01.org Subject: [SPDK] Request for comments regarding latency measurements Background: Bdev.c currently maintains a count of reads/writes/bytes_read/bytes_written= in channel->stat. This information is retrieved (and reset) via spdk_bdev_= get_io_stat. Proposal: Add latency information to channel->stat and enable the option to provide a= histogram. We can measure the latency of each IO and keep a running total on a read/wr= ite basis. We can also use the measured latency to keep a running count of = reads/writes in their associated histogram =E2=80=9Cbuckets=E2=80=9D. The question is, how do we measure latency? Option 1: Measure latency at the NVMe tracker . Currently, we already timestamp every command placed on the tracker if the = abort timeout callback is registered. When we remove a completed IO from th= e tracker, we can timestamp it again and calculate the latency. There are several issues here that need to be considered. We need to get the latency information back up to the bdev layer, most like= ly through a callback argument, but this would require a change the NVMe AP= I. If the bdev breaks down a request into smaller IOs, it can add up the la= tencies of the child IOs for io_stat and histogram purposes. Also, this method does not take into account any latency added by the spdk = bdev/nvme layers (except the poller.) If a request was queued before being = placed on the tracker, then the time it was queued is not factored into the= latency calculation. Option 2: Measure latency at the bdev layer. We can timestamp at submit and again at completion. This would keep all io_= stat information local to bdev and would take into account the overhead of = most queued operations. Any applications written directly to the NVMe layer= would have to calculate their own latencies, but that is currently true fo= r all io_stats. I=E2=80=99m sure that there are other issues I am missing, but I would appr= eciate any comments on how best to move forward on this. Thanks, Paul --===============3298682052081390938== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv VFIvUkVDLWh0bWw0MCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IkdlbmVyYXRv ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUgKGZpbHRlcmVkIG1lZGl1bSkiPg0KPHN0eWxl PjwhLS0NCi8qIEZvbnQgRGVmaW5pdGlvbnMgKi8NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6 V2luZ2RpbmdzOw0KCXBhbm9zZS0xOjUgMCAwIDAgMCAwIDAgMCAwIDA7fQ0KQGZvbnQtZmFjZQ0K CXtmb250LWZhbWlseToiQ2FtYnJpYSBNYXRoIjsNCglwYW5vc2UtMToyIDQgNSAzIDUgNCA2IDMg MiA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6Ik1hbGd1biBHb3RoaWMiOw0KCXBhbm9z ZS0xOjIgMTEgNSAzIDIgMCAwIDIgMCA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6Q2Fs aWJyaTsNCglwYW5vc2UtMToyIDE1IDUgMiAyIDIgNCAzIDIgNDt9DQpAZm9udC1mYWNlDQoJe2Zv bnQtZmFtaWx5OiJcQE1hbGd1biBHb3RoaWMiOw0KCXBhbm9zZS0xOjIgMTEgNSAzIDIgMCAwIDIg MCA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6VGFob21hOw0KCXBhbm9zZS0xOjIgMTEg NiA0IDMgNSA0IDQgMiA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6IkludGVsIENsZWFy Ijt9DQovKiBTdHlsZSBEZWZpbml0aW9ucyAqLw0KcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwg ZGl2Lk1zb05vcm1hbA0KCXttYXJnaW46MGluOw0KCW1hcmdpbi1ib3R0b206LjAwMDFwdDsNCglm b250LXNpemU6MTEuMHB0Ow0KCWZvbnQtZmFtaWx5OiJDYWxpYnJpIixzYW5zLXNlcmlmO30NCmE6 bGluaywgc3Bhbi5Nc29IeXBlcmxpbmsNCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCWNvbG9y OmJsdWU7DQoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9DQphOnZpc2l0ZWQsIHNwYW4uTXNv SHlwZXJsaW5rRm9sbG93ZWQNCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCWNvbG9yOnB1cnBs ZTsNCgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCnAuTXNvQWNldGF0ZSwgbGkuTXNvQWNl dGF0ZSwgZGl2Lk1zb0FjZXRhdGUNCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCW1zby1zdHls ZS1saW5rOiJCYWxsb29uIFRleHQgQ2hhciI7DQoJbWFyZ2luOjBpbjsNCgltYXJnaW4tYm90dG9t Oi4wMDAxcHQ7DQoJZm9udC1zaXplOjguMHB0Ow0KCWZvbnQtZmFtaWx5OiJUYWhvbWEiLHNhbnMt c2VyaWY7fQ0KcC5Nc29MaXN0UGFyYWdyYXBoLCBsaS5Nc29MaXN0UGFyYWdyYXBoLCBkaXYuTXNv TGlzdFBhcmFncmFwaA0KCXttc28tc3R5bGUtcHJpb3JpdHk6MzQ7DQoJbWFyZ2luLXRvcDowaW47 DQoJbWFyZ2luLXJpZ2h0OjBpbjsNCgltYXJnaW4tYm90dG9tOjBpbjsNCgltYXJnaW4tbGVmdDou NWluOw0KCW1hcmdpbi1ib3R0b206LjAwMDFwdDsNCglmb250LXNpemU6MTEuMHB0Ow0KCWZvbnQt ZmFtaWx5OiJDYWxpYnJpIixzYW5zLXNlcmlmO30NCnNwYW4uQmFsbG9vblRleHRDaGFyDQoJe21z by1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQgQ2hhciI7DQoJbXNvLXN0eWxlLXByaW9yaXR5Ojk5 Ow0KCW1zby1zdHlsZS1saW5rOiJCYWxsb29uIFRleHQiOw0KCWZvbnQtZmFtaWx5OiJUYWhvbWEi LHNhbnMtc2VyaWY7fQ0Kc3Bhbi5FbWFpbFN0eWxlMjANCgl7bXNvLXN0eWxlLXR5cGU6cGVyc29u YWw7DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7DQoJY29sb3I6d2luZG93dGV4 dDt9DQpzcGFuLkVtYWlsU3R5bGUyMQ0KCXttc28tc3R5bGUtdHlwZTpwZXJzb25hbDsNCglmb250 LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjsNCgljb2xvcjojMUY0OTdEO30NCnNwYW4uRW1h aWxTdHlsZTIyDQoJe21zby1zdHlsZS10eXBlOnBlcnNvbmFsOw0KCWZvbnQtZmFtaWx5OiJJbnRl bCBDbGVhciI7DQoJY29sb3I6Izk5MDAwMDsNCglmb250LXdlaWdodDpub3JtYWw7DQoJZm9udC1z dHlsZTpub3JtYWw7DQoJdGV4dC1kZWNvcmF0aW9uOm5vbmUgbm9uZTt9DQpzcGFuLkVtYWlsU3R5 bGUyMw0KCXttc28tc3R5bGUtdHlwZTpwZXJzb25hbDsNCglmb250LWZhbWlseToiQ2FsaWJyaSIs c2Fucy1zZXJpZjsNCgljb2xvcjp3aW5kb3d0ZXh0O30NCnNwYW4uRW1haWxTdHlsZTI0DQoJe21z by1zdHlsZS10eXBlOnBlcnNvbmFsOw0KCWZvbnQtZmFtaWx5OiJDYWxpYnJpIixzYW5zLXNlcmlm Ow0KCWNvbG9yOiMxRjQ5N0Q7fQ0Kc3Bhbi5FbWFpbFN0eWxlMjUNCgl7bXNvLXN0eWxlLXR5cGU6 cGVyc29uYWw7DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7DQoJY29sb3I6IzFG NDk3RDt9DQpzcGFuLkVtYWlsU3R5bGUyNg0KCXttc28tc3R5bGUtdHlwZTpwZXJzb25hbC1yZXBs eTsNCglmb250LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjsNCgljb2xvcjojMUY0OTdEO30N Ci5Nc29DaHBEZWZhdWx0DQoJe21zby1zdHlsZS10eXBlOmV4cG9ydC1vbmx5Ow0KCWZvbnQtc2l6 ZToxMC4wcHQ7fQ0KQHBhZ2UgV29yZFNlY3Rpb24xDQoJe3NpemU6OC41aW4gMTEuMGluOw0KCW1h cmdpbjoxLjBpbiAxLjBpbiAxLjBpbiAxLjBpbjt9DQpkaXYuV29yZFNlY3Rpb24xDQoJe3BhZ2U6 V29yZFNlY3Rpb24xO30NCi0tPjwvc3R5bGU+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQo8bzpz aGFwZWRlZmF1bHRzIHY6ZXh0PSJlZGl0IiBzcGlkbWF4PSIxMDI2IiAvPg0KPC94bWw+PCFbZW5k aWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQo8bzpzaGFwZWxheW91dCB2OmV4dD0iZWRp dCI+DQo8bzppZG1hcCB2OmV4dD0iZWRpdCIgZGF0YT0iMSIgLz4NCjwvbzpzaGFwZWxheW91dD48 L3htbD48IVtlbmRpZl0tLT4NCjwvaGVhZD4NCjxib2R5IGJnY29sb3I9IndoaXRlIiBsYW5nPSJF Ti1VUyIgbGluaz0iYmx1ZSIgdmxpbms9InB1cnBsZSI+DQo8ZGl2IGNsYXNzPSJXb3JkU2VjdGlv bjEiPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5N0QiPkhp IFBhdWwsIDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFu IHN0eWxlPSJjb2xvcjojMUY0OTdEIj5UaGF0IHdvdWxkIGJlIGdyZWF0LiA8bzpwPjwvbzpwPjwv c3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3 RCI+UGxlYXNlIGFkZCBtZSBhcyB0aGUgcmV2aWV3ZXIgZm9yIHRoaXMgdGFzay4gSXQgd291bGQg YmUgcmVhbGx5IGhlbHBmdWwuPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05v cm1hbCI+PGEgbmFtZT0iX01haWxFbmRDb21wb3NlIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3 RCI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9hPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi PjxzcGFuIHN0eWxlPSJjb2xvcjojMUY0OTdEIj5UaGFua3MsPG86cD48L286cD48L3NwYW4+PC9w Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5N0QiPlNyZWVu aTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxl PSJjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8ZGl2Pg0KPGRp diBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAjRTFFMUUxIDEuMHB0O3BhZGRp bmc6My4wcHQgMGluIDBpbiAwaW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGI+RnJvbTo8L2I+ IFNQREsgW21haWx0bzpzcGRrLWJvdW5jZXNAbGlzdHMuMDEub3JnXSA8Yj5PbiBCZWhhbGYgT2YN CjwvYj5QYXVsIFZvbi1TdGFtd2l0ejxicj4NCjxiPlNlbnQ6PC9iPiBUdWVzZGF5LCBOb3ZlbWJl ciAxNCwgMjAxNyAxMDo0NiBBTTxicj4NCjxiPlRvOjwvYj4gU3RvcmFnZSBQZXJmb3JtYW5jZSBE ZXZlbG9wbWVudCBLaXQgJmx0O3NwZGtAbGlzdHMuMDEub3JnJmd0Ozxicj4NCjxiPlN1YmplY3Q6 PC9iPiBSZTogW1NQREtdIFJlcXVlc3QgZm9yIGNvbW1lbnRzIHJlZ2FyZGluZyBsYXRlbmN5IG1l YXN1cmVtZW50czxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29O b3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4g c3R5bGU9ImNvbG9yOiMxRjQ5N0QiPkhpIFNyZWVuaSw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+PG86cD4mbmJz cDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImNv bG9yOiMxRjQ5N0QiPlNpbmNlIHdlIGhhdmUgY29uc2Vuc3VzIG9uIE9wdGlvbiAjMiwgd2UgZG8g cGxhbiBvbiBzdWJtaXR0aW5nIGEgcGF0Y2ggZm9yIGl0LiBXZSBjYW4gY2VydGFpbmx5IGluY2x1 ZGUgeW91IGFzIGEgcmV2aWV3ZXIgaWYgeW91IGxpa2UuPG86cD48L286cD48L3NwYW4+PC9wPg0K PHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5N0QiPjxvOnA+Jm5i c3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJj b2xvcjojMUY0OTdEIj4tUGF1bDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29O b3JtYWwiPjxzcGFuIHN0eWxlPSJjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bh bj48L3A+DQo8ZGl2Pg0KPGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAj QjVDNERGIDEuMHB0O3BhZGRpbmc6My4wcHQgMGluIDBpbiAwaW4iPg0KPHAgY2xhc3M9Ik1zb05v cm1hbCI+PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7 VGFob21hJnF1b3Q7LHNhbnMtc2VyaWYiPkZyb206PC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9u dC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtUYWhvbWEmcXVvdDssc2Fucy1zZXJpZiI+ IFNQREsgWzxhIGhyZWY9Im1haWx0bzpzcGRrLWJvdW5jZXNAbGlzdHMuMDEub3JnIj5tYWlsdG86 c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZzwvYT5dDQo8Yj5PbiBCZWhhbGYgT2YgPC9iPlNyZWVu aSAoU3JlZW5pdmFzYSkgQnVzYW0gKFN0ZWxsdXMpPGJyPg0KPGI+U2VudDo8L2I+IFR1ZXNkYXks IE5vdmVtYmVyIDE0LCAyMDE3IDEwOjI4IEFNPGJyPg0KPGI+VG86PC9iPiBTdG9yYWdlIFBlcmZv cm1hbmNlIERldmVsb3BtZW50IEtpdDxicj4NCjxiPlN1YmplY3Q6PC9iPiBSZTogW1NQREtdIFJl cXVlc3QgZm9yIGNvbW1lbnRzIHJlZ2FyZGluZyBsYXRlbmN5IG1lYXN1cmVtZW50czxvOnA+PC9v OnA+PC9zcGFuPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpw PiZuYnNwOzwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJjb2xv cjojMUY0OTdEIj5IaSBKaW0sPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05v cm1hbCI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5N0QiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFu PjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJjb2xvcjojMUY0OTdEIj5J IGFtIG5vdCBhbiBTUERLIGRyaXZlciBleHBlcnQuIEFzIEkgaGF2ZSBiZWVuIHdvcmtpbmcgb24g dGhlIHNhbWUgcHJvYmxlbSBpbiB0aGUgbGFzdCAyIHdlZWtzLCBpbiBteSBpbnZlc3RpZ2F0aW9u LCBJIGNvbmNsdWRlZCB0aGUgc2FtZSBhcyB5b3UgaGF2ZSB3cml0dGVuIGluIHRoZSBlbWFpbCwg b3B0aW9uIDIgbG9va2VkIGxpa2UgZWFzeSBhbmQgZ29vZCBzb2x1dGlvbi4NCjxvOnA+PC9vOnA+ PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJjb2xvcjojMUY0 OTdEIj5UaGUgYmRldiBpbnRlcmZhY2VzIGhhdmUgYmVlbiB3ZWxsIGRldmVsb3BlZCBmb3IgTlZN ZSBkZXZpY2VzIGFuZCBpdCBsb29rcyBzaW1pbGFyIHRvIHRoZSBMaW51eCBrZXJuZWwgU3RvcmFn ZSBkcml2ZXIgZXhjZXB0IGZvciB0aGUgcG9sbGluZyBhbmQgaW50ZXJydXB0IGRpZmZlcmVuY2Vz IHRvIGdldCB0aGUgc3RhdHVzLiBUaGVzZSBhcmUganVzdCBteSBjb21tZW50cw0KIGJhc2VkIG9u IHdoYXQgSSB1bmRlcnN0b29kIHNvIGZhci48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFz cz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+SSBoYXZlIGFscmVhZHkg YmVlbiB3b3JraW5nIG9uIGNvbGxlY3RpbmcgdGhlIEkvTyBzdGF0aXN0aWNzIGZvciB0aGUgYXBw bGljYXRpb25zIG9uIE5WTWUgbGF5ZXIuIEZvciBhbnkgYXBwbGljYXRpb25zIHVzaW5nIHRoZSBi ZGV2IGxheWVyLCBJIHdvdWxkIGxpa2UgdG8gdXNlIHlvdXIgY2hhbmdlcy4gV2hlbiB5b3UgYXJl IHBsYW5uaW5nIHRvIHN1Ym1pdCB0aGUNCiBwYXRjaCB0byByZXBvc2l0b3J5ID8gPG86cD48L286 cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImNvbG9yOiMx RjQ5N0QiPlBsZWFzZSBsZXQgbWUga25vdyB3aGVuIHlvdSBjb21wbGV0ZSB5b3VyIGludmVzdGln YXRpb24uDQo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3Bh biBzdHlsZT0iY29sb3I6IzFGNDk3RCI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KPHAg Y2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5N0QiPlRoYW5rcyw8bzpw PjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iY29s b3I6IzFGNDk3RCI+U3JlZW5pPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05v cm1hbCI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5N0QiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFu PjwvcD4NCjxkaXY+DQo8ZGl2IHN0eWxlPSJib3JkZXI6bm9uZTtib3JkZXItdG9wOnNvbGlkICNF MUUxRTEgMS4wcHQ7cGFkZGluZzozLjBwdCAwaW4gMGluIDBpbiI+DQo8cCBjbGFzcz0iTXNvTm9y bWFsIj48Yj5Gcm9tOjwvYj4gU1BESyBbPGEgaHJlZj0ibWFpbHRvOnNwZGstYm91bmNlc0BsaXN0 cy4wMS5vcmciPm1haWx0bzpzcGRrLWJvdW5jZXNAbGlzdHMuMDEub3JnPC9hPl0NCjxiPk9uIEJl aGFsZiBPZiA8L2I+SGFycmlzLCBKYW1lcyBSPGJyPg0KPGI+U2VudDo8L2I+IFR1ZXNkYXksIE5v dmVtYmVyIDE0LCAyMDE3IDc6NDMgQU08YnI+DQo8Yj5Ubzo8L2I+IFN0b3JhZ2UgUGVyZm9ybWFu Y2UgRGV2ZWxvcG1lbnQgS2l0ICZsdDs8YSBocmVmPSJtYWlsdG86c3Bka0BsaXN0cy4wMS5vcmci PnNwZGtAbGlzdHMuMDEub3JnPC9hPiZndDs8YnI+DQo8Yj5TdWJqZWN0OjwvYj4gUmU6IFtTUERL XSBSZXF1ZXN0IGZvciBjb21tZW50cyByZWdhcmRpbmcgbGF0ZW5jeSBtZWFzdXJlbWVudHM8bzpw PjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZu YnNwOzwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPkFncmVlZCAtICMyIGlzIHRoZSB3 YXkgdG8gZ28uPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNw OzwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPldoaWxlIHdl4oCZcmUgb24gdGhlIHRv cGljIC0gc2hvdWxkIHdlIGJlIHJlc2V0dGluZyB0aGUgc3RhdHMgd2hlbiBzcGRrX2JkZXZfZ2V0 X2lvX3N0YXQoKSBpcyBjYWxsZWQ/Jm5ic3A7IFRoaXMgZWxpbWluYXRlcyB0aGUgYWJpbGl0eSBm b3IgdHdvIHNlcGFyYXRlIGFwcGxpY2F0aW9ucyB0byBtb25pdG9yIHN0YXRzIGluIHBhcmFsbGVs IOKAkyBvciBldmVuIGEgc2VwYXJhdGUgYXBwbGljYXRpb24gcGx1cyBzb21lIGZ1dHVyZQ0KIHll dC10by1iZS13cml0dGVuIGludGVybmFsIGxvYWQtYmFsYW5jaW5nIG1vbml0b3IuJm5ic3A7IEni gJltIHRoaW5raW5nIHRoYXQgYmRldiBzaG91bGQganVzdCBrZWVwIHRoZSBydW5uaW5nIHRvdGFs IGFuZCBsZXQgdGhlIGNhbGxlciBvd24gdHJhY2tpbmcgZGlmZmVyZW5jZXMgZnJvbSB0aGUgbGFz dCB0aW1lIGl0IGNhbGxlZCBzcGRrX2JkZXZfZ2V0X2lvX3N0YXQoKS48bzpwPjwvbzpwPjwvcD4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1z b05vcm1hbCI+LUppbTxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4m bmJzcDs8L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwv cD4NCjxkaXYgc3R5bGU9ImJvcmRlcjpub25lO2JvcmRlci10b3A6c29saWQgI0I1QzRERiAxLjBw dDtwYWRkaW5nOjMuMHB0IDBpbiAwaW4gMGluIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxl PSJtYXJnaW4tbGVmdDouNWluIj48Yj48c3BhbiBzdHlsZT0iY29sb3I6YmxhY2siPkZyb206IDwv c3Bhbj4NCjwvYj48c3BhbiBzdHlsZT0iY29sb3I6YmxhY2siPlNQREsgJmx0OzxhIGhyZWY9Im1h aWx0bzpzcGRrLWJvdW5jZXNAbGlzdHMuMDEub3JnIj5zcGRrLWJvdW5jZXNAbGlzdHMuMDEub3Jn PC9hPiZndDsgb24gYmVoYWxmIG9mIE5hdGhhbiBNYXJ1c2hhayAmbHQ7PGEgaHJlZj0ibWFpbHRv Om5hdGhhbi5tYXJ1c2hha0BpbnRlbC5jb20iPm5hdGhhbi5tYXJ1c2hha0BpbnRlbC5jb208L2E+ Jmd0Ozxicj4NCjxiPlJlcGx5LVRvOiA8L2I+U3RvcmFnZSBQZXJmb3JtYW5jZSBEZXZlbG9wbWVu dCBLaXQgJmx0OzxhIGhyZWY9Im1haWx0bzpzcGRrQGxpc3RzLjAxLm9yZyI+c3Bka0BsaXN0cy4w MS5vcmc8L2E+Jmd0Ozxicj4NCjxiPkRhdGU6IDwvYj5UdWVzZGF5LCBOb3ZlbWJlciAxNCwgMjAx NyBhdCA3OjI5IEFNPGJyPg0KPGI+VG86IDwvYj5TdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3Bt ZW50IEtpdCAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNwZGtAbGlzdHMuMDEub3JnIj5zcGRrQGxpc3Rz LjAxLm9yZzwvYT4mZ3Q7PGJyPg0KPGI+U3ViamVjdDogPC9iPlJlOiBbU1BES10gUmVxdWVzdCBm b3IgY29tbWVudHMgcmVnYXJkaW5nIGxhdGVuY3kgbWVhc3VyZW1lbnRzPC9zcGFuPjxzcGFuIHN0 eWxlPSJmb250LXNpemU6MTIuMHB0O2NvbG9yOmJsYWNrIj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+ DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6 LjVpbiI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90 OyxzZXJpZiI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KPC9kaXY+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PHNwYW4gc3R5bGU9ImZvbnQtZmFt aWx5OiZxdW90O0ludGVsIENsZWFyJnF1b3Q7O2NvbG9yOiM5OTAwMDAiPlNvLCBub3QgYmVpbmcg dGhlIHRlY2huaWNhbCBleHBlcnQgc28gdG8gc3BlYWsNCjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9u dC1mYW1pbHk6V2luZ2RpbmdzO2NvbG9yOiM5OTAwMDAiPko8L3NwYW4+PHNwYW4gc3R5bGU9ImZv bnQtZmFtaWx5OiZxdW90O0ludGVsIENsZWFyJnF1b3Q7O2NvbG9yOiM5OTAwMDAiPiwgcGxlYXNl IHRha2UgdGhpcyB3aXRoIGEgZ3JhaW4gb2Ygc2FsdC4gQWdyZWUgd2l0aCBvcHRpb24gIzIuIFNl ZW1zIGxpa2UgdGhpcyB3b3VsZCBhbGxvdyBmb3Iga2VlcGluZyBzdGF0cyBhY3Jvc3MgdGhlIGRp ZmZlcmVudCBkZXZpY2UgdHlwZXMNCiBlLmcuIE5WTWUsIE5WTUwsIE5WTWUtb0YgKGFsdGhvdWdo IHRoYXQgaGFzIGEgdHJhbnNwb3J0IHdpdGhpbiBOVk1lLCBzbyBpdCBtaWdodCBiZSBjb3ZlcmVk IGZvciBlaXRoZXIgb3B0aW9uKS48L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNv Tm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5 OiZxdW90O0ludGVsIENsZWFyJnF1b3Q7O2NvbG9yOiM5OTAwMDAiPiZuYnNwOzwvc3Bhbj48bzpw PjwvbzpwPjwvcD4NCjxkaXYgc3R5bGU9ImJvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIGJs dWUgMS41cHQ7cGFkZGluZzowaW4gMGluIDBpbiA0LjBwdCI+DQo8ZGl2Pg0KPGRpdiBzdHlsZT0i Ym9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAjRTFFMUUxIDEuMHB0O3BhZGRpbmc6My4wcHQg MGluIDBpbiAwaW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41 aW4iPjxiPkZyb206PC9iPiBTUERLIFs8YSBocmVmPSJtYWlsdG86c3Bkay1ib3VuY2VzQGxpc3Rz LjAxLm9yZyI+bWFpbHRvOnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmc8L2E+XQ0KPGI+T24gQmVo YWxmIE9mIDwvYj5MdXNlLCBQYXVsIEU8YnI+DQo8Yj5TZW50OjwvYj4gVHVlc2RheSwgTm92ZW1i ZXIgMTQsIDIwMTcgNzo1NyBBTTxicj4NCjxiPlRvOjwvYj4gU3RvcmFnZSBQZXJmb3JtYW5jZSBE ZXZlbG9wbWVudCBLaXQgJmx0OzxhIGhyZWY9Im1haWx0bzpzcGRrQGxpc3RzLjAxLm9yZyI+c3Bk a0BsaXN0cy4wMS5vcmc8L2E+Jmd0Ozxicj4NCjxiPlN1YmplY3Q6PC9iPiBSZTogW1NQREtdIFJl cXVlc3QgZm9yIGNvbW1lbnRzIHJlZ2FyZGluZyBsYXRlbmN5IG1lYXN1cmVtZW50czxvOnA+PC9v OnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJn aW4tbGVmdDouNWluIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi IHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+RldJ VyBvcHRpb24gMiBzb3VuZHMgbGlrZSB0aGUgbW9zdCBhcHByb3ByaWF0ZSB0byBtZeKApjwvc3Bh bj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVm dDouNWluIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9v OnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxz cGFuIHN0eWxlPSJjb2xvcjojMUY0OTdEIj5UaHg8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PHNwYW4gc3R5bGU9ImNv bG9yOiMxRjQ5N0QiPlBhdWw8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9y bWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5N0Qi PiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxkaXY+DQo8ZGl2IHN0eWxlPSJib3JkZXI6 bm9uZTtib3JkZXItdG9wOnNvbGlkICNFMUUxRTEgMS4wcHQ7cGFkZGluZzozLjBwdCAwaW4gMGlu IDBpbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PGEg bmFtZT0iX19fX19yZXBseXNlcGFyYXRvciI+PC9hPjxiPkZyb206PC9iPiBTUERLIFs8YSBocmVm PSJtYWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZyI+bWFpbHRvOnNwZGstYm91bmNlc0Bs aXN0cy4wMS5vcmc8L2E+XQ0KPGI+T24gQmVoYWxmIE9mIDwvYj5QYXVsIFZvbi1TdGFtd2l0ejxi cj4NCjxiPlNlbnQ6PC9iPiBNb25kYXksIE5vdmVtYmVyIDEzLCAyMDE3IDc6MjkgUE08YnI+DQo8 Yj5Ubzo8L2I+IDxhIGhyZWY9Im1haWx0bzpzcGRrQGxpc3RzLjAxLm9yZyI+c3Bka0BsaXN0cy4w MS5vcmc8L2E+PGJyPg0KPGI+U3ViamVjdDo8L2I+IFtTUERLXSBSZXF1ZXN0IGZvciBjb21tZW50 cyByZWdhcmRpbmcgbGF0ZW5jeSBtZWFzdXJlbWVudHM8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0K PC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+Jm5i c3A7PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxl ZnQ6LjVpbiI+QmFja2dyb3VuZDo8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi IHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj5CZGV2LmMgY3VycmVudGx5IG1haW50YWlucyBhIGNv dW50IG9mIHJlYWRzL3dyaXRlcy9ieXRlc19yZWFkL2J5dGVzX3dyaXR0ZW4gaW4gY2hhbm5lbC0m Z3Q7c3RhdC4gVGhpcyBpbmZvcm1hdGlvbiBpcyByZXRyaWV2ZWQgKGFuZCByZXNldCkgdmlhIHNw ZGtfYmRldl9nZXRfaW9fc3RhdC48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi IHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNz PSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj5Qcm9wb3NhbDo8bzpwPjwvbzpw PjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj5BZGQg bGF0ZW5jeSBpbmZvcm1hdGlvbiB0byBjaGFubmVsLSZndDtzdGF0IGFuZCBlbmFibGUgdGhlIG9w dGlvbiB0byBwcm92aWRlIGEgaGlzdG9ncmFtLjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1z b05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPldlIGNhbiBtZWFzdXJlIHRoZSBsYXRl bmN5IG9mIGVhY2ggSU8gYW5kIGtlZXAgYSBydW5uaW5nIHRvdGFsIG9uIGEgcmVhZC93cml0ZSBi YXNpcy4gV2UgY2FuIGFsc28gdXNlIHRoZSBtZWFzdXJlZCBsYXRlbmN5IHRvIGtlZXAgYSBydW5u aW5nIGNvdW50IG9mIHJlYWRzL3dyaXRlcyBpbiB0aGVpciBhc3NvY2lhdGVkIGhpc3RvZ3JhbSDi gJxidWNrZXRz4oCdLjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9 Im1hcmdpbi1sZWZ0Oi41aW4iPlRoZSBxdWVzdGlvbiBpcywgaG93IGRvIHdlIG1lYXN1cmUgbGF0 ZW5jeT88bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4t bGVmdDouNWluIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0 eWxlPSJtYXJnaW4tbGVmdDouNWluIj5PcHRpb24gMTo8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNz PSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj5NZWFzdXJlIGxhdGVuY3kgYXQg dGhlIE5WTWUgdHJhY2tlciAuPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBz dHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+Q3VycmVudGx5LCB3ZSBhbHJlYWR5IHRpbWVzdGFtcCBl dmVyeSBjb21tYW5kIHBsYWNlZCBvbiB0aGUgdHJhY2tlciBpZiB0aGUgYWJvcnQgdGltZW91dCBj YWxsYmFjayBpcyByZWdpc3RlcmVkLiBXaGVuIHdlIHJlbW92ZSBhIGNvbXBsZXRlZCBJTyBmcm9t IHRoZSB0cmFja2VyLCB3ZSBjYW4gdGltZXN0YW1wIGl0IGFnYWluIGFuZCBjYWxjdWxhdGUgdGhl IGxhdGVuY3kuPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFy Z2luLWxlZnQ6LjVpbiI+VGhlcmUgYXJlIHNldmVyYWwgaXNzdWVzIGhlcmUgdGhhdCBuZWVkIHRv IGJlIGNvbnNpZGVyZWQuPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHls ZT0ibWFyZ2luLWxlZnQ6LjVpbiI+V2UgbmVlZCB0byBnZXQgdGhlIGxhdGVuY3kgaW5mb3JtYXRp b24gYmFjayB1cCB0byB0aGUgYmRldiBsYXllciwgbW9zdCBsaWtlbHkgdGhyb3VnaCBhIGNhbGxi YWNrIGFyZ3VtZW50LCBidXQgdGhpcyB3b3VsZCByZXF1aXJlIGEgY2hhbmdlIHRoZSBOVk1lIEFQ SS4gSWYgdGhlIGJkZXYgYnJlYWtzIGRvd24gYSByZXF1ZXN0IGludG8gc21hbGxlciBJT3MsIGl0 IGNhbg0KIGFkZCB1cCB0aGUgbGF0ZW5jaWVzIG9mIHRoZSBjaGlsZCBJT3MgZm9yIGlvX3N0YXQg YW5kIGhpc3RvZ3JhbSBwdXJwb3Nlcy48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj5BbHNvLCB0aGlzIG1ldGhvZCBkb2VzIG5vdCB0 YWtlIGludG8gYWNjb3VudCBhbnkgbGF0ZW5jeSBhZGRlZCBieSB0aGUgc3BkayBiZGV2L252bWUg bGF5ZXJzIChleGNlcHQgdGhlIHBvbGxlci4pIElmIGEgcmVxdWVzdCB3YXMgcXVldWVkIGJlZm9y ZSBiZWluZyBwbGFjZWQgb24gdGhlIHRyYWNrZXIsIHRoZW4gdGhlIHRpbWUgaXQgd2FzIHF1ZXVl ZCBpcyBub3QgZmFjdG9yZWQNCiBpbnRvIHRoZSBsYXRlbmN5IGNhbGN1bGF0aW9uLjxvOnA+PC9v OnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPiZu YnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1s ZWZ0Oi41aW4iPk9wdGlvbiAyOjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIg c3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPk1lYXN1cmUgbGF0ZW5jeSBhdCB0aGUgYmRldiBsYXll ci48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVm dDouNWluIj5XZSBjYW4gdGltZXN0YW1wIGF0IHN1Ym1pdCBhbmQgYWdhaW4gYXQgY29tcGxldGlv bi4gVGhpcyB3b3VsZCBrZWVwIGFsbCBpb19zdGF0IGluZm9ybWF0aW9uIGxvY2FsIHRvIGJkZXYg YW5kIHdvdWxkIHRha2UgaW50byBhY2NvdW50IHRoZSBvdmVyaGVhZCBvZiBtb3N0IHF1ZXVlZCBv cGVyYXRpb25zLiBBbnkgYXBwbGljYXRpb25zIHdyaXR0ZW4gZGlyZWN0bHkgdG8NCiB0aGUgTlZN ZSBsYXllciB3b3VsZCBoYXZlIHRvIGNhbGN1bGF0ZSB0aGVpciBvd24gbGF0ZW5jaWVzLCBidXQg dGhhdCBpcyBjdXJyZW50bHkgdHJ1ZSBmb3IgYWxsIGlvX3N0YXRzLjxvOnA+PC9vOnA+PC9wPg0K PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPiZuYnNwOzxvOnA+ PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4i PknigJltIHN1cmUgdGhhdCB0aGVyZSBhcmUgb3RoZXIgaXNzdWVzIEkgYW0gbWlzc2luZywgYnV0 IEkgd291bGQgYXBwcmVjaWF0ZSBhbnkgY29tbWVudHMgb24gaG93IGJlc3QgdG8gbW92ZSBmb3J3 YXJkIG9uIHRoaXMuPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0i bWFyZ2luLWxlZnQ6LjVpbiI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9y bWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+VGhhbmtzLDxvOnA+PC9vOnA+PC9wPg0KPHAg Y2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPlBhdWw8bzpwPjwvbzpw PjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj4mbmJz cDs8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+DQo= --===============3298682052081390938==--