From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============7866263196099403563==" MIME-Version: 1.0 From: Harris, James R Subject: Re: [SPDK] Request for comments regarding latency measurements Date: Tue, 14 Nov 2017 22:22:55 +0000 Message-ID: In-Reply-To: 622F4407872BA447A16110F65453358C070FB4C9A1C0@FMSAMAIL.fmsa.local List-ID: To: spdk@lists.01.org --===============7866263196099403563== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Paul, Agree on handling reset and histogram stuff separately. Instead of ns could we store as tsc? I=E2=80=99d like to avoid tsc =3D> ns= conversions in the I/O path if possible. Then store the TSC rate as a sep= arate member in this structure. -Jim From: SPDK on behalf of Paul Von-Stamwitz Reply-To: Storage Performance Development Kit Date: Tuesday, November 14, 2017 at 2:16 PM To: Storage Performance Development Kit Subject: Re: [SPDK] Request for comments regarding latency measurements I don=E2=80=99t have a problem taking out the reset, but we need to check w= ith the VTune guys since they are resetting their data at each interval as = well. At the end of the day I would like the two methods to eventually conv= erge, or at least be consistent. I=E2=80=99m thinking for now, just appending a cumulative I/O time in nanos= econds to io_stat. struct spdk_bdev_io_stat { uint64_t bytes_read; uint64_t num_read_ops; uint64_t bytes_written; uint64_t num_write_ops; uint64_t read_time_ns; uint64_t write_time_ns; }; We can address the reset issue and histogram in subsequent PRs. Is this okay? -Paul From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Walker, Benjam= in Sent: Tuesday, November 14, 2017 8:36 AM To: Storage Performance Development Kit Subject: Re: [SPDK] Request for comments regarding latency measurements The only reason to reset is to deal with overflow. But the time between ove= rflows would be very large so the user could potentially account for it on = their end. -------- Original message -------- From: "Harris, James R" > Date: 11/14/17 9:01 AM (GMT-07:00) To: Storage Performance Development Kit > Subject: Re: [SPDK] Request for comments regarding latency measurements Or we leave out the reset stats API and provide helper functions on the cli= ent side (in Python) to diff results from two calls to spdk_bdev_get_io_sta= t(). From: SPDK = > on behalf of Paul E Luse > Reply-To: Storage Performance Development Kit > Date: Tuesday, November 14, 2017 at 7:50 AM To: Storage Performance Development Kit > Subject: Re: [SPDK] Request for comments regarding latency measurements Or maybe as an initial separate patch remove the auto-reset and add a new A= PI to reset stats=E2=80=A6. From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Harris, James R Sent: Tuesday, November 14, 2017 8: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 --===============7866263196099403563== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiB4 bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIiB4bWxuczptPSJo dHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA0LzEyL29tbWwiIHhtbG5zPSJo dHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVp dj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPg0KPG1l dGEgbmFtZT0iVGl0bGUiIGNvbnRlbnQ9IiI+DQo8bWV0YSBuYW1lPSJLZXl3b3JkcyIgY29udGVu dD0iIj4NCjxtZXRhIG5hbWU9IkdlbmVyYXRvciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUg KGZpbHRlcmVkIG1lZGl1bSkiPg0KPHN0eWxlPjwhLS0NCi8qIEZvbnQgRGVmaW5pdGlvbnMgKi8N CkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6IkNvdXJpZXIgTmV3IjsNCglwYW5vc2UtMToyIDcg MyA5IDIgMiA1IDIgNCA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6V2luZ2RpbmdzOw0K CXBhbm9zZS0xOjUgMCAwIDAgMCAwIDAgMCAwIDA7fQ0KQGZvbnQtZmFjZQ0KCXtmb250LWZhbWls eToiQ2FtYnJpYSBNYXRoIjsNCglwYW5vc2UtMToyIDQgNSAzIDUgNCA2IDMgMiA0O30NCkBmb250 LWZhY2UNCgl7Zm9udC1mYW1pbHk6RGVuZ1hpYW47DQoJcGFub3NlLTE6MiAxIDYgMCAzIDEgMSAx IDEgMTt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OkNhbGlicmk7DQoJcGFub3NlLTE6MiAx NSA1IDIgMiAyIDQgMyAyIDQ7fQ0KQGZvbnQtZmFjZQ0KCXtmb250LWZhbWlseToiSW50ZWwgQ2xl YXIiOw0KCXBhbm9zZS0xOjIgMTEgNiA0IDIgMiAzIDIgMiA0O30NCkBmb250LWZhY2UNCgl7Zm9u dC1mYW1pbHk6VGFob21hOw0KCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0O30NCi8qIFN0 eWxlIERlZmluaXRpb25zICovDQpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9y bWFsDQoJe21hcmdpbjowaW47DQoJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KCWZvbnQtc2l6ZTox MS4wcHQ7DQoJZm9udC1mYW1pbHk6Q2FsaWJyaTt9DQphOmxpbmssIHNwYW4uTXNvSHlwZXJsaW5r DQoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsNCgljb2xvcjpibHVlOw0KCXRleHQtZGVjb3JhdGlv bjp1bmRlcmxpbmU7fQ0KYTp2aXNpdGVkLCBzcGFuLk1zb0h5cGVybGlua0ZvbGxvd2VkDQoJe21z by1zdHlsZS1wcmlvcml0eTo5OTsNCgljb2xvcjpwdXJwbGU7DQoJdGV4dC1kZWNvcmF0aW9uOnVu ZGVybGluZTt9DQpwcmUNCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCW1zby1zdHlsZS1saW5r OiJIVE1MIFByZWZvcm1hdHRlZCBDaGFyIjsNCgltYXJnaW46MGluOw0KCW1hcmdpbi1ib3R0b206 LjAwMDFwdDsNCglmb250LXNpemU6MTAuMHB0Ow0KCWZvbnQtZmFtaWx5OiJDb3VyaWVyIE5ldyI7 fQ0KcC5Nc29BY2V0YXRlLCBsaS5Nc29BY2V0YXRlLCBkaXYuTXNvQWNldGF0ZQ0KCXttc28tc3R5 bGUtcHJpb3JpdHk6OTk7DQoJbXNvLXN0eWxlLWxpbms6IkJhbGxvb24gVGV4dCBDaGFyIjsNCglt YXJnaW46MGluOw0KCW1hcmdpbi1ib3R0b206LjAwMDFwdDsNCglmb250LXNpemU6OC4wcHQ7DQoJ Zm9udC1mYW1pbHk6VGFob21hO30NCnAuTXNvTGlzdFBhcmFncmFwaCwgbGkuTXNvTGlzdFBhcmFn cmFwaCwgZGl2Lk1zb0xpc3RQYXJhZ3JhcGgNCgl7bXNvLXN0eWxlLXByaW9yaXR5OjM0Ow0KCW1h cmdpbi10b3A6MGluOw0KCW1hcmdpbi1yaWdodDowaW47DQoJbWFyZ2luLWJvdHRvbTowaW47DQoJ bWFyZ2luLWxlZnQ6LjVpbjsNCgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7DQoJZm9udC1zaXplOjEx LjBwdDsNCglmb250LWZhbWlseTpDYWxpYnJpO30NCnNwYW4uSFRNTFByZWZvcm1hdHRlZENoYXIN Cgl7bXNvLXN0eWxlLW5hbWU6IkhUTUwgUHJlZm9ybWF0dGVkIENoYXIiOw0KCW1zby1zdHlsZS1w cmlvcml0eTo5OTsNCgltc28tc3R5bGUtbGluazoiSFRNTCBQcmVmb3JtYXR0ZWQiOw0KCWZvbnQt ZmFtaWx5OiJDb3VyaWVyIE5ldyI7fQ0Kc3Bhbi5CYWxsb29uVGV4dENoYXINCgl7bXNvLXN0eWxl LW5hbWU6IkJhbGxvb24gVGV4dCBDaGFyIjsNCgltc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJbXNv LXN0eWxlLWxpbms6IkJhbGxvb24gVGV4dCI7DQoJZm9udC1mYW1pbHk6VGFob21hO30NCnAubXNv Y2hwZGVmYXVsdCwgbGkubXNvY2hwZGVmYXVsdCwgZGl2Lm1zb2NocGRlZmF1bHQNCgl7bXNvLXN0 eWxlLW5hbWU6bXNvY2hwZGVmYXVsdDsNCgltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsNCgltYXJn aW4tcmlnaHQ6MGluOw0KCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOw0KCW1hcmdpbi1sZWZ0 OjBpbjsNCglmb250LXNpemU6MTAuMHB0Ow0KCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4i O30NCnNwYW4uZW1haWxzdHlsZTE4DQoJe21zby1zdHlsZS1uYW1lOmVtYWlsc3R5bGUxODsNCglm b250LWZhbWlseTpDYWxpYnJpOw0KCWNvbG9yOndpbmRvd3RleHQ7fQ0Kc3Bhbi5lbWFpbHN0eWxl MTkNCgl7bXNvLXN0eWxlLW5hbWU6ZW1haWxzdHlsZTE5Ow0KCWZvbnQtZmFtaWx5OkNhbGlicmk7 DQoJY29sb3I6IzFGNDk3RDt9DQpzcGFuLmVtYWlsc3R5bGUyMA0KCXttc28tc3R5bGUtbmFtZTpl bWFpbHN0eWxlMjA7DQoJZm9udC1mYW1pbHk6IkludGVsIENsZWFyIjsNCgljb2xvcjojOTkwMDAw Ow0KCWZvbnQtd2VpZ2h0Om5vcm1hbDsNCglmb250LXN0eWxlOm5vcm1hbDsNCgl0ZXh0LWRlY29y YXRpb246bm9uZSBub25lO30NCnNwYW4uZW1haWxzdHlsZTIxDQoJe21zby1zdHlsZS1uYW1lOmVt YWlsc3R5bGUyMTsNCglmb250LWZhbWlseTpDYWxpYnJpOw0KCWNvbG9yOndpbmRvd3RleHQ7fQ0K c3Bhbi5lbWFpbHN0eWxlMjINCgl7bXNvLXN0eWxlLW5hbWU6ZW1haWxzdHlsZTIyOw0KCWZvbnQt ZmFtaWx5OkNhbGlicmk7DQoJY29sb3I6IzFGNDk3RDt9DQpzcGFuLmVtYWlsc3R5bGUyMw0KCXtt c28tc3R5bGUtbmFtZTplbWFpbHN0eWxlMjM7DQoJZm9udC1mYW1pbHk6Q2FsaWJyaTsNCgljb2xv cjp3aW5kb3d0ZXh0O30NCnNwYW4ubXNvaW5zDQoJe21zby1zdHlsZS1uYW1lOm1zb2luczsNCglj b2xvcjp0ZWFsOw0KCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQ0Kc3Bhbi5FbWFpbFN0eWxl MzANCgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWw7DQoJZm9udC1mYW1pbHk6Q2FsaWJyaTsNCglj b2xvcjojMUY0OTdEO30NCnNwYW4ucGwtaw0KCXttc28tc3R5bGUtbmFtZTpwbC1rO30NCnNwYW4u cGwtYzENCgl7bXNvLXN0eWxlLW5hbWU6cGwtYzE7fQ0Kc3Bhbi5FbWFpbFN0eWxlMzMNCgl7bXNv LXN0eWxlLXR5cGU6cGVyc29uYWwtcmVwbHk7DQoJZm9udC1mYW1pbHk6Q2FsaWJyaTsNCgljb2xv cjp3aW5kb3d0ZXh0O30NCnNwYW4ubXNvSW5zDQoJe21zby1zdHlsZS10eXBlOmV4cG9ydC1vbmx5 Ow0KCW1zby1zdHlsZS1uYW1lOiIiOw0KCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7DQoJY29s b3I6dGVhbDt9DQouTXNvQ2hwRGVmYXVsdA0KCXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTsN Cglmb250LXNpemU6MTAuMHB0O30NCkBwYWdlIFdvcmRTZWN0aW9uMQ0KCXtzaXplOjguNWluIDEx LjBpbjsNCgltYXJnaW46MS4waW4gMS4waW4gMS4waW4gMS4waW47fQ0KZGl2LldvcmRTZWN0aW9u MQ0KCXtwYWdlOldvcmRTZWN0aW9uMTt9DQotLT48L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHkgYmdj b2xvcj0id2hpdGUiIGxhbmc9IkVOLVVTIiBsaW5rPSJibHVlIiB2bGluaz0icHVycGxlIj4NCjxk aXYgY2xhc3M9IldvcmRTZWN0aW9uMSI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5IaSBQYXVsLDxv OnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5BZ3JlZSBvbiBoYW5kbGluZyByZXNldCBhbmQgaGlzdG9n cmFtIHN0dWZmIHNlcGFyYXRlbHkuPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFs Ij48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPkluc3RlYWQgb2Yg bnMgY291bGQgd2Ugc3RvcmUgYXMgdHNjPyZuYnNwOyBJ4oCZZCBsaWtlIHRvIGF2b2lkIHRzYyA9 Jmd0OyBucyBjb252ZXJzaW9ucyBpbiB0aGUgSS9PIHBhdGggaWYgcG9zc2libGUuJm5ic3A7IFRo ZW4gc3RvcmUgdGhlIFRTQyByYXRlIGFzIGEgc2VwYXJhdGUgbWVtYmVyIGluIHRoaXMgc3RydWN0 dXJlLjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286 cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4tSmltPG86cD48L286cD48L3A+DQo8cCBjbGFz cz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi PjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRv cDpzb2xpZCAjQjVDNERGIDEuMHB0O3BhZGRpbmc6My4wcHQgMGluIDBpbiAwaW4iPg0KPHAgY2xh c3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxiPjxzcGFuIHN0eWxlPSJj b2xvcjpibGFjayI+RnJvbTogPC9zcGFuPg0KPC9iPjxzcGFuIHN0eWxlPSJjb2xvcjpibGFjayI+ U1BESyAmbHQ7c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZyZndDsgb24gYmVoYWxmIG9mIFBhdWwg Vm9uLVN0YW13aXR6ICZsdDtQVm9uU3RhbXdpdHpAdXMuZnVqaXRzdS5jb20mZ3Q7PGJyPg0KPGI+ UmVwbHktVG86IDwvYj5TdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50IEtpdCAmbHQ7c3Bk a0BsaXN0cy4wMS5vcmcmZ3Q7PGJyPg0KPGI+RGF0ZTogPC9iPlR1ZXNkYXksIE5vdmVtYmVyIDE0 LCAyMDE3IGF0IDI6MTYgUE08YnI+DQo8Yj5UbzogPC9iPlN0b3JhZ2UgUGVyZm9ybWFuY2UgRGV2 ZWxvcG1lbnQgS2l0ICZsdDtzcGRrQGxpc3RzLjAxLm9yZyZndDs8YnI+DQo8Yj5TdWJqZWN0OiA8 L2I+UmU6IFtTUERLXSBSZXF1ZXN0IGZvciBjb21tZW50cyByZWdhcmRpbmcgbGF0ZW5jeSBtZWFz dXJlbWVudHM8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMi4wcHQ7Y29sb3I6YmxhY2si PjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1 b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7Ij48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8 L2Rpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3Bh biBzdHlsZT0iY29sb3I6IzFGNDk3RCI+SSBkb27igJl0IGhhdmUgYSBwcm9ibGVtIHRha2luZyBv dXQgdGhlIHJlc2V0LCBidXQgd2UgbmVlZCB0byBjaGVjayB3aXRoIHRoZSBWVHVuZSBndXlzIHNp bmNlIHRoZXkgYXJlIHJlc2V0dGluZyB0aGVpciBkYXRhIGF0IGVhY2ggaW50ZXJ2YWwgYXMgd2Vs bC4gQXQgdGhlIGVuZCBvZiB0aGUgZGF5IEkgd291bGQgbGlrZQ0KIHRoZSB0d28gbWV0aG9kcyB0 byBldmVudHVhbGx5IGNvbnZlcmdlLCBvciBhdCBsZWFzdCBiZSBjb25zaXN0ZW50Ljwvc3Bhbj48 bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDou NWluIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+ PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxzcGFu IHN0eWxlPSJjb2xvcjojMUY0OTdEIj5J4oCZbSB0aGlua2luZyBmb3Igbm93LCBqdXN0IGFwcGVu ZGluZyBhIGN1bXVsYXRpdmUgSS9PIHRpbWUgaW4gbmFub3NlY29uZHMgdG8gaW9fc3RhdC48L3Nw YW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxl ZnQ6LjVpbiI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwv bzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48 c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5l dyZxdW90Oztjb2xvcjpibGFjayI+c3RydWN0IHNwZGtfYmRldl9pb19zdGF0IHs8L3NwYW4+PG86 cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVp biI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q291cmll ciBOZXcmcXVvdDs7Y29sb3I6YmxhY2siPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyB1aW50NjRfdCBieXRlc19yZWFkOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxw IGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0i Zm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5ldyZxdW90Oztjb2xv cjpibGFjayI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHVpbnQ2 NF90IG51bV9yZWFkX29wczs8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9y bWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4w cHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDs7Y29sb3I6YmxhY2siPiZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB1aW50NjRfdCBieXRlc193cml0 dGVuOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJt YXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWls eTomcXVvdDtDb3VyaWVyIE5ldyZxdW90Oztjb2xvcjpibGFjayI+Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHVpbnQ2NF90IG51bV93cml0ZV9vcHM7PC9zcGFuPjxv OnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41 aW4iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NvdXJp ZXIgTmV3JnF1b3Q7O2NvbG9yOmJsYWNrIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsgdWludDY0X3QgcmVhZF90aW1lX25zOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHls ZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5ldyZxdW90Oztj b2xvcjpibGFjayI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHVp bnQ2NF90IHdyaXRlX3RpbWVfbnM7PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1z b05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6 MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7O2NvbG9yOmJsYWNrIj59 Ozwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJn aW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjxv OnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41 aW4iPjxzcGFuIHN0eWxlPSJjb2xvcjojMUY0OTdEIj5XZSBjYW4gYWRkcmVzcyB0aGUgcmVzZXQg aXNzdWUgYW5kIGhpc3RvZ3JhbSBpbiBzdWJzZXF1ZW50ICZuYnNwO1BScy48L3NwYW4+PG86cD48 L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+ PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHls ZT0iY29sb3I6IzFGNDk3RCI+SXMgdGhpcyBva2F5Pzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxw IGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0i Y29sb3I6IzFGNDk3RCI+LVBhdWw8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNv Tm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5 N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0 eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+Jm5ic3A7 PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPGRpdj4NCjxkaXYgc3R5bGU9ImJvcmRlcjpub25lO2Jv cmRlci10b3A6c29saWQgI0I1QzRERiAxLjBwdDtwYWRkaW5nOjMuMHB0IDBpbiAwaW4gMGluIj4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48Yj48c3BhbiBz dHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTpUYWhvbWEiPkZyb206PC9zcGFuPjwv Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwLjBwdDtmb250LWZhbWlseTpUYWhvbWEiPiBTUERL IFttYWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZ10NCjxiPk9uIEJlaGFsZiBPZiA8L2I+ V2Fsa2VyLCBCZW5qYW1pbjxicj4NCjxiPlNlbnQ6PC9iPiBUdWVzZGF5LCBOb3ZlbWJlciAxNCwg MjAxNyA4OjM2IEFNPGJyPg0KPGI+VG86PC9iPiBTdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3Bt ZW50IEtpdDxicj4NCjxiPlN1YmplY3Q6PC9iPiBSZTogW1NQREtdIFJlcXVlc3QgZm9yIGNvbW1l bnRzIHJlZ2FyZGluZyBsYXRlbmN5IG1lYXN1cmVtZW50czwvc3Bhbj48bzpwPjwvbzpwPjwvcD4N CjwvZGl2Pg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6 LjVpbiI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0i bWFyZ2luLWxlZnQ6LjVpbiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMi4wcHQ7Zm9udC1mYW1p bHk6JnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7Ij5UaGUgb25seSByZWFzb24gdG8gcmVzZXQg aXMgdG8gZGVhbCB3aXRoIG92ZXJmbG93LiBCdXQgdGhlIHRpbWUgYmV0d2VlbiBvdmVyZmxvd3Mg d291bGQgYmUgdmVyeSBsYXJnZSBzbyB0aGUgdXNlciBjb3VsZCBwb3RlbnRpYWxseSBhY2NvdW50 IGZvciBpdCBvbg0KIHRoZWlyIGVuZC4mbmJzcDsgPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPGRp dj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBz dHlsZT0iZm9udC1zaXplOjEyLjBwdDtmb250LWZhbWlseTomcXVvdDtUaW1lcyBOZXcgUm9tYW4m cXVvdDsiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iZm9u dC1zaXplOjEyLjBwdDtmb250LWZhbWlseTomcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDsiPiZu YnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29O b3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEy LjBwdDtmb250LWZhbWlseTomcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDsiPi0tLS0tLS0tIE9y aWdpbmFsIG1lc3NhZ2UgLS0tLS0tLS08L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxk aXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PHNwYW4g c3R5bGU9ImZvbnQtc2l6ZToxMi4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7VGltZXMgTmV3IFJvbWFu JnF1b3Q7Ij5Gcm9tOiAmcXVvdDtIYXJyaXMsIEphbWVzIFImcXVvdDsgJmx0OzxhIGhyZWY9Im1h aWx0bzpqYW1lcy5yLmhhcnJpc0BpbnRlbC5jb20iPmphbWVzLnIuaGFycmlzQGludGVsLmNvbTwv YT4mZ3Q7DQo8L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6 ZToxMi4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7Ij5EYXRlOiAx MS8xNC8xNyA5OjAxIEFNIChHTVQtMDc6MDApDQo8L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rp dj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+ PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMi4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7VGltZXMgTmV3 IFJvbWFuJnF1b3Q7Ij5UbzogU3RvcmFnZSBQZXJmb3JtYW5jZSBEZXZlbG9wbWVudCBLaXQgJmx0 OzxhIGhyZWY9Im1haWx0bzpzcGRrQGxpc3RzLjAxLm9yZyI+c3Bka0BsaXN0cy4wMS5vcmc8L2E+ Jmd0Ow0KPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1z b05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6 MTIuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyI+U3ViamVjdDog UmU6IFtTUERLXSBSZXF1ZXN0IGZvciBjb21tZW50cyByZWdhcmRpbmcgbGF0ZW5jeSBtZWFzdXJl bWVudHMNCjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJN c29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iZm9udC1zaXpl OjEyLjBwdDtmb250LWZhbWlseTomcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDsiPiZuYnNwOzwv c3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNv Tm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+T3Igd2UgbGVhdmUgb3V0IHRoZSByZXNl dCBzdGF0cyBBUEkgYW5kIHByb3ZpZGUgaGVscGVyIGZ1bmN0aW9ucyBvbiB0aGUgY2xpZW50IHNp ZGUgKGluIFB5dGhvbikgdG8gZGlmZiByZXN1bHRzIGZyb20gdHdvIGNhbGxzIHRvIHNwZGtfYmRl dl9nZXRfaW9fc3RhdCgpLjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5 bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPGRpdiBzdHlsZT0i Ym9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAjQjVDNERGIDEuMHB0O3BhZGRpbmc6My4wcHQg MGluIDBpbiAwaW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEu MGluIj48Yj48c3BhbiBzdHlsZT0iY29sb3I6YmxhY2siPkZyb206DQo8L3NwYW4+PC9iPjxzcGFu IHN0eWxlPSJjb2xvcjpibGFjayI+U1BESyAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNwZGstYm91bmNl c0BsaXN0cy4wMS5vcmciPnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmc8L2E+Jmd0OyBvbiBiZWhh bGYgb2YgUGF1bCBFIEx1c2UgJmx0OzxhIGhyZWY9Im1haWx0bzpwYXVsLmUubHVzZUBpbnRlbC5j b20iPnBhdWwuZS5sdXNlQGludGVsLmNvbTwvYT4mZ3Q7PGJyPg0KPGI+UmVwbHktVG86IDwvYj5T dG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50IEtpdCAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNw ZGtAbGlzdHMuMDEub3JnIj5zcGRrQGxpc3RzLjAxLm9yZzwvYT4mZ3Q7PGJyPg0KPGI+RGF0ZTog PC9iPlR1ZXNkYXksIE5vdmVtYmVyIDE0LCAyMDE3IGF0IDc6NTAgQU08YnI+DQo8Yj5UbzogPC9i PlN0b3JhZ2UgUGVyZm9ybWFuY2UgRGV2ZWxvcG1lbnQgS2l0ICZsdDs8YSBocmVmPSJtYWlsdG86 c3Bka0BsaXN0cy4wMS5vcmciPnNwZGtAbGlzdHMuMDEub3JnPC9hPiZndDs8YnI+DQo8Yj5TdWJq ZWN0OiA8L2I+UmU6IFtTUERLXSBSZXF1ZXN0IGZvciBjb21tZW50cyByZWdhcmRpbmcgbGF0ZW5j eSBtZWFzdXJlbWVudHM8L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS4waW4iPjxzcGFuIHN0eWxlPSJm b250LWZhbWlseTomcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDsiPiZuYnNwOzwvc3Bhbj48bzpw PjwvbzpwPjwvcD4NCjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1s ZWZ0OjEuMGluIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+T3IgbWF5YmUgYXMgYW4gaW5p dGlhbCBzZXBhcmF0ZSBwYXRjaCByZW1vdmUgdGhlIGF1dG8tcmVzZXQgYW5kIGFkZCBhIG5ldyBB UEkgdG8gcmVzZXQgc3RhdHPigKYuPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1z b05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuMGluIj48YSBuYW1lPSJfTWFpbEVuZENvbXBv c2UiPjxzcGFuIHN0eWxlPSJjb2xvcjojMUY0OTdEIj4mbmJzcDs8L3NwYW4+PC9hPjxvOnA+PC9v OnA+PC9wPg0KPGRpdj4NCjxkaXYgc3R5bGU9ImJvcmRlcjpub25lO2JvcmRlci10b3A6c29saWQg I0UxRTFFMSAxLjBwdDtwYWRkaW5nOjMuMHB0IDBpbiAwaW4gMGluIj4NCjxwIGNsYXNzPSJNc29O b3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDoxLjBpbiI+PGEgbmFtZT0iX19fX19yZXBseXNlcGFy YXRvciI+PC9hPjxiPkZyb206PC9iPiBTUERLIFs8YSBocmVmPSJtYWlsdG86c3Bkay1ib3VuY2Vz QGxpc3RzLjAxLm9yZyI+bWFpbHRvOnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmc8L2E+XQ0KPGI+ T24gQmVoYWxmIE9mIDwvYj5IYXJyaXMsIEphbWVzIFI8YnI+DQo8Yj5TZW50OjwvYj4gVHVlc2Rh eSwgTm92ZW1iZXIgMTQsIDIwMTcgODo0MyBBTTxicj4NCjxiPlRvOjwvYj4gU3RvcmFnZSBQZXJm b3JtYW5jZSBEZXZlbG9wbWVudCBLaXQgJmx0OzxhIGhyZWY9Im1haWx0bzpzcGRrQGxpc3RzLjAx Lm9yZyI+c3Bka0BsaXN0cy4wMS5vcmc8L2E+Jmd0Ozxicj4NCjxiPlN1YmplY3Q6PC9iPiBSZTog W1NQREtdIFJlcXVlc3QgZm9yIGNvbW1lbnRzIHJlZ2FyZGluZyBsYXRlbmN5IG1lYXN1cmVtZW50 czxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0 eWxlPSJtYXJnaW4tbGVmdDoxLjBpbiI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS4waW4iPkFncmVlZCAtICMyIGlzIHRoZSB3 YXkgdG8gZ28uPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFy Z2luLWxlZnQ6MS4waW4iPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1h bCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuMGluIj5XaGlsZSB3ZeKAmXJlIG9uIHRoZSB0b3BpYyAt IHNob3VsZCB3ZSBiZSByZXNldHRpbmcgdGhlIHN0YXRzIHdoZW4gc3Bka19iZGV2X2dldF9pb19z dGF0KCkgaXMgY2FsbGVkPyZuYnNwOyBUaGlzIGVsaW1pbmF0ZXMgdGhlIGFiaWxpdHkgZm9yIHR3 byBzZXBhcmF0ZSBhcHBsaWNhdGlvbnMgdG8gbW9uaXRvciBzdGF0cyBpbiBwYXJhbGxlbCDigJMg b3IgZXZlbiBhIHNlcGFyYXRlIGFwcGxpY2F0aW9uDQogcGx1cyBzb21lIGZ1dHVyZSB5ZXQtdG8t YmUtd3JpdHRlbiBpbnRlcm5hbCBsb2FkLWJhbGFuY2luZyBtb25pdG9yLiZuYnNwOyBJ4oCZbSB0 aGlua2luZyB0aGF0IGJkZXYgc2hvdWxkIGp1c3Qga2VlcCB0aGUgcnVubmluZyB0b3RhbCBhbmQg bGV0IHRoZSBjYWxsZXIgb3duIHRyYWNraW5nIGRpZmZlcmVuY2VzIGZyb20gdGhlIGxhc3QgdGlt ZSBpdCBjYWxsZWQgc3Bka19iZGV2X2dldF9pb19zdGF0KCkuPG86cD48L286cD48L3A+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS4waW4iPiZuYnNwOzxvOnA+PC9v OnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuMGluIj4t SmltPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxl ZnQ6MS4waW4iPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5 bGU9Im1hcmdpbi1sZWZ0OjEuMGluIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxkaXYgc3R5bGU9 ImJvcmRlcjpub25lO2JvcmRlci10b3A6c29saWQgI0I1QzRERiAxLjBwdDtwYWRkaW5nOjMuMHB0 IDBpbiAwaW4gMGluIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDox LjVpbiI+PGI+PHNwYW4gc3R5bGU9ImNvbG9yOmJsYWNrIj5Gcm9tOg0KPC9zcGFuPjwvYj48c3Bh biBzdHlsZT0iY29sb3I6YmxhY2siPlNQREsgJmx0OzxhIGhyZWY9Im1haWx0bzpzcGRrLWJvdW5j ZXNAbGlzdHMuMDEub3JnIj5zcGRrLWJvdW5jZXNAbGlzdHMuMDEub3JnPC9hPiZndDsgb24gYmVo YWxmIG9mIE5hdGhhbiBNYXJ1c2hhayAmbHQ7PGEgaHJlZj0ibWFpbHRvOm5hdGhhbi5tYXJ1c2hh a0BpbnRlbC5jb20iPm5hdGhhbi5tYXJ1c2hha0BpbnRlbC5jb208L2E+Jmd0Ozxicj4NCjxiPlJl cGx5LVRvOiA8L2I+U3RvcmFnZSBQZXJmb3JtYW5jZSBEZXZlbG9wbWVudCBLaXQgJmx0OzxhIGhy ZWY9Im1haWx0bzpzcGRrQGxpc3RzLjAxLm9yZyI+c3Bka0BsaXN0cy4wMS5vcmc8L2E+Jmd0Ozxi cj4NCjxiPkRhdGU6IDwvYj5UdWVzZGF5LCBOb3ZlbWJlciAxNCwgMjAxNyBhdCA3OjI5IEFNPGJy Pg0KPGI+VG86IDwvYj5TdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50IEtpdCAmbHQ7PGEg aHJlZj0ibWFpbHRvOnNwZGtAbGlzdHMuMDEub3JnIj5zcGRrQGxpc3RzLjAxLm9yZzwvYT4mZ3Q7 PGJyPg0KPGI+U3ViamVjdDogPC9iPlJlOiBbU1BES10gUmVxdWVzdCBmb3IgY29tbWVudHMgcmVn YXJkaW5nIGxhdGVuY3kgbWVhc3VyZW1lbnRzPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+ DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuNWluIj48 c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7Ij4mbmJz cDs8L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0 eWxlPSJtYXJnaW4tbGVmdDoxLjVpbiI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0lu dGVsIENsZWFyJnF1b3Q7O2NvbG9yOiM5OTAwMDAiPlNvLCBub3QgYmVpbmcgdGhlIHRlY2huaWNh bCBleHBlcnQgc28gdG8gc3BlYWsNCjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6V2lu Z2RpbmdzO2NvbG9yOiM5OTAwMDAiPko8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZx dW90O0ludGVsIENsZWFyJnF1b3Q7O2NvbG9yOiM5OTAwMDAiPiwgcGxlYXNlIHRha2UgdGhpcyB3 aXRoIGEgZ3JhaW4gb2Ygc2FsdC4gQWdyZWUgd2l0aCBvcHRpb24gIzIuIFNlZW1zIGxpa2UgdGhp cyB3b3VsZCBhbGxvdyBmb3Iga2VlcGluZyBzdGF0cyBhY3Jvc3MgdGhlIGRpZmZlcmVudCBkZXZp Y2UgdHlwZXMNCiBlLmcuIE5WTWUsIE5WTUwsIE5WTWUtb0YgKGFsdGhvdWdoIHRoYXQgaGFzIGEg dHJhbnNwb3J0IHdpdGhpbiBOVk1lLCBzbyBpdCBtaWdodCBiZSBjb3ZlcmVkIGZvciBlaXRoZXIg b3B0aW9uKS48L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHls ZT0ibWFyZ2luLWxlZnQ6MS41aW4iPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtJbnRl bCBDbGVhciZxdW90Oztjb2xvcjojOTkwMDAwIj4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3A+ DQo8ZGl2IHN0eWxlPSJib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCBibHVlIDEuNXB0O3Bh ZGRpbmc6MGluIDBpbiAwaW4gNC4wcHQiPg0KPGRpdj4NCjxkaXYgc3R5bGU9ImJvcmRlcjpub25l O2JvcmRlci10b3A6c29saWQgI0UxRTFFMSAxLjBwdDtwYWRkaW5nOjMuMHB0IDBpbiAwaW4gMGlu Ij4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDoxLjVpbiI+PGI+RnJv bTo8L2I+IFNQREsgWzxhIGhyZWY9Im1haWx0bzpzcGRrLWJvdW5jZXNAbGlzdHMuMDEub3JnIj5t YWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZzwvYT5dDQo8Yj5PbiBCZWhhbGYgT2YgPC9i Pkx1c2UsIFBhdWwgRTxicj4NCjxiPlNlbnQ6PC9iPiBUdWVzZGF5LCBOb3ZlbWJlciAxNCwgMjAx NyA3OjU3IEFNPGJyPg0KPGI+VG86PC9iPiBTdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50 IEtpdCAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNwZGtAbGlzdHMuMDEub3JnIj5zcGRrQGxpc3RzLjAx Lm9yZzwvYT4mZ3Q7PGJyPg0KPGI+U3ViamVjdDo8L2I+IFJlOiBbU1BES10gUmVxdWVzdCBmb3Ig Y29tbWVudHMgcmVnYXJkaW5nIGxhdGVuY3kgbWVhc3VyZW1lbnRzPG86cD48L286cD48L3A+DQo8 L2Rpdj4NCjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEu NWluIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJt YXJnaW4tbGVmdDoxLjVpbiI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5N0QiPkZXSVcgb3B0aW9u IDIgc291bmRzIGxpa2UgdGhlIG1vc3QgYXBwcm9wcmlhdGUgdG8gbWXigKY8L3NwYW4+PG86cD48 L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS41aW4i PjxzcGFuIHN0eWxlPSJjb2xvcjojMUY0OTdEIj4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3A+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS41aW4iPjxzcGFuIHN0 eWxlPSJjb2xvcjojMUY0OTdEIj5UaHg8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS41aW4iPjxzcGFuIHN0eWxlPSJjb2xvcjoj MUY0OTdEIj5QYXVsPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIg c3R5bGU9Im1hcmdpbi1sZWZ0OjEuNWluIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+Jm5i c3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPGRpdj4NCjxkaXYgc3R5bGU9ImJvcmRlcjpub25l O2JvcmRlci10b3A6c29saWQgI0UxRTFFMSAxLjBwdDtwYWRkaW5nOjMuMHB0IDBpbiAwaW4gMGlu Ij4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDoxLjVpbiI+PGI+RnJv bTo8L2I+IFNQREsgWzxhIGhyZWY9Im1haWx0bzpzcGRrLWJvdW5jZXNAbGlzdHMuMDEub3JnIj5t YWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZzwvYT5dDQo8Yj5PbiBCZWhhbGYgT2YgPC9i PlBhdWwgVm9uLVN0YW13aXR6PGJyPg0KPGI+U2VudDo8L2I+IE1vbmRheSwgTm92ZW1iZXIgMTMs IDIwMTcgNzoyOSBQTTxicj4NCjxiPlRvOjwvYj4gPGEgaHJlZj0ibWFpbHRvOnNwZGtAbGlzdHMu MDEub3JnIj5zcGRrQGxpc3RzLjAxLm9yZzwvYT48YnI+DQo8Yj5TdWJqZWN0OjwvYj4gW1NQREtd IFJlcXVlc3QgZm9yIGNvbW1lbnRzIHJlZ2FyZGluZyBsYXRlbmN5IG1lYXN1cmVtZW50czxvOnA+ PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJt YXJnaW4tbGVmdDoxLjVpbiI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9y bWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS41aW4iPkJhY2tncm91bmQ6PG86cD48L286cD48L3A+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS41aW4iPkJkZXYuYyBj dXJyZW50bHkgbWFpbnRhaW5zIGEgY291bnQgb2YgcmVhZHMvd3JpdGVzL2J5dGVzX3JlYWQvYnl0 ZXNfd3JpdHRlbiBpbiBjaGFubmVsLSZndDtzdGF0LiBUaGlzIGluZm9ybWF0aW9uIGlzIHJldHJp ZXZlZCAoYW5kIHJlc2V0KSB2aWEgc3Bka19iZGV2X2dldF9pb19zdGF0LjxvOnA+PC9vOnA+PC9w Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuNWluIj4mbmJzcDs8 bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDox LjVpbiI+UHJvcG9zYWw6PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHls ZT0ibWFyZ2luLWxlZnQ6MS41aW4iPkFkZCBsYXRlbmN5IGluZm9ybWF0aW9uIHRvIGNoYW5uZWwt Jmd0O3N0YXQgYW5kIGVuYWJsZSB0aGUgb3B0aW9uIHRvIHByb3ZpZGUgYSBoaXN0b2dyYW0uPG86 cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS41 aW4iPldlIGNhbiBtZWFzdXJlIHRoZSBsYXRlbmN5IG9mIGVhY2ggSU8gYW5kIGtlZXAgYSBydW5u aW5nIHRvdGFsIG9uIGEgcmVhZC93cml0ZSBiYXNpcy4gV2UgY2FuIGFsc28gdXNlIHRoZSBtZWFz dXJlZCBsYXRlbmN5IHRvIGtlZXAgYSBydW5uaW5nIGNvdW50IG9mIHJlYWRzL3dyaXRlcyBpbiB0 aGVpciBhc3NvY2lhdGVkIGhpc3RvZ3JhbSDigJxidWNrZXRz4oCdLjxvOnA+PC9vOnA+PC9wPg0K PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuNWluIj5UaGUgcXVlc3Rp b24gaXMsIGhvdyBkbyB3ZSBtZWFzdXJlIGxhdGVuY3k/PG86cD48L286cD48L3A+DQo8cCBjbGFz cz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS41aW4iPiZuYnNwOzxvOnA+PC9vOnA+ PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuNWluIj5PcHRp b24gMTo8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4t bGVmdDoxLjVpbiI+TWVhc3VyZSBsYXRlbmN5IGF0IHRoZSBOVk1lIHRyYWNrZXIgLjxvOnA+PC9v OnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuNWluIj5D dXJyZW50bHksIHdlIGFscmVhZHkgdGltZXN0YW1wIGV2ZXJ5IGNvbW1hbmQgcGxhY2VkIG9uIHRo ZSB0cmFja2VyIGlmIHRoZSBhYm9ydCB0aW1lb3V0IGNhbGxiYWNrIGlzIHJlZ2lzdGVyZWQuIFdo ZW4gd2UgcmVtb3ZlIGEgY29tcGxldGVkIElPIGZyb20gdGhlIHRyYWNrZXIsIHdlIGNhbiB0aW1l c3RhbXAgaXQgYWdhaW4gYW5kIGNhbGN1bGF0ZSB0aGUgbGF0ZW5jeS48bzpwPjwvbzpwPjwvcD4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDoxLjVpbiI+VGhlcmUgYXJl IHNldmVyYWwgaXNzdWVzIGhlcmUgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuPG86cD48L286 cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS41aW4iPldl IG5lZWQgdG8gZ2V0IHRoZSBsYXRlbmN5IGluZm9ybWF0aW9uIGJhY2sgdXAgdG8gdGhlIGJkZXYg bGF5ZXIsIG1vc3QgbGlrZWx5IHRocm91Z2ggYSBjYWxsYmFjayBhcmd1bWVudCwgYnV0IHRoaXMg d291bGQgcmVxdWlyZSBhIGNoYW5nZSB0aGUgTlZNZSBBUEkuIElmIHRoZSBiZGV2IGJyZWFrcyBk b3duIGEgcmVxdWVzdCBpbnRvIHNtYWxsZXIgSU9zLCBpdCBjYW4NCiBhZGQgdXAgdGhlIGxhdGVu Y2llcyBvZiB0aGUgY2hpbGQgSU9zIGZvciBpb19zdGF0IGFuZCBoaXN0b2dyYW0gcHVycG9zZXMu PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6 MS41aW4iPkFsc28sIHRoaXMgbWV0aG9kIGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IGFueSBs YXRlbmN5IGFkZGVkIGJ5IHRoZSBzcGRrIGJkZXYvbnZtZSBsYXllcnMgKGV4Y2VwdCB0aGUgcG9s bGVyLikgSWYgYSByZXF1ZXN0IHdhcyBxdWV1ZWQgYmVmb3JlIGJlaW5nIHBsYWNlZCBvbiB0aGUg dHJhY2tlciwgdGhlbiB0aGUgdGltZSBpdCB3YXMgcXVldWVkIGlzIG5vdCBmYWN0b3JlZA0KIGlu dG8gdGhlIGxhdGVuY3kgY2FsY3VsYXRpb24uPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNv Tm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MS41aW4iPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0K PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuNWluIj5PcHRpb24gMjo8 bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDox LjVpbiI+TWVhc3VyZSBsYXRlbmN5IGF0IHRoZSBiZGV2IGxheWVyLjxvOnA+PC9vOnA+PC9wPg0K PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuNWluIj5XZSBjYW4gdGlt ZXN0YW1wIGF0IHN1Ym1pdCBhbmQgYWdhaW4gYXQgY29tcGxldGlvbi4gVGhpcyB3b3VsZCBrZWVw IGFsbCBpb19zdGF0IGluZm9ybWF0aW9uIGxvY2FsIHRvIGJkZXYgYW5kIHdvdWxkIHRha2UgaW50 byBhY2NvdW50IHRoZSBvdmVyaGVhZCBvZiBtb3N0IHF1ZXVlZCBvcGVyYXRpb25zLiBBbnkgYXBw bGljYXRpb25zIHdyaXR0ZW4gZGlyZWN0bHkgdG8NCiB0aGUgTlZNZSBsYXllciB3b3VsZCBoYXZl IHRvIGNhbGN1bGF0ZSB0aGVpciBvd24gbGF0ZW5jaWVzLCBidXQgdGhhdCBpcyBjdXJyZW50bHkg dHJ1ZSBmb3IgYWxsIGlvX3N0YXRzLjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1h bCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuNWluIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDoxLjVpbiI+SeKAmW0gc3VyZSB0aGF0 IHRoZXJlIGFyZSBvdGhlciBpc3N1ZXMgSSBhbSBtaXNzaW5nLCBidXQgSSB3b3VsZCBhcHByZWNp YXRlIGFueSBjb21tZW50cyBvbiBob3cgYmVzdCB0byBtb3ZlIGZvcndhcmQgb24gdGhpcy48bzpw PjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDoxLjVp biI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFy Z2luLWxlZnQ6MS41aW4iPlRoYW5rcyw8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiIHN0eWxlPSJtYXJnaW4tbGVmdDoxLjVpbiI+UGF1bDxvOnA+PC9vOnA+PC9wPg0KPHAgY2xh c3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEuNWluIj4mbmJzcDs8bzpwPjwvbzpw PjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0K --===============7866263196099403563==--