From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20936 invoked by alias); 15 Mar 2012 18:27:09 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 30358 Received: (qmail 22404 invoked from network); 15 Mar 2012 18:26:57 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED,RCVD_IN_DNSWL_LOW, T_DKIM_INVALID,T_TO_NO_BRKTS_FREEMAIL autolearn=no version=3.3.2 Received-SPF: pass (ns1.primenet.com.au: SPF record at _spf.google.com designates 209.85.213.171 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=02FV8Dje+Q+0mhb7C8OEuHgnVy/0rKFJb/bzZbr31cs=; b=kPBTzZpibqvkkLVRjHMCDEs+ouMTdhRf3PyEpF4U+r4Ewd0jg+Z1TerKi4J2LGT1Hq yF9EM6vz6/QMGxFHSUCS5ik41SqXsqzl3ceCuKhn2c9RJJG1DoVdSXtDrl70YTB2qGWJ D58AaYuXAiG9n8gFS04WMeifg8YoNqaQgHiY9LoGllSo3aQwfnJrmqmrQ2hR/l4WqG4j VvVsp8PErqhaMYVuhYh4eTp6Wds5RZ0JQwwjLNfVhx6gdl2qslJZimN5+iNdOr5MvAwp b3tylOncl2pYjOXHKdTLkZF8sVauZmSXc5y+GyC+OO5ceqSi2ZMuApqIfFXCNLy1hRiT KcZg== MIME-Version: 1.0 Date: Thu, 15 Mar 2012 19:26:52 +0100 Message-ID: Subject: Native Windows port, introduction. From: Fabio Fabbri To: zsh-workers@zsh.org Content-Type: multipart/mixed; boundary=20cf303dd2fc6c92d504bb4c3cc4 --20cf303dd2fc6c92d504bb4c3cc4 Content-Type: text/plain; charset=ISO-8859-1 Hi all, A quality native port of many useful u*x tools is available from http://gnuwin32.sourceforge.net/ but the lack of a native u*x shell in a Windows console is really annoying, because for scripting CMD.EXE is poor and has a horrible syntax. So I started the effort of porting zsh version 4.3.17 to native Windows (i.e. using libc and Win32 calls). - Are you interested in this effort ? The port is based on two older projects: the very old port of zsh 3.0.5 to Windows by Amol Deshpande, and the Windows native port of tcsh (version 6.17 as a base). I made _a lot_ of modifications to the sources, and got a working port of zsh 3.0.8 that I called 3.0.8.1. The sources of the library needed for the port (the fork() emulation and many C libray missing pieces) are contained in the Src/win32 directory. zsh 3.0.8.1, needed to bootstrap version 4.3.17 currenly has no home, but I can easyly provide a tarball and an executable. As a first step, to review the source code modifications, the port for zsh 4.3.17 links a dummy forklib.a, where fork() returns an error. This first step in many places adds _WIN32 conditionals to already preset __CYGWIN__ sections. The attached patch file has the minimal modifications to compile a NON YET WORKING zsh. The compiled executable is able to execute only simple builtin commands like echo or setopt. The configure modifications SHOULD not be applied. They fix three problems I was not able to workaround: - at line 3306: # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.o" deleting conftest.* deletes the source file to be compiled ! - at line 14099 $SHELL $CONFIG_STATUS -d $ac_config_status_args || ac_cs_success=false the -d prevents config.status from failing as it is not able to delete the temporary directory that is used by a sub-shell - the same applies to mkmakemod,sh at line 467 ${CONFIG_SHELL-/bin/sh} ./config.status -d\ How should I go on from this ? Best Regards Fabio --20cf303dd2fc6c92d504bb4c3cc4 Content-Type: application/octet-stream; name=patch-s1 Content-Disposition: attachment; filename=patch-s1 Content-Transfer-Encoding: base64 X-Attachment-Id: f_gzu4rmhw0 ZGlmZiAtcnVwTiB6c2gtNC4zLjE3LW9yaWcvMC1taW5ndy1jb25mIHpzaC00LjMuMTctczEvMC1t aW5ndy1jb25mDQotLS0genNoLTQuMy4xNy1vcmlnLzAtbWluZ3ctY29uZgkxOTcwLTAxLTAxIDAx OjAwOjAwLjAwMDAwMDAwMCArMDEwMA0KKysrIHpzaC00LjMuMTctczEvMC1taW5ndy1jb25mCTIw MTItMDMtMTUgMTk6MTM6MTMuODUyNTc2NDAwICswMTAwDQpAQCAtMCwwICsxLDQzIEBADQorIyAw LW1pbmd3LWNvbmYNCisjIHNldHVwIHNvbWUgdmFyaWFibGVzIGFuZCBjYWxsIGNvbmZpZ3VyZSAN CisjIEJVR1M6DQorIyAgICAgICAxIC0gdGhlIGNvbmZpZy5zaXRlIGhhY2sgaXMgYmVjYXVzZSBj b25maWd1cmUgZG9lcyBub3Qgc2V0DQorIyAgICAgICAgICAgYWNfZXhlY3V0YWJsZV9leHRlbnNp b25zPS5leGUuIFdoeSA/DQorIyAgICAgICAgICAgLS0gc29tZWhvdyBmaXhlZCB3aXRoIHRoZSBj b25maWcuc2l0ZSBoYWNrDQorIyAgICAgICAyIC0gbm90IGFsd2F5cyBydW4gdG8gY29tcGxldGlv bi4gDQorIyAgICAgICAzIC0gdGhlIGRlYnVndmlldyBsb2cgaGFzIG1hbnkgZXJyb3JzIGxpa2UN CisjICAgICAgICAgICBbUElEMV0gISEhIGNsb3NlKDExKTogaW52YWxpZCBmZCBoYW5kbGUgMHhG RkZGRkZGRg0KKyMgICAgICAgNCAtIHRoZSBkZWJ1Z3ZpZXcgbG9nIGhhcyBzb21lIGVycm9ycyBs aWtlDQorIyAgICAgICAgICAgW1BJRDJdICEhISBpb2R1cGZkKDYsIDEwKTogaW52YWxpZCBmZA0K KyMgICAgICAgNSAtIHRoZSBkZWJ1Z3ZpZXcgbG9nIGhhcyBzb21lIGVycm9ycyBsaWtlDQorIyAg ICAgICAgICAgW1BJRDNdICEhISBjbG9zZSgtMSk6IGludmFsaWQgZmQgaGFuZGxlIDB4MDAwMDAw MDANCisjICAgICAgIDYgLSBtaW5ndy1jb25maWcubG9nIGhhcw0KKyMgICAgICAgICAgIC4uLi4N CisjICAgICAgICAgICBjaGVja2luZyBmb3Igd2NydG9tYi4uLiB5ZXMNCisjICAgICAgICAgICBj aGVja2luZyBmb3Igd2N3aWR0aC4uLiBubyAgIDw9IFdIWSA/IG1pc3NpbmcgZnJvbSBtaW5ndyBS VA0KKyMgICAgICAgICAgIGNoZWNraW5nIGZvciB3bWVtY2hyLi4uIHllcw0KKyMgICAgICAgICAg IC4uLg0KKyMgICAgICAgICAgIGNvbmZpZ3VyZTogbWlzc2luZyBmdW5jdGlvbnMsIG11bHRpYnl0 ZSBzdXBwb3J0IGRpc2FibGVkDQorIyAgICAgICA3IC0gQWZ0ZXIgY29uZmlndXJlIGV4aXRzIHRo ZXJlIGFyZSBlcnJvcnMgd2l0aCBybGltaXRzLmF3aywgYnV0DQorIyAgICAgICAgICAgdGhleSBj b3VsZCBiZSBpZ25vcmVkLCB0aGVyZSBhcmUgbm8gcmxpbWl0cyBvbiBXaW5kb3dzDQorDQorDQor SVBBVEg9IiRQV0QvU3JjL3dpbjMyIg0KK2V4cG9ydCBDRkxBR1M9Ii1JJElQQVRIIg0KK2V4cG9y dCBDUFBGTEFHUz0iLUkkSVBBVEgiDQorIyBleHBvcnQgTERGTEFHUz0gICMgTERGTEFHUyBhcmUg aW5zZXJ0ZWQgQkVGT1JFIG90aGVyIGFyZ3MNCisjIGFkZCB0aGUgZHVtbXkgZm9yayBsaWIsIGZv ciBjb25maWd1cmUgdGVzdHMNCitleHBvcnQgTElCUz0iLUwkSVBBVEgvbGliIC1sZm9yayINCitl eHBvcnQgTUFLRT1taW5ndzMyLW1ha2UNCisjIG5lZWRlZCB0byBhZGQgImFjX2V4ZWN1dGFibGVf ZXh0ZW5zaW9ucz0uZXhlIg0KK2V4cG9ydCBDT05GSUdfU0lURT1TcmMvd2luMzIvY29uZmlnLnNp dGUNCisNCisjIHdoZXJlIHRvIGxvZyB0aGUgLi9jb25maWd1cmUgb3V0cHV0IA0KK2NmZ291dD1t aW5ndy1jb25mLmxvZw0KKw0KK2lmIFsgISAtZiAkSVBBVEgvdW5pc3RkLmggXTsgdGhlbg0KKwll Y2hvICJjYW5ub3QgZmluZCAkSVBBVEgvdW5pc3RkLmgiDQorCWV4aXQgMQ0KK2ZpCQ0KKw0KKy4v Y29uZmlndXJlIC0tcHJlZml4PS9iaW4gLS1lbmFibGUtenNoLWRlYnVnIC0tZGlzYWJsZS1keW5h bWljIC0tZGlzYWJsZS1yZXN0cmljdGVkLXIgLS1kaXNhYmxlLW1haWxkaXItc3VwcG9ydCAtLWRp c2FibGUtcGNyZSAtLWRpc2FibGUtZ2RibSAtLWRpc2FibGUtbG9jYWxlIC0tZGlzYWJsZS1keW5h bWljLW5zcyA+ICIkY2Znb3V0IiAyPiYxDQpkaWZmIC1ydXBOIHpzaC00LjMuMTctb3JpZy9jb25m aWd1cmUgenNoLTQuMy4xNy1zMS9jb25maWd1cmUNCi0tLSB6c2gtNC4zLjE3LW9yaWcvY29uZmln dXJlCTIwMTEtMDgtMTEgMjA6MDk6MDUuMDAwMDAwMDAwICswMjAwDQorKysgenNoLTQuMy4xNy1z MS9jb25maWd1cmUJMjAxMi0wMy0xMyAxNjo1NzoyOC4wODczNDIzMDAgKzAxMDANCkBAIC0zMzA0 LDcgKzMzMDQsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpDQog YWNfbGlua19kZWZhdWx0PWAkYXNfZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRl c3RbXiBdKi8vJ2ANCiANCiAjIFRoZSBwb3NzaWJsZSBvdXRwdXQgZmlsZXM6DQotYWNfZmlsZXM9 ImEub3V0IGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBhLmV4ZSBhX291dC5leGUgYi5vdXQgY29uZnRl c3QuKiINCithY19maWxlcz0iYS5vdXQgY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGEuZXhlIGFfb3V0 LmV4ZSBiLm91dCBjb25mdGVzdC5vIg0KIA0KIGFjX3JtZmlsZXM9DQogZm9yIGFjX2ZpbGUgaW4g JGFjX2ZpbGVzDQpAQCAtMTQwOTUsNyArMTQwOTUsNyBAQCBpZiB0ZXN0ICIkbm9fY3JlYXRlIiAh PSB5ZXM7IHRoZW4NCiAgIHRlc3QgIiRzaWxlbnQiID0geWVzICYmDQogICAgIGFjX2NvbmZpZ19z dGF0dXNfYXJncz0iJGFjX2NvbmZpZ19zdGF0dXNfYXJncyAtLXF1aWV0Ig0KICAgZXhlYyA1Pi9k ZXYvbnVsbA0KLSAgJFNIRUxMICRDT05GSUdfU1RBVFVTICRhY19jb25maWdfc3RhdHVzX2FyZ3Mg fHwgYWNfY3Nfc3VjY2Vzcz1mYWxzZQ0KKyAgJFNIRUxMICRDT05GSUdfU1RBVFVTIC1kICRhY19j b25maWdfc3RhdHVzX2FyZ3MgfHwgYWNfY3Nfc3VjY2Vzcz1mYWxzZQ0KICAgZXhlYyA1Pj5jb25m aWcubG9nDQogICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlm IHdpdGggJD8gPSAxLCB3aGljaA0KICAgIyB3b3VsZCBtYWtlIGNvbmZpZ3VyZSBmYWlsIGlmIHRo aXMgaXMgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24uDQpkaWZmIC1ydXBOIHpzaC00LjMuMTctb3JpZy9T cmMvYnVpbHRpbi5jIHpzaC00LjMuMTctczEvU3JjL2J1aWx0aW4uYw0KLS0tIHpzaC00LjMuMTct b3JpZy9TcmMvYnVpbHRpbi5jCTIwMTItMDItMDUgMjA6MjU6NTAuMDAwMDAwMDAwICswMTAwDQor KysgenNoLTQuMy4xNy1zMS9TcmMvYnVpbHRpbi5jCTIwMTItMDMtMTIgMTc6MzU6NDEuMDc3NTcy MDAwICswMTAwDQpAQCAtMTA3Miw3ICsxMDcyLDcgQEAgY2RfdHJ5X2NoZGlyKGNoYXIgKnBmaXgs IGNoYXIgKmRlc3QsIGludA0KICAgICAvKiBoYW5kbGUgZGlyZWN0b3J5IHByZWZpeCAqLw0KICAg ICBpZiAocGZpeCAmJiAqcGZpeCkgew0KIAlpZiAoKnBmaXggPT0gJy8nKSB7DQotI2lmZGVmIF9f Q1lHV0lOX18NCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMikNCiAv KiBOQjogRG9uJ3QgdHVybiAiLyIrImJpbiIgaW50byAiLy8iKyJiaW4iIGJ5IG1pc3Rha2UhICAi Ly9iaW4iIG1heSAqDQogICogbm90IGJlIHdoYXQgdXNlciByZWFsbHkgd2FudHMgKHByb2JhYmx5 IHdhbnRzICIvYmluIiksIGJ1dCAgICAgICAgKg0KICAqICIvL2JpbiIgY291bGQgYmUgdmFsaWQg dG9vIChzZWUgZml4ZGlyKCkpISAgVGhpcyBpcyBwcmltYXJpbHkgZm9yICoNCkBAIC0xMjIzLDcg KzEyMjMsNyBAQCBpbnQNCiBmaXhkaXIoY2hhciAqc3JjKQ0KIHsNCiAgICAgY2hhciAqZGVzdCA9 IHNyYywgKmQwID0gZGVzdDsNCi0jaWZkZWYgX19DWUdXSU5fXw0KKyNpZiBkZWZpbmVkKF9fQ1lH V0lOX18pIHx8IGRlZmluZWQoX1dJTjMyKQ0KICAgICBjaGFyICpzMCA9IHNyYzsNCiAjZW5kaWYN CiAgICAgaW50IHJldCA9IDA7DQpAQCAtMTI0Myw3ICsxMjQzLDcgQEAgZml4ZGlyKGNoYXIgKnNy YykNCiAgICAgZm9yICg7Oykgew0KIAkvKiBjb21wcmVzcyBtdWx0aXBsZSAvZXMgaW50byBzaW5n bGUgKi8NCiAJaWYgKCpzcmMgPT0gJy8nKSB7DQotI2lmZGVmIF9fQ1lHV0lOX18NCisjaWYgZGVm aW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMikNCiAJICAgIC8qIGFsbG93IGxlYWRp bmcgLy8gdW5kZXIgY3lnd2luLCBidXQgLy8vIHN0aWxsIGJlY29tZXMgLyAqLw0KIAkgICAgaWYg KHNyYyA9PSBzMCAmJiBzcmNbMV0gPT0gJy8nICYmIHNyY1syXSAhPSAnLycpDQogCQkqZGVzdCsr ID0gKnNyYysrOw0KQEAgLTUxNjMsNiArNTE2Myw3IEBAIGJpbl9yZWFkKGNoYXIgKm5hbWUsIGNo YXIgKiphcmdzLCBPcHRpb24NCiAgICAgfSBlbHNlDQogCXJlYWRmZCA9IGl6bGUgPSAwOw0KIA0K KyNpZiAhZGVmaW5lZChfV0lOMzIpDQogICAgIGlmIChPUFRfSVNTRVQob3BzLCdzJykgJiYgU0hU VFkgIT0gLTEpIHsNCiAJc3RydWN0IHR0eWluZm8gdGk7DQogCWdldHR5aW5mbygmdGkpOw0KQEAg LTUxNzUsNiArNTE3Niw3IEBAIGJpbl9yZWFkKGNoYXIgKm5hbWUsIGNoYXIgKiphcmdzLCBPcHRp b24NCiAjZW5kaWYNCiAJc2V0dHlpbmZvKCZ0aSk7DQogICAgIH0NCisjZW5kaWYNCiANCiAgICAg LyogaGFuZGxlIHByb21wdCAqLw0KICAgICBpZiAoZmlyc3RhcmcpIHsNCkBAIC01MjA4LDYgKzUy MTAsNyBAQCBiaW5fcmVhZChjaGFyICpuYW1lLCBjaGFyICoqYXJncywgT3B0aW9uDQogI2Vsc2UN CiAgICAgICAgIGRlbGltID0gKGRlbGltc3RyWzBdID09IE1ldGEpID8gZGVsaW1zdHJbMV0gXiAz MiA6IGRlbGltc3RyWzBdOw0KICNlbmRpZg0KKyNpZiAhZGVmaW5lZChfV0lOMzIpDQogCWlmIChT SFRUWSAhPSAtMSkgew0KIAkgICAgc3RydWN0IHR0eWluZm8gdGk7DQogCSAgICBnZXR0eWluZm8o JnRpKTsNCkBAIC01MjI0LDYgKzUyMjcsNyBAQCBiaW5fcmVhZChjaGFyICpuYW1lLCBjaGFyICoq YXJncywgT3B0aW9uDQogI2VuZGlmDQogCSAgICBzZXR0eWluZm8oJnRpKTsNCiAJfQ0KKyNlbmRp Zg0KICAgICB9DQogICAgIGlmIChPUFRfSVNTRVQob3BzLCd0JykpIHsNCiAJemxvbmcgdGltZW91 dCA9IDA7DQpkaWZmIC1ydXBOIHpzaC00LjMuMTctb3JpZy9TcmMvY29tcGF0LmMgenNoLTQuMy4x Ny1zMS9TcmMvY29tcGF0LmMNCi0tLSB6c2gtNC4zLjE3LW9yaWcvU3JjL2NvbXBhdC5jCTIwMTAt MDYtMTQgMjA6MzA6MDAuMDAwMDAwMDAwICswMjAwDQorKysgenNoLTQuMy4xNy1zMS9TcmMvY29t cGF0LmMJMjAxMi0wMy0xMiAxNzozODoxOC41NjE3MjIxMDAgKzAxMDANCkBAIC0yNjIsNyArMjYy LDcgQEAgemdldGRpcihzdHJ1Y3QgZGlyc2F2ICpkKQ0KICAgICBzdHJ1Y3Qgc3RhdCBzYnVmOw0K ICAgICBpbm9fdCBwaW5vOw0KICAgICBkZXZfdCBwZGV2Ow0KLSNpZiAhZGVmaW5lZChfX0NZR1dJ Tl9fKSAmJiAhZGVmaW5lZChVU0VfR0VUQ1dEKQ0KKyNpZiAhZGVmaW5lZChfX0NZR1dJTl9fKSAm JiAhZGVmaW5lZChVU0VfR0VUQ1dEKSAmJiAhZGVmaW5lZChfV0lOMzIpDQogICAgIHN0cnVjdCBk aXJlbnQgKmRlOw0KICAgICBESVIgKmRpcjsNCiAgICAgZGV2X3QgZGV2Ow0KQEAgLTI4Myw3ICsy ODMsNyBAQCB6Z2V0ZGlyKHN0cnVjdCBkaXJzYXYgKmQpDQogICAgIHBkZXYgPSBzYnVmLnN0X2Rl djsNCiAgICAgaWYgKGQpDQogCWQtPmlubyA9IHBpbm8sIGQtPmRldiA9IHBkZXY7DQotI2lmICFk ZWZpbmVkKF9fQ1lHV0lOX18pICYmICFkZWZpbmVkKFVTRV9HRVRDV0QpDQorI2lmICFkZWZpbmVk KF9fQ1lHV0lOX18pICYmICFkZWZpbmVkKFVTRV9HRVRDV0QpICYmICFkZWZpbmVkKF9XSU4zMikN CiAjaWZkZWYgSEFWRV9GQ0hESVINCiAgICAgZWxzZQ0KICNlbmRpZg0KZGlmZiAtcnVwTiB6c2gt NC4zLjE3LW9yaWcvU3JjL2V4ZWMuYyB6c2gtNC4zLjE3LXMxL1NyYy9leGVjLmMNCi0tLSB6c2gt NC4zLjE3LW9yaWcvU3JjL2V4ZWMuYwkyMDEyLTAyLTEyIDIxOjE4OjQyLjAwMDAwMDAwMCArMDEw MA0KKysrIHpzaC00LjMuMTctczEvU3JjL2V4ZWMuYwkyMDEyLTAzLTEzIDE1OjUwOjQ4LjI4MTI1 MDAwMCArMDEwMA0KQEAgLTgwMCwxMSArODAwLDE3IEBAIGZpbmRjbWQoY2hhciAqYXJnMCwgaW50 IGRvY29weSkNCiBpbnQNCiBpc2NvbShjaGFyICpzKQ0KIHsNCi0gICAgc3RydWN0IHN0YXQgc3Rh dGJ1ZjsNCiAgICAgY2hhciAqdXMgPSB1bm1ldGEocyk7DQogDQorI2lmIGRlZmluZWQoX1dJTjMy KQ0KKyAgICAvKiBvdXIgYWNjZXNzKCkgaXMgYWx3YXlzIGZhbHNlIGZvciBkaXJlY3RvcmllcyAq Lw0KKyAgICByZXR1cm4gKGFjY2Vzcyh1cywgWF9PSykgPT0gMCk7DQorI2Vsc2UNCisgICAgc3Ry dWN0IHN0YXQgc3RhdGJ1ZjsNCisNCiAgICAgcmV0dXJuIChhY2Nlc3ModXMsIFhfT0spID09IDAg JiYgc3RhdCh1cywgJnN0YXRidWYpID49IDAgJiYNCiAJICAgIFNfSVNSRUcoc3RhdGJ1Zi5zdF9t b2RlKSk7DQorI2VuZGlmDQogfQ0KIA0KIC8qKi8NCkBAIC0zNjMzLDcgKzM2MzksMTEgQEAgZ2V0 aGVyZXN0cihzdHJ1Y3QgcmVkaXIgKmZuKQ0KIAlyZXR1cm4gLTE7DQogICAgIHdyaXRlX2xvb3Ao ZmQsIHQsIGxlbik7DQogICAgIGNsb3NlKGZkKTsNCisjaWYgZGVmaW5lZChfV0lOMzIpDQorICAg IGZkID0gb3BlbihzLCBPX1JET05MWSB8IE9fTk9DVFRZIHwgT19URU1QT1JBUlkpOw0KKyNlbHNl DQogICAgIGZkID0gb3BlbihzLCBPX1JET05MWSB8IE9fTk9DVFRZKTsNCisjZW5kaWYNCiAgICAg dW5saW5rKHMpOw0KICAgICByZXR1cm4gZmQ7DQogfQ0KZGlmZiAtcnVwTiB6c2gtNC4zLjE3LW9y aWcvU3JjL2hpc3QuYyB6c2gtNC4zLjE3LXMxL1NyYy9oaXN0LmMNCi0tLSB6c2gtNC4zLjE3LW9y aWcvU3JjL2hpc3QuYwkyMDEyLTAyLTA5IDIyOjU1OjE5LjAwMDAwMDAwMCArMDEwMA0KKysrIHpz aC00LjMuMTctczEvU3JjL2hpc3QuYwkyMDEyLTAzLTEyIDE4OjEyOjI2LjI5ODYxNjUwMCArMDEw MA0KQEAgLTIzOTAsOCArMjM5MCw4IEBAIHJlYWRoaXN0ZmlsZShjaGFyICpmbiwgaW50IGVyciwg aW50IHJlYWQNCiAgICAgdW5sb2NraGlzdGZpbGUoZm4pOw0KIH0NCiANCi0jaWZkZWYgSEFWRV9G Q05UTF9IDQogc3RhdGljIGludCBmbG9ja19mZCA9IC0xOw0KKyNpZiBkZWZpbmVkKEhBVkVfRkNO VExfSCkgJiYgIWRlZmluZWQoX1dJTjMyKQ0KIA0KIC8qDQogICogTG9jayBmaWxlIHVzaW5nIGZj bnRsKCkuICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAxIG9uIGZhaWx1cmUgb2YNCkBAIC0yNjM1LDcg KzI2MzUsNyBAQCBsb2NraGlzdGZpbGUoY2hhciAqZm4sIGludCBrZWVwX3RyeWluZykNCiAgICAg aWYgKCFmbiAmJiAhKGZuID0gZ2V0c3BhcmFtKCJISVNURklMRSIpKSkNCiAJcmV0dXJuIDE7DQog DQotI2lmZGVmIEhBVkVfRkNOVExfSA0KKyNpZiBkZWZpbmVkKEhBVkVfRkNOVExfSCkgJiYgIWRl ZmluZWQoX1dJTjMyKQ0KICAgICBpZiAoaXNzZXQoSElTVEZDTlRMTE9DSykgJiYgZmxvY2tfZmQg PCAwKSB7DQogCXJldCA9IGZsb2NraGlzdGZpbGUoZm4sIGtlZXBfdHJ5aW5nKTsNCiAJaWYgKHJl dCkNCmRpZmYgLXJ1cE4genNoLTQuMy4xNy1vcmlnL1NyYy9pbml0LmMgenNoLTQuMy4xNy1zMS9T cmMvaW5pdC5jDQotLS0genNoLTQuMy4xNy1vcmlnL1NyYy9pbml0LmMJMjAxMi0wMi0wNSAyMDoy NDozMC4wMDAwMDAwMDAgKzAxMDANCisrKyB6c2gtNC4zLjE3LXMxL1NyYy9pbml0LmMJMjAxMi0w My0xNCAxODoyMjoyMi44MzE0MzI2MDAgKzAxMDANCkBAIC00MjcsNiArNDI3LDE5IEBAIGluaXRf aW8odm9pZCkNCiAgICAgLyogU2VuZCB4dHJhY2Ugb3V0cHV0IHRvIHN0ZGVyciAtLSBzZWUgZXhl Y2NtZCgpICovDQogICAgIHh0cmVyciA9IHN0ZGVycjsNCiANCisjaWYgZGVmaW5lZChfV0lOMzIp DQorICAgIHsNCisJaW50IGZkOw0KKwlTSFRUWSA9IG1vdmVmZChvcGVuKCJDT05JTiQiLCBPX1JE T05MWSkpOw0KKwlmZCA9IG9wZW4oIkNPTk9VVCQiLCBPX1dST05MWSk7DQorCWlmIChpbnRlcmFj dCAmJiBTSFRUWSAhPSAtMSkgew0KKwkgICAgc2hvdXQgPSBmZG9wZW4oZmQsInciKTsNCisJICAg IGlmKCFzaG91dCkNCisJCW9wdHNbVVNFWkxFXSA9IDA7DQorCX0gZWxzZQ0KKwkgICAgb3B0c1tV U0VaTEVdID0gMDsNCisgICAgfQ0KKyNlbHNlDQogICAgIC8qIE1ha2Ugc3VyZSB0aGUgdHR5IGlz IG9wZW5lZCByZWFkL3dyaXRlLiAqLw0KICAgICBpZiAoaXNhdHR5KDApKSB7DQogCXpzZnJlZSh0 dHlzdHJuYW1lKTsNCkBAIC00OTksNiArNTEyLDcgQEAgaW5pdF9pbyh2b2lkKQ0KIAkgICAgb3B0 c1tVU0VaTEVdID0gMDsNCiAgICAgfSBlbHNlDQogCW9wdHNbVVNFWkxFXSA9IDA7DQorI2VuZGlm IC8qIF9XSU4zMiAqLw0KIA0KICNpZmRlZiBKT0JfQ09OVFJPTA0KICAgICAvKiBJZiBpbnRlcmFj dGl2ZSwgbWFrZSBzdXJlIHRoZSBzaGVsbCBpcyBpbiB0aGUgZm9yZWdyb3VuZCBhbmQgaXMgdGhl DQpAQCAtOTE4LDExICs5MzIsMTYgQEAgc2V0dXB2YWxzKHZvaWQpDQogI2lmZGVmIFRJT0NHV0lO U1oNCiAgICAgYWRqdXN0d2luc2l6ZSgwKTsNCiAjZWxzZQ0KKyMgaWYgZGVmaW5lZChfV0lOMzIp DQorICAgIHp0ZXJtX2xpbmVzID0gbnRfZ2V0bGluZXMoKTsNCisgICAgenRlcm1fY29sdW1ucyA9 IG50X2dldGNvbHVtbnMoKTsNCisjIGVsc2UNCiAgICAgLyogY29sdW1ucyBhbmQgbGluZXMgYXJl IG5vcm1hbGx5IHplcm8sIHVubGVzcyBzb21ldGhpbmcgZGlmZmVyZW50ICoNCiAgICAgICogd2Fz IGluaGVyZXRlZCBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIElmIGVpdGhlciBvZiB0aGVtIGFyZSB6 ZXJvICoNCiAgICAgICogdGhlIHNldGlwYXJhbSBjYWxscyBiZWxvdyBzZXQgdGhlbSB0byB0aGUg ZGVmYXVsdHMgZnJvbSB0ZXJtY2FwICovDQogICAgIHNldGlwYXJhbSgiQ09MVU1OUyIsIHp0ZXJt X2NvbHVtbnMpOw0KICAgICBzZXRpcGFyYW0oIkxJTkVTIiwgenRlcm1fbGluZXMpOw0KKyMgZW5k aWYNCiAjZW5kaWYNCiANCiAjaWZkZWYgSEFWRV9HRVRSTElNSVQNCmRpZmYgLXJ1cE4genNoLTQu My4xNy1vcmlnL1NyYy9ta21ha2Vtb2Quc2ggenNoLTQuMy4xNy1zMS9TcmMvbWttYWtlbW9kLnNo DQotLS0genNoLTQuMy4xNy1vcmlnL1NyYy9ta21ha2Vtb2Quc2gJMjAxMS0wNS0xMyAyMDowNzoz NS4wMDAwMDAwMDAgKzAyMDANCisrKyB6c2gtNC4zLjE3LXMxL1NyYy9ta21ha2Vtb2Quc2gJMjAx Mi0wMy0xNSAxNjowMTo1MC4xNDg2MzIzMDAgKzAxMDANCkBAIC00NjQsNyArNDY0LDcgQEAgZmkN CiBpZiAkc2Vjb25kX3N0YWdlIDsgdGhlbg0KICAgICB0cmFwICJybSAtZiAkdGhlX3N1YmRpci8k e3RoZV9tYWtlZmlsZX07IGV4aXQgMSIgMSAyIDE1DQogDQotICAgICR7Q09ORklHX1NIRUxMLS9i aW4vc2h9IC4vY29uZmlnLnN0YXR1cyBcDQorICAgICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4v Y29uZmlnLnN0YXR1cyAtZFwNCiAJLS1maWxlPSR0aGVfc3ViZGlyLyR7dGhlX21ha2VmaWxlfTok dGhlX3N1YmRpci8ke3RoZV9tYWtlZmlsZX0uaW4gfHwNCiAgICAgZXhpdCAxDQogZmkNCmRpZmYg LXJ1cE4genNoLTQuMy4xNy1vcmlnL1NyYy91dGlscy5jIHpzaC00LjMuMTctczEvU3JjL3V0aWxz LmMNCi0tLSB6c2gtNC4zLjE3LW9yaWcvU3JjL3V0aWxzLmMJMjAxMS0xMi0xMSAyMDoyOToyNi4w MDAwMDAwMDAgKzAxMDANCisrKyB6c2gtNC4zLjE3LXMxL1NyYy91dGlscy5jCTIwMTItMDMtMTMg MTY6MzM6MTAuMTgwNjkxNjAwICswMTAwDQpAQCAtMTUwOCwxMCArMTUwOCwxMiBAQCBnZXR0eWlu Zm8oc3RydWN0IHR0eWluZm8gKnRpKQ0KICMgaWZkZWYgSEFWRV9URVJNSU9fSA0KIAlpb2N0bChT SFRUWSwgVENHRVRBLCAmdGktPnRpbyk7DQogIyBlbHNlDQorIyAgaWYgIWRlZmluZWQoX1dJTjMy KQ0KIAlpb2N0bChTSFRUWSwgVElPQ0dFVFAsICZ0aS0+c2d0dHliKTsNCiAJaW9jdGwoU0hUVFks IFRJT0NMR0VULCAmdGktPmxtb2Rlcyk7DQogCWlvY3RsKFNIVFRZLCBUSU9DR0VUQywgJnRpLT50 Y2hhcnMpOw0KIAlpb2N0bChTSFRUWSwgVElPQ0dMVEMsICZ0aS0+bHRjaGFycyk7DQorIyAgZW5k aWYNCiAjIGVuZGlmDQogI2VuZGlmDQogICAgIH0NCkBAIC0xNTM4LDEwICsxNTQwLDEyIEBAIHNl dHR5aW5mbyhzdHJ1Y3QgdHR5aW5mbyAqdGkpDQogIyBpZmRlZiBIQVZFX1RFUk1JT19IDQogCWlv Y3RsKFNIVFRZLCBUQ1NFVEEsICZ0aS0+dGlvKTsNCiAjIGVsc2UNCisjICBpZiAhZGVmaW5lZChf V0lOMzIpDQogCWlvY3RsKFNIVFRZLCBUSU9DU0VUTiwgJnRpLT5zZ3R0eWIpOw0KIAlpb2N0bChT SFRUWSwgVElPQ0xTRVQsICZ0aS0+bG1vZGVzKTsNCiAJaW9jdGwoU0hUVFksIFRJT0NTRVRDLCAm dGktPnRjaGFycyk7DQogCWlvY3RsKFNIVFRZLCBUSU9DU0xUQywgJnRpLT5sdGNoYXJzKTsNCisj ICBlbmRpZg0KICMgZW5kaWYNCiAjZW5kaWYNCiAgICAgfQ0KQEAgLTE2MjQsNyArMTYyOCw3IEBA IHZvaWQNCiBhZGp1c3R3aW5zaXplKGludCBmcm9tKQ0KIHsNCiAgICAgc3RhdGljIGludCBnZXR3 aW5zeiA9IDE7DQotI2lmZGVmIFRJT0NHV0lOU1oNCisjaWYgZGVmaW5lZChUSU9DR1dJTlNaKSAm JiAhZGVmaW5lZChfV0lOMzIpDQogICAgIGludCB0dHlyb3dzID0gc2h0dHlpbmZvLndpbnNpemUu d3Nfcm93Ow0KICAgICBpbnQgdHR5Y29scyA9IHNodHR5aW5mby53aW5zaXplLndzX2NvbDsNCiAj ZW5kaWYNCkBAIC0yMzc4LDYgKzIzODIsNyBAQCBnZXRxdWVyeShjaGFyICp2YWxpZF9jaGFycywg aW50IHB1cmdlKQ0KICAgICBhdHRhY2h0dHkobXlwZ3JwKTsNCiANCiAgICAgZ2V0dHlpbmZvKCZ0 aSk7DQorI2lmICFkZWZpbmVkKF9XSU4zMikNCiAjaWZkZWYgSEFTX1RJTw0KICAgICB0aS50aW8u Y19sZmxhZyAmPSB+RUNITzsNCiAgICAgaWYgKCFpc2VtKSB7DQpAQCAtMjM5MCw2ICsyMzk1LDcg QEAgZ2V0cXVlcnkoY2hhciAqdmFsaWRfY2hhcnMsIGludCBwdXJnZSkNCiAgICAgaWYgKCFpc2Vt KQ0KIAl0aS5zZ3R0eWIuc2dfZmxhZ3MgfD0gQ0JSRUFLOw0KICNlbmRpZg0KKyNlbmRpZg0KICAg ICBzZXR0eWluZm8oJnRpKTsNCiANCiAgICAgaWYgKG5vcXVlcnkocHVyZ2UpKSB7DQpAQCAtMzg1 MCw2ICszODU2LDcgQEAgc3BkaXN0KGNoYXIgKnMsIGNoYXIgKnQsIGludCB0aHJlc2gpDQogdm9p ZA0KIHNldGNicmVhayh2b2lkKQ0KIHsNCisjaWYgIWRlZmluZWQoX1dJTjMyKQ0KICAgICBzdHJ1 Y3QgdHR5aW5mbyB0aTsNCiANCiAgICAgdGkgPSBzaHR0eWluZm87DQpAQCAtMzg2MSw2ICszODY4 LDcgQEAgc2V0Y2JyZWFrKHZvaWQpDQogICAgIHRpLnNndHR5Yi5zZ19mbGFncyB8PSBDQlJFQUs7 DQogI2VuZGlmDQogICAgIHNldHR5aW5mbygmdGkpOw0KKyNlbmRpZg0KIH0NCiANCiAvKiBnaXZl IHRoZSB0dHkgdG8gc29tZSBwcm9jZXNzICovDQpAQCAtMzg2OSw2ICszODc3LDcgQEAgc2V0Y2Jy ZWFrKHZvaWQpDQogbW9kX2V4cG9ydCB2b2lkDQogYXR0YWNodHR5KHBpZF90IHBncnApDQogew0K KyNpZiAhZGVmaW5lZChfV0lOMzIpDQogICAgIHN0YXRpYyBpbnQgZXAgPSAwOw0KIA0KICAgICBp ZiAoam9iYmluZyAmJiBpbnRlcmFjdCkgew0KQEAgLTM4OTcsNiArMzkwNiw3IEBAIGF0dGFjaHR0 eShwaWRfdCBwZ3JwKQ0KIAkgICAgfQ0KIAl9DQogICAgIH0NCisjZW5kaWYNCiB9DQogDQogLyog Z2V0IHRoZSBwcm9jZXNzIGdyb3VwIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHR5ICovDQpAQCAtMzkw NSw2ICszOTE1LDkgQEAgYXR0YWNodHR5KHBpZF90IHBncnApDQogcGlkX3QNCiBnZXR0eWdycCh2 b2lkKQ0KIHsNCisjaWYgZGVmaW5lZChfV0lOMzIpDQorICAgIHJldHVybiAwOw0KKyNlbHNlDQog ICAgIHBpZF90IGFyZzsNCiANCiAgICAgaWYgKFNIVFRZID09IC0xKQ0KQEAgLTM5MTcsNiArMzkz MCw3IEBAIGdldHR5Z3JwKHZvaWQpDQogI2VuZGlmDQogDQogICAgIHJldHVybiBhcmc7DQorI2Vu ZGlmDQogfQ0KIA0KIA0KZGlmZiAtcnVwTiB6c2gtNC4zLjE3LW9yaWcvU3JjL3dpbjMyL2NvbmZp Zy5zaXRlIHpzaC00LjMuMTctczEvU3JjL3dpbjMyL2NvbmZpZy5zaXRlDQotLS0genNoLTQuMy4x Ny1vcmlnL1NyYy93aW4zMi9jb25maWcuc2l0ZQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw MCArMDEwMA0KKysrIHpzaC00LjMuMTctczEvU3JjL3dpbjMyL2NvbmZpZy5zaXRlCTIwMTItMDMt MTUgMTg6NTU6MDcuMjMxMDk5NDAwICswMTAwDQpAQCAtMCwwICsxIEBADQorYWNfZXhlY3V0YWJs ZV9leHRlbnNpb25zPS5leGUNCmRpZmYgLXJ1cE4genNoLTQuMy4xNy1vcmlnL1NyYy93aW4zMi9k b2MvQlVJTEQudHh0IHpzaC00LjMuMTctczEvU3JjL3dpbjMyL2RvYy9CVUlMRC50eHQNCi0tLSB6 c2gtNC4zLjE3LW9yaWcvU3JjL3dpbjMyL2RvYy9CVUlMRC50eHQJMTk3MC0wMS0wMSAwMTowMDow MC4wMDAwMDAwMDAgKzAxMDANCisrKyB6c2gtNC4zLjE3LXMxL1NyYy93aW4zMi9kb2MvQlVJTEQu dHh0CTIwMTItMDMtMTUgMTk6MjE6NTAuNjY0MTYyOTAwICswMTAwDQpAQCAtMCwwICsxLDE2IEBA DQorDQorQlVJTEQNCistLS0tLQ0KKw0KK0hvdyB0byBidWlsZCB0aGUgcHJvdG90eXBlOg0KKw0K K0dldCB0aGUgbWluZ3cgY29tcGlsZXIgKHd3dy5taW5ndy5vcmcpIGFuZCBpbnN0YWxsIGl0LiBB ZGQgdGhlIG1pbmd3DQorY29tcGlsZXIgYW5kIHRvb2xzIHRvIFBBVEguDQorUHV0IHNlZCwgYXdr LCBncmVwIGFuZCBjb3JldXRpbCBwYWNrYWdlcyBmcm9tIGdudXdpbjMyIGluIC9iaW4uDQorUHV0 IHpzaCAzLjAuOC4xIGluIC9iaW4gYW5kIGNyZWF0ZSBhIGhhcmRsaW5rIGZyb20gL2Jpbi96c2gu ZXhlIHRvDQorL2Jpbi9zaC5leGUuIEFkZCAvYmluIHRvIFBBVEguDQorQ29weSBhbmQgYWRhcHQg dGhlIHpzaCAzLjAuOC4xIHN0YXJ0dXAgZmlsZXMuDQorDQorT3BlbiBhIHpzaCAzLjAuOC4xIGNv bW1hbmQgd2luZG93IGFuZCBleGVjdXRlDQorLi8wLW1pbmd3LWNvbmYNCittaW5ndzMyLW1ha2UN ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQ0KZGlmZiAtcnVwTiB6c2gtNC4zLjE3LW9yaWcv U3JjL3dpbjMyL2dycC5oIHpzaC00LjMuMTctczEvU3JjL3dpbjMyL2dycC5oDQotLS0genNoLTQu My4xNy1vcmlnL1NyYy93aW4zMi9ncnAuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCAr MDEwMA0KKysrIHpzaC00LjMuMTctczEvU3JjL3dpbjMyL2dycC5oCTIwMTItMDMtMTUgMTg6NTU6 MDcuMjMxMDk5NDAwICswMTAwDQpAQCAtMCwwICsxLDY3IEBADQorLyotDQorICogQ29weXJpZ2h0 IChjKSAxOTg5LCAxOTkzDQorICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2Fs aWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICogKGMpIFVOSVggU3lzdGVtIExhYm9y YXRvcmllcywgSW5jLg0KKyAqIEFsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUg ZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkDQorICogdG8gdGhlIFVuaXZlcnNpdHkgb2Yg Q2FsaWZvcm5pYSBieSBBbWVyaWNhbiBUZWxlcGhvbmUgYW5kIFRlbGVncmFwaA0KKyAqIENvLiBv ciBVbml4IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVp biB3aXRoDQorICogdGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJ bmMuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCisgKiBhcmUgbWV0Og0KKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo ZQ0KKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5p dmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMNCisgKiAgICBtYXkgYmUg dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUNCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4N CisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENP TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EDQorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UNCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdF TlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KKyAq IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTDQorICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pDQorICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QN CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkgQVJJU0lORyBJTiBBTlkgV0FZDQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRg0KKyAqIFNVQ0ggREFNQUdF Lg0KKyAqDQorICoJQCgjKWdycC5oCTguMiAoQmVya2VsZXkpIDEvMjEvOTQNCisgKi8NCisvKiBm cm9tDQorICogJE9wZW5CU0Q6IGdycC5oLHYgMS44IDIwMDUvMTIvMTMgMDA6MzU6MjIgbWlsbGVy dCBFeHAgJA0KKyAqIG9sZGZhYmVyQGdtYWlsLmNvbTogc2ltcGxpZmllZA0KKyAqLw0KKw0KKyNp Zm5kZWYJX0dSUF9IXw0KKyNkZWZpbmUJX0dSUF9IXwkxDQorDQorI2luY2x1ZGUgInVuaV90eXBl cy5oIg0KKw0KKw0KK3N0cnVjdCBncm91cA0KK3sNCisJY2hhcgkqZ3JfbmFtZTsJCS8qIGdyb3Vw IG5hbWUgKi8NCisJY2hhcgkqZ3JfcGFzc3dkOwkJLyogZ3JvdXAgcGFzc3dvcmQgKi8NCisJZ2lk X3QJZ3JfZ2lkOwkJCS8qIGdyb3VwIGlkICovDQorCWNoYXIJKipncl9tZW07CQkvKiBncm91cCBt ZW1iZXJzICovDQorfTsNCisNCisNCisjaWZkZWYJX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsN CisjZW5kaWYNCisNCitzdHJ1Y3QgZ3JvdXAgKmdldGdybmFtKGNvbnN0IGNoYXIgKm5hbWUpOw0K K3N0cnVjdCBncm91cCAqZ2V0Z3JnaWQoZ2lkX3QgZ2lkKTsNCisNCisjaWZkZWYJX19jcGx1c3Bs dXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qICFfR1JQX0hfICovDQpkaWZmIC1ydXBOIHpz aC00LjMuMTctb3JpZy9TcmMvd2luMzIvbGliL2R1bW15LmMgenNoLTQuMy4xNy1zMS9TcmMvd2lu MzIvbGliL2R1bW15LmMNCi0tLSB6c2gtNC4zLjE3LW9yaWcvU3JjL3dpbjMyL2xpYi9kdW1teS5j CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwDQorKysgenNoLTQuMy4xNy1zMS9T cmMvd2luMzIvbGliL2R1bW15LmMJMjAxMi0wMy0xNSAxMzoyNjo1NC41NzcxNzY4MDAgKzAxMDAN CkBAIC0wLDAgKzEsMzI3IEBADQorLyotDQorICogQ29weXJpZ2h0IChjKSAyMDExLCAuLi4NCisg KiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z DQorICogYXJlIG1ldDoNCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4NCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKiAzLiBUaGUgbmFtZXMgb2YgdGhlIGNvbnRy aWJ1dG9ycyBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlDQorICogICAgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORA0KKyAqIEFOWSBFWFBS RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQ0KKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwNCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUw0KKyAqIE9SIFNFUlZJQ0VTOyBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQ0KKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwgU1RSSUNUDQorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQ0KKyAqIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg T0YNCisgKiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisvKg0KKyAqIGYvZjoNCisgKiAgICAgIGR1 bW15IGJvZHkgZm9yIGxpYnJhcnkgZnVuY3Rpb25zDQorICovDQorDQorI2luY2x1ZGUgPHN5cy90 eXBlcy5oPg0KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KKyNpbmNsdWRlIDxlcnJuby5oPg0KKyNp bmNsdWRlIDxzdGRsaWIuaD4NCisNCisjaW5jbHVkZSAiLi4vdW5pX3R5cGVzLmgiDQorI2luY2x1 ZGUgInN5cy90aW1lcy5oIg0KKw0KKy8qIGhhY2sgZm9yIGNvbmZpZ3VyZSAqLw0KK3N0YXRpYyBp bnQgZm9yY2Vmb3JrOw0KKw0KK3VpZF90IGdldHVpZCh2b2lkKQ0KK3sNCisJcmV0dXJuIDA7DQor fQ0KKw0KK2dpZF90IGdldGdpZCh2b2lkKQ0KK3sNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3VpZF90 IGdldGV1aWQodm9pZCkNCit7DQorCXJldHVybiAwOw0KK30NCisNCitnaWRfdCBnZXRlZ2lkKHZv aWQpDQorew0KKwlyZXR1cm4gMDsNCit9DQorDQorcGlkX3QgZ2V0cHBpZCh2b2lkKQ0KK3sNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3Vuc2lnbmVkIGludCBzbGVlcCh1bnNpZ25lZCBpbnQgc2Vjb25k cykNCit7DQorICAgICAgICByZXR1cm4gKDApOw0KK30NCisNCitzdGF0aWMgdm9pZCBpbml0X3Bh c3N3ZCh2b2lkKQ0KK3sNCit9DQorDQorc3RydWN0IHBhc3N3ZCAqZ2V0cHduYW0oY29uc3QgY2hh ciAqbmFtZSkNCit7DQorICAgICAgIAlyZXR1cm4gTlVMTDsNCit9DQorDQorc3RydWN0IHBhc3N3 ZCAqZ2V0cHd1aWQodWlkX3QgdWlkKQ0KK3sNCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0KK3N0cnVj dCBncm91cCAqIGdldGdybmFtKGNvbnN0IGNoYXIgKm5hbWUpDQorew0KKwlyZXR1cm4gTlVMTDsN Cit9DQorDQorcGlkX3QgZ2V0cGdycCh2b2lkKQ0KK3sNCisgICAgICAgIHJldHVybiAoMCk7DQor fQ0KKw0KK2ludCBzZXRwZ2lkKHBpZF90IHBpZCwgcGlkX3QgcGdpZCkNCit7DQorICAgICAgICAv KiBhbHdheXMgc3VjY2VlZCAqLw0KKyAgICAgICAgcmV0dXJuICgwKTsNCit9DQorDQorY2hhciAq Z2V0bG9naW4odm9pZCkNCit7DQorCXJldHVybiBOVUxMOw0KK30NCisNCitzdHJ1Y3QgcGFzc3dk ICogZ2V0cHdlbnQodm9pZCkNCit7DQorICAgICAgICByZXR1cm4gKE5VTEwpOw0KK30NCisNCit2 b2lkIGVuZHB3ZW50KCkNCit7DQorICAgICAgICByZXR1cm47DQorfQ0KKw0KK3ZvaWQgc2V0cHdl bnQoKQ0KK3sNCisgICAgICAgIHJldHVybjsNCit9DQorDQoraW50IGdldGdyb3VwcyhpbnQgZ2lk c2V0c2l6ZSwgZ2lkX3QgZ3JvdXBsaXN0W10pDQorew0KKwkvKiAwIGdyb3VwcyAqLw0KKwlyZXR1 cm4gKDApOw0KK30NCisNCitzdHJ1Y3QgZ3JvdXAgKmdldGdyZ2lkKGdpZF90IGdpZCkNCit7DQor CXJldHVybiAoTlVMTCk7DQorfQ0KKw0KK2ludCBnZXRob3N0bmFtZShjaGFyICpidWYsIGludCBs ZW4pDQorew0KKyAgICAgICAgcmV0dXJuICgtMSk7DQorfQ0KKw0KK2NoYXIgKnR0eW5hbWUoaW50 IGZkKQ0KK3sNCisgICAgICAgIHJldHVybiBOVUxMOw0KK30NCisNCitpbnQgcmVhZGxpbmsoY29u c3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgbGVuKQ0KK3sNCisJLyogYWx3YXlzIGZh aWwgKi8NCisgICAgICAgIHJldHVybiAoLTEpOw0KK30NCisNCitpbnQgbGluayhjb25zdCBjaGFy ICpvbGRuYW1lLCBjb25zdCBjaGFyICpuZXduYW1lKQ0KK3sNCisJLyogYWx3YXlzIGZhaWwgKi8N CisgICAgICAgIHJldHVybiAoLTEpOw0KK30NCisNCitpbnQgY2hvd24gKGNvbnN0IGNoYXIgKmZp bGVuYW1lLCB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXApDQorew0KKwkvKiBhbHdheXMgc3VjY2Vl ZCAqLw0KKyAgICAgICAgcmV0dXJuICgwKTsNCit9DQorDQorY2xvY2tfdCB0aW1lcyhzdHJ1Y3Qg dG1zICppZ25vcmUpDQorew0KKwlyZXR1cm4gKGNsb2NrX3QpKC0xKTsNCit9DQorDQoraW50IGZv cmsodm9pZCkNCit7DQorCWlmIChmb3JjZWZvcmspIHsNCisJCWZvcmNlZm9yayA9IDA7DQorICAg ICAgICAgICAgICAgIHJldHVybiAoMCk7DQorCX0NCisgICAgICAgIGVycm5vID0gRU5PTUVNOw0K KyAgICAgICAgcmV0dXJuICgtMSk7DQorfQ0KKw0KK3ZvaWQgKnNicmsocHRyZGlmZl90IGRlbHRh KQ0KK3sNCisgICAgICAgIHJldHVybiBOVUxMOw0KK30NCisNCitpbnQgd2FpdHBpZChwaWRfdCBw aWQsIGludCAqc3RhdGxvYywgaW50IG9wdGlvbnMpDQorew0KKyAgICAgICAgcmV0dXJuICgtMSk7 DQorfQ0KKw0KK2ludCBraWxsKGludCBwaWQsIGludCBzaWcpDQorew0KKyAgICAgICAgcmV0dXJu ICgtMSk7DQorfQ0KKw0KK2ludCBuaWNlKGludCBuaWNlbmVzcykNCit7DQorICAgICAgICByZXR1 cm4gKC0xKTsNCit9DQorDQordW5zaWduZWQgaW50IGFsYXJtKHVuc2lnbmVkIGludCBzZWNvbmRz KQ0KK3sNCisgICAgICAgIHJldHVybiAwOw0KK30NCisNCitpbnQgZmNudGwoaW50IGZkLCBpbnQg Y29tbWFuZCwgLi4uKQ0KK3sNCisgICAgICAgIHJldHVybiAwOw0KK30NCisNCitpbnQgbnRfZXhl Y3ZlKGNvbnN0IGNoYXIgKnByb2csIGNoYXIgKiphcmd2LCBjaGFyICoqZW52KQ0KK3sNCisgICAg ICAgIHJldHVybiAwOw0KK30NCisNCitpbnQgbnRfaXNhdHR5KGludCBmZCkNCit7DQorICAgICAg ICByZXR1cm4gMDsNCit9DQorDQoraW50IG50X2ZzdGF0KGludCBmZCwgc3RydWN0IHN0YXQgKmZz KQ0KK3sNCisgICAgICAgIHJldHVybiBmc3RhdChmZCwgZnMpOw0KK30NCisNCitpbnQgbnRfc3Rh dChjb25zdCBjaGFyICpmbiwgc3RydWN0IHN0YXQgKmZzKQ0KK3sNCisgICAgICAgIHJldHVybiBz dGF0KGZuLCBmcyk7DQorfQ0KKw0KK2ludCBwaXBlKGludCBwaXBlZmRbMl0pDQorew0KKyAgICAg ICAgcmV0dXJuICgtMSk7DQorfQ0KKw0KKy8qIHNpZ25hbCBoYW5kbGluZyAqLw0KK3ZvaWQgX250 X3NpZ25hbCh2b2lkKQ0KK3sNCit9DQorDQoraW50IHNpZ2FjdGlvbihpbnQgc2lnbm8sIHZvaWQg KmFjdCwgdm9pZCAqb2FjdCkNCit7DQorCWlmIChzaWdubyA9PSAxNSkNCisgICAgICAgICAgICAg ICAgZm9yY2Vmb3JrKys7DQorICAgICAgICByZXR1cm4gMDsNCit9DQorDQoraW50IHNpZ2FkZHNl dCh2b2lkICpzZXQsIGludCBzaWdubykNCit7DQorICAgICAgICByZXR1cm4gMDsNCit9DQorDQor aW50IHNpZ3Byb2NtYXNrKGludCBob3csIHZvaWQgKnNldCwgdm9pZCAqb3NldCkNCit7DQorICAg ICAgICByZXR1cm4gMDsNCit9DQorDQoraW50IHNpZ3N1c3BlbmQodm9pZCAqbWFzaykNCit7DQor ICAgICAgICAvKiByZXR1cm4gc3VjY2VzcyAhICovDQorCWVycm5vID0gRUlOVFI7DQorCXJldHVy biAoLTEpOw0KK30NCisNCisNCisjaWYgIShkZWZpbmVkKF9fTUlOR1czMl9fKXx8ZGVmaW5lZChf X01JTkdXNjRfXykpDQoraW50IGdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHN0cnVj dCB0aW1lem9uZSAqdHopDQorew0KKwlyZXR1cm4gMDsNCit9DQorI2VuZGlmDQorDQorDQorLyog d2luMzIgbGlicmFyeSBORUVERUQgZnVuY3Rpb25zICovDQorDQorDQordm9pZCBudF9pbml0KGNo YXIgKioqYXJndikNCit7DQorfQ0KKw0KK2ludCBudF9nZXRsaW5lcyh2b2lkKQ0KK3sNCisJcmV0 dXJuIDI1Ow0KK30NCisNCitpbnQgbnRfZ2V0Y29sdW1ucyh2b2lkKQ0KK3sNCisJcmV0dXJuIDgw Ow0KK30NCisNCit2b2lkIG50X3NldGN1cnNvcihpbnQgbW9kZSkNCit7DQorfQ0KKw0KK2NoYXIg KmdldF9vc19kaXIoY29uc3QgY2hhciAqc3lzZGlyKQ0KK3sNCisgICAgICAgIHN0YXRpYyBjaGFy IGMgPSAwOw0KKyAgICAgICAgcmV0dXJuICZjOw0KK30NCisNCit2b2lkICpmbWFsbG9jKHNpemVf dCBzeikNCit7DQorICAgICAgICByZXR1cm4gbWFsbG9jKHN6KTsNCit9DQorDQordm9pZCAqZnJl YWxsb2Modm9pZCAqcCwgc2l6ZV90IHN6KQ0KK3sNCisgICAgICAgIHJldHVybiByZWFsbG9jKHAs IHN6KTsNCit9DQorDQorLyogZmNhbGxvYyBub3QgdXNlZCBpbiB6c2ggKi8NCit2b2lkICpmY2Fs bG9jKHNpemVfdCBjb3VudCwgc2l6ZV90IGVsc2l6ZSkNCit7DQorICAgICAgICByZXR1cm4gY2Fs bG9jKGNvdW50LCBlbHNpemUpOw0KK30NCisNCit2b2lkIGZmcmVlKHZvaWQgKnApDQorew0KKyAg ICAgICAgZnJlZShwKTsNCit9DQorDQoraW50IHNldGVudihjb25zdCBjaGFyICpuYW1lLCBjb25z dCBjaGFyICp2YWx1ZSwgaW50IHJlcGxhY2UpDQorew0KKyAgICAgICAgcmV0dXJuIDA7DQorfQ0K Kw0KK2ludCB1bnNldGVudihjb25zdCBjaGFyICpuYW1lKQ0KK3sNCisgICAgICAgIHJldHVybiAw Ow0KK30NCisNCkZpbGVzIHpzaC00LjMuMTctb3JpZy9TcmMvd2luMzIvbGliL2xpYmZvcmsuYSBh bmQgenNoLTQuMy4xNy1zMS9TcmMvd2luMzIvbGliL2xpYmZvcmsuYSBkaWZmZXINCmRpZmYgLXJ1 cE4genNoLTQuMy4xNy1vcmlnL1NyYy93aW4zMi9saWIvTWFrZWZpbGUgenNoLTQuMy4xNy1zMS9T cmMvd2luMzIvbGliL01ha2VmaWxlDQotLS0genNoLTQuMy4xNy1vcmlnL1NyYy93aW4zMi9saWIv TWFrZWZpbGUJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDANCisrKyB6c2gtNC4z LjE3LXMxL1NyYy93aW4zMi9saWIvTWFrZWZpbGUJMjAxMi0wMy0xNSAxNDowMDo1MS43MDEzMTIy MDAgKzAxMDANCkBAIC0wLDAgKzEsOSBAQA0KKyMgbWFrZWZpbGUgZm9yIGxpYmZvcmsNCisNCitT SEVMTCA9IC9iaW4vc2gNCitDQyA9IGdjYyAtSS4uDQorDQorbGliZm9yay5hOglkdW1teS5vDQor CWFyIHJjcyBsaWJmb3JrLmEgJDwNCisJcm0gZHVtbXkubw0KKwkNClwgTm8gbmV3bGluZSBhdCBl bmQgb2YgZmlsZQ0KZGlmZiAtcnVwTiB6c2gtNC4zLjE3LW9yaWcvU3JjL3dpbjMyL3B3ZC5oIHpz aC00LjMuMTctczEvU3JjL3dpbjMyL3B3ZC5oDQotLS0genNoLTQuMy4xNy1vcmlnL1NyYy93aW4z Mi9wd2QuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMA0KKysrIHpzaC00LjMu MTctczEvU3JjL3dpbjMyL3B3ZC5oCTIwMTItMDMtMTUgMTg6NTU6MDcuMjMxMDk5NDAwICswMTAw DQpAQCAtMCwwICsxLDc1IEBADQorLyotDQorICogQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzDQor ICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuDQorICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLg0KKyAq IEFsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVy aWFsIGxpY2Vuc2VkDQorICogdG8gdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBieSBBbWVy aWNhbiBUZWxlcGhvbmUgYW5kIFRlbGVncmFwaA0KKyAqIENvLiBvciBVbml4IFN5c3RlbSBMYWJv cmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoDQorICogdGhlIHBl cm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuDQorICogUG9ydGlvbnMg Q29weXJpZ2h0KEMpIDE5OTUsIDE5OTYsIEphc29uIERvd25zLiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KKyAqIGFyZSBtZXQ6DQorICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQNCisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuDQorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl DQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2 ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycw0KKyAqICAgIG1heSBiZSB1 c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZQ0KKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0K KyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09O VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRQ0KKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VO VFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQorICog REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMNCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikNCisgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVA0K KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KSBBUklTSU5HIElOIEFOWSBXQVkNCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GDQorICogU1VDSCBEQU1BR0Uu DQorICoNCisgKglAKCMpcHdkLmgJOC4yIChCZXJrZWxleSkgMS8yMS85NA0KKyAqLw0KKy8qIGZy b20NCisgKiAkT3BlbkJTRDogcHdkLmgsdiAxLjIwIDIwMDgvMDYvMjUgMTQ6NTE6MjcgbWlsbGVy dCBFeHAgJA0KKyAqIG9sZGZhYmVyQGdtYWlsLmNvbTogc2ltcGxpZmllZA0KKyAqLw0KKw0KKyNp Zm5kZWYJX1BXRF9IXw0KKyNkZWZpbmUJX1BXRF9IXwkxDQorDQorI2luY2x1ZGUgInVuaV90eXBl cy5oIg0KKw0KKw0KK3N0cnVjdCBwYXNzd2Qgew0KKwljaGFyCSpwd19uYW1lOwkJLyogdXNlciBu YW1lICovDQorCWNoYXIJKnB3X3Bhc3N3ZDsJCS8qIGVuY3J5cHRlZCBwYXNzd29yZCAqLw0KKwl1 aWRfdAlwd191aWQ7CQkJLyogdXNlciB1aWQgKi8NCisJZ2lkX3QJcHdfZ2lkOwkJCS8qIHVzZXIg Z2lkICovDQorCXRpbWVfdAlwd19jaGFuZ2U7CQkvKiBwYXNzd29yZCBjaGFuZ2UgdGltZSAqLw0K KwljaGFyCSpwd19jbGFzczsJCS8qIHVzZXIgYWNjZXNzIGNsYXNzICovDQorCWNoYXIJKnB3X2dl Y29zOwkJLyogSG9uZXl3ZWxsIGxvZ2luIGluZm8gKi8NCisJY2hhcgkqcHdfZGlyOwkJLyogaG9t ZSBkaXJlY3RvcnkgKi8NCisJY2hhcgkqcHdfc2hlbGw7CQkvKiBkZWZhdWx0IHNoZWxsICovDQor CXRpbWVfdAlwd19leHBpcmU7CQkvKiBhY2NvdW50IGV4cGlyYXRpb24gKi8NCit9Ow0KKw0KKyNp ZmRlZglfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KK3N0cnVjdCBwYXNz d2QgKmdldHB3dWlkICh1aWRfdCk7DQorc3RydWN0IHBhc3N3ZCAqZ2V0cHduYW0gKGNvbnN0IGNo YXIgKik7DQorc3RydWN0IHBhc3N3ZAkqZ2V0cHdlbnQgKHZvaWQpOw0KK3ZvaWQJCSBzZXRwd2Vu dCAodm9pZCk7DQordm9pZAkJIGVuZHB3ZW50ICh2b2lkKTsNCisNCisjaWZkZWYJX19jcGx1c3Bs dXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qICFfUFdEX0hfICovDQpkaWZmIC1ydXBOIHpz aC00LjMuMTctb3JpZy9TcmMvd2luMzIvc2d0dHkuaCB6c2gtNC4zLjE3LXMxL1NyYy93aW4zMi9z Z3R0eS5oDQotLS0genNoLTQuMy4xNy1vcmlnL1NyYy93aW4zMi9zZ3R0eS5oCTE5NzAtMDEtMDEg MDE6MDA6MDAuMDAwMDAwMDAwICswMTAwDQorKysgenNoLTQuMy4xNy1zMS9TcmMvd2luMzIvc2d0 dHkuaAkyMDEyLTAzLTE1IDE4OjU1OjA3LjIzMTA5OTQwMCArMDEwMA0KQEAgLTAsMCArMSw3MSBA QA0KKy8qDQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzDQorICoJVGhlIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICog KGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLg0KKyAqIEFsbCBvciBzb21lIHBvcnRp b25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkDQorICog dG8gdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBieSBBbWVyaWNhbiBUZWxlcGhvbmUgYW5k IFRlbGVncmFwaA0KKyAqIENvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5k IGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoDQorICogdGhlIHBlcm1pc3Npb24gb2YgVU5JWCBT eXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMNCisgKiBhcmUgbWV0Og0KKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICogMy4gTmVpdGhl ciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmli dXRvcnMNCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUNCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EDQorICogQU5ZIEVY UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFDQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgKiBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTA0KKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTDQorICogT1IgU0VSVklDRVM7IExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pDQor ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULCBTVFJJQ1QNCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZDQorICogT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRg0KKyAqIFNVQ0ggREFNQUdFLg0KKyAqDQorICoJQCgjKWlvY3RsX2NvbXBhdC5oCTguNCAo QmVya2VsZXkpIDEvMjEvOTQNCisgKi8NCisvKiBvbGRmYWJlckBnbWFpbC5jb206IHNpbXBsaWZp ZWQsIHVzZWQgb25seSBmb3IgY29tcGlsaW5nICovDQorDQorc3RydWN0IHRjaGFycw0KK3sNCisJ Y2hhciB0X2ludHJjOwkJLyogaW50ZXJydXB0ICovDQorCWNoYXIgdF9xdWl0YzsJCS8qIHF1aXQg Ki8NCisJY2hhciB0X3N0YXJ0YzsJCS8qIHN0YXJ0IG91dHB1dCAqLw0KKwljaGFyIHRfc3RvcGM7 CQkvKiBzdG9wIG91dHB1dCAqLw0KKwljaGFyIHRfZW9mYzsJCS8qIGVuZC1vZi1maWxlICovDQor CWNoYXIgdF9icmtjOwkJLyogaW5wdXQgZGVsaW1pdGVyIChsaWtlIG5sKSAqLw0KK307DQorDQor c3RydWN0IGx0Y2hhcnMNCit7DQorCWNoYXIgdF9zdXNwYzsJCS8qIHN0b3AgcHJvY2VzcyBzaWdu YWwgKi8NCisJY2hhciB0X2RzdXNwYzsJCS8qIGRlbGF5ZWQgc3RvcCBwcm9jZXNzIHNpZ25hbCAq Lw0KKwljaGFyIHRfcnBybnRjOwkJLyogcmVwcmludCBsaW5lICovDQorCWNoYXIgdF9mbHVzaGM7 CQkvKiBmbHVzaCBvdXRwdXQgKHRvZ2dsZXMpICovDQorCWNoYXIgdF93ZXJhc2M7CQkvKiB3b3Jk IGVyYXNlICovDQorCWNoYXIgdF9sbmV4dGM7CQkvKiBsaXRlcmFsIG5leHQgY2hhcmFjdGVyICov DQorfTsNCisNCisvKg0KKyAqIFN0cnVjdHVyZSBmb3IgVElPQ0dFVFAgYW5kIFRJT0NTRVRQIGlv Y3Rscy4NCisgKi8NCisjaWZuZGVmIF9TR1RUWUJfDQorI2RlZmluZQlfU0dUVFlCXw0KK3N0cnVj dCBzZ3R0eWINCit7DQorCWNoYXIgc2dfaXNwZWVkOwkJLyogaW5wdXQgc3BlZWQgKi8NCisJY2hh ciBzZ19vc3BlZWQ7CQkvKiBvdXRwdXQgc3BlZWQgKi8NCisJY2hhciBzZ19lcmFzZTsJCS8qIGVy YXNlIGNoYXJhY3RlciAqLw0KKwljaGFyIHNnX2tpbGw7CQkvKiBraWxsIGNoYXJhY3RlciAqLw0K KwlzaG9ydCBpbnQgc2dfZmxhZ3M7CS8qIG1vZGUgZmxhZ3MgKi8NCit9Ow0KKyNlbmRpZg0KZGlm ZiAtcnVwTiB6c2gtNC4zLjE3LW9yaWcvU3JjL3dpbjMyL3NpZ25hbC5oIHpzaC00LjMuMTctczEv U3JjL3dpbjMyL3NpZ25hbC5oDQotLS0genNoLTQuMy4xNy1vcmlnL1NyYy93aW4zMi9zaWduYWwu aAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMA0KKysrIHpzaC00LjMuMTctczEv U3JjL3dpbjMyL3NpZ25hbC5oCTIwMTItMDMtMTUgMTg6NTU6MDcuMjMxMDk5NDAwICswMTAwDQpA QCAtMCwwICsxLDEyNiBAQA0KKy8qDQorICogQ29weXJpZ2h0IChjKSAxOTk3LTIwMDIsIDIwMTAs IEFtb2wgRGVzaHBhbmRlIGFuZCBjb250cmlidXRvcnMNCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk Lg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQorICogYXJlIG1ldDoNCisgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodA0KKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUN CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZl cnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzDQorICogICAgbWF5IGJlIHVz ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlDQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQor ICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05U UklCVVRPUlMgYGBBUyBJUycnIEFORA0KKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFDQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5U UyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisgKiBE QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUw0KKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQ0KKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUDQor ICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up IEFSSVNJTkcgSU4gQU5ZIFdBWQ0KKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YNCisgKiBTVUNIIERBTUFHRS4N CisgKi8NCisNCisvKg0KKyAqIHNpZ25hbC5oDQorICogc2lnbmFsIGVtdWxhdGlvbiB0aGluZ3MN CisgKiAtYW1vbA0KKyAqLw0KKw0KKw0KKyNpZm5kZWYgU0lHTkFMX0gNCisjZGVmaW5lIFNJR05B TF9IDQorDQorI2luY2x1ZGUgInVuaV90eXBlcy5oIg0KKw0KKyNkZWZpbmUgTlNJRyAyMyAgICAg DQorDQorI2lmICFkZWZpbmVkKF9TSUdfQVRPTUlDX1RfREVGSU5FRCkNCit0eXBlZGVmIGludCBz aWdfYXRvbWljX3Q7DQorI2RlZmluZSBfU0lHX0FUT01JQ19UX0RFRklORUQNCisjZW5kaWYNCisN CisvKiBjdHJfaGFuZGxlcigpIG1hcHMgQ1RSTF94eHhfRVZFTlQgdG8gdGhlIGZvbGxvd2luZzog KHNlZSB3aW5jb24uaCkgKi8NCisjZGVmaW5lIFNJR0lOVAkJMSANCisjZGVmaW5lIFNJR0JSRUFL IAkyDQorI2RlZmluZSBTSUdIVVAJCTMgIC8qIENUUkxfQ0xPU0VfRVZFTlQgKi8NCisvKiAzIGFu ZCA0IGFyZSByZXNlcnZlZC4gaGVuY2Ugd2UgY2FuJ3QgdXNlIDQgYW5kIDUgKi8NCisjZGVmaW5l CVNJR1RFUk0JCTYgLyogY3RybF9sb2dvZmYgKi8NCisjZGVmaW5lIFNJR0tJTEwJCTcgLyogY3Ry bF9zaHV0ZG93biAqLw0KKw0KKyNkZWZpbmUgU0lHSUxMCQk4IA0KKyNkZWZpbmUgU0lHRlBFCQk5 CQ0KKyNkZWZpbmUgU0lHQUxSTQkJMTANCisjZGVmaW5lIFNJR1dJTkNICTExDQorI2RlZmluZSBT SUdTRUdWIAkxMgkNCisjZGVmaW5lIFNJR1NUT1AgCTEzDQorI2RlZmluZSBTSUdQSVBFIAkxNA0K KyNkZWZpbmUgU0lHQ0hMRCAJMTUNCisjZGVmaW5lIFNJR0NPTlQJCTE2IA0KKyNkZWZpbmUgU0lH VFNUUCAJMTgNCisjZGVmaW5lIFNJR1RUT1UgCTE5DQorI2RlZmluZSBTSUdUVElOIAkyMA0KKyNk ZWZpbmUgU0lHQUJSVCAJMjIJDQorDQorI2RlZmluZSBTSUdRVUlUIFNJR0JSRUFLDQorDQorLyog c2lnbmFsIGFjdGlvbiBjb2RlcyAqLw0KKw0KKyNkZWZpbmUgU0lHX0RGTCAodm9pZCAoKikoaW50 KSkwCSAgIC8qIGRlZmF1bHQgc2lnbmFsIGFjdGlvbiAqLw0KKyNkZWZpbmUgU0lHX0lHTiAodm9p ZCAoKikoaW50KSkxCSAgIC8qIGlnbm9yZSBzaWduYWwgKi8NCisjZGVmaW5lIFNJR19TR0UgKHZv aWQgKCopKGludCkpMwkgICAvKiBzaWduYWwgZ2V0cyBlcnJvciAqLw0KKyNkZWZpbmUgU0lHX0FD SyAodm9pZCAoKikoaW50KSk0CSAgIC8qIGFja25vd2xlZGdlICovDQorDQorDQorLyogc2lnbmFs IGVycm9yIHZhbHVlIChyZXR1cm5lZCBieSBzaWduYWwgY2FsbCBvbiBlcnJvcikgKi8NCisNCisj ZGVmaW5lIFNJR19FUlIgKHZvaWQgKCopKGludCkpLTEJICAgLyogc2lnbmFsIGVycm9yIHZhbHVl ICovDQorDQorDQorI2RlZmluZSBTSUdfQkxPQ0sgMA0KKyNkZWZpbmUgU0lHX1VOQkxPQ0sgMQ0K KyNkZWZpbmUgU0lHX1NFVE1BU0sgMg0KKw0KKyNpZiBkZWZpbmVkKHNpZ25hbCkNCisjIHVuZGVm IHNpZ25hbA0KKyNlbmRpZg0KKyNkZWZpbmUgc2lnbmFsKGEsYikgX250X3NpZ25hbCgoYSksIChi KSkNCisNCisvKiBvbmx5IGRlZmluZWQgZm9yIF9fTUlOR1czMl9fICovDQorI2lmIGRlZmluZWQo X19NSU5HVzY0X18pIHx8IGRlZmluZWQoX01TQ19WRVIpDQordHlwZWRlZiB1bnNpZ25lZCBsb25n IHNpZ3NldF90Ow0KKyNlbmRpZg0KK3R5cGVkZWYgdm9pZCBTaWdmdW5jIChpbnQpOw0KKw0KK3N0 cnVjdCBzaWdhY3Rpb24gew0KKwlTaWdmdW5jICpzYV9oYW5kbGVyOw0KKwlzaWdzZXRfdCBzYV9t YXNrOw0KKwlpbnQgc2FfZmxhZ3M7DQorfTsNCisNCisNCisjZGVmaW5lIHNpZ2VtcHR5c2V0KHB0 cikgKCoocHRyKSA9IDApDQorI2RlZmluZSBzaWdmaWxsc2V0KHB0cikgICggKihwdHIpID0gfihz aWdzZXRfdCkwLDApDQorDQorLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLw0KKw0KK3ZvaWQgKCog X250X3NpZ25hbChpbnQsIHZvaWQgKCopKGludCkpKShpbnQpOw0KKw0KK2ludCBzaWdhZGRzZXQo c2lnc2V0X3QqLCBpbnQpOw0KK2ludCBzaWdkZWxzZXQoc2lnc2V0X3QqLGludCk7DQordW5zaWdu ZWQgaW50IGFsYXJtKHVuc2lnbmVkIGludCk7DQorDQoraW50IHNpZ2lzbWVtYmVyKGNvbnN0IHNp Z3NldF90ICpzZXQsIGludCk7DQoraW50IHNpZ3Byb2NtYXNrKGludCwgY29uc3Qgc2lnc2V0X3Qg Kiwgc2lnc2V0X3QgKik7DQoraW50IHNpZ2FjdGlvbihpbnQsIGNvbnN0IHN0cnVjdCBzaWdhY3Rp b24gKiwgc3RydWN0IHNpZ2FjdGlvbiAqKTsNCitpbnQgc2lnc3VzcGVuZChjb25zdCBzaWdzZXRf dCAqc2lnbWFzayk7DQorDQoraW50IGtpbGwocGlkX3QgcGlkLCBpbnQgc2lnKTsNCisgIA0KKyNl bmRpZiAvKiBTSUdOQUxfSCAqLw0KZGlmZiAtcnVwTiB6c2gtNC4zLjE3LW9yaWcvU3JjL3dpbjMy L3VuaV90eXBlcy5oIHpzaC00LjMuMTctczEvU3JjL3dpbjMyL3VuaV90eXBlcy5oDQotLS0genNo LTQuMy4xNy1vcmlnL1NyYy93aW4zMi91bmlfdHlwZXMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAw MDAwMDAwMCArMDEwMA0KKysrIHpzaC00LjMuMTctczEvU3JjL3dpbjMyL3VuaV90eXBlcy5oCTIw MTItMDMtMTUgMTg6NTU6MDcuMjMxMDk5NDAwICswMTAwDQpAQCAtMCwwICsxLDkxIEBADQorLyog DQorICogdW5pX3R5cGVzLmgNCisgKi8NCisNCisvKg0KKyAqIE1pc3NpbmcgdHlwZXMgZnJvbSBz eXMvdHlwZXMuaA0KKyAqLw0KKw0KKw0KKyNpZm5kZWYJX1VOSV9UWVBFU19IDQorI2RlZmluZQlf VU5JX1RZUEVTX0gJMQ0KKw0KKyNpbmNsdWRlIDx0aW1lLmg+DQorI2luY2x1ZGUgPHN5cy90eXBl cy5oPg0KKw0KKy8qIE1pY3Jvc29mdCBpbmNsdWRlcyB1bmNvbmRpdGlvbmFsbHkgZGVmaW5lIHRo aXMgc3RydWN0ICovDQorI2lmICEoZGVmaW5lZChfVElNRVZBTF9ERUZJTkVEKXx8ZGVmaW5lZChf V0lOU09DS0FQSV8pKQ0KKyNkZWZpbmUgX1RJTUVWQUxfREVGSU5FRA0KK3N0cnVjdCB0aW1ldmFs ew0KKwlsb25nIHR2X3NlYzsNCisJbG9uZyB0dl91c2VjOw0KK307DQorI2VuZGlmDQorDQorLyog c29tZSBkZWZpbmVzIG5vdCBhdmFpbGFibGUgaW4gd2luMzIgaGVhZGVycyAqLw0KKyNpZmRlZiBT X0lGTVQNCisjIGlmICFkZWZpbmVkKFNfSUZCTEspDQorIyAgZGVmaW5lCVNfSUZCTEsJCTB4MzAw MAkvKiBuZXZlciB1c2VkIHVuZGVyIHdpbjMyICovDQorIyBlbmRpZg0KKyMgaWYgIWRlZmluZWQo U19JRklGTykNCisjICBkZWZpbmUJU19JRklGTwkJMHgxMDAwCS8qIEZJRk8gKi8NCisjIGVuZGlm DQorIyBpZiAhZGVmaW5lZChTX0lGTE5LKQ0KKyMgIGRlZmluZQlTX0lGTE5LCQkweEEwMDAJLyog c3ltbGluayAqLw0KKyMgZW5kaWYNCisjIGlmICFkZWZpbmVkKFNfSVNESVIpICYmIGRlZmluZWQo U19JRkRJUikNCisjICBkZWZpbmUgU19JU0RJUihhKQkoKChhKSAmIFNfSUZNVCkgPT0gU19JRkRJ UikNCisjIGVuZGlmCS8qICEgU19JU0RJUiAmJiBTX0lGRElSICovDQorIyBpZiAhZGVmaW5lZChT X0lTQ0hSKSAmJiBkZWZpbmVkKFNfSUZDSFIpDQorIyAgZGVmaW5lIFNfSVNDSFIoYSkJKCgoYSkg JiBTX0lGTVQpID09IFNfSUZDSFIpDQorIyBlbmRpZiAvKiAhIFNfSVNDSFIgJiYgU19JRkNIUiAq Lw0KKyMgaWYgIWRlZmluZWQoU19JU0JMSykgJiYgZGVmaW5lZChTX0lGQkxLKQ0KKyMgIGRlZmlu ZSBTX0lTQkxLKGEpCSgoKGEpICYgU19JRk1UKSA9PSBTX0lGQkxLKQ0KKyMgZW5kaWYJLyogISBT X0lTQkxLICYmIFNfSUZCTEsgKi8NCisjIGlmICFkZWZpbmVkKFNfSVNSRUcpICYmIGRlZmluZWQo U19JRlJFRykNCisjICBkZWZpbmUgU19JU1JFRyhhKQkoKChhKSAmIFNfSUZNVCkgPT0gU19JRlJF RykNCisjIGVuZGlmCS8qICEgU19JU1JFRyAmJiBTX0lGUkVHICovDQorIyBpZiAhZGVmaW5lZChT X0lTRklGTykgJiYgZGVmaW5lZChTX0lGSUZPKQ0KKyMgIGRlZmluZSBTX0lTRklGTyhhKQkoKChh KSAmIFNfSUZNVCkgPT0gU19JRklGTykNCisjIGVuZGlmCS8qICEgU19JU0ZJRk8gJiYgU19JRklG TyAqLw0KKyMgaWYgIWRlZmluZWQoU19JU05BTSkgJiYgZGVmaW5lZChTX0lGTkFNKQ0KKyMgIGRl ZmluZSBTX0lTTkFNKGEpCSgoKGEpICYgU19JRk1UKSA9PSBTX0lGTkFNKQ0KKyMgZW5kaWYJLyog ISBTX0lTTkFNICYmIFNfSUZOQU0gKi8NCisjIGlmICFkZWZpbmVkKFNfSVNMTkspICYmIGRlZmlu ZWQoU19JRkxOSykNCisjICBkZWZpbmUgU19JU0xOSyhhKQkoKChhKSAmIFNfSUZNVCkgPT0gU19J RkxOSykNCisjIGVuZGlmCS8qICEgU19JU0xOSyAmJiBTX0lGTE5LICovDQorIyBpZiAhZGVmaW5l ZChTX0lTU09DSykgJiYgZGVmaW5lZChTX0lGU09DSykNCisjICBkZWZpbmUgU19JU1NPQ0soYSkJ KCgoYSkgJiBTX0lGTVQpID09IFNfSUZTT0NLKQ0KKyMgZW5kaWYJLyogISBTX0lTU09DSyAmJiBT X0lGU09DSyAqLw0KKyNlbmRpZiAvKiBTX0lGTVQgKi8NCisNCisjaWYgIWRlZmluZWQoVUlEX1Rf REVGSU5FRCkNCisjIGRlZmluZSBVSURfVF9ERUZJTkVEDQordHlwZWRlZiBpbnQgdWlkX3Q7DQor I2VuZGlmDQorI2lmICFkZWZpbmVkKEdJRF9UX0RFRklORUQpDQorIyBkZWZpbmUgR0lEX1RfREVG SU5FRA0KK3R5cGVkZWYgaW50IGdpZF90Ow0KKyNlbmRpZg0KKyNpZiBkZWZpbmVkKF9NU0NfVkVS KQ0KK3R5cGVkZWYgaW50IG1vZGVfdDsNCisjIGlmICFkZWZpbmVkKF9QSURfVF9ERUZJTkVEKQ0K KyMgIGRlZmluZSBfUElEX1RfREVGSU5FRA0KK3R5cGVkZWYgaW50IHBpZF90Ow0KKyMgZW5kaWYN Cit0eXBlZGVmIGludCBpbnQzMl90Ow0KKyNlbmRpZg0KKw0KKyNpZiAhZGVmaW5lZChIQVZFX1JM SU1fVCkNCisjIGRlZmluZSBIQVZFX1JMSU1fVCAxDQordHlwZWRlZiB1bnNpZ25lZCBsb25nIHJs aW1fdDsNCisjZW5kaWYNCisNCisjaWYgIShkZWZpbmVkKF9fTUlOR1czMl9fKXx8ZGVmaW5lZChf X01JTkdXNjRfXykpDQorc3RydWN0IHRpbWV6b25lIHsNCisJaW50IHR6X21pbnV0ZXN3ZXN0Ow0K KwlpbnQgZHN0dGltZTsNCit9Ow0KKyNlbmRpZg0KKw0KKyNlbmRpZg0KZGlmZiAtcnVwTiB6c2gt NC4zLjE3LW9yaWcvU3JjL3dpbjMyL3VuaXN0ZC5oIHpzaC00LjMuMTctczEvU3JjL3dpbjMyL3Vu aXN0ZC5oDQotLS0genNoLTQuMy4xNy1vcmlnL1NyYy93aW4zMi91bmlzdGQuaAkxOTcwLTAxLTAx IDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMA0KKysrIHpzaC00LjMuMTctczEvU3JjL3dpbjMyL3Vu aXN0ZC5oCTIwMTItMDMtMTUgMTg6NTU6MDcuMjMxMDk5NDAwICswMTAwDQpAQCAtMCwwICsxLDk1 IEBADQorLyogdW5pc3RkLmggZm9yICpuaXggY2hhbGxlbmdlZCBlbnZpcm9ubWVudHMgKi8NCisN CisjaWZuZGVmCV9VTklTVERfSA0KKyNkZWZpbmUJX1VOSVNURF9ICTENCisNCisvKiBmdW5jdGlv bnMgbWlzc2luZyBmcm9tIHRoaXMgZmlsZSBtYXkgYmUgZm91bmQgaW4gKi8NCisjaW5jbHVkZSA8 cHJvY2Vzcy5oPg0KKyNpbmNsdWRlIDxzdGRkZWYuaD4NCisjaW5jbHVkZSA8aW8uaD4NCisNCisj aW5jbHVkZSAidW5pX3R5cGVzLmgiDQorDQorI2lmIGRlZmluZWQoX19NSU5HVzMyX18pfHxkZWZp bmVkKF9fTUlOR1c2NF9fKQ0KKyMgaW5jbHVkZSA8c3RkaW50Lmg+DQorIyBpbmNsdWRlIDxzeXMv dGltZS5oPg0KKyNlbmRpZg0KKyNpZiBkZWZpbmVkKF9fR05VQ19fKQ0KKyMgaW5jbHVkZV9uZXh0 IDx1bmlzdGQuaD4NCisjZW5kaWYNCisNCisjaWYgZGVmaW5lZChfTVNDX1ZFUikNCisvKiBOT1RF OiBNaWNyb3NvZnQgQ1JUIGdpdmVzIGEgcnVudGltZSBwYXJhbWV0ZXIgZXJyb3IgZm9yIGFjY2Vz cyhzLCBYX09LKSAqLw0KKy8qIGZpbGUgdGVzdCBtYWNyb3M6DQorICAgMDAgIEV4aXN0ZW5jZSBv bmx5ICAgICAgICAgICAwMSAgRXhlY3V0YWJsZQ0KKyAgIDAyICBXcml0ZSBwZXJtaXNzaW9uICAg ICAgICAgMDQgIFJlYWQgcGVybWlzc2lvbg0KKyAgIDA2ICBSZWFkIGFuZCB3cml0ZSBwZXJtaXNz aW9uDQorKi8NCisjIGRlZmluZSBGX09LIDANCisjIGRlZmluZSBYX09LIDENCisjIGRlZmluZSBX X09LIDINCisjIGRlZmluZSBSX09LIDQNCisjZW5kaWYNCisNCisvKiB0aGVzZSBhcmUgY29tbWFu ZCB2YWx1ZXMgZm9yIGZjbnRsKCksIG5vdCBmb3VuZCBpbiB3aW5kb3dzIGZjbnRsLmggKi8NCisj ZGVmaW5lCUZfRFVQRkQJMCAgICAgIAkvKiBkdXBsaWNhdGUgZmlsZSBkZXNjcmlwdG9yICovDQor I2RlZmluZQlGX0dFVEZECTEgICAgICAJLyogZ2V0IGZpbGUgZGVzY3JpcHRvciBmbGFncyAqLw0K KyNkZWZpbmUJRl9TRVRGRAkyICAgICAgCS8qIHNldCBmaWxlIGRlc2NyaXB0b3IgZmxhZ3MgKi8N CisjZGVmaW5lCUZfR0VURkwJMyAgICAgIAkvKiBnZXQgZmlsZSBzdGF0dXMgZmxhZ3MgKi8NCisj ZGVmaW5lCUZfU0VURkwJNCAgICAgIAkvKiBzZXQgZmlsZSBzdGF0dXMgZmxhZ3MgKi8NCisvKiBy ZXF1ZXN0cywgbm90IGZvdW5kIGluIHdpbmRvd3MgZmNudGwuaCAqLw0KKyNkZWZpbmUJRkRfQ0xP RVhFQyAxCQ0KKy8qIGdldC9zZXQgbm9uIGJsb2NraW5nIG1vZGUsIG5vdCBmb3VuZCBpbiB3aW5k b3dzIGZjbnRsLmggKi8NCisjZGVmaW5lCU9fTk9OQkxPQ0sJMHgwMDA0DQorDQorI2lmZGVmCV9f Y3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyogd2luZG93cyBkZWNsYXJh dGlvbiBpbiB3aW5zb2NrLmggZGlmZmVycyAuLi4gKi8NCisjaWYgIShkZWZpbmVkKF9NU0NfVkVS KSAmJiBkZWZpbmVkKF9XSU5TT0NLQVBJXykpDQoraW50IGdldGhvc3RuYW1lKGNoYXIgKmJ1Ziwg aW50IGxlbik7DQorI2VuZGlmDQorDQoraW50IHJlYWRsaW5rKGNvbnN0IGNoYXIgKl9fcGF0aCwg Y2hhciAqX19idWYsIHNpemVfdCBfX2xlbik7DQorY2hhciAqZ2V0bG9naW4odm9pZCk7DQorY2hh ciAqdHR5bmFtZShpbnQgZmQpOw0KK2ludCBuaWNlKGludCBpbmNyZW1lbnQpOw0KKy8qIE1TVkMg cnVudGltZSBvbmx5IGhhcyBfcGlwZSgpICovDQoraW50IHBpcGUoaW50IGhwaXBlWzJdKTsNCitp bnQgZm9yayh2b2lkKTsNCisjaWYgIWRlZmluZWQoX19NSU5HVzMyX18pDQorLyogZGVmaW5lZCBp biBzeXMvdGltZS5oIHdpdGggYSBkaWZmZXJlbnQgcHJvdG90eXBlICovDQoraW50IGdldHRpbWVv ZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHN0cnVjdCB0aW1lem9uZSAqdHopOw0KKyNlbmRpZg0K K3VpZF90IGdldHVpZCh2b2lkKTsNCit1aWRfdCBnZXRldWlkKHZvaWQpOw0KK2dpZF90IGdldGdp ZCh2b2lkKTsNCitnaWRfdCBnZXRlZ2lkKHZvaWQpOw0KK3BpZF90IGdldHBwaWQodm9pZCk7DQor cGlkX3QgZ2V0cGdycCAodm9pZCk7DQoraW50IHNldHVpZCh1aWRfdCBuZXd1aWQpOw0KK2ludCBz ZXRnaWQoZ2lkX3QgbmV3Z2lkKTsNCitpbnQgc2V0ZXVpZCh1aWRfdCBuZXdldWlkKTsNCitpbnQg c2V0ZWdpZChnaWRfdCBuZXdlZ2lkKTsNCitpbnQgc2V0cGdpZChwaWRfdCBwaWQsIHBpZF90IHBn aWQpOw0KK2ludCBnZXRncm91cHMoaW50IGdpZHNldHNpemUsIGdpZF90IGdyb3VwbGlzdFtdKTsN Cit1bnNpZ25lZCBpbnQgc2xlZXAodW5zaWduZWQgaW50IHNlY29uZHMpOw0KK2ludCBjaG93bihj b25zdCBjaGFyICpmaWxlbmFtZSwgdWlkX3Qgb3duZXIsIGdpZF90IGdyb3VwKTsNCitpbnQgbGlu ayhjb25zdCBjaGFyICpvbGRuYW1lLCBjb25zdCBjaGFyICpuZXduYW1lKTsNCisvKiB1c3VhbGx5 IGRlY2xhcmVkIGluIHN0ZGxpYi5oICovDQoraW50IHNldGVudihjb25zdCBjaGFyICpuYW1lLCBj b25zdCBjaGFyICp2YWx1ZSwgaW50IHJlcGxhY2UpOw0KK2ludCB1bnNldGVudihjb25zdCBjaGFy ICpuYW1lKTsNCisNCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgZm9yayBs aWJyYXJ5ICovDQordm9pZCAqc2JyayhwdHJkaWZmX3QgZGVsdGEpOw0KKw0KKy8qIHRoaXMgZnVu Y3Rpb24gc2hvdWxkIGJlIGluIGZjbnRsLmgsIGJ1dCB3aW5kb3dzIGNvbXBpbGVyIGFscmVhZHkg aGF2ZQ0KKyAgIGEgc3lzL2ZjbnRsLmggZmlsZSwgbGFja2luZyB0aGlzIGZ1bmN0aW9uICovDQor aW50IGZjbnRsKGludCwgaW50LCAuLi4pOw0KKw0KKyNpZmRlZglfX2NwbHVzcGx1cw0KK30NCisj ZW5kaWYNCisNCisjZW5kaWYgLyogdW5pc3RkLmggICovDQpkaWZmIC1ydXBOIHpzaC00LjMuMTct b3JpZy9TcmMvd2luMzIvdXRtcC5oIHpzaC00LjMuMTctczEvU3JjL3dpbjMyL3V0bXAuaA0KLS0t IHpzaC00LjMuMTctb3JpZy9TcmMvd2luMzIvdXRtcC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAw MDAwMDAwICswMTAwDQorKysgenNoLTQuMy4xNy1zMS9TcmMvd2luMzIvdXRtcC5oCTIwMTItMDMt MTUgMTg6NTU6MDcuMjMxMDk5NDAwICswMTAwDQpAQCAtMCwwICsxLDU1IEBADQorLyoNCisgKiBD b3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMNCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKiAoYykgVU5JWCBTeXN0 ZW0gTGFib3JhdG9yaWVzLCBJbmMuDQorICogQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBm aWxlIGFyZSBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQNCisgKiB0byB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoDQor ICogQ28uIG9yIFVuaXggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLiBhbmQgYXJlIHJlcHJvZHVj ZWQgaGVyZWluIHdpdGgNCisgKiB0aGUgcGVybWlzc2lvbiBvZiBVTklYIFN5c3RlbSBMYWJvcmF0 b3JpZXMsIEluYy4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KKyAqIGFyZSBt ZXQ6DQorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQNCisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4gdGhlDQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9m IHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycw0KKyAqICAg IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZQ0KKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5U UyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQNCisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRQ0KKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyAqIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMDQorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMNCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikNCisgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs IFNUUklDVA0KKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkNCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GDQorICogU1VD SCBEQU1BR0UuDQorICoNCisgKglAKCMpdXRtcC5oCTguMiAoQmVya2VsZXkpIDEvMjEvOTQNCisg Ki8NCisvKiBmcm9tDQorICogJE9wZW5CU0Q6IHV0bXAuaCx2IDEuNSAyMDAzLzA2LzAyIDE5OjM0 OjEyIG1pbGxlcnQgRXhwICQNCisgKiBvbGRmYWJlckBnbWFpbC5jb206IHNpbXBsaWZpZWQsIHRo ZXJlIGlzIG5vIHV0bXAgaW4gV2luZG93cw0KKyAqLw0KKw0KKyNpZm5kZWYJX1VUTVBfSF8NCisj ZGVmaW5lCV9VVE1QX0hfCTENCisNCisjZGVmaW5lCVVUX05BTUVTSVpFCTMyDQorI2RlZmluZQlV VF9MSU5FU0laRQk4DQorI2RlZmluZQlVVF9IT1NUU0laRQkyNTYNCisNCitzdHJ1Y3QgdXRtcCB7 DQorCWNoYXIJdXRfbGluZVtVVF9MSU5FU0laRV07DQorCWNoYXIJdXRfbmFtZVtVVF9OQU1FU0la RV07DQorCWNoYXIJdXRfaG9zdFtVVF9IT1NUU0laRV07DQorCXRpbWVfdAl1dF90aW1lOw0KK307 DQorDQorI2VuZGlmIC8qICFfVVRNUF9IXyAqLw0KZGlmZiAtcnVwTiB6c2gtNC4zLjE3LW9yaWcv U3JjL1psZS96bGVfbWFpbi5jIHpzaC00LjMuMTctczEvU3JjL1psZS96bGVfbWFpbi5jDQotLS0g enNoLTQuMy4xNy1vcmlnL1NyYy9abGUvemxlX21haW4uYwkyMDEyLTAyLTA1IDIwOjI0OjM1LjAw MDAwMDAwMCArMDEwMA0KKysrIHpzaC00LjMuMTctczEvU3JjL1psZS96bGVfbWFpbi5jCTIwMTIt MDMtMTMgMTc6Mjc6NTUuNjE4MjE3NTAwICswMTAwDQpAQCAtMjA4LDYgKzIwOCw3IEBAIGNoYXIg Kip3YXRjaF9mdW5jczsJLyogVGhlIGNvcnJlc3BvbmRpbmcNCiBtb2RfZXhwb3J0IHZvaWQNCiB6 c2V0dGVybSh2b2lkKQ0KIHsNCisjaWYgIWRlZmluZWQoX1dJTjMyKQ0KICAgICBzdHJ1Y3QgdHR5 aW5mbyB0aTsNCiAjaWYgZGVmaW5lZChGSU9OUkVBRCkNCiAgICAgaW50IHZhbDsNCkBAIC0zNTcs NiArMzU4LDcgQEAgenNldHRlcm0odm9pZCkNCiAjZW5kaWYNCiANCiAgICAgc2V0dHlpbmZvKCZ0 aSk7DQorI2VuZGlmIC8qIF9XSU4zMiwgaS5lLiB0aGlzIGZ1bmN0aW9uIGlzIHZvaWQgKi8NCiB9 DQogDQogc3RhdGljIGNoYXIgKmt1bmdldGJ1ZjsNCkBAIC04NzYsOCArODc4LDEwIEBAIGdldGJ5 dGUobG9uZyBkb19rZXl0bW91dCwgaW50ICp0aW1lb3V0KQ0KIAkJYnJlYWtzID0gb2JyZWFrczsN CiAJCWVycm5vID0gb2xkX2Vycm5vOw0KIAkJcmV0dXJuIGxhc3RjaGFyID0gRU9GOw0KKyNpZiAh ZGVmaW5lZChfV0lOMzIpDQogCSAgICB9IGVsc2UgaWYgKGVycm5vID09IEVXT1VMREJMT0NLKSB7 DQogCQlmY250bCgwLCBGX1NFVEZMLCAwKTsNCisjZW5kaWYNCiAJICAgIH0gZWxzZSBpZiAoZXJy bm8gPT0gRUlPICYmICFkaWUpIHsNCiAJCXJldCA9IG9wdHNbTU9OSVRPUl07DQogCQlvcHRzW01P TklUT1JdID0gMTsNCmRpZmYgLXJ1cE4genNoLTQuMy4xNy1vcmlnL1NyYy9abGUvemxlX21pc2Mu YyB6c2gtNC4zLjE3LXMxL1NyYy9abGUvemxlX21pc2MuYw0KLS0tIHpzaC00LjMuMTctb3JpZy9T cmMvWmxlL3psZV9taXNjLmMJMjAxMC0xMi0wOSAyMDo0NzoxOS4wMDAwMDAwMDAgKzAxMDANCisr KyB6c2gtNC4zLjE3LXMxL1NyYy9abGUvemxlX21pc2MuYwkyMDEyLTAzLTEzIDE3OjMwOjA0LjI3 NDQ2NzUwMCArMDEwMA0KQEAgLTYyNywxMSArNjI3LDEzIEBAIGludA0KIHF1b3RlZGluc2VydChj aGFyICoqYXJncykNCiB7DQogI2lmbmRlZiBIQVNfVElPDQorIyBpZiAhZGVmaW5lZChfV0lOMzIp DQogICAgIHN0cnVjdCBzZ3R0eWIgc29iOw0KIA0KICAgICBzb2IgPSBzaHR0eWluZm8uc2d0dHli Ow0KICAgICBzb2Iuc2dfZmxhZ3MgPSAoc29iLnNnX2ZsYWdzIHwgUkFXKSAmIH5FQ0hPOw0KICAg ICBpb2N0bChTSFRUWSwgVElPQ1NFVE4sICZzb2IpOw0KKyMgZW5kaWYNCiAjZW5kaWYNCiAgICAg Z2V0ZnVsbGNoYXIoMCk7DQogI2lmbmRlZiBIQVNfVElPDQpkaWZmIC1ydXBOIHpzaC00LjMuMTct b3JpZy9TcmMvWmxlL3psZV92aS5jIHpzaC00LjMuMTctczEvU3JjL1psZS96bGVfdmkuYw0KLS0t IHpzaC00LjMuMTctb3JpZy9TcmMvWmxlL3psZV92aS5jCTIwMDgtMDQtMzAgMjM6MjE6NDAuMDAw MDAwMDAwICswMjAwDQorKysgenNoLTQuMy4xNy1zMS9TcmMvWmxlL3psZV92aS5jCTIwMTItMDMt MTMgMTc6MzA6NTQuNjk2MzQyNTAwICswMTAwDQpAQCAtOTU5LDkgKzk1OSwxMSBAQCB2aXF1b3Rl ZGluc2VydChjaGFyICoqYXJncykNCiAgICAgemxlbGluZVt6bGVjc10gPSAnXic7DQogICAgIHpy ZWZyZXNoKCk7DQogI2lmbmRlZiBIQVNfVElPDQorIyBpZiAhZGVmaW5lZChfV0lOMzIpDQogICAg IHNvYiA9IHNodHR5aW5mby5zZ3R0eWI7DQogICAgIHNvYi5zZ19mbGFncyA9IChzb2Iuc2dfZmxh Z3MgfCBSQVcpICYgfkVDSE87DQogICAgIGlvY3RsKFNIVFRZLCBUSU9DU0VUTiwgJnNvYik7DQor IyBlbmRpZg0KICNlbmRpZg0KICAgICBnZXRmdWxsY2hhcigwKTsNCiAjaWZuZGVmIEhBU19USU8N CmRpZmYgLXJ1cE4genNoLTQuMy4xNy1vcmlnL1NyYy96c2hfc3lzdGVtLmggenNoLTQuMy4xNy1z MS9TcmMvenNoX3N5c3RlbS5oDQotLS0genNoLTQuMy4xNy1vcmlnL1NyYy96c2hfc3lzdGVtLmgJ MjAxMS0wNS0xMCAxODo0NDozOS4wMDAwMDAwMDAgKzAyMDANCisrKyB6c2gtNC4zLjE3LXMxL1Ny Yy96c2hfc3lzdGVtLmgJMjAxMi0wMy0xNCAxODoyNDo1Ni42NzQxOTgwMDAgKzAxMDANCkBAIC03 NjYsOCArNzY2LDEwIEBAIGV4dGVybiBzaG9ydCBvc3BlZWQ7DQogI2RlZmluZSBtYWlsc3RhdChY LFkpIHN0YXQoWCxZKQ0KICNlbmRpZg0KIA0KLSNpZmRlZiBfX0NZR1dJTl9fDQotIyBpbmNsdWRl IDxzeXMvY3lnd2luLmg+DQorI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lO MzIpDQorIyBpZiBkZWZpbmVkKF9fQ1lHV0lOX18pDQorIyAgaW5jbHVkZSA8c3lzL2N5Z3dpbi5o Pg0KKyMgZW5kaWYNCiAjIGRlZmluZSBJU19ESVJTRVAoYykgKChjKSA9PSAnLycgfHwgKGMpID09 ICdcXCcpDQogI2Vsc2UNCiAjIGRlZmluZSBJU19ESVJTRVAoYykgKChjKSA9PSAnLycpDQo= --20cf303dd2fc6c92d504bb4c3cc4--