From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============0033657776042460161==" MIME-Version: 1.0 From: Sreeni (Sreenivasa) Busam (Stellus) Subject: Re: [SPDK] Regarding NVMe driver command queue depth. Date: Mon, 20 Nov 2017 20:50:20 +0000 Message-ID: In-Reply-To: 82C9F782B054C94B9FC04A331649C77A9D431F55@FMSMSX108.amr.corp.intel.com List-ID: To: spdk@lists.01.org --===============0033657776042460161== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable I have attached program From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Luse, Paul E Sent: Friday, November 17, 2017 11:02 AM To: Storage Performance Development Kit Subject: Re: [SPDK] Regarding NVMe driver command queue depth. Cool, so working as you would expect now? From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Sreeni (Sreeni= vasa) Busam (Stellus) Sent: Friday, November 17, 2017 11:52 AM To: Storage Performance Development Kit > Subject: Re: [SPDK] Regarding NVMe driver command queue depth. Hi Jim, Thanks for taking a look at the problem. It is a logical bug. I fixed it. The memory for the qpair was allocated outside the ns_entry loop. I have two SSD devices and the memory was not allocated for the qpair for s= econd ns_entry. Here is the problem. ns_entry =3D g_namespaces; ns_entry->qpair_2 =3D spdk_nvme_ctrlr_alloc_io_qpair(ns_entry->ctrlr, = NULL, 0); if (ns_entry->qpair_2 =3D=3D NULL) { printf("The qpair allocation failed.\n"); exit (0); } while (ns_entry !=3D NULL) { cnt =3D 1; while (cnt) { // Fails to be successfully submit rc =3D stellus_spdk_nvme_ns_cmd_write(ns_entry, ns_entry->q= pair_2, sequence->buf, 0, /* LBA start */ 1, /* number of LBAs */ io_complete, sequence, 0) =E2=80=A6. Sreeni From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Harris, James R Sent: Friday, November 17, 2017 8:44 AM To: Storage Performance Development Kit > Subject: Re: [SPDK] Regarding NVMe driver command queue depth. Hi Sreeni, Can you step through your second call to spdk_nvme_ctrlr_alloc_io_qpair? T= he callstack clearly shows that qpair=3D0x0 was passed into stellus_spdk_nv= me_ns_cmd_write() at frame #3. So I think we should back up and figure out= why no I/O qpair was allocated (or maybe it was allocated but not saved in= a structure or something). -Jim From: SPDK = > on behalf of "Sreeni (Sreenivasa) Busam (Stellus)" > Reply-To: Storage Performance Development Kit > Date: Thursday, November 16, 2017 at 4:57 PM To: Storage Performance Development Kit > Subject: Re: [SPDK] Regarding NVMe driver command queue depth. I have been trying to test the number of commands that can be given to the = device at a time. I verified that a maximum of 254 commands could be issued= for a qpair. So I created a 2nd qpair for ns_entry and issued the I/O comm= ands, it was failing in the first command itself. Is it invalid to create 2= qpair for the same ns_entry and send command to device? The qpair is succe= ssfully created, but I could not submit command. I modified the hello_world program to test this and attached the related co= de. Please take a look and let me know what is the problem. 0x000000000040bae2 in nvme_allocate_request (qpair=3D0x0, payload=3D0x7fffa4726ba0, payload_size=3D512, cb_fn=3D0x4041a4 , cb_arg=3D0x7b4270) at nvme.c:85 #1 0x000000000040996c in _nvme_ns_cmd_rw (ns=3D0x100ff8ee40, qpair=3D0x0, payload=3D0x7fffa4726ba0, payload_offset=3D0, md_offset=3D0, lba=3D0, l= ba_count=3D1, cb_fn=3D0x4041a4 , cb_arg=3D0x7b4270, opc=3D1, io_flags= =3D0, apptag_mask=3D0, apptag=3D0, check_sgl=3Dtrue) at nvme_ns_cmd.c:440 #2 0x0000000000409fea in spdk_nvme_ns_cmd_write (ns=3D0x100ff8ee40, qpair= =3D0x0, buffer=3D0x10000f7000, lba=3D0, lba_count=3D1, cb_fn=3D0x4041a4 , cb_arg=3D0x7b4270, io_flags=3D0) at nvme_ns_cmd.c:649 #3 0x000000000040439d in stellus_spdk_nvme_ns_cmd_write (ns_entry=3D0x7b13= c0, qpair=3D0x0, buffer=3D0x10000f7000, lba=3D0, lba_count=3D1, cb_fn=3D0x40420d , cb_arg=3D0x7b4270, ioflags=3D0) at iost= at.c:233 #4 0x00000000004046b8 in test_io_func1 () at iostat.c:342 #5 0x0000000000404a94 in main (argc=3D1, argv=3D0x7fffa4726db8) at iostat.= c:503 (gdb) f 3 #3 0x000000000040439d in stellus_spdk_nvme_ns_cmd_write (ns_entry=3D0x7b13= c0, qpair=3D0x0, buffer=3D0x10000f7000, lba=3D0, lba_count=3D1, cb_fn=3D0x40420d , cb_arg=3D0x7b4270, ioflags=3D0) at iost= at.c:233 233 rc =3D spdk_nvme_ns_cmd_write(ns_entry->ns, qpair, = buffer, (gdb) p qpair $1 =3D (struct spdk_nvme_qpair *) 0x0 If any of you get time, please look at it. Thank you for your suggestion. From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Sreeni (Sreeni= vasa) Busam (Stellus) Sent: Thursday, November 16, 2017 11:26 AM To: spdk(a)lists.01.org Subject: [SPDK] Regarding NVMe driver command queue depth. Hi Paul, I was reading about the driver from SPDK site, and interested in understand= ing the queue depth for a device. =E2=80=9CThe specification allows for thousands, but most devices support b= etween 32 and 128. The specification makes no guarantees about the performa= nce available from each queue pair, but in practice the full performance of= a device is almost always achievable using just one queue pair. For exampl= e, if a device claims to be capable of 450,000 I/O per second at queue dept= h 128, in practice it does not matter if the driver is using 4 queue pairs = each with queue depth 32, or a single queue pair with queue depth 128=E2=80= =9D When queue depth is mentioned for device, is it the number of commands that= can be issued from application to controller, and outstanding at any time? Is there NVMe driver API to set the queue depth? Is my understanding correc= t if I think that the size of queue is at firmware level? Please give some detail about the parameter. Thanks, Sreeni --===============0033657776042460161== 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 IkNhbWJyaWEgTWF0aCI7DQoJcGFub3NlLTE6MiA0IDUgMyA1IDQgNiAzIDIgNDt9DQpAZm9udC1m YWNlDQoJe2ZvbnQtZmFtaWx5OiJNYWxndW4gR290aGljIjsNCglwYW5vc2UtMToyIDExIDUgMyAy IDAgMCAyIDAgNDt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OkNhbGlicmk7DQoJcGFub3Nl LTE6MiAxNSA1IDIgMiAyIDQgMyAyIDQ7fQ0KQGZvbnQtZmFjZQ0KCXtmb250LWZhbWlseToiXEBN YWxndW4gR290aGljIjsNCglwYW5vc2UtMToyIDExIDUgMyAyIDAgMCAyIDAgNDt9DQovKiBTdHls ZSBEZWZpbml0aW9ucyAqLw0KcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1h bA0KCXttYXJnaW46MGluOw0KCW1hcmdpbi1ib3R0b206LjAwMDFwdDsNCglmb250LXNpemU6MTEu MHB0Ow0KCWZvbnQtZmFtaWx5OiJDYWxpYnJpIixzYW5zLXNlcmlmO30NCmE6bGluaywgc3Bhbi5N c29IeXBlcmxpbmsNCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCWNvbG9yOiMwNTYzQzE7DQoJ dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9DQphOnZpc2l0ZWQsIHNwYW4uTXNvSHlwZXJsaW5r Rm9sbG93ZWQNCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCWNvbG9yOiM5NTRGNzI7DQoJdGV4 dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9DQpzcGFuLkVtYWlsU3R5bGUxNw0KCXttc28tc3R5bGUt dHlwZTpwZXJzb25hbDsNCglmb250LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjsNCgljb2xv cjp3aW5kb3d0ZXh0O30NCnNwYW4uRW1haWxTdHlsZTE4DQoJe21zby1zdHlsZS10eXBlOnBlcnNv bmFsOw0KCWZvbnQtZmFtaWx5OiJDYWxpYnJpIixzYW5zLXNlcmlmOw0KCWNvbG9yOiMxRjQ5N0Q7 fQ0Kc3Bhbi5FbWFpbFN0eWxlMTkNCgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWw7DQoJZm9udC1m YW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7DQoJY29sb3I6d2luZG93dGV4dDt9DQpzcGFuLkVt YWlsU3R5bGUyMA0KCXttc28tc3R5bGUtdHlwZTpwZXJzb25hbDsNCglmb250LWZhbWlseToiQ2Fs aWJyaSIsc2Fucy1zZXJpZjsNCgljb2xvcjojMUY0OTdEO30NCnNwYW4uRW1haWxTdHlsZTIxDQoJ e21zby1zdHlsZS10eXBlOnBlcnNvbmFsOw0KCWZvbnQtZmFtaWx5OiJDYWxpYnJpIixzYW5zLXNl cmlmOw0KCWNvbG9yOiMxRjQ5N0Q7fQ0Kc3Bhbi5FbWFpbFN0eWxlMjINCgl7bXNvLXN0eWxlLXR5 cGU6cGVyc29uYWwtcmVwbHk7DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7DQoJ Y29sb3I6IzFGNDk3RDt9DQouTXNvQ2hwRGVmYXVsdA0KCXttc28tc3R5bGUtdHlwZTpleHBvcnQt b25seTsNCglmb250LXNpemU6MTAuMHB0O30NCkBwYWdlIFdvcmRTZWN0aW9uMQ0KCXtzaXplOjgu NWluIDExLjBpbjsNCgltYXJnaW46MS4waW4gMS4waW4gMS4waW4gMS4waW47fQ0KZGl2LldvcmRT ZWN0aW9uMQ0KCXtwYWdlOldvcmRTZWN0aW9uMTt9DQotLT48L3N0eWxlPjwhLS1baWYgZ3RlIG1z byA5XT48eG1sPg0KPG86c2hhcGVkZWZhdWx0cyB2OmV4dD0iZWRpdCIgc3BpZG1heD0iMTAyNiIg Lz4NCjwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KPG86c2hhcGVs YXlvdXQgdjpleHQ9ImVkaXQiPg0KPG86aWRtYXAgdjpleHQ9ImVkaXQiIGRhdGE9IjEiIC8+DQo8 L286c2hhcGVsYXlvdXQ+PC94bWw+PCFbZW5kaWZdLS0+DQo8L2hlYWQ+DQo8Ym9keSBiZ2NvbG9y PSJ3aGl0ZSIgbGFuZz0iRU4tVVMiIGxpbms9IiMwNTYzQzEiIHZsaW5rPSIjOTU0RjcyIj4NCjxk aXYgY2xhc3M9IldvcmRTZWN0aW9uMSI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHls ZT0iY29sb3I6IzFGNDk3RCI+SSBoYXZlIGF0dGFjaGVkIHByb2dyYW08bzpwPjwvbzpwPjwvc3Bh bj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48YSBuYW1lPSJfTWFpbEVuZENvbXBvc2UiPjxz cGFuIHN0eWxlPSJjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L2E+PC9w Pg0KPGRpdj4NCjxkaXYgc3R5bGU9ImJvcmRlcjpub25lO2JvcmRlci10b3A6c29saWQgI0UxRTFF MSAxLjBwdDtwYWRkaW5nOjMuMHB0IDBpbiAwaW4gMGluIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi PjxiPkZyb206PC9iPiBTUERLIFttYWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZ10gPGI+ T24gQmVoYWxmIE9mDQo8L2I+THVzZSwgUGF1bCBFPGJyPg0KPGI+U2VudDo8L2I+IEZyaWRheSwg Tm92ZW1iZXIgMTcsIDIwMTcgMTE6MDIgQU08YnI+DQo8Yj5Ubzo8L2I+IFN0b3JhZ2UgUGVyZm9y bWFuY2UgRGV2ZWxvcG1lbnQgS2l0ICZsdDtzcGRrQGxpc3RzLjAxLm9yZyZndDs8YnI+DQo8Yj5T dWJqZWN0OjwvYj4gUmU6IFtTUERLXSBSZWdhcmRpbmcgTlZNZSBkcml2ZXIgY29tbWFuZCBxdWV1 ZSBkZXB0aC48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9y bWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0 eWxlPSJjb2xvcjojMUY0OTdEIj5Db29sLCBzbyB3b3JraW5nIGFzIHlvdSB3b3VsZCBleHBlY3Qg bm93PzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0 eWxlPSJjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8ZGl2Pg0K PGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAjRTFFMUUxIDEuMHB0O3Bh ZGRpbmc6My4wcHQgMGluIDBpbiAwaW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGEgbmFtZT0i X19fX19yZXBseXNlcGFyYXRvciI+PC9hPjxiPkZyb206PC9iPiBTUERLIFs8YSBocmVmPSJtYWls dG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZyI+bWFpbHRvOnNwZGstYm91bmNlc0BsaXN0cy4w MS5vcmc8L2E+XQ0KPGI+T24gQmVoYWxmIE9mIDwvYj5TcmVlbmkgKFNyZWVuaXZhc2EpIEJ1c2Ft IChTdGVsbHVzKTxicj4NCjxiPlNlbnQ6PC9iPiBGcmlkYXksIE5vdmVtYmVyIDE3LCAyMDE3IDEx OjUyIEFNPGJyPg0KPGI+VG86PC9iPiBTdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50IEtp dCAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNwZGtAbGlzdHMuMDEub3JnIj5zcGRrQGxpc3RzLjAxLm9y ZzwvYT4mZ3Q7PGJyPg0KPGI+U3ViamVjdDo8L2I+IFJlOiBbU1BES10gUmVnYXJkaW5nIE5WTWUg ZHJpdmVyIGNvbW1hbmQgcXVldWUgZGVwdGguPG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvZGl2 Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+SGkgSmltLDxvOnA+PC9vOnA+ PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJjb2xvcjojMUY0 OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48 c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+VGhhbmtzIGZvciB0YWtpbmcgYSBsb29rIGF0IHRo ZSBwcm9ibGVtLiBJdCBpcyBhIGxvZ2ljYWwgYnVnLiBJIGZpeGVkIGl0Lg0KPG86cD48L286cD48 L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5 N0QiPlRoZSBtZW1vcnkgZm9yIHRoZSBxcGFpciB3YXMgYWxsb2NhdGVkIG91dHNpZGUgdGhlIG5z X2VudHJ5IGxvb3AuDQo8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFs Ij48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+SSBoYXZlIHR3byBTU0QgZGV2aWNlcyBhbmQg dGhlIG1lbW9yeSB3YXMgbm90IGFsbG9jYXRlZCBmb3IgdGhlIHFwYWlyIGZvciBzZWNvbmQgbnNf ZW50cnkuPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4g c3R5bGU9ImNvbG9yOiMxRjQ5N0QiPkhlcmUgaXMgdGhlIHByb2JsZW0uPG86cD48L286cD48L3Nw YW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9InRleHQtYXV0b3NwYWNlOm5vbmUi PjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5ldyZxdW90OyI+bnNfZW50 cnkgPSBnX25hbWVzcGFjZXM7PG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05v cm1hbCIgc3R5bGU9InRleHQtYXV0b3NwYWNlOm5vbmUiPjxzcGFuIHN0eWxlPSJmb250LWZhbWls eTomcXVvdDtDb3VyaWVyIE5ldyZxdW90OyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7DQo8Yj5u c19lbnRyeS0mZ3Q7cXBhaXJfMiA9IHNwZGtfbnZtZV9jdHJscl9hbGxvY19pb19xcGFpcihuc19l bnRyeS0mZ3Q7Y3RybHIsIE5VTEwsIDApOzxvOnA+PC9vOnA+PC9iPjwvc3Bhbj48L3A+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0idGV4dC1hdXRvc3BhY2U6bm9uZSI+PHNwYW4gc3R5bGU9 ImZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7Ij4mbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsgaWYgKG5zX2VudHJ5LSZndDtxcGFpcl8yID09IE5VTEwpIHs8bzpwPjwvbzpwPjwvc3Bh bj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0idGV4dC1hdXRvc3BhY2U6bm9uZSI+ PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7Ij4mbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcHJp bnRmKCZxdW90O1RoZSBxcGFpciBhbGxvY2F0aW9uIGZhaWxlZC5cbiZxdW90Oyk7PG86cD48L286 cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9InRleHQtYXV0b3NwYWNl Om5vbmUiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5ldyZxdW90OyI+ Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7IGV4aXQgKDApOzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi IHN0eWxlPSJ0ZXh0LWF1dG9zcGFjZTpub25lIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1 b3Q7Q291cmllciBOZXcmcXVvdDsiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB9PG86cD48L286 cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtZmFt aWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7Ij4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgd2hp bGUgKG5zX2VudHJ5ICE9IE5VTEwpIHs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIiBzdHlsZT0idGV4dC1hdXRvc3BhY2U6bm9uZSI+PHNwYW4gc3R5bGU9ImZvbnQt ZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7Ij4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgY250ID0gMTs8bzpwPjwvbzpwPjwv c3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0idGV4dC1hdXRvc3BhY2U6bm9u ZSI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7Ij4mbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsg d2hpbGUgKGNudCkgezxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi IHN0eWxlPSJ0ZXh0LWF1dG9zcGFjZTpub25lIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1 b3Q7Q291cmllciBOZXcmcXVvdDsiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAvLyBGYWlscyB0byBiZSBzdWNjZXNzZnVsbHkgc3Vi bWl0PG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9InRl eHQtYXV0b3NwYWNlOm5vbmUiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDb3VyaWVy IE5ldyZxdW90OyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHJjID0gc3RlbGx1 c19zcGRrX252bWVfbnNfY21kX3dyaXRlKG5zX2VudHJ5LCBuc19lbnRyeS0mZ3Q7cXBhaXJfMiwg c2VxdWVuY2UtJmd0O2J1Ziw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9y bWFsIiBzdHlsZT0idGV4dC1hdXRvc3BhY2U6bm9uZSI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5 OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7Ij4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJm5ic3A7Jm5i c3A7Jm5ic3A7IDAsIC8qIExCQSBzdGFydCAqLzxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJ0ZXh0LWF1dG9zcGFjZTpub25lIj48c3BhbiBzdHlsZT0i Zm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDsiPiZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyAmbmJzcDsmbmJzcDsmbmJzcDsgMSwgLyogbnVtYmVyIG9mIExCQXMgKi88bzpwPjwvbzpwPjwv c3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6 JnF1b3Q7Q291cmllciBOZXcmcXVvdDsiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsmbmJz cDsmbmJzcDsgaW9fY29tcGxldGUsIHNlcXVlbmNlLCAwKTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDb3Vy aWVyIE5ldyZxdW90OyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7IOKApi48L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5N0Qi PjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxl PSJjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+PG86cD4mbmJzcDs8L286cD48 L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5 N0QiPlNyZWVuaTxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxz cGFuIHN0eWxlPSJjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8 ZGl2Pg0KPGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAjRTFFMUUxIDEu MHB0O3BhZGRpbmc6My4wcHQgMGluIDBpbiAwaW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGI+ RnJvbTo8L2I+IFNQREsgWzxhIGhyZWY9Im1haWx0bzpzcGRrLWJvdW5jZXNAbGlzdHMuMDEub3Jn Ij5tYWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZzwvYT5dDQo8Yj5PbiBCZWhhbGYgT2Yg PC9iPkhhcnJpcywgSmFtZXMgUjxicj4NCjxiPlNlbnQ6PC9iPiBGcmlkYXksIE5vdmVtYmVyIDE3 LCAyMDE3IDg6NDQgQU08YnI+DQo8Yj5Ubzo8L2I+IFN0b3JhZ2UgUGVyZm9ybWFuY2UgRGV2ZWxv cG1lbnQgS2l0ICZsdDs8YSBocmVmPSJtYWlsdG86c3Bka0BsaXN0cy4wMS5vcmciPnNwZGtAbGlz dHMuMDEub3JnPC9hPiZndDs8YnI+DQo8Yj5TdWJqZWN0OjwvYj4gUmU6IFtTUERLXSBSZWdhcmRp bmcgTlZNZSBkcml2ZXIgY29tbWFuZCBxdWV1ZSBkZXB0aC48bzpwPjwvbzpwPjwvcD4NCjwvZGl2 Pg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxw IGNsYXNzPSJNc29Ob3JtYWwiPkhpIFNyZWVuaSw8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJN c29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Q2Fu IHlvdSBzdGVwIHRocm91Z2ggeW91ciBzZWNvbmQgY2FsbCB0byBzcGRrX252bWVfY3RybHJfYWxs b2NfaW9fcXBhaXI/Jm5ic3A7IFRoZSBjYWxsc3RhY2sgY2xlYXJseSBzaG93cyB0aGF0IHFwYWly PTB4MCB3YXMgcGFzc2VkIGludG8gc3RlbGx1c19zcGRrX252bWVfbnNfY21kX3dyaXRlKCkgYXQg ZnJhbWUgIzMuJm5ic3A7IFNvIEkgdGhpbmsgd2Ugc2hvdWxkIGJhY2sgdXAgYW5kIGZpZ3VyZSBv dXQgd2h5IG5vIEkvTyBxcGFpcg0KIHdhcyBhbGxvY2F0ZWQgKG9yIG1heWJlIGl0IHdhcyBhbGxv Y2F0ZWQgYnV0IG5vdCBzYXZlZCBpbiBhIHN0cnVjdHVyZSBvciBzb21ldGhpbmcpLjxvOnA+PC9v OnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIj4tSmltPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFs Ij48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7 PC9vOnA+PC9wPg0KPGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAjQjVD NERGIDEuMHB0O3BhZGRpbmc6My4wcHQgMGluIDBpbiAwaW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1h bCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxiPjxzcGFuIHN0eWxlPSJjb2xvcjpibGFjayI+ RnJvbTogPC9zcGFuPg0KPC9iPjxzcGFuIHN0eWxlPSJjb2xvcjpibGFjayI+U1BESyAmbHQ7PGEg aHJlZj0ibWFpbHRvOnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmciPnNwZGstYm91bmNlc0BsaXN0 cy4wMS5vcmc8L2E+Jmd0OyBvbiBiZWhhbGYgb2YgJnF1b3Q7U3JlZW5pIChTcmVlbml2YXNhKSBC dXNhbSAoU3RlbGx1cykmcXVvdDsgJmx0OzxhIGhyZWY9Im1haWx0bzpzLmJ1c2FtQHN0ZWxsdXMu Y29tIj5zLmJ1c2FtQHN0ZWxsdXMuY29tPC9hPiZndDs8YnI+DQo8Yj5SZXBseS1UbzogPC9iPlN0 b3JhZ2UgUGVyZm9ybWFuY2UgRGV2ZWxvcG1lbnQgS2l0ICZsdDs8YSBocmVmPSJtYWlsdG86c3Bk a0BsaXN0cy4wMS5vcmciPnNwZGtAbGlzdHMuMDEub3JnPC9hPiZndDs8YnI+DQo8Yj5EYXRlOiA8 L2I+VGh1cnNkYXksIE5vdmVtYmVyIDE2LCAyMDE3IGF0IDQ6NTcgUE08YnI+DQo8Yj5UbzogPC9i PlN0b3JhZ2UgUGVyZm9ybWFuY2UgRGV2ZWxvcG1lbnQgS2l0ICZsdDs8YSBocmVmPSJtYWlsdG86 c3Bka0BsaXN0cy4wMS5vcmciPnNwZGtAbGlzdHMuMDEub3JnPC9hPiZndDs8YnI+DQo8Yj5TdWJq ZWN0OiA8L2I+UmU6IFtTUERLXSBSZWdhcmRpbmcgTlZNZSBkcml2ZXIgY29tbWFuZCBxdWV1ZSBk ZXB0aC48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMi4wcHQ7Y29sb3I6YmxhY2siPjxv OnA+PC9vOnA+PC9zcGFuPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi IHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7 VGltZXMgTmV3IFJvbWFuJnF1b3Q7LHNlcmlmIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+ DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48 c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+SSBoYXZlIGJlZW4gdHJ5aW5nIHRvIHRlc3QgdGhl IG51bWJlciBvZiBjb21tYW5kcyB0aGF0IGNhbiBiZSBnaXZlbiB0byB0aGUgZGV2aWNlIGF0IGEg dGltZS4gSSB2ZXJpZmllZCB0aGF0IGEgbWF4aW11bSBvZiAyNTQgY29tbWFuZHMgY291bGQgYmUg aXNzdWVkIGZvciBhIHFwYWlyLiBTbyBJIGNyZWF0ZWQgYSAyPHN1cD5uZDwvc3VwPg0KIHFwYWly IGZvciBuc19lbnRyeSBhbmQgaXNzdWVkIHRoZSBJL08gY29tbWFuZHMsIGl0IHdhcyBmYWlsaW5n IGluIHRoZSBmaXJzdCBjb21tYW5kIGl0c2VsZi4gSXMgaXQgaW52YWxpZCB0byBjcmVhdGUgMiBx cGFpciBmb3IgdGhlIHNhbWUgbnNfZW50cnkgYW5kIHNlbmQgY29tbWFuZCB0byBkZXZpY2U/IFRo ZSBxcGFpciBpcyBzdWNjZXNzZnVsbHkgY3JlYXRlZCwgYnV0IEkgY291bGQgbm90IHN1Ym1pdCBj b21tYW5kLjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxl PSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+SSBtb2RpZmll ZCB0aGUgaGVsbG9fd29ybGQgcHJvZ3JhbSB0byB0ZXN0IHRoaXMgYW5kIGF0dGFjaGVkIHRoZSBy ZWxhdGVkIGNvZGUuICZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29O b3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3 RCI+UGxlYXNlIHRha2UgYSBsb29rIGFuZCBsZXQgbWUga25vdyB3aGF0IGlzIHRoZSBwcm9ibGVt Ljwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJn aW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iY29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjxv OnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41 aW47dGV4dC1hdXRvc3BhY2U6bm9uZSI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0Nv dXJpZXIgTmV3JnF1b3Q7Ij4weDAwMDAwMDAwMDA0MGJhZTIgaW4gbnZtZV9hbGxvY2F0ZV9yZXF1 ZXN0IChxcGFpcj0weDAsPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1h bCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW47dGV4dC1hdXRvc3BhY2U6bm9uZSI+PHNwYW4gc3R5 bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7Ij4mbmJzcDsmbmJzcDsmbmJz cDsgcGF5bG9hZD0weDdmZmZhNDcyNmJhMCwgcGF5bG9hZF9zaXplPTUxMiwgY2JfZm49MHg0MDQx YTQgJmx0O3dyaXRlX2NvbXBsZXRlJmd0Oyw8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFz cz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbjt0ZXh0LWF1dG9zcGFjZTpub25l Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDsiPiZuYnNw OyZuYnNwOyZuYnNwOyBjYl9hcmc9MHg3YjQyNzApIGF0IG52bWUuYzo4NTwvc3Bhbj48bzpwPjwv bzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluO3Rl eHQtYXV0b3NwYWNlOm5vbmUiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDb3VyaWVy IE5ldyZxdW90OyI+IzEmbmJzcDsgMHgwMDAwMDAwMDAwNDA5OTZjIGluIF9udm1lX25zX2NtZF9y dyAobnM9MHgxMDBmZjhlZTQwLCBxcGFpcj0weDAsPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAg Y2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW47dGV4dC1hdXRvc3BhY2U6 bm9uZSI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7Ij4m bmJzcDsmbmJzcDsmbmJzcDsgcGF5bG9hZD0weDdmZmZhNDcyNmJhMCwgcGF5bG9hZF9vZmZzZXQ9 MCwgbWRfb2Zmc2V0PTAsIGxiYT0wLCBsYmFfY291bnQ9MSw8L3NwYW4+PG86cD48L286cD48L3A+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbjt0ZXh0LWF1dG9z cGFjZTpub25lIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVv dDsiPiZuYnNwOyZuYnNwOyZuYnNwOyBjYl9mbj0weDQwNDFhNCAmbHQ7d3JpdGVfY29tcGxldGUm Z3Q7LCBjYl9hcmc9MHg3YjQyNzAsIG9wYz0xLCBpb19mbGFncz0wLDwvc3Bhbj48bzpwPjwvbzpw PjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluO3RleHQt YXV0b3NwYWNlOm5vbmUiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5l dyZxdW90OyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IGFwcHRhZ19tYXNrPTAsIGFwcHRhZz0wLCBjaGVj a19zZ2w9dHJ1ZSkgYXQgbnZtZV9uc19jbWQuYzo0NDA8L3NwYW4+PG86cD48L286cD48L3A+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbjt0ZXh0LWF1dG9zcGFj ZTpub25lIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDsi PiMyJm5ic3A7IDB4MDAwMDAwMDAwMDQwOWZlYSBpbiBzcGRrX252bWVfbnNfY21kX3dyaXRlIChu cz0weDEwMGZmOGVlNDAsIHFwYWlyPTB4MCw8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFz cz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbjt0ZXh0LWF1dG9zcGFjZTpub25l Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDsiPiZuYnNw OyZuYnNwOyZuYnNwOyBidWZmZXI9MHgxMDAwMGY3MDAwLCBsYmE9MCwgbGJhX2NvdW50PTEsIGNi X2ZuPTB4NDA0MWE0ICZsdDt3cml0ZV9jb21wbGV0ZSZndDssPC9zcGFuPjxvOnA+PC9vOnA+PC9w Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW47dGV4dC1hdXRv c3BhY2U6bm9uZSI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1 b3Q7Ij4mbmJzcDsmbmJzcDsmbmJzcDsgY2JfYXJnPTB4N2I0MjcwLCBpb19mbGFncz0wKSBhdCBu dm1lX25zX2NtZC5jOjY0OTwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluO3RleHQtYXV0b3NwYWNlOm5vbmUiPjxzcGFuIHN0 eWxlPSJmb250LWZhbWlseTomcXVvdDtDb3VyaWVyIE5ldyZxdW90OyI+IzMmbmJzcDsgMHgwMDAw MDAwMDAwNDA0MzlkIGluIHN0ZWxsdXNfc3Bka19udm1lX25zX2NtZF93cml0ZSAobnNfZW50cnk9 MHg3YjEzYzAsPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5 bGU9Im1hcmdpbi1sZWZ0Oi41aW47dGV4dC1hdXRvc3BhY2U6bm9uZSI+PHNwYW4gc3R5bGU9ImZv bnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7Ij4mbmJzcDsmbmJzcDsmbmJzcDsgcXBh aXI9MHgwLCBidWZmZXI9MHgxMDAwMGY3MDAwLCBsYmE9MCwgbGJhX2NvdW50PTEsPC9zcGFuPjxv OnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41 aW47dGV4dC1hdXRvc3BhY2U6bm9uZSI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0Nv dXJpZXIgTmV3JnF1b3Q7Ij4mbmJzcDsmbmJzcDsmbmJzcDsgY2JfZm49MHg0MDQyMGQgJmx0O2lv X2NvbXBsZXRlJmd0OywgY2JfYXJnPTB4N2I0MjcwLCBpb2ZsYWdzPTApIGF0IGlvc3RhdC5jOjIz Mzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJn aW4tbGVmdDouNWluO3RleHQtYXV0b3NwYWNlOm5vbmUiPjxzcGFuIHN0eWxlPSJmb250LWZhbWls eTomcXVvdDtDb3VyaWVyIE5ldyZxdW90OyI+IzQmbmJzcDsgMHgwMDAwMDAwMDAwNDA0NmI4IGlu IHRlc3RfaW9fZnVuYzEgKCkgYXQgaW9zdGF0LmM6MzQyPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0K PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW47dGV4dC1hdXRvc3Bh Y2U6bm9uZSI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7 Ij4jNSZuYnNwOyAweDAwMDAwMDAwMDA0MDRhOTQgaW4gbWFpbiAoYXJnYz0xLCBhcmd2PTB4N2Zm ZmE0NzI2ZGI4KSBhdCBpb3N0YXQuYzo1MDM8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFz cz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbjt0ZXh0LWF1dG9zcGFjZTpub25l Ij48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7Q291cmllciBOZXcmcXVvdDsiPihnZGIp IGYgMzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJt YXJnaW4tbGVmdDouNWluO3RleHQtYXV0b3NwYWNlOm5vbmUiPjxzcGFuIHN0eWxlPSJmb250LWZh bWlseTomcXVvdDtDb3VyaWVyIE5ldyZxdW90OyI+IzMmbmJzcDsgMHgwMDAwMDAwMDAwNDA0Mzlk IGluIHN0ZWxsdXNfc3Bka19udm1lX25zX2NtZF93cml0ZSAobnNfZW50cnk9MHg3YjEzYzAsPC9z cGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1s ZWZ0Oi41aW47dGV4dC1hdXRvc3BhY2U6bm9uZSI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZx dW90O0NvdXJpZXIgTmV3JnF1b3Q7Ij4mbmJzcDsmbmJzcDsmbmJzcDsgcXBhaXI9MHgwLCBidWZm ZXI9MHgxMDAwMGY3MDAwLCBsYmE9MCwgbGJhX2NvdW50PTEsPC9zcGFuPjxvOnA+PC9vOnA+PC9w Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW47dGV4dC1hdXRv c3BhY2U6bm9uZSI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1 b3Q7Ij4mbmJzcDsmbmJzcDsmbmJzcDsgY2JfZm49MHg0MDQyMGQgJmx0O2lvX2NvbXBsZXRlJmd0 OywgY2JfYXJnPTB4N2I0MjcwLCBpb2ZsYWdzPTApIGF0IGlvc3RhdC5jOjIzMzwvc3Bhbj48bzpw PjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWlu O3RleHQtYXV0b3NwYWNlOm5vbmUiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDb3Vy aWVyIE5ldyZxdW90OyI+MjMzJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHJjID0gc3Bka19udm1lX25zX2NtZF93cml0ZShuc19l bnRyeS0mZ3Q7bnMsIHFwYWlyLCBidWZmZXIsPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xh c3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW47dGV4dC1hdXRvc3BhY2U6bm9u ZSI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiZxdW90O0NvdXJpZXIgTmV3JnF1b3Q7Ij4oZ2Ri KSBwIHFwYWlyPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5 bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDb3Vy aWVyIE5ldyZxdW90OyI+JDEgPSAoc3RydWN0IHNwZGtfbnZtZV9xcGFpciAqKSAweDA8L3NwYW4+ PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6 LjVpbiI+PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpw PjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3Bh biBzdHlsZT0iY29sb3I6IzFGNDk3RCI+SWYgYW55IG9mIHlvdSBnZXQgdGltZSwgcGxlYXNlIGxv b2sgYXQgaXQuIFRoYW5rIHlvdSBmb3IgeW91ciBzdWdnZXN0aW9uLg0KPC9zcGFuPjxvOnA+PC9v OnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxz cGFuIHN0eWxlPSJjb2xvcjojMUY0OTdEIj4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3A+DQo8 ZGl2Pg0KPGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAjRTFFMUUxIDEu MHB0O3BhZGRpbmc6My4wcHQgMGluIDBpbiAwaW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5 bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxiPkZyb206PC9iPiBTUERLIFs8YSBocmVmPSJtYWlsdG86 c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZyI+bWFpbHRvOnNwZGstYm91bmNlc0BsaXN0cy4wMS5v cmc8L2E+XQ0KPGI+T24gQmVoYWxmIE9mIDwvYj5TcmVlbmkgKFNyZWVuaXZhc2EpIEJ1c2FtIChT dGVsbHVzKTxicj4NCjxiPlNlbnQ6PC9iPiBUaHVyc2RheSwgTm92ZW1iZXIgMTYsIDIwMTcgMTE6 MjYgQU08YnI+DQo8Yj5Ubzo8L2I+IDxhIGhyZWY9Im1haWx0bzpzcGRrQGxpc3RzLjAxLm9yZyI+ c3Bka0BsaXN0cy4wMS5vcmc8L2E+PGJyPg0KPGI+U3ViamVjdDo8L2I+IFtTUERLXSBSZWdhcmRp bmcgTlZNZSBkcml2ZXIgY29tbWFuZCBxdWV1ZSBkZXB0aC48bzpwPjwvbzpwPjwvcD4NCjwvZGl2 Pg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+ Jm5ic3A7PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2lu LWxlZnQ6LjVpbiI+SGkgUGF1bCw8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi IHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNz PSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj5JIHdhcyByZWFkaW5nIGFib3V0 IHRoZSBkcml2ZXIgZnJvbSBTUERLIHNpdGUsIGFuZCBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRp bmcgdGhlIHF1ZXVlIGRlcHRoIGZvciBhIGRldmljZS48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNz PSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iZm9udC1z aXplOjEzLjVwdDtmb250LWZhbWlseTomcXVvdDtBcmlhbCZxdW90OyxzYW5zLXNlcmlmO2NvbG9y OiMzMzMzMzM7YmFja2dyb3VuZDp3aGl0ZSI+4oCcVGhlIHNwZWNpZmljYXRpb24gYWxsb3dzIGZv ciB0aG91c2FuZHMsIGJ1dCBtb3N0IGRldmljZXMgc3VwcG9ydCBiZXR3ZWVuIDMyIGFuZCAxMjgu IFRoZSBzcGVjaWZpY2F0aW9uIG1ha2VzIG5vIGd1YXJhbnRlZXMNCiBhYm91dCB0aGUgcGVyZm9y bWFuY2UgYXZhaWxhYmxlIGZyb20gZWFjaCBxdWV1ZSBwYWlyLCBidXQgaW4gcHJhY3RpY2UgdGhl IGZ1bGwgcGVyZm9ybWFuY2Ugb2YgYSBkZXZpY2UgaXMgYWxtb3N0IGFsd2F5cyBhY2hpZXZhYmxl IHVzaW5nIGp1c3Qgb25lIHF1ZXVlIHBhaXIuIEZvciBleGFtcGxlLCBpZiBhIGRldmljZSBjbGFp bXMgdG8gYmUgY2FwYWJsZSBvZiA0NTAsMDAwIEkvTyBwZXIgc2Vjb25kIGF0IHF1ZXVlIGRlcHRo IDEyOCwgaW4gcHJhY3RpY2UNCiBpdCBkb2VzIG5vdCBtYXR0ZXIgaWYgdGhlIGRyaXZlciBpcyB1 c2luZyA0IHF1ZXVlIHBhaXJzIGVhY2ggd2l0aCBxdWV1ZSBkZXB0aCAzMiwgb3IgYSBzaW5nbGUg cXVldWUgcGFpciB3aXRoIHF1ZXVlIGRlcHRoIDEyOOKAnTwvc3Bhbj48bzpwPjwvbzpwPjwvcD4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj5XaGVuIHF1ZXVl IGRlcHRoIGlzIG1lbnRpb25lZCBmb3IgZGV2aWNlLCBpcyBpdCB0aGUgbnVtYmVyIG9mIGNvbW1h bmRzIHRoYXQgY2FuIGJlIGlzc3VlZCBmcm9tIGFwcGxpY2F0aW9uIHRvIGNvbnRyb2xsZXIsIGFu ZCBvdXRzdGFuZGluZyBhdCBhbnkgdGltZT8NCjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1z b05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPklzIHRoZXJlIE5WTWUgZHJpdmVyIEFQ SSB0byBzZXQgdGhlIHF1ZXVlIGRlcHRoPyBJcyBteSB1bmRlcnN0YW5kaW5nIGNvcnJlY3QgaWYg SSB0aGluayB0aGF0IHRoZSBzaXplIG9mIHF1ZXVlIGlzIGF0IGZpcm13YXJlIGxldmVsPw0KPG86 cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVp biI+UGxlYXNlIGdpdmUgc29tZSBkZXRhaWwgYWJvdXQgdGhlIHBhcmFtZXRlci48bzpwPjwvbzpw PjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj4mbmJz cDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVm dDouNWluIj5UaGFua3MsPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHls ZT0ibWFyZ2luLWxlZnQ6LjVpbiI+U3JlZW5pPG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvYm9k eT4NCjwvaHRtbD4NCg== --===============0033657776042460161== Content-Type: text/plain MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="hello_world_t_1.c" LyotDQogKiAgIEJTRCBMSUNFTlNFDQogKg0KICogICBDb3B5cmlnaHQgKGMpIEludGVsIENvcnBv cmF0aW9uLg0KICogICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICoNCiAqICAgUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQog KiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucw0KICogICBhcmUgbWV0Og0KICoNCiAqICAgICAqIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQogKiAgICAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuDQogKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluDQogKiAgICAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQog KiAgICAgICBkaXN0cmlidXRpb24uDQogKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVs IENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzDQogKiAgICAgICBjb250cmlidXRvcnMg bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQNCiAqICAg ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4NCiAqDQogKiAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMNCiAqICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJF U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCiAqICAgTElNSVRF RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SDQogKiAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUDQogKiAgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KICogICBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U DQogKiAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7IExPU1MgT0YgVVNFLA0KICogICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCiAqICAgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0K ICogICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UNCiAqICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCiAqLw0KDQojaW5jbHVkZSAic3Bk ay9zdGRpbmMuaCINCg0KI2luY2x1ZGUgInNwZGsvbnZtZS5oIg0KI2luY2x1ZGUgInNwZGsvZW52 LmgiDQoNCiNpbmNsdWRlIDxwdGhyZWFkLmg+DQoNCnN0cnVjdCBjdHJscl9lbnRyeSB7DQoJc3Ry dWN0IHNwZGtfbnZtZV9jdHJscgkqY3RybHI7DQoJc3RydWN0IGN0cmxyX2VudHJ5CSpuZXh0Ow0K CWNoYXIJCQluYW1lWzEwMjRdOw0KfTsNCg0KI2RlZmluZQkJTUFYX0NNRFMJMjANCiNkZWZpbmUg CU1BWF9DVFJMUl9OQU1FCTEwMjQNCnN0cnVjdCBuc19lbnRyeSB7DQoJc3RydWN0IHNwZGtfbnZt ZV9jdHJscgkqY3RybHI7DQoJc3RydWN0IHNwZGtfbnZtZV9ucwkqbnM7DQoJaW50IG5zaWQ7DQoJ Y2hhciBjdHJscl9uYW1lW01BWF9DVFJMUl9OQU1FXTsNCglzdHJ1Y3QgbnNfZW50cnkJCSpuZXh0 Ow0KCXN0cnVjdCBzcGRrX252bWVfcXBhaXIJKnFwYWlyWzVdOw0KCXN0cnVjdCBzcGRrX252bWVf cXBhaXIJKnFwYWlyXzI7DQoJaW50IHFwYWlyX2FsbG9jYXRlZDsNCn07DQoNCmludA0Kc3RlbGx1 c19zcGRrX252bWVfbnNfY21kX3JlYWQoc3RydWN0IG5zX2VudHJ5ICpuc19lbnRyeSwgc3RydWN0 IHNwZGtfbnZtZV9xcGFpciAqcXBhaXIsIHZvaWQgKmJ1ZmZlciwgdWludDY0X3QgbGJhLCB1aW50 MzJfdCBsYmFfY291bnQsIHNwZGtfbnZtZV9jbWRfY2IgY2JfZm4sIHZvaWQgKmNiX2FyZywgdWlu dDMyX3QgaW9mbGFncyk7DQppbnQNCnN0ZWxsdXNfc3Bka19udm1lX25zX2NtZF93cml0ZShzdHJ1 Y3QgbnNfZW50cnkgKm5zX2VudHJ5LCBzdHJ1Y3Qgc3Bka19udm1lX3FwYWlyICpxcGFpciwgdm9p ZCAqYnVmZmVyLCB1aW50NjRfdCBsYmEsIHVpbnQzMl90IGxiYV9jb3VudCwgc3Bka19udm1lX2Nt ZF9jYiBjYl9mbiwgdm9pZCAqY2JfYXJnLCB1aW50MzJfdCBpb2ZsYWdzKTsNCmludA0Kc3RlbGx1 c19xcGFpcl9wcm9jZXNzX2NvbXBsZXRpb25zKHN0cnVjdCBzcGRrX252bWVfcXBhaXIgKnFwYWly LCBpbnQgbnVtKTsNCmludA0Kc3RlbGx1c19xcGFpcl9mcmVlKHN0cnVjdCBzcGRrX252bWVfcXBh aXIgKnFwYWlyKTsNCmV4dGVybiB2b2lkIHNobV9pbml0KCk7DQpzdGF0aWMgdm9pZA0KcmVhZF9j b21wbGV0ZSh2b2lkICphcmcsIGNvbnN0IHN0cnVjdCBzcGRrX252bWVfY3BsICpjb21wbGV0aW9u KTsNCnN0YXRpYyB2b2lkDQp3cml0ZV9jb21wbGV0ZSh2b2lkICphcmcsIGNvbnN0IHN0cnVjdCBz cGRrX252bWVfY3BsICpjb21wbGV0aW9uKTsNCnZvaWQNCnRlc3RfaW9fZnVuYzEodm9pZCAqYXJn KTsNCnNwZGtfbnZtZV9jbWRfY2IgY29tcGxfY2JzW01BWF9DTURTXSA9IHsNCglOVUxMLA0KCXJl YWRfY29tcGxldGUsDQoJd3JpdGVfY29tcGxldGUsDQp9Ow0KDQpzdHJ1Y3QgY3RybHJfZW50cnkg KmdfY29udHJvbGxlcnMgPSBOVUxMOw0Kc3RydWN0IG5zX2VudHJ5ICpnX25hbWVzcGFjZXMgPSBO VUxMOw0KDQpzdGF0aWMgdm9pZA0KcmVnaXN0ZXJfbnMoc3RydWN0IHNwZGtfbnZtZV9jdHJsciAq Y3RybHIsIHN0cnVjdCBzcGRrX252bWVfbnMgKm5zLCBpbnQgbnNpZCwNCgkJCQljaGFyICpuYW1l KQ0Kew0KCXN0cnVjdCBuc19lbnRyeSAqZW50cnk7DQoJY29uc3Qgc3RydWN0IHNwZGtfbnZtZV9j dHJscl9kYXRhICpjZGF0YTsNCg0KCS8qDQoJICogc3Bka19udm1lX2N0cmxyIGlzIHRoZSBsb2dp Y2FsIGFic3RyYWN0aW9uIGluIFNQREsgZm9yIGFuIE5WTWUNCgkgKiAgY29udHJvbGxlci4gIER1 cmluZyBpbml0aWFsaXphdGlvbiwgdGhlIElERU5USUZZIGRhdGEgZm9yIHRoZQ0KCSAqICBjb250 cm9sbGVyIGlzIHJlYWQgdXNpbmcgYW4gTlZNZSBhZG1pbiBjb21tYW5kLCBhbmQgdGhhdCBkYXRh DQoJICogIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgc3Bka19udm1lX2N0cmxyX2dldF9kYXRhKCkg dG8gZ2V0DQoJICogIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBjb250cm9sbGVyLiAgUmVm ZXIgdG8gdGhlIE5WTWUNCgkgKiAgc3BlY2lmaWNhdGlvbiBmb3IgbW9yZSBkZXRhaWxzIG9uIElE RU5USUZZIGZvciBOVk1lIGNvbnRyb2xsZXJzLg0KCSAqLw0KCWNkYXRhID0gc3Bka19udm1lX2N0 cmxyX2dldF9kYXRhKGN0cmxyKTsNCg0KCWlmICghc3Bka19udm1lX25zX2lzX2FjdGl2ZShucykp IHsNCgkJcHJpbnRmKCJDb250cm9sbGVyICUtMjAuMjBzICglLTIwLjIwcyk6IFNraXBwaW5nIGlu YWN0aXZlIE5TICV1XG4iLA0KCQkgICAgICAgY2RhdGEtPm1uLCBjZGF0YS0+c24sDQoJCSAgICAg ICBzcGRrX252bWVfbnNfZ2V0X2lkKG5zKSk7DQoJCXJldHVybjsNCgl9DQoNCgllbnRyeSA9IGNh bGxvYygxLCBzaXplb2Yoc3RydWN0IG5zX2VudHJ5KSk7DQoJaWYgKGVudHJ5ID09IE5VTEwpIHsN CgkJcGVycm9yKCJuc19lbnRyeSBtYWxsb2MiKTsNCgkJZXhpdCgxKTsNCgl9DQoNCgllbnRyeS0+ Y3RybHIgPSBjdHJscjsNCgllbnRyeS0+bnNpZCA9IG5zaWQ7DQoJc3RybmNweShlbnRyeS0+Y3Ry bHJfbmFtZSwgbmFtZSwgTUFYX0NUUkxSX05BTUUtMSk7DQoJZW50cnktPm5zID0gbnM7DQoJZW50 cnktPm5leHQgPSBnX25hbWVzcGFjZXM7DQoJZ19uYW1lc3BhY2VzID0gZW50cnk7DQoNCglwcmlu dGYoIiAgTmFtZXNwYWNlIElEOiAlZCBzaXplOiAlanVHQlxuIiwgc3Bka19udm1lX25zX2dldF9p ZChucyksDQoJICAgICAgIHNwZGtfbnZtZV9uc19nZXRfc2l6ZShucykgLyAxMDAwMDAwMDAwKTsN Cn0NCg0Kc3RydWN0IGlvX3NlcXVlbmNlIHsNCglzdHJ1Y3QgbnNfZW50cnkJKm5zX2VudHJ5Ow0K CWNoYXIJCSpidWY7DQoJaW50CQlpc19jb21wbGV0ZWQ7DQoJaW50IGNtZDsNCglzcGRrX252bWVf Y21kX2NiIGNtZGNiOw0KCWludCBpb19jb3VudDsNCn07DQoNCnN0YXRpYyB2b2lkDQpyZWFkX2Nv bXBsZXRlKHZvaWQgKmFyZywgY29uc3Qgc3RydWN0IHNwZGtfbnZtZV9jcGwgKmNvbXBsZXRpb24p DQp7DQoJc3RydWN0IGlvX3NlcXVlbmNlICpzZXF1ZW5jZSA9IGFyZzsNCg0KCS8qDQoJICogVGhl IHJlYWQgSS9PIGhhcyBjb21wbGV0ZWQuICBQcmludCB0aGUgY29udGVudHMgb2YgdGhlDQoJICog IGJ1ZmZlciwgZnJlZSB0aGUgYnVmZmVyLCB0aGVuIG1hcmsgdGhlIHNlcXVlbmNlIGFzDQoJICog IGNvbXBsZXRlZC4gIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBoZWxsb193b3JsZCgpIGZ1bmN0aW9u DQoJICogIHRvIGV4aXQgaXRzIHBvbGxpbmcgbG9vcC4NCgkgKi8NCglwcmludGYoIiVzIiwgc2Vx dWVuY2UtPmJ1Zik7DQoJc2VxdWVuY2UtPmlvX2NvdW50Kys7DQoJaWYgKHNlcXVlbmNlLT5pb19j b3VudCA9PSA1KSB7DQoJCS8vc3Bka19kbWFfZnJlZShzZXF1ZW5jZS0+YnVmKTsNCgl9DQoJLy9w cmludGYoIkEgcmVhZCBvcGVyYXRpb24gaGFzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgcmVhZCBj b3VudCBbJWRdLlxuIiwgc2VxdWVuY2UtPmlvX2NvdW50KTsNCglzZXF1ZW5jZS0+aXNfY29tcGxl dGVkID0gMTsNCglzZXF1ZW5jZS0+Y21kY2IoYXJnLCBjb21wbGV0aW9uKTsNCgkvKg0KCSAqIGNo ZWNrIGZvciBlcnJvcnMuDQoJICovDQoJaWYgKHNlcXVlbmNlLT5pb19jb3VudCA9PSA1KSB7DQoJ CS8vZnJlZShzZXF1ZW5jZSk7DQoJCS8vcHJpbnRmKCJUaGUgc2VxdWVuY2Ugc3RydWN0IGhhcyBi ZWVuIGZyZWVkLlxuIik7DQoJfQ0KfQ0KDQpzdGF0aWMgdm9pZA0Kd3JpdGVfY29tcGxldGUodm9p ZCAqYXJnLCBjb25zdCBzdHJ1Y3Qgc3Bka19udm1lX2NwbCAqY29tcGxldGlvbikNCnsNCglzdHJ1 Y3QgaW9fc2VxdWVuY2UJKnNlcXVlbmNlID0gKHN0cnVjdCBpb19zZXF1ZW5jZSAqKSBhcmc7DQoJ c3RydWN0IG5zX2VudHJ5CQkJKm5zX2VudHJ5ID0gc2VxdWVuY2UtPm5zX2VudHJ5Ow0KDQoJLyoN CgkgKiBUaGUgd3JpdGUgSS9PIGhhcyBjb21wbGV0ZWQuICBGcmVlIHRoZSBidWZmZXIgYXNzb2Np YXRlZCB3aXRoDQoJICogIHRoZSB3cml0ZSBJL08gYW5kIGFsbG9jYXRlIGEgbmV3IHplcm9lZCBi dWZmZXIgZm9yIHJlYWRpbmcNCgkgKiAgdGhlIGRhdGEgYmFjayBmcm9tIHRoZSBOVk1lIG5hbWVz cGFjZS4NCgkgKi8NCglzZXF1ZW5jZS0+aW9fY291bnQrKzsNCglpZiAoc2VxdWVuY2UtPmlvX2Nv dW50ID09IDUpIHsNCgkJLy9zcGRrX2RtYV9mcmVlKHNlcXVlbmNlLT5idWYpOw0KCX0NCgkvL3By aW50ZigiQSB3cml0ZSBvcGVyYXRpb24gaGFzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgd3JpdGUg Y291bnQgWyVkXS5cbiIsIHNlcXVlbmNlLT5pb19jb3VudCk7DQoJc2VxdWVuY2UtPmNtZGNiKGFy ZywgY29tcGxldGlvbik7DQoJaWYgKHNlcXVlbmNlLT5pb19jb3VudCA9PSA1KSB7DQoJCS8vZnJl ZShzZXF1ZW5jZSk7DQoJCS8vcHJpbnRmKCJUaGUgc2VxdWVuY2Ugc3RydWN0IGhhcyBiZWVuIGZy ZWVkLlxuIik7DQoJfQ0KfQ0KDQpzdGF0aWMgdm9pZA0KaW9fY29tcGxldGUodm9pZCAqYXJnLCBj b25zdCBzdHJ1Y3Qgc3Bka19udm1lX2NwbCAqY29tcGxldGlvbikNCnsNCglzdHJ1Y3QgaW9fc2Vx dWVuY2UgICpzZXFfYXJnID0gKHN0cnVjdCBpb19zZXF1ZW5jZSAqKWFyZzsNCglpbnQgdHlwZSA9 IHNlcV9hcmctPmNtZDsNCg0KI2lmIDANCglzd2l0Y2ggKHR5cGUpIHsNCgkJY2FzZSBTUERLX05W TUVfT1BDX1JFQUQ6DQoJCXsNCgkJCXByaW50ZigiY29tbWFuZCB0byBOVk1lIGRldmljZSBoYXMg Y29tcGxldGVkLCBvcCBpcyBbJWRdLlxuIiwgdHlwZSk7DQoJCQlicmVhazsNCgkJfQ0KCQljYXNl IFNQREtfTlZNRV9PUENfV1JJVEU6DQoJCXsNCgkJCXByaW50ZigiY29tbWFuZCB0byBOVk1lIGRl dmljZSBoYXMgY29tcGxldGVkLCBvcCBpcyBbJWRdLlxuIiwgdHlwZSk7DQoJCQlicmVhazsNCgkJ fQ0KCQlkZWZhdWx0Og0KCQkJcHJpbnRmKCJVbmtub3duIE5WTWUgY29tbWFuZCB0eXBlID0gWyVk XS4iLCB0eXBlKTsNCgkJCWJyZWFrOw0KCX0NCiNlbmRpZg0KfQ0KDQoNCmludA0Kc3RlbGx1c19z cGRrX252bWVfbnNfY21kX3JlYWQoc3RydWN0IG5zX2VudHJ5ICpuc19lbnRyeSwgc3RydWN0IHNw ZGtfbnZtZV9xcGFpciAqcXBhaXIsIHZvaWQgKmJ1ZmZlciwgdWludDY0X3QgbGJhLCB1aW50MzJf dCBsYmFfY291bnQsIHNwZGtfbnZtZV9jbWRfY2IgY2JfZm4sIHZvaWQgKmNiX2FyZywgdWludDMy X3QgaW9mbGFncykNCnsNCglpbnQgcmM7DQoJc3RydWN0IGlvX3NlcXVlbmNlICpzZXF1ZW5jZSA9 IChzdHJ1Y3QgaW9fc2VxdWVuY2UgKiljYl9hcmc7DQoJc2VxdWVuY2UtPmNtZCA9IFNQREtfTlZN RV9PUENfUkVBRDsNCglzZXF1ZW5jZS0+Y21kY2IgPSBjYl9mbjsNCglyYyA9IHNwZGtfbnZtZV9u c19jbWRfcmVhZChuc19lbnRyeS0+bnMsIHFwYWlyLCBidWZmZXIsDQoJCQkJICAgbGJhLCAvKiBM QkEgc3RhcnQgKi8NCgkJCQkgICBsYmFfY291bnQsIC8qIG51bWJlciBvZiBMQkFzICovDQoJCQkJ ICAgcmVhZF9jb21wbGV0ZSwgc2VxdWVuY2UsIDApOw0KCWlmIChyYyAhPSAwKSB7DQoJCWZwcmlu dGYoc3RkZXJyLCAic3RhcnRpbmcgcmVhZCBJL08gZmFpbGVkXG4iKTsNCgkJZXhpdCgxKTsNCgl9 DQp9DQoNCmludA0Kc3RlbGx1c19zcGRrX252bWVfbnNfY21kX3dyaXRlKHN0cnVjdCBuc19lbnRy eSAqbnNfZW50cnksIHN0cnVjdCBzcGRrX252bWVfcXBhaXIgKnFwYWlyLCB2b2lkICpidWZmZXIs IHVpbnQ2NF90IGxiYSwgdWludDMyX3QgbGJhX2NvdW50LCBzcGRrX252bWVfY21kX2NiIGNiX2Zu LCB2b2lkICpjYl9hcmcsIHVpbnQzMl90IGlvZmxhZ3MpDQp7DQoJaW50IHJjOw0KCXN0cnVjdCBp b19zZXF1ZW5jZSAqc2VxdWVuY2UgPSAoc3RydWN0IGlvX3NlcXVlbmNlICopY2JfYXJnOw0KCQkv Kg0KCQkgKiBXcml0ZSB0aGUgZGF0YSBidWZmZXIgdG8gTEJBIDAgb2YgdGhpcyBuYW1lc3BhY2Uu ICAid3JpdGVfY29tcGxldGUiIGFuZA0KCQkgKiAgIiZzZXF1ZW5jZSIgYXJlIHNwZWNpZmllZCBh cyB0aGUgY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbiBhbmQNCgkJICogIGFyZ3VtZW50IHJl c3BlY3RpdmVseS4gIHdyaXRlX2NvbXBsZXRlKCkgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUNCgkJ ICogIHZhbHVlIG9mICZzZXF1ZW5jZSBhcyBhIHBhcmFtZXRlciB3aGVuIHRoZSB3cml0ZSBJL08g aXMgY29tcGxldGVkLg0KCQkgKiAgVGhpcyBhbGxvd3MgdXNlcnMgdG8gcG90ZW50aWFsbHkgc3Bl Y2lmeSBkaWZmZXJlbnQgY29tcGxldGlvbg0KCQkgKiAgY2FsbGJhY2sgcm91dGluZXMgZm9yIGVh Y2ggSS9PLCBhcyB3ZWxsIGFzIHBhc3MgYSB1bmlxdWUgaGFuZGxlDQoJCSAqICBhcyBhbiBhcmd1 bWVudCBzbyB0aGUgYXBwbGljYXRpb24ga25vd3Mgd2hpY2ggSS9PIGhhcyBjb21wbGV0ZWQuDQoJ CSAqDQoJCSAqIE5vdGUgdGhhdCB0aGUgU1BESyBOVk1lIGRyaXZlciB3aWxsIG9ubHkgY2hlY2sg Zm9yIGNvbXBsZXRpb25zDQoJCSAqICB3aGVuIHRoZSBhcHBsaWNhdGlvbiBjYWxscyBzcGRrX252 bWVfcXBhaXJfcHJvY2Vzc19jb21wbGV0aW9ucygpLg0KCQkgKiAgSXQgaXMgdGhlIHJlc3BvbnNp YmlsaXR5IG9mIHRoZSBhcHBsaWNhdGlvbiB0byB0cmlnZ2VyIHRoZSBwb2xsaW5nDQoJCSAqICBw cm9jZXNzLg0KCQkgKi8NCgkJc2VxdWVuY2UtPmNtZCA9IFNQREtfTlZNRV9PUENfV1JJVEU7DQoJ CXNlcXVlbmNlLT5jbWRjYiA9IGNiX2ZuOw0KCQlwcmludGYoInZhbHVlIG9mIG5zX2VudHJ5IHFw YWlyIFslcF1cbiIsIHFwYWlyKTsNCgkJcmMgPSBzcGRrX252bWVfbnNfY21kX3dyaXRlKG5zX2Vu dHJ5LT5ucywgcXBhaXIsIGJ1ZmZlciwNCgkJCQkJICAgIGxiYSwgLyogTEJBIHN0YXJ0ICovDQoJ CQkJCSAgICBsYmFfY291bnQsIC8qIG51bWJlciBvZiBMQkFzICovDQoJCQkJCSAgICB3cml0ZV9j b21wbGV0ZSwgc2VxdWVuY2UsIDApOw0KCQlpZiAocmMgIT0gMCkgew0KCQkJZnByaW50ZihzdGRl cnIsICJzdGFydGluZyB3cml0ZSBJL08gZmFpbGVkXG4iKTsNCgkJCWV4aXQoMSk7DQoJCX0NCgkJ cmV0dXJuICgwKTsNCn0NCg0Kdm9pZA0KdGVzdF9pb19mdW5jMSh2b2lkICphcmcpDQp7DQoJc3Ry dWN0IG5zX2VudHJ5CQkJKm5zX2VudHJ5Ow0KCXN0cnVjdCBpb19zZXF1ZW5jZQkqc2VxdWVuY2U7 DQoJc3RydWN0IGlvX3NlcXVlbmNlCSpzZXF1ZW5jZTE7DQoJaW50IAl0X2lkOw0KCWludAkJCQly YzsNCglpbnQgY250ID0gNTsNCg0KCW5zX2VudHJ5ID0gZ19uYW1lc3BhY2VzOw0KCXRfaWQgPSAq KGludCAqKWFyZyAtIDE7DQoJcHJpbnRmKCJzdGFydGluZyBJL08gcnVuIG9uIG5ldyB0aHJlYWQg aWQgWyVkXVxuIiwgKihpbnQgKilhcmcpOw0KCXByaW50ZigidmFsdWUgb2YgZGV2aWNlcydzIG5z X2VudHJ5IFslcF1cbiIsIG5zX2VudHJ5KTsNCgl3aGlsZSAobnNfZW50cnkgIT0gTlVMTCkgew0K CQkvKg0KCQkgKiBBbGxvY2F0ZSBhbiBJL08gcXBhaXIgdGhhdCB3ZSBjYW4gdXNlIHRvIHN1Ym1p dCByZWFkL3dyaXRlIHJlcXVlc3RzDQoJCSAqICB0byBuYW1lc3BhY2VzIG9uIHRoZSBjb250cm9s bGVyLiAgTlZNZSBjb250cm9sbGVycyB0eXBpY2FsbHkgc3VwcG9ydA0KCQkgKiAgbWFueSBxcGFp cnMgcGVyIGNvbnRyb2xsZXIuICBBbnkgSS9PIHFwYWlyIGFsbG9jYXRlZCBmb3IgYSBjb250cm9s bGVyDQoJCSAqICBjYW4gc3VibWl0IEkvTyB0byBhbnkgbmFtZXNwYWNlIG9uIHRoYXQgY29udHJv bGxlci4NCgkJICoNCgkJICogVGhlIFNQREsgTlZNZSBkcml2ZXIgcHJvdmlkZXMgbm8gc3luY2hy b25pemF0aW9uIGZvciBxcGFpciBhY2Nlc3NlcyAtDQoJCSAqICB0aGUgYXBwbGljYXRpb24gbXVz dCBlbnN1cmUgb25seSBhIHNpbmdsZSB0aHJlYWQgc3VibWl0cyBJL08gdG8gYQ0KCQkgKiAgcXBh aXIsIGFuZCB0aGF0IHNhbWUgdGhyZWFkIG11c3QgYWxzbyBjaGVjayBmb3IgY29tcGxldGlvbnMg b24gdGhhdA0KCQkgKiAgcXBhaXIuICBUaGlzIGVuYWJsZXMgZXh0cmVtZWx5IGVmZmljaWVudCBJ L08gcHJvY2Vzc2luZyBieSBtYWtpbmcgYWxsDQoJCSAqICBJL08gb3BlcmF0aW9ucyBjb21wbGV0 ZWx5IGxvY2tsZXNzLg0KCQkgKi8NCgkJbnNfZW50cnktPnFwYWlyW3RfaWRdID0gc3Bka19udm1l X2N0cmxyX2FsbG9jX2lvX3FwYWlyKG5zX2VudHJ5LT5jdHJsciwgTlVMTCwgMCk7DQoJCXByaW50 ZigidmFsdWUgb2YgbnNfZW50cnkgcXBhaXIgWyVwXVxuIiwgbnNfZW50cnktPnFwYWlyW3RfaWRd KTsNCgkJLy9wcmludGYoInZhbHVlIG9mIG5zX2VudHJ5IHFwYWlyIFslcF1cbiIsICZuc19lbnRy eS0+cXBhaXJbMF0pOw0KCQlpZiAobnNfZW50cnktPnFwYWlyW3RfaWRdID09IE5VTEwpIHsNCgkJ CXByaW50ZigiRVJST1I6IHNwZGtfbnZtZV9jdHJscl9hbGxvY19pb19xcGFpcigpIGZhaWxlZFxu Iik7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQkvKg0KCQkgKiBVc2Ugc3Bka19kbWFfem1hbGxvYyB0 byBhbGxvY2F0ZSBhIDRLQiB6ZXJvZWQgYnVmZmVyLiAgVGhpcyBtZW1vcnkNCgkJICogd2lsbCBi ZSBwaW5uZWQsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBkYXRhIGJ1ZmZlcnMgdXNlZCBmb3IgU1BE SyBOVk1lDQoJCSAqIEkvTyBvcGVyYXRpb25zLg0KCQkgKi8NCgkJc2VxdWVuY2UgPSBjYWxsb2Mo MSwgc2l6ZW9mKHN0cnVjdCBpb19zZXF1ZW5jZSkpOw0KCQkJc2VxdWVuY2UtPmJ1ZiA9IHNwZGtf ZG1hX3ptYWxsb2MoMHgxMDAwLCAweDEwMDAsIE5VTEwpOw0KCQkJc2VxdWVuY2UtPmlzX2NvbXBs ZXRlZCA9IDA7DQoJCQlzZXF1ZW5jZS0+bnNfZW50cnkgPSBuc19lbnRyeTsNCgkJCW5zX2VudHJ5 LT5xcGFpcl9hbGxvY2F0ZWQgPSAxOw0KDQoJCXNlcXVlbmNlMSA9IGNhbGxvYygxLCBzaXplb2Yo c3RydWN0IGlvX3NlcXVlbmNlKSk7DQoJCQlzZXF1ZW5jZTEtPmJ1ZiA9IHNwZGtfZG1hX3ptYWxs b2MoMHgxMDAwLCAweDEwMDAsIE5VTEwpOw0KCQkJc2VxdWVuY2UxLT5pc19jb21wbGV0ZWQgPSAw Ow0KCQkJc2VxdWVuY2UxLT5uc19lbnRyeSA9IG5zX2VudHJ5Ow0KCQkvKg0KCQkgKiBQcmludCAi SGVsbG8gd29ybGQhIiB0byBzZXF1ZW5jZS5idWYuICBXZSB3aWxsIHdyaXRlIHRoaXMgZGF0YSB0 byBMQkENCgkJICogIDAgb24gdGhlIG5hbWVzcGFjZSwgYW5kIHRoZW4gbGF0ZXIgcmVhZCBpdCBi YWNrIGludG8gYSBzZXBhcmF0ZSBidWZmZXINCgkJICogIHRvIGRlbW9uc3RyYXRlIHRoZSBmdWxs IEkvTyBwYXRoLg0KCQkgKi8NCgkJc25wcmludGYoc2VxdWVuY2UtPmJ1ZiwgMHgxMDAwLCAiJXMi LCAiSGVsbG8gd29ybGQhXG4iKTsNCg0KCQkvKg0KCQkgKiBXcml0ZSB0aGUgZGF0YSBidWZmZXIg dG8gTEJBIDAgb2YgdGhpcyBuYW1lc3BhY2UuICAid3JpdGVfY29tcGxldGUiIGFuZA0KCQkgKiAg IiZzZXF1ZW5jZSIgYXJlIHNwZWNpZmllZCBhcyB0aGUgY29tcGxldGlvbiBjYWxsYmFjayBmdW5j dGlvbiBhbmQNCgkJICogIGFyZ3VtZW50IHJlc3BlY3RpdmVseS4gIHdyaXRlX2NvbXBsZXRlKCkg d2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUNCgkJICogIHZhbHVlIG9mICZzZXF1ZW5jZSBhcyBhIHBh cmFtZXRlciB3aGVuIHRoZSB3cml0ZSBJL08gaXMgY29tcGxldGVkLg0KCQkgKiAgVGhpcyBhbGxv d3MgdXNlcnMgdG8gcG90ZW50aWFsbHkgc3BlY2lmeSBkaWZmZXJlbnQgY29tcGxldGlvbg0KCQkg KiAgY2FsbGJhY2sgcm91dGluZXMgZm9yIGVhY2ggSS9PLCBhcyB3ZWxsIGFzIHBhc3MgYSB1bmlx dWUgaGFuZGxlDQoJCSAqICBhcyBhbiBhcmd1bWVudCBzbyB0aGUgYXBwbGljYXRpb24ga25vd3Mg d2hpY2ggSS9PIGhhcyBjb21wbGV0ZWQuDQoJCSAqDQoJCSAqIE5vdGUgdGhhdCB0aGUgU1BESyBO Vk1lIGRyaXZlciB3aWxsIG9ubHkgY2hlY2sgZm9yIGNvbXBsZXRpb25zDQoJCSAqICB3aGVuIHRo ZSBhcHBsaWNhdGlvbiBjYWxscyBzcGRrX252bWVfcXBhaXJfcHJvY2Vzc19jb21wbGV0aW9ucygp Lg0KCQkgKiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBhcHBsaWNhdGlvbiB0byB0 cmlnZ2VyIHRoZSBwb2xsaW5nDQoJCSAqICBwcm9jZXNzLg0KCQkgKi8NCgkJY250ID0gNjQ7DQoJ CXdoaWxlIChjbnQpIHsNCgkJCXJjID0gc3RlbGx1c19zcGRrX252bWVfbnNfY21kX3dyaXRlKG5z X2VudHJ5LCBuc19lbnRyeS0+cXBhaXJbdF9pZF0sIHNlcXVlbmNlLT5idWYsDQoJCQkJCQkgICAg MCwgLyogTEJBIHN0YXJ0ICovDQoJCQkJCQkgICAgMSwgLyogbnVtYmVyIG9mIExCQXMgKi8NCgkJ CQkJCSAgICBpb19jb21wbGV0ZSwgc2VxdWVuY2UsIDApOw0KCQkJaWYgKHJjICE9IDApIHsNCgkJ CQlmcHJpbnRmKHN0ZGVyciwgInN0YXJ0aW5nIHdyaXRlIEkvTyBmYWlsZWRcbiIpOw0KCQkJCWV4 aXQoMSk7DQoJCQl9DQoJCQlyYyA9IHN0ZWxsdXNfc3Bka19udm1lX25zX2NtZF9yZWFkKG5zX2Vu dHJ5LCBuc19lbnRyeS0+cXBhaXJbdF9pZF0sIHNlcXVlbmNlMS0+YnVmLA0KCQkJCQkJICAgIDAs IC8qIExCQSBzdGFydCAqLw0KCQkJCQkJICAgIDEsIC8qIG51bWJlciBvZiBMQkFzICovDQoJCQkJ CQkgICAgaW9fY29tcGxldGUsIHNlcXVlbmNlMSwgMCk7DQoJCQlpZiAocmMgIT0gMCkgew0KCQkJ CWZwcmludGYoc3RkZXJyLCAic3RhcnRpbmcgcmVhZCBJL08gZmFpbGVkXG4iKTsNCgkJCQlleGl0 KDEpOw0KCQkJfQ0KCQkJY250LS07DQoJCX0NCgkNCgkJc3Bka19udm1lX3FwYWlyX3Byb2Nlc3Nf Y29tcGxldGlvbnMobnNfZW50cnktPnFwYWlyW3RfaWRdLCAwKTsNCgkJc3Bka19udm1lX2N0cmxy X2ZyZWVfaW9fcXBhaXIobnNfZW50cnktPnFwYWlyW3RfaWRdKTsNCgkJbnNfZW50cnkgPSBuc19l bnRyeS0+bmV4dDsNCgl9DQojaWYgMA0KCW5zX2VudHJ5ID0gZ19uYW1lc3BhY2VzOw0KCXdoaWxl IChuc19lbnRyeSAhPSBOVUxMKSB7DQoJCW5zX2VudHJ5LT5xcGFpciA9IHNwZGtfbnZtZV9jdHJs cl9hbGxvY19pb19xcGFpcihuc19lbnRyeS0+Y3RybHIsIE5VTEwsIDApOw0KCQljbnQgPSA2ODsN CgkJd2hpbGUgKGNudCkgew0KCQkJcmMgPSBzdGVsbHVzX3NwZGtfbnZtZV9uc19jbWRfd3JpdGUo bnNfZW50cnksIG5zX2VudHJ5LT5xcGFpciwgc2VxdWVuY2UtPmJ1ZiwNCgkJCQkJCSAgICAwLCAv KiBMQkEgc3RhcnQgKi8NCgkJCQkJCSAgICAxLCAvKiBudW1iZXIgb2YgTEJBcyAqLw0KCQkJCQkJ ICAgIGlvX2NvbXBsZXRlLCBzZXF1ZW5jZSwgMCk7DQoJCQlpZiAocmMgIT0gMCkgew0KCQkJCWZw cmludGYoc3RkZXJyLCAic3RhcnRpbmcgd3JpdGUgSS9PIGZhaWxlZFxuIik7DQoJCQkJZXhpdCgx KTsNCgkJCX0NCgkJCXJjID0gc3RlbGx1c19zcGRrX252bWVfbnNfY21kX3JlYWQobnNfZW50cnks IG5zX2VudHJ5LT5xcGFpciwgc2VxdWVuY2UxLT5idWYsDQoJCQkJCQkgICAgMCwgLyogTEJBIHN0 YXJ0ICovDQoJCQkJCQkgICAgMSwgLyogbnVtYmVyIG9mIExCQXMgKi8NCgkJCQkJCSAgICBpb19j b21wbGV0ZSwgc2VxdWVuY2UxLCAwKTsNCgkJCWlmIChyYyAhPSAwKSB7DQoJCQkJZnByaW50Zihz dGRlcnIsICJzdGFydGluZyByZWFkIEkvTyBmYWlsZWRcbiIpOw0KCQkJCWV4aXQoMSk7DQoJCQl9 DQoJCQljbnQtLTsNCgkJfQ0KCQlzdGVsbHVzX3FwYWlyX3Byb2Nlc3NfY29tcGxldGlvbnMobnNf ZW50cnktPnFwYWlyLCAwKTsNCgkJc3RlbGx1c19xcGFpcl9mcmVlKG5zX2VudHJ5LT5xcGFpcik7 DQoJCW5zX2VudHJ5ID0gbnNfZW50cnktPm5leHQ7DQoJfQ0KCWZyZWUoc2VxdWVuY2UtPmJ1Zik7 DQoJZnJlZShzZXF1ZW5jZSk7DQoJZnJlZShzZXF1ZW5jZTEtPmJ1Zik7DQoJZnJlZShzZXF1ZW5j ZTEpOw0KI2VuZGlmDQoNCn0NCi8qDQogKiBQb2xsIGZvciBjb21wbGV0aW9ucy4gIDAgaGVyZSBt ZWFucyBwcm9jZXNzIGFsbCBhdmFpbGFibGUgY29tcGxldGlvbnMuDQogKiAgSW4gY2VydGFpbiB1 c2FnZSBtb2RlbHMsIHRoZSBjYWxsZXIgbWF5IHNwZWNpZnkgYSBwb3NpdGl2ZSBpbnRlZ2VyDQog KiAgaW5zdGVhZCBvZiAwIHRvIHNpZ25pZnkgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbXBsZXRp b25zIGl0IHNob3VsZA0KICogIHByb2Nlc3MuICBUaGlzIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgYmxv Y2sgLSBpZiB0aGVyZSBhcmUgbm8NCiAqICBjb21wbGV0aW9ucyBwZW5kaW5nIG9uIHRoZSBzcGVj aWZpZWQgcXBhaXIsIGl0IHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5Lg0KICovDQppbnQNCnN0ZWxs dXNfcXBhaXJfcHJvY2Vzc19jb21wbGV0aW9ucyhzdHJ1Y3Qgc3Bka19udm1lX3FwYWlyICpxcGFp ciwgaW50IG51bSkNCnsNCgkJc3Bka19udm1lX3FwYWlyX3Byb2Nlc3NfY29tcGxldGlvbnMocXBh aXIsIG51bSk7DQoJCXJldHVybiAoMCk7DQp9DQoNCi8qDQogKiBGcmVlIHRoZSBJL08gcXBhaXIu ICBUaGlzIHR5cGljYWxseSBpcyBkb25lIHdoZW4gYW4gYXBwbGljYXRpb24gZXhpdHMuDQogKiAg QnV0IFNQREsgZG9lcyBzdXBwb3J0IGZyZWVpbmcgYW5kIHRoZW4gcmVhbGxvY2F0aW5nIHFwYWly cyBkdXJpbmcNCiAqICBvcGVyYXRpb24uICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhl IGNhbGxlciB0byBlbnN1cmUgYWxsDQogKiAgcGVuZGluZyBJL08gYXJlIGNvbXBsZXRlZCBiZWZv cmUgdHJ5aW5nIHRvIGZyZWUgdGhlIHFwYWlyLg0KICovDQppbnQNCnN0ZWxsdXNfcXBhaXJfZnJl ZShzdHJ1Y3Qgc3Bka19udm1lX3FwYWlyICpxcGFpcikNCnsNCgkJc3Bka19udm1lX2N0cmxyX2Zy ZWVfaW9fcXBhaXIocXBhaXIpOw0KCQlyZXR1cm4gKDApOw0KfQ0KDQpzdGF0aWMgYm9vbA0KcHJv YmVfY2Iodm9pZCAqY2JfY3R4LCBjb25zdCBzdHJ1Y3Qgc3Bka19udm1lX3RyYW5zcG9ydF9pZCAq dHJpZCwNCgkgc3RydWN0IHNwZGtfbnZtZV9jdHJscl9vcHRzICpvcHRzKQ0Kew0KCXByaW50Zigi QXR0YWNoaW5nIHRvICVzXG4iLCB0cmlkLT50cmFkZHIpOw0KDQoJcmV0dXJuIHRydWU7DQp9DQoN CnN0YXRpYyB2b2lkDQphdHRhY2hfY2Iodm9pZCAqY2JfY3R4LCBjb25zdCBzdHJ1Y3Qgc3Bka19u dm1lX3RyYW5zcG9ydF9pZCAqdHJpZCwNCgkgIHN0cnVjdCBzcGRrX252bWVfY3RybHIgKmN0cmxy LCBjb25zdCBzdHJ1Y3Qgc3Bka19udm1lX2N0cmxyX29wdHMgKm9wdHMpDQp7DQoJaW50IG5zaWQs IG51bV9uczsNCglzdHJ1Y3QgY3RybHJfZW50cnkgKmVudHJ5Ow0KCXN0cnVjdCBzcGRrX252bWVf bnMgKm5zOw0KCWNvbnN0IHN0cnVjdCBzcGRrX252bWVfY3RybHJfZGF0YSAqY2RhdGEgPSBzcGRr X252bWVfY3RybHJfZ2V0X2RhdGEoY3RybHIpOw0KDQoJZW50cnkgPSBjYWxsb2MoMSwgc2l6ZW9m KHN0cnVjdCBjdHJscl9lbnRyeSkpOw0KCWlmIChlbnRyeSA9PSBOVUxMKSB7DQoJCXBlcnJvcigi Y3RybHJfZW50cnkgbWFsbG9jIik7DQoJCWV4aXQoMSk7DQoJfQ0KDQoJcHJpbnRmKCJBdHRhY2hl ZCB0byAlc1xuIiwgdHJpZC0+dHJhZGRyKTsNCg0KCXNucHJpbnRmKGVudHJ5LT5uYW1lLCBzaXpl b2YoZW50cnktPm5hbWUpLCAiJS0yMC4yMHMgKCUtMjAuMjBzKSIsIGNkYXRhLT5tbiwgY2RhdGEt PnNuKTsNCg0KCWVudHJ5LT5jdHJsciA9IGN0cmxyOw0KCWVudHJ5LT5uZXh0ID0gZ19jb250cm9s bGVyczsNCglnX2NvbnRyb2xsZXJzID0gZW50cnk7DQoNCgkvKg0KCSAqIEVhY2ggY29udHJvbGxl ciBoYXMgb25lIG9yIG1vcmUgbmFtZXNwYWNlcy4gIEFuIE5WTWUgbmFtZXNwYWNlIGlzIGJhc2lj YWxseQ0KCSAqICBlcXVpdmFsZW50IHRvIGEgU0NTSSBMVU4uICBUaGUgY29udHJvbGxlcidzIElE RU5USUZZIGRhdGEgdGVsbHMgdXMgaG93DQoJICogIG1hbnkgbmFtZXNwYWNlcyBleGlzdCBvbiB0 aGUgY29udHJvbGxlci4gIEZvciBJbnRlbChSKSBQM1gwMCBjb250cm9sbGVycywNCgkgKiAgaXQg d2lsbCBqdXN0IGJlIG9uZSBuYW1lc3BhY2UuDQoJICoNCgkgKiBOb3RlIHRoYXQgaW4gTlZNZSwg bmFtZXNwYWNlIElEcyBzdGFydCBhdCAxLCBub3QgMC4NCgkgKi8NCgludW1fbnMgPSBzcGRrX252 bWVfY3RybHJfZ2V0X251bV9ucyhjdHJscik7DQoJcHJpbnRmKCJVc2luZyBjb250cm9sbGVyICVz IHdpdGggJWQgbmFtZXNwYWNlcy5cbiIsIGVudHJ5LT5uYW1lLCBudW1fbnMpOw0KCWZvciAobnNp ZCA9IDE7IG5zaWQgPD0gbnVtX25zOyBuc2lkKyspIHsNCgkJbnMgPSBzcGRrX252bWVfY3RybHJf Z2V0X25zKGN0cmxyLCBuc2lkKTsNCgkJaWYgKG5zID09IE5VTEwpIHsNCgkJCWNvbnRpbnVlOw0K CQl9DQoJCXJlZ2lzdGVyX25zKGN0cmxyLCBucywgbnNpZCwgZW50cnktPm5hbWUpOw0KCX0NCn0N Cg0Kc3RhdGljIHZvaWQNCmNsZWFudXAodm9pZCkNCnsNCglzdHJ1Y3QgbnNfZW50cnkgKm5zX2Vu dHJ5ID0gZ19uYW1lc3BhY2VzOw0KCXN0cnVjdCBjdHJscl9lbnRyeSAqY3RybHJfZW50cnkgPSBn X2NvbnRyb2xsZXJzOw0KDQoJd2hpbGUgKG5zX2VudHJ5KSB7DQoJCXN0cnVjdCBuc19lbnRyeSAq bmV4dCA9IG5zX2VudHJ5LT5uZXh0Ow0KCQlmcmVlKG5zX2VudHJ5KTsNCgkJbnNfZW50cnkgPSBu ZXh0Ow0KCX0NCg0KCXdoaWxlIChjdHJscl9lbnRyeSkgew0KCQlzdHJ1Y3QgY3RybHJfZW50cnkg Km5leHQgPSBjdHJscl9lbnRyeS0+bmV4dDsNCg0KCQlzcGRrX252bWVfZGV0YWNoKGN0cmxyX2Vu dHJ5LT5jdHJscik7DQoJCWZyZWUoY3RybHJfZW50cnkpOw0KCQljdHJscl9lbnRyeSA9IG5leHQ7 DQoJfQ0KfQ0KDQppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQp7DQoJaW50IHJjOw0K CWludCBpOw0KCXN0cnVjdCBzcGRrX2Vudl9vcHRzIG9wdHM7DQoNCglzdHJ1Y3QgbnNfZW50cnkg Km5zX2VudHJ5Ow0KCXB0aHJlYWRfdAl0aHJlYWRzWzVdOw0KCS8qDQoJICogU1BESyByZWxpZXMg b24gYW4gYWJzdHJhY3Rpb24gYXJvdW5kIHRoZSBsb2NhbCBlbnZpcm9ubWVudA0KCSAqIG5hbWVk IGVudiB0aGF0IGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kIFBDSSBkZXZpY2Ugb3BlcmF0 aW9ucy4NCgkgKiBUaGlzIGxpYnJhcnkgbXVzdCBiZSBpbml0aWFsaXplZCBmaXJzdC4NCgkgKg0K CSAqLw0KCXNwZGtfZW52X29wdHNfaW5pdCgmb3B0cyk7DQoJb3B0cy5uYW1lID0gImhlbGxvX3dv cmxkIjsNCglvcHRzLnNobV9pZCA9IDA7DQoJc3Bka19lbnZfaW5pdCgmb3B0cyk7DQoJc2htX2lu aXQoKTsNCg0KCXByaW50ZigiSW5pdGlhbGl6aW5nIE5WTWUgQ29udHJvbGxlcnNcbiIpOw0KDQoJ LyoNCgkgKiBTdGFydCB0aGUgU1BESyBOVk1lIGVudW1lcmF0aW9uIHByb2Nlc3MuICBwcm9iZV9j YiB3aWxsIGJlIGNhbGxlZA0KCSAqICBmb3IgZWFjaCBOVk1lIGNvbnRyb2xsZXIgZm91bmQsIGdp dmluZyBvdXIgYXBwbGljYXRpb24gYSBjaG9pY2Ugb24NCgkgKiAgd2hldGhlciB0byBhdHRhY2gg dG8gZWFjaCBjb250cm9sbGVyLiAgYXR0YWNoX2NiIHdpbGwgdGhlbiBiZQ0KCSAqICBjYWxsZWQg Zm9yIGVhY2ggY29udHJvbGxlciBhZnRlciB0aGUgU1BESyBOVk1lIGRyaXZlciBoYXMgY29tcGxl dGVkDQoJICogIGluaXRpYWxpemluZyB0aGUgY29udHJvbGxlciB3ZSBjaG9zZSB0byBhdHRhY2gu DQoJICovDQoJcmMgPSBzcGRrX252bWVfcHJvYmUoTlVMTCwgTlVMTCwgcHJvYmVfY2IsIGF0dGFj aF9jYiwgTlVMTCk7DQoJaWYgKHJjICE9IDApIHsNCgkJZnByaW50ZihzdGRlcnIsICJzcGRrX252 bWVfcHJvYmUoKSBmYWlsZWRcbiIpOw0KCQljbGVhbnVwKCk7DQoJCXJldHVybiAxOw0KCX0NCg0K CWlmIChnX2NvbnRyb2xsZXJzID09IE5VTEwpIHsNCgkJZnByaW50ZihzdGRlcnIsICJubyBOVk1l IGNvbnRyb2xsZXJzIGZvdW5kXG4iKTsNCgkJY2xlYW51cCgpOw0KCQlyZXR1cm4gMTsNCgl9DQoN CglwcmludGYoIkluaXRpYWxpemF0aW9uIGNvbXBsZXRlLlxuIik7DQoJaSA9IDE7DQoJLy8gbnNf ZW50cnkgPSBnX25hbWVzcGFjZXM7DQoJLy8gaGVsbG9fd29ybGQoKTsNCglmb3IgKGkgPSAxOyBp IDwgMjsgaSsrKSB7DQoJCXB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRzW2ldLCBOVUxMLCAodm9pZCAq KSB0ZXN0X2lvX2Z1bmMxLCAodm9pZCAqKSZpKTsNCgkJLy90ZXN0X2lvX2Z1bmMxKCZpKTsNCgl9 DQoJLy9mb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7DQoJLy8JcHRocmVhZF9qb2luKCZ0aHJlYWRz W2ldLCBOVUxMKTsNCgkvL30NCgljbGVhbnVwKCk7DQoJcmV0dXJuIDA7DQp9DQo= --===============0033657776042460161==--