From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31399 invoked by alias); 19 Jun 2003 08:17:14 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 31160 invoked from network); 19 Jun 2003 08:17:05 -0000 Received: from unknown (HELO planck.amplepower.com) (216.39.162.139) by sources.redhat.com with SMTP; 19 Jun 2003 08:17:05 -0000 Received: from [192.168.8.29] (helo=bozoland.mynet) by planck.amplepower.com with esmtp (Exim 3.36 #1 (Debian)) id 19SuPV-00046s-00 for ; Thu, 19 Jun 2003 01:04:45 -0700 Date: Thu, 19 Jun 2003 08:17:00 -0000 From: "Theodore A. Roth" X-X-Sender: troth@bozoland.mynet To: gdb-patches@sources.redhat.com Subject: [commit] [avr] frame-ify Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-1463809535-914562516-1056010474=:9766" X-SW-Source: 2003-06/txt/msg00624.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1463809535-914562516-1056010474=:9766 Content-Type: TEXT/PLAIN; charset=US-ASCII Content-length: 2332 Hi, Committed the attached. This completes the frame-ifying of the avr port. The port is also free of deprecated code once more. Ted Roth 2003-06-18 Theodore A. Roth * avr-tdep.c: Include frame.h, frame-unwind.h, frame-base.h, and trad-frame.h. (AVR_MAX_PROLOGUE_SIZE): Increase from 56 to 64. (AVR_ARG1_REGNUM, AVR_ARGN_REGNUM): Define. (AVR_RET1_REGNUM, AVR_RETN_REGNUM): Define. (AVR_PROLOGUE_*): Enumerate prologue types. (struct frame_extra_info): Remove. (struct avr_unwind_cache): Define. (avr_write_sp): Delete function. (avr_read_fp): Ditto. (avr_init_extra_frame_info): Ditto. (avr_pop_frame): Ditto. (avr_frame_saved_pc): Ditto. (avr_saved_pc_after_call): Ditto. (avr_push_return_address): Ditto. (avr_frame_chain): Ditto. (avr_store_struct_return): Ditto. (avr_push_arguments): Ditto. (avr_scan_prologue): Update comments. Changed to set up the info for cache unwinding. Now returns end of prologue PC. (avr_skip_prologue): Better handling of functions lacking a prologue by using avr_scan_prologue. (avr_scan_arg_moves): New function. (avr_saved_regs_unwinder): Ditto. (avr_frame_unwind_cache): Ditto. (avr_unwind_pc): Ditto. (avr_frame_this_id): Ditto. (avr_frame_prev_register): Ditto. (avr_frame_p): Ditto. (avr_frame_base_address ): Ditto. (avr_unwind_dummy_id): Ditto. (avr_push_dummy_code): Ditto. (push_stack_item): Ditto. (pop_stack_item): Ditto. (avr_push_dummy_call): Ditto. (struct stack_item): Define. (avr_frame_unwind): Declare structure. (avr_frame_base): Ditto. (avr_gdbarch_init): Remove calls to set_gdbarch_deprecated_init_frame_pc, set_gdbarch_deprecated_target_read_fp, set_gdbarch_deprecated_dummy_write_sp, set_gdbarch_deprecated_fp_regnum, set_gdbarch_deprecated_push_arguments, set_gdbarch_deprecated_push_return_address, set_gdbarch_deprecated_pop_frame, set_gdbarch_deprecated_store_struct_return, set_gdbarch_deprecated_frame_init_saved_regs, set_gdbarch_deprecated_init_extra_frame_info, set_gdbarch_deprecated_frame_chain, set_gdbarch_deprecated_frame_saved_pc, set_gdbarch_deprecated_saved_pc_after_call. Add calls to set_gdbarch_push_dummy_call, set_gdbarch_push_dummy_code, frame_unwind_append_predicate, frame_base_set_default, set_gdbarch_unwind_dummy_id, set_gdbarch_unwind_pc. Wrap a long line. ---1463809535-914562516-1056010474=:9766 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="avr-frame-ify.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="avr-frame-ify.diff" Content-length: 70419 MjAwMy0wNi0xOCAgVGhlb2RvcmUgQS4gUm90aCAgPHRyb3RoQG9wZW5hdnIu b3JnPg0KDQoJKiBhdnItdGRlcC5jOiBJbmNsdWRlIGZyYW1lLmgsIGZyYW1l LXVud2luZC5oLCBmcmFtZS1iYXNlLmgsIGFuZA0KCXRyYWQtZnJhbWUuaC4N CgkoQVZSX01BWF9QUk9MT0dVRV9TSVpFKTogSW5jcmVhc2UgZnJvbSA1NiB0 byA2NC4NCgkoQVZSX0FSRzFfUkVHTlVNLCBBVlJfQVJHTl9SRUdOVU0pOiBE ZWZpbmUuDQoJKEFWUl9SRVQxX1JFR05VTSwgQVZSX1JFVE5fUkVHTlVNKTog RGVmaW5lLg0KCShBVlJfUFJPTE9HVUVfKik6IEVudW1lcmF0ZSBwcm9sb2d1 ZSB0eXBlcy4NCgkoc3RydWN0IGZyYW1lX2V4dHJhX2luZm8pOiBSZW1vdmUu DQoJKHN0cnVjdCBhdnJfdW53aW5kX2NhY2hlKTogRGVmaW5lLg0KCShhdnJf d3JpdGVfc3ApOiBEZWxldGUgZnVuY3Rpb24uDQoJKGF2cl9yZWFkX2ZwKTog RGl0dG8uDQoJKGF2cl9pbml0X2V4dHJhX2ZyYW1lX2luZm8pOiBEaXR0by4N CgkoYXZyX3BvcF9mcmFtZSk6IERpdHRvLg0KCShhdnJfZnJhbWVfc2F2ZWRf cGMpOiBEaXR0by4NCgkoYXZyX3NhdmVkX3BjX2FmdGVyX2NhbGwpOiBEaXR0 by4NCgkoYXZyX3B1c2hfcmV0dXJuX2FkZHJlc3MpOiBEaXR0by4NCgkoYXZy X2ZyYW1lX2NoYWluKTogRGl0dG8uDQoJKGF2cl9zdG9yZV9zdHJ1Y3RfcmV0 dXJuKTogRGl0dG8uDQoJKGF2cl9wdXNoX2FyZ3VtZW50cyk6IERpdHRvLg0K CShhdnJfc2Nhbl9wcm9sb2d1ZSk6IFVwZGF0ZSBjb21tZW50cy4gQ2hhbmdl ZCB0byBzZXQgdXAgdGhlIGluZm8gZm9yDQoJY2FjaGUgdW53aW5kaW5nLiBO b3cgcmV0dXJucyBlbmQgb2YgcHJvbG9ndWUgUEMuDQoJKGF2cl9za2lwX3By b2xvZ3VlKTogQmV0dGVyIGhhbmRsaW5nIG9mIGZ1bmN0aW9ucyBsYWNraW5n IGEgcHJvbG9ndWUNCglieSB1c2luZyBhdnJfc2Nhbl9wcm9sb2d1ZS4NCgko YXZyX3NjYW5fYXJnX21vdmVzKTogTmV3IGZ1bmN0aW9uLg0KCShhdnJfc2F2 ZWRfcmVnc191bndpbmRlcik6IERpdHRvLg0KCShhdnJfZnJhbWVfdW53aW5k X2NhY2hlKTogRGl0dG8uDQoJKGF2cl91bndpbmRfcGMpOiBEaXR0by4NCgko YXZyX2ZyYW1lX3RoaXNfaWQpOiBEaXR0by4NCgkoYXZyX2ZyYW1lX3ByZXZf cmVnaXN0ZXIpOiBEaXR0by4NCgkoYXZyX2ZyYW1lX3ApOiBEaXR0by4NCgko YXZyX2ZyYW1lX2Jhc2VfYWRkcmVzcyApOiBEaXR0by4NCgkoYXZyX3Vud2lu ZF9kdW1teV9pZCk6IERpdHRvLg0KCShhdnJfcHVzaF9kdW1teV9jb2RlKTog RGl0dG8uDQoJKHB1c2hfc3RhY2tfaXRlbSk6IERpdHRvLg0KCShwb3Bfc3Rh Y2tfaXRlbSk6IERpdHRvLg0KCShhdnJfcHVzaF9kdW1teV9jYWxsKTogRGl0 dG8uDQoJKHN0cnVjdCBzdGFja19pdGVtKTogRGVmaW5lLg0KCShhdnJfZnJh bWVfdW53aW5kKTogRGVjbGFyZSBzdHJ1Y3R1cmUuDQoJKGF2cl9mcmFtZV9i YXNlKTogRGl0dG8uDQoJKGF2cl9nZGJhcmNoX2luaXQpOiBSZW1vdmUgY2Fs bHMgdG8NCglzZXRfZ2RiYXJjaF9kZXByZWNhdGVkX2luaXRfZnJhbWVfcGMs DQoJc2V0X2dkYmFyY2hfZGVwcmVjYXRlZF90YXJnZXRfcmVhZF9mcCwNCglz ZXRfZ2RiYXJjaF9kZXByZWNhdGVkX2R1bW15X3dyaXRlX3NwLA0KCXNldF9n ZGJhcmNoX2RlcHJlY2F0ZWRfZnBfcmVnbnVtLA0KCXNldF9nZGJhcmNoX2Rl cHJlY2F0ZWRfcHVzaF9hcmd1bWVudHMsDQoJc2V0X2dkYmFyY2hfZGVwcmVj YXRlZF9wdXNoX3JldHVybl9hZGRyZXNzLA0KCXNldF9nZGJhcmNoX2RlcHJl Y2F0ZWRfcG9wX2ZyYW1lLA0KCXNldF9nZGJhcmNoX2RlcHJlY2F0ZWRfc3Rv cmVfc3RydWN0X3JldHVybiwNCglzZXRfZ2RiYXJjaF9kZXByZWNhdGVkX2Zy YW1lX2luaXRfc2F2ZWRfcmVncywNCglzZXRfZ2RiYXJjaF9kZXByZWNhdGVk X2luaXRfZXh0cmFfZnJhbWVfaW5mbywNCglzZXRfZ2RiYXJjaF9kZXByZWNh dGVkX2ZyYW1lX2NoYWluLA0KCXNldF9nZGJhcmNoX2RlcHJlY2F0ZWRfZnJh bWVfc2F2ZWRfcGMsDQoJc2V0X2dkYmFyY2hfZGVwcmVjYXRlZF9zYXZlZF9w Y19hZnRlcl9jYWxsLg0KCUFkZCBjYWxscyB0byBzZXRfZ2RiYXJjaF9wdXNo X2R1bW15X2NhbGwsDQoJc2V0X2dkYmFyY2hfcHVzaF9kdW1teV9jb2RlLA0K CWZyYW1lX3Vud2luZF9hcHBlbmRfcHJlZGljYXRlLA0KCWZyYW1lX2Jhc2Vf c2V0X2RlZmF1bHQsDQoJc2V0X2dkYmFyY2hfdW53aW5kX2R1bW15X2lkLA0K CXNldF9nZGJhcmNoX3Vud2luZF9wYy4NCglXcmFwIGEgbG9uZyBsaW5lLg0K DQpJbmRleDogYXZyLXRkZXAuYw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K UkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvYXZyLXRkZXAuYyx2DQpyZXRy aWV2aW5nIHJldmlzaW9uIDEuNjANCmRpZmYgLXUgLXAgLXIxLjYwIGF2ci10 ZGVwLmMNCi0tLSBhdnItdGRlcC5jCTE3IEp1biAyMDAzIDA0OjQ0OjE4IC0w MDAwCTEuNjANCisrKyBhdnItdGRlcC5jCTE5IEp1biAyMDAzIDA4OjA1OjM3 IC0wMDAwDQpAQCAtMjUsNiArMjUsMTAgQEANCiAgICBieSBEZW5pcyBDaGVy dHlrb3YsIGRlbmlzY0BvdmVydGEucnUgKi8NCiANCiAjaW5jbHVkZSAiZGVm cy5oIg0KKyNpbmNsdWRlICJmcmFtZS5oIg0KKyNpbmNsdWRlICJmcmFtZS11 bndpbmQuaCINCisjaW5jbHVkZSAiZnJhbWUtYmFzZS5oIg0KKyNpbmNsdWRl ICJ0cmFkLWZyYW1lLmgiDQogI2luY2x1ZGUgImdkYmNtZC5oIg0KICNpbmNs dWRlICJnZGJjb3JlLmgiDQogI2luY2x1ZGUgImluZmVyaW9yLmgiDQpAQCAt ODksNyArOTMsNyBAQCBlbnVtDQogDQogICBBVlJfUENfUkVHX0lOREVYID0g MzUsCS8qIGluZGV4IGludG8gYXJyYXkgb2YgcmVnaXN0ZXJzICovDQogDQot ICBBVlJfTUFYX1BST0xPR1VFX1NJWkUgPSA1NiwJLyogYnl0ZXMgKi8NCisg IEFWUl9NQVhfUFJPTE9HVUVfU0laRSA9IDY0LAkvKiBieXRlcyAqLw0KIA0K ICAgLyogQ291bnQgb2YgcHVzaGVkIHJlZ2lzdGVycy4gRnJvbSByMiB0byBy MTcgKGluY2x1c2l2ZWx5KSwgcjI4LCByMjkgKi8NCiAgIEFWUl9NQVhfUFVT SEVTID0gMTgsDQpAQCAtOTcsNiArMTAxLDEyIEBAIGVudW0NCiAgIC8qIE51 bWJlciBvZiB0aGUgbGFzdCBwdXNoZWQgcmVnaXN0ZXIuIHIxNyBmb3IgY3Vy cmVudCBhdnItZ2NjICovDQogICBBVlJfTEFTVF9QVVNIRURfUkVHTlVNID0g MTcsDQogDQorICBBVlJfQVJHMV9SRUdOVU0gPSAyNCwgICAgICAgICAvKiBT aW5nbGUgYnl0ZSBhcmd1bWVudCAqLw0KKyAgQVZSX0FSR05fUkVHTlVNID0g MjUsICAgICAgICAgLyogTXVsdGkgYnl0ZSBhcmdtZW50cyAqLw0KKw0KKyAg QVZSX1JFVDFfUkVHTlVNID0gMjQsICAgICAgICAgLyogU2luZ2xlIGJ5dGUg cmV0dXJuIHZhbHVlICovDQorICBBVlJfUkVUTl9SRUdOVU0gPSAyNSwgICAg ICAgICAvKiBNdWx0aSBieXRlIHJldHVybiB2YWx1ZSAqLw0KKw0KICAgLyog RklYTUU6IFRSb3RoLzIwMDItMDEtPz86IENhbiB3ZSBzaGlmdCBhbGwgdGhl c2UgbWVtb3J5IG1hc2tzIGxlZnQgOA0KICAgICAgYml0cz8gRG8gdGhlc2Ug aGF2ZSB0byBtYXRjaCB0aGUgYmZkIHZtYSB2YWx1ZXM/LiBJdCBzdXJlIHdv dWxkIG1ha2UNCiAgICAgIHRoaW5ncyBlYXNpZXIgaW4gdGhlIGZ1dHVyZSBp ZiB0aGV5IGRpZG4ndCBuZWVkIHRvIG1hdGNoLg0KQEAgLTEzMCw2ICsxNDAs MjAgQEAgZW51bQ0KICNlbmRpZg0KIH07DQogDQorLyogUHJvbG9ndWUgdHlw ZXM6DQorDQorICAgTk9STUFMIGFuZCBDQUxMIGFyZSB0aGUgdHlwaWNhbCB0 eXBlcyAodGhlIC1tY2FsbC1wcm9sb2d1ZXMgZ2NjIG9wdGlvbg0KKyAgIGNh dXNlcyB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgQ0FMTCB0eXBlIHByb2xvZ3Vl cykuICAqLw0KKw0KK2VudW0gew0KKyAgICBBVlJfUFJPTE9HVUVfTk9ORSwg ICAgICAgICAgICAgIC8qIE5vIHByb2xvZ3VlICovDQorICAgIEFWUl9QUk9M T0dVRV9OT1JNQUwsDQorICAgIEFWUl9QUk9MT0dVRV9DQUxMLCAgICAgICAg ICAgICAgLyogLW1jYWxsLXByb2xvZ3VlcyAqLw0KKyAgICBBVlJfUFJPTE9H VUVfTUFJTiwNCisgICAgQVZSX1BST0xPR1VFX0lOVFIsICAgICAgICAgICAg ICAvKiBpbnRlcnJ1cHQgaGFuZGxlciAqLw0KKyAgICBBVlJfUFJPTE9HVUVf U0lHLCAgICAgICAgICAgICAgIC8qIHNpZ25hbCBoYW5kbGVyICovDQorfTsN CisNCiAvKiBBbnkgZnVuY3Rpb24gd2l0aCBhIGZyYW1lIGxvb2tzIGxpa2Ug dGhpcw0KICAgIC4uLi4uLi4gICAgPC1TUCBQT0lOVFMgSEVSRQ0KICAgIExP Q0FMUzEgICAgPC1GUCBQT0lOVFMgSEVSRQ0KQEAgLTE0MSwxNCArMTY1LDE3 IEBAIGVudW0NCiAgICBGSVJTVCBBUkcNCiAgICBTRUNPTkQgQVJHICovDQog DQotc3RydWN0IGZyYW1lX2V4dHJhX2luZm8NCitzdHJ1Y3QgYXZyX3Vud2lu ZF9jYWNoZQ0KIHsNCi0gIENPUkVfQUREUiByZXR1cm5fcGM7DQotICBDT1JF X0FERFIgYXJnc19wb2ludGVyOw0KLSAgaW50IGxvY2Fsc19zaXplOw0KLSAg aW50IGZyYW1lcmVnOw0KLSAgaW50IGZyYW1lc2l6ZTsNCi0gIGludCBpc19t YWluOw0KKyAgLyogVGhlIHByZXZpb3VzIGZyYW1lJ3MgaW5uZXIgbW9zdCBz dGFjayBhZGRyZXNzLiAgVXNlZCBhcyB0aGlzDQorICAgICBmcmFtZSBJRCdz IHN0YWNrX2FkZHIuICAqLw0KKyAgQ09SRV9BRERSIHByZXZfc3A7DQorICAv KiBUaGUgZnJhbWUncyBiYXNlLCBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGhp Z2gtbGV2ZWwgZGVidWcgaW5mby4gICovDQorICBDT1JFX0FERFIgYmFzZTsN CisgIGludCBzaXplOw0KKyAgaW50IHByb2xvZ3VlX3R5cGU7DQorICAvKiBU YWJsZSBpbmRpY2F0aW5nIHRoZSBsb2NhdGlvbiBvZiBlYWNoIGFuZCBldmVy eSByZWdpc3Rlci4gICovDQorICBzdHJ1Y3QgdHJhZF9mcmFtZV9zYXZlZF9y ZWcgKnNhdmVkX3JlZ3M7DQogfTsNCiANCiBzdHJ1Y3QgZ2RiYXJjaF90ZGVw DQpAQCAtMzI1LDM4ICszNTIsMzIgQEAgYXZyX3JlYWRfc3AgKHZvaWQpDQog ICByZXR1cm4gKGF2cl9tYWtlX3NhZGRyIChyZWFkX3JlZ2lzdGVyIChBVlJf U1BfUkVHTlVNKSkpOw0KIH0NCiANCi1zdGF0aWMgdm9pZA0KLWF2cl93cml0 ZV9zcCAoQ09SRV9BRERSIHZhbCkNCi17DQotICB3cml0ZV9yZWdpc3RlciAo QVZSX1NQX1JFR05VTSwgYXZyX2NvbnZlcnRfc2FkZHJfdG9fcmF3ICh2YWwp KTsNCi19DQotDQotc3RhdGljIENPUkVfQUREUg0KLWF2cl9yZWFkX2ZwICh2 b2lkKQ0KK3N0YXRpYyBpbnQNCithdnJfc2Nhbl9hcmdfbW92ZXMgKGludCB2 cGMsIHVuc2lnbmVkIGNoYXIgKnByb2xvZ3VlKQ0KIHsNCi0gIENPUkVfQURE UiBmcDsNCi0NCi0gIGZwID0gcmVhZF9yZWdpc3RlciAoQVZSX0ZQX1JFR05V TSk7DQotICBmcCArPSAocmVhZF9yZWdpc3RlciAoQVZSX0ZQX1JFR05VTSsx KSA8PCA4KTsNCisgIHVuc2lnbmVkIHNob3J0IGluc247DQogDQotICByZXR1 cm4gKGF2cl9tYWtlX3NhZGRyIChmcCkpOw0KKyAgZm9yICg7IHZwYyA8IEFW Ul9NQVhfUFJPTE9HVUVfU0laRTsgdnBjICs9IDIpDQorICAgIHsNCisgICAg ICBpbnNuID0gRVhUUkFDVF9JTlNOICgmcHJvbG9ndWVbdnBjXSk7DQorICAg ICAgaWYgKChpbnNuICYgMHhmZjAwKSA9PSAweDAxMDApCS8qIG1vdncgclhY LCByWVkgKi8NCisgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgIGVsc2UgaWYg KChpbnNuICYgMHhmYzAwKSA9PSAweDJjMDApIC8qIG1vdiByWFgsIHJZWSAq Lw0KKyAgICAgICAgY29udGludWU7DQorICAgICAgZWxzZQ0KKyAgICAgICAg ICBicmVhazsNCisgICAgfQ0KKyAgICANCisgIHJldHVybiB2cGM7DQogfQ0K IA0KLS8qIGF2cl9zY2FuX3Byb2xvZ3VlIGlzIGFsc28gdXNlZCBhcyB0aGUN Ci0gICBkZXByZWNhdGVkX2ZyYW1lX2luaXRfc2F2ZWRfcmVncygpLg0KLQ0K LSAgIFB1dCBoZXJlIHRoZSBjb2RlIHRvIHN0b3JlLCBpbnRvIGZpLT5zYXZl ZF9yZWdzLCB0aGUgYWRkcmVzc2VzIG9mDQotICAgdGhlIHNhdmVkIHJlZ2lz dGVycyBvZiBmcmFtZSBkZXNjcmliZWQgYnkgRlJBTUVfSU5GTy4gIFRoaXMN Ci0gICBpbmNsdWRlcyBzcGVjaWFsIHJlZ2lzdGVycyBzdWNoIGFzIHBjIGFu ZCBmcCBzYXZlZCBpbiBzcGVjaWFsIHdheXMNCi0gICBpbiB0aGUgc3RhY2sg ZnJhbWUuICBzcCBpcyBldmVuIG1vcmUgc3BlY2lhbDogdGhlIGFkZHJlc3Mg d2UgcmV0dXJuDQotICAgZm9yIGl0IElTIHRoZSBzcCBmb3IgdGhlIG5leHQg ZnJhbWUuICovDQorLyogRnVuY3Rpb246IGF2cl9zY2FuX3Byb2xvZ3VlDQog DQotLyogRnVuY3Rpb246IGF2cl9zY2FuX3Byb2xvZ3VlIChoZWxwZXIgZnVu Y3Rpb24gZm9yIGF2cl9pbml0X2V4dHJhX2ZyYW1lX2luZm8pDQotICAgVGhp cyBmdW5jdGlvbiBkZWNvZGVzIGEgQVZSIGZ1bmN0aW9uIHByb2xvZ3VlIHRv IGRldGVybWluZToNCisgICBUaGlzIGZ1bmN0aW9uIGRlY29kZXMgYW4gQVZS IGZ1bmN0aW9uIHByb2xvZ3VlIHRvIGRldGVybWluZToNCiAgICAgIDEpIHRo ZSBzaXplIG9mIHRoZSBzdGFjayBmcmFtZQ0KICAgICAgMikgd2hpY2ggcmVn aXN0ZXJzIGFyZSBzYXZlZCBvbiBpdA0KICAgICAgMykgdGhlIG9mZnNldHMg b2Ygc2F2ZWQgcmVncw0KLSAgIFRoaXMgaW5mb3JtYXRpb24gaXMgc3RvcmVk IGluIHRoZSAiZXh0cmFfaW5mbyIgZmllbGQgb2YgdGhlIGZyYW1lX2luZm8u DQorICAgVGhpcyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gdGhlIGF2cl91 bndpbmRfY2FjaGUgc3RydWN0dXJlLg0KIA0KICAgIFNvbWUgZGV2aWNlcyBs YWNrIHRoZSBzYml3IGluc3RydWN0aW9uLCBzbyBvbiB0aG9zZSByZXBsYWNl IHRoaXM6DQogICAgICAgICBzYml3ICAgIHIyOCwgWFgNCkBAIC00MzQsNDYg KzQ1NSwzMiBAQCBhdnJfcmVhZF9mcCAodm9pZCkNCiAgICAgICAgIHJqbXAg ICAgX19wcm9sb2d1ZV9zYXZlc19fK1JSUg0KICAgICAgICAgLkxfZm9vX2Jv ZHk6ICAqLw0KIA0KLXN0YXRpYyB2b2lkDQotYXZyX3NjYW5fcHJvbG9ndWUg KHN0cnVjdCBmcmFtZV9pbmZvICpmaSkNCisvKiBOb3QgcmVhbGx5IHBhcnQg b2YgYSBwcm9sb2d1ZSwgYnV0IHN0aWxsIG5lZWQgdG8gc2NhbiBmb3IgaXQs IGlzIHdoZW4gYQ0KKyAgIGZ1bmN0aW9uIHByb2xvZ3VlIG1vdmVzIHZhbHVl cyBwYXNzZWQgdmlhIHJlZ2lzdGVycyBhcyBhcmd1bWVudHMgdG8gbmV3DQor ICAgcmVnaXN0ZXJzLiBJbiB0aGlzIGNhc2UsIGFsbCBsb2NhbCB2YXJpYWJs ZXMgbGl2ZSBpbiByZWdpc3RlcnMsIHNvIHRoZXJlDQorICAgbWF5IGJlIHNv bWUgcmVnaXN0ZXIgc2F2ZXMuIFRoaXMgaXMgd2hhdCBpdCBsb29rcyBsaWtl Og0KKyAgICAgICAgbW92dyAgICByTU0sIHJOTg0KKyAgICAgICAgLi4uDQor DQorICAgVGhlcmUgY291bGQgYmUgbXVsdGlwbGUgbW92dydzLiBJZiB0aGUg dGFyZ2V0IGRvZXNuJ3QgaGF2ZSBhIG1vdncgaW5zbiwgaXQNCisgICB3aWxs IHVzZSB0d28gbW92IGluc25zLiBUaGlzIGNvdWxkIGJlIGRvbmUgYWZ0ZXIg YW55IG9mIHRoZSBhYm92ZSBwcm9sb2d1ZQ0KKyAgIHR5cGVzLiAgKi8NCisN CitzdGF0aWMgQ09SRV9BRERSDQorYXZyX3NjYW5fcHJvbG9ndWUgKENPUkVf QUREUiBwYywgc3RydWN0IGF2cl91bndpbmRfY2FjaGUgKmluZm8pDQogew0K LSAgQ09SRV9BRERSIHByb2xvZ3VlX3N0YXJ0Ow0KLSAgQ09SRV9BRERSIHBy b2xvZ3VlX2VuZDsNCiAgIGludCBpOw0KICAgdW5zaWduZWQgc2hvcnQgaW5z bjsNCi0gIGludCByZWdubzsNCiAgIGludCBzY2FuX3N0YWdlID0gMDsNCi0g IGNoYXIgKm5hbWU7DQogICBzdHJ1Y3QgbWluaW1hbF9zeW1ib2wgKm1zeW1i b2w7DQotICBpbnQgcHJvbG9ndWVfbGVuOw0KICAgdW5zaWduZWQgY2hhciBw cm9sb2d1ZVtBVlJfTUFYX1BST0xPR1VFX1NJWkVdOw0KICAgaW50IHZwYyA9 IDA7DQogDQotICBnZXRfZnJhbWVfZXh0cmFfaW5mbyAoZmkpLT5mcmFtZXJl ZyA9IEFWUl9TUF9SRUdOVU07DQotDQotICBpZiAoZmluZF9wY19wYXJ0aWFs X2Z1bmN0aW9uDQotICAgICAgKGdldF9mcmFtZV9wYyAoZmkpLCAmbmFtZSwg JnByb2xvZ3VlX3N0YXJ0LCAmcHJvbG9ndWVfZW5kKSkNCi0gICAgew0KLSAg ICAgIHN0cnVjdCBzeW10YWJfYW5kX2xpbmUgc2FsID0gZmluZF9wY19saW5l IChwcm9sb2d1ZV9zdGFydCwgMCk7DQotDQotICAgICAgaWYgKHNhbC5saW5l ID09IDApCS8qIG5vIGxpbmUgaW5mbywgdXNlIGN1cnJlbnQgUEMgKi8NCi0J cHJvbG9ndWVfZW5kID0gZ2V0X2ZyYW1lX3BjIChmaSk7DQotICAgICAgZWxz ZSBpZiAoc2FsLmVuZCA8IHByb2xvZ3VlX2VuZCkJLyogbmV4dCBsaW5lIGJl Z2lucyBhZnRlciBmbiBlbmQgKi8NCi0JcHJvbG9ndWVfZW5kID0gc2FsLmVu ZDsJLyogKHByb2JhYmx5IG1lYW5zIG5vIHByb2xvZ3VlKSAgKi8NCi0gICAg fQ0KLSAgZWxzZQ0KLSAgICAvKiBXZSdyZSBpbiB0aGUgYm9vbmRvY2tzOiBh bGxvdyBmb3IgKi8NCi0gICAgLyogMTkgcHVzaGVzLCBhbiBhZGQsIGFuZCAi bXYgZnAsc3AiICovDQotICAgIHByb2xvZ3VlX2VuZCA9IHByb2xvZ3VlX3N0 YXJ0ICsgQVZSX01BWF9QUk9MT0dVRV9TSVpFOw0KLQ0KLSAgcHJvbG9ndWVf ZW5kID0gbWluIChwcm9sb2d1ZV9lbmQsIGdldF9mcmFtZV9wYyAoZmkpKTsN Ci0NCi0gIC8qIFNlYXJjaCB0aGUgcHJvbG9ndWUgbG9va2luZyBmb3IgaW5z dHJ1Y3Rpb25zIHRoYXQgc2V0IHVwIHRoZQ0KLSAgICAgZnJhbWUgcG9pbnRl ciwgYWRqdXN0IHRoZSBzdGFjayBwb2ludGVyLCBhbmQgc2F2ZSByZWdpc3Rl cnMuICAqLw0KLQ0KLSAgZ2V0X2ZyYW1lX2V4dHJhX2luZm8gKGZpKS0+ZnJh bWVzaXplID0gMDsNCi0gIHByb2xvZ3VlX2xlbiA9IG1pbiAocHJvbG9ndWVf ZW5kIC0gcHJvbG9ndWVfc3RhcnQsIEFWUl9NQVhfUFJPTE9HVUVfU0laRSk7 DQotICByZWFkX21lbW9yeSAocHJvbG9ndWVfc3RhcnQsIHByb2xvZ3VlLCBw cm9sb2d1ZV9sZW4pOw0KKyAgLyogRklYTUU6IFRSb3RoLzIwMDMtMDYtMTE6 IFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGVmZmljaWVudCBieSBvbmx5DQor ICAgICByZWFkaW5nIGluIHRoZSBieXRlcyBvZiB0aGUgcHJvbG9ndWUuIFRo ZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGZpZ3VyaW5nDQorICAgICBvdXQgd2hl cmUgdGhlIGVuZCBvZiB0aGUgcHJvbG9ndWUgaXMgaXMgYSBiaXQgZGlmZmlj dWx0LiBUaGUgb2xkIGNvZGUgDQorICAgICB0cmllZCB0byBkbyB0aGF0LCBi dXQgZmFpbGVkIHF1aXRlIG9mdGVuLiAgKi8NCisgIHJlYWRfbWVtb3J5IChw YywgcHJvbG9ndWUsIEFWUl9NQVhfUFJPTE9HVUVfU0laRSk7DQogDQogICAv KiBTY2FubmluZyBtYWluKCkncyBwcm9sb2d1ZQ0KICAgICAgbGRpIHIyOCxs bzgoPFJBTV9BRERSPiAtIDxMT0NBTFNfU0laRT4pDQpAQCAtNDgxLDcgKzQ4 OCw3IEBAIGF2cl9zY2FuX3Byb2xvZ3VlIChzdHJ1Y3QgZnJhbWVfaW5mbyAq ZmkNCiAgICAgIG91dCBfX1NQX0hfXyxyMjkNCiAgICAgIG91dCBfX1NQX0xf XyxyMjggKi8NCiANCi0gIGlmIChuYW1lICYmIHN0cmNtcCAoIm1haW4iLCBu YW1lKSA9PSAwICYmIHByb2xvZ3VlX2xlbiA9PSA4KQ0KKyAgaWYgKDEpDQog ICAgIHsNCiAgICAgICBDT1JFX0FERFIgbG9jYWxzOw0KICAgICAgIHVuc2ln bmVkIGNoYXIgaW1nW10gPSB7DQpAQCAtNDg5LDcgKzQ5Niw2IEBAIGF2cl9z Y2FuX3Byb2xvZ3VlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqZmkNCiAJMHhjZCwg MHhiZgkJLyogb3V0IF9fU1BfTF9fLHIyOCAqLw0KICAgICAgIH07DQogDQot ICAgICAgZ2V0X2ZyYW1lX2V4dHJhX2luZm8gKGZpKS0+ZnJhbWVyZWcgPSBB VlJfRlBfUkVHTlVNOw0KICAgICAgIGluc24gPSBFWFRSQUNUX0lOU04gKCZw cm9sb2d1ZVt2cGNdKTsNCiAgICAgICAvKiBsZGkgcjI4LGxvOCg8UkFNX0FE RFI+IC0gPExPQ0FMU19TSVpFPikgKi8NCiAgICAgICBpZiAoKGluc24gJiAw eGYwZjApID09IDB4ZTBjMCkNCkBAIC01MDIsNTIgKzUwOCw1NiBAQCBhdnJf c2Nhbl9wcm9sb2d1ZSAoc3RydWN0IGZyYW1lX2luZm8gKmZpDQogCSAgICAg IGxvY2FscyB8PSAoKGluc24gJiAweGYpIHwgKChpbnNuICYgMHgwZjAwKSA+ PiA0KSkgPDwgODsNCiAJICAgICAgaWYgKG1lbWNtcCAocHJvbG9ndWUgKyB2 cGMgKyA0LCBpbWcsIHNpemVvZiAoaW1nKSkgPT0gMCkNCiAJCXsNCi0JCSAg ZGVwcmVjYXRlZF91cGRhdGVfZnJhbWVfYmFzZV9oYWNrIChmaSwgbG9jYWxz KTsNCi0NCi0JCSAgZ2V0X2ZyYW1lX2V4dHJhX2luZm8gKGZpKS0+aXNfbWFp biA9IDE7DQotCQkgIHJldHVybjsNCisgICAgICAgICAgICAgICAgICBpbmZv LT5wcm9sb2d1ZV90eXBlID0gQVZSX1BST0xPR1VFX01BSU47DQorICAgICAg ICAgICAgICAgICAgaW5mby0+YmFzZSA9IGxvY2FsczsNCisgICAgICAgICAg ICAgICAgICByZXR1cm4gcGMgKyA0Ow0KIAkJfQ0KIAkgICAgfQ0KIAl9DQog ICAgIH0NCiANCi0gIC8qIFNjYW5uaW5nIGAtbWNhbGwtcHJvbG9ndWVzJyBw cm9sb2d1ZSAgKi8NCisgIC8qIFNjYW5uaW5nIGAtbWNhbGwtcHJvbG9ndWVz JyBwcm9sb2d1ZQ0KKyAgICAgQ2xhc3NpYyBwcm9sb2d1ZSBpcyAxMCBieXRl cywgbWVnYSBwcm9sb2d1ZSBpcyBhIDEyIGJ5dGVzIGxvbmcgKi8NCiANCiAg IHdoaWxlICgxKQkvKiBVc2luZyBhIHdoaWxlIHRvIGF2b2lkIG1hbnkgZ290 bydzICovDQogICAgIHsNCiAgICAgICBpbnQgbG9jX3NpemU7DQogICAgICAg aW50IGJvZHlfYWRkcjsNCiAgICAgICB1bnNpZ25lZCBudW1fcHVzaGVzOw0K KyAgICAgIGludCBwY19vZmZzZXQgPSAwOw0KIA0KICAgICAgIGluc24gPSBF WFRSQUNUX0lOU04gKCZwcm9sb2d1ZVt2cGNdKTsNCiAgICAgICAvKiBsZGkg cjI2LDxMT0NBTFNfU0laRT4gKi8NCiAgICAgICBpZiAoKGluc24gJiAweGYw ZjApICE9IDB4ZTBhMCkNCiAJYnJlYWs7DQogICAgICAgbG9jX3NpemUgPSAo aW5zbiAmIDB4ZikgfCAoKGluc24gJiAweDBmMDApID4+IDQpOw0KKyAgICAg IHBjX29mZnNldCArPSAyOw0KIA0KICAgICAgIGluc24gPSBFWFRSQUNUX0lO U04gKCZwcm9sb2d1ZVt2cGMgKyAyXSk7DQogICAgICAgLyogbGRpIHIyNyw8 TE9DQUxTX1NJWkU+IC8gMjU2ICovDQogICAgICAgaWYgKChpbnNuICYgMHhm MGYwKSAhPSAweGUwYjApDQogCWJyZWFrOw0KICAgICAgIGxvY19zaXplIHw9 ICgoaW5zbiAmIDB4ZikgfCAoKGluc24gJiAweDBmMDApID4+IDQpKSA8PCA4 Ow0KKyAgICAgIHBjX29mZnNldCArPSAyOw0KIA0KICAgICAgIGluc24gPSBF WFRSQUNUX0lOU04gKCZwcm9sb2d1ZVt2cGMgKyA0XSk7DQogICAgICAgLyog bGRpIHIzMCxwbV9sbzgoLkxfZm9vX2JvZHkpICovDQogICAgICAgaWYgKChp bnNuICYgMHhmMGYwKSAhPSAweGUwZTApDQogCWJyZWFrOw0KICAgICAgIGJv ZHlfYWRkciA9IChpbnNuICYgMHhmKSB8ICgoaW5zbiAmIDB4MGYwMCkgPj4g NCk7DQorICAgICAgcGNfb2Zmc2V0ICs9IDI7DQogDQogICAgICAgaW5zbiA9 IEVYVFJBQ1RfSU5TTiAoJnByb2xvZ3VlW3ZwYyArIDZdKTsNCiAgICAgICAv KiBsZGkgcjMxLHBtX2hpOCguTF9mb29fYm9keSkgKi8NCiAgICAgICBpZiAo KGluc24gJiAweGYwZjApICE9IDB4ZTBmMCkNCiAJYnJlYWs7DQogICAgICAg Ym9keV9hZGRyIHw9ICgoaW5zbiAmIDB4ZikgfCAoKGluc24gJiAweDBmMDAp ID4+IDQpKSA8PCA4Ow0KKyAgICAgIHBjX29mZnNldCArPSAyOw0KIA0KICAg ICAgIG1zeW1ib2wgPSBsb29rdXBfbWluaW1hbF9zeW1ib2wgKCJfX3Byb2xv Z3VlX3NhdmVzX18iLCBOVUxMLCBOVUxMKTsNCiAgICAgICBpZiAoIW1zeW1i b2wpDQogCWJyZWFrOw0KIA0KLSAgICAgIC8qIEZJWE1FOiBwcm9sb2d1ZSBm b3IgbWVnYSBoYXZlIGEgSk1QIGluc3RlYWQgb2YgUkpNUCAqLw0KICAgICAg IGluc24gPSBFWFRSQUNUX0lOU04gKCZwcm9sb2d1ZVt2cGMgKyA4XSk7DQog ICAgICAgLyogcmptcCBfX3Byb2xvZ3VlX3NhdmVzX18rUlJSICovDQogICAg ICAgaWYgKChpbnNuICYgMHhmMDAwKSA9PSAweGMwMDApDQpAQCAtNTU3LDEy ICs1NjcsMTMgQEAgYXZyX3NjYW5fcHJvbG9ndWUgKHN0cnVjdCBmcmFtZV9p bmZvICpmaQ0KICAgICAgICAgICAvKiBDb252ZXJ0IG9mZnNldCB0byBieXRl IGFkZHJlc3NhYmxlIG1vZGUgKi8NCiAgICAgICAgICAgaSAqPSAyOw0KICAg ICAgICAgICAvKiBEZXN0aW5hdGlvbiBhZGRyZXNzICovDQotICAgICAgICAg IGkgKz0gcHJvbG9ndWVfc3RhcnQgKyAxMDsNCisgICAgICAgICAgaSArPSBw YyArIDEwOw0KIA0KLSAgICAgICAgICBpZiAoYm9keV9hZGRyICE9IChwcm9s b2d1ZV9zdGFydCArIDEwKSAvIDIpDQorICAgICAgICAgIGlmIChib2R5X2Fk ZHIgIT0gKHBjICsgMTApLzIpDQogICAgICAgICAgICAgYnJlYWs7DQorDQor ICAgICAgICAgIHBjX29mZnNldCArPSAyOw0KICAgICAgICAgfQ0KLSAgICAg IC8qIGptcCBfX3Byb2xvZ3VlX3NhdmVzX18rUlJSICovDQogICAgICAgZWxz ZSBpZiAoKGluc24gJiAweGZlMGUpID09IDB4OTQwYykNCiAgICAgICAgIHsN CiAgICAgICAgICAgLyogRXh0cmFjdCBhYnNvbHV0ZSBQQyBhZGRyZXNzIGZy b20gSk1QICovDQpAQCAtNTcxLDM5ICs1ODIsNTAgQEAgYXZyX3NjYW5fcHJv bG9ndWUgKHN0cnVjdCBmcmFtZV9pbmZvICpmaQ0KICAgICAgICAgICAvKiBD b252ZXJ0IGFkZHJlc3MgdG8gYnl0ZSBhZGRyZXNzYWJsZSBtb2RlICovDQog ICAgICAgICAgIGkgKj0gMjsNCiANCi0gICAgICAgICAgaWYgKGJvZHlfYWRk ciAhPSAocHJvbG9ndWVfc3RhcnQgKyAxMikvMikNCisgICAgICAgICAgaWYg KGJvZHlfYWRkciAhPSAocGMgKyAxMikvMikNCiAgICAgICAgICAgICBicmVh azsNCisNCisgICAgICAgICAgcGNfb2Zmc2V0ICs9IDQ7DQogICAgICAgICB9 DQogICAgICAgZWxzZQ0KICAgICAgICAgYnJlYWs7DQogDQotICAgICAgLyog UmVzb3ZsZSBvZmZzZXQgKGluIHdvcmRzKSBmcm9tIF9fcHJvbG9ndWVfc2F2 ZXNfXyBzeW1ib2wuDQorICAgICAgLyogUmVzb2x2ZSBvZmZzZXQgKGluIHdv cmRzKSBmcm9tIF9fcHJvbG9ndWVfc2F2ZXNfXyBzeW1ib2wuDQogICAgICAg ICAgV2hpY2ggaXMgYSBwdXNoZXMgY291bnQgaW4gYC1tY2FsbC1wcm9sb2d1 ZXMnIG1vZGUgKi8NCiAgICAgICBudW1fcHVzaGVzID0gQVZSX01BWF9QVVNI RVMgLSAoaSAtIFNZTUJPTF9WQUxVRV9BRERSRVNTIChtc3ltYm9sKSkgLyAy Ow0KIA0KICAgICAgIGlmIChudW1fcHVzaGVzID4gQVZSX01BWF9QVVNIRVMp DQotCW51bV9wdXNoZXMgPSAwOw0KKyAgICAgICAgew0KKyAgICAgICAgICBm cHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRlcnIsICJOdW0gcHVzaGVzIHRv byBsYXJnZTogJWRcbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnVtX3B1c2hlcyk7DQorICAgICAgICAgIG51bV9wdXNoZXMgPSAwOw0K KyAgICAgICAgfQ0KIA0KICAgICAgIGlmIChudW1fcHVzaGVzKQ0KIAl7DQog CSAgaW50IGZyb207DQotCSAgZ2V0X2ZyYW1lX3NhdmVkX3JlZ3MgKGZpKVtB VlJfRlBfUkVHTlVNICsgMV0gPSBudW1fcHVzaGVzOw0KKw0KKwkgIGluZm8t PnNhdmVkX3JlZ3NbQVZSX0ZQX1JFR05VTSArIDFdLmFkZHIgPSBudW1fcHVz aGVzOw0KIAkgIGlmIChudW1fcHVzaGVzID49IDIpDQotCSAgICBnZXRfZnJh bWVfc2F2ZWRfcmVncyAoZmkpW0FWUl9GUF9SRUdOVU1dID0gbnVtX3B1c2hl cyAtIDE7DQorCSAgICBpbmZvLT5zYXZlZF9yZWdzW0FWUl9GUF9SRUdOVU1d LmFkZHIgPSBudW1fcHVzaGVzIC0gMTsNCisNCiAJICBpID0gMDsNCiAJICBm b3IgKGZyb20gPSBBVlJfTEFTVF9QVVNIRURfUkVHTlVNICsgMSAtIChudW1f cHVzaGVzIC0gMik7DQogCSAgICAgICBmcm9tIDw9IEFWUl9MQVNUX1BVU0hF RF9SRUdOVU07ICsrZnJvbSkNCi0JICAgIGdldF9mcmFtZV9zYXZlZF9yZWdz IChmaSlbZnJvbV0gPSArK2k7DQorCSAgICBpbmZvLT5zYXZlZF9yZWdzIFtm cm9tXS5hZGRyID0gKytpOw0KIAl9DQotICAgICAgZ2V0X2ZyYW1lX2V4dHJh X2luZm8gKGZpKS0+bG9jYWxzX3NpemUgPSBsb2Nfc2l6ZTsNCi0gICAgICBn ZXRfZnJhbWVfZXh0cmFfaW5mbyAoZmkpLT5mcmFtZXNpemUgPSBsb2Nfc2l6 ZSArIG51bV9wdXNoZXM7DQotICAgICAgZ2V0X2ZyYW1lX2V4dHJhX2luZm8g KGZpKS0+ZnJhbWVyZWcgPSBBVlJfRlBfUkVHTlVNOw0KLSAgICAgIHJldHVy bjsNCisgICAgICBpbmZvLT5zaXplID0gbG9jX3NpemUgKyBudW1fcHVzaGVz Ow0KKyAgICAgIGluZm8tPnByb2xvZ3VlX3R5cGUgPSBBVlJfUFJPTE9HVUVf Q0FMTDsNCisNCisgICAgICByZXR1cm4gcGMgKyBwY19vZmZzZXQ7DQogICAg IH0NCiANCi0gIC8qIFNjYW4gaW50ZXJydXB0IG9yIHNpZ25hbCBmdW5jdGlv biAqLw0KKyAgLyogU2NhbiBmb3IgdGhlIGJlZ2lubmluZyBvZiB0aGUgcHJv bG9ndWUgZm9yIGFuIGludGVycnVwdCBvciBzaWduYWwNCisgICAgIGZ1bmN0 aW9uLiAgTm90ZSB0aGF0IHdlIGhhdmUgdG8gc2V0IHRoZSBwcm9sb2d1ZSB0 eXBlIGhlcmUgc2luY2UgdGhlDQorICAgICB0aGlyZCBzdGFnZSBvZiB0aGUg cHJvbG9ndWUgbWF5IG5vdCBiZSBwcmVzZW50IChlLmcuIG5vIHNhdmVkIHJl Z2lzdGVyZWQNCisgICAgIG9yIGNoYW5naW5nIG9mIHRoZSBTUCByZWdpc3Rl cikuICAqLw0KIA0KLSAgaWYgKHByb2xvZ3VlX2xlbiA+PSAxMikNCisgIGlm ICgxKQ0KICAgICB7DQogICAgICAgdW5zaWduZWQgY2hhciBpbWdbXSA9IHsN CiAJMHg3OCwgMHg5NCwJCS8qIHNlaSAqLw0KQEAgLTYxNSw0NCArNjM3LDUy IEBAIGF2cl9zY2FuX3Byb2xvZ3VlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqZmkN CiAgICAgICB9Ow0KICAgICAgIGlmIChtZW1jbXAgKHByb2xvZ3VlLCBpbWcs IHNpemVvZiAoaW1nKSkgPT0gMCkNCiAJew0KKyAgICAgICAgICBpbmZvLT5w cm9sb2d1ZV90eXBlID0gQVZSX1BST0xPR1VFX0lOVFI7DQogCSAgdnBjICs9 IHNpemVvZiAoaW1nKTsNCi0JICBnZXRfZnJhbWVfc2F2ZWRfcmVncyAoZmkp WzBdID0gMjsNCi0JICBnZXRfZnJhbWVfc2F2ZWRfcmVncyAoZmkpWzFdID0g MTsNCi0JICBnZXRfZnJhbWVfZXh0cmFfaW5mbyAoZmkpLT5mcmFtZXNpemUg Kz0gMzsNCisgICAgICAgICAgaW5mby0+c2F2ZWRfcmVnc1tBVlJfU1JFR19S RUdOVU1dLmFkZHIgPSAzOw0KKyAgICAgICAgICBpbmZvLT5zYXZlZF9yZWdz WzBdLmFkZHIgPSAyOw0KKyAgICAgICAgICBpbmZvLT5zYXZlZF9yZWdzWzFd LmFkZHIgPSAxOw0KKyAgICAgICAgICBpbmZvLT5zaXplICs9IDM7DQogCX0N Ci0gICAgICBlbHNlIGlmIChtZW1jbXAgKGltZyArIDEsIHByb2xvZ3VlLCBz aXplb2YgKGltZykgLSAxKSA9PSAwKQ0KKyAgICAgIGVsc2UgaWYgKG1lbWNt cCAoaW1nICsgMiwgcHJvbG9ndWUsIHNpemVvZiAoaW1nKSAtIDIpID09IDAp DQogCXsNCi0JICB2cGMgKz0gc2l6ZW9mIChpbWcpIC0gMTsNCi0JICBnZXRf ZnJhbWVfc2F2ZWRfcmVncyAoZmkpWzBdID0gMjsNCi0JICBnZXRfZnJhbWVf c2F2ZWRfcmVncyAoZmkpWzFdID0gMTsNCi0JICBnZXRfZnJhbWVfZXh0cmFf aW5mbyAoZmkpLT5mcmFtZXNpemUgKz0gMzsNCisgICAgICAgICAgaW5mby0+ cHJvbG9ndWVfdHlwZSA9IEFWUl9QUk9MT0dVRV9TSUc7DQorICAgICAgICAg IHZwYyArPSBzaXplb2YgKGltZykgLSAyOw0KKyAgICAgICAgICBpbmZvLT5z YXZlZF9yZWdzW0FWUl9TUkVHX1JFR05VTV0uYWRkciA9IDM7DQorICAgICAg ICAgIGluZm8tPnNhdmVkX3JlZ3NbMF0uYWRkciA9IDI7DQorICAgICAgICAg IGluZm8tPnNhdmVkX3JlZ3NbMV0uYWRkciA9IDE7DQorICAgICAgICAgIGlu Zm8tPnNpemUgKz0gMzsNCiAJfQ0KICAgICB9DQogDQogICAvKiBGaXJzdCBz dGFnZSBvZiB0aGUgcHJvbG9ndWUgc2Nhbm5pbmcuDQotICAgICBTY2FuIHB1 c2hlcyAqLw0KKyAgICAgU2NhbiBwdXNoZXMgKHNhdmVkIHJlZ2lzdGVycykg Ki8NCiANCi0gIGZvciAoOyB2cGMgPD0gcHJvbG9ndWVfbGVuOyB2cGMgKz0g MikNCisgIGZvciAoOyB2cGMgPCBBVlJfTUFYX1BST0xPR1VFX1NJWkU7IHZw YyArPSAyKQ0KICAgICB7DQogICAgICAgaW5zbiA9IEVYVFJBQ1RfSU5TTiAo JnByb2xvZ3VlW3ZwY10pOw0KICAgICAgIGlmICgoaW5zbiAmIDB4ZmUwZikg PT0gMHg5MjBmKQkvKiBwdXNoIHJYWCAqLw0KIAl7DQogCSAgLyogQml0cyA0 LTkgY29udGFpbiBhIG1hc2sgZm9yIHJlZ2lzdGVycyBSMC1SMzIuICovDQot CSAgcmVnbm8gPSAoaW5zbiAmIDB4MWYwKSA+PiA0Ow0KLQkgICsrZ2V0X2Zy YW1lX2V4dHJhX2luZm8gKGZpKS0+ZnJhbWVzaXplOw0KLQkgIGdldF9mcmFt ZV9zYXZlZF9yZWdzIChmaSlbcmVnbm9dID0gZ2V0X2ZyYW1lX2V4dHJhX2lu Zm8gKGZpKS0+ZnJhbWVzaXplOw0KKwkgIGludCByZWdubyA9IChpbnNuICYg MHgxZjApID4+IDQ7DQorCSAgaW5mby0+c2l6ZSsrOw0KKwkgIGluZm8tPnNh dmVkX3JlZ3NbcmVnbm9dLmFkZHIgPSBpbmZvLT5zaXplOw0KIAkgIHNjYW5f c3RhZ2UgPSAxOw0KIAl9DQogICAgICAgZWxzZQ0KIAlicmVhazsNCiAgICAg fQ0KIA0KKyAgaWYgKHZwYyA+PSBBVlJfTUFYX1BST0xPR1VFX1NJWkUpDQor ICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRlcnIsDQorICAgICAg ICAgICAgICAgICAgICAgICAgICJIaXQgZW5kIG9mIHByb2xvZ3VlIHdoaWxl IHNjYW5uaW5nIHB1c2hlc1xuIik7DQorDQogICAvKiBTZWNvbmQgc3RhZ2Ug b2YgdGhlIHByb2xvZ3VlIHNjYW5uaW5nLg0KICAgICAgU2NhbjoNCiAgICAg IGluIHIyOCxfX1NQX0xfXw0KICAgICAgaW4gcjI5LF9fU1BfSF9fICovDQog DQotICBpZiAoc2Nhbl9zdGFnZSA9PSAxICYmIHZwYyArIDQgPD0gcHJvbG9n dWVfbGVuKQ0KKyAgaWYgKHNjYW5fc3RhZ2UgPT0gMSAmJiB2cGMgPCBBVlJf TUFYX1BST0xPR1VFX1NJWkUpDQogICAgIHsNCiAgICAgICB1bnNpZ25lZCBj aGFyIGltZ1tdID0gew0KIAkweGNkLCAweGI3LAkJLyogaW4gcjI4LF9fU1Bf TF9fICovDQpAQCAtNjYzLDcgKzY5Myw2IEBAIGF2cl9zY2FuX3Byb2xvZ3Vl IChzdHJ1Y3QgZnJhbWVfaW5mbyAqZmkNCiAgICAgICBpZiAobWVtY21wIChw cm9sb2d1ZSArIHZwYywgaW1nLCBzaXplb2YgKGltZykpID09IDApDQogCXsN CiAJICB2cGMgKz0gNDsNCi0JICBnZXRfZnJhbWVfZXh0cmFfaW5mbyAoZmkp LT5mcmFtZXJlZyA9IEFWUl9GUF9SRUdOVU07DQogCSAgc2Nhbl9zdGFnZSA9 IDI7DQogCX0NCiAgICAgfQ0KQEAgLTY3OCw3ICs3MDcsNyBAQCBhdnJfc2Nh bl9wcm9sb2d1ZSAoc3RydWN0IGZyYW1lX2luZm8gKmZpDQogICAgICBvdXQg X19TUkVHX18sX190bXBfcmVnX18NCiAgICAgIG91dCBfX1NQX0xfXyxyMjgg Ki8NCiANCi0gIGlmIChzY2FuX3N0YWdlID09IDIgJiYgdnBjICsgMTIgPD0g cHJvbG9ndWVfbGVuKQ0KKyAgaWYgKHNjYW5fc3RhZ2UgPT0gMiAmJiB2cGMg PCBBVlJfTUFYX1BST0xPR1VFX1NJWkUpDQogICAgIHsNCiAgICAgICBpbnQg bG9jYWxzX3NpemUgPSAwOw0KICAgICAgIHVuc2lnbmVkIGNoYXIgaW1nW10g PSB7DQpAQCAtNzExLDI5NyArNzQwLDQzNyBAQCBhdnJfc2Nhbl9wcm9sb2d1 ZSAoc3RydWN0IGZyYW1lX2luZm8gKmZpDQogCSAgbG9jYWxzX3NpemUgKz0g KChpbnNuICYgMHhmKSB8ICgoaW5zbiAmIDB4ZjAwKSA+PiA0KSA8PCA4KTsN CiAJfQ0KICAgICAgIGVsc2UNCi0JcmV0dXJuOw0KLSAgICAgIGdldF9mcmFt ZV9leHRyYV9pbmZvIChmaSktPmxvY2Fsc19zaXplID0gbG9jYWxzX3NpemU7 DQotICAgICAgZ2V0X2ZyYW1lX2V4dHJhX2luZm8gKGZpKS0+ZnJhbWVzaXpl ICs9IGxvY2Fsc19zaXplOw0KKwlyZXR1cm4gcGMgKyB2cGM7DQorDQorICAg ICAgLyogU2NhbiB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBwcm9sb2d1ZS4gTWF5 IG5vdCBiZSBwcmVzZW50IGZvciBpbnRlcnJ1cHQNCisgICAgICAgICBvciBz aWduYWwgaGFuZGxlciBmdW5jdGlvbnMsIHdoaWNoIGlzIHdoeSB3ZSBzZXQg dGhlIHByb2xvZ3VlIHR5cGUNCisgICAgICAgICB3aGVuIHdlIHNhdyB0aGUg YmVnaW5uaW5nIG9mIHRoZSBwcm9sb2d1ZSBwcmV2aW91c2x5LiAgKi8NCisN CisgICAgICBpZiAobWVtY21wIChwcm9sb2d1ZSArIHZwYywgaW1nX3NpZywg c2l6ZW9mIChpbWdfc2lnKSkgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAg ICAgdnBjICs9IHNpemVvZiAoaW1nX3NpZyk7DQorICAgICAgICB9DQorICAg ICAgZWxzZSBpZiAobWVtY21wIChwcm9sb2d1ZSArIHZwYywgaW1nX2ludCwg c2l6ZW9mIChpbWdfaW50KSkgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAg ICAgdnBjICs9IHNpemVvZiAoaW1nX2ludCk7DQorICAgICAgICB9DQorICAg ICAgaWYgKG1lbWNtcCAocHJvbG9ndWUgKyB2cGMsIGltZywgc2l6ZW9mIChp bWcpKSA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICBpbmZvLT5wcm9s b2d1ZV90eXBlID0gQVZSX1BST0xPR1VFX05PUk1BTDsNCisgICAgICAgICAg dnBjICs9IHNpemVvZiAoaW1nKTsNCisgICAgICAgIH0NCisNCisgICAgICBp bmZvLT5zaXplICs9IGxvY2Fsc19zaXplOw0KKw0KKyAgICAgIHJldHVybiBw YyArIGF2cl9zY2FuX2FyZ19tb3ZlcyAodnBjLCBwcm9sb2d1ZSk7DQogICAg IH0NCisNCisgIC8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UgY291bGQgbm90 IHNjYW4gdGhlIHByb2xvZ3VlLCBzbyBqdXN0IHJldHVybiB0aGUgcGMNCisg ICAgIG9mIHRoZSBmcmFtZSBwbHVzIGFuIGFkanVzdG1lbnQgZm9yIGFyZ3Vt ZW50IG1vdmUgaW5zbnMuICAqLw0KKw0KKyAgcmV0dXJuIHBjICsgYXZyX3Nj YW5fYXJnX21vdmVzICh2cGMsIHByb2xvZ3VlKTs7DQogfQ0KIA0KLS8qIFRo aXMgZnVuY3Rpb24gYWN0dWFsbHkgZmlndXJlcyBvdXQgdGhlIGZyYW1lIGFk ZHJlc3MgZm9yIGEgZ2l2ZW4gcGMgYW5kDQotICAgc3AuICBUaGlzIGlzIHRy aWNreSAgYmVjYXVzZSB3ZSBzb21ldGltZXMgZG9uJ3QgdXNlIGFuIGV4cGxp Y2l0DQotICAgZnJhbWUgcG9pbnRlciwgYW5kIHRoZSBwcmV2aW91cyBzdGFj ayBwb2ludGVyIGlzbid0IG5lY2Vzc2FyaWx5IHJlY29yZGVkDQotICAgb24g dGhlIHN0YWNrLiAgVGhlIG9ubHkgcmVsaWFibGUgd2F5IHRvIGdldCB0aGlz IGluZm8gaXMgdG8NCi0gICBleGFtaW5lIHRoZSBwcm9sb2d1ZS4gICovDQor LyogUmV0dXJucyB0aGUgcmV0dXJuIGFkZHJlc3MgZm9yIGEgZHVtbXkuICov DQogDQotc3RhdGljIHZvaWQNCi1hdnJfaW5pdF9leHRyYV9mcmFtZV9pbmZv IChpbnQgZnJvbWxlYWYsIHN0cnVjdCBmcmFtZV9pbmZvICpmaSkNCitzdGF0 aWMgQ09SRV9BRERSDQorYXZyX2NhbGxfZHVtbXlfYWRkcmVzcyAodm9pZCkN CiB7DQotICBpbnQgcmVnOw0KKyAgcmV0dXJuIGVudHJ5X3BvaW50X2FkZHJl c3MgKCk7DQorfQ0KIA0KLSAgaWYgKGdldF9uZXh0X2ZyYW1lIChmaSkpDQot ICAgIGRlcHJlY2F0ZWRfdXBkYXRlX2ZyYW1lX3BjX2hhY2sgKGZpLCBERVBS RUNBVEVEX0ZSQU1FX1NBVkVEX1BDIChnZXRfbmV4dF9mcmFtZSAoZmkpKSk7 DQorc3RhdGljIENPUkVfQUREUg0KK2F2cl9za2lwX3Byb2xvZ3VlIChDT1JF X0FERFIgcGMpDQorew0KKyAgQ09SRV9BRERSIGZ1bmNfYWRkciwgZnVuY19l bmQ7DQorICBDT1JFX0FERFIgcHJvbG9ndWVfZW5kID0gcGM7DQogDQotICBm cmFtZV9leHRyYV9pbmZvX3phbGxvYyAoZmksIHNpemVvZiAoc3RydWN0IGZy YW1lX2V4dHJhX2luZm8pKTsNCi0gIGZyYW1lX3NhdmVkX3JlZ3NfemFsbG9j IChmaSk7DQorICAvKiBTZWUgd2hhdCB0aGUgc3ltYm9sIHRhYmxlIHNheXMg Ki8NCiANCi0gIGdldF9mcmFtZV9leHRyYV9pbmZvIChmaSktPnJldHVybl9w YyA9IDA7DQotICBnZXRfZnJhbWVfZXh0cmFfaW5mbyAoZmkpLT5hcmdzX3Bv aW50ZXIgPSAwOw0KLSAgZ2V0X2ZyYW1lX2V4dHJhX2luZm8gKGZpKS0+bG9j YWxzX3NpemUgPSAwOw0KLSAgZ2V0X2ZyYW1lX2V4dHJhX2luZm8gKGZpKS0+ ZnJhbWVyZWcgPSAwOw0KLSAgZ2V0X2ZyYW1lX2V4dHJhX2luZm8gKGZpKS0+ ZnJhbWVzaXplID0gMDsNCi0gIGdldF9mcmFtZV9leHRyYV9pbmZvIChmaSkt PmlzX21haW4gPSAwOw0KKyAgaWYgKGZpbmRfcGNfcGFydGlhbF9mdW5jdGlv biAocGMsIE5VTEwsICZmdW5jX2FkZHIsICZmdW5jX2VuZCkpDQorICAgIHsN CisgICAgICBzdHJ1Y3Qgc3ltdGFiX2FuZF9saW5lIHNhbDsNCisgICAgICBz dHJ1Y3QgYXZyX3Vud2luZF9jYWNoZSBpbmZvID0gezB9Ow0KKyAgICAgIHN0 cnVjdCB0cmFkX2ZyYW1lX3NhdmVkX3JlZyBzYXZlZF9yZWdzW0FWUl9OVU1f UkVHU107DQogDQotICBhdnJfc2Nhbl9wcm9sb2d1ZSAoZmkpOw0KKyAgICAg IGluZm8uc2F2ZWRfcmVncyA9IHNhdmVkX3JlZ3M7DQogDQotICBpZiAoREVQ UkVDQVRFRF9QQ19JTl9DQUxMX0RVTU1ZIChnZXRfZnJhbWVfcGMgKGZpKSwg Z2V0X2ZyYW1lX2Jhc2UgKGZpKSwNCi0JCQkJICAgZ2V0X2ZyYW1lX2Jhc2Ug KGZpKSkpDQotICAgIHsNCi0gICAgICAvKiBXZSBuZWVkIHRvIHNldHVwIGZp LT5mcmFtZSBoZXJlIGJlY2F1c2UgY2FsbF9mdW5jdGlvbl9ieV9oYW5kDQot ICAgICAgICAgZ2V0cyBpdCB3cm9uZyBieSBhc3N1bWluZyBpdCdzIGFsd2F5 cyBGUC4gICovDQotICAgICAgZGVwcmVjYXRlZF91cGRhdGVfZnJhbWVfYmFz ZV9oYWNrIChmaSwgZGVwcmVjYXRlZF9yZWFkX3JlZ2lzdGVyX2R1bW15IChn ZXRfZnJhbWVfcGMgKGZpKSwgZ2V0X2ZyYW1lX2Jhc2UgKGZpKSwNCi0JCQkJ CQkJCQkgICAgIEFWUl9QQ19SRUdOVU0pKTsNCi0gICAgfQ0KLSAgZWxzZSBp ZiAoIWdldF9uZXh0X2ZyYW1lIChmaSkpDQotICAgIC8qIHRoaXMgaXMgdGhl IGlubmVybW9zdCBmcmFtZT8gKi8NCi0gICAgZGVwcmVjYXRlZF91cGRhdGVf ZnJhbWVfYmFzZV9oYWNrIChmaSwgcmVhZF9yZWdpc3RlciAoZ2V0X2ZyYW1l X2V4dHJhX2luZm8gKGZpKS0+ZnJhbWVyZWcpKTsNCi0gIGVsc2UgaWYgKGdl dF9mcmFtZV9leHRyYV9pbmZvIChmaSktPmlzX21haW4gIT0gMSkNCi0gICAg Lyogbm90IHRoZSBpbm5lcm1vc3QgZnJhbWUsIG5vdCBgbWFpbicgKi8NCi0g ICAgLyogSWYgd2UgaGF2ZSBhbiBuZXh0IGZyYW1lLCAgdGhlIGNhbGxlZSBz YXZlZCBpdC4gKi8NCi0gICAgew0KLSAgICAgIHN0cnVjdCBmcmFtZV9pbmZv ICpuZXh0X2ZpID0gZ2V0X25leHRfZnJhbWUgKGZpKTsNCi0gICAgICBpZiAo Z2V0X2ZyYW1lX2V4dHJhX2luZm8gKGZpKS0+ZnJhbWVyZWcgPT0gQVZSX1NQ X1JFR05VTSkNCi0JZGVwcmVjYXRlZF91cGRhdGVfZnJhbWVfYmFzZV9oYWNr IChmaSwgKGdldF9mcmFtZV9iYXNlIChuZXh0X2ZpKQ0KLQkJCQkJCSsgMiAv KiByZXQgYWRkciAqLw0KLQkJCQkJCSsgZ2V0X2ZyYW1lX2V4dHJhX2luZm8g KG5leHRfZmkpLT5mcmFtZXNpemUpKTsNCi0gICAgICAvKiBGSVhNRTogSSBk b24ndCBhbmFseXNlIHZhX2FyZ3MgZnVuY3Rpb25zICAqLw0KLSAgICAgIGVs c2UNCi0Jew0KLQkgIENPUkVfQUREUiBmcCA9IDA7DQotCSAgQ09SRV9BRERS IGZwMSA9IDA7DQotCSAgdW5zaWduZWQgaW50IGZwX2xvdywgZnBfaGlnaDsN CisgICAgICAvKiBOZWVkIHRvIHJ1biB0aGUgcHJvbG9ndWUgc2Nhbm5lciB0 byBmaWd1cmUgb3V0IGlmIHRoZSBmdW5jdGlvbiBoYXMgYQ0KKyAgICAgICAg IHByb2xvZ3VlIGFuZCBwb3NzaWJseSBza2lwIG92ZXIgbW92aW5nIGFyZ3Vt ZW50cyBwYXNzZWQgdmlhIHJlZ2lzdGVycw0KKyAgICAgICAgIHRvIG90aGVy IHJlZ2lzdGVycy4gICovDQogDQotCSAgLyogU2NhbiBhbGwgZnJhbWVzICov DQotCSAgZm9yICg7IG5leHRfZmk7IG5leHRfZmkgPSBnZXRfbmV4dF9mcmFt ZSAobmV4dF9maSkpDQotCSAgICB7DQotCSAgICAgIC8qIGxvb2sgZm9yIHNh dmVkIEFWUl9GUF9SRUdOVU0gKi8NCi0JICAgICAgaWYgKGdldF9mcmFtZV9z YXZlZF9yZWdzIChuZXh0X2ZpKVtBVlJfRlBfUkVHTlVNXSAmJiAhZnApDQot CQlmcCA9IGdldF9mcmFtZV9zYXZlZF9yZWdzIChuZXh0X2ZpKVtBVlJfRlBf UkVHTlVNXTsNCi0JICAgICAgLyogbG9vayBmb3Igc2F2ZWQgQVZSX0ZQX1JF R05VTSArIDEgKi8NCi0JICAgICAgaWYgKGdldF9mcmFtZV9zYXZlZF9yZWdz IChuZXh0X2ZpKVtBVlJfRlBfUkVHTlVNICsgMV0gJiYgIWZwMSkNCi0JCWZw MSA9IGdldF9mcmFtZV9zYXZlZF9yZWdzIChuZXh0X2ZpKVtBVlJfRlBfUkVH TlVNICsgMV07DQotCSAgICB9DQotCSAgZnBfbG93ID0gKGZwID8gcmVhZF9t ZW1vcnlfdW5zaWduZWRfaW50ZWdlciAoYXZyX21ha2Vfc2FkZHIgKGZwKSwg MSkNCi0JCSAgICA6IHJlYWRfcmVnaXN0ZXIgKEFWUl9GUF9SRUdOVU0pKSAm IDB4ZmY7DQotCSAgZnBfaGlnaCA9DQotCSAgICAoZnAxID8gcmVhZF9tZW1v cnlfdW5zaWduZWRfaW50ZWdlciAoYXZyX21ha2Vfc2FkZHIgKGZwMSksIDEp IDoNCi0JICAgICByZWFkX3JlZ2lzdGVyIChBVlJfRlBfUkVHTlVNICsgMSkp ICYgMHhmZjsNCi0JICBkZXByZWNhdGVkX3VwZGF0ZV9mcmFtZV9iYXNlX2hh Y2sgKGZpLCBmcF9sb3cgfCAoZnBfaGlnaCA8PCA4KSk7DQotCX0NCi0gICAg fQ0KKyAgICAgIHByb2xvZ3VlX2VuZCA9IGF2cl9zY2FuX3Byb2xvZ3VlIChw YywgJmluZm8pOw0KIA0KLSAgLyogVFJvdGg6IERvIHdlIHdhbnQgdG8gZG8g dGhpcyBpZiB3ZSBhcmUgaW4gbWFpbj8gSSBkb24ndCB0aGluayB3ZSBzaG91 bGQNCi0gICAgIHNpbmNlIHJldHVybl9wYyBtYWtlcyBubyBzZW5zZSB3aGVu IHdlIGFyZSBpbiBtYWluLiAqLw0KKyAgICAgIGlmIChpbmZvLnByb2xvZ3Vl X3R5cGUgIT0gQVZSX1BST0xPR1VFX05PTkUpDQorICAgICAgICB7DQorICAg ICAgICAgIHNhbCA9IGZpbmRfcGNfbGluZSAoZnVuY19hZGRyLCAwKTsNCiAN Ci0gIGlmICgoZ2V0X2ZyYW1lX3BjIChmaSkpICYmIChnZXRfZnJhbWVfZXh0 cmFfaW5mbyAoZmkpLT5pc19tYWluID09IDApKQ0KLSAgICAvKiBXZSBhcmUg bm90IGluIENBTExfRFVNTVkgKi8NCi0gICAgew0KLSAgICAgIENPUkVfQURE UiBhZGRyOw0KLSAgICAgIGludCBpOw0KKyAgICAgICAgICBpZiAoc2FsLmxp bmUgIT0gMCAmJiBzYWwuZW5kIDwgZnVuY19lbmQpDQorICAgICAgICAgICAg cmV0dXJuIHNhbC5lbmQ7DQorICAgICAgICB9DQorICAgIH0NCiANCi0gICAg ICBhZGRyID0gZ2V0X2ZyYW1lX2Jhc2UgKGZpKSArIGdldF9mcmFtZV9leHRy YV9pbmZvIChmaSktPmZyYW1lc2l6ZSArIDE7DQorLyogRWl0aGVyIHdlIGRp ZG4ndCBmaW5kIHRoZSBzdGFydCBvZiB0aGlzIGZ1bmN0aW9uIChub3RoaW5n IHdlIGNhbiBkbyksDQorICAgb3IgdGhlcmUncyBubyBsaW5lIGluZm8sIG9y IHRoZSBsaW5lIGFmdGVyIHRoZSBwcm9sb2d1ZSBpcyBhZnRlcg0KKyAgIHRo ZSBlbmQgb2YgdGhlIGZ1bmN0aW9uICh0aGVyZSBwcm9iYWJseSBpc24ndCBh IHByb2xvZ3VlKS4gKi8NCiANCi0gICAgICAvKiBSZXR1cm4gYWRkcmVzcyBp biBzdGFjayBpbiBkaWZmZXJlbnQgZW5kaWFubmVzcyAqLw0KKyAgcmV0dXJu IHByb2xvZ3VlX2VuZDsNCit9DQogDQotICAgICAgZ2V0X2ZyYW1lX2V4dHJh X2luZm8gKGZpKS0+cmV0dXJuX3BjID0NCi0JcmVhZF9tZW1vcnlfdW5zaWdu ZWRfaW50ZWdlciAoYXZyX21ha2Vfc2FkZHIgKGFkZHIpLCAxKSA8PCA4Ow0K LSAgICAgIGdldF9mcmFtZV9leHRyYV9pbmZvIChmaSktPnJldHVybl9wYyB8 PQ0KLQlyZWFkX21lbW9yeV91bnNpZ25lZF9pbnRlZ2VyIChhdnJfbWFrZV9z YWRkciAoYWRkciArIDEpLCAxKTsNCitzdGF0aWMgQ09SRV9BRERSDQorYXZy X2ZyYW1lX2FkZHJlc3MgKHN0cnVjdCBmcmFtZV9pbmZvICpmaSkNCit7DQor ICByZXR1cm4gYXZyX21ha2Vfc2FkZHIgKGdldF9mcmFtZV9iYXNlIChmaSkp Ow0KK30NCiANCi0gICAgICAvKiBUaGlzIHJldHVybiBhZGRyZXNzIGluIHdv cmRzLA0KLSAgICAgICAgIG11c3QgYmUgY29udmVydGVkIHRvIHRoZSBieXRl cyBhZGRyZXNzICovDQotICAgICAgZ2V0X2ZyYW1lX2V4dHJhX2luZm8gKGZp KS0+cmV0dXJuX3BjICo9IDI7DQorLyogTm90IGFsbCBhdnIgZGV2aWNlcyBz dXBwb3J0IHRoZSBCUkVBSyBpbnNuLiBUaG9zZSB0aGF0IGRvbid0IHNob3Vs ZCB0cmVhdA0KKyAgIGl0IGFzIGEgTk9QLiBUaHVzLCBpdCBzaG91bGQgYmUg b2suIFNpbmNlIHRoZSBhdnIgaXMgY3VycmVudGx5IGEgcmVtb3RlDQorICAg b25seSB0YXJnZXQsIHRoaXMgc2hvdWxkbid0IGJlIGEgcHJvYmxlbSAoSSBo b3BlKS4gVFJvdGgvMjAwMy0wNS0xNCAgKi8NCiANCi0gICAgICAvKiBSZXNv bHZlIGEgcHVzaGVkIHJlZ2lzdGVycyBhZGRyZXNzZXMgKi8NCi0gICAgICBm b3IgKGkgPSAwOyBpIDwgTlVNX1JFR1M7IGkrKykNCi0Jew0KLQkgIGlmIChn ZXRfZnJhbWVfc2F2ZWRfcmVncyAoZmkpW2ldKQ0KLQkgICAgZ2V0X2ZyYW1l X3NhdmVkX3JlZ3MgKGZpKVtpXSA9IGFkZHIgLSBnZXRfZnJhbWVfc2F2ZWRf cmVncyAoZmkpW2ldOw0KLQl9DQotICAgIH0NCitzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciAqDQorYXZyX2JyZWFrcG9pbnRfZnJvbV9wYyAoQ09SRV9B RERSICogcGNwdHIsIGludCAqbGVucHRyKQ0KK3sNCisgICAgc3RhdGljIHVu c2lnbmVkIGNoYXIgYXZyX2JyZWFrX2luc24gW10gPSB7IDB4OTgsIDB4OTUg fTsNCisgICAgKmxlbnB0ciA9IHNpemVvZiAoYXZyX2JyZWFrX2luc24pOw0K KyAgICByZXR1cm4gYXZyX2JyZWFrX2luc247DQogfQ0KIA0KLS8qIFJlc3Rv cmUgdGhlIG1hY2hpbmUgdG8gdGhlIHN0YXRlIGl0IGhhZCBiZWZvcmUgdGhl IGN1cnJlbnQgZnJhbWUgd2FzDQotICAgY3JlYXRlZC4gIFVzdWFsbHkgdXNl ZCBlaXRoZXIgYnkgdGhlICJSRVRVUk4iIGNvbW1hbmQsIG9yIGJ5DQotICAg Y2FsbF9mdW5jdGlvbl9ieV9oYW5kIGFmdGVyIHRoZSBkdW1teV9mcmFtZSBp cyBmaW5pc2hlZC4gKi8NCisvKiBHaXZlbiBhIHJldHVybiB2YWx1ZSBpbiBg cmVnYnVmJyB3aXRoIGEgdHlwZSBgdmFsdHlwZScsIA0KKyAgIGV4dHJhY3Qg YW5kIGNvcHkgaXRzIHZhbHVlIGludG8gYHZhbGJ1ZicuDQorDQorICAgUmV0 dXJuIHZhbHVlcyBhcmUgYWx3YXlzIHBhc3NlZCB2aWEgcmVnaXN0ZXJzIHIy NTpyMjQ6Li4uICAqLw0KIA0KIHN0YXRpYyB2b2lkDQotYXZyX3BvcF9mcmFt ZSAodm9pZCkNCithdnJfZXh0cmFjdF9yZXR1cm5fdmFsdWUgKHN0cnVjdCB0 eXBlICp0eXBlLCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdmFsYnVmKQ0KIHsNCi0gIHVu c2lnbmVkIHJlZ251bTsNCi0gIENPUkVfQUREUiBzYWRkcjsNCi0gIHN0cnVj dCBmcmFtZV9pbmZvICpmcmFtZSA9IGdldF9jdXJyZW50X2ZyYW1lICgpOw0K LQ0KLSAgaWYgKERFUFJFQ0FURURfUENfSU5fQ0FMTF9EVU1NWSAoZ2V0X2Zy YW1lX3BjIChmcmFtZSksDQotCQkJCSAgIGdldF9mcmFtZV9iYXNlIChmcmFt ZSksDQotCQkJCSAgIGdldF9mcmFtZV9iYXNlIChmcmFtZSkpKQ0KKyAgVUxP TkdFU1QgcjI0LCByMjU7DQorICBVTE9OR0VTVCBjOw0KKyAgaW50IGxlbjsN CisgIGlmIChUWVBFX0xFTkdUSCAodHlwZSkgPT0gMSkNCiAgICAgew0KLSAg ICAgIGdlbmVyaWNfcG9wX2R1bW15X2ZyYW1lICgpOw0KKyAgICAgIHJlZ2Nh Y2hlX2Nvb2tlZF9yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgMjQsICZjKTsN CisgICAgICBzdG9yZV91bnNpZ25lZF9pbnRlZ2VyICh2YWxidWYsIDEsIGMp Ow0KICAgICB9DQogICBlbHNlDQogICAgIHsNCi0gICAgICAvKiBUUm90aDog V2h5IG9ubHkgbG9vcCBvdmVyIDggcmVnaXN0ZXJzPyAqLw0KLQ0KLSAgICAg IGZvciAocmVnbnVtID0gMDsgcmVnbnVtIDwgODsgcmVnbnVtKyspDQotCXsN Ci0JICAvKiBEb24ndCBmb3JnZXQgQVZSX1NQX1JFR05VTSBpbiBhIGZyYW1l X3NhdmVkX3JlZ3Mgc3RydWN0IGlzIHRoZQ0KLQkgICAgIGFjdHVhbCB2YWx1 ZSB3ZSB3YW50LCBub3QgdGhlIGFkZHJlc3Mgb2YgdGhlIHZhbHVlIHdlIHdh bnQuICAqLw0KLQkgIGlmIChnZXRfZnJhbWVfc2F2ZWRfcmVncyAoZnJhbWUp W3JlZ251bV0gJiYgcmVnbnVtICE9IEFWUl9TUF9SRUdOVU0pDQotCSAgICB7 DQotCSAgICAgIHNhZGRyID0gYXZyX21ha2Vfc2FkZHIgKGdldF9mcmFtZV9z YXZlZF9yZWdzIChmcmFtZSlbcmVnbnVtXSk7DQotCSAgICAgIHdyaXRlX3Jl Z2lzdGVyIChyZWdudW0sDQotCQkJICAgICAgcmVhZF9tZW1vcnlfdW5zaWdu ZWRfaW50ZWdlciAoc2FkZHIsIDEpKTsNCi0JICAgIH0NCi0JICBlbHNlIGlm IChnZXRfZnJhbWVfc2F2ZWRfcmVncyAoZnJhbWUpW3JlZ251bV0gJiYgcmVn bnVtID09IEFWUl9TUF9SRUdOVU0pDQotCSAgICB3cml0ZV9yZWdpc3RlciAo cmVnbnVtLCBnZXRfZnJhbWVfYmFzZSAoZnJhbWUpICsgMik7DQotCX0NCisg ICAgICBpbnQgaTsNCisgICAgICAvKiBUaGUgTVNCIG9mIHRoZSByZXR1cm4g dmFsdWUgaXMgYWx3YXlzIGluIHIyNSwgY2FsY3VsYXRlIHdoaWNoDQorICAg ICAgICAgcmVnaXN0ZXIgaG9sZHMgdGhlIExTQi4gICovDQorICAgICAgaW50 IGxzYl9yZWcgPSAyNSAtIFRZUEVfTEVOR1RIICh0eXBlKSArIDE7DQogDQot ICAgICAgLyogRG9uJ3QgZm9yZ2V0IHRoZSB1cGRhdGUgdGhlIFBDIHRvbyEg ICovDQotICAgICAgd3JpdGVfcGMgKGdldF9mcmFtZV9leHRyYV9pbmZvIChm cmFtZSktPnJldHVybl9wYyk7DQorICAgICAgZm9yIChpPTA7IGk8IFRZUEVf TEVOR1RIICh0eXBlKTsgaSsrKQ0KKyAgICAgICAgew0KKyAgICAgICAgICBy ZWdjYWNoZV9jb29rZWRfcmVhZCAocmVnY2FjaGUsIGxzYl9yZWcgKyBpLA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJmZF9ieXRlICop IHZhbGJ1ZiArIGkpOw0KKyAgICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQg KGdkYl9zdGRlcnIsICJyZWcgPSAlZCAoMHglMDJ4KVxuIiwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsc2JfcmVnK2ksICooKHVuc2lnbmVk IGNoYXIgKil2YWxidWYraSkpOw0KKyAgICAgICAgfQ0KICAgICB9DQotICBm bHVzaF9jYWNoZWRfZnJhbWVzICgpOw0KIH0NCiANCi0vKiBSZXR1cm4gdGhl IHNhdmVkIFBDIGZyb20gdGhpcyBmcmFtZS4gKi8NCi0NCi1zdGF0aWMgQ09S RV9BRERSDQotYXZyX2ZyYW1lX3NhdmVkX3BjIChzdHJ1Y3QgZnJhbWVfaW5m byAqZnJhbWUpDQotew0KLSAgaWYgKERFUFJFQ0FURURfUENfSU5fQ0FMTF9E VU1NWSAoZ2V0X2ZyYW1lX3BjIChmcmFtZSksDQotCQkJCSAgIGdldF9mcmFt ZV9iYXNlIChmcmFtZSksDQotCQkJCSAgIGdldF9mcmFtZV9iYXNlIChmcmFt ZSkpKQ0KLSAgICByZXR1cm4gZGVwcmVjYXRlZF9yZWFkX3JlZ2lzdGVyX2R1 bW15IChnZXRfZnJhbWVfcGMgKGZyYW1lKSwNCi0JCQkJCSAgIGdldF9mcmFt ZV9iYXNlIChmcmFtZSksDQotCQkJCQkgICBBVlJfUENfUkVHTlVNKTsNCi0g IGVsc2UNCi0gICAgcmV0dXJuIGdldF9mcmFtZV9leHRyYV9pbmZvIChmcmFt ZSktPnJldHVybl9wYzsNCi19DQorc3RhdGljIHZvaWQNCithdnJfc2F2ZWRf cmVnc191bndpbmRlciAoc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUs DQorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0cmFkX2ZyYW1l X3NhdmVkX3JlZyAqdGhpc19zYXZlZF9yZWdzLA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgcmVnbnVtLCBpbnQgKm9wdGltaXplZHAsDQorICAg ICAgICAgICAgICAgICAgICAgICAgIGVudW0gbHZhbF90eXBlICpsdmFscCwg Q09SRV9BRERSICphZGRycCwNCisgICAgICAgICAgICAgICAgICAgICAgICAg aW50ICpyZWFsbnVtcCwgdm9pZCAqYnVmZmVycCkNCit7DQorICBpZiAodGhp c19zYXZlZF9yZWdzW3JlZ251bV0uYWRkciAhPSAwKQ0KKyAgICB7DQorICAg ICAgKm9wdGltaXplZHAgPSAwOw0KKyAgICAgICpsdmFscCA9IGx2YWxfbWVt b3J5Ow0KKyAgICAgICphZGRycCA9IHRoaXNfc2F2ZWRfcmVnc1tyZWdudW1d LmFkZHI7DQorICAgICAgKnJlYWxudW1wID0gLTE7DQorICAgICAgaWYgKGJ1 ZmZlcnAgIT0gTlVMTCkNCisgICAgICAgIHsNCisgICAgICAgICAgLyogUmVh ZCB0aGUgdmFsdWUgaW4gZnJvbSBtZW1vcnkuICAqLw0KIA0KLXN0YXRpYyBD T1JFX0FERFINCi1hdnJfc2F2ZWRfcGNfYWZ0ZXJfY2FsbCAoc3RydWN0IGZy YW1lX2luZm8gKmZyYW1lKQ0KLXsNCi0gIHVuc2lnbmVkIGNoYXIgbTEsIG0y Ow0KLSAgdW5zaWduZWQgaW50IHNwID0gcmVhZF9yZWdpc3RlciAoQVZSX1NQ X1JFR05VTSk7DQotICBtMSA9IHJlYWRfbWVtb3J5X3Vuc2lnbmVkX2ludGVn ZXIgKGF2cl9tYWtlX3NhZGRyIChzcCArIDEpLCAxKTsNCi0gIG0yID0gcmVh ZF9tZW1vcnlfdW5zaWduZWRfaW50ZWdlciAoYXZyX21ha2Vfc2FkZHIgKHNw ICsgMiksIDEpOw0KLSAgcmV0dXJuIChtMiB8IChtMSA8PCA4KSkgKiAyOw0K LX0NCisgICAgICAgICAgaWYgKHJlZ251bSA9PSBBVlJfUENfUkVHTlVNKQ0K KyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgIC8qIFJlYWRpbmcgdGhl IHJldHVybiBQQyBmcm9tIHRoZSBQQyByZWdpc3RlciBpcyBzbGlnaHRseQ0K KyAgICAgICAgICAgICAgICAgYWJub3JtYWwuICByZWdpc3Rlcl9zaXplKEFW Ul9QQ19SRUdOVU0pIHNheXMgaXQgaXMgNCBieXRlcywNCisgICAgICAgICAg ICAgICAgIGJ1dCBpbiByZWFsaXR5LCBvbmx5IHR3byBieXRlcyAoMyBpbiB1 cGNvbWluZyBtZWdhMjU2KSBhcmUNCisgICAgICAgICAgICAgICAgIHN0b3Jl ZCBvbiB0aGUgc3RhY2suDQorDQorICAgICAgICAgICAgICAgICBBbHNvLCBu b3RlIHRoYXQgdGhlIHZhbHVlIG9uIHRoZSBzdGFjayBpcyBhbiBhZGRyIHRv IGEgd29yZA0KKyAgICAgICAgICAgICAgICAgbm90IGEgYnl0ZSwgc28gd2Ug d2lsbCBuZWVkIHRvIG11bHRpcGx5IGl0IGJ5IHR3byBhdCBzb21lDQorICAg ICAgICAgICAgICAgICBwb2ludC4gDQorDQorICAgICAgICAgICAgICAgICBB bmQgdG8gY29uZnVzZSBtYXR0ZXJzIGV2ZW4gbW9yZSwgdGhlIHJldHVybiBh ZGRyZXNzIHN0b3JlZA0KKyAgICAgICAgICAgICAgICAgb24gdGhlIHN0YWNr IGlzIGluIGJpZyBlbmRpYW4gYnl0ZSBvcmRlciwgZXZlbiB0aG91Z2ggbW9z dA0KKyAgICAgICAgICAgICAgICAgZXZlcnl0aGluZyBlbHNlIGFib3V0IHRo ZSBhdnIgaXMgbGl0dGxlIGVuZGlhbi4gSWNrISAgKi8NCisNCisgICAgICAg ICAgICAgIC8qIEZJWE1FOiBudW1iZXIgb2YgYnl0ZXMgcmVhZCBoZXJlIHdp bGwgbmVlZCB1cGRhdGVkIGZvciB0aGUNCisgICAgICAgICAgICAgICAgIG1l Z2EyNTYgd2hlbiBpdCBpcyBhdmFpbGFibGUuICAqLw0KKw0KKyAgICAgICAg ICAgICAgVUxPTkdFU1QgcGM7DQorICAgICAgICAgICAgICB1bnNpZ25lZCBj aGFyIHRtcDsNCisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmWzJd Ow0KKw0KKyAgICAgICAgICAgICAgcmVhZF9tZW1vcnkgKHRoaXNfc2F2ZWRf cmVnc1tyZWdudW1dLmFkZHIsIGJ1ZiwgMik7DQorDQorICAgICAgICAgICAg ICAvKiBDb252ZXJ0IHRoZSBQQyByZWFkIGZyb20gbWVtb3J5IGFzIGEgYmln LWVuZGlhbiB0bw0KKyAgICAgICAgICAgICAgICAgbGl0dGxlLWVuZGlhbiBv cmRlci4gKi8NCisgICAgICAgICAgICAgIHRtcCA9IGJ1ZlswXTsNCisgICAg ICAgICAgICAgIGJ1ZlswXSA9IGJ1ZlsxXTsNCisgICAgICAgICAgICAgIGJ1 ZlsxXSA9IHRtcDsNCisNCisgICAgICAgICAgICAgIHBjID0gKGV4dHJhY3Rf dW5zaWduZWRfaW50ZWdlciAoYnVmLCAyKSAqIDIpOw0KKyAgICAgICAgICAg ICAgc3RvcmVfdW5zaWduZWRfaW50ZWdlciAoYnVmZmVycCwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX3NpemUg KGN1cnJlbnRfZ2RiYXJjaCwgcmVnbnVtKSwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBjKTsNCisgICAgICAgICAgICB9DQor ICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAg ICByZWFkX21lbW9yeSAodGhpc19zYXZlZF9yZWdzW3JlZ251bV0uYWRkciwg YnVmZmVycCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rl cl9zaXplIChjdXJyZW50X2dkYmFyY2gsIHJlZ251bSkpOw0KKyAgICAgICAg ICAgIH0NCisgICAgICAgIH0NCiANCi0vKiBSZXR1cm5zIHRoZSByZXR1cm4g YWRkcmVzcyBmb3IgYSBkdW1teS4gKi8NCisgICAgICByZXR1cm47DQorICAg IH0NCiANCi1zdGF0aWMgQ09SRV9BRERSDQotYXZyX2NhbGxfZHVtbXlfYWRk cmVzcyAodm9pZCkNCi17DQotICByZXR1cm4gZW50cnlfcG9pbnRfYWRkcmVz cyAoKTsNCisgIC8qIE5vIGx1Y2ssIGFzc3VtZSB0aGlzIGFuZCB0aGUgbmV4 dCBmcmFtZSBoYXZlIHRoZSBzYW1lIHJlZ2lzdGVyDQorICAgICB2YWx1ZS4g IElmIGEgdmFsdWUgaXMgbmVlZGVkLCBwYXNzIHRoZSByZXF1ZXN0IG9uIGRv d24gdGhlIGNoYWluOw0KKyAgICAgb3RoZXJ3aXNlIGp1c3QgcmV0dXJuIGFu IGluZGljYXRpb24gdGhhdCB0aGUgdmFsdWUgaXMgaW4gdGhlIHNhbWUNCisg ICAgIHJlZ2lzdGVyIGFzIHRoZSBuZXh0IGZyYW1lLiAgKi8NCisgIGZyYW1l X3JlZ2lzdGVyX3Vud2luZCAobmV4dF9mcmFtZSwgcmVnbnVtLCBvcHRpbWl6 ZWRwLCBsdmFscCwgYWRkcnAsDQorCQkJIHJlYWxudW1wLCBidWZmZXJwKTsN CiB9DQogDQotLyogU2V0dXAgdGhlIHJldHVybiBhZGRyZXNzIGZvciBhIGR1 bW15IGZyYW1lLCBhcyBjYWxsZWQgYnkNCi0gICBjYWxsX2Z1bmN0aW9uX2J5 X2hhbmQuICBPbmx5IG5lY2Vzc2FyeSB3aGVuIHlvdSBhcmUgdXNpbmcgYW4g ZW1wdHkNCi0gICBDQUxMX0RVTU1ZLiAqLw0KKy8qIFB1dCBoZXJlIHRoZSBj b2RlIHRvIHN0b3JlLCBpbnRvIGZpLT5zYXZlZF9yZWdzLCB0aGUgYWRkcmVz c2VzIG9mDQorICAgdGhlIHNhdmVkIHJlZ2lzdGVycyBvZiBmcmFtZSBkZXNj cmliZWQgYnkgRlJBTUVfSU5GTy4gIFRoaXMNCisgICBpbmNsdWRlcyBzcGVj aWFsIHJlZ2lzdGVycyBzdWNoIGFzIHBjIGFuZCBmcCBzYXZlZCBpbiBzcGVj aWFsIHdheXMNCisgICBpbiB0aGUgc3RhY2sgZnJhbWUuICBzcCBpcyBldmVu IG1vcmUgc3BlY2lhbDogdGhlIGFkZHJlc3Mgd2UgcmV0dXJuDQorICAgZm9y IGl0IElTIHRoZSBzcCBmb3IgdGhlIG5leHQgZnJhbWUuICovDQogDQotc3Rh dGljIENPUkVfQUREUg0KLWF2cl9wdXNoX3JldHVybl9hZGRyZXNzIChDT1JF X0FERFIgcGMsIENPUkVfQUREUiBzcCkNCitzdHJ1Y3QgYXZyX3Vud2luZF9j YWNoZSAqDQorYXZyX2ZyYW1lX3Vud2luZF9jYWNoZSAoc3RydWN0IGZyYW1l X2luZm8gKm5leHRfZnJhbWUsDQorICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqKnRoaXNfcHJvbG9ndWVfY2FjaGUpDQogew0KLSAgdW5zaWduZWQg Y2hhciBidWZbMl07DQotICBpbnQgd29yZHNpemUgPSAyOw0KLSNpZiAwDQot ICBzdHJ1Y3QgbWluaW1hbF9zeW1ib2wgKm1zeW1ib2w7DQotICBDT1JFX0FE RFIgbW9uX2JyazsNCi0jZW5kaWYNCisgIENPUkVfQUREUiBwYzsNCisgIFVM T05HRVNUIHByZXZfc3A7DQorICBVTE9OR0VTVCB0aGlzX2Jhc2U7DQorICBz dHJ1Y3QgYXZyX3Vud2luZF9jYWNoZSAqaW5mbzsNCisgIGludCBpOw0KIA0K LSAgYnVmWzBdID0gMDsNCi0gIGJ1ZlsxXSA9IDA7DQotICBzcCAtPSB3b3Jk c2l6ZTsNCi0gIHdyaXRlX21lbW9yeSAoc3AgKyAxLCBidWYsIDIpOw0KKyAg aWYgKCgqdGhpc19wcm9sb2d1ZV9jYWNoZSkpDQorICAgIHJldHVybiAoKnRo aXNfcHJvbG9ndWVfY2FjaGUpOw0KIA0KLSNpZiAwDQotICAvKiBGSVhNRTog VFJvdGgvMjAwMi0wMi0xODogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgcmVt b3ZlZCBzaW5jZSBpdCdzIGENCi0gICAgIGxlZnQtb3ZlciBmcm9tIERlbmlz JyBvcmlnaW5hbCBwYXRjaCB3aGljaCB1c2VkIGF2ci1tb24gZm9yIHRoZSB0 YXJnZXQNCi0gICAgIGluc3RlYWQgb2YgdGhlIGdlbmVyaWMgcmVtb3RlIHRh cmdldC4gKi8NCi0gIGlmICgoc3RyY21wICh0YXJnZXRfc2hvcnRuYW1lLCAi YXZyLW1vbiIpID09IDApDQotICAgICAgJiYgKG1zeW1ib2wgPSBsb29rdXBf bWluaW1hbF9zeW1ib2wgKCJnZGJfYnJlYWsiLCBOVUxMLCBOVUxMKSkpDQor ICBpbmZvID0gRlJBTUVfT0JTVEFDS19aQUxMT0MgKHN0cnVjdCBhdnJfdW53 aW5kX2NhY2hlKTsNCisgICgqdGhpc19wcm9sb2d1ZV9jYWNoZSkgPSBpbmZv Ow0KKyAgaW5mby0+c2F2ZWRfcmVncyA9IHRyYWRfZnJhbWVfYWxsb2Nfc2F2 ZWRfcmVncyAobmV4dF9mcmFtZSk7DQorDQorICBpbmZvLT5zaXplID0gMDsN CisgIGluZm8tPnByb2xvZ3VlX3R5cGUgPSBBVlJfUFJPTE9HVUVfTk9ORTsN CisNCisgIHBjID0gZnJhbWVfZnVuY191bndpbmQgKG5leHRfZnJhbWUpOw0K Kw0KKyAgaWYgKChwYyA+IDApICYmIChwYyA8IGZyYW1lX3BjX3Vud2luZCAo bmV4dF9mcmFtZSkpKQ0KKyAgICBhdnJfc2Nhbl9wcm9sb2d1ZSAocGMsIGlu Zm8pOw0KKw0KKyAgaWYgKGluZm8tPnByb2xvZ3VlX3R5cGUgIT0gQVZSX1BS T0xPR1VFX05PTkUpDQorICAgIHsNCisgICAgICBVTE9OR0VTVCBoaWdoX2Jh c2U7ICAgICAgIC8qIEhpZ2ggYnl0ZSBvZiBGUCAqLw0KKw0KKyAgICAgIC8q IFRoZSBTUCB3YXMgbW92ZWQgdG8gdGhlIEZQLiAgVGhpcyBpbmRpY2F0ZXMg dGhhdCBhIG5ldyBmcmFtZQ0KKyAgICAgICAgIHdhcyBjcmVhdGVkLiAgR2V0 IFRISVMgZnJhbWUncyBGUCB2YWx1ZSBieSB1bndpbmRpbmcgaXQgZnJvbQ0K KyAgICAgICAgIHRoZSBuZXh0IGZyYW1lLiAgKi8NCisgICAgICBmcmFtZV91 bndpbmRfdW5zaWduZWRfcmVnaXN0ZXIgKG5leHRfZnJhbWUsIEFWUl9GUF9S RUdOVU0sICZ0aGlzX2Jhc2UpOw0KKyAgICAgIGZyYW1lX3Vud2luZF91bnNp Z25lZF9yZWdpc3RlciAobmV4dF9mcmFtZSwgQVZSX0ZQX1JFR05VTSsxLCAm aGlnaF9iYXNlKTsNCisgICAgICB0aGlzX2Jhc2UgKz0gKGhpZ2hfYmFzZSA8 PCA4KTsNCisgICAgICANCisgICAgICAvKiBUaGUgRlAgcG9pbnRzIGF0IHRo ZSBsYXN0IHNhdmVkIHJlZ2lzdGVyLiAgQWRqdXN0IHRoZSBGUCBiYWNrDQor ICAgICAgICAgdG8gYmVmb3JlIHRoZSBmaXJzdCBzYXZlZCByZWdpc3RlciBn aXZpbmcgdGhlIFNQLiAgKi8NCisgICAgICBwcmV2X3NwID0gdGhpc19iYXNl ICsgaW5mby0+c2l6ZTsgDQorICAgfQ0KKyAgZWxzZQ0KICAgICB7DQotICAg ICAgbW9uX2JyayA9IFNZTUJPTF9WQUxVRV9BRERSRVNTIChtc3ltYm9sKTsN Ci0gICAgICBzdG9yZV91bnNpZ25lZF9pbnRlZ2VyIChidWYsIHdvcmRzaXpl LCBtb25fYnJrIC8gMik7DQotICAgICAgc3AgLT0gd29yZHNpemU7DQotICAg ICAgd3JpdGVfbWVtb3J5IChzcCArIDEsIGJ1ZiArIDEsIDEpOw0KLSAgICAg IHdyaXRlX21lbW9yeSAoc3AgKyAyLCBidWYsIDEpOw0KKyAgICAgIC8qIEFz c3VtZSB0aGF0IHRoZSBGUCBpcyB0aGlzIGZyYW1lJ3MgU1AgYnV0IHdpdGgg dGhhdCBwdXNoZWQNCisgICAgICAgICBzdGFjayBzcGFjZSBhZGRlZCBiYWNr LiAgKi8NCisgICAgICBmcmFtZV91bndpbmRfdW5zaWduZWRfcmVnaXN0ZXIg KG5leHRfZnJhbWUsIEFWUl9TUF9SRUdOVU0sICZ0aGlzX2Jhc2UpOw0KKyAg ICAgIHByZXZfc3AgPSB0aGlzX2Jhc2UgKyBpbmZvLT5zaXplOw0KICAgICB9 DQotI2VuZGlmDQotICByZXR1cm4gc3A7DQorDQorICAvKiBBZGQgMSBoZXJl IHRvIGFkanVzdCBmb3IgdGhlIHBvc3QtZGVjcmVtZW50IG5hdHVyZSBvZiB0 aGUgcHVzaA0KKyAgICAgaW5zdHJ1Y3Rpb24uKi8NCisgIGluZm8tPnByZXZf c3AgPSBhdnJfbWFrZV9zYWRkciAocHJldl9zcCsxKTsNCisNCisgIGluZm8t PmJhc2UgPSBhdnJfbWFrZV9zYWRkciAodGhpc19iYXNlKTsNCisNCisgIC8q IEFkanVzdCBhbGwgdGhlIHNhdmVkIHJlZ2lzdGVycyBzbyB0aGF0IHRoZXkg Y29udGFpbiBhZGRyZXNzZXMgYW5kIG5vdA0KKyAgICAgb2Zmc2V0cy4gIFdl IG5lZWQgdG8gYWRkIG9uZSB0byB0aGUgYWRkcmVzc2VzIHNpbmNlIHB1c2gg b3BzIGFyZSBwb3N0DQorICAgICBkZWNyZW1lbnQgb24gdGhlIGF2ci4gICov DQorICBmb3IgKGkgPSAwOyBpIDwgTlVNX1JFR1MgLSAxOyBpKyspDQorICAg IGlmIChpbmZvLT5zYXZlZF9yZWdzW2ldLmFkZHIpDQorICAgICAgew0KKyAg ICAgICAgaW5mby0+c2F2ZWRfcmVnc1tpXS5hZGRyID0gKGluZm8tPnByZXZf c3AgLSBpbmZvLT5zYXZlZF9yZWdzW2ldLmFkZHIpOw0KKyAgICAgIH0NCisN CisgIC8qIEV4Y2VwdCBmb3IgdGhlIG1haW4gYW5kIHN0YXJ0dXAgY29kZSwg dGhlIHJldHVybiBQQyBpcyBhbHdheXMgc2F2ZWQgb24NCisgICAgIHRoZSBz dGFjayBhbmQgaXMgYXQgdGhlIGJhc2Ugb2YgdGhlIGZyYW1lLiAqLw0KKw0K KyAgaWYgKGluZm8tPnByb2xvZ3VlX3R5cGUgIT0gQVZSX1BST0xPR1VFX01B SU4pDQorICAgIHsNCisgICAgICBpbmZvLT5zYXZlZF9yZWdzW0FWUl9QQ19S RUdOVU1dLmFkZHIgPSBpbmZvLT5wcmV2X3NwOw0KKyAgICB9ICANCisNCisg IHJldHVybiBpbmZvOw0KIH0NCiANCiBzdGF0aWMgQ09SRV9BRERSDQotYXZy X3NraXBfcHJvbG9ndWUgKENPUkVfQUREUiBwYykNCithdnJfdW53aW5kX3Bj IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgc3RydWN0IGZyYW1lX2luZm8g Km5leHRfZnJhbWUpDQogew0KLSAgQ09SRV9BRERSIGZ1bmNfYWRkciwgZnVu Y19lbmQ7DQotICBzdHJ1Y3Qgc3ltdGFiX2FuZF9saW5lIHNhbDsNCisgIFVM T05HRVNUIHBjOw0KIA0KLSAgLyogU2VlIHdoYXQgdGhlIHN5bWJvbCB0YWJs ZSBzYXlzICovDQorICBmcmFtZV91bndpbmRfdW5zaWduZWRfcmVnaXN0ZXIg KG5leHRfZnJhbWUsIEFWUl9QQ19SRUdOVU0sICZwYyk7DQogDQotICBpZiAo ZmluZF9wY19wYXJ0aWFsX2Z1bmN0aW9uIChwYywgTlVMTCwgJmZ1bmNfYWRk ciwgJmZ1bmNfZW5kKSkNCi0gICAgew0KLSAgICAgIHNhbCA9IGZpbmRfcGNf bGluZSAoZnVuY19hZGRyLCAwKTsNCisgIHJldHVybiBhdnJfbWFrZV9pYWRk ciAocGMpOw0KK30NCiANCi0gICAgICAvKiB0cm90aC8yMDAyLTA4LTA1OiBG b3Igc29tZSB2ZXJ5IHNpbXBsZSBmdW5jdGlvbnMsIGdjYyBkb2Vzbid0DQot ICAgICAgICAgZ2VuZXJhdGUgYSBwcm9sb2d1ZSBhbmQgdGhlIHNhbC5lbmQg ZW5kcyB1cCBiZWluZyB0aGUgMi1ieXRlIGBgcmV0JycNCi0gICAgICAgICBp bnN0cnVjdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiwgYnV0IGZ1 bmNfZW5kIGVuZHMgdXAgYmVpbmcNCi0gICAgICAgICB0aGUgYWRkcmVzcyBv ZiB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gb2YgdGhlIF9uZXh0XyBmdW5jdGlv bi4gQnkNCi0gICAgICAgICBhZGp1c3RpbmcgZnVuY19lbmQgYnkgMiBieXRl cywgd2UgY2FuIGNhdGNoIHRoZXNlIGZ1bmN0aW9ucyBhbmQgbm90DQotICAg ICAgICAgcmV0dXJuIHNhbC5lbmQgaWYgaXQgaXMgdGhlIGBgcmV0JycgaW5z dHJ1Y3Rpb24uICovDQorLyogR2l2ZW4gYSBHREIgZnJhbWUsIGRldGVybWlu ZSB0aGUgYWRkcmVzcyBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbidzDQorICAg ZnJhbWUuICBUaGlzIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgYSBuZXcgR0RC IGZyYW1lIHN0cnVjdC4gICovDQogDQotICAgICAgaWYgKHNhbC5saW5lICE9 IDAgJiYgc2FsLmVuZCA8IChmdW5jX2VuZC0yKSkNCi0JcmV0dXJuIHNhbC5l bmQ7DQotICAgIH0NCitzdGF0aWMgdm9pZA0KK2F2cl9mcmFtZV90aGlzX2lk IChzdHJ1Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFtZSwNCisgICAgICAgICAg ICAgICAgICAgdm9pZCAqKnRoaXNfcHJvbG9ndWVfY2FjaGUsDQorICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBmcmFtZV9pZCAqdGhpc19pZCkNCit7DQor ICBzdHJ1Y3QgYXZyX3Vud2luZF9jYWNoZSAqaW5mbw0KKyAgICA9IGF2cl9m cmFtZV91bndpbmRfY2FjaGUgKG5leHRfZnJhbWUsIHRoaXNfcHJvbG9ndWVf Y2FjaGUpOw0KKyAgQ09SRV9BRERSIGJhc2U7DQorICBDT1JFX0FERFIgZnVu YzsNCisgIHN0cnVjdCBmcmFtZV9pZCBpZDsNCisNCisgIC8qIFRoZSBGVU5D IGlzIGVhc3kuICAqLw0KKyAgZnVuYyA9IGZyYW1lX2Z1bmNfdW53aW5kIChu ZXh0X2ZyYW1lKTsNCisNCisgIC8qIFRoaXMgaXMgbWVhbnQgdG8gaGFsdCB0 aGUgYmFja3RyYWNlIGF0ICJfc3RhcnQiLiAgTWFrZSBzdXJlIHdlDQorICAg ICBkb24ndCBoYWx0IGl0IGF0IGEgZ2VuZXJpYyBkdW1teSBmcmFtZS4gKi8N CisgIGlmIChpbnNpZGVfZW50cnlfZmlsZSAoZnVuYykpDQorICAgIHJldHVy bjsNCisNCisgIC8qIEhvcGVmdWxseSB0aGUgcHJvbG9ndWUgYW5hbHlzaXMg ZWl0aGVyIGNvcnJlY3RseSBkZXRlcm1pbmVkIHRoZQ0KKyAgICAgZnJhbWUn cyBiYXNlICh3aGljaCBpcyB0aGUgU1AgZnJvbSB0aGUgcHJldmlvdXMgZnJh bWUpLCBvciBzZXQNCisgICAgIHRoYXQgYmFzZSB0byAiTlVMTCIuICAqLw0K KyAgYmFzZSA9IGluZm8tPnByZXZfc3A7DQorICBpZiAoYmFzZSA9PSAwKQ0K KyAgICByZXR1cm47DQorDQorICBpZCA9IGZyYW1lX2lkX2J1aWxkIChiYXNl LCBmdW5jKTsNCisNCisgIC8qIENoZWNrIHRoYXQgd2UncmUgbm90IGdvaW5n IHJvdW5kIGluIGNpcmNsZXMgd2l0aCB0aGUgc2FtZSBmcmFtZQ0KKyAgICAg SUQgKGJ1dCBhdm9pZCBhcHBseWluZyB0aGUgdGVzdCB0byBzZW50aW5lbCBm cmFtZXMgd2hpY2ggZG8gZ28NCisgICAgIHJvdW5kIGluIGNpcmNsZXMpLiAg Q2FuJ3QgdXNlIGZyYW1lX2lkX2VxKCkgYXMgdGhhdCBkb2Vzbid0IHlldA0K KyAgICAgY29tcGFyZSB0aGUgZnJhbWUncyBQQyB2YWx1ZS4gICovDQorICBp ZiAoZnJhbWVfcmVsYXRpdmVfbGV2ZWwgKG5leHRfZnJhbWUpID49IDANCisg ICAgICAmJiBnZXRfZnJhbWVfdHlwZSAobmV4dF9mcmFtZSkgIT0gRFVNTVlf RlJBTUUNCisgICAgICAmJiBmcmFtZV9pZF9lcSAoZ2V0X2ZyYW1lX2lkIChu ZXh0X2ZyYW1lKSwgaWQpKQ0KKyAgICByZXR1cm47DQogDQotLyogRWl0aGVy IHdlIGRpZG4ndCBmaW5kIHRoZSBzdGFydCBvZiB0aGlzIGZ1bmN0aW9uIChu b3RoaW5nIHdlIGNhbiBkbyksDQotICAgb3IgdGhlcmUncyBubyBsaW5lIGlu Zm8sIG9yIHRoZSBsaW5lIGFmdGVyIHRoZSBwcm9sb2d1ZSBpcyBhZnRlcg0K LSAgIHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uICh0aGVyZSBwcm9iYWJseSBp c24ndCBhIHByb2xvZ3VlKS4gKi8NCisgICgqdGhpc19pZCkgPSBpZDsNCit9 DQorDQorc3RhdGljIHZvaWQNCithdnJfZnJhbWVfcHJldl9yZWdpc3RlciAo c3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUsDQorCQkJICB2b2lkICoq dGhpc19wcm9sb2d1ZV9jYWNoZSwNCisJCQkgIGludCByZWdudW0sIGludCAq b3B0aW1pemVkcCwNCisJCQkgIGVudW0gbHZhbF90eXBlICpsdmFscCwgQ09S RV9BRERSICphZGRycCwNCisJCQkgIGludCAqcmVhbG51bXAsIHZvaWQgKmJ1 ZmZlcnApDQorew0KKyAgc3RydWN0IGF2cl91bndpbmRfY2FjaGUgKmluZm8N CisgICAgPSBhdnJfZnJhbWVfdW53aW5kX2NhY2hlIChuZXh0X2ZyYW1lLCB0 aGlzX3Byb2xvZ3VlX2NhY2hlKTsNCisNCisgIGF2cl9zYXZlZF9yZWdzX3Vu d2luZGVyIChuZXh0X2ZyYW1lLCBpbmZvLT5zYXZlZF9yZWdzLCByZWdudW0s IG9wdGltaXplZHAsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgbHZh bHAsIGFkZHJwLCByZWFsbnVtcCwgYnVmZmVycCk7DQorfQ0KKw0KK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kIGF2cl9mcmFtZV91bndpbmQg PSB7DQorICBOT1JNQUxfRlJBTUUsDQorICBhdnJfZnJhbWVfdGhpc19pZCwN CisgIGF2cl9mcmFtZV9wcmV2X3JlZ2lzdGVyDQorfTsNCiANCi0gIHJldHVy biBwYzsNCitjb25zdCBzdHJ1Y3QgZnJhbWVfdW53aW5kICoNCithdnJfZnJh bWVfcCAoQ09SRV9BRERSIHBjKQ0KK3sNCisgIHJldHVybiAmYXZyX2ZyYW1l X3Vud2luZDsNCiB9DQogDQogc3RhdGljIENPUkVfQUREUg0KLWF2cl9mcmFt ZV9hZGRyZXNzIChzdHJ1Y3QgZnJhbWVfaW5mbyAqZmkpDQorYXZyX2ZyYW1l X2Jhc2VfYWRkcmVzcyAoc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUs IHZvaWQgKip0aGlzX2NhY2hlKQ0KIHsNCi0gIHJldHVybiBhdnJfbWFrZV9z YWRkciAoZ2V0X2ZyYW1lX2Jhc2UgKGZpKSk7DQorICBzdHJ1Y3QgYXZyX3Vu d2luZF9jYWNoZSAqaW5mbw0KKyAgICA9IGF2cl9mcmFtZV91bndpbmRfY2Fj aGUgKG5leHRfZnJhbWUsIHRoaXNfY2FjaGUpOw0KKw0KKyAgcmV0dXJuIGlu Zm8tPmJhc2U7DQogfQ0KIA0KLS8qIEdpdmVuIGEgR0RCIGZyYW1lLCBkZXRl cm1pbmUgdGhlIGFkZHJlc3Mgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24ncw0K LSAgIGZyYW1lLiAgVGhpcyB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIGEgbmV3 IEdEQiBmcmFtZSBzdHJ1Y3QsIGFuZA0KLSAgIHRoZW4gREVQUkVDQVRFRF9J TklUX0VYVFJBX0ZSQU1FX0lORk8gYW5kIERFUFJFQ0FURURfSU5JVF9GUkFN RV9QQw0KLSAgIHdpbGwgYmUgY2FsbGVkIGZvciB0aGUgbmV3IGZyYW1lLg0K K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnJhbWVfYmFzZSBhdnJfZnJhbWVfYmFz ZSA9IHsNCisgICZhdnJfZnJhbWVfdW53aW5kLA0KKyAgYXZyX2ZyYW1lX2Jh c2VfYWRkcmVzcywNCisgIGF2cl9mcmFtZV9iYXNlX2FkZHJlc3MsDQorICBh dnJfZnJhbWVfYmFzZV9hZGRyZXNzDQorfTsNCiANCi0gICBGb3IgdXMsIHRo ZSBmcmFtZSBhZGRyZXNzIGlzIGl0cyBzdGFjayBwb2ludGVyIHZhbHVlLCBz byB3ZSBsb29rIHVwDQotICAgdGhlIGZ1bmN0aW9uIHByb2xvZ3VlIHRvIGRl dGVybWluZSB0aGUgY2FsbGVyJ3Mgc3AgdmFsdWUsIGFuZCByZXR1cm4gaXQu ICAqLw0KKy8qIEFzc3VtaW5nIE5FWFRfRlJBTUUtPnByZXYgaXMgYSBkdW1t eSwgcmV0dXJuIHRoZSBmcmFtZSBJRCBvZiB0aGF0DQorICAgZHVtbXkgZnJh bWUuICBUaGUgZnJhbWUgSUQncyBiYXNlIG5lZWRzIHRvIG1hdGNoIHRoZSBU T1MgdmFsdWUNCisgICBzYXZlZCBieSBzYXZlX2R1bW15X2ZyYW1lX3Rvcygp LCBhbmQgdGhlIFBDIG1hdGNoIHRoZSBkdW1teSBmcmFtZSdzDQorICAgYnJl YWtwb2ludC4gICovDQogDQotc3RhdGljIENPUkVfQUREUg0KLWF2cl9mcmFt ZV9jaGFpbiAoc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lKQ0KK3N0YXRpYyBz dHJ1Y3QgZnJhbWVfaWQNCithdnJfdW53aW5kX2R1bW15X2lkIChzdHJ1Y3Qg Z2RiYXJjaCAqZ2RiYXJjaCwgc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJh bWUpDQogew0KLSAgaWYgKERFUFJFQ0FURURfUENfSU5fQ0FMTF9EVU1NWSAo Z2V0X2ZyYW1lX3BjIChmcmFtZSksDQotCQkJCSAgIGdldF9mcmFtZV9iYXNl IChmcmFtZSksDQotCQkJCSAgIGdldF9mcmFtZV9iYXNlIChmcmFtZSkpKQ0K LSAgICB7DQotICAgICAgLyogaW5pdGlhbGl6ZSB0aGUgcmV0dXJuX3BjIG5v dyAqLw0KLSAgICAgIGdldF9mcmFtZV9leHRyYV9pbmZvIChmcmFtZSktPnJl dHVybl9wYw0KLQk9IGRlcHJlY2F0ZWRfcmVhZF9yZWdpc3Rlcl9kdW1teSAo Z2V0X2ZyYW1lX3BjIChmcmFtZSksDQotCQkJCQkgIGdldF9mcmFtZV9iYXNl IChmcmFtZSksDQotCQkJCQkgIEFWUl9QQ19SRUdOVU0pOw0KLSAgICAgIHJl dHVybiBnZXRfZnJhbWVfYmFzZSAoZnJhbWUpOw0KLSAgICB9DQotICByZXR1 cm4gKGdldF9mcmFtZV9leHRyYV9pbmZvIChmcmFtZSktPmlzX21haW4gPyAw DQotCSAgOiBnZXRfZnJhbWVfYmFzZSAoZnJhbWUpICsgZ2V0X2ZyYW1lX2V4 dHJhX2luZm8gKGZyYW1lKS0+ZnJhbWVzaXplICsgMiAvKiByZXQgYWRkciAq LyApOw0KKyAgVUxPTkdFU1QgYmFzZTsNCisNCisgIGZyYW1lX3Vud2luZF91 bnNpZ25lZF9yZWdpc3RlciAobmV4dF9mcmFtZSwgQVZSX1NQX1JFR05VTSwg JmJhc2UpOw0KKyAgcmV0dXJuIGZyYW1lX2lkX2J1aWxkIChhdnJfbWFrZV9z YWRkciAoYmFzZSksIGZyYW1lX3BjX3Vud2luZCAobmV4dF9mcmFtZSkpOw0K IH0NCiANCi0vKiBTdG9yZSB0aGUgYWRkcmVzcyBvZiB0aGUgcGxhY2UgaW4g d2hpY2ggdG8gY29weSB0aGUgc3RydWN0dXJlIHRoZQ0KLSAgIHN1YnJvdXRp bmUgd2lsbCByZXR1cm4uICBUaGlzIGlzIGNhbGxlZCBmcm9tIGNhbGxfZnVu Y3Rpb24uIA0KK3N0YXRpYyBDT1JFX0FERFINCithdnJfcHVzaF9kdW1teV9j b2RlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwNCisgICAgICAgICAgICAg ICAgICAgICBDT1JFX0FERFIgc3AsIENPUkVfQUREUiBmdW5hZGRyLCBpbnQg dXNpbmdfZ2NjLA0KKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2YWx1 ZSAqKmFyZ3MsIGludCBuYXJncywNCisgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSwNCisgICAgICAgICAgICAgICAgICAg ICBDT1JFX0FERFIgKnJlYWxfcGMsIENPUkVfQUREUiAqYnBfYWRkcikNCit7 DQorICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRlcnIsICIgLS0tLS0+ Pj4+ICBwdXNoX2R1bW15X2NvZGVcbiIpOw0KK30NCiANCi0gICBXZSBzdG9y ZSBzdHJ1Y3RzIHRocm91Z2ggYSBwb2ludGVyIHBhc3NlZCBpbiB0aGUgZmly c3QgQXJndW1lbnQNCi0gICByZWdpc3Rlci4gKi8NCisvKiBXaGVuIGFyZ3Vt ZW50cyBtdXN0IGJlIHB1c2hlZCBvbnRvIHRoZSBzdGFjaywgdGhleSBnbyBv biBpbiByZXZlcnNlDQorICAgb3JkZXIuICBUaGUgYmVsb3cgaW1wbGVtZW50 cyBhIEZJTE8gKHN0YWNrKSB0byBkbyB0aGlzLiAqLw0KIA0KLXN0YXRpYyB2 b2lkDQotYXZyX3N0b3JlX3N0cnVjdF9yZXR1cm4gKENPUkVfQUREUiBhZGRy LCBDT1JFX0FERFIgc3ApDQorc3RydWN0IHN0YWNrX2l0ZW0NCiB7DQotICB3 cml0ZV9yZWdpc3RlciAoMCwgYWRkcik7DQorICBpbnQgbGVuOw0KKyAgc3Ry dWN0IHN0YWNrX2l0ZW0gKnByZXY7DQorICB2b2lkICpkYXRhOw0KK307DQor DQorc3RhdGljIHN0cnVjdCBzdGFja19pdGVtICpwdXNoX3N0YWNrX2l0ZW0g KHN0cnVjdCBzdGFja19pdGVtICpwcmV2LA0KKwkJCQkJICAgdm9pZCAqY29u dGVudHMsIGludCBsZW4pOw0KK3N0YXRpYyBzdHJ1Y3Qgc3RhY2tfaXRlbSAq DQorcHVzaF9zdGFja19pdGVtIChzdHJ1Y3Qgc3RhY2tfaXRlbSAqcHJldiwg dm9pZCAqY29udGVudHMsIGludCBsZW4pDQorew0KKyAgc3RydWN0IHN0YWNr X2l0ZW0gKnNpOw0KKyAgc2kgPSB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCBz dGFja19pdGVtKSk7DQorICBzaS0+ZGF0YSA9IHhtYWxsb2MgKGxlbik7DQor ICBzaS0+bGVuID0gbGVuOw0KKyAgc2ktPnByZXYgPSBwcmV2Ow0KKyAgbWVt Y3B5IChzaS0+ZGF0YSwgY29udGVudHMsIGxlbik7DQorICByZXR1cm4gc2k7 DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3Qgc3RhY2tfaXRlbSAqcG9wX3N0YWNr X2l0ZW0gKHN0cnVjdCBzdGFja19pdGVtICpzaSk7DQorc3RhdGljIHN0cnVj dCBzdGFja19pdGVtICoNCitwb3Bfc3RhY2tfaXRlbSAoc3RydWN0IHN0YWNr X2l0ZW0gKnNpKQ0KK3sNCisgIHN0cnVjdCBzdGFja19pdGVtICpkZWFkID0g c2k7DQorICBzaSA9IHNpLT5wcmV2Ow0KKyAgeGZyZWUgKGRlYWQtPmRhdGEp Ow0KKyAgeGZyZWUgKGRlYWQpOw0KKyAgcmV0dXJuIHNpOw0KIH0NCiANCiAv KiBTZXR1cCB0aGUgZnVuY3Rpb24gYXJndW1lbnRzIGZvciBjYWxsaW5nIGEg ZnVuY3Rpb24gaW4gdGhlIGluZmVyaW9yLg0KQEAgLTEwMTAsOSArMTE3OSwy MCBAQCBhdnJfc3RvcmVfc3RydWN0X3JldHVybiAoQ09SRV9BRERSIGFkZHIs DQogICAgZGVkaWNhdGVkIGZvciBwYXNzaW5nIGZ1bmN0aW9uIGFyZ3VtZW50 cy4gIFVwIHRvIHRoZSBmaXJzdCAxOCBhcmd1bWVudHMNCiAgICAoZGVwZW5k aW5nIG9uIHNpemUpIG1heSBnbyBpbnRvIHRoZXNlIHJlZ2lzdGVycy4gIFRo ZSByZXN0IGdvIG9uIHRoZSBzdGFjay4NCiANCi0gICBBcmd1bWVudHMgdGhh dCBhcmUgbGFyZ2VyIHRoYW4gV09SRFNJWkUgYnl0ZXMgd2lsbCBiZSBzcGxp dCBiZXR3ZWVuIHR3byBvcg0KLSAgIG1vcmUgcmVnaXN0ZXJzIGFzIGF2YWls YWJsZSwgYnV0IHdpbGwgTk9UIGJlIHNwbGl0IGJldHdlZW4gYSByZWdpc3Rl ciBhbmQNCi0gICB0aGUgc3RhY2suDQorICAgQWxsIGFyZ3VtZW50cyBhcmUg YWxpZ25lZCB0byBzdGFydCBpbiBldmVuLW51bWJlcmVkIHJlZ2lzdGVycyAo b2RkLXNpemVkDQorICAgYXJndW1lbnRzLCBpbmNsdWRpbmcgY2hhciwgaGF2 ZSBvbmUgZnJlZSByZWdpc3RlciBhYm92ZSB0aGVtKS4gRm9yIGV4YW1wbGUs DQorICAgYW4gaW50IGluIGFyZzEgYW5kIGEgY2hhciBpbiBhcmcyIHdvdWxk IGJlIHBhc3NlZCBhcyBzdWNoOg0KKw0KKyAgICAgIGFyZzEgLT4gcjI1OnIy NA0KKyAgICAgIGFyZzIgLT4gcjIyDQorDQorICAgQXJndW1lbnRzIHRoYXQg YXJlIGxhcmdlciB0aGFuIDIgYnl0ZXMgd2lsbCBiZSBzcGxpdCBiZXR3ZWVu IHR3byBvciBtb3JlDQorICAgcmVnaXN0ZXJzIGFzIGF2YWlsYWJsZSwgYnV0 IHdpbGwgTk9UIGJlIHNwbGl0IGJldHdlZW4gYSByZWdpc3RlciBhbmQgdGhl DQorICAgc3RhY2suIEFyZ3VtZW50cyB0aGF0IGdvIG9udG8gdGhlIHN0YWNr IGFyZSBwdXNoZWQgbGFzdCBhcmcgZmlyc3QgKHRoaXMgaXMNCisgICBzaW1p bGFyIHRvIHRoZSBkMTB2KS4gICovDQorDQorLyogTk9URTogVFJvdGgvMjAw My0wNi0xNzogVGhlIHJlc3Qgb2YgdGhpcyBjb21tZW50IGlzIG9sZCBsb29r cyB0byBiZQ0KKyAgIGluYWNjdXJhdGUuDQogDQogICAgQW4gZXhjZXB0aW9u YWwgY2FzZSBleGlzdHMgZm9yIHN0cnVjdCBhcmd1bWVudHMgKGFuZCBwb3Nz aWJseSBvdGhlcg0KICAgIGFnZ3JlZ2F0ZXMgc3VjaCBhcyBhcnJheXMpIC0t IGlmIHRoZSBzaXplIGlzIGxhcmdlciB0aGFuIFdPUkRTSVpFIGJ5dGVzIGJ1 dA0KQEAgLTEwMzMsOTggKzEyMTMsODcgQEAgYXZyX3N0b3JlX3N0cnVjdF9y ZXR1cm4gKENPUkVfQUREUiBhZGRyLA0KICAgIHJlZ2lzdGVycyBSMCB0byBS Mi4gKi8NCiANCiBzdGF0aWMgQ09SRV9BRERSDQotYXZyX3B1c2hfYXJndW1l bnRzIChpbnQgbmFyZ3MsIHN0cnVjdCB2YWx1ZSAqKmFyZ3MsIENPUkVfQURE UiBzcCwNCi0JCSAgICBpbnQgc3RydWN0X3JldHVybiwgQ09SRV9BRERSIHN0 cnVjdF9hZGRyKQ0KK2F2cl9wdXNoX2R1bW15X2NhbGwgKHN0cnVjdCBnZGJh cmNoICpnZGJhcmNoLCBDT1JFX0FERFIgZnVuY19hZGRyLA0KKyAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIENPUkVf QUREUiBicF9hZGRyLA0KKyAgICAgICAgICAgICAgICAgICAgIGludCBuYXJn cywgc3RydWN0IHZhbHVlICoqYXJncywgQ09SRV9BRERSIHNwLA0KKyAgICAg ICAgICAgICAgICAgICAgIGludCBzdHJ1Y3RfcmV0dXJuLCBDT1JFX0FERFIg c3RydWN0X2FkZHIpDQogew0KLSAgaW50IHN0YWNrX2FsbG9jLCBzdGFja19v ZmZzZXQ7DQotICBpbnQgd29yZHNpemU7DQotICBpbnQgYXJncmVnOw0KLSAg aW50IGFyZ251bTsNCi0gIHN0cnVjdCB0eXBlICp0eXBlOw0KLSAgQ09SRV9B RERSIHJlZ3ZhbDsNCi0gIGNoYXIgKnZhbDsNCi0gIGNoYXIgdmFsYnVmWzRd Ow0KLSAgaW50IGxlbjsNCisgIGludCBpOw0KKyAgdW5zaWduZWQgY2hhciBi dWZbMl07DQorICBDT1JFX0FERFIgcmV0dXJuX3BjID0gYXZyX2NvbnZlcnRf aWFkZHJfdG9fcmF3IChicF9hZGRyKTsNCisgIGludCByZWdudW0gPSBBVlJf QVJHTl9SRUdOVU07DQorICBzdHJ1Y3Qgc3RhY2tfaXRlbSAqc2kgPSBOVUxM Ow0KIA0KLSAgd29yZHNpemUgPSAxOw0KICNpZiAwDQotICAvKiBOb3cgbWFr ZSBzdXJlIHRoZXJlJ3Mgc3BhY2Ugb24gdGhlIHN0YWNrICovDQotICBmb3Ig KGFyZ251bSA9IDAsIHN0YWNrX2FsbG9jID0gMDsgYXJnbnVtIDwgbmFyZ3M7 IGFyZ251bSsrKQ0KLSAgICBzdGFja19hbGxvYyArPSBUWVBFX0xFTkdUSCAo VkFMVUVfVFlQRSAoYXJnc1thcmdudW1dKSk7DQotICBzcCAtPSBzdGFja19h bGxvYzsJCS8qIG1ha2Ugcm9vbSBvbiBzdGFjayBmb3IgYXJncyAqLw0KLSAg Lyogd2UgbWF5IG92ZXItYWxsb2NhdGUgYSBsaXR0bGUgaGVyZSwgYnV0IHRo YXQgd29uJ3QgaHVydCBhbnl0aGluZyAqLw0KLSNlbmRpZg0KLSAgYXJncmVn ID0gMjU7DQotICBpZiAoc3RydWN0X3JldHVybikJCS8qICJzdHJ1Y3QgcmV0 dXJuIiBwb2ludGVyIHRha2VzIHVwIG9uZSBhcmdyZWcgKi8NCi0gICAgew0K LSAgICAgIHdyaXRlX3JlZ2lzdGVyICgtLWFyZ3JlZywgc3RydWN0X2FkZHIp Ow0KLSAgICB9DQotDQotICAvKiBOb3cgbG9hZCBhcyBtYW55IGFzIHBvc3Np YmxlIG9mIHRoZSBmaXJzdCBhcmd1bWVudHMgaW50byByZWdpc3RlcnMsIGFu ZA0KLSAgICAgcHVzaCB0aGUgcmVzdCBvbnRvIHRoZSBzdGFjay4gIFRoZXJl IGFyZSAzTiBieXRlcyBpbiB0aHJlZSByZWdpc3RlcnMNCi0gICAgIGF2YWls YWJsZS4gIExvb3AgdGhydSBhcmdzIGZyb20gZmlyc3QgdG8gbGFzdC4gICov DQotDQotICBmb3IgKGFyZ251bSA9IDAsIHN0YWNrX29mZnNldCA9IDA7IGFy Z251bSA8IG5hcmdzOyBhcmdudW0rKykNCisgIC8qIEZJWE1FOiBUUm90aC8y MDAzLTA2LTE4OiBOb3Qgc3VyZSB3aGF0IHRvIGRvIHdoZW4gcmV0dXJuaW5n IGEgc3RydWN0LiAqLw0KKyAgaWYgKHN0cnVjdF9yZXR1cm4pDQogICAgIHsN Ci0gICAgICB0eXBlID0gVkFMVUVfVFlQRSAoYXJnc1thcmdudW1dKTsNCi0g ICAgICBsZW4gPSBUWVBFX0xFTkdUSCAodHlwZSk7DQotICAgICAgdmFsID0g KGNoYXIgKikgVkFMVUVfQ09OVEVOVFMgKGFyZ3NbYXJnbnVtXSk7DQotDQot ICAgICAgLyogTk9URSBXRUxMISEhISEgIFRoaXMgaXMgbm90IGFuICJlbHNl IGlmIiBjbGF1c2UhISEgIFRoYXQncyBiZWNhdXNlDQotICAgICAgICAgc29t ZSAqJl4lJCB0aGluZ3MgZ2V0IHBhc3NlZCBvbiB0aGUgc3RhY2sgQU5EIGlu IHRoZSByZWdpc3RlcnMhICAqLw0KLSAgICAgIHdoaWxlIChsZW4gPiAwKQ0K LQl7CQkJLyogdGhlcmUncyByb29tIGluIHJlZ2lzdGVycyAqLw0KLQkgIGxl biAtPSB3b3Jkc2l6ZTsNCi0JICByZWd2YWwgPSBleHRyYWN0X3Vuc2lnbmVk X2ludGVnZXIgKHZhbCArIGxlbiwgd29yZHNpemUpOw0KLQkgIHdyaXRlX3Jl Z2lzdGVyIChhcmdyZWctLSwgcmVndmFsKTsNCi0JfQ0KKyAgICAgIGZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGVyciwgInN0cnVjdF9yZXR1cm46IDB4 JWx4XG4iLCBzdHJ1Y3RfYWRkcik7DQorICAgICAgd3JpdGVfcmVnaXN0ZXIg KGFyZ3JlZy0tLCBzdHJ1Y3RfYWRkciAmIDB4ZmYpOw0KKyAgICAgIHdyaXRl X3JlZ2lzdGVyIChhcmdyZWctLSwgKHN0cnVjdF9hZGRyID4+OCkgJiAweGZm KTsNCiAgICAgfQ0KLSAgcmV0dXJuIHNwOw0KLX0NCi0NCi0vKiBOb3QgYWxs IGF2ciBkZXZpY2VzIHN1cHBvcnQgdGhlIEJSRUFLIGluc24uIFRob3NlIHRo YXQgZG9uJ3Qgc2hvdWxkIHRyZWF0DQotICAgaXQgYXMgYSBOT1AuIFRodXMs IGl0IHNob3VsZCBiZSBvay4gU2luY2UgdGhlIGF2ciBpcyBjdXJyZW50bHkg YSByZW1vdGUNCi0gICBvbmx5IHRhcmdldCwgdGhpcyBzaG91bGRuJ3QgYmUg YSBwcm9ibGVtIChJIGhvcGUpLiBUUm90aC8yMDAzLTA1LTE0ICAqLw0KLQ0K LXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICoNCi1hdnJfYnJlYWtwb2lu dF9mcm9tX3BjIChDT1JFX0FERFIgKiBwY3B0ciwgaW50ICpsZW5wdHIpDQot ew0KLSAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBhdnJfYnJlYWtfaW5zbiBb XSA9IHsgMHg5OCwgMHg5NSB9Ow0KLSAgICAqbGVucHRyID0gc2l6ZW9mIChh dnJfYnJlYWtfaW5zbik7DQotICAgIHJldHVybiBhdnJfYnJlYWtfaW5zbjsN Ci19DQotDQotLyogR2l2ZW4gYSByZXR1cm4gdmFsdWUgaW4gYHJlZ2J1Zicg d2l0aCBhIHR5cGUgYHZhbHR5cGUnLCANCi0gICBleHRyYWN0IGFuZCBjb3B5 IGl0cyB2YWx1ZSBpbnRvIGB2YWxidWYnLg0KLQ0KLSAgIFJldHVybiB2YWx1 ZXMgYXJlIGFsd2F5cyBwYXNzZWQgdmlhIHJlZ2lzdGVycyByMjU6cjI0Oi4u LiAgKi8NCi0NCi1zdGF0aWMgdm9pZA0KLWF2cl9leHRyYWN0X3JldHVybl92 YWx1ZSAoc3RydWN0IHR5cGUgKnR5cGUsIHN0cnVjdCByZWdjYWNoZSAqcmVn Y2FjaGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp2YWxi dWYpDQotew0KLSAgaWYgKFRZUEVfTEVOR1RIICh0eXBlKSA9PSAxKQ0KLSAg ICB7DQotICAgICAgVUxPTkdFU1QgYzsNCisjZW5kaWYNCiANCi0gICAgICAv KiBGb3Igc2luZ2xlIGJ5dGUgcmV0dXJuIHZhbHVlcywgcjI1IGlzIGFsd2F5 cyBjbGVhcmVkLCBzbyB3ZSBjYW4NCi0gICAgICAgICBpZ25vcmUgaXQuICAq Lw0KLSAgICAgIHJlZ2NhY2hlX2Nvb2tlZF9yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgMjQsICZjKTsNCi0gICAgICBzdG9yZV91bnNpZ25lZF9pbnRlZ2Vy ICh2YWxidWYsIDEsIGMpOw0KLSAgICB9DQotICBlbHNlDQorICBmb3IgKGkg PSAwOyBpIDwgbmFyZ3M7IGkrKykNCiAgICAgew0KLSAgICAgIGludCBpOw0K LSAgICAgIC8qIFRoZSBNU0Igb2YgdGhlIHJldHVybiB2YWx1ZSBpcyBhbHdh eXMgaW4gcjI1LCBjYWxjdWxhdGUgd2hpY2gNCi0gICAgICAgICByZWdpc3Rl ciBob2xkcyB0aGUgTFNCLiAgKi8NCi0gICAgICBpbnQgbHNiX3JlZyA9IDI1 IC0gVFlQRV9MRU5HVEggKHR5cGUpICsgMTsNCisgICAgICBpbnQgbGFzdF9y ZWdudW07DQorICAgICAgaW50IGo7DQorICAgICAgc3RydWN0IHZhbHVlICph cmcgPSBhcmdzW2ldOw0KKyAgICAgIHN0cnVjdCB0eXBlICp0eXBlID0gY2hl Y2tfdHlwZWRlZiAoVkFMVUVfVFlQRSAoYXJnKSk7DQorICAgICAgY2hhciAq Y29udGVudHMgPSBWQUxVRV9DT05URU5UUyAoYXJnKTsNCisgICAgICBpbnQg bGVuID0gVFlQRV9MRU5HVEggKHR5cGUpOw0KKw0KKyAgICAgIC8qIENhbGN1 bGF0ZSB0aGUgcG90ZW50aWFsIGxhc3QgcmVnaXN0ZXIgbmVlZGVkLiAqLw0K KyAgICAgIGxhc3RfcmVnbnVtID0gcmVnbnVtIC0gKGxlbiArIChsZW4gJiAx KSk7DQorDQorICAgICAgLyogSWYgdGhlcmUgYXJlIHJlZ2lzdGVycyBhdmFp bGFibGUsIHVzZSB0aGVtLiBPbmNlIHdlIHN0YXJ0IHB1dHRpbmcNCisgICAg ICAgICBzdHVmZiBvbiB0aGUgc3RhY2ssIGFsbCBzdWJzZXF1ZW50IGFyZ3Mg Z28gb24gc3RhY2suICovDQorICAgICAgaWYgKChzaSA9PSBOVUxMKSAmJiAo bGFzdF9yZWdudW0gPj0gOCkpDQorICAgICAgICB7DQorICAgICAgICAgIFVM T05HRVNUIHZhbDsNCiANCi0gICAgICBmb3IgKGk9MDsgaTwgVFlQRV9MRU5H VEggKHR5cGUpOyBpKyspDQorICAgICAgICAgIC8qIFNraXAgYSByZWdpc3Rl ciBmb3Igb2RkIGxlbmd0aCBhcmdzLiAqLw0KKyAgICAgICAgICBpZiAobGVu ICYgMSkNCisgICAgICAgICAgICByZWdudW0tLTsNCisNCisgICAgICAgICAg dmFsID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyIChjb250ZW50cywgbGVu KTsNCisgICAgICAgICAgZm9yIChqPTA7IGo8bGVuOyBqKyspDQorICAgICAg ICAgICAgew0KKyAgICAgICAgICAgICAgcmVnY2FjaGVfY29va2VkX3dyaXRl X3Vuc2lnbmVkIChyZWdjYWNoZSwgcmVnbnVtLS0sDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA+PiAoOCoo bGVuLWotMSkpKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAg ICAgLyogTm8gcmVnaXN0ZXJzIGF2YWlsYWJsZSwgcHVzaCB0aGUgYXJncyBv bnRvIHRoZSBzdGFjay4gKi8NCisgICAgICBlbHNlDQogICAgICAgICB7DQot ICAgICAgICAgIHJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgbHNi X3JlZyArIGksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo YmZkX2J5dGUgKikgdmFsYnVmICsgaSk7DQorICAgICAgICAgIC8qIEZyb20g aGVyZSBvbiwgd2UgZG9uJ3QgY2FyZSBhYm91dCByZWdudW0uICovDQorICAg ICAgICAgIHNpID0gcHVzaF9zdGFja19pdGVtIChzaSwgY29udGVudHMsIGxl bik7DQogICAgICAgICB9DQogICAgIH0NCisNCisgIC8qIFB1c2ggYXJncyBv bnRvIHRoZSBzdGFjay4gKi8NCisgIHdoaWxlIChzaSkNCisgICAgew0KKyAg ICAgIHNwIC09IHNpLT5sZW47DQorICAgICAgLyogQWRkIDEgdG8gc3AgaGVy ZSB0byBhY2NvdW50IGZvciBwb3N0IGRlY3IgbmF0dXJlIG9mIHB1c2hlcy4g Ki8NCisgICAgICB3cml0ZV9tZW1vcnkgKHNwKzEsIHNpLT5kYXRhLCBzaS0+ bGVuKTsNCisgICAgICBzaSA9IHBvcF9zdGFja19pdGVtIChzaSk7DQorICAg IH0NCisNCisgIC8qIFNldCB0aGUgcmV0dXJuIGFkZHJlc3MuICBGb3IgdGhl IGF2ciwgdGhlIHJldHVybiBhZGRyZXNzIGlzIHRoZSBCUF9BRERSLg0KKyAg ICAgTmVlZCB0byBwdXNoIHRoZSByZXR1cm4gYWRkcmVzcyBvbnRvIHRoZSBz dGFjayBub3RpbmcgdGhhdCBpdCBuZWVkcyB0byBiZQ0KKyAgICAgaW4gYmln LWVuZGlhbiBvcmRlciBvbiB0aGUgc3RhY2suICAqLw0KKyAgYnVmWzBdID0g KHJldHVybl9wYyA+PiA4KSAmIDB4ZmY7DQorICBidWZbMV0gPSByZXR1cm5f cGMgJiAweGZmOw0KKw0KKyAgc3AgLT0gMjsNCisgIHdyaXRlX21lbW9yeSAo c3ArMSwgYnVmLCAyKTsgIC8qIEFkZCBvbmUgc2luY2UgcHVzaGVzIGFyZSBw b3N0IGRlY3Igb3BzLiAqLw0KKw0KKyAgLyogRmluYWxseSwgdXBkYXRlIHRo ZSBTUCByZWdpc3Rlci4gKi8NCisgIHJlZ2NhY2hlX2Nvb2tlZF93cml0ZV91 bnNpZ25lZCAocmVnY2FjaGUsIEFWUl9TUF9SRUdOVU0sDQorCQkJCSAgYXZy X2NvbnZlcnRfc2FkZHJfdG9fcmF3IChzcCkpOw0KKw0KKyAgcmV0dXJuIHNw Ow0KIH0NCiANCiAvKiBJbml0aWFsaXplIHRoZSBnZGJhcmNoIHN0cnVjdHVy ZSBmb3IgdGhlIEFWUidzLiAqLw0KQEAgLTExNDQsMTAgKzEzMTMsNiBAQCBh dnJfZ2RiYXJjaF9pbml0IChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluDQogICB0 ZGVwID0gWE1BTExPQyAoc3RydWN0IGdkYmFyY2hfdGRlcCk7DQogICBnZGJh cmNoID0gZ2RiYXJjaF9hbGxvYyAoJmluZm8sIHRkZXApOw0KIA0KLSAgLyog Tk9URTogY2FnbmV5LzIwMDItMTItMDY6IFRoaXMgY2FuIGJlIGRlbGV0ZWQg d2hlbiB0aGlzIGFyY2ggaXMNCi0gICAgIHJlYWR5IHRvIHVud2luZCB0aGUg UEMgZmlyc3QgKHNlZSBmcmFtZS5jOmdldF9wcmV2X2ZyYW1lKCkpLiAgKi8N Ci0gIHNldF9nZGJhcmNoX2RlcHJlY2F0ZWRfaW5pdF9mcmFtZV9wYyAoZ2Ri YXJjaCwgaW5pdF9mcmFtZV9wY19kZWZhdWx0KTsNCi0NCiAgIC8qIElmIHdl IGV2ZXIgbmVlZCB0byBkaWZmZXJlbnRpYXRlIHRoZSBkZXZpY2UgdHlwZXMs IGRvIGl0IGhlcmUuICovDQogICBzd2l0Y2ggKGluZm8uYmZkX2FyY2hfaW5m by0+bWFjaCkNCiAgICAgew0KQEAgLTExNzcsMTQgKzEzNDIsMTEgQEAgYXZy X2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbg0KIA0KICAg c2V0X2dkYmFyY2hfcmVhZF9wYyAoZ2RiYXJjaCwgYXZyX3JlYWRfcGMpOw0K ICAgc2V0X2dkYmFyY2hfd3JpdGVfcGMgKGdkYmFyY2gsIGF2cl93cml0ZV9w Yyk7DQotICBzZXRfZ2RiYXJjaF9kZXByZWNhdGVkX3RhcmdldF9yZWFkX2Zw IChnZGJhcmNoLCBhdnJfcmVhZF9mcCk7DQogICBzZXRfZ2RiYXJjaF9yZWFk X3NwIChnZGJhcmNoLCBhdnJfcmVhZF9zcCk7DQotICBzZXRfZ2RiYXJjaF9k ZXByZWNhdGVkX2R1bW15X3dyaXRlX3NwIChnZGJhcmNoLCBhdnJfd3JpdGVf c3ApOw0KIA0KICAgc2V0X2dkYmFyY2hfbnVtX3JlZ3MgKGdkYmFyY2gsIEFW Ul9OVU1fUkVHUyk7DQogDQogICBzZXRfZ2RiYXJjaF9zcF9yZWdudW0gKGdk YmFyY2gsIEFWUl9TUF9SRUdOVU0pOw0KLSAgc2V0X2dkYmFyY2hfZGVwcmVj YXRlZF9mcF9yZWdudW0gKGdkYmFyY2gsIEFWUl9GUF9SRUdOVU0pOw0KICAg c2V0X2dkYmFyY2hfcGNfcmVnbnVtIChnZGJhcmNoLCBBVlJfUENfUkVHTlVN KTsNCiANCiAgIHNldF9nZGJhcmNoX3JlZ2lzdGVyX25hbWUgKGdkYmFyY2gs IGF2cl9yZWdpc3Rlcl9uYW1lKTsNCkBAIC0xMTk0LDE4ICsxMzU2LDE0IEBA IGF2cl9nZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW4NCiAg IHNldF9nZGJhcmNoX3ByaW50X2luc24gKGdkYmFyY2gsIHByaW50X2luc25f YXZyKTsNCiANCiAgIHNldF9nZGJhcmNoX2NhbGxfZHVtbXlfYWRkcmVzcyAo Z2RiYXJjaCwgYXZyX2NhbGxfZHVtbXlfYWRkcmVzcyk7DQorICBzZXRfZ2Ri YXJjaF9wdXNoX2R1bW15X2NhbGwgKGdkYmFyY2gsIGF2cl9wdXNoX2R1bW15 X2NhbGwpOw0KKyAgc2V0X2dkYmFyY2hfcHVzaF9kdW1teV9jb2RlIChnZGJh cmNoLCBhdnJfcHVzaF9kdW1teV9jb2RlKTsNCiANCiAgIHNldF9nZGJhcmNo X2FkZHJlc3NfdG9fcG9pbnRlciAoZ2RiYXJjaCwgYXZyX2FkZHJlc3NfdG9f cG9pbnRlcik7DQogICBzZXRfZ2RiYXJjaF9wb2ludGVyX3RvX2FkZHJlc3Mg KGdkYmFyY2gsIGF2cl9wb2ludGVyX3RvX2FkZHJlc3MpOw0KLSAgc2V0X2dk YmFyY2hfZGVwcmVjYXRlZF9wdXNoX2FyZ3VtZW50cyAoZ2RiYXJjaCwgYXZy X3B1c2hfYXJndW1lbnRzKTsNCi0gIHNldF9nZGJhcmNoX2RlcHJlY2F0ZWRf cHVzaF9yZXR1cm5fYWRkcmVzcyAoZ2RiYXJjaCwgYXZyX3B1c2hfcmV0dXJu X2FkZHJlc3MpOw0KLSAgc2V0X2dkYmFyY2hfZGVwcmVjYXRlZF9wb3BfZnJh bWUgKGdkYmFyY2gsIGF2cl9wb3BfZnJhbWUpOw0KIA0KICAgc2V0X2dkYmFy Y2hfdXNlX3N0cnVjdF9jb252ZW50aW9uIChnZGJhcmNoLCBnZW5lcmljX3Vz ZV9zdHJ1Y3RfY29udmVudGlvbik7DQotICBzZXRfZ2RiYXJjaF9kZXByZWNh dGVkX3N0b3JlX3N0cnVjdF9yZXR1cm4gKGdkYmFyY2gsIGF2cl9zdG9yZV9z dHJ1Y3RfcmV0dXJuKTsNCiANCi0gIHNldF9nZGJhcmNoX2RlcHJlY2F0ZWRf ZnJhbWVfaW5pdF9zYXZlZF9yZWdzIChnZGJhcmNoLCBhdnJfc2Nhbl9wcm9s b2d1ZSk7DQotICBzZXRfZ2RiYXJjaF9kZXByZWNhdGVkX2luaXRfZXh0cmFf ZnJhbWVfaW5mbyAoZ2RiYXJjaCwgYXZyX2luaXRfZXh0cmFfZnJhbWVfaW5m byk7DQogICBzZXRfZ2RiYXJjaF9za2lwX3Byb2xvZ3VlIChnZGJhcmNoLCBh dnJfc2tpcF9wcm9sb2d1ZSk7DQogICBzZXRfZ2RiYXJjaF9pbm5lcl90aGFu IChnZGJhcmNoLCBjb3JlX2FkZHJfbGVzc3RoYW4pOw0KIA0KQEAgLTEyMTUs MTIgKzEzNzMsMTcgQEAgYXZyX2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFy Y2hfaW5mbyBpbg0KICAgc2V0X2dkYmFyY2hfZnVuY3Rpb25fc3RhcnRfb2Zm c2V0IChnZGJhcmNoLCAwKTsNCiANCiAgIHNldF9nZGJhcmNoX2ZyYW1lX2Fy Z3Nfc2tpcCAoZ2RiYXJjaCwgMCk7DQotICBzZXRfZ2RiYXJjaF9mcmFtZWxl c3NfZnVuY3Rpb25faW52b2NhdGlvbiAoZ2RiYXJjaCwgZnJhbWVsZXNzX2xv b2tfZm9yX3Byb2xvZ3VlKTsJLyogPz8/ICovDQotICBzZXRfZ2RiYXJjaF9k ZXByZWNhdGVkX2ZyYW1lX2NoYWluIChnZGJhcmNoLCBhdnJfZnJhbWVfY2hh aW4pOw0KLSAgc2V0X2dkYmFyY2hfZGVwcmVjYXRlZF9mcmFtZV9zYXZlZF9w YyAoZ2RiYXJjaCwgYXZyX2ZyYW1lX3NhdmVkX3BjKTsNCisgIHNldF9nZGJh cmNoX2ZyYW1lbGVzc19mdW5jdGlvbl9pbnZvY2F0aW9uIChnZGJhcmNoLA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZyYW1lbGVzc19sb29rX2Zvcl9wcm9sb2d1ZSk7DQogICBzZXRfZ2RiYXJj aF9mcmFtZV9hcmdzX2FkZHJlc3MgKGdkYmFyY2gsIGF2cl9mcmFtZV9hZGRy ZXNzKTsNCiAgIHNldF9nZGJhcmNoX2ZyYW1lX2xvY2Fsc19hZGRyZXNzIChn ZGJhcmNoLCBhdnJfZnJhbWVfYWRkcmVzcyk7DQotICBzZXRfZ2RiYXJjaF9k ZXByZWNhdGVkX3NhdmVkX3BjX2FmdGVyX2NhbGwgKGdkYmFyY2gsIGF2cl9z YXZlZF9wY19hZnRlcl9jYWxsKTsNCisNCisgIGZyYW1lX3Vud2luZF9hcHBl bmRfcHJlZGljYXRlIChnZGJhcmNoLCBhdnJfZnJhbWVfcCk7DQorICBmcmFt ZV9iYXNlX3NldF9kZWZhdWx0IChnZGJhcmNoLCAmYXZyX2ZyYW1lX2Jhc2Up Ow0KKw0KKyAgc2V0X2dkYmFyY2hfdW53aW5kX2R1bW15X2lkIChnZGJhcmNo LCBhdnJfdW53aW5kX2R1bW15X2lkKTsNCisNCisgIHNldF9nZGJhcmNoX3Vu d2luZF9wYyAoZ2RiYXJjaCwgYXZyX3Vud2luZF9wYyk7DQogDQogICByZXR1 cm4gZ2RiYXJjaDsNCiB9DQo= ---1463809535-914562516-1056010474=:9766--