From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.88, mailfrom: nathaniel.l.desimone@intel.com) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by groups.io with SMTP; Wed, 28 Aug 2019 15:02:31 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Aug 2019 15:02:30 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,442,1559545200"; d="scan'208";a="188359923" Received: from orsmsx101.amr.corp.intel.com ([10.22.225.128]) by FMSMGA003.fm.intel.com with ESMTP; 28 Aug 2019 15:02:28 -0700 Received: from orsmsx114.amr.corp.intel.com ([169.254.8.225]) by ORSMSX101.amr.corp.intel.com ([169.254.8.119]) with mapi id 14.03.0439.000; Wed, 28 Aug 2019 15:02:27 -0700 From: "Nate DeSimone" To: "Wei, David Y" , "devel@edk2.groups.io" CC: "Wu, Hao A" , "Gao, Liming" , "Sinha, Ankit" , "Agyeman, Prince" , "Kubacki, Michael A" , "Kinney, Michael D" Subject: Re: [edk2-platforms PATCH v2 3/7] SimicsOpenBoardPkg: Add SimicsOpenBoardPkg and its modules Thread-Topic: [edk2-platforms PATCH v2 3/7] SimicsOpenBoardPkg: Add SimicsOpenBoardPkg and its modules Thread-Index: AQHVXTkxCC/koOSOJkibjOeSj/et3qcRGcjg Date: Wed, 28 Aug 2019 22:02:26 +0000 Message-ID: <02A34F284D1DA44BB705E61F7180EF0AAEE6A3B1@ORSMSX114.amr.corp.intel.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZWUzN2Y3YjUtY2M5MC00ZDVjLTg1ODctOWY2MWE1YTBhNDQ2IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoib3dPUm1CYklLRlJXZnBhMVwvUU54T21yM2lXSTVaVmNzb0krb2I3V0FqR2pyalNlNVwvYXRnbEFRNWRwRk5rdmd0In0= x-ctpclassification: CTP_NT x-originating-ip: [10.22.254.138] MIME-Version: 1.0 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MS4gVXBkYXRlIGNvcHlyaWdodCB5ZWFyIG9uIFNpbWljc0JvYXJkQ29uZmlnLmgsIEk0NDBGeFBp aXg0LmgsIFNlcmlhbGl6ZVZhcmlhYmxlc0xpYi5oLCBQY2lIb3N0QnJpZGdlTGliLmMsIFBjaUhv c3RCcmlkZ2VMaWIuaW5mLCBQZWlSZXBvcnRGdkxpYi5jLCBQZWlSZXBvcnRGdkxpYi5pbmYsIFNl Y01haW4uYywgUGxhdGZvcm0uaCwgUGxhdGZvcm0uYywgUGxhdGZvcm0udW5pLCBQbGF0Zm9ybUNv bmZpZy5oLCBQbGF0Zm9ybUNvbmZpZy5jLCBQbGF0Zm9ybUZvcm1zLnZmciwgU2ltaWNzRHhlLmlu ZiwgRmVhdHVyZUNvbnRyb2wuYywgUGxhdGZvcm0uYywgU21iaW9zUGxhdGZvcm1EeGUuaCwgU21i aW9zUGxhdGZvcm1EeGUuYywgU21iaW9zUGxhdGZvcm1EeGUuaW5mDQoyLiBMb2dvLmMsIE9FTUJh ZGdpbmcuaCAtIFJlbW92ZSBpbnRlcnNwZXJzZWQgdHJhaWxpbmcgd2hpdGVzcGFjZQ0KMy4gUGxl YXNlIHJlbmFtZSBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9EeGVM b2dvTGliL09FTUJhZGdpbmcuaCB0byBmb2xsb3cgUGFzY2FsIGNhc2luZzogT2VtQmFkZ2luZy5o DQo0LiBQY2lIb3N0QnJpZGdlTGliLmluZiwgUGxhdGZvcm1Db25maWcuaCAtIFVwZGF0ZSBPVk1G IHRvIFNpbWljcw0KDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBXZWksIERh dmlkIFkgDQpTZW50OiBUdWVzZGF5LCBBdWd1c3QgMjcsIDIwMTkgNTo0MCBQTQ0KVG86IGRldmVs QGVkazIuZ3JvdXBzLmlvDQpDYzogV3UsIEhhbyBBIDxoYW8uYS53dUBpbnRlbC5jb20+OyBHYW8s IExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb20+OyBTaW5oYSwgQW5raXQgPGFua2l0LnNpbmhh QGludGVsLmNvbT47IEFneWVtYW4sIFByaW5jZSA8cHJpbmNlLmFneWVtYW5AaW50ZWwuY29tPjsg S3ViYWNraSwgTWljaGFlbCBBIDxtaWNoYWVsLmEua3ViYWNraUBpbnRlbC5jb20+OyBEZXNpbW9u ZSwgTmF0aGFuaWVsIEwgPG5hdGhhbmllbC5sLmRlc2ltb25lQGludGVsLmNvbT47IEtpbm5leSwg TWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NClN1YmplY3Q6IFtlZGsyLXBs YXRmb3JtcyBQQVRDSCB2MiAzLzddIFNpbWljc09wZW5Cb2FyZFBrZzogQWRkIFNpbWljc09wZW5C b2FyZFBrZyBhbmQgaXRzIG1vZHVsZXMNCg0KQWRkIG1vZHVsZXMgQWNwaVRhYmxlcywgSW5jbHVk ZSwgTGlicmFyeSwgU2ltaWNzRHhlLCBTaW1pY3NQZWksIFBvbGljeSwgU21iaW9zUGxhdGZvcm1E eGUNCmFuZCBTZWNDb3JlIGZvciBTaW1pY3MgUVNQIHBsYXRmb3JtIHN1cHBvcnQNCg0KQ2M6IEhh byBXdSA8aGFvLmEud3VAaW50ZWwuY29tPg0KQ2M6IExpbWluZyBHYW8gPGxpbWluZy5nYW9AaW50 ZWwuY29tPg0KQ2M6IEFua2l0IFNpbmhhIDxhbmtpdC5zaW5oYUBpbnRlbC5jb20+DQpDYzogQWd5 ZW1hbiBQcmluY2UgPHByaW5jZS5hZ3llbWFuQGludGVsLmNvbT4NCkNjOiBLdWJhY2tpIE1pY2hh ZWwgQSA8bWljaGFlbC5hLmt1YmFja2lAaW50ZWwuY29tPg0KQ2M6IE5hdGUgRGVTaW1vbmUgPG5h dGhhbmllbC5sLmRlc2ltb25lQGludGVsLmNvbT4NCkNjOiBNaWNoYWVsIEQgS2lubmV5IDxtaWNo YWVsLmQua2lubmV5QGludGVsLmNvbT4NCg0KU2lnbmVkLW9mZi1ieTogRGF2aWQgV2VpIDxkYXZp ZC55LndlaUBpbnRlbC5jb20+DQotLS0NCiAuLi4vU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkv RHhlTG9nb0xpYi9Mb2dvLmMgICB8ICA2NDcgKysrKysrKysNCiAuLi4vTGlicmFyeS9Mb2FkTGlu dXhMaWIvTGludXguYyAgICAgICAgICAgICAgICAgICB8ICA2NjIgKysrKysrKysrDQogLi4uL0xp YnJhcnkvTG9hZExpbnV4TGliL0xpbnV4R2R0LmMgICAgICAgICAgICAgICAgfCAgMTc1ICsrKw0K IC4uLi9MaWJyYXJ5L052VmFyc0ZpbGVMaWIvRnNBY2Nlc3MuYyAgICAgICAgICAgICAgIHwgIDUw NyArKysrKysrDQogLi4uL0xpYnJhcnkvTnZWYXJzRmlsZUxpYi9OdlZhcnNGaWxlTGliLmMgICAg ICAgICAgfCAgIDc3ICsNCiAuLi4vTGlicmFyeS9QY2lIb3N0QnJpZGdlTGliL1BjaUhvc3RCcmlk Z2VMaWIuYyAgICB8ICA0MTkgKysrKysrDQogLi4uL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5 L1BlaVJlcG9ydEZ2TGliL0Z2LmMgfCAgMTAwICsrDQogLi4uL0xpYnJhcnkvUGVpUmVwb3J0RnZM aWIvUGVpUmVwb3J0RnZMaWIuYyAgICAgICAgfCAgMTE4ICsrDQogLi4uL0xpYnJhcnkvUGxhdGZv cm1Cb290TWFuYWdlckxpYi9CZHNQbGF0Zm9ybS5jICAgfCAxNTUzICsrKysrKysrKysrKysrKysr KysrDQogLi4uL0xpYnJhcnkvUGxhdGZvcm1Cb290TWFuYWdlckxpYi9QbGF0Zm9ybURhdGEuYyAg fCAgIDM1ICsNCiAuLi4vU2VyaWFsaXplVmFyaWFibGVzTGliL1NlcmlhbGl6ZVZhcmlhYmxlc0xp Yi5jICB8ICA4NjkgKysrKysrKysrKysNCiAuLi4vU2lsaWNvblBvbGljeUluaXRMaWIvU2lsaWNv blBvbGljeUluaXRMaWIuYyAgICB8ICAxMDggKysNCiAuLi4vU2lsaWNvblBvbGljeVVwZGF0ZUxp Yi5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzAgKw0KIC4uLi9JbnRlbC9TaW1pY3NPcGVu Qm9hcmRQa2cvU2VjQ29yZS9TZWNNYWluLmMgICAgIHwgIDk1NiArKysrKysrKysrKysNCiAuLi4v SW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9QbGF0Zm9ybS5jICB8ICA4NjUgKysr KysrKysrKysNCiAuLi4vU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9QbGF0Zm9ybUNvbmZp Zy5jICB8ICAxMjMgKysNCiBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNz UGVpL0Ntb3MuYyB8ICAgNTcgKw0KIC4uLi9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVpL0Zl YXR1cmVDb250cm9sLmMgIHwgIDExNCArKw0KIC4uLi9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cv U2ltaWNzUGVpL01lbURldGVjdC5jIHwgIDU2OCArKysrKysrDQogLi4uL0ludGVsL1NpbWljc09w ZW5Cb2FyZFBrZy9TaW1pY3NQZWkvUGxhdGZvcm0uYyAgfCAgNjMwICsrKysrKysrDQogLi4uL1Nt Ymlvc1BsYXRmb3JtRHhlL1NtYmlvc1BsYXRmb3JtRHhlLmMgICAgICAgICAgfCAgMTQ4ICsrDQog Li4uL1NpbWljc09wZW5Cb2FyZFBrZy9BY3BpVGFibGVzL0FjcGlUYWJsZXMuaW5mICAgfCAgIDMx ICsNCiAuLi4vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0FjcGlUYWJsZXMvRHNkdC5hc2wgICB8 ICA4MjEgKysrKysrKysrKysNCiAuLi4vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0FjcGlUYWJs ZXMvUGxhdGZvcm0uaCB8ICAgNzUgKw0KIC4uLi9JbmNsdWRlL0d1aWQvU2ltaWNzQm9hcmRDb25m aWcuaCAgICAgICAgICAgICAgIHwgICAxNyArDQogLi4uL0luY2x1ZGUvSW5kdXN0cnlTdGFuZGFy ZC9JNDQwRnhQaWl4NC5oICAgICAgICAgfCAgIDQ5ICsNCiAuLi4vSW5jbHVkZS9JbmR1c3RyeVN0 YW5kYXJkL0xpbnV4QnpJbWFnZS5oICAgICAgICB8ICAxNTggKysNCiAuLi4vSW5jbHVkZS9MaWJy YXJ5L0xvYWRMaW51eExpYi5oICAgICAgICAgICAgICAgICB8ICAyMDUgKysrDQogLi4uL0luY2x1 ZGUvTGlicmFyeS9TZXJpYWxpemVWYXJpYWJsZXNMaWIuaCAgICAgICAgfCAgMjIzICsrKw0KIC4u Li9TaW1pY3NPcGVuQm9hcmRQa2cvSW5jbHVkZS9TaW1pY3NQbGF0Zm9ybXMuaCAgIHwgICA1NSAr DQogLi4uL0xpYnJhcnkvRHhlTG9nb0xpYi9EeGVMb2dvTGliLmluZiAgICAgICAgICAgICAgfCAg IDU1ICsNCiAuLi4vTGlicmFyeS9EeGVMb2dvTGliL09FTUJhZGdpbmcuaCAgICAgICAgICAgICAg ICB8ICAgODMgKysNCiAuLi4vTGlicmFyeS9Mb2FkTGludXhMaWIvRHhlTG9hZExpbnV4TGliLmlu ZiAgICAgICB8ICAgNDIgKw0KIC4uLi9MaWJyYXJ5L0xvYWRMaW51eExpYi9JYTMyL0p1bXBUb0tl cm5lbC5uYXNtICAgIHwgICA0MSArDQogLi4uL0xpYnJhcnkvTG9hZExpbnV4TGliL0xvYWRMaW51 eExpYi5oICAgICAgICAgICAgfCAgIDUyICsNCiAuLi4vTGlicmFyeS9Mb2FkTGludXhMaWIvWDY0 L0p1bXBUb0tlcm5lbC5uYXNtICAgICB8ICAgODUgKysNCiAuLi4vTGlicmFyeS9OdlZhcnNGaWxl TGliL052VmFyc0ZpbGVMaWIuaCAgICAgICAgICB8ICAgNTUgKw0KIC4uLi9MaWJyYXJ5L052VmFy c0ZpbGVMaWIvTnZWYXJzRmlsZUxpYi5pbmYgICAgICAgIHwgICA1MyArDQogLi4uL0xpYnJhcnkv UGNpSG9zdEJyaWRnZUxpYi9QY2lIb3N0QnJpZGdlLmggICAgICAgfCAgIDY4ICsNCiAuLi4vTGli cmFyeS9QY2lIb3N0QnJpZGdlTGliL1BjaUhvc3RCcmlkZ2VMaWIuaW5mICB8ICAgNTEgKw0KIC4u Li9MaWJyYXJ5L1BlaVJlcG9ydEZ2TGliL1BlaVJlcG9ydEZ2TGliLmluZiAgICAgIHwgICA1NiAr DQogLi4uL0xpYnJhcnkvUGxhdGZvcm1Cb290TWFuYWdlckxpYi9CZHNQbGF0Zm9ybS5oICAgfCAg MTcyICsrKw0KIC4uLi9QbGF0Zm9ybUJvb3RNYW5hZ2VyTGliLmluZiAgICAgICAgICAgICAgICAg ICAgIHwgICA3MiArDQogLi4uL1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi9TZXJpYWxpemVWYXJpYWJs ZXNMaWIuaCAgfCAgIDMzICsNCiAuLi4vU2VyaWFsaXplVmFyaWFibGVzTGliLmluZiAgICAgICAg ICAgICAgICAgICAgICB8ICAgMzYgKw0KIC4uLi9TaWxpY29uUG9saWN5SW5pdExpYi9TaWxpY29u UG9saWN5SW5pdExpYi5pbmYgIHwgICAzOCArDQogLi4uL1NpbGljb25Qb2xpY3lVcGRhdGVMaWIu aW5mICAgICAgICAgICAgICAgICAgICAgfCAgIDM1ICsNCiAuLi4vU2ltaWNzT3BlbkJvYXJkUGtn L1NlY0NvcmUvSWEzMi9TZWNFbnRyeS5uYXNtICB8ICAgNDUgKw0KIC4uLi9JbnRlbC9TaW1pY3NP cGVuQm9hcmRQa2cvU2VjQ29yZS9TZWNNYWluLmluZiAgIHwgICA3MyArDQogLi4uL1NpbWljc09w ZW5Cb2FyZFBrZy9TZWNDb3JlL1g2NC9TZWNFbnRyeS5uYXNtICAgfCAgIDQ1ICsNCiAuLi4vSW50 ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9QbGF0Zm9ybS5oICB8ICAgMzcgKw0KIC4u Li9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhlL1BsYXRmb3JtLnVuaSAgICAgIHwgICAzMSAr DQogLi4uL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NEeGUvUGxhdGZvcm1Db25maWcuaCAgfCAg IDUxICsNCiAuLi4vU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9QbGF0Zm9ybUZvcm1zLnZm ciB8ICAgNjcgKw0KIC4uLi9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhlL1NpbWljc0R4ZS5p bmYgICAgIHwgICA2NSArDQogUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWlj c1BlaS9DbW9zLmggfCAgIDUwICsNCiAuLi4vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWlj c1BlaS9QbGF0Zm9ybS5oICB8ICAgODggKysNCiAuLi4vU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWlj c1BlaS9TaW1pY3NQZWkuaW5mICAgICB8ICAxMDQgKysNCiAuLi4vU21iaW9zUGxhdGZvcm1EeGUv U21iaW9zUGxhdGZvcm1EeGUuaCAgICAgICAgICB8ICAgMzggKw0KIC4uLi9TbWJpb3NQbGF0Zm9y bUR4ZS9TbWJpb3NQbGF0Zm9ybUR4ZS5pbmYgICAgICAgIHwgICA1MSArDQogNjAgZmlsZXMgY2hh bmdlZCwgMTIyMDcgaW5zZXJ0aW9ucygrKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9J bnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9EeGVMb2dvTGliL0xvZ28uYw0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9M b2FkTGludXhMaWIvTGludXguYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9T aW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9Mb2FkTGludXhMaWIvTGludXhHZHQuYw0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9O dlZhcnNGaWxlTGliL0ZzQWNjZXNzLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50 ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvTnZWYXJzRmlsZUxpYi9OdlZhcnNGaWxlTGli LmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtn L0xpYnJhcnkvUGNpSG9zdEJyaWRnZUxpYi9QY2lIb3N0QnJpZGdlTGliLmMNCiBjcmVhdGUgbW9k ZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGVpUmVw b3J0RnZMaWIvRnYuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NP cGVuQm9hcmRQa2cvTGlicmFyeS9QZWlSZXBvcnRGdkxpYi9QZWlSZXBvcnRGdkxpYi5jDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5 L1BsYXRmb3JtQm9vdE1hbmFnZXJMaWIvQmRzUGxhdGZvcm0uYw0KIGNyZWF0ZSBtb2RlIDEwMDY0 NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9QbGF0Zm9ybUJvb3RN YW5hZ2VyTGliL1BsYXRmb3JtRGF0YS5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0lu dGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi9TZXJp YWxpemVWYXJpYWJsZXNMaWIuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9T aW1pY3NPcGVuQm9hcmRQa2cvUG9saWN5L0xpYnJhcnkvU2lsaWNvblBvbGljeUluaXRMaWIvU2ls aWNvblBvbGljeUluaXRMaWIuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9T aW1pY3NPcGVuQm9hcmRQa2cvUG9saWN5L0xpYnJhcnkvU2lsaWNvblBvbGljeVVwZGF0ZUxpYi9T aWxpY29uUG9saWN5VXBkYXRlTGliLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50 ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NlY0NvcmUvU2VjTWFpbi5jDQogY3JlYXRlIG1vZGUgMTAw NjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NEeGUvUGxhdGZvcm0u Yw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cv U2ltaWNzRHhlL1BsYXRmb3JtQ29uZmlnLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0v SW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1BlaS9DbW9zLmMNCiBjcmVhdGUgbW9kZSAx MDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1BlaS9GZWF0dXJl Q29udHJvbC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5C b2FyZFBrZy9TaW1pY3NQZWkvTWVtRGV0ZWN0LmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZv cm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1BlaS9QbGF0Zm9ybS5jDQogY3JlYXRl IG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TbWJpb3NQbGF0 Zm9ybUR4ZS9TbWJpb3NQbGF0Zm9ybUR4ZS5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3Jt L0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9BY3BpVGFibGVzL0FjcGlUYWJsZXMuaW5mDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9BY3BpVGFi bGVzL0RzZHQuYXNsDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09w ZW5Cb2FyZFBrZy9BY3BpVGFibGVzL1BsYXRmb3JtLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxh dGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0luY2x1ZGUvR3VpZC9TaW1pY3NCb2FyZENv bmZpZy5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2Fy ZFBrZy9JbmNsdWRlL0luZHVzdHJ5U3RhbmRhcmQvSTQ0MEZ4UGlpeDQuaA0KIGNyZWF0ZSBtb2Rl IDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvSW5jbHVkZS9JbmR1c3Ry eVN0YW5kYXJkL0xpbnV4QnpJbWFnZS5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0lu dGVsL1NpbWljc09wZW5Cb2FyZFBrZy9JbmNsdWRlL0xpYnJhcnkvTG9hZExpbnV4TGliLmgNCiBj cmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0luY2x1 ZGUvTGlicmFyeS9TZXJpYWxpemVWYXJpYWJsZXNMaWIuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQ bGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvSW5jbHVkZS9TaW1pY3NQbGF0Zm9ybXMu aA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cv TGlicmFyeS9EeGVMb2dvTGliL0R4ZUxvZ29MaWIuaW5mDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBs YXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L0R4ZUxvZ29MaWIvT0VNQmFk Z2luZy5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2Fy ZFBrZy9MaWJyYXJ5L0xvYWRMaW51eExpYi9EeGVMb2FkTGludXhMaWIuaW5mDQogY3JlYXRlIG1v ZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L0xvYWRM aW51eExpYi9JYTMyL0p1bXBUb0tlcm5lbC5uYXNtDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRm b3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L0xvYWRMaW51eExpYi9Mb2FkTGlu dXhMaWIuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9h cmRQa2cvTGlicmFyeS9Mb2FkTGludXhMaWIvWDY0L0p1bXBUb0tlcm5lbC5uYXNtDQogY3JlYXRl IG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L052 VmFyc0ZpbGVMaWIvTnZWYXJzRmlsZUxpYi5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3Jt L0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L052VmFyc0ZpbGVMaWIvTnZWYXJzRmls ZUxpYi5pbmYNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJv YXJkUGtnL0xpYnJhcnkvUGNpSG9zdEJyaWRnZUxpYi9QY2lIb3N0QnJpZGdlLmgNCiBjcmVhdGUg bW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGNp SG9zdEJyaWRnZUxpYi9QY2lIb3N0QnJpZGdlTGliLmluZg0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQ bGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9QZWlSZXBvcnRGdkxpYi9Q ZWlSZXBvcnRGdkxpYi5pbmYNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2lt aWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGxhdGZvcm1Cb290TWFuYWdlckxpYi9CZHNQbGF0Zm9y bS5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBr Zy9MaWJyYXJ5L1BsYXRmb3JtQm9vdE1hbmFnZXJMaWIvUGxhdGZvcm1Cb290TWFuYWdlckxpYi5p bmYNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtn L0xpYnJhcnkvU2VyaWFsaXplVmFyaWFibGVzTGliL1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi5oDQog Y3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJy YXJ5L1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi9TZXJpYWxpemVWYXJpYWJsZXNMaWIuaW5mDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9Qb2xpY3kv TGlicmFyeS9TaWxpY29uUG9saWN5SW5pdExpYi9TaWxpY29uUG9saWN5SW5pdExpYi5pbmYNCiBj cmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1BvbGlj eS9MaWJyYXJ5L1NpbGljb25Qb2xpY3lVcGRhdGVMaWIvU2lsaWNvblBvbGljeVVwZGF0ZUxpYi5p bmYNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtn L1NlY0NvcmUvSWEzMi9TZWNFbnRyeS5uYXNtDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3Jt L0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TZWNDb3JlL1NlY01haW4uaW5mDQogY3JlYXRlIG1v ZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TZWNDb3JlL1g2NC9T ZWNFbnRyeS5uYXNtDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09w ZW5Cb2FyZFBrZy9TaW1pY3NEeGUvUGxhdGZvcm0uaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0 Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhlL1BsYXRmb3JtLnVuaQ0KIGNy ZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNz RHhlL1BsYXRmb3JtQ29uZmlnLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwv U2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9QbGF0Zm9ybUZvcm1zLnZmcg0KIGNyZWF0ZSBt b2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhlL1Np bWljc0R4ZS5pbmYNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3Bl bkJvYXJkUGtnL1NpbWljc1BlaS9DbW9zLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0v SW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1BlaS9QbGF0Zm9ybS5oDQogY3JlYXRlIG1v ZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NQZWkvU2lt aWNzUGVpLmluZg0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVu Qm9hcmRQa2cvU21iaW9zUGxhdGZvcm1EeGUvU21iaW9zUGxhdGZvcm1EeGUuaA0KIGNyZWF0ZSBt b2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU21iaW9zUGxhdGZv cm1EeGUvU21iaW9zUGxhdGZvcm1EeGUuaW5mDQoNCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRl bC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9EeGVMb2dvTGliL0xvZ28uYyBiL1BsYXRmb3Jt L0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L0R4ZUxvZ29MaWIvTG9nby5jDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uNGE3NWYzNjczZg0KLS0tIC9kZXYv bnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvRHhl TG9nb0xpYi9Mb2dvLmMNCkBAIC0wLDAgKzEsNjQ3IEBADQorLyoqIEBmaWxlDQorICBCRFMgTGli IGZ1bmN0aW9ucyB3aGljaCBjb250YWluIGFsbCB0aGUgY29kZSB0byBjb25uZWN0IGNvbnNvbGUg ZGV2aWNlDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE5IEludGVsIENvcnBvcmF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyoqLw0KKw0KKyNpbmNsdWRlIDxQaUR4ZS5oPg0KKyNp bmNsdWRlIDxQcm90b2NvbC9TaW1wbGVUZXh0T3V0Lmg+DQorI2luY2x1ZGUgPE9FTUJhZGdpbmcu aD4NCisjaW5jbHVkZSA8UHJvdG9jb2wvR3JhcGhpY3NPdXRwdXQuaD4NCisjaW5jbHVkZSA8UHJv dG9jb2wvVWdhRHJhdy5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCisjaW5jbHVk ZSA8TGlicmFyeS9VZWZpTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5o Pg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KKyNpbmNs dWRlIDxMaWJyYXJ5L0R4ZVNlcnZpY2VzTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGNkTGli Lmg+DQorI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KKyNpbmNsdWRl IDxMaWJyYXJ5L0RlYnVnTGliLmg+DQorDQorI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvQm1w Lmg+DQorI2luY2x1ZGUgPFByb3RvY29sL0Jvb3RMb2dvLmg+DQorDQorLyoqDQorICBDb252ZXJ0 IGEgKi5CTVAgZ3JhcGhpY3MgaW1hZ2UgdG8gYSBHT1AgYmx0IGJ1ZmZlci4gSWYgYSBOVUxMIEJs dCBidWZmZXINCisgIGlzIHBhc3NlZCBpbiBhIEdvcEJsdCBidWZmZXIgd2lsbCBiZSBhbGxvY2F0 ZWQgYnkgdGhpcyByb3V0aW5lLiBJZiBhIEdvcEJsdA0KKyAgYnVmZmVyIGlzIHBhc3NlZCBpbiBp dCB3aWxsIGJlIHVzZWQgaWYgaXQgaXMgYmlnIGVub3VnaC4NCisNCisgIEBwYXJhbSAgQm1wSW1h Z2UgICAgICBQb2ludGVyIHRvIEJNUCBmaWxlDQorICBAcGFyYW0gIEJtcEltYWdlU2l6ZSAgTnVt YmVyIG9mIGJ5dGVzIGluIEJtcEltYWdlDQorICBAcGFyYW0gIEdvcEJsdCAgICAgICAgQnVmZmVy IGNvbnRhaW5pbmcgR09QIHZlcnNpb24gb2YgQm1wSW1hZ2UuDQorICBAcGFyYW0gIEdvcEJsdFNp emUgICAgU2l6ZSBvZiBHb3BCbHQgaW4gYnl0ZXMuDQorICBAcGFyYW0gIFBpeGVsSGVpZ2h0ICAg SGVpZ2h0IG9mIEdvcEJsdC9CbXBJbWFnZSBpbiBwaXhlbHMNCisgIEBwYXJhbSAgUGl4ZWxXaWR0 aCAgICBXaWR0aCBvZiBHb3BCbHQvQm1wSW1hZ2UgaW4gcGl4ZWxzDQorDQorICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICBHb3BCbHQgYW5kIEdvcEJsdFNpemUgYXJlIHJldHVybmVkLg0K KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgQm1wSW1hZ2UgaXMgbm90IGEgdmFsaWQg Ki5CTVAgaW1hZ2UNCisgIEByZXR2YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgIFRoZSBwYXNzZWQg aW4gR29wQmx0IGJ1ZmZlciBpcyBub3QgYmlnIGVub3VnaC4NCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdvcEJsdFNpemUgd2lsbCBjb250YWluIHRoZSByZXF1aXJlZCBzaXplLg0K KyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgTm8gZW5vdWdoIGJ1ZmZlciB0byBhbGxv Y2F0ZS4NCisNCisqKi8NCitFRklfU1RBVFVTDQorQ29udmVydEJtcFRvR29wQmx0ICgNCisgIElO ICAgICBWT0lEICAgICAgKkJtcEltYWdlLA0KKyAgSU4gICAgIFVJTlROICAgICBCbXBJbWFnZVNp emUsDQorICBJTiBPVVQgVk9JRCAgICAgICoqR29wQmx0LA0KKyAgSU4gT1VUIFVJTlROICAgICAq R29wQmx0U2l6ZSwNCisgICAgIE9VVCBVSU5UTiAgICAgKlBpeGVsSGVpZ2h0LA0KKyAgICAgT1VU IFVJTlROICAgICAqUGl4ZWxXaWR0aA0KKyAgKQ0KK3sNCisgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgICpJbWFnZTsNCisgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICpJbWFn ZUhlYWRlcjsNCisgIEJNUF9JTUFHRV9IRUFERVIgICAgICAgICAgICAgICpCbXBIZWFkZXI7DQor ICBCTVBfQ09MT1JfTUFQICAgICAgICAgICAgICAgICAqQm1wQ29sb3JNYXA7DQorICBFRklfR1JB UEhJQ1NfT1VUUFVUX0JMVF9QSVhFTCAqQmx0QnVmZmVyOw0KKyAgRUZJX0dSQVBISUNTX09VVFBV VF9CTFRfUElYRUwgKkJsdDsNCisgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgIEJsdEJ1 ZmZlclNpemU7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCisgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgIEhlaWdodDsNCisgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgIFdpZHRoOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgSW1h Z2VJbmRleDsNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTaXplUGVyTGlu ZTsNCisgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgIElzQWxsb2NhdGVkOw0KKyAgVUlO VDMyICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JNYXBOdW07DQorDQorICBpZiAoc2l6ZW9m IChCTVBfSU1BR0VfSEVBREVSKSA+IEJtcEltYWdlU2l6ZSkgew0KKyAgICByZXR1cm4gRUZJX0lO VkFMSURfUEFSQU1FVEVSOw0KKyAgfQ0KKw0KKyAgQm1wSGVhZGVyID0gKEJNUF9JTUFHRV9IRUFE RVIgKikgQm1wSW1hZ2U7DQorDQorICBpZiAoQm1wSGVhZGVyLT5DaGFyQiAhPSAnQicgfHwgQm1w SGVhZGVyLT5DaGFyTSAhPSAnTScpIHsNCisgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCisg IH0NCisNCisgIC8vDQorICAvLyBEb2Vzbid0IHN1cHBvcnQgY29tcHJlc3MuDQorICAvLw0KKyAg aWYgKEJtcEhlYWRlci0+Q29tcHJlc3Npb25UeXBlICE9IDApIHsNCisgICAgcmV0dXJuIEVGSV9V TlNVUFBPUlRFRDsNCisgIH0NCisNCisgIC8vDQorICAvLyBPbmx5IHN1cHBvcnQgQklUTUFQSU5G T0hFQURFUiBmb3JtYXQuDQorICAvLyBCSVRNQVBGSUxFSEVBREVSICsgQklUTUFQSU5GT0hFQURF UiA9IEJNUF9JTUFHRV9IRUFERVINCisgIC8vDQorICBpZiAoQm1wSGVhZGVyLT5IZWFkZXJTaXpl ICE9IHNpemVvZiAoQk1QX0lNQUdFX0hFQURFUikgLSBPRkZTRVRfT0YoQk1QX0lNQUdFX0hFQURF UiwgSGVhZGVyU2l6ZSkpIHsNCisgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCisgIH0NCisN CisgIC8vDQorICAvLyBUaGUgZGF0YSBzaXplIGluIGVhY2ggbGluZSBtdXN0IGJlIDQgYnl0ZSBh bGlnbm1lbnQuDQorICAvLw0KKyAgRGF0YVNpemVQZXJMaW5lID0gKChCbXBIZWFkZXItPlBpeGVs V2lkdGggKiBCbXBIZWFkZXItPkJpdFBlclBpeGVsICsgMzEpID4+IDMpICYgKH4weDMpOw0KKyAg Qmx0QnVmZmVyU2l6ZSA9IE11bHRVNjR4MzIgKERhdGFTaXplUGVyTGluZSwgQm1wSGVhZGVyLT5Q aXhlbEhlaWdodCk7DQorICBpZiAoQmx0QnVmZmVyU2l6ZSA+IChVSU5UMzIpIH4wKSB7DQorICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICBpZiAoKEJtcEhlYWRl ci0+U2l6ZSAhPSBCbXBJbWFnZVNpemUpIHx8IA0KKyAgICAgIChCbXBIZWFkZXItPlNpemUgPCBC bXBIZWFkZXItPkltYWdlT2Zmc2V0KSB8fA0KKyAgICAgIChCbXBIZWFkZXItPlNpemUgLSBCbXBI ZWFkZXItPkltYWdlT2Zmc2V0ICE9ICBCbXBIZWFkZXItPlBpeGVsSGVpZ2h0ICogRGF0YVNpemVQ ZXJMaW5lKSkgew0KKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAgfQ0KKw0K KyAgLy8NCisgIC8vIENhbGN1bGF0ZSBDb2xvciBNYXAgb2Zmc2V0IGluIHRoZSBpbWFnZS4NCisg IC8vDQorICBJbWFnZSAgICAgICA9IEJtcEltYWdlOw0KKyAgQm1wQ29sb3JNYXAgPSAoQk1QX0NP TE9SX01BUCAqKSAoSW1hZ2UgKyBzaXplb2YgKEJNUF9JTUFHRV9IRUFERVIpKTsNCisgIGlmIChC bXBIZWFkZXItPkltYWdlT2Zmc2V0IDwgc2l6ZW9mIChCTVBfSU1BR0VfSEVBREVSKSkgew0KKyAg ICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAgfQ0KKw0KKyAgaWYgKEJtcEhlYWRl ci0+SW1hZ2VPZmZzZXQgPiBzaXplb2YgKEJNUF9JTUFHRV9IRUFERVIpKSB7DQorICAgIHN3aXRj aCAoQm1wSGVhZGVyLT5CaXRQZXJQaXhlbCkgew0KKyAgICAgIGNhc2UgMToNCisgICAgICAgIENv bG9yTWFwTnVtID0gMjsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgNDoNCisgICAgICAg IENvbG9yTWFwTnVtID0gMTY7DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIDg6DQorICAg ICAgICBDb2xvck1hcE51bSA9IDI1NjsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGRlZmF1bHQ6 DQorICAgICAgICBDb2xvck1hcE51bSA9IDA7DQorICAgICAgICBicmVhazsNCisgICAgICB9DQor ICAgIC8vDQorICAgIC8vIEJNUCBmaWxlIG1heSBoYXMgcGFkZGluZyBkYXRhIGJldHdlZW4gdGhl IGJtcCBoZWFkZXIgc2VjdGlvbiBhbmQgdGhlIGJtcCBkYXRhIHNlY3Rpb24uDQorICAgIC8vDQor ICAgIGlmIChCbXBIZWFkZXItPkltYWdlT2Zmc2V0IC0gc2l6ZW9mIChCTVBfSU1BR0VfSEVBREVS KSA8IHNpemVvZiAoQk1QX0NPTE9SX01BUCkgKiBDb2xvck1hcE51bSkgew0KKyAgICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorICAgIH0NCisgIH0NCisNCisgIC8vDQorICAvLyBD YWxjdWxhdGUgZ3JhcGhpY3MgaW1hZ2UgZGF0YSBhZGRyZXNzIGluIHRoZSBpbWFnZQ0KKyAgLy8N CisgIEltYWdlICAgICAgICAgPSAoKFVJTlQ4ICopIEJtcEltYWdlKSArIEJtcEhlYWRlci0+SW1h Z2VPZmZzZXQ7DQorICBJbWFnZUhlYWRlciAgID0gSW1hZ2U7DQorDQorICAvLw0KKyAgLy8gQ2Fs Y3VsYXRlIHRoZSBCbHRCdWZmZXIgbmVlZGVkIHNpemUuDQorICAvLw0KKyAgQmx0QnVmZmVyU2l6 ZSA9IE11bHRVNjR4MzIgKChVSU5UNjQpIEJtcEhlYWRlci0+UGl4ZWxXaWR0aCwgQm1wSGVhZGVy LT5QaXhlbEhlaWdodCk7DQorICAvLw0KKyAgLy8gRW5zdXJlIHRoZSBCbHRCdWZmZXJTaXplICog c2l6ZW9mIChFRklfR1JBUEhJQ1NfT1VUUFVUX0JMVF9QSVhFTCkgZG9lc24ndCBvdmVyZmxvdw0K KyAgLy8NCisgIGlmIChCbHRCdWZmZXJTaXplID4gRGl2VTY0eDMyICgoVUlOVE4pIH4wLCBzaXpl b2YgKEVGSV9HUkFQSElDU19PVVRQVVRfQkxUX1BJWEVMKSkpIHsNCisgICAgcmV0dXJuIEVGSV9V TlNVUFBPUlRFRDsNCisgIH0NCisgIEJsdEJ1ZmZlclNpemUgPSBNdWx0VTY0eDMyIChCbHRCdWZm ZXJTaXplLCBzaXplb2YgKEVGSV9HUkFQSElDU19PVVRQVVRfQkxUX1BJWEVMKSk7DQorDQorICBJ c0FsbG9jYXRlZCAgID0gRkFMU0U7DQorICBpZiAoKkdvcEJsdCA9PSBOVUxMKSB7DQorICAgIC8v DQorICAgIC8vIEdvcEJsdCBpcyBub3QgYWxsb2NhdGVkIGJ5IGNhbGxlci4NCisgICAgLy8NCisg ICAgKkdvcEJsdFNpemUgPSAoVUlOVE4pIEJsdEJ1ZmZlclNpemU7DQorICAgICpHb3BCbHQgICAg ID0gQWxsb2NhdGVQb29sICgqR29wQmx0U2l6ZSk7DQorICAgIElzQWxsb2NhdGVkID0gVFJVRTsN CisgICAgaWYgKCpHb3BCbHQgPT0gTlVMTCkgew0KKyAgICAgIHJldHVybiBFRklfT1VUX09GX1JF U09VUkNFUzsNCisgICAgfQ0KKyAgfSBlbHNlIHsNCisgICAgLy8NCisgICAgLy8gR29wQmx0IGhh cyBiZWVuIGFsbG9jYXRlZCBieSBjYWxsZXIuDQorICAgIC8vDQorICAgIGlmICgqR29wQmx0U2l6 ZSA8IChVSU5UTikgQmx0QnVmZmVyU2l6ZSkgew0KKyAgICAgICpHb3BCbHRTaXplID0gKFVJTlRO KSBCbHRCdWZmZXJTaXplOw0KKyAgICAgIHJldHVybiBFRklfQlVGRkVSX1RPT19TTUFMTDsNCisg ICAgfQ0KKyAgfQ0KKw0KKyAgKlBpeGVsV2lkdGggICA9IEJtcEhlYWRlci0+UGl4ZWxXaWR0aDsN CisgICpQaXhlbEhlaWdodCAgPSBCbXBIZWFkZXItPlBpeGVsSGVpZ2h0Ow0KKw0KKyAgLy8NCisg IC8vIENvbnZlcnQgaW1hZ2UgZnJvbSBCTVAgdG8gQmx0IGJ1ZmZlciBmb3JtYXQNCisgIC8vDQor ICBCbHRCdWZmZXIgPSAqR29wQmx0Ow0KKyAgZm9yIChIZWlnaHQgPSAwOyBIZWlnaHQgPCBCbXBI ZWFkZXItPlBpeGVsSGVpZ2h0OyBIZWlnaHQrKykgew0KKyAgICBCbHQgPSAmQmx0QnVmZmVyWyhC bXBIZWFkZXItPlBpeGVsSGVpZ2h0IC0gSGVpZ2h0IC0gMSkgKiBCbXBIZWFkZXItPlBpeGVsV2lk dGhdOw0KKyAgICBmb3IgKFdpZHRoID0gMDsgV2lkdGggPCBCbXBIZWFkZXItPlBpeGVsV2lkdGg7 IFdpZHRoKyssIEltYWdlKyssIEJsdCsrKSB7DQorICAgICAgc3dpdGNoIChCbXBIZWFkZXItPkJp dFBlclBpeGVsKSB7DQorICAgICAgY2FzZSAxOg0KKyAgICAgICAgLy8NCisgICAgICAgIC8vIENv bnZlcnQgMS1iaXQgKDIgY29sb3JzKSBCTVAgdG8gMjQtYml0IGNvbG9yDQorICAgICAgICAvLw0K KyAgICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgOCAmJiBXaWR0aCA8IEJtcEhlYWRlci0+ UGl4ZWxXaWR0aDsgSW5kZXgrKykgew0KKyAgICAgICAgICBCbHQtPlJlZCAgICA9IEJtcENvbG9y TWFwWygoKkltYWdlKSA+PiAoNyAtIEluZGV4KSkgJiAweDFdLlJlZDsNCisgICAgICAgICAgQmx0 LT5HcmVlbiAgPSBCbXBDb2xvck1hcFsoKCpJbWFnZSkgPj4gKDcgLSBJbmRleCkpICYgMHgxXS5H cmVlbjsNCisgICAgICAgICAgQmx0LT5CbHVlICAgPSBCbXBDb2xvck1hcFsoKCpJbWFnZSkgPj4g KDcgLSBJbmRleCkpICYgMHgxXS5CbHVlOw0KKyAgICAgICAgICBCbHQrKzsNCisgICAgICAgICAg V2lkdGgrKzsNCisgICAgICAgIH0NCisNCisgICAgICAgIEJsdC0tOw0KKyAgICAgICAgV2lkdGgt LTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgIGNhc2UgNDoNCisgICAgICAgIC8vDQorICAg ICAgICAvLyBDb252ZXJ0IDQtYml0ICgxNiBjb2xvcnMpIEJNUCBQYWxldHRlIHRvIDI0LWJpdCBj b2xvcg0KKyAgICAgICAgLy8NCisgICAgICAgIEluZGV4ICAgICAgID0gKCpJbWFnZSkgPj4gNDsN CisgICAgICAgIEJsdC0+UmVkICAgID0gQm1wQ29sb3JNYXBbSW5kZXhdLlJlZDsNCisgICAgICAg IEJsdC0+R3JlZW4gID0gQm1wQ29sb3JNYXBbSW5kZXhdLkdyZWVuOw0KKyAgICAgICAgQmx0LT5C bHVlICAgPSBCbXBDb2xvck1hcFtJbmRleF0uQmx1ZTsNCisgICAgICAgIGlmIChXaWR0aCA8IChC bXBIZWFkZXItPlBpeGVsV2lkdGggLSAxKSkgew0KKyAgICAgICAgICBCbHQrKzsNCisgICAgICAg ICAgV2lkdGgrKzsNCisgICAgICAgICAgSW5kZXggICAgICAgPSAoKkltYWdlKSAmIDB4MGY7DQor ICAgICAgICAgIEJsdC0+UmVkICAgID0gQm1wQ29sb3JNYXBbSW5kZXhdLlJlZDsNCisgICAgICAg ICAgQmx0LT5HcmVlbiAgPSBCbXBDb2xvck1hcFtJbmRleF0uR3JlZW47DQorICAgICAgICAgIEJs dC0+Qmx1ZSAgID0gQm1wQ29sb3JNYXBbSW5kZXhdLkJsdWU7DQorICAgICAgICB9DQorICAgICAg ICBicmVhazsNCisNCisgICAgICBjYXNlIDg6DQorICAgICAgICAvLw0KKyAgICAgICAgLy8gQ29u dmVydCA4LWJpdCAoMjU2IGNvbG9ycykgQk1QIFBhbGV0dGUgdG8gMjQtYml0IGNvbG9yDQorICAg ICAgICAvLw0KKyAgICAgICAgQmx0LT5SZWQgICAgPSBCbXBDb2xvck1hcFsqSW1hZ2VdLlJlZDsN CisgICAgICAgIEJsdC0+R3JlZW4gID0gQm1wQ29sb3JNYXBbKkltYWdlXS5HcmVlbjsNCisgICAg ICAgIEJsdC0+Qmx1ZSAgID0gQm1wQ29sb3JNYXBbKkltYWdlXS5CbHVlOw0KKyAgICAgICAgYnJl YWs7DQorDQorICAgICAgY2FzZSAyNDoNCisgICAgICAgIC8vDQorICAgICAgICAvLyBJdCBpcyAy NC1iaXQgQk1QLg0KKyAgICAgICAgLy8NCisgICAgICAgIEJsdC0+Qmx1ZSAgID0gKkltYWdlKys7 DQorICAgICAgICBCbHQtPkdyZWVuICA9ICpJbWFnZSsrOw0KKyAgICAgICAgQmx0LT5SZWQgICAg PSAqSW1hZ2U7DQorICAgICAgICBicmVhazsNCisNCisgICAgICBkZWZhdWx0Og0KKyAgICAgICAg Ly8NCisgICAgICAgIC8vIE90aGVyIGJpdCBmb3JtYXQgQk1QIGlzIG5vdCBzdXBwb3J0ZWQuDQor ICAgICAgICAvLw0KKyAgICAgICAgaWYgKElzQWxsb2NhdGVkKSB7DQorICAgICAgICAgIEZyZWVQ b29sICgqR29wQmx0KTsNCisgICAgICAgICAgKkdvcEJsdCA9IE5VTEw7DQorICAgICAgICB9DQor ICAgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAg fTsNCisNCisgICAgfQ0KKw0KKyAgICBJbWFnZUluZGV4ID0gKFVJTlROKSAoSW1hZ2UgLSBJbWFn ZUhlYWRlcik7DQorICAgIGlmICgoSW1hZ2VJbmRleCAlIDQpICE9IDApIHsNCisgICAgICAvLw0K KyAgICAgIC8vIEJtcCBJbWFnZSBzdGFydHMgZWFjaCByb3cgb24gYSAzMi1iaXQgYm91bmRhcnkh DQorICAgICAgLy8NCisgICAgICBJbWFnZSA9IEltYWdlICsgKDQgLSAoSW1hZ2VJbmRleCAlIDQp KTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioN CisgIFVzZSBTeXN0ZW1UYWJsZSBDb25vdXQgdG8gc3RvcCB2aWRlbyBiYXNlZCBTaW1wbGUgVGV4 dCBPdXQgY29uc29sZXMgZnJvbSBnb2luZw0KKyAgdG8gdGhlIHZpZGVvIGRldmljZS4gUHV0IHVw IExvZ29GaWxlIG9uIGV2ZXJ5IHZpZGVvIGRldmljZSB0aGF0IGlzIGEgY29uc29sZS4NCisNCisg IEBwYXJhbVtpbl0gIExvZ29GaWxlICAgRmlsZSBuYW1lIG9mIGxvZ28gdG8gZGlzcGxheSBvbiB0 aGUgY2VudGVyIG9mIHRoZSBzY3JlZW4uDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBD b25zb2xlQ29udHJvbCBoYXMgYmVlbiBmbGlwcGVkIHRvIGdyYXBoaWNzIGFuZCBsb2dvIGRpc3Bs YXllZC4NCisgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEIExvZ28gbm90IGZvdW5kDQorDQorKiov DQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0VuYWJsZUJvb3RMb2dvICgNCisgIElOICBFRklfR1VJ RCAgKkxvZ29GaWxlDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAg U3RhdHVzOw0KKyAgRUZJX09FTV9CQURHSU5HX1BST1RPQ09MICAgICAgKkJhZGdpbmc7DQorICBV SU5UMzIgICAgICAgICAgICAgICAgICAgICAgICBTaXplT2ZYOw0KKyAgVUlOVDMyICAgICAgICAg ICAgICAgICAgICAgICAgU2l6ZU9mWTsNCisgIElOVE4gICAgICAgICAgICAgICAgICAgICAgICAg IERlc3RYOw0KKyAgSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzdFk7DQorICBVSU5U OCAgICAgICAgICAgICAgICAgICAgICAgICAqSW1hZ2VEYXRhOw0KKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgSW1hZ2VTaXplOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgQmx0U2l6ZTsNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbmNlOw0K KyAgRUZJX0JBREdJTkdfRk9STUFUICAgICAgICAgICAgRm9ybWF0Ow0KKyAgRUZJX0JBREdJTkdf RElTUExBWV9BVFRSSUJVVEUgQXR0cmlidXRlOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgQ29vcmRpbmF0ZVg7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBDb29y ZGluYXRlWTsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIEhlaWdodDsNCisgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgIFdpZHRoOw0KKyAgRUZJX0dSQVBISUNTX09VVFBV VF9CTFRfUElYRUwgKkJsdDsNCisgIEVGSV9VR0FfRFJBV19QUk9UT0NPTCAgICAgICAgICpVZ2FE cmF3Ow0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JEZXB0aDsNCisgIFVJ TlQzMiAgICAgICAgICAgICAgICAgICAgICAgIFJlZnJlc2hSYXRlOw0KKyAgRUZJX0dSQVBISUNT X09VVFBVVF9QUk9UT0NPTCAgKkdyYXBoaWNzT3V0cHV0Ow0KKyAgRUZJX0JPT1RfTE9HT19QUk9U T0NPTCAgICAgICAgKkJvb3RMb2dvOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg TnVtYmVyT2ZMb2dvczsNCisgIEVGSV9HUkFQSElDU19PVVRQVVRfQkxUX1BJWEVMICpMb2dvQmx0 Ow0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgTG9nb0Rlc3RYOw0KKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgTG9nb0Rlc3RZOw0KKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgTG9nb0hlaWdodDsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg IExvZ29XaWR0aDsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIE5ld0Rlc3RYOw0K KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgTmV3RGVzdFk7DQorICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgICBOZXdIZWlnaHQ7DQorICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICBOZXdXaWR0aDsNCisgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZl clNpemU7DQorDQorICBVZ2FEcmF3ID0gTlVMTDsNCisgIC8vDQorICAvLyBUcnkgdG8gb3BlbiBH T1AgZmlyc3QNCisgIC8vDQorICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sIChnU1QtPkNv bnNvbGVPdXRIYW5kbGUsICZnRWZpR3JhcGhpY3NPdXRwdXRQcm90b2NvbEd1aWQsIChWT0lEICoq KSAmR3JhcGhpY3NPdXRwdXQpOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSAmJiBGZWF0dXJl UGNkR2V0IChQY2RVZ2FDb25zdW1lU3VwcG9ydCkpIHsNCisgICAgR3JhcGhpY3NPdXRwdXQgPSBO VUxMOw0KKyAgICAvLw0KKyAgICAvLyBPcGVuIEdPUCBmYWlsZWQsIHRyeSB0byBvcGVuIFVHQQ0K KyAgICAvLw0KKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sIChnU1QtPkNvbnNvbGVP dXRIYW5kbGUsICZnRWZpVWdhRHJhd1Byb3RvY29sR3VpZCwgKFZPSUQgKiopICZVZ2FEcmF3KTsN CisgIH0NCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIEVGSV9VTlNV UFBPUlRFRDsNCisgIH0NCisNCisgIC8vDQorICAvLyBUcnkgdG8gb3BlbiBCb290IExvZ28gUHJv dG9jb2wuDQorICAvLw0KKyAgQm9vdExvZ28gPSBOVUxMOw0KKyAgZ0JTLT5Mb2NhdGVQcm90b2Nv bCAoJmdFZmlCb290TG9nb1Byb3RvY29sR3VpZCwgTlVMTCwgKFZPSUQgKiopICZCb290TG9nbyk7 DQorDQorICAvLw0KKyAgLy8gRXJhc2UgQ3Vyc29yIGZyb20gc2NyZWVuDQorICAvLw0KKyAgZ1NU LT5Db25PdXQtPkVuYWJsZUN1cnNvciAoZ1NULT5Db25PdXQsIEZBTFNFKTsNCisNCisgIEJhZGdp bmcgPSBOVUxMOw0KKyAgU3RhdHVzICA9IGdCUy0+TG9jYXRlUHJvdG9jb2wgKCZnRWZpT0VNQmFk Z2luZ1Byb3RvY29sR3VpZCwgTlVMTCwgKFZPSUQgKiopICZCYWRnaW5nKTsNCisNCisgIGlmIChH cmFwaGljc091dHB1dCAhPSBOVUxMKSB7DQorICAgIFNpemVPZlggPSBHcmFwaGljc091dHB1dC0+ TW9kZS0+SW5mby0+SG9yaXpvbnRhbFJlc29sdXRpb247DQorICAgIFNpemVPZlkgPSBHcmFwaGlj c091dHB1dC0+TW9kZS0+SW5mby0+VmVydGljYWxSZXNvbHV0aW9uOw0KKw0KKyAgfSBlbHNlIGlm IChVZ2FEcmF3ICE9IE5VTEwgJiYgRmVhdHVyZVBjZEdldCAoUGNkVWdhQ29uc3VtZVN1cHBvcnQp KSB7DQorICAgIFN0YXR1cyA9IFVnYURyYXctPkdldE1vZGUgKFVnYURyYXcsICZTaXplT2ZYLCAm U2l6ZU9mWSwgJkNvbG9yRGVwdGgsICZSZWZyZXNoUmF0ZSk7DQorICAgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCisgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KKyAgICB9DQorICB9 IGVsc2Ugew0KKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KKyAgfQ0KKw0KKyAgQmx0ID0g TlVMTDsNCisgIE51bWJlck9mTG9nb3MgPSAwOw0KKyAgTG9nb0Rlc3RYID0gMDsNCisgIExvZ29E ZXN0WSA9IDA7DQorICBMb2dvSGVpZ2h0ID0gMDsNCisgIExvZ29XaWR0aCA9IDA7DQorICBOZXdE ZXN0WCA9IDA7DQorICBOZXdEZXN0WSA9IDA7DQorICBOZXdIZWlnaHQgPSAwOw0KKyAgTmV3V2lk dGggPSAwOw0KKyAgSW5zdGFuY2UgPSAwOw0KKyAgd2hpbGUgKDEpIHsNCisgICAgSW1hZ2VEYXRh ID0gTlVMTDsNCisgICAgSW1hZ2VTaXplID0gMDsNCisNCisgICAgaWYgKEJhZGdpbmcgIT0gTlVM TCkgew0KKyAgICAgIC8vDQorICAgICAgLy8gR2V0IGltYWdlIGZyb20gT0VNQmFkZ2luZyBwcm90 b2NvbC4NCisgICAgICAvLw0KKyAgICAgIFN0YXR1cyA9IEJhZGdpbmctPkdldEltYWdlICgNCisg ICAgICAgICAgICAgICAgICAgICAgICAgIEJhZGdpbmcsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAmSW5zdGFuY2UsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAmRm9ybWF0LA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgJkltYWdlRGF0YSwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICZJbWFnZVNpemUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAmQXR0cmlidXRl LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvb3JkaW5hdGVYLA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgJkNvb3JkaW5hdGVZDQorICAgICAgICAgICAgICAgICAgICAgICAgICAp Ow0KKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICAgIGdvdG8gRG9uZTsN CisgICAgICB9DQorDQorICAgIH0gZWxzZSB7DQorICAgICAgLy8NCisgICAgICAvLyBHZXQgdGhl IHNwZWNpZmllZCBpbWFnZSBmcm9tIEZWLg0KKyAgICAgIC8vDQorICAgICAgU3RhdHVzID0gR2V0 U2VjdGlvbkZyb21BbnlGdiAoTG9nb0ZpbGUsIEVGSV9TRUNUSU9OX1JBVywgMCwgKFZPSUQgKiop ICZJbWFnZURhdGEsICZJbWFnZVNpemUpOw0KKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCisgICAgICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQorICAgICAgfQ0KKw0KKyAgICAg IENvb3JkaW5hdGVYID0gMDsNCisgICAgICBDb29yZGluYXRlWSA9IDA7DQorICAgICAgQXR0cmli dXRlICAgPSBFZmlCYWRnaW5nRGlzcGxheUF0dHJpYnV0ZUNlbnRlcjsNCisgICAgfQ0KKw0KKyAg ICBpZiAoQmx0ICE9IE5VTEwpIHsNCisgICAgICBGcmVlUG9vbCAoQmx0KTsNCisgICAgfQ0KKw0K KyAgICAvLw0KKyAgICAvLyBUcnkgQk1QIGRlY29kZXINCisgICAgLy8NCisgICAgQmx0ID0gTlVM TDsNCisgICAgU3RhdHVzID0gQ29udmVydEJtcFRvR29wQmx0ICgNCisgICAgICAgICAgICAgIElt YWdlRGF0YSwNCisgICAgICAgICAgICAgIEltYWdlU2l6ZSwNCisgICAgICAgICAgICAgIChWT0lE ICoqKSAmQmx0LA0KKyAgICAgICAgICAgICAgJkJsdFNpemUsDQorICAgICAgICAgICAgICAmSGVp Z2h0LA0KKyAgICAgICAgICAgICAgJldpZHRoDQorICAgICAgICAgICAgICApOw0KKw0KKyAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgRnJlZVBvb2wgKEltYWdlRGF0YSk7DQor DQorICAgICAgaWYgKEJhZGdpbmcgPT0gTlVMTCkgew0KKyAgICAgICAgcmV0dXJuIFN0YXR1czsN CisgICAgICB9IGVsc2Ugew0KKyAgICAgICAgY29udGludWU7DQorICAgICAgfQ0KKyAgICB9DQor DQorICAgIC8vDQorICAgIC8vIENhbGN1bGF0ZSB0aGUgZGlzcGxheSBwb3NpdGlvbiBhY2NvcmRp bmcgdG8gQXR0cmlidXRlLg0KKyAgICAvLw0KKyAgICBzd2l0Y2ggKEF0dHJpYnV0ZSkgew0KKyAg ICBjYXNlIEVmaUJhZGdpbmdEaXNwbGF5QXR0cmlidXRlTGVmdFRvcDoNCisgICAgICBEZXN0WCA9 IENvb3JkaW5hdGVYOw0KKyAgICAgIERlc3RZID0gQ29vcmRpbmF0ZVk7DQorICAgICAgYnJlYWs7 DQorDQorICAgIGNhc2UgRWZpQmFkZ2luZ0Rpc3BsYXlBdHRyaWJ1dGVDZW50ZXJUb3A6DQorICAg ICAgRGVzdFggPSAoU2l6ZU9mWCAtIFdpZHRoKSAvIDI7DQorICAgICAgRGVzdFkgPSBDb29yZGlu YXRlWTsNCisgICAgICBicmVhazsNCisNCisgICAgY2FzZSBFZmlCYWRnaW5nRGlzcGxheUF0dHJp YnV0ZVJpZ2h0VG9wOg0KKyAgICAgIERlc3RYID0gKFNpemVPZlggLSBXaWR0aCAtIENvb3JkaW5h dGVYKTsNCisgICAgICBEZXN0WSA9IENvb3JkaW5hdGVZOzsNCisgICAgICBicmVhazsNCisNCisg ICAgY2FzZSBFZmlCYWRnaW5nRGlzcGxheUF0dHJpYnV0ZUNlbnRlclJpZ2h0Og0KKyAgICAgIERl c3RYID0gKFNpemVPZlggLSBXaWR0aCAtIENvb3JkaW5hdGVYKTsNCisgICAgICBEZXN0WSA9IChT aXplT2ZZIC0gSGVpZ2h0KSAvIDI7DQorICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgRWZpQmFk Z2luZ0Rpc3BsYXlBdHRyaWJ1dGVSaWdodEJvdHRvbToNCisgICAgICBEZXN0WCA9IChTaXplT2ZY IC0gV2lkdGggLSBDb29yZGluYXRlWCk7DQorICAgICAgRGVzdFkgPSAoU2l6ZU9mWSAtIEhlaWdo dCAtIENvb3JkaW5hdGVZKTsNCisgICAgICBicmVhazsNCisNCisgICAgY2FzZSBFZmlCYWRnaW5n RGlzcGxheUF0dHJpYnV0ZUNlbnRlckJvdHRvbToNCisgICAgICBEZXN0WCA9IChTaXplT2ZYIC0g V2lkdGgpIC8gMjsNCisgICAgICBEZXN0WSA9IChTaXplT2ZZIC0gSGVpZ2h0IC0gQ29vcmRpbmF0 ZVkpOw0KKyAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIEVmaUJhZGdpbmdEaXNwbGF5QXR0cmli dXRlTGVmdEJvdHRvbToNCisgICAgICBEZXN0WCA9IENvb3JkaW5hdGVYOw0KKyAgICAgIERlc3RZ ID0gKFNpemVPZlkgLSBIZWlnaHQgLSBDb29yZGluYXRlWSk7DQorICAgICAgYnJlYWs7DQorDQor ICAgIGNhc2UgRWZpQmFkZ2luZ0Rpc3BsYXlBdHRyaWJ1dGVDZW50ZXJMZWZ0Og0KKyAgICAgIERl c3RYID0gQ29vcmRpbmF0ZVg7DQorICAgICAgRGVzdFkgPSAoU2l6ZU9mWSAtIEhlaWdodCkgLyAy Ow0KKyAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIEVmaUJhZGdpbmdEaXNwbGF5QXR0cmlidXRl Q2VudGVyOg0KKyAgICAgIERlc3RYID0gKFNpemVPZlggLSBXaWR0aCkgLyAyOw0KKyAgICAgIERl c3RZID0gKFNpemVPZlkgLSBIZWlnaHQpIC8gMjsNCisgICAgICBicmVhazsNCisNCisgICAgZGVm YXVsdDoNCisgICAgICBEZXN0WCA9IENvb3JkaW5hdGVYOw0KKyAgICAgIERlc3RZID0gQ29vcmRp bmF0ZVk7DQorICAgICAgYnJlYWs7DQorICAgIH0NCisNCisgICAgaWYgKChEZXN0WCA+PSAwKSAm JiAoRGVzdFkgPj0gMCkpIHsNCisgICAgICBpZiAoR3JhcGhpY3NPdXRwdXQgIT0gTlVMTCkgew0K KyAgICAgICAgU3RhdHVzID0gR3JhcGhpY3NPdXRwdXQtPkJsdCAoDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdyYXBoaWNzT3V0cHV0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBCbHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaUJsdEJ1ZmZlclRvVmlkZW8s DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDAsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5UTikgRGVzdFgsDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5UTikgRGVzdFksDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFdpZHRoLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWln aHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZHRoICogc2l6ZW9mIChFRklfR1JB UEhJQ1NfT1VUUFVUX0JMVF9QSVhFTCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsN CisgICAgICB9IGVsc2UgaWYgKFVnYURyYXcgIT0gTlVMTCAmJiBGZWF0dXJlUGNkR2V0IChQY2RV Z2FDb25zdW1lU3VwcG9ydCkpIHsNCisgICAgICAgIFN0YXR1cyA9IFVnYURyYXctPkJsdCAoDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVnYURyYXcsDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChFRklfVUdBX1BJWEVMICopIEJsdCwNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRWZpVWdhQmx0QnVmZmVyVG9WaWRlbywNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKFVJTlROKSBEZXN0WCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg KFVJTlROKSBEZXN0WSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkdGgsDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEhlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgV2lkdGggKiBzaXplb2YgKEVGSV9VR0FfUElYRUwpDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7DQorICAgICAgfSBlbHNlIHsNCisgICAgICAgIFN0YXR1cyA9IEVGSV9VTlNV UFBPUlRFRDsNCisgICAgICB9DQorDQorICAgICAgLy8NCisgICAgICAvLyBSZXBvcnQgZGlzcGxh eWVkIExvZ28gaW5mb3JtYXRpb24uDQorICAgICAgLy8NCisgICAgICBpZiAoIUVGSV9FUlJPUiAo U3RhdHVzKSkgew0KKyAgICAgICAgTnVtYmVyT2ZMb2dvcysrOw0KKw0KKyAgICAgICAgaWYgKExv Z29XaWR0aCA9PSAwKSB7DQorICAgICAgICAgIC8vDQorICAgICAgICAgIC8vIFRoZSBmaXJzdCBM b2dvLg0KKyAgICAgICAgICAvLw0KKyAgICAgICAgICBMb2dvRGVzdFggPSAoVUlOVE4pIERlc3RY Ow0KKyAgICAgICAgICBMb2dvRGVzdFkgPSAoVUlOVE4pIERlc3RZOw0KKyAgICAgICAgICBMb2dv V2lkdGggPSBXaWR0aDsNCisgICAgICAgICAgTG9nb0hlaWdodCA9IEhlaWdodDsNCisgICAgICAg IH0gZWxzZSB7DQorICAgICAgICAgIC8vDQorICAgICAgICAgIC8vIE1lcmdlIG5ldyBsb2dvIHdp dGggb2xkIG9uZS4NCisgICAgICAgICAgLy8NCisgICAgICAgICAgTmV3RGVzdFggPSBNSU4gKChV SU5UTikgRGVzdFgsIExvZ29EZXN0WCk7DQorICAgICAgICAgIE5ld0Rlc3RZID0gTUlOICgoVUlO VE4pIERlc3RZLCBMb2dvRGVzdFkpOw0KKyAgICAgICAgICBOZXdXaWR0aCA9IE1BWCAoKFVJTlRO KSBEZXN0WCArIFdpZHRoLCBMb2dvRGVzdFggKyBMb2dvV2lkdGgpIC0gTmV3RGVzdFg7DQorICAg ICAgICAgIE5ld0hlaWdodCA9IE1BWCAoKFVJTlROKSBEZXN0WSArIEhlaWdodCwgTG9nb0Rlc3RZ ICsgTG9nb0hlaWdodCkgLSBOZXdEZXN0WTsNCisNCisgICAgICAgICAgTG9nb0Rlc3RYID0gTmV3 RGVzdFg7DQorICAgICAgICAgIExvZ29EZXN0WSA9IE5ld0Rlc3RZOw0KKyAgICAgICAgICBMb2dv V2lkdGggPSBOZXdXaWR0aDsNCisgICAgICAgICAgTG9nb0hlaWdodCA9IE5ld0hlaWdodDsNCisg ICAgICAgIH0NCisgICAgICB9DQorICAgIH0NCisNCisgICAgRnJlZVBvb2wgKEltYWdlRGF0YSk7 DQorDQorICAgIGlmIChCYWRnaW5nID09IE5VTEwpIHsNCisgICAgICBicmVhazsNCisgICAgfQ0K KyAgfQ0KKw0KK0RvbmU6DQorICBpZiAoQm9vdExvZ28gPT0gTlVMTCB8fCBOdW1iZXJPZkxvZ29z ID09IDApIHsNCisgICAgLy8NCisgICAgLy8gTm8gbG9nbyBkaXNwbGF5ZWQuDQorICAgIC8vDQor ICAgIGlmIChCbHQgIT0gTlVMTCkgew0KKyAgICAgIEZyZWVQb29sIChCbHQpOw0KKyAgICB9DQor DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICAvLw0KKyAgLy8gQWR2ZXJ0aXNlIGRp c3BsYXllZCBMb2dvIGluZm9ybWF0aW9uLg0KKyAgLy8NCisgIGlmIChOdW1iZXJPZkxvZ29zID09 IDEpIHsNCisgICAgLy8NCisgICAgLy8gT25seSBvbmUgbG9nbyBkaXNwbGF5ZWQsIHVzZSBpdHMg Qmx0IGJ1ZmZlciBkaXJlY3RseSBmb3IgQm9vdExvZ28gcHJvdG9jb2wuDQorICAgIC8vDQorICAg IExvZ29CbHQgPSBCbHQ7DQorICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KKyAgfSBlbHNlIHsN CisgICAgLy8NCisgICAgLy8gTW9yZSB0aGFuIG9uZSBMb2dvIGRpc3BsYXllZCwgZ2V0IG1lcmdl ZCBCbHRCdWZmZXIgdXNpbmcgVmlkZW9Ub0J1ZmZlciBvcGVyYXRpb24uIA0KKyAgICAvLw0KKyAg ICBpZiAoQmx0ICE9IE5VTEwpIHsNCisgICAgICBGcmVlUG9vbCAoQmx0KTsNCisgICAgfQ0KKw0K KyAgICAvLw0KKyAgICAvLyBFbnN1cmUgdGhlIExvZ29IZWlnaHQgKiBMb2dvV2lkdGggZG9lc24n dCBvdmVyZmxvdw0KKyAgICAvLw0KKyAgICBpZiAoTG9nb0hlaWdodCA+IERpdlU2NHg2NFJlbWFp bmRlciAoKFVJTlROKSB+MCwgTG9nb1dpZHRoLCBOVUxMKSkgew0KKyAgICAgIHJldHVybiBFRklf VU5TVVBQT1JURUQ7DQorICAgIH0NCisgICAgQnVmZmVyU2l6ZSA9IE11bHRVNjR4NjQgKExvZ29X aWR0aCwgTG9nb0hlaWdodCk7DQorDQorICAgIC8vDQorICAgIC8vIEVuc3VyZSB0aGUgQnVmZmVy U2l6ZSAqIHNpemVvZiAoRUZJX0dSQVBISUNTX09VVFBVVF9CTFRfUElYRUwpIGRvZXNuJ3Qgb3Zl cmZsb3cNCisgICAgLy8NCisgICAgaWYgKEJ1ZmZlclNpemUgPiBEaXZVNjR4MzIgKChVSU5UTikg fjAsIHNpemVvZiAoRUZJX0dSQVBISUNTX09VVFBVVF9CTFRfUElYRUwpKSkgew0KKyAgICAgIHJl dHVybiBFRklfVU5TVVBQT1JURUQ7DQorICAgIH0NCisNCisgICAgTG9nb0JsdCA9IEFsbG9jYXRl WmVyb1Bvb2wgKChVSU5UTilCdWZmZXJTaXplICogc2l6ZW9mIChFRklfR1JBUEhJQ1NfT1VUUFVU X0JMVF9QSVhFTCkpOw0KKyAgICBpZiAoTG9nb0JsdCA9PSBOVUxMKSB7DQorICAgICAgcmV0dXJu IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KKyAgICB9DQorDQorICAgIGlmIChHcmFwaGljc091dHB1 dCAhPSBOVUxMKSB7DQorICAgICAgU3RhdHVzID0gR3JhcGhpY3NPdXRwdXQtPkJsdCAoDQorICAg ICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc091dHB1dCwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgIExvZ29CbHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBFZmlCbHRWaWRl b1RvQmx0QnVmZmVyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nb0Rlc3RYLA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgTG9nb0Rlc3RZLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgMCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQorICAgICAgICAgICAgICAg ICAgICAgICAgICBMb2dvV2lkdGgsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dvSGVp Z2h0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nb1dpZHRoICogc2l6ZW9mIChFRklf R1JBUEhJQ1NfT1VUUFVUX0JMVF9QSVhFTCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICk7 DQorICAgIH0gZWxzZSBpZiAoVWdhRHJhdyAhPSBOVUxMICYmIEZlYXR1cmVQY2RHZXQgKFBjZFVn YUNvbnN1bWVTdXBwb3J0KSkgew0KKyAgICAgIFN0YXR1cyA9IFVnYURyYXctPkJsdCAoDQorICAg ICAgICAgICAgICAgICAgICAgICAgICBVZ2FEcmF3LA0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgKEVGSV9VR0FfUElYRUwgKikgTG9nb0JsdCwNCisgICAgICAgICAgICAgICAgICAgICAgICAg IEVmaVVnYVZpZGVvVG9CbHRCdWZmZXIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dv RGVzdFgsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dvRGVzdFksDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAwLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwNCisgICAg ICAgICAgICAgICAgICAgICAgICAgIExvZ29XaWR0aCwNCisgICAgICAgICAgICAgICAgICAgICAg ICAgIExvZ29IZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dvV2lkdGggKiBz aXplb2YgKEVGSV9VR0FfUElYRUwpDQorICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KKyAg ICB9IGVsc2Ugew0KKyAgICAgIFN0YXR1cyA9IEVGSV9VTlNVUFBPUlRFRDsNCisgICAgfQ0KKyAg fQ0KKw0KKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgQm9vdExvZ28tPlNldEJv b3RMb2dvIChCb290TG9nbywgTG9nb0JsdCwgTG9nb0Rlc3RYLCBMb2dvRGVzdFksIExvZ29XaWR0 aCwgTG9nb0hlaWdodCk7DQorICB9DQorICBGcmVlUG9vbCAoTG9nb0JsdCk7DQorDQorICByZXR1 cm4gU3RhdHVzOw0KK30NCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9h cmRQa2cvTGlicmFyeS9Mb2FkTGludXhMaWIvTGludXguYyBiL1BsYXRmb3JtL0ludGVsL1NpbWlj c09wZW5Cb2FyZFBrZy9MaWJyYXJ5L0xvYWRMaW51eExpYi9MaW51eC5jDQpuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uNjMxYmI3ZWU2OQ0KLS0tIC9kZXYvbnVsbA0KKysr IGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvTG9hZExpbnV4TGli L0xpbnV4LmMNCkBAIC0wLDAgKzEsNjYyIEBADQorLyoqIEBmaWxlDQorICBDb3B5cmlnaHQgKGMp IDIwMTEgLSAyMDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+ DQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyoq Lw0KKw0KKyNpbmNsdWRlICJMb2FkTGludXhMaWIuaCINCisNCisNCisvKioNCisgIEEgc2ltcGxl IGNoZWNrIG9mIHRoZSBrZXJuZWwgc2V0dXAgaW1hZ2UNCisNCisgIEFuIGFzc3VtcHRpb24gaXMg bWFkZSB0aGF0IHRoZSBzaXplIG9mIHRoZSBkYXRhIGlzIGF0IGxlYXN0IHRoZQ0KKyAgc2l6ZSBv ZiBzdHJ1Y3QgYm9vdF9wYXJhbXMuDQorDQorICBAcGFyYW1baW5dICAgIEtlcm5lbFNldHVwIC0g VGhlIGtlcm5lbCBzZXR1cCBpbWFnZQ0KKw0KKyAgQHJldHZhbCAgICBFRklfU1VDQ0VTUyAtIFRo ZSBrZXJuZWwgc2V0dXAgbG9va3MgdmFsaWQgYW5kIHN1cHBvcnRlZA0KKyAgQHJldHZhbCAgICBF RklfSU5WQUxJRF9QQVJBTUVURVIgLSBLZXJuZWxTZXR1cCB3YXMgTlVMTA0KKyAgQHJldHZhbCAg ICBFRklfVU5TVVBQT1JURUQgLSBUaGUga2VybmVsIHNldHVwIGlzIG5vdCB2YWxpZCBvciBzdXBw b3J0ZWQNCisNCisqKi8NCitTVEFUSUMNCitFRklfU1RBVFVTDQorRUZJQVBJDQorQmFzaWNLZXJu ZWxTZXR1cENoZWNrICgNCisgIElOIFZPSUQgICAgICAgICpLZXJuZWxTZXR1cA0KKyAgKQ0KK3sN CisgIHJldHVybiBMb2FkTGludXhDaGVja0tlcm5lbFNldHVwKEtlcm5lbFNldHVwLCBzaXplb2Yg KHN0cnVjdCBib290X3BhcmFtcykpOw0KK30NCisNCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQor TG9hZExpbnV4Q2hlY2tLZXJuZWxTZXR1cCAoDQorICBJTiBWT0lEICAgICAgICAqS2VybmVsU2V0 dXAsDQorICBJTiBVSU5UTiAgICAgICBLZXJuZWxTZXR1cFNpemUNCisgICkNCit7DQorICBzdHJ1 Y3QgYm9vdF9wYXJhbXMgICAgICAgICpCcDsNCisNCisgIGlmIChLZXJuZWxTZXR1cCA9PSBOVUxM KSB7DQorICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICBpZiAo S2VybmVsU2V0dXBTaXplIDwgc2l6ZW9mICgqQnApKSB7DQorICAgIHJldHVybiBFRklfVU5TVVBQ T1JURUQ7DQorICB9DQorDQorICBCcCA9IChzdHJ1Y3QgYm9vdF9wYXJhbXMqKSBLZXJuZWxTZXR1 cDsNCisNCisgIGlmICgoQnAtPmhkci5zaWduYXR1cmUgIT0gMHhBQTU1KSB8fCAvLyBDaGVjayBi b290IHNlY3RvciBzaWduYXR1cmUNCisgICAgICAoQnAtPmhkci5oZWFkZXIgIT0gU0VUVVBfSERS KSB8fA0KKyAgICAgIChCcC0+aGRyLnZlcnNpb24gPCAweDIwNSkgfHwgLy8gV2Ugb25seSBzdXBw b3J0IHJlbG9jYXRhYmxlIGtlcm5lbHMNCisgICAgICAoIUJwLT5oZHIucmVsb2NhdGFibGVfa2Vy bmVsKQ0KKyAgICAgKSB7DQorICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQorICB9IGVsc2Ug ew0KKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorICB9DQorfQ0KKw0KKw0KK1VJTlRODQorRUZJ QVBJDQorTG9hZExpbnV4R2V0S2VybmVsU2l6ZSAoDQorICBJTiBWT0lEICAgICAgICAqS2VybmVs U2V0dXAsDQorICBJTiBVSU5UTiAgICAgICBLZXJuZWxTaXplDQorICApDQorew0KKyAgc3RydWN0 IGJvb3RfcGFyYW1zICAgICAgICAqQnA7DQorDQorICBpZiAoRUZJX0VSUk9SIChCYXNpY0tlcm5l bFNldHVwQ2hlY2sgKEtlcm5lbFNldHVwKSkpIHsNCisgICAgcmV0dXJuIDA7DQorICB9DQorDQor ICBCcCA9IChzdHJ1Y3QgYm9vdF9wYXJhbXMqKSBLZXJuZWxTZXR1cDsNCisNCisgIGlmIChCcC0+ aGRyLnZlcnNpb24gPiAweDIwYSkgew0KKyAgICByZXR1cm4gQnAtPmhkci5pbml0X3NpemU7DQor ICB9IGVsc2Ugew0KKyAgICAvLw0KKyAgICAvLyBBZGQgZXh0cmEgc2l6ZSBmb3Iga2VybmVsIGRl Y29tcHJlc3Npb24NCisgICAgLy8NCisgICAgcmV0dXJuIDMgKiBLZXJuZWxTaXplOw0KKyAgfQ0K K30NCisNCisNCitWT0lEKg0KK0VGSUFQSQ0KK0xvYWRMaW51eEFsbG9jYXRlS2VybmVsU2V0dXBQ YWdlcyAoDQorICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgIFBhZ2VzDQorICApDQorew0KKyAg RUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklfUEhZU0lDQUxfQUREUkVT UyAgICAgIEFkZHJlc3M7DQorDQorICBBZGRyZXNzID0gQkFTRV8xR0I7DQorICBTdGF0dXMgPSBn QlMtPkFsbG9jYXRlUGFnZXMgKA0KKyAgICAgICAgICAgICAgICAgIEFsbG9jYXRlTWF4QWRkcmVz cywNCisgICAgICAgICAgICAgICAgICBFZmlMb2FkZXJEYXRhLA0KKyAgICAgICAgICAgICAgICAg IFBhZ2VzLA0KKyAgICAgICAgICAgICAgICAgICZBZGRyZXNzDQorICAgICAgICAgICAgICAgICAg KTsNCisgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiAoVk9JRCopKFVJ TlROKSBBZGRyZXNzOw0KKyAgfSBlbHNlIHsNCisgICAgcmV0dXJuIE5VTEw7DQorICB9DQorfQ0K Kw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitMb2FkTGludXhJbml0aWFsaXplS2VybmVsU2V0dXAg KA0KKyAgSU4gVk9JRCAgICAgICAgKktlcm5lbFNldHVwDQorICApDQorew0KKyAgRUZJX1NUQVRV UyAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFNl dHVwRW5kOw0KKyAgc3RydWN0IGJvb3RfcGFyYW1zICAgICAgICAqQnA7DQorDQorICBTdGF0dXMg PSBCYXNpY0tlcm5lbFNldHVwQ2hlY2sgKEtlcm5lbFNldHVwKTsNCisgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIEJwID0gKHN0cnVj dCBib290X3BhcmFtcyopIEtlcm5lbFNldHVwOw0KKw0KKyAgU2V0dXBFbmQgPSAweDIwMiArIChC cC0+aGRyLmp1bXAgJiAweGZmKTsNCisNCisgIC8vDQorICAvLyBDbGVhciBhbGwgYnV0IHRoZSBz ZXR1cF9oZWFkZXINCisgIC8vDQorICBaZXJvTWVtIChLZXJuZWxTZXR1cCwgMHgxZjEpOw0KKyAg WmVyb01lbSAoKChVSU5UOCAqKUtlcm5lbFNldHVwKSArIFNldHVwRW5kLCA0MDk2IC0gU2V0dXBF bmQpOw0KKyAgREVCVUcgKChFRklfRF9JTkZPLCAiQ2xlYXJlZCBrZXJuZWwgc2V0dXAgMC0weDFm MSwgMHglTHgtMHgxMDAwXG4iLA0KKyAgICAoVUlOVDY0KVNldHVwRW5kKSk7DQorDQorICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQorfQ0KKw0KK1ZPSUQqDQorRUZJQVBJDQorTG9hZExpbnV4QWxsb2Nh dGVLZXJuZWxQYWdlcyAoDQorICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICpLZXJuZWxTZXR1 cCwNCisgIElOIFVJTlROICAgICAgICAgICAgICAgICAgUGFnZXMNCisgICkNCit7DQorICBFRklf U1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAg ICAgS2VybmVsQWRkcmVzczsNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgTG9vcDsNCisg IHN0cnVjdCBib290X3BhcmFtcyAgICAgICAgKkJwOw0KKw0KKyAgaWYgKEVGSV9FUlJPUiAoQmFz aWNLZXJuZWxTZXR1cENoZWNrIChLZXJuZWxTZXR1cCkpKSB7DQorICAgIHJldHVybiBOVUxMOw0K KyAgfQ0KKw0KKyAgQnAgPSAoc3RydWN0IGJvb3RfcGFyYW1zKikgS2VybmVsU2V0dXA7DQorDQor ICBmb3IgKExvb3AgPSAxOyBMb29wIDwgNTEyOyBMb29wKyspIHsNCisgICAgS2VybmVsQWRkcmVz cyA9IE11bHRVNjR4MzIgKA0KKyAgICAgICAgICAgICAgICAgICAgICAyICogQnAtPmhkci5rZXJu ZWxfYWxpZ25tZW50LA0KKyAgICAgICAgICAgICAgICAgICAgICBMb29wDQorICAgICAgICAgICAg ICAgICAgICAgICk7DQorICAgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQYWdlcyAoDQorICAgICAg ICAgICAgICAgICAgICBBbGxvY2F0ZUFkZHJlc3MsDQorICAgICAgICAgICAgICAgICAgICBFZmlM b2FkZXJEYXRhLA0KKyAgICAgICAgICAgICAgICAgICAgUGFnZXMsDQorICAgICAgICAgICAgICAg ICAgICAmS2VybmVsQWRkcmVzcw0KKyAgICAgICAgICAgICAgICAgICAgKTsNCisgICAgaWYgKCFF RklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICByZXR1cm4gKFZPSUQqKShVSU5UTikgS2VybmVs QWRkcmVzczsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgcmV0dXJuIE5VTEw7DQorfQ0KKw0KKw0KK1ZP SUQqDQorRUZJQVBJDQorTG9hZExpbnV4QWxsb2NhdGVDb21tYW5kTGluZVBhZ2VzICgNCisgIElO IFVJTlROICAgICAgICAgICAgICAgICAgUGFnZXMNCisgICkNCit7DQorICBFRklfU1RBVFVTICAg ICAgICAgICAgICAgIFN0YXR1czsNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgQWRkcmVz czsNCisNCisgIEFkZHJlc3MgPSAweGEwMDAwOw0KKyAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBh Z2VzICgNCisgICAgICAgICAgICAgICAgICBBbGxvY2F0ZU1heEFkZHJlc3MsDQorICAgICAgICAg ICAgICAgICAgRWZpTG9hZGVyRGF0YSwNCisgICAgICAgICAgICAgICAgICBQYWdlcywNCisgICAg ICAgICAgICAgICAgICAmQWRkcmVzcw0KKyAgICAgICAgICAgICAgICAgICk7DQorICBpZiAoIUVG SV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gKFZPSUQqKShVSU5UTikgQWRkcmVzczsN CisgIH0gZWxzZSB7DQorICAgIHJldHVybiBOVUxMOw0KKyAgfQ0KK30NCisNCisNCitWT0lEKg0K K0VGSUFQSQ0KK0xvYWRMaW51eEFsbG9jYXRlSW5pdHJkUGFnZXMgKA0KKyAgSU4gVk9JRCAgICAg ICAgICAgICAgICAgICAqS2VybmVsU2V0dXAsDQorICBJTiBVSU5UTiAgICAgICAgICAgICAgICAg IFBhZ2VzDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQor ICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgIEFkZHJlc3M7DQorDQorICBzdHJ1Y3QgYm9vdF9w YXJhbXMgICAgICAgICpCcDsNCisNCisgIGlmIChFRklfRVJST1IgKEJhc2ljS2VybmVsU2V0dXBD aGVjayAoS2VybmVsU2V0dXApKSkgew0KKyAgICByZXR1cm4gTlVMTDsNCisgIH0NCisNCisgIEJw ID0gKHN0cnVjdCBib290X3BhcmFtcyopIEtlcm5lbFNldHVwOw0KKw0KKyAgQWRkcmVzcyA9IChF RklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pIEJwLT5oZHIucmFtZGlza19tYXg7DQorICBTdGF0 dXMgPSBnQlMtPkFsbG9jYXRlUGFnZXMgKA0KKyAgICAgICAgICAgICAgICAgIEFsbG9jYXRlTWF4 QWRkcmVzcywNCisgICAgICAgICAgICAgICAgICBFZmlMb2FkZXJEYXRhLA0KKyAgICAgICAgICAg ICAgICAgIFBhZ2VzLA0KKyAgICAgICAgICAgICAgICAgICZBZGRyZXNzDQorICAgICAgICAgICAg ICAgICAgKTsNCisgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiAoVk9J RCopKFVJTlROKSBBZGRyZXNzOw0KKyAgfSBlbHNlIHsNCisgICAgcmV0dXJuIE5VTEw7DQorICB9 DQorfQ0KKw0KKw0KK1NUQVRJQw0KK1ZPSUQNCitTZXR1cExpbnV4TWVtbWFwICgNCisgIElOIE9V VCBzdHJ1Y3QgYm9vdF9wYXJhbXMgICAgICAgICpCcA0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMg ICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBVSU5UOCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVG1wTWVtb3J5TWFwWzFdOw0KKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE1hcEtleTsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEZXNjcmlwdG9yU2l6ZTsNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEZXNjcmlwdG9yVmVyc2lvbjsNCisgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBNZW1vcnlNYXBTaXplOw0KKyAgRUZJX01FTU9SWV9ERVNDUklQVE9SICAg ICAgICAgICAgICAgICpNZW1vcnlNYXA7DQorICBFRklfTUVNT1JZX0RFU0NSSVBUT1IgICAgICAg ICAgICAgICAgKk1lbW9yeU1hcFB0cjsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJbmRleDsNCisgIHN0cnVjdCBlZmlfaW5mbyAgICAgICAgICAgICAgICAgICAgICAq RWZpOw0KKyAgc3RydWN0IGU4MjBfZW50cnkgICAgICAgICAgICAgICAgICAgICpMYXN0RTgyMDsN CisgIHN0cnVjdCBlODIwX2VudHJ5ICAgICAgICAgICAgICAgICAgICAqRTgyMDsNCisgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFODIwRW50cnlDb3VudDsNCisgIEVGSV9Q SFlTSUNBTF9BRERSRVNTICAgICAgICAgICAgICAgICBMYXN0RW5kQWRkcjsNCisNCisgIC8vDQor ICAvLyBHZXQgU3lzdGVtIE1lbW9yeU1hcFNpemUNCisgIC8vDQorICBNZW1vcnlNYXBTaXplID0g c2l6ZW9mIChUbXBNZW1vcnlNYXApOw0KKyAgU3RhdHVzID0gZ0JTLT5HZXRNZW1vcnlNYXAgKA0K KyAgICAgICAgICAgICAgICAgICZNZW1vcnlNYXBTaXplLA0KKyAgICAgICAgICAgICAgICAgIChF RklfTUVNT1JZX0RFU0NSSVBUT1IgKilUbXBNZW1vcnlNYXAsDQorICAgICAgICAgICAgICAgICAg Jk1hcEtleSwNCisgICAgICAgICAgICAgICAgICAmRGVzY3JpcHRvclNpemUsDQorICAgICAgICAg ICAgICAgICAgJkRlc2NyaXB0b3JWZXJzaW9uDQorICAgICAgICAgICAgICAgICAgKTsNCisgIEFT U0VSVCAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKTsNCisgIC8vDQorICAvLyBFbmxh cmdlIHNwYWNlIGhlcmUsIGJlY2F1c2Ugd2Ugd2lsbCBhbGxvY2F0ZSBwb29sIG5vdy4NCisgIC8v DQorICBNZW1vcnlNYXBTaXplICs9IEVGSV9QQUdFX1NJWkU7DQorICBTdGF0dXMgPSBnQlMtPkFs bG9jYXRlUG9vbCAoDQorICAgICAgICAgICAgICAgICAgRWZpTG9hZGVyRGF0YSwNCisgICAgICAg ICAgICAgICAgICBNZW1vcnlNYXBTaXplLA0KKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSAm TWVtb3J5TWFwDQorICAgICAgICAgICAgICAgICAgKTsNCisgIEFTU0VSVF9FRklfRVJST1IgKFN0 YXR1cyk7DQorDQorICAvLw0KKyAgLy8gR2V0IFN5c3RlbSBNZW1vcnlNYXANCisgIC8vDQorICBT dGF0dXMgPSBnQlMtPkdldE1lbW9yeU1hcCAoDQorICAgICAgICAgICAgICAgICAgJk1lbW9yeU1h cFNpemUsDQorICAgICAgICAgICAgICAgICAgTWVtb3J5TWFwLA0KKyAgICAgICAgICAgICAgICAg ICZNYXBLZXksDQorICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0b3JTaXplLA0KKyAgICAgICAg ICAgICAgICAgICZEZXNjcmlwdG9yVmVyc2lvbg0KKyAgICAgICAgICAgICAgICAgICk7DQorICBB U1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KKw0KKyAgTGFzdEU4MjAgPSBOVUxMOw0KKyAgRTgy MCA9ICZCcC0+ZTgyMF9tYXBbMF07DQorICBFODIwRW50cnlDb3VudCA9IDA7DQorICBMYXN0RW5k QWRkciA9IDA7DQorICBNZW1vcnlNYXBQdHIgPSBNZW1vcnlNYXA7DQorICBmb3IgKEluZGV4ID0g MDsgSW5kZXggPCAoTWVtb3J5TWFwU2l6ZSAvIERlc2NyaXB0b3JTaXplKTsgSW5kZXgrKykgew0K KyAgICBVSU5UTiBFODIwVHlwZSA9IDA7DQorDQorICAgIGlmIChNZW1vcnlNYXAtPk51bWJlck9m UGFnZXMgPT0gMCkgew0KKyAgICAgIGNvbnRpbnVlOw0KKyAgICB9DQorDQorICAgIHN3aXRjaChN ZW1vcnlNYXAtPlR5cGUpIHsNCisgICAgY2FzZSBFZmlSZXNlcnZlZE1lbW9yeVR5cGU6DQorICAg IGNhc2UgRWZpUnVudGltZVNlcnZpY2VzQ29kZToNCisgICAgY2FzZSBFZmlSdW50aW1lU2Vydmlj ZXNEYXRhOg0KKyAgICBjYXNlIEVmaU1lbW9yeU1hcHBlZElPOg0KKyAgICBjYXNlIEVmaU1lbW9y eU1hcHBlZElPUG9ydFNwYWNlOg0KKyAgICBjYXNlIEVmaVBhbENvZGU6DQorICAgICAgRTgyMFR5 cGUgPSBFODIwX1JFU0VSVkVEOw0KKyAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIEVmaVVudXNh YmxlTWVtb3J5Og0KKyAgICAgIEU4MjBUeXBlID0gRTgyMF9VTlVTQUJMRTsNCisgICAgICBicmVh azsNCisNCisgICAgY2FzZSBFZmlBQ1BJUmVjbGFpbU1lbW9yeToNCisgICAgICBFODIwVHlwZSA9 IEU4MjBfQUNQSTsNCisgICAgICBicmVhazsNCisNCisgICAgY2FzZSBFZmlMb2FkZXJDb2RlOg0K KyAgICBjYXNlIEVmaUxvYWRlckRhdGE6DQorICAgIGNhc2UgRWZpQm9vdFNlcnZpY2VzQ29kZToN CisgICAgY2FzZSBFZmlCb290U2VydmljZXNEYXRhOg0KKyAgICBjYXNlIEVmaUNvbnZlbnRpb25h bE1lbW9yeToNCisgICAgICBFODIwVHlwZSA9IEU4MjBfUkFNOw0KKyAgICAgIGJyZWFrOw0KKw0K KyAgICBjYXNlIEVmaUFDUElNZW1vcnlOVlM6DQorICAgICAgRTgyMFR5cGUgPSBFODIwX05WUzsN CisgICAgICBicmVhazsNCisNCisgICAgZGVmYXVsdDoNCisgICAgICBERUJVRyAoKA0KKyAgICAg ICAgRUZJX0RfRVJST1IsDQorICAgICAgICAiSW52YWxpZCBFRkkgbWVtb3J5IGRlc2NyaXB0b3Ig dHlwZSAoMHgleCkhXG4iLA0KKyAgICAgICAgTWVtb3J5TWFwLT5UeXBlDQorICAgICAgICApKTsN CisgICAgICBjb250aW51ZTsNCisgICAgfQ0KKw0KKyAgICBpZiAoKExhc3RFODIwICE9IE5VTEwp ICYmDQorICAgICAgICAoTGFzdEU4MjAtPnR5cGUgPT0gKFVJTlQzMikgRTgyMFR5cGUpICYmDQor ICAgICAgICAoTWVtb3J5TWFwLT5QaHlzaWNhbFN0YXJ0ID09IExhc3RFbmRBZGRyKSkgew0KKyAg ICAgIExhc3RFODIwLT5zaXplICs9IEVGSV9QQUdFU19UT19TSVpFICgoVUlOVE4pIE1lbW9yeU1h cC0+TnVtYmVyT2ZQYWdlcyk7DQorICAgICAgTGFzdEVuZEFkZHIgKz0gRUZJX1BBR0VTX1RPX1NJ WkUgKChVSU5UTikgTWVtb3J5TWFwLT5OdW1iZXJPZlBhZ2VzKTsNCisgICAgfSBlbHNlIHsNCisg ICAgICBpZiAoRTgyMEVudHJ5Q291bnQgPj0gKHNpemVvZiAoQnAtPmU4MjBfbWFwKSAvIHNpemVv ZiAoQnAtPmU4MjBfbWFwWzBdKSkpIHsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIH0NCisgICAg ICBFODIwLT50eXBlID0gKFVJTlQzMikgRTgyMFR5cGU7DQorICAgICAgRTgyMC0+YWRkciA9IE1l bW9yeU1hcC0+UGh5c2ljYWxTdGFydDsNCisgICAgICBFODIwLT5zaXplID0gRUZJX1BBR0VTX1RP X1NJWkUgKChVSU5UTikgTWVtb3J5TWFwLT5OdW1iZXJPZlBhZ2VzKTsNCisgICAgICBMYXN0RTgy MCA9IEU4MjA7DQorICAgICAgTGFzdEVuZEFkZHIgPSBFODIwLT5hZGRyICsgRTgyMC0+c2l6ZTsN CisgICAgICBFODIwKys7DQorICAgICAgRTgyMEVudHJ5Q291bnQrKzsNCisgICAgfQ0KKw0KKyAg ICAvLw0KKyAgICAvLyBHZXQgbmV4dCBpdGVtDQorICAgIC8vDQorICAgIE1lbW9yeU1hcCA9IChF RklfTUVNT1JZX0RFU0NSSVBUT1IgKikoKFVJTlROKU1lbW9yeU1hcCArIERlc2NyaXB0b3JTaXpl KTsNCisgIH0NCisgIEJwLT5lODIwX2VudHJpZXMgPSAoVUlOVDgpIEU4MjBFbnRyeUNvdW50Ow0K Kw0KKyAgRWZpID0gJkJwLT5lZmlfaW5mbzsNCisgIEVmaS0+ZWZpX3N5c3RhYiA9IChVSU5UMzIp KFVJTlROKSBnU1Q7DQorICBFZmktPmVmaV9tZW1kZXNjX3NpemUgPSAoVUlOVDMyKSBEZXNjcmlw dG9yU2l6ZTsNCisgIEVmaS0+ZWZpX21lbWRlc2NfdmVyc2lvbiA9IERlc2NyaXB0b3JWZXJzaW9u Ow0KKyAgRWZpLT5lZmlfbWVtbWFwID0gKFVJTlQzMikoVUlOVE4pIE1lbW9yeU1hcFB0cjsNCisg IEVmaS0+ZWZpX21lbW1hcF9zaXplID0gKFVJTlQzMikgTWVtb3J5TWFwU2l6ZTsNCisjaWZkZWYg TURFX0NQVV9JQTMyDQorICBFZmktPmVmaV9sb2FkZXJfc2lnbmF0dXJlID0gU0lHTkFUVVJFXzMy ICgnRScsICdMJywgJzMnLCAnMicpOw0KKyNlbHNlDQorICBFZmktPmVmaV9zeXN0YWJfaGkgPSAo VUlOVDMyKSAoKChVSU5UNjQpKFVJTlROKSBnU1QpID4+IDMyKTsNCisgIEVmaS0+ZWZpX21lbW1h cF9oaSA9IChVSU5UMzIpICgoKFVJTlQ2NCkoVUlOVE4pIE1lbW9yeU1hcFB0cikgPj4gMzIpOw0K KyAgRWZpLT5lZmlfbG9hZGVyX3NpZ25hdHVyZSA9IFNJR05BVFVSRV8zMiAoJ0UnLCAnTCcsICc2 JywgJzQnKTsNCisjZW5kaWYNCisNCisgIGdCUy0+RXhpdEJvb3RTZXJ2aWNlcyAoZ0ltYWdlSGFu ZGxlLCBNYXBLZXkpOw0KK30NCisNCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorTG9hZExpbnV4 U2V0Q29tbWFuZExpbmUgKA0KKyAgSU4gT1VUIFZPSUQgICAgKktlcm5lbFNldHVwLA0KKyAgSU4g Q0hBUjggICAgICAgKkNvbW1hbmRMaW5lDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICBTdGF0dXM7DQorICBzdHJ1Y3QgYm9vdF9wYXJhbXMgICAgICpCcDsNCisNCisgIFN0YXR1 cyA9IEJhc2ljS2VybmVsU2V0dXBDaGVjayAoS2VybmVsU2V0dXApOw0KKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgQnAgPSAoc3Ry dWN0IGJvb3RfcGFyYW1zKikgS2VybmVsU2V0dXA7DQorDQorICBCcC0+aGRyLmNtZF9saW5lX3B0 ciA9IChVSU5UMzIpKFVJTlROKSBDb21tYW5kTGluZTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VT UzsNCit9DQorDQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0xvYWRMaW51eFNldEluaXRyZCAo DQorICBJTiBPVVQgVk9JRCAgICAqS2VybmVsU2V0dXAsDQorICBJTiBWT0lEICAgICAgICAqSW5p dHJkLA0KKyAgSU4gVUlOVE4gICAgICAgSW5pdHJkU2l6ZQ0KKyAgKQ0KK3sNCisgIEVGSV9TVEFU VVMgICAgICAgICAgICAgU3RhdHVzOw0KKyAgc3RydWN0IGJvb3RfcGFyYW1zICAgICAqQnA7DQor DQorICBTdGF0dXMgPSBCYXNpY0tlcm5lbFNldHVwQ2hlY2sgKEtlcm5lbFNldHVwKTsNCisgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisg IEJwID0gKHN0cnVjdCBib290X3BhcmFtcyopIEtlcm5lbFNldHVwOw0KKw0KKyAgQnAtPmhkci5y YW1kaXNrX3N0YXJ0ID0gKFVJTlQzMikoVUlOVE4pIEluaXRyZDsNCisgIEJwLT5oZHIucmFtZGlz a19sZW4gPSAoVUlOVDMyKSBJbml0cmRTaXplOw0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K K30NCisNCisNCitTVEFUSUMgVk9JRA0KK0ZpbmRCaXRzICgNCisgIHVuc2lnbmVkIGxvbmcgTWFz aywNCisgIFVJTlQ4ICpQb3MsDQorICBVSU5UOCAqU2l6ZQ0KKyAgKQ0KK3sNCisgIFVJTlQ4IEZp cnN0LCBMZW47DQorDQorICBGaXJzdCA9IDA7DQorICBMZW4gPSAwOw0KKw0KKyAgaWYgKE1hc2sp IHsNCisgICAgd2hpbGUgKCEoTWFzayAmIDB4MSkpIHsNCisgICAgICBNYXNrID0gTWFzayA+PiAx Ow0KKyAgICAgIEZpcnN0Kys7DQorICAgIH0NCisNCisgICAgd2hpbGUgKE1hc2sgJiAweDEpIHsN CisgICAgICBNYXNrID0gTWFzayA+PiAxOw0KKyAgICAgIExlbisrOw0KKyAgICB9DQorICB9DQor ICAqUG9zID0gRmlyc3Q7DQorICAqU2l6ZSA9IExlbjsNCit9DQorDQorDQorU1RBVElDDQorRUZJ X1NUQVRVUw0KK1NldHVwR3JhcGhpY3NGcm9tR29wICgNCisgIHN0cnVjdCBzY3JlZW5faW5mbyAg ICAgICAgICAgKlNpLA0KKyAgRUZJX0dSQVBISUNTX09VVFBVVF9QUk9UT0NPTCAqR29wDQorICAp DQorew0KKyAgRUZJX0dSQVBISUNTX09VVFBVVF9NT0RFX0lORk9STUFUSU9OICpJbmZvOw0KKyAg RUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplOw0KKw0KKyAgU3RhdHVzID0gR29wLT5R dWVyeU1vZGUoR29wLCBHb3AtPk1vZGUtPk1vZGUsICZTaXplLCAmSW5mbyk7DQorICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICAvKiBX ZSBmb3VuZCBhIEdPUCAqLw0KKw0KKyAgLyogRUZJIGZyYW1lYnVmZmVyICovDQorICBTaS0+b3Jp Z192aWRlb19pc1ZHQSA9IDB4NzA7DQorDQorICBTaS0+b3JpZ194ID0gMDsNCisgIFNpLT5vcmln X3kgPSAwOw0KKyAgU2ktPm9yaWdfdmlkZW9fcGFnZSA9IDA7DQorICBTaS0+b3JpZ192aWRlb19t b2RlID0gMDsNCisgIFNpLT5vcmlnX3ZpZGVvX2NvbHMgPSAwOw0KKyAgU2ktPm9yaWdfdmlkZW9f bGluZXMgPSAwOw0KKyAgU2ktPm9yaWdfdmlkZW9fZWdhX2J4ID0gMDsNCisgIFNpLT5vcmlnX3Zp ZGVvX3BvaW50cyA9IDA7DQorDQorICBTaS0+bGZiX2Jhc2UgPSAoVUlOVDMyKSBHb3AtPk1vZGUt PkZyYW1lQnVmZmVyQmFzZTsNCisgIFNpLT5sZmJfc2l6ZSA9IChVSU5UMzIpIEdvcC0+TW9kZS0+ RnJhbWVCdWZmZXJTaXplOw0KKyAgU2ktPmxmYl93aWR0aCA9IChVSU5UMTYpIEluZm8tPkhvcml6 b250YWxSZXNvbHV0aW9uOw0KKyAgU2ktPmxmYl9oZWlnaHQgPSAoVUlOVDE2KSBJbmZvLT5WZXJ0 aWNhbFJlc29sdXRpb247DQorICBTaS0+cGFnZXMgPSAxOw0KKyAgU2ktPnZlc2FwbV9zZWcgPSAw Ow0KKyAgU2ktPnZlc2FwbV9vZmYgPSAwOw0KKw0KKyAgaWYgKEluZm8tPlBpeGVsRm9ybWF0ID09 IFBpeGVsUmVkR3JlZW5CbHVlUmVzZXJ2ZWQ4Qml0UGVyQ29sb3IpIHsNCisgICAgU2ktPmxmYl9k ZXB0aCA9IDMyOw0KKyAgICBTaS0+cmVkX3NpemUgPSA4Ow0KKyAgICBTaS0+cmVkX3BvcyA9IDA7 DQorICAgIFNpLT5ncmVlbl9zaXplID0gODsNCisgICAgU2ktPmdyZWVuX3BvcyA9IDg7DQorICAg IFNpLT5ibHVlX3NpemUgPSA4Ow0KKyAgICBTaS0+Ymx1ZV9wb3MgPSAxNjsNCisgICAgU2ktPnJz dmRfc2l6ZSA9IDg7DQorICAgIFNpLT5yc3ZkX3BvcyA9IDI0Ow0KKyAgICBTaS0+bGZiX2xpbmVs ZW5ndGggPSAoVUlOVDE2KSAoSW5mby0+UGl4ZWxzUGVyU2NhbkxpbmUgKiA0KTsNCisNCisgIH0g ZWxzZSBpZiAoSW5mby0+UGl4ZWxGb3JtYXQgPT0gUGl4ZWxCbHVlR3JlZW5SZWRSZXNlcnZlZDhC aXRQZXJDb2xvcikgew0KKyAgICBTaS0+bGZiX2RlcHRoID0gMzI7DQorICAgIFNpLT5yZWRfc2l6 ZSA9IDg7DQorICAgIFNpLT5yZWRfcG9zID0gMTY7DQorICAgIFNpLT5ncmVlbl9zaXplID0gODsN CisgICAgU2ktPmdyZWVuX3BvcyA9IDg7DQorICAgIFNpLT5ibHVlX3NpemUgPSA4Ow0KKyAgICBT aS0+Ymx1ZV9wb3MgPSAwOw0KKyAgICBTaS0+cnN2ZF9zaXplID0gODsNCisgICAgU2ktPnJzdmRf cG9zID0gMjQ7DQorICAgIFNpLT5sZmJfbGluZWxlbmd0aCA9IChVSU5UMTYpIChJbmZvLT5QaXhl bHNQZXJTY2FuTGluZSAqIDQpOw0KKyAgfSBlbHNlIGlmIChJbmZvLT5QaXhlbEZvcm1hdCA9PSBQ aXhlbEJpdE1hc2spIHsNCisgICAgRmluZEJpdHMoSW5mby0+UGl4ZWxJbmZvcm1hdGlvbi5SZWRN YXNrLA0KKyAgICAgICAgJlNpLT5yZWRfcG9zLCAmU2ktPnJlZF9zaXplKTsNCisgICAgRmluZEJp dHMoSW5mby0+UGl4ZWxJbmZvcm1hdGlvbi5HcmVlbk1hc2ssDQorICAgICAgICAmU2ktPmdyZWVu X3BvcywgJlNpLT5ncmVlbl9zaXplKTsNCisgICAgRmluZEJpdHMoSW5mby0+UGl4ZWxJbmZvcm1h dGlvbi5CbHVlTWFzaywNCisgICAgICAgICZTaS0+Ymx1ZV9wb3MsICZTaS0+Ymx1ZV9zaXplKTsN CisgICAgRmluZEJpdHMoSW5mby0+UGl4ZWxJbmZvcm1hdGlvbi5SZXNlcnZlZE1hc2ssDQorICAg ICAgICAmU2ktPnJzdmRfcG9zLCAmU2ktPnJzdmRfc2l6ZSk7DQorICAgIFNpLT5sZmJfZGVwdGgg PSBTaS0+cmVkX3NpemUgKyBTaS0+Z3JlZW5fc2l6ZSArDQorICAgICAgU2ktPmJsdWVfc2l6ZSAr IFNpLT5yc3ZkX3NpemU7DQorICAgIFNpLT5sZmJfbGluZWxlbmd0aCA9IChVSU5UMTYpICgoSW5m by0+UGl4ZWxzUGVyU2NhbkxpbmUgKiBTaS0+bGZiX2RlcHRoKSAvIDgpOw0KKyAgfSBlbHNlIHsN CisgICAgU2ktPmxmYl9kZXB0aCA9IDQ7DQorICAgIFNpLT5yZWRfc2l6ZSA9IDA7DQorICAgIFNp LT5yZWRfcG9zID0gMDsNCisgICAgU2ktPmdyZWVuX3NpemUgPSAwOw0KKyAgICBTaS0+Z3JlZW5f cG9zID0gMDsNCisgICAgU2ktPmJsdWVfc2l6ZSA9IDA7DQorICAgIFNpLT5ibHVlX3BvcyA9IDA7 DQorICAgIFNpLT5yc3ZkX3NpemUgPSAwOw0KKyAgICBTaS0+cnN2ZF9wb3MgPSAwOw0KKyAgICBT aS0+bGZiX2xpbmVsZW5ndGggPSBTaS0+bGZiX3dpZHRoIC8gMjsNCisgIH0NCisNCisgIHJldHVy biBTdGF0dXM7DQorfQ0KKw0KKw0KK1NUQVRJQw0KK0VGSV9TVEFUVVMNCitTZXR1cEdyYXBoaWNz ICgNCisgIElOIE9VVCBzdHJ1Y3QgYm9vdF9wYXJhbXMgKkJwDQorICApDQorew0KKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklfSEFORExFICAgICAgICAg ICAgICAgICAgICAgICpIYW5kbGVCdWZmZXI7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICAgIEhhbmRsZUNvdW50Ow0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBJ bmRleDsNCisgIEVGSV9HUkFQSElDU19PVVRQVVRfUFJPVE9DT0wgICAgKkdvcDsNCisNCisgIFpl cm9NZW0gKChWT0lEKikmQnAtPnNjcmVlbl9pbmZvLCBzaXplb2YoQnAtPnNjcmVlbl9pbmZvKSk7 DQorDQorICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlciAoDQorICAgICAgICAgICAg ICAgICAgQnlQcm90b2NvbCwNCisgICAgICAgICAgICAgICAgICAmZ0VmaUdyYXBoaWNzT3V0cHV0 UHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAgIE5VTEwsDQorICAgICAgICAgICAgICAg ICAgJkhhbmRsZUNvdW50LA0KKyAgICAgICAgICAgICAgICAgICZIYW5kbGVCdWZmZXINCisgICAg ICAgICAgICAgICAgICApOw0KKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgSGFuZGxlQ291bnQ7IEluZGV4KyspIHsNCisgICAgICBTdGF0 dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCisgICAgICAgICAgICAgICAgICAgICAgSGFuZGxl QnVmZmVyW0luZGV4XSwNCisgICAgICAgICAgICAgICAgICAgICAgJmdFZmlHcmFwaGljc091dHB1 dFByb3RvY29sR3VpZCwNCisgICAgICAgICAgICAgICAgICAgICAgKFZPSUQqKSAmR29wDQorICAg ICAgICAgICAgICAgICAgICAgICk7DQorICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K KyAgICAgICAgY29udGludWU7DQorICAgICAgfQ0KKw0KKyAgICAgIFN0YXR1cyA9IFNldHVwR3Jh cGhpY3NGcm9tR29wICgmQnAtPnNjcmVlbl9pbmZvLCBHb3ApOw0KKyAgICAgIGlmICghRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQorICAgICAgICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCisgICAg ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCisgICAgICB9DQorICAgIH0NCisNCisgICAgRnJlZVBv b2wgKEhhbmRsZUJ1ZmZlcik7DQorICB9DQorDQorICByZXR1cm4gRUZJX05PVF9GT1VORDsNCit9 DQorDQorDQorU1RBVElDDQorRUZJX1NUQVRVUw0KK1NldHVwTGludXhCb290UGFyYW1zICgNCisg IElOIE9VVCBzdHJ1Y3QgYm9vdF9wYXJhbXMgKkJwDQorICApDQorew0KKyAgU2V0dXBHcmFwaGlj cyAoQnApOw0KKw0KKyAgU2V0dXBMaW51eE1lbW1hcCAoQnApOw0KKw0KKyAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KK30NCisNCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorTG9hZExpbnV4ICgNCisg IElOIFZPSUQgICAgICAqS2VybmVsLA0KKyAgSU4gT1VUIFZPSUQgICpLZXJuZWxTZXR1cA0KKyAg KQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgU3RhdHVzOw0KKyAgc3RydWN0IGJvb3Rf cGFyYW1zICAqQnA7DQorDQorICBTdGF0dXMgPSBCYXNpY0tlcm5lbFNldHVwQ2hlY2sgKEtlcm5l bFNldHVwKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1 czsNCisgIH0NCisNCisgIEJwID0gKHN0cnVjdCBib290X3BhcmFtcyAqKSBLZXJuZWxTZXR1cDsN CisNCisgIGlmIChCcC0+aGRyLnZlcnNpb24gPCAweDIwNSB8fCAhQnAtPmhkci5yZWxvY2F0YWJs ZV9rZXJuZWwpIHsNCisgICAgLy8NCisgICAgLy8gV2Ugb25seSBzdXBwb3J0IHJlbG9jYXRhYmxl IGtlcm5lbHMNCisgICAgLy8NCisgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCisgIH0NCisN CisgIEluaXRMaW51eERlc2NyaXB0b3JUYWJsZXMgKCk7DQorDQorICBCcC0+aGRyLmNvZGUzMl9z dGFydCA9IChVSU5UMzIpKFVJTlROKSBLZXJuZWw7DQorICBpZiAoQnAtPmhkci52ZXJzaW9uID49 IDB4MjBjICYmIEJwLT5oZHIuaGFuZG92ZXJfb2Zmc2V0ICYmDQorICAgICAgKEJwLT5oZHIueGxv YWRmbGFncyAmIChzaXplb2YgKFVJTlROKSA9PSA0ID8gQklUMiA6IEJJVDMpKSkgew0KKyAgICBE RUJVRyAoKEVGSV9EX0lORk8sICJKdW1waW5nIHRvIGtlcm5lbCBFRkkgaGFuZG92ZXIgcG9pbnQg YXQgb2ZzICV4XG4iLCBCcC0+aGRyLmhhbmRvdmVyX29mZnNldCkpOw0KKw0KKyAgICBEaXNhYmxl SW50ZXJydXB0cyAoKTsNCisgICAgSnVtcFRvVWVmaUtlcm5lbCAoKFZPSUQqKSBnSW1hZ2VIYW5k bGUsIChWT0lEKikgZ1NULCBLZXJuZWxTZXR1cCwgS2VybmVsKTsNCisgIH0NCisNCisgIC8vDQor ICAvLyBPbGQga2VybmVscyB3aXRob3V0IEVGSSBoYW5kb3ZlciBwcm90b2NvbA0KKyAgLy8NCisg IFNldHVwTGludXhCb290UGFyYW1zIChLZXJuZWxTZXR1cCk7DQorDQorICBERUJVRyAoKEVGSV9E X0lORk8sICJKdW1waW5nIHRvIGtlcm5lbFxuIikpOw0KKyAgRGlzYWJsZUludGVycnVwdHMgKCk7 DQorICBTZXRMaW51eERlc2NyaXB0b3JUYWJsZXMgKCk7DQorICBKdW1wVG9LZXJuZWwgKEtlcm5l bCwgKFZPSUQqKSBLZXJuZWxTZXR1cCk7DQorDQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0K Kw0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5 L0xvYWRMaW51eExpYi9MaW51eEdkdC5jIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJk UGtnL0xpYnJhcnkvTG9hZExpbnV4TGliL0xpbnV4R2R0LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQppbmRleCAwMDAwMDAwMDAwLi5mZGExODVlM2Q3DQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0 Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9Mb2FkTGludXhMaWIvTGludXhH ZHQuYw0KQEAgLTAsMCArMSwxNzUgQEANCisvKiogQGZpbGUNCisgIEluaXRpYWxpemUgR0RUIGZv ciBMaW51eC4NCisNCisgIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTkgSW50ZWwgQ29ycG9yYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiovDQorDQorI2luY2x1ZGUgIkxvYWRMaW51eExp Yi5oIg0KKw0KKw0KKy8vDQorLy8gTG9jYWwgc3RydWN0dXJlIGRlZmluaXRpb25zDQorLy8NCisN CisjcHJhZ21hIHBhY2sgKDEpDQorDQorLy8NCisvLyBHbG9iYWwgRGVzY3JpcHRvciBFbnRyeSBz dHJ1Y3R1cmVzDQorLy8NCisNCit0eXBlZGVmIHN0cnVjdCBfR0RUX0VOVFJZIHsNCisgIFVJTlQx NiBMaW1pdDE1XzA7DQorICBVSU5UMTYgQmFzZTE1XzA7DQorICBVSU5UOCAgQmFzZTIzXzE2Ow0K KyAgVUlOVDggIFR5cGU7DQorICBVSU5UOCAgTGltaXQxOV8xNl9hbmRfZmxhZ3M7DQorICBVSU5U OCAgQmFzZTMxXzI0Ow0KK30gR0RUX0VOVFJZOw0KKw0KK3R5cGVkZWYNCitzdHJ1Y3QgX0dEVF9F TlRSSUVTIHsNCisgIEdEVF9FTlRSWSBOdWxsOw0KKyAgR0RUX0VOVFJZIE51bGwyOw0KKyAgR0RU X0VOVFJZIExpbmVhcjsNCisgIEdEVF9FTlRSWSBMaW5lYXJDb2RlOw0KKyAgR0RUX0VOVFJZIFRh c2tTZWdtZW50Ow0KKyAgR0RUX0VOVFJZIFNwYXJlNDsNCisgIEdEVF9FTlRSWSBTcGFyZTU7DQor fSBHRFRfRU5UUklFUzsNCisNCisjcHJhZ21hIHBhY2sgKCkNCisNCitTVEFUSUMgR0RUX0VOVFJJ RVMgKm1HZHQgPSBOVUxMOw0KKw0KKy8vDQorLy8gR2xvYmFsIGRlc2NyaXB0b3IgdGFibGUgKEdE VCkgVGVtcGxhdGUNCisvLw0KK1NUQVRJQyBHRFRfRU5UUklFUyBHZHRUZW1wbGF0ZSA9IHsNCisg IC8vDQorICAvLyBOdWxsDQorICAvLw0KKyAgew0KKyAgICAweDAsICAgICAgICAgICAgLy8gbGlt aXQgMTU6MA0KKyAgICAweDAsICAgICAgICAgICAgLy8gYmFzZSAxNTowDQorICAgIDB4MCwgICAg ICAgICAgICAvLyBiYXNlIDIzOjE2DQorICAgIDB4MCwgICAgICAgICAgICAvLyB0eXBlDQorICAg IDB4MCwgICAgICAgICAgICAvLyBsaW1pdCAxOToxNiwgZmxhZ3MNCisgICAgMHgwLCAgICAgICAg ICAgIC8vIGJhc2UgMzE6MjQNCisgIH0sDQorICAvLw0KKyAgLy8gTnVsbDINCisgIC8vDQorICB7 DQorICAgIDB4MCwgICAgICAgICAgICAvLyBsaW1pdCAxNTowDQorICAgIDB4MCwgICAgICAgICAg ICAvLyBiYXNlIDE1OjANCisgICAgMHgwLCAgICAgICAgICAgIC8vIGJhc2UgMjM6MTYNCisgICAg MHgwLCAgICAgICAgICAgIC8vIHR5cGUNCisgICAgMHgwLCAgICAgICAgICAgIC8vIGxpbWl0IDE5 OjE2LCBmbGFncw0KKyAgICAweDAsICAgICAgICAgICAgLy8gYmFzZSAzMToyNA0KKyAgfSwNCisg IC8vDQorICAvLyBMaW5lYXINCisgIC8vDQorICB7DQorICAgIDB4MEZGRkYsICAgICAgICAvLyBs aW1pdCAweEZGRkZGDQorICAgIDB4MCwgICAgICAgICAgICAvLyBiYXNlIDANCisgICAgMHgwLA0K KyAgICAweDA5QSwgICAgICAgICAgLy8gcHJlc2VudCwgcmluZyAwLCBkYXRhLCBleHBhbmQtdXAs IHdyaXRhYmxlDQorICAgIDB4MENGLCAgICAgICAgICAvLyBwYWdlLWdyYW51bGFyLCAzMi1iaXQN CisgICAgMHgwLA0KKyAgfSwNCisgIC8vDQorICAvLyBMaW5lYXJDb2RlDQorICAvLw0KKyAgew0K KyAgICAweDBGRkZGLCAgICAgICAgLy8gbGltaXQgMHhGRkZGRg0KKyAgICAweDAsICAgICAgICAg ICAgLy8gYmFzZSAwDQorICAgIDB4MCwNCisgICAgMHgwOTIsICAgICAgICAgIC8vIHByZXNlbnQs IHJpbmcgMCwgZGF0YSwgZXhwYW5kLXVwLCB3cml0YWJsZQ0KKyAgICAweDBDRiwgICAgICAgICAg Ly8gcGFnZS1ncmFudWxhciwgMzItYml0DQorICAgIDB4MCwNCisgIH0sDQorICAvLw0KKyAgLy8g VGFza1NlZ21lbnQNCisgIC8vDQorICB7DQorICAgIDB4MCwgICAgICAgICAgICAvLyBsaW1pdCAw DQorICAgIDB4MCwgICAgICAgICAgICAvLyBiYXNlIDANCisgICAgMHgwLA0KKyAgICAweDA4OSwg ICAgICAgICAgLy8gPw0KKyAgICAweDA4MCwgICAgICAgICAgLy8gPw0KKyAgICAweDAsDQorICB9 LA0KKyAgLy8NCisgIC8vIFNwYXJlNA0KKyAgLy8NCisgIHsNCisgICAgMHgwLCAgICAgICAgICAg IC8vIGxpbWl0IDANCisgICAgMHgwLCAgICAgICAgICAgIC8vIGJhc2UgMA0KKyAgICAweDAsDQor ICAgIDB4MCwgICAgICAgICAgICAvLyBwcmVzZW50LCByaW5nIDAsIGRhdGEsIGV4cGFuZC11cCwg d3JpdGFibGUNCisgICAgMHgwLCAgICAgICAgICAgIC8vIHBhZ2UtZ3JhbnVsYXIsIDMyLWJpdA0K KyAgICAweDAsDQorICB9LA0KKyAgLy8NCisgIC8vIFNwYXJlNQ0KKyAgLy8NCisgIHsNCisgICAg MHgwLCAgICAgICAgICAgIC8vIGxpbWl0IDANCisgICAgMHgwLCAgICAgICAgICAgIC8vIGJhc2Ug MA0KKyAgICAweDAsDQorICAgIDB4MCwgICAgICAgICAgICAvLyBwcmVzZW50LCByaW5nIDAsIGRh dGEsIGV4cGFuZC11cCwgd3JpdGFibGUNCisgICAgMHgwLCAgICAgICAgICAgIC8vIHBhZ2UtZ3Jh bnVsYXIsIDMyLWJpdA0KKyAgICAweDAsDQorICB9LA0KK307DQorDQorLyoqDQorICBJbml0aWFs aXplIEdsb2JhbCBEZXNjcmlwdG9yIFRhYmxlLg0KKw0KKyoqLw0KK1ZPSUQNCitJbml0TGludXhE ZXNjcmlwdG9yVGFibGVzICgNCisgIFZPSUQNCisgICkNCit7DQorICAvLw0KKyAgLy8gQWxsb2Nh dGUgUnVudGltZSBEYXRhIGZvciB0aGUgR0RUDQorICAvLw0KKyAgbUdkdCA9IEFsbG9jYXRlUnVu dGltZVBvb2wgKHNpemVvZiAoR2R0VGVtcGxhdGUpICsgOCk7DQorICBBU1NFUlQgKG1HZHQgIT0g TlVMTCk7DQorICBtR2R0ID0gQUxJR05fUE9JTlRFUiAobUdkdCwgOCk7DQorDQorICAvLw0KKyAg Ly8gSW5pdGlhbGl6ZSBhbGwgR0RUIGVudHJpZXMNCisgIC8vDQorICBDb3B5TWVtIChtR2R0LCAm R2R0VGVtcGxhdGUsIHNpemVvZiAoR2R0VGVtcGxhdGUpKTsNCisNCit9DQorDQorLyoqDQorICBJ bml0aWFsaXplIEdsb2JhbCBEZXNjcmlwdG9yIFRhYmxlLg0KKw0KKyoqLw0KK1ZPSUQNCitTZXRM aW51eERlc2NyaXB0b3JUYWJsZXMgKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIElBMzJfREVTQ1JJ UFRPUiBHZHRQdHI7DQorICBJQTMyX0RFU0NSSVBUT1IgSWR0UHRyOw0KKw0KKyAgLy8NCisgIC8v IFdyaXRlIEdEVCByZWdpc3Rlcg0KKyAgLy8NCisgIEdkdFB0ci5CYXNlID0gKFVJTlQzMikoVUlO VE4pKFZPSUQqKSBtR2R0Ow0KKyAgR2R0UHRyLkxpbWl0ID0gKFVJTlQxNikgKHNpemVvZiAoR2R0 VGVtcGxhdGUpIC0gMSk7DQorICBBc21Xcml0ZUdkdHIgKCZHZHRQdHIpOw0KKw0KKyAgSWR0UHRy LkJhc2UgPSAoVUlOVDMyKSAwOw0KKyAgSWR0UHRyLkxpbWl0ID0gKFVJTlQxNikgMDsNCisgIEFz bVdyaXRlSWR0ciAoJklkdFB0cik7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVs L1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L052VmFyc0ZpbGVMaWIvRnNBY2Nlc3MuYyBiL1Bs YXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L052VmFyc0ZpbGVMaWIvRnNB Y2Nlc3MuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLjNkOTgyOTE0 MTANCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBr Zy9MaWJyYXJ5L052VmFyc0ZpbGVMaWIvRnNBY2Nlc3MuYw0KQEAgLTAsMCArMSw1MDcgQEANCisv KiogQGZpbGUNCisgIEZpbGUgU3lzdGVtIEFjY2VzcyBmb3IgTnZWYXJzRmlsZUxpYg0KKw0KKyAg Q29weXJpZ2h0IChjKSAyMDA0IC0gMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4gPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVz ZS1QYXRlbnQNCisqKi8NCisNCisjaW5jbHVkZSAiTnZWYXJzRmlsZUxpYi5oIg0KKw0KKyNpbmNs dWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xp Yi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCisNCisNCisv KioNCisgIE9wZW4gdGhlIE52VmFycyBmaWxlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcNCisNCisg IEBwYXJhbVtpbl0gIEZzSGFuZGxlIC0gSGFuZGxlIGZvciBhIGdFZmlTaW1wbGVGaWxlU3lzdGVt UHJvdG9jb2xHdWlkIGluc3RhbmNlDQorICBAcGFyYW1baW5dICBSZWFkaW5nRmlsZSAtIFRSVUU6 IG9wZW4gdGhlIGZpbGUgZm9yIHJlYWRpbmcuICBGQUxTRTogd3JpdGluZw0KKyAgQHBhcmFtW291 dF0gTnZWYXJzRmlsZSAtIElmIEVGSV9TVUNDRVNTIGlzIHJldHVybmVkLCB0aGVuIHRoaXMgaXMg dXBkYXRlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIG9wZW5lZCBOdlZh cnMgZmlsZS4NCisNCisgIEByZXR1cm4gICAgIEVGSV9TVUNDRVNTIGlmIHRoZSBmaWxlIHdhcyBv cGVuZWQNCisNCisqKi8NCitFRklfU1RBVFVTDQorR2V0TnZWYXJzRmlsZSAoDQorICBJTiAgRUZJ X0hBTkRMRSAgICAgICAgICAgIEZzSGFuZGxlLA0KKyAgSU4gIEJPT0xFQU4gICAgICAgICAgICAg ICBSZWFkaW5nRmlsZSwNCisgIE9VVCBFRklfRklMRV9IQU5ETEUgICAgICAgKk52VmFyc0ZpbGUN CisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCisgIEVGSV9TSU1QTEVfRklMRV9TWVNURU1fUFJPVE9DT0wgICAgICAgKkZzOw0KKyAgRUZJ X0ZJTEVfSEFORExFICAgICAgICAgICAgICAgICAgICAgICBSb290Ow0KKw0KKyAgLy8NCisgIC8v IEdldCB0aGUgRmlsZVN5c3RlbSBwcm90b2NvbCBvbiB0aGF0IGhhbmRsZQ0KKyAgLy8NCisgIFN0 YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KKyAgICAgICAgICAgICAgICAgIEZzSGFuZGxl LA0KKyAgICAgICAgICAgICAgICAgICZnRWZpU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR3VpZCwN CisgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmRnMNCisgICAgICAgICAgICAgICAgICApOw0K KyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0K Kw0KKyAgLy8NCisgIC8vIEdldCB0aGUgdm9sdW1lICh0aGUgcm9vdCBkaXJlY3RvcnkpDQorICAv Lw0KKyAgU3RhdHVzID0gRnMtPk9wZW5Wb2x1bWUgKEZzLCAmUm9vdCk7DQorICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICAvLw0KKyAg Ly8gQXR0ZW1wdCB0byBvcGVuIHRoZSBOdlZhcnMgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkN CisgIC8vDQorICBTdGF0dXMgPSBSb290LT5PcGVuICgNCisgICAgICAgICAgICAgICAgICAgUm9v dCwNCisgICAgICAgICAgICAgICAgICAgTnZWYXJzRmlsZSwNCisgICAgICAgICAgICAgICAgICAg TCJOdlZhcnMiLA0KKyAgICAgICAgICAgICAgICAgICBSZWFkaW5nRmlsZSA/DQorICAgICAgICAg ICAgICAgICAgICAgRUZJX0ZJTEVfTU9ERV9SRUFEIDoNCisgICAgICAgICAgICAgICAgICAgICAo DQorICAgICAgICAgICAgICAgICAgICAgICBFRklfRklMRV9NT0RFX0NSRUFURSB8DQorICAgICAg ICAgICAgICAgICAgICAgICBFRklfRklMRV9NT0RFX1JFQUQgfA0KKyAgICAgICAgICAgICAgICAg ICAgICAgRUZJX0ZJTEVfTU9ERV9XUklURQ0KKyAgICAgICAgICAgICAgICAgICAgICksDQorICAg ICAgICAgICAgICAgICAgIDANCisgICAgICAgICAgICAgICAgICAgKTsNCisNCisgIHJldHVybiBT dGF0dXM7DQorfQ0KKw0KKw0KKy8qKg0KKyAgT3BlbiB0aGUgTnZWYXJzIGZpbGUgZm9yIHJlYWRp bmcgb3Igd3JpdGluZw0KKw0KKyAgQHBhcmFtW2luXSAgRmlsZSAtIFRoZSBmaWxlIHRvIGluc3Bl Y3QNCisgIEBwYXJhbVtvdXRdIEV4aXN0cyAtIFJldHVybnMgd2hldGhlciB0aGUgZmlsZSBleGlz dHMNCisgIEBwYXJhbVtvdXRdIFNpemUgLSBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBmaWxlDQor ICAgICAgICAgICAgICAgICAgICAgKDAgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QpDQorDQor KiovDQorVk9JRA0KK052VmFyc0ZpbGVSZWFkQ2hlY2t1cCAoDQorICBJTiAgRUZJX0ZJTEVfSEFO RExFICAgICAgICBGaWxlLA0KKyAgT1VUIEJPT0xFQU4gICAgICAgICAgICAgICAgKkV4aXN0cywN CisgIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICpTaXplDQorICApDQorew0KKyAgRUZJX0ZJ TEVfSU5GTyAgICAgICAgICAgICAgICpGaWxlSW5mbzsNCisNCisgICpFeGlzdHMgPSBGQUxTRTsN CisgICpTaXplID0gMDsNCisNCisgIEZpbGVJbmZvID0gRmlsZUhhbmRsZUdldEluZm8gKEZpbGUp Ow0KKyAgaWYgKEZpbGVJbmZvID09IE5VTEwpIHsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAg aWYgKChGaWxlSW5mby0+QXR0cmlidXRlICYgRUZJX0ZJTEVfRElSRUNUT1JZKSAhPSAwKSB7DQor ICAgIEZyZWVQb29sIChGaWxlSW5mbyk7DQorICAgIHJldHVybjsNCisgIH0NCisNCisgICpFeGlz dHMgPSBUUlVFOw0KKyAgKlNpemUgPSAoVUlOVE4pIEZpbGVJbmZvLT5GaWxlU2l6ZTsNCisNCisg IEZyZWVQb29sIChGaWxlSW5mbyk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgT3BlbiB0aGUgTnZWYXJz IGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZw0KKw0KKyAgQHBhcmFtW2luXSAgRmlsZSAtIFRo ZSBmaWxlIHRvIGluc3BlY3QNCisgIEBwYXJhbVtvdXRdIEV4aXN0cyAtIFJldHVybnMgd2hldGhl ciB0aGUgZmlsZSBleGlzdHMNCisgIEBwYXJhbVtvdXRdIFNpemUgLSBSZXR1cm5zIHRoZSBzaXpl IG9mIHRoZSBmaWxlDQorICAgICAgICAgICAgICAgICAgICAgKDAgaWYgdGhlIGZpbGUgZG9lcyBu b3QgZXhpc3QpDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0ZpbGVIYW5kbGVFbXB0eSAoDQorICBJ TiAgRUZJX0ZJTEVfSEFORExFICAgICAgICBGaWxlDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIEVGSV9GSUxFX0lORk8gICAgICAgICAgICAgICAq RmlsZUluZm87DQorDQorICAvLw0KKyAgLy8gUmV0cmlldmUgdGhlIEZpbGVJbmZvIHN0cnVjdHVy ZQ0KKyAgLy8NCisgIEZpbGVJbmZvID0gRmlsZUhhbmRsZUdldEluZm8gKEZpbGUpOw0KKyAgaWYg KEZpbGVJbmZvID09IE5VTEwpIHsNCisgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN CisgIH0NCisNCisgIC8vDQorICAvLyBJZiB0aGUgcGF0aCBpcyBhIGRpcmVjdG9yeSwgdGhlbiBy ZXR1cm4gYW4gZXJyb3INCisgIC8vDQorICBpZiAoKEZpbGVJbmZvLT5BdHRyaWJ1dGUgJiBFRklf RklMRV9ESVJFQ1RPUlkpICE9IDApIHsNCisgICAgRnJlZVBvb2wgKEZpbGVJbmZvKTsNCisgICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisNCisgIC8vDQorICAvLyBJZiB0 aGUgZmlsZSBzaXplIGlzIGFscmVhZHkgMCwgdGhlbiBpdCBpcyBlbXB0eSwgc28NCisgIC8vIHdl IGNhbiByZXR1cm4gc3VjY2Vzcy4NCisgIC8vDQorICBpZiAoRmlsZUluZm8tPkZpbGVTaXplID09 IDApIHsNCisgICAgRnJlZVBvb2wgKEZpbGVJbmZvKTsNCisgICAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIFNldCB0aGUgZmlsZSBzaXplIHRvIDAuDQorICAvLw0K KyAgRmlsZUluZm8tPkZpbGVTaXplID0gMDsNCisgIFN0YXR1cyA9IEZpbGVIYW5kbGVTZXRJbmZv IChGaWxlLCBGaWxlSW5mbyk7DQorDQorICBGcmVlUG9vbCAoRmlsZUluZm8pOw0KKw0KKyAgcmV0 dXJuIFN0YXR1czsNCit9DQorDQorDQorLyoqDQorICBSZWFkcyBhIGZpbGUgdG8gYSBuZXdseSBh bGxvY2F0ZWQgYnVmZmVyDQorDQorICBAcGFyYW1baW5dICBGaWxlIC0gVGhlIGZpbGUgdG8gcmVh ZA0KKyAgQHBhcmFtW2luXSAgUmVhZFNpemUgLSBUaGUgc2l6ZSBvZiBkYXRhIHRvIHJlYWQgZnJv bSB0aGUgZmlsZQ0KKw0KKyAgQHJldHVybiAgICAgUG9pbnRlciB0byBidWZmZXIgYWxsb2NhdGVk IHRvIGhvbGQgdGhlIGZpbGUNCisgICAgICAgICAgICAgIGNvbnRlbnRzLiAgTlVMTCBpZiBhbiBl cnJvciBvY2N1cnJlZC4NCisNCisqKi8NCitWT0lEKg0KK0ZpbGVIYW5kbGVSZWFkVG9OZXdCdWZm ZXIgKA0KKyAgSU4gRUZJX0ZJTEVfSEFORExFICAgICAgICAgICAgRmlsZUhhbmRsZSwNCisgIElO IFVJTlROICAgICAgICAgICAgICAgICAgICAgIFJlYWRTaXplDQorICApDQorew0KKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICBBY3R1YWxSZWFkU2l6ZTsNCisgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAqRmls ZUNvbnRlbnRzOw0KKw0KKyAgQWN0dWFsUmVhZFNpemUgPSBSZWFkU2l6ZTsNCisgIEZpbGVDb250 ZW50cyA9IEFsbG9jYXRlUG9vbCAoUmVhZFNpemUpOw0KKyAgaWYgKEZpbGVDb250ZW50cyAhPSBO VUxMKSB7DQorICAgIFN0YXR1cyA9IEZpbGVIYW5kbGVSZWFkICgNCisgICAgICAgICAgICAgICBG aWxlSGFuZGxlLA0KKyAgICAgICAgICAgICAgICZSZWFkU2l6ZSwNCisgICAgICAgICAgICAgICBG aWxlQ29udGVudHMNCisgICAgICAgICAgICAgICApOw0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpIHx8IChBY3R1YWxSZWFkU2l6ZSAhPSBSZWFkU2l6ZSkpIHsNCisgICAgICBGcmVlUG9vbCAo RmlsZUNvbnRlbnRzKTsNCisgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKyAgfQ0KKw0KKyAg cmV0dXJuIEZpbGVDb250ZW50czsNCit9DQorDQorDQorLyoqDQorICBSZWFkcyB0aGUgY29udGVu dHMgb2YgdGhlIE52VmFycyBmaWxlIG9uIHRoZSBmaWxlIHN5c3RlbQ0KKw0KKyAgQHBhcmFtW2lu XSAgRnNIYW5kbGUgLSBIYW5kbGUgZm9yIGEgZ0VmaVNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1 aWQgaW5zdGFuY2UNCisNCisgIEByZXR1cm4gICAgIEVGSV9TVEFUVVMgYmFzZWQgb24gdGhlIHN1 Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUgZmlsZSByZWFkDQorDQorKiovDQorRUZJX1NUQVRVUw0K K1JlYWROdlZhcnNGaWxlICgNCisgIElOICBFRklfSEFORExFICAgICAgICAgICAgRnNIYW5kbGUN CisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgRUZJ X0ZJTEVfSEFORExFICAgICAgICAgICAgIEZpbGU7DQorICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgRmlsZVNpemU7DQorICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgRmlsZUV4aXN0 czsNCisgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAqRmlsZUNvbnRlbnRzOw0KKyAgRUZJ X0hBTkRMRSAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZWRWYXJpYWJsZXM7DQorDQorICBTdGF0 dXMgPSBHZXROdlZhcnNGaWxlIChGc0hhbmRsZSwgVFJVRSwgJkZpbGUpOw0KKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KKyAgICBERUJVRyAoKEVGSV9EX0lORk8sICJGc0FjY2Vzcy5jOiBD b3VsZCBub3Qgb3BlbiBOViBWYXJpYWJsZXMgZmlsZSBvbiB0aGlzIGZpbGUgc3lzdGVtXG4iKSk7 DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBOdlZhcnNGaWxlUmVhZENoZWNrdXAg KEZpbGUsICZGaWxlRXhpc3RzLCAmRmlsZVNpemUpOw0KKyAgaWYgKEZpbGVTaXplID09IDApIHsN CisgICAgRmlsZUhhbmRsZUNsb3NlIChGaWxlKTsNCisgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRF RDsNCisgIH0NCisNCisgIEZpbGVDb250ZW50cyA9IEZpbGVIYW5kbGVSZWFkVG9OZXdCdWZmZXIg KEZpbGUsIEZpbGVTaXplKTsNCisgIGlmIChGaWxlQ29udGVudHMgPT0gTlVMTCkgew0KKyAgICBG aWxlSGFuZGxlQ2xvc2UgKEZpbGUpOw0KKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KKyAg fQ0KKw0KKyAgREVCVUcgKCgNCisgICAgRUZJX0RfSU5GTywNCisgICAgIkZzQWNjZXNzLmM6IFJl YWQgJUx1IGJ5dGVzIGZyb20gTlYgVmFyaWFibGVzIGZpbGVcbiIsDQorICAgIChVSU5UNjQpRmls ZVNpemUNCisgICAgKSk7DQorDQorICBTdGF0dXMgPSBTZXJpYWxpemVWYXJpYWJsZXNOZXdJbnN0 YW5jZUZyb21CdWZmZXIgKA0KKyAgICAgICAgICAgICAmU2VyaWFsaXplZFZhcmlhYmxlcywNCisg ICAgICAgICAgICAgRmlsZUNvbnRlbnRzLA0KKyAgICAgICAgICAgICBGaWxlU2l6ZQ0KKyAgICAg ICAgICAgICApOw0KKyAgaWYgKCFSRVRVUk5fRVJST1IgKFN0YXR1cykpIHsNCisgICAgU3RhdHVz ID0gU2VyaWFsaXplVmFyaWFibGVzU2V0U2VyaWFsaXplZFZhcmlhYmxlcyAoU2VyaWFsaXplZFZh cmlhYmxlcyk7DQorICB9DQorDQorICBGcmVlUG9vbCAoRmlsZUNvbnRlbnRzKTsNCisgIEZpbGVI YW5kbGVDbG9zZSAoRmlsZSk7DQorDQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisNCisvKioN CisgIFdyaXRlcyBhIHZhcmlhYmxlIHRvIGluZGljYXRlIHRoYXQgdGhlIE5WIHZhcmlhYmxlcw0K KyAgaGF2ZSBiZWVuIGxvYWRlZCBmcm9tIHRoZSBmaWxlIHN5c3RlbS4NCisNCisqKi8NCitTVEFU SUMNCitWT0lEDQorU2V0TnZWYXJzVmFyaWFibGUgKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIEJP T0xFQU4gICAgICAgICAgICAgICAgICAgICAgICBWYXJEYXRhOw0KKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgIFNpemU7DQorDQorICAvLw0KKyAgLy8gV3JpdGUgYSB2YXJpYWJsZSB0 byBpbmRpY2F0ZSB3ZSd2ZSBhbHJlYWR5IGxvYWRlZCB0aGUNCisgIC8vIHZhcmlhYmxlIGRhdGEu ICBJZiBpdCBpcyBmb3VuZCwgd2Ugc2tpcCB0aGUgbG9hZGluZyBvbg0KKyAgLy8gc3Vic2VxdWVu dCBhdHRlbXB0cy4NCisgIC8vDQorICBTaXplID0gc2l6ZW9mIChWYXJEYXRhKTsNCisgIFZhckRh dGEgPSBUUlVFOw0KKyAgZ1JULT5TZXRWYXJpYWJsZSAoDQorICAgICAgICAgTCJOdlZhcnMiLA0K KyAgICAgICAgICZnRWZpU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR3VpZCwNCisgICAgICAgICBF RklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxFIHwNCisgICAgICAgICAgIEVGSV9WQVJJQUJMRV9CT09U U0VSVklDRV9BQ0NFU1MgfA0KKyAgICAgICAgICAgRUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNT LA0KKyAgICAgICAgIFNpemUsDQorICAgICAgICAgKFZPSUQqKSAmVmFyRGF0YQ0KKyAgICAgICAg ICk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgTG9hZHMgdGhlIG5vbi12b2xhdGlsZSB2YXJpYWJsZXMg ZnJvbSB0aGUgTnZWYXJzIGZpbGUgb24gdGhlDQorICBnaXZlbiBmaWxlIHN5c3RlbS4NCisNCisg IEBwYXJhbVtpbl0gIEZzSGFuZGxlIC0gSGFuZGxlIGZvciBhIGdFZmlTaW1wbGVGaWxlU3lzdGVt UHJvdG9jb2xHdWlkIGluc3RhbmNlDQorDQorICBAcmV0dXJuICAgICBFRklfU1RBVFVTIGJhc2Vk IG9uIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgbG9hZCBvcGVyYXRpb24NCisNCisqKi8NCitF RklfU1RBVFVTDQorTG9hZE52VmFyc0Zyb21GcyAoDQorICBFRklfSEFORExFICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZzSGFuZGxlDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgICAgIFN0YXR1czsNCisgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICBW YXJEYXRhOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIFNpemU7DQorDQorICBE RUJVRyAoKEVGSV9EX0lORk8sICJGc0FjY2Vzcy5jOiBMb2FkTnZWYXJzRnJvbUZzXG4iKSk7DQor DQorICAvLw0KKyAgLy8gV2Ugd3JpdGUgYSB2YXJpYWJsZSB0byBpbmRpY2F0ZSB3ZSd2ZSBhbHJl YWR5IGxvYWRlZCB0aGUNCisgIC8vIHZhcmlhYmxlIGRhdGEuICBJZiBpdCBpcyBmb3VuZCwgd2Ug c2tpcCB0aGUgbG9hZGluZy4NCisgIC8vDQorICAvLyBUaGlzIGlzIHJlbGV2YW50IGlmIHRoZSBu b24tdm9sYXRpbGUgdmFyaWFibGUgaGF2ZSBiZWVuDQorICAvLyBhYmxlIHRvIHN1cnZpdmUgYSBy ZWJvb3Qgb3BlcmF0aW9uLiAgSW4gdGhhdCBjYXNlLCB3ZSBkb24ndA0KKyAgLy8gd2FudCB0byBy ZS1sb2FkIHRoZSBmaWxlIGFzIGl0IHdvdWxkIG92ZXJ3cml0ZSBuZXdlciBjaGFuZ2VzDQorICAv LyBtYWRlIHRvIHRoZSB2YXJpYWJsZXMuDQorICAvLw0KKyAgU2l6ZSA9IHNpemVvZiAoVmFyRGF0 YSk7DQorICBWYXJEYXRhID0gVFJVRTsNCisgIFN0YXR1cyA9IGdSVC0+R2V0VmFyaWFibGUgKA0K KyAgICAgICAgICAgICAgICAgIEwiTnZWYXJzIiwNCisgICAgICAgICAgICAgICAgICAmZ0VmaVNp bXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1aWQsDQorICAgICAgICAgICAgICAgICAgTlVMTCwNCisg ICAgICAgICAgICAgICAgICAmU2l6ZSwNCisgICAgICAgICAgICAgICAgICAoVk9JRCopICZWYXJE YXRhDQorICAgICAgICAgICAgICAgICAgKTsNCisgIGlmIChTdGF0dXMgPT0gRUZJX1NVQ0NFU1Mp IHsNCisgICAgREVCVUcgKChFRklfRF9JTkZPLCAiTlYgVmFyaWFibGVzIHdlcmUgYWxyZWFkeSBs b2FkZWRcbiIpKTsNCisgICAgcmV0dXJuIEVGSV9BTFJFQURZX1NUQVJURUQ7DQorICB9DQorDQor ICAvLw0KKyAgLy8gQXR0ZW1wdCB0byByZXN0b3JlIHRoZSB2YXJpYWJsZXMgZnJvbSB0aGUgTnZW YXJzIGZpbGUuDQorICAvLw0KKyAgU3RhdHVzID0gUmVhZE52VmFyc0ZpbGUgKEZzSGFuZGxlKTsN CisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgREVCVUcgKChFRklfRF9JTkZPLCAi RXJyb3Igd2hpbGUgcmVzdG9yaW5nIE5WIHZhcmlhYmxlIGRhdGFcbiIpKTsNCisgICAgcmV0dXJu IFN0YXR1czsNCisgIH0NCisNCisgIC8vDQorICAvLyBXcml0ZSBhIHZhcmlhYmxlIHRvIGluZGlj YXRlIHdlJ3ZlIGFscmVhZHkgbG9hZGVkIHRoZQ0KKyAgLy8gdmFyaWFibGUgZGF0YS4gIElmIGl0 IGlzIGZvdW5kLCB3ZSBza2lwIHRoZSBsb2FkaW5nIG9uDQorICAvLyBzdWJzZXF1ZW50IGF0dGVt cHRzLg0KKyAgLy8NCisgIFNldE52VmFyc1ZhcmlhYmxlKCk7DQorDQorICBERUJVRyAoKA0KKyAg ICBFRklfRF9JTkZPLA0KKyAgICAiRnNBY2Nlc3MuYzogUmVhZCBOViBWYXJpYWJsZXMgZmlsZSAo c2l6ZT0lTHUpXG4iLA0KKyAgICAoVUlOVDY0KVNpemUNCisgICAgKSk7DQorDQorICByZXR1cm4g U3RhdHVzOw0KK30NCisNCisNCitTVEFUSUMNCitSRVRVUk5fU1RBVFVTDQorRUZJQVBJDQorSXRl cmF0ZVZhcmlhYmxlc0NhbGxiYWNrQWRkQWxsTnZWYXJpYWJsZXMgKA0KKyAgSU4gIFZPSUQgICAg ICAgICAgICAgICAgICAgICAgICAgKkNvbnRleHQsDQorICBJTiAgQ0hBUjE2ICAgICAgICAgICAg ICAgICAgICAgICAqVmFyaWFibGVOYW1lLA0KKyAgSU4gIEVGSV9HVUlEICAgICAgICAgICAgICAg ICAgICAgKlZlbmRvckd1aWQsDQorICBJTiAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICBB dHRyaWJ1dGVzLA0KKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNpemUs DQorICBJTiAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqRGF0YQ0KKyAgKQ0KK3sNCisg IEVGSV9IQU5ETEUgIEluc3RhbmNlOw0KKw0KKyAgSW5zdGFuY2UgPSAoRUZJX0hBTkRMRSkgQ29u dGV4dDsNCisNCisgIC8vDQorICAvLyBPbmx5IHNhdmUgbm9uLXZvbGF0aWxlIHZhcmlhYmxlcw0K KyAgLy8NCisgIGlmICgoQXR0cmlidXRlcyAmIEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUpID09 IDApIHsNCisgICAgcmV0dXJuIFJFVFVSTl9TVUNDRVNTOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIFNl cmlhbGl6ZVZhcmlhYmxlc0FkZFZhcmlhYmxlICgNCisgICAgICAgICAgIEluc3RhbmNlLA0KKyAg ICAgICAgICAgVmFyaWFibGVOYW1lLA0KKyAgICAgICAgICAgVmVuZG9yR3VpZCwNCisgICAgICAg ICAgIEF0dHJpYnV0ZXMsDQorICAgICAgICAgICBEYXRhU2l6ZSwNCisgICAgICAgICAgIERhdGEN CisgICAgICAgICAgICk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgU2F2ZXMgdGhlIG5vbi12b2xhdGls ZSB2YXJpYWJsZXMgaW50byB0aGUgTnZWYXJzIGZpbGUgb24gdGhlDQorICBnaXZlbiBmaWxlIHN5 c3RlbS4NCisNCisgIEBwYXJhbVtpbl0gIEZzSGFuZGxlIC0gSGFuZGxlIGZvciBhIGdFZmlTaW1w bGVGaWxlU3lzdGVtUHJvdG9jb2xHdWlkIGluc3RhbmNlDQorDQorICBAcmV0dXJuICAgICBFRklf U1RBVFVTIGJhc2VkIG9uIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgbG9hZCBvcGVyYXRpb24N CisNCisqKi8NCitFRklfU1RBVFVTDQorU2F2ZU52VmFyc1RvRnMgKA0KKyAgRUZJX0hBTkRMRSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGc0hhbmRsZQ0KKyAgKQ0KK3sNCisgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklfRklMRV9IQU5ETEUgICAgICAgICAg ICAgRmlsZTsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBXcml0ZVNpemU7DQorICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVEYXRhU2l6ZTsNCisgIFZPSUQgICAg ICAgICAgICAgICAgICAgICAgICAqVmFyaWFibGVEYXRhOw0KKyAgRUZJX0hBTkRMRSAgICAgICAg ICAgICAgICAgIFNlcmlhbGl6ZWRWYXJpYWJsZXM7DQorDQorICBTZXJpYWxpemVkVmFyaWFibGVz ID0gTlVMTDsNCisNCisgIFN0YXR1cyA9IFNlcmlhbGl6ZVZhcmlhYmxlc05ld0luc3RhbmNlICgm U2VyaWFsaXplZFZhcmlhYmxlcyk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAg IHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBTdGF0dXMgPSBTZXJpYWxpemVWYXJpYWJsZXNJ dGVyYXRlU3lzdGVtVmFyaWFibGVzICgNCisgICAgICAgICAgICAgSXRlcmF0ZVZhcmlhYmxlc0Nh bGxiYWNrQWRkQWxsTnZWYXJpYWJsZXMsDQorICAgICAgICAgICAgIChWT0lEKikgU2VyaWFsaXpl ZFZhcmlhYmxlcw0KKyAgICAgICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgVmFyaWFibGVEYXRhID0gTlVMTDsN CisgIFZhcmlhYmxlRGF0YVNpemUgPSAwOw0KKyAgU3RhdHVzID0gU2VyaWFsaXplVmFyaWFibGVz VG9CdWZmZXIgKA0KKyAgICAgICAgICAgICBTZXJpYWxpemVkVmFyaWFibGVzLA0KKyAgICAgICAg ICAgICBOVUxMLA0KKyAgICAgICAgICAgICAmVmFyaWFibGVEYXRhU2l6ZQ0KKyAgICAgICAgICAg ICApOw0KKyAgaWYgKFN0YXR1cyA9PSBSRVRVUk5fQlVGRkVSX1RPT19TTUFMTCkgew0KKyAgICBW YXJpYWJsZURhdGEgPSBBbGxvY2F0ZVBvb2wgKFZhcmlhYmxlRGF0YVNpemUpOw0KKyAgICBpZiAo VmFyaWFibGVEYXRhID09IE5VTEwpIHsNCisgICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09V UkNFUzsNCisgICAgfSBlbHNlIHsNCisgICAgICBTdGF0dXMgPSBTZXJpYWxpemVWYXJpYWJsZXNU b0J1ZmZlciAoDQorICAgICAgICAgICAgICAgICBTZXJpYWxpemVkVmFyaWFibGVzLA0KKyAgICAg ICAgICAgICAgICAgVmFyaWFibGVEYXRhLA0KKyAgICAgICAgICAgICAgICAgJlZhcmlhYmxlRGF0 YVNpemUNCisgICAgICAgICAgICAgICAgICk7DQorICAgIH0NCisgIH0NCisNCisgIFNlcmlhbGl6 ZVZhcmlhYmxlc0ZyZWVJbnN0YW5jZSAoU2VyaWFsaXplZFZhcmlhYmxlcyk7DQorDQorICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICAv Lw0KKyAgLy8gT3BlbiB0aGUgTnZWYXJzIGZpbGUgZm9yIHdyaXRpbmcuDQorICAvLw0KKyAgU3Rh dHVzID0gR2V0TnZWYXJzRmlsZSAoRnNIYW5kbGUsIEZBTFNFLCAmRmlsZSk7DQorICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQorICAgIERFQlVHICgoRUZJX0RfSU5GTywgIkZzQWNjZXNzLmM6 IFVuYWJsZSB0byBvcGVuIGZpbGUgdG8gc2F2ZWQgTlYgVmFyaWFibGVzXG4iKSk7DQorICAgIHJl dHVybiBTdGF0dXM7DQorICB9DQorDQorICAvLw0KKyAgLy8gRW1wdHkgdGhlIHN0YXJ0aW5nIGZp bGUgY29udGVudHMuDQorICAvLw0KKyAgU3RhdHVzID0gRmlsZUhhbmRsZUVtcHR5IChGaWxlKTsN CisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgRmlsZUhhbmRsZUNsb3NlIChGaWxl KTsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIFdyaXRlU2l6ZSA9IFZhcmlhYmxl RGF0YVNpemU7DQorICBTdGF0dXMgPSBGaWxlSGFuZGxlV3JpdGUgKEZpbGUsICZXcml0ZVNpemUs IFZhcmlhYmxlRGF0YSk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVy biBTdGF0dXM7DQorICB9DQorDQorICBGaWxlSGFuZGxlQ2xvc2UgKEZpbGUpOw0KKw0KKyAgaWYg KCFFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgLy8NCisgICAgLy8gV3JpdGUgYSB2YXJpYWJs ZSB0byBpbmRpY2F0ZSB3ZSd2ZSBhbHJlYWR5IGxvYWRlZCB0aGUNCisgICAgLy8gdmFyaWFibGUg ZGF0YS4gIElmIGl0IGlzIGZvdW5kLCB3ZSBza2lwIHRoZSBsb2FkaW5nIG9uDQorICAgIC8vIHN1 YnNlcXVlbnQgYXR0ZW1wdHMuDQorICAgIC8vDQorICAgIFNldE52VmFyc1ZhcmlhYmxlKCk7DQor DQorCURFQlVHICgoRUZJX0RfSU5GTywgIlNhdmVkIE5WIFZhcmlhYmxlcyB0byBOdlZhcnMgZmls ZVxuIikpOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQorDQpkaWZmIC0tZ2l0 IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvTnZWYXJzRmlsZUxp Yi9OdlZhcnNGaWxlTGliLmMgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGli cmFyeS9OdlZhcnNGaWxlTGliL052VmFyc0ZpbGVMaWIuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQN CmluZGV4IDAwMDAwMDAwMDAuLjJlOTYxODQ1NWQNCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRm b3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L052VmFyc0ZpbGVMaWIvTnZWYXJz RmlsZUxpYi5jDQpAQCAtMCwwICsxLDc3IEBADQorLyoqIEBmaWxlDQorICBTYXZlIE5vbi1Wb2xh dGlsZSBWYXJpYWJsZXMgdG8gYSBmaWxlIHN5c3RlbS4NCisNCisgIENvcHlyaWdodCAoYykgMjAx OSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gPEJSPg0KKw0KKyAgU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisNCisjaW5j bHVkZSAiTnZWYXJzRmlsZUxpYi5oIg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQor I2luY2x1ZGUgPExpYnJhcnkvTnZWYXJzRmlsZUxpYi5oPg0KKw0KK0VGSV9IQU5ETEUgICAgbU52 VmFyc0ZpbGVMaWJGc0hhbmRsZSA9IE5VTEw7DQorDQorDQorLyoqDQorICBBdHRlbXB0cyB0byBj b25uZWN0IHRoZSBOdlZhcnNGaWxlTGliIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBzeXN0ZW0uDQor DQorICBAcGFyYW1baW5dICBGc0hhbmRsZSAtIEhhbmRsZSBmb3IgYSBnRWZpU2ltcGxlRmlsZVN5 c3RlbVByb3RvY29sR3VpZCBpbnN0YW5jZQ0KKw0KKyAgQHJldHVybiAgICAgVGhlIEVGSV9TVEFU VVMgd2hpbGUgYXR0ZW1wdGluZyB0byBjb25uZWN0IHRoZSBOdlZhcnNGaWxlTGliDQorICAgICAg ICAgICAgICB0byB0aGUgZmlsZSBzeXN0ZW0gaW5zdGFuY2UuDQorICBAcmV0dmFsICAgICBFRklf U1VDQ0VTUyAtIFRoZSBnaXZlbiBmaWxlIHN5c3RlbSB3YXMgY29ubmVjdGVkIHN1Y2Nlc3NmdWxs eQ0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitDb25uZWN0TnZWYXJzVG9GaWxlU3lz dGVtICgNCisgIElOIEVGSV9IQU5ETEUgICAgRnNIYW5kbGUNCisgICkNCit7DQorICBFRklfU1RB VFVTIFN0YXR1czsNCisNCisgIC8vDQorICAvLyBXZSBtaWdodCBmYWlsIHRvIGxvYWQgdGhlIHZh cmlhYmxlLCBzaW5jZSB0aGUgZmlsZSBzeXN0ZW0gaW5pdGlhbGx5DQorICAvLyB3aWxsIG5vdCBo YXZlIHRoZSBOdlZhcnMgZmlsZS4NCisgIC8vDQorICBMb2FkTnZWYXJzRnJvbUZzIChGc0hhbmRs ZSk7DQorDQorICAvLw0KKyAgLy8gV2UgbXVzdCBiZSBhYmxlIHRvIHNhdmUgdGhlIHZhcmlhYmxl cyBzdWNjZXNzZnVsbHkgdG8gdGhlIGZpbGUgc3lzdGVtDQorICAvLyB0byBoYXZlIGNvbm5lY3Rl ZCBzdWNjZXNzZnVsbHkuDQorICAvLw0KKyAgU3RhdHVzID0gU2F2ZU52VmFyc1RvRnMgKEZzSGFu ZGxlKTsNCisgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIG1OdlZhcnNGaWxlTGli RnNIYW5kbGUgPSBGc0hhbmRsZTsNCisgIH0NCisNCisgIHJldHVybiBTdGF0dXM7DQorfQ0KKw0K Kw0KKy8qKg0KKyAgVXBkYXRlIG5vbi12b2xhdGlsZSB2YXJpYWJsZXMgc3RvcmVkIG9uIHRoZSBm aWxlIHN5c3RlbS4NCisNCisgIEByZXR1cm4gICAgIFRoZSBFRklfU1RBVFVTIHdoaWxlIGF0dGVt cHRpbmcgdG8gdXBkYXRlIHRoZSB2YXJpYWJsZSBvbg0KKyAgICAgICAgICAgICAgdGhlIGNvbm5l Y3RlZCBmaWxlIHN5c3RlbS4NCisgIEByZXR2YWwgICAgIEVGSV9TVUNDRVNTIC0gVGhlIG5vbi12 b2xhdGlsZSB2YXJpYWJsZXMgd2VyZSBzYXZlZCB0byB0aGUgZGlzaw0KKyAgQHJldHZhbCAgICAg RUZJX05PVF9TVEFSVEVEIC0gQSBmaWxlIHN5c3RlbSBoYXMgbm90IGJlZW4gY29ubmVjdGVkDQor DQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1VwZGF0ZU52VmFyc09uRmlsZVN5c3RlbSAo DQorICApDQorew0KKyAgaWYgKG1OdlZhcnNGaWxlTGliRnNIYW5kbGUgPT0gTlVMTCkgew0KKyAg ICAvLw0KKyAgICAvLyBBIGZpbGUgc3lzdGVtIGhhZCBub3QgYmVlbiBjb25uZWN0ZWQgdG8gdGhl IGxpYnJhcnkuDQorICAgIC8vDQorICAgIHJldHVybiBFRklfTk9UX1NUQVJURUQ7DQorICB9IGVs c2Ugew0KKyAgICByZXR1cm4gU2F2ZU52VmFyc1RvRnMgKG1OdlZhcnNGaWxlTGliRnNIYW5kbGUp Ow0KKyAgfQ0KK30NCisNCisNCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVu Qm9hcmRQa2cvTGlicmFyeS9QY2lIb3N0QnJpZGdlTGliL1BjaUhvc3RCcmlkZ2VMaWIuYyBiL1Bs YXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1BjaUhvc3RCcmlkZ2VMaWIv UGNpSG9zdEJyaWRnZUxpYi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAw MC4uNTNjNDIxZDQwYg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNz T3BlbkJvYXJkUGtnL0xpYnJhcnkvUGNpSG9zdEJyaWRnZUxpYi9QY2lIb3N0QnJpZGdlTGliLmMN CkBAIC0wLDAgKzEsNDE5IEBADQorLyoqIEBmaWxlDQorICBTSU1JQ1MgUVNQJ3MgaW5zdGFuY2Ug b2YgdGhlIFBDSSBIb3N0IEJyaWRnZSBMaWJyYXJ5Lg0KKw0KKyAgQ29weXJpZ2h0IChDKSAyMDE2 LCBSZWQgSGF0LCBJbmMuDQorICBDb3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiovDQorDQorI2luY2x1ZGUgPFBpRHhlLmg+DQorDQor I2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvUGNpLmg+DQorI2luY2x1ZGUgPFJlZ2lzdGVyL1g1 OEljaDEwLmg+DQorDQorI2luY2x1ZGUgPFByb3RvY29sL1BjaUhvc3RCcmlkZ2VSZXNvdXJjZUFs bG9jYXRpb24uaD4NCisjaW5jbHVkZSA8UHJvdG9jb2wvUGNpUm9vdEJyaWRnZUlvLmg+DQorDQor I2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0Rl YnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvRGV2aWNlUGF0aExpYi5oPg0KKyNpbmNsdWRl IDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QY2lI b3N0QnJpZGdlTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGNpTGliLmg+DQorI2luY2x1ZGUg IlBjaUhvc3RCcmlkZ2UuaCINCisNCisNCisjcHJhZ21hIHBhY2soMSkNCit0eXBlZGVmIHN0cnVj dCB7DQorICBBQ1BJX0hJRF9ERVZJQ0VfUEFUSCAgICAgQWNwaURldmljZVBhdGg7DQorICBFRklf REVWSUNFX1BBVEhfUFJPVE9DT0wgRW5kRGV2aWNlUGF0aDsNCit9IE9WTUZfUENJX1JPT1RfQlJJ REdFX0RFVklDRV9QQVRIOw0KKyNwcmFnbWEgcGFjayAoKQ0KKw0KKw0KK0dMT0JBTF9SRU1PVkVf SUZfVU5SRUZFUkVOQ0VEDQorQ0hBUjE2ICptUGNpSG9zdEJyaWRnZUxpYkFjcGlBZGRyZXNzU3Bh Y2VUeXBlU3RyW10gPSB7DQorICBMIk1lbSIsIEwiSS9PIiwgTCJCdXMiDQorfTsNCisNCisNCitT VEFUSUMNCitDT05TVA0KK09WTUZfUENJX1JPT1RfQlJJREdFX0RFVklDRV9QQVRIIG1Sb290QnJp ZGdlRGV2aWNlUGF0aFRlbXBsYXRlID0gew0KKyAgew0KKyAgICB7DQorICAgICAgQUNQSV9ERVZJ Q0VfUEFUSCwNCisgICAgICBBQ1BJX0RQLA0KKyAgICAgIHsNCisgICAgICAgIChVSU5UOCkgKHNp emVvZihBQ1BJX0hJRF9ERVZJQ0VfUEFUSCkpLA0KKyAgICAgICAgKFVJTlQ4KSAoKHNpemVvZihB Q1BJX0hJRF9ERVZJQ0VfUEFUSCkpID4+IDgpDQorICAgICAgfQ0KKyAgICB9LA0KKyAgICBFSVNB X1BOUF9JRCgweDBBMDMpLCAvLyBISUQNCisgICAgMCAgICAgICAgICAgICAgICAgICAgLy8gVUlE DQorICB9LA0KKw0KKyAgew0KKyAgICBFTkRfREVWSUNFX1BBVEhfVFlQRSwNCisgICAgRU5EX0VO VElSRV9ERVZJQ0VfUEFUSF9TVUJUWVBFLA0KKyAgICB7DQorICAgICAgRU5EX0RFVklDRV9QQVRI X0xFTkdUSCwNCisgICAgICAwDQorICAgIH0NCisgIH0NCit9Ow0KKw0KK1NUQVRJQyBQQ0lfUk9P VF9CUklER0VfQVBFUlRVUkUgbU5vbkV4aXN0QXBlcnR1cmUgPSB7IE1BWF9VSU5UNjQsIDAgfTsN CisNCisvKioNCisgIEluaXRpYWxpemUgYSBQQ0lfUk9PVF9CUklER0Ugc3RydWN0dXJlLg0KKw0K KyAgQHBhcmFtW2luXSAgU3VwcG9ydHMgICAgICAgICBTdXBwb3J0ZWQgYXR0cmlidXRlcy4NCisN CisgIEBwYXJhbVtpbl0gIEF0dHJpYnV0ZXMgICAgICAgSW5pdGlhbCBhdHRyaWJ1dGVzLg0KKw0K KyAgQHBhcmFtW2luXSAgQWxsb2NBdHRyaWJ1dGVzICBBbGxvY2F0aW9uIGF0dHJpYnV0ZXMuDQor DQorICBAcGFyYW1baW5dICBSb290QnVzTnVtYmVyICAgIFRoZSBidXMgbnVtYmVyIHRvIHN0b3Jl IGluIFJvb3RCdXMuDQorDQorICBAcGFyYW1baW5dICBNYXhTdWJCdXNOdW1iZXIgIFRoZSBpbmNs dXNpdmUgbWF4aW11bSBidXMgbnVtYmVyIHRoYXQgY2FuIGJlDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFzc2lnbmVkIHRvIGFueSBzdWJvcmRpbmF0ZSBidXMgZm91bmQgYmVoaW5k IGFueQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0kgYnJpZGdlIGhhbmdpbmcg b2ZmIHRoaXMgcm9vdCBidXMuDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRo ZSBjYWxsZXIgaXMgcmVwc29uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUm9vdEJ1c051bWJlciA8PSBNYXhTdWJCdXNOdW1iZXIuIElmDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvb3RCdXNOdW1iZXIgZXF1YWxzIE1heFN1 YkJ1c051bWJlciwgdGhlbiB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9v dCBidXMgaGFzIG5vIHJvb20gZm9yIHN1Ym9yZGluYXRlIGJ1c2VzLg0KKw0KKyAgQHBhcmFtW2lu XSAgSW8gICAgICAgICAgICAgICBJTyBhcGVydHVyZS4NCisNCisgIEBwYXJhbVtpbl0gIE1lbSAg ICAgICAgICAgICAgTU1JTyBhcGVydHVyZS4NCisNCisgIEBwYXJhbVtpbl0gIE1lbUFib3ZlNEcg ICAgICAgTU1JTyBhcGVydHVyZSBhYm92ZSA0Ry4NCisNCisgIEBwYXJhbVtpbl0gIFBNZW0gICAg ICAgICAgICAgUHJlZmV0Y2hhYmxlIE1NSU8gYXBlcnR1cmUuDQorDQorICBAcGFyYW1baW5dICBQ TWVtQWJvdmU0RyAgICAgIFByZWZldGNoYWJsZSBNTUlPIGFwZXJ0dXJlIGFib3ZlIDRHLg0KKw0K KyAgQHBhcmFtW291dF0gUm9vdEJ1cyAgICAgICAgICBUaGUgUENJX1JPT1RfQlJJREdFIHN0cnVj dHVyZSAoYWxsb2NhdGVkIGJ5IHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj YWxsZXIpIHRoYXQgc2hvdWxkIGJlIGZpbGxlZCBpbiBieSB0aGlzDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZ1bmN0aW9uLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgSW5pdGlhbGl6YXRpb24gc3VjY2Vzc2Z1bC4gQSBkZXZpY2UgcGF0aA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc2lzdGluZyBvZiBhbiBBQ1BJIGRldmljZSBwYXRo IG5vZGUsIHdpdGgNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJRCA9IFJvb3RC dXNOdW1iZXIsIGhhcyBiZWVuIGFsbG9jYXRlZCBhbmQNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpbmtlZCBpbnRvIFJvb3RCdXMuDQorDQorICBAcmV0dmFsIEVGSV9PVVRfT0Zf UkVTT1VSQ0VTICBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuDQorKiovDQorRUZJX1NUQVRVUw0K K0luaXRSb290QnJpZGdlICgNCisgIElOICBVSU5UNjQgICAgICAgICAgICAgICAgICAgU3VwcG9y dHMsDQorICBJTiAgVUlOVDY0ICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMsDQorICBJTiAg VUlOVDY0ICAgICAgICAgICAgICAgICAgIEFsbG9jQXR0cmlidXRlcywNCisgIElOICBVSU5UOCAg ICAgICAgICAgICAgICAgICAgUm9vdEJ1c051bWJlciwNCisgIElOICBVSU5UOCAgICAgICAgICAg ICAgICAgICAgTWF4U3ViQnVzTnVtYmVyLA0KKyAgSU4gIFBDSV9ST09UX0JSSURHRV9BUEVSVFVS RSAqSW8sDQorICBJTiAgUENJX1JPT1RfQlJJREdFX0FQRVJUVVJFICpNZW0sDQorICBJTiAgUENJ X1JPT1RfQlJJREdFX0FQRVJUVVJFICpNZW1BYm92ZTRHLA0KKyAgSU4gIFBDSV9ST09UX0JSSURH RV9BUEVSVFVSRSAqUE1lbSwNCisgIElOICBQQ0lfUk9PVF9CUklER0VfQVBFUlRVUkUgKlBNZW1B Ym92ZTRHLA0KKyAgT1VUIFBDSV9ST09UX0JSSURHRSAgICAgICAgICAqUm9vdEJ1cw0KKyAgKQ0K K3sNCisgIE9WTUZfUENJX1JPT1RfQlJJREdFX0RFVklDRV9QQVRIICpEZXZpY2VQYXRoOw0KKw0K KyAgLy8NCisgIC8vIEJlIHNhZmUgaWYgb3RoZXIgZmllbGRzIGFyZSBhZGRlZCB0byBQQ0lfUk9P VF9CUklER0UgbGF0ZXIuDQorICAvLw0KKyAgWmVyb01lbSAoUm9vdEJ1cywgc2l6ZW9mICpSb290 QnVzKTsNCisNCisgIFJvb3RCdXMtPlNlZ21lbnQgPSAwOw0KKw0KKyAgUm9vdEJ1cy0+U3VwcG9y dHMgICA9IFN1cHBvcnRzOw0KKyAgUm9vdEJ1cy0+QXR0cmlidXRlcyA9IEF0dHJpYnV0ZXM7DQor DQorICBSb290QnVzLT5EbWFBYm92ZTRHID0gRkFMU0U7DQorDQorICBSb290QnVzLT5BbGxvY2F0 aW9uQXR0cmlidXRlcyA9IEFsbG9jQXR0cmlidXRlczsNCisgIFJvb3RCdXMtPkJ1cy5CYXNlICA9 IFJvb3RCdXNOdW1iZXI7DQorICBSb290QnVzLT5CdXMuTGltaXQgPSBNYXhTdWJCdXNOdW1iZXI7 DQorICBDb3B5TWVtICgmUm9vdEJ1cy0+SW8sIElvLCBzaXplb2YgKCpJbykpOw0KKyAgQ29weU1l bSAoJlJvb3RCdXMtPk1lbSwgTWVtLCBzaXplb2YgKCpNZW0pKTsNCisgIENvcHlNZW0gKCZSb290 QnVzLT5NZW1BYm92ZTRHLCBNZW1BYm92ZTRHLCBzaXplb2YgKCpNZW1BYm92ZTRHKSk7DQorICBD b3B5TWVtICgmUm9vdEJ1cy0+UE1lbSwgUE1lbSwgc2l6ZW9mICgqUE1lbSkpOw0KKyAgQ29weU1l bSAoJlJvb3RCdXMtPlBNZW1BYm92ZTRHLCBQTWVtQWJvdmU0Rywgc2l6ZW9mICgqUE1lbUFib3Zl NEcpKTsNCisNCisgIFJvb3RCdXMtPk5vRXh0ZW5kZWRDb25maWdTcGFjZSA9IChQY2RHZXQxNiAo UGNkU2ltaWNzWDU4SG9zdEJyaWRnZVBjaURldklkKSAhPQ0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIElOVEVMX0lDSDEwX0RFVklDRV9JRCk7DQorDQorICBEZXZpY2VQYXRo ID0gQWxsb2NhdGVDb3B5UG9vbCAoc2l6ZW9mIG1Sb290QnJpZGdlRGV2aWNlUGF0aFRlbXBsYXRl LA0KKyAgICAgICAgICAgICAgICAgJm1Sb290QnJpZGdlRGV2aWNlUGF0aFRlbXBsYXRlKTsNCisg IGlmIChEZXZpY2VQYXRoID09IE5VTEwpIHsNCisgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIiVh OiAlclxuIiwgX19GVU5DVElPTl9fLCBFRklfT1VUX09GX1JFU09VUkNFUykpOw0KKyAgICByZXR1 cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICB9DQorICBEZXZpY2VQYXRoLT5BY3BpRGV2aWNl UGF0aC5VSUQgPSBSb290QnVzTnVtYmVyOw0KKyAgUm9vdEJ1cy0+RGV2aWNlUGF0aCA9IChFRklf REVWSUNFX1BBVEhfUFJPVE9DT0wgKilEZXZpY2VQYXRoOw0KKw0KKyAgREVCVUcgKChFRklfRF9J TkZPLA0KKyAgICAiJWE6IHBvcHVsYXRlZCByb290IGJ1cyAlZCwgd2l0aCByb29tIGZvciAlZCBz dWJvcmRpbmF0ZSBidXMoZXMpXG4iLA0KKyAgICBfX0ZVTkNUSU9OX18sIFJvb3RCdXNOdW1iZXIs IE1heFN1YkJ1c051bWJlciAtIFJvb3RCdXNOdW1iZXIpKTsNCisgIHJldHVybiBFRklfU1VDQ0VT UzsNCit9DQorDQorDQorLyoqDQorICBVbmluaXRpYWxpemUgYSBQQ0lfUk9PVF9CUklER0Ugc3Ry dWN0dXJlIHNldCB1cCB3aXRoIEluaXRSb290QnJpZGdlKCkuDQorDQorICBwYXJhbVtpbl0gUm9v dEJ1cyAgVGhlIFBDSV9ST09UX0JSSURHRSBzdHJ1Y3R1cmUsIGFsbG9jYXRlZCBieSB0aGUgY2Fs bGVyIGFuZA0KKyAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVkIHdpdGggSW5pdFJvb3RC cmlkZ2UoKSwgdGhhdCBzaG91bGQgYmUNCisgICAgICAgICAgICAgICAgICAgICB1bmluaXRpYWxp emVkLiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZnJlZSBSb290QnVzLg0KKyoqLw0KK1NUQVRJQw0K K1ZPSUQNCitVbmluaXRSb290QnJpZGdlICgNCisgIElOIFBDSV9ST09UX0JSSURHRSAqUm9vdEJ1 cw0KKyAgKQ0KK3sNCisgIEZyZWVQb29sIChSb290QnVzLT5EZXZpY2VQYXRoKTsNCit9DQorDQor DQorLyoqDQorICBSZXR1cm4gYWxsIHRoZSByb290IGJyaWRnZSBpbnN0YW5jZXMgaW4gYW4gYXJy YXkuDQorDQorICBAcGFyYW0gQ291bnQgIFJldHVybiB0aGUgY291bnQgb2Ygcm9vdCBicmlkZ2Ug aW5zdGFuY2VzLg0KKw0KKyAgQHJldHVybiBBbGwgdGhlIHJvb3QgYnJpZGdlIGluc3RhbmNlcyBp biBhbiBhcnJheS4NCisgICAgICAgICAgVGhlIGFycmF5IHNob3VsZCBiZSBwYXNzZWQgaW50byBQ Y2lIb3N0QnJpZGdlRnJlZVJvb3RCcmlkZ2VzKCkNCisgICAgICAgICAgd2hlbiBpdCdzIG5vdCB1 c2VkLg0KKyoqLw0KK1BDSV9ST09UX0JSSURHRSAqDQorRUZJQVBJDQorUGNpSG9zdEJyaWRnZUdl dFJvb3RCcmlkZ2VzICgNCisgIFVJTlROICpDb3VudA0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMg ICAgICAgICAgIFN0YXR1czsNCisgIFVJTlQ2NCAgICAgICAgICAgICAgIEV4dHJhUm9vdEJyaWRn ZXM7DQorICBQQ0lfUk9PVF9CUklER0UgICAgICAqQnJpZGdlczsNCisgIFVJTlROICAgICAgICAg ICAgICAgIEluaXRpYWxpemVkOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgTGFzdFJvb3RCcmlk Z2VOdW1iZXI7DQorICBVSU5UTiAgICAgICAgICAgICAgICBSb290QnJpZGdlTnVtYmVyOw0KKyAg VUlOVDY0ICAgICAgICAgICAgICAgQXR0cmlidXRlczsNCisgIFVJTlQ2NCAgICAgICAgICAgICAg IEFsbG9jYXRpb25BdHRyaWJ1dGVzOw0KKyAgUENJX1JPT1RfQlJJREdFX0FQRVJUVVJFIElvOw0K KyAgUENJX1JPT1RfQlJJREdFX0FQRVJUVVJFIE1lbTsNCisgIFBDSV9ST09UX0JSSURHRV9BUEVS VFVSRSBNZW1BYm92ZTRHOw0KKw0KKyAgWmVyb01lbSAoJklvLCBzaXplb2YgKElvKSk7DQorICBa ZXJvTWVtICgmTWVtLCBzaXplb2YgKE1lbSkpOw0KKyAgWmVyb01lbSAoJk1lbUFib3ZlNEcsIHNp emVvZiAoTWVtQWJvdmU0RykpOw0KKw0KKyAgQXR0cmlidXRlcyA9IEVGSV9QQ0lfQVRUUklCVVRF X0lERV9QUklNQVJZX0lPIHwNCisgICAgRUZJX1BDSV9BVFRSSUJVVEVfSURFX1NFQ09OREFSWV9J TyB8DQorICAgIEVGSV9QQ0lfQVRUUklCVVRFX0lTQV9JT18xNiB8DQorICAgIEVGSV9QQ0lfQVRU UklCVVRFX0lTQV9NT1RIRVJCT0FSRF9JTyB8DQorICAgIEVGSV9QQ0lfQVRUUklCVVRFX1ZHQV9N RU1PUlkgfA0KKyAgICBFRklfUENJX0FUVFJJQlVURV9WR0FfSU9fMTYgfA0KKyAgICBFRklfUENJ X0FUVFJJQlVURV9WR0FfUEFMRVRURV9JT18xNjsNCisNCisgIEFsbG9jYXRpb25BdHRyaWJ1dGVz ID0gRUZJX1BDSV9IT1NUX0JSSURHRV9DT01CSU5FX01FTV9QTUVNOw0KKyAgaWYgKFBjZEdldDY0 IChQY2RQY2lNbWlvNjRTaXplKSA+IDApIHsNCisgICAgQWxsb2NhdGlvbkF0dHJpYnV0ZXMgfD0g RUZJX1BDSV9IT1NUX0JSSURHRV9NRU02NF9ERUNPREU7DQorICAgIE1lbUFib3ZlNEcuQmFzZSA9 IFBjZEdldDY0IChQY2RQY2lNbWlvNjRCYXNlKTsNCisgICAgTWVtQWJvdmU0Ry5MaW1pdCA9IFBj ZEdldDY0IChQY2RQY2lNbWlvNjRCYXNlKSArDQorICAgICAgICAgICAgICAgICAgICAgICBQY2RH ZXQ2NCAoUGNkUGNpTW1pbzY0U2l6ZSkgLSAxOw0KKyAgfSBlbHNlIHsNCisgICAgQ29weU1lbSAo Jk1lbUFib3ZlNEcsICZtTm9uRXhpc3RBcGVydHVyZSwgc2l6ZW9mIChtTm9uRXhpc3RBcGVydHVy ZSkpOw0KKyAgfQ0KKw0KKyAgSW8uQmFzZSA9IFBjZEdldDY0IChQY2RQY2lJb0Jhc2UpOw0KKyAg SW8uTGltaXQgPSBQY2RHZXQ2NCAoUGNkUGNpSW9CYXNlKSArIChQY2RHZXQ2NCAoUGNkUGNpSW9T aXplKSAtIDEpOw0KKyAgTWVtLkJhc2UgPSBQY2RHZXQ2NCAoUGNkUGNpTW1pbzMyQmFzZSk7DQor ICBNZW0uTGltaXQgPSBQY2RHZXQ2NCAoUGNkUGNpTW1pbzMyQmFzZSkgKyAoUGNkR2V0NjQgKFBj ZFBjaU1taW8zMlNpemUpIC0gMSk7DQorDQorICAqQ291bnQgPSAwOw0KKyAgRXh0cmFSb290QnJp ZGdlcyA9IDA7DQorDQorICAvLw0KKyAgLy8gQWxsb2NhdGUgdGhlICJtYWluIiByb290IGJyaWRn ZSwgYW5kIGFueSBleHRyYSByb290IGJyaWRnZXMuDQorICAvLw0KKyAgQnJpZGdlcyA9IEFsbG9j YXRlUG9vbCAoKDEgKyAoVUlOVE4pRXh0cmFSb290QnJpZGdlcykgKiBzaXplb2YgKkJyaWRnZXMp Ow0KKyAgaWYgKEJyaWRnZXMgPT0gTlVMTCkgew0KKyAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAi JWE6ICVyXG4iLCBfX0ZVTkNUSU9OX18sIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTKSk7DQorICAgIHJl dHVybiBOVUxMOw0KKyAgfQ0KKyAgSW5pdGlhbGl6ZWQgPSAwOw0KKw0KKyAgLy8NCisgIC8vIFRo ZSAibWFpbiIgcm9vdCBidXMgaXMgYWx3YXlzIHRoZXJlLg0KKyAgLy8NCisgIExhc3RSb290QnJp ZGdlTnVtYmVyID0gMDsNCisNCisgIC8vDQorICAvLyBTY2FuIGFsbCBvdGhlciByb290IGJ1c2Vz LiBJZiBmdW5jdGlvbiAwIG9mIGFueSBkZXZpY2Ugb24gYSBidXMgcmV0dXJucyBhDQorICAvLyBW ZW5kb3JJZCByZWdpc3RlciB2YWx1ZSBkaWZmZXJlbnQgZnJvbSBhbGwtYml0cy1vbmUsIHRoZW4g dGhhdCBidXMgaXMNCisgIC8vIGFsaXZlLg0KKyAgLy8NCisgIGZvciAoUm9vdEJyaWRnZU51bWJl ciA9IDE7DQorICAgICAgIFJvb3RCcmlkZ2VOdW1iZXIgPD0gUENJX01BWF9CVVMgJiYgSW5pdGlh bGl6ZWQgPCBFeHRyYVJvb3RCcmlkZ2VzOw0KKyAgICAgICArK1Jvb3RCcmlkZ2VOdW1iZXIpIHsN CisgICAgVUlOVE4gRGV2aWNlOw0KKw0KKyAgICBmb3IgKERldmljZSA9IDA7IERldmljZSA8PSBQ Q0lfTUFYX0RFVklDRTsgKytEZXZpY2UpIHsNCisgICAgICBpZiAoUGNpUmVhZDE2IChQQ0lfTElC X0FERFJFU1MgKFJvb3RCcmlkZ2VOdW1iZXIsIERldmljZSwgMCwNCisgICAgICAgICAgICAgICAg ICAgICAgIFBDSV9WRU5ET1JfSURfT0ZGU0VUKSkgIT0gTUFYX1VJTlQxNikgew0KKyAgICAgICAg YnJlYWs7DQorICAgICAgfQ0KKyAgICB9DQorICAgIGlmIChEZXZpY2UgPD0gUENJX01BWF9ERVZJ Q0UpIHsNCisgICAgICAvLw0KKyAgICAgIC8vIEZvdW5kIHRoZSBuZXh0IHJvb3QgYnVzLiBXZSBj YW4gbm93IGluc3RhbGwgdGhlICpwcmV2aW91cyogb25lLA0KKyAgICAgIC8vIGJlY2F1c2Ugbm93 IHdlIGtub3cgaG93IGJpZyBhIGJ1cyBudW1iZXIgcmFuZ2UgKnRoYXQqIG9uZSBoYXMsIGZvciBh bnkNCisgICAgICAvLyBzdWJvcmRpbmF0ZSBidXNlcyB0aGF0IG1pZ2h0IGV4aXN0IGJlaGluZCBQ Q0kgYnJpZGdlcyBoYW5naW5nIG9mZiBpdC4NCisgICAgICAvLw0KKyAgICAgIFN0YXR1cyA9IElu aXRSb290QnJpZGdlICgNCisgICAgICAgIEF0dHJpYnV0ZXMsDQorICAgICAgICBBdHRyaWJ1dGVz LA0KKyAgICAgICAgQWxsb2NhdGlvbkF0dHJpYnV0ZXMsDQorICAgICAgICAoVUlOVDgpIExhc3RS b290QnJpZGdlTnVtYmVyLA0KKyAgICAgICAgKFVJTlQ4KSAoUm9vdEJyaWRnZU51bWJlciAtIDEp LA0KKyAgICAgICAgJklvLA0KKyAgICAgICAgJk1lbSwNCisgICAgICAgICZNZW1BYm92ZTRHLA0K KyAgICAgICAgJm1Ob25FeGlzdEFwZXJ0dXJlLA0KKyAgICAgICAgJm1Ob25FeGlzdEFwZXJ0dXJl LA0KKyAgICAgICAgJkJyaWRnZXNbSW5pdGlhbGl6ZWRdDQorICAgICAgICApOw0KKyAgICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICAgIGdvdG8gRnJlZUJyaWRnZXM7DQorICAg ICAgfQ0KKyAgICAgICsrSW5pdGlhbGl6ZWQ7DQorICAgICAgTGFzdFJvb3RCcmlkZ2VOdW1iZXIg PSBSb290QnJpZGdlTnVtYmVyOw0KKyAgICB9DQorICB9DQorDQorICAvLw0KKyAgLy8gSW5zdGFs bCB0aGUgbGFzdCByb290IGJ1cyAod2hpY2ggbWlnaHQgYmUgdGhlIG9ubHksIGllLiBtYWluLCBy b290IGJ1cywgaWYNCisgIC8vIHdlJ3ZlIGZvdW5kIG5vIGV4dHJhIHJvb3QgYnVzZXMpLg0KKyAg Ly8NCisgIFN0YXR1cyA9IEluaXRSb290QnJpZGdlICgNCisgICAgQXR0cmlidXRlcywNCisgICAg QXR0cmlidXRlcywNCisgICAgQWxsb2NhdGlvbkF0dHJpYnV0ZXMsDQorICAgIChVSU5UOCkgTGFz dFJvb3RCcmlkZ2VOdW1iZXIsDQorICAgIFBDSV9NQVhfQlVTLA0KKyAgICAmSW8sDQorICAgICZN ZW0sDQorICAgICZNZW1BYm92ZTRHLA0KKyAgICAmbU5vbkV4aXN0QXBlcnR1cmUsDQorICAgICZt Tm9uRXhpc3RBcGVydHVyZSwNCisgICAgJkJyaWRnZXNbSW5pdGlhbGl6ZWRdDQorICAgICk7DQor ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIGdvdG8gRnJlZUJyaWRnZXM7DQorICB9 DQorICArK0luaXRpYWxpemVkOw0KKw0KKyAgKkNvdW50ID0gSW5pdGlhbGl6ZWQ7DQorICByZXR1 cm4gQnJpZGdlczsNCisNCitGcmVlQnJpZGdlczoNCisgIHdoaWxlIChJbml0aWFsaXplZCA+IDAp IHsNCisgICAgLS1Jbml0aWFsaXplZDsNCisgICAgVW5pbml0Um9vdEJyaWRnZSAoJkJyaWRnZXNb SW5pdGlhbGl6ZWRdKTsNCisgIH0NCisNCisgIEZyZWVQb29sIChCcmlkZ2VzKTsNCisgIHJldHVy biBOVUxMOw0KK30NCisNCisNCisvKioNCisgIEZyZWUgdGhlIHJvb3QgYnJpZGdlIGluc3RhbmNl cyBhcnJheSByZXR1cm5lZCBmcm9tDQorICBQY2lIb3N0QnJpZGdlR2V0Um9vdEJyaWRnZXMoKS4N CisNCisgIEBwYXJhbSAgVGhlIHJvb3QgYnJpZGdlIGluc3RhbmNlcyBhcnJheS4NCisgIEBwYXJh bSAgVGhlIGNvdW50IG9mIHRoZSBhcnJheS4NCisqKi8NCitWT0lEDQorRUZJQVBJDQorUGNpSG9z dEJyaWRnZUZyZWVSb290QnJpZGdlcyAoDQorICBQQ0lfUk9PVF9CUklER0UgKkJyaWRnZXMsDQor ICBVSU5UTiAgICAgICAgICAgQ291bnQNCisgICkNCit7DQorICBpZiAoQnJpZGdlcyA9PSBOVUxM ICYmIENvdW50ID09IDApIHsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKyAgQVNTRVJUIChCcmlkZ2Vz ICE9IE5VTEwgJiYgQ291bnQgPiAwKTsNCisNCisgIGRvIHsNCisgICAgLS1Db3VudDsNCisgICAg VW5pbml0Um9vdEJyaWRnZSAoJkJyaWRnZXNbQ291bnRdKTsNCisgIH0gd2hpbGUgKENvdW50ID4g MCk7DQorDQorICBGcmVlUG9vbCAoQnJpZGdlcyk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgSW5mb3Jt IHRoZSBwbGF0Zm9ybSB0aGF0IHRoZSByZXNvdXJjZSBjb25mbGljdCBoYXBwZW5zLg0KKw0KKyAg QHBhcmFtIEhvc3RCcmlkZ2VIYW5kbGUgSGFuZGxlIG9mIHRoZSBIb3N0IEJyaWRnZS4NCisgIEBw YXJhbSBDb25maWd1cmF0aW9uICAgIFBvaW50ZXIgdG8gUENJIEkvTyBhbmQgUENJIG1lbW9yeSBy ZXNvdXJjZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcnMuIFRoZSBDb25m aWd1cmF0aW9uIGNvbnRhaW5zIHRoZSByZXNvdXJjZXMNCisgICAgICAgICAgICAgICAgICAgICAg ICAgIGZvciBhbGwgdGhlIHJvb3QgYnJpZGdlcy4gVGhlIHJlc291cmNlIGZvciBlYWNoIHJvb3QN CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZSBpcyB0ZXJtaW5hdGVkIHdpdGggRU5E IGRlc2NyaXB0b3IgYW5kIGFuDQorICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFs IEVORCBpcyBhcHBlbmRlZCBpbmRpY2F0aW5nIHRoZSBlbmQgb2YgdGhlDQorICAgICAgICAgICAg ICAgICAgICAgICAgICBlbnRpcmUgcmVzb3VyY2VzLiBUaGUgcmVzb3VyY2UgZGVzY3JpcHRvciBm aWVsZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGZvbGxvdyB0aGUgZGVzY3Jp cHRpb24gaW4NCisgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9QQ0lfSE9TVF9CUklER0Vf UkVTT1VSQ0VfQUxMT0NBVElPTl9QUk9UT0NPTA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg LlN1Ym1pdFJlc291cmNlcygpLg0KKyoqLw0KK1ZPSUQNCitFRklBUEkNCitQY2lIb3N0QnJpZGdl UmVzb3VyY2VDb25mbGljdCAoDQorICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAg SG9zdEJyaWRnZUhhbmRsZSwNCisgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq Q29uZmlndXJhdGlvbg0KKyAgKQ0KK3sNCisgIEVGSV9BQ1BJX0FERFJFU1NfU1BBQ0VfREVTQ1JJ UFRPUiAqRGVzY3JpcHRvcjsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS b290QnJpZGdlSW5kZXg7DQorICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiUGNpSG9zdEJyaWRnZTog UmVzb3VyY2UgY29uZmxpY3QgaGFwcGVucyFcbiIpKTsNCisNCisgIFJvb3RCcmlkZ2VJbmRleCA9 IDA7DQorICBEZXNjcmlwdG9yID0gKEVGSV9BQ1BJX0FERFJFU1NfU1BBQ0VfREVTQ1JJUFRPUiAq KSBDb25maWd1cmF0aW9uOw0KKyAgd2hpbGUgKERlc2NyaXB0b3ItPkRlc2MgPT0gQUNQSV9BRERS RVNTX1NQQUNFX0RFU0NSSVBUT1IpIHsNCisgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIlJvb3RC cmlkZ2VbJWRdOlxuIiwgUm9vdEJyaWRnZUluZGV4KyspKTsNCisgICAgZm9yICg7IERlc2NyaXB0 b3ItPkRlc2MgPT0gQUNQSV9BRERSRVNTX1NQQUNFX0RFU0NSSVBUT1I7IERlc2NyaXB0b3IrKykg ew0KKyAgICAgIEFTU0VSVCAoRGVzY3JpcHRvci0+UmVzVHlwZSA8DQorICAgICAgICAgICAgICAo c2l6ZW9mIChtUGNpSG9zdEJyaWRnZUxpYkFjcGlBZGRyZXNzU3BhY2VUeXBlU3RyKSAvDQorICAg ICAgICAgICAgICAgc2l6ZW9mIChtUGNpSG9zdEJyaWRnZUxpYkFjcGlBZGRyZXNzU3BhY2VUeXBl U3RyWzBdKQ0KKyAgICAgICAgICAgICAgICkNCisgICAgICAgICAgICAgICk7DQorICAgICAgREVC VUcgKChFRklfRF9FUlJPUiwgIiAlczogTGVuZ3RoL0FsaWdubWVudCA9IDB4JWx4IC8gMHglbHhc biIsDQorICAgICAgICAgICAgICBtUGNpSG9zdEJyaWRnZUxpYkFjcGlBZGRyZXNzU3BhY2VUeXBl U3RyW0Rlc2NyaXB0b3ItPlJlc1R5cGVdLA0KKyAgICAgICAgICAgICAgRGVzY3JpcHRvci0+QWRk ckxlbiwgRGVzY3JpcHRvci0+QWRkclJhbmdlTWF4DQorICAgICAgICAgICAgICApKTsNCisgICAg ICBpZiAoRGVzY3JpcHRvci0+UmVzVHlwZSA9PSBBQ1BJX0FERFJFU1NfU1BBQ0VfVFlQRV9NRU0p IHsNCisgICAgICAgIERFQlVHICgoRUZJX0RfRVJST1IsICIgICAgIEdyYW51bGFyaXR5L1NwZWNp ZmljRmxhZyA9ICVsZCAvICUwMnglc1xuIiwNCisgICAgICAgICAgICAgICAgRGVzY3JpcHRvci0+ QWRkclNwYWNlR3JhbnVsYXJpdHksIERlc2NyaXB0b3ItPlNwZWNpZmljRmxhZywNCisgICAgICAg ICAgICAgICAgKChEZXNjcmlwdG9yLT5TcGVjaWZpY0ZsYWcgJg0KKyAgICAgICAgICAgICAgICAg IEVGSV9BQ1BJX01FTU9SWV9SRVNPVVJDRV9TUEVDSUZJQ19GTEFHX0NBQ0hFQUJMRV9QUkVGRVRD SEFCTEUNCisgICAgICAgICAgICAgICAgICApICE9IDApID8gTCIgKFByZWZldGNoYWJsZSkiIDog TCIiDQorICAgICAgICAgICAgICAgICkpOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgICAvLw0KKyAg ICAvLyBTa2lwIHRoZSBFTkQgZGVzY3JpcHRvciBmb3Igcm9vdCBicmlkZ2UNCisgICAgLy8NCisg ICAgQVNTRVJUIChEZXNjcmlwdG9yLT5EZXNjID09IEFDUElfRU5EX1RBR19ERVNDUklQVE9SKTsN CisgICAgRGVzY3JpcHRvciA9IChFRklfQUNQSV9BRERSRVNTX1NQQUNFX0RFU0NSSVBUT1IgKiko DQorICAgICAgICAgICAgICAgICAgIChFRklfQUNQSV9FTkRfVEFHX0RFU0NSSVBUT1IgKilEZXNj cmlwdG9yICsgMQ0KKyAgICAgICAgICAgICAgICAgICApOw0KKyAgfQ0KK30NCmRpZmYgLS1naXQg YS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9QZWlSZXBvcnRGdkxp Yi9Gdi5jIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGVpUmVw b3J0RnZMaWIvRnYuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLjRl Mzc2MjQ2NWENCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5C b2FyZFBrZy9MaWJyYXJ5L1BlaVJlcG9ydEZ2TGliL0Z2LmMNCkBAIC0wLDAgKzEsMTAwIEBADQor LyoqIEBmaWxlDQorICBCdWlsZCBGViByZWxhdGVkIGhvYnMgZm9yIHBsYXRmb3JtLg0KKw0KKyAg Q29weXJpZ2h0IChjKSAyMDA2IC0gMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4gPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVz ZS1QYXRlbnQNCisqKi8NCisNCisjaW5jbHVkZSAiUGlQZWkuaCINCisjaW5jbHVkZSA8TGlicmFy eS9EZWJ1Z0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0hvYkxpYi5oPg0KKyNpbmNsdWRlIDxM aWJyYXJ5L1BlaVNlcnZpY2VzTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGNkTGliLmg+DQor DQorQk9PTEVBTiBtUzNTdXBwb3J0ZWQgPSBUUlVFOw0KKw0KKy8qKg0KKyAgUHVibGlzaCBQRUkg JiBEWEUgKERlY29tcHJlc3NlZCkgTWVtb3J5IGJhc2VkIEZWcyB0byBsZXQgUEVJDQorICBhbmQg RFhFIGtub3cgYWJvdXQgdGhlbS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICBQbGF0Zm9y bSBQRUkgRlZzIHdlcmUgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Lg0KKw0KKyoqLw0KK0VGSV9T VEFUVVMNCitQZWlGdkluaXRpYWxpemF0aW9uICgNCisgIFZPSUQNCisgICkNCit7DQorICBCT09M RUFOIFNlY3VyZVMzTmVlZGVkOw0KKw0KKyAgREVCVUcgKChFRklfRF9JTkZPLCAiUGxhdGZvcm0g UEVJIEZpcm13YXJlIFZvbHVtZSBJbml0aWFsaXphdGlvblxuIikpOw0KKw0KKyAgREVCVUcgKA0K KyAgICAoRUZJX0RfRVJST1IsICJGaXJtd2FyZSBWb2x1bWUgSE9COiAweCV4IDB4JXhcbiIsDQor ICAgICAgUGNkR2V0MzIgKFBjZFNpbWljc1BlaU1lbUZ2QmFzZSksDQorICAgICAgUGNkR2V0MzIg KFBjZFNpbWljc1BlaU1lbUZ2U2l6ZSkNCisgICAgICApDQorICAgICk7DQorICAvLw0KKyAgLy8g Q3JlYXRlIGEgbWVtb3J5IGFsbG9jYXRpb24gSE9CIGZvciB0aGUgUEVJIEZWLg0KKyAgLy8NCisg IC8vIEFsbG9jYXRlIGFzIEFDUEkgTlZTIGlzIFMzIGlzIHN1cHBvcnRlZA0KKyAgLy8NCisgIEJ1 aWxkTWVtb3J5QWxsb2NhdGlvbkhvYiAoDQorICAgIFBjZEdldDMyIChQY2RTaW1pY3NQZWlNZW1G dkJhc2UpLA0KKyAgICBQY2RHZXQzMiAoUGNkU2ltaWNzUGVpTWVtRnZTaXplKSwNCisgICAgbVMz U3VwcG9ydGVkID8gRWZpQUNQSU1lbW9yeU5WUyA6IEVmaUJvb3RTZXJ2aWNlc0RhdGENCisgICAg KTsNCisNCisgIC8vDQorICAvLyBMZXQgRFhFIGtub3cgYWJvdXQgdGhlIERYRSBGVg0KKyAgLy8N CisgIEJ1aWxkRnZIb2IgKFBjZEdldDMyIChQY2RTaW1pY3NEeGVNZW1GdkJhc2UpLCBQY2RHZXQz MiAoUGNkU2ltaWNzRHhlTWVtRnZTaXplKSk7DQorDQorICBTZWN1cmVTM05lZWRlZCA9IG1TM1N1 cHBvcnRlZCAmJiBGZWF0dXJlUGNkR2V0IChQY2RTbW1TbXJhbVJlcXVpcmUpOw0KKw0KKyAgLy8N CisgIC8vIENyZWF0ZSBhIG1lbW9yeSBhbGxvY2F0aW9uIEhPQiBmb3IgdGhlIERYRSBGVi4NCisg IC8vDQorICAvLyBJZiAic2VjdXJlIiBTMyBpcyBuZWVkZWQsIHRoZW4gU0VDIHdpbGwgZGVjb21w cmVzcyBib3RoIFBFSSBhbmQgRFhFDQorICAvLyBmaXJtd2FyZSB2b2x1bWVzIGF0IFMzIHJlc3Vt ZSB0b28sIGhlbmNlIHdlIG5lZWQgdG8ga2VlcCBhd2F5IHRoZSBPUyBmcm9tDQorICAvLyBEWEVG ViBhcyB3ZWxsLiBPdGhlcndpc2Ugd2Ugb25seSBuZWVkIHRvIGtlZXAgYXdheSBEWEUgaXRzZWxm IGZyb20gdGhlDQorICAvLyBEWEVGViBhcmVhLg0KKyAgLy8NCisgIEJ1aWxkTWVtb3J5QWxsb2Nh dGlvbkhvYiAoDQorICAgIFBjZEdldDMyIChQY2RTaW1pY3NEeGVNZW1GdkJhc2UpLA0KKyAgICBQ Y2RHZXQzMiAoUGNkU2ltaWNzRHhlTWVtRnZTaXplKSwNCisgICAgU2VjdXJlUzNOZWVkZWQgPyBF ZmlBQ1BJTWVtb3J5TlZTIDogRWZpQm9vdFNlcnZpY2VzRGF0YQ0KKyAgICApOw0KKw0KKyAgLy8N CisgIC8vIEFkZGl0aW9uYWxseSwgc2FpZCBkZWNvbXByZXNzaW9uIHdpbGwgdXNlIHRlbXBvcmFy eSBtZW1vcnkgYWJvdmUgdGhlIGVuZA0KKyAgLy8gb2YgRFhFRlYsIHNvIGxldCdzIGtlZXAgYXdh eSB0aGUgT1MgZnJvbSB0aGVyZSB0b28uDQorICAvLw0KKyAgaWYgKFNlY3VyZVMzTmVlZGVkKSB7 DQorICAgIFVJTlQzMiBEeGVNZW1GdkVuZDsNCisNCisgICAgRHhlTWVtRnZFbmQgPSBQY2RHZXQz MiAoUGNkU2ltaWNzRHhlTWVtRnZCYXNlKSArDQorICAgICAgICAgICAgICAgICAgUGNkR2V0MzIg KFBjZFNpbWljc0R4ZU1lbUZ2U2l6ZSk7DQorICAgIEJ1aWxkTWVtb3J5QWxsb2NhdGlvbkhvYiAo DQorICAgICAgRHhlTWVtRnZFbmQsDQorICAgICAgUGNkR2V0MzIgKFBjZFNpbWljc0RlY29tcHJl c3Npb25TY3JhdGNoRW5kKSAtIER4ZU1lbUZ2RW5kLA0KKyAgICAgIEVmaUFDUElNZW1vcnlOVlMN CisgICAgICApOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIExldCBQRUkga25vdyBhYm91dCB0aGUg RFhFIEZWIHNvIGl0IGNhbiBmaW5kIHRoZSBEWEUgQ29yZQ0KKyAgLy8NCisgIFBlaVNlcnZpY2Vz SW5zdGFsbEZ2SW5mb1BwaSAoDQorICAgIE5VTEwsDQorICAgIChWT0lEICopKFVJTlROKSBQY2RH ZXQzMiAoUGNkU2ltaWNzRHhlTWVtRnZCYXNlKSwNCisgICAgUGNkR2V0MzIgKFBjZFNpbWljc0R4 ZU1lbUZ2U2l6ZSksDQorICAgIE5VTEwsDQorICAgIE5VTEwNCisgICAgKTsNCisNCisgIHJldHVy biBFRklfU1VDQ0VTUzsNCit9DQorDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNz T3BlbkJvYXJkUGtnL0xpYnJhcnkvUGVpUmVwb3J0RnZMaWIvUGVpUmVwb3J0RnZMaWIuYyBiL1Bs YXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1BlaVJlcG9ydEZ2TGliL1Bl aVJlcG9ydEZ2TGliLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi4x NzYwZWI5NTRjDQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVu Qm9hcmRQa2cvTGlicmFyeS9QZWlSZXBvcnRGdkxpYi9QZWlSZXBvcnRGdkxpYi5jDQpAQCAtMCww ICsxLDExOCBAQA0KKy8qKiBAZmlsZQ0KKyAgU291cmNlIGNvZGUgZmlsZSBmb3IgUmVwb3J0IEZp cm13YXJlIFZvbHVtZSAoRlYpIGxpYnJhcnkNCisNCitDb3B5cmlnaHQgKGMpIDIwMTgsIEludGVs IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCitTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKw0KKyoqLw0KKw0KKyNpbmNsdWRlIDxCYXNl Lmg+DQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJy YXJ5L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvSG9iTGliLmg+DQorI2luY2x1ZGUg PExpYnJhcnkvUGVpU2VydmljZXNMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9SZXBvcnRGdkxp Yi5oPg0KKyNpbmNsdWRlIDxHdWlkL0Zpcm13YXJlRmlsZVN5c3RlbTIuaD4NCisjaW5jbHVkZSA8 UHBpL0Zpcm13YXJlVm9sdW1lSW5mby5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0lvTGliLmg+DQor I2luY2x1ZGUgPFJlZ2lzdGVyL1g1OEljaDEwLmg+DQorDQorRUZJX1NUQVRVUw0KK1BlaUZ2SW5p dGlhbGl6YXRpb24oDQorICBWT0lEDQorKTsNCisNCitWT0lEDQorUmVwb3J0UHJlTWVtRnYgKA0K KyAgVk9JRA0KKyAgKQ0KK3sNCisgIGlmIChJb0JpdEZpZWxkUmVhZDE2KElDSDEwX1BNQkFTRV9J TyArIDQsIDEwLCAxMikgIT0gMHg1KSB7IC8vIG5vdCBTMyByZXN1bWUNCisgICAgUGVpRnZJbml0 aWFsaXphdGlvbigpOw0KKyAgfQ0KKw0KKyAgREVCVUcgKChERUJVR19JTkZPLCAiSW5zdGFsbCBG bGFzaEZ2U2VjdXJpdHkgLSAweCV4LCAweCV4XG4iLCBQY2RHZXQzMiAoUGNkRmxhc2hGdlNlY3Vy aXR5QmFzZSksIFBjZEdldDMyIChQY2RGbGFzaEZ2U2VjdXJpdHlTaXplKSkpOw0KKyAgUGVpU2Vy dmljZXNJbnN0YWxsRnZJbmZvMlBwaSAoDQorICAgICYoKChFRklfRklSTVdBUkVfVk9MVU1FX0hF QURFUiAqKSAoVUlOVE4pIFBjZEdldDMyIChQY2RGbGFzaEZ2U2VjdXJpdHlCYXNlKSktPkZpbGVT eXN0ZW1HdWlkKSwNCisgICAgKFZPSUQgKikgKFVJTlROKSBQY2RHZXQzMiAoUGNkRmxhc2hGdlNl Y3VyaXR5QmFzZSksDQorICAgIFBjZEdldDMyIChQY2RGbGFzaEZ2U2VjdXJpdHlTaXplKSwNCisg ICAgTlVMTCwNCisgICAgTlVMTCwNCisgICAgMA0KKyAgICApOw0KKyAgREVCVUcgKChERUJVR19J TkZPLCAiSW5zdGFsbCBGbGFzaEZ2QWR2YW5jZWQgLSAweCV4LCAweCV4XG4iLCBQY2RHZXQzMiAo UGNkRmxhc2hGdkFkdmFuY2VkQmFzZSksIFBjZEdldDMyIChQY2RGbGFzaEZ2QWR2YW5jZWRTaXpl KSkpOw0KKyAgUGVpU2VydmljZXNJbnN0YWxsRnZJbmZvMlBwaSAoDQorICAgICYoKChFRklfRklS TVdBUkVfVk9MVU1FX0hFQURFUiAqKSAoVUlOVE4pIFBjZEdldDMyIChQY2RGbGFzaEZ2QWR2YW5j ZWRCYXNlKSktPkZpbGVTeXN0ZW1HdWlkKSwNCisgICAgKFZPSUQgKikgKFVJTlROKSBQY2RHZXQz MiAoUGNkRmxhc2hGdkFkdmFuY2VkQmFzZSksDQorICAgIFBjZEdldDMyIChQY2RGbGFzaEZ2QWR2 YW5jZWRTaXplKSwNCisgICAgTlVMTCwNCisgICAgTlVMTCwNCisgICAgMA0KKyAgICApOw0KK30N CisNCitWT0lEDQorUmVwb3J0UG9zdE1lbUZ2ICgNCisgIFZPSUQNCisgICkNCit7DQorICBFRklf U1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklfQk9PVF9NT0RFICAgICAg ICAgICAgICAgICBCb290TW9kZTsNCisNCisgIFN0YXR1cyA9IFBlaVNlcnZpY2VzR2V0Qm9vdE1v ZGUgKCZCb290TW9kZSk7DQorICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KKw0KKyAgLy8v DQorICAvLy8gQnVpbGQgSE9CIGZvciBEWEUNCisgIC8vLw0KKyAgaWYgKEJvb3RNb2RlID09IEJP T1RfSU5fUkVDT1ZFUllfTU9ERSkgew0KKyAgICAvLy8NCisgICAgLy8vIFByZXBhcmUgdGhlIHJl Y292ZXJ5IHNlcnZpY2UNCisgICAgLy8vDQorICB9IGVsc2Ugew0KKyAgICBERUJVRyAoKERFQlVH X0lORk8sICJJbnN0YWxsIEZsYXNoRnZQb3N0TWVtb3J5IC0gMHgleCwgMHgleFxuIiwgUGNkR2V0 MzIgKFBjZEZsYXNoRnZQb3N0TWVtb3J5QmFzZSksIFBjZEdldDMyIChQY2RGbGFzaEZ2UG9zdE1l bW9yeVNpemUpKSk7DQorICAgIFBlaVNlcnZpY2VzSW5zdGFsbEZ2SW5mbzJQcGkgKA0KKyAgICAg ICYoKChFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAqKSAoVUlOVE4pIFBjZEdldDMyIChQY2RG bGFzaEZ2UG9zdE1lbW9yeUJhc2UpKS0+RmlsZVN5c3RlbUd1aWQpLA0KKyAgICAgIChWT0lEICop IChVSU5UTikgUGNkR2V0MzIgKFBjZEZsYXNoRnZQb3N0TWVtb3J5QmFzZSksDQorICAgICAgUGNk R2V0MzIgKFBjZEZsYXNoRnZQb3N0TWVtb3J5U2l6ZSksDQorICAgICAgTlVMTCwNCisgICAgICBO VUxMLA0KKyAgICAgIDANCisgICAgICApOw0KKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJJbnN0 YWxsIEZsYXNoRnZVZWZpQm9vdCAtIDB4JXgsIDB4JXhcbiIsIFBjZEdldDMyIChQY2RGbGFzaEZ2 VWVmaUJvb3RCYXNlKSwgUGNkR2V0MzIgKFBjZEZsYXNoRnZVZWZpQm9vdFNpemUpKSk7DQorICAg IFBlaVNlcnZpY2VzSW5zdGFsbEZ2SW5mbzJQcGkgKA0KKyAgICAgICYoKChFRklfRklSTVdBUkVf Vk9MVU1FX0hFQURFUiAqKSAoVUlOVE4pIFBjZEdldDMyIChQY2RGbGFzaEZ2VWVmaUJvb3RCYXNl KSktPkZpbGVTeXN0ZW1HdWlkKSwNCisgICAgICAoVk9JRCAqKSAoVUlOVE4pIFBjZEdldDMyIChQ Y2RGbGFzaEZ2VWVmaUJvb3RCYXNlKSwNCisgICAgICBQY2RHZXQzMiAoUGNkRmxhc2hGdlVlZmlC b290U2l6ZSksDQorICAgICAgTlVMTCwNCisgICAgICBOVUxMLA0KKyAgICAgIDANCisgICAgICAp Ow0KKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJJbnN0YWxsIEZsYXNoRnZPc0Jvb3QgLSAweCV4 LCAweCV4XG4iLCBQY2RHZXQzMiAoUGNkRmxhc2hGdk9zQm9vdEJhc2UpLCBQY2RHZXQzMiAoUGNk Rmxhc2hGdk9zQm9vdFNpemUpKSk7DQorICAgIFBlaVNlcnZpY2VzSW5zdGFsbEZ2SW5mbzJQcGkg KA0KKyAgICAgICYoKChFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAqKSAoVUlOVE4pIFBjZEdl dDMyIChQY2RGbGFzaEZ2T3NCb290QmFzZSkpLT5GaWxlU3lzdGVtR3VpZCksDQorICAgICAgKFZP SUQgKikgKFVJTlROKSBQY2RHZXQzMiAoUGNkRmxhc2hGdk9zQm9vdEJhc2UpLA0KKyAgICAgIFBj ZEdldDMyIChQY2RGbGFzaEZ2T3NCb290U2l6ZSksDQorICAgICAgTlVMTCwNCisgICAgICBOVUxM LA0KKyAgICAgIDANCisgICAgICApOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIFJlcG9ydCByZXNv dXJjZSBIT0IgZm9yIGZsYXNoIEZWDQorICAvLw0KKyAgQnVpbGRSZXNvdXJjZURlc2NyaXB0b3JI b2IgKA0KKyAgICBFRklfUkVTT1VSQ0VfTUVNT1JZX01BUFBFRF9JTywNCisgICAgKEVGSV9SRVNP VVJDRV9BVFRSSUJVVEVfUFJFU0VOVCAgICB8DQorICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVf SU5JVElBTElaRUQgfA0KKyAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1VOQ0FDSEVBQkxFKSwN CisgICAgKFVJTlROKSBQY2RHZXQzMiAoUGNkRmxhc2hBcmVhQmFzZUFkZHJlc3MpLA0KKyAgICAo VUlOVE4pIFBjZEdldDMyIChQY2RGbGFzaEFyZWFTaXplKQ0KKyAgICApOw0KKyAgQnVpbGRNZW1v cnlBbGxvY2F0aW9uSG9iICgNCisgICAgKFVJTlROKSBQY2RHZXQzMiAoUGNkRmxhc2hBcmVhQmFz ZUFkZHJlc3MpLA0KKyAgICAoVUlOVE4pIFBjZEdldDMyIChQY2RGbGFzaEFyZWFTaXplKSwNCisg ICAgRWZpTWVtb3J5TWFwcGVkSU8NCisgICAgKTsNCit9DQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0v SW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGxhdGZvcm1Cb290TWFuYWdlckxpYi9C ZHNQbGF0Zm9ybS5jIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkv UGxhdGZvcm1Cb290TWFuYWdlckxpYi9CZHNQbGF0Zm9ybS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KaW5kZXggMDAwMDAwMDAwMC4uMTE3YzcyYjM1Zg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxh dGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGxhdGZvcm1Cb290TWFuYWdl ckxpYi9CZHNQbGF0Zm9ybS5jDQpAQCAtMCwwICsxLDE1NTMgQEANCisvKiogQGZpbGUNCisgIFBs YXRmb3JtIEJEUyBjdXN0b21pemF0aW9ucy4NCisNCisgIENvcHlyaWdodCAoYykgMjAwNCAtIDIw MTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCisNCisgIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiovDQorDQorI2lu Y2x1ZGUgIkJkc1BsYXRmb3JtLmgiDQorI2luY2x1ZGUgPEd1aWQvUm9vdEJyaWRnZXNDb25uZWN0 ZWRFdmVudEdyb3VwLmg+DQorI2luY2x1ZGUgPFByb3RvY29sL0Zpcm13YXJlVm9sdW1lMi5oPg0K Kw0KKyNkZWZpbmUgTEVHQUNZXzgyNTlfTUFTS19SRUdJU1RFUl9NQVNURVIgICAgICAgICAgICAg ICAgICAweDIxDQorI2RlZmluZSBMRUdBQ1lfODI1OV9NQVNLX1JFR0lTVEVSX1NMQVZFICAgICAg ICAgICAgICAgICAgIDB4QTENCisjZGVmaW5lIExFR0FDWV84MjU5X0VER0VfTEVWRUxfVFJJR0dF UkVEX1JFR0lTVEVSX01BU1RFUiAgMHg0RDANCisjZGVmaW5lIExFR0FDWV84MjU5X0VER0VfTEVW RUxfVFJJR0dFUkVEX1JFR0lTVEVSX1NMQVZFICAgMHg0RDENCisNCisvLw0KKy8vIEdsb2JhbCBk YXRhDQorLy8NCisNCitWT0lEICAgICAgICAgICptRWZpRGV2UGF0aE5vdGlmeVJlZzsNCitFRklf RVZFTlQgICAgIG1FZmlEZXZQYXRoRXZlbnQ7DQorVk9JRCAgICAgICAgICAqbUVtdVZhcmlhYmxl RXZlbnRSZWc7DQorRUZJX0VWRU5UICAgICBtRW11VmFyaWFibGVFdmVudDsNCitCT09MRUFOICAg ICAgIG1EZXRlY3RWZ2FPbmx5Ow0KK1VJTlQxNiAgICAgICAgbUhvc3RCcmlkZ2VEZXZJZDsNCisN CisvLw0KKy8vIFRhYmxlIG9mIGhvc3QgSVJRcyBtYXRjaGluZyBQQ0kgSVJRcyBBLUQNCisvLyAo Zm9yIGNvbmZpZ3VyaW5nIFBDSSBJbnRlcnJ1cHQgTGluZSByZWdpc3RlcikNCisvLw0KK0NPTlNU IFVJTlQ4IFBjaUhvc3RJcnFzW10gPSB7DQorICAweDBhLCAweDBhLCAweDBiLCAweDBiDQorfTsN CisNCisvLw0KKy8vIFR5cGUgZGVmaW5pdGlvbnMNCisvLw0KKw0KK3R5cGVkZWYNCitFRklfU1RB VFVTDQorKEVGSUFQSSAqUFJPVE9DT0xfSU5TVEFOQ0VfQ0FMTEJBQ0spKA0KKyAgSU4gRUZJX0hB TkRMRSAgICAgICAgICAgSGFuZGxlLA0KKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgKkluc3Rh bmNlLA0KKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgKkNvbnRleHQNCisgICk7DQorDQorLyoq DQorICBAcGFyYW1baW5dICBIYW5kbGUgLSBIYW5kbGUgb2YgUENJIGRldmljZSBpbnN0YW5jZQ0K KyAgQHBhcmFtW2luXSAgUGNpSW8gLSBQQ0kgSU8gcHJvdG9jb2wgaW5zdGFuY2UNCisgIEBwYXJh bVtpbl0gIFBjaSAtIFBDSSBIZWFkZXIgcmVnaXN0ZXIgYmxvY2sNCisqKi8NCit0eXBlZGVmDQor RUZJX1NUQVRVUw0KKyhFRklBUEkgKlZJU0lUX1BDSV9JTlNUQU5DRV9DQUxMQkFDSykoDQorICBJ TiBFRklfSEFORExFICAgICAgICAgICBIYW5kbGUsDQorICBJTiBFRklfUENJX0lPX1BST1RPQ09M ICAqUGNpSW8sDQorICBJTiBQQ0lfVFlQRTAwICAgICAgICAgICAqUGNpDQorICApOw0KKw0KKw0K Ky8vDQorLy8gRnVuY3Rpb24gcHJvdG90eXBlcw0KKy8vDQorDQorRUZJX1NUQVRVUw0KK1Zpc2l0 QWxsSW5zdGFuY2VzT2ZQcm90b2NvbCAoDQorICBJTiBFRklfR1VJRCAgICAgICAgICAgICAgICAg ICAgKklkLA0KKyAgSU4gUFJPVE9DT0xfSU5TVEFOQ0VfQ0FMTEJBQ0sgIENhbGxCYWNrRnVuY3Rp b24sDQorICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgKkNvbnRleHQNCisgICk7DQor DQorRUZJX1NUQVRVUw0KK1Zpc2l0QWxsUGNpSW5zdGFuY2VzT2ZQcm90b2NvbCAoDQorICBJTiBW SVNJVF9QQ0lfSU5TVEFOQ0VfQ0FMTEJBQ0sgQ2FsbEJhY2tGdW5jdGlvbg0KKyAgKTsNCisNCitW T0lEDQorSW5zdGFsbERldmljZVBhdGhDYWxsYmFjayAoDQorICBWT0lEDQorICApOw0KKw0KK1ZP SUQNCitQbGF0Zm9ybVJlZ2lzdGVyRnZCb290T3B0aW9uICgNCisgIEVGSV9HVUlEICAgICAgICAg ICAgICAgICAgICAgICAgICpGaWxlR3VpZCwNCisgIENIQVIxNiAgICAgICAgICAgICAgICAgICAg ICAgICAgICpEZXNjcmlwdGlvbiwNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAg IEF0dHJpYnV0ZXMNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAg ICAgU3RhdHVzOw0KKyAgSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbklu ZGV4Ow0KKyAgRUZJX0JPT1RfTUFOQUdFUl9MT0FEX09QVElPTiAgICAgIE5ld09wdGlvbjsNCisg IEVGSV9CT09UX01BTkFHRVJfTE9BRF9PUFRJT04gICAgICAqQm9vdE9wdGlvbnM7DQorICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vdE9wdGlvbkNvdW50Ow0KKyAgTUVESUFf RldfVk9MX0ZJTEVQQVRIX0RFVklDRV9QQVRIIEZpbGVOb2RlOw0KKyAgRUZJX0xPQURFRF9JTUFH RV9QUk9UT0NPTCAgICAgICAgICpMb2FkZWRJbWFnZTsNCisgIEVGSV9ERVZJQ0VfUEFUSF9QUk9U T0NPTCAgICAgICAgICAqRGV2aWNlUGF0aDsNCisNCisgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJv dG9jb2wgKA0KKyAgICAgICAgICAgICAgICAgIGdJbWFnZUhhbmRsZSwNCisgICAgICAgICAgICAg ICAgICAmZ0VmaUxvYWRlZEltYWdlUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAgIChW T0lEICoqKSAmTG9hZGVkSW1hZ2UNCisgICAgICAgICAgICAgICAgICApOw0KKyAgQVNTRVJUX0VG SV9FUlJPUiAoU3RhdHVzKTsNCisNCisgIEVmaUluaXRpYWxpemVGd1ZvbERldmljZXBhdGhOb2Rl ICgmRmlsZU5vZGUsIEZpbGVHdWlkKTsNCisgIERldmljZVBhdGggPSBEZXZpY2VQYXRoRnJvbUhh bmRsZSAoTG9hZGVkSW1hZ2UtPkRldmljZUhhbmRsZSk7DQorICBBU1NFUlQgKERldmljZVBhdGgg IT0gTlVMTCk7DQorICBEZXZpY2VQYXRoID0gQXBwZW5kRGV2aWNlUGF0aE5vZGUgKA0KKyAgICAg ICAgICAgICAgICAgRGV2aWNlUGF0aCwNCisgICAgICAgICAgICAgICAgIChFRklfREVWSUNFX1BB VEhfUFJPVE9DT0wgKikgJkZpbGVOb2RlDQorICAgICAgICAgICAgICAgICApOw0KKyAgQVNTRVJU IChEZXZpY2VQYXRoICE9IE5VTEwpOw0KKw0KKyAgU3RhdHVzID0gRWZpQm9vdE1hbmFnZXJJbml0 aWFsaXplTG9hZE9wdGlvbiAoDQorICAgICAgICAgICAgICZOZXdPcHRpb24sDQorICAgICAgICAg ICAgIExvYWRPcHRpb25OdW1iZXJVbmFzc2lnbmVkLA0KKyAgICAgICAgICAgICBMb2FkT3B0aW9u VHlwZUJvb3QsDQorICAgICAgICAgICAgIEF0dHJpYnV0ZXMsDQorICAgICAgICAgICAgIERlc2Ny aXB0aW9uLA0KKyAgICAgICAgICAgICBEZXZpY2VQYXRoLA0KKyAgICAgICAgICAgICBOVUxMLA0K KyAgICAgICAgICAgICAwDQorICAgICAgICAgICAgICk7DQorICBBU1NFUlRfRUZJX0VSUk9SIChT dGF0dXMpOw0KKyAgRnJlZVBvb2wgKERldmljZVBhdGgpOw0KKw0KKyAgQm9vdE9wdGlvbnMgPSBF ZmlCb290TWFuYWdlckdldExvYWRPcHRpb25zICgNCisgICAgICAgICAgICAgICAgICAmQm9vdE9w dGlvbkNvdW50LCBMb2FkT3B0aW9uVHlwZUJvb3QNCisgICAgICAgICAgICAgICAgICApOw0KKw0K KyAgT3B0aW9uSW5kZXggPSBFZmlCb290TWFuYWdlckZpbmRMb2FkT3B0aW9uICgNCisgICAgICAg ICAgICAgICAgICAmTmV3T3B0aW9uLCBCb290T3B0aW9ucywgQm9vdE9wdGlvbkNvdW50DQorICAg ICAgICAgICAgICAgICAgKTsNCisNCisgIGlmIChPcHRpb25JbmRleCA9PSAtMSkgew0KKyAgICBT dGF0dXMgPSBFZmlCb290TWFuYWdlckFkZExvYWRPcHRpb25WYXJpYWJsZSAoJk5ld09wdGlvbiwg TUFYX1VJTlROKTsNCisgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCisgIH0NCisgIEVm aUJvb3RNYW5hZ2VyRnJlZUxvYWRPcHRpb24gKCZOZXdPcHRpb24pOw0KKyAgRWZpQm9vdE1hbmFn ZXJGcmVlTG9hZE9wdGlvbnMgKEJvb3RPcHRpb25zLCBCb290T3B0aW9uQ291bnQpOw0KK30NCisN CisvKioNCisgIFJlbW92ZSBhbGwgTWVtb3J5TWFwcGVkKC4uLikvRnZGaWxlKC4uLikgYW5kIEZ2 KC4uLikvRnZGaWxlKC4uLikgYm9vdCBvcHRpb25zDQorICB3aG9zZSBkZXZpY2UgcGF0aHMgZG8g bm90IHJlc29sdmUgZXhhY3RseSB0byBhbiBGdkZpbGUgaW4gdGhlIHN5c3RlbS4NCisNCisgIFRo aXMgcmVtb3ZlcyBhbnkgYm9vdCBvcHRpb25zIHRoYXQgcG9pbnQgdG8gYmluYXJpZXMgYnVpbHQg aW50byB0aGUgZmlybXdhcmUNCisgIGFuZCBoYXZlIGJlY29tZSBzdGFsZSBkdWUgdG8gYW55IG9m IHRoZSBmb2xsb3dpbmc6DQorICAtIERYRUZWJ3MgYmFzZSBhZGRyZXNzIG9yIHNpemUgY2hhbmdl ZCAoaGlzdG9yaWNhbCksDQorICAtIERYRUZWJ3MgRnZOYW1lR3VpZCBjaGFuZ2VkLA0KKyAgLSB0 aGUgRklMRV9HVUlEIG9mIHRoZSBwb2ludGVkLXRvIGJpbmFyeSBjaGFuZ2VkLA0KKyAgLSB0aGUg cmVmZXJlbmNlZCBiaW5hcnkgaXMgbm8gbG9uZ2VyIGJ1aWx0IGludG8gdGhlIGZpcm13YXJlLg0K Kw0KKyAgRWZpQm9vdE1hbmFnZXJGaW5kTG9hZE9wdGlvbigpIHVzZWQgaW4gUGxhdGZvcm1SZWdp c3RlckZ2Qm9vdE9wdGlvbigpIG9ubHkNCisgIGF2b2lkcyBleGFjdCBkdXBsaWNhdGVzLg0KKyoq Lw0KK1ZPSUQNCitSZW1vdmVTdGFsZUZ2RmlsZU9wdGlvbnMgKA0KKyAgVk9JRA0KKyAgKQ0KK3sN CisgIEVGSV9CT09UX01BTkFHRVJfTE9BRF9PUFRJT04gKkJvb3RPcHRpb25zOw0KKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICBCb290T3B0aW9uQ291bnQ7DQorICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgIEluZGV4Ow0KKw0KKyAgQm9vdE9wdGlvbnMgPSBFZmlCb290TWFuYWdl ckdldExvYWRPcHRpb25zICgmQm9vdE9wdGlvbkNvdW50LA0KKyAgICAgICAgICAgICAgICAgIExv YWRPcHRpb25UeXBlQm9vdCk7DQorDQorICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBCb290T3B0 aW9uQ291bnQ7ICsrSW5kZXgpIHsNCisgICAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICpOb2Rl MSwgKk5vZGUyLCAqU2VhcmNoTm9kZTsNCisgICAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgIFN0 YXR1czsNCisgICAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgIEZ2SGFuZGxlOw0KKw0KKyAgICAv Lw0KKyAgICAvLyBJZiB0aGUgZGV2aWNlIHBhdGggc3RhcnRzIHdpdGggbmVpdGhlciBNZW1vcnlN YXBwZWQoLi4uKSBub3IgRnYoLi4uKSwNCisgICAgLy8gdGhlbiBrZWVwIHRoZSBib290IG9wdGlv bi4NCisgICAgLy8NCisgICAgTm9kZTEgPSBCb290T3B0aW9uc1tJbmRleF0uRmlsZVBhdGg7DQor ICAgIGlmICghKERldmljZVBhdGhUeXBlIChOb2RlMSkgPT0gSEFSRFdBUkVfREVWSUNFX1BBVEgg JiYNCisgICAgICAgICAgRGV2aWNlUGF0aFN1YlR5cGUgKE5vZGUxKSA9PSBIV19NRU1NQVBfRFAp ICYmDQorICAgICAgICAhKERldmljZVBhdGhUeXBlIChOb2RlMSkgPT0gTUVESUFfREVWSUNFX1BB VEggJiYNCisgICAgICAgICAgRGV2aWNlUGF0aFN1YlR5cGUgKE5vZGUxKSA9PSBNRURJQV9QSVdH X0ZXX1ZPTF9EUCkpIHsNCisgICAgICBjb250aW51ZTsNCisgICAgfQ0KKw0KKyAgICAvLw0KKyAg ICAvLyBJZiB0aGUgc2Vjb25kIGRldmljZSBwYXRoIG5vZGUgaXMgbm90IEZ2RmlsZSguLi4pLCB0 aGVuIGtlZXAgdGhlIGJvb3QNCisgICAgLy8gb3B0aW9uLg0KKyAgICAvLw0KKyAgICBOb2RlMiA9 IE5leHREZXZpY2VQYXRoTm9kZSAoTm9kZTEpOw0KKyAgICBpZiAoRGV2aWNlUGF0aFR5cGUgKE5v ZGUyKSAhPSBNRURJQV9ERVZJQ0VfUEFUSCB8fA0KKyAgICAgICAgRGV2aWNlUGF0aFN1YlR5cGUg KE5vZGUyKSAhPSBNRURJQV9QSVdHX0ZXX0ZJTEVfRFApIHsNCisgICAgICBjb250aW51ZTsNCisg ICAgfQ0KKw0KKyAgICAvLw0KKyAgICAvLyBMb2NhdGUgdGhlIEZpcm13YXJlIFZvbHVtZTIgcHJv dG9jb2wgaW5zdGFuY2UgdGhhdCBpcyBkZW5vdGVkIGJ5IHRoZQ0KKyAgICAvLyBib290IG9wdGlv bi4gSWYgdGhpcyBsb29rdXAgZmFpbHMgKGkuZS4sIHRoZSBib290IG9wdGlvbiByZWZlcmVuY2Vz IGENCisgICAgLy8gZmlybXdhcmUgdm9sdW1lIHRoYXQgZG9lc24ndCBleGlzdCksIHRoZW4gd2Un bGwgcHJvY2VlZCB0byBkZWxldGUgdGhlDQorICAgIC8vIGJvb3Qgb3B0aW9uLg0KKyAgICAvLw0K KyAgICBTZWFyY2hOb2RlID0gTm9kZTE7DQorICAgIFN0YXR1cyA9IGdCUy0+TG9jYXRlRGV2aWNl UGF0aCAoJmdFZmlGaXJtd2FyZVZvbHVtZTJQcm90b2NvbEd1aWQsDQorICAgICAgICAgICAgICAg ICAgICAmU2VhcmNoTm9kZSwgJkZ2SGFuZGxlKTsNCisNCisgICAgaWYgKCFFRklfRVJST1IgKFN0 YXR1cykpIHsNCisgICAgICAvLw0KKyAgICAgIC8vIFRoZSBmaXJtd2FyZSB2b2x1bWUgd2FzIGZv dW5kOyBub3cgbGV0J3Mgc2VlIGlmIGl0IGNvbnRhaW5zIHRoZSBGdkZpbGUNCisgICAgICAvLyBp ZGVudGlmaWVkIGJ5IEdVSUQuDQorICAgICAgLy8NCisgICAgICBFRklfRklSTVdBUkVfVk9MVU1F Ml9QUk9UT0NPTCAgICAgKkZ2UHJvdG9jb2w7DQorICAgICAgTUVESUFfRldfVk9MX0ZJTEVQQVRI X0RFVklDRV9QQVRIICpGdkZpbGVOb2RlOw0KKyAgICAgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBCdWZmZXJTaXplOw0KKyAgICAgIEVGSV9GVl9GSUxFVFlQRSAgICAgICAgICAg ICAgICAgICBGb3VuZFR5cGU7DQorICAgICAgRUZJX0ZWX0ZJTEVfQVRUUklCVVRFUyAgICAgICAg ICAgIEZpbGVBdHRyaWJ1dGVzOw0KKyAgICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBdXRoZW50aWNhdGlvblN0YXR1czsNCisNCisgICAgICBTdGF0dXMgPSBnQlMtPkhhbmRs ZVByb3RvY29sIChGdkhhbmRsZSwgJmdFZmlGaXJtd2FyZVZvbHVtZTJQcm90b2NvbEd1aWQsDQor ICAgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZGdlByb3RvY29sKTsNCisgICAgICBBU1NF UlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KKw0KKyAgICAgIEZ2RmlsZU5vZGUgPSAoTUVESUFfRldf Vk9MX0ZJTEVQQVRIX0RFVklDRV9QQVRIICopTm9kZTI7DQorICAgICAgLy8NCisgICAgICAvLyBC dWZmZXI9PU5VTEwgbWVhbnMgd2UgcmVxdWVzdCBtZXRhZGF0YSBvbmx5OiBCdWZmZXJTaXplLCBG b3VuZFR5cGUsDQorICAgICAgLy8gRmlsZUF0dHJpYnV0ZXMuDQorICAgICAgLy8NCisgICAgICBT dGF0dXMgPSBGdlByb3RvY29sLT5SZWFkRmlsZSAoDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGdlByb3RvY29sLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZ2RmlsZU5v ZGUtPkZ2RmlsZU5hbWUsIC8vIE5hbWVHdWlkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLCAgICAgICAgICAgICAgICAgICAgLy8gQnVmZmVyDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmQnVmZmVyU2l6ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZG b3VuZFR5cGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRmlsZUF0dHJpYnV0ZXMs DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQXV0aGVudGljYXRpb25TdGF0dXMNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQorICAgICAgaWYgKCFFRklfRVJST1IgKFN0 YXR1cykpIHsNCisgICAgICAgIC8vDQorICAgICAgICAvLyBUaGUgRnZGaWxlIHdhcyBmb3VuZC4g S2VlcCB0aGUgYm9vdCBvcHRpb24uDQorICAgICAgICAvLw0KKyAgICAgICAgY29udGludWU7DQor ICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8vDQorICAgIC8vIERlbGV0ZSB0aGUgYm9vdCBvcHRp b24uDQorICAgIC8vDQorICAgIFN0YXR1cyA9IEVmaUJvb3RNYW5hZ2VyRGVsZXRlTG9hZE9wdGlv blZhcmlhYmxlICgNCisgICAgICAgICAgICAgICBCb290T3B0aW9uc1tJbmRleF0uT3B0aW9uTnVt YmVyLCBMb2FkT3B0aW9uVHlwZUJvb3QpOw0KKyAgICBERUJVR19DT0RFICgNCisgICAgICBDSEFS MTYgKkRldmljZVBhdGhTdHJpbmc7DQorDQorICAgICAgRGV2aWNlUGF0aFN0cmluZyA9IENvbnZl cnREZXZpY2VQYXRoVG9UZXh0KEJvb3RPcHRpb25zW0luZGV4XS5GaWxlUGF0aCwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBGQUxTRSwgRkFMU0UpOw0KKyAgICAgIERFQlVHICgoDQorICAg ICAgICBFRklfRVJST1IgKFN0YXR1cykgPyBFRklfRF9XQVJOIDogRUZJX0RfVkVSQk9TRSwNCisg ICAgICAgICIlYTogcmVtb3Zpbmcgc3RhbGUgQm9vdCMlMDR4ICVzOiAlclxuIiwNCisgICAgICAg IF9fRlVOQ1RJT05fXywNCisgICAgICAgIChVSU5UMzIpQm9vdE9wdGlvbnNbSW5kZXhdLk9wdGlv bk51bWJlciwNCisgICAgICAgIERldmljZVBhdGhTdHJpbmcgPT0gTlVMTCA/IEwiPHVuYXZhaWxh YmxlPiIgOiBEZXZpY2VQYXRoU3RyaW5nLA0KKyAgICAgICAgU3RhdHVzDQorICAgICAgICApKTsN CisgICAgICBpZiAoRGV2aWNlUGF0aFN0cmluZyAhPSBOVUxMKSB7DQorICAgICAgICBGcmVlUG9v bCAoRGV2aWNlUGF0aFN0cmluZyk7DQorICAgICAgfQ0KKyAgICAgICk7DQorICB9DQorDQorICBF ZmlCb290TWFuYWdlckZyZWVMb2FkT3B0aW9ucyAoQm9vdE9wdGlvbnMsIEJvb3RPcHRpb25Db3Vu dCk7DQorfQ0KKw0KK1ZPSUQNCitQbGF0Zm9ybVJlZ2lzdGVyT3B0aW9uc0FuZEtleXMgKA0KKyAg Vk9JRA0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0K KyAgRUZJX0lOUFVUX0tFWSAgICAgICAgICAgICAgICBFbnRlcjsNCisgIEVGSV9JTlBVVF9LRVkg ICAgICAgICAgICAgICAgRjI7DQorICBFRklfSU5QVVRfS0VZICAgICAgICAgICAgICAgIEVzYzsN CisgIEVGSV9CT09UX01BTkFHRVJfTE9BRF9PUFRJT04gQm9vdE9wdGlvbjsNCisNCisgIC8vDQor ICAvLyBSZWdpc3RlciBFTlRFUiBhcyBDT05USU5VRSBrZXkNCisgIC8vDQorICBFbnRlci5TY2Fu Q29kZSAgICA9IFNDQU5fTlVMTDsNCisgIEVudGVyLlVuaWNvZGVDaGFyID0gQ0hBUl9DQVJSSUFH RV9SRVRVUk47DQorICBTdGF0dXMgPSBFZmlCb290TWFuYWdlclJlZ2lzdGVyQ29udGludWVLZXlP cHRpb24gKDAsICZFbnRlciwgTlVMTCk7DQorICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0K Kw0KKyAgLy8NCisgIC8vIE1hcCBGMiB0byBCb290IE1hbmFnZXIgTWVudQ0KKyAgLy8NCisgIEYy LlNjYW5Db2RlICAgICA9IFNDQU5fRjI7DQorICBGMi5Vbmljb2RlQ2hhciAgPSBDSEFSX05VTEw7 DQorICBFc2MuU2NhbkNvZGUgICAgPSBTQ0FOX0VTQzsNCisgIEVzYy5Vbmljb2RlQ2hhciA9IENI QVJfTlVMTDsNCisgIFN0YXR1cyA9IEVmaUJvb3RNYW5hZ2VyR2V0Qm9vdE1hbmFnZXJNZW51ICgm Qm9vdE9wdGlvbik7DQorICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KKyAgU3RhdHVzID0g RWZpQm9vdE1hbmFnZXJBZGRLZXlPcHRpb25WYXJpYWJsZSAoDQorICAgICAgICAgICAgIE5VTEws IChVSU5UMTYpIEJvb3RPcHRpb24uT3B0aW9uTnVtYmVyLCAwLCAmRjIsIE5VTEwNCisgICAgICAg ICAgICAgKTsNCisgIEFTU0VSVCAoU3RhdHVzID09IEVGSV9TVUNDRVNTIHx8IFN0YXR1cyA9PSBF RklfQUxSRUFEWV9TVEFSVEVEKTsNCisgIFN0YXR1cyA9IEVmaUJvb3RNYW5hZ2VyQWRkS2V5T3B0 aW9uVmFyaWFibGUgKA0KKyAgICAgICAgICAgICBOVUxMLCAoVUlOVDE2KSBCb290T3B0aW9uLk9w dGlvbk51bWJlciwgMCwgJkVzYywgTlVMTA0KKyAgICAgICAgICAgICApOw0KKyAgQVNTRVJUIChT dGF0dXMgPT0gRUZJX1NVQ0NFU1MgfHwgU3RhdHVzID09IEVGSV9BTFJFQURZX1NUQVJURUQpOw0K K30NCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorQ29ubmVjdFJvb3RCcmlkZ2UgKA0KKyAgSU4g RUZJX0hBTkRMRSAgUm9vdEJyaWRnZUhhbmRsZSwNCisgIElOIFZPSUQgICAgICAgICpJbnN0YW5j ZSwNCisgIElOIFZPSUQgICAgICAgICpDb250ZXh0DQorICApOw0KKw0KK1NUQVRJQw0KK1ZPSUQN CitTYXZlUzNCb290U2NyaXB0ICgNCisgIFZPSUQNCisgICk7DQorDQorLy8NCisvLyBCRFMgUGxh dGZvcm0gRnVuY3Rpb25zDQorLy8NCisvKioNCisgIERvIHRoZSBwbGF0Zm9ybSBpbml0LCBjYW4g YmUgY3VzdG9taXplZCBieSBPRU0vSUJWDQorDQorICBQb3NzaWJsZSB0aGluZ3MgdGhhdCBjYW4g YmUgZG9uZSBpbiBQbGF0Zm9ybUJvb3RNYW5hZ2VyQmVmb3JlQ29uc29sZToNCisNCisgID4gVXBk YXRlIGNvbnNvbGUgdmFyaWFibGU6IDEuIGluY2x1ZGUgaG90LXBsdWcgZGV2aWNlczsNCisgID4g ICAgICAgICAgICAgICAgICAgICAgICAgIDIuIENsZWFyIENvbkluIGFuZCBhZGQgU09MIGZvciBB TVQNCisgID4gUmVnaXN0ZXIgbmV3IERyaXZlciMjIyMgb3IgQm9vdCMjIyMNCisgID4gUmVnaXN0 ZXIgbmV3IEtleSMjIyM6IGUuZy46IEYxMg0KKyAgPiBTaWduYWwgUmVhZHlUb0xvY2sgZXZlbnQN CisgID4gQXV0aGVudGljYXRpb24gYWN0aW9uOiAxLiBjb25uZWN0IEF1dGggZGV2aWNlczsNCisg ID4gICAgICAgICAgICAgICAgICAgICAgICAyLiBJZGVudGlmeSBhdXRvIGxvZ29uIHVzZXIuDQor KiovDQorVk9JRA0KK0VGSUFQSQ0KK1BsYXRmb3JtQm9vdE1hbmFnZXJCZWZvcmVDb25zb2xlICgN CisgIFZPSUQNCisgICkNCit7DQorLy8gIEVGSV9IQU5ETEUgICAgSGFuZGxlOw0KKy8vICBFRklf U1RBVFVTICAgIFN0YXR1czsNCisNCisgIERFQlVHICgoRUZJX0RfSU5GTywgIlBsYXRmb3JtQm9v dE1hbmFnZXJCZWZvcmVDb25zb2xlXG4iKSk7DQorICBJbnN0YWxsRGV2aWNlUGF0aENhbGxiYWNr ICgpOw0KKw0KKyAgVmlzaXRBbGxJbnN0YW5jZXNPZlByb3RvY29sICgmZ0VmaVBjaVJvb3RCcmlk Z2VJb1Byb3RvY29sR3VpZCwNCisgICAgQ29ubmVjdFJvb3RCcmlkZ2UsIE5VTEwpOw0KKyAgLy8N CisgIC8vIEVuYWJsZSBMUEMNCisgIC8vDQorICBQY2lPcjE2KFBPV0VSX01HTVRfUkVHSVNURVJf SUNIMTAoMHgwNCksDQorICAgICAgICAgICBCSVQwIHwgQklUMSB8IEJJVDIpOw0KKyAgLy8NCisg IC8vIFdlIGNhbid0IHNpZ25hbCBFbmQtb2YtRHhlIGVhcmxpZXIgdGhhbiB0aGlzLiBOYW1lbHks IEVuZC1vZi1EeGUgdHJpZ2dlcnMNCisgIC8vIHRoZSBwcmVwYXJhdGlvbiBvZiBTMyBzeXN0ZW0g aW5mb3JtYXRpb24uIFRoYXQgbG9naWMgaGFzIGEgaGFyZCBkZXBlbmRlbmN5DQorICAvLyBvbiB0 aGUgcHJlc2VuY2Ugb2YgdGhlIEZBQ1MgQUNQSSB0YWJsZS4gU2luY2Ugb3VyIEFDUEkgdGFibGVz IGFyZSBvbmx5DQorICAvLyBpbnN0YWxsZWQgYWZ0ZXIgUENJIGVudW1lcmF0aW9uIGNvbXBsZXRl cywgd2UgbXVzdCBub3QgdHJpZ2dlciB0aGUgUzMgc2F2ZQ0KKyAgLy8gZWFybGllciwgaGVuY2Ug d2UgY2FuJ3Qgc2lnbmFsIEVuZC1vZi1EeGUgZWFybGllci4NCisgIC8vDQorICBFZmlFdmVudEdy b3VwU2lnbmFsICgmZ0VmaUVuZE9mRHhlRXZlbnRHcm91cEd1aWQpOw0KKw0KKyAgUGxhdGZvcm1J bml0aWFsaXplQ29uc29sZSAoZ1BsYXRmb3JtQ29uc29sZSk7DQorDQorICBQbGF0Zm9ybVJlZ2lz dGVyT3B0aW9uc0FuZEtleXMgKCk7DQorfQ0KKw0KKw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitD b25uZWN0Um9vdEJyaWRnZSAoDQorICBJTiBFRklfSEFORExFICBSb290QnJpZGdlSGFuZGxlLA0K KyAgSU4gVk9JRCAgICAgICAgKkluc3RhbmNlLA0KKyAgSU4gVk9JRCAgICAgICAgKkNvbnRleHQN CisgICkNCit7DQorICBFRklfU1RBVFVTIFN0YXR1czsNCisNCisgIC8vDQorICAvLyBNYWtlIHRo ZSBQQ0kgYnVzIGRyaXZlciBjb25uZWN0IHRoZSByb290IGJyaWRnZSwgbm9uLXJlY3Vyc2l2ZWx5 LiBUaGlzDQorICAvLyB3aWxsIHByb2R1Y2UgYSBudW1iZXIgb2YgY2hpbGQgaGFuZGxlcyB3aXRo IFBjaUlvIG9uIHRoZW0uDQorICAvLw0KKyAgU3RhdHVzID0gZ0JTLT5Db25uZWN0Q29udHJvbGxl ciAoDQorICAgICAgICAgICAgICAgICAgUm9vdEJyaWRnZUhhbmRsZSwgLy8gQ29udHJvbGxlckhh bmRsZQ0KKyAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgIC8vIERyaXZlckltYWdl SGFuZGxlDQorICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgLy8gUmVtYWluaW5n RGV2aWNlUGF0aCAtLSBwcm9kdWNlIGFsbA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8vICAgY2hpbGRyZW4NCisgICAgICAgICAgICAgICAgICBGQUxTRSAgICAgICAgICAg ICAvLyBSZWN1cnNpdmUNCisgICAgICAgICAgICAgICAgICApOw0KKyAgcmV0dXJuIFN0YXR1czsN Cit9DQorDQorDQorLyoqDQorICBBZGQgSXNhS2V5Ym9hcmQgdG8gQ29uSW47IGFkZCBJc2FTZXJp YWwgdG8gQ29uT3V0LCBDb25JbiwgRXJyT3V0Lg0KKw0KKyAgQHBhcmFtW2luXSBEZXZpY2VIYW5k bGUgIEhhbmRsZSBvZiB0aGUgTFBDIEJyaWRnZSBkZXZpY2UuDQorDQorICBAcmV0dmFsIEVGSV9T VUNDRVNTICBDb25zb2xlIGRldmljZXMgb24gdGhlIExQQyBicmlkZ2UgaGF2ZSBiZWVuIGFkZGVk IHRvDQorICAgICAgICAgICAgICAgICAgICAgICBDb25PdXQsIENvbkluLCBhbmQgRXJyT3V0Lg0K Kw0KKyAgQHJldHVybiAgICAgICAgICAgICAgRXJyb3IgY29kZXMsIGR1ZSB0byBFRklfREVWSUNF X1BBVEhfUFJPVE9DT0wgbWlzc2luZw0KKyAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBEZXZp Y2VIYW5kbGUuDQorKiovDQorRUZJX1NUQVRVUw0KK1ByZXBhcmVMcGNCcmlkZ2VEZXZpY2VQYXRo ICgNCisgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgRGV2aWNlSGFuZGxlDQorICApDQor ew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklfREVWSUNFX1BB VEhfUFJPVE9DT0wgICpEZXZpY2VQYXRoOw0KKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAq VGVtcERldmljZVBhdGg7DQorICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICpEZXZQYXRoU3Ry Ow0KKw0KKyAgRGV2aWNlUGF0aCA9IE5VTEw7DQorICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3Rv Y29sICgNCisgICAgICAgICAgICAgICAgICBEZXZpY2VIYW5kbGUsDQorICAgICAgICAgICAgICAg ICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAgIChWT0lE KikmRGV2aWNlUGF0aA0KKyAgICAgICAgICAgICAgICAgICk7DQorICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorICBUZW1wRGV2aWNlUGF0aCA9 IERldmljZVBhdGg7DQorDQorICAvLw0KKyAgLy8gUmVnaXN0ZXIgS2V5Ym9hcmQNCisgIC8vDQor ICBEZXZpY2VQYXRoID0gQXBwZW5kRGV2aWNlUGF0aE5vZGUgKERldmljZVBhdGgsIChFRklfREVW SUNFX1BBVEhfUFJPVE9DT0wgKikmZ1BucFBzMktleWJvYXJkRGV2aWNlTm9kZSk7DQorDQorICBF ZmlCb290TWFuYWdlclVwZGF0ZUNvbnNvbGVWYXJpYWJsZSAoQ29uSW4sIERldmljZVBhdGgsIE5V TEwpOw0KKw0KKyAgLy8NCisgIC8vIFJlZ2lzdGVyIENPTTENCisgIC8vDQorICBEZXZpY2VQYXRo ID0gVGVtcERldmljZVBhdGg7DQorICBnUG5wMTY1NTBDb21Qb3J0RGV2aWNlTm9kZS5VSUQgPSAw Ow0KKw0KKyAgRGV2aWNlUGF0aCA9IEFwcGVuZERldmljZVBhdGhOb2RlIChEZXZpY2VQYXRoLCAo RUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICopJmdQbnAxNjU1MENvbVBvcnREZXZpY2VOb2RlKTsN CisgIERldmljZVBhdGggPSBBcHBlbmREZXZpY2VQYXRoTm9kZSAoRGV2aWNlUGF0aCwgKEVGSV9E RVZJQ0VfUEFUSF9QUk9UT0NPTCAqKSZnVWFydERldmljZU5vZGUpOw0KKyAgRGV2aWNlUGF0aCA9 IEFwcGVuZERldmljZVBhdGhOb2RlIChEZXZpY2VQYXRoLCAoRUZJX0RFVklDRV9QQVRIX1BST1RP Q09MICopJmdUZXJtaW5hbFR5cGVEZXZpY2VOb2RlKTsNCisNCisgIC8vDQorICAvLyBQcmludCBE ZXZpY2UgUGF0aA0KKyAgLy8NCisgIERldlBhdGhTdHIgPSBDb252ZXJ0RGV2aWNlUGF0aFRvVGV4 dCAoRGV2aWNlUGF0aCwgRkFMU0UsIEZBTFNFKTsNCisgIGlmIChEZXZQYXRoU3RyICE9IE5VTEwp IHsNCisgICAgREVCVUcoKA0KKyAgICAgIEVGSV9EX0lORk8sDQorICAgICAgIkJkc1BsYXRmb3Jt LmMrJWQ6IENPTSVkIERldlBhdGg6ICVzXG4iLA0KKyAgICAgIF9fTElORV9fLA0KKyAgICAgIGdQ bnAxNjU1MENvbVBvcnREZXZpY2VOb2RlLlVJRCArIDEsDQorICAgICAgRGV2UGF0aFN0cg0KKyAg ICAgICkpOw0KKyAgICBGcmVlUG9vbChEZXZQYXRoU3RyKTsNCisgIH0NCisNCisgIEVmaUJvb3RN YW5hZ2VyVXBkYXRlQ29uc29sZVZhcmlhYmxlIChDb25PdXQsIERldmljZVBhdGgsIE5VTEwpOw0K KyAgRWZpQm9vdE1hbmFnZXJVcGRhdGVDb25zb2xlVmFyaWFibGUgKENvbkluLCBEZXZpY2VQYXRo LCBOVUxMKTsNCisgIEVmaUJvb3RNYW5hZ2VyVXBkYXRlQ29uc29sZVZhcmlhYmxlIChFcnJPdXQs IERldmljZVBhdGgsIE5VTEwpOw0KKw0KKyAgLy8NCisgIC8vIFJlZ2lzdGVyIENPTTINCisgIC8v DQorICBEZXZpY2VQYXRoID0gVGVtcERldmljZVBhdGg7DQorICBnUG5wMTY1NTBDb21Qb3J0RGV2 aWNlTm9kZS5VSUQgPSAxOw0KKw0KKyAgRGV2aWNlUGF0aCA9IEFwcGVuZERldmljZVBhdGhOb2Rl IChEZXZpY2VQYXRoLCAoRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICopJmdQbnAxNjU1MENvbVBv cnREZXZpY2VOb2RlKTsNCisgIERldmljZVBhdGggPSBBcHBlbmREZXZpY2VQYXRoTm9kZSAoRGV2 aWNlUGF0aCwgKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqKSZnVWFydERldmljZU5vZGUpOw0K KyAgRGV2aWNlUGF0aCA9IEFwcGVuZERldmljZVBhdGhOb2RlIChEZXZpY2VQYXRoLCAoRUZJX0RF VklDRV9QQVRIX1BST1RPQ09MICopJmdUZXJtaW5hbFR5cGVEZXZpY2VOb2RlKTsNCisNCisgIC8v DQorICAvLyBQcmludCBEZXZpY2UgUGF0aA0KKyAgLy8NCisgIERldlBhdGhTdHIgPSBDb252ZXJ0 RGV2aWNlUGF0aFRvVGV4dCAoRGV2aWNlUGF0aCwgRkFMU0UsIEZBTFNFKTsNCisgIGlmIChEZXZQ YXRoU3RyICE9IE5VTEwpIHsNCisgICAgREVCVUcoKA0KKyAgICAgIEVGSV9EX0lORk8sDQorICAg ICAgIkJkc1BsYXRmb3JtLmMrJWQ6IENPTSVkIERldlBhdGg6ICVzXG4iLA0KKyAgICAgIF9fTElO RV9fLA0KKyAgICAgIGdQbnAxNjU1MENvbVBvcnREZXZpY2VOb2RlLlVJRCArIDEsDQorICAgICAg RGV2UGF0aFN0cg0KKyAgICAgICkpOw0KKyAgICBGcmVlUG9vbChEZXZQYXRoU3RyKTsNCisgIH0N CisNCisgIEVmaUJvb3RNYW5hZ2VyVXBkYXRlQ29uc29sZVZhcmlhYmxlIChDb25PdXQsIERldmlj ZVBhdGgsIE5VTEwpOw0KKyAgRWZpQm9vdE1hbmFnZXJVcGRhdGVDb25zb2xlVmFyaWFibGUgKENv bkluLCBEZXZpY2VQYXRoLCBOVUxMKTsNCisgIEVmaUJvb3RNYW5hZ2VyVXBkYXRlQ29uc29sZVZh cmlhYmxlIChFcnJPdXQsIERldmljZVBhdGgsIE5VTEwpOw0KKw0KKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KK30NCisNCitFRklfU1RBVFVTDQorR2V0R29wRGV2aWNlUGF0aCAoDQorICAgSU4gIEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqUGNpRGV2aWNlUGF0aCwNCisgICBPVVQgRUZJX0RFVklD RV9QQVRIX1BST1RPQ09MICoqR29wRGV2aWNlUGF0aA0KKyAgICkNCit7DQorICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICAgICBTdGF0dXM7DQorICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgIFBjaURl dmljZUhhbmRsZTsNCisgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICAgKlRlbXBEZXZp Y2VQYXRoOw0KKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAqVGVtcFBjaURldmlj ZVBhdGg7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdvcEhhbmRsZUNvdW50 Ow0KKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAqR29wSGFuZGxlQnVmZmVyOw0K Kw0KKyAgaWYgKFBjaURldmljZVBhdGggPT0gTlVMTCB8fCBHb3BEZXZpY2VQYXRoID09IE5VTEwp IHsNCisgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisNCisgIC8vDQor ICAvLyBJbml0aWFsaXplIHRoZSBHb3BEZXZpY2VQYXRoIHRvIGJlIFBjaURldmljZVBhdGgNCisg IC8vDQorICAqR29wRGV2aWNlUGF0aCAgICA9IFBjaURldmljZVBhdGg7DQorICBUZW1wUGNpRGV2 aWNlUGF0aCA9IFBjaURldmljZVBhdGg7DQorDQorICBTdGF0dXMgPSBnQlMtPkxvY2F0ZURldmlj ZVBhdGggKA0KKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwN CisgICAgICAgICAgICAgICAgICAmVGVtcFBjaURldmljZVBhdGgsDQorICAgICAgICAgICAgICAg ICAgJlBjaURldmljZUhhbmRsZQ0KKyAgICAgICAgICAgICAgICAgICk7DQorICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICAvLw0KKyAg Ly8gVHJ5IHRvIGNvbm5lY3QgdGhpcyBoYW5kbGUsIHNvIHRoYXQgR09QIGRyaXZlciBjb3VsZCBz dGFydCBvbiB0aGlzDQorICAvLyBkZXZpY2UgYW5kIGNyZWF0ZSBjaGlsZCBoYW5kbGVzIHdpdGgg R3JhcGhpY3NPdXRwdXQgUHJvdG9jb2wgaW5zdGFsbGVkDQorICAvLyBvbiB0aGVtLCB0aGVuIHdl IGdldCBkZXZpY2UgcGF0aHMgb2YgdGhlc2UgY2hpbGQgaGFuZGxlcyBhbmQgc2VsZWN0DQorICAv LyB0aGVtIGFzIHBvc3NpYmxlIGNvbnNvbGUgZGV2aWNlLg0KKyAgLy8NCisgIGdCUy0+Q29ubmVj dENvbnRyb2xsZXIgKFBjaURldmljZUhhbmRsZSwgTlVMTCwgTlVMTCwgRkFMU0UpOw0KKw0KKyAg U3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0KKyAgICAgICAgICAgICAgICAgIEJ5 UHJvdG9jb2wsDQorICAgICAgICAgICAgICAgICAgJmdFZmlHcmFwaGljc091dHB1dFByb3RvY29s R3VpZCwNCisgICAgICAgICAgICAgICAgICBOVUxMLA0KKyAgICAgICAgICAgICAgICAgICZHb3BI YW5kbGVDb3VudCwNCisgICAgICAgICAgICAgICAgICAmR29wSGFuZGxlQnVmZmVyDQorICAgICAg ICAgICAgICAgICAgKTsNCisgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIC8vDQor ICAgIC8vIEFkZCBhbGwgdGhlIGNoaWxkIGhhbmRsZXMgYXMgcG9zc2libGUgQ29uc29sZSBEZXZp Y2UNCisgICAgLy8NCisgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgR29wSGFuZGxlQ291bnQ7 IEluZGV4KyspIHsNCisgICAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sIChHb3BIYW5k bGVCdWZmZXJbSW5kZXhdLCAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsIChWT0lEKikmVGVt cERldmljZVBhdGgpOw0KKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICAg IGNvbnRpbnVlOw0KKyAgICAgIH0NCisgICAgICBpZiAoQ29tcGFyZU1lbSAoDQorICAgICAgICAg ICAgUGNpRGV2aWNlUGF0aCwNCisgICAgICAgICAgICBUZW1wRGV2aWNlUGF0aCwNCisgICAgICAg ICAgICBHZXREZXZpY2VQYXRoU2l6ZSAoUGNpRGV2aWNlUGF0aCkgLSBFTkRfREVWSUNFX1BBVEhf TEVOR1RIDQorICAgICAgICAgICAgKSA9PSAwKSB7DQorICAgICAgICAvLw0KKyAgICAgICAgLy8g SW4gY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgd2Ugb25seSBlbmFibGUgb25lIG9mIHRoZSBjaGls ZCBoYW5kbGVzDQorICAgICAgICAvLyBhcyBjb25zb2xlIGRldmljZSwgaS5lLiBzb3RyZSBvbmUg b2YgdGhlIGNoaWxkIGhhbmRsZSdzIGRldmljZQ0KKyAgICAgICAgLy8gcGF0aCB0byB2YXJpYWJs ZSAiQ29uT3V0Ig0KKyAgICAgICAgLy8gSW4gZnV0dXJlLCB3ZSBjb3VsZCBzZWxlY3QgYWxsIGNo aWxkIGhhbmRsZXMgdG8gYmUgY29uc29sZSBkZXZpY2UNCisgICAgICAgIC8vDQorDQorICAgICAg ICAqR29wRGV2aWNlUGF0aCA9IFRlbXBEZXZpY2VQYXRoOw0KKw0KKyAgICAgICAgLy8NCisgICAg ICAgIC8vIERlbGV0ZSB0aGUgUENJIGRldmljZSdzIHBhdGggdGhhdCBhZGRlZCBieQ0KKyAgICAg ICAgLy8gR2V0UGx1Z0luUGNpVmdhRGV2aWNlUGF0aCgpLiBBZGQgdGhlIGludGVncml0eSBHT1Ag ZGV2aWNlIHBhdGguDQorICAgICAgICAvLw0KKyAgICAgICAgRWZpQm9vdE1hbmFnZXJVcGRhdGVD b25zb2xlVmFyaWFibGUgKENvbk91dERldiwgTlVMTCwgUGNpRGV2aWNlUGF0aCk7DQorICAgICAg ICBFZmlCb290TWFuYWdlclVwZGF0ZUNvbnNvbGVWYXJpYWJsZSAoQ29uT3V0RGV2LCBUZW1wRGV2 aWNlUGF0aCwgTlVMTCk7DQorICAgICAgfQ0KKyAgICB9DQorICAgIGdCUy0+RnJlZVBvb2wgKEdv cEhhbmRsZUJ1ZmZlcik7DQorICB9DQorDQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KKw0K Ky8qKg0KKyAgQWRkIFBDSSBkaXNwbGF5IHRvIENvbk91dC4NCisNCisgIEBwYXJhbVtpbl0gRGV2 aWNlSGFuZGxlICBIYW5kbGUgb2YgdGhlIFBDSSBkaXNwbGF5IGRldmljZS4NCisNCisgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgIFRoZSBQQ0kgZGlzcGxheSBkZXZpY2UgaGFzIGJlZW4gYWRkZWQgdG8g Q29uT3V0Lg0KKw0KKyAgQHJldHVybiAgICAgICAgICAgICAgRXJyb3IgY29kZXMsIGR1ZSB0byBF RklfREVWSUNFX1BBVEhfUFJPVE9DT0wgbWlzc2luZw0KKyAgICAgICAgICAgICAgICAgICAgICAg ZnJvbSBEZXZpY2VIYW5kbGUuDQorKiovDQorRUZJX1NUQVRVUw0KK1ByZXBhcmVQY2lEaXNwbGF5 RGV2aWNlUGF0aCAoDQorICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgIERldmljZUhhbmRs ZQ0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgRUZJ X0RFVklDRV9QQVRIX1BST1RPQ09MICAqRGV2aWNlUGF0aDsNCisgIEVGSV9ERVZJQ0VfUEFUSF9Q Uk9UT0NPTCAgKkdvcERldmljZVBhdGg7DQorDQorICBEZXZpY2VQYXRoICAgID0gTlVMTDsNCisg IEdvcERldmljZVBhdGggPSBOVUxMOw0KKyAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAo DQorICAgICAgICAgICAgICAgICAgRGV2aWNlSGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICZn RWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCisgICAgICAgICAgICAgICAgICAoVk9JRCopJkRl dmljZVBhdGgNCisgICAgICAgICAgICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgR2V0R29wRGV2aWNlUGF0aCAo RGV2aWNlUGF0aCwgJkdvcERldmljZVBhdGgpOw0KKyAgRGV2aWNlUGF0aCA9IEdvcERldmljZVBh dGg7DQorDQorICBFZmlCb290TWFuYWdlclVwZGF0ZUNvbnNvbGVWYXJpYWJsZSAoQ29uT3V0LCBE ZXZpY2VQYXRoLCBOVUxMKTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQorLyoq DQorICBBZGQgUENJIFNlcmlhbCB0byBDb25PdXQsIENvbkluLCBFcnJPdXQuDQorDQorICBAcGFy YW1baW5dIERldmljZUhhbmRsZSAgSGFuZGxlIG9mIHRoZSBQQ0kgc2VyaWFsIGRldmljZS4NCisN CisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgIFRoZSBQQ0kgc2VyaWFsIGRldmljZSBoYXMgYmVlbiBh ZGRlZCB0byBDb25PdXQsIENvbkluLA0KKyAgICAgICAgICAgICAgICAgICAgICAgRXJyT3V0Lg0K Kw0KKyAgQHJldHVybiAgICAgICAgICAgICAgRXJyb3IgY29kZXMsIGR1ZSB0byBFRklfREVWSUNF X1BBVEhfUFJPVE9DT0wgbWlzc2luZw0KKyAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBEZXZp Y2VIYW5kbGUuDQorKiovDQorRUZJX1NUQVRVUw0KK1ByZXBhcmVQY2lTZXJpYWxEZXZpY2VQYXRo ICgNCisgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgRGV2aWNlSGFuZGxlDQorICApDQor ew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklfREVWSUNFX1BB VEhfUFJPVE9DT0wgICpEZXZpY2VQYXRoOw0KKw0KKyAgRGV2aWNlUGF0aCA9IE5VTEw7DQorICBT dGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCisgICAgICAgICAgICAgICAgICBEZXZpY2VI YW5kbGUsDQorICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0K KyAgICAgICAgICAgICAgICAgIChWT0lEKikmRGV2aWNlUGF0aA0KKyAgICAgICAgICAgICAgICAg ICk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQor ICB9DQorDQorICBEZXZpY2VQYXRoID0gQXBwZW5kRGV2aWNlUGF0aE5vZGUgKERldmljZVBhdGgs IChFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgKikmZ1VhcnREZXZpY2VOb2RlKTsNCisgIERldmlj ZVBhdGggPSBBcHBlbmREZXZpY2VQYXRoTm9kZSAoRGV2aWNlUGF0aCwgKEVGSV9ERVZJQ0VfUEFU SF9QUk9UT0NPTCAqKSZnVGVybWluYWxUeXBlRGV2aWNlTm9kZSk7DQorDQorICBFZmlCb290TWFu YWdlclVwZGF0ZUNvbnNvbGVWYXJpYWJsZSAoQ29uT3V0LCBEZXZpY2VQYXRoLCBOVUxMKTsNCisg IEVmaUJvb3RNYW5hZ2VyVXBkYXRlQ29uc29sZVZhcmlhYmxlIChDb25JbiwgRGV2aWNlUGF0aCwg TlVMTCk7DQorICBFZmlCb290TWFuYWdlclVwZGF0ZUNvbnNvbGVWYXJpYWJsZSAoRXJyT3V0LCBE ZXZpY2VQYXRoLCBOVUxMKTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQorRUZJ X1NUQVRVUw0KK1Zpc2l0QWxsSW5zdGFuY2VzT2ZQcm90b2NvbCAoDQorICBJTiBFRklfR1VJRCAg ICAgICAgICAgICAgICAgICAgKklkLA0KKyAgSU4gUFJPVE9DT0xfSU5TVEFOQ0VfQ0FMTEJBQ0sg IENhbGxCYWNrRnVuY3Rpb24sDQorICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgKkNv bnRleHQNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCisg IFVJTlROICAgICAgICAgICAgICAgICAgICAgSGFuZGxlQ291bnQ7DQorICBFRklfSEFORExFICAg ICAgICAgICAgICAgICpIYW5kbGVCdWZmZXI7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAg IEluZGV4Ow0KKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAqSW5zdGFuY2U7DQorDQorICAv Lw0KKyAgLy8gU3RhcnQgdG8gY2hlY2sgYWxsIHRoZSBQY2lJbyB0byBmaW5kIGFsbCBwb3NzaWJs ZSBkZXZpY2UNCisgIC8vDQorICBIYW5kbGVDb3VudCA9IDA7DQorICBIYW5kbGVCdWZmZXIgPSBO VUxMOw0KKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0KKyAgICAgICAgICAg ICAgICAgIEJ5UHJvdG9jb2wsDQorICAgICAgICAgICAgICAgICAgSWQsDQorICAgICAgICAgICAg ICAgICAgTlVMTCwNCisgICAgICAgICAgICAgICAgICAmSGFuZGxlQ291bnQsDQorICAgICAgICAg ICAgICAgICAgJkhhbmRsZUJ1ZmZlcg0KKyAgICAgICAgICAgICAgICAgICk7DQorICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCBIYW5kbGVDb3VudDsgSW5kZXgrKykgew0KKyAgICBTdGF0dXMg PSBnQlMtPkhhbmRsZVByb3RvY29sIChIYW5kbGVCdWZmZXJbSW5kZXhdLCBJZCwgJkluc3RhbmNl KTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIGNvbnRpbnVlOw0KKyAg ICB9DQorDQorICAgIFN0YXR1cyA9ICgqQ2FsbEJhY2tGdW5jdGlvbikgKA0KKyAgICAgICAgICAg ICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQorICAgICAgICAgICAgICAgSW5zdGFuY2UsDQorICAg ICAgICAgICAgICAgQ29udGV4dA0KKyAgICAgICAgICAgICAgICk7DQorICB9DQorDQorICBnQlMt PkZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30N CisNCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorVmlzaXRpbmdBUGNpSW5zdGFuY2UgKA0KKyAg SU4gRUZJX0hBTkRMRSAgSGFuZGxlLA0KKyAgSU4gVk9JRCAgICAgICAgKkluc3RhbmNlLA0KKyAg SU4gVk9JRCAgICAgICAgKkNvbnRleHQNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAg ICAgICAgIFN0YXR1czsNCisgIEVGSV9QQ0lfSU9fUFJPVE9DT0wgICAgICAgKlBjaUlvOw0KKyAg UENJX1RZUEUwMCAgICAgICAgICAgICAgICBQY2k7DQorDQorICBQY2lJbyA9IChFRklfUENJX0lP X1BST1RPQ09MKikgSW5zdGFuY2U7DQorDQorICAvLw0KKyAgLy8gQ2hlY2sgZm9yIGFsbCBQQ0kg ZGV2aWNlDQorICAvLw0KKyAgU3RhdHVzID0gUGNpSW8tPlBjaS5SZWFkICgNCisgICAgICAgICAg ICAgICAgICAgIFBjaUlvLA0KKyAgICAgICAgICAgICAgICAgICAgRWZpUGNpSW9XaWR0aFVpbnQz MiwNCisgICAgICAgICAgICAgICAgICAgIDAsDQorICAgICAgICAgICAgICAgICAgICBzaXplb2Yg KFBjaSkgLyBzaXplb2YgKFVJTlQzMiksDQorICAgICAgICAgICAgICAgICAgICAmUGNpDQorICAg ICAgICAgICAgICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBy ZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgcmV0dXJuICgqKFZJU0lUX1BDSV9JTlNUQU5DRV9D QUxMQkFDSykoVUlOVE4pIENvbnRleHQpICgNCisgICAgICAgICAgIEhhbmRsZSwNCisgICAgICAg ICAgIFBjaUlvLA0KKyAgICAgICAgICAgJlBjaQ0KKyAgICAgICAgICAgKTsNCisNCit9DQorDQor DQorDQorRUZJX1NUQVRVUw0KK1Zpc2l0QWxsUGNpSW5zdGFuY2VzICgNCisgIElOIFZJU0lUX1BD SV9JTlNUQU5DRV9DQUxMQkFDSyBDYWxsQmFja0Z1bmN0aW9uDQorICApDQorew0KKyAgcmV0dXJu IFZpc2l0QWxsSW5zdGFuY2VzT2ZQcm90b2NvbCAoDQorICAgICAgICAgICAmZ0VmaVBjaUlvUHJv dG9jb2xHdWlkLA0KKyAgICAgICAgICAgVmlzaXRpbmdBUGNpSW5zdGFuY2UsDQorICAgICAgICAg ICAoVk9JRCopKFVJTlROKSBDYWxsQmFja0Z1bmN0aW9uDQorICAgICAgICAgICApOw0KK30NCisN CisNCisvKioNCisgIERvIHBsYXRmb3JtIHNwZWNpZmljIFBDSSBEZXZpY2UgY2hlY2sgYW5kIGFk ZCB0aGVtIHRvDQorICBDb25PdXQsIENvbkluLCBFcnJPdXQuDQorDQorICBAcGFyYW1baW5dICBI YW5kbGUgLSBIYW5kbGUgb2YgUENJIGRldmljZSBpbnN0YW5jZQ0KKyAgQHBhcmFtW2luXSAgUGNp SW8gLSBQQ0kgSU8gcHJvdG9jb2wgaW5zdGFuY2UNCisgIEBwYXJhbVtpbl0gIFBjaSAtIFBDSSBI ZWFkZXIgcmVnaXN0ZXIgYmxvY2sNCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgLSBQQ0kgRGV2 aWNlIGNoZWNrIGFuZCBDb25zb2xlIHZhcmlhYmxlIHVwZGF0ZQ0KKyAgICAgICAgICAgICAgICAg ICAgICAgIHN1Y2Nlc3NmdWxseS4NCisgIEByZXR2YWwgRUZJX1NUQVRVUyAtIFBDSSBEZXZpY2Ug Y2hlY2sgb3IgQ29uc29sZSB2YXJpYWJsZSB1cGRhdGUgZmFpbC4NCisNCisqKi8NCitFRklfU1RB VFVTDQorRUZJQVBJDQorRGV0ZWN0QW5kUHJlcGFyZVBsYXRmb3JtUGNpRGV2aWNlUGF0aCAoDQor ICBJTiBFRklfSEFORExFICAgICAgICAgICBIYW5kbGUsDQorICBJTiBFRklfUENJX0lPX1BST1RP Q09MICAqUGNpSW8sDQorICBJTiBQQ0lfVFlQRTAwICAgICAgICAgICAqUGNpDQorICApDQorew0K KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQorDQorICBTdGF0dXMgPSBQY2lJ by0+QXR0cmlidXRlcyAoDQorICAgIFBjaUlvLA0KKyAgICBFZmlQY2lJb0F0dHJpYnV0ZU9wZXJh dGlvbkVuYWJsZSwNCisgICAgRUZJX1BDSV9ERVZJQ0VfRU5BQkxFLA0KKyAgICBOVUxMDQorICAg ICk7DQorICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KKw0KKyAgaWYgKCFtRGV0ZWN0Vmdh T25seSkgew0KKyAgICAvLw0KKyAgICAvLyBIZXJlIHdlIGRlY2lkZSB3aGV0aGVyIGl0IGlzIExQ QyBCcmlkZ2UNCisgICAgLy8NCisgICAgaWYgKChJU19QQ0lfTFBDIChQY2kpKSB8fA0KKyAgICAg ICAgKChJU19QQ0lfSVNBX1BERUNPREUgKFBjaSkpICYmDQorICAgICAgICAgKFBjaS0+SGRyLlZl bmRvcklkID09IDB4ODA4NikgJiYNCisgICAgICAgICAoUGNpLT5IZHIuRGV2aWNlSWQgPT0gMHg3 MDAwKQ0KKyAgICAgICAgKQ0KKyAgICAgICApIHsNCisgICAgICAvLw0KKyAgICAgIC8vIEFkZCBJ c2FLZXlib2FyZCB0byBDb25JbiwNCisgICAgICAvLyBhZGQgSXNhU2VyaWFsIHRvIENvbk91dCwg Q29uSW4sIEVyck91dA0KKyAgICAgIC8vDQorICAgICAgREVCVUcgKChFRklfRF9JTkZPLCAiRm91 bmQgTFBDIEJyaWRnZSBkZXZpY2VcbiIpKTsNCisgICAgICBQcmVwYXJlTHBjQnJpZGdlRGV2aWNl UGF0aCAoSGFuZGxlKTsNCisgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorICAgIH0NCisgICAg Ly8NCisgICAgLy8gSGVyZSB3ZSBkZWNpZGUgd2hpY2ggU2VyaWFsIGRldmljZSB0byBlbmFibGUg aW4gUENJIGJ1cw0KKyAgICAvLw0KKyAgICBpZiAoSVNfUENJXzE2NTUwU0VSSUFMIChQY2kpKSB7 DQorICAgICAgLy8NCisgICAgICAvLyBBZGQgdGhlbSB0byBDb25PdXQsIENvbkluLCBFcnJPdXQu DQorICAgICAgLy8NCisgICAgICBERUJVRyAoKEVGSV9EX0lORk8sICJGb3VuZCBQQ0kgMTY1NTAg U0VSSUFMIGRldmljZVxuIikpOw0KKyAgICAgIFByZXBhcmVQY2lTZXJpYWxEZXZpY2VQYXRoIChI YW5kbGUpOw0KKyAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCisgICAgfQ0KKyAgfQ0KKw0KKyAg Ly8NCisgIC8vIEhlcmUgd2UgZGVjaWRlIHdoaWNoIGRpc3BsYXkgZGV2aWNlIHRvIGVuYWJsZSBp biBQQ0kgYnVzDQorICAvLw0KKyAgaWYgKElTX1BDSV9ESVNQTEFZIChQY2kpKSB7DQorICAgIC8v DQorICAgIC8vIEFkZCB0aGVtIHRvIENvbk91dC4NCisgICAgLy8NCisgICAgREVCVUcgKChFRklf RF9JTkZPLCAiRm91bmQgUENJIGRpc3BsYXkgZGV2aWNlXG4iKSk7DQorICAgIFByZXBhcmVQY2lE aXNwbGF5RGV2aWNlUGF0aCAoSGFuZGxlKTsNCisgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KKyAg fQ0KKw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQorDQorLyoqDQorICBEbyBwbGF0Zm9ybSBz cGVjaWZpYyBQQ0kgRGV2aWNlIGNoZWNrIGFuZCBhZGQgdGhlbSB0byBDb25PdXQsIENvbkluLCBF cnJPdXQNCisNCisgIEBwYXJhbVtpbl0gIERldGVjdFZnYU9ubHkgLSBPbmx5IGRldGVjdCBWR0Eg ZGV2aWNlIGlmIGl0J3MgVFJVRS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgLSBQQ0kgRGV2 aWNlIGNoZWNrIGFuZCBDb25zb2xlIHZhcmlhYmxlIHVwZGF0ZSBzdWNjZXNzZnVsbHkuDQorICBA cmV0dmFsIEVGSV9TVEFUVVMgLSBQQ0kgRGV2aWNlIGNoZWNrIG9yIENvbnNvbGUgdmFyaWFibGUg dXBkYXRlIGZhaWwuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0RldGVjdEFuZFByZXBhcmVQbGF0 Zm9ybVBjaURldmljZVBhdGhzICgNCisgIEJPT0xFQU4gRGV0ZWN0VmdhT25seQ0KKyAgKQ0KK3sN CisgIG1EZXRlY3RWZ2FPbmx5ID0gRGV0ZWN0VmdhT25seTsNCisgIHJldHVybiBWaXNpdEFsbFBj aUluc3RhbmNlcyAoRGV0ZWN0QW5kUHJlcGFyZVBsYXRmb3JtUGNpRGV2aWNlUGF0aCk7DQorfQ0K Kw0KKy8qKg0KKyAgQ29ubmVjdCB0aGUgcHJlZGVmaW5lZCBwbGF0Zm9ybSBkZWZhdWx0IGNvbnNv bGUgZGV2aWNlLg0KKw0KKyAgQWx3YXlzIHRyeSB0byBmaW5kIGFuZCBlbmFibGUgUENJIGRpc3Bs YXkgZGV2aWNlcy4NCisNCisgIEBwYXJhbVtpbl0gUGxhdGZvcm1Db25zb2xlICBQcmVkZWZpbmVk IHBsYXRmb3JtIGRlZmF1bHQgY29uc29sZSBkZXZpY2UgYXJyYXkuDQorKiovDQorVk9JRA0KK1Bs YXRmb3JtSW5pdGlhbGl6ZUNvbnNvbGUgKA0KKyAgSU4gUExBVEZPUk1fQ09OU09MRV9DT05ORUNU X0VOVFJZICAgKlBsYXRmb3JtQ29uc29sZQ0KKyAgKQ0KK3sNCisgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgSW5kZXg7DQorICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAg ICAgICAgICpWYXJDb25vdXQ7DQorICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICAgICAg ICpWYXJDb25pbjsNCisNCisgIC8vDQorICAvLyBDb25uZWN0IFJvb3RCcmlkZ2UNCisgIC8vDQor ICBHZXRFZmlHbG9iYWxWYXJpYWJsZTIgKEVGSV9DT05fT1VUX1ZBUklBQkxFX05BTUUsIChWT0lE ICoqKSAmVmFyQ29ub3V0LCBOVUxMKTsNCisgIEdldEVmaUdsb2JhbFZhcmlhYmxlMiAoRUZJX0NP Tl9JTl9WQVJJQUJMRV9OQU1FLCAoVk9JRCAqKikgJlZhckNvbmluLCBOVUxMKTsNCisNCisgIGlm IChWYXJDb25vdXQgPT0gTlVMTCB8fCBWYXJDb25pbiA9PSBOVUxMKSB7DQorICAgIC8vDQorICAg IC8vIERvIHBsYXRmb3JtIHNwZWNpZmljIFBDSSBEZXZpY2UgY2hlY2sgYW5kIGFkZCB0aGVtIHRv IENvbk91dCwgQ29uSW4sIEVyck91dA0KKyAgICAvLw0KKyAgICBEZXRlY3RBbmRQcmVwYXJlUGxh dGZvcm1QY2lEZXZpY2VQYXRocyAoRkFMU0UpOw0KKyAgICBEZXRlY3RBbmRQcmVwYXJlUGxhdGZv cm1QY2lEZXZpY2VQYXRocyhUUlVFKTsNCisgICAgLy8NCisgICAgLy8gSGF2ZSBjaGFuY2UgdG8g Y29ubmVjdCB0aGUgcGxhdGZvcm0gZGVmYXVsdCBjb25zb2xlLA0KKyAgICAvLyB0aGUgcGxhdGZv cm0gZGVmYXVsdCBjb25zb2xlIGlzIHRoZSBtaW5pbXVlIGRldmljZSBncm91cA0KKyAgICAvLyB0 aGUgcGxhdGZvcm0gc2hvdWxkIHN1cHBvcnQNCisgICAgLy8NCisgICAgZm9yIChJbmRleCA9IDA7 IFBsYXRmb3JtQ29uc29sZVtJbmRleF0uRGV2aWNlUGF0aCAhPSBOVUxMOyArK0luZGV4KSB7DQor ICAgICAgLy8NCisgICAgICAvLyBVcGRhdGUgdGhlIGNvbnNvbGUgdmFyaWFibGUgd2l0aCB0aGUg Y29ubmVjdCB0eXBlDQorICAgICAgLy8NCisgICAgICBpZiAoKFBsYXRmb3JtQ29uc29sZVtJbmRl eF0uQ29ubmVjdFR5cGUgJiBDT05TT0xFX0lOKSA9PSBDT05TT0xFX0lOKSB7DQorICAgICAgICBF ZmlCb290TWFuYWdlclVwZGF0ZUNvbnNvbGVWYXJpYWJsZSAoQ29uSW4sIFBsYXRmb3JtQ29uc29s ZVtJbmRleF0uRGV2aWNlUGF0aCwgTlVMTCk7DQorICAgICAgfQ0KKyAgICAgIGlmICgoUGxhdGZv cm1Db25zb2xlW0luZGV4XS5Db25uZWN0VHlwZSAmIENPTlNPTEVfT1VUKSA9PSBDT05TT0xFX09V VCkgew0KKyAgICAgICAgRWZpQm9vdE1hbmFnZXJVcGRhdGVDb25zb2xlVmFyaWFibGUgKENvbk91 dCwgUGxhdGZvcm1Db25zb2xlW0luZGV4XS5EZXZpY2VQYXRoLCBOVUxMKTsNCisgICAgICB9DQor ICAgICAgaWYgKChQbGF0Zm9ybUNvbnNvbGVbSW5kZXhdLkNvbm5lY3RUeXBlICYgU1REX0VSUk9S KSA9PSBTVERfRVJST1IpIHsNCisgICAgICAgIEVmaUJvb3RNYW5hZ2VyVXBkYXRlQ29uc29sZVZh cmlhYmxlIChFcnJPdXQsIFBsYXRmb3JtQ29uc29sZVtJbmRleF0uRGV2aWNlUGF0aCwgTlVMTCk7 DQorICAgICAgfQ0KKyAgICB9DQorICB9IGVsc2Ugew0KKyAgICAvLw0KKyAgICAvLyBPbmx5IGRl dGVjdCBWR0EgZGV2aWNlIGFuZCBhZGQgdGhlbSB0byBDb25PdXQNCisgICAgLy8NCisgICAgRGV0 ZWN0QW5kUHJlcGFyZVBsYXRmb3JtUGNpRGV2aWNlUGF0aHMgKFRSVUUpOw0KKyAgfQ0KK30NCisN CisNCisvKioNCisgIENvbmZpZ3VyZSBQQ0kgSW50ZXJydXB0IExpbmUgcmVnaXN0ZXIgZm9yIGFw cGxpY2FibGUgZGV2aWNlcw0KKyAgUG9ydGVkIGZyb20gU2VhQklPUywgc3JjL2Z3L3BjaWluaXQu YywgKl9wY2lfc2xvdF9nZXRfaXJxKCkNCisNCisgIEBwYXJhbVtpbl0gIEhhbmRsZSAtIEhhbmRs ZSBvZiBQQ0kgZGV2aWNlIGluc3RhbmNlDQorICBAcGFyYW1baW5dICBQY2lJbyAtIFBDSSBJTyBw cm90b2NvbCBpbnN0YW5jZQ0KKyAgQHBhcmFtW2luXSAgUGNpSGRyIC0gUENJIEhlYWRlciByZWdp c3RlciBibG9jaw0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAtIFBDSSBJbnRlcnJ1cHQgTGlu ZSByZWdpc3RlciBjb25maWd1cmVkIHN1Y2Nlc3NmdWxseS4NCisNCisqKi8NCitFRklfU1RBVFVT DQorRUZJQVBJDQorU2V0UGNpSW50TGluZSAoDQorICBJTiBFRklfSEFORExFICAgICAgICAgICBI YW5kbGUsDQorICBJTiBFRklfUENJX0lPX1BST1RPQ09MICAqUGNpSW8sDQorICBJTiBQQ0lfVFlQ RTAwICAgICAgICAgICAqUGNpSGRyDQorICApDQorew0KKyAgRUZJX0RFVklDRV9QQVRIX1BST1RP Q09MICAqRGV2UGF0aE5vZGU7DQorICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpEZXZQYXRo Ow0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBSb290U2xvdDsNCisgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgSWR4Ow0KKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICBJcnFMaW5l Ow0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgIFJvb3RCdXNOdW1iZXI7DQorDQorICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsN CisNCisgIGlmIChQY2lIZHItPkRldmljZS5JbnRlcnJ1cHRQaW4gIT0gMCkgew0KKw0KKyAgICBE ZXZQYXRoTm9kZSA9IERldmljZVBhdGhGcm9tSGFuZGxlIChIYW5kbGUpOw0KKyAgICBBU1NFUlQg KERldlBhdGhOb2RlICE9IE5VTEwpOw0KKyAgICBEZXZQYXRoID0gRGV2UGF0aE5vZGU7DQorDQor ICAgIFJvb3RCdXNOdW1iZXIgPSAwOw0KKyAgICBpZiAoRGV2aWNlUGF0aFR5cGUgKERldlBhdGhO b2RlKSA9PSBBQ1BJX0RFVklDRV9QQVRIICYmDQorICAgICAgICBEZXZpY2VQYXRoU3ViVHlwZSAo RGV2UGF0aE5vZGUpID09IEFDUElfRFAgJiYNCisgICAgICAgICgoQUNQSV9ISURfREVWSUNFX1BB VEggKilEZXZQYXRoTm9kZSktPkhJRCA9PSBFSVNBX1BOUF9JRCgweDBBMDMpKSB7DQorICAgICAg Um9vdEJ1c051bWJlciA9ICgoQUNQSV9ISURfREVWSUNFX1BBVEggKilEZXZQYXRoTm9kZSktPlVJ RDsNCisgICAgfQ0KKw0KKyAgICAvLw0KKyAgICAvLyBDb21wdXRlIGluZGV4IGludG8gUGNpSG9z dElycXNbXSB0YWJsZSBieSB3YWxraW5nDQorICAgIC8vIHRoZSBkZXZpY2UgcGF0aCBhbmQgYWRk aW5nIHVwIGFsbCBkZXZpY2UgbnVtYmVycw0KKyAgICAvLw0KKyAgICBTdGF0dXMgPSBFRklfTk9U X0ZPVU5EOw0KKyAgICBSb290U2xvdCA9IDA7DQorICAgIElkeCA9IFBjaUhkci0+RGV2aWNlLklu dGVycnVwdFBpbiAtIDE7DQorICAgIHdoaWxlICghSXNEZXZpY2VQYXRoRW5kIChEZXZQYXRoTm9k ZSkpIHsNCisgICAgICBpZiAoRGV2aWNlUGF0aFR5cGUgKERldlBhdGhOb2RlKSA9PSBIQVJEV0FS RV9ERVZJQ0VfUEFUSCAmJg0KKyAgICAgICAgICBEZXZpY2VQYXRoU3ViVHlwZSAoRGV2UGF0aE5v ZGUpID09IEhXX1BDSV9EUCkgew0KKw0KKyAgICAgICAgSWR4ICs9ICgoUENJX0RFVklDRV9QQVRI ICopRGV2UGF0aE5vZGUpLT5EZXZpY2U7DQorDQorICAgICAgICAvLw0KKyAgICAgICAgLy8gVW5s aWtlIFNlYUJJT1MsIHdoaWNoIHN0YXJ0cyBjbGltYmluZyBmcm9tIHRoZSBsZWFmIGRldmljZQ0K KyAgICAgICAgLy8gdXAgdG93YXJkIHRoZSByb290LCB3ZSB0cmF2ZXJzZSB0aGUgZGV2aWNlIHBh dGggc3RhcnRpbmcgYXQNCisgICAgICAgIC8vIHRoZSByb290IG1vdmluZyB0b3dhcmQgdGhlIGxl YWYgbm9kZS4NCisgICAgICAgIC8vIFRoZSBzbG90IG51bWJlciBvZiB0aGUgdG9wLWxldmVsIHBh cmVudCBicmlkZ2UgaXMgbmVlZGVkDQorICAgICAgICAvLyB3aXRoIG1vcmUgdGhhbiAyNCBzbG90 cyBvbiB0aGUgcm9vdCBidXMuDQorICAgICAgICAvLw0KKyAgICAgICAgaWYgKFN0YXR1cyAhPSBF RklfU1VDQ0VTUykgew0KKyAgICAgICAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCisgICAgICAg ICAgUm9vdFNsb3QgPSAoKFBDSV9ERVZJQ0VfUEFUSCAqKURldlBhdGhOb2RlKS0+RGV2aWNlOw0K KyAgICAgICAgfQ0KKyAgICAgIH0NCisNCisgICAgICBEZXZQYXRoTm9kZSA9IE5leHREZXZpY2VQ YXRoTm9kZSAoRGV2UGF0aE5vZGUpOw0KKyAgICB9DQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCisgICAgICByZXR1cm4gU3RhdHVzOw0KKyAgICB9DQorICAgIGlmIChSb290QnVzTnVt YmVyID09IDAgJiYgUm9vdFNsb3QgPT0gMCkgew0KKyAgICAgIHJldHVybiBTdGF0dXM7IC8vYnVn YnVnOiB3b3JrYXJvdW5kOyBuZWVkIFNJTUlDUyBjaGFuZ2UgQjAvRDAvRjAgUENJX0ludFBpbiBy ZWcoMHgzRCkgPSAwWDANCisvLyAgICAgIERFQlVHKCgNCisvLyAgICAgICAgRUZJX0RfRVJST1Is DQorLy8gICAgICAgIiVhOiBQQ0kgaG9zdCBicmlkZ2UgKDAwOjAwLjApIHNob3VsZCBoYXZlIG5v IGludGVycnVwdHMhXG4iLA0KKy8vICAgICAgICBfX0ZVTkNUSU9OX18NCisvLyAgICAgICAgKSk7 DQorLy8gICAgICBBU1NFUlQgKEZBTFNFKTsNCisgICAgfQ0KKw0KKyAgICAvLw0KKyAgICAvLyBG aW5hbCBQY2lIb3N0SXJxc1tdIGluZGV4IGNhbGN1bGF0aW9uIGRlcGVuZHMgb24gdGhlIHBsYXRm b3JtDQorICAgIC8vIGFuZCBzaG91bGQgbWF0Y2ggU2VhQklPUyBzcmMvZncvcGNpaW5pdC5jICpf cGNpX3Nsb3RfZ2V0X2lycSgpDQorICAgIC8vDQorICAgIHN3aXRjaCAobUhvc3RCcmlkZ2VEZXZJ ZCkgew0KKyAgICAgIGNhc2UgSU5URUxfODI0NDFfREVWSUNFX0lEOg0KKyAgICAgICAgSWR4IC09 IDE7DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIElOVEVMX0lDSDEwX0RFVklDRV9JRDoN CisgICAgICAgIC8vDQorICAgICAgICAvLyBTZWFCSU9TIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcg Y29tbWVudDoNCisgICAgICAgIC8vICJTbG90cyAwLTI0IHJvdGF0ZSBzbG90OnBpbiBtYXBwaW5n IHNpbWlsYXIgdG8gcGlpeCBhYm92ZSwgYnV0DQorICAgICAgICAvLyAgd2l0aCBhIGRpZmZlcmVu dCBzdGFydGluZyBpbmRleC4NCisgICAgICAgIC8vDQorICAgICAgICAvLyAgU2xvdHMgMjUtMzEg YWxsIHVzZSBMTktBIG1hcHBpbmcgKG9yIExOS0UsIGJ1dCBBOkQgPSBFOkgpIg0KKyAgICAgICAg Ly8NCisgICAgICAgIGlmIChSb290U2xvdCA+IDI0KSB7DQorICAgICAgICAgIC8vDQorICAgICAg ICAgIC8vIGluIHRoaXMgY2FzZSwgc3VidHJhY3QgYmFjayBvdXQgUm9vdFNsb3QgZnJvbSBJZHgN CisgICAgICAgICAgLy8gKFNlYUJJT1MgbmV2ZXIgYWRkcyBpdCB0byBiZWdpbiB3aXRoLCBidXQg dGhhdCB3b3VsZCBtYWtlIG91cg0KKyAgICAgICAgICAvLyAgZGV2aWNlIHBhdGggdHJhdmVyc2Fs IGxvb3AgYWJvdmUgdG9vIGF3a3dhcmQpDQorICAgICAgICAgIC8vDQorICAgICAgICAgIElkeCAt PSBSb290U2xvdDsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGRlZmF1bHQ6 DQorICAgICAgICBBU1NFUlQgKEZBTFNFKTsgLy8gc2hvdWxkIG5ldmVyIGdldCBoZXJlDQorICAg IH0NCisgICAgSWR4ICU9IEFSUkFZX1NJWkUgKFBjaUhvc3RJcnFzKTsNCisgICAgSXJxTGluZSA9 IFBjaUhvc3RJcnFzW0lkeF07DQorDQorICAgIERFQlVHX0NPREVfQkVHSU4gKCk7DQorICAgIHsN CisgICAgICBDSEFSMTYgICAgICAgICpEZXZQYXRoU3RyaW5nOw0KKyAgICAgIFNUQVRJQyBDSEFS MTYgRmFsbGJhY2tbXSA9IEwiPGZhaWxlZCB0byBjb252ZXJ0PiI7DQorICAgICAgVUlOVE4gICAg ICAgICBTZWdtZW50LCBCdXMsIERldmljZSwgRnVuY3Rpb247DQorDQorICAgICAgRGV2UGF0aFN0 cmluZyA9IENvbnZlcnREZXZpY2VQYXRoVG9UZXh0IChEZXZQYXRoLCBGQUxTRSwgRkFMU0UpOw0K KyAgICAgIGlmIChEZXZQYXRoU3RyaW5nID09IE5VTEwpIHsNCisgICAgICAgIERldlBhdGhTdHJp bmcgPSBGYWxsYmFjazsNCisgICAgICB9DQorICAgICAgU3RhdHVzID0gUGNpSW8tPkdldExvY2F0 aW9uIChQY2lJbywgJlNlZ21lbnQsICZCdXMsICZEZXZpY2UsICZGdW5jdGlvbik7DQorICAgICAg QVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCisNCisgICAgICBERUJVRyAoKEVGSV9EX1ZFUkJP U0UsICIlYTogWyUwMng6JTAyeC4leF0gJXMgLT4gMHglMDJ4XG4iLCBfX0ZVTkNUSU9OX18sDQor ICAgICAgICAoVUlOVDMyKUJ1cywgKFVJTlQzMilEZXZpY2UsIChVSU5UMzIpRnVuY3Rpb24sIERl dlBhdGhTdHJpbmcsDQorICAgICAgICBJcnFMaW5lKSk7DQorDQorICAgICAgaWYgKERldlBhdGhT dHJpbmcgIT0gRmFsbGJhY2spIHsNCisgICAgICAgIEZyZWVQb29sIChEZXZQYXRoU3RyaW5nKTsN CisgICAgICB9DQorICAgIH0NCisgICAgREVCVUdfQ09ERV9FTkQgKCk7DQorDQorICAgIC8vDQor ICAgIC8vIFNldCBQQ0kgSW50ZXJydXB0IExpbmUgcmVnaXN0ZXIgZm9yIHRoaXMgZGV2aWNlIHRv IFBjaUhvc3RJcnFzW0lkeF0NCisgICAgLy8NCisgICAgU3RhdHVzID0gUGNpSW8tPlBjaS5Xcml0 ZSAoDQorICAgICAgICAgICAgICAgUGNpSW8sDQorICAgICAgICAgICAgICAgRWZpUGNpSW9XaWR0 aFVpbnQ4LA0KKyAgICAgICAgICAgICAgIFBDSV9JTlRfTElORV9PRkZTRVQsDQorICAgICAgICAg ICAgICAgMSwNCisgICAgICAgICAgICAgICAmSXJxTGluZQ0KKyAgICAgICAgICAgICAgICk7DQor ICB9DQorDQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisvKioNCitXcml0ZSB0byBtYXNrIGFu ZCBlZGdlL2xldmVsIHRyaWdnZXJlZCByZWdpc3RlcnMgb2YgbWFzdGVyIGFuZCBzbGF2ZSA4MjU5 IFBJQ3MuDQorDQorQHBhcmFtW2luXSAgTWFzayAgICAgICBsb3cgYnl0ZSBmb3IgbWFzdGVyIFBJ QyBtYXNrIHJlZ2lzdGVyLA0KK2hpZ2ggYnl0ZSBmb3Igc2xhdmUgUElDIG1hc2sgcmVnaXN0ZXIu DQorQHBhcmFtW2luXSAgRWRnZUxldmVsICBsb3cgYnl0ZSBmb3IgbWFzdGVyIFBJQyBlZGdlL2xl dmVsIHRyaWdnZXJlZCByZWdpc3RlciwNCitoaWdoIGJ5dGUgZm9yIHNsYXZlIFBJQyBlZGdlL2xl dmVsIHRyaWdnZXJlZCByZWdpc3Rlci4NCisNCisqKi8NCitWT0lEDQorSW50ZXJydXB0ODI1OVdy aXRlTWFzaygNCisgIElOIFVJTlQxNiAgTWFzaywNCisgIElOIFVJTlQxNiAgRWRnZUxldmVsDQor KQ0KK3sNCisgIElvV3JpdGU4KExFR0FDWV84MjU5X01BU0tfUkVHSVNURVJfTUFTVEVSLCAoVUlO VDgpTWFzayk7DQorICBJb1dyaXRlOChMRUdBQ1lfODI1OV9NQVNLX1JFR0lTVEVSX1NMQVZFLCAo VUlOVDgpKE1hc2sgPj4gOCkpOw0KKyAgSW9Xcml0ZTgoTEVHQUNZXzgyNTlfRURHRV9MRVZFTF9U UklHR0VSRURfUkVHSVNURVJfTUFTVEVSLCAoVUlOVDgpRWRnZUxldmVsKTsNCisgIElvV3JpdGU4 KExFR0FDWV84MjU5X0VER0VfTEVWRUxfVFJJR0dFUkVEX1JFR0lTVEVSX1NMQVZFLCAoVUlOVDgp KEVkZ2VMZXZlbCA+PiA4KSk7DQorfQ0KKw0KK1ZPSUQNCitQY2lBY3BpSW5pdGlhbGl6YXRpb24g KA0KKyAgKQ0KK3sNCisgIFVJTlROICBQbWJhOw0KKw0KKyAgLy8NCisgIC8vIFF1ZXJ5IEhvc3Qg QnJpZGdlIERJRCB0byBkZXRlcm1pbmUgcGxhdGZvcm0gdHlwZQ0KKyAgLy8NCisgIG1Ib3N0QnJp ZGdlRGV2SWQgPSBQY2RHZXQxNiAoUGNkU2ltaWNzWDU4SG9zdEJyaWRnZVBjaURldklkKTsNCisg IHN3aXRjaCAobUhvc3RCcmlkZ2VEZXZJZCkgew0KKyAgICBjYXNlIElOVEVMXzgyNDQxX0RFVklD RV9JRDoNCisgICAgICBQbWJhID0gUE9XRVJfTUdNVF9SRUdJU1RFUl9QSUlYNCAoUElJWDRfUE1C QSk7DQorICAgICAgLy8NCisgICAgICAvLyAwMDowMS4wIElTQSBCcmlkZ2UgKFBJSVg0KSBMTksg cm91dGluZyB0YXJnZXRzDQorICAgICAgLy8NCisgICAgICBQY2lXcml0ZTggKFBDSV9MSUJfQURE UkVTUyAoMCwgMSwgMCwgMHg2MCksIDB4MGIpOyAvLyBBDQorICAgICAgUGNpV3JpdGU4IChQQ0lf TElCX0FERFJFU1MgKDAsIDEsIDAsIDB4NjEpLCAweDBiKTsgLy8gQg0KKyAgICAgIFBjaVdyaXRl OCAoUENJX0xJQl9BRERSRVNTICgwLCAxLCAwLCAweDYyKSwgMHgwYSk7IC8vIEMNCisgICAgICBQ Y2lXcml0ZTggKFBDSV9MSUJfQUREUkVTUyAoMCwgMSwgMCwgMHg2MyksIDB4MGEpOyAvLyBEDQor ICAgICAgYnJlYWs7DQorICAgIGNhc2UgSU5URUxfSUNIMTBfREVWSUNFX0lEOg0KKyAgICAgIFBt YmEgPSBQT1dFUl9NR01UX1JFR0lTVEVSX0lDSDEwIChJQ0gxMF9QTUJBU0UpOw0KKyAgICAgIC8v DQorICAgICAgLy8gMDA6MWYuMCBMUEMgQnJpZGdlIExOSyByb3V0aW5nIHRhcmdldHMNCisgICAg ICAvLw0KKyAgICAgIFBjaVdyaXRlOCAoUENJX0xJQl9BRERSRVNTICgwLCAweDFmLCAwLCAweDYw KSwgMHgwYSk7IC8vIEENCisgICAgICBQY2lXcml0ZTggKFBDSV9MSUJfQUREUkVTUyAoMCwgMHgx ZiwgMCwgMHg2MSksIDB4MGEpOyAvLyBCDQorICAgICAgUGNpV3JpdGU4IChQQ0lfTElCX0FERFJF U1MgKDAsIDB4MWYsIDAsIDB4NjIpLCAweDBiKTsgLy8gQw0KKyAgICAgIFBjaVdyaXRlOCAoUENJ X0xJQl9BRERSRVNTICgwLCAweDFmLCAwLCAweDYzKSwgMHgwYik7IC8vIEQNCisgICAgICBQY2lX cml0ZTggKFBDSV9MSUJfQUREUkVTUyAoMCwgMHgxZiwgMCwgMHg2OCksIDB4MGEpOyAvLyBFDQor ICAgICAgUGNpV3JpdGU4IChQQ0lfTElCX0FERFJFU1MgKDAsIDB4MWYsIDAsIDB4NjkpLCAweDBh KTsgLy8gRg0KKyAgICAgIFBjaVdyaXRlOCAoUENJX0xJQl9BRERSRVNTICgwLCAweDFmLCAwLCAw eDZhKSwgMHgwYik7IC8vIEcNCisgICAgICBQY2lXcml0ZTggKFBDSV9MSUJfQUREUkVTUyAoMCwg MHgxZiwgMCwgMHg2YiksIDB4MGIpOyAvLyBIDQorICAgICAgYnJlYWs7DQorICAgIGRlZmF1bHQ6 DQorICAgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIiVhOiBVbmtub3duIEhvc3QgQnJpZGdlIERl dmljZSBJRDogMHglMDR4XG4iLA0KKyAgICAgICAgX19GVU5DVElPTl9fLCBtSG9zdEJyaWRnZURl dklkKSk7DQorICAgICAgQVNTRVJUIChGQUxTRSk7DQorICAgICAgcmV0dXJuOw0KKyAgfQ0KKw0K KyAgLy8NCisgIC8vIEluaXRpYWxpemUgUENJX0lOVEVSUlVQVF9MSU5FIGZvciBhcHBsaWNhYmxl IHByZXNlbnQgUENJIGRldmljZXMNCisgIC8vDQorICBWaXNpdEFsbFBjaUluc3RhbmNlcyAoU2V0 UGNpSW50TGluZSk7DQorDQorICAvLw0KKyAgLy8gU2V0IEFDUEkgU0NJX0VOIGJpdCBpbiBQTUNO VFJMDQorICAvLw0KKyAgSW9PcjE2ICgoUGNpUmVhZDMyIChQbWJhKSAmIH5CSVQwKSArIDQsIEJJ VDApOw0KKyAgLy8NCisgIC8vIFNldCBhbGwgODI1OSBpbnRlcnJ1cHRzIHRvIGVkZ2UgdHJpZ2dl cmVkIGFuZCBkaXNhYmxlZA0KKyAgLy8NCisgIEludGVycnVwdDgyNTlXcml0ZU1hc2soMHhGRkZG LCAweDAwMDApOw0KK30NCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorQ29ubmVjdFJlY3Vyc2l2 ZWx5SWZQY2lNYXNzU3RvcmFnZSAoDQorICBJTiBFRklfSEFORExFICAgICAgICAgICBIYW5kbGUs DQorICBJTiBFRklfUENJX0lPX1BST1RPQ09MICAqSW5zdGFuY2UsDQorICBJTiBQQ0lfVFlQRTAw ICAgICAgICAgICAqUGNpSGVhZGVyDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAg ICAgICBTdGF0dXM7DQorICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpEZXZpY2VQYXRoOw0K KyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAqRGV2UGF0aFN0cjsNCisNCisgIC8vDQorICAv LyBSZWNvZ25pemUgUENJIE1hc3MgU3RvcmFnZQ0KKyAgLy8NCisgIGlmIChJU19DTEFTUzEgKFBj aUhlYWRlciwgUENJX0NMQVNTX01BU1NfU1RPUkFHRSkpIHsNCisgICAgRGV2aWNlUGF0aCA9IE5V TEw7DQorICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KKyAgICAgICAgICAgICAg ICAgICAgSGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9j b2xHdWlkLA0KKyAgICAgICAgICAgICAgICAgICAgKFZPSUQqKSZEZXZpY2VQYXRoDQorICAgICAg ICAgICAgICAgICAgICApOw0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAg cmV0dXJuIFN0YXR1czsNCisgICAgfQ0KKw0KKyAgICAvLw0KKyAgICAvLyBQcmludCBEZXZpY2Ug UGF0aA0KKyAgICAvLw0KKyAgICBEZXZQYXRoU3RyID0gQ29udmVydERldmljZVBhdGhUb1RleHQg KERldmljZVBhdGgsIEZBTFNFLCBGQUxTRSk7DQorICAgIGlmIChEZXZQYXRoU3RyICE9IE5VTEwp IHsNCisgICAgICBERUJVRygoDQorICAgICAgICBFRklfRF9JTkZPLA0KKyAgICAgICAgIkZvdW5k IE1hc3MgU3RvcmFnZSBkZXZpY2U6ICVzXG4iLA0KKyAgICAgICAgRGV2UGF0aFN0cg0KKyAgICAg ICAgKSk7DQorICAgICAgRnJlZVBvb2woRGV2UGF0aFN0cik7DQorICAgIH0NCisNCisgICAgU3Rh dHVzID0gZ0JTLT5Db25uZWN0Q29udHJvbGxlciAoSGFuZGxlLCBOVUxMLCBOVUxMLCBUUlVFKTsN CisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIHJldHVybiBTdGF0dXM7DQor ICAgIH0NCisNCisgIH0NCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQorDQorLyoq DQorICBUaGlzIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBpcyBpbnZva2VkIHdoZW4gdGhlDQorICBF TVUgVmFyaWFibGUgRlZCIGhhcyBiZWVuIGNoYW5nZWQuDQorDQorICBAcGFyYW0gIEV2ZW50ICAg ICAgICAgICAgICAgICBUaGUgZXZlbnQgdGhhdCBvY2N1cnJlZA0KKyAgQHBhcmFtICBDb250ZXh0 ICAgICAgICAgICAgICAgRm9yIEVGSSBjb21wYXRpYmlsaXR5LiAgTm90IHVzZWQuDQorDQorKiov DQorVk9JRA0KK0VGSUFQSQ0KK0VtdVZhcmlhYmxlc1VwZGF0ZWRDYWxsYmFjayAoDQorICBJTiAg RUZJX0VWRU5UIEV2ZW50LA0KKyAgSU4gIFZPSUQgICAgICAqQ29udGV4dA0KKyAgKQ0KK3sNCisg IERFQlVHICgoRUZJX0RfSU5GTywgIkVtdVZhcmlhYmxlc1VwZGF0ZWRDYWxsYmFja1xuIikpOw0K KyAgVXBkYXRlTnZWYXJzT25GaWxlU3lzdGVtICgpOw0KK30NCisNCisNCitFRklfU1RBVFVTDQor RUZJQVBJDQorVmlzaXRpbmdGaWxlU3lzdGVtSW5zdGFuY2UgKA0KKyAgSU4gRUZJX0hBTkRMRSAg SGFuZGxlLA0KKyAgSU4gVk9JRCAgICAgICAgKkluc3RhbmNlLA0KKyAgSU4gVk9JRCAgICAgICAg KkNvbnRleHQNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgU3RhdHVzOw0KKyAgU1RBVElD IEJPT0xFQU4gIENvbm5lY3RlZFRvRmlsZVN5c3RlbSA9IEZBTFNFOw0KKw0KKyAgaWYgKENvbm5l Y3RlZFRvRmlsZVN5c3RlbSkgew0KKyAgICByZXR1cm4gRUZJX0FMUkVBRFlfU1RBUlRFRDsNCisg IH0NCisNCisgIFN0YXR1cyA9IENvbm5lY3ROdlZhcnNUb0ZpbGVTeXN0ZW0gKEhhbmRsZSk7DQor ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQor DQorICBDb25uZWN0ZWRUb0ZpbGVTeXN0ZW0gPSBUUlVFOw0KKyAgbUVtdVZhcmlhYmxlRXZlbnQg PQ0KKyAgICBFZmlDcmVhdGVQcm90b2NvbE5vdGlmeUV2ZW50ICgNCisgICAgICAmZ0VmaURldmlj ZVBhdGhQcm90b2NvbEd1aWQsDQorICAgICAgVFBMX0NBTExCQUNLLA0KKyAgICAgIEVtdVZhcmlh Ymxlc1VwZGF0ZWRDYWxsYmFjaywNCisgICAgICBOVUxMLA0KKyAgICAgICZtRW11VmFyaWFibGVF dmVudFJlZw0KKyAgICAgICk7DQorICBQY2RTZXQ2NCAoUGNkRW11VmFyaWFibGVFdmVudCwgKFVJ TlQ2NCkoVUlOVE4pIG1FbXVWYXJpYWJsZUV2ZW50KTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VT UzsNCit9DQorDQorDQorVk9JRA0KK1BsYXRmb3JtQmRzUmVzdG9yZU52VmFyc0Zyb21IYXJkRGlz ayAoDQorICApDQorew0KKyAgVmlzaXRBbGxQY2lJbnN0YW5jZXMgKENvbm5lY3RSZWN1cnNpdmVs eUlmUGNpTWFzc1N0b3JhZ2UpOw0KKyAgVmlzaXRBbGxJbnN0YW5jZXNPZlByb3RvY29sICgNCisg ICAgJmdFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHdWlkLA0KKyAgICBWaXNpdGluZ0ZpbGVT eXN0ZW1JbnN0YW5jZSwNCisgICAgTlVMTA0KKyAgICApOw0KKw0KK30NCisNCisvKioNCisgIENv bm5lY3Qgd2l0aCBwcmVkZWZpbmVkIHBsYXRmb3JtIGNvbm5lY3Qgc2VxdWVuY2UuDQorDQorICBU aGUgT0VNL0lCViBjYW4gY3VzdG9taXplIHdpdGggdGhlaXIgb3duIGNvbm5lY3Qgc2VxdWVuY2Uu DQorKiovDQorVk9JRA0KK1BsYXRmb3JtQmRzQ29ubmVjdFNlcXVlbmNlICgNCisgIFZPSUQNCisg ICkNCit7DQorICBVSU5UTiBJbmRleDsNCisNCisgIERFQlVHICgoRUZJX0RfSU5GTywgIlBsYXRm b3JtQmRzQ29ubmVjdFNlcXVlbmNlXG4iKSk7DQorDQorICBJbmRleCA9IDA7DQorDQorICAvLw0K KyAgLy8gSGVyZSB3ZSBjYW4gZ2V0IHRoZSBjdXN0b21pemVkIHBsYXRmb3JtIGNvbm5lY3Qgc2Vx dWVuY2UNCisgIC8vIE5vdGVzOiB3ZSBjYW4gY29ubmVjdCB3aXRoIG5ldyB2YXJpYWJsZSB3aGlj aCByZWNvcmQgdGhlDQorICAvLyBsYXN0IHRpbWUgYm9vdHMgY29ubmVjdCBkZXZpY2UgcGF0aCBz ZXF1ZW5jZQ0KKyAgLy8NCisgIHdoaWxlIChnUGxhdGZvcm1Db25uZWN0U2VxdWVuY2VbSW5kZXhd ICE9IE5VTEwpIHsNCisgICAgLy8NCisgICAgLy8gQnVpbGQgdGhlIHBsYXRmb3JtIGJvb3Qgb3B0 aW9uDQorICAgIC8vDQorICAgIEVmaUJvb3RNYW5hZ2VyQ29ubmVjdERldmljZVBhdGggKGdQbGF0 Zm9ybUNvbm5lY3RTZXF1ZW5jZVtJbmRleF0sIE5VTEwpOw0KKyAgICBJbmRleCsrOw0KKyAgfQ0K Kw0KKyAgLy8NCisgIC8vIEp1c3QgdXNlIHRoZSBzaW1wbGUgcG9saWN5IHRvIGNvbm5lY3QgYWxs IGRldmljZXMNCisgIC8vDQorICBERUJVRyAoKEVGSV9EX0lORk8sICJFZmlCb290TWFuYWdlckNv bm5lY3RBbGxcbiIpKTsNCisgIEVmaUJvb3RNYW5hZ2VyQ29ubmVjdEFsbCAoKTsNCisNCisgIFBj aUFjcGlJbml0aWFsaXphdGlvbiAoKTsNCit9DQorDQorLyoqDQorICBTYXZlIHRoZSBTMyBib290 IHNjcmlwdC4NCisNCisgIE5vdGUgdGhhdCBEeGVTbW1SZWFkeVRvTG9jayBtdXN0IGJlIHNpZ25h bGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJuczsNCisgIG90aGVyd2lzZSB0aGUgc2NyaXB0 IHdvdWxkbid0IGJlIHNhdmVkIGFjdHVhbGx5Lg0KKyoqLw0KK1NUQVRJQw0KK1ZPSUQNCitTYXZl UzNCb290U2NyaXB0ICgNCisgIFZPSUQNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAg ICAgICAgICBTdGF0dXM7DQorICBFRklfUzNfU0FWRV9TVEFURV9QUk9UT0NPTCAqQm9vdFNjcmlw dDsNCisgIFNUQVRJQyBDT05TVCBVSU5UOCAgICAgICAgIEluZm9bXSA9IHsgMHhERSwgMHhBRCwg MHhCRSwgMHhFRiB9Ow0KKw0KKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90b2NvbCAoJmdFZmlT M1NhdmVTdGF0ZVByb3RvY29sR3VpZCwgTlVMTCwNCisgICAgICAgICAgICAgICAgICAoVk9JRCAq KikgJkJvb3RTY3JpcHQpOw0KKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCisNCisgIC8v DQorICAvLyBEZXNwaXRlIHRoZSBvcGNvZGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgUEkgc3BlYywg dGhlIHByb3RvY29sDQorICAvLyBpbXBsZW1lbnRhdGlvbiBlbWJlZHMgYSBkZWVwIGNvcHkgb2Yg dGhlIGluZm8gaW4gdGhlIGJvb3Qgc2NyaXB0LCByYXRoZXINCisgIC8vIHRoYW4gc3RvcmluZyBq dXN0IGEgcG9pbnRlciB0byBydW50aW1lIG9yIE5WUyBzdG9yYWdlLg0KKyAgLy8NCisgIFN0YXR1 cyA9IEJvb3RTY3JpcHQtPldyaXRlKEJvb3RTY3JpcHQsIEVGSV9CT09UX1NDUklQVF9JTkZPUk1B VElPTl9PUENPREUsDQorICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5UMzIpIHNpemVvZiBJ bmZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAoRUZJX1BIWVNJQ0FMX0FERFJFU1MpKFVJ TlROKSAmSW5mbyk7DQorICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KK30NCisNCisNCisv KioNCisgIERvIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBhY3Rpb24gYWZ0ZXIgdGhlIGNvbnNvbGUg aXMgcmVhZHkNCisNCisgIFBvc3NpYmxlIHRoaW5ncyB0aGF0IGNhbiBiZSBkb25lIGluIFBsYXRm b3JtQm9vdE1hbmFnZXJBZnRlckNvbnNvbGU6DQorDQorICA+IENvbnNvbGUgcG9zdCBhY3Rpb246 DQorICAgID4gRHluYW1pY2FsbHkgc3dpdGNoIG91dHB1dCBtb2RlIGZyb20gMTAweDMxIHRvIDgw eDI1IGZvciBjZXJ0YWluIHNlbmFyaW5vDQorICAgID4gU2lnbmFsIGNvbnNvbGUgcmVhZHkgcGxh dGZvcm0gY3VzdG9taXplZCBldmVudA0KKyAgPiBSdW4gZGlhZ25vc3RpY3MgbGlrZSBtZW1vcnkg dGVzdGluZw0KKyAgPiBDb25uZWN0IGNlcnRhaW4gZGV2aWNlcw0KKyAgPiBEaXNwYXRjaCBhZGl0 aW9uYWwgb3B0aW9uIHJvbXMNCisgID4gU3BlY2lhbCBib290OiBlLmcuOiBVU0IgYm9vdCwgZW50 ZXIgVUkNCisqKi8NCitWT0lEDQorRUZJQVBJDQorUGxhdGZvcm1Cb290TWFuYWdlckFmdGVyQ29u c29sZSAoDQorICBWT0lEDQorICApDQorew0KKyAgRUZJX0JPT1RfTU9ERSAgICAgICAgICAgICAg ICAgICAgICBCb290TW9kZTsNCisgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAg SGFuZGxlOw0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQor DQorICBERUJVRyAoKEVGSV9EX0lORk8sICJQbGF0Zm9ybUJvb3RNYW5hZ2VyQWZ0ZXJDb25zb2xl XG4iKSk7DQorDQorICAvLw0KKyAgLy8gUHJldmVudCBmdXJ0aGVyIGNoYW5nZXMgdG8gTG9ja0Jv eGVzIG9yIFNNUkFNLg0KKyAgLy8NCisgIEhhbmRsZSA9IE5VTEw7DQorICBTdGF0dXMgPSBnQlMt Pkluc3RhbGxQcm90b2NvbEludGVyZmFjZSgmSGFuZGxlLA0KKyAgICAmZ0VmaUR4ZVNtbVJlYWR5 VG9Mb2NrUHJvdG9jb2xHdWlkLCBFRklfTkFUSVZFX0lOVEVSRkFDRSwNCisgICAgICBOVUxMKTsN CisgIEFTU0VSVF9FRklfRVJST1IoU3RhdHVzKTsNCisNCisgIGlmIChQY2RHZXRCb29sIChQY2RP dm1mRmxhc2hWYXJpYWJsZXNFbmFibGUpKSB7DQorICAgIERFQlVHICgoRUZJX0RfSU5GTywgIlBs YXRmb3JtQmRzUG9saWN5QmVoYXZpb3I6IG5vdCByZXN0b3JpbmcgTnZWYXJzICINCisgICAgICAi ZnJvbSBkaXNrIHNpbmNlIGZsYXNoIHZhcmlhYmxlcyBhcHBlYXIgdG8gYmUgc3VwcG9ydGVkLlxu IikpOw0KKyAgfSBlbHNlIHsNCisgICAgLy8NCisgICAgLy8gVHJ5IHRvIHJlc3RvcmUgdmFyaWFi bGVzIGZyb20gdGhlIGhhcmQgZGlzayBlYXJseSBzbw0KKyAgICAvLyB0aGV5IGNhbiBiZSB1c2Vk IGZvciB0aGUgb3RoZXIgQkRTIGNvbm5lY3Qgb3BlcmF0aW9ucy4NCisgICAgLy8NCisgICAgUGxh dGZvcm1CZHNSZXN0b3JlTnZWYXJzRnJvbUhhcmREaXNrICgpOw0KKyAgfQ0KKw0KKyAgLy8NCisg IC8vIEdldCBjdXJyZW50IEJvb3QgTW9kZQ0KKyAgLy8NCisgIEJvb3RNb2RlID0gR2V0Qm9vdE1v ZGVIb2IgKCk7DQorICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiQm9vdCBNb2RlOiV4XG4iLCBCb290 TW9kZSkpOw0KKw0KKyAgLy8NCisgIC8vIEdvIHRoZSBkaWZmZXJlbnQgcGxhdGZvcm0gcG9saWN5 IHdpdGggZGlmZmVyZW50IGJvb3QgbW9kZQ0KKyAgLy8gTm90ZXM6IHRoaXMgcGFydCBjb2RlIGNh biBiZSBjaGFuZ2Ugd2l0aCB0aGUgdGFibGUgcG9saWN5DQorICAvLw0KKyAgQVNTRVJUIChCb290 TW9kZSA9PSBCT09UX1dJVEhfRlVMTF9DT05GSUdVUkFUSU9OKTsNCisNCisgIC8vIFBlcmZvcm0g c29tZSBwbGF0Zm9ybSBzcGVjaWZpYyBjb25uZWN0IHNlcXVlbmNlDQorICAvLw0KKyAgUGxhdGZv cm1CZHNDb25uZWN0U2VxdWVuY2UgKCk7DQorICAvLw0KKyAgLy8gTG9nbyBzaG93DQorICAvLw0K KyAgRW5hYmxlQm9vdExvZ28oUGNkR2V0UHRyKFBjZExvZ29GaWxlKSk7DQorDQorICBFZmlCb290 TWFuYWdlclJlZnJlc2hBbGxCb290T3B0aW9uICgpOw0KKw0KKyAgLy8NCisgIC8vIFJlZ2lzdGVy IFVFRkkgU2hlbGwNCisgIC8vDQorICBQbGF0Zm9ybVJlZ2lzdGVyRnZCb290T3B0aW9uICgNCisg ICAgUGNkR2V0UHRyIChQY2RTaGVsbEZpbGUpLCBMIkVGSSBJbnRlcm5hbCBTaGVsbCIsIExPQURf T1BUSU9OX0FDVElWRQ0KKyAgICApOw0KKw0KKyAgUmVtb3ZlU3RhbGVGdkZpbGVPcHRpb25zICgp Ow0KK30NCisNCisvKioNCisgIFRoaXMgbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGlzIGludm9rZWQg d2hlbiBhbiBpbnN0YW5jZSBvZiB0aGUNCisgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCBpcyBw cm9kdWNlZC4NCisNCisgIEBwYXJhbSAgRXZlbnQgICAgICAgICAgICAgICAgIFRoZSBldmVudCB0 aGF0IG9jY3VycmVkDQorICBAcGFyYW0gIENvbnRleHQgICAgICAgICAgICAgICBGb3IgRUZJIGNv bXBhdGliaWxpdHkuICBOb3QgdXNlZC4NCisNCisqKi8NCitWT0lEDQorRUZJQVBJDQorTm90aWZ5 RGV2UGF0aCAoDQorICBJTiAgRUZJX0VWRU5UIEV2ZW50LA0KKyAgSU4gIFZPSUQgICAgICAqQ29u dGV4dA0KKyAgKQ0KK3sNCisgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAg SGFuZGxlOw0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7 DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclNpemU7DQor ICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICAgICAgICAgKkRldlBhdGhOb2RlOw0KKyAg QVRBUElfREVWSUNFX1BBVEggICAgICAgICAgICAgICAgICAgICpBdGFwaTsNCisNCisgIC8vDQor ICAvLyBFeGFtaW5lIGFsbCBuZXcgaGFuZGxlcw0KKyAgLy8NCisgIGZvciAoOzspIHsNCisgICAg Ly8NCisgICAgLy8gR2V0IHRoZSBuZXh0IGhhbmRsZQ0KKyAgICAvLw0KKyAgICBCdWZmZXJTaXpl ID0gc2l6ZW9mIChIYW5kbGUpOw0KKyAgICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZSAoDQor ICAgICAgICAgICAgICBCeVJlZ2lzdGVyTm90aWZ5LA0KKyAgICAgICAgICAgICAgTlVMTCwNCisg ICAgICAgICAgICAgIG1FZmlEZXZQYXRoTm90aWZ5UmVnLA0KKyAgICAgICAgICAgICAgJkJ1ZmZl clNpemUsDQorICAgICAgICAgICAgICAmSGFuZGxlDQorICAgICAgICAgICAgICApOw0KKw0KKyAg ICAvLw0KKyAgICAvLyBJZiBub3QgZm91bmQsIHdlJ3JlIGRvbmUNCisgICAgLy8NCisgICAgaWYg KEVGSV9OT1RfRk9VTkQgPT0gU3RhdHVzKSB7DQorICAgICAgYnJlYWs7DQorICAgIH0NCisNCisg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIGNvbnRpbnVlOw0KKyAgICB9DQor DQorICAgIC8vDQorICAgIC8vIEdldCB0aGUgRGV2aWNlUGF0aCBwcm90b2NvbCBvbiB0aGF0IGhh bmRsZQ0KKyAgICAvLw0KKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sIChIYW5kbGUs ICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwgKFZPSUQgKiopJkRldlBhdGhOb2RlKTsNCisg ICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCisNCisgICAgd2hpbGUgKCFJc0RldmljZVBh dGhFbmQgKERldlBhdGhOb2RlKSkgew0KKyAgICAgIC8vDQorICAgICAgLy8gRmluZCB0aGUgaGFu ZGxlciB0byBkdW1wIHRoaXMgZGV2aWNlIHBhdGggbm9kZQ0KKyAgICAgIC8vDQorICAgICAgaWYg KA0KKyAgICAgICAgICAgKERldmljZVBhdGhUeXBlKERldlBhdGhOb2RlKSA9PSBNRVNTQUdJTkdf REVWSUNFX1BBVEgpICYmDQorICAgICAgICAgICAoRGV2aWNlUGF0aFN1YlR5cGUoRGV2UGF0aE5v ZGUpID09IE1TR19BVEFQSV9EUCkNCisgICAgICAgICApIHsNCisgICAgICAgIEF0YXBpID0gKEFU QVBJX0RFVklDRV9QQVRIKikgRGV2UGF0aE5vZGU7DQorICAgICAgICBQY2lPcjE2ICgNCisgICAg ICAgICAgUENJX0xJQl9BRERSRVNTICgNCisgICAgICAgICAgICAwLA0KKyAgICAgICAgICAgIDEs DQorICAgICAgICAgICAgMSwNCisgICAgICAgICAgICAoQXRhcGktPlByaW1hcnlTZWNvbmRhcnkg PT0gMSkgPyAweDQyOiAweDQwDQorICAgICAgICAgICAgKSwNCisgICAgICAgICAgQklUMTUNCisg ICAgICAgICAgKTsNCisgICAgICB9DQorDQorICAgICAgLy8NCisgICAgICAvLyBOZXh0IGRldmlj ZSBwYXRoIG5vZGUNCisgICAgICAvLw0KKyAgICAgIERldlBhdGhOb2RlID0gTmV4dERldmljZVBh dGhOb2RlIChEZXZQYXRoTm9kZSk7DQorICAgIH0NCisgIH0NCisNCisgIHJldHVybjsNCit9DQor DQorDQorVk9JRA0KK0luc3RhbGxEZXZpY2VQYXRoQ2FsbGJhY2sgKA0KKyAgVk9JRA0KKyAgKQ0K K3sNCisgIERFQlVHICgoRUZJX0RfSU5GTywgIlJlZ2lzdGVyZWQgTm90aWZ5RGV2UGF0aCBFdmVu dFxuIikpOw0KKyAgbUVmaURldlBhdGhFdmVudCA9IEVmaUNyZWF0ZVByb3RvY29sTm90aWZ5RXZl bnQgKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xH dWlkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgVFBMX0NBTExCQUNLLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgTm90aWZ5RGV2UGF0aCwNCisgICAgICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAmbUVmaURldlBhdGhOb3RpZnlS ZWcNCisgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQorfQ0KKw0KKy8qKg0KKyAgVGhpcyBm dW5jdGlvbiBpcyBjYWxsZWQgZWFjaCBzZWNvbmQgZHVyaW5nIHRoZSBib290IG1hbmFnZXIgd2Fp dHMgdGhlDQorICB0aW1lb3V0Lg0KKw0KKyAgQHBhcmFtIFRpbWVvdXRSZW1haW4gIFRoZSByZW1h aW5pbmcgdGltZW91dC4NCisqKi8NCitWT0lEDQorRUZJQVBJDQorUGxhdGZvcm1Cb290TWFuYWdl cldhaXRDYWxsYmFjayAoDQorICBVSU5UMTYgICAgICAgICAgVGltZW91dFJlbWFpbg0KKyAgKQ0K K3sNCisgIEVGSV9HUkFQSElDU19PVVRQVVRfQkxUX1BJWEVMX1VOSU9OIEJsYWNrOw0KKyAgRUZJ X0dSQVBISUNTX09VVFBVVF9CTFRfUElYRUxfVU5JT04gV2hpdGU7DQorICBVSU5UMTYgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBUaW1lb3V0Ow0KKw0KKyAgVGltZW91dCA9IFBjZEdldDE2 IChQY2RQbGF0Zm9ybUJvb3RUaW1lT3V0KTsNCisNCisgIEJsYWNrLlJhdyA9IDB4MDAwMDAwMDA7 DQorICBXaGl0ZS5SYXcgPSAweDAwRkZGRkZGOw0KKw0KKyAgQm9vdExvZ29VcGRhdGVQcm9ncmVz cyAoDQorICAgIFdoaXRlLlBpeGVsLA0KKyAgICBCbGFjay5QaXhlbCwNCisgICAgTCJTdGFydCBi b290IG9wdGlvbiIsDQorICAgIFdoaXRlLlBpeGVsLA0KKyAgICAoVGltZW91dCAtIFRpbWVvdXRS ZW1haW4pICogMTAwIC8gVGltZW91dCwNCisgICAgMA0KKyAgICApOw0KK30NCisNCisvKioNCisg IFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBubyBib290IG9wdGlvbiBjb3VsZCBiZSBsYXVu Y2hlZCwNCisgIGluY2x1ZGluZyBwbGF0Zm9ybSByZWNvdmVyeSBvcHRpb25zIGFuZCBvcHRpb25z IHBvaW50aW5nIHRvIGFwcGxpY2F0aW9ucw0KKyAgYnVpbHQgaW50byBmaXJtd2FyZSB2b2x1bWVz Lg0KKw0KKyAgSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBCRFMgYXR0ZW1wdHMgdG8gZW50ZXIg YW4gaW5maW5pdGUgbG9vcC4NCisqKi8NCitWT0lEDQorRUZJQVBJDQorUGxhdGZvcm1Cb290TWFu YWdlclVuYWJsZVRvQm9vdCAoDQorICBWT0lEDQorICApDQorew0KKyAgLy8gQlVHQlVHLSB3aWxs IGRvIGl0IGlmIG5lZWQNCit9DQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3Bl bkJvYXJkUGtnL0xpYnJhcnkvUGxhdGZvcm1Cb290TWFuYWdlckxpYi9QbGF0Zm9ybURhdGEuYyBi L1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1BsYXRmb3JtQm9vdE1h bmFnZXJMaWIvUGxhdGZvcm1EYXRhLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAw MDAwMDAwLi43Njg4NDNhOGJmDQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9T aW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9QbGF0Zm9ybUJvb3RNYW5hZ2VyTGliL1BsYXRmb3Jt RGF0YS5jDQpAQCAtMCwwICsxLDM1IEBADQorLyoqIEBmaWxlDQorICBEZWZpbmVkIHRoZSBwbGF0 Zm9ybSBzcGVjaWZpYyBkZXZpY2UgcGF0aCB3aGljaCB3aWxsIGJlIHVzZWQgYnkNCisgIHBsYXRm b3JtIEJiZCB0byBwZXJmb3JtIHRoZSBwbGF0Zm9ybSBwb2xpY3kgY29ubmVjdC4NCisNCisgIENv cHlyaWdodCAoYykgMjAwNCAtIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuIDxCUj4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2Ut UGF0ZW50DQorKiovDQorDQorI2luY2x1ZGUgIkJkc1BsYXRmb3JtLmgiDQorDQorQUNQSV9ISURf REVWSUNFX1BBVEggICAgICAgZ1BucFBzMktleWJvYXJkRGV2aWNlTm9kZSAgPSBnUG5wUHMyS2V5 Ym9hcmQ7DQorQUNQSV9ISURfREVWSUNFX1BBVEggICAgICAgZ1BucDE2NTUwQ29tUG9ydERldmlj ZU5vZGUgPSBnUG5wMTY1NTBDb21Qb3J0Ow0KK1VBUlRfREVWSUNFX1BBVEggICAgICAgICAgIGdV YXJ0RGV2aWNlTm9kZSAgICAgICAgICAgID0gZ1VhcnQ7DQorVkVORE9SX0RFVklDRV9QQVRIICAg ICAgICAgZ1Rlcm1pbmFsVHlwZURldmljZU5vZGUgICAgPSBnUGNBbnNpVGVybWluYWw7DQorDQor Ly8NCisvLyBQbGF0Zm9ybSBzcGVjaWZpYyBrZXlib2FyZCBkZXZpY2UgcGF0aA0KKy8vDQorDQor Ly8NCisvLyBQcmVkZWZpbmVkIHBsYXRmb3JtIGRlZmF1bHQgY29uc29sZSBkZXZpY2UgcGF0aA0K Ky8vDQorUExBVEZPUk1fQ09OU09MRV9DT05ORUNUX0VOVFJZICAgZ1BsYXRmb3JtQ29uc29sZVtd ID0gew0KKyAgew0KKyAgICBOVUxMLA0KKyAgICAwDQorICB9DQorfTsNCisNCisvLw0KKy8vIFBy ZWRlZmluZWQgcGxhdGZvcm0gY29ubmVjdCBzZXF1ZW5jZQ0KKy8vDQorRUZJX0RFVklDRV9QQVRI X1BST1RPQ09MICAgICpnUGxhdGZvcm1Db25uZWN0U2VxdWVuY2VbXSA9IHsgTlVMTCB9Ow0KKw0K ZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1Nl cmlhbGl6ZVZhcmlhYmxlc0xpYi9TZXJpYWxpemVWYXJpYWJsZXNMaWIuYyBiL1BsYXRmb3JtL0lu dGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi9TZXJp YWxpemVWYXJpYWJsZXNMaWIuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAw MDAuLmJlNjE5YzgzOGENCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWlj c09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi9TZXJpYWxpemVWYXJp YWJsZXNMaWIuYw0KQEAgLTAsMCArMSw4NjkgQEANCisvKiogQGZpbGUNCisgIFNlcmlhbGl6ZSBW YXJpYWJsZXMgTGlicmFyeSBpbXBsZW1lbnRhdGlvbg0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDA0 IC0gMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gPEJSPg0KKw0K KyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisN CisjaW5jbHVkZSAiU2VyaWFsaXplVmFyaWFibGVzTGliLmgiDQorDQorLyoqDQorICBTZXJpYWxp emF0aW9uIGZvcm1hdDoNCisNCisgIFRoZSBTZXJpYWxpemVWYXJpYWJsZXNMaWIgaW50ZXJmYWNl IGRvZXMgbm90IHNwZWNpZnkgYSBmb3JtYXQNCisgIGZvciB0aGUgc2VyaWFsaXphdGlvbiBvZiB0 aGUgdmFyaWFibGUgZGF0YS4gIFRoaXMgbGlicmFyeSB1c2VzDQorICBhIHBhY2tlZCBhcnJheSBv ZiBhIG5vbi11bmlmb3JtbHkgc2l6ZWQgZGF0YSBzdHJ1Y3R1cmUgZWxlbWVudHMuDQorDQorICBF YWNoIHZhcmlhYmxlIGlzIHN0b3JlZCAocGFja2VkKSBhczoNCisgICAgVUlOVDMyICAgVmVuZG9y TmFtZVNpemU7ICAvLyBOYW1lIHNpemUgaW4gYnl0ZXMNCisgICAgQ0hBUjE2ICAgVmVuZG9yTmFt ZVs/XTsgICAvLyBUaGUgdmFyaWFibGUgdW5pY29kZSBuYW1lIGluY2x1ZGluZyB0aGUNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBudWxsIHRlcm1pbmF0aW5nIGNoYXJhY3Rlci4N CisgICAgRUZJX0dVSUQgVmVuZG9yR3VpZDsgICAgICAvLyBUaGUgdmFyaWFibGUgR1VJRA0KKyAg ICBVSU5UMzIgICBEYXRhU2l6ZTsgICAgICAgIC8vIFRoZSBzaXplIG9mIHZhcmlhYmxlIGRhdGEg aW4gYnl0ZXMNCisgICAgVUlOVDggICAgRGF0YVs/XTsgICAgICAgICAvLyBUaGUgdmFyaWFibGUg ZGF0YQ0KKw0KKyoqLw0KKw0KKw0KKy8qKg0KKyAgVW5wYWNrcyB0aGUgbmV4dCB2YXJpYWJsZSBm cm9tIHRoZSBidWZmZXINCisNCisgIEBwYXJhbVtpbl0gIEJ1ZmZlciAtIEJ1ZmZlciBwb2ludGlu ZyB0byB0aGUgbmV4dCB2YXJpYWJsZSBpbnN0YW5jZQ0KKyAgICAgICAgICAgICAgICBPbiBzdWJz ZXF1ZW50IGNhbGxzLCB0aGUgcG9pbnRlciBzaG91bGQgYmUgaW5jcmVtZW50ZWQNCisgICAgICAg ICAgICAgICAgYnkgdGhlIHJldHVybmVkIFNpemVVc2VkIHZhbHVlLg0KKyAgQHBhcmFtW2luXSAg TWF4U2l6ZSAtIE1heCBhbGxvd2FibGUgc2l6ZSBmb3IgdGhlIHZhcmlhYmxlIGRhdGENCisgICAg ICAgICAgICAgICAgT24gc3Vic2VxdWVudCBjYWxscywgdGhpcyBzaG91bGQgYmUgZGVjcmVtZW50 ZWQNCisgICAgICAgICAgICAgICAgYnkgdGhlIHJldHVybmVkIFNpemVVc2VkIHZhbHVlLg0KKyAg QHBhcmFtW291dF0gTmFtZSAtIFZhcmlhYmxlIG5hbWUgc3RyaW5nIChhZGRyZXNzIGluIEJ1ZmZl cikNCisgIEBwYXJhbVtvdXRdIE5hbWVTaXplIC0gU2l6ZSBvZiBOYW1lIGluIGJ5dGVzDQorICBA cGFyYW1bb3V0XSBHdWlkIC0gR1VJRCBvZiB2YXJpYWJsZSAoYWRkcmVzcyBpbiBCdWZmZXIpDQor ICBAcGFyYW1bb3V0XSBBdHRyaWJ1dGVzIC0gQXR0cmlidXRlcyBvZiB2YXJpYWJsZQ0KKyAgQHBh cmFtW291dF0gRGF0YSAtIEJ1ZmZlciBjb250YWluaW5nIERhdGEgZm9yIHZhcmlhYmxlIChhZGRy ZXNzIGluIEJ1ZmZlcikNCisgIEBwYXJhbVtvdXRdIERhdGFTaXplIC0gU2l6ZSBvZiBEYXRhIGlu IGJ5dGVzDQorICBAcGFyYW1bb3V0XSBTaXplVXNlZCAtIFRvdGFsIHNpemUgdXNlZCBmb3IgdGhp cyB2YXJpYWJsZSBpbnN0YW5jZSBpbiBCdWZmZXINCisNCisgIEByZXR1cm4gICAgIEVGSV9TVEFU VVMgYmFzZWQgb24gdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUgb3BlcmF0aW9uDQorDQor KiovDQorU1RBVElDDQorRUZJX1NUQVRVUw0KK1VucGFja1ZhcmlhYmxlRnJvbUJ1ZmZlciAoDQor ICBJTiAgVk9JRCAgICAgKkJ1ZmZlciwNCisgIElOICBVSU5UTiAgICBNYXhTaXplLA0KKyAgT1VU IENIQVIxNiAgICoqTmFtZSwNCisgIE9VVCBVSU5UMzIgICAqTmFtZVNpemUsDQorICBPVVQgRUZJ X0dVSUQgKipHdWlkLA0KKyAgT1VUIFVJTlQzMiAgICpBdHRyaWJ1dGVzLA0KKyAgT1VUIFVJTlQz MiAgICpEYXRhU2l6ZSwNCisgIE9VVCBWT0lEICAgICAqKkRhdGEsDQorICBPVVQgVUlOVE4gICAg KlNpemVVc2VkDQorICApDQorew0KKyAgVUlOVDggICpCeXRlUHRyOw0KKyAgVUlOVE4gIE9mZnNl dDsNCisNCisgIEJ5dGVQdHIgPSAoVUlOVDgqKUJ1ZmZlcjsNCisgIE9mZnNldCA9IDA7DQorDQor ICAqTmFtZVNpemUgPSAqKFVJTlQzMiopIChCeXRlUHRyICsgT2Zmc2V0KTsNCisgIE9mZnNldCA9 IE9mZnNldCArIHNpemVvZiAoVUlOVDMyKTsNCisNCisgIGlmIChPZmZzZXQgPiBNYXhTaXplKSB7 DQorICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICAqTmFtZSA9 IChDSEFSMTYqKSAoQnl0ZVB0ciArIE9mZnNldCk7DQorICBPZmZzZXQgPSBPZmZzZXQgKyAqKFVJ TlQzMiopQnl0ZVB0cjsNCisgIGlmIChPZmZzZXQgPiBNYXhTaXplKSB7DQorICAgIHJldHVybiBF RklfSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICAqR3VpZCA9IChFRklfR1VJRCopIChC eXRlUHRyICsgT2Zmc2V0KTsNCisgIE9mZnNldCA9IE9mZnNldCArIHNpemVvZiAoRUZJX0dVSUQp Ow0KKyAgaWYgKE9mZnNldCA+IE1heFNpemUpIHsNCisgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCisgIH0NCisNCisgICpBdHRyaWJ1dGVzID0gKihVSU5UMzIqKSAoQnl0ZVB0ciAr IE9mZnNldCk7DQorICBPZmZzZXQgPSBPZmZzZXQgKyBzaXplb2YgKFVJTlQzMik7DQorICBpZiAo T2Zmc2V0ID4gTWF4U2l6ZSkgew0KKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0K KyAgfQ0KKw0KKyAgKkRhdGFTaXplID0gKihVSU5UMzIqKSAoQnl0ZVB0ciArIE9mZnNldCk7DQor ICBPZmZzZXQgPSBPZmZzZXQgKyBzaXplb2YgKFVJTlQzMik7DQorICBpZiAoT2Zmc2V0ID4gTWF4 U2l6ZSkgew0KKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAgfQ0KKw0KKyAg KkRhdGEgPSAoVk9JRCopIChCeXRlUHRyICsgT2Zmc2V0KTsNCisgIE9mZnNldCA9IE9mZnNldCAr ICpEYXRhU2l6ZTsNCisgIGlmIChPZmZzZXQgPiBNYXhTaXplKSB7DQorICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICAqU2l6ZVVzZWQgPSBPZmZzZXQ7DQorDQor ICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KKw0KKw0KKy8qKg0KKyAgSXRlcmF0ZXMgdGhyb3Vn aCB0aGUgdmFyaWFibGVzIGluIHRoZSBidWZmZXIsIGFuZCBjYWxscyBhIGNhbGxiYWNrDQorICBm dW5jdGlvbiBmb3IgZWFjaCB2YXJpYWJsZSBmb3VuZC4NCisNCisgIEBwYXJhbVtpbl0gIENhbGxi YWNrRnVuY3Rpb24gLSBGdW5jdGlvbiBjYWxsZWQgZm9yIGVhY2ggdmFyaWFibGUgaW5zdGFuY2UN CisgIEBwYXJhbVtpbl0gIENvbnRleHQgLSBQYXNzZWQgdG8gZWFjaCBjYWxsIG9mIENhbGxiYWNr RnVuY3Rpb24NCisgIEBwYXJhbVtpbl0gIEJ1ZmZlciAtIEJ1ZmZlciBjb250YWluaW5nIHNlcmlh bGl6ZWQgdmFyaWFibGVzDQorICBAcGFyYW1baW5dICBNYXhTaXplIC0gU2l6ZSBvZiBCdWZmZXIg aW4gYnl0ZXMNCisNCisgIEByZXR1cm4gICAgIEVGSV9TVEFUVVMgYmFzZWQgb24gdGhlIHN1Y2Nl c3Mgb3IgZmFpbHVyZSBvZiB0aGUgb3BlcmF0aW9uDQorDQorKiovDQorU1RBVElDDQorRUZJX1NU QVRVUw0KK0l0ZXJhdGVWYXJpYWJsZXNJbkJ1ZmZlciAoDQorICBJTiBWQVJJQUJMRV9TRVJJQUxJ WkFUSU9OX0lURVJBVElPTl9DQUxMQkFDSyAgQ2FsbGJhY2tGdW5jdGlvbiwNCisgIElOIFZPSUQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQ2FsbGJhY2tDb250ZXh0LA0K KyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXIs DQorICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4U2l6 ZQ0KKyAgKQ0KK3sNCisgIFJFVFVSTl9TVEFUVVMgU3RhdHVzOw0KKyAgVUlOVE4gICAgICAgICBU b3RhbFNpemVVc2VkOw0KKyAgVUlOVE4gICAgICAgICBTaXplVXNlZDsNCisNCisgIENIQVIxNiAg ICAgICAgKk5hbWU7DQorICBVSU5UMzIgICAgICAgIE5hbWVTaXplOw0KKyAgQ0hBUjE2ICAgICAg ICAqQWxpZ25lZE5hbWU7DQorICBVSU5UMzIgICAgICAgIEFsaWduZWROYW1lTWF4U2l6ZTsNCisg IEVGSV9HVUlEICAgICAgKkd1aWQ7DQorICBVSU5UMzIgICAgICAgIEF0dHJpYnV0ZXM7DQorICBV SU5UMzIgICAgICAgIERhdGFTaXplOw0KKyAgVk9JRCAgICAgICAgICAqRGF0YTsNCisNCisgIFNp emVVc2VkID0gMDsNCisgIEFsaWduZWROYW1lID0gTlVMTDsNCisgIEFsaWduZWROYW1lTWF4U2l6 ZSA9IDA7DQorICBOYW1lID0gTlVMTDsNCisgIEd1aWQgPSBOVUxMOw0KKyAgQXR0cmlidXRlcyA9 IDA7DQorICBEYXRhU2l6ZSA9IDA7DQorICBEYXRhID0gTlVMTDsNCisNCisgIGZvciAoDQorICAg IFN0YXR1cyA9IEVGSV9TVUNDRVNTLCBUb3RhbFNpemVVc2VkID0gMDsNCisgICAgIUVGSV9FUlJP UiAoU3RhdHVzKSAmJiAoVG90YWxTaXplVXNlZCA8IE1heFNpemUpOw0KKyAgICApIHsNCisgICAg U3RhdHVzID0gVW5wYWNrVmFyaWFibGVGcm9tQnVmZmVyICgNCisgICAgICAgICAgICAgICAoVk9J RCopICgoVUlOVDgqKSBCdWZmZXIgKyBUb3RhbFNpemVVc2VkKSwNCisgICAgICAgICAgICAgICAo TWF4U2l6ZSAtIFRvdGFsU2l6ZVVzZWQpLA0KKyAgICAgICAgICAgICAgICZOYW1lLA0KKyAgICAg ICAgICAgICAgICZOYW1lU2l6ZSwNCisgICAgICAgICAgICAgICAmR3VpZCwNCisgICAgICAgICAg ICAgICAmQXR0cmlidXRlcywNCisgICAgICAgICAgICAgICAmRGF0YVNpemUsDQorICAgICAgICAg ICAgICAgJkRhdGEsDQorICAgICAgICAgICAgICAgJlNpemVVc2VkDQorICAgICAgICAgICAgICAg KTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIHJldHVybiBTdGF0dXM7 DQorICAgIH0NCisNCisgICAgLy8NCisgICAgLy8gV2UgY29weSB0aGUgbmFtZSB0byBhIHNlcGFy YXRlbHkgYWxsb2NhdGVkIGJ1ZmZlciwNCisgICAgLy8gdG8gYmUgc3VyZSBpdCBpcyAxNi1iaXQg YWxpZ25lZC4NCisgICAgLy8NCisgICAgaWYgKE5hbWVTaXplID4gQWxpZ25lZE5hbWVNYXhTaXpl KSB7DQorICAgICAgaWYgKEFsaWduZWROYW1lICE9IE5VTEwpIHsNCisgICAgICAgIEZyZWVQb29s IChBbGlnbmVkTmFtZSk7DQorICAgICAgfQ0KKyAgICAgIEFsaWduZWROYW1lID0gQWxsb2NhdGVQ b29sIChOYW1lU2l6ZSk7DQorICAgIH0NCisgICAgaWYgKEFsaWduZWROYW1lID09IE5VTEwpIHsN CisgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICAgIH0NCisgICAgQ29weU1l bSAoQWxpZ25lZE5hbWUsIE5hbWUsIE5hbWVTaXplKTsNCisNCisgICAgVG90YWxTaXplVXNlZCA9 IFRvdGFsU2l6ZVVzZWQgKyBTaXplVXNlZDsNCisNCisgICAgLy8NCisgICAgLy8gUnVuIHRoZSBj YWxsYmFjayBmdW5jdGlvbg0KKyAgICAvLw0KKyAgICBTdGF0dXMgPSAoKkNhbGxiYWNrRnVuY3Rp b24pICgNCisgICAgICAgICAgICAgICBDYWxsYmFja0NvbnRleHQsDQorICAgICAgICAgICAgICAg QWxpZ25lZE5hbWUsDQorICAgICAgICAgICAgICAgR3VpZCwNCisgICAgICAgICAgICAgICBBdHRy aWJ1dGVzLA0KKyAgICAgICAgICAgICAgIERhdGFTaXplLA0KKyAgICAgICAgICAgICAgIERhdGEN CisgICAgICAgICAgICAgICApOw0KKw0KKyAgfQ0KKw0KKyAgaWYgKEFsaWduZWROYW1lICE9IE5V TEwpIHsNCisgICAgRnJlZVBvb2wgKEFsaWduZWROYW1lKTsNCisgIH0NCisNCisgIC8vDQorICAv LyBNYWtlIHN1cmUgdGhlIGVudGlyZSBidWZmZXIgd2FzIHVzZWQsIG9yIGVsc2UgcmV0dXJuIGFu IGVycm9yDQorICAvLw0KKyAgaWYgKFRvdGFsU2l6ZVVzZWQgIT0gTWF4U2l6ZSkgew0KKyAgICBE RUJVRyAoKA0KKyAgICAgIEVGSV9EX0VSUk9SLA0KKyAgICAgICJEZXNlcmlhbGl6ZSB2YXJpYWJs ZXMgZXJyb3I6IFRvdGFsU2l6ZVVzZWQoJUx1KSAhPSBNYXhTaXplKCVMdSlcbiIsDQorICAgICAg KFVJTlQ2NClUb3RhbFNpemVVc2VkLA0KKyAgICAgIChVSU5UNjQpTWF4U2l6ZQ0KKyAgICAgICkp Ow0KKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAgfQ0KKw0KKyAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KK30NCisNCisNCitTVEFUSUMNCitSRVRVUk5fU1RBVFVTDQorRUZJQVBJ DQorSXRlcmF0ZVZhcmlhYmxlc0NhbGxiYWNrTm9wICgNCisgIElOICBWT0lEICAgICAgICAgICAg ICAgICAgICAgICAgICpDb250ZXh0LA0KKyAgSU4gIENIQVIxNiAgICAgICAgICAgICAgICAgICAg ICAgKlZhcmlhYmxlTmFtZSwNCisgIElOICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICpW ZW5kb3JHdWlkLA0KKyAgSU4gIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRl cywNCisgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTaXplLA0KKyAgSU4g IFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGENCisgICkNCit7DQorICByZXR1cm4g UkVUVVJOX1NVQ0NFU1M7DQorfQ0KKw0KKw0KK1NUQVRJQw0KK1JFVFVSTl9TVEFUVVMNCitFRklB UEkNCitJdGVyYXRlVmFyaWFibGVzQ2FsbGJhY2tTZXRJbkluc3RhbmNlICgNCisgIElOICBWT0lE ICAgICAgICAgICAgICAgICAgICAgICAgICpDb250ZXh0LA0KKyAgSU4gIENIQVIxNiAgICAgICAg ICAgICAgICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCisgIElOICBFRklfR1VJRCAgICAgICAgICAg ICAgICAgICAgICpWZW5kb3JHdWlkLA0KKyAgSU4gIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg ICAgQXR0cmlidXRlcywNCisgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIERhdGFT aXplLA0KKyAgSU4gIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGENCisgICkNCit7 DQorICBFRklfSEFORExFICBJbnN0YW5jZTsNCisNCisgIEluc3RhbmNlID0gKEVGSV9IQU5ETEUp IENvbnRleHQ7DQorDQorICByZXR1cm4gU2VyaWFsaXplVmFyaWFibGVzQWRkVmFyaWFibGUgKA0K KyAgICAgICAgICAgSW5zdGFuY2UsDQorICAgICAgICAgICBWYXJpYWJsZU5hbWUsDQorICAgICAg ICAgICBWZW5kb3JHdWlkLA0KKyAgICAgICAgICAgQXR0cmlidXRlcywNCisgICAgICAgICAgIERh dGFTaXplLA0KKyAgICAgICAgICAgRGF0YQ0KKyAgICAgICAgICAgKTsNCit9DQorDQorDQorU1RB VElDDQorUkVUVVJOX1NUQVRVUw0KK0VGSUFQSQ0KK0l0ZXJhdGVWYXJpYWJsZXNDYWxsYmFja1Nl dFN5c3RlbVZhcmlhYmxlICgNCisgIElOICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpD b250ZXh0LA0KKyAgSU4gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgKlZhcmlhYmxlTmFt ZSwNCisgIElOICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICpWZW5kb3JHdWlkLA0KKyAg SU4gIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlcywNCisgIElOICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTaXplLA0KKyAgSU4gIFZPSUQgICAgICAgICAg ICAgICAgICAgICAgICAgKkRhdGENCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgIFN0 YXR1czsNCisgIFNUQVRJQyBDT05TVCBVSU5UMzIgQXV0aE1hc2sgPQ0KKyAgICAgICAgICAgICAg ICAgICAgICAgIEVGSV9WQVJJQUJMRV9BVVRIRU5USUNBVEVEX1dSSVRFX0FDQ0VTUyB8DQorICAg ICAgICAgICAgICAgICAgICAgICAgRUZJX1ZBUklBQkxFX1RJTUVfQkFTRURfQVVUSEVOVElDQVRF RF9XUklURV9BQ0NFU1M7DQorDQorICBTdGF0dXMgPSBnUlQtPlNldFZhcmlhYmxlICgNCisgICAg ICAgICAgICAgVmFyaWFibGVOYW1lLA0KKyAgICAgICAgICAgICBWZW5kb3JHdWlkLA0KKyAgICAg ICAgICAgICBBdHRyaWJ1dGVzLA0KKyAgICAgICAgICAgICBEYXRhU2l6ZSwNCisgICAgICAgICAg ICAgRGF0YQ0KKyAgICAgICAgICAgICApOw0KKw0KKyAgaWYgKFN0YXR1cyA9PSBFRklfU0VDVVJJ VFlfVklPTEFUSU9OICYmIChBdHRyaWJ1dGVzICYgQXV0aE1hc2spICE9IDApIHsNCisgICAgREVC VUcgKChERUJVR19XQVJOLCAiJWE6IHNldHRpbmcgYXV0aGVudGljYXRlZCB2YXJpYWJsZSBcIiVz XCIgIg0KKyAgICAgICAgICAgICJmYWlsZWQgd2l0aCBFRklfU0VDVVJJVFlfVklPTEFUSU9OLCBp Z25vcmluZ1xuIiwgX19GVU5DVElPTl9fLA0KKyAgICAgICAgICAgIFZhcmlhYmxlTmFtZSkpOw0K KyAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCisgIH0gZWxzZSBpZiAoU3RhdHVzID09IEVGSV9X UklURV9QUk9URUNURUQpIHsNCisgICAgREVCVUcgKChERUJVR19XQVJOLCAiJWE6IHNldHRpbmcg UmVhZE9ubHkgdmFyaWFibGUgXCIlc1wiICINCisgICAgICAgICAgICAiZmFpbGVkIHdpdGggRUZJ X1dSSVRFX1BST1RFQ1RFRCwgaWdub3JpbmdcbiIsIF9fRlVOQ1RJT05fXywNCisgICAgICAgICAg ICBWYXJpYWJsZU5hbWUpKTsNCisgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQorICB9DQorICBy ZXR1cm4gU3RhdHVzOw0KK30NCisNCisNCitTVEFUSUMNCitSRVRVUk5fU1RBVFVTDQorRW5zdXJl RXh0cmFCdWZmZXJTcGFjZSAoDQorICBJTiAgU1ZfSU5TVEFOQ0UgICpJbnN0YW5jZSwNCisgIElO ICBVSU5UTiAgICAgICAgU2l6ZQ0KKyAgKQ0KK3sNCisgIFZPSUQgKk5ld0J1ZmZlcjsNCisgIFVJ TlROIE5ld1NpemU7DQorDQorICBOZXdTaXplID0gSW5zdGFuY2UtPkRhdGFTaXplICsgU2l6ZTsN CisgIGlmIChOZXdTaXplIDw9IEluc3RhbmNlLT5CdWZmZXJTaXplKSB7DQorICAgIHJldHVybiBS RVRVUk5fU1VDQ0VTUzsNCisgIH0NCisNCisgIC8vDQorICAvLyBEb3VibGUgdGhlIHJlcXVpcmVk IHNpemUgdG8gbGVzc2VuIHRoZSBuZWVkIHRvIHJlLWFsbG9jYXRlIGluIHRoZSBmdXR1cmUNCisg IC8vDQorICBOZXdTaXplID0gMiAqIE5ld1NpemU7DQorDQorICBOZXdCdWZmZXIgPSBBbGxvY2F0 ZVBvb2wgKE5ld1NpemUpOw0KKyAgaWYgKE5ld0J1ZmZlciA9PSBOVUxMKSB7DQorICAgIHJldHVy biBSRVRVUk5fT1VUX09GX1JFU09VUkNFUzsNCisgIH0NCisNCisgIGlmIChJbnN0YW5jZS0+QnVm ZmVyUHRyICE9IE5VTEwpIHsNCisgICAgQ29weU1lbSAoTmV3QnVmZmVyLCBJbnN0YW5jZS0+QnVm ZmVyUHRyLCBJbnN0YW5jZS0+RGF0YVNpemUpOw0KKyAgICBGcmVlUG9vbCAoSW5zdGFuY2UtPkJ1 ZmZlclB0cik7DQorICB9DQorDQorICBJbnN0YW5jZS0+QnVmZmVyUHRyID0gTmV3QnVmZmVyOw0K KyAgSW5zdGFuY2UtPkJ1ZmZlclNpemUgPSBOZXdTaXplOw0KKw0KKyAgcmV0dXJuIFJFVFVSTl9T VUNDRVNTOw0KK30NCisNCisNCitTVEFUSUMNCitWT0lEDQorQXBwZW5kVG9CdWZmZXIgKA0KKyAg SU4gIFNWX0lOU1RBTkNFICAqSW5zdGFuY2UsDQorICBJTiAgVk9JRCAgICAgICAgICpEYXRhLA0K KyAgSU4gIFVJTlROICAgICAgICBTaXplDQorICApDQorew0KKyAgVUlOVE4gTmV3U2l6ZTsNCisN CisgIEFTU0VSVCAoSW5zdGFuY2UgIT0gTlVMTCk7DQorICBBU1NFUlQgKERhdGEgIT0gTlVMTCk7 DQorDQorICBOZXdTaXplID0gSW5zdGFuY2UtPkRhdGFTaXplICsgU2l6ZTsNCisgIEFTU0VSVCAo KEluc3RhbmNlLT5EYXRhU2l6ZSArIFNpemUpIDw9IEluc3RhbmNlLT5CdWZmZXJTaXplKTsNCisN CisgIENvcHlNZW0gKA0KKyAgICAoVk9JRCopICgoKFVJTlQ4KikgKEluc3RhbmNlLT5CdWZmZXJQ dHIpKSArIEluc3RhbmNlLT5EYXRhU2l6ZSksDQorICAgIERhdGEsDQorICAgIFNpemUNCisgICAg KTsNCisNCisgIEluc3RhbmNlLT5EYXRhU2l6ZSA9IE5ld1NpemU7DQorfQ0KKw0KKw0KKy8qKg0K KyAgQ3JlYXRlcyBhIG5ldyB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorDQorICBA cGFyYW1bb3V0XSAgSGFuZGxlIC0gSGFuZGxlIGZvciBhIHZhcmlhYmxlIHNlcmlhbGl6YXRpb24g aW5zdGFuY2UNCisNCisgIEByZXR2YWwgICAgICBSRVRVUk5fU1VDQ0VTUyAtIFRoZSB2YXJpYWJs ZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlIHdhcw0KKyAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1 bGx5IGNyZWF0ZWQuDQorICBAcmV0dmFsICAgICAgUkVUVVJOX09VVF9PRl9SRVNPVVJDRVMgLSBU aGVyZSB3ZSBub3QgZW5vdWdoIHJlc291cmNlcyB0bw0KKyAgICAgICAgICAgICAgICAgY3JlYXRl IHRoZSB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlLg0KKw0KKyoqLw0KK1JFVFVSTl9T VEFUVVMNCitFRklBUEkNCitTZXJpYWxpemVWYXJpYWJsZXNOZXdJbnN0YW5jZSAoDQorICBPVVQg RUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAqSGFuZGxlDQorICApDQorew0KKyAgU1Zf SU5TVEFOQ0UgICpOZXc7DQorDQorICBOZXcgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKCpO ZXcpKTsNCisgIGlmIChOZXcgPT0gTlVMTCkgew0KKyAgICByZXR1cm4gUkVUVVJOX09VVF9PRl9S RVNPVVJDRVM7DQorICB9DQorDQorICBOZXctPlNpZ25hdHVyZSA9IFNWX1NJR05BVFVSRTsNCisN CisgICpIYW5kbGUgPSAoRUZJX0hBTkRMRSkgTmV3Ow0KKyAgcmV0dXJuIFJFVFVSTl9TVUNDRVNT Ow0KK30NCisNCisNCisvKioNCisgIEZyZWUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIHZhcmlh YmxlIHNlcmlhbGl6YXRpb24gaW5zdGFuY2UNCisNCisgIEBwYXJhbVtpbl0gIEhhbmRsZSAtIEhh bmRsZSBmb3IgYSB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorDQorICBAcmV0dmFs ICAgICAgUkVUVVJOX1NVQ0NFU1MgLSBUaGUgdmFyaWFibGUgc2VyaWFsaXphdGlvbiBpbnN0YW5j ZSB3YXMNCisgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSBmcmVlZC4NCisgIEByZXR2YWwg ICAgICBSRVRVUk5fSU5WQUxJRF9QQVJBTUVURVIgLSBIYW5kbGUgd2FzIG5vdCBhIHZhbGlkDQor ICAgICAgICAgICAgICAgICB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlLg0KKw0KKyoq Lw0KK1JFVFVSTl9TVEFUVVMNCitFRklBUEkNCitTZXJpYWxpemVWYXJpYWJsZXNGcmVlSW5zdGFu Y2UgKA0KKyAgSU4gRUZJX0hBTkRMRSBIYW5kbGUNCisgICkNCit7DQorICBTVl9JTlNUQU5DRSAg ICAqSW5zdGFuY2U7DQorDQorICBJbnN0YW5jZSA9IFNWX0ZST01fSEFORExFIChIYW5kbGUpOw0K Kw0KKyAgaWYgKEluc3RhbmNlLT5TaWduYXR1cmUgIT0gU1ZfU0lHTkFUVVJFKSB7DQorICAgIHJl dHVybiBSRVRVUk5fSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICBJbnN0YW5jZS0+U2ln bmF0dXJlID0gMDsNCisNCisgIGlmIChJbnN0YW5jZS0+QnVmZmVyUHRyICE9IE5VTEwpIHsNCisg ICAgRnJlZVBvb2wgKEluc3RhbmNlLT5CdWZmZXJQdHIpOw0KKyAgfQ0KKw0KKyAgRnJlZVBvb2wg KEluc3RhbmNlKTsNCisNCisgIHJldHVybiBSRVRVUk5fU1VDQ0VTUzsNCit9DQorDQorDQorLyoq DQorICBDcmVhdGVzIGEgbmV3IHZhcmlhYmxlIHNlcmlhbGl6YXRpb24gaW5zdGFuY2UgdXNpbmcg dGhlIGdpdmVuDQorICBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhcmlhYmxlcyB0byBm aWxsIHRoZSBuZXcgaW5zdGFuY2UNCisNCisgIEBwYXJhbVtvdXRdIEhhbmRsZSAtIEhhbmRsZSBm b3IgYSB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorICBAcGFyYW1baW5dICBCdWZm ZXIgLSBBIGJ1ZmZlciB3aXRoIHRoZSBzZXJpYWxpemVkIHJlcHJlc2VudGF0aW9uDQorICAgICAg ICAgICAgICAgIG9mIHRoZSB2YXJpYWJsZXMuICBNdXN0IGJlIHRoZSBzYW1lIGZvcm1hdCBhcyBw cm9kdWNlZA0KKyAgICAgICAgICAgICAgICBieSBTZXJpYWxpemVWYXJpYWJsZXNUb0J1ZmZlci4N CisgIEBwYXJhbVtpbl0gIFNpemUgLSBUaGlzIGlzIHRoZSBzaXplIG9mIHRoZSBiaW5hcnkgcmVw cmVzZW50YXRpb24NCisgICAgICAgICAgICAgICAgb2YgdGhlIHZhcmlhYmxlcy4NCisNCisgIEBy ZXR2YWwgICAgICBSRVRVUk5fU1VDQ0VTUyAtIFRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gd2Fz IHN1Y2Nlc3NmdWxseQ0KKyAgICAgICAgICAgICAgICAgaW1wb3J0ZWQgaW50byBhIG5ldyB2YXJp YWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorICBAcmV0dmFsICAgICAgUkVUVVJOX09VVF9P Rl9SRVNPVVJDRVMgLSBUaGVyZSB3ZSBub3QgZW5vdWdoIHJlc291cmNlcyB0bw0KKyAgICAgICAg ICAgICAgICAgY3JlYXRlIHRoZSBuZXcgdmFyaWFibGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZQ0K Kw0KKyoqLw0KK1JFVFVSTl9TVEFUVVMNCitFRklBUEkNCitTZXJpYWxpemVWYXJpYWJsZXNOZXdJ bnN0YW5jZUZyb21CdWZmZXIgKA0KKyAgT1VUIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAg ICAgICAgICpIYW5kbGUsDQorICBJTiAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKkJ1ZmZlciwNCisgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT aXplDQorICApDQorew0KKyAgUkVUVVJOX1NUQVRVUyBTdGF0dXM7DQorDQorICBTdGF0dXMgPSBT ZXJpYWxpemVWYXJpYWJsZXNOZXdJbnN0YW5jZSAoSGFuZGxlKTsNCisgIGlmIChSRVRVUk5fRVJS T1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIFN0YXR1cyA9 IEl0ZXJhdGVWYXJpYWJsZXNJbkJ1ZmZlciAoDQorICAgICAgICAgICAgIEl0ZXJhdGVWYXJpYWJs ZXNDYWxsYmFja05vcCwNCisgICAgICAgICAgICAgTlVMTCwNCisgICAgICAgICAgICAgQnVmZmVy LA0KKyAgICAgICAgICAgICBTaXplDQorICAgICAgICAgICAgICk7DQorICBpZiAoUkVUVVJOX0VS Uk9SIChTdGF0dXMpKSB7DQorICAgIFNlcmlhbGl6ZVZhcmlhYmxlc0ZyZWVJbnN0YW5jZSAoKkhh bmRsZSk7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBTdGF0dXMgPSBJdGVyYXRl VmFyaWFibGVzSW5CdWZmZXIgKA0KKyAgICAgICAgICAgICBJdGVyYXRlVmFyaWFibGVzQ2FsbGJh Y2tTZXRJbkluc3RhbmNlLA0KKyAgICAgICAgICAgICAoVk9JRCopICpIYW5kbGUsDQorICAgICAg ICAgICAgIEJ1ZmZlciwNCisgICAgICAgICAgICAgU2l6ZQ0KKyAgICAgICAgICAgICApOw0KKyAg aWYgKFJFVFVSTl9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBTZXJpYWxpemVWYXJpYWJsZXNGcmVl SW5zdGFuY2UgKCpIYW5kbGUpOw0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgcmV0 dXJuIFN0YXR1czsNCit9DQorDQorDQorLyoqDQorICBJdGVyYXRlcyBhbGwgdmFyaWFibGVzIGZv dW5kIHdpdGggUnVudGltZVNlcnZpY2VzIEdldE5leHRWYXJpYWJsZU5hbWUNCisNCisgIEBwYXJh bVtpbl0gICBDYWxsYmFja0Z1bmN0aW9uIC0gRnVuY3Rpb24gY2FsbGVkIGZvciBlYWNoIHZhcmlh YmxlIGluc3RhbmNlDQorICBAcGFyYW1baW5dICAgQ29udGV4dCAtIFBhc3NlZCB0byBlYWNoIGNh bGwgb2YgQ2FsbGJhY2tGdW5jdGlvbg0KKw0KKyAgQHJldHZhbCAgICAgIFJFVFVSTl9TVUNDRVNT IC0gQWxsIHZhcmlhYmxlcyB3ZXJlIGl0ZXJhdGVkIHdpdGhvdXQgdGhlDQorICAgICAgICAgICAg ICAgICBDYWxsYmFja0Z1bmN0aW9uIHJldHVybmluZyBhbiBlcnJvcg0KKyAgQHJldHZhbCAgICAg IFJFVFVSTl9PVVRfT0ZfUkVTT1VSQ0VTIC0gVGhlcmUgd2Ugbm90IGVub3VnaCByZXNvdXJjZXMg dG8NCisgICAgICAgICAgICAgICAgIGl0ZXJhdGUgdGhyb3VnaCB0aGUgdmFyaWFibGVzDQorICBA cmV0dXJuICAgICAgQW55IG9mIFJFVFVSTl9FUlJPUiBpbmRpY2F0ZXMgYW4gZXJyb3IgcmVhZGlu ZyB0aGUgdmFyaWFibGUNCisgICAgICAgICAgICAgICAgIG9yIGFuIGVycm9yIHdhcyByZXR1cm5l ZCBmcm9tIENhbGxiYWNrRnVuY3Rpb24NCisNCisqKi8NCitSRVRVUk5fU1RBVFVTDQorRUZJQVBJ DQorU2VyaWFsaXplVmFyaWFibGVzSXRlcmF0ZVN5c3RlbVZhcmlhYmxlcyAoDQorICBJTiBWQVJJ QUJMRV9TRVJJQUxJWkFUSU9OX0lURVJBVElPTl9DQUxMQkFDSyBDYWxsYmFja0Z1bmN0aW9uLA0K KyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNvbnRleHQN CisgICkNCit7DQorICBSRVRVUk5fU1RBVFVTICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlTmFtZUJ1ZmZlclNpemU7DQorICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVOYW1lU2l6ZTsNCisgIENIQVIxNiAgICAg ICAgICAgICAgICAgICAgICAqVmFyaWFibGVOYW1lOw0KKyAgRUZJX0dVSUQgICAgICAgICAgICAg ICAgICAgIFZlbmRvckd1aWQ7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFi bGVEYXRhQnVmZmVyU2l6ZTsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJs ZURhdGFTaXplOw0KKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICpWYXJpYWJsZURhdGE7 DQorICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBdHRyaWJ1dGVzOw0KKyAg Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICpOZXdCdWZmZXI7DQorDQorICAvLw0KKyAgLy8g SW5pdGlhbGl6ZSB0aGUgdmFyaWFibGUgbmFtZSBhbmQgZGF0YSBidWZmZXIgdmFyaWFibGVzLg0K KyAgLy8NCisgIFZhcmlhYmxlTmFtZUJ1ZmZlclNpemUgPSBzaXplb2YgKENIQVIxNik7DQorICBW YXJpYWJsZU5hbWUgPSBBbGxvY2F0ZVplcm9Qb29sIChWYXJpYWJsZU5hbWVCdWZmZXJTaXplKTsN CisNCisgIFZhcmlhYmxlRGF0YUJ1ZmZlclNpemUgPSAwOw0KKyAgVmFyaWFibGVEYXRhID0gTlVM TDsNCisNCisgIGZvciAoOzspIHsNCisgICAgLy8NCisgICAgLy8gR2V0IHRoZSBuZXh0IHZhcmlh YmxlIG5hbWUgYW5kIGd1aWQNCisgICAgLy8NCisgICAgVmFyaWFibGVOYW1lU2l6ZSA9IFZhcmlh YmxlTmFtZUJ1ZmZlclNpemU7DQorICAgIFN0YXR1cyA9IGdSVC0+R2V0TmV4dFZhcmlhYmxlTmFt ZSAoDQorICAgICAgICAgICAgICAgICAgICAmVmFyaWFibGVOYW1lU2l6ZSwNCisgICAgICAgICAg ICAgICAgICAgIFZhcmlhYmxlTmFtZSwNCisgICAgICAgICAgICAgICAgICAgICZWZW5kb3JHdWlk DQorICAgICAgICAgICAgICAgICAgICApOw0KKyAgICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJf VE9PX1NNQUxMKSB7DQorICAgICAgLy8NCisgICAgICAvLyBUaGUgY3VycmVudGx5IGFsbG9jYXRl ZCBWYXJpYWJsZU5hbWUgYnVmZmVyIGlzIHRvbyBzbWFsbCwNCisgICAgICAvLyBzbyB3ZSBhbGxv Y2F0ZSBhIGxhcmdlciBidWZmZXIsIGFuZCBjb3B5IHRoZSBvbGQgYnVmZmVyDQorICAgICAgLy8g dG8gaXQuDQorICAgICAgLy8NCisgICAgICBOZXdCdWZmZXIgPSBBbGxvY2F0ZVBvb2wgKFZhcmlh YmxlTmFtZVNpemUpOw0KKyAgICAgIGlmIChOZXdCdWZmZXIgPT0gTlVMTCkgew0KKyAgICAgICAg U3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICAgICAgICBicmVhazsNCisgICAgICB9 DQorICAgICAgQ29weU1lbSAoTmV3QnVmZmVyLCBWYXJpYWJsZU5hbWUsIFZhcmlhYmxlTmFtZUJ1 ZmZlclNpemUpOw0KKyAgICAgIGlmIChWYXJpYWJsZU5hbWUgIT0gTlVMTCkgew0KKyAgICAgICAg RnJlZVBvb2wgKFZhcmlhYmxlTmFtZSk7DQorICAgICAgfQ0KKyAgICAgIFZhcmlhYmxlTmFtZSA9 IE5ld0J1ZmZlcjsNCisgICAgICBWYXJpYWJsZU5hbWVCdWZmZXJTaXplID0gVmFyaWFibGVOYW1l U2l6ZTsNCisNCisgICAgICAvLw0KKyAgICAgIC8vIFRyeSB0byBnZXQgdGhlIG5leHQgdmFyaWFi bGUgbmFtZSBhZ2FpbiB3aXRoIHRoZSBsYXJnZXIgYnVmZmVyLg0KKyAgICAgIC8vDQorICAgICAg U3RhdHVzID0gZ1JULT5HZXROZXh0VmFyaWFibGVOYW1lICgNCisgICAgICAgICAgICAgICAgICAg ICAgJlZhcmlhYmxlTmFtZVNpemUsDQorICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlTmFt ZSwNCisgICAgICAgICAgICAgICAgICAgICAgJlZlbmRvckd1aWQNCisgICAgICAgICAgICAgICAg ICAgICAgKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAg ICAgaWYgKFN0YXR1cyA9PSBFRklfTk9UX0ZPVU5EKSB7DQorICAgICAgICBTdGF0dXMgPSBFRklf U1VDQ0VTUzsNCisgICAgICB9DQorICAgICAgYnJlYWs7DQorICAgIH0NCisNCisgICAgLy8NCisg ICAgLy8gR2V0IHRoZSB2YXJpYWJsZSBkYXRhIGFuZCBhdHRyaWJ1dGVzDQorICAgIC8vDQorICAg IFZhcmlhYmxlRGF0YVNpemUgPSBWYXJpYWJsZURhdGFCdWZmZXJTaXplOw0KKyAgICBTdGF0dXMg PSBnUlQtPkdldFZhcmlhYmxlICgNCisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlTmFtZSwN CisgICAgICAgICAgICAgICAgICAgICZWZW5kb3JHdWlkLA0KKyAgICAgICAgICAgICAgICAgICAg JlZhcmlhYmxlQXR0cmlidXRlcywNCisgICAgICAgICAgICAgICAgICAgICZWYXJpYWJsZURhdGFT aXplLA0KKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVEYXRhDQorICAgICAgICAgICAgICAg ICAgICApOw0KKyAgICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQorICAg ICAgLy8NCisgICAgICAvLyBUaGUgY3VycmVudGx5IGFsbG9jYXRlZCBWYXJpYWJsZURhdGEgYnVm ZmVyIGlzIHRvbyBzbWFsbCwNCisgICAgICAvLyBzbyB3ZSBhbGxvY2F0ZSBhIGxhcmdlciBidWZm ZXIuDQorICAgICAgLy8NCisgICAgICBpZiAoVmFyaWFibGVEYXRhQnVmZmVyU2l6ZSAhPSAwKSB7 DQorICAgICAgICBGcmVlUG9vbCAoVmFyaWFibGVEYXRhKTsNCisgICAgICAgIFZhcmlhYmxlRGF0 YSA9IE5VTEw7DQorICAgICAgICBWYXJpYWJsZURhdGFCdWZmZXJTaXplID0gMDsNCisgICAgICB9 DQorICAgICAgVmFyaWFibGVEYXRhID0gQWxsb2NhdGVQb29sIChWYXJpYWJsZURhdGFTaXplKTsN CisgICAgICBpZiAoVmFyaWFibGVEYXRhID09IE5VTEwpIHsNCisgICAgICAgIFN0YXR1cyA9IEVG SV9PVVRfT0ZfUkVTT1VSQ0VTOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgfQ0KKyAgICAgIFZh cmlhYmxlRGF0YUJ1ZmZlclNpemUgPSBWYXJpYWJsZURhdGFTaXplOw0KKw0KKyAgICAgIC8vDQor ICAgICAgLy8gVHJ5IHRvIHJlYWQgdGhlIHZhcmlhYmxlIGFnYWluIHdpdGggdGhlIGxhcmdlciBi dWZmZXIuDQorICAgICAgLy8NCisgICAgICBTdGF0dXMgPSBnUlQtPkdldFZhcmlhYmxlICgNCisg ICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KKyAgICAgICAgICAgICAgICAgICAg ICAmVmVuZG9yR3VpZCwNCisgICAgICAgICAgICAgICAgICAgICAgJlZhcmlhYmxlQXR0cmlidXRl cywNCisgICAgICAgICAgICAgICAgICAgICAgJlZhcmlhYmxlRGF0YVNpemUsDQorICAgICAgICAg ICAgICAgICAgICAgIFZhcmlhYmxlRGF0YQ0KKyAgICAgICAgICAgICAgICAgICAgICApOw0KKyAg ICB9DQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICBicmVhazsNCisgICAg fQ0KKw0KKyAgICAvLw0KKyAgICAvLyBSdW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uDQorICAgIC8v DQorICAgIFN0YXR1cyA9ICgqQ2FsbGJhY2tGdW5jdGlvbikgKA0KKyAgICAgICAgICAgICAgIENv bnRleHQsDQorICAgICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KKyAgICAgICAgICAgICAgICZW ZW5kb3JHdWlkLA0KKyAgICAgICAgICAgICAgIFZhcmlhYmxlQXR0cmlidXRlcywNCisgICAgICAg ICAgICAgICBWYXJpYWJsZURhdGFTaXplLA0KKyAgICAgICAgICAgICAgIFZhcmlhYmxlRGF0YQ0K KyAgICAgICAgICAgICAgICk7DQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAg ICBicmVhazsNCisgICAgfQ0KKw0KKyAgfQ0KKw0KKyAgaWYgKFZhcmlhYmxlTmFtZSAhPSBOVUxM KSB7DQorICAgIEZyZWVQb29sIChWYXJpYWJsZU5hbWUpOw0KKyAgfQ0KKw0KKyAgaWYgKFZhcmlh YmxlRGF0YSAhPSBOVUxMKSB7DQorICAgIEZyZWVQb29sIChWYXJpYWJsZURhdGEpOw0KKyAgfQ0K Kw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQorDQorLyoqDQorICBJdGVyYXRlcyBhbGwgdmFy aWFibGVzIGZvdW5kIGluIHRoZSB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorDQor ICBAcGFyYW1baW5dICAgSGFuZGxlIC0gSGFuZGxlIGZvciBhIHZhcmlhYmxlIHNlcmlhbGl6YXRp b24gaW5zdGFuY2UNCisgIEBwYXJhbVtpbl0gICBDYWxsYmFja0Z1bmN0aW9uIC0gRnVuY3Rpb24g Y2FsbGVkIGZvciBlYWNoIHZhcmlhYmxlIGluc3RhbmNlDQorICBAcGFyYW1baW5dICAgQ29udGV4 dCAtIFBhc3NlZCB0byBlYWNoIGNhbGwgb2YgQ2FsbGJhY2tGdW5jdGlvbg0KKw0KKyAgQHJldHZh bCAgICAgIFJFVFVSTl9TVUNDRVNTIC0gQWxsIHZhcmlhYmxlcyB3ZXJlIGl0ZXJhdGVkIHdpdGhv dXQgdGhlDQorICAgICAgICAgICAgICAgICBDYWxsYmFja0Z1bmN0aW9uIHJldHVybmluZyBhbiBl cnJvcg0KKyAgQHJldHZhbCAgICAgIFJFVFVSTl9PVVRfT0ZfUkVTT1VSQ0VTIC0gVGhlcmUgd2Ug bm90IGVub3VnaCByZXNvdXJjZXMgdG8NCisgICAgICAgICAgICAgICAgIGl0ZXJhdGUgdGhyb3Vn aCB0aGUgdmFyaWFibGVzDQorICBAcmV0dXJuICAgICAgQW55IG9mIFJFVFVSTl9FUlJPUiBpbmRp Y2F0ZXMgYW4gZXJyb3IgcmVhZGluZyB0aGUgdmFyaWFibGUNCisgICAgICAgICAgICAgICAgIG9y IGFuIGVycm9yIHdhcyByZXR1cm5lZCBmcm9tIENhbGxiYWNrRnVuY3Rpb24NCisNCisqKi8NCitS RVRVUk5fU1RBVFVTDQorRUZJQVBJDQorU2VyaWFsaXplVmFyaWFibGVzSXRlcmF0ZUluc3RhbmNl VmFyaWFibGVzICgNCisgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEhhbmRsZSwNCisgIElOIFZBUklBQkxFX1NFUklBTElaQVRJT05fSVRFUkFUSU9OX0NBTExC QUNLIENhbGxiYWNrRnVuY3Rpb24sDQorICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqQ29udGV4dA0KKyAgKQ0KK3sNCisgIFNWX0lOU1RBTkNFICAgICpJbnN0 YW5jZTsNCisNCisgIEluc3RhbmNlID0gU1ZfRlJPTV9IQU5ETEUgKEhhbmRsZSk7DQorDQorICBp ZiAoKEluc3RhbmNlLT5CdWZmZXJQdHIgIT0gTlVMTCkgJiYgKEluc3RhbmNlLT5EYXRhU2l6ZSAh PSAwKSkgew0KKyAgICByZXR1cm4gSXRlcmF0ZVZhcmlhYmxlc0luQnVmZmVyICgNCisgICAgICAg ICAgICAgQ2FsbGJhY2tGdW5jdGlvbiwNCisgICAgICAgICAgICAgQ29udGV4dCwNCisgICAgICAg ICAgICAgSW5zdGFuY2UtPkJ1ZmZlclB0ciwNCisgICAgICAgICAgICAgSW5zdGFuY2UtPkRhdGFT aXplDQorICAgICAgICAgICAgICk7DQorICB9IGVsc2Ugew0KKyAgICByZXR1cm4gUkVUVVJOX1NV Q0NFU1M7DQorICB9DQorfQ0KKw0KKw0KKy8qKg0KKyAgU2V0cyBhbGwgdmFyaWFibGVzIGZvdW5k IGluIHRoZSB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorDQorICBAcGFyYW1baW5d ICAgSGFuZGxlIC0gSGFuZGxlIGZvciBhIHZhcmlhYmxlIHNlcmlhbGl6YXRpb24gaW5zdGFuY2UN CisNCisgIEByZXR2YWwgICAgICBSRVRVUk5fU1VDQ0VTUyAtIEFsbCB2YXJpYWJsZXMgd2VyZSBz ZXQgc3VjY2Vzc2Z1bGx5DQorICBAcmV0dmFsICAgICAgUkVUVVJOX09VVF9PRl9SRVNPVVJDRVMg LSBUaGVyZSB3ZSBub3QgZW5vdWdoIHJlc291cmNlcyB0bw0KKyAgICAgICAgICAgICAgICAgc2V0 IGFsbCB0aGUgdmFyaWFibGVzDQorICBAcmV0dXJuICAgICAgQW55IG9mIFJFVFVSTl9FUlJPUiBp bmRpY2F0ZXMgYW4gZXJyb3IgcmVhZGluZyB0aGUgdmFyaWFibGVzDQorICAgICAgICAgICAgICAg ICBvciBpbiBhdHRlbXB0aW5nIHRvIHNldCBhIHZhcmlhYmxlDQorDQorKiovDQorUkVUVVJOX1NU QVRVUw0KK0VGSUFQSQ0KK1NlcmlhbGl6ZVZhcmlhYmxlc1NldFNlcmlhbGl6ZWRWYXJpYWJsZXMg KA0KKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlDQorICApDQor ew0KKyAgcmV0dXJuIFNlcmlhbGl6ZVZhcmlhYmxlc0l0ZXJhdGVJbnN0YW5jZVZhcmlhYmxlcyAo DQorICAgICAgICAgICBIYW5kbGUsDQorICAgICAgICAgICBJdGVyYXRlVmFyaWFibGVzQ2FsbGJh Y2tTZXRTeXN0ZW1WYXJpYWJsZSwNCisgICAgICAgICAgIE5VTEwNCisgICAgICAgICAgICk7DQor fQ0KKw0KKw0KKy8qKg0KKyAgQWRkcyBhIHZhcmlhYmxlIHRvIHRoZSB2YXJpYWJsZSBzZXJpYWxp emF0aW9uIGluc3RhbmNlDQorDQorICBAcGFyYW1baW5dIEhhbmRsZSAtIEhhbmRsZSBmb3IgYSB2 YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorICBAcGFyYW1baW5dIFZhcmlhYmxlTmFt ZSAtIFJlZmVyIHRvIFJ1bnRpbWVTZXJ2aWNlcyBHZXRWYXJpYWJsZQ0KKyAgQHBhcmFtW2luXSBW ZW5kb3JHdWlkIC0gUmVmZXIgdG8gUnVudGltZVNlcnZpY2VzIEdldFZhcmlhYmxlDQorICBAcGFy YW1baW5dIEF0dHJpYnV0ZXMgLSBSZWZlciB0byBSdW50aW1lU2VydmljZXMgR2V0VmFyaWFibGUN CisgIEBwYXJhbVtpbl0gRGF0YVNpemUgLSBSZWZlciB0byBSdW50aW1lU2VydmljZXMgR2V0VmFy aWFibGUNCisgIEBwYXJhbVtpbl0gRGF0YSAtIFJlZmVyIHRvIFJ1bnRpbWVTZXJ2aWNlcyBHZXRW YXJpYWJsZQ0KKw0KKyAgQHJldHZhbCAgICAgIFJFVFVSTl9TVUNDRVNTIC0gQWxsIHZhcmlhYmxl cyB3ZXJlIHNldCBzdWNjZXNzZnVsbHkNCisgIEByZXR2YWwgICAgICBSRVRVUk5fT1VUX09GX1JF U09VUkNFUyAtIFRoZXJlIHdlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvDQorICAgICAgICAgICAg ICAgICBhZGQgdGhlIHZhcmlhYmxlDQorICBAcmV0dmFsICAgICAgUkVUVVJOX0lOVkFMSURfUEFS QU1FVEVSIC0gSGFuZGxlIHdhcyBub3QgYSB2YWxpZA0KKyAgICAgICAgICAgICAgICAgdmFyaWFi bGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZSBvcg0KKyAgICAgICAgICAgICAgICAgVmFyaWFibGVO YW1lLCBWYXJpYWJsZUd1aWQgb3IgRGF0YSBhcmUgTlVMTC4NCisNCisqKi8NCitSRVRVUk5fU1RB VFVTDQorRUZJQVBJDQorU2VyaWFsaXplVmFyaWFibGVzQWRkVmFyaWFibGUgKA0KKyAgSU4gRUZJ X0hBTkRMRSAgICAgICAgICAgICAgICAgICBIYW5kbGUsDQorICBJTiBDSEFSMTYgICAgICAgICAg ICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUsDQorICBJTiBFRklfR1VJRCAgICAgICAgICAgICAg ICAgICAgICpWZW5kb3JHdWlkLA0KKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICBB dHRyaWJ1dGVzLA0KKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBEYXRhU2l6ZSwN CisgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGENCisgICkNCit7DQorICBS RVRVUk5fU1RBVFVTICBTdGF0dXM7DQorICBTVl9JTlNUQU5DRSAgICAqSW5zdGFuY2U7DQorICBV SU5UMzIgICAgICAgICBTZXJpYWxpemVkTmFtZVNpemU7DQorICBVSU5UMzIgICAgICAgICBTZXJp YWxpemVkRGF0YVNpemU7DQorICBVSU5UTiAgICAgICAgICBTZXJpYWxpemVkU2l6ZTsNCisNCisg IEluc3RhbmNlID0gU1ZfRlJPTV9IQU5ETEUgKEhhbmRsZSk7DQorDQorICBpZiAoKEluc3RhbmNl LT5TaWduYXR1cmUgIT0gU1ZfU0lHTkFUVVJFKSB8fA0KKyAgICAgIChWYXJpYWJsZU5hbWUgPT0g TlVMTCkgfHwgKFZlbmRvckd1aWQgPT0gTlVMTCkgfHwgKERhdGEgPT0gTlVMTCkpIHsNCisgIH0N CisNCisgIFNlcmlhbGl6ZWROYW1lU2l6ZSA9IChVSU5UMzIpIFN0clNpemUgKFZhcmlhYmxlTmFt ZSk7DQorDQorICBTZXJpYWxpemVkU2l6ZSA9DQorICAgIHNpemVvZiAoU2VyaWFsaXplZE5hbWVT aXplKSArDQorICAgIFNlcmlhbGl6ZWROYW1lU2l6ZSArDQorICAgIHNpemVvZiAoKlZlbmRvckd1 aWQpICsNCisgICAgc2l6ZW9mIChBdHRyaWJ1dGVzKSArDQorICAgIHNpemVvZiAoU2VyaWFsaXpl ZERhdGFTaXplKSArDQorICAgIERhdGFTaXplOw0KKw0KKyAgU3RhdHVzID0gRW5zdXJlRXh0cmFC dWZmZXJTcGFjZSAoDQorICAgICAgICAgICAgIEluc3RhbmNlLA0KKyAgICAgICAgICAgICBTZXJp YWxpemVkU2l6ZQ0KKyAgICAgICAgICAgICApOw0KKyAgaWYgKFJFVFVSTl9FUlJPUiAoU3RhdHVz KSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIEFkZCBuYW1l IHNpemUgKFVJTlQzMikNCisgIC8vDQorICBBcHBlbmRUb0J1ZmZlciAoSW5zdGFuY2UsIChWT0lE KikgJlNlcmlhbGl6ZWROYW1lU2l6ZSwgc2l6ZW9mIChTZXJpYWxpemVkTmFtZVNpemUpKTsNCisN CisgIC8vDQorICAvLyBBZGQgdmFyaWFibGUgdW5pY29kZSBuYW1lIHN0cmluZw0KKyAgLy8NCisg IEFwcGVuZFRvQnVmZmVyIChJbnN0YW5jZSwgKFZPSUQqKSBWYXJpYWJsZU5hbWUsIFNlcmlhbGl6 ZWROYW1lU2l6ZSk7DQorDQorICAvLw0KKyAgLy8gQWRkIHZhcmlhYmxlIEdVSUQNCisgIC8vDQor ICBBcHBlbmRUb0J1ZmZlciAoSW5zdGFuY2UsIChWT0lEKikgVmVuZG9yR3VpZCwgc2l6ZW9mICgq VmVuZG9yR3VpZCkpOw0KKw0KKyAgLy8NCisgIC8vIEFkZCB2YXJpYWJsZSBhdHRyaWJ1dGVzDQor ICAvLw0KKyAgQXBwZW5kVG9CdWZmZXIgKEluc3RhbmNlLCAoVk9JRCopICZBdHRyaWJ1dGVzLCBz aXplb2YgKEF0dHJpYnV0ZXMpKTsNCisNCisgIC8vDQorICAvLyBBZGQgdmFyaWFibGUgZGF0YSBz aXplIChVSU5UMzIpDQorICAvLw0KKyAgU2VyaWFsaXplZERhdGFTaXplID0gKFVJTlQzMikgRGF0 YVNpemU7DQorICBBcHBlbmRUb0J1ZmZlciAoSW5zdGFuY2UsIChWT0lEKikgJlNlcmlhbGl6ZWRE YXRhU2l6ZSwgc2l6ZW9mIChTZXJpYWxpemVkRGF0YVNpemUpKTsNCisNCisgIC8vDQorICAvLyBB ZGQgdmFyaWFibGUgZGF0YQ0KKyAgLy8NCisgIEFwcGVuZFRvQnVmZmVyIChJbnN0YW5jZSwgRGF0 YSwgRGF0YVNpemUpOw0KKw0KKyAgcmV0dXJuIFJFVFVSTl9TVUNDRVNTOw0KK30NCisNCisNCisv KioNCisgIFNlcmlhbGl6ZXMgdGhlIHZhcmlhYmxlcyBrbm93biB0byB0aGlzIGluc3RhbmNlIGlu dG8gdGhlDQorICBwcm92aWRlZCBidWZmZXIuDQorDQorICBAcGFyYW1baW5dICAgICBIYW5kbGUg LSBIYW5kbGUgZm9yIGEgdmFyaWFibGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZQ0KKyAgQHBhcmFt W291dF0gICAgQnVmZmVyIC0gQSBidWZmZXIgdG8gc3RvcmUgdGhlIGJpbmFyeSByZXByZXNlbnRh dGlvbg0KKyAgICAgICAgICAgICAgICAgICBvZiB0aGUgdmFyaWFibGVzLg0KKyAgQHBhcmFtW2lu LG91dF0gU2l6ZSAtIE9uIGlucHV0IHRoaXMgaXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4NCisg ICAgICAgICAgICAgICAgICAgT24gb3V0cHV0IHRoaXMgaXMgdGhlIHNpemUgb2YgdGhlIGJpbmFy eSByZXByZXNlbnRhdGlvbg0KKyAgICAgICAgICAgICAgICAgICBvZiB0aGUgdmFyaWFibGVzLg0K Kw0KKyAgQHJldHZhbCAgICAgIFJFVFVSTl9TVUNDRVNTIC0gVGhlIGJpbmFyeSByZXByZXNlbnRh dGlvbiB3YXMgc3VjY2Vzc2Z1bGx5DQorICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgYW5kIHJl dHVybmVkIGluIHRoZSBidWZmZXIuDQorICBAcmV0dmFsICAgICAgUkVUVVJOX09VVF9PRl9SRVNP VVJDRVMgLSBUaGVyZSB3ZSBub3QgZW5vdWdoIHJlc291cmNlcyB0bw0KKyAgICAgICAgICAgICAg ICAgc2F2ZSB0aGUgdmFyaWFibGVzIHRvIHRoZSBidWZmZXIuDQorICBAcmV0dmFsICAgICAgUkVU VVJOX0lOVkFMSURfUEFSQU1FVEVSIC0gSGFuZGxlIHdhcyBub3QgYSB2YWxpZA0KKyAgICAgICAg ICAgICAgICAgdmFyaWFibGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZSBvcg0KKyAgICAgICAgICAg ICAgICAgU2l6ZSBvciBCdWZmZXIgd2VyZSBOVUxMLg0KKyAgQHJldHZhbCAgICAgIFJFVFVSTl9C VUZGRVJfVE9PX1NNQUxMIC0gVGhlIEJ1ZmZlciBzaXplIGFzIGluZGljYXRlZCBieQ0KKyAgICAg ICAgICAgICAgICAgdGhlIFNpemUgcGFyYW1ldGVyIHdhcyB0b28gc21hbGwgZm9yIHRoZSBzZXJp YWxpemVkDQorICAgICAgICAgICAgICAgICB2YXJpYWJsZSBkYXRhLiAgU2l6ZSBpcyByZXR1cm5l ZCB3aXRoIHRoZSByZXF1aXJlZCBzaXplLg0KKw0KKyoqLw0KK1JFVFVSTl9TVEFUVVMNCitFRklB UEkNCitTZXJpYWxpemVWYXJpYWJsZXNUb0J1ZmZlciAoDQorICBJTiAgICAgRUZJX0hBTkRMRSAg ICAgICAgICAgICAgICAgICAgICAgSGFuZGxlLA0KKyAgT1VUICAgIFZPSUQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpCdWZmZXIsDQorICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgKlNpemUNCisgICkNCit7DQorICBTVl9JTlNUQU5DRSAgICAqSW5zdGFuY2U7 DQorDQorICBJbnN0YW5jZSA9IFNWX0ZST01fSEFORExFIChIYW5kbGUpOw0KKw0KKyAgaWYgKFNp emUgPT0gTlVMTCkgew0KKyAgICByZXR1cm4gUkVUVVJOX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAg fQ0KKw0KKyAgaWYgKCpTaXplIDwgSW5zdGFuY2UtPkRhdGFTaXplKSB7DQorICAgICpTaXplID0g SW5zdGFuY2UtPkRhdGFTaXplOw0KKyAgICByZXR1cm4gUkVUVVJOX0JVRkZFUl9UT09fU01BTEw7 DQorICB9DQorDQorICBpZiAoQnVmZmVyID09IE5VTEwpIHsNCisgICAgcmV0dXJuIFJFVFVSTl9J TlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisNCisgICpTaXplID0gSW5zdGFuY2UtPkRhdGFTaXpl Ow0KKyAgQ29weU1lbSAoQnVmZmVyLCBJbnN0YW5jZS0+QnVmZmVyUHRyLCBJbnN0YW5jZS0+RGF0 YVNpemUpOw0KKw0KKyAgcmV0dXJuIFJFVFVSTl9TVUNDRVNTOw0KK30NCisNCmRpZmYgLS1naXQg YS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvUG9saWN5L0xpYnJhcnkvU2lsaWNv blBvbGljeUluaXRMaWIvU2lsaWNvblBvbGljeUluaXRMaWIuYyBiL1BsYXRmb3JtL0ludGVsL1Np bWljc09wZW5Cb2FyZFBrZy9Qb2xpY3kvTGlicmFyeS9TaWxpY29uUG9saWN5SW5pdExpYi9TaWxp Y29uUG9saWN5SW5pdExpYi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAw MC4uMzgzNTAxODk4ZA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNz T3BlbkJvYXJkUGtnL1BvbGljeS9MaWJyYXJ5L1NpbGljb25Qb2xpY3lJbml0TGliL1NpbGljb25Q b2xpY3lJbml0TGliLmMNCkBAIC0wLDAgKzEsMTA4IEBADQorLyoqIEBmaWxlDQorICBDb3B5cmln aHQgKGMpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4N CisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiov DQorDQorI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9J b0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1BlaVNlcnZpY2VzTGliLmg+DQorI2luY2x1ZGUg PExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KKw0KKy8qKg0KKyAgUGVyZm9ybXMgc2ls aWNvbiBwcmUtbWVtIHBvbGljeSBpbml0aWFsaXphdGlvbi4NCisNCisgIFRoZSBtZWFuaW5nIG9m IFBvbGljeSBpcyBkZWZpbmVkIGJ5IHNpbGljb24gY29kZS4NCisgIEl0IGNvdWxkIGJlIHRoZSBy YXcgZGF0YSwgYSBoYW5kbGUsIGEgUFBJLCBldGMuDQorDQorICBUaGUgcmV0dXJuZWQgZGF0YSBt dXN0IGJlIHVzZWQgYXMgaW5wdXQgZGF0YSBmb3IgU2lsaWNvblBvbGljeURvbmVQcmVNZW0oKSwN CisgIGFuZCBTaWxpY29uUG9saWN5VXBkYXRlTGliLlNpbGljb25Qb2xpY3lVcGRhdGVQcmVNZW0o KS4NCisNCisgIDEpIEluIEZTUCBwYXRoLCB0aGUgaW5wdXQgUG9saWN5IHNob3VsZCBiZSBGc3Bt VXBkLg0KKyAgVmFsdWUgb2YgRnNwbVVwZCBoYXMgYmVlbiBpbml0aWFsaXplZCBieSBGU1AgYmlu YXJ5IGRlZmF1bHQgdmFsdWUuDQorICBPbmx5IGEgc3Vic2V0IG9mIEZzcG1VcGQgbmVlZHMgdG8g YmUgdXBkYXRlZCBmb3IgZGlmZmVyZW50IHNpbGljb24gc2t1Lg0KKyAgVGhlIHJldHVybiBkYXRh IGlzIHNhbWUgRnNwbVVwZC4NCisNCisgIDIpIEluIG5vbi1GU1AgcGF0aCwgdGhlIGlucHV0IHBv bGljeSBjb3VsZCBiZSBOVUxMLg0KKyAgVGhlIHJldHVybiBkYXRhIGlzIHRoZSBpbml0aWFsaXpl ZCBwb2xpY3kuDQorDQorICBAcGFyYW1baW4sIG91dF0gUG9saWN5ICAgICAgIFBvaW50ZXIgdG8g cG9saWN5Lg0KKw0KKyAgQHJldHVybiB0aGUgaW5pdGlhbGl6ZWQgcG9saWN5Lg0KKyoqLw0KK1ZP SUQgKg0KK0VGSUFQSQ0KK1NpbGljb25Qb2xpY3lJbml0UHJlTWVtICgNCisgIElOIE9VVCBWT0lE ICpQb2xpY3kgT1BUSU9OQUwNCisgICkNCit7DQorICByZXR1cm4gUG9saWN5Ow0KK30NCisNCisv Kg0KKyAgVGhlIHNpbGljb24gcHJlLW1lbSBwb2xpY3kgaXMgZmluYWxpemVkLg0KKyAgU2lsaWNv biBjb2RlIGNhbiBkbyBpbml0aWFsaXphdGlvbiBiYXNlZCB1cG9uIHRoZSBwb2xpY3kgZGF0YS4N CisNCisgIFRoZSBpbnB1dCBQb2xpY3kgbXVzdCBiZSByZXR1cm5lZCBieSBTaWxpY29uUG9saWN5 SW5pdFByZU1lbSgpLg0KKw0KKyAgQHBhcmFtW2luXSBQb2xpY3kgICAgICAgUG9pbnRlciB0byBw b2xpY3kuDQorDQorICBAcmV0dmFsIFJFVFVSTl9TVUNDRVNTIFRoZSBwb2xpY3kgaXMgaGFuZGxl ZCBjb25zdW1lZCBieSBzaWxpY29uIGNvZGUuDQorKi8NCitSRVRVUk5fU1RBVFVTDQorRUZJQVBJ DQorU2lsaWNvblBvbGljeURvbmVQcmVNZW0gKA0KKyAgSU4gVk9JRCAqUG9saWN5DQorICApDQor ew0KKyAgcmV0dXJuIFJFVFVSTl9TVUNDRVNTOw0KK30NCisNCisvKioNCisgIFBlcmZvcm1zIHNp bGljb24gcG9zdC1tZW0gcG9saWN5IGluaXRpYWxpemF0aW9uLg0KKw0KKyAgVGhlIG1lYW5pbmcg b2YgUG9saWN5IGlzIGRlZmluZWQgYnkgc2lsaWNvbiBjb2RlLg0KKyAgSXQgY291bGQgYmUgdGhl IHJhdyBkYXRhLCBhIGhhbmRsZSwgYSBQUEksIGV0Yy4NCisNCisgIFRoZSByZXR1cm5lZCBkYXRh IG11c3QgYmUgdXNlZCBhcyBpbnB1dCBkYXRhIGZvciBTaWxpY29uUG9saWN5RG9uZVBvc3RNZW0o KSwNCisgIGFuZCBTaWxpY29uUG9saWN5VXBkYXRlTGliLlNpbGljb25Qb2xpY3lVcGRhdGVQb3N0 TWVtKCkuDQorDQorICAxKSBJbiBGU1AgcGF0aCwgdGhlIGlucHV0IFBvbGljeSBzaG91bGQgYmUg RnNwc1VwZC4NCisgIFZhbHVlIG9mIEZzcHNVcGQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYnkgRlNQ IGJpbmFyeSBkZWZhdWx0IHZhbHVlLg0KKyAgT25seSBhIHN1YnNldCBvZiBGc3BzVXBkIG5lZWRz IHRvIGJlIHVwZGF0ZWQgZm9yIGRpZmZlcmVudCBzaWxpY29uIHNrdS4NCisgIFRoZSByZXR1cm4g ZGF0YSBpcyBzYW1lIEZzcHNVcGQuDQorDQorICAyKSBJbiBub24tRlNQIHBhdGgsIHRoZSBpbnB1 dCBwb2xpY3kgY291bGQgYmUgTlVMTC4NCisgIFRoZSByZXR1cm4gZGF0YSBpcyB0aGUgaW5pdGlh bGl6ZWQgcG9saWN5Lg0KKw0KKyAgQHBhcmFtW2luLCBvdXRdIFBvbGljeSAgICAgICBQb2ludGVy IHRvIHBvbGljeS4NCisNCisgIEByZXR1cm4gdGhlIGluaXRpYWxpemVkIHBvbGljeS4NCisqKi8N CitWT0lEICoNCitFRklBUEkNCitTaWxpY29uUG9saWN5SW5pdFBvc3RNZW0gKA0KKyAgSU4gT1VU IFZPSUQgKlBvbGljeSBPUFRJT05BTA0KKyAgKQ0KK3sNCisgIHJldHVybiBQb2xpY3k7DQorfQ0K Kw0KKy8qDQorICBUaGUgc2lsaWNvbiBwb3N0LW1lbSBwb2xpY3kgaXMgZmluYWxpemVkLg0KKyAg U2lsaWNvbiBjb2RlIGNhbiBkbyBpbml0aWFsaXphdGlvbiBiYXNlZCB1cG9uIHRoZSBwb2xpY3kg ZGF0YS4NCisNCisgIFRoZSBpbnB1dCBQb2xpY3kgbXVzdCBiZSByZXR1cm5lZCBieSBTaWxpY29u UG9saWN5SW5pdFBvc3RNZW0oKS4NCisNCisgIEBwYXJhbVtpbl0gUG9saWN5ICAgICAgIFBvaW50 ZXIgdG8gcG9saWN5Lg0KKw0KKyAgQHJldHZhbCBSRVRVUk5fU1VDQ0VTUyBUaGUgcG9saWN5IGlz IGhhbmRsZWQgY29uc3VtZWQgYnkgc2lsaWNvbiBjb2RlLg0KKyovDQorUkVUVVJOX1NUQVRVUw0K K0VGSUFQSQ0KK1NpbGljb25Qb2xpY3lEb25lUG9zdE1lbSAoDQorICBJTiBWT0lEICpQb2xpY3kN CisgICkNCit7DQorICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQorfQ0KZGlmZiAtLWdpdCBhL1Bs YXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9Qb2xpY3kvTGlicmFyeS9TaWxpY29uUG9s aWN5VXBkYXRlTGliL1NpbGljb25Qb2xpY3lVcGRhdGVMaWIuYyBiL1BsYXRmb3JtL0ludGVsL1Np bWljc09wZW5Cb2FyZFBrZy9Qb2xpY3kvTGlicmFyeS9TaWxpY29uUG9saWN5VXBkYXRlTGliL1Np bGljb25Qb2xpY3lVcGRhdGVMaWIuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAw MDAwMDAuLjNiMjA3YTRlNzgNCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1Np bWljc09wZW5Cb2FyZFBrZy9Qb2xpY3kvTGlicmFyeS9TaWxpY29uUG9saWN5VXBkYXRlTGliL1Np bGljb25Qb2xpY3lVcGRhdGVMaWIuYw0KQEAgLTAsMCArMSw3MCBAQA0KKy8qKiBAZmlsZQ0KKyAg Q29weXJpZ2h0IChjKSAyMDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LiA8QlI+DQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVu dA0KKyoqLw0KKw0KKyNpbmNsdWRlIDxQaVBlaS5oPg0KKw0KKyNpbmNsdWRlIDxMaWJyYXJ5L0Rl YnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvSW9MaWIuaD4NCisjaW5jbHVkZSA8UHBpL1Jl YWRPbmx5VmFyaWFibGUyLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGVpU2VydmljZXNMaWIuaD4N CisNCisvKioNCisgIFBlcmZvcm1zIHNpbGljb24gcHJlLW1lbSBwb2xpY3kgdXBkYXRlLg0KKw0K KyAgVGhlIG1lYW5pbmcgb2YgUG9saWN5IGlzIGRlZmluZWQgYnkgc2lsaWNvbiBjb2RlLg0KKyAg SXQgY291bGQgYmUgdGhlIHJhdyBkYXRhLCBhIGhhbmRsZSwgYSBQUEksIGV0Yy4NCisNCisgIFRo ZSBpbnB1dCBQb2xpY3kgbXVzdCBiZSByZXR1cm5lZCBieSBTaWxpY29uUG9saWN5RG9uZVByZU1l bSgpLg0KKw0KKyAgMSkgSW4gRlNQIHBhdGgsIHRoZSBpbnB1dCBQb2xpY3kgc2hvdWxkIGJlIEZz cG1VcGQuDQorICBBIHBsYXRmb3JtIG1heSB1c2UgdGhpcyBBUEkgdG8gdXBkYXRlIHRoZSBGU1BN IFVQRCBwb2xpY3kgaW5pdGlhbGl6ZWQNCisgIGJ5IHRoZSBzaWxpY29uIG1vZHVsZSBvciB0aGUg ZGVmYXVsdCBVUEQgZGF0YS4NCisgIFRoZSBvdXRwdXQgb2YgRlNQTSBVUEQgZGF0YSBmcm9tIHRo aXMgQVBJIGlzIHRoZSBmaW5hbCBVUEQgZGF0YS4NCisNCisgIDIpIEluIG5vbi1GU1AgcGF0aCwg dGhlIGJvYXJkIG1heSB1c2UgYWRkaXRpb25hbCB3YXkgdG8gZ2V0DQorICB0aGUgc2lsaWNvbiBw b2xpY3kgZGF0YSBmaWVsZCBiYXNlZCB1cG9uIHRoZSBpbnB1dCBQb2xpY3kuDQorDQorICBAcGFy YW1baW4sIG91dF0gUG9saWN5ICAgICAgIFBvaW50ZXIgdG8gcG9saWN5Lg0KKw0KKyAgQHJldHVy biB0aGUgdXBkYXRlZCBwb2xpY3kuDQorKiovDQorVk9JRCAqDQorRUZJQVBJDQorU2lsaWNvblBv bGljeVVwZGF0ZVByZU1lbSAoDQorICBJTiBPVVQgVk9JRCAqUG9saWN5DQorICApDQorew0KKyAg cmV0dXJuIFBvbGljeTsNCit9DQorDQorLyoqDQorICBQZXJmb3JtcyBzaWxpY29uIHBvc3QtbWVt IHBvbGljeSB1cGRhdGUuDQorDQorICBUaGUgbWVhbmluZyBvZiBQb2xpY3kgaXMgZGVmaW5lZCBi eSBzaWxpY29uIGNvZGUuDQorICBJdCBjb3VsZCBiZSB0aGUgcmF3IGRhdGEsIGEgaGFuZGxlLCBh IFBQSSwgZXRjLg0KKw0KKyAgVGhlIGlucHV0IFBvbGljeSBtdXN0IGJlIHJldHVybmVkIGJ5IFNp bGljb25Qb2xpY3lEb25lUG9zdE1lbSgpLg0KKw0KKyAgMSkgSW4gRlNQIHBhdGgsIHRoZSBpbnB1 dCBQb2xpY3kgc2hvdWxkIGJlIEZzcHNVcGQuDQorICBBIHBsYXRmb3JtIG1heSB1c2UgdGhpcyBB UEkgdG8gdXBkYXRlIHRoZSBGU1BTIFVQRCBwb2xpY3kgaW5pdGlhbGl6ZWQNCisgIGJ5IHRoZSBz aWxpY29uIG1vZHVsZSBvciB0aGUgZGVmYXVsdCBVUEQgZGF0YS4NCisgIFRoZSBvdXRwdXQgb2Yg RlNQUyBVUEQgZGF0YSBmcm9tIHRoaXMgQVBJIGlzIHRoZSBmaW5hbCBVUEQgZGF0YS4NCisNCisg IDIpIEluIG5vbi1GU1AgcGF0aCwgdGhlIGJvYXJkIG1heSB1c2UgYWRkaXRpb25hbCB3YXkgdG8g Z2V0DQorICB0aGUgc2lsaWNvbiBwb2xpY3kgZGF0YSBmaWVsZCBiYXNlZCB1cG9uIHRoZSBpbnB1 dCBQb2xpY3kuDQorDQorICBAcGFyYW1baW4sIG91dF0gUG9saWN5ICAgICAgIFBvaW50ZXIgdG8g cG9saWN5Lg0KKw0KKyAgQHJldHVybiB0aGUgdXBkYXRlZCBwb2xpY3kuDQorKiovDQorVk9JRCAq DQorRUZJQVBJDQorU2lsaWNvblBvbGljeVVwZGF0ZVBvc3RNZW0gKA0KKyAgSU4gT1VUIFZPSUQg KlBvbGljeQ0KKyAgKQ0KK3sNCisgIHJldHVybiBQb2xpY3k7DQorfQ0KZGlmZiAtLWdpdCBhL1Bs YXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TZWNDb3JlL1NlY01haW4uYyBiL1BsYXRm b3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TZWNDb3JlL1NlY01haW4uYw0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLjgyNmZjOTY1YzkNCi0tLSAvZGV2L251bGwN CisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TZWNDb3JlL1NlY01haW4u Yw0KQEAgLTAsMCArMSw5NTYgQEANCisvKiogQGZpbGUNCisgIE1haW4gU0VDIHBoYXNlIGNvZGUu ICBUcmFuc2l0aW9ucyB0byBQRUkuDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMDggLSAyMDE1LCBJ bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorICAoQykgQ29weXJp Z2h0IDIwMTYgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFA8QlI+DQor DQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyoqLw0K Kw0KKyNpbmNsdWRlIDxQaVBlaS5oPg0KKw0KKyNpbmNsdWRlIDxMaWJyYXJ5L1BlaW1FbnRyeVBv aW50Lmg+DQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5 L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KKyNpbmNs dWRlIDxMaWJyYXJ5L1BlaVNlcnZpY2VzTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGNkTGli Lmg+DQorI2luY2x1ZGUgPExpYnJhcnkvVWVmaUNwdUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5 L0RlYnVnQWdlbnRMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9Jb0xpYi5oPg0KKyNpbmNsdWRl IDxMaWJyYXJ5L1BlQ29mZkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1BlQ29mZkdldEVudHJ5 UG9pbnRMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QZUNvZmZFeHRyYUFjdGlvbkxpYi5oPg0K KyNpbmNsdWRlIDxMaWJyYXJ5L0V4dHJhY3RHdWlkZWRTZWN0aW9uTGliLmg+DQorI2luY2x1ZGUg PExpYnJhcnkvTG9jYWxBcGljTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGNpQ2Y4TGliLmg+ DQorDQorI2luY2x1ZGUgPFBwaS9UZW1wb3JhcnlSYW1TdXBwb3J0Lmg+DQorI2luY2x1ZGUgPFJl Z2lzdGVyL1g1OEljaDEwLmg+DQorDQorI2RlZmluZSBTRUNfSURUX0VOVFJZX0NPVU5UICAzNA0K Kw0KK3R5cGVkZWYgc3RydWN0IF9TRUNfSURUX1RBQkxFIHsNCisgIEVGSV9QRUlfU0VSVklDRVMg ICAgICAgICAgKlBlaVNlcnZpY2U7DQorICBJQTMyX0lEVF9HQVRFX0RFU0NSSVBUT1IgIElkdFRh YmxlW1NFQ19JRFRfRU5UUllfQ09VTlRdOw0KK30gU0VDX0lEVF9UQUJMRTsNCisNCitWT0lEDQor RUZJQVBJDQorU2VjU3RhcnR1cFBoYXNlMiAoDQorICBJTiBWT0lEICAgICAgICAgICAgICAgICAg ICAgKkNvbnRleHQNCisgICk7DQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1RlbXBvcmFyeVJh bU1pZ3JhdGlvbiAoDQorICBJTiBDT05TVCBFRklfUEVJX1NFUlZJQ0VTICAgKipQZWlTZXJ2aWNl cywNCisgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICBUZW1wb3JhcnlNZW1vcnlCYXNlLA0K KyAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgIFBlcm1hbmVudE1lbW9yeUJhc2UsDQorICBJ TiBVSU5UTiAgICAgICAgICAgICAgICAgICAgQ29weVNpemUNCisgICk7DQorDQorRUZJX1BFSV9U RU1QT1JBUllfUkFNX1NVUFBPUlRfUFBJIG1UZW1wb3JhcnlSYW1TdXBwb3J0UHBpID0gew0KKyAg VGVtcG9yYXJ5UmFtTWlncmF0aW9uDQorfTsNCisNCitFRklfUEVJX1BQSV9ERVNDUklQVE9SIG1Q cml2YXRlRGlzcGF0Y2hUYWJsZVtdID0gew0KKyAgew0KKyAgICAoRUZJX1BFSV9QUElfREVTQ1JJ UFRPUl9QUEkgfCBFRklfUEVJX1BQSV9ERVNDUklQVE9SX1RFUk1JTkFURV9MSVNUKSwNCisgICAg JmdFZmlUZW1wb3JhcnlSYW1TdXBwb3J0UHBpR3VpZCwNCisgICAgJm1UZW1wb3JhcnlSYW1TdXBw b3J0UHBpDQorICB9LA0KK307DQorDQorLy8NCisvLyBUZW1wbGF0ZSBvZiBhbiBJRFQgZW50cnkg cG9pbnRpbmcgdG8gMTA6RkZGRkZGRTRoLg0KKy8vDQorSUEzMl9JRFRfR0FURV9ERVNDUklQVE9S ICBtSWR0RW50cnlUZW1wbGF0ZSA9IHsNCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIEJpdHMNCisgICAgMHhmZmU0LCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vIE9mZnNldExvdw0KKyAgICAweDEwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8gU2VsZWN0b3INCisgICAgMHgwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vIFJlc2VydmVkXzANCisgICAgSUEzMl9JRFRfR0FURV9UWVBFX0lOVEVSUlVQVF8zMiwgICAg IC8vIEdhdGVUeXBlDQorICAgIDB4ZmZmZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv LyBPZmZzZXRIaWdoDQorICB9DQorfTsNCisNCisvKioNCisgIExvY2F0ZXMgdGhlIG1haW4gYm9v dCBmaXJtd2FyZSB2b2x1bWUuDQorDQorICBAcGFyYW1baW4sb3V0XSAgQm9vdEZ2ICBPbiBpbnB1 dCwgdGhlIGJhc2Ugb2YgdGhlIEJvb3RGdg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgT24g b3V0cHV0LCB0aGUgZGVjb21wcmVzc2VkIG1haW4gZmlybXdhcmUgdm9sdW1lDQorDQorICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgIFRoZSBtYWluIGZpcm13YXJlIHZvbHVtZSB3YXMgbG9jYXRlZCBh bmQgZGVjb21wcmVzc2VkDQorICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgIFRoZSBtYWluIGZpcm13 YXJlIHZvbHVtZSB3YXMgbm90IGZvdW5kDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0ZpbmRNYWlu RnYgKA0KKyAgSU4gT1VUICBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAgICoqQm9vdEZ2DQor ICApDQorew0KKyAgRUZJX0ZJUk1XQVJFX1ZPTFVNRV9IRUFERVIgICpGdjsNCisgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICBEaXN0YW5jZTsNCisNCisgIEFTU0VSVCAoKChVSU5UTikgKkJv b3RGdiAmIEVGSV9QQUdFX01BU0spID09IDApOw0KKw0KKyAgRnYgPSAqQm9vdEZ2Ow0KKyAgRGlz dGFuY2UgPSAoVUlOVE4pICgqQm9vdEZ2KS0+RnZMZW5ndGg7DQorICBkbyB7DQorICAgIEZ2ID0g KEVGSV9GSVJNV0FSRV9WT0xVTUVfSEVBREVSKikgKChVSU5UOCopIEZ2IC0gRUZJX1BBR0VfU0la RSk7DQorICAgIERpc3RhbmNlICs9IEVGSV9QQUdFX1NJWkU7DQorICAgIGlmIChEaXN0YW5jZSA+ IFNJWkVfMzJNQikgew0KKyAgICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KKyAgICB9DQorDQor ICAgIGlmIChGdi0+U2lnbmF0dXJlICE9IEVGSV9GVkhfU0lHTkFUVVJFKSB7DQorICAgICAgY29u dGludWU7DQorICAgIH0NCisNCisgICAgaWYgKChVSU5UTikgRnYtPkZ2TGVuZ3RoID4gRGlzdGFu Y2UpIHsNCisgICAgICBjb250aW51ZTsNCisgICAgfQ0KKw0KKyAgICAqQm9vdEZ2ID0gRnY7DQor ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCisNCisgIH0gd2hpbGUgKFRSVUUpOw0KK30NCisNCisv KioNCisgIExvY2F0ZXMgYSBzZWN0aW9uIHdpdGhpbiBhIHNlcmllcyBvZiBzZWN0aW9ucw0KKyAg d2l0aCB0aGUgc3BlY2lmaWVkIHNlY3Rpb24gdHlwZS4NCisNCisgIFRoZSBJbnN0YW5jZSBwYXJh bWV0ZXIgaW5kaWNhdGVzIHdoaWNoIGluc3RhbmNlIG9mIHRoZSBzZWN0aW9uDQorICB0eXBlIHRv IHJldHVybi4gKDAgaXMgZmlyc3QgaW5zdGFuY2UsIDEgaXMgc2Vjb25kLi4uKQ0KKw0KKyAgQHBh cmFtW2luXSAgIFNlY3Rpb25zICAgICAgICBUaGUgc2VjdGlvbnMgdG8gc2VhcmNoDQorICBAcGFy YW1baW5dICAgU2l6ZU9mU2VjdGlvbnMgIFRvdGFsIHNpemUgb2YgYWxsIHNlY3Rpb25zDQorICBA cGFyYW1baW5dICAgU2VjdGlvblR5cGUgICAgIFRoZSBzZWN0aW9uIHR5cGUgdG8gbG9jYXRlDQor ICBAcGFyYW1baW5dICAgSW5zdGFuY2UgICAgICAgIFRoZSBzZWN0aW9uIGluc3RhbmNlIG51bWJl cg0KKyAgQHBhcmFtW291dF0gIEZvdW5kU2VjdGlvbiAgICBUaGUgRkZTIHNlY3Rpb24gaWYgZm91 bmQNCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBmaWxlIGFuZCBzZWN0 aW9uIHdhcyBmb3VuZA0KKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhlIGZpbGUg YW5kIHNlY3Rpb24gd2FzIG5vdCBmb3VuZA0KKyAgQHJldHZhbCBFRklfVk9MVU1FX0NPUlJVUFRF RCAgVGhlIGZpcm13YXJlIHZvbHVtZSB3YXMgY29ycnVwdGVkDQorDQorKiovDQorRUZJX1NUQVRV Uw0KK0ZpbmRGZnNTZWN0aW9uSW5zdGFuY2UgKA0KKyAgSU4gIFZPSUQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpTZWN0aW9ucywNCisgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTaXplT2ZTZWN0aW9ucywNCisgIElOICBFRklfU0VDVElPTl9UWVBFICAgICAgICAg ICAgICAgICBTZWN0aW9uVHlwZSwNCisgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJbnN0YW5jZSwNCisgIE9VVCBFRklfQ09NTU9OX1NFQ1RJT05fSEVBREVSICAgICAgICAq KkZvdW5kU2VjdGlvbg0KKyAgKQ0KK3sNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBD dXJyZW50QWRkcmVzczsNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICBTaXplOw0KKyAg RUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgIEVuZE9mU2VjdGlvbnM7DQorICBFRklfQ09NTU9O X1NFQ1RJT05fSEVBREVSICAgKlNlY3Rpb247DQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAg ICAgRW5kT2ZTZWN0aW9uOw0KKw0KKyAgLy8NCisgIC8vIExvb3AgdGhyb3VnaCB0aGUgRkZTIGZp bGUgc2VjdGlvbnMgd2l0aGluIHRoZSBQRUkgQ29yZSBGRlMgZmlsZQ0KKyAgLy8NCisgIEVuZE9m U2VjdGlvbiA9IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pIFNlY3Rpb25zOw0KKyAgRW5k T2ZTZWN0aW9ucyA9IEVuZE9mU2VjdGlvbiArIFNpemVPZlNlY3Rpb25zOw0KKyAgZm9yICg7Oykg ew0KKyAgICBpZiAoRW5kT2ZTZWN0aW9uID09IEVuZE9mU2VjdGlvbnMpIHsNCisgICAgICBicmVh azsNCisgICAgfQ0KKyAgICBDdXJyZW50QWRkcmVzcyA9IChFbmRPZlNlY3Rpb24gKyAzKSAmIH4o M1VMTCk7DQorICAgIGlmIChDdXJyZW50QWRkcmVzcyA+PSBFbmRPZlNlY3Rpb25zKSB7DQorICAg ICAgcmV0dXJuIEVGSV9WT0xVTUVfQ09SUlVQVEVEOw0KKyAgICB9DQorDQorICAgIFNlY3Rpb24g PSAoRUZJX0NPTU1PTl9TRUNUSU9OX0hFQURFUiopKFVJTlROKSBDdXJyZW50QWRkcmVzczsNCisg ICAgREVCVUcgKChFRklfRF9WRVJCT1NFLCAiU2VjdGlvbi0+VHlwZTogMHgleFxuIiwgU2VjdGlv bi0+VHlwZSkpOw0KKw0KKyAgICBTaXplID0gU0VDVElPTl9TSVpFIChTZWN0aW9uKTsNCisgICAg aWYgKFNpemUgPCBzaXplb2YgKCpTZWN0aW9uKSkgew0KKyAgICAgIHJldHVybiBFRklfVk9MVU1F X0NPUlJVUFRFRDsNCisgICAgfQ0KKw0KKyAgICBFbmRPZlNlY3Rpb24gPSBDdXJyZW50QWRkcmVz cyArIFNpemU7DQorICAgIGlmIChFbmRPZlNlY3Rpb24gPiBFbmRPZlNlY3Rpb25zKSB7DQorICAg ICAgcmV0dXJuIEVGSV9WT0xVTUVfQ09SUlVQVEVEOw0KKyAgICB9DQorDQorICAgIC8vDQorICAg IC8vIExvb2sgZm9yIHRoZSByZXF1ZXN0ZWQgc2VjdGlvbiB0eXBlDQorICAgIC8vDQorICAgIGlm IChTZWN0aW9uLT5UeXBlID09IFNlY3Rpb25UeXBlKSB7DQorICAgICAgaWYgKEluc3RhbmNlID09 IDApIHsNCisgICAgICAgICpGb3VuZFNlY3Rpb24gPSBTZWN0aW9uOw0KKyAgICAgICAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KKyAgICAgIH0gZWxzZSB7DQorICAgICAgICBJbnN0YW5jZS0tOw0KKyAg ICAgIH0NCisgICAgfQ0KKyAgICBERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICJTZWN0aW9uLT5UeXBl ICgweCV4KSAhPSBTZWN0aW9uVHlwZSAoMHgleClcbiIsIFNlY3Rpb24tPlR5cGUsIFNlY3Rpb25U eXBlKSk7DQorICB9DQorDQorICByZXR1cm4gRUZJX05PVF9GT1VORDsNCit9DQorDQorLyoqDQor ICBMb2NhdGVzIGEgc2VjdGlvbiB3aXRoaW4gYSBzZXJpZXMgb2Ygc2VjdGlvbnMNCisgIHdpdGgg dGhlIHNwZWNpZmllZCBzZWN0aW9uIHR5cGUuDQorDQorICBAcGFyYW1baW5dICAgU2VjdGlvbnMg ICAgICAgIFRoZSBzZWN0aW9ucyB0byBzZWFyY2gNCisgIEBwYXJhbVtpbl0gICBTaXplT2ZTZWN0 aW9ucyAgVG90YWwgc2l6ZSBvZiBhbGwgc2VjdGlvbnMNCisgIEBwYXJhbVtpbl0gICBTZWN0aW9u VHlwZSAgICAgVGhlIHNlY3Rpb24gdHlwZSB0byBsb2NhdGUNCisgIEBwYXJhbVtvdXRdICBGb3Vu ZFNlY3Rpb24gICAgVGhlIEZGUyBzZWN0aW9uIGlmIGZvdW5kDQorDQorICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICBUaGUgZmlsZSBhbmQgc2VjdGlvbiB3YXMgZm91bmQNCisgIEByZXR2 YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBmaWxlIGFuZCBzZWN0aW9uIHdhcyBub3QgZm91 bmQNCisgIEByZXR2YWwgRUZJX1ZPTFVNRV9DT1JSVVBURUQgIFRoZSBmaXJtd2FyZSB2b2x1bWUg d2FzIGNvcnJ1cHRlZA0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitGaW5kRmZzU2VjdGlvbkluU2Vj dGlvbnMgKA0KKyAgSU4gIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpTZWN0aW9u cywNCisgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplT2ZTZWN0aW9u cywNCisgIElOICBFRklfU0VDVElPTl9UWVBFICAgICAgICAgICAgICAgICBTZWN0aW9uVHlwZSwN CisgIE9VVCBFRklfQ09NTU9OX1NFQ1RJT05fSEVBREVSICAgICAgICAqKkZvdW5kU2VjdGlvbg0K KyAgKQ0KK3sNCisgIHJldHVybiBGaW5kRmZzU2VjdGlvbkluc3RhbmNlICgNCisgICAgICAgICAg IFNlY3Rpb25zLA0KKyAgICAgICAgICAgU2l6ZU9mU2VjdGlvbnMsDQorICAgICAgICAgICBTZWN0 aW9uVHlwZSwNCisgICAgICAgICAgIDAsDQorICAgICAgICAgICBGb3VuZFNlY3Rpb24NCisgICAg ICAgICAgICk7DQorfQ0KKw0KKy8qKg0KKyAgTG9jYXRlcyBhIEZGUyBmaWxlIHdpdGggdGhlIHNw ZWNpZmllZCBmaWxlIHR5cGUgYW5kIGEgc2VjdGlvbg0KKyAgd2l0aGluIHRoYXQgZmlsZSB3aXRo IHRoZSBzcGVjaWZpZWQgc2VjdGlvbiB0eXBlLg0KKw0KKyAgQHBhcmFtW2luXSAgIEZ2ICAgICAg ICAgICAgVGhlIGZpcm13YXJlIHZvbHVtZSB0byBzZWFyY2gNCisgIEBwYXJhbVtpbl0gICBGaWxl VHlwZSAgICAgIFRoZSBmaWxlIHR5cGUgdG8gbG9jYXRlDQorICBAcGFyYW1baW5dICAgU2VjdGlv blR5cGUgICBUaGUgc2VjdGlvbiB0eXBlIHRvIGxvY2F0ZQ0KKyAgQHBhcmFtW291dF0gIEZvdW5k U2VjdGlvbiAgVGhlIEZGUyBzZWN0aW9uIGlmIGZvdW5kDQorDQorICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICBUaGUgZmlsZSBhbmQgc2VjdGlvbiB3YXMgZm91bmQNCisgIEByZXR2YWwg RUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBmaWxlIGFuZCBzZWN0aW9uIHdhcyBub3QgZm91bmQN CisgIEByZXR2YWwgRUZJX1ZPTFVNRV9DT1JSVVBURUQgIFRoZSBmaXJtd2FyZSB2b2x1bWUgd2Fz IGNvcnJ1cHRlZA0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitGaW5kRmZzRmlsZUFuZFNlY3Rpb24g KA0KKyAgSU4gIEVGSV9GSVJNV0FSRV9WT0xVTUVfSEVBREVSICAgICAgICpGdiwNCisgIElOICBF RklfRlZfRklMRVRZUEUgICAgICAgICAgICAgICAgICBGaWxlVHlwZSwNCisgIElOICBFRklfU0VD VElPTl9UWVBFICAgICAgICAgICAgICAgICBTZWN0aW9uVHlwZSwNCisgIE9VVCBFRklfQ09NTU9O X1NFQ1RJT05fSEVBREVSICAgICAgICAqKkZvdW5kU2VjdGlvbg0KKyAgKQ0KK3sNCisgIEVGSV9T VEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAg ICAgICAgQ3VycmVudEFkZHJlc3M7DQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgRW5k T2ZGaXJtd2FyZVZvbHVtZTsNCisgIEVGSV9GRlNfRklMRV9IRUFERVIgICAgICAgICAqRmlsZTsN CisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICBTaXplOw0KKyAgRUZJX1BIWVNJQ0FMX0FE RFJFU1MgICAgICAgIEVuZE9mRmlsZTsNCisNCisgIGlmIChGdi0+U2lnbmF0dXJlICE9IEVGSV9G VkhfU0lHTkFUVVJFKSB7DQorICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJGViBhdCAlcCBkb2Vz IG5vdCBoYXZlIEZWIGhlYWRlciBzaWduYXR1cmVcbiIsIEZ2KSk7DQorICAgIHJldHVybiBFRklf Vk9MVU1FX0NPUlJVUFRFRDsNCisgIH0NCisNCisgIEN1cnJlbnRBZGRyZXNzID0gKEVGSV9QSFlT SUNBTF9BRERSRVNTKShVSU5UTikgRnY7DQorICBFbmRPZkZpcm13YXJlVm9sdW1lID0gQ3VycmVu dEFkZHJlc3MgKyBGdi0+RnZMZW5ndGg7DQorDQorICAvLw0KKyAgLy8gTG9vcCB0aHJvdWdoIHRo ZSBGRlMgZmlsZXMgaW4gdGhlIEJvb3QgRmlybXdhcmUgVm9sdW1lDQorICAvLw0KKyAgZm9yIChF bmRPZkZpbGUgPSBDdXJyZW50QWRkcmVzcyArIEZ2LT5IZWFkZXJMZW5ndGg7IDsgKSB7DQorDQor ICAgIEN1cnJlbnRBZGRyZXNzID0gKEVuZE9mRmlsZSArIDcpICYgfig3VUxMKTsNCisgICAgaWYg KEN1cnJlbnRBZGRyZXNzID4gRW5kT2ZGaXJtd2FyZVZvbHVtZSkgew0KKyAgICAgIHJldHVybiBF RklfVk9MVU1FX0NPUlJVUFRFRDsNCisgICAgfQ0KKw0KKyAgICBGaWxlID0gKEVGSV9GRlNfRklM RV9IRUFERVIqKShVSU5UTikgQ3VycmVudEFkZHJlc3M7DQorICAgIFNpemUgPSAqKFVJTlQzMiop IEZpbGUtPlNpemUgJiAweGZmZmZmZjsNCisgICAgaWYgKFNpemUgPCAoc2l6ZW9mICgqRmlsZSkg KyBzaXplb2YgKEVGSV9DT01NT05fU0VDVElPTl9IRUFERVIpKSkgew0KKyAgICAgIHJldHVybiBF RklfVk9MVU1FX0NPUlJVUFRFRDsNCisgICAgfQ0KKyAgICBERUJVRyAoKEVGSV9EX1ZFUkJPU0Us ICJGaWxlLT5UeXBlOiAweCV4XG4iLCBGaWxlLT5UeXBlKSk7DQorDQorICAgIEVuZE9mRmlsZSA9 IEN1cnJlbnRBZGRyZXNzICsgU2l6ZTsNCisgICAgaWYgKEVuZE9mRmlsZSA+IEVuZE9mRmlybXdh cmVWb2x1bWUpIHsNCisgICAgICByZXR1cm4gRUZJX1ZPTFVNRV9DT1JSVVBURUQ7DQorICAgIH0N CisNCisgICAgLy8NCisgICAgLy8gTG9vayBmb3IgdGhlIHJlcXVlc3QgZmlsZSB0eXBlDQorICAg IC8vDQorICAgIGlmIChGaWxlLT5UeXBlICE9IEZpbGVUeXBlKSB7DQorICAgICAgREVCVUcgKChF RklfRF9WRVJCT1NFLCAiRmlsZS0+VHlwZSAoMHgleCkgIT0gRmlsZVR5cGUgKDB4JXgpXG4iLCBG aWxlLT5UeXBlLCBGaWxlVHlwZSkpOw0KKyAgICAgIGNvbnRpbnVlOw0KKyAgICB9DQorDQorICAg IFN0YXR1cyA9IEZpbmRGZnNTZWN0aW9uSW5TZWN0aW9ucyAoDQorICAgICAgICAgICAgICAgKFZP SUQqKSAoRmlsZSArIDEpLA0KKyAgICAgICAgICAgICAgIChVSU5UTikgRW5kT2ZGaWxlIC0gKFVJ TlROKSAoRmlsZSArIDEpLA0KKyAgICAgICAgICAgICAgIFNlY3Rpb25UeXBlLA0KKyAgICAgICAg ICAgICAgIEZvdW5kU2VjdGlvbg0KKyAgICAgICAgICAgICAgICk7DQorICAgIGlmICghRUZJX0VS Uk9SIChTdGF0dXMpIHx8IChTdGF0dXMgPT0gRUZJX1ZPTFVNRV9DT1JSVVBURUQpKSB7DQorICAg ICAgcmV0dXJuIFN0YXR1czsNCisgICAgfQ0KKyAgfQ0KK30NCisNCisvKioNCisgIExvY2F0ZXMg dGhlIGNvbXByZXNzZWQgbWFpbiBmaXJtd2FyZSB2b2x1bWUgYW5kIGRlY29tcHJlc3NlcyBpdC4N CisNCisgIEBwYXJhbVtpbixvdXRdICBGdiAgICAgICAgICAgIE9uIGlucHV0LCB0aGUgZmlybXdh cmUgdm9sdW1lIHRvIHNlYXJjaA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24g b3V0cHV0LCB0aGUgZGVjb21wcmVzc2VkIEJPT1QvUEVJIEZWDQorDQorICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICBUaGUgZmlsZSBhbmQgc2VjdGlvbiB3YXMgZm91bmQNCisgIEByZXR2 YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBmaWxlIGFuZCBzZWN0aW9uIHdhcyBub3QgZm91 bmQNCisgIEByZXR2YWwgRUZJX1ZPTFVNRV9DT1JSVVBURUQgIFRoZSBmaXJtd2FyZSB2b2x1bWUg d2FzIGNvcnJ1cHRlZA0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitEZWNvbXByZXNzTWVtRnZzICgN CisgIElOIE9VVCBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAgICAgICAqKkZ2DQorICApDQor ew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIEVGSV9H VUlEX0RFRklORURfU0VDVElPTiAgICAgICAgICAqU2VjdGlvbjsNCisgIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXRCdWZmZXJTaXplOw0KKyAgVUlOVDMyICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hCdWZmZXJTaXplOw0KKyAgVUlOVDE2ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNlY3Rpb25BdHRyaWJ1dGU7DQorICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQXV0aGVudGljYXRpb25TdGF0dXM7DQorICBWT0lEICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKk91dHB1dEJ1ZmZlcjsNCisgIFZPSUQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqU2NyYXRjaEJ1ZmZlcjsNCisgIEVGSV9DT01NT05fU0VDVElPTl9I RUFERVIgICAgICAgICAqRnZTZWN0aW9uOw0KKyAgRUZJX0ZJUk1XQVJFX1ZPTFVNRV9IRUFERVIg ICAgICAgICpQZWlNZW1GdjsNCisgIEVGSV9GSVJNV0FSRV9WT0xVTUVfSEVBREVSICAgICAgICAq RHhlTWVtRnY7DQorICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnZIZWFkZXJT aXplOw0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ2U2VjdGlvblNpemU7 DQorDQorICBGdlNlY3Rpb24gPSAoRUZJX0NPTU1PTl9TRUNUSU9OX0hFQURFUiopIE5VTEw7DQor DQorICBERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICJGaW5kIGFuZCBkZWNvbXByZXNzIEZWIGltYWdl LlxuIikpOw0KKyAgU3RhdHVzID0gRmluZEZmc0ZpbGVBbmRTZWN0aW9uICgNCisgICAgICAgICAg ICAgKkZ2LA0KKyAgICAgICAgICAgICBFRklfRlZfRklMRVRZUEVfRklSTVdBUkVfVk9MVU1FX0lN QUdFLA0KKyAgICAgICAgICAgICBFRklfU0VDVElPTl9HVUlEX0RFRklORUQsDQorICAgICAgICAg ICAgIChFRklfQ09NTU9OX1NFQ1RJT05fSEVBREVSKiopICZTZWN0aW9uDQorICAgICAgICAgICAg ICk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIERFQlVHICgoRUZJX0RfRVJS T1IsICJVbmFibGUgdG8gZmluZCBHVUlEIGRlZmluZWQgc2VjdGlvblxuIikpOw0KKyAgICByZXR1 cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgU3RhdHVzID0gRXh0cmFjdEd1aWRlZFNlY3Rpb25HZXRJ bmZvICgNCisgICAgICAgICAgICAgU2VjdGlvbiwNCisgICAgICAgICAgICAgJk91dHB1dEJ1ZmZl clNpemUsDQorICAgICAgICAgICAgICZTY3JhdGNoQnVmZmVyU2l6ZSwNCisgICAgICAgICAgICAg JlNlY3Rpb25BdHRyaWJ1dGUNCisgICAgICAgICAgICAgKTsNCisgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCisgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIlVuYWJsZSB0byBHZXRJbmZvIGZv ciBHVUlEZWQgc2VjdGlvblxuIikpOw0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAg T3V0cHV0QnVmZmVyID0gKFZPSUQqKSAoKFVJTlQ4KikoVUlOVE4pIFBjZEdldDMyIChQY2RTaW1p Y3NEeGVNZW1GdkJhc2UpICsgU0laRV8xTUIpOw0KKyAgU2NyYXRjaEJ1ZmZlciA9IEFMSUdOX1BP SU5URVIgKChVSU5UOCopIE91dHB1dEJ1ZmZlciArIE91dHB1dEJ1ZmZlclNpemUsIFNJWkVfMU1C KTsNCisNCisgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIlBjZFNpbWljc0R4ZU1lbUZ2QmFzZTog MHgleFxuIiwgUGNkR2V0MzIgKFBjZFNpbWljc0R4ZU1lbUZ2QmFzZSkpKTsNCisgIERFQlVHICgo RUZJX0RfVkVSQk9TRSwgIk91dHB1dEJ1ZmZlcjogMHgleFxuIiwgT3V0cHV0QnVmZmVyKSk7DQor ICBERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICJPdXRwdXRCdWZmZXJTaXplOiAweCV4XG4iLCBPdXRw dXRCdWZmZXJTaXplKSk7DQorICBERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICJTY3JhdGNoQnVmZmVy OiAweCV4XG4iLCBTY3JhdGNoQnVmZmVyKSk7DQorICBERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICJT Y3JhdGNoQnVmZmVyU2l6ZTogMHgleFxuIiwgU2NyYXRjaEJ1ZmZlclNpemUpKTsNCisgIERFQlVH ICgoRUZJX0RfVkVSQk9TRSwgIlBjZFNpbWljc0RlY29tcHJlc3Npb25TY3JhdGNoRW5kOiAweCV4 XG4iLCBQY2RHZXQzMiAoUGNkU2ltaWNzRGVjb21wcmVzc2lvblNjcmF0Y2hFbmQpKSk7DQorDQor ICBERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICIlYTogT3V0cHV0QnVmZmVyQCVwKzB4JXggU2NyYXRj aEJ1ZmZlckAlcCsweCV4ICINCisgICAgIlBjZFNpbWljc0RlY29tcHJlc3Npb25TY3JhdGNoRW5k PTB4JXhcbiIsIF9fRlVOQ1RJT05fXywgT3V0cHV0QnVmZmVyLA0KKyAgICBPdXRwdXRCdWZmZXJT aXplLCBTY3JhdGNoQnVmZmVyLCBTY3JhdGNoQnVmZmVyU2l6ZSwNCisgICAgUGNkR2V0MzIgKFBj ZFNpbWljc0RlY29tcHJlc3Npb25TY3JhdGNoRW5kKSkpOw0KKyAgQVNTRVJUICgoVUlOVE4pU2Ny YXRjaEJ1ZmZlciArIFNjcmF0Y2hCdWZmZXJTaXplID09DQorICAgIFBjZEdldDMyIChQY2RTaW1p Y3NEZWNvbXByZXNzaW9uU2NyYXRjaEVuZCkpOw0KKw0KKyAgU3RhdHVzID0gRXh0cmFjdEd1aWRl ZFNlY3Rpb25EZWNvZGUgKA0KKyAgICAgICAgICAgICBTZWN0aW9uLA0KKyAgICAgICAgICAgICAm T3V0cHV0QnVmZmVyLA0KKyAgICAgICAgICAgICBTY3JhdGNoQnVmZmVyLA0KKyAgICAgICAgICAg ICAmQXV0aGVudGljYXRpb25TdGF0dXMNCisgICAgICAgICAgICAgKTsNCisgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCisgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIkVycm9yIGR1cmluZyBH VUlEIHNlY3Rpb24gZGVjb2RlXG4iKSk7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQor ICBTdGF0dXMgPSBGaW5kRmZzU2VjdGlvbkluc3RhbmNlICgNCisgICAgICAgICAgICAgT3V0cHV0 QnVmZmVyLA0KKyAgICAgICAgICAgICBPdXRwdXRCdWZmZXJTaXplLA0KKyAgICAgICAgICAgICBF RklfU0VDVElPTl9GSVJNV0FSRV9WT0xVTUVfSU1BR0UsDQorICAgICAgICAgICAgIDAsDQorICAg ICAgICAgICAgICZGdlNlY3Rpb24NCisgICAgICAgICAgICAgKTsNCisgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCisgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIlVuYWJsZSB0byBmaW5kIFBF SSBGViBzZWN0aW9uXG4iKSk7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBBU1NF UlQgKFNFQ1RJT05fU0laRSAoRnZTZWN0aW9uKSA9PQ0KKyAgICAgICAgICAoUGNkR2V0MzIgKFBj ZFNpbWljc1BlaU1lbUZ2U2l6ZSkgKyBzaXplb2YgKCpGdlNlY3Rpb24pKSk7DQorICBBU1NFUlQg KEZ2U2VjdGlvbi0+VHlwZSA9PSBFRklfU0VDVElPTl9GSVJNV0FSRV9WT0xVTUVfSU1BR0UpOw0K Kw0KKyAgUGVpTWVtRnYgPSAoRUZJX0ZJUk1XQVJFX1ZPTFVNRV9IRUFERVIqKShVSU5UTikgUGNk R2V0MzIgKFBjZFNpbWljc1BlaU1lbUZ2QmFzZSk7DQorICBDb3B5TWVtIChQZWlNZW1GdiwgKFZP SUQqKSAoRnZTZWN0aW9uICsgMSksIFBjZEdldDMyIChQY2RTaW1pY3NQZWlNZW1GdlNpemUpKTsN CisNCisgIGlmIChQZWlNZW1Gdi0+U2lnbmF0dXJlICE9IEVGSV9GVkhfU0lHTkFUVVJFKSB7DQor ICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJFeHRyYWN0ZWQgRlYgYXQgJXAgZG9lcyBub3QgaGF2 ZSBGViBoZWFkZXIgc2lnbmF0dXJlXG4iLCBQZWlNZW1GdikpOw0KKyAgICBDcHVEZWFkTG9vcCAo KTsNCisgICAgcmV0dXJuIEVGSV9WT0xVTUVfQ09SUlVQVEVEOw0KKyAgfQ0KKw0KKyAgU3RhdHVz ID0gRmluZEZmc1NlY3Rpb25JbnN0YW5jZSAoDQorICAgICAgICAgICAgIE91dHB1dEJ1ZmZlciwN CisgICAgICAgICAgICAgT3V0cHV0QnVmZmVyU2l6ZSwNCisgICAgICAgICAgICAgRUZJX1NFQ1RJ T05fRklSTVdBUkVfVk9MVU1FX0lNQUdFLA0KKyAgICAgICAgICAgICAxLA0KKyAgICAgICAgICAg ICAmRnZTZWN0aW9uDQorICAgICAgICAgICAgICk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQorICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJVbmFibGUgdG8gZmluZCBEWEUgRlYgc2Vj dGlvblxuIikpOw0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgQVNTRVJUIChGdlNl Y3Rpb24tPlR5cGUgPT0gRUZJX1NFQ1RJT05fRklSTVdBUkVfVk9MVU1FX0lNQUdFKTsNCisNCisg IGlmIChJU19TRUNUSU9OMiAoRnZTZWN0aW9uKSkgew0KKyAgICBGdlNlY3Rpb25TaXplID0gU0VD VElPTjJfU0laRSAoRnZTZWN0aW9uKTsNCisgICAgRnZIZWFkZXJTaXplID0gc2l6ZW9mIChFRklf Q09NTU9OX1NFQ1RJT05fSEVBREVSMik7DQorICB9IGVsc2Ugew0KKyAgICBGdlNlY3Rpb25TaXpl ID0gU0VDVElPTl9TSVpFIChGdlNlY3Rpb24pOw0KKyAgICBGdkhlYWRlclNpemUgPSBzaXplb2Yg KEVGSV9DT01NT05fU0VDVElPTl9IRUFERVIpOw0KKyAgfQ0KKw0KKyAgQVNTRVJUIChGdlNlY3Rp b25TaXplID09IChQY2RHZXQzMiAoUGNkU2ltaWNzRHhlTWVtRnZTaXplKSArIEZ2SGVhZGVyU2l6 ZSkpOw0KKw0KKyAgRHhlTWVtRnYgPSAoRUZJX0ZJUk1XQVJFX1ZPTFVNRV9IRUFERVIqKShVSU5U TikgUGNkR2V0MzIgKFBjZFNpbWljc0R4ZU1lbUZ2QmFzZSk7DQorICBDb3B5TWVtIChEeGVNZW1G diwgKFZPSUQqKSAoKFVJTlROKUZ2U2VjdGlvbiArIEZ2SGVhZGVyU2l6ZSksIFBjZEdldDMyIChQ Y2RTaW1pY3NEeGVNZW1GdlNpemUpKTsNCisNCisgIGlmIChEeGVNZW1Gdi0+U2lnbmF0dXJlICE9 IEVGSV9GVkhfU0lHTkFUVVJFKSB7DQorICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJFeHRyYWN0 ZWQgRlYgYXQgJXAgZG9lcyBub3QgaGF2ZSBGViBoZWFkZXIgc2lnbmF0dXJlXG4iLCBEeGVNZW1G dikpOw0KKyAgICBDcHVEZWFkTG9vcCAoKTsNCisgICAgcmV0dXJuIEVGSV9WT0xVTUVfQ09SUlVQ VEVEOw0KKyAgfQ0KKw0KKyAgKkZ2ID0gUGVpTWVtRnY7DQorICByZXR1cm4gRUZJX1NVQ0NFU1M7 DQorfQ0KKw0KKy8qKg0KKyAgTG9jYXRlcyB0aGUgUEVJIENvcmUgZW50cnkgcG9pbnQgYWRkcmVz cw0KKw0KKyAgQHBhcmFtW2luXSAgRnYgICAgICAgICAgICAgICAgIFRoZSBmaXJtd2FyZSB2b2x1 bWUgdG8gc2VhcmNoDQorICBAcGFyYW1bb3V0XSBQZWlDb3JlRW50cnlQb2ludCAgVGhlIGVudHJ5 IHBvaW50IG9mIHRoZSBQRUkgQ29yZSBpbWFnZQ0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhlIGZpbGUgYW5kIHNlY3Rpb24gd2FzIGZvdW5kDQorICBAcmV0dmFsIEVGSV9O T1RfRk9VTkQgICAgICAgICBUaGUgZmlsZSBhbmQgc2VjdGlvbiB3YXMgbm90IGZvdW5kDQorICBA cmV0dmFsIEVGSV9WT0xVTUVfQ09SUlVQVEVEICBUaGUgZmlybXdhcmUgdm9sdW1lIHdhcyBjb3Jy dXB0ZWQNCisNCisqKi8NCitFRklfU1RBVFVTDQorRmluZFBlaUNvcmVJbWFnZUJhc2VJbkZ2ICgN CisgIElOICBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAgICAgICAqRnYsDQorICBPVVQgIEVG SV9QSFlTSUNBTF9BRERSRVNTICAgICAgICAgICAgICpQZWlDb3JlSW1hZ2VCYXNlDQorICApDQor ew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIEVGSV9DT01NT05f U0VDVElPTl9IRUFERVIgICAqU2VjdGlvbjsNCisNCisgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwg IkZpbmQgUEVJIENvcmUgaW1hZ2UuXG4iKSk7DQorICBTdGF0dXMgPSBGaW5kRmZzRmlsZUFuZFNl Y3Rpb24gKA0KKyAgICAgICAgICAgICBGdiwNCisgICAgICAgICAgICAgRUZJX0ZWX0ZJTEVUWVBF X1BFSV9DT1JFLA0KKyAgICAgICAgICAgICBFRklfU0VDVElPTl9QRTMyLA0KKyAgICAgICAgICAg ICAmU2VjdGlvbg0KKyAgICAgICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KKyAgICBTdGF0dXMgPSBGaW5kRmZzRmlsZUFuZFNlY3Rpb24gKA0KKyAgICAgICAgICAgICAg IEZ2LA0KKyAgICAgICAgICAgICAgIEVGSV9GVl9GSUxFVFlQRV9QRUlfQ09SRSwNCisgICAgICAg ICAgICAgICBFRklfU0VDVElPTl9URSwNCisgICAgICAgICAgICAgICAmU2VjdGlvbg0KKyAgICAg ICAgICAgICAgICk7DQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICBERUJV RyAoKEVGSV9EX0VSUk9SLCAiVW5hYmxlIHRvIGZpbmQgUEVJIENvcmUgaW1hZ2VcbiIpKTsNCisg ICAgICByZXR1cm4gU3RhdHVzOw0KKyAgICB9DQorICB9DQorDQorICAqUGVpQ29yZUltYWdlQmFz ZSA9IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pKFNlY3Rpb24gKyAxKTsNCisgIERFQlVH ICgoRUZJX0RfVkVSQk9TRSwgIlBFSSBjb3JlIGltYWdlIGJhc2UgMHglMDE2TFguXG4iLCAqUGVp Q29yZUltYWdlQmFzZSkpOw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisNCisvKioN CisgIFJlYWRzIDgtYml0cyBvZiBDTU9TIGRhdGEuDQorDQorICBSZWFkcyB0aGUgOC1iaXRzIG9m IENNT1MgZGF0YSBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IEluZGV4Lg0KKyAgVGhlIDgt Yml0IHJlYWQgdmFsdWUgaXMgcmV0dXJuZWQuDQorDQorICBAcGFyYW0gIEluZGV4ICBUaGUgQ01P UyBsb2NhdGlvbiB0byByZWFkLg0KKw0KKyAgQHJldHVybiBUaGUgdmFsdWUgcmVhZC4NCisNCisq Ki8NCitTVEFUSUMNCitVSU5UOA0KK0Ntb3NSZWFkOCAoDQorICBJTiBVSU5UTiAgICAgICAgSW5k ZXgNCisgICkNCit7DQorICBJb1dyaXRlOCAoMHg3MCwgKFVJTlQ4KSBJbmRleCk7DQorICByZXR1 cm4gSW9SZWFkOCAoMHg3MSk7DQorfQ0KKw0KKw0KK1NUQVRJQw0KK0JPT0xFQU4NCitJc1MzUmVz dW1lICgNCisgIFZPSUQNCisgICkNCit7DQorICBERUJVRygoRUZJX0RfVkVSQk9TRSwgIm1vZGVW YWx1ZSA9ICV4XG4iLCBJb0JpdEZpZWxkUmVhZDE2KElDSDEwX1BNQkFTRV9JTyArIDQsIDEwLCAx MikpKTsNCisgIHJldHVybiAoSW9CaXRGaWVsZFJlYWQxNihJQ0gxMF9QTUJBU0VfSU8gKyA0LCAx MCwgMTIpID09IDB4NSk7DQorfQ0KKw0KKw0KK1NUQVRJQw0KK0VGSV9TVEFUVVMNCitHZXRTM1Jl c3VtZVBlaUZ2ICgNCisgIElOIE9VVCBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAgICAgICAq KlBlaUZ2DQorICApDQorew0KKyAgKlBlaUZ2ID0gKEVGSV9GSVJNV0FSRV9WT0xVTUVfSEVBREVS KikoVUlOVE4pIFBjZEdldDMyIChQY2RTaW1pY3NQZWlNZW1GdkJhc2UpOw0KKyAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KK30NCisNCisNCisvKioNCisgIExvY2F0ZXMgdGhlIFBFSSBDb3JlIGVudHJ5 IHBvaW50IGFkZHJlc3MNCisNCisgIEBwYXJhbVtpbixvdXRdICBGdiAgICAgICAgICAgICAgICAg VGhlIGZpcm13YXJlIHZvbHVtZSB0byBzZWFyY2gNCisgIEBwYXJhbVtvdXRdICAgICBQZWlDb3Jl RW50cnlQb2ludCAgVGhlIGVudHJ5IHBvaW50IG9mIHRoZSBQRUkgQ29yZSBpbWFnZQ0KKw0KKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGZpbGUgYW5kIHNlY3Rpb24gd2FzIGZv dW5kDQorICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUgZmlsZSBhbmQgc2VjdGlv biB3YXMgbm90IGZvdW5kDQorICBAcmV0dmFsIEVGSV9WT0xVTUVfQ09SUlVQVEVEICBUaGUgZmly bXdhcmUgdm9sdW1lIHdhcyBjb3JydXB0ZWQNCisNCisqKi8NCitWT0lEDQorRmluZFBlaUNvcmVJ bWFnZUJhc2UgKA0KKyAgSU4gT1VUICBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAgICAgICAq KkJvb3RGdiwNCisgICAgIE9VVCAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgICAgICAgKlBl aUNvcmVJbWFnZUJhc2UNCisgICkNCit7DQorICBCT09MRUFOIFMzUmVzdW1lOw0KKw0KKyAgKlBl aUNvcmVJbWFnZUJhc2UgPSAwOw0KKw0KKyAgUzNSZXN1bWUgPSBJc1MzUmVzdW1lICgpOw0KKyAg aWYgKFMzUmVzdW1lICYmICFGZWF0dXJlUGNkR2V0IChQY2RTbW1TbXJhbVJlcXVpcmUpKSB7DQor ICAgIC8vDQorICAgIC8vIEEgbWFsaWNpb3VzIHJ1bnRpbWUgT1MgbWF5IGhhdmUgaW5qZWN0ZWQg c29tZXRoaW5nIGludG8gb3VyIHByZXZpb3VzbHkNCisgICAgLy8gZGVjb2RlZCBQRUkgRlYsIGJ1 dCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoYXQgdW5sZXNzIFNNTS9TTVJBTSBpcyByZXF1aXJlZC4N CisgICAgLy8NCisgICAgREVCVUcgKChFRklfRF9WRVJCT1NFLCAiU0VDOiBTMyByZXN1bWVcbiIp KTsNCisgICAgR2V0UzNSZXN1bWVQZWlGdiAoQm9vdEZ2KTsNCisgIH0gZWxzZSB7DQorICAgIC8v DQorICAgIC8vIFdlJ3JlIGVpdGhlciBub3QgcmVzdW1pbmcsIG9yIHJlc3VtaW5nICJzZWN1cmVs eSIgLS0gd2UnbGwgZGVjb21wcmVzcw0KKyAgICAvLyBib3RoIFBFSSBGViBhbmQgRFhFIEZWIGZy b20gcHJpc3RpbmUgZmxhc2guDQorICAgIC8vDQorICAgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwg IlNFQzogJWFcbiIsDQorICAgICAgUzNSZXN1bWUgPyAiUzMgcmVzdW1lICh3aXRoIFBFSSBkZWNv bXByZXNzaW9uKSIgOiAiTm9ybWFsIGJvb3QiKSk7DQorICAgIEZpbmRNYWluRnYgKEJvb3RGdik7 DQorDQorICAgIERlY29tcHJlc3NNZW1GdnMgKEJvb3RGdik7DQorICB9DQorDQorICBGaW5kUGVp Q29yZUltYWdlQmFzZUluRnYgKCpCb290RnYsIFBlaUNvcmVJbWFnZUJhc2UpOw0KK30NCisNCisv KioNCisgIEZpbmQgY29yZSBpbWFnZSBiYXNlLg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitGaW5k SW1hZ2VCYXNlICgNCisgIElOICBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAgICAgICAqQm9v dEZpcm13YXJlVm9sdW1lUHRyLA0KKyAgT1VUIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICAg ICAgICpTZWNDb3JlSW1hZ2VCYXNlDQorICApDQorew0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1Mg ICAgICAgIEN1cnJlbnRBZGRyZXNzOw0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgIEVu ZE9mRmlybXdhcmVWb2x1bWU7DQorICBFRklfRkZTX0ZJTEVfSEVBREVSICAgICAgICAgKkZpbGU7 DQorICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgU2l6ZTsNCisgIEVGSV9QSFlTSUNBTF9B RERSRVNTICAgICAgICBFbmRPZkZpbGU7DQorICBFRklfQ09NTU9OX1NFQ1RJT05fSEVBREVSICAg KlNlY3Rpb247DQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgRW5kT2ZTZWN0aW9uOw0K Kw0KKyAgKlNlY0NvcmVJbWFnZUJhc2UgPSAwOw0KKw0KKyAgQ3VycmVudEFkZHJlc3MgPSAoRUZJ X1BIWVNJQ0FMX0FERFJFU1MpKFVJTlROKSBCb290RmlybXdhcmVWb2x1bWVQdHI7DQorICBFbmRP ZkZpcm13YXJlVm9sdW1lID0gQ3VycmVudEFkZHJlc3MgKyBCb290RmlybXdhcmVWb2x1bWVQdHIt PkZ2TGVuZ3RoOw0KKw0KKyAgLy8NCisgIC8vIExvb3AgdGhyb3VnaCB0aGUgRkZTIGZpbGVzIGlu IHRoZSBCb290IEZpcm13YXJlIFZvbHVtZQ0KKyAgLy8NCisgIGZvciAoRW5kT2ZGaWxlID0gQ3Vy cmVudEFkZHJlc3MgKyBCb290RmlybXdhcmVWb2x1bWVQdHItPkhlYWRlckxlbmd0aDsgOyApIHsN CisNCisgICAgQ3VycmVudEFkZHJlc3MgPSAoRW5kT2ZGaWxlICsgNykgJiAweGZmZmZmZmZmZmZm ZmZmZjhVTEw7DQorICAgIGlmIChDdXJyZW50QWRkcmVzcyA+IEVuZE9mRmlybXdhcmVWb2x1bWUp IHsNCisgICAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCisgICAgfQ0KKw0KKyAgICBGaWxlID0g KEVGSV9GRlNfRklMRV9IRUFERVIqKShVSU5UTikgQ3VycmVudEFkZHJlc3M7DQorICAgIFNpemUg PSAqKFVJTlQzMiopIEZpbGUtPlNpemUgJiAweGZmZmZmZjsNCisgICAgaWYgKFNpemUgPCBzaXpl b2YgKCpGaWxlKSkgew0KKyAgICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KKyAgICB9DQorDQor ICAgIEVuZE9mRmlsZSA9IEN1cnJlbnRBZGRyZXNzICsgU2l6ZTsNCisgICAgaWYgKEVuZE9mRmls ZSA+IEVuZE9mRmlybXdhcmVWb2x1bWUpIHsNCisgICAgICByZXR1cm4gRUZJX05PVF9GT1VORDsN CisgICAgfQ0KKw0KKyAgICAvLw0KKyAgICAvLyBMb29rIGZvciBTRUMgQ29yZQ0KKyAgICAvLw0K KyAgICBpZiAoRmlsZS0+VHlwZSAhPSBFRklfRlZfRklMRVRZUEVfU0VDVVJJVFlfQ09SRSkgew0K KyAgICAgIGNvbnRpbnVlOw0KKyAgICB9DQorDQorICAgIC8vDQorICAgIC8vIExvb3AgdGhyb3Vn aCB0aGUgRkZTIGZpbGUgc2VjdGlvbnMgd2l0aGluIHRoZSBGRlMgZmlsZQ0KKyAgICAvLw0KKyAg ICBFbmRPZlNlY3Rpb24gPSAoRUZJX1BIWVNJQ0FMX0FERFJFU1MpKFVJTlROKSAoRmlsZSArIDEp Ow0KKyAgICBmb3IgKDs7KSB7DQorICAgICAgQ3VycmVudEFkZHJlc3MgPSAoRW5kT2ZTZWN0aW9u ICsgMykgJiAweGZmZmZmZmZmZmZmZmZmZmNVTEw7DQorICAgICAgU2VjdGlvbiA9IChFRklfQ09N TU9OX1NFQ1RJT05fSEVBREVSKikoVUlOVE4pIEN1cnJlbnRBZGRyZXNzOw0KKw0KKyAgICAgIFNp emUgPSAqKFVJTlQzMiopIFNlY3Rpb24tPlNpemUgJiAweGZmZmZmZjsNCisgICAgICBpZiAoU2l6 ZSA8IHNpemVvZiAoKlNlY3Rpb24pKSB7DQorICAgICAgICByZXR1cm4gRUZJX05PVF9GT1VORDsN CisgICAgICB9DQorDQorICAgICAgRW5kT2ZTZWN0aW9uID0gQ3VycmVudEFkZHJlc3MgKyBTaXpl Ow0KKyAgICAgIGlmIChFbmRPZlNlY3Rpb24gPiBFbmRPZkZpbGUpIHsNCisgICAgICAgIHJldHVy biBFRklfTk9UX0ZPVU5EOw0KKyAgICAgIH0NCisNCisgICAgICAvLw0KKyAgICAgIC8vIExvb2sg Zm9yIGV4ZWN1dGFibGUgc2VjdGlvbnMNCisgICAgICAvLw0KKyAgICAgIGlmIChTZWN0aW9uLT5U eXBlID09IEVGSV9TRUNUSU9OX1BFMzIgfHwgU2VjdGlvbi0+VHlwZSA9PSBFRklfU0VDVElPTl9U RSkgew0KKyAgICAgICAgaWYgKEZpbGUtPlR5cGUgPT0gRUZJX0ZWX0ZJTEVUWVBFX1NFQ1VSSVRZ X0NPUkUpIHsNCisgICAgICAgICAgKlNlY0NvcmVJbWFnZUJhc2UgPSAoUEhZU0lDQUxfQUREUkVT UykgKFVJTlROKSAoU2VjdGlvbiArIDEpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgYnJlYWs7DQor ICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8vDQorICAgIC8vIFNFQyBDb3JlIGltYWdlIGZvdW5k DQorICAgIC8vDQorICAgIGlmICgqU2VjQ29yZUltYWdlQmFzZSAhPSAwKSB7DQorICAgICAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KKyAgICB9DQorICB9DQorfQ0KKw0KKy8qDQorICBGaW5kIGFuZCBy ZXR1cm4gUGVpIENvcmUgZW50cnkgcG9pbnQuDQorDQorICBJdCBhbHNvIGZpbmQgU0VDIGFuZCBQ RUkgQ29yZSBmaWxlIGRlYnVnIGluZm9ybWF0aW9uLiBJdCB3aWxsIHJlcG9ydCB0aGVtIGlmDQor ICByZW1vdGUgZGVidWcgaXMgZW5hYmxlZC4NCisNCisqKi8NCitWT0lEDQorRmluZEFuZFJlcG9y dEVudHJ5UG9pbnRzICgNCisgIElOICBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAgICAgICAq KkJvb3RGaXJtd2FyZVZvbHVtZVB0ciwNCisgIE9VVCBFRklfUEVJX0NPUkVfRU5UUllfUE9JTlQg ICAgICAgICAqUGVpQ29yZUVudHJ5UG9pbnQNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAg ICAgICBTZWNDb3JlSW1hZ2VCYXNlOw0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgICAg ICAgUGVpQ29yZUltYWdlQmFzZTsNCisgIFBFX0NPRkZfTE9BREVSX0lNQUdFX0NPTlRFWFQgICAg IEltYWdlQ29udGV4dDsNCisNCisgIC8vDQorICAvLyBGaW5kIFNFQyBDb3JlIGFuZCBQRUkgQ29y ZSBpbWFnZSBiYXNlDQorICAgLy8NCisgIFN0YXR1cyA9IEZpbmRJbWFnZUJhc2UgKCpCb290Rmly bXdhcmVWb2x1bWVQdHIsICZTZWNDb3JlSW1hZ2VCYXNlKTsNCisgIEFTU0VSVF9FRklfRVJST1Ig KFN0YXR1cyk7DQorDQorICBGaW5kUGVpQ29yZUltYWdlQmFzZSAoQm9vdEZpcm13YXJlVm9sdW1l UHRyLCAmUGVpQ29yZUltYWdlQmFzZSk7DQorDQorICBaZXJvTWVtICgoVk9JRCAqKSAmSW1hZ2VD b250ZXh0LCBzaXplb2YgKFBFX0NPRkZfTE9BREVSX0lNQUdFX0NPTlRFWFQpKTsNCisgIC8vDQor ICAvLyBSZXBvcnQgU0VDIENvcmUgZGVidWcgaW5mb3JtYXRpb24gd2hlbiByZW1vdGUgZGVidWcg aXMgZW5hYmxlZA0KKyAgLy8NCisgIEltYWdlQ29udGV4dC5JbWFnZUFkZHJlc3MgPSBTZWNDb3Jl SW1hZ2VCYXNlOw0KKyAgSW1hZ2VDb250ZXh0LlBkYlBvaW50ZXIgPSBQZUNvZmZMb2FkZXJHZXRQ ZGJQb2ludGVyICgoVk9JRCopIChVSU5UTikgSW1hZ2VDb250ZXh0LkltYWdlQWRkcmVzcyk7DQor ICBQZUNvZmZMb2FkZXJSZWxvY2F0ZUltYWdlRXh0cmFBY3Rpb24gKCZJbWFnZUNvbnRleHQpOw0K Kw0KKyAgLy8NCisgIC8vIFJlcG9ydCBQRUkgQ29yZSBkZWJ1ZyBpbmZvcm1hdGlvbiB3aGVuIHJl bW90ZSBkZWJ1ZyBpcyBlbmFibGVkDQorICAvLw0KKyAgSW1hZ2VDb250ZXh0LkltYWdlQWRkcmVz cyA9IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pUGVpQ29yZUltYWdlQmFzZTsNCisgIElt YWdlQ29udGV4dC5QZGJQb2ludGVyID0gUGVDb2ZmTG9hZGVyR2V0UGRiUG9pbnRlciAoKFZPSUQq KSAoVUlOVE4pIEltYWdlQ29udGV4dC5JbWFnZUFkZHJlc3MpOw0KKyAgUGVDb2ZmTG9hZGVyUmVs b2NhdGVJbWFnZUV4dHJhQWN0aW9uICgmSW1hZ2VDb250ZXh0KTsNCisNCisgIC8vDQorICAvLyBG aW5kIFBFSSBDb3JlIGVudHJ5IHBvaW50DQorICAvLw0KKyAgU3RhdHVzID0gUGVDb2ZmTG9hZGVy R2V0RW50cnlQb2ludCAoKFZPSUQgKikgKFVJTlROKSBQZWlDb3JlSW1hZ2VCYXNlLCAoVk9JRCoq KSBQZWlDb3JlRW50cnlQb2ludCk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAg ICpQZWlDb3JlRW50cnlQb2ludCA9IDA7DQorICB9DQorDQorICByZXR1cm47DQorfQ0KKw0KK1ZP SUQNCitFRklBUEkNCitTZWNDb3JlU3RhcnR1cFdpdGhTdGFjayAoDQorICBJTiBFRklfRklSTVdB UkVfVk9MVU1FX0hFQURFUiAgICAgICAqQm9vdEZ2LA0KKyAgSU4gVk9JRCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKlRvcE9mQ3VycmVudFN0YWNrDQorICApDQorew0KKyAgRUZJX1NFQ19Q RUlfSEFORF9PRkYgICAgICAgIFNlY0NvcmVEYXRhOw0KKyAgU0VDX0lEVF9UQUJMRSAgICAgICAg ICAgICAgIElkdFRhYmxlSW5TdGFjazsNCisgIElBMzJfREVTQ1JJUFRPUiAgICAgICAgICAgICBJ ZHREZXNjcmlwdG9yOw0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KKyAg dm9sYXRpbGUgVUlOVDggICAgICAgICAgICAgICpUYWJsZTsNCisNCisgIC8vDQorICAvLyBJbml0 aWFsaXplIGZsb2F0aW5nIHBvaW50IG9wZXJhdGluZyBlbnZpcm9ubWVudA0KKyAgLy8gdG8gYmUg Y29tcGxpYW50IHdpdGggVUVGSSBzcGVjLg0KKyAgLy8NCisgIEluaXRpYWxpemVGbG9hdGluZ1Bv aW50VW5pdHMgKCk7DQorDQorICAvLw0KKyAgLy8gSW5pdGlhbGl6ZSB0aGUgUENJZSBDb25maWd1 cmF0aW9uIGJhc2UgcmVnaXN0ZXIuDQorICAvLw0KKyAgUGNpQ2Y4V3JpdGUzMiAoUENJX0NGOF9M SUJfQUREUkVTUyAoMHhGRiwgMCwgMSwgMHg1MCksIDB4RTAwMDAwMDEpOw0KKw0KKyAgLy8NCisg IC8vIFRvIGVuc3VyZSBTTU0gY2FuJ3QgYmUgY29tcHJvbWlzZWQgb24gUzMgcmVzdW1lLCB3ZSBt dXN0IGZvcmNlIHJlLWluaXQgb2YNCisgIC8vIHRoZSBCYXNlRXh0cmFjdEd1aWRlZFNlY3Rpb25M aWIuIFNpbmNlIHRoaXMgaXMgYmVmb3JlIGxpYnJhcnkgY29udHJ1Y3RvcnMNCisgIC8vIGFyZSBj YWxsZWQsIHdlIG11c3QgdXNlIGEgbG9vcCByYXRoZXIgdGhhbiBTZXRNZW0uDQorICAvLw0KKyAg VGFibGUgPSAoVUlOVDgqKShVSU5UTilGaXhlZFBjZEdldDY0IChQY2RHdWlkZWRFeHRyYWN0SGFu ZGxlclRhYmxlQWRkcmVzcyk7DQorICBmb3IgKEluZGV4ID0gMDsNCisgICAgICAgSW5kZXggPCBG aXhlZFBjZEdldDMyIChQY2RHdWlkZWRFeHRyYWN0SGFuZGxlclRhYmxlU2l6ZSk7DQorICAgICAg ICsrSW5kZXgpIHsNCisgICAgVGFibGVbSW5kZXhdID0gMDsNCisgIH0NCisNCisgIFByb2Nlc3NM aWJyYXJ5Q29uc3RydWN0b3JMaXN0IChOVUxMLCBOVUxMKTsNCisNCisgIERFQlVHICgoRUZJX0Rf SU5GTywNCisgICAgIlNlY0NvcmVTdGFydHVwV2l0aFN0YWNrKDB4JXgsIDB4JXgpXG4iLA0KKyAg ICAoVUlOVDMyKShVSU5UTilCb290RnYsDQorICAgIChVSU5UMzIpKFVJTlROKVRvcE9mQ3VycmVu dFN0YWNrDQorICAgICkpOw0KKw0KKyAgLy8NCisgIC8vIEluaXRpYWxpemUgSURUDQorICAvLw0K KyAgSWR0VGFibGVJblN0YWNrLlBlaVNlcnZpY2UgPSBOVUxMOw0KKyAgZm9yIChJbmRleCA9IDA7 IEluZGV4IDwgU0VDX0lEVF9FTlRSWV9DT1VOVDsgSW5kZXggKyspIHsNCisgICAgQ29weU1lbSAo JklkdFRhYmxlSW5TdGFjay5JZHRUYWJsZVtJbmRleF0sICZtSWR0RW50cnlUZW1wbGF0ZSwgc2l6 ZW9mIChtSWR0RW50cnlUZW1wbGF0ZSkpOw0KKyAgfQ0KKw0KKyAgSWR0RGVzY3JpcHRvci5CYXNl ICA9IChVSU5UTikmSWR0VGFibGVJblN0YWNrLklkdFRhYmxlOw0KKyAgSWR0RGVzY3JpcHRvci5M aW1pdCA9IChVSU5UMTYpKHNpemVvZiAoSWR0VGFibGVJblN0YWNrLklkdFRhYmxlKSAtIDEpOw0K Kw0KKyAgQXNtV3JpdGVJZHRyICgmSWR0RGVzY3JpcHRvcik7DQorDQorI2lmIGRlZmluZWQgKE1E RV9DUFVfWDY0KQ0KKyAgLy8NCisgIC8vIEFTU0VSVCB0aGF0IHRoZSBQYWdlIFRhYmxlcyB3ZXJl IHNldCBieSB0aGUgcmVzZXQgdmVjdG9yIGNvZGUgdG8NCisgIC8vIHRoZSBhZGRyZXNzIHdlIGV4 cGVjdC4NCisgIC8vDQorICBBU1NFUlQgKEFzbVJlYWRDcjMgKCkgPT0gKFVJTlROKSBQY2RHZXQz MiAoUGNkU2ltaWNzU2VjUGFnZVRhYmxlc0Jhc2UpKTsNCisjZW5kaWYNCisNCisgIC8vDQorICAv LyB8LS0tLS0tLS0tLS0tLXwgICAgICAgPC0tIFRvcE9mQ3VycmVudFN0YWNrDQorICAvLyB8ICAg U3RhY2sgICAgIHwgMzJrDQorICAvLyB8LS0tLS0tLS0tLS0tLXwNCisgIC8vIHwgICAgSGVhcCAg ICAgfCAzMmsNCisgIC8vIHwtLS0tLS0tLS0tLS0tfCAgICAgICA8LS0gU2VjQ29yZURhdGEuVGVt cG9yYXJ5UmFtQmFzZQ0KKyAgLy8NCisNCisgIEFTU0VSVCAoKFVJTlROKSAoUGNkR2V0MzIgKFBj ZFNpbWljc1NlY1BlaVRlbXBSYW1CYXNlKSArDQorICAgICAgICAgICAgICAgICAgIFBjZEdldDMy IChQY2RTaW1pY3NTZWNQZWlUZW1wUmFtU2l6ZSkpID09DQorICAgICAgICAgIChVSU5UTikgVG9w T2ZDdXJyZW50U3RhY2spOw0KKw0KKyAgLy8NCisgIC8vIEluaXRpYWxpemUgU0VDIGhhbmQtb2Zm IHN0YXRlDQorICAvLw0KKyAgU2VjQ29yZURhdGEuRGF0YVNpemUgPSBzaXplb2YoRUZJX1NFQ19Q RUlfSEFORF9PRkYpOw0KKw0KKyAgU2VjQ29yZURhdGEuVGVtcG9yYXJ5UmFtU2l6ZSAgICAgICA9 IChVSU5UTikgUGNkR2V0MzIgKFBjZFNpbWljc1NlY1BlaVRlbXBSYW1TaXplKTsNCisgIFNlY0Nv cmVEYXRhLlRlbXBvcmFyeVJhbUJhc2UgICAgICAgPSAoVk9JRCopKChVSU5UOCAqKVRvcE9mQ3Vy cmVudFN0YWNrIC0gU2VjQ29yZURhdGEuVGVtcG9yYXJ5UmFtU2l6ZSk7DQorDQorICBTZWNDb3Jl RGF0YS5QZWlUZW1wb3JhcnlSYW1CYXNlICAgID0gU2VjQ29yZURhdGEuVGVtcG9yYXJ5UmFtQmFz ZTsNCisgIFNlY0NvcmVEYXRhLlBlaVRlbXBvcmFyeVJhbVNpemUgICAgPSBTZWNDb3JlRGF0YS5U ZW1wb3JhcnlSYW1TaXplID4+IDE7DQorDQorICBTZWNDb3JlRGF0YS5TdGFja0Jhc2UgICAgICAg ICAgICAgID0gKFVJTlQ4ICopU2VjQ29yZURhdGEuVGVtcG9yYXJ5UmFtQmFzZSArIFNlY0NvcmVE YXRhLlBlaVRlbXBvcmFyeVJhbVNpemU7DQorICBTZWNDb3JlRGF0YS5TdGFja1NpemUgICAgICAg ICAgICAgID0gU2VjQ29yZURhdGEuVGVtcG9yYXJ5UmFtU2l6ZSA+PiAxOw0KKw0KKyAgU2VjQ29y ZURhdGEuQm9vdEZpcm13YXJlVm9sdW1lQmFzZSA9IEJvb3RGdjsNCisgIFNlY0NvcmVEYXRhLkJv b3RGaXJtd2FyZVZvbHVtZVNpemUgPSAoVUlOVE4pIEJvb3RGdi0+RnZMZW5ndGg7DQorDQorICAv Lw0KKyAgLy8gTWFrZSBzdXJlIHRoZSA4MjU5IGlzIG1hc2tlZCBiZWZvcmUgaW5pdGlhbGl6aW5n IHRoZSBEZWJ1ZyBBZ2VudCBhbmQgdGhlIGRlYnVnIHRpbWVyIGlzIGVuYWJsZWQNCisgIC8vDQor ICBJb1dyaXRlOCAoMHgyMSwgMHhmZik7DQorICBJb1dyaXRlOCAoMHhBMSwgMHhmZik7DQorDQor ICAvLw0KKyAgLy8gSW5pdGlhbGl6ZSBMb2NhbCBBUElDIFRpbWVyIGhhcmR3YXJlIGFuZCBkaXNh YmxlIExvY2FsIEFQSUMgVGltZXINCisgIC8vIGludGVycnVwdHMgYmVmb3JlIGluaXRpYWxpemlu ZyB0aGUgRGVidWcgQWdlbnQgYW5kIHRoZSBkZWJ1ZyB0aW1lciBpcw0KKyAgLy8gZW5hYmxlZC4N CisgIC8vDQorICBJbml0aWFsaXplQXBpY1RpbWVyICgwLCBNQVhfVUlOVDMyLCBUUlVFLCA1KTsN CisgIERpc2FibGVBcGljVGltZXJJbnRlcnJ1cHQgKCk7DQorDQorICAvLw0KKyAgLy8gSW5pdGlh bGl6ZSBEZWJ1ZyBBZ2VudCB0byBzdXBwb3J0IHNvdXJjZSBsZXZlbCBkZWJ1ZyBpbiBTRUMvUEVJ IHBoYXNlcyBiZWZvcmUgbWVtb3J5IHJlYWR5Lg0KKyAgLy8NCisgIEluaXRpYWxpemVEZWJ1Z0Fn ZW50IChERUJVR19BR0VOVF9JTklUX1BSRU1FTV9TRUMsICZTZWNDb3JlRGF0YSwgU2VjU3RhcnR1 cFBoYXNlMik7DQorfQ0KKw0KKy8qKg0KKyAgQ2FsbGVyIHByb3ZpZGVkIGZ1bmN0aW9uIHRvIGJl IGludm9rZWQgYXQgdGhlIGVuZCBvZiBJbml0aWFsaXplRGVidWdBZ2VudCgpLg0KKw0KKyAgRW50 cnkgcG9pbnQgdG8gdGhlIEMgbGFuZ3VhZ2UgcGhhc2Ugb2YgU0VDLiBBZnRlciB0aGUgU0VDIGFz c2VtYmx5DQorICBjb2RlIGhhcyBpbml0aWFsaXplZCBzb21lIHRlbXBvcmFyeSBtZW1vcnkgYW5k IHNldCB1cCB0aGUgc3RhY2ssDQorICB0aGUgY29udHJvbCBpcyB0cmFuc2ZlcnJlZCB0byB0aGlz IGZ1bmN0aW9uLg0KKw0KKyAgQHBhcmFtW2luXSBDb250ZXh0ICAgIFRoZSBmaXJzdCBpbnB1dCBw YXJhbWV0ZXIgb2YgSW5pdGlhbGl6ZURlYnVnQWdlbnQoKS4NCisNCisqKi8NCitWT0lEDQorRUZJ QVBJDQorU2VjU3RhcnR1cFBoYXNlMigNCisgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAq Q29udGV4dA0KKyAgKQ0KK3sNCisgIEVGSV9TRUNfUEVJX0hBTkRfT0ZGICAgICAgICAqU2VjQ29y ZURhdGE7DQorICBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAgKkJvb3RGdjsNCisgIEVGSV9Q RUlfQ09SRV9FTlRSWV9QT0lOVCAgICBQZWlDb3JlRW50cnlQb2ludDsNCisNCisgIFNlY0NvcmVE YXRhID0gKEVGSV9TRUNfUEVJX0hBTkRfT0ZGICopIENvbnRleHQ7DQorDQorICAvLw0KKyAgLy8g RmluZCBQRUkgQ29yZSBlbnRyeSBwb2ludC4gSXQgd2lsbCByZXBvcnQgU0VDIGFuZCBQZWkgQ29y ZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpZiByZW1vdGUgZGVidWcNCisgIC8vIGlzIGVuYWJsZWQuDQor ICAvLw0KKyAgQm9vdEZ2ID0gKEVGSV9GSVJNV0FSRV9WT0xVTUVfSEVBREVSICopU2VjQ29yZURh dGEtPkJvb3RGaXJtd2FyZVZvbHVtZUJhc2U7DQorICBGaW5kQW5kUmVwb3J0RW50cnlQb2ludHMg KCZCb290RnYsICZQZWlDb3JlRW50cnlQb2ludCk7DQorICBTZWNDb3JlRGF0YS0+Qm9vdEZpcm13 YXJlVm9sdW1lQmFzZSA9IEJvb3RGdjsNCisgIFNlY0NvcmVEYXRhLT5Cb290RmlybXdhcmVWb2x1 bWVTaXplID0gKFVJTlROKSBCb290RnYtPkZ2TGVuZ3RoOw0KKw0KKyAgLy8NCisgIC8vIFRyYW5z ZmVyIHRoZSBjb250cm9sIHRvIHRoZSBQRUkgY29yZQ0KKyAgLy8NCisgICgqUGVpQ29yZUVudHJ5 UG9pbnQpIChTZWNDb3JlRGF0YSwgKEVGSV9QRUlfUFBJX0RFU0NSSVBUT1IgKikmbVByaXZhdGVE aXNwYXRjaFRhYmxlKTsNCisNCisgIC8vDQorICAvLyBJZiB3ZSBnZXQgaGVyZSB0aGVuIHRoZSBQ RUkgQ29yZSByZXR1cm5lZCwgd2hpY2ggaXMgbm90IHJlY292ZXJhYmxlLg0KKyAgLy8NCisgIEFT U0VSVCAoRkFMU0UpOw0KKyAgQ3B1RGVhZExvb3AgKCk7DQorfQ0KKw0KK0VGSV9TVEFUVVMNCitF RklBUEkNCitUZW1wb3JhcnlSYW1NaWdyYXRpb24gKA0KKyAgSU4gQ09OU1QgRUZJX1BFSV9TRVJW SUNFUyAgICoqUGVpU2VydmljZXMsDQorICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgVGVt cG9yYXJ5TWVtb3J5QmFzZSwNCisgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICBQZXJtYW5l bnRNZW1vcnlCYXNlLA0KKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgIENvcHlTaXplDQor ICApDQorew0KKyAgSUEzMl9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgSWR0RGVzY3JpcHRv cjsNCisgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpPbGRIZWFwOw0KKyAgVk9J RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKk5ld0hlYXA7DQorICBWT0lEICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqT2xkU3RhY2s7DQorICBWT0lEICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqTmV3U3RhY2s7DQorICBERUJVR19BR0VOVF9DT05URVhUX1BPU1RNRU1fU0VD ICBEZWJ1Z0FnZW50Q29udGV4dDsNCisgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAg IE9sZFN0YXR1czsNCisgIEJBU0VfTElCUkFSWV9KVU1QX0JVRkZFUiAgICAgICAgIEp1bXBCdWZm ZXI7DQorDQorICBERUJVRyAoKEVGSV9EX0lORk8sDQorICAgICJUZW1wb3JhcnlSYW1NaWdyYXRp b24oMHglTHgsIDB4JUx4LCAweCVMeClcbiIsDQorICAgIFRlbXBvcmFyeU1lbW9yeUJhc2UsDQor ICAgIFBlcm1hbmVudE1lbW9yeUJhc2UsDQorICAgIChVSU5UNjQpQ29weVNpemUNCisgICAgKSk7 DQorDQorICBPbGRIZWFwID0gKFZPSUQqKShVSU5UTilUZW1wb3JhcnlNZW1vcnlCYXNlOw0KKyAg TmV3SGVhcCA9IChWT0lEKikoKFVJTlROKVBlcm1hbmVudE1lbW9yeUJhc2UgKyAoQ29weVNpemUg Pj4gMSkpOw0KKw0KKyAgT2xkU3RhY2sgPSAoVk9JRCopKChVSU5UTilUZW1wb3JhcnlNZW1vcnlC YXNlICsgKENvcHlTaXplID4+IDEpKTsNCisgIE5ld1N0YWNrID0gKFZPSUQqKShVSU5UTilQZXJt YW5lbnRNZW1vcnlCYXNlOw0KKw0KKyAgRGVidWdBZ2VudENvbnRleHQuSGVhcE1pZ3JhdGVPZmZz ZXQgPSAoVUlOVE4pTmV3SGVhcCAtIChVSU5UTilPbGRIZWFwOw0KKyAgRGVidWdBZ2VudENvbnRl eHQuU3RhY2tNaWdyYXRlT2Zmc2V0ID0gKFVJTlROKU5ld1N0YWNrIC0gKFVJTlROKU9sZFN0YWNr Ow0KKw0KKyAgT2xkU3RhdHVzID0gU2F2ZUFuZFNldERlYnVnVGltZXJJbnRlcnJ1cHQgKEZBTFNF KTsNCisgIEluaXRpYWxpemVEZWJ1Z0FnZW50IChERUJVR19BR0VOVF9JTklUX1BPU1RNRU1fU0VD LCAoVk9JRCAqKSAmRGVidWdBZ2VudENvbnRleHQsIE5VTEwpOw0KKw0KKyAgLy8NCisgIC8vIE1p Z3JhdGUgSGVhcA0KKyAgLy8NCisgIENvcHlNZW0gKE5ld0hlYXAsIE9sZEhlYXAsIENvcHlTaXpl ID4+IDEpOw0KKw0KKyAgLy8NCisgIC8vIE1pZ3JhdGUgU3RhY2sNCisgIC8vDQorICBDb3B5TWVt IChOZXdTdGFjaywgT2xkU3RhY2ssIENvcHlTaXplID4+IDEpOw0KKw0KKyAgLy8NCisgIC8vIFJl YmFzZSBJRFQgdGFibGUgaW4gcGVybWFuZW50IG1lbW9yeQ0KKyAgLy8NCisgIEFzbVJlYWRJZHRy ICgmSWR0RGVzY3JpcHRvcik7DQorICBJZHREZXNjcmlwdG9yLkJhc2UgPSBJZHREZXNjcmlwdG9y LkJhc2UgLSAoVUlOVE4pT2xkU3RhY2sgKyAoVUlOVE4pTmV3U3RhY2s7DQorDQorICBBc21Xcml0 ZUlkdHIgKCZJZHREZXNjcmlwdG9yKTsNCisNCisgIC8vDQorICAvLyBVc2UgU2V0SnVtcCgpL0xv bmdKdW1wKCkgdG8gc3dpdGNoIHRvIGEgbmV3IHN0YWNrLg0KKyAgLy8NCisgIGlmIChTZXRKdW1w ICgmSnVtcEJ1ZmZlcikgPT0gMCkgew0KKyNpZiBkZWZpbmVkIChNREVfQ1BVX0lBMzIpDQorICAg IEp1bXBCdWZmZXIuRXNwID0gSnVtcEJ1ZmZlci5Fc3AgKyBEZWJ1Z0FnZW50Q29udGV4dC5TdGFj a01pZ3JhdGVPZmZzZXQ7DQorI2VuZGlmDQorI2lmIGRlZmluZWQgKE1ERV9DUFVfWDY0KQ0KKyAg ICBKdW1wQnVmZmVyLlJzcCA9IEp1bXBCdWZmZXIuUnNwICsgRGVidWdBZ2VudENvbnRleHQuU3Rh Y2tNaWdyYXRlT2Zmc2V0Ow0KKyNlbmRpZg0KKyAgICBMb25nSnVtcCAoJkp1bXBCdWZmZXIsIChV SU5UTiktMSk7DQorICB9DQorDQorICBTYXZlQW5kU2V0RGVidWdUaW1lckludGVycnVwdCAoT2xk U3RhdHVzKTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQpkaWZmIC0tZ2l0IGEvUGxh dGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9QbGF0Zm9ybS5jIGIvUGxh dGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9QbGF0Zm9ybS5jDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uYzdiNTIzN2JkMw0KLS0tIC9kZXYv bnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9Q bGF0Zm9ybS5jDQpAQCAtMCwwICsxLDg2NSBAQA0KKy8qKiBAZmlsZQ0KKyAgVGhpcyBkcml2ZXIg ZWZmZWN0dWF0ZXMgUVNQIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgYW5kIGV4cG9z ZXMNCisgIHRoZW0gdmlhIEhJSS4NCisNCisgIENvcHlyaWdodCAoQykgMjAxNCwgUmVkIEhhdCwg SW5jLg0KKyAgQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJT RC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisNCisjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+ DQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5 L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvRGV2aWNlUGF0aExpYi5oPg0KKyNpbmNs dWRlIDxMaWJyYXJ5L0hpaUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRp b25MaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5oPg0KKyNpbmNsdWRlIDxMaWJy YXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlI aWlTZXJ2aWNlc0xpYi5oPg0KKyNpbmNsdWRlIDxQcm90b2NvbC9EZXZpY2VQYXRoLmg+DQorI2lu Y2x1ZGUgPFByb3RvY29sL0dyYXBoaWNzT3V0cHV0Lmg+DQorI2luY2x1ZGUgPFByb3RvY29sL0hp aUNvbmZpZ0FjY2Vzcy5oPg0KKyNpbmNsdWRlIDxHdWlkL01kZU1vZHVsZUhpaS5oPg0KKyNpbmNs dWRlIDxHdWlkL1NpbWljc0JvYXJkQ29uZmlnLmg+DQorDQorI2luY2x1ZGUgIlBsYXRmb3JtLmgi DQorI2luY2x1ZGUgIlBsYXRmb3JtQ29uZmlnLmgiDQorI2luY2x1ZGUgPExpYnJhcnkvRHhlU2Vy dmljZXNUYWJsZUxpYi5oPg0KKy8vDQorLy8gVGhlIEhpaUFkZFBhY2thZ2VzKCkgbGlicmFyeSBm dW5jdGlvbiByZXF1aXJlcyB0aGF0IGFueSBjb250cm9sbGVyIChvcg0KKy8vIGltYWdlKSBoYW5k bGUsIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgSElJIHBhY2thZ2VzIHVuZGVyIGluc3RhbGxh dGlvbiwgYmUNCisvLyAiZGVjb3JhdGVkIiB3aXRoIGEgZGV2aWNlIHBhdGguIFRoZSB0cmFkaXRp b24gc2VlbXMgdG8gYmUgYSB2ZW5kb3IgZGV2aWNlDQorLy8gcGF0aC4NCisvLw0KKy8vIFdlJ2Qg bGlrZSB0byBhc3NvY2lhdGUgb3VyIEhJSSBwYWNrYWdlcyB3aXRoIHRoZSBkcml2ZXIncyBpbWFn ZSBoYW5kbGUuIFRoZQ0KKy8vIGZpcnN0IGlkZWEgaXMgdG8gdXNlIHRoZSBkcml2ZXIgaW1hZ2Un cyBkZXZpY2UgcGF0aC4gVW5mb3J0dW5hdGVseSwgbG9hZGVkDQorLy8gaW1hZ2VzIG9ubHkgY29t ZSB3aXRoIGFuIEVGSV9MT0FERURfSU1BR0VfREVWSUNFX1BBVEhfUFJPVE9DT0wgKG5vdCB0aGUN CisvLyB1c3VhbCBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wpLCBpZS4gYSBkaWZmZXJlbnQgR1VJ RC4gSW4gYWRkaXRpb24sIGV2ZW4gdGhlDQorLy8gRUZJX0xPQURFRF9JTUFHRV9ERVZJQ0VfUEFU SF9QUk9UT0NPTCBpbnRlcmZhY2UgbWF5IGJlIE5VTEwsIGlmIHRoZSBpbWFnZQ0KKy8vIGhhcyBi ZWVuIGxvYWRlZCBmcm9tIGFuICJ1bm5hbWVkIiBtZW1vcnkgc291cmNlIGJ1ZmZlci4NCisvLw0K Ky8vIEhlbmNlIGxldCdzIGp1c3Qgc3RpY2sgd2l0aCB0aGUgdHJhZGl0aW9uIC0tIHVzZSBhIGRl ZGljYXRlZCB2ZW5kb3IgZGV2aWNlDQorLy8gcGF0aCwgd2l0aCB0aGUgZHJpdmVyJ3MgRklMRV9H VUlELg0KKy8vDQorI3ByYWdtYSBwYWNrKDEpDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgVkVORE9S X0RFVklDRV9QQVRIICAgICAgIFZlbmRvckRldmljZVBhdGg7DQorICBFRklfREVWSUNFX1BBVEhf UFJPVE9DT0wgRW5kOw0KK30gUEtHX0RFVklDRV9QQVRIOw0KKyNwcmFnbWEgcGFjaygpDQorDQor U1RBVElDIFBLR19ERVZJQ0VfUEFUSCBtUGtnRGV2aWNlUGF0aCA9IHsNCisgIHsNCisgICAgew0K KyAgICAgIEhBUkRXQVJFX0RFVklDRV9QQVRILA0KKyAgICAgIEhXX1ZFTkRPUl9EUCwNCisgICAg ICB7DQorICAgICAgICAoVUlOVDgpIChzaXplb2YgKFZFTkRPUl9ERVZJQ0VfUEFUSCkgICAgICks DQorICAgICAgICAoVUlOVDgpIChzaXplb2YgKFZFTkRPUl9ERVZJQ0VfUEFUSCkgPj4gOCkNCisg ICAgICB9DQorICAgIH0sDQorICAgIEVGSV9DQUxMRVJfSURfR1VJRA0KKyAgfSwNCisgIHsNCisg ICAgRU5EX0RFVklDRV9QQVRIX1RZUEUsDQorICAgIEVORF9FTlRJUkVfREVWSUNFX1BBVEhfU1VC VFlQRSwNCisgICAgew0KKyAgICAgIChVSU5UOCkgKEVORF9ERVZJQ0VfUEFUSF9MRU5HVEggICAg ICksDQorICAgICAgKFVJTlQ4KSAoRU5EX0RFVklDRV9QQVRIX0xFTkdUSCA+PiA4KQ0KKyAgICB9 DQorICB9DQorfTsNCisNCisvLw0KKy8vIFRoZSBjb25maWd1cmF0aW9uIGludGVyZmFjZSBiZXR3 ZWVuIHRoZSBISUkgZW5naW5lIChmb3JtIGRpc3BsYXkgZXRjKSBhbmQNCisvLyB0aGlzIGRyaXZl ci4NCisvLw0KK1NUQVRJQyBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wgbUNvbmZpZ0Fj Y2VzczsNCisNCisvLw0KKy8vIFRoZSBoYW5kbGUgcmVwcmVzZW50aW5nIG91ciBsaXN0IG9mIHBh Y2thZ2VzIGFmdGVyIGluc3RhbGxhdGlvbi4NCisvLw0KK1NUQVRJQyBFRklfSElJX0hBTkRMRSBt SW5zdGFsbGVkUGFja2FnZXM7DQorDQorLy8NCisvLyBUaGUgYXJyYXlzIGJlbG93IGNvbnN0aXR1 dGUgb3VyIEhJSSBwYWNrYWdlIGxpc3QuIFRoZXkgYXJlIGF1dG8tZ2VuZXJhdGVkIGJ5DQorLy8g dGhlIFZGUiBjb21waWxlciBhbmQgbGlua2VkIGludG8gdGhlIGRyaXZlciBpbWFnZSBkdXJpbmcg dGhlIGJ1aWxkLg0KKy8vDQorLy8gLSBUaGUgc3RyaW5ncyBwYWNrYWdlIHJlY2VpdmVzIGl0cyBD IGlkZW50aWZpZXIgZnJvbSB0aGUgZHJpdmVyJ3MgQkFTRV9OQU1FLA0KKy8vICAgcGx1cyAiU3Ry aW5ncyIuDQorLy8NCisvLyAtIFRoZSBmb3JtcyBwYWNrYWdlIHJlY2VpdmVzIGl0cyBDIGlkZW50 aWZpZXIgZnJvbSB0aGUgVkZSIGZpbGUncyBiYXNlbmFtZSwNCisvLyAgIHBsdXMgIkJpbiIuDQor Ly8NCisvLw0KK2V4dGVybiBVSU5UOCBTaW1pY3NEeGVTdHJpbmdzW107DQorZXh0ZXJuIFVJTlQ4 IFBsYXRmb3JtRm9ybXNCaW5bXTsNCisNCisvLw0KKy8vIFdlIHdhbnQgdG8gYmUgbm90aWZpZWQg YWJvdXQgR09QIGluc3RhbGxhdGlvbnMgdW50aWwgd2UgZmluZCBvbmUgR09QDQorLy8gaW50ZXJm YWNlIHRoYXQgbGV0cyB1cyBwb3B1bGF0ZSB0aGUgZm9ybS4NCisvLw0KK1NUQVRJQyBFRklfRVZF TlQgbUdvcEV2ZW50Ow0KKw0KKy8vDQorLy8gVGhlIHJlZ2lzdHJhdGlvbiByZWNvcmQgdW5kZXJu ZWF0aCB0aGlzIHBvaW50ZXIgYWxsb3dzIHVzIHRvIGl0ZXJhdGUgdGhyb3VnaA0KKy8vIHRoZSBH T1AgaW5zdGFuY2VzIG9uZSBieSBvbmUuDQorLy8NCitTVEFUSUMgVk9JRCAqbUdvcFRyYWNrZXI7 DQorDQorLy8NCisvLyBDYWNoZSB0aGUgcmVzb2x1dGlvbnMgd2UgZ2V0IGZyb20gdGhlIEdPUC4N CisvLw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIFVJTlQzMiBYOw0KKyAgVUlOVDMyIFk7DQorfSBH T1BfTU9ERTsNCisNCitTVEFUSUMgVUlOVE4gICAgbU51bUdvcE1vZGVzOw0KK1NUQVRJQyBHT1Bf TU9ERSAqbUdvcE1vZGVzOw0KKw0KKw0KKy8qKg0KKyAgTG9hZCB0aGUgcGVyc2lzdGVudCBwbGF0 Zm9ybSBjb25maWd1cmF0aW9uIGFuZCB0cmFuc2xhdGUgaXQgdG8gYmluYXJ5IGZvcm0NCisgIHN0 YXRlLg0KKw0KKyAgSWYgdGhlIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gaXMgbWlzc2luZywgdGhl biB0aGUgZnVuY3Rpb24gZmlsbHMgaW4gYQ0KKyAgZGVmYXVsdCBzdGF0ZS4NCisNCisgIEBwYXJh bVtvdXRdIE1haW5Gb3JtU3RhdGUgIEJpbmFyeSBmb3JtL3dpZGdldCBzdGF0ZSBhZnRlciB0cmFu c2xhdGlvbi4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgIEZvcm0vd2lkZ2V0IHN0YXRlIHJl YWR5Lg0KKyAgQHJldHVybiAgICAgICAgICAgICAgRXJyb3IgY29kZXMgZnJvbSB1bmRlcmx5aW5n IGZ1bmN0aW9ucy4NCisqKi8NCitTVEFUSUMNCitFRklfU1RBVFVTDQorRUZJQVBJDQorUGxhdGZv cm1Db25maWdUb0Zvcm1TdGF0ZSAoDQorICBPVVQgTUFJTl9GT1JNX1NUQVRFICpNYWluRm9ybVN0 YXRlDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgIFN0YXR1czsNCisgIFBMQVRGT1JNX0NP TkZJRyBQbGF0Zm9ybUNvbmZpZzsNCisgIFVJTlQ2NCAgICAgICAgICBPcHRpb25hbEVsZW1lbnRz Ow0KKyAgVUlOVE4gICAgICAgICAgIE1vZGVOdW1iZXI7DQorDQorICBaZXJvTWVtIChNYWluRm9y bVN0YXRlLCBzaXplb2YgKk1haW5Gb3JtU3RhdGUpOw0KKw0KKyAgU3RhdHVzID0gUGxhdGZvcm1D b25maWdMb2FkICgmUGxhdGZvcm1Db25maWcsICZPcHRpb25hbEVsZW1lbnRzKTsNCisgIHN3aXRj aCAoU3RhdHVzKSB7DQorICBjYXNlIEVGSV9TVUNDRVNTOg0KKyAgICBpZiAoT3B0aW9uYWxFbGVt ZW50cyAmIFBMQVRGT1JNX0NPTkZJR19GX0dSQVBISUNTX1JFU09MVVRJT04pIHsNCisgICAgICAv Lw0KKyAgICAgIC8vIEZvcm1hdCB0aGUgcHJlZmVycmVkIHJlc29sdXRpb24gYXMgdGV4dC4NCisg ICAgICAvLw0KKyAgICAgIFVuaWNvZGVTUHJpbnRBc2NpaUZvcm1hdCAoDQorICAgICAgICAoQ0hB UjE2ICopIE1haW5Gb3JtU3RhdGUtPkN1cnJlbnRQcmVmZXJyZWRSZXNvbHV0aW9uLA0KKyAgICAg ICAgc2l6ZW9mIE1haW5Gb3JtU3RhdGUtPkN1cnJlbnRQcmVmZXJyZWRSZXNvbHV0aW9uLA0KKyAg ICAgICAgIiVMZHglTGQiLA0KKyAgICAgICAgKElOVDY0KSBQbGF0Zm9ybUNvbmZpZy5Ib3Jpem9u dGFsUmVzb2x1dGlvbiwNCisgICAgICAgIChJTlQ2NCkgUGxhdGZvcm1Db25maWcuVmVydGljYWxS ZXNvbHV0aW9uKTsNCisNCisgICAgICAvLw0KKyAgICAgIC8vIFRyeSB0byBsb2NhdGUgaXQgaW4g dGhlIGRyb3AtZG93biBsaXN0IHRvby4gVGhpcyBtYXkgbm90IHN1Y2NlZWQsIGJ1dA0KKyAgICAg IC8vIHRoYXQncyBmaW5lLg0KKyAgICAgIC8vDQorICAgICAgZm9yIChNb2RlTnVtYmVyID0gMDsg TW9kZU51bWJlciA8IG1OdW1Hb3BNb2RlczsgKytNb2RlTnVtYmVyKSB7DQorICAgICAgICBpZiAo bUdvcE1vZGVzW01vZGVOdW1iZXJdLlggPT0gUGxhdGZvcm1Db25maWcuSG9yaXpvbnRhbFJlc29s dXRpb24gJiYNCisgICAgICAgICAgICBtR29wTW9kZXNbTW9kZU51bWJlcl0uWSA9PSBQbGF0Zm9y bUNvbmZpZy5WZXJ0aWNhbFJlc29sdXRpb24pIHsNCisgICAgICAgICAgTWFpbkZvcm1TdGF0ZS0+ TmV4dFByZWZlcnJlZFJlc29sdXRpb24gPSAoVUlOVDMyKSBNb2RlTnVtYmVyOw0KKyAgICAgICAg ICBicmVhazsNCisgICAgICAgIH0NCisgICAgICB9DQorDQorICAgICAgYnJlYWs7DQorICAgIH0N CisgICAgLy8NCisgICAgLy8gZmFsbCB0aHJvdWdoIG90aGVyd2lzZQ0KKyAgICAvLw0KKw0KKyAg Y2FzZSBFRklfTk9UX0ZPVU5EOg0KKyAgICBVbmljb2RlU1ByaW50QXNjaWlGb3JtYXQgKA0KKyAg ICAgIChDSEFSMTYgKikgTWFpbkZvcm1TdGF0ZS0+Q3VycmVudFByZWZlcnJlZFJlc29sdXRpb24s DQorICAgICAgc2l6ZW9mIE1haW5Gb3JtU3RhdGUtPkN1cnJlbnRQcmVmZXJyZWRSZXNvbHV0aW9u LA0KKyAgICAgICJVbnNldCIpOw0KKyAgICBicmVhazsNCisNCisgIGRlZmF1bHQ6DQorICAgIHJl dHVybiBTdGF0dXM7DQorICB9DQorDQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KKw0KKw0K Ky8qKg0KKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIEhJSSBtYWNoaW5lcnkgd2hl biBpdCBmZXRjaGVzIHRoZSBmb3JtIHN0YXRlLg0KKw0KKyAgU2VlIHRoZSBwcmVjaXNlIGRvY3Vt ZW50YXRpb24gaW4gdGhlIFVFRkkgc3BlYy4NCisNCisgIEBwYXJhbVtpbl0gIFRoaXMgICAgICBU aGUgQ29uZmlnIEFjY2VzcyBQcm90b2NvbCBpbnN0YW5jZS4NCisNCisgIEBwYXJhbVtpbl0gIFJl cXVlc3QgICBBIDxDb25maWdSZXF1ZXN0PiBmb3JtYXQgVUNTLTIgc3RyaW5nIGRlc2NyaWJpbmcg dGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuDQorDQorICBAcGFyYW1bb3V0XSBQ cm9ncmVzcyAgQSBwb2ludGVyIGludG8gUmVxdWVzdCBvbiBvdXRwdXQsIGlkZW50aWZ5aW5nIHRo ZSBxdWVyeQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgd2hlcmUgcHJvY2Vzc2lu ZyBmYWlsZWQuDQorDQorICBAcGFyYW1bb3V0XSBSZXN1bHRzICAgQSA8TXVsdGlDb25maWdBbHRS ZXNwPiBmb3JtYXQgVUNTLTIgc3RyaW5nIHRoYXQgaGFzDQorICAgICAgICAgICAgICAgICAgICAg ICAgYWxsIHZhbHVlcyBmaWxsZWQgaW4gZm9yIHRoZSBuYW1lcyBpbiB0aGUgUmVxdWVzdA0KKyAg ICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg IEV4dHJhY3Rpb24gb2YgZm9ybSBzdGF0ZSBpbiA8TXVsdGlDb25maWdBbHRSZXNwPg0KKyAgICAg ICAgICAgICAgICAgICAgICAgZW5jb2Rpbmcgc3VjY2Vzc2Z1bC4NCisgIEByZXR1cm4gICAgICAg ICAgICAgIFN0YXR1cyBjb2RlcyBmcm9tIHVuZGVybHlpbmcgZnVuY3Rpb25zLg0KKw0KKyoqLw0K K1NUQVRJQw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitFeHRyYWN0Q29uZmlnICgNCisgIElOIENP TlNUICBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wgICpUaGlzLA0KKyAgSU4gQ09OU1Qg IEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdCwNCisgIE9VVCAgICAgICBF RklfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICpQcm9ncmVzcywNCisgIE9VVCAgICAgICBF RklfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICpSZXN1bHRzDQorKQ0KK3sNCisgIE1BSU5f Rk9STV9TVEFURSBNYWluRm9ybVN0YXRlOw0KKyAgRUZJX1NUQVRVUyAgICAgIFN0YXR1czsNCisN CisgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIiVhOiBSZXF1ZXN0PVwiJXNcIlxuIiwgX19GVU5D VElPTl9fLCBSZXF1ZXN0KSk7DQorDQorICBTdGF0dXMgPSBQbGF0Zm9ybUNvbmZpZ1RvRm9ybVN0 YXRlICgmTWFpbkZvcm1TdGF0ZSk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAg ICpQcm9ncmVzcyA9IFJlcXVlc3Q7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICAv Lw0KKyAgLy8gQW5zd2VyIHRoZSB0ZXh0dWFsIHJlcXVlc3Qga2V5aW5nIG9mZiB0aGUgYmluYXJ5 IGZvcm0gc3RhdGUuDQorICAvLw0KKyAgU3RhdHVzID0gZ0hpaUNvbmZpZ1JvdXRpbmctPkJsb2Nr VG9Db25maWcgKGdIaWlDb25maWdSb3V0aW5nLCBSZXF1ZXN0LA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKFZPSUQgKikgJk1haW5Gb3JtU3RhdGUsIHNpemVvZiBNYWluRm9ybVN0 YXRlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0cywgUHJvZ3Jlc3Mp Ow0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBERUJVRyAoKEVGSV9EX0VSUk9S LCAiJWE6IEJsb2NrVG9Db25maWcoKTogJXIsIFByb2dyZXNzPVwiJXNcIlxuIiwNCisgICAgICBf X0ZVTkNUSU9OX18sIFN0YXR1cywgKFN0YXR1cyA9PSBFRklfREVWSUNFX0VSUk9SKSA/IE5VTEwg OiAqUHJvZ3Jlc3MpKTsNCisgIH0gZWxzZSB7DQorICAgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwg IiVhOiBSZXN1bHRzPVwiJXNcIlxuIiwgX19GVU5DVElPTl9fLCAqUmVzdWx0cykpOw0KKyAgfQ0K KyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQorDQorLyoqDQorICBJbnRlcnByZXQgdGhlIGJpbmFy eSBmb3JtIHN0YXRlIGFuZCBzYXZlIGl0IGFzIHBlcnNpc3RlbnQgcGxhdGZvcm0NCisgIGNvbmZp Z3VyYXRpb24uDQorDQorICBAcGFyYW1baW5dIE1haW5Gb3JtU3RhdGUgIEJpbmFyeSBmb3JtL3dp ZGdldCBzdGF0ZSB0byB2ZXJpZnkgYW5kIHNhdmUuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNT ICBQbGF0Zm9ybSBjb25maWd1cmF0aW9uIHNhdmVkLg0KKyAgQHJldHVybiAgICAgICAgICAgICAg RXJyb3IgY29kZXMgZnJvbSB1bmRlcmx5aW5nIGZ1bmN0aW9ucy4NCisqKi8NCitTVEFUSUMNCitF RklfU1RBVFVTDQorRUZJQVBJDQorRm9ybVN0YXRlVG9QbGF0Zm9ybUNvbmZpZyAoDQorICBJTiBD T05TVCBNQUlOX0ZPUk1fU1RBVEUgKk1haW5Gb3JtU3RhdGUNCisgICkNCit7DQorICBFRklfU1RB VFVTICAgICAgU3RhdHVzOw0KKyAgUExBVEZPUk1fQ09ORklHIFBsYXRmb3JtQ29uZmlnOw0KKyAg Q09OU1QgR09QX01PREUgICpHb3BNb2RlOw0KKw0KKyAgLy8NCisgIC8vIFRoZXJlJ3Mgbm90aGlu ZyB0byBkbyB3aXRoIHRoZSB0ZXh0dWFsIEN1cnJlbnRQcmVmZXJyZWRSZXNvbHV0aW9uIGZpZWxk Lg0KKyAgLy8gV2UgdmVyaWZ5IGFuZCB0cmFuc2xhdGUgdGhlIHNlbGVjdGlvbiBpbiB0aGUgZHJv cC1kb3duIGxpc3QuDQorICAvLw0KKyAgaWYgKE1haW5Gb3JtU3RhdGUtPk5leHRQcmVmZXJyZWRS ZXNvbHV0aW9uID49IG1OdW1Hb3BNb2Rlcykgew0KKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KKyAgfQ0KKyAgR29wTW9kZSA9IG1Hb3BNb2RlcyArIE1haW5Gb3JtU3RhdGUtPk5l eHRQcmVmZXJyZWRSZXNvbHV0aW9uOw0KKw0KKyAgWmVyb01lbSAoJlBsYXRmb3JtQ29uZmlnLCBz aXplb2YgUGxhdGZvcm1Db25maWcpOw0KKyAgUGxhdGZvcm1Db25maWcuSG9yaXpvbnRhbFJlc29s dXRpb24gPSBHb3BNb2RlLT5YOw0KKyAgUGxhdGZvcm1Db25maWcuVmVydGljYWxSZXNvbHV0aW9u ICAgPSBHb3BNb2RlLT5ZOw0KKw0KKyAgU3RhdHVzID0gUGxhdGZvcm1Db25maWdTYXZlICgmUGxh dGZvcm1Db25maWcpOw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQorDQorLyoqDQorICBUaGlz IGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgSElJIG1hY2hpbmVyeSB3aGVuIGl0IHdhbnRzIHRo ZSBkcml2ZXIgdG8NCisgIGludGVycHJldCBhbmQgcGVyc2lzdCB0aGUgZm9ybSBzdGF0ZS4NCisN CisgIFNlZSB0aGUgcHJlY2lzZSBkb2N1bWVudGF0aW9uIGluIHRoZSBVRUZJIHNwZWMuDQorDQor ICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICBUaGUgQ29uZmlnIEFjY2VzcyBQcm90b2NvbCBp bnN0YW5jZS4NCisNCisgIEBwYXJhbVtpbl0gIENvbmZpZ3VyYXRpb24gIEEgPENvbmZpZ1Jlc3A+ IGZvcm1hdCBVQ1MtMiBzdHJpbmcgZGVzY3JpYmluZyB0aGUNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZvcm0gc3RhdGUuDQorDQorICBAcGFyYW1bb3V0XSBQcm9ncmVzcyAgICAgICBB IHBvaW50ZXIgaW50byBDb25maWd1cmF0aW9uIG9uIG91dHB1dCwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlkZW50aWZ5aW5nIHRoZSBlbGVtZW50IHdoZXJlIHByb2Nlc3NpbmcgZmFp bGVkLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgQ29uZmlndXJhdGlvbiB2ZXJpZmllZCwg c3RhdGUgcGVybWFuZW50Lg0KKw0KKyAgQHJldHVybiAgICAgICAgICAgICAgU3RhdHVzIGNvZGVz IGZyb20gdW5kZXJseWluZyBmdW5jdGlvbnMuDQorKiovDQorU1RBVElDDQorRUZJX1NUQVRVUw0K K0VGSUFQSQ0KK1JvdXRlQ29uZmlnICgNCisgIElOIENPTlNUICBFRklfSElJX0NPTkZJR19BQ0NF U1NfUFJPVE9DT0wgICpUaGlzLA0KKyAgSU4gQ09OU1QgIEVGSV9TVFJJTkcgICAgICAgICAgICAg ICAgICAgICAgQ29uZmlndXJhdGlvbiwNCisgIE9VVCAgICAgICBFRklfU1RSSU5HICAgICAgICAg ICAgICAgICAgICAgICpQcm9ncmVzcw0KKykNCit7DQorICBNQUlOX0ZPUk1fU1RBVEUgTWFpbkZv cm1TdGF0ZTsNCisgIFVJTlROICAgICAgICAgICBCbG9ja1NpemU7DQorICBFRklfU1RBVFVTICAg ICAgU3RhdHVzOw0KKw0KKyAgREVCVUcgKChFRklfRF9WRVJCT1NFLCAiJWE6IENvbmZpZ3VyYXRp b249XCIlc1wiXG4iLCBfX0ZVTkNUSU9OX18sDQorICAgIENvbmZpZ3VyYXRpb24pKTsNCisNCisg IC8vDQorICAvLyB0aGUgInJlYWQiIHN0ZXAgaW4gUk1XDQorICAvLw0KKyAgU3RhdHVzID0gUGxh dGZvcm1Db25maWdUb0Zvcm1TdGF0ZSAoJk1haW5Gb3JtU3RhdGUpOw0KKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KKyAgICAqUHJvZ3Jlc3MgPSBDb25maWd1cmF0aW9uOw0KKyAgICByZXR1 cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIHRoZSAibW9kaWZ5IiBzdGVwIGluIFJN Vw0KKyAgLy8NCisgIC8vIChVcGRhdGUgdGhlIGJpbmFyeSBmb3JtIHN0YXRlLiBUaGlzIHVwZGF0 ZSBtYXkgYmUgcGFydGlhbCwgd2hpY2ggaXMgd2h5IGluDQorICAvLyBnZW5lcmFsIHdlIG11c3Qg cHJlLWxvYWQgdGhlIGZvcm0gc3RhdGUgZnJvbSB0aGUgcGxhdGZvcm0gY29uZmlnLikNCisgIC8v DQorICBCbG9ja1NpemUgPSBzaXplb2YgTWFpbkZvcm1TdGF0ZTsNCisgIFN0YXR1cyA9IGdIaWlD b25maWdSb3V0aW5nLT5Db25maWdUb0Jsb2NrIChnSGlpQ29uZmlnUm91dGluZywgQ29uZmlndXJh dGlvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWT0lEICopICZNYWluRm9y bVN0YXRlLCAmQmxvY2tTaXplLCBQcm9ncmVzcyk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQorICAgIERFQlVHICgoRUZJX0RfRVJST1IsICIlYTogQ29uZmlnVG9CbG9jaygpOiAlciwg UHJvZ3Jlc3M9XCIlc1wiXG4iLA0KKyAgICAgIF9fRlVOQ1RJT05fXywgU3RhdHVzLA0KKyAgICAg IChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpID8gTlVMTCA6ICpQcm9ncmVzcykpOw0K KyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIHRoZSAid3JpdGUiIHN0 ZXAgaW4gUk1XDQorICAvLw0KKyAgU3RhdHVzID0gRm9ybVN0YXRlVG9QbGF0Zm9ybUNvbmZpZyAo Jk1haW5Gb3JtU3RhdGUpOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAqUHJv Z3Jlc3MgPSBDb25maWd1cmF0aW9uOw0KKyAgfQ0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQor DQorU1RBVElDDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0NhbGxiYWNrICgNCisgIElOICAgICBD T05TVCBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wgICAqVGhpcywNCisgIElOICAgICBF RklfQlJPV1NFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICBBY3Rpb24sDQorICBJTiAgICAg RUZJX1FVRVNUSU9OX0lEICAgICAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb25JZCwNCisgIElO ICAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlLA0KKyAgSU4g T1VUIEVGSV9JRlJfVFlQRV9WQUxVRSAgICAgICAgICAgICAgICAgICAgICpWYWx1ZSwNCisgIE9V VCAgICBFRklfQlJPV1NFUl9BQ1RJT05fUkVRVUVTVCAgICAgICAgICAgICAqQWN0aW9uUmVxdWVz dA0KKyAgKQ0KK3sNCisgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIiVhOiBBY3Rpb249MHglTHgg UXVlc3Rpb25JZD0lZCBUeXBlPSVkXG4iLA0KKyAgICBfX0ZVTkNUSU9OX18sIChVSU5UNjQpIEFj dGlvbiwgUXVlc3Rpb25JZCwgVHlwZSkpOw0KKw0KKyAgaWYgKEFjdGlvbiAhPSBFRklfQlJPV1NF Ul9BQ1RJT05fQ0hBTkdFRCkgew0KKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KKyAgfQ0K Kw0KKyAgc3dpdGNoIChRdWVzdGlvbklkKSB7DQorICBjYXNlIFFVRVNUSU9OX1NBVkVfRVhJVDoN CisgICAgKkFjdGlvblJlcXVlc3QgPSBFRklfQlJPV1NFUl9BQ1RJT05fUkVRVUVTVF9GT1JNX1NV Qk1JVF9FWElUOw0KKyAgICBicmVhazsNCisNCisgIGNhc2UgUVVFU1RJT05fRElTQ0FSRF9FWElU Og0KKyAgICAqQWN0aW9uUmVxdWVzdCA9IEVGSV9CUk9XU0VSX0FDVElPTl9SRVFVRVNUX0ZPUk1f RElTQ0FSRF9FWElUOw0KKyAgICBicmVhazsNCisNCisgIGRlZmF1bHQ6DQorICAgIGJyZWFrOw0K KyAgfQ0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisNCisvKioNCisgIFF1ZXJ5 IGFuZCBzYXZlIGFsbCByZXNvbHV0aW9ucyBzdXBwb3J0ZWQgYnkgdGhlIEdPUC4NCisNCisgIEBw YXJhbVtpbl0gIEdvcCAgICAgICAgICBUaGUgR3JhcGhpY3MgT3V0cHV0IFByb3RvY29sIGluc3Rh bmNlIHRvIHF1ZXJ5Lg0KKw0KKyAgQHBhcmFtW291dF0gTnVtR29wTW9kZXMgIFRoZSBudW1iZXIg b2YgbW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBHT1AuIE9uIG91dHB1dCwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHBvc2l0aXZlLg0KKw0KKyAgQHBh cmFtW291dF0gR29wTW9kZXMgICAgIE9uIG91dHB1dCwgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQg YXJyYXkgY29udGFpbmluZw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZXNvbHV0 aW9ucyByZXR1cm5lZCBieSB0aGUgR09QLiBUaGUgY2FsbGVyIGlzDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlIGFycmF5IGFmdGVyIHVzZS4N CisNCisgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vIG1vZGVzIGZvdW5kLg0KKyAg QHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgRmFpbGVkIHRvIGFsbG9jYXRlIEdvcE1vZGVz Lg0KKyAgQHJldHVybiAgICAgICAgICAgICAgICAgICAgICAgRXJyb3IgY29kZXMgZnJvbSBHb3At PlF1ZXJ5TW9kZSgpLg0KKw0KKyoqLw0KK1NUQVRJQw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitR dWVyeUdvcE1vZGVzICgNCisgIElOICBFRklfR1JBUEhJQ1NfT1VUUFVUX1BST1RPQ09MICpHb3As DQorICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAqTnVtR29wTW9kZXMsDQorICBP VVQgR09QX01PREUgICAgICAgICAgICAgICAgICAgICAqKkdvcE1vZGVzDQorICApDQorew0KKyAg RUZJX1NUQVRVUyBTdGF0dXM7DQorICBVSU5UMzIgICAgIE1vZGVOdW1iZXI7DQorDQorICBpZiAo R29wLT5Nb2RlLT5NYXhNb2RlID09IDApIHsNCisgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsN CisgIH0NCisgICpOdW1Hb3BNb2RlcyA9IEdvcC0+TW9kZS0+TWF4TW9kZTsNCisNCisgICpHb3BN b2RlcyA9IEFsbG9jYXRlUG9vbCAoR29wLT5Nb2RlLT5NYXhNb2RlICogc2l6ZW9mICoqR29wTW9k ZXMpOw0KKyAgaWYgKCpHb3BNb2RlcyA9PSBOVUxMKSB7DQorICAgIHJldHVybiBFRklfT1VUX09G X1JFU09VUkNFUzsNCisgIH0NCisNCisgIGZvciAoTW9kZU51bWJlciA9IDA7IE1vZGVOdW1iZXIg PCBHb3AtPk1vZGUtPk1heE1vZGU7ICsrTW9kZU51bWJlcikgew0KKyAgICBFRklfR1JBUEhJQ1Nf T1VUUFVUX01PREVfSU5GT1JNQVRJT04gKkluZm87DQorICAgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTaXplT2ZJbmZvOw0KKw0KKyAgICBTdGF0dXMgPSBHb3AtPlF1ZXJ5 TW9kZSAoR29wLCBNb2RlTnVtYmVyLCAmU2l6ZU9mSW5mbywgJkluZm8pOw0KKyAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgZ290byBGcmVlR29wTW9kZXM7DQorICAgIH0NCisN CisgICAgKCpHb3BNb2RlcylbTW9kZU51bWJlcl0uWCA9IEluZm8tPkhvcml6b250YWxSZXNvbHV0 aW9uOw0KKyAgICAoKkdvcE1vZGVzKVtNb2RlTnVtYmVyXS5ZID0gSW5mby0+VmVydGljYWxSZXNv bHV0aW9uOw0KKyAgICBGcmVlUG9vbCAoSW5mbyk7DQorICB9DQorDQorICByZXR1cm4gRUZJX1NV Q0NFU1M7DQorDQorRnJlZUdvcE1vZGVzOg0KKyAgRnJlZVBvb2wgKCpHb3BNb2Rlcyk7DQorDQor ICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisNCisvKioNCisgIENyZWF0ZSBhIHNldCBvZiAib25l LW9mLW1hbnkiIChpZS4gImRyb3AgZG93biBsaXN0Iikgb3B0aW9uIElGUiBvcGNvZGVzLA0KKyAg YmFzZWQgb24gYXZhaWxhYmxlIEdPUCByZXNvbHV0aW9ucywgdG8gYmUgcGxhY2VkIHVuZGVyIGEg Im9uZS1vZi1tYW55IiAoaWUuDQorICAiZHJvcCBkb3duIGxpc3QiKSBvcGNvZGUuDQorDQorICBA cGFyYW1baW5dICBQYWNrYWdlTGlzdCAgIFRoZSBwYWNrYWdlIGxpc3Qgd2l0aCB0aGUgZm9ybXNl dCBhbmQgZm9ybSBmb3INCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggdGhlIGRy b3AgZG93biBvcHRpb25zIGFyZSBwcm9kdWNlZC4gT3B0aW9uDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5hbWVzIGFyZSBhZGRlZCBhcyBuZXcgc3RyaW5ncyB0byBQYWNrYWdlTGlzdC4N CisNCisgIEBwYXJhbVtvdXRdIE9wQ29kZUJ1ZmZlciAgT24gb3V0cHV0LCBhIGR5bmFtaWNhbGx5 IGFsbG9jYXRlZCBvcGNvZGUgYnVmZmVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdp dGggZHJvcCBkb3duIGxpc3Qgb3B0aW9ucyBjb3JyZXNwb25kaW5nIHRvIEdPUA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9ucy4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJs ZSBmb3IgZnJlZWluZw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcENvZGVCdWZmZXIg d2l0aCBIaWlGcmVlT3BDb2RlSGFuZGxlKCkgYWZ0ZXIgdXNlLg0KKw0KKyAgQHBhcmFtW2luXSAg TnVtR29wTW9kZXMgICBOdW1iZXIgb2YgZW50cmllcyBpbiBHb3BNb2Rlcy4NCisNCisgIEBwYXJh bVtpbl0gIEdvcE1vZGVzICAgICAgQXJyYXkgb2YgcmVzb2x1dGlvbnMgcmV0cmlldmVkIGZyb20g dGhlIEdPUC4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0VTUyAgT3Bjb2RlcyBoYXZlIGJlZW4gc3Vj Y2Vzc2Z1bGx5IHByb2R1Y2VkLg0KKw0KKyAgQHJldHVybiAgICAgICAgICAgICBTdGF0dXMgY29k ZXMgZnJvbSB1bmRlcmx5aW5nIGZ1bmN0aW9ucy4gUGFja2FnZUxpc3QgbWF5DQorICAgICAgICAg ICAgICAgICAgICAgIGhhdmUgYmVlbiBleHRlbmRlZCB3aXRoIG5ldyBzdHJpbmdzLiBPcENvZGVC dWZmZXIgaXMNCisgICAgICAgICAgICAgICAgICAgICAgdW5jaGFuZ2VkLg0KKyoqLw0KK1NUQVRJ Qw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitDcmVhdGVSZXNvbHV0aW9uT3B0aW9ucyAoDQorICBJ TiAgRUZJX0hJSV9IQU5ETEUgICpQYWNrYWdlTGlzdCwNCisgIE9VVCBWT0lEICAgICAgICAgICAg KipPcENvZGVCdWZmZXIsDQorICBJTiAgVUlOVE4gICAgICAgICAgIE51bUdvcE1vZGVzLA0KKyAg SU4gIEdPUF9NT0RFICAgICAgICAqR29wTW9kZXMNCisgICkNCit7DQorICBFRklfU1RBVFVTIFN0 YXR1czsNCisgIFZPSUQgICAgICAgKk91dHB1dEJ1ZmZlcjsNCisgIFVJTlROICAgICAgTW9kZU51 bWJlcjsNCisNCisgIE91dHB1dEJ1ZmZlciA9IEhpaUFsbG9jYXRlT3BDb2RlSGFuZGxlICgpOw0K KyAgaWYgKE91dHB1dEJ1ZmZlciA9PSBOVUxMKSB7DQorICAgIHJldHVybiBFRklfT1VUX09GX1JF U09VUkNFUzsNCisgIH0NCisNCisgIGZvciAoTW9kZU51bWJlciA9IDA7IE1vZGVOdW1iZXIgPCBO dW1Hb3BNb2RlczsgKytNb2RlTnVtYmVyKSB7DQorICAgIENIQVIxNiAgICAgICAgRGVzY1tNQVhT SVpFX1JFU19DVVJdOw0KKyAgICBFRklfU1RSSU5HX0lEIE5ld1N0cmluZzsNCisgICAgVk9JRCAg ICAgICAgICAqT3BDb2RlOw0KKw0KKyAgICBVbmljb2RlU1ByaW50QXNjaWlGb3JtYXQgKERlc2Ms IHNpemVvZiBEZXNjLCAiJUxkeCVMZCIsDQorICAgICAgKElOVDY0KSBHb3BNb2Rlc1tNb2RlTnVt YmVyXS5YLCAoSU5UNjQpIEdvcE1vZGVzW01vZGVOdW1iZXJdLlkpOw0KKyAgICBOZXdTdHJpbmcg PSBIaWlTZXRTdHJpbmcgKFBhY2thZ2VMaXN0LCAwIC8qIG5ldyBzdHJpbmcgKi8sIERlc2MsDQor ICAgICAgICAgICAgICAgICAgTlVMTCAvKiBmb3IgYWxsIGxhbmd1YWdlcyAqLyk7DQorICAgIGlm IChOZXdTdHJpbmcgPT0gMCkgew0KKyAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KKyAgICAgIGdvdG8gRnJlZU91dHB1dEJ1ZmZlcjsNCisgICAgfQ0KKyAgICBPcENvZGUgPSBI aWlDcmVhdGVPbmVPZk9wdGlvbk9wQ29kZSAoT3V0cHV0QnVmZmVyLCBOZXdTdHJpbmcsDQorICAg ICAgICAgICAgICAgMCAvKiBGbGFncyAqLywgRUZJX0lGUl9OVU1FUklDX1NJWkVfNCwgTW9kZU51 bWJlcik7DQorICAgIGlmIChPcENvZGUgPT0gTlVMTCkgew0KKyAgICAgIFN0YXR1cyA9IEVGSV9P VVRfT0ZfUkVTT1VSQ0VTOw0KKyAgICAgIGdvdG8gRnJlZU91dHB1dEJ1ZmZlcjsNCisgICAgfQ0K KyAgfQ0KKw0KKyAgKk9wQ29kZUJ1ZmZlciA9IE91dHB1dEJ1ZmZlcjsNCisgIHJldHVybiBFRklf U1VDQ0VTUzsNCisNCitGcmVlT3V0cHV0QnVmZmVyOg0KKyAgSGlpRnJlZU9wQ29kZUhhbmRsZSAo T3V0cHV0QnVmZmVyKTsNCisNCisgIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKw0KKy8qKg0KKyAg UG9wdWxhdGUgdGhlIGZvcm0gaWRlbnRpZmllZCBieSB0aGUgKFBhY2thZ2VMaXN0LCBGb3JtU2V0 R3VpZCwgRm9ybUlkKQ0KKyAgdHJpcGxldC4NCisNCisgIFRoZSBkcm9wIGRvd24gbGlzdCBvZiB2 aWRlbyByZXNvbHV0aW9ucyBpcyBnZW5lcmF0ZWQgZnJvbSAoTnVtR29wTW9kZXMsDQorICBHb3BN b2RlcykuDQorDQorICBAcmV0dmFsIEVGSV9TVUNFU1MgIEZvcm0gc3VjY2Vzc2Z1bGx5IHVwZGF0 ZWQuDQorICBAcmV0dXJuICAgICAgICAgICAgIFN0YXR1cyBjb2RlcyBmcm9tIHVuZGVybHlpbmcg ZnVuY3Rpb25zLg0KKw0KKyoqLw0KK1NUQVRJQw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitQb3B1 bGF0ZUZvcm0gKA0KKyAgSU4gIEVGSV9ISUlfSEFORExFICAqUGFja2FnZUxpc3QsDQorICBJTiAg RUZJX0dVSUQgICAgICAgICpGb3JtU2V0R3VpZCwNCisgIElOICBFRklfRk9STV9JRCAgICAgRm9y bUlkLA0KKyAgSU4gIFVJTlROICAgICAgICAgICBOdW1Hb3BNb2RlcywNCisgIElOICBHT1BfTU9E RSAgICAgICAgKkdvcE1vZGVzDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgIFN0YXR1 czsNCisgIFZPSUQgICAgICAgICAgICAgICAqT3BDb2RlQnVmZmVyOw0KKyAgVk9JRCAgICAgICAg ICAgICAgICpPcENvZGU7DQorICBFRklfSUZSX0dVSURfTEFCRUwgKkFuY2hvcjsNCisgIFZPSUQg ICAgICAgICAgICAgICAqT3BDb2RlQnVmZmVyMjsNCisNCisgIE9wQ29kZUJ1ZmZlcjIgPSBOVUxM Ow0KKw0KKyAgLy8NCisgIC8vIDEuIEFsbG9jYXRlIGFuIGVtcHR5IG9wY29kZSBidWZmZXIuDQor ICAvLw0KKyAgT3BDb2RlQnVmZmVyID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUgKCk7DQorICBp ZiAoT3BDb2RlQnVmZmVyID09IE5VTEwpIHsNCisgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VS Q0VTOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIDIuIENyZWF0ZSBhIGxhYmVsIG9wY29kZSAod2hp Y2ggaXMgYSBUaWFubyBleHRlbnNpb24pIGluc2lkZSB0aGUgYnVmZmVyLg0KKyAgLy8gVGhlIGxh YmVsJ3MgbnVtYmVyIG11c3QgbWF0Y2ggdGhlICJhbmNob3IiIGxhYmVsIGluIHRoZSBmb3JtLg0K KyAgLy8NCisgIE9wQ29kZSA9IEhpaUNyZWF0ZUd1aWRPcENvZGUgKE9wQ29kZUJ1ZmZlciwgJmdF ZmlJZnJUaWFub0d1aWQsDQorICAgICAgICAgICAgIE5VTEwgLyogb3B0aW9uYWwgY29weSBvcmln aW4gKi8sIHNpemVvZiAqQW5jaG9yKTsNCisgIGlmIChPcENvZGUgPT0gTlVMTCkgew0KKyAgICBT dGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCisgICAgZ290byBGcmVlT3BDb2RlQnVmZmVy Ow0KKyAgfQ0KKyAgQW5jaG9yICAgICAgICAgICAgICAgPSBPcENvZGU7DQorICBBbmNob3ItPkV4 dGVuZE9wQ29kZSA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KKyAgQW5jaG9yLT5OdW1iZXIg ICAgICAgPSBMQUJFTF9SRVNfTkVYVDsNCisNCisgIC8vDQorICAvLyAzLiBDcmVhdGUgdGhlIG9w Y29kZXMgaW5zaWRlIHRoZSBidWZmZXIgdGhhdCBhcmUgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUN CisgIC8vIGZvcm0uDQorICAvLw0KKyAgLy8gMy4xLiBHZXQgYSBsaXN0IG9mIHJlc29sdXRpb25z Lg0KKyAgLy8NCisgIFN0YXR1cyA9IENyZWF0ZVJlc29sdXRpb25PcHRpb25zIChQYWNrYWdlTGlz dCwgJk9wQ29kZUJ1ZmZlcjIsDQorICAgICAgICAgICAgIE51bUdvcE1vZGVzLCBHb3BNb2Rlcyk7 DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIGdvdG8gRnJlZU9wQ29kZUJ1ZmZl cjsNCisgIH0NCisNCisgIC8vDQorICAvLyAzLjIuIENyZWF0ZSBhIG9uZS1vZi1tYW55IHF1ZXN0 aW9uIHdpdGggdGhlIGFib3ZlIG9wdGlvbnMuDQorICAvLw0KKyAgT3BDb2RlID0gSGlpQ3JlYXRl T25lT2ZPcENvZGUgKA0KKyAgICAgICAgICAgICBPcENvZGVCdWZmZXIsICAgICAgICAgICAgICAg ICAgICAgICAgLy8gY3JlYXRlIG9wY29kZSBpbnNpZGUgdGhpcw0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBvcGNvZGUgYnVmZmVyLA0KKyAg ICAgICAgICAgICBRVUVTVElPTl9SRVNfTkVYVCwgICAgICAgICAgICAgICAgICAgLy8gSUQgb2Yg cXVlc3Rpb24sDQorICAgICAgICAgICAgIEZPUk1TVEFURUlEX01BSU5fRk9STSwgICAgICAgICAg ICAgICAvLyBpZGVudGlmaWVzIGZvcm0gc3RhdGUNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgc3RvcmFnZSwNCisgICAgICAgICAgICAgKFVJ TlQxNikgT0ZGU0VUX09GIChNQUlOX0ZPUk1fU1RBVEUsIC8vIHZhbHVlIG9mIHF1ZXN0aW9uIHN0 b3JlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgIE5leHRQcmVmZXJyZWRSZXNvbHV0aW9uKSwg Ly8gICBhdCB0aGlzIG9mZnNldCwNCisgICAgICAgICAgICAgU1RSSU5HX1RPS0VOIChTVFJfUkVT X05FWFQpLCAgICAgICAgIC8vIFByb21wdCwNCisgICAgICAgICAgICAgU1RSSU5HX1RPS0VOIChT VFJfUkVTX05FWFRfSEVMUCksICAgIC8vIEhlbHAsDQorICAgICAgICAgICAgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBRdWVzdGlvbkZsYWdzLA0KKyAgICAgICAgICAg ICBFRklfSUZSX05VTUVSSUNfU0laRV80LCAgICAgICAgICAgICAgLy8gc2VlIHNpemVvZg0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBOZXh0 UHJlZmVycmVkUmVzb2x1dGlvbiwNCisgICAgICAgICAgICAgT3BDb2RlQnVmZmVyMiwgICAgICAg ICAgICAgICAgICAgICAgIC8vIGJ1ZmZlciB3aXRoIHBvc3NpYmxlDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGNob2ljZXMsDQorICAgICAg ICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBERUZBVUxUIG9w Y29kZXMNCisgICAgICAgICAgICAgKTsNCisgIGlmIChPcENvZGUgPT0gTlVMTCkgew0KKyAgICBT dGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCisgICAgZ290byBGcmVlT3BDb2RlQnVmZmVy MjsNCisgIH0NCisNCisgIC8vDQorICAvLyA0LiBVcGRhdGUgdGhlIGZvcm0gd2l0aCB0aGUgb3Bj b2RlIGJ1ZmZlci4NCisgIC8vDQorICBTdGF0dXMgPSBIaWlVcGRhdGVGb3JtIChQYWNrYWdlTGlz dCwgRm9ybVNldEd1aWQsIEZvcm1JZCwNCisgICAgICAgICAgICAgT3BDb2RlQnVmZmVyLCAvLyBi dWZmZXIgd2l0aCBoZWFkIGFuY2hvciwgYW5kIG5ldyBjb250ZW50cyB0byBiZQ0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIGluc2VydGVkIGF0IGl0DQorICAgICAgICAgICAgIE5VTEwg ICAgICAgICAgLy8gYnVmZmVyIHdpdGggdGFpbCBhbmNob3IsIGZvciBkZWxldGluZyBvbGQNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250ZW50cyB1cCB0byBpdA0KKyAgICAgICAg ICAgICApOw0KKw0KK0ZyZWVPcENvZGVCdWZmZXIyOg0KKyAgSGlpRnJlZU9wQ29kZUhhbmRsZSAo T3BDb2RlQnVmZmVyMik7DQorDQorRnJlZU9wQ29kZUJ1ZmZlcjoNCisgIEhpaUZyZWVPcENvZGVI YW5kbGUgKE9wQ29kZUJ1ZmZlcik7DQorDQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisNCisv KioNCisgIExvYWQgYW5kIGV4ZWN1dGUgdGhlIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uDQorDQor ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBsb2FkZWQgYW5k IGV4ZWN1dGVkLg0KKyAgQHJldHVybiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyBjb2Rl cyBmcm9tIFBsYXRmb3JtQ29uZmlnTG9hZCgpLg0KKyoqLw0KK1NUQVRJQw0KK0VGSV9TVEFUVVMN CitFRklBUEkNCitFeGVjdXRlUGxhdGZvcm1Db25maWcgKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisg IEVGSV9TVEFUVVMgICAgICBTdGF0dXM7DQorICBQTEFURk9STV9DT05GSUcgUGxhdGZvcm1Db25m aWc7DQorICBVSU5UNjQgICAgICAgICAgT3B0aW9uYWxFbGVtZW50czsNCisNCisgIFN0YXR1cyA9 IFBsYXRmb3JtQ29uZmlnTG9hZCAoJlBsYXRmb3JtQ29uZmlnLCAmT3B0aW9uYWxFbGVtZW50cyk7 DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIERFQlVHICgoKFN0YXR1cyA9PSBF RklfTk9UX0ZPVU5EKSA/IEVGSV9EX1ZFUkJPU0UgOiBFRklfRF9FUlJPUiwNCisgICAgICAiJWE6 IGZhaWxlZCB0byBsb2FkIHBsYXRmb3JtIGNvbmZpZzogJXJcbiIsIF9fRlVOQ1RJT05fXywgU3Rh dHVzKSk7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBpZiAoT3B0aW9uYWxFbGVt ZW50cyAmIFBMQVRGT1JNX0NPTkZJR19GX0dSQVBISUNTX1JFU09MVVRJT04pIHsNCisgICAgLy8N CisgICAgLy8gUGFzcyB0aGUgcHJlZmVycmVkIHJlc29sdXRpb24gdG8gR3JhcGhpY3NDb25zb2xl RHhlIHZpYSBkeW5hbWljIFBDRHMuDQorICAgIC8vDQorICAgIFBjZFNldDMyIChQY2RWaWRlb0hv cml6b250YWxSZXNvbHV0aW9uLA0KKyAgICAgIFBsYXRmb3JtQ29uZmlnLkhvcml6b250YWxSZXNv bHV0aW9uKTsNCisgICAgUGNkU2V0MzIgKFBjZFZpZGVvVmVydGljYWxSZXNvbHV0aW9uLA0KKyAg ICAgIFBsYXRmb3JtQ29uZmlnLlZlcnRpY2FsUmVzb2x1dGlvbik7DQorICB9DQorDQorICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQorfQ0KKw0KKw0KKy8qKg0KKyAgTm90aWZpY2F0aW9uIGNhbGxiYWNr IGZvciBHT1AgaW50ZXJmYWNlIGluc3RhbGxhdGlvbi4NCisNCisgIEBwYXJhbVtpbl0gRXZlbnQg ICAgRXZlbnQgd2hvc2Ugbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIGludm9rZWQuDQor DQorICBAcGFyYW1baW5dIENvbnRleHQgIFRoZSBwb2ludGVyIHRvIHRoZSBub3RpZmljYXRpb24g ZnVuY3Rpb24ncyBjb250ZXh0LCB3aGljaA0KKyAgICAgICAgICAgICAgICAgICAgICBpcyBpbXBs ZW1lbnRhdGlvbi1kZXBlbmRlbnQuDQorKiovDQorU1RBVElDDQorVk9JRA0KK0VGSUFQSQ0KK0dv cEluc3RhbGxlZCAoDQorICBJTiBFRklfRVZFTlQgRXZlbnQsDQorICBJTiBWT0lEICAgICAgKkNv bnRleHQNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsN CisgIEVGSV9HUkFQSElDU19PVVRQVVRfUFJPVE9DT0wgKkdvcDsNCisNCisgIEFTU0VSVCAoRXZl bnQgPT0gbUdvcEV2ZW50KTsNCisNCisgIC8vDQorICAvLyBDaGVjayBmdXJ0aGVyIEdPUHMuDQor ICAvLw0KKyAgZm9yICg7Oykgew0KKyAgICBtTnVtR29wTW9kZXMgPSAwOw0KKyAgICBtR29wTW9k ZXMgPSBOVUxMOw0KKw0KKyAgICBTdGF0dXMgPSBnQlMtPkxvY2F0ZVByb3RvY29sICgmZ0VmaUdy YXBoaWNzT3V0cHV0UHJvdG9jb2xHdWlkLCBtR29wVHJhY2tlciwNCisgICAgICAgICAgICAgICAg ICAgIChWT0lEICoqKSAmR29wKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAg ICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBTdGF0dXMgPSBRdWVyeUdvcE1vZGVzIChHb3As ICZtTnVtR29wTW9kZXMsICZtR29wTW9kZXMpOw0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQorICAgICAgY29udGludWU7DQorICAgIH0NCisNCisgICAgU3RhdHVzID0gUG9wdWxhdGVG b3JtIChtSW5zdGFsbGVkUGFja2FnZXMsICZnU2ltaWNzQm9hcmRDb25maWdHdWlkLA0KKyAgICAg ICAgICAgICAgIEZPUk1JRF9NQUlOX0ZPUk0sIG1OdW1Hb3BNb2RlcywgbUdvcE1vZGVzKTsNCisg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIEZyZWVQb29sIChtR29wTW9kZXMp Ow0KKyAgICAgIGNvbnRpbnVlOw0KKyAgICB9DQorDQorICAgIGJyZWFrOw0KKyAgfQ0KKw0KKyAg Ly8NCisgIC8vIFN1Y2Nlc3MgLS0gc28gdW5pbnN0YWxsIHRoaXMgY2FsbGJhY2suIENsb3Npbmcg dGhlIGV2ZW50IHJlbW92ZXMgYWxsDQorICAvLyBwZW5kaW5nIG5vdGlmaWNhdGlvbnMgYW5kIGFs bCBwcm90b2NvbCByZWdpc3RyYXRpb25zLg0KKyAgLy8NCisgIFN0YXR1cyA9IGdCUy0+Q2xvc2VF dmVudCAobUdvcEV2ZW50KTsNCisgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQorICBtR29w RXZlbnQgPSBOVUxMOw0KKyAgbUdvcFRyYWNrZXIgPSBOVUxMOw0KK30NCisNCisNCisvKioNCisg IEVudHJ5IHBvaW50IGZvciB0aGlzIGRyaXZlci4NCisNCisgIEBwYXJhbVtpbl0gSW1hZ2VIYW5k bGUgIEltYWdlIGhhbmRsZSBvZiB0aGlzIGRyaXZlci4NCisgIEBwYXJhbVtpbl0gU3lzdGVtVGFi bGUgIFBvaW50ZXIgdG8gU3lzdGVtVGFibGUuDQorDQorICBAcmV0dmFsIEVGSV9TVUNFU1MgICAg ICAgICAgICBEcml2ZXIgaGFzIGxvYWRlZCBzdWNjZXNzZnVsbHkuDQorICBAcmV0dmFsIEVGSV9P VVRfT0ZfUkVTT1VSQ0VTICBGYWlsZWQgdG8gaW5zdGFsbCBISUkgcGFja2FnZXMuDQorICBAcmV0 dXJuICAgICAgICAgICAgICAgICAgICAgICBFcnJvciBjb2RlcyBmcm9tIGxvd2VyIGxldmVsIGZ1 bmN0aW9ucy4NCisNCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorUGxhdGZvcm1Jbml0ICgN CisgIElOICBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCisgIElOICBFRklfU1lTVEVN X1RBQkxFICAqU3lzdGVtVGFibGUNCisgICkNCit7DQorICBFRklfU1RBVFVTIFN0YXR1czsNCisN CisgIEV4ZWN1dGVQbGF0Zm9ybUNvbmZpZyAoKTsNCisNCisgIG1Db25maWdBY2Nlc3MuRXh0cmFj dENvbmZpZyA9ICZFeHRyYWN0Q29uZmlnOw0KKyAgbUNvbmZpZ0FjY2Vzcy5Sb3V0ZUNvbmZpZyAg ID0gJlJvdXRlQ29uZmlnOw0KKyAgbUNvbmZpZ0FjY2Vzcy5DYWxsYmFjayAgICAgID0gJkNhbGxi YWNrOw0KKw0KKyAgLy8NCisgIC8vIERlY2xhcmUgb3Vyc2VsdmVzIHN1aXRhYmxlIGZvciBISUkg Y29tbXVuaWNhdGlvbi4NCisgIC8vDQorICBTdGF0dXMgPSBnQlMtPkluc3RhbGxNdWx0aXBsZVBy b3RvY29sSW50ZXJmYWNlcyAoJkltYWdlSGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICZnRWZp RGV2aWNlUGF0aFByb3RvY29sR3VpZCwgICAgICAmbVBrZ0RldmljZVBhdGgsDQorICAgICAgICAg ICAgICAgICAgJmdFZmlIaWlDb25maWdBY2Nlc3NQcm90b2NvbEd1aWQsICZtQ29uZmlnQWNjZXNz LA0KKyAgICAgICAgICAgICAgICAgIE5VTEwpOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIFB1Ymxpc2ggdGhl IEhJSSBwYWNrYWdlIGxpc3QgdG8gSElJIERhdGFiYXNlLg0KKyAgLy8NCisgIG1JbnN0YWxsZWRQ YWNrYWdlcyA9IEhpaUFkZFBhY2thZ2VzICgNCisgICAgICAgICAgICAgICAgICAgICAgICAgJmdF ZmlDYWxsZXJJZEd1aWQsICAvLyBQYWNrYWdlTGlzdEd1aWQNCisgICAgICAgICAgICAgICAgICAg ICAgICAgSW1hZ2VIYW5kbGUsICAgICAgICAvLyBhc3NvY2lhdGVkIERldmljZUhhbmRsZQ0KKyAg ICAgICAgICAgICAgICAgICAgICAgICBTaW1pY3NEeGVTdHJpbmdzLCAgIC8vIDFzdCBwYWNrYWdl DQorICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtRm9ybXNCaW4sICAgLy8gMm5kIHBh Y2thZ2UNCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAvLyB0 ZXJtaW5hdG9yDQorICAgICAgICAgICAgICAgICAgICAgICAgICk7DQorICBpZiAobUluc3RhbGxl ZFBhY2thZ2VzID09IE5VTEwpIHsNCisgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7 DQorICAgIGdvdG8gVW5pbnN0YWxsUHJvdG9jb2xzOw0KKyAgfQ0KKw0KKyAgU3RhdHVzID0gZ0JT LT5DcmVhdGVFdmVudCAoRVZUX05PVElGWV9TSUdOQUwsIFRQTF9DQUxMQkFDSywgJkdvcEluc3Rh bGxlZCwNCisgICAgICAgICAgICAgICAgICBOVUxMIC8qIENvbnRleHQgKi8sICZtR29wRXZlbnQp Ow0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBnb3RvIFJlbW92ZVBhY2thZ2Vz Ow0KKyAgfQ0KKw0KKyAgU3RhdHVzID0gZ0JTLT5SZWdpc3RlclByb3RvY29sTm90aWZ5ICgmZ0Vm aUdyYXBoaWNzT3V0cHV0UHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAgIG1Hb3BFdmVu dCwgJm1Hb3BUcmFja2VyKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgZ290 byBDbG9zZUdvcEV2ZW50Ow0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIENoZWNrIGFscmVhZHkgaW5z dGFsbGVkIEdPUHMuDQorICAvLw0KKyAgU3RhdHVzID0gZ0JTLT5TaWduYWxFdmVudCAobUdvcEV2 ZW50KTsNCisgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQorDQorICByZXR1cm4gRUZJX1NV Q0NFU1M7DQorDQorQ2xvc2VHb3BFdmVudDoNCisgIGdCUy0+Q2xvc2VFdmVudCAobUdvcEV2ZW50 KTsNCisNCitSZW1vdmVQYWNrYWdlczoNCisgIEhpaVJlbW92ZVBhY2thZ2VzIChtSW5zdGFsbGVk UGFja2FnZXMpOw0KKw0KK1VuaW5zdGFsbFByb3RvY29sczoNCisgIGdCUy0+VW5pbnN0YWxsTXVs dGlwbGVQcm90b2NvbEludGVyZmFjZXMgKEltYWdlSGFuZGxlLA0KKyAgICAgICAgICZnRWZpRGV2 aWNlUGF0aFByb3RvY29sR3VpZCwgICAgICAmbVBrZ0RldmljZVBhdGgsDQorICAgICAgICAgJmdF ZmlIaWlDb25maWdBY2Nlc3NQcm90b2NvbEd1aWQsICZtQ29uZmlnQWNjZXNzLA0KKyAgICAgICAg IE5VTEwpOw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQorLyoqDQorICBVbmxvYWQgdGhlIGRy aXZlci4NCisNCisgIEBwYXJhbVtpbl0gIEltYWdlSGFuZGxlICBIYW5kbGUgdGhhdCBpZGVudGlm aWVzIHRoZSBpbWFnZSB0byBldmljdC4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgIFRoZSBp bWFnZSBoYXMgYmVlbiB1bmxvYWRlZC4NCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorUGxh dGZvcm1VbmxvYWQgKA0KKyAgSU4gIEVGSV9IQU5ETEUgIEltYWdlSGFuZGxlDQorICApDQorew0K KyAgaWYgKG1Hb3BFdmVudCA9PSBOVUxMKSB7DQorICAgIC8vDQorICAgIC8vIFRoZSBHT1AgY2Fs bGJhY2sgcmFuIHN1Y2Nlc3NmdWxseSBhbmQgdW5yZWdpc3RlcmVkIGl0c2VsZi4gUmVsZWFzZSB0 aGUNCisgICAgLy8gcmVzb3VyY2VzIGFsbG9jYXRlZCB0aGVyZS4NCisgICAgLy8NCisgICAgQVNT RVJUIChtR29wTW9kZXMgIT0gTlVMTCk7DQorICAgIEZyZWVQb29sIChtR29wTW9kZXMpOw0KKyAg fSBlbHNlIHsNCisgICAgLy8NCisgICAgLy8gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gdW5yZWdpc3Rl ciB0aGUgY2FsbGJhY2suDQorICAgIC8vDQorICAgIEFTU0VSVCAobUdvcE1vZGVzID09IE5VTEwp Ow0KKyAgICBnQlMtPkNsb3NlRXZlbnQgKG1Hb3BFdmVudCk7DQorICB9DQorDQorICAvLw0KKyAg Ly8gUmVsZWFzZSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IHRoZSBlbnRyeSBwb2ludC4NCisgIC8v DQorICBIaWlSZW1vdmVQYWNrYWdlcyAobUluc3RhbGxlZFBhY2thZ2VzKTsNCisgIGdCUy0+VW5p bnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKEltYWdlSGFuZGxlLA0KKyAgICAgICAg ICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwgICAgICAmbVBrZ0RldmljZVBhdGgsDQorICAg ICAgICAgJmdFZmlIaWlDb25maWdBY2Nlc3NQcm90b2NvbEd1aWQsICZtQ29uZmlnQWNjZXNzLA0K KyAgICAgICAgIE5VTEwpOw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCmRpZmYgLS1naXQg YS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhlL1BsYXRmb3JtQ29u ZmlnLmMgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhlL1BsYXRm b3JtQ29uZmlnLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi5iMWUw MTdiYmIwDQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9h cmRQa2cvU2ltaWNzRHhlL1BsYXRmb3JtQ29uZmlnLmMNCkBAIC0wLDAgKzEsMTIzIEBADQorLyoq IEBmaWxlDQorICBVdGlsaXR5IGZ1bmN0aW9ucyBmb3Igc2VyaWFsaXppbmcgKHBlcnNpc3RlbnRs eSBzdG9yaW5nKSBhbmQgZGVzZXJpYWxpemluZw0KKyAgU0lNSUNTIFFTUCdzIHBsYXRmb3JtIGNv bmZpZ3VyYXRpb24uDQorDQorICBDb3B5cmlnaHQgKEMpIDIwMTQsIFJlZCBIYXQsIEluYy4NCisN CisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiovDQor DQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5 L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0K KyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpUnVu dGltZVNlcnZpY2VzVGFibGVMaWIuaD4NCisjaW5jbHVkZSA8R3VpZC9TaW1pY3NCb2FyZENvbmZp Zy5oPg0KKw0KKyNpbmNsdWRlICJQbGF0Zm9ybUNvbmZpZy5oIg0KKw0KKy8vDQorLy8gTmFtZSBv ZiB0aGUgVUVGSSB2YXJpYWJsZSB0aGF0IHdlIHVzZSBmb3IgcGVyc2lzdGVudCBzdG9yYWdlLg0K Ky8vDQorU1RBVElDIENIQVIxNiBtVmFyaWFibGVOYW1lW10gPSBMIlBsYXRmb3JtQ29uZmlnIjsN CisNCisNCisvKioNCisgIFNlcmlhbGl6ZSBhbmQgcGVyc2lzdGVudGx5IHNhdmUgcGxhdGZvcm0g Y29uZmlndXJhdGlvbi4NCisNCisgIEBwYXJhbVtpbl0gUGxhdGZvcm1Db25maWcgIFRoZSBwbGF0 Zm9ybSBjb25maWd1cmF0aW9uIHRvIHNlcmlhbGl6ZSBhbmQgc2F2ZS4NCisNCisgIEByZXR1cm4g IFN0YXR1cyBjb2RlcyByZXR1cm5lZCBieSBnUlQtPlNldFZhcmlhYmxlKCkuDQorKiovDQorRUZJ X1NUQVRVUw0KK0VGSUFQSQ0KK1BsYXRmb3JtQ29uZmlnU2F2ZSAoDQorICBJTiBQTEFURk9STV9D T05GSUcgKlBsYXRmb3JtQ29uZmlnDQorICApDQorew0KKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQor DQorICAvLw0KKyAgLy8gV2UgY291bGQgaW1wbGVtZW50IGFueSBraW5kIG9mIHRyYW5zbGF0aW9u IGhlcmUsIGFzIHBhcnQgb2Ygc2VyaWFsaXphdGlvbi4NCisgIC8vIEZvciBleGFtcGxlLCB3ZSBj b3VsZCBleHBvc2UgdGhlIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gaW4gc2VwYXJhdGUNCisgIC8v IHZhcmlhYmxlcyB3aXRoIGh1bWFuLXJlYWRhYmxlIGNvbnRlbnRzLCBhbGxvd2luZyBvdGhlciB0 b29scyB0byBhY2Nlc3MNCisgIC8vIHRoZW0gbW9yZSBlYXNpbHkuIEZvciBub3csIGp1c3Qgc2F2 ZSBhIGJpbmFyeSBkdW1wLg0KKyAgLy8NCisgIFN0YXR1cyA9IGdSVC0+U2V0VmFyaWFibGUgKG1W YXJpYWJsZU5hbWUsICZnU2ltaWNzQm9hcmRDb25maWdHdWlkLA0KKyAgICAgICAgICAgICAgICAg IEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUgfCBFRklfVkFSSUFCTEVfQk9PVFNFUlZJQ0VfQUND RVNTIHwNCisgICAgICAgICAgICAgICAgICAgIEVGSV9WQVJJQUJMRV9SVU5USU1FX0FDQ0VTUywN CisgICAgICAgICAgICAgICAgICBzaXplb2YgKlBsYXRmb3JtQ29uZmlnLCBQbGF0Zm9ybUNvbmZp Zyk7DQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisNCisvKioNCisgIExvYWQgYW5kIGRlc2Vy aWFsaXplIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uDQorDQorICBXaGVuIHRoZSBmdW5jdGlvbiBm YWlscywgb3V0cHV0IHBhcmFtZXRlcnMgYXJlIGluZGV0ZXJtaW5hdGUuDQorDQorICBAcGFyYW1b b3V0XSBQbGF0Zm9ybUNvbmZpZyAgICBUaGUgcGxhdGZvcm0gY29uZmlndXJhdGlvbiB0byByZWNl aXZlIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkIGRhdGEuDQor DQorICBAcGFyYW1bb3V0XSBPcHRpb25hbEVsZW1lbnRzICBUaGlzIGJpdG1hcCBkZXNjcmliZXMg dGhlIHByZXNlbmNlIG9mIG9wdGlvbmFsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25maWd1cmF0aW9uIGVsZW1lbnRzIHRoYXQgaGF2ZSBiZWVuIGxvYWRlZC4NCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBMQVRGT1JNX0NPTkZJR19GX0RPV05HUkFERSBtZWFu cyB0aGF0IHNvbWUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd24gZWxl bWVudHMsIHByZXNlbnQgaW4gdGhlIHdpcmUgZm9ybWF0LA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaGF2ZSBiZWVuIGlnbm9yZWQuDQorDQorICBAcmV0dmFsICBFRklfU1VDQ0VT UyAgICAgICAgIExvYWRpbmcgJiBkZXNlcmlhbGl6YXRpb24gc3VjY2Vzc2Z1bC4NCisgIEByZXR1 cm4gICAgICAgICAgICAgICAgICAgICAgRXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgR2V0VmFyaWFi bGUyKCkuDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1BsYXRmb3JtQ29uZmlnTG9hZCAo DQorICBPVVQgUExBVEZPUk1fQ09ORklHICpQbGF0Zm9ybUNvbmZpZywNCisgIE9VVCBVSU5UNjQg ICAgICAgICAgKk9wdGlvbmFsRWxlbWVudHMNCisgICkNCit7DQorICBWT0lEICAgICAgICpEYXRh Ow0KKyAgVUlOVE4gICAgICBEYXRhU2l6ZTsNCisgIEVGSV9TVEFUVVMgU3RhdHVzOw0KKw0KKyAg Ly8NCisgIC8vIEFueSB0cmFuc2xhdGlvbiBkb25lIGluIFBsYXRmb3JtQ29uZmlnU2F2ZSgpIHdv dWxkIGhhdmUgdG8gYmUgbWlycm9yZWQNCisgIC8vIGhlcmUuIEZvciBub3csIGp1c3QgbG9hZCB0 aGUgYmluYXJ5IGR1bXAuDQorICAvLw0KKyAgLy8gVmVyc2lvbmluZyBvZiB0aGUgYmluYXJ5IHdp cmUgZm9ybWF0IGlzIGltcGxlbWVudGVkIGJhc2VkIG9uIHNpemUNCisgIC8vIChvbmx5IGluY3Jl bWVudGFsIGNoYW5nZXMsIGllLiBuZXcgZmllbGRzKSwgYW5kIG9uIEdVSUQuDQorICAvLyAoSW5j b21wYXRpYmxlIGNoYW5nZXMgcmVxdWlyZSBhIEdVSUQgY2hhbmdlLikNCisgIC8vDQorICBTdGF0 dXMgPSBHZXRWYXJpYWJsZTIgKG1WYXJpYWJsZU5hbWUsICZnU2ltaWNzQm9hcmRDb25maWdHdWlk LCAmRGF0YSwNCisgICAgICAgICAgICAgJkRhdGFTaXplKTsNCisgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgICpPcHRpb25hbEVsZW1l bnRzID0gMDsNCisgIGlmIChEYXRhU2l6ZSA+IHNpemVvZiAqUGxhdGZvcm1Db25maWcpIHsNCisg ICAgLy8NCisgICAgLy8gSGFuZGxlIGZpcm13YXJlIGRvd25ncmFkZSAtLSBrZWVwIG9ubHkgbGVh ZGluZyBwYXJ0Lg0KKyAgICAvLw0KKyAgICBDb3B5TWVtIChQbGF0Zm9ybUNvbmZpZywgRGF0YSwg c2l6ZW9mICpQbGF0Zm9ybUNvbmZpZyk7DQorICAgICpPcHRpb25hbEVsZW1lbnRzIHw9IFBMQVRG T1JNX0NPTkZJR19GX0RPV05HUkFERTsNCisgIH0gZWxzZSB7DQorICAgIENvcHlNZW0gKFBsYXRm b3JtQ29uZmlnLCBEYXRhLCBEYXRhU2l6ZSk7DQorDQorICAgIC8vDQorICAgIC8vIEhhbmRsZSBm aXJtd2FyZSB1cGdyYWRlIC0tIHplcm8gb3V0IG1pc3NpbmcgZmllbGRzLg0KKyAgICAvLw0KKyAg ICBaZXJvTWVtICgoVUlOVDggKilQbGF0Zm9ybUNvbmZpZyArIERhdGFTaXplLA0KKyAgICAgIHNp emVvZiAqUGxhdGZvcm1Db25maWcgLSBEYXRhU2l6ZSk7DQorICB9DQorDQorICAvLw0KKyAgLy8g QmFzZWQgb24gRGF0YVNpemUsIHJlcG9ydCB0aGUgb3B0aW9uYWwgZmVhdHVyZXMgdGhhdCB3ZSBy ZWNvZ25pemUuDQorICAvLw0KKyAgaWYgKERhdGFTaXplID49IChPRkZTRVRfT0YgKFBMQVRGT1JN X0NPTkZJRywgVmVydGljYWxSZXNvbHV0aW9uKSArDQorICAgICAgICAgICAgICAgICAgIHNpemVv ZiBQbGF0Zm9ybUNvbmZpZy0+VmVydGljYWxSZXNvbHV0aW9uKSkgew0KKyAgICAqT3B0aW9uYWxF bGVtZW50cyB8PSBQTEFURk9STV9DT05GSUdfRl9HUkFQSElDU19SRVNPTFVUSU9OOw0KKyAgfQ0K Kw0KKyAgRnJlZVBvb2wgKERhdGEpOw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCmRpZmYg LS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVpL0Ntb3Mu YyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NQZWkvQ21vcy5jDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uYjM0YmE5MjgzYg0KLS0tIC9k ZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1Bl aS9DbW9zLmMNCkBAIC0wLDAgKzEsNTcgQEANCisvKiogQGZpbGUNCisgIFBDL0FUIENNT1MgYWNj ZXNzIHJvdXRpbmVzDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE5IEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQorDQorICBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyoqLw0KKw0KKyNpbmNsdWRlICJDbW9zLmgi DQorI2luY2x1ZGUgIkxpYnJhcnkvSW9MaWIuaCINCisNCisvKioNCisgIFJlYWRzIDgtYml0cyBv ZiBDTU9TIGRhdGEuDQorDQorICBSZWFkcyB0aGUgOC1iaXRzIG9mIENNT1MgZGF0YSBhdCB0aGUg bG9jYXRpb24gc3BlY2lmaWVkIGJ5IEluZGV4Lg0KKyAgVGhlIDgtYml0IHJlYWQgdmFsdWUgaXMg cmV0dXJuZWQuDQorDQorICBAcGFyYW0gIEluZGV4ICBUaGUgQ01PUyBsb2NhdGlvbiB0byByZWFk Lg0KKw0KKyAgQHJldHVybiBUaGUgdmFsdWUgcmVhZC4NCisNCisqKi8NCitVSU5UOA0KK0VGSUFQ SQ0KK0Ntb3NSZWFkOCAoDQorICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5k ZXgNCisgICkNCit7DQorICBJb1dyaXRlOCAoMHg3MCwgKFVJTlQ4KSBJbmRleCk7DQorICByZXR1 cm4gSW9SZWFkOCAoMHg3MSk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgV3JpdGVzIDgtYml0cyBvZiBD TU9TIGRhdGEuDQorDQorICBXcml0ZXMgOC1iaXRzIG9mIENNT1MgZGF0YSB0byB0aGUgbG9jYXRp b24gc3BlY2lmaWVkIGJ5IEluZGV4DQorICB3aXRoIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgVmFs dWUgYW5kIHJldHVybnMgVmFsdWUuDQorDQorICBAcGFyYW0gIEluZGV4ICBUaGUgQ01PUyBsb2Nh dGlvbiB0byB3cml0ZS4NCisgIEBwYXJhbSAgVmFsdWUgIFRoZSB2YWx1ZSB0byB3cml0ZSB0byBD TU9TLg0KKw0KKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiB0byBDTU9TLg0KKw0KKyoqLw0K K1VJTlQ4DQorRUZJQVBJDQorQ21vc1dyaXRlOCAoDQorICBJTiAgICAgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgSW5kZXgsDQorICBJTiAgICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAg VmFsdWUNCisgICkNCit7DQorICBJb1dyaXRlOCAoMHg3MCwgKFVJTlQ4KSBJbmRleCk7DQorICBJ b1dyaXRlOCAoMHg3MSwgVmFsdWUpOw0KKyAgcmV0dXJuIFZhbHVlOw0KK30NCisNCmRpZmYgLS1n aXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVpL0ZlYXR1cmVD b250cm9sLmMgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVpL0Zl YXR1cmVDb250cm9sLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi42 OTI0MDVlNDE3DQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVu Qm9hcmRQa2cvU2ltaWNzUGVpL0ZlYXR1cmVDb250cm9sLmMNCkBAIC0wLDAgKzEsMTE0IEBADQor LyoqIEBmaWxlDQorICBJbnN0YWxsIGEgY2FsbGJhY2sgd2hlbiBuZWNlc3NhcnkgZm9yIHNldHRp bmcgdGhlIEZlYXR1cmUgQ29udHJvbCBNU1Igb24gYWxsDQorICBwcm9jZXNzb3JzLg0KKw0KKyAg Q29weXJpZ2h0IChDKSAyMDE2LCBSZWQgSGF0LCBJbmMuDQorDQorICBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyoqLw0KKw0KKyNpbmNsdWRlIDxMaWJyYXJ5 L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGVpU2VydmljZXNMaWIuaD4NCisjaW5j bHVkZSA8UHBpL01wU2VydmljZXMuaD4NCisjaW5jbHVkZSA8UmVnaXN0ZXIvSW50ZWwvTXNyL0Nv cmUyTXNyLmg+DQorDQorI2luY2x1ZGUgIlBsYXRmb3JtLmgiDQorDQorLy8NCisvLyBUaGUgdmFs dWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgRmVhdHVyZSBDb250cm9sIE1TUiwgcmV0cmlldmVkIGZy b20gZndfY2ZnLg0KKy8vDQorU1RBVElDIFVJTlQ2NCBtRmVhdHVyZUNvbnRyb2xWYWx1ZSA9IDB4 MDAwMDAwMDU7DQorDQorLyoqDQorICBXcml0ZSB0aGUgRmVhdHVyZSBDb250cm9sIE1TUiBvbiBh biBBcHBsaWNhdGlvbiBQcm9jZXNzb3Igb3IgdGhlIEJvb3QNCisgIFByb2Nlc3Nvci4NCisNCisg IEFsbCBBUHMgZXhlY3V0ZSB0aGlzIGZ1bmN0aW9uIGluIHBhcmFsbGVsLiBUaGUgQlNQIGV4ZWN1 dGVzIHRoZSBmdW5jdGlvbg0KKyAgc2VwYXJhdGVseS4NCisNCisgIEBwYXJhbVtpbixvdXRdIFdv cmtTcGFjZSAgUG9pbnRlciB0byB0aGUgaW5wdXQvb3V0cHV0IGFyZ3VtZW50IHdvcmtzcGFjZQ0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWQgYnkgYWxsIHByb2Nlc3NvcnMuDQor KiovDQorU1RBVElDDQorVk9JRA0KK0VGSUFQSQ0KK1dyaXRlRmVhdHVyZUNvbnRyb2wgKA0KKyAg SU4gT1VUIFZPSUQgKldvcmtTcGFjZQ0KKyAgKQ0KK3sNCisgIEFzbVdyaXRlTXNyNjQgKE1TUl9D T1JFMl9GRUFUVVJFX0NPTlRST0wsIG1GZWF0dXJlQ29udHJvbFZhbHVlKTsNCit9DQorDQorLyoq DQorICBOb3RpZmljYXRpb24gZnVuY3Rpb24gY2FsbGVkIHdoZW4gRUZJX1BFSV9NUF9TRVJWSUNF U19QUEkgYmVjb21lcyBhdmFpbGFibGUuDQorDQorICBAcGFyYW1baW5dIFBlaVNlcnZpY2VzICAg ICAgSW5kaXJlY3QgcmVmZXJlbmNlIHRvIHRoZSBQRUkgU2VydmljZXMgVGFibGUuDQorICBAcGFy YW1baW5dIE5vdGlmeURlc2NyaXB0b3IgQWRkcmVzcyBvZiB0aGUgbm90aWZpY2F0aW9uIGRlc2Ny aXB0b3IgZGF0YQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS4NCisg IEBwYXJhbVtpbl0gUHBpICAgICAgICAgICAgICBBZGRyZXNzIG9mIHRoZSBQUEkgdGhhdCB3YXMg aW5zdGFsbGVkLg0KKw0KKyAgQHJldHVybiAgU3RhdHVzIG9mIHRoZSBub3RpZmljYXRpb24uIFRo ZSBzdGF0dXMgY29kZSByZXR1cm5lZCBmcm9tIHRoaXMNCisgICAgICAgICAgIGZ1bmN0aW9uIGlz IGlnbm9yZWQuDQorKiovDQorU1RBVElDDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK09uTXBTZXJ2 aWNlc0F2YWlsYWJsZSAoDQorICBJTiBFRklfUEVJX1NFUlZJQ0VTICAgICAgICAgICAqKlBlaVNl cnZpY2VzLA0KKyAgSU4gRUZJX1BFSV9OT1RJRllfREVTQ1JJUFRPUiAgKk5vdGlmeURlc2NyaXB0 b3IsDQorICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAqUHBpDQorICApDQorew0KKyAg RUZJX1BFSV9NUF9TRVJWSUNFU19QUEkgKk1wU2VydmljZXM7DQorICBFRklfU1RBVFVTICAgICAg ICAgICAgICBTdGF0dXM7DQorDQorICBERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICIlYTogJWFcbiIs IGdFZmlDYWxsZXJCYXNlTmFtZSwgX19GVU5DVElPTl9fKSk7DQorICAvLw0KKyAgLy8gV3JpdGUg dGhlIE1TUiBvbiBhbGwgdGhlIEFQcyBpbiBwYXJhbGxlbC4NCisgIC8vDQorICBNcFNlcnZpY2Vz ID0gUHBpOw0KKyAgU3RhdHVzID0gTXBTZXJ2aWNlcy0+U3RhcnR1cEFsbEFQcyAoDQorICAgICAg ICAgICAgICAgICAgICAgICAgIChDT05TVCBFRklfUEVJX1NFUlZJQ0VTICoqKVBlaVNlcnZpY2Vz LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBNcFNlcnZpY2VzLA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICBXcml0ZUZlYXR1cmVDb250cm9sLCAvLyBQcm9jZWR1cmUNCisgICAgICAgICAg ICAgICAgICAgICAgICAgRkFMU0UsICAgICAgICAgICAgICAgLy8gU2luZ2xlVGhyZWFkDQorICAg ICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgIC8vIFRpbWVvdXRJbk1p Y3JvU2Vjb25kczogaW5mLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMICAgICAgICAg ICAgICAgICAvLyBQcm9jZWR1cmVBcmd1bWVudA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAp Ow0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSAmJiBTdGF0dXMgIT0gRUZJX05PVF9TVEFSVEVE KSB7DQorICAgIERFQlVHICgoRUZJX0RfRVJST1IsICIlYTogU3RhcnR1cEFsbEFwcygpOiAlclxu IiwgX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisN CisgIC8vDQorICAvLyBOb3cgd3JpdGUgdGhlIE1TUiBvbiB0aGUgQlNQIHRvby4NCisgIC8vDQor ICBXcml0ZUZlYXR1cmVDb250cm9sIChOVUxMKTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsN Cit9DQorDQorLy8NCisvLyBOb3RpZmljYXRpb24gb2JqZWN0IGZvciByZWdpc3RlcmluZyB0aGUg Y2FsbGJhY2ssIGZvciB3aGVuDQorLy8gRUZJX1BFSV9NUF9TRVJWSUNFU19QUEkgYmVjb21lcyBh dmFpbGFibGUuDQorLy8NCitTVEFUSUMgQ09OU1QgRUZJX1BFSV9OT1RJRllfREVTQ1JJUFRPUiBt TXBTZXJ2aWNlc05vdGlmeSA9IHsNCisgIEVGSV9QRUlfUFBJX0RFU0NSSVBUT1JfTk9USUZZX0NB TExCQUNLIHwgLy8gRmxhZ3MNCisgIEVGSV9QRUlfUFBJX0RFU0NSSVBUT1JfVEVSTUlOQVRFX0xJ U1QsDQorICAmZ0VmaVBlaU1wU2VydmljZXNQcGlHdWlkLCAgICAgICAgICAgICAgIC8vIEd1aWQN CisgIE9uTXBTZXJ2aWNlc0F2YWlsYWJsZSAgICAgICAgICAgICAgICAgICAgLy8gTm90aWZ5DQor fTsNCisNCitWT0lEDQorSW5zdGFsbEZlYXR1cmVDb250cm9sQ2FsbGJhY2sgKA0KKyAgVk9JRA0K KyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgIFN0YXR1czsNCisNCisgIFN0YXR1cyA9 IFBlaVNlcnZpY2VzTm90aWZ5UHBpICgmbU1wU2VydmljZXNOb3RpZnkpOw0KKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KKyAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiJWE6IGZhaWxlZCB0 byBzZXQgdXAgTVAgU2VydmljZXMgY2FsbGJhY2s6ICVyXG4iLA0KKyAgICAgIF9fRlVOQ1RJT05f XywgU3RhdHVzKSk7DQorICB9DQorfQ0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWlj c09wZW5Cb2FyZFBrZy9TaW1pY3NQZWkvTWVtRGV0ZWN0LmMgYi9QbGF0Zm9ybS9JbnRlbC9TaW1p Y3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVpL01lbURldGVjdC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KaW5kZXggMDAwMDAwMDAwMC4uOTBlNmQxZDNjZg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxh dGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1BlaS9NZW1EZXRlY3QuYw0KQEAg LTAsMCArMSw1NjggQEANCisvKiogQGZpbGUNCisgIE1lbW9yeSBEZXRlY3Rpb24gZm9yIFZpcnR1 YWwgTWFjaGluZXMuDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE5IEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQorDQorICBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyoqLw0KKw0KKy8vDQorLy8gVGhlIHBhY2th Z2UgbGV2ZWwgaGVhZGVyIGZpbGVzIHRoaXMgbW9kdWxlIHVzZXMNCisvLw0KKyNpbmNsdWRlIDxQ aVBlaS5oPg0KKw0KKy8vDQorLy8gVGhlIExpYnJhcnkgY2xhc3NlcyB0aGlzIG1vZHVsZSBjb25z dW1lcw0KKy8vDQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KKyNpbmNsdWRl IDxMaWJyYXJ5L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvSG9iTGliLmg+DQorI2lu Y2x1ZGUgPExpYnJhcnkvSW9MaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QY2RMaWIuaD4NCisj aW5jbHVkZSA8TGlicmFyeS9QZWltRW50cnlQb2ludC5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1Jl c291cmNlUHVibGljYXRpb25MaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9NdHJyTGliLmg+DQor I2luY2x1ZGUgPFNpbWljc1BsYXRmb3Jtcy5oPg0KKyNpbmNsdWRlIDxHdWlkL1NtcmFtTWVtb3J5 UmVzZXJ2ZS5oPg0KKw0KKyNpbmNsdWRlICJQbGF0Zm9ybS5oIg0KKyNpbmNsdWRlICJDbW9zLmgi DQorDQorVUlOVDggbVBoeXNNZW1BZGRyZXNzV2lkdGg7DQorDQorU1RBVElDIFVJTlQzMiBtUzNB Y3BpUmVzZXJ2ZWRNZW1vcnlCYXNlOw0KK1NUQVRJQyBVSU5UMzIgbVMzQWNwaVJlc2VydmVkTWVt b3J5U2l6ZTsNCisNCitTVEFUSUMgVUlOVDE2IG1YNThUc2VnTWJ5dGVzOw0KKw0KK1ZPSUQNCitY NThUc2VnTWJ5dGVzSW5pdGlhbGl6YXRpb24oDQorICBWT0lEDQorKQ0KK3sNCisNCisgIGlmICht SG9zdEJyaWRnZURldklkICE9IElOVEVMX0lDSDEwX0RFVklDRV9JRCkgew0KKyAgICBERUJVRyAo KA0KKyAgICAgIERFQlVHX0VSUk9SLA0KKyAgICAgICIlYTogbm8gVFNFRyAoU01SQU0pIG9uIGhv c3QgYnJpZGdlIERJRD0weCUwNHg7ICINCisgICAgICAib25seSBESUQ9MHglMDR4IChYNTgpIGlz IHN1cHBvcnRlZFxuIiwNCisgICAgICBfX0ZVTkNUSU9OX18sDQorICAgICAgbUhvc3RCcmlkZ2VE ZXZJZCwNCisgICAgICBJTlRFTF9JQ0gxMF9ERVZJQ0VfSUQNCisgICAgICApKTsNCisgICAgQVNT RVJUIChGQUxTRSk7DQorICAgIENwdURlYWRMb29wICgpOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8v IENoZWNrIGlmIFFFTVUgb2ZmZXJzIGFuIGV4dGVuZGVkIFRTRUcuDQorICAvLw0KKyAgLy8gVGhp cyBjYW4gYmUgc2VlbiBmcm9tIHdyaXRpbmcgTUNIX0VYVF9UU0VHX01CX1FVRVJZIHRvIHRoZSBN Q0hfRVhUX1RTRUdfTUINCisgIC8vIHJlZ2lzdGVyLCBhbmQgcmVhZGluZyBiYWNrIHRoZSByZWdp c3Rlci4NCisgIC8vDQorICAvLyBPbiBhIFFFTVUgbWFjaGluZSB0eXBlIHRoYXQgZG9lcyBub3Qg b2ZmZXIgYW4gZXh0ZW5kZWQgVFNFRywgdGhlIGluaXRpYWwNCisgIC8vIHdyaXRlIG92ZXJ3cml0 ZXMgd2hhdGV2ZXIgdmFsdWUgYSBtYWxpY2lvdXMgZ3Vlc3QgT1MgbWF5IGhhdmUgcGxhY2VkIGlu DQorICAvLyB0aGUgKHVuaW1wbGVtZW50ZWQpIHJlZ2lzdGVyLCBiZWZvcmUgZW50ZXJpbmcgUzMg b3IgcmVib290aW5nLg0KKyAgLy8gU3Vic2VxdWVudGx5LCB0aGUgcmVhZCByZXR1cm5zIE1DSF9F WFRfVFNFR19NQl9RVUVSWSB1bmNoYW5nZWQuDQorICAvLw0KKyAgLy8gT24gYSBRRU1VIG1hY2hp bmUgdHlwZSB0aGF0IG9mZmVycyBhbiBleHRlbmRlZCBUU0VHLCB0aGUgaW5pdGlhbCB3cml0ZQ0K KyAgLy8gdHJpZ2dlcnMgYW4gdXBkYXRlIHRvIHRoZSByZWdpc3Rlci4gU3Vic2VxdWVudGx5LCB0 aGUgdmFsdWUgcmVhZCBiYWNrDQorICAvLyAod2hpY2ggaXMgZ3VhcmFudGVlZCB0byBkaWZmZXIg ZnJvbSBNQ0hfRVhUX1RTRUdfTUJfUVVFUlkpIHRlbGxzIHVzIHRoZQ0KKyAgLy8gbnVtYmVyIG9m IG1lZ2FieXRlcy4NCisgIC8vDQorICBtWDU4VHNlZ01ieXRlcyA9IEZpeGVkUGNkR2V0OChQY2RY NThUc2VnTWJ5dGVzKTsNCisgIHJldHVybjsNCit9DQorDQorDQorVUlOVDMyDQorR2V0U3lzdGVt TWVtb3J5U2l6ZUJlbG93NGdiICgNCisgIFZPSUQNCisgICkNCit7DQorICBVSU5UOCBDbW9zMHgz NDsNCisgIFVJTlQ4IENtb3MweDM1Ow0KKw0KKyAgLy8NCisgIC8vIENNT1MgMHgzNC8weDM1IHNw ZWNpZmllcyB0aGUgc3lzdGVtIG1lbW9yeSBhYm92ZSAxNiBNQi4NCisgIC8vICogQ01PUygweDM1 KSBpcyB0aGUgaGlnaCBieXRlDQorICAvLyAqIENNT1MoMHgzNCkgaXMgdGhlIGxvdyBieXRlDQor ICAvLyAqIFRoZSBzaXplIGlzIHNwZWNpZmllZCBpbiA2NGtiIGNodW5rcw0KKyAgLy8gKiBTaW5j ZSB0aGlzIGlzIG1lbW9yeSBhYm92ZSAxNk1CLCB0aGUgMTZNQiBtdXN0IGJlIGFkZGVkDQorICAv LyAgIGludG8gdGhlIGNhbGN1bGF0aW9uIHRvIGdldCB0aGUgdG90YWwgbWVtb3J5IHNpemUuDQor ICAvLw0KKw0KKyAgQ21vczB4MzQgPSAoVUlOVDgpIENtb3NSZWFkOCAoMHgzNCk7DQorICBDbW9z MHgzNSA9IChVSU5UOCkgQ21vc1JlYWQ4ICgweDM1KTsNCisNCisgIHJldHVybiAoVUlOVDMyKSAo KChVSU5UTikoKENtb3MweDM1IDw8IDgpICsgQ21vczB4MzQpIDw8IDE2KSArIFNJWkVfMTZNQik7 DQorfQ0KKw0KKw0KK1NUQVRJQw0KK1VJTlQ2NA0KK0dldFN5c3RlbU1lbW9yeVNpemVBYm92ZTRn YiAoDQorICApDQorew0KKyAgVUlOVDMyIFNpemU7DQorICBVSU5UTiAgQ21vc0luZGV4Ow0KKw0K KyAgLy8NCisgIC8vIENNT1MgMHg1Yi0weDVkIHNwZWNpZmllcyB0aGUgc3lzdGVtIG1lbW9yeSBh Ym92ZSA0R0IgTUIuDQorICAvLyAqIENNT1MoMHg1ZCkgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQg c2l6ZSBieXRlDQorICAvLyAqIENNT1MoMHg1YykgaXMgdGhlIG1pZGRsZSBzaXplIGJ5dGUNCisg IC8vICogQ01PUygweDViKSBpcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgc2l6ZSBieXRlDQorICAv LyAqIFRoZSBzaXplIGlzIHNwZWNpZmllZCBpbiA2NGtiIGNodW5rcw0KKyAgLy8NCisNCisgIFNp emUgPSAwOw0KKyAgZm9yIChDbW9zSW5kZXggPSAweDVkOyBDbW9zSW5kZXggPj0gMHg1YjsgQ21v c0luZGV4LS0pIHsNCisgICAgU2l6ZSA9IChVSU5UMzIpIChTaXplIDw8IDgpICsgKFVJTlQzMikg Q21vc1JlYWQ4IChDbW9zSW5kZXgpOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIExTaGlmdFU2NCAoU2l6 ZSwgMTYpOw0KK30NCisNCisNCisvKioNCisgIFJldHVybiB0aGUgaGlnaGVzdCBhZGRyZXNzIHRo YXQgRFhFIGNvdWxkIHBvc3NpYmx5IHVzZSwgcGx1cyBvbmUuDQorKiovDQorU1RBVElDDQorVUlO VDY0DQorR2V0Rmlyc3ROb25BZGRyZXNzICgNCisgIFZPSUQNCisgICkNCit7DQorICBVSU5UNjQg ICAgICAgICAgICAgICBGaXJzdE5vbkFkZHJlc3M7DQorICBVSU5UNjQgICAgICAgICAgICAgICBQ Y2k2NEJhc2UsIFBjaTY0U2l6ZTsNCisNCisgIEZpcnN0Tm9uQWRkcmVzcyA9IEJBU0VfNEdCICsg R2V0U3lzdGVtTWVtb3J5U2l6ZUFib3ZlNGdiICgpOw0KKw0KKyAgLy8NCisgIC8vIElmIERYRSBp cyAzMi1iaXQsIHRoZW4gd2UncmUgZG9uZTsgUGNpQnVzRHhlIHdpbGwgZGVncmFkZSA2NC1iaXQg TU1JTw0KKyAgLy8gcmVzb3VyY2VzIHRvIDMyLWJpdCBhbnl3YXkuIFNlZSBEZWdyYWRlUmVzb3Vy Y2UoKSBpbg0KKyAgLy8gIlBjaVJlc291cmNlU3VwcG9ydC5jIi4NCisgIC8vDQorI2lmZGVmIE1E RV9DUFVfSUEzMg0KKyAgaWYgKCFGZWF0dXJlUGNkR2V0IChQY2REeGVJcGxTd2l0Y2hUb0xvbmdN b2RlKSkgew0KKyAgICByZXR1cm4gRmlyc3ROb25BZGRyZXNzOw0KKyAgfQ0KKyNlbmRpZg0KKw0K KyAgLy8NCisgIC8vIE90aGVyd2lzZSwgaW4gb3JkZXIgdG8gY2FsY3VsYXRlIHRoZSBoaWdoZXN0 IGFkZHJlc3MgcGx1cyBvbmUsIHdlIG11c3QNCisgIC8vIGNvbnNpZGVyIHRoZSA2NC1iaXQgUENJ IGhvc3QgYXBlcnR1cmUgdG9vLiBGZXRjaCB0aGUgZGVmYXVsdCBzaXplLg0KKyAgLy8NCisgIFBj aTY0U2l6ZSA9IFBjZEdldDY0IChQY2RQY2lNbWlvNjRTaXplKTsNCisNCisgIGlmIChQY2k2NFNp emUgPT0gMCkgew0KKyAgICBpZiAobUJvb3RNb2RlICE9IEJPT1RfT05fUzNfUkVTVU1FKSB7DQor ICAgICAgREVCVUcgKChFRklfRF9JTkZPLCAiJWE6IGRpc2FibGluZyA2NC1iaXQgUENJIGhvc3Qg YXBlcnR1cmVcbiIsDQorICAgICAgICBfX0ZVTkNUSU9OX18pKTsNCisgICAgICBQY2RTZXQ2NCAo UGNkUGNpTW1pbzY0U2l6ZSwgMCk7DQorICAgIH0NCisNCisgICAgLy8NCisgICAgLy8gVGhlcmUn cyBub3RoaW5nIG1vcmUgdG8gZG87IHRoZSBhbW91bnQgb2YgbWVtb3J5IGFib3ZlIDRHQiBmdWxs eQ0KKyAgICAvLyBkZXRlcm1pbmVzIHRoZSBoaWdoZXN0IGFkZHJlc3MgcGx1cyBvbmUuIFRoZSBt ZW1vcnkgaG90cGx1ZyBhcmVhIChzZWUNCisgICAgLy8gYmVsb3cpIHBsYXlzIG5vIHJvbGUgZm9y IHRoZSBmaXJtd2FyZSBpbiB0aGlzIGNhc2UuDQorICAgIC8vDQorICAgIHJldHVybiBGaXJzdE5v bkFkZHJlc3M7DQorICB9DQorDQorICAvLw0KKyAgLy8gU2VhQklPUyBhbGlnbnMgYm90aCBib3Vu ZGFyaWVzIG9mIHRoZSA2NC1iaXQgUENJIGhvc3QgYXBlcnR1cmUgdG8gMUdCLCBzbw0KKyAgLy8g dGhhdCB0aGUgaG9zdCBjYW4gbWFwIGl0IHdpdGggMUdCIGh1Z2VwYWdlcy4gRm9sbG93IHN1aXQu DQorICAvLw0KKyAgUGNpNjRCYXNlID0gQUxJR05fVkFMVUUgKEZpcnN0Tm9uQWRkcmVzcywgKFVJ TlQ2NClTSVpFXzFHQik7DQorICBQY2k2NFNpemUgPSBBTElHTl9WQUxVRSAoUGNpNjRTaXplLCAo VUlOVDY0KVNJWkVfMUdCKTsNCisNCisgIC8vDQorICAvLyBUaGUgNjQtYml0IFBDSSBob3N0IGFw ZXJ0dXJlIHNob3VsZCBhbHNvIGJlICJuYXR1cmFsbHkiIGFsaWduZWQuIFRoZQ0KKyAgLy8gYWxp Z25tZW50IGlzIGRldGVybWluZWQgYnkgcm91bmRpbmcgdGhlIHNpemUgb2YgdGhlIGFwZXJ0dXJl IGRvd24gdG8gdGhlDQorICAvLyBuZXh0IHNtYWxsZXIgb3IgZXF1YWwgcG93ZXIgb2YgdHdvLiBU aGF0IGlzLCBhbGlnbiB0aGUgYXBlcnR1cmUgYnkgdGhlDQorICAvLyBsYXJnZXN0IEJBUiBzaXpl IHRoYXQgY2FuIGZpdCBpbnRvIGl0Lg0KKyAgLy8NCisgIFBjaTY0QmFzZSA9IEFMSUdOX1ZBTFVF IChQY2k2NEJhc2UsIEdldFBvd2VyT2ZUd282NCAoUGNpNjRTaXplKSk7DQorDQorICBpZiAobUJv b3RNb2RlICE9IEJPT1RfT05fUzNfUkVTVU1FKSB7DQorICAgIC8vDQorICAgIC8vIFRoZSBjb3Jl IFBjaUhvc3RCcmlkZ2VEeGUgZHJpdmVyIHdpbGwgYXV0b21hdGljYWxseSBhZGQgdGhpcyByYW5n ZSB0bw0KKyAgICAvLyB0aGUgR0NEIG1lbW9yeSBzcGFjZSBtYXAgdGhyb3VnaCBvdXIgUGNpSG9z dEJyaWRnZUxpYiBpbnN0YW5jZTsgaGVyZSB3ZQ0KKyAgICAvLyBvbmx5IG5lZWQgdG8gc2V0IHRo ZSBQQ0RzLg0KKyAgICAvLw0KKyAgICBQY2RTZXQ2NCAoUGNkUGNpTW1pbzY0QmFzZSwgUGNpNjRC YXNlKTsNCisgICAgUGNkU2V0NjQgKFBjZFBjaU1taW82NFNpemUsIFBjaTY0U2l6ZSk7DQorICAg IERFQlVHICgoRUZJX0RfSU5GTywgIiVhOiBQY2k2NEJhc2U9MHglTHggUGNpNjRTaXplPTB4JUx4 XG4iLA0KKyAgICAgIF9fRlVOQ1RJT05fXywgUGNpNjRCYXNlLCBQY2k2NFNpemUpKTsNCisgIH0N CisNCisgIC8vDQorICAvLyBUaGUgdXNlZnVsIGFkZHJlc3Mgc3BhY2UgZW5kcyB3aXRoIHRoZSA2 NC1iaXQgUENJIGhvc3QgYXBlcnR1cmUuDQorICAvLw0KKyAgRmlyc3ROb25BZGRyZXNzID0gUGNp NjRCYXNlICsgUGNpNjRTaXplOw0KKyAgcmV0dXJuIEZpcnN0Tm9uQWRkcmVzczsNCit9DQorDQor DQorLyoqDQorICBJbml0aWFsaXplIHRoZSBtUGh5c01lbUFkZHJlc3NXaWR0aCB2YXJpYWJsZSwg YmFzZWQgb24gZ3Vlc3QgUkFNIHNpemUuDQorKiovDQorVk9JRA0KK0FkZHJlc3NXaWR0aEluaXRp YWxpemF0aW9uICgNCisgIFZPSUQNCisgICkNCit7DQorICBVSU5UNjQgRmlyc3ROb25BZGRyZXNz Ow0KKw0KKyAgLy8NCisgIC8vIEFzIGd1ZXN0LXBoeXNpY2FsIG1lbW9yeSBzaXplIGdyb3dzLCB0 aGUgcGVybWFuZW50IFBFSSBSQU0gcmVxdWlyZW1lbnRzDQorICAvLyBhcmUgZG9taW5hdGVkIGJ5 IHRoZSBpZGVudGl0eS1tYXBwaW5nIHBhZ2UgdGFibGVzIGJ1aWx0IGJ5IHRoZSBEWEUgSVBMLg0K KyAgLy8gVGhlIERYTCBJUEwga2V5cyBvZmYgb2YgdGhlIHBoeXNpY2FsIGFkZHJlc3MgYml0cyBh ZHZlcnRpemVkIGluIHRoZSBDUFUNCisgIC8vIEhPQi4gVG8gY29uc2VydmUgbWVtb3J5LCB3ZSBj YWxjdWxhdGUgdGhlIG1pbmltdW0gYWRkcmVzcyB3aWR0aCBoZXJlLg0KKyAgLy8NCisgIEZpcnN0 Tm9uQWRkcmVzcyAgICAgID0gR2V0Rmlyc3ROb25BZGRyZXNzICgpOw0KKyAgbVBoeXNNZW1BZGRy ZXNzV2lkdGggPSAoVUlOVDgpSGlnaEJpdFNldDY0IChGaXJzdE5vbkFkZHJlc3MpOw0KKw0KKyAg Ly8NCisgIC8vIElmIEZpcnN0Tm9uQWRkcmVzcyBpcyBub3QgYW4gaW50ZWdyYWwgcG93ZXIgb2Yg dHdvLCB0aGVuIHdlIG5lZWQgYW4NCisgIC8vIGFkZGl0aW9uYWwgYml0Lg0KKyAgLy8NCisgIGlm ICgoRmlyc3ROb25BZGRyZXNzICYgKEZpcnN0Tm9uQWRkcmVzcyAtIDEpKSAhPSAwKSB7DQorICAg ICsrbVBoeXNNZW1BZGRyZXNzV2lkdGg7DQorICB9DQorDQorICAvLw0KKyAgLy8gVGhlIG1pbmlt dW0gYWRkcmVzcyB3aWR0aCBpcyAzNiAoY292ZXJzIHVwIHRvIGFuZCBleGNsdWRpbmcgNjQgR0Is IHdoaWNoDQorICAvLyBpcyB0aGUgbWF4aW11bSBmb3IgSWEzMiArIFBBRSkuIFRoZSB0aGVvcmV0 aWNhbCBhcmNoaXRlY3R1cmUgbWF4aW11bSBmb3INCisgIC8vIFg2NCBsb25nIG1vZGUgaXMgNTIg Yml0cywgYnV0IHRoZSBEWEUgSVBMIGNsYW1wcyB0aGF0IGRvd24gdG8gNDggYml0cy4gV2UNCisg IC8vIGNhbiBzaW1wbHkgYXNzZXJ0IHRoYXQgaGVyZSwgc2luY2UgNDggYml0cyBhcmUgZ29vZCBl bm91Z2ggZm9yIDI1NiBUQi4NCisgIC8vDQorICBpZiAobVBoeXNNZW1BZGRyZXNzV2lkdGggPD0g MzYpIHsNCisgICAgbVBoeXNNZW1BZGRyZXNzV2lkdGggPSAzNjsNCisgIH0NCisgIEFTU0VSVCAo bVBoeXNNZW1BZGRyZXNzV2lkdGggPD0gNDgpOw0KK30NCisNCisNCisvKioNCisgIENhbGN1bGF0 ZSB0aGUgY2FwIGZvciB0aGUgcGVybWFuZW50IFBFSSBtZW1vcnkuDQorKiovDQorU1RBVElDDQor VUlOVDMyDQorR2V0UGVpTWVtb3J5Q2FwICgNCisgIFZPSUQNCisgICkNCit7DQorICBCT09MRUFO IFBhZ2UxR1N1cHBvcnQ7DQorICBVSU5UMzIgIFJlZ0VheDsNCisgIFVJTlQzMiAgUmVnRWR4Ow0K KyAgVUlOVDMyICBQbWw0RW50cmllczsNCisgIFVJTlQzMiAgUGRwRW50cmllczsNCisgIFVJTlRO ICAgVG90YWxQYWdlczsNCisNCisgIC8vDQorICAvLyBJZiBEWEUgaXMgMzItYml0LCB0aGVuIGp1 c3QgcmV0dXJuIHRoZSB0cmFkaXRpb25hbCA2NCBNQiBjYXAuDQorICAvLw0KKyNpZmRlZiBNREVf Q1BVX0lBMzINCisgIGlmICghRmVhdHVyZVBjZEdldCAoUGNkRHhlSXBsU3dpdGNoVG9Mb25nTW9k ZSkpIHsNCisgICAgcmV0dXJuIFNJWkVfNjRNQjsNCisgIH0NCisjZW5kaWYNCisNCisgIC8vDQor ICAvLyBEZXBlbmRlbnQgb24gcGh5c2ljYWwgYWRkcmVzcyB3aWR0aCwgUEVJIG1lbW9yeSBhbGxv Y2F0aW9ucyBjYW4gYmUNCisgIC8vIGRvbWluYXRlZCBieSB0aGUgcGFnZSB0YWJsZXMgYnVpbHQg Zm9yIDY0LWJpdCBEWEUuIFNvIHdlIGtleSB0aGUgY2FwIG9mZg0KKyAgLy8gb2YgdGhvc2UuIFRo ZSBjb2RlIGJlbG93IGlzIGJhc2VkIG9uIENyZWF0ZUlkZW50aXR5TWFwcGluZ1BhZ2VUYWJsZXMo KSBpbg0KKyAgLy8gIk1kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vWDY0L1ZpcnR1YWxNZW1v cnkuYyIuDQorICAvLw0KKyAgUGFnZTFHU3VwcG9ydCA9IEZBTFNFOw0KKyAgaWYgKFBjZEdldEJv b2wgKFBjZFVzZTFHUGFnZVRhYmxlKSkgew0KKyAgICBBc21DcHVpZCAoMHg4MDAwMDAwMCwgJlJl Z0VheCwgTlVMTCwgTlVMTCwgTlVMTCk7DQorICAgIGlmIChSZWdFYXggPj0gMHg4MDAwMDAwMSkg ew0KKyAgICAgIEFzbUNwdWlkICgweDgwMDAwMDAxLCBOVUxMLCBOVUxMLCBOVUxMLCAmUmVnRWR4 KTsNCisgICAgICBpZiAoKFJlZ0VkeCAmIEJJVDI2KSAhPSAwKSB7DQorICAgICAgICBQYWdlMUdT dXBwb3J0ID0gVFJVRTsNCisgICAgICB9DQorICAgIH0NCisgIH0NCisNCisgIGlmIChtUGh5c01l bUFkZHJlc3NXaWR0aCA8PSAzOSkgew0KKyAgICBQbWw0RW50cmllcyA9IDE7DQorICAgIFBkcEVu dHJpZXMgPSAxIDw8IChtUGh5c01lbUFkZHJlc3NXaWR0aCAtIDMwKTsNCisgICAgQVNTRVJUIChQ ZHBFbnRyaWVzIDw9IDB4MjAwKTsNCisgIH0gZWxzZSB7DQorICAgIFBtbDRFbnRyaWVzID0gMSA8 PCAobVBoeXNNZW1BZGRyZXNzV2lkdGggLSAzOSk7DQorICAgIEFTU0VSVCAoUG1sNEVudHJpZXMg PD0gMHgyMDApOw0KKyAgICBQZHBFbnRyaWVzID0gNTEyOw0KKyAgfQ0KKw0KKyAgVG90YWxQYWdl cyA9IFBhZ2UxR1N1cHBvcnQgPyBQbWw0RW50cmllcyArIDEgOg0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoUGRwRW50cmllcyArIDEpICogUG1sNEVudHJpZXMgKyAxOw0KKyAgQVNT RVJUIChUb3RhbFBhZ2VzIDw9IDB4NDAyMDEpOw0KKw0KKyAgLy8NCisgIC8vIEFkZCA2NCBNQiBm b3IgbWlzY2VsbGFuZW91cyBhbGxvY2F0aW9ucy4gTm90ZSB0aGF0IGZvcg0KKyAgLy8gbVBoeXNN ZW1BZGRyZXNzV2lkdGggdmFsdWVzIGNsb3NlIHRvIDM2LCB0aGUgY2FwIHdpbGwgYWN0dWFsbHkg YmUNCisgIC8vIGRvbWluYXRlZCBieSB0aGlzIGluY3JlbWVudC4NCisgIC8vDQorICByZXR1cm4g KFVJTlQzMikoRUZJX1BBR0VTX1RPX1NJWkUgKFRvdGFsUGFnZXMpICsgU0laRV82NE1CKTsNCit9 DQorDQorDQorLyoqDQorICBQdWJsaXNoIFBFSSBjb3JlIG1lbW9yeQ0KKw0KKyAgQHJldHVybiBF RklfU1VDQ0VTUyAgICAgVGhlIFBFSU0gaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Lg0KKw0KKyoq Lw0KK0VGSV9TVEFUVVMNCitQdWJsaXNoUGVpTWVtb3J5ICgNCisgIFZPSUQNCisgICkNCit7DQor ICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgRUZJX1BIWVNJQ0FMX0FE RFJFU1MgICAgICAgIE1lbW9yeUJhc2U7DQorICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAg TWVtb3J5U2l6ZTsNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICBMb3dlck1lbW9yeVNp emU7DQorICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgUGVpTWVtb3J5Q2FwOw0KKw0KKyAg TG93ZXJNZW1vcnlTaXplID0gR2V0U3lzdGVtTWVtb3J5U2l6ZUJlbG93NGdiICgpOw0KKyAgaWYg KEZlYXR1cmVQY2RHZXQgKFBjZFNtbVNtcmFtUmVxdWlyZSkpIHsNCisgICAgLy8NCisgICAgLy8g VFNFRyBpcyBjaGlwcGVkIGZyb20gdGhlIGVuZCBvZiBsb3cgUkFNDQorICAgIC8vDQorICAgIExv d2VyTWVtb3J5U2l6ZSAtPSBtWDU4VHNlZ01ieXRlcyAqIFNJWkVfMU1COw0KKyAgfQ0KKw0KKyAg Ly8NCisgIC8vIElmIFMzIGlzIHN1cHBvcnRlZCwgdGhlbiB0aGUgUzMgcGVybWFuZW50IFBFSSBt ZW1vcnkgaXMgcGxhY2VkIG5leHQsDQorICAvLyBkb3dud2FyZHMuIEl0cyBzaXplIGlzIHByaW1h cmlseSBkaWN0YXRlZCBieSBDcHVNcFBlaS4gVGhlIGZvcm11bGEgYmVsb3cNCisgIC8vIGlzIGFu IGFwcHJveGltYXRpb24uDQorICAvLw0KKyAgaWYgKG1TM1N1cHBvcnRlZCkgew0KKyAgICBtUzNB Y3BpUmVzZXJ2ZWRNZW1vcnlTaXplID0gU0laRV81MTJLQiArDQorICAgICAgbU1heENwdUNvdW50 ICoNCisgICAgICBQY2RHZXQzMiAoUGNkQ3B1QXBTdGFja1NpemUpOw0KKyAgICBtUzNBY3BpUmVz ZXJ2ZWRNZW1vcnlCYXNlID0gTG93ZXJNZW1vcnlTaXplIC0gbVMzQWNwaVJlc2VydmVkTWVtb3J5 U2l6ZTsNCisgICAgTG93ZXJNZW1vcnlTaXplID0gbVMzQWNwaVJlc2VydmVkTWVtb3J5QmFzZTsN CisgIH0NCisNCisgIGlmIChtQm9vdE1vZGUgPT0gQk9PVF9PTl9TM19SRVNVTUUpIHsNCisgICAg TWVtb3J5QmFzZSA9IG1TM0FjcGlSZXNlcnZlZE1lbW9yeUJhc2U7DQorICAgIE1lbW9yeVNpemUg PSBtUzNBY3BpUmVzZXJ2ZWRNZW1vcnlTaXplOw0KKyAgfSBlbHNlIHsNCisgICAgUGVpTWVtb3J5 Q2FwID0gR2V0UGVpTWVtb3J5Q2FwICgpOw0KKyAgICBERUJVRyAoKEVGSV9EX0lORk8sICIlYTog bVBoeXNNZW1BZGRyZXNzV2lkdGg9JWQgUGVpTWVtb3J5Q2FwPSV1IEtCXG4iLA0KKyAgICAgIF9f RlVOQ1RJT05fXywgbVBoeXNNZW1BZGRyZXNzV2lkdGgsIFBlaU1lbW9yeUNhcCA+PiAxMCkpOw0K Kw0KKyAgICAvLw0KKyAgICAvLyBEZXRlcm1pbmUgdGhlIHJhbmdlIG9mIG1lbW9yeSB0byB1c2Ug ZHVyaW5nIFBFSQ0KKyAgICAvLw0KKyAgICAvLyBUZWNobmljYWxseSB3ZSBjb3VsZCBsYXkgdGhl IHBlcm1hbmVudCBQRUkgUkFNIG92ZXIgU0VDJ3MgdGVtcG9yYXJ5DQorICAgIC8vIGRlY29tcHJl c3Npb24gYW5kIHNjcmF0Y2ggYnVmZmVyIGV2ZW4gaWYgInNlY3VyZSBTMyIgaXMgbmVlZGVkLCBz aW5jZQ0KKyAgICAvLyB0aGVpciBsaWZldGltZXMgZG9uJ3Qgb3ZlcmxhcC4gSG93ZXZlciwgUGVp RnZJbml0aWFsaXphdGlvbigpIHdpbGwgY292ZXINCisgICAgLy8gUkFNIHVwIHRvIFBjZE92bWZE ZWNvbXByZXNzaW9uU2NyYXRjaEVuZCB3aXRoIGFuIEVmaUFDUElNZW1vcnlOVlMgbWVtb3J5DQor ICAgIC8vIGFsbG9jYXRpb24gSE9CLCBhbmQgb3RoZXIgYWxsb2NhdGlvbnMgc2VydmVkIGZyb20g dGhlIHBlcm1hbmVudCBQRUkgUkFNDQorICAgIC8vIHNob3VsZG4ndCBvdmVybGFwIHdpdGggdGhh dCBIT0IuDQorICAgIC8vDQorICAgIE1lbW9yeUJhc2UgPSBtUzNTdXBwb3J0ZWQgJiYgRmVhdHVy ZVBjZEdldCAoUGNkU21tU21yYW1SZXF1aXJlKSA/DQorICAgICAgUGNkR2V0MzIgKFBjZFNpbWlj c0RlY29tcHJlc3Npb25TY3JhdGNoRW5kKSA6DQorICAgICAgUGNkR2V0MzIgKFBjZFNpbWljc0R4 ZU1lbUZ2QmFzZSkgKyBQY2RHZXQzMiAoUGNkU2ltaWNzRHhlTWVtRnZTaXplKTsNCisgICAgTWVt b3J5U2l6ZSA9IExvd2VyTWVtb3J5U2l6ZSAtIE1lbW9yeUJhc2U7DQorICB9DQorICBERUJVRygo RUZJX0RfSU5GTywgIk1lbW9yeUJhc2U9MHglbHggTWVtb3J5U2l6ZT0weCVseFxuIiwgTWVtb3J5 QmFzZSwgTWVtb3J5U2l6ZSkpOw0KKyAgLy8NCisgIC8vIFB1Ymxpc2ggdGhpcyBtZW1vcnkgdG8g dGhlIFBFSSBDb3JlDQorICAvLw0KKyAgU3RhdHVzID0gUHVibGlzaFN5c3RlbU1lbW9yeShNZW1v cnlCYXNlLCBNZW1vcnlTaXplKTsNCisgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQorDQor ICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisNCisvKioNCisgIFBlZm9ybSBNZW1vcnkgRGV0ZWN0 aW9uIGZvciBRRU1VIC8gS1ZNDQorDQorKiovDQorU1RBVElDDQorVk9JRA0KK1FlbXVJbml0aWFs aXplUmFtICgNCisgIFZPSUQNCisgICkNCit7DQorICBVSU5UNjQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTG93ZXJNZW1vcnlTaXplOw0KKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFVwcGVyTWVtb3J5U2l6ZTsNCisgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQnVmZmVyU2l6ZTsNCisgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgU21yYW1JbmRleDsNCisgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU21yYW1SYW5nZXM7DQorICBFRklfUEVJX0hPQl9QT0lOVEVSUyAgICAgICAgICAg ICAgICAgIEhvYjsNCisgIEVGSV9TTVJBTV9IT0JfREVTQ1JJUFRPUl9CTE9DSyAgICAgICAgKlNt cmFtSG9iRGVzY3JpcHRvckJsb2NrOw0KKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJbmRleDsNCisNCisgIERFQlVHICgoRUZJX0RfSU5GTywgIiVhIGNhbGxlZFxuIiwg X19GVU5DVElPTl9fKSk7DQorDQorICAvLw0KKyAgLy8gRGV0ZXJtaW5lIHRvdGFsIG1lbW9yeSBz aXplIGF2YWlsYWJsZQ0KKyAgLy8NCisgIExvd2VyTWVtb3J5U2l6ZSA9IEdldFN5c3RlbU1lbW9y eVNpemVCZWxvdzRnYiAoKTsNCisgIFVwcGVyTWVtb3J5U2l6ZSA9IEdldFN5c3RlbU1lbW9yeVNp emVBYm92ZTRnYiAoKTsNCisNCisgIGlmIChtQm9vdE1vZGUgPT0gQk9PVF9PTl9TM19SRVNVTUUp IHsNCisgICAgLy8NCisgICAgLy8gQ3JlYXRlIHRoZSBmb2xsb3dpbmcgbWVtb3J5IEhPQiBhcyBh biBleGNlcHRpb24gb24gdGhlIFMzIGJvb3QgcGF0aC4NCisgICAgLy8NCisgICAgLy8gTm9ybWFs bHkgd2UnZCBjcmVhdGUgbWVtb3J5IEhPQnMgb25seSBvbiB0aGUgbm9ybWFsIGJvb3QgcGF0aC4g SG93ZXZlciwNCisgICAgLy8gQ3B1TXBQZWkgc3BlY2lmaWNhbGx5IG5lZWRzIHN1Y2ggYSBsb3ct bWVtb3J5IEhPQiBvbiB0aGUgUzMgcGF0aCBhcw0KKyAgICAvLyB3ZWxsLCBmb3IgImJvcnJvd2lu ZyIgYSBzdWJzZXQgb2YgaXQgdGVtcG9yYXJpbHksIGZvciB0aGUgQVAgc3RhcnR1cA0KKyAgICAv LyB2ZWN0b3IuDQorICAgIC8vDQorICAgIC8vIENwdU1wUGVpIHNhdmVzIHRoZSBvcmlnaW5hbCBj b250ZW50cyBvZiB0aGUgYm9ycm93ZWQgYXJlYSBpbiBwZXJtYW5lbnQNCisgICAgLy8gUEVJIFJB TSwgaW4gYSBiYWNrdXAgYnVmZmVyIGFsbG9jYXRlZCB3aXRoIHRoZSBub3JtYWwgUEVJIHNlcnZp Y2VzLg0KKyAgICAvLyBDcHVNcFBlaSByZXN0b3JlcyB0aGUgb3JpZ2luYWwgY29udGVudHMgKCJy ZXR1cm5zIiB0aGUgYm9ycm93ZWQgYXJlYSkgYXQNCisgICAgLy8gRW5kLW9mLVBFSS4gRW5kLW9m LVBFSSBpbiB0dXJuIGlzIGVtaXR0ZWQgYnkgUzNSZXN1bWUyUGVpIGJlZm9yZQ0KKyAgICAvLyB0 cmFuc2ZlcnJpbmcgY29udHJvbCB0byB0aGUgT1MncyB3YWtldXAgdmVjdG9yIGluIHRoZSBGQUNT Lg0KKyAgICAvLw0KKyAgICAvLyBXZSBleHBlY3QgYW55IG90aGVyIFBFSU1zIHRoYXQgImJvcnJv dyIgbWVtb3J5IHNpbWlsYXJseSB0byBDcHVNcFBlaSB0bw0KKyAgICAvLyByZXN0b3JlIHRoZSBv cmlnaW5hbCBjb250ZW50cy4gRnVydGhlcm1vcmUsIHdlIGV4cGVjdCBhbGwgc3VjaCBQRUlNcw0K KyAgICAvLyAoQ3B1TXBQZWkgaW5jbHVkZWQpIHRvIGNsYWltIHRoZSBib3Jyb3dlZCBhcmVhcyBi eSBwcm9kdWNpbmcgbWVtb3J5DQorICAgIC8vIGFsbG9jYXRpb24gSE9CcywgYW5kIHRvIGhvbm9y IHByZWV4aXN0ZW50IG1lbW9yeSBhbGxvY2F0aW9uIEhPQnMgd2hlbg0KKyAgICAvLyBsb29raW5n IGZvciBhbiBhcmVhIHRvIGJvcnJvdy4NCisgICAgLy8NCisgICAgQWRkTWVtb3J5UmFuZ2VIb2Ig KDAsIEJBU0VfNTEyS0IgKyBCQVNFXzEyOEtCKTsNCisgIH0gZWxzZSB7DQorICAgIC8vDQorICAg IC8vIENyZWF0ZSBtZW1vcnkgSE9Ccw0KKyAgICAvLw0KKyAgICBBZGRNZW1vcnlSYW5nZUhvYiAo MCwgQkFTRV81MTJLQiArIEJBU0VfMTI4S0IpOw0KKw0KKyAgICBpZiAoRmVhdHVyZVBjZEdldCAo UGNkU21tU21yYW1SZXF1aXJlKSkgew0KKyAgICAgIFVJTlQzMiBUc2VnU2l6ZTsNCisNCisgICAg ICBUc2VnU2l6ZSA9IG1YNThUc2VnTWJ5dGVzICogU0laRV8xTUI7DQorICAgICAgQWRkTWVtb3J5 UmFuZ2VIb2IgKEJBU0VfMU1CLCBMb3dlck1lbW9yeVNpemUgLSBUc2VnU2l6ZSk7DQorICAgICAg QWRkUmVzZXJ2ZWRNZW1vcnlCYXNlU2l6ZUhvYiAoTG93ZXJNZW1vcnlTaXplIC0gVHNlZ1NpemUs IFRzZWdTaXplLA0KKyAgICAgICAgVFJVRSk7DQorDQorCSAgQnVmZmVyU2l6ZSA9IHNpemVvZihF RklfU01SQU1fSE9CX0RFU0NSSVBUT1JfQkxPQ0spOw0KKwkgIFNtcmFtUmFuZ2VzID0gMTsNCisN CisgICAgICBIb2IuUmF3ID0gQnVpbGRHdWlkSG9iKA0KKyAgICAgICAgICAmZ0VmaVNtbVBlaVNt cmFtTWVtb3J5UmVzZXJ2ZUd1aWQsDQorICAgICAgICAgIEJ1ZmZlclNpemUNCisgICAgICApOw0K KyAgICAgIEFTU0VSVChIb2IuUmF3KTsNCisNCisgICAgICBTbXJhbUhvYkRlc2NyaXB0b3JCbG9j ayA9IChFRklfU01SQU1fSE9CX0RFU0NSSVBUT1JfQkxPQ0sgKikoSG9iLlJhdyk7DQorICAgICAg U21yYW1Ib2JEZXNjcmlwdG9yQmxvY2stPk51bWJlck9mU21tUmVzZXJ2ZWRSZWdpb25zID0gU21y YW1SYW5nZXM7DQorDQorICAgICAgU21yYW1JbmRleCA9IDA7DQorICAgICAgZm9yIChJbmRleCA9 IDA7IEluZGV4IDwgU21yYW1SYW5nZXM7IEluZGV4KyspIHsNCisgICAgICAgIC8vDQorICAgICAg ICAvLyBUaGlzIGlzIGFuIFNNUkFNIHJhbmdlLCBjcmVhdGUgYW4gU01SQU0gZGVzY3JpcHRvcg0K KyAgICAgICAgLy8NCisgICAgICAgIFNtcmFtSG9iRGVzY3JpcHRvckJsb2NrLT5EZXNjcmlwdG9y W1NtcmFtSW5kZXhdLlBoeXNpY2FsU3RhcnQgPSBMb3dlck1lbW9yeVNpemUgLSBUc2VnU2l6ZTsN CisgICAgICAgIFNtcmFtSG9iRGVzY3JpcHRvckJsb2NrLT5EZXNjcmlwdG9yW1NtcmFtSW5kZXhd LkNwdVN0YXJ0ID0gTG93ZXJNZW1vcnlTaXplIC0gVHNlZ1NpemU7DQorICAgICAgICBTbXJhbUhv YkRlc2NyaXB0b3JCbG9jay0+RGVzY3JpcHRvcltTbXJhbUluZGV4XS5QaHlzaWNhbFNpemUgPSBU c2VnU2l6ZTsNCisgICAgICAgIFNtcmFtSG9iRGVzY3JpcHRvckJsb2NrLT5EZXNjcmlwdG9yW1Nt cmFtSW5kZXhdLlJlZ2lvblN0YXRlID0gRUZJX1NNUkFNX0NMT1NFRCB8IEVGSV9DQUNIRUFCTEU7 DQorICAgICAgICBTbXJhbUluZGV4Kys7DQorICAgICAgfQ0KKw0KKyAgICB9IGVsc2Ugew0KKyAg ICAgIEFkZE1lbW9yeVJhbmdlSG9iIChCQVNFXzFNQiwgTG93ZXJNZW1vcnlTaXplKTsNCisgICAg fQ0KKw0KKyAgICAvLw0KKyAgICAvLyBJZiBRRU1VIHByZXNlbnRzIGFuIEU4MjAgbWFwLCB0aGVu IGNyZWF0ZSBtZW1vcnkgSE9CcyBmb3IgdGhlID49NEdCIFJBTQ0KKyAgICAvLyBlbnRyaWVzLiBP dGhlcndpc2UsIGNyZWF0ZSBhIHNpbmdsZSBtZW1vcnkgSE9CIHdpdGggdGhlIGZsYXQgPj00R0IN CisgICAgLy8gbWVtb3J5IHNpemUgcmVhZCBmcm9tIHRoZSBDTU9TLg0KKyAgICAvLw0KKyAgICBp ZiAoVXBwZXJNZW1vcnlTaXplICE9IDApIHsNCisgICAgICBBZGRNZW1vcnlCYXNlU2l6ZUhvYiAo QkFTRV80R0IsIFVwcGVyTWVtb3J5U2l6ZSk7DQorICAgIH0NCisgIH0NCit9DQorDQorLyoqDQor ICBQdWJsaXNoIHN5c3RlbSBSQU0gYW5kIHJlc2VydmUgbWVtb3J5IHJlZ2lvbnMNCisNCisqKi8N CitWT0lEDQorSW5pdGlhbGl6ZVJhbVJlZ2lvbnMgKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIFFl bXVJbml0aWFsaXplUmFtICgpOw0KKw0KKyAgaWYgKG1TM1N1cHBvcnRlZCAmJiBtQm9vdE1vZGUg IT0gQk9PVF9PTl9TM19SRVNVTUUpIHsNCisgICAgLy8NCisgICAgLy8gVGhpcyBpcyB0aGUgbWVt b3J5IHJhbmdlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBQRUkgb24gUzMgcmVzdW1lDQorICAgIC8v DQorICAgIEJ1aWxkTWVtb3J5QWxsb2NhdGlvbkhvYiAoDQorICAgICAgbVMzQWNwaVJlc2VydmVk TWVtb3J5QmFzZSwNCisgICAgICBtUzNBY3BpUmVzZXJ2ZWRNZW1vcnlTaXplLA0KKyAgICAgIEVm aUFDUElNZW1vcnlOVlMNCisgICAgICApOw0KKw0KKyAgICAvLw0KKyAgICAvLyBDb3ZlciB0aGUg aW5pdGlhbCBSQU0gYXJlYSB1c2VkIGFzIHN0YWNrIGFuZCB0ZW1wb3JhcnkgUEVJIGhlYXAuDQor ICAgIC8vDQorICAgIC8vIFRoaXMgaXMgcmVzZXJ2ZWQgYXMgQUNQSSBOVlMgc28gaXQgY2FuIGJl IHVzZWQgb24gUzMgcmVzdW1lLg0KKyAgICAvLw0KKyAgICBCdWlsZE1lbW9yeUFsbG9jYXRpb25I b2IgKA0KKyAgICAgIFBjZEdldDMyIChQY2RTaW1pY3NTZWNQZWlUZW1wUmFtQmFzZSksDQorICAg ICAgUGNkR2V0MzIgKFBjZFNpbWljc1NlY1BlaVRlbXBSYW1TaXplKSwNCisgICAgICBFZmlBQ1BJ TWVtb3J5TlZTDQorICAgICAgKTsNCisNCisgICAgLy8NCisgICAgLy8gU0VDIHN0b3JlcyBpdHMg dGFibGUgb2YgR1VJRGVkIHNlY3Rpb24gaGFuZGxlcnMgaGVyZS4NCisgICAgLy8NCisgICAgQnVp bGRNZW1vcnlBbGxvY2F0aW9uSG9iICgNCisgICAgICBQY2RHZXQ2NCAoUGNkR3VpZGVkRXh0cmFj dEhhbmRsZXJUYWJsZUFkZHJlc3MpLA0KKyAgICAgIFBjZEdldDMyIChQY2RHdWlkZWRFeHRyYWN0 SGFuZGxlclRhYmxlU2l6ZSksDQorICAgICAgRWZpQUNQSU1lbW9yeU5WUw0KKyAgICAgICk7DQor DQorICB9DQorDQorICBpZiAobUJvb3RNb2RlICE9IEJPT1RfT05fUzNfUkVTVU1FKSB7DQorICAg IGlmICghRmVhdHVyZVBjZEdldCAoUGNkU21tU21yYW1SZXF1aXJlKSkgew0KKyAgICAgIC8vDQor ICAgICAgLy8gUmVzZXJ2ZSB0aGUgbG9jayBib3ggc3RvcmFnZSBhcmVhDQorICAgICAgLy8NCisg ICAgICAvLyBTaW5jZSB0aGlzIG1lbW9yeSByYW5nZSB3aWxsIGJlIHVzZWQgb24gUzMgcmVzdW1l LCBpdCBtdXN0IGJlDQorICAgICAgLy8gcmVzZXJ2ZWQgYXMgQUNQSSBOVlMuDQorICAgICAgLy8N CisgICAgICAvLyBJZiBTMyBpcyB1bnN1cHBvcnRlZCwgdGhlbiB2YXJpb3VzIGRyaXZlcnMgbWln aHQgc3RpbGwgd3JpdGUgdG8gdGhlDQorICAgICAgLy8gTG9ja0JveCBhcmVhLiBXZSBvdWdodCB0 byBwcmV2ZW50IERYRSBmcm9tIHNlcnZpbmcgYWxsb2NhdGlvbiByZXF1ZXN0cw0KKyAgICAgIC8v IHN1Y2ggdGhhdCB0aGV5IHdvdWxkIG92ZXJsYXAgdGhlIExvY2tCb3ggc3RvcmFnZS4NCisgICAg ICAvLw0KKyAgICAgIFplcm9NZW0gKA0KKyAgICAgICAgKFZPSUQqKShVSU5UTikgUGNkR2V0MzIg KFBjZFNpbWljc0xvY2tCb3hTdG9yYWdlQmFzZSksDQorICAgICAgICAoVUlOVE4pIFBjZEdldDMy IChQY2RTaW1pY3NMb2NrQm94U3RvcmFnZVNpemUpDQorICAgICAgICApOw0KKyAgICAgIEJ1aWxk TWVtb3J5QWxsb2NhdGlvbkhvYiAoDQorICAgICAgICAoRUZJX1BIWVNJQ0FMX0FERFJFU1MpKFVJ TlROKSBQY2RHZXQzMiAoUGNkU2ltaWNzTG9ja0JveFN0b3JhZ2VCYXNlKSwNCisgICAgICAgIChV SU5UNjQpKFVJTlROKSBQY2RHZXQzMiAoUGNkU2ltaWNzTG9ja0JveFN0b3JhZ2VTaXplKSwNCisg ICAgICAgIG1TM1N1cHBvcnRlZCA/IEVmaUFDUElNZW1vcnlOVlMgOiBFZmlCb290U2VydmljZXNE YXRhDQorICAgICAgICApOw0KKyAgICB9DQorDQorICAgIGlmIChGZWF0dXJlUGNkR2V0IChQY2RT bW1TbXJhbVJlcXVpcmUpKSB7DQorICAgICAgVUlOVDMyIFRzZWdTaXplOw0KKw0KKyAgICAgIC8v DQorICAgICAgLy8gTWFrZSBzdXJlIHRoZSBUU0VHIGFyZWEgdGhhdCB3ZSByZXBvcnRlZCBhcyBh IHJlc2VydmVkIG1lbW9yeSByZXNvdXJjZQ0KKyAgICAgIC8vIGNhbm5vdCBiZSB1c2VkIGZvciBy ZXNlcnZlZCBtZW1vcnkgYWxsb2NhdGlvbnMuDQorICAgICAgLy8NCisgICAgICBUc2VnU2l6ZSA9 IG1YNThUc2VnTWJ5dGVzICogU0laRV8xTUI7DQorICAgICAgQnVpbGRNZW1vcnlBbGxvY2F0aW9u SG9iICgNCisgICAgICAgIEdldFN5c3RlbU1lbW9yeVNpemVCZWxvdzRnYigpIC0gVHNlZ1NpemUs DQorICAgICAgICBUc2VnU2l6ZSwNCisgICAgICAgIEVmaVJlc2VydmVkTWVtb3J5VHlwZQ0KKyAg ICAgICAgKTsNCisgICAgfQ0KKyAgfQ0KK30NCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9T aW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVpL1BsYXRmb3JtLmMgYi9QbGF0Zm9ybS9JbnRlbC9T aW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVpL1BsYXRmb3JtLmMNCm5ldyBmaWxlIG1vZGUgMTAw NjQ0DQppbmRleCAwMDAwMDAwMDAwLi4xNDBhMzhmMjdmDQotLS0gL2Rldi9udWxsDQorKysgYi9Q bGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVpL1BsYXRmb3JtLmMNCkBA IC0wLDAgKzEsNjMwIEBADQorLyoqIEBmaWxlDQorICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE2 LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorICBDb3B5cmln aHQgKGMpIDIwMTEsIEFuZHJlaSBXYXJrZW50aW4gPGFuZHJlaXdAbW90b3JvbGEuY29tPg0KKw0K KyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisN CisvLw0KKy8vIFRoZSBwYWNrYWdlIGxldmVsIGhlYWRlciBmaWxlcyB0aGlzIG1vZHVsZSB1c2Vz DQorLy8NCisjaW5jbHVkZSA8UGlQZWkuaD4NCisNCisvLw0KKy8vIFRoZSBMaWJyYXJ5IGNsYXNz ZXMgdGhpcyBtb2R1bGUgY29uc3VtZXMNCisvLw0KKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGli Lmg+DQorI2luY2x1ZGUgPExpYnJhcnkvSG9iTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvSW9M aWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQorI2luY2x1 ZGUgPExpYnJhcnkvUGNkTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGNpTGliLmg+DQorI2lu Y2x1ZGUgPExpYnJhcnkvUGVpbUVudHJ5UG9pbnQuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QZWlT ZXJ2aWNlc0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1Jlc291cmNlUHVibGljYXRpb25MaWIu aD4NCisjaW5jbHVkZSA8R3VpZC9NZW1vcnlUeXBlSW5mb3JtYXRpb24uaD4NCisjaW5jbHVkZSA8 UHBpL01hc3RlckJvb3RNb2RlLmg+DQorI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvUGNpMjIu aD4NCisjaW5jbHVkZSA8U2ltaWNzUGxhdGZvcm1zLmg+DQorDQorI2luY2x1ZGUgIlBsYXRmb3Jt LmgiDQorI2luY2x1ZGUgIkNtb3MuaCINCisNCitFRklfTUVNT1JZX1RZUEVfSU5GT1JNQVRJT04g bURlZmF1bHRNZW1vcnlUeXBlSW5mb3JtYXRpb25bXSA9IHsNCisgIHsgRWZpQUNQSU1lbW9yeU5W UywgICAgICAgMHgwMDQgfSwNCisgIHsgRWZpQUNQSVJlY2xhaW1NZW1vcnksICAgMHgwMDggfSwN CisgIHsgRWZpUmVzZXJ2ZWRNZW1vcnlUeXBlLCAgMHgwMDQgfSwNCisgIHsgRWZpUnVudGltZVNl cnZpY2VzRGF0YSwgMHgwMjQgfSwNCisgIHsgRWZpUnVudGltZVNlcnZpY2VzQ29kZSwgMHgwMzAg fSwNCisgIHsgRWZpQm9vdFNlcnZpY2VzQ29kZSwgICAgMHgxODAgfSwNCisgIHsgRWZpQm9vdFNl cnZpY2VzRGF0YSwgICAgMHhGMDAgfSwNCisgIHsgRWZpTWF4TWVtb3J5VHlwZSwgICAgICAgMHgw MDAgfQ0KK307DQorDQorDQorRUZJX1BFSV9QUElfREVTQ1JJUFRPUiAgIG1QcGlCb290TW9kZVtd ID0gew0KKyAgew0KKyAgICBFRklfUEVJX1BQSV9ERVNDUklQVE9SX1BQSSB8IEVGSV9QRUlfUFBJ X0RFU0NSSVBUT1JfVEVSTUlOQVRFX0xJU1QsDQorICAgICZnRWZpUGVpTWFzdGVyQm9vdE1vZGVQ cGlHdWlkLA0KKyAgICBOVUxMDQorICB9DQorfTsNCisNCisNCitVSU5UMTYgbUhvc3RCcmlkZ2VE ZXZJZDsNCisNCitFRklfQk9PVF9NT0RFIG1Cb290TW9kZSA9IEJPT1RfV0lUSF9GVUxMX0NPTkZJ R1VSQVRJT047DQorDQorQk9PTEVBTiBtUzNTdXBwb3J0ZWQgPSBGQUxTRTsNCisNCitVSU5UMzIg bU1heENwdUNvdW50Ow0KKw0KK1ZPSUQNCitBZGRJb01lbW9yeUJhc2VTaXplSG9iICgNCisgIEVG SV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBNZW1vcnlCYXNlLA0KKyAgVUlOVDY0ICAgICAgICAg ICAgICAgICAgICAgIE1lbW9yeVNpemUNCisgICkNCit7DQorICBCdWlsZFJlc291cmNlRGVzY3Jp cHRvckhvYiAoDQorICAgIEVGSV9SRVNPVVJDRV9NRU1PUllfTUFQUEVEX0lPLA0KKyAgICAgIEVG SV9SRVNPVVJDRV9BVFRSSUJVVEVfUFJFU0VOVCAgICAgfA0KKyAgICAgIEVGSV9SRVNPVVJDRV9B VFRSSUJVVEVfSU5JVElBTElaRUQgfA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfVU5D QUNIRUFCTEUgfA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfVEVTVEVELA0KKyAgICBN ZW1vcnlCYXNlLA0KKyAgICBNZW1vcnlTaXplDQorICAgICk7DQorfQ0KKw0KK1ZPSUQNCitBZGRS ZXNlcnZlZE1lbW9yeUJhc2VTaXplSG9iICgNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAg ICBNZW1vcnlCYXNlLA0KKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeVNpemUs DQorICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgQ2FjaGVhYmxlDQorICApDQorew0KKyAg QnVpbGRSZXNvdXJjZURlc2NyaXB0b3JIb2IgKA0KKyAgICBFRklfUkVTT1VSQ0VfTUVNT1JZX1JF U0VSVkVELA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfUFJFU0VOVCAgICAgfA0KKyAg ICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfSU5JVElBTElaRUQgfA0KKyAgICAgIEVGSV9SRVNP VVJDRV9BVFRSSUJVVEVfVU5DQUNIRUFCTEUgfA0KKyAgICAgIChDYWNoZWFibGUgPw0KKyAgICAg ICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1dSSVRFX0NPTUJJTkVBQkxFIHwNCisgICAgICAgRUZJ X1JFU09VUkNFX0FUVFJJQlVURV9XUklURV9USFJPVUdIX0NBQ0hFQUJMRSB8DQorICAgICAgIEVG SV9SRVNPVVJDRV9BVFRSSUJVVEVfV1JJVEVfQkFDS19DQUNIRUFCTEUgOg0KKyAgICAgICAwDQor ICAgICAgICkgfA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfVEVTVEVELA0KKyAgICBN ZW1vcnlCYXNlLA0KKyAgICBNZW1vcnlTaXplDQorICAgICk7DQorfQ0KKw0KK1ZPSUQNCitBZGRJ b01lbW9yeVJhbmdlSG9iICgNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBNZW1vcnlC YXNlLA0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgIE1lbW9yeUxpbWl0DQorICApDQor ew0KKyAgQWRkSW9NZW1vcnlCYXNlU2l6ZUhvYiAoTWVtb3J5QmFzZSwgKFVJTlQ2NCkoTWVtb3J5 TGltaXQgLSBNZW1vcnlCYXNlKSk7DQorfQ0KKw0KKw0KK1ZPSUQNCitBZGRNZW1vcnlCYXNlU2l6 ZUhvYiAoDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgTWVtb3J5QmFzZSwNCisgIFVJ TlQ2NCAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlTaXplDQorICApDQorew0KKyAgQnVpbGRS ZXNvdXJjZURlc2NyaXB0b3JIb2IgKA0KKyAgICBFRklfUkVTT1VSQ0VfU1lTVEVNX01FTU9SWSwN CisgICAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1BSRVNFTlQgfA0KKyAgICAgIEVGSV9SRVNP VVJDRV9BVFRSSUJVVEVfSU5JVElBTElaRUQgfA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJV VEVfVU5DQUNIRUFCTEUgfA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfV1JJVEVfQ09N QklORUFCTEUgfA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfV1JJVEVfVEhST1VHSF9D QUNIRUFCTEUgfA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfV1JJVEVfQkFDS19DQUNI RUFCTEUgfA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfVEVTVEVELA0KKyAgICBNZW1v cnlCYXNlLA0KKyAgICBNZW1vcnlTaXplDQorICAgICk7DQorfQ0KKw0KKw0KK1ZPSUQNCitBZGRN ZW1vcnlSYW5nZUhvYiAoDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgTWVtb3J5QmFz ZSwNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBNZW1vcnlMaW1pdA0KKyAgKQ0KK3sN CisgIEFkZE1lbW9yeUJhc2VTaXplSG9iIChNZW1vcnlCYXNlLCAoVUlOVDY0KShNZW1vcnlMaW1p dCAtIE1lbW9yeUJhc2UpKTsNCit9DQorDQorDQorVk9JRA0KK0FkZFVudGVzdGVkTWVtb3J5QmFz ZVNpemVIb2IgKA0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgIE1lbW9yeUJhc2UsDQor ICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5U2l6ZQ0KKyAgKQ0KK3sNCisgIEJ1 aWxkUmVzb3VyY2VEZXNjcmlwdG9ySG9iICgNCisgICAgRUZJX1JFU09VUkNFX1NZU1RFTV9NRU1P UlksDQorICAgICAgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9QUkVTRU5UIHwNCisgICAgICBFRklf UkVTT1VSQ0VfQVRUUklCVVRFX0lOSVRJQUxJWkVEIHwNCisgICAgICBFRklfUkVTT1VSQ0VfQVRU UklCVVRFX1VOQ0FDSEVBQkxFIHwNCisgICAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1dSSVRF X0NPTUJJTkVBQkxFIHwNCisgICAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1dSSVRFX1RIUk9V R0hfQ0FDSEVBQkxFIHwNCisgICAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1dSSVRFX0JBQ0tf Q0FDSEVBQkxFLA0KKyAgICBNZW1vcnlCYXNlLA0KKyAgICBNZW1vcnlTaXplDQorICAgICk7DQor fQ0KKw0KKw0KK1ZPSUQNCitBZGRVbnRlc3RlZE1lbW9yeVJhbmdlSG9iICgNCisgIEVGSV9QSFlT SUNBTF9BRERSRVNTICAgICAgICBNZW1vcnlCYXNlLA0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1Mg ICAgICAgIE1lbW9yeUxpbWl0DQorICApDQorew0KKyAgQWRkVW50ZXN0ZWRNZW1vcnlCYXNlU2l6 ZUhvYiAoTWVtb3J5QmFzZSwgKFVJTlQ2NCkoTWVtb3J5TGltaXQgLSBNZW1vcnlCYXNlKSk7DQor fQ0KKw0KK1ZPSUQNCitBZGRGbGFzaERldmljZVJhbmdlICgNCisgIEVGSV9QSFlTSUNBTF9BRERS RVNTICAgICAgICBNZW1vcnlCYXNlLA0KKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgIE1l bW9yeVNpemUNCisgICkNCit7DQorICBCdWlsZFJlc291cmNlRGVzY3JpcHRvckhvYiAoDQorICAg IEVGSV9SRVNPVVJDRV9GSVJNV0FSRV9ERVZJQ0UsDQorICAgIChFRklfUkVTT1VSQ0VfQVRUUklC VVRFX1BSRVNFTlQgICAgfA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfSU5JVElBTEla RUQgfA0KKyAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfVU5DQUNIRUFCTEUpLA0KKyAgICBN ZW1vcnlCYXNlLA0KKyAgICBNZW1vcnlTaXplDQorICAgICk7DQorDQorICBCdWlsZE1lbW9yeUFs bG9jYXRpb25Ib2IgKA0KKyAgICBNZW1vcnlCYXNlLA0KKyAgICBNZW1vcnlTaXplLA0KKyAgICBF ZmlNZW1vcnlNYXBwZWRJTw0KKyAgICApOw0KK30NCisNCitWT0lEDQorTWVtTWFwSW5pdGlhbGl6 YXRpb24gKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIFVJTlQ2NCBQY2lJb0Jhc2U7DQorICBVSU5U NjQgUGNpSW9TaXplOw0KKw0KKyAgVUlOVDMyICBUb3BPZkxvd1JhbTsNCisgIFVJTlQ2NCAgUGNp RXhCYXJCYXNlOw0KKyAgVUlOVDMyICBQY2lCYXNlOw0KKyAgVUlOVDMyICBQY2lTaXplOw0KKw0K KyAgUGNpSW9CYXNlID0gMHhDMDAwOw0KKyAgUGNpSW9TaXplID0gMHg0MDAwOw0KKw0KKyAgLy8N CisgIC8vIENyZWF0ZSBNZW1vcnkgVHlwZSBJbmZvcm1hdGlvbiBIT0INCisgIC8vDQorICBCdWls ZEd1aWREYXRhSG9iICgNCisgICAgJmdFZmlNZW1vcnlUeXBlSW5mb3JtYXRpb25HdWlkLA0KKyAg ICBtRGVmYXVsdE1lbW9yeVR5cGVJbmZvcm1hdGlvbiwNCisgICAgc2l6ZW9mKG1EZWZhdWx0TWVt b3J5VHlwZUluZm9ybWF0aW9uKQ0KKyAgICApOw0KKw0KKyAgLy8NCisgIC8vIFZpZGVvIG1lbW9y eSArIExlZ2FjeSBCSU9TIHJlZ2lvbg0KKyAgLy8NCisgIEFkZElvTWVtb3J5UmFuZ2VIb2IgKDB4 MEEwMDAwLCBCQVNFXzFNQik7DQorDQorICBUb3BPZkxvd1JhbSA9IEdldFN5c3RlbU1lbW9yeVNp emVCZWxvdzRnYiAoKTsNCisgIFBjaUV4QmFyQmFzZSA9IDA7DQorICBpZiAobUhvc3RCcmlkZ2VE ZXZJZCA9PSBJTlRFTF9JQ0gxMF9ERVZJQ0VfSUQpIHsNCisgICAgLy8NCisgICAgLy8gVGhlIE1N Q09ORklHIGFyZWEgaXMgZXhwZWN0ZWQgdG8gZmFsbCBiZXR3ZWVuIHRoZSB0b3Agb2YgbG93IFJB TSBhbmQNCisgICAgLy8gdGhlIGJhc2Ugb2YgdGhlIDMyLWJpdCBQQ0kgaG9zdCBhcGVydHVyZS4N CisgICAgLy8NCisgICAgUGNpRXhCYXJCYXNlID0gRml4ZWRQY2RHZXQ2NCAoUGNkUGNpRXhwcmVz c0Jhc2VBZGRyZXNzKTsNCisgICAgQVNTRVJUIChUb3BPZkxvd1JhbSA8PSBQY2lFeEJhckJhc2Up Ow0KKyAgICBBU1NFUlQgKFBjaUV4QmFyQmFzZSA8PSBNQVhfVUlOVDMyIC0gU0laRV8yNTZNQik7 DQorICAgIFBjaUJhc2UgPSAoVUlOVDMyKShQY2lFeEJhckJhc2UgKyBTSVpFXzI1Nk1CKTsNCisg IH0gZWxzZSB7DQorICAgIFBjaUJhc2UgPSAoVG9wT2ZMb3dSYW0gPCBCQVNFXzJHQikgPyBCQVNF XzJHQiA6IFRvcE9mTG93UmFtOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIGFkZHJlc3MgICAgICAg cHVycG9zZSAgIHNpemUNCisgIC8vIC0tLS0tLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCisgIC8vIDB4MDAwMDAwMDAgICAgVG9wT2ZMb3dSYW0gICAweERGMDAw MDAwDQorICAvLyAweERGMDAwMDAwICAgIFRzZWcrVU1BICAgICAgMHgwMTAwMDAwMA0KKyAgLy8g MHhFMDAwMDAwMCAgICBQY2lFeEJhckJhc2UgIDB4MTAwMDAwMDANCisgIC8vIDB4RjAwMDAwMDAg ICAgUGNpQmFzZSAgICAgICAweDBDMDAwMDAwDQorICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAvLyBtYXgodG9wLCAyZykgIFBDSSBNTUlP ICAweEZDMDAwMDAwIC0gbWF4KHRvcCwgMmcpDQorICAvLyAweEZDMDAwMDAwICAgIGdhcCAgICAg ICAgICAgICAgICAgICAgICAgICAgIDQ0IE1CDQorICAvLyAweEZFQzAwMDAwICAgIElPLUFQSUMg ICAgICAgICAgICAgICAgICAgICAgICA0IEtCDQorICAvLyAweEZFQzAxMDAwICAgIGdhcCAgICAg ICAgICAgICAgICAgICAgICAgICAxMDIwIEtCDQorICAvLyAweEZFRDAwMDAwICAgIEhQRVQgICAg ICAgICAgICAgICAgICAgICAgICAgICAxIEtCDQorICAvLyAweEZFRDAwNDAwICAgIGdhcCAgICAg ICAgICAgICAgICAgICAgICAgICAgMTExIEtCDQorICAvLyAweEZFRDFDMDAwICAgIGdhcCAoUElJ WDQpIC8gUkNSQiAoSUNIOSkgICAgIDE2IEtCDQorICAvLyAweEZFRDIwMDAwICAgIGdhcCAgICAg ICAgICAgICAgICAgICAgICAgICAgODk2IEtCDQorICAvLyAweEZFRTAwMDAwICAgIExBUElDICAg ICAgICAgICAgICAgICAgICAgICAgICAxIE1CDQorICAvLw0KKyAgUGNpU2l6ZSA9IDB4RkMwMDAw MDAgLSBQY2lCYXNlOw0KKyAgQWRkSW9NZW1vcnlCYXNlU2l6ZUhvYiAoUGNpQmFzZSwgUGNpU2l6 ZSk7DQorICBQY2RTZXQ2NCAoUGNkUGNpTW1pbzMyQmFzZSwgUGNpQmFzZSk7DQorICBQY2RTZXQ2 NCAoUGNkUGNpTW1pbzMyU2l6ZSwgUGNpU2l6ZSk7DQorICBBZGRJb01lbW9yeUJhc2VTaXplSG9i ICgweEZFQzAwMDAwLCBTSVpFXzRLQik7DQorICBBZGRJb01lbW9yeUJhc2VTaXplSG9iICgweEZF RDAwMDAwLCBTSVpFXzFLQik7DQorICBpZiAobUhvc3RCcmlkZ2VEZXZJZCA9PSBJTlRFTF9JQ0gx MF9ERVZJQ0VfSUQpIHsNCisgICAgQWRkSW9NZW1vcnlCYXNlU2l6ZUhvYiAoSUNIMTBfUk9PVF9D T01QTEVYX0JBU0UsIFNJWkVfMTZLQik7DQorICAgIC8vDQorICAgIC8vIE5vdGU6IHRoZXJlIHNo b3VsZCBiZSBhbg0KKyAgICAvLw0KKyAgICAvLyAgIEFkZElvTWVtb3J5QmFzZVNpemVIb2IgKFBj aUV4QmFyQmFzZSwgU0laRV8yNTZNQik7DQorICAgIC8vICAgQnVpbGRNZW1vcnlBbGxvY2F0aW9u SG9iIChQY2lFeEJhckJhc2UsIFNJWkVfMjU2TUIsIEVmaU1lbW9yeU1hcHBlZElPKTsNCisgICAg Ly8NCisgICAgLy8gY2FsbCBiZWxvdywganVzdCBsaWtlIHRoZSBvbmUgYWJvdmUgZm9yIFJDQkEu IEhvd2V2ZXIsIExpbnV4IGluc2lzdHMNCisgICAgLy8gdGhhdCB0aGUgTU1DT05GSUcgYXJlYSBi ZSBtYXJrZWQgaW4gdGhlIEU4MjAgb3IgVUVGSSBtZW1vcnkgbWFwIGFzDQorICAgIC8vICJyZXNl cnZlZCBtZW1vcnkiIC0tIExpbnV4IGRvZXMgbm90IGNvbnRlbnQgaXRzZWxmIHdpdGggYSBzaW1w bGUgZ2FwDQorICAgIC8vIGluIHRoZSBtZW1vcnkgbWFwIHdoZXJldmVyIHRoZSBNQ0ZHIEFDUEkg dGFibGUgcG9pbnRzIHRvLg0KKyAgICAvLw0KKyAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgYSBz YWZldHkgbWVhc3VyZS4gVGhlIFBDSSBGaXJtd2FyZSBTcGVjaWZpY2F0aW9uDQorICAgIC8vIChy ZXYgMy4xKSBzYXlzIGluIDQuMS4yLiAiTUNGRyBUYWJsZSBEZXNjcmlwdGlvbiI6ICJUaGUgcmVz b3VyY2VzIGNhbg0KKyAgICAvLyAqb3B0aW9uYWxseSogYmUgcmV0dXJuZWQgaW4gWy4uLl0gRUZJ R2V0TWVtb3J5TWFwIGFzIHJlc2VydmVkIG1lbW9yeQ0KKyAgICAvLyBbLi4uXSIuIChFbXBoYXNp cyBhZGRlZCBoZXJlLikNCisgICAgLy8NCisgICAgLy8gTm9ybWFsbHkgd2UgYWRkIG1lbW9yeSBy ZXNvdXJjZSBkZXNjcmlwdG9yIEhPQnMgaW4NCisgICAgLy8gUWVtdUluaXRpYWxpemVSYW0oKSwg YW5kIHByZS1hbGxvY2F0ZSBmcm9tIHRob3NlIHdpdGggbWVtb3J5DQorICAgIC8vIGFsbG9jYXRp b24gSE9CcyBpbiBJbml0aWFsaXplUmFtUmVnaW9ucygpLiBIb3dldmVyLCB0aGUgTU1DT05GSUcg YXJlYQ0KKyAgICAvLyBpcyBtb3N0IGRlZmluaXRlbHkgbm90IFJBTTsgc28sIGFzIGFuIGV4Y2Vw dGlvbiwgY292ZXIgaXQgd2l0aA0KKyAgICAvLyB1bmNhY2hlYWJsZSByZXNlcnZlZCBtZW1vcnkg cmlnaHQgaGVyZS4NCisgICAgLy8NCisgICAgICBBZGRSZXNlcnZlZE1lbW9yeUJhc2VTaXplSG9i IChQY2lFeEJhckJhc2UsIFNJWkVfMjU2TUIsIEZBTFNFKTsNCisgICAgICBCdWlsZE1lbW9yeUFs bG9jYXRpb25Ib2IgKFBjaUV4QmFyQmFzZSwgU0laRV8yNTZNQiwNCisgICAgICAgIEVmaVJlc2Vy dmVkTWVtb3J5VHlwZSk7DQorICB9DQorICBBZGRJb01lbW9yeUJhc2VTaXplSG9iIChQY2RHZXQz MihQY2RDcHVMb2NhbEFwaWNCYXNlQWRkcmVzcyksIFNJWkVfMU1CKTsNCisNCisgIC8vIEFkZCBQ Q0kgSU8gUG9ydCBzcGFjZSBhdmFpbGFibGUgZm9yIFBDSSByZXNvdXJjZSBhbGxvY2F0aW9ucy4N CisgIC8vDQorICBCdWlsZFJlc291cmNlRGVzY3JpcHRvckhvYiAoDQorICAgIEVGSV9SRVNPVVJD RV9JTywNCisgICAgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9QUkVTRU5UICAgICB8DQorICAgIEVG SV9SRVNPVVJDRV9BVFRSSUJVVEVfSU5JVElBTElaRUQsDQorICAgIFBjaUlvQmFzZSwNCisgICAg UGNpSW9TaXplDQorICAgICk7DQorICBQY2RTZXQ2NCAoUGNkUGNpSW9CYXNlLCBQY2lJb0Jhc2Up Ow0KKyAgUGNkU2V0NjQgKFBjZFBjaUlvU2l6ZSwgUGNpSW9TaXplKTsNCisNCisgIC8vDQorICAv LyBBZGQgZmxhc2ggcmFuZ2UuDQorICAvLw0KKyAgQWRkRmxhc2hEZXZpY2VSYW5nZSAoUGNkR2V0 MzIoUGNkRmxhc2hBcmVhQmFzZUFkZHJlc3MpLCBQY2RHZXQzMihQY2RGbGFzaEFyZWFTaXplKSk7 DQorICAvLw0KKyAgLy8gVmlkZW8gbWVtb3J5IC8gQUJTRUcNCisgIC8vDQorICBBZGRJb01lbW9y eUJhc2VTaXplSG9iICgweDBBMDAwMCwgMHgyMDAwMCk7DQorICAvLw0KKyAgLy8gTGVnYWN5IEJJ T1MgcmVnaW9uLg0KKyAgLy8NCisgIEFkZFJlc2VydmVkTWVtb3J5QmFzZVNpemVIb2IgKDB4QzAw MDAsIDB4NDAwMDAsIFRSVUUpOw0KK30NCisNCitWT0lEDQorTWlzY0luaXRpYWxpemF0aW9uICgN CisgIFZPSUQNCisgICkNCit7DQorICBVSU5UTiAgICAgICAgIFBtQ21kOw0KKyAgVUlOVE4gICAg ICAgICBQbWJhOw0KKyAgVUlOVDMyICAgICAgICBQbWJhQW5kVmFsOw0KKyAgVUlOVDMyICAgICAg ICBQbWJhT3JWYWw7DQorICBVSU5UTiAgICAgICAgIEFjcGlDdGxSZWc7DQorICBVSU5UOCAgICAg ICAgIEFjcGlFbkJpdDsNCisNCisgIC8vDQorICAvLyBEaXNhYmxlIEEyMCBNYXNrDQorICAvLw0K KyAgSW9PcjggKDB4OTIsIEJJVDEpOw0KKw0KKyAgLy8NCisgIC8vIEJ1aWxkIHRoZSBDUFUgSE9C IHdpdGggZ3Vlc3QgUkFNIHNpemUgZGVwZW5kZW50IGFkZHJlc3Mgd2lkdGggYW5kIDE2LWJpdHMN CisgIC8vIG9mIElPIHNwYWNlLiAoU2lkZSBub3RlOiB1bmxpa2Ugb3RoZXIgSE9CcywgdGhlIENQ VSBIT0IgaXMgbmVlZGVkIGR1cmluZw0KKyAgLy8gUzMgcmVzdW1lIGFzIHdlbGwsIHNvIHdlIGJ1 aWxkIGl0IHVuY29uZGl0aW9uYWxseS4pDQorICAvLw0KKyAgQnVpbGRDcHVIb2IgKG1QaHlzTWVt QWRkcmVzc1dpZHRoLCAxNik7DQorDQorICAvLw0KKyAgLy8gRGV0ZXJtaW5lIHBsYXRmb3JtIHR5 cGUgYW5kIHNhdmUgSG9zdCBCcmlkZ2UgRElEIHRvIFBDRA0KKyAgLy8NCisgIHN3aXRjaCAobUhv c3RCcmlkZ2VEZXZJZCkgew0KKyAgICBjYXNlIElOVEVMXzgyNDQxX0RFVklDRV9JRDoNCisgICAg ICBQbUNtZCAgICAgID0gUE9XRVJfTUdNVF9SRUdJU1RFUl9QSUlYNCAoUENJX0NPTU1BTkRfT0ZG U0VUKTsNCisgICAgICBQbWJhICAgICAgID0gUE9XRVJfTUdNVF9SRUdJU1RFUl9QSUlYNCAoUElJ WDRfUE1CQSk7DQorICAgICAgUG1iYUFuZFZhbCA9IH4oVUlOVDMyKVBJSVg0X1BNQkFfTUFTSzsN CisgICAgICBQbWJhT3JWYWwgID0gUElJWDRfUE1CQV9WQUxVRTsNCisgICAgICBBY3BpQ3RsUmVn ID0gUE9XRVJfTUdNVF9SRUdJU1RFUl9QSUlYNCAoUElJWDRfUE1SRUdNSVNDKTsNCisgICAgICBB Y3BpRW5CaXQgID0gUElJWDRfUE1SRUdNSVNDX1BNSU9TRTsNCisgICAgICBicmVhazsNCisgICAg Y2FzZSBJTlRFTF9JQ0gxMF9ERVZJQ0VfSUQ6DQorICAgICAgUG1DbWQgICAgICA9IFBPV0VSX01H TVRfUkVHSVNURVJfSUNIMTAgKFBDSV9DT01NQU5EX09GRlNFVCk7DQorICAgICAgUG1iYSAgICAg ICA9IFBPV0VSX01HTVRfUkVHSVNURVJfSUNIMTAgKElDSDEwX1BNQkFTRSk7DQorICAgICAgUG1i YUFuZFZhbCA9IH4oVUlOVDMyKUlDSDEwX1BNQkFTRV9NQVNLOw0KKyAgICAgIFBtYmFPclZhbCAg PSBJQ0gxMF9QTUJBU0VfVkFMVUU7DQorICAgICAgQWNwaUN0bFJlZyA9IFBPV0VSX01HTVRfUkVH SVNURVJfSUNIMTAgKElDSDEwX0FDUElfQ05UTCk7DQorICAgICAgQWNwaUVuQml0ICA9IElDSDEw X0FDUElfQ05UTF9BQ1BJX0VOOw0KKyAgICAgIGJyZWFrOw0KKyAgICBkZWZhdWx0Og0KKyAgICAg IERFQlVHICgoRUZJX0RfRVJST1IsICIlYTogVW5rbm93biBIb3N0IEJyaWRnZSBEZXZpY2UgSUQ6 IDB4JTA0eFxuIiwNCisgICAgICAgIF9fRlVOQ1RJT05fXywgbUhvc3RCcmlkZ2VEZXZJZCkpOw0K KyAgICAgIEFTU0VSVCAoRkFMU0UpOw0KKyAgICAgIHJldHVybjsNCisgIH0NCisgIFBjZFNldDE2 IChQY2RTaW1pY3NYNThIb3N0QnJpZGdlUGNpRGV2SWQsIG1Ib3N0QnJpZGdlRGV2SWQpOw0KKw0K KyAgLy8NCisgIC8vIElmIHRoZSBhcHByb3ByaWF0ZSBJT3NwYWNlIGVuYWJsZSBiaXQgaXMgc2V0 LCBhc3N1bWUgdGhlIEFDUEkgUE1CQQ0KKyAgLy8gaGFzIGJlZW4gY29uZmlndXJlZCBhbmQgc2tp cCB0aGUgc2V0dXAgaGVyZS4NCisgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgbG9naWMgaW4gQWNwaVRp bWVyTGliQ29uc3RydWN0b3IgKCkuDQorICAvLw0KKyAgaWYgKChQY2lSZWFkOCAoQWNwaUN0bFJl ZykgJiBBY3BpRW5CaXQpID09IDApIHsNCisgICAgLy8NCisgICAgLy8gVGhlIFBFSSBwaGFzZSBz aG91bGQgYmUgZXhpdGVkIHdpdGggZnVsbHkgYWNjZXNzaWJlIEFDUEkgUE0gSU8gc3BhY2U6DQor ICAgIC8vIDEuIHNldCBQTUJBDQorICAgIC8vDQorICAgIFBjaUFuZFRoZW5PcjMyIChQbWJhLCBQ bWJhQW5kVmFsLCBQbWJhT3JWYWwpOw0KKw0KKyAgICAvLw0KKyAgICAvLyAyLiBzZXQgUENJQ01E L0lPU0UNCisgICAgLy8NCisgICAgUGNpT3I4IChQbUNtZCwgRUZJX1BDSV9DT01NQU5EX0lPX1NQ QUNFKTsNCisNCisgICAgLy8NCisgICAgLy8gMy4gc2V0IEFDUEkgUE0gSU8gZW5hYmxlIGJpdCAo UE1SRUdNSVNDOlBNSU9TRSBvciBBQ1BJX0NOVEw6QUNQSV9FTikNCisgICAgLy8NCisgICAgUGNp T3I4IChBY3BpQ3RsUmVnLCBBY3BpRW5CaXQpOw0KKyAgfQ0KKw0KKyAgaWYgKG1Ib3N0QnJpZGdl RGV2SWQgPT0gSU5URUxfSUNIMTBfREVWSUNFX0lEKSB7DQorICAgIC8vDQorICAgIC8vIFNldCBS b290IENvbXBsZXggUmVnaXN0ZXIgQmxvY2sgQkFSDQorICAgIC8vDQorICAgIFBjaVdyaXRlMzIg KA0KKyAgICAgIFBPV0VSX01HTVRfUkVHSVNURVJfSUNIMTAgKElDSDEwX1JDQkEpLA0KKyAgICAg IElDSDEwX1JPT1RfQ09NUExFWF9CQVNFIHwgSUNIMTBfUkNCQV9FTg0KKyAgICAgICk7DQorDQor ICB9DQorICAvLw0KKyAgLy8gU2V0IHRoZSBQTSBJL08gYmFzZSBhZGRyZXNzIHRvIDB4NDAwDQor ICAvLw0KKyAgUGNpQW5kVGhlbk9yMzIgKA0KKyAgICBQQ0lfTElCX0FERFJFU1MgKA0KKyAgICAg IDAsDQorICAgICAgMzEsDQorICAgICAgMCwNCisgICAgICAweDQwDQorICAgICAgKSwNCisgICAg KFVJTlQzMikgfjB4ZmMwLCBJQ0gxMF9QTUJBU0VfVkFMVUUNCisgICAgKTsNCisgIC8vDQorICAv LyBFbmFibGUgQUhDSSBhbmQgYWxsIHBvcnRzIG9uIHRoZSBTQVRBIGNvbnRyb2xsZXIuDQorICAv Lw0KKyAgLy8gQWRkcmVzcyBNQVAgUmVnLCBzZXR0aW5nIEFIQ0kgbW9kZQ0KKyAgLy8NCisgIFBj aU9yMTYgKFBDSV9MSUJfQUREUkVTUyAoMCwgMzEsIDIsIDB4OTApLCAweDAwNjApOw0KKyAgLy8N CisgIC8vRW5hYmxpbmcgUG9ydHMgMC01DQorICAvLw0KKyAgUGNpT3IxNiAoUENJX0xJQl9BRERS RVNTICgwLCAzMSwgMiwgMHg5MiksIDB4MDAzRik7DQorICAvLw0KKyAgLy9EaXNhYmxpbmcgU2F0 YSBDb250cm9sbGVyIDIsIGJpdCAyNSA9IDEsIGJpdCAwID0gMQ0KKyAgLy8NCisgIE1taW9Xcml0 ZTMyKDB4RkVEMUY0MTgsIDB4MDIwMDAwMDEpOw0KKyAgLy8NCisgIC8vRW5hYmxlIEhQRVQgYXQg RkVEMF8wMDAwaCDigJMgRkVEMF8wM0ZGaA0KKyAgLy8NCisgIE1taW9Xcml0ZTgoSUNIMTBfUk9P VF9DT01QTEVYX0JBU0UgKyAweDM0MDQsIDB4ODApOw0KKyAgLy8NCisgIC8vQ29uZmlnIGFuZCBl bmFibGUgQVBJQw0KKyAgLy8NCisgIE1taW9Xcml0ZTMyKDB4RkVDMDAwMDAgKyAwWDAsIDApOw0K KyAgTW1pb1dyaXRlMzIoMHhGRUMwMDAwMCArIDBYMTAsIFBjZEdldDgoUGNkSW9BcGljSWQpPDwy NCk7DQorICBNbWlvV3JpdGU4KElDSDEwX1JPT1RfQ09NUExFWF9CQVNFICsgMHgzMUZGLCAweDAx KTsNCit9DQorDQorDQorVk9JRA0KK0Jvb3RNb2RlSW5pdGlhbGl6YXRpb24gKA0KKyAgVk9JRA0K KyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgU3RhdHVzOw0KKw0KKyBERUJVRygoRUZJX0RfSU5G TywgIm1vZGVWYWx1ZSA9ICV4XG4iLCBJb0JpdEZpZWxkUmVhZDE2KElDSDEwX1BNQkFTRV9JTyAr IDQsIDEwLCAxMikpKTsNCisgIGlmIChJb0JpdEZpZWxkUmVhZDE2KElDSDEwX1BNQkFTRV9JTyAr IDQsIDEwLCAxMikgPT0gMHg1KSB7DQorICAgIG1Cb290TW9kZSA9IEJPT1RfT05fUzNfUkVTVU1F Ow0KKyAgfQ0KKw0KKyAgU3RhdHVzID0gUGVpU2VydmljZXNTZXRCb290TW9kZSAobUJvb3RNb2Rl KTsNCisgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQorDQorICBTdGF0dXMgPSBQZWlTZXJ2 aWNlc0luc3RhbGxQcGkgKG1QcGlCb290TW9kZSk7DQorICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0 dXMpOw0KK30NCisNCisNCitWT0lEDQorUmVzZXJ2ZUVtdVZhcmlhYmxlTnZTdG9yZSAoDQorICAp DQorew0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgVmFyaWFibGVTdG9yZTsNCisNCisgIC8vDQor ICAvLyBBbGxvY2F0ZSBzdG9yYWdlIGZvciBOViB2YXJpYWJsZXMgZWFybHkgb24gc28gaXQgd2ls bCBiZQ0KKyAgLy8gYXQgYSBjb25zaXN0ZW50IGFkZHJlc3MuICBTaW5jZSBWTSBtZW1vcnkgaXMg cHJlc2VydmVkDQorICAvLyBhY3Jvc3MgcmVib290cywgdGhpcyBhbGxvd3MgdGhlIE5WIHZhcmlh YmxlIHN0b3JhZ2UgdG8gc3Vydml2ZQ0KKyAgLy8gYSBWTSByZWJvb3QuDQorICAvLw0KKyAgVmFy aWFibGVTdG9yZSA9DQorICAgIChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pDQorICAgICAg QWxsb2NhdGVSdW50aW1lUGFnZXMgKA0KKyAgICAgICAgRUZJX1NJWkVfVE9fUEFHRVMgKDIgKiBQ Y2RHZXQzMiAoUGNkRmxhc2hOdlN0b3JhZ2VGdHdTcGFyZVNpemUpKQ0KKyAgICAgICAgKTsNCisg IERFQlVHICgoRUZJX0RfSU5GTywNCisgICAgICAgICAgIlJlc2VydmVkIHZhcmlhYmxlIHN0b3Jl IG1lbW9yeTogMHglbFg7IHNpemU6ICVka2JcbiIsDQorICAgICAgICAgIFZhcmlhYmxlU3RvcmUs DQorICAgICAgICAgICgyICogUGNkR2V0MzIgKFBjZEZsYXNoTnZTdG9yYWdlRnR3U3BhcmVTaXpl KSkgLyAxMDI0DQorICAgICAgICApKTsNCisgIFBjZFNldDY0IChQY2RFbXVWYXJpYWJsZU52U3Rv cmVSZXNlcnZlZCwgVmFyaWFibGVTdG9yZSk7DQorfQ0KKw0KKw0KK1ZPSUQNCitTaW1pY3NWZXJz aW9uQ2hlY2soDQorICBWT0lEDQorICApDQorew0KKw0KKyAgVUlOVE4gICAgICAgICAgIFBjaUFk ZHJQdHI7DQorICBVSU5UOCAgICAgICAgICAgQ2FwT2Zmc2V0Ow0KKyAgU1RBVElDIENIQVI4ICAg IFNpbWljc1N0clsweDEwMF07DQorICBVSU5UTiAgICAgICAgICAgaTsNCisgIFVJTlQzMiAgICAg ICAgICBNYWpvclZlcnNpb247DQorICBVSU5UMzIgICAgICAgICAgTWlub3JWZXJzaW9uOw0KKyAg VUlOVDMyICAgICAgICAgIE1vZGVsTnVtYmVyOw0KKw0KKyAgUGNpQWRkclB0ciA9IFBDSV9MSUJf QUREUkVTUygwLCBTSU1JQ1NfU0lERUJBTkRQQ0lfREVWLCBTSU1JQ1NfU0lERUJBTkRQQ0lfRlVO QywgMCk7DQorICBDYXBPZmZzZXQgPSBQY2lSZWFkOChQY2lBZGRyUHRyICsgUENJX0NBUEJJTElU WV9QT0lOVEVSX09GRlNFVCk7DQorICBpZiAoQ2FwT2Zmc2V0ICE9IDB4RkYpIHsNCisgICAgTW9k ZWxOdW1iZXIgPSBQY2lSZWFkMzIoUGNpQWRkclB0ciArIENhcE9mZnNldCArIDQpOw0KKyAgICBN YWpvclZlcnNpb24gPSBQY2lSZWFkMzIoUGNpQWRkclB0ciArIENhcE9mZnNldCArIDgpOw0KKyAg ICBNaW5vclZlcnNpb24gPSBQY2lSZWFkMzIoUGNpQWRkclB0ciArIENhcE9mZnNldCArIDB4Yyk7 DQorICAgIGZvciAoaSA9IDA7IGkgPCAweDgwOyBpKyspIHsNCisgICAgICBTaW1pY3NTdHJbaV0g PSBQY2lSZWFkOChQY2lBZGRyUHRyICsgQ2FwT2Zmc2V0ICsgMHgxMCArIGkpOw0KKyAgICB9DQor ICAgIERFQlVHKChFRklfRF9JTkZPLCAiPT09PT09PT09PT09PVNJTUlDUyBWZXJzaW9uIGluZm89 PT09PT09PT09PT09XG4iKSk7DQorICAgIERFQlVHKChFRklfRF9JTkZPLCAiTW9kZWwgbnVtYmVy ID0gJWRcbiIsIE1vZGVsTnVtYmVyKSk7DQorICAgIERFQlVHKChFRklfRF9JTkZPLCAiTWFqb3Ig dmVyc2lvbiA9ICVkXG4iLCBNYWpvclZlcnNpb24pKTsNCisgICAgREVCVUcoKEVGSV9EX0lORk8s ICJNaW5vciB2ZXJzaW9uID0gJWRcbiIsIE1pbm9yVmVyc2lvbikpOw0KKyAgICBERUJVRygoRUZJ X0RfSU5GTywgIiVhXG4iLCBTaW1pY3NTdHIpKTsNCisgICAgREVCVUcoKEVGSV9EX0lORk8sICI9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpKTsNCisgIH0N Cit9DQorDQorVk9JRA0KK0RlYnVnRHVtcENtb3MgKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIFVJ TlQzMiBMb29wOw0KKw0KKyAgREVCVUcgKChFRklfRF9JTkZPLCAiQ01PUzpcbiIpKTsNCisNCisg IGZvciAoTG9vcCA9IDA7IExvb3AgPCAweDgwOyBMb29wKyspIHsNCisgICAgaWYgKChMb29wICUg MHgxMCkgPT0gMCkgew0KKyAgICAgIERFQlVHICgoRUZJX0RfSU5GTywgIiUwMng6IiwgTG9vcCkp Ow0KKyAgICB9DQorICAgIERFQlVHICgoRUZJX0RfSU5GTywgIiAlMDJ4IiwgQ21vc1JlYWQ4IChM b29wKSkpOw0KKyAgICBpZiAoKExvb3AgJSAweDEwKSA9PSAweGYpIHsNCisgICAgICBERUJVRyAo KEVGSV9EX0lORk8sICJcbiIpKTsNCisgICAgfQ0KKyAgfQ0KK30NCisNCisNCisvKioNCisgIEZl dGNoIHRoZSBudW1iZXIgb2YgYm9vdCBDUFVzIGZyb20gUUVNVSBhbmQgZXhwb3NlIGl0IHRvIFVl ZmlDcHVQa2cgbW9kdWxlcy4NCisgIFNldCB0aGUgbU1heENwdUNvdW50IHZhcmlhYmxlLg0KKyoq Lw0KK1ZPSUQNCitNYXhDcHVDb3VudEluaXRpYWxpemF0aW9uICgNCisgIFZPSUQNCisgICkNCit7 DQorICBtTWF4Q3B1Q291bnQgPSBQY2RHZXQzMiAoUGNkQ3B1TWF4TG9naWNhbFByb2Nlc3Nvck51 bWJlcik7DQorICByZXR1cm47DQorfQ0KKw0KKy8qKg0KKyAgRGV0ZXJtaW5lIGlmIFMzIHN1cHBv cnQgaXMgZXhwbGljaXRseSBlbmFibGVkLg0KKw0KKyAgQHJldHZhbCAgVFJVRSAgIElmIFMzIHN1 cHBvcnQgaXMgZXhwbGljaXRseSBlbmFibGVkLiBPdGhlciBmdW5jdGlvbnMgaW4gdGhpcw0KKyAg bGlicmFyeSBtYXkgYmUgY2FsbGVkIChzdWJqZWN0IHRvIHRoZWlyIGluZGl2aWR1YWwNCisgIHJl c3RyaWN0aW9ucykuDQorDQorICBGQUxTRSAgT3RoZXJ3aXNlLiBUaGlzIGluY2x1ZGVzIHVuYXZh aWxhYmlsaXR5IG9mIHRoZSBmaXJtd2FyZQ0KKyAgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuIE5v IG90aGVyIGZ1bmN0aW9uIGluIHRoaXMgbGlicmFyeQ0KKyAgbXVzdCBiZSBjYWxsZWQuDQorKiov DQorQk9PTEVBTg0KK0VGSUFQSQ0KK1FlbXVGd0NmZ1MzRW5hYmxlZCgNCisgIFZPSUQNCispDQor ew0KKyAgLy9UTyBETyBJRiBORUVERUQNCisgIHJldHVybiBUUlVFOw0KK30NCisNCisvKioNCisg IFBlcmZvcm0gUGxhdGZvcm0gUEVJIGluaXRpYWxpemF0aW9uLg0KKw0KKyAgQHBhcmFtICBGaWxl SGFuZGxlICAgICAgSGFuZGxlIG9mIHRoZSBmaWxlIGJlaW5nIGludm9rZWQuDQorICBAcGFyYW0g IFBlaVNlcnZpY2VzICAgICBEZXNjcmliZXMgdGhlIGxpc3Qgb2YgcG9zc2libGUgUEVJIFNlcnZp Y2VzLg0KKw0KKyAgQHJldHVybiBFRklfU1VDQ0VTUyAgICAgVGhlIFBFSU0gaW5pdGlhbGl6ZWQg c3VjY2Vzc2Z1bGx5Lg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitJbml0aWFsaXpl UGxhdGZvcm0gKA0KKyAgSU4gICAgICAgRUZJX1BFSV9GSUxFX0hBTkRMRSAgRmlsZUhhbmRsZSwN CisgIElOIENPTlNUIEVGSV9QRUlfU0VSVklDRVMgICAgICoqUGVpU2VydmljZXMNCisgICkNCit7 DQorICBFRklfU1RBVFVTICAgIFN0YXR1czsNCisNCisgIERFQlVHICgoRUZJX0RfRVJST1IsICJQ bGF0Zm9ybSBQRUlNIExvYWRlZFxuIikpOw0KKw0KKyAgU2ltaWNzVmVyc2lvbkNoZWNrICgpOw0K KyAgRGVidWdEdW1wQ21vcyAoKTsNCisNCisgIGlmIChRZW11RndDZmdTM0VuYWJsZWQgKCkpIHsN CisgICAgREVCVUcgKChFRklfRF9JTkZPLCAiUzMgc3VwcG9ydCB3YXMgZGV0ZWN0ZWQgb24gU0lN SUNTXG4iKSk7DQorICAgIG1TM1N1cHBvcnRlZCA9IFRSVUU7DQorICAgIFN0YXR1cyA9IFBjZFNl dEJvb2xTIChQY2RBY3BpUzNFbmFibGUsIFRSVUUpOw0KKyAgICBBU1NFUlRfRUZJX0VSUk9SIChT dGF0dXMpOw0KKyAgfQ0KKyAgQWRkcmVzc1dpZHRoSW5pdGlhbGl6YXRpb24gKCk7DQorICBNYXhD cHVDb3VudEluaXRpYWxpemF0aW9uICgpOw0KKw0KKyAgbUhvc3RCcmlkZ2VEZXZJZCA9IFBjaVJl YWQxNihTSU1JQ1NfSE9TVEJSSURHRV9ESUQpOw0KKw0KKyAgaWYgKEZlYXR1cmVQY2RHZXQgKFBj ZFNtbVNtcmFtUmVxdWlyZSkpIHsNCisgICAgWDU4VHNlZ01ieXRlc0luaXRpYWxpemF0aW9uICgp Ow0KKyAgfQ0KKw0KKyAgUHVibGlzaFBlaU1lbW9yeSAoKTsNCisNCisgIEluaXRpYWxpemVSYW1S ZWdpb25zICgpOw0KKw0KKyAgaWYgKG1Cb290TW9kZSAhPSBCT09UX09OX1MzX1JFU1VNRSkgew0K KyAgICBpZiAoIUZlYXR1cmVQY2RHZXQgKFBjZFNtbVNtcmFtUmVxdWlyZSkpIHsNCisgICAgICBS ZXNlcnZlRW11VmFyaWFibGVOdlN0b3JlICgpOw0KKyAgICB9DQorICAgIE1lbU1hcEluaXRpYWxp emF0aW9uICgpOw0KKyAgfQ0KKw0KKyAgTWlzY0luaXRpYWxpemF0aW9uICgpOw0KKyAgSW5zdGFs bEZlYXR1cmVDb250cm9sQ2FsbGJhY2sgKCk7DQorDQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQor fQ0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TbWJpb3NQ bGF0Zm9ybUR4ZS9TbWJpb3NQbGF0Zm9ybUR4ZS5jIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3Bl bkJvYXJkUGtnL1NtYmlvc1BsYXRmb3JtRHhlL1NtYmlvc1BsYXRmb3JtRHhlLmMNCm5ldyBmaWxl IG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi5iYmQ5NmI0ZTM2DQotLS0gL2Rldi9udWxs DQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU21iaW9zUGxhdGZvcm1E eGUvU21iaW9zUGxhdGZvcm1EeGUuYw0KQEAgLTAsMCArMSwxNDggQEANCisvKiogQGZpbGUNCisg IFRoaXMgZHJpdmVyIGluc3RhbGxzIFNNQklPUyBpbmZvcm1hdGlvbiBmb3IgUVNQDQorDQorICBD b3B5cmlnaHQgKGMpIDIwMTEsIEJlaSBHdWFuIDxnYnRqdTg1QGdtYWlsLmNvbT4NCisgIENvcHly aWdodCAoYykgMjAxMSAtIDIwMTUsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLjxCUj4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0 ZW50DQorKiovDQorDQorI2luY2x1ZGUgIlNtYmlvc1BsYXRmb3JtRHhlLmgiDQorDQorDQorLyoq DQorUmVhZHMgOC1iaXRzIG9mIENNT1MgZGF0YS4NCisNCitSZWFkcyB0aGUgOC1iaXRzIG9mIENN T1MgZGF0YSBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IEluZGV4Lg0KK1RoZSA4LWJpdCBy ZWFkIHZhbHVlIGlzIHJldHVybmVkLg0KKw0KK0BwYXJhbSAgSW5kZXggIFRoZSBDTU9TIGxvY2F0 aW9uIHRvIHJlYWQuDQorDQorQHJldHVybiBUaGUgdmFsdWUgcmVhZC4NCisNCisqKi8NCitVSU5U OA0KK0VGSUFQSQ0KK0Ntb3NSZWFkOCgNCisgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICBJbmRleA0KKyAgKQ0KK3sNCisgIElvV3JpdGU4KDB4NzAsIChVSU5UOClJbmRleCk7DQor ICByZXR1cm4gSW9SZWFkOCgweDcxKTsNCit9DQorDQorVUlOVDMyDQorR2V0U3lzdGVtTWVtb3J5 U2l6ZUJlbG93NGdiKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIFVJTlQ4IENtb3MweDM0Ow0KKyAg VUlOVDggQ21vczB4MzU7DQorDQorICAvLw0KKyAgLy8gQ01PUyAweDM0LzB4MzUgc3BlY2lmaWVz IHRoZSBzeXN0ZW0gbWVtb3J5IGFib3ZlIDE2IE1CLg0KKyAgLy8gKiBDTU9TKDB4MzUpIGlzIHRo ZSBoaWdoIGJ5dGUNCisgIC8vICogQ01PUygweDM0KSBpcyB0aGUgbG93IGJ5dGUNCisgIC8vICog VGhlIHNpemUgaXMgc3BlY2lmaWVkIGluIDY0a2IgY2h1bmtzDQorICAvLyAqIFNpbmNlIHRoaXMg aXMgbWVtb3J5IGFib3ZlIDE2TUIsIHRoZSAxNk1CIG11c3QgYmUgYWRkZWQNCisgIC8vICAgaW50 byB0aGUgY2FsY3VsYXRpb24gdG8gZ2V0IHRoZSB0b3RhbCBtZW1vcnkgc2l6ZS4NCisgIC8vDQor DQorICBDbW9zMHgzNCA9IChVSU5UOClDbW9zUmVhZDgoMHgzNCk7DQorICBDbW9zMHgzNSA9IChV SU5UOClDbW9zUmVhZDgoMHgzNSk7DQorDQorICByZXR1cm4gKFVJTlQzMikoKChVSU5UTikoKENt b3MweDM1IDw8IDgpICsgQ21vczB4MzQpIDw8IDE2KSArIFNJWkVfMTZNQik7DQorfQ0KKw0KK1NU QVRJQw0KK1VJTlQ2NA0KK0dldFN5c3RlbU1lbW9yeVNpemVBYm92ZTRnYigNCisgIFZPSUQNCisp DQorew0KKyAgVUlOVDMyIFNpemU7DQorICBVSU5UTiAgQ21vc0luZGV4Ow0KKw0KKyAgLy8NCisg IC8vIENNT1MgMHg1Yi0weDVkIHNwZWNpZmllcyB0aGUgc3lzdGVtIG1lbW9yeSBhYm92ZSA0R0Ig TUIuDQorICAvLyAqIENNT1MoMHg1ZCkgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgc2l6ZSBieXRl DQorICAvLyAqIENNT1MoMHg1YykgaXMgdGhlIG1pZGRsZSBzaXplIGJ5dGUNCisgIC8vICogQ01P UygweDViKSBpcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgc2l6ZSBieXRlDQorICAvLyAqIFRoZSBz aXplIGlzIHNwZWNpZmllZCBpbiA2NGtiIGNodW5rcw0KKyAgLy8NCisNCisgIFNpemUgPSAwOw0K KyAgZm9yIChDbW9zSW5kZXggPSAweDVkOyBDbW9zSW5kZXggPj0gMHg1YjsgQ21vc0luZGV4LS0p IHsNCisgICAgU2l6ZSA9IChVSU5UMzIpKFNpemUgPDwgOCkgKyAoVUlOVDMyKUNtb3NSZWFkOChD bW9zSW5kZXgpOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIExTaGlmdFU2NChTaXplLCAxNik7DQorfQ0K Kw0KKy8qKg0KKyAgSW5zdGFsbHMgU01CSU9TIGluZm9ybWF0aW9uIGZvciBTSU1JQ1MgUVNQDQor DQorICBAcGFyYW0gSW1hZ2VIYW5kbGUgICAgIE1vZHVsZSdzIGltYWdlIGhhbmRsZQ0KKyAgQHBh cmFtIFN5c3RlbVRhYmxlICAgICBQb2ludGVyIG9mIEVGSV9TWVNURU1fVEFCTEUNCisNCisgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgU21iaW9zIGRhdGEgc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZA0K KyAgQHJldHZhbCBPdGhlciAgICAgICAgICBTbWJpb3MgZGF0YSB3YXMgbm90IGluc3RhbGxlZA0K Kw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitTbWJpb3NUYWJsZVB1Ymxpc2hFbnRyeSAo DQorICBJTiBFRklfSEFORExFICAgICAgICAgICBJbWFnZUhhbmRsZSwNCisgIElOIEVGSV9TWVNU RU1fVEFCTEUgICAgICpTeXN0ZW1UYWJsZQ0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAg ICAgICAgICAgU3RhdHVzOw0KKyAgRUZJX1NNQklPU19QUk9UT0NPTCAgICAgICAqU21iaW9zOw0K KyAgU01CSU9TX1RBQkxFX1RZUEUxOSAgICAgICAqVHlwZTE5UmVjb3JkOw0KKyAgRUZJX1NNQklP U19IQU5ETEUgICAgICAgICBNZW1BcnJheU1hcHBlZEFkZHJTbWJpb3NIYW5kbGU7DQorICBVSU5U OCAgICAgICAgICAgICAgICAgICAgIE51bVNsb3RzOw0KKyAgVUlOVDY0ICAgICAgICAgICAgICAg ICAgICBUb3RhbE1lbW9yeVNpemU7DQorDQorICAvLw0KKyAgLy8gRmluZCB0aGUgU01CSU9TIHBy b3RvY29sDQorICAvLw0KKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90b2NvbCAoDQorICAgICAg ICAgICAgICAgICAgJmdFZmlTbWJpb3NQcm90b2NvbEd1aWQsDQorICAgICAgICAgICAgICAgICAg TlVMTCwNCisgICAgICAgICAgICAgICAgICAoVk9JRCoqKSZTbWJpb3MNCisgICAgICAgICAgICAg ICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVz Ow0KKyAgfQ0KKyAgLy8NCisgIC8vIEdlbmVyYXRlIE1lbW9yeSBBcnJheSBNYXBwZWQgQWRkcmVz cyBpbmZvDQorICAvLw0KKyAgTnVtU2xvdHMgPSAyOw0KKyAgVG90YWxNZW1vcnlTaXplID0gMDsN CisgIFRvdGFsTWVtb3J5U2l6ZSA9IEdldFN5c3RlbU1lbW9yeVNpemVCZWxvdzRnYigpOw0KKyAg VHlwZTE5UmVjb3JkID0gQWxsb2NhdGVQb29sKHNpemVvZihTTUJJT1NfVEFCTEVfVFlQRTE5KSk7 DQorICBaZXJvTWVtKFR5cGUxOVJlY29yZCwgc2l6ZW9mKFNNQklPU19UQUJMRV9UWVBFMTkpKTsN CisgIFR5cGUxOVJlY29yZC0+SGRyLlR5cGUgPSBFRklfU01CSU9TX1RZUEVfTUVNT1JZX0FSUkFZ X01BUFBFRF9BRERSRVNTOw0KKyAgVHlwZTE5UmVjb3JkLT5IZHIuTGVuZ3RoID0gc2l6ZW9mKFNN QklPU19UQUJMRV9UWVBFMTkpOw0KKyAgVHlwZTE5UmVjb3JkLT5IZHIuSGFuZGxlID0gMDsNCisg IFR5cGUxOVJlY29yZC0+U3RhcnRpbmdBZGRyZXNzID0gMDsNCisgIFR5cGUxOVJlY29yZC0+RW5k aW5nQWRkcmVzcyA9IChVSU5UMzIpUlNoaWZ0VTY0KFRvdGFsTWVtb3J5U2l6ZSwgMTApIC0gMTsN CisgIFR5cGUxOVJlY29yZC0+TWVtb3J5QXJyYXlIYW5kbGUgPSBTTUJJT1NfSEFORExFX1BJX1JF U0VSVkVEOw0KKyAgVHlwZTE5UmVjb3JkLT5QYXJ0aXRpb25XaWR0aCA9IChVSU5UOCkoTnVtU2xv dHMpOw0KKw0KKyAgTWVtQXJyYXlNYXBwZWRBZGRyU21iaW9zSGFuZGxlID0gU01CSU9TX0hBTkRM RV9QSV9SRVNFUlZFRDsNCisgIFN0YXR1cyA9IFNtYmlvcy0+QWRkKFNtYmlvcywgTlVMTCwgJk1l bUFycmF5TWFwcGVkQWRkclNtYmlvc0hhbmRsZSwgKEVGSV9TTUJJT1NfVEFCTEVfSEVBREVSKilU eXBlMTlSZWNvcmQpOw0KKyAgQVNTRVJUX0VGSV9FUlJPUihTdGF0dXMpOw0KKw0KKyAgVG90YWxN ZW1vcnlTaXplID0gR2V0U3lzdGVtTWVtb3J5U2l6ZUFib3ZlNGdiKCk7DQorICBUeXBlMTlSZWNv cmQtPlN0YXJ0aW5nQWRkcmVzcyA9IDB4RkZGRkZGRkY7DQorICBUeXBlMTlSZWNvcmQtPkV4dGVu ZGVkU3RhcnRpbmdBZGRyZXNzID0gMHhGRkZGRkZGRjsNCisgIFR5cGUxOVJlY29yZC0+RXh0ZW5k ZWRFbmRpbmdBZGRyZXNzID0gVG90YWxNZW1vcnlTaXplICsgMHhGRkZGRkZGRiAtIDE7DQorDQor ICBNZW1BcnJheU1hcHBlZEFkZHJTbWJpb3NIYW5kbGUgPSBTTUJJT1NfSEFORExFX1BJX1JFU0VS VkVEOw0KKyAgU3RhdHVzID0gU21iaW9zLT5BZGQoU21iaW9zLCBOVUxMLCAmTWVtQXJyYXlNYXBw ZWRBZGRyU21iaW9zSGFuZGxlLCAoRUZJX1NNQklPU19UQUJMRV9IRUFERVIqKVR5cGUxOVJlY29y ZCk7DQorICBGcmVlUG9vbChUeXBlMTlSZWNvcmQpOw0KKyAgQVNTRVJUX0VGSV9FUlJPUihTdGF0 dXMpOw0KKw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50 ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0FjcGlUYWJsZXMvQWNwaVRhYmxlcy5pbmYgYi9QbGF0Zm9y bS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvQWNwaVRhYmxlcy9BY3BpVGFibGVzLmluZg0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLmI4ZDMyNmNkYjYNCi0tLSAvZGV2 L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9BY3BpVGFibGVz L0FjcGlUYWJsZXMuaW5mDQpAQCAtMCwwICsxLDMxIEBADQorIyMgQGZpbGUNCisjICBDb21wb25l bnQgZGVzY3JpcHRpb24gZmlsZSBmb3IgUGxhdGZvcm1BY3BpVGFibGVzIG1vZHVsZS4NCisjDQor IyAgQUNQSSB0YWJsZSBkYXRhIGFuZCBBU0wgc291cmNlcyByZXF1aXJlZCB0byBib290IHRoZSBw bGF0Zm9ybS4NCisjDQorIyBDb3B5cmlnaHQgKGMpIDIwMDggLSAyMDE5IEludGVsIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQorIw0KKyMgU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisjDQorIyMNCisNCitbRGVmaW5lc10NCisgIElO Rl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDUNCisgIEJBU0VfTkFNRSAg ICAgICAgICAgICAgICAgICAgICA9IFBsYXRmb3JtQWNwaVRhYmxlcw0KKyAgRklMRV9HVUlEICAg ICAgICAgICAgICAgICAgICAgID0gN0UzNzRFMjUtOEUwMS00RkVFLTg3RjItMzkwQzIzQzYwNkNE DQorICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBVU0VSX0RFRklORUQNCisgIFZF UlNJT05fU1RSSU5HICAgICAgICAgICAgICAgICA9IDEuMA0KKw0KKyMNCisjIFRoZSBmb2xsb3dp bmcgaW5mb3JtYXRpb24gaXMgZm9yIHJlZmVyZW5jZSBvbmx5IGFuZCBub3QgcmVxdWlyZWQgYnkg dGhlIGJ1aWxkIHRvb2xzLg0KKyMNCisjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAgICAgICA9 IElBMzIgWDY0IEVCQw0KKyMNCisNCitbU291cmNlc10NCisgIFBsYXRmb3JtLmgNCisgIERzZHQu YXNsDQorDQorW1BhY2thZ2VzXQ0KKyAgTWRlUGtnL01kZVBrZy5kZWMNCisNCmRpZmYgLS1naXQg YS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvQWNwaVRhYmxlcy9Ec2R0LmFzbCBi L1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9BY3BpVGFibGVzL0RzZHQuYXNsDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uOGE2YzM3OTJiYQ0KLS0tIC9k ZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0FjcGlUYWJs ZXMvRHNkdC5hc2wNCkBAIC0wLDAgKzEsODIxIEBADQorLyoqIEBmaWxlDQorICBDb250YWlucyBy b290IGxldmVsIG5hbWUgc3BhY2Ugb2JqZWN0cyBmb3IgdGhlIHBsYXRmb3JtDQorDQorICBDb3B5 cmlnaHQgKGMpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxC Uj4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQor KiovDQorDQorRGVmaW5pdGlvbkJsb2NrICgiRHNkdC5hbWwiLCAiRFNEVCIsIDEsICJJTlRFTCAi LCAiU0lNSUNTICAiLCA0KSB7DQorICAvLw0KKyAgLy8gU3lzdGVtIFNsZWVwIFN0YXRlcw0KKyAg Ly8NCisgIE5hbWUgKFxfUzMsIFBhY2thZ2UgKCkgezUsIDUsIDAsIDB9KQ0KKyAgTmFtZSAoXF9T NCwgUGFja2FnZSAoKSB7NiwgNiwgMCwgMH0pDQorICBOYW1lIChcX1M1LCBQYWNrYWdlICgpIHs3 LCA3LCAwLCAwfSkNCisNCisgIE5hbWUgKEdQSUMsIFplcm8pDQorICBNZXRob2QgKF9QSUMsIDEs IE5vdFNlcmlhbGl6ZWQpICAvLyBfUElDOiBJbnRlcnJ1cHQgTW9kZWwNCisgIHsNCisgICAgICBH UElDID0gQXJnMA0KKyAgfQ0KKyAgLy8NCisgIC8vICBTeXN0ZW0gQnVzDQorICAvLw0KKyAgU2Nv cGUgKFxfU0IpIHsNCisgICAgLy8NCisgICAgLy8gUENJIFJvb3QgQnJpZGdlDQorICAgIC8vDQor ICAgIERldmljZSAoUENJMCkgew0KKyAgICAgIE5hbWUgKF9ISUQsIEVJU0FJRCAoIlBOUDBBMDMi KSkNCisgICAgICBOYW1lIChfQURSLCAweDAwMDAwMDAwKQ0KKyAgICAgIE5hbWUgKF9CQk4sIDB4 MDApDQorICAgICAgTmFtZSAoX1VJRCwgMHgwMCkNCisNCisNCisgICAgICAvLyBDdXJyZW50IHJl c291cmNlIHNldHRpbmdzDQorICAgICAgTmFtZSAoX0NSUywgUmVzb3VyY2VUZW1wbGF0ZSAoKSB7 DQorICAgICAgICBXT1JEQnVzTnVtYmVyICggICAgICAgICAgLy8gQnVzIG51bWJlciByZXNvdXJj ZSAoMCk7IHRoZSBicmlkZ2UgcHJvZHVjZXMgYnVzIG51bWJlcnMgZm9yIGl0cyBzdWJzZXF1ZW50 IGJ1c2VzDQorICAgICAgICAgIFJlc291cmNlUHJvZHVjZXIsICAgICAgLy8gYml0IDAgb2YgZ2Vu ZXJhbCBmbGFncyBpcyAxDQorICAgICAgICAgIE1pbkZpeGVkLCAgICAgICAgICAgICAgLy8gUmFu Z2UgaXMgZml4ZWQNCisgICAgICAgICAgTWF4Rml4ZWQsICAgICAgICAgICAgICAvLyBSYW5nZSBp cyBmaXhlZA0KKyAgICAgICAgICBQb3NEZWNvZGUsICAgICAgICAgICAgIC8vIFBvc0RlY29kZQ0K KyAgICAgICAgICAweDAwMDAsICAgICAgICAgICAgICAgIC8vIEdyYW51bGFyaXR5DQorICAgICAg ICAgIDB4MDAwMCwgICAgICAgICAgICAgICAgLy8gTWluDQorICAgICAgICAgIDB4MDBGRiwgICAg ICAgICAgICAgICAgLy8gTWF4DQorICAgICAgICAgIDB4MDAwMCwgICAgICAgICAgICAgICAgLy8g VHJhbnNsYXRpb24NCisgICAgICAgICAgMHgwMTAwICAgICAgICAgICAgICAgICAvLyBSYW5nZSBM ZW5ndGggPSBNYXgtTWluKzENCisgICAgICAgICAgKQ0KKw0KKyAgICAgICAgSU8gKERlY29kZTE2 LCAweENGOCwgMHhDRjgsIDB4MDEsIDB4MDgpICAgICAgIC8vQ29uc3VtZWQgcmVzb3VyY2UgKDB4 Q0Y4LTB4Q0ZGKQ0KKw0KKyAgICAgICAgV09SRElPICggICAgICAgICAgICAgICAgIC8vIENvbnN1 bWVkLWFuZC1wcm9kdWNlZCByZXNvdXJjZSAoYWxsIEkvTyBiZWxvdyBDRjgpDQorICAgICAgICAg IFJlc291cmNlUHJvZHVjZXIsICAgICAgLy8gYml0IDAgb2YgZ2VuZXJhbCBmbGFncyBpcyAwDQor ICAgICAgICAgIE1pbkZpeGVkLCAgICAgICAgICAgICAgLy8gUmFuZ2UgaXMgZml4ZWQNCisgICAg ICAgICAgTWF4Rml4ZWQsICAgICAgICAgICAgICAvLyBSYW5nZSBpcyBmaXhlZA0KKyAgICAgICAg ICBQb3NEZWNvZGUsDQorICAgICAgICAgIEVudGlyZVJhbmdlLA0KKyAgICAgICAgICAweDAwMDAs ICAgICAgICAgICAgICAgIC8vIEdyYW51bGFyaXR5DQorICAgICAgICAgIDB4MDAwMCwgICAgICAg ICAgICAgICAgLy8gTWluDQorICAgICAgICAgIDB4MENGNywgICAgICAgICAgICAgICAgLy8gTWF4 DQorICAgICAgICAgIDB4MDAwMCwgICAgICAgICAgICAgICAgLy8gVHJhbnNsYXRpb24NCisgICAg ICAgICAgMHgwQ0Y4ICAgICAgICAgICAgICAgICAvLyBSYW5nZSBMZW5ndGgNCisgICAgICAgICAg KQ0KKw0KKyAgICAgICAgV09SRElPICggICAgICAgICAgICAgICAgIC8vIENvbnN1bWVkLWFuZC1w cm9kdWNlZCByZXNvdXJjZSAoYWxsIEkvTyBhYm92ZSBDRkYpDQorICAgICAgICAgIFJlc291cmNl UHJvZHVjZXIsICAgICAgLy8gYml0IDAgb2YgZ2VuZXJhbCBmbGFncyBpcyAwDQorICAgICAgICAg IE1pbkZpeGVkLCAgICAgICAgICAgICAgLy8gUmFuZ2UgaXMgZml4ZWQNCisgICAgICAgICAgTWF4 Rml4ZWQsICAgICAgICAgICAgICAvLyBSYW5nZSBpcyBmaXhlZA0KKyAgICAgICAgICBQb3NEZWNv ZGUsDQorICAgICAgICAgIEVudGlyZVJhbmdlLA0KKyAgICAgICAgICAweDAwMDAsICAgICAgICAg ICAgICAgIC8vIEdyYW51bGFyaXR5DQorICAgICAgICAgIDB4MEQwMCwgICAgICAgICAgICAgICAg Ly8gTWluDQorICAgICAgICAgIDB4RkZGRiwgICAgICAgICAgICAgICAgLy8gTWF4DQorICAgICAg ICAgIDB4MDAwMCwgICAgICAgICAgICAgICAgLy8gVHJhbnNsYXRpb24NCisgICAgICAgICAgMHhG MzAwICAgICAgICAgICAgICAgICAvLyBSYW5nZSBMZW5ndGgNCisgICAgICAgICAgKQ0KKw0KKyAg ICAgICAgRFdPUkRNRU1PUlkgKCAgICAgICAgICAgIC8vIERlc2NyaXB0b3IgZm9yIGxlZ2FjeSBW R0EgdmlkZW8gUkFNDQorICAgICAgICAgIFJlc291cmNlUHJvZHVjZXIsICAgICAgLy8gYml0IDAg b2YgZ2VuZXJhbCBmbGFncyBpcyAwDQorICAgICAgICAgIFBvc0RlY29kZSwNCisgICAgICAgICAg TWluRml4ZWQsICAgICAgICAgICAgICAvLyBSYW5nZSBpcyBmaXhlZA0KKyAgICAgICAgICBNYXhG aXhlZCwgICAgICAgICAgICAgIC8vIFJhbmdlIGlzIEZpeGVkDQorICAgICAgICAgIENhY2hlYWJs ZSwNCisgICAgICAgICAgUmVhZFdyaXRlLA0KKyAgICAgICAgICAweDAwMDAwMDAwLCAgICAgICAg ICAgIC8vIEdyYW51bGFyaXR5DQorICAgICAgICAgIDB4MDAwQTAwMDAsICAgICAgICAgICAgLy8g TWluDQorICAgICAgICAgIDB4MDAwQkZGRkYsICAgICAgICAgICAgLy8gTWF4DQorICAgICAgICAg IDB4MDAwMDAwMDAsICAgICAgICAgICAgLy8gVHJhbnNsYXRpb24NCisgICAgICAgICAgMHgwMDAy MDAwMCAgICAgICAgICAgICAvLyBSYW5nZSBMZW5ndGgNCisgICAgICAgICAgKQ0KKw0KKyAgICAg ICAgRFdPUkRNRU1PUlkgKCAgICAgICAgICAgIC8vIERlc2NyaXB0b3IgZm9yIDMyLWJpdCBNTUlP DQorICAgICAgICAgIFJlc291cmNlUHJvZHVjZXIsICAgICAgLy8gYml0IDAgb2YgZ2VuZXJhbCBm bGFncyBpcyAwDQorICAgICAgICAgIFBvc0RlY29kZSwNCisgICAgICAgICAgTWluRml4ZWQsICAg ICAgICAgICAgICAvLyBSYW5nZSBpcyBmaXhlZA0KKyAgICAgICAgICBNYXhGaXhlZCwgICAgICAg ICAgICAgIC8vIFJhbmdlIGlzIEZpeGVkDQorICAgICAgICAgIE5vbkNhY2hlYWJsZSwNCisgICAg ICAgICAgUmVhZFdyaXRlLA0KKyAgICAgICAgICAweDAwMDAwMDAwLCAgICAgICAgICAgIC8vIEdy YW51bGFyaXR5DQorICAgICAgICAgIDB4RjAwMDAwMDAsICAgICAgICAgICAgLy8gTWluDQorICAg ICAgICAgIDB4RkJGRkZGRkYsICAgICAgICAgICAgLy8gTWF4DQorICAgICAgICAgIDB4MDAwMDAw MDAsICAgICAgICAgICAgLy8gVHJhbnNsYXRpb24NCisgICAgICAgICAgMHgwQzAwMDAwMCwgICAg ICAgICAgICAvLyBSYW5nZSBMZW5ndGgNCisgICAgICAgICAgLCAgICAgICAgICAgICAgICAgICAg ICAvLyBSZXNvdXJjZVNvdXJjZUluZGV4DQorICAgICAgICAgICwgICAgICAgICAgICAgICAgICAg ICAgLy8gUmVzb3VyY2VTb3VyY2UNCisgICAgICAgICAgUFczMiAgICAgICAgICAgICAgICAgICAv LyBEZXNjcmlwdG9yTmFtZQ0KKyAgICAgICAgICApDQorICAgICAgfSkNCisNCisgICAgICAvLw0K KyAgICAgIC8vIFBDSSBJbnRlcnJ1cHQgUm91dGluZyBUYWJsZSAtIFBJQyBNb2RlIE9ubHkNCisg ICAgICAvLw0KKyAgICAgIC8vIElmIHlvdSBjaGFuZ2UgdGhlIElSUSBtYXBwaW5nIGhlcmUgeW91 IGFsc28gbmVlZA0KKyAgICAgIC8vIHRvIGNoYW5nZSB0aGUgbWFwcGluZyBpbiB0aGUgc291dGgg YnJpZGdlDQorICAgICAgLy8gKHBjaS1jb25mLnB5KSBhbmQgaW4gdGhlIEJJT1MuDQorICAgICAg Ly8gSU5UQSAtPiAweGEgKDEwKQ0KKyAgICAgIC8vIElOVEIgLT4gMHhiICgxMSkNCisgICAgICAv LyBJTlRDIC0+IDB4YSAoMTApDQorICAgICAgLy8gSU5URCAtPiAweGIgKDExKQ0KKw0KKyAgICAg ICBNZXRob2QgKF9QUlQsIDAsIE5vdFNlcmlhbGl6ZWQpIHsNCisgICAgICAgICAgIElmIChHUElD KSB7DQorICAgICAgICAgICAgIFJldHVybiAoQVIwMCkgLy8gQVBJQyBNb2RlDQorICAgICAgICAg ICB9DQorICAgICAgICAgICBSZXR1cm4gKFBSMDApIC8vIFBJQyBNb2RlDQorICAgICAgfQ0KKw0K KyAgICAgIE5hbWUgKFBSMDAsIFBhY2thZ2UoKXsNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsw eDAwMEZGRkYsIDB4MDAsIFxfU0IuUENJMC5MUEMuTE5LQSwgMHgwMH0sDQorICAgICAgICAgICAg UGFja2FnZSAoKSB7MHgwMDBGRkZGLCAweDAxLCBcX1NCLlBDSTAuTFBDLkxOS0IsIDB4MDB9LA0K KyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwRkZGRiwgMHgwMiwgXF9TQi5QQ0kwLkxQQy5M TktDLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMEZGRkYsIDB4MDMsIFxf U0IuUENJMC5MUEMuTE5LRCwgMHgwMH0sDQorDQorICAgICAgICAgICAgLy8NCisgICAgICAgICAg ICAvLyBCdXMgMCwgRGV2aWNlIDENCisgICAgICAgICAgICAvLw0KKyAgICAgICAgICAgIFBhY2th Z2UgKCkgezB4MDAwMUZGRkYsIDB4MDAsIFxfU0IuUENJMC5MUEMuTE5LQSwgMHgwMH0sDQorICAg ICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAxRkZGRiwgMHgwMSwgXF9TQi5QQ0kwLkxQQy5MTktC LCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFGRkZGLCAweDAyLCBcX1NC LlBDSTAuTFBDLkxOS0MsIDB4MDB9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwMUZG RkYsIDB4MDMsIFxfU0IuUENJMC5MUEMuTE5LRCwgMHgwMH0sDQorDQorICAgICAgICAgICAgUGFj a2FnZSAoKSB7MHgwMDAyRkZGRiwgMHgwMCwgXF9TQi5QQ0kwLkxQQy5MTktBLCAweDAwfSwNCisg ICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDJGRkZGLCAweDAxLCBcX1NCLlBDSTAuTFBDLkxO S0IsIDB4MDB9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwMkZGRkYsIDB4MDIsIFxf U0IuUENJMC5MUEMuTE5LQywgMHgwMH0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAy RkZGRiwgMHgwMywgXF9TQi5QQ0kwLkxQQy5MTktELCAweDAwfSwNCisgICAgICAgICAgICAvLw0K KyAgICAgICAgICAgIC8vIEJ1cyAwLCBEZXZpY2UgMw0KKyAgICAgICAgICAgIC8vDQorICAgICAg ICAgICAgUGFja2FnZSAoKSB7MHgwMDAzRkZGRiwgMHgwMCwgXF9TQi5QQ0kwLkxQQy5MTktBLCAw eDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDNGRkZGLCAweDAxLCBcX1NCLlBD STAuTFBDLkxOS0IsIDB4MDB9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwM0ZGRkYs IDB4MDIsIFxfU0IuUENJMC5MUEMuTE5LQywgMHgwMH0sDQorICAgICAgICAgICAgUGFja2FnZSAo KSB7MHgwMDAzRkZGRiwgMHgwMywgXF9TQi5QQ0kwLkxQQy5MTktELCAweDAwfSwNCisNCisgICAg ICAgICAgICBQYWNrYWdlICgpIHsweDAwMDRGRkZGLCAweDAwLCBcX1NCLlBDSTAuTFBDLkxOS0Es IDB4MDB9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwNEZGRkYsIDB4MDEsIFxfU0Iu UENJMC5MUEMuTE5LQiwgMHgwMH0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDA0RkZG RiwgMHgwMiwgXF9TQi5QQ0kwLkxQQy5MTktDLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdl ICgpIHsweDAwMDRGRkZGLCAweDAzLCBcX1NCLlBDSTAuTFBDLkxOS0QsIDB4MDB9LA0KKw0KKyAg ICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwNUZGRkYsIDB4MDAsIFxfU0IuUENJMC5MUEMuTE5L QSwgMHgwMH0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDA1RkZGRiwgMHgwMSwgXF9T Qi5QQ0kwLkxQQy5MTktCLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDVG RkZGLCAweDAyLCBcX1NCLlBDSTAuTFBDLkxOS0MsIDB4MDB9LA0KKyAgICAgICAgICAgIFBhY2th Z2UgKCkgezB4MDAwNUZGRkYsIDB4MDMsIFxfU0IuUENJMC5MUEMuTE5LRCwgMHgwMH0sDQorDQor ICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDA2RkZGRiwgMHgwMCwgXF9TQi5QQ0kwLkxQQy5M TktBLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDZGRkZGLCAweDAxLCBc X1NCLlBDSTAuTFBDLkxOS0IsIDB4MDB9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAw NkZGRkYsIDB4MDIsIFxfU0IuUENJMC5MUEMuTE5LQywgMHgwMH0sDQorICAgICAgICAgICAgUGFj a2FnZSAoKSB7MHgwMDA2RkZGRiwgMHgwMywgXF9TQi5QQ0kwLkxQQy5MTktELCAweDAwfSwNCisN CisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDdGRkZGLCAweDAwLCBcX1NCLlBDSTAuTFBD LkxOS0EsIDB4MDB9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwN0ZGRkYsIDB4MDEs IFxfU0IuUENJMC5MUEMuTE5LQiwgMHgwMH0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgw MDA3RkZGRiwgMHgwMiwgXF9TQi5QQ0kwLkxQQy5MTktDLCAweDAwfSwNCisgICAgICAgICAgICBQ YWNrYWdlICgpIHsweDAwMDdGRkZGLCAweDAzLCBcX1NCLlBDSTAuTFBDLkxOS0QsIDB4MDB9LA0K Kw0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwOEZGRkYsIDB4MDAsIFxfU0IuUENJMC5M UEMuTE5LQSwgMHgwMH0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDA4RkZGRiwgMHgw MSwgXF9TQi5QQ0kwLkxQQy5MTktCLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsw eDAwMDhGRkZGLCAweDAyLCBcX1NCLlBDSTAuTFBDLkxOS0MsIDB4MDB9LA0KKyAgICAgICAgICAg IFBhY2thZ2UgKCkgezB4MDAwOEZGRkYsIDB4MDMsIFxfU0IuUENJMC5MUEMuTE5LRCwgMHgwMH0s DQorDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDA5RkZGRiwgMHgwMCwgXF9TQi5QQ0kw LkxQQy5MTktBLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDlGRkZGLCAw eDAxLCBcX1NCLlBDSTAuTFBDLkxOS0IsIDB4MDB9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkg ezB4MDAwOUZGRkYsIDB4MDIsIFxfU0IuUENJMC5MUEMuTE5LQywgMHgwMH0sDQorICAgICAgICAg ICAgUGFja2FnZSAoKSB7MHgwMDA5RkZGRiwgMHgwMywgXF9TQi5QQ0kwLkxQQy5MTktELCAweDAw fSwNCisNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMEFGRkZGLCAweDAwLCBcX1NCLlBD STAuTFBDLkxOS0EsIDB4MDB9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwQUZGRkYs IDB4MDEsIFxfU0IuUENJMC5MUEMuTE5LQiwgMHgwMH0sDQorICAgICAgICAgICAgUGFja2FnZSAo KSB7MHgwMDBBRkZGRiwgMHgwMiwgXF9TQi5QQ0kwLkxQQy5MTktDLCAweDAwfSwNCisgICAgICAg ICAgICBQYWNrYWdlICgpIHsweDAwMEFGRkZGLCAweDAzLCBcX1NCLlBDSTAuTFBDLkxOS0QsIDB4 MDB9LA0KKw0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwQkZGRkYsIDB4MDAsIFxfU0Iu UENJMC5MUEMuTE5LQSwgMHgwMH0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDBCRkZG RiwgMHgwMSwgXF9TQi5QQ0kwLkxQQy5MTktCLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdl ICgpIHsweDAwMEJGRkZGLCAweDAyLCBcX1NCLlBDSTAuTFBDLkxOS0MsIDB4MDB9LA0KKyAgICAg ICAgICAgIFBhY2thZ2UgKCkgezB4MDAwQkZGRkYsIDB4MDMsIFxfU0IuUENJMC5MUEMuTE5LRCwg MHgwMH0sDQorDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDBDRkZGRiwgMHgwMCwgXF9T Qi5QQ0kwLkxQQy5MTktBLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMENG RkZGLCAweDAxLCBcX1NCLlBDSTAuTFBDLkxOS0IsIDB4MDB9LA0KKyAgICAgICAgICAgIFBhY2th Z2UgKCkgezB4MDAwQ0ZGRkYsIDB4MDIsIFxfU0IuUENJMC5MUEMuTE5LQywgMHgwMH0sDQorICAg ICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDBDRkZGRiwgMHgwMywgXF9TQi5QQ0kwLkxQQy5MTktE LCAweDAwfSwNCisNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMERGRkZGLCAweDAwLCBc X1NCLlBDSTAuTFBDLkxOS0EsIDB4MDB9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAw REZGRkYsIDB4MDEsIFxfU0IuUENJMC5MUEMuTE5LQiwgMHgwMH0sDQorICAgICAgICAgICAgUGFj a2FnZSAoKSB7MHgwMDBERkZGRiwgMHgwMiwgXF9TQi5QQ0kwLkxQQy5MTktDLCAweDAwfSwNCisg ICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMERGRkZGLCAweDAzLCBcX1NCLlBDSTAuTFBDLkxO S0QsIDB4MDB9LA0KKw0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwRUZGRkYsIDB4MDAs IFxfU0IuUENJMC5MUEMuTE5LQSwgMHgwMH0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgw MDBFRkZGRiwgMHgwMSwgXF9TQi5QQ0kwLkxQQy5MTktCLCAweDAwfSwNCisgICAgICAgICAgICBQ YWNrYWdlICgpIHsweDAwMEVGRkZGLCAweDAyLCBcX1NCLlBDSTAuTFBDLkxOS0MsIDB4MDB9LA0K KyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwRUZGRkYsIDB4MDMsIFxfU0IuUENJMC5MUEMu TE5LRCwgMHgwMH0sDQorDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDBGRkZGRiwgMHgw MCwgXF9TQi5QQ0kwLkxQQy5MTktBLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsw eDAwMEZGRkZGLCAweDAxLCBcX1NCLlBDSTAuTFBDLkxOS0IsIDB4MDB9LA0KKyAgICAgICAgICAg IFBhY2thZ2UgKCkgezB4MDAwRkZGRkYsIDB4MDIsIFxfU0IuUENJMC5MUEMuTE5LQywgMHgwMH0s DQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDBGRkZGRiwgMHgwMywgXF9TQi5QQ0kwLkxQ Qy5MTktELCAweDAwfSwNCisNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDEwRkZGRiwg MHgwMCwgXF9TQi5QQ0kwLkxQQy5MTktBLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgp IHsweDAwMDEwRkZGRiwgMHgwMSwgXF9TQi5QQ0kwLkxQQy5MTktCLCAweDAwfSwNCisgICAgICAg ICAgICBQYWNrYWdlICgpIHsweDAwMDEwRkZGRiwgMHgwMiwgXF9TQi5QQ0kwLkxQQy5MTktDLCAw eDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDEwRkZGRiwgMHgwMywgXF9TQi5Q Q0kwLkxQQy5MTktELCAweDAwfSwNCisNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDEx RkZGRiwgMHgwMCwgXF9TQi5QQ0kwLkxQQy5MTktBLCAweDAwfSwNCisgICAgICAgICAgICBQYWNr YWdlICgpIHsweDAwMDExRkZGRiwgMHgwMSwgXF9TQi5QQ0kwLkxQQy5MTktCLCAweDAwfSwNCisg ICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDExRkZGRiwgMHgwMiwgXF9TQi5QQ0kwLkxQQy5M TktDLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDExRkZGRiwgMHgwMywg XF9TQi5QQ0kwLkxQQy5MTktELCAweDAwfSwNCisNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsw eDAwMDEyRkZGRiwgMHgwMCwgXF9TQi5QQ0kwLkxQQy5MTktBLCAweDAwfSwNCisgICAgICAgICAg ICBQYWNrYWdlICgpIHsweDAwMDEyRkZGRiwgMHgwMSwgXF9TQi5QQ0kwLkxQQy5MTktCLCAweDAw fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDEyRkZGRiwgMHgwMiwgXF9TQi5QQ0kw LkxQQy5MTktDLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDEyRkZGRiwg MHgwMywgXF9TQi5QQ0kwLkxQQy5MTktELCAweDAwfSwNCisNCisgICAgICAgICAgICBQYWNrYWdl ICgpIHsweDAwMDEzRkZGRiwgMHgwMCwgXF9TQi5QQ0kwLkxQQy5MTktBLCAweDAwfSwNCisgICAg ICAgICAgICBQYWNrYWdlICgpIHsweDAwMDEzRkZGRiwgMHgwMSwgXF9TQi5QQ0kwLkxQQy5MTktC LCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDEzRkZGRiwgMHgwMiwgXF9T Qi5QQ0kwLkxQQy5MTktDLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDEz RkZGRiwgMHgwMywgXF9TQi5QQ0kwLkxQQy5MTktELCAweDAwfSwNCisNCisgICAgICAgICAgICBQ YWNrYWdlICgpIHsweDAwMDE0RkZGRiwgMHgwMCwgXF9TQi5QQ0kwLkxQQy5MTktBLCAweDAwfSwN CisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE0RkZGRiwgMHgwMSwgXF9TQi5QQ0kwLkxQ Qy5MTktCLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE0RkZGRiwgMHgw MiwgXF9TQi5QQ0kwLkxQQy5MTktDLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsw eDAwMDE0RkZGRiwgMHgwMywgXF9TQi5QQ0kwLkxQQy5MTktELCAweDAwfSwNCisNCisgICAgICAg ICAgICBQYWNrYWdlICgpIHsweDAwMDE1RkZGRiwgMHgwMCwgXF9TQi5QQ0kwLkxQQy5MTktBLCAw eDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE1RkZGRiwgMHgwMSwgXF9TQi5Q Q0kwLkxQQy5MTktCLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE1RkZG RiwgMHgwMiwgXF9TQi5QQ0kwLkxQQy5MTktDLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdl ICgpIHsweDAwMDE1RkZGRiwgMHgwMywgXF9TQi5QQ0kwLkxQQy5MTktELCAweDAwfSwNCisNCisg ICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE2RkZGRiwgMHgwMCwgXF9TQi5QQ0kwLkxQQy5M TktBLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE2RkZGRiwgMHgwMSwg XF9TQi5QQ0kwLkxQQy5MTktCLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAw MDE2RkZGRiwgMHgwMiwgXF9TQi5QQ0kwLkxQQy5MTktDLCAweDAwfSwNCisgICAgICAgICAgICBQ YWNrYWdlICgpIHsweDAwMDE2RkZGRiwgMHgwMywgXF9TQi5QQ0kwLkxQQy5MTktELCAweDAwfSwN CisNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE3RkZGRiwgMHgwMCwgXF9TQi5QQ0kw LkxQQy5MTktBLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE3RkZGRiwg MHgwMSwgXF9TQi5QQ0kwLkxQQy5MTktCLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgp IHsweDAwMDE3RkZGRiwgMHgwMiwgXF9TQi5QQ0kwLkxQQy5MTktDLCAweDAwfSwNCisgICAgICAg ICAgICBQYWNrYWdlICgpIHsweDAwMDE3RkZGRiwgMHgwMywgXF9TQi5QQ0kwLkxQQy5MTktELCAw eDAwfSwNCisNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE4RkZGRiwgMHgwMCwgXF9T Qi5QQ0kwLkxQQy5MTktBLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE4 RkZGRiwgMHgwMSwgXF9TQi5QQ0kwLkxQQy5MTktCLCAweDAwfSwNCisgICAgICAgICAgICBQYWNr YWdlICgpIHsweDAwMDE4RkZGRiwgMHgwMiwgXF9TQi5QQ0kwLkxQQy5MTktDLCAweDAwfSwNCisg ICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE4RkZGRiwgMHgwMywgXF9TQi5QQ0kwLkxQQy5M TktELCAweDAwfSwNCisNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFFRkZGRiwgMHgw MCwgXF9TQi5QQ0kwLkxQQy5MTktBLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsw eDAwMDFFRkZGRiwgMHgwMSwgXF9TQi5QQ0kwLkxQQy5MTktCLCAweDAwfSwNCisgICAgICAgICAg ICBQYWNrYWdlICgpIHsweDAwMDFFRkZGRiwgMHgwMiwgXF9TQi5QQ0kwLkxQQy5MTktDLCAweDAw fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFFRkZGRiwgMHgwMywgXF9TQi5QQ0kw LkxQQy5MTktELCAweDAwfSwNCisNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE5RkZG RiwgMHgwMCwgXF9TQi5QQ0kwLkxQQy5MTktBLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdl ICgpIHsweDAwMDE5RkZGRiwgMHgwMSwgXF9TQi5QQ0kwLkxQQy5MTktCLCAweDAwfSwNCisgICAg ICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE5RkZGRiwgMHgwMiwgXF9TQi5QQ0kwLkxQQy5MTktD LCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE5RkZGRiwgMHgwMywgXF9T Qi5QQ0kwLkxQQy5MTktELCAweDAwfSwNCisNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAw MDFBRkZGRiwgMHgwMCwgXF9TQi5QQ0kwLkxQQy5MTktBLCAweDAwfSwNCisgICAgICAgICAgICBQ YWNrYWdlICgpIHsweDAwMDFBRkZGRiwgMHgwMSwgXF9TQi5QQ0kwLkxQQy5MTktCLCAweDAwfSwN CisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFBRkZGRiwgMHgwMiwgXF9TQi5QQ0kwLkxQ Qy5MTktDLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFBRkZGRiwgMHgw MywgXF9TQi5QQ0kwLkxQQy5MTktELCAweDAwfSwNCisNCisgICAgICAgICAgICBQYWNrYWdlICgp IHsweDAwMDFCRkZGRiwgMHgwMCwgXF9TQi5QQ0kwLkxQQy5MTktBLCAweDAwfSwNCisgICAgICAg ICAgICBQYWNrYWdlICgpIHsweDAwMDFCRkZGRiwgMHgwMSwgXF9TQi5QQ0kwLkxQQy5MTktCLCAw eDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFCRkZGRiwgMHgwMiwgXF9TQi5Q Q0kwLkxQQy5MTktDLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFCRkZG RiwgMHgwMywgXF9TQi5QQ0kwLkxQQy5MTktELCAweDAwfSwNCisNCisgICAgICAgICAgICBQYWNr YWdlICgpIHsweDAwMDFDRkZGRiwgMHgwMCwgXF9TQi5QQ0kwLkxQQy5MTktBLCAweDAwfSwNCisg ICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFDRkZGRiwgMHgwMSwgXF9TQi5QQ0kwLkxQQy5M TktCLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFDRkZGRiwgMHgwMiwg XF9TQi5QQ0kwLkxQQy5MTktDLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAw MDFDRkZGRiwgMHgwMywgXF9TQi5QQ0kwLkxQQy5MTktELCAweDAwfSwNCisNCisgICAgICAgICAg ICBQYWNrYWdlICgpIHsweDAwMDFERkZGRiwgMHgwMCwgXF9TQi5QQ0kwLkxQQy5MTktBLCAweDAw fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFERkZGRiwgMHgwMSwgXF9TQi5QQ0kw LkxQQy5MTktCLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFERkZGRiwg MHgwMiwgXF9TQi5QQ0kwLkxQQy5MTktDLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgp IHsweDAwMDFERkZGRiwgMHgwMywgXF9TQi5QQ0kwLkxQQy5MTktELCAweDAwfSwNCisNCisgICAg ICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFGRkZGRiwgMHgwMCwgXF9TQi5QQ0kwLkxQQy5MTktB LCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFGRkZGRiwgMHgwMSwgXF9T Qi5QQ0kwLkxQQy5MTktCLCAweDAwfSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFG RkZGRiwgMHgwMiwgXF9TQi5QQ0kwLkxQQy5MTktDLCAweDAwfSwNCisgICAgICAgICAgICBQYWNr YWdlICgpIHsweDAwMDFGRkZGRiwgMHgwMywgXF9TQi5QQ0kwLkxQQy5MTktELCAweDAwfSwNCisg ICAgICAgICAgfQ0KKyAgICAgICAgKQ0KKw0KKyAgICAgIE5hbWUoQVIwMCwgUGFja2FnZSgpew0K Kw0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwRkZGRiwgMHgwMCwgMCwgMTZ9LA0KKyAg ICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwRkZGRiwgMHgwMSwgMCwgMTd9LA0KKyAgICAgICAg ICAgIFBhY2thZ2UgKCkgezB4MDAwRkZGRiwgMHgwMiwgMCwgMTh9LA0KKyAgICAgICAgICAgIFBh Y2thZ2UgKCkgezB4MDAwRkZGRiwgMHgwMywgMCwgMTl9LA0KKw0KKyAgICAgICAgICAgIC8vDQor ICAgICAgICAgICAgLy8gQnVzIDAsIERldmljZSAxDQorICAgICAgICAgICAgLy8NCisgICAgICAg ICAgICBQYWNrYWdlICgpIHsweDAwMDFGRkZGLCAweDAwLCAwLCAxNn0sDQorICAgICAgICAgICAg UGFja2FnZSAoKSB7MHgwMDAxRkZGRiwgMHgwMSwgMCwgMTd9LA0KKyAgICAgICAgICAgIFBhY2th Z2UgKCkgezB4MDAwMUZGRkYsIDB4MDIsIDAsIDE4fSwNCisgICAgICAgICAgICBQYWNrYWdlICgp IHsweDAwMDFGRkZGLCAweDAzLCAwLCAxOX0sDQorDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7 MHgwMDAyRkZGRiwgMHgwMCwgMCwgMTZ9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAw MkZGRkYsIDB4MDEsIDAsIDE3fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDJGRkZG LCAweDAyLCAwLCAxOH0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAyRkZGRiwgMHgw MywgMCwgMTl9LA0KKyAgICAgICAgICAgIC8vDQorICAgICAgICAgICAgLy8gQnVzIDAsIERldmlj ZSAzDQorICAgICAgICAgICAgLy8NCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDNGRkZG LCAweDAwLCAwLCAxNn0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAzRkZGRiwgMHgw MSwgMCwgMTd9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwM0ZGRkYsIDB4MDIsIDAs IDE4fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDNGRkZGLCAweDAzLCAwLCAxOX0s DQorDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDA0RkZGRiwgMHgwMCwgMCwgMTZ9LA0K KyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwNEZGRkYsIDB4MDEsIDAsIDE3fSwNCisgICAg ICAgICAgICBQYWNrYWdlICgpIHsweDAwMDRGRkZGLCAweDAyLCAwLCAxOH0sDQorICAgICAgICAg ICAgUGFja2FnZSAoKSB7MHgwMDA0RkZGRiwgMHgwMywgMCwgMTl9LA0KKw0KKyAgICAgICAgICAg IFBhY2thZ2UgKCkgezB4MDAwNUZGRkYsIDB4MDAsIDAsIDE2fSwNCisgICAgICAgICAgICBQYWNr YWdlICgpIHsweDAwMDVGRkZGLCAweDAxLCAwLCAxN30sDQorICAgICAgICAgICAgUGFja2FnZSAo KSB7MHgwMDA1RkZGRiwgMHgwMiwgMCwgMTh9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4 MDAwNUZGRkYsIDB4MDMsIDAsIDE5fSwNCisNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAw MDZGRkZGLCAweDAwLCAwLCAxNn0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDA2RkZG RiwgMHgwMSwgMCwgMTd9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwNkZGRkYsIDB4 MDIsIDAsIDE4fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDZGRkZGLCAweDAzLCAw LCAxOX0sDQorDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDA3RkZGRiwgMHgwMCwgMCwg MTZ9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwN0ZGRkYsIDB4MDEsIDAsIDE3fSwN CisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDdGRkZGLCAweDAyLCAwLCAxOH0sDQorICAg ICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDA3RkZGRiwgMHgwMywgMCwgMTl9LA0KKw0KKyAgICAg ICAgICAgIFBhY2thZ2UgKCkgezB4MDAwOEZGRkYsIDB4MDAsIDAsIDE2fSwNCisgICAgICAgICAg ICBQYWNrYWdlICgpIHsweDAwMDhGRkZGLCAweDAxLCAwLCAxN30sDQorICAgICAgICAgICAgUGFj a2FnZSAoKSB7MHgwMDA4RkZGRiwgMHgwMiwgMCwgMTh9LA0KKyAgICAgICAgICAgIFBhY2thZ2Ug KCkgezB4MDAwOEZGRkYsIDB4MDMsIDAsIDE5fSwNCisNCisgICAgICAgICAgICBQYWNrYWdlICgp IHsweDAwMDlGRkZGLCAweDAwLCAwLCAxNn0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgw MDA5RkZGRiwgMHgwMSwgMCwgMTd9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwOUZG RkYsIDB4MDIsIDAsIDE4fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDlGRkZGLCAw eDAzLCAwLCAxOX0sDQorDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDBBRkZGRiwgMHgw MCwgMCwgMTZ9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwQUZGRkYsIDB4MDEsIDAs IDE3fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMEFGRkZGLCAweDAyLCAwLCAxOH0s DQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDBBRkZGRiwgMHgwMywgMCwgMTl9LA0KKw0K KyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwQkZGRkYsIDB4MDAsIDAsIDE2fSwNCisgICAg ICAgICAgICBQYWNrYWdlICgpIHsweDAwMEJGRkZGLCAweDAxLCAwLCAxN30sDQorICAgICAgICAg ICAgUGFja2FnZSAoKSB7MHgwMDBCRkZGRiwgMHgwMiwgMCwgMTh9LA0KKyAgICAgICAgICAgIFBh Y2thZ2UgKCkgezB4MDAwQkZGRkYsIDB4MDMsIDAsIDE5fSwNCisNCisgICAgICAgICAgICBQYWNr YWdlICgpIHsweDAwMENGRkZGLCAweDAwLCAwLCAxNn0sDQorICAgICAgICAgICAgUGFja2FnZSAo KSB7MHgwMDBDRkZGRiwgMHgwMSwgMCwgMTd9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4 MDAwQ0ZGRkYsIDB4MDIsIDAsIDE4fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMENG RkZGLCAweDAzLCAwLCAxOX0sDQorDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDBERkZG RiwgMHgwMCwgMCwgMTZ9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwREZGRkYsIDB4 MDEsIDAsIDE3fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMERGRkZGLCAweDAyLCAw LCAxOH0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDBERkZGRiwgMHgwMywgMCwgMTl9 LA0KKw0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwRUZGRkYsIDB4MDAsIDAsIDE2fSwN CisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMEVGRkZGLCAweDAxLCAwLCAxN30sDQorICAg ICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDBFRkZGRiwgMHgwMiwgMEMsIDE4fSwNCisgICAgICAg ICAgICBQYWNrYWdlICgpIHsweDAwMEVGRkZGLCAweDAzLCAwLCAxOX0sDQorDQorICAgICAgICAg ICAgUGFja2FnZSAoKSB7MHgwMDBGRkZGRiwgMHgwMCwgMCwgMTZ9LA0KKyAgICAgICAgICAgIFBh Y2thZ2UgKCkgezB4MDAwRkZGRkYsIDB4MDEsIDAsIDE3fSwNCisgICAgICAgICAgICBQYWNrYWdl ICgpIHsweDAwMEZGRkZGLCAweDAyLCAwLCAxOH0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7 MHgwMDBGRkZGRiwgMHgwMywgMCwgMTl9LA0KKw0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4 MDAwMTBGRkZGLCAweDAwLCAwLCAxNn0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAx MEZGRkYsIDB4MDEsIDAsIDE3fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDEwRkZG RiwgMHgwMiwgMCwgMTh9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwMTBGRkZGLCAw eDAzLCAwLCAxOX0sDQorDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAxMUZGRkYsIDB4 MDAsIDAsIDE2fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDExRkZGRiwgMHgwMSwg MCwgMTd9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwMTFGRkZGLCAweDAyLCAwLCAx OH0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAxMUZGRkYsIDB4MDMsIDAsIDE5fSwN CisNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDEyRkZGRiwgMHgwMCwgMCwgMTZ9LA0K KyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwMTJGRkZGLCAweDAxLCAwLCAxN30sDQorICAg ICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAxMkZGRkYsIDB4MDIsIDAsIDE4fSwNCisgICAgICAg ICAgICBQYWNrYWdlICgpIHsweDAwMDEyRkZGRiwgMHgwMywgMCwgMTl9LA0KKw0KKyAgICAgICAg ICAgIFBhY2thZ2UgKCkgezB4MDAwMTNGRkZGLCAweDAwLCAwLCAxNn0sDQorICAgICAgICAgICAg UGFja2FnZSAoKSB7MHgwMDAxM0ZGRkYsIDB4MDEsIDAsIDE3fSwNCisgICAgICAgICAgICBQYWNr YWdlICgpIHsweDAwMDEzRkZGRiwgMHgwMiwgMCwgMTh9LA0KKyAgICAgICAgICAgIFBhY2thZ2Ug KCkgezB4MDAwMTNGRkZGLCAweDAzLCAwLCAxOX0sDQorDQorICAgICAgICAgICAgUGFja2FnZSAo KSB7MHgwMDAxNEZGRkYsIDB4MDAsIDAsIDE2fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsw eDAwMDE0RkZGRiwgMHgwMSwgMCwgMTd9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAw MTRGRkZGLCAweDAyLCAwLCAxOH0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAxNEZG RkYsIDB4MDMsIDAsIDE5fSwNCisNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE1RkZG RiwgMHgwMCwgMCwgMTZ9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwMTVGRkZGLCAw eDAxLCAwLCAxN30sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAxNUZGRkYsIDB4MDIs IDAsIDE4fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE1RkZGRiwgMHgwMywgMCwg MTl9LA0KKw0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwMTZGRkZGLCAweDAwLCAwLCAx Nn0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAxNkZGRkYsIDB4MDEsIDAsIDE3fSwN CisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE2RkZGRiwgMHgwMiwgMCwgMTh9LA0KKyAg ICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwMTZGRkZGLCAweDAzLCAwLCAxOX0sDQorDQorICAg ICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAxN0ZGRkYsIDB4MDAsIDAsIDE2fSwNCisgICAgICAg ICAgICBQYWNrYWdlICgpIHsweDAwMDE3RkZGRiwgMHgwMSwgMCwgMTd9LA0KKyAgICAgICAgICAg IFBhY2thZ2UgKCkgezB4MDAwMTdGRkZGLCAweDAyLCAwLCAxOH0sDQorICAgICAgICAgICAgUGFj a2FnZSAoKSB7MHgwMDAxN0ZGRkYsIDB4MDMsIDAsIDE5fSwNCisNCisgICAgICAgICAgICBQYWNr YWdlICgpIHsweDAwMDE4RkZGRiwgMHgwMCwgMCwgMTZ9LA0KKyAgICAgICAgICAgIFBhY2thZ2Ug KCkgezB4MDAwMThGRkZGLCAweDAxLCAwLCAxN30sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7 MHgwMDAxOEZGRkYsIDB4MDIsIDAsIDE4fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAw MDE4RkZGRiwgMHgwMywgMCwgMTl9LA0KKw0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAw MUVGRkZGLCAweDAwLCAwLCAxNn0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAxRUZG RkYsIDB4MDEsIDAsIDE3fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFFRkZGRiwg MHgwMiwgMCwgMTh9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwMUVGRkZGLCAweDAz LCAwLCAxOX0sDQorDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAxOUZGRkYsIDB4MDAs IDAsIDE2fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDE5RkZGRiwgMHgwMSwgMCwg MTd9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwMTlGRkZGLCAweDAyLCAwLCAxOH0s DQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAxOUZGRkYsIDB4MDMsIDAsIDE5fSwNCisN CisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFBRkZGRiwgMHgwMCwgMCwgMTZ9LA0KKyAg ICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwMUFGRkZGLCAweDAxLCAwLCAxN30sDQorICAgICAg ICAgICAgUGFja2FnZSAoKSB7MHgwMDAxQUZGRkYsIDB4MDIsIDAsIDE4fSwNCisgICAgICAgICAg ICBQYWNrYWdlICgpIHsweDAwMDFBRkZGRiwgMHgwMywgMCwgMTl9LA0KKw0KKyAgICAgICAgICAg IFBhY2thZ2UgKCkgezB4MDAwMUJGRkZGLCAweDAwLCAwLCAxNn0sDQorICAgICAgICAgICAgUGFj a2FnZSAoKSB7MHgwMDAxQkZGRkYsIDB4MDEsIDAsIDE3fSwNCisgICAgICAgICAgICBQYWNrYWdl ICgpIHsweDAwMDFCRkZGRiwgMHgwMiwgMCwgMTh9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkg ezB4MDAwMUJGRkZGLCAweDAzLCAwLCAxOX0sDQorDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7 MHgwMDAxQ0ZGRkYsIDB4MDAsIDAsIDE2fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAw MDFDRkZGRiwgMHgwMSwgMCwgMTd9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwMUNG RkZGLCAweDAyLCAwLCAxOH0sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAxQ0ZGRkYs IDB4MDMsIDAsIDE5fSwNCisNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFERkZGRiwg MHgwMCwgMCwgMTZ9LA0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwMURGRkZGLCAweDAx LCAwLCAxN30sDQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAxREZGRkYsIDB4MDIsIDAs IDE4fSwNCisgICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFERkZGRiwgMHgwMywgMCwgMTl9 LA0KKw0KKyAgICAgICAgICAgIFBhY2thZ2UgKCkgezB4MDAwMUZGRkZGLCAweDAwLCAwLCAxNn0s DQorICAgICAgICAgICAgUGFja2FnZSAoKSB7MHgwMDAxRkZGRkYsIDB4MDEsIDAsIDE3fSwNCisg ICAgICAgICAgICBQYWNrYWdlICgpIHsweDAwMDFGRkZGRiwgMHgwMiwgMCwgMTh9LA0KKyAgICAg ICAgICAgIFBhY2thZ2UgKCkgezB4MDAwMUZGRkZGLCAweDAzLCAwLCAxOX0sDQorICAgICAgICAg IH0NCisgICAgICAgICkNCisNCisgICAgICAvLw0KKyAgICAgIC8vIFBDSSB0byBJU0EgQnJpZGdl IChCdXMgMCwgRGV2aWNlIDcsIEZ1bmN0aW9uIDApDQorICAgICAgLy8NCisgICAgICBEZXZpY2Ug KExQQykgew0KKyAgICAgICAgTmFtZSAoX0FEUiwgMHgwMDFGMDAwMCkNCisNCisgICAgICAgIC8v DQorICAgICAgICAvLyBQQ0kgSW50ZXJydXB0IFJvdXRpbmcgQ29uZmlndXJhdGlvbiBSZWdpc3Rl cnMNCisgICAgICAgIC8vDQorICAgICAgICBPcGVyYXRpb25SZWdpb24gKFBSUjAsIFBDSV9Db25m aWcsIDB4NjAsIDB4MEMpDQorICAgICAgICBGaWVsZCAoUFJSMCwgQU5ZQUNDLCBOT0xPQ0ssIFBS RVNFUlZFKSB7DQorICAgICAgICAgIFBJUkEsIDgsDQorICAgICAgICAgIFBJUkIsIDgsDQorICAg ICAgICAgIFBJUkMsIDgsDQorICAgICAgICAgIFBJUkQsIDgsDQorICAgICAgICAgIE9mZnNldCAo MHgwNCksDQorICAgICAgICAgIFBJUkUsIDgsDQorICAgICAgICAgIFBJUkYsIDgsDQorICAgICAg ICAgIFBJUkcsIDgsDQorICAgICAgICAgIFBJUkgsIDgNCisgICAgICAgIH0NCisNCisgICAgICAg IC8vDQorICAgICAgICAvLyBfU1RBIG1ldGhvZCBmb3IgTE5LQSwgTE5LQiwgTE5LQywgTE5LRCwg TE5LRSwgTE5LRiwgTE5LRywgTE5LSA0KKyAgICAgICAgLy8NCisgICAgICAgIE1ldGhvZCAoUFNU QSwgMSwgTm90U2VyaWFsaXplZCkgew0KKyAgICAgICAgICBJZiAoQW5kIChBcmcwLCAweDgwKSkg ew0KKyAgICAgICAgICAgIFJldHVybiAoMHg5KQ0KKyAgICAgICAgICB9IEVsc2Ugew0KKyAgICAg ICAgICAgIFJldHVybiAoMHhCKQ0KKyAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAg ICAvLw0KKyAgICAgICAgLy8gX0RJUyBtZXRob2QgZm9yIExOS0EsIExOS0IsIExOS0MsIExOS0Qs IExOS0UsIExOS0YsIExOS0csIExOS0gNCisgICAgICAgIC8vDQorICAgICAgICBNZXRob2QgKFBE SVMsIDEsIE5vdFNlcmlhbGl6ZWQpIHsNCisgICAgICAgICAgT3IgKEFyZzAsIDB4ODAsIEFyZzAp DQorICAgICAgICB9DQorDQorICAgICAgICAvLw0KKyAgICAgICAgLy8gX0NSUyBtZXRob2QgZm9y IExOS0EsIExOS0IsIExOS0MsIExOS0QsIExOS0UsIExOS0YsIExOS0csIExOS0gNCisgICAgICAg IC8vDQorICAgICAgICBNZXRob2QgKFBDUlMsIDEsIE5vdFNlcmlhbGl6ZWQpIHsNCisgICAgICAg ICAgTmFtZSAoQlVGMCwgUmVzb3VyY2VUZW1wbGF0ZSAoKSB7SVJRIChMZXZlbCwgQWN0aXZlTG93 LCBTaGFyZWQpezB9fSkNCisgICAgICAgICAgLy8NCisgICAgICAgICAgLy8gRGVmaW5lIHJlZmVy ZW5jZXMgdG8gYnVmZmVyIGVsZW1lbnRzDQorICAgICAgICAgIC8vDQorICAgICAgICAgIENyZWF0 ZVdvcmRGaWVsZCAoQlVGMCwgMHgwMSwgSVJRVykgIC8vIElSUSBsb3cNCisgICAgICAgICAgLy8N CisgICAgICAgICAgLy8gV3JpdGUgY3VycmVudCBzZXR0aW5ncyBpbnRvIElSUSBkZXNjcmlwdG9y DQorICAgICAgICAgIC8vDQorICAgICAgICAgIElmIChBbmQgKEFyZzAsIDB4ODApKSB7DQorICAg ICAgICAgICAgU3RvcmUgKFplcm8sIExvY2FsMCkNCisgICAgICAgICAgfSBFbHNlIHsNCisgICAg ICAgICAgICBTdG9yZSAoT25lLCBMb2NhbDApDQorICAgICAgICAgIH0NCisgICAgICAgICAgLy8N CisgICAgICAgICAgLy8gU2hpZnQgMSBieSB2YWx1ZSBpbiByZWdpc3RlciA3MA0KKyAgICAgICAg ICAvLw0KKyAgICAgICAgICBTaGlmdExlZnQgKExvY2FsMCwgQW5kIChBcmcwLCAweDBGKSwgSVJR VykgICAvLyBTYXZlIGluIGJ1ZmZlcg0KKyAgICAgICAgICBSZXR1cm4gKEJVRjApICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gQnVmMA0KKyAgICAgICAgfQ0KKw0KKyAg ICAgICAgLy8NCisgICAgICAgIC8vIF9QUlMgcmVzb3VyY2UgZm9yIExOS0EsIExOS0IsIExOS0Ms IExOS0QsIExOS0UsIExOS0YsIExOS0csIExOS0gNCisgICAgICAgIC8vDQorICAgICAgICBOYW1l IChQUFJTLCBSZXNvdXJjZVRlbXBsYXRlICgpIHsNCisgICAgICAgICAgSVJRIChMZXZlbCwgQWN0 aXZlTG93LCBTaGFyZWQpIHszLCA0LCA1LCA3LCA5LCAxMCwgMTEsIDEyLCAxNCwgMTV9DQorICAg ICAgICB9KQ0KKw0KKyAgICAgICAgLy8NCisgICAgICAgIC8vIF9TUlMgbWV0aG9kIGZvciBMTktB LCBMTktCLCBMTktDLCBMTktELCBMTktFLCBMTktGLCBMTktHLCBMTktIDQorICAgICAgICAvLw0K KyAgICAgICAgTWV0aG9kIChQU1JTLCAyLCBOb3RTZXJpYWxpemVkKSB7DQorICAgICAgICAgIENy ZWF0ZVdvcmRGaWVsZCAoQXJnMSwgMHgwMSwgSVJRVykgICAgICAvLyBJUlEgbG93DQorICAgICAg ICAgIEZpbmRTZXRSaWdodEJpdCAoSVJRVywgTG9jYWwwKSAgICAgICAgICAvLyBTZXQgSVJRDQor ICAgICAgICAgIElmIChMTm90RXF1YWwgKElSUVcsIFplcm8pKSB7DQorICAgICAgICAgICAgQW5k IChMb2NhbDAsIDB4N0YsIExvY2FsMCkNCisgICAgICAgICAgICBEZWNyZW1lbnQgKExvY2FsMCkN CisgICAgICAgICAgfSBFbHNlIHsNCisgICAgICAgICAgICBPciAoTG9jYWwwLCAweDgwLCBMb2Nh bDApDQorICAgICAgICAgIH0NCisgICAgICAgICAgU3RvcmUgKExvY2FsMCwgQXJnMCkNCisgICAg ICAgIH0NCisNCisgICAgICAgIC8vDQorICAgICAgICAvLyBQQ0kgSVJRIExpbmsgQQ0KKyAgICAg ICAgLy8NCisgICAgICAgIERldmljZSAoTE5LQSkgew0KKyAgICAgICAgICBOYW1lIChfSElELCBF SVNBSUQoIlBOUDBDMEYiKSkNCisgICAgICAgICAgTmFtZSAoX1VJRCwgMSkNCisNCisgICAgICAg ICAgTWV0aG9kIChfU1RBLCAwLCBOb3RTZXJpYWxpemVkKSB7IFJldHVybiAoUFNUQSAoUElSQSkp IH0NCisgICAgICAgICAgTWV0aG9kIChfRElTLCAwLCBOb3RTZXJpYWxpemVkKSB7IFBESVMgKFBJ UkEpICB9DQorICAgICAgICAgIE1ldGhvZCAoX0NSUywgMCwgTm90U2VyaWFsaXplZCkgeyBSZXR1 cm4gKFBDUlMgKFBJUkEpKSB9DQorICAgICAgICAgIE1ldGhvZCAoX1BSUywgMCwgTm90U2VyaWFs aXplZCkgeyBSZXR1cm4gKFBQUlMpIH0NCisgICAgICAgICAgTWV0aG9kIChfU1JTLCAxLCBOb3RT ZXJpYWxpemVkKSB7IFBTUlMgKFBJUkEsIEFyZzApIH0NCisgICAgICAgIH0NCisNCisgICAgICAg IC8vDQorICAgICAgICAvLyBQQ0kgSVJRIExpbmsgQg0KKyAgICAgICAgLy8NCisgICAgICAgIERl dmljZSAoTE5LQikgew0KKyAgICAgICAgICBOYW1lIChfSElELCBFSVNBSUQoIlBOUDBDMEYiKSkN CisgICAgICAgICAgTmFtZSAoX1VJRCwgMikNCisNCisgICAgICAgICAgTWV0aG9kIChfU1RBLCAw LCBOb3RTZXJpYWxpemVkKSB7IFJldHVybiAoUFNUQSAoUElSQikpIH0NCisgICAgICAgICAgTWV0 aG9kIChfRElTLCAwLCBOb3RTZXJpYWxpemVkKSB7IFBESVMgKFBJUkIpIH0NCisgICAgICAgICAg TWV0aG9kIChfQ1JTLCAwLCBOb3RTZXJpYWxpemVkKSB7IFJldHVybiAoUENSUyAoUElSQikpIH0N CisgICAgICAgICAgTWV0aG9kIChfUFJTLCAwLCBOb3RTZXJpYWxpemVkKSB7IFJldHVybiAoUFBS UykgfQ0KKyAgICAgICAgICBNZXRob2QgKF9TUlMsIDEsIE5vdFNlcmlhbGl6ZWQpIHsgUFNSUyAo UElSQiwgQXJnMCkgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8NCisgICAgICAgIC8vIFBD SSBJUlEgTGluayBDDQorICAgICAgICAvLw0KKyAgICAgICAgRGV2aWNlIChMTktDKSB7DQorICAg ICAgICAgIE5hbWUgKF9ISUQsIEVJU0FJRCgiUE5QMEMwRiIpKQ0KKyAgICAgICAgICBOYW1lIChf VUlELCAzKQ0KKw0KKyAgICAgICAgICBNZXRob2QgKF9TVEEsIDAsIE5vdFNlcmlhbGl6ZWQpIHsg UmV0dXJuIChQU1RBIChQSVJDKSkgfQ0KKyAgICAgICAgICBNZXRob2QgKF9ESVMsIDAsIE5vdFNl cmlhbGl6ZWQpIHsgUERJUyAoUElSQykgfQ0KKyAgICAgICAgICBNZXRob2QgKF9DUlMsIDAsIE5v dFNlcmlhbGl6ZWQpIHsgUmV0dXJuIChQQ1JTIChQSVJDKSkgfQ0KKyAgICAgICAgICBNZXRob2Qg KF9QUlMsIDAsIE5vdFNlcmlhbGl6ZWQpIHsgUmV0dXJuIChQUFJTKSB9DQorICAgICAgICAgIE1l dGhvZCAoX1NSUywgMSwgTm90U2VyaWFsaXplZCkgeyBQU1JTIChQSVJDLCBBcmcwKSB9DQorICAg ICAgICB9DQorDQorICAgICAgICAvLw0KKyAgICAgICAgLy8gUENJIElSUSBMaW5rIEQNCisgICAg ICAgIC8vDQorICAgICAgICBEZXZpY2UgKExOS0QpIHsNCisgICAgICAgICAgTmFtZSAoX0hJRCwg RUlTQUlEKCJQTlAwQzBGIikpDQorICAgICAgICAgIE5hbWUgKF9VSUQsIDQpDQorDQorICAgICAg ICAgIE1ldGhvZCAoX1NUQSwgMCwgTm90U2VyaWFsaXplZCkgeyBSZXR1cm4gKFBTVEEgKFBJUkQp KSB9DQorICAgICAgICAgIE1ldGhvZCAoX0RJUywgMCwgTm90U2VyaWFsaXplZCkgeyBQRElTIChQ SVJEKSB9DQorICAgICAgICAgIE1ldGhvZCAoX0NSUywgMCwgTm90U2VyaWFsaXplZCkgeyBSZXR1 cm4gKFBDUlMgKFBJUkQpKSB9DQorICAgICAgICAgIE1ldGhvZCAoX1BSUywgMCwgTm90U2VyaWFs aXplZCkgeyBSZXR1cm4gKFBQUlMpIH0NCisgICAgICAgICAgTWV0aG9kIChfU1JTLCAxLCBOb3RT ZXJpYWxpemVkKSB7IFBTUlMgKFBJUkQsIEFyZzApIH0NCisgICAgICAgIH0NCisNCisgICAgICAg IC8vDQorICAgICAgICAvLyBQQ0kgSVJRIExpbmsgRQ0KKyAgICAgICAgLy8NCisgICAgICAgIERl dmljZSAoTE5LRSkgew0KKyAgICAgICAgICBOYW1lIChfSElELCBFSVNBSUQoIlBOUDBDMEYiKSkN CisgICAgICAgICAgTmFtZSAoX1VJRCwgNSkNCisNCisgICAgICAgICAgTWV0aG9kIChfU1RBLCAw LCBOb3RTZXJpYWxpemVkKSB7IFJldHVybiAoUFNUQSAoUElSRSkpIH0NCisgICAgICAgICAgTWV0 aG9kIChfRElTLCAwLCBOb3RTZXJpYWxpemVkKSB7IFBESVMgKFBJUkUpIH0NCisgICAgICAgICAg TWV0aG9kIChfQ1JTLCAwLCBOb3RTZXJpYWxpemVkKSB7IFJldHVybiAoUENSUyAoUElSRSkpIH0N CisgICAgICAgICAgTWV0aG9kIChfUFJTLCAwLCBOb3RTZXJpYWxpemVkKSB7IFJldHVybiAoUFBS UykgfQ0KKyAgICAgICAgICBNZXRob2QgKF9TUlMsIDEsIE5vdFNlcmlhbGl6ZWQpIHsgUFNSUyAo UElSRSwgQXJnMCkgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8NCisgICAgICAgIC8vIFBD SSBJUlEgTGluayBGDQorICAgICAgICAvLw0KKyAgICAgICAgRGV2aWNlIChMTktGKSB7DQorICAg ICAgICAgIE5hbWUgKF9ISUQsIEVJU0FJRCgiUE5QMEMwRiIpKQ0KKyAgICAgICAgICBOYW1lIChf VUlELCA2KQ0KKw0KKyAgICAgICAgICBNZXRob2QgKF9TVEEsIDAsIE5vdFNlcmlhbGl6ZWQpIHsg UmV0dXJuIChQU1RBIChQSVJGKSkgfQ0KKyAgICAgICAgICBNZXRob2QgKF9ESVMsIDAsIE5vdFNl cmlhbGl6ZWQpIHsgUERJUyAoUElSRikgfQ0KKyAgICAgICAgICBNZXRob2QgKF9DUlMsIDAsIE5v dFNlcmlhbGl6ZWQpIHsgUmV0dXJuIChQQ1JTIChQSVJGKSkgfQ0KKyAgICAgICAgICBNZXRob2Qg KF9QUlMsIDAsIE5vdFNlcmlhbGl6ZWQpIHsgUmV0dXJuIChQUFJTKSB9DQorICAgICAgICAgIE1l dGhvZCAoX1NSUywgMSwgTm90U2VyaWFsaXplZCkgeyBQU1JTIChQSVJGLCBBcmcwKSB9DQorICAg ICAgICB9DQorDQorICAgICAgICAvLw0KKyAgICAgICAgLy8gUENJIElSUSBMaW5rIEcNCisgICAg ICAgIC8vDQorICAgICAgICBEZXZpY2UgKExOS0cpIHsNCisgICAgICAgICAgTmFtZSAoX0hJRCwg RUlTQUlEKCJQTlAwQzBGIikpDQorICAgICAgICAgIE5hbWUgKF9VSUQsIDcpDQorDQorICAgICAg ICAgIE1ldGhvZCAoX1NUQSwgMCwgTm90U2VyaWFsaXplZCkgeyBSZXR1cm4gKFBTVEEgKFBJUkcp KSB9DQorICAgICAgICAgIE1ldGhvZCAoX0RJUywgMCwgTm90U2VyaWFsaXplZCkgeyBQRElTIChQ SVJHKSB9DQorICAgICAgICAgIE1ldGhvZCAoX0NSUywgMCwgTm90U2VyaWFsaXplZCkgeyBSZXR1 cm4gKFBDUlMgKFBJUkcpKSB9DQorICAgICAgICAgIE1ldGhvZCAoX1BSUywgMCwgTm90U2VyaWFs aXplZCkgeyBSZXR1cm4gKFBQUlMpIH0NCisgICAgICAgICAgTWV0aG9kIChfU1JTLCAxLCBOb3RT ZXJpYWxpemVkKSB7IFBTUlMgKFBJUkcsIEFyZzApIH0NCisgICAgICAgIH0NCisNCisgICAgICAg IC8vDQorICAgICAgICAvLyBQQ0kgSVJRIExpbmsgSA0KKyAgICAgICAgLy8NCisgICAgICAgIERl dmljZSAoTE5LSCkgew0KKyAgICAgICAgICBOYW1lIChfSElELCBFSVNBSUQoIlBOUDBDMEYiKSkN CisgICAgICAgICAgTmFtZSAoX1VJRCwgOCkNCisNCisgICAgICAgICAgTWV0aG9kIChfU1RBLCAw LCBOb3RTZXJpYWxpemVkKSB7IFJldHVybiAoUFNUQSAoUElSSCkpIH0NCisgICAgICAgICAgTWV0 aG9kIChfRElTLCAwLCBOb3RTZXJpYWxpemVkKSB7IFBESVMgKFBJUkgpIH0NCisgICAgICAgICAg TWV0aG9kIChfQ1JTLCAwLCBOb3RTZXJpYWxpemVkKSB7IFJldHVybiAoUENSUyAoUElSSCkpIH0N CisgICAgICAgICAgTWV0aG9kIChfUFJTLCAwLCBOb3RTZXJpYWxpemVkKSB7IFJldHVybiAoUFBS UykgfQ0KKyAgICAgICAgICBNZXRob2QgKF9TUlMsIDEsIE5vdFNlcmlhbGl6ZWQpIHsgUFNSUyAo UElSSCwgQXJnMCkgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8NCisgICAgICAgIC8vIFBy b2dyYW1tYWJsZSBJbnRlcnJ1cHQgQ29udHJvbGxlciAoUElDKQ0KKyAgICAgICAgLy8NCisgICAg ICAgIERldmljZShQSUMpIHsNCisgICAgICAgICAgTmFtZSAoX0hJRCwgRUlTQUlEICgiUE5QMDAw MCIpKQ0KKyAgICAgICAgICBOYW1lIChfQ1JTLCBSZXNvdXJjZVRlbXBsYXRlICgpIHsNCisgICAg ICAgICAgICBJTyAoRGVjb2RlMTYsIDB4MDIwLCAweDAyMCwgMHgwMCwgMHgwMikNCisgICAgICAg ICAgICBJTyAoRGVjb2RlMTYsIDB4MEEwLCAweDBBMCwgMHgwMCwgMHgwMikNCisgICAgICAgICAg ICBJTyAoRGVjb2RlMTYsIDB4NEQwLCAweDREMCwgMHgwMCwgMHgwMikNCisgICAgICAgICAgICBJ UlFOb0ZsYWdzICgpIHsyfQ0KKyAgICAgICAgICB9KQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAg Ly8NCisgICAgICAgIC8vIElTQSBETUENCisgICAgICAgIC8vDQorICAgICAgICBEZXZpY2UgKERN QUMpIHsNCisgICAgICAgICAgTmFtZSAoX0hJRCwgRUlTQUlEICgiUE5QMDIwMCIpKQ0KKyAgICAg ICAgICBOYW1lIChfQ1JTLCBSZXNvdXJjZVRlbXBsYXRlICgpIHsNCisgICAgICAgICAgICBJTyAo RGVjb2RlMTYsIDB4MDAsIDB4MDAsIDAsIDB4MTApDQorICAgICAgICAgICAgSU8gKERlY29kZTE2 LCAweDgxLCAweDgxLCAwLCAweDAzKQ0KKyAgICAgICAgICAgIElPIChEZWNvZGUxNiwgMHg4Nywg MHg4NywgMCwgMHgwMSkNCisgICAgICAgICAgICBJTyAoRGVjb2RlMTYsIDB4ODksIDB4ODksIDAs IDB4MDMpDQorICAgICAgICAgICAgSU8gKERlY29kZTE2LCAweDhmLCAweDhmLCAwLCAweDAxKQ0K KyAgICAgICAgICAgIElPIChEZWNvZGUxNiwgMHhjMCwgMHhjMCwgMCwgMHgyMCkNCisgICAgICAg ICAgICBETUEgKENvbXBhdGliaWxpdHksIE5vdEJ1c01hc3RlciwgVHJhbnNmZXI4KSB7NH0NCisg ICAgICAgICAgfSkNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vDQorICAgICAgICAvLyA4MjU0 IFRpbWVyDQorICAgICAgICAvLw0KKyAgICAgICAgRGV2aWNlKFRNUikgew0KKyAgICAgICAgICBO YW1lKF9ISUQsRUlTQUlEKCJQTlAwMTAwIikpDQorICAgICAgICAgIE5hbWUoX0NSUywgUmVzb3Vy Y2VUZW1wbGF0ZSAoKSB7DQorICAgICAgICAgICAgSU8gKERlY29kZTE2LCAweDQwLCAweDQwLCAw eDAwLCAweDA0KQ0KKyAgICAgICAgICAgIElSUU5vRmxhZ3MgKCkgezB9DQorICAgICAgICAgIH0p DQorICAgICAgICB9DQorDQorICAgICAgICAvLw0KKyAgICAgICAgLy8gUmVhbCBUaW1lIENsb2Nr DQorICAgICAgICAvLw0KKyAgICAgICAgRGV2aWNlIChSVEMpIHsNCisgICAgICAgICAgTmFtZSAo X0hJRCwgRUlTQUlEICgiUE5QMEIwMCIpKQ0KKyAgICAgICAgICBOYW1lIChfQ1JTLCBSZXNvdXJj ZVRlbXBsYXRlICgpIHsNCisgICAgICAgICAgICBJTyAoRGVjb2RlMTYsIDB4NzAsIDB4NzAsIDB4 MDAsIDB4MDIpDQorICAgICAgICAgICAgSVJRTm9GbGFncyAoKSB7OH0NCisgICAgICAgICAgfSkN CisgICAgICAgIH0NCisNCisgICAgICAgIC8vDQorICAgICAgICAvLyBQQ0FUIFNwZWFrZXINCisg ICAgICAgIC8vDQorICAgICAgICBEZXZpY2UoU1BLUikgew0KKyAgICAgICAgICBOYW1lIChfSElE LCBFSVNBSUQoIlBOUDA4MDAiKSkNCisgICAgICAgICAgTmFtZSAoX0NSUywgUmVzb3VyY2VUZW1w bGF0ZSAoKSB7DQorICAgICAgICAgICAgSU8gKERlY29kZTE2LCAweDYxLCAweDYxLCAweDAxLCAw eDAxKQ0KKyAgICAgICAgICB9KQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8NCisgICAgICAg IC8vIEZsb2F0aW5nIFBvaW50IENvcHJvY2Vzc29yDQorICAgICAgICAvLw0KKyAgICAgICAgRGV2 aWNlKEZQVSkgew0KKyAgICAgICAgICBOYW1lIChfSElELCBFSVNBSUQoIlBOUDBDMDQiKSkNCisg ICAgICAgICAgTmFtZSAoX0NSUywgUmVzb3VyY2VUZW1wbGF0ZSAoKSB7DQorICAgICAgICAgICAg SU8gKERlY29kZTE2LCAweEYwLCAweEYwLCAweDAwLCAweDEwKQ0KKyAgICAgICAgICAgIElSUU5v RmxhZ3MgKCkgezEzfQ0KKyAgICAgICAgICB9KQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8N CisgICAgICAgIC8vIEdlbmVyaWMgbW90aGVyYm9hcmQgZGV2aWNlcyBhbmQgcGllY2VzIHRoYXQg ZG9uJ3QgZml0IGFueXdoZXJlIGVsc2UNCisgICAgICAgIC8vDQorICAgICAgICBEZXZpY2UoWFRS QSkgew0KKyAgICAgICAgICBOYW1lIChfSElELCBFSVNBSUQgKCJQTlAwQzAyIikpDQorICAgICAg ICAgIE5hbWUgKF9VSUQsIDB4MDEpDQorICAgICAgICAgIE5hbWUgKF9DUlMsIFJlc291cmNlVGVt cGxhdGUgKCkgew0KKyAgICAgICAgICAgIElPIChEZWNvZGUxNiwgMHgwMTAsIDB4MDEwLCAweDAw LCAweDEwKQ0KKyAgICAgICAgICAgIElPIChEZWNvZGUxNiwgMHgwMjIsIDB4MDIyLCAweDAwLCAw eDFFKQ0KKyAgICAgICAgICAgIElPIChEZWNvZGUxNiwgMHgwNDQsIDB4MDQ0LCAweDAwLCAweDFD KQ0KKyAgICAgICAgICAgIElPIChEZWNvZGUxNiwgMHgwNjIsIDB4MDYyLCAweDAwLCAweDAyKQ0K KyAgICAgICAgICAgIElPIChEZWNvZGUxNiwgMHgwNjUsIDB4MDY1LCAweDAwLCAweDBCKQ0KKyAg ICAgICAgICAgIElPIChEZWNvZGUxNiwgMHgwNzIsIDB4MDcyLCAweDAwLCAweDBFKQ0KKyAgICAg ICAgICAgIElPIChEZWNvZGUxNiwgMHgwODAsIDB4MDgwLCAweDAwLCAweDAxKQ0KKyAgICAgICAg ICAgIElPIChEZWNvZGUxNiwgMHgwODQsIDB4MDg0LCAweDAwLCAweDAzKQ0KKyAgICAgICAgICAg IElPIChEZWNvZGUxNiwgMHgwODgsIDB4MDg4LCAweDAwLCAweDAxKQ0KKyAgICAgICAgICAgIElP IChEZWNvZGUxNiwgMHgwOGMsIDB4MDhjLCAweDAwLCAweDAzKQ0KKyAgICAgICAgICAgIElPIChE ZWNvZGUxNiwgMHgwOTAsIDB4MDkwLCAweDAwLCAweDEwKQ0KKyAgICAgICAgICAgIElPIChEZWNv ZGUxNiwgMHgwQTIsIDB4MEEyLCAweDAwLCAweDFFKQ0KKyAgICAgICAgICAgIElPIChEZWNvZGUx NiwgMHgwRTAsIDB4MEUwLCAweDAwLCAweDEwKQ0KKyAgICAgICAgICAgIElPIChEZWNvZGUxNiwg MHgxRTAsIDB4MUUwLCAweDAwLCAweDEwKQ0KKyAgICAgICAgICAgIElPIChEZWNvZGUxNiwgMHgx NjAsIDB4MTYwLCAweDAwLCAweDEwKQ0KKyAgICAgICAgICAgIElPIChEZWNvZGUxNiwgMHgyNzgs IDB4Mjc4LCAweDAwLCAweDA4KQ0KKyAgICAgICAgICAgIElPIChEZWNvZGUxNiwgMHgzNzAsIDB4 MzcwLCAweDAwLCAweDAyKQ0KKyAgICAgICAgICAgIElPIChEZWNvZGUxNiwgMHgzNzgsIDB4Mzc4 LCAweDAwLCAweDA4KQ0KKyAgICAgICAgICAgIElPIChEZWNvZGUxNiwgMHg0MDAsIDB4NDAwLCAw eDAwLCAweDQwKSAgICAgICAvLyBQTUJMSzENCisgICAgICAgICAgICBJTyAoRGVjb2RlMTYsIDB4 NDQwLCAweDQ0MCwgMHgwMCwgMHgxMCkNCisgICAgICAgICAgICBJTyAoRGVjb2RlMTYsIDB4Njc4 LCAweDY3OCwgMHgwMCwgMHgwOCkNCisgICAgICAgICAgICBJTyAoRGVjb2RlMTYsIDB4Nzc4LCAw eDc3OCwgMHgwMCwgMHgwOCkNCisgICAgICAgICAgICBNZW1vcnkzMkZpeGVkIChSZWFkT25seSwg MHhGRUMwMDAwMCwgMHgxMDAwKSAgLy8gSU8gQVBJQw0KKyAgICAgICAgICAgIE1lbW9yeTMyRml4 ZWQgKFJlYWRPbmx5LCAweEZFRTAwMDAwLCAweDEwMDAwMCkgLy8gTEFQSUMNCisgICAgICAgICAg fSkNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vDQorICAgICAgICAvLyBQUy8yIEtleWJvYXJk IGFuZCBQQy9BVCBFbmhhbmNlZCBLZXlib2FyZCAxMDEvMTAyDQorICAgICAgICAvLw0KKyAgICAg ICAgRGV2aWNlIChQUzJLKSB7DQorICAgICAgICAgIE5hbWUgKF9ISUQsIEVJU0FJRCAoIlBOUDAz MDMiKSkNCisgICAgICAgICAgTmFtZSAoX0NJRCwgRUlTQUlEICgiUE5QMDMwQiIpKQ0KKyAgICAg ICAgICBOYW1lKF9DUlMsUmVzb3VyY2VUZW1wbGF0ZSgpIHsNCisgICAgICAgICAgICBJTyAoRGVj b2RlMTYsIDB4NjAsIDB4NjAsIDB4MDAsIDB4MDEpDQorICAgICAgICAgICAgSU8gKERlY29kZTE2 LCAweDY0LCAweDY0LCAweDAwLCAweDAxKQ0KKyAgICAgICAgICAgIElSUU5vRmxhZ3MgKCkgezF9 DQorICAgICAgICAgIH0pDQorICAgICAgICB9DQorDQorICAgICAgICAvLw0KKyAgICAgICAgLy8g UFMvMiBNb3VzZSBhbmQgTWljcm9zb2Z0IE1vdXNlDQorICAgICAgICAvLw0KKyAgICAgICAgRGV2 aWNlIChQUzJNKSB7ICAvLyBQUy8yIHN0eXBlIG1vdXNlIHBvcnQNCisgICAgICAgICAgTmFtZSAo X0hJRCwgRUlTQUlEICgiUE5QMEYwMyIpKQ0KKyAgICAgICAgICBOYW1lIChfQ0lELCBFSVNBSUQg KCJQTlAwRjEzIikpDQorICAgICAgICAgIE5hbWUgKF9DUlMsIFJlc291cmNlVGVtcGxhdGUoKSB7 DQorICAgICAgICAgICAgSVJRTm9GbGFncyAoKSB7MTJ9DQorICAgICAgICAgIH0pDQorICAgICAg ICB9DQorDQorICAgICAgICAvLw0KKyAgICAgICAgLy8gVUFSVCBTZXJpYWwgUG9ydCAtIENPTTEN CisgICAgICAgIC8vDQorICAgICAgICBEZXZpY2UgKFVBUjEpIHsNCisgICAgICAgICAgTmFtZSAo X0hJRCwgRUlTQUlEICgiUE5QMDUwMSIpKQ0KKyAgICAgICAgICBOYW1lIChfREROLCAiQ09NMSIp DQorICAgICAgICAgIE5hbWUgKF9VSUQsIDB4MDEpDQorICAgICAgICAgIE5hbWUoX0NSUyxSZXNv dXJjZVRlbXBsYXRlKCkgew0KKyAgICAgICAgICAgIElPIChEZWNvZGUxNiwgMHgzRjgsIDB4M0Y4 LCAweDAwLCAweDA4KQ0KKyAgICAgICAgICAgIElSUSAoRWRnZSwgQWN0aXZlSGlnaCwgRXhjbHVz aXZlLCApIHs0fQ0KKyAgICAgICAgICB9KQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8NCisg ICAgICAgIC8vIFVBUlQgU2VyaWFsIFBvcnQgLSBDT00yDQorICAgICAgICAvLw0KKyAgICAgICAg RGV2aWNlIChVQVIyKSB7DQorICAgICAgICAgIE5hbWUgKF9ISUQsIEVJU0FJRCAoIlBOUDA1MDEi KSkNCisgICAgICAgICAgTmFtZSAoX0RETiwgIkNPTTIiKQ0KKyAgICAgICAgICBOYW1lIChfVUlE LCAweDAyKQ0KKyAgICAgICAgICBOYW1lKF9DUlMsUmVzb3VyY2VUZW1wbGF0ZSgpIHsNCisgICAg ICAgICAgICBJTyAoRGVjb2RlMTYsIDB4MkY4LCAweDJGOCwgMHgwMCwgMHgwOCkNCisgICAgICAg ICAgICBJUlEgKEVkZ2UsIEFjdGl2ZUhpZ2gsIEV4Y2x1c2l2ZSwgKSB7M30NCisgICAgICAgICAg fSkNCisgICAgICAgIH0NCisgICAgICB9DQorCX0NCisgIH0NCit9DQpkaWZmIC0tZ2l0IGEvUGxh dGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0FjcGlUYWJsZXMvUGxhdGZvcm0uaCBiL1Bs YXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9BY3BpVGFibGVzL1BsYXRmb3JtLmgNCm5l dyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi42YTRmY2IxNzJiDQotLS0gL2Rl di9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvQWNwaVRhYmxl cy9QbGF0Zm9ybS5oDQpAQCAtMCwwICsxLDc1IEBADQorLyoqIEBmaWxlDQorICBQbGF0Zm9ybSBz cGVjaWZpYyBkZWZpbmVzIGZvciBjb25zdHJ1Y3RpbmcgQUNQSSB0YWJsZXMNCisNCisgIENvcHly aWdodCAoYykgMjAxMyAtIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuIDxCUj4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0 ZW50DQorKiovDQorDQorI2lmbmRlZiBfQUNQSV9QTEFURk9STV9IXw0KKyNkZWZpbmUgX0FDUElf UExBVEZPUk1fSF8NCisNCisjaW5jbHVkZSA8UGlEeGUuaD4NCisjaW5jbHVkZSA8SW5kdXN0cnlT dGFuZGFyZC9BY3BpLmg+DQorDQorLy8NCisvLyBBQ1BJIHRhYmxlIGluZm9ybWF0aW9uIHVzZWQg dG8gaW5pdGlhbGl6ZSB0YWJsZXMuDQorLy8NCisjZGVmaW5lIEVGSV9BQ1BJX09FTV9JRCAgICAg ICAgICAgJ1MnLCdJJywnTScsJ0knLCdDJywnUycgICAvLyBPRU1JRCA2IGJ5dGVzIGxvbmcNCisj ZGVmaW5lIEVGSV9BQ1BJX09FTV9UQUJMRV9JRCAgICAgU0lHTkFUVVJFXzY0KCdTJywnSScsJ00n LCdJJywnQycsJ1MnLCdUJywnQicpIC8vIE9FTSB0YWJsZSBpZCA4IGJ5dGVzIGxvbmcNCisjZGVm aW5lIEVGSV9BQ1BJX09FTV9SRVZJU0lPTiAgICAgMHgwMjAwMDgyMA0KKyNkZWZpbmUgRUZJX0FD UElfQ1JFQVRPUl9JRCAgICAgICBTSUdOQVRVUkVfMzIoJ1EnLCdTJywnUCcsJyAnKQ0KKyNkZWZp bmUgRUZJX0FDUElfQ1JFQVRPUl9SRVZJU0lPTiAweDAwMDAwMDk3DQorDQorI2RlZmluZSBJTlRf TU9ERUwgICAgICAgMHgwMQ0KKyNkZWZpbmUgU0NJX0lOVF9WRUNUT1IgIDB4MDAwOQ0KKyNkZWZp bmUgU01JX0NNRF9JT19QT1JUIDB4QjINCisjZGVmaW5lIEFDUElfRU5BQkxFICAgICAweDBFMQ0K KyNkZWZpbmUgQUNQSV9ESVNBQkxFICAgIDB4MDFFDQorI2RlZmluZSBTNEJJT1NfUkVRICAgICAg MHgwMA0KKyNkZWZpbmUgUE0xYV9FVlRfQkxLICAgIDB4MDAwMDA0MDANCisjZGVmaW5lIFBNMWJf RVZUX0JMSyAgICAweDAwMDAwMDAwDQorI2RlZmluZSBQTTFhX0NOVF9CTEsgICAgMHgwMDAwMDQw NA0KKyNkZWZpbmUgUE0xYl9DTlRfQkxLICAgIDB4MDAwMDAwMDANCisjZGVmaW5lIFBNMl9DTlRf QkxLICAgICAweDAwMDAwNDUwDQorI2RlZmluZSBQTV9UTVJfQkxLICAgICAgMHgwMDAwMDQwOA0K KyNkZWZpbmUgR1BFMF9CTEsgICAgICAgIDB4MDAwMDA0MjANCisjZGVmaW5lIEdQRTFfQkxLICAg ICAgICAweDAwMDAwMDAwDQorI2RlZmluZSBQTTFfRVZUX0xFTiAgICAgMHgwNA0KKyNkZWZpbmUg UE0xX0NOVF9MRU4gICAgIDB4MDQNCisjZGVmaW5lIFBNMl9DTlRfTEVOICAgICAweDAxDQorI2Rl ZmluZSBQTV9UTV9MRU4gICAgICAgMHgwNA0KKyNkZWZpbmUgR1BFMF9CTEtfTEVOICAgIDB4MTAN CisjZGVmaW5lIEdQRTFfQkxLX0xFTiAgICAweDAwDQorI2RlZmluZSBHUEUxX0JBU0UgICAgICAg MHgwMA0KKyNkZWZpbmUgUkVTRVJWRUQgICAgICAgIDB4MDANCisjZGVmaW5lIFBfTFZMMl9MQVQg ICAgICAweDAwNjUNCisjZGVmaW5lIFBfTFZMM19MQVQgICAgICAweDAzRTkNCisjZGVmaW5lIEZM VVNIX1NJWkUgICAgICAweDA0MDANCisjZGVmaW5lIEZMVVNIX1NUUklERSAgICAweDAwMTANCisj ZGVmaW5lIERVVFlfT0ZGU0VUICAgICAweDAwDQorI2RlZmluZSBEVVRZX1dJRFRIICAgICAgMHgw MA0KKyNkZWZpbmUgREFZX0FMUk0gICAgICAgIDB4MEQNCisjZGVmaW5lIE1PTl9BTFJNICAgICAg ICAweDAwDQorI2RlZmluZSBDRU5UVVJZICAgICAgICAgMHgwMA0KKyNkZWZpbmUgRkxBRyAgICAg ICAgICAgIChFRklfQUNQSV8yXzBfV0JJTlZEIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAg ICBFRklfQUNQSV8yXzBfUFJPQ19DMSB8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgRUZJ X0FDUElfMl8wX1NMUF9CVVRUT04gfCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9B Q1BJXzJfMF9SVENfUzQgfCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9BQ1BJXzJf MF9SRVNFVF9SRUdfU1VQKQ0KKyNkZWZpbmUgUkVTRVRfUkVHICAgICAgIDB4Q0Y5DQorI2RlZmlu ZSBSRVNFVF9WQUxVRSAgICAgKEJJVDIgfCBCSVQxKSAvLyBQSUlYMyBSZXNldCBDUFUgKyBTeXN0 ZW0gUmVzZXQNCisNCisvLw0KKy8vIEJ5dGUtYWxpZ25lZCBJTyBwb3J0IHJlZ2lzdGVyIGJsb2Nr IGluaXRpYWxpemVyIGZvcg0KKy8vIEVGSV9BQ1BJXzJfMF9HRU5FUklDX0FERFJFU1NfU1RSVUNU VVJFDQorLy8NCisjZGVmaW5lIEdBUzJfSU8oQmFzZSwgU2l6ZSkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXA0KKyAgICAgICAgICBFRklfQUNQSV8yXzBfU1lTVEVNX0lPLCAvKiBBZGRy ZXNzU3BhY2VJZCAgICAqLyBcDQorICAgICAgICAgIChTaXplKSAqIDgsICAgICAgICAgICAgIC8q IFJlZ2lzdGVyQml0V2lkdGggICovIFwNCisgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAg ICAgLyogUmVnaXN0ZXJCaXRPZmZzZXQgKi8gXA0KKyAgICAgICAgICAwLCAgICAgICAgICAgICAg ICAgICAgICAvKiBSZXNlcnZlZCAgICAgICAgICAqLyBcDQorICAgICAgICAgIChCYXNlKSAgICAg ICAgICAgICAgICAgIC8qIEFkZHJlc3MgICAgICAgICAgICovIFwNCisgICAgICAgICAgfQ0KKw0K KyNlbmRpZg0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9J bmNsdWRlL0d1aWQvU2ltaWNzQm9hcmRDb25maWcuaCBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09w ZW5Cb2FyZFBrZy9JbmNsdWRlL0d1aWQvU2ltaWNzQm9hcmRDb25maWcuaA0KbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLmRmYmIxYzBmM2MNCi0tLSAvZGV2L251bGwNCisr KyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9JbmNsdWRlL0d1aWQvU2ltaWNz Qm9hcmRDb25maWcuaA0KQEAgLTAsMCArMSwxNyBAQA0KKy8qKiBAZmlsZQ0KKyAgR1VJRCBmb3Ig VUVGSSB2YXJpYWJsZXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gU2ltaWNzIEJvYXJkIGNvbmZpZ3Vy YXRpb24uDQorDQorICBDb3B5cmlnaHQgKEMpIDIwMTQsIFJlZCBIYXQsIEluYy4NCisNCisgIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiovDQorDQorI2lm bmRlZiBfX1NJTUlDU19CT0FSRF9DT05GSUdfSF9fDQorI2RlZmluZSBfX1NJTUlDU19CT0FSRF9D T05GSUdfSF9fDQorDQorI2RlZmluZSBTSU1JQ1NfQk9BUkRfQ09ORklHX0dVSUQgXA0KK3sweDhh MzE4ZTAwLCAweGZhZjUsIDB4NDk5ZiwgeyAweDkxLDB4NzUsIDB4Y2UsIDB4NGQsIDB4OGQsIDB4 YTYsIDB4NzAsIDB4YWV9fQ0KKw0KK2V4dGVybiBFRklfR1VJRCBnU2ltaWNzQm9hcmRDb25maWdH dWlkOw0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5C b2FyZFBrZy9JbmNsdWRlL0luZHVzdHJ5U3RhbmRhcmQvSTQ0MEZ4UGlpeDQuaCBiL1BsYXRmb3Jt L0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9JbmNsdWRlL0luZHVzdHJ5U3RhbmRhcmQvSTQ0MEZ4 UGlpeDQuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLmU3ZDdmZGUx NGMNCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBr Zy9JbmNsdWRlL0luZHVzdHJ5U3RhbmRhcmQvSTQ0MEZ4UGlpeDQuaA0KQEAgLTAsMCArMSw0OSBA QA0KKy8qKiBAZmlsZQ0KKyAgVmFyaW91cyByZWdpc3RlciBudW1iZXJzIGFuZCB2YWx1ZSBiaXRz IGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgcHVibGljYXRpb25zOg0KKyAgLSBJbnRlbChSKSBkYXRh c2hlZXQgMjkwNTQ5LTAwMQ0KKyAgLSBJbnRlbChSKSBkYXRhc2hlZXQgMjkwNTYyLTAwMQ0KKyAg LSBJbnRlbChSKSBkYXRhc2hlZXQgMjk3NjU0LTAwNg0KKyAgLSBJbnRlbChSKSBkYXRhc2hlZXQg Mjk3NzM4LTAxNw0KKw0KKyAgQ29weXJpZ2h0IChDKSAyMDE1LCBSZWQgSGF0LCBJbmMuDQorICBD b3B5cmlnaHQgKGMpIDIwMTQsIEdhYnJpZWwgTC4gU29tbG8gPHNvbWxvQGNtdS5lZHU+DQorDQor ICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyoqLw0KKw0K KyNpZm5kZWYgX19JNDQwRlhfUElJWDRfSF9fDQorI2RlZmluZSBfX0k0NDBGWF9QSUlYNF9IX18N CisNCisjaW5jbHVkZSA8TGlicmFyeS9QY2lMaWIuaD4NCisNCisvLw0KKy8vIEhvc3QgQnJpZGdl IERldmljZSBJRCAoRElEKSB2YWx1ZSBmb3IgSTQ0MEZYDQorLy8NCisjZGVmaW5lIElOVEVMXzgy NDQxX0RFVklDRV9JRCAweDEyMzcNCisNCisvLw0KKy8vIEIvRC9GL1R5cGU6IDAvMC8wL1BDSQ0K Ky8vDQorI2RlZmluZSBQTUNfUkVHSVNURVJfUElJWDQoT2Zmc2V0KSBQQ0lfTElCX0FERFJFU1Mg KDAsIDAsIDAsIChPZmZzZXQpKQ0KKw0KKyNkZWZpbmUgUElJWDRfUEFNMCAgICAgICAgICAgICAg MHg1OQ0KKyNkZWZpbmUgUElJWDRfUEFNMSAgICAgICAgICAgICAgMHg1QQ0KKyNkZWZpbmUgUElJ WDRfUEFNMiAgICAgICAgICAgICAgMHg1Qg0KKyNkZWZpbmUgUElJWDRfUEFNMyAgICAgICAgICAg ICAgMHg1Qw0KKyNkZWZpbmUgUElJWDRfUEFNNCAgICAgICAgICAgICAgMHg1RA0KKyNkZWZpbmUg UElJWDRfUEFNNSAgICAgICAgICAgICAgMHg1RQ0KKyNkZWZpbmUgUElJWDRfUEFNNiAgICAgICAg ICAgICAgMHg1Rg0KKw0KKy8vDQorLy8gQi9EL0YvVHlwZTogMC8xLzMvUENJDQorLy8NCisjZGVm aW5lIFBPV0VSX01HTVRfUkVHSVNURVJfUElJWDQoT2Zmc2V0KSBQQ0lfTElCX0FERFJFU1MgKDAs IDEsIDMsIChPZmZzZXQpKQ0KKw0KKyNkZWZpbmUgUElJWDRfUE1CQSAgICAgICAgICAgICAweDQw DQorI2RlZmluZSBQSUlYNF9QTUJBX01BU0sgICAgICAgICAgKEJJVDE1IHwgQklUMTQgfCBCSVQx MyB8IEJJVDEyIHwgQklUMTEgfCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEJJVDEwIHwgQklUOSAgfCBCSVQ4ICB8IEJJVDcgIHwgQklUNikNCisNCisjZGVmaW5lIFBJSVg0 X1BNUkVHTUlTQyAgICAgICAgMHg4MA0KKyNkZWZpbmUgUElJWDRfUE1SRUdNSVNDX1BNSU9TRSAg IEJJVDANCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVu Qm9hcmRQa2cvSW5jbHVkZS9JbmR1c3RyeVN0YW5kYXJkL0xpbnV4QnpJbWFnZS5oIGIvUGxhdGZv cm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0luY2x1ZGUvSW5kdXN0cnlTdGFuZGFyZC9MaW51 eEJ6SW1hZ2UuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLjU4YTQ5 ZTQ3YmUNCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2Fy ZFBrZy9JbmNsdWRlL0luZHVzdHJ5U3RhbmRhcmQvTGludXhCekltYWdlLmgNCkBAIC0wLDAgKzEs MTU4IEBADQorLyoqIEBmaWxlDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMTEgLSAyMDE5LCBJbnRl bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorICBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKw0KKyoqLw0KKw0KKyNpZm5kZWYgX19M SU5VWF9CWklNQUdFX0hfXw0KKyNkZWZpbmUgX19MSU5VWF9CWklNQUdFX0hfXw0KKw0KKyNkZWZp bmUgQk9PVFNJRyAgICAgICAgIDB4MUZFDQorI2RlZmluZSBTRVRVUF9IRFIgICAgICAgMHg1Mzcy NjQ0OCAgLyogMHg1MzcyNjQ0OCA9PSAiSGRyUyIgKi8NCisNCisjZGVmaW5lIEU4MjBfUkFNICAg ICAgICAxDQorI2RlZmluZSBFODIwX1JFU0VSVkVEICAgMg0KKyNkZWZpbmUgRTgyMF9BQ1BJICAg ICAgIDMNCisjZGVmaW5lIEU4MjBfTlZTICAgICAgICA0DQorI2RlZmluZSBFODIwX1VOVVNBQkxF ICAgNQ0KKw0KKyNwcmFnbWEgcGFjaygxKQ0KKw0KK3N0cnVjdCBzZXR1cF9oZWFkZXIgew0KKyAg VUlOVDggc2V0dXBfc2VjczsgIC8qIFNlY3RvcnMgZm9yIHNldHVwIGNvZGUgKi8NCisgIFVJTlQx NiByb290X2ZsYWdzOw0KKyAgVUlOVDMyIHN5c19zaXplOw0KKyAgVUlOVDE2IHJhbV9zaXplOw0K KyAgVUlOVDE2IHZpZGVvX21vZGU7DQorICBVSU5UMTYgcm9vdF9kZXY7DQorICBVSU5UMTYgc2ln bmF0dXJlOyAgLyogQm9vdCBzaWduYXR1cmUgKi8NCisgIFVJTlQxNiBqdW1wOw0KKyAgVUlOVDMy IGhlYWRlcjsNCisgIFVJTlQxNiB2ZXJzaW9uOw0KKyAgVUlOVDE2IHN1X3N3aXRjaDsNCisgIFVJ TlQxNiBzZXR1cF9zZWc7DQorICBVSU5UMTYgc3RhcnRfc3lzOw0KKyAgVUlOVDE2IGtlcm5lbF92 ZXI7DQorICBVSU5UOCBsb2FkZXJfaWQ7DQorICBVSU5UOCBsb2FkX2ZsYWdzOw0KKyAgVUlOVDE2 IG1vdmVzaXplOw0KKyAgVUlOVDMyIGNvZGUzMl9zdGFydDsgIC8qIFN0YXJ0IG9mIGNvZGUgbG9h ZGVkIGhpZ2ggKi8NCisgIFVJTlQzMiByYW1kaXNrX3N0YXJ0OyAgLyogU3RhcnQgb2YgaW5pdGlh bCByYW1kaXNrICovDQorICBVSU5UMzIgcmFtZGlza19sZW47ICAvKiBMZW5ndGggb2YgaW5pdGlh bCByYW1kaXNrICovDQorICBVSU5UMzIgYm9vdHNlY3Rfa2x1ZGdlOw0KKyAgVUlOVDE2IGhlYXBf ZW5kOw0KKyAgVUlOVDggZXh0X2xvYWRlcl92ZXI7ICAvKiBFeHRlbmRlZCBib290IGxvYWRlciB2 ZXJzaW9uICovDQorICBVSU5UOCBleHRfbG9hZGVyX3R5cGU7IC8qIEV4dGVuZGVkIGJvb3QgbG9h ZGVyIElEICovDQorICBVSU5UMzIgY21kX2xpbmVfcHRyOyAgIC8qIDMyLWJpdCBwb2ludGVyIHRv IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lICovDQorICBVSU5UMzIgcmFtZGlza19tYXg7ICAgIC8q IEhpZ2hlc3QgbGVnYWwgaW5pdHJkIGFkZHJlc3MgKi8NCisgIFVJTlQzMiBrZXJuZWxfYWxpZ25t ZW50OyAgLyogUGh5c2ljYWwgYWRkciBhbGlnbm1lbnQgcmVxdWlyZWQgZm9yIGtlcm5lbCAqLw0K KyAgVUlOVDggcmVsb2NhdGFibGVfa2VybmVsOyAgLyogV2hldGhlciBrZXJuZWwgaXMgcmVsb2Nh dGFibGUgb3Igbm90ICovDQorICBVSU5UOCBtaW5fYWxpZ25tZW50Ow0KKyAgVUlOVDE2IHhsb2Fk ZmxhZ3M7DQorICBVSU5UMzIgY21kbGluZV9zaXplOw0KKyAgVUlOVDMyIGhhcmR3YXJlX3N1YmFy Y2g7DQorICBVSU5UNjQgaGFyZHdhcmVfc3ViYXJjaF9kYXRhOw0KKyAgVUlOVDMyIHBheWxvYWRf b2Zmc2V0Ow0KKyAgVUlOVDMyIHBheWxvYWRfbGVuZ3RoOw0KKyAgVUlOVDY0IHNldHVwX2RhdGE7 DQorICBVSU5UNjQgcHJlZl9hZGRyZXNzOw0KKyAgVUlOVDMyIGluaXRfc2l6ZTsNCisgIFVJTlQz MiBoYW5kb3Zlcl9vZmZzZXQ7DQorfTsNCisNCitzdHJ1Y3QgZWZpX2luZm8gew0KKyAgVUlOVDMy IGVmaV9sb2FkZXJfc2lnbmF0dXJlOw0KKyAgVUlOVDMyIGVmaV9zeXN0YWI7DQorICBVSU5UMzIg ZWZpX21lbWRlc2Nfc2l6ZTsNCisgIFVJTlQzMiBlZmlfbWVtZGVzY192ZXJzaW9uOw0KKyAgVUlO VDMyIGVmaV9tZW1tYXA7DQorICBVSU5UMzIgZWZpX21lbW1hcF9zaXplOw0KKyAgVUlOVDMyIGVm aV9zeXN0YWJfaGk7DQorICBVSU5UMzIgZWZpX21lbW1hcF9oaTsNCit9Ow0KKw0KK3N0cnVjdCBl ODIwX2VudHJ5IHsNCisgIFVJTlQ2NCBhZGRyOyAgLyogc3RhcnQgb2YgbWVtb3J5IHNlZ21lbnQg Ki8NCisgIFVJTlQ2NCBzaXplOyAgLyogc2l6ZSBvZiBtZW1vcnkgc2VnbWVudCAqLw0KKyAgVUlO VDMyIHR5cGU7ICAvKiB0eXBlIG9mIG1lbW9yeSBzZWdtZW50ICovDQorfTsNCisNCitzdHJ1Y3Qg c2NyZWVuX2luZm8gew0KKyAgICAgICAgVUlOVDggIG9yaWdfeDsgICAgICAgICAgIC8qIDB4MDAg Ki8NCisgICAgICAgIFVJTlQ4ICBvcmlnX3k7ICAgICAgICAgICAvKiAweDAxICovDQorICAgICAg ICBVSU5UMTYgZXh0X21lbV9rOyAgICAgICAgLyogMHgwMiAqLw0KKyAgICAgICAgVUlOVDE2IG9y aWdfdmlkZW9fcGFnZTsgIC8qIDB4MDQgKi8NCisgICAgICAgIFVJTlQ4ICBvcmlnX3ZpZGVvX21v ZGU7ICAvKiAweDA2ICovDQorICAgICAgICBVSU5UOCAgb3JpZ192aWRlb19jb2xzOyAgLyogMHgw NyAqLw0KKyAgICAgICAgVUlOVDggIGZsYWdzOyAgICAgICAgICAgIC8qIDB4MDggKi8NCisgICAg ICAgIFVJTlQ4ICB1bnVzZWQyOyAgICAgICAgICAvKiAweDA5ICovDQorICAgICAgICBVSU5UMTYg b3JpZ192aWRlb19lZ2FfYng7LyogMHgwYSAqLw0KKyAgICAgICAgVUlOVDE2IHVudXNlZDM7ICAg ICAgICAgIC8qIDB4MGMgKi8NCisgICAgICAgIFVJTlQ4ICBvcmlnX3ZpZGVvX2xpbmVzOyAvKiAw eDBlICovDQorICAgICAgICBVSU5UOCAgb3JpZ192aWRlb19pc1ZHQTsgLyogMHgwZiAqLw0KKyAg ICAgICAgVUlOVDE2IG9yaWdfdmlkZW9fcG9pbnRzOy8qIDB4MTAgKi8NCisNCisgIC8qIFZFU0Eg Z3JhcGhpYyBtb2RlIC0tIGxpbmVhciBmcmFtZSBidWZmZXIgKi8NCisgICAgICAgIFVJTlQxNiBs ZmJfd2lkdGg7ICAgICAgICAvKiAweDEyICovDQorICAgICAgICBVSU5UMTYgbGZiX2hlaWdodDsg ICAgICAgLyogMHgxNCAqLw0KKyAgICAgICAgVUlOVDE2IGxmYl9kZXB0aDsgICAgICAgIC8qIDB4 MTYgKi8NCisgICAgICAgIFVJTlQzMiBsZmJfYmFzZTsgICAgICAgICAvKiAweDE4ICovDQorICAg ICAgICBVSU5UMzIgbGZiX3NpemU7ICAgICAgICAgLyogMHgxYyAqLw0KKyAgICAgICAgVUlOVDE2 IGNsX21hZ2ljLCBjbF9vZmZzZXQ7IC8qIDB4MjAgKi8NCisgICAgICAgIFVJTlQxNiBsZmJfbGlu ZWxlbmd0aDsgICAvKiAweDI0ICovDQorICAgICAgICBVSU5UOCAgcmVkX3NpemU7ICAgICAgICAg LyogMHgyNiAqLw0KKyAgICAgICAgVUlOVDggIHJlZF9wb3M7ICAgICAgICAgIC8qIDB4MjcgKi8N CisgICAgICAgIFVJTlQ4ICBncmVlbl9zaXplOyAgICAgICAvKiAweDI4ICovDQorICAgICAgICBV SU5UOCAgZ3JlZW5fcG9zOyAgICAgICAgLyogMHgyOSAqLw0KKyAgICAgICAgVUlOVDggIGJsdWVf c2l6ZTsgICAgICAgIC8qIDB4MmEgKi8NCisgICAgICAgIFVJTlQ4ICBibHVlX3BvczsgICAgICAg ICAvKiAweDJiICovDQorICAgICAgICBVSU5UOCAgcnN2ZF9zaXplOyAgICAgICAgLyogMHgyYyAq Lw0KKyAgICAgICAgVUlOVDggIHJzdmRfcG9zOyAgICAgICAgIC8qIDB4MmQgKi8NCisgICAgICAg IFVJTlQxNiB2ZXNhcG1fc2VnOyAgICAgICAvKiAweDJlICovDQorICAgICAgICBVSU5UMTYgdmVz YXBtX29mZjsgICAgICAgLyogMHgzMCAqLw0KKyAgICAgICAgVUlOVDE2IHBhZ2VzOyAgICAgICAg ICAgIC8qIDB4MzIgKi8NCisgICAgICAgIFVJTlQxNiB2ZXNhX2F0dHJpYnV0ZXM7ICAvKiAweDM0 ICovDQorICAgICAgICBVSU5UMzIgY2FwYWJpbGl0aWVzOyAgICAgLyogMHgzNiAqLw0KKyAgICAg ICAgVUlOVDggIF9yZXNlcnZlZFs2XTsgICAgIC8qIDB4M2EgKi8NCit9Ow0KKw0KK3N0cnVjdCBi b290X3BhcmFtcyB7DQorc3RydWN0IHNjcmVlbl9pbmZvIHNjcmVlbl9pbmZvOw0KKyAgVUlOVDgg YXBtX2Jpb3NfaW5mb1sweDE0XTsNCisgIFVJTlQ4IF9wYWQyWzRdOw0KKyAgVUlOVDY0IHRib290 X2FkZHI7DQorICBVSU5UOCBpc3RfaW5mb1sweDEwXTsNCisgIFVJTlQ4IF9wYWQzWzE2XTsNCisg IFVJTlQ4IGhkMF9pbmZvWzE2XTsNCisgIFVJTlQ4IGhkMV9pbmZvWzE2XTsNCisgIFVJTlQ4IHN5 c19kZXNjX3RhYmxlWzB4MTBdOw0KKyAgVUlOVDggb2xwY19vZndfaGVhZGVyWzB4MTBdOw0KKyAg VUlOVDggX3BhZDRbMTI4XTsNCisgIFVJTlQ4IGVkaWRfaW5mb1sweDgwXTsNCisgIHN0cnVjdCBl ZmlfaW5mbyBlZmlfaW5mbzsNCisgIFVJTlQzMiBhbHRfbWVtX2s7DQorICBVSU5UMzIgc2NyYXRj aDsNCisgIFVJTlQ4IGU4MjBfZW50cmllczsNCisgIFVJTlQ4IGVkZGJ1Zl9lbnRyaWVzOw0KKyAg VUlOVDggZWRkX21icl9zaWdfYnVmX2VudHJpZXM7DQorICBVSU5UOCBfcGFkNls2XTsNCisgIHN0 cnVjdCBzZXR1cF9oZWFkZXIgaGRyOw0KKyAgVUlOVDggX3BhZDdbMHgyOTAtMHgxZjEtc2l6ZW9m KHN0cnVjdCBzZXR1cF9oZWFkZXIpXTsNCisgIFVJTlQzMiBlZGRfbWJyX3NpZ19idWZmZXJbMTZd Ow0KKyAgc3RydWN0IGU4MjBfZW50cnkgZTgyMF9tYXBbMTI4XTsNCisgIFVJTlQ4IF9wYWQ4WzQ4 XTsNCisgIFVJTlQ4IGVkZGJ1ZlsweDFlY107DQorICBVSU5UOCBfcGFkOVsyNzZdOw0KK307DQor DQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgVUlOVDE2IGxpbWl0Ow0KKyAgVUlOVDY0ICpiYXNlOw0K K30gZHRfYWRkcl90Ow0KKw0KKyNwcmFnbWEgcGFjaygpDQorDQorZXh0ZXJuIEVGSV9TVEFUVVMg c2V0dXBfZ3JhcGhpY3Moc3RydWN0IGJvb3RfcGFyYW1zICpidWYpOw0KKw0KKyNlbmRpZiAvKiBf X0xJTlVYX0JaSU1BR0VfSF9fICovDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNz T3BlbkJvYXJkUGtnL0luY2x1ZGUvTGlicmFyeS9Mb2FkTGludXhMaWIuaCBiL1BsYXRmb3JtL0lu dGVsL1NpbWljc09wZW5Cb2FyZFBrZy9JbmNsdWRlL0xpYnJhcnkvTG9hZExpbnV4TGliLmgNCm5l dyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi40ODNmOGQ0YjljDQotLS0gL2Rl di9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvSW5jbHVkZS9M aWJyYXJ5L0xvYWRMaW51eExpYi5oDQpAQCAtMCwwICsxLDIwNSBAQA0KKy8qKiBAZmlsZQ0KKyAg TG9hZC9ib290IFVFRkkgTGludXguDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMTEgLSAyMDEzLCBJ bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorICBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKw0KKyoqLw0KKw0KKyNpZm5kZWYg X19MT0FEX0xJTlVYX0xJQl9fDQorI2RlZmluZSBfX0xPQURfTElOVVhfTElCX18NCisNCisNCisv KioNCisgIFZlcmlmaWVzIHRoYXQgdGhlIGtlcm5lbCBzZXR1cCBpbWFnZSBpcyB2YWxpZCBhbmQg c3VwcG9ydGVkLg0KKyAgVGhlIGtlcm5lbCBzZXR1cCBpbWFnZSBzaG91bGQgYmUgY2hlY2tlZCBi ZWZvcmUgdXNpbmcgb3RoZXIgbGlicmFyeQ0KKyAgcm91dGluZXMgd2hpY2ggdGFrZSB0aGUga2Vy bmVsIHNldHVwIGFzIGFuIGlucHV0Lg0KKw0KKyAgQHBhcmFtW2luXSAgICAgS2VybmVsU2V0dXAg LSBUaGUga2VybmVsIHNldHVwIGltYWdlDQorICBAcGFyYW1baW5dICAgICBLZXJuZWxTZXR1cFNp emUgLSBUaGUga2VybmVsIHNldHVwIHNpemUNCisNCisgIEByZXR2YWwgICAgRUZJX1NVQ0NFU1Mg LSBUaGUgTGludXgga2VybmVsIHNldHVwIGlzIHZhbGlkIGFuZCBzdXBwb3J0ZWQNCisgIEByZXR2 YWwgICAgRUZJX0lOVkFMSURfUEFSQU1FVEVSIC0gS2VybmVsU2V0dXAgd2FzIE5VTEwNCisgIEBy ZXR2YWwgICAgRUZJX1VOU1VQUE9SVEVEIC0gVGhlIExpbnV4IGtlcm5lbCBpcyBub3Qgc3VwcG9y dGVkDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0xvYWRMaW51eENoZWNrS2VybmVs U2V0dXAgKA0KKyAgSU4gVk9JRCAgICAgICAgKktlcm5lbFNldHVwLA0KKyAgSU4gVUlOVE4gICAg ICAgS2VybmVsU2V0dXBTaXplDQorICApOw0KKw0KKw0KKy8qKg0KKyAgR2V0cyB0aGUgaW5pdGlh bCBydW50aW1lIHNpemUgb2YgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSBieSBleGFtaW5pbmcNCisg IHRoZSBrZXJuZWwgc2V0dXAgaW1hZ2UuDQorDQorICBAcGFyYW1baW5dICAgICBLZXJuZWxTZXR1 cCAtIFRoZSBrZXJuZWwgc2V0dXAgaW1hZ2UNCisgIEBwYXJhbVtpbl0gICAgIEtlcm5lbFNpemUg LSBUaGUga2VybmVsIHNpemUgb24gZGlzay4NCisNCisgIEByZXR2YWwgICAgMCAgICAgICAgICAg ICAgICBBbiBlcnJvciBvY2N1cnJlZA0KKyAgQHJldHZhbCAgICAhMCAgICAgICAgICAgICAgIFRo ZSBpbml0aWFsIHNpemUgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCB0bw0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJlZ2luIGV4ZWN1dGlvbi4NCisNCisqKi8NCitVSU5UTg0KK0VGSUFQ SQ0KK0xvYWRMaW51eEdldEtlcm5lbFNpemUgKA0KKyAgSU4gVk9JRCAgICAgICAgKktlcm5lbFNl dHVwLA0KKyAgSU4gVUlOVE4gICAgICAgS2VybmVsU2l6ZQ0KKyAgKTsNCisNCisNCisvKioNCisg IExvYWRzIGFuZCBib290cyBVRUZJIExpbnV4Lg0KKw0KKyAgTm90ZTogSWYgc3VjY2Vzc2Z1bCwg dGhlbiB0aGlzIHJvdXRpbmUgd2lsbCBub3QgcmV0dXJuDQorDQorICBAcGFyYW1baW5dICAgICBL ZXJuZWwgLSBUaGUgbWFpbiBrZXJuZWwgaW1hZ2UNCisgIEBwYXJhbVtpbixvdXRdIEtlcm5lbFNl dHVwIC0gVGhlIGtlcm5lbCBzZXR1cCBpbWFnZQ0KKw0KKyAgQHJldHZhbCAgICBFRklfTk9UX0ZP VU5EIC0gVGhlIExpbnV4IGtlcm5lbCB3YXMgbm90IGZvdW5kDQorICBAcmV0dmFsICAgIEVGSV9J TlZBTElEX1BBUkFNRVRFUiAtIEtlcm5lbCBvciBLZXJuZWxTZXR1cCB3YXMgTlVMTA0KKyAgQHJl dHZhbCAgICBFRklfVU5TVVBQT1JURUQgLSBUaGUgTGludXgga2VybmVsIHZlcnNpb24gaXMgbm90 IHN1cHBvcnRlZA0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitMb2FkTGludXggKA0K KyAgSU4gVk9JRCAgICAgICpLZXJuZWwsDQorICBJTiBPVVQgVk9JRCAgKktlcm5lbFNldHVwDQor ICApOw0KKw0KKw0KKy8qKg0KKyAgQWxsb2NhdGVzIHBhZ2VzIGZvciB0aGUga2VybmVsIHNldHVw IGltYWdlLg0KKw0KKyAgQHBhcmFtW2luXSAgICAgUGFnZXMgLSBUaGUgbnVtYmVyIG9mIHBhZ2Vz DQorDQorICBAcmV0dmFsICAgIE5VTEwgLSBVbmFibGUgdG8gYWxsb2NhdGUgcGFnZXMNCisgIEBy ZXR2YWwgICAgIU5VTEwgLSBUaGUgYWRkcmVzcyBvZiB0aGUgcGFnZXMgYWxsb2NhdGVkDQorDQor KiovDQorVk9JRCoNCitFRklBUEkNCitMb2FkTGludXhBbGxvY2F0ZUtlcm5lbFNldHVwUGFnZXMg KA0KKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICBQYWdlcw0KKyAgKTsNCisNCisNCisvKioN CisgIENsZWFycyB0aGUgdW5pbml0aWFsaXNlZCBzcGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBz dHJ1Y3Qgc2V0dXBfaGVhZGVyDQorICBpbiB0aGUga2VybmVsIHNldHVwIGltYWdlLiBUaGUga2Vy bmVsIHJlcXVpcmVzIHRoYXQgdGhlc2UgYmUgemVyb2VkDQorICB1bmxlc3MgZXhwbGljaXRseSBp bml0aWFsaXNlZCwgc28gdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyDQorICB0 aGUgc2V0dXBfaGVhZGVyIGhhcyBiZWVuIGNvcGllZCBpbiBmcm9tIGEgYnpJbWFnZSwgYmVmb3Jl IHNldHRpbmcgdXANCisgIGFueXRoaW5nIGVsc2UuDQorDQorICBAcGFyYW1baW5dICAgICBLZXJu ZWxTZXR1cCAtIFRoZSBrZXJuZWwgc2V0dXAgaW1hZ2UNCisNCisgIEByZXR2YWwgICAgRUZJX1NV Q0NFU1MgLSBUaGUgTGludXgga2VybmVsIHNldHVwIHdhcyBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6 ZWQNCisgIEByZXR2YWwgICAgRUZJX0lOVkFMSURfUEFSQU1FVEVSIC0gS2VybmVsU2V0dXAgd2Fz IE5VTEwNCisgIEByZXR2YWwgICAgRUZJX1VOU1VQUE9SVEVEIC0gVGhlIExpbnV4IGtlcm5lbCBp cyBub3Qgc3VwcG9ydGVkDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0xvYWRMaW51 eEluaXRpYWxpemVLZXJuZWxTZXR1cCAoDQorICBJTiBWT0lEICAgICAgICAqS2VybmVsU2V0dXAN CisgICk7DQorDQorLyoqDQorICBBbGxvY2F0ZXMgcGFnZXMgZm9yIHRoZSBrZXJuZWwuDQorDQor ICBAcGFyYW1baW5dICAgICBLZXJuZWxTZXR1cCAtIFRoZSBrZXJuZWwgc2V0dXAgaW1hZ2UNCisg IEBwYXJhbVtpbl0gICAgIFBhZ2VzIC0gVGhlIG51bWJlciBvZiBwYWdlcy4gKEl0IGlzIHJlY29t bWVuZGVkIHRvIHVzZSB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSByZXR1cm5l ZCBmcm9tIExvYWRMaW51eEdldEtlcm5lbFNpemUuKQ0KKw0KKyAgQHJldHZhbCAgICBOVUxMIC0g VW5hYmxlIHRvIGFsbG9jYXRlIHBhZ2VzDQorICBAcmV0dmFsICAgICFOVUxMIC0gVGhlIGFkZHJl c3Mgb2YgdGhlIHBhZ2VzIGFsbG9jYXRlZA0KKw0KKyoqLw0KK1ZPSUQqDQorRUZJQVBJDQorTG9h ZExpbnV4QWxsb2NhdGVLZXJuZWxQYWdlcyAoDQorICBJTiBWT0lEICAgICAgICAgICAgICAgICAg ICpLZXJuZWxTZXR1cCwNCisgIElOIFVJTlROICAgICAgICAgICAgICAgICAgUGFnZXMNCisgICk7 DQorDQorDQorLyoqDQorICBBbGxvY2F0ZXMgcGFnZXMgZm9yIHRoZSBrZXJuZWwgY29tbWFuZCBs aW5lLg0KKw0KKyAgQHBhcmFtW2luXSAgICAgUGFnZXMgLSBUaGUgbnVtYmVyIG9mIHBhZ2VzLg0K Kw0KKyAgQHJldHZhbCAgICBOVUxMIC0gVW5hYmxlIHRvIGFsbG9jYXRlIHBhZ2VzDQorICBAcmV0 dmFsICAgICFOVUxMIC0gVGhlIGFkZHJlc3Mgb2YgdGhlIHBhZ2VzIGFsbG9jYXRlZA0KKw0KKyoq Lw0KK1ZPSUQqDQorRUZJQVBJDQorTG9hZExpbnV4QWxsb2NhdGVDb21tYW5kTGluZVBhZ2VzICgN CisgIElOIFVJTlROICAgICAgICAgICAgICAgICAgUGFnZXMNCisgICk7DQorDQorDQorLyoqDQor ICBBbGxvY2F0ZXMgcGFnZXMgZm9yIHRoZSBpbml0cmQgaW1hZ2UuDQorDQorICBAcGFyYW1baW4s b3V0XSBLZXJuZWxTZXR1cCAtIFRoZSBrZXJuZWwgc2V0dXAgaW1hZ2UNCisgIEBwYXJhbVtpbl0g ICAgIFBhZ2VzIC0gVGhlIG51bWJlciBvZiBwYWdlcy4NCisNCisgIEByZXR2YWwgICAgTlVMTCAt IFVuYWJsZSB0byBhbGxvY2F0ZSBwYWdlcw0KKyAgQHJldHZhbCAgICAhTlVMTCAtIFRoZSBhZGRy ZXNzIG9mIHRoZSBwYWdlcyBhbGxvY2F0ZWQNCisNCisqKi8NCitWT0lEKg0KK0VGSUFQSQ0KK0xv YWRMaW51eEFsbG9jYXRlSW5pdHJkUGFnZXMgKA0KKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAg ICAqS2VybmVsU2V0dXAsDQorICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgIFBhZ2VzDQorICAp Ow0KKw0KKw0KKy8qKg0KKyAgU2V0cyB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIg d2l0aGluIHRoZSBzZXR1cCBpbWFnZS4NCisNCisgIEBwYXJhbVtpbixvdXRdIEtlcm5lbFNldHVw IC0gVGhlIGtlcm5lbCBzZXR1cCBpbWFnZQ0KKyAgQHBhcmFtW2luXSAgICAgQ29tbWFuZExpbmUg LSBUaGUga2VybmVsIGNvbW1hbmQgbGluZQ0KKw0KKyAgQHJldHZhbCAgICBFRklfU1VDQ0VTUyAt IFRoZSBMaW51eCBrZXJuZWwgc2V0dXAgaXMgdmFsaWQgYW5kIHN1cHBvcnRlZA0KKyAgQHJldHZh bCAgICBFRklfSU5WQUxJRF9QQVJBTUVURVIgLSBLZXJuZWxTZXR1cCB3YXMgTlVMTA0KKyAgQHJl dHZhbCAgICBFRklfVU5TVVBQT1JURUQgLSBUaGUgTGludXgga2VybmVsIGlzIG5vdCBzdXBwb3J0 ZWQNCisNCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorTG9hZExpbnV4U2V0Q29tbWFuZExp bmUgKA0KKyAgSU4gT1VUIFZPSUQgICAgKktlcm5lbFNldHVwLA0KKyAgSU4gQ0hBUjggICAgICAg KkNvbW1hbmRMaW5lDQorICApOw0KKw0KKw0KKy8qKg0KKyAgU2V0cyB0aGUga2VybmVsIGluaXRp YWwgcmFtIGRpc2sgcG9pbnRlciB3aXRoaW4gdGhlIHNldHVwIGltYWdlLg0KKw0KKyAgQHBhcmFt W2luLG91dF0gS2VybmVsU2V0dXAgLSBUaGUga2VybmVsIHNldHVwIGltYWdlDQorICBAcGFyYW1b aW5dICAgICBJbml0cmQgLSBQb2ludGVyIHRvIHRoZSBpbml0aWFsIHJhbSBkaXNrDQorICBAcGFy YW1baW5dICAgICBJbml0cmRTaXplIC0gVGhlIGluaXRpYWwgcmFtIGRpc2sgaW1hZ2Ugc2l6ZQ0K Kw0KKyAgQHJldHZhbCAgICBFRklfU1VDQ0VTUyAtIFRoZSBMaW51eCBrZXJuZWwgc2V0dXAgaXMg dmFsaWQgYW5kIHN1cHBvcnRlZA0KKyAgQHJldHZhbCAgICBFRklfSU5WQUxJRF9QQVJBTUVURVIg LSBLZXJuZWxTZXR1cCB3YXMgTlVMTA0KKyAgQHJldHZhbCAgICBFRklfVU5TVVBQT1JURUQgLSBU aGUgTGludXgga2VybmVsIGlzIG5vdCBzdXBwb3J0ZWQNCisNCisqKi8NCitFRklfU1RBVFVTDQor RUZJQVBJDQorTG9hZExpbnV4U2V0SW5pdHJkICgNCisgIElOIE9VVCBWT0lEICAgICpLZXJuZWxT ZXR1cCwNCisgIElOIFZPSUQgICAgICAgICpJbml0cmQsDQorICBJTiBVSU5UTiAgICAgICBJbml0 cmRTaXplDQorICApOw0KKw0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0lu dGVsL1NpbWljc09wZW5Cb2FyZFBrZy9JbmNsdWRlL0xpYnJhcnkvU2VyaWFsaXplVmFyaWFibGVz TGliLmggYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvSW5jbHVkZS9MaWJyYXJ5 L1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAw MDAwMDAwMC4uOGU3NGI3MThmMQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwv U2ltaWNzT3BlbkJvYXJkUGtnL0luY2x1ZGUvTGlicmFyeS9TZXJpYWxpemVWYXJpYWJsZXNMaWIu aA0KQEAgLTAsMCArMSwyMjMgQEANCisvKiogQGZpbGUNCisgIFNlcmlhbGl6ZSAmIERlc2VyaWFs aXplIFVFRkkgVmFyaWFibGVzDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisgIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorDQorKiovDQorDQorI2lmbmRlZiBfX1NFUklBTEla RV9WQVJJQUJMRVNfTElCX18NCisjZGVmaW5lIF9fU0VSSUFMSVpFX1ZBUklBQkxFU19MSUJfXw0K Kw0KKw0KKy8qKg0KKyAgQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggdmFyaWFibGUNCisNCisg IEBwYXJhbVtpbl0gQ29udGV4dCAtIENvbnRleHQgYXMgc2VudCB0byB0aGUgaXRlcmF0aW9uIGZ1 bmN0aW9uDQorICBAcGFyYW1baW5dIFZhcmlhYmxlTmFtZSAtIFJlZmVyIHRvIFJ1bnRpbWVTZXJ2 aWNlcyBHZXROZXh0VmFyaWFibGVOYW1lDQorICBAcGFyYW1baW5dIFZlbmRvckd1aWQgLSBSZWZl ciB0byBSdW50aW1lU2VydmljZXMgR2V0TmV4dFZhcmlhYmxlTmFtZQ0KKyAgQHBhcmFtW2luXSBB dHRyaWJ1dGVzIC0gUmVmZXIgdG8gUnVudGltZVNlcnZpY2VzIEdldFZhcmlhYmxlDQorICBAcGFy YW1baW5dIERhdGFTaXplIC0gUmVmZXIgdG8gUnVudGltZVNlcnZpY2VzIEdldFZhcmlhYmxlDQor ICBAcGFyYW1baW5dIERhdGEgLSBSZWZlciB0byBSdW50aW1lU2VydmljZXMgR2V0VmFyaWFibGUN CisNCisgIEByZXR2YWwgUkVUVVJOX1NVQ0NFU1MgICAgICAgICBDb250aW51ZSBpdGVyYXRpbmcg dGhyb3VnaCB0aGUgdmFyaWFibGVzDQorICBAcmV0dXJuIEFueSBSRVRVUk5fRVJST1IgICAgICAg U3RvcCBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgdmFyaWFibGVzDQorDQorKiovDQordHlwZWRlZg0K K1JFVFVSTl9TVEFUVVMNCisoRUZJQVBJICpWQVJJQUJMRV9TRVJJQUxJWkFUSU9OX0lURVJBVElP Tl9DQUxMQkFDSykoDQorICBJTiAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqQ29udGV4 dCwNCisgIElOICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUsDQor ICBJTiAgRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAqVmVuZG9yR3VpZCwNCisgIElOICBV SU5UMzIgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMsDQorICBJTiAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICBEYXRhU2l6ZSwNCisgIElOICBWT0lEICAgICAgICAgICAgICAg ICAgICAgICAgICpEYXRhDQorICApOw0KKw0KKw0KKy8qKg0KKyAgQ3JlYXRlcyBhIG5ldyB2YXJp YWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorDQorICBAcGFyYW1bb3V0XSAgSGFuZGxlIC0g SGFuZGxlIGZvciBhIHZhcmlhYmxlIHNlcmlhbGl6YXRpb24gaW5zdGFuY2UNCisNCisgIEByZXR2 YWwgICAgICBSRVRVUk5fU1VDQ0VTUyAtIFRoZSB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3Rh bmNlIHdhcw0KKyAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuDQorICBAcmV0 dmFsICAgICAgUkVUVVJOX09VVF9PRl9SRVNPVVJDRVMgLSBUaGVyZSB3ZSBub3QgZW5vdWdoIHJl c291cmNlcyB0bw0KKyAgICAgICAgICAgICAgICAgY3JlYXRlIHRoZSB2YXJpYWJsZSBzZXJpYWxp emF0aW9uIGluc3RhbmNlLg0KKw0KKyoqLw0KK1JFVFVSTl9TVEFUVVMNCitFRklBUEkNCitTZXJp YWxpemVWYXJpYWJsZXNOZXdJbnN0YW5jZSAoDQorICBPVVQgRUZJX0hBTkRMRSAgICAgICAgICAg ICAgICAgICAgICAqSGFuZGxlDQorICApOw0KKw0KKw0KKy8qKg0KKyAgRnJlZSBtZW1vcnkgYXNz b2NpYXRlZCB3aXRoIGEgdmFyaWFibGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZQ0KKw0KKyAgQHBh cmFtW2luXSAgSGFuZGxlIC0gSGFuZGxlIGZvciBhIHZhcmlhYmxlIHNlcmlhbGl6YXRpb24gaW5z dGFuY2UNCisNCisgIEByZXR2YWwgICAgICBSRVRVUk5fU1VDQ0VTUyAtIFRoZSB2YXJpYWJsZSBz ZXJpYWxpemF0aW9uIGluc3RhbmNlIHdhcw0KKyAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5 IGZyZWVkLg0KKyAgQHJldHZhbCAgICAgIFJFVFVSTl9JTlZBTElEX1BBUkFNRVRFUiAtIEhhbmRs ZSB3YXMgbm90IGEgdmFsaWQNCisgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNlcmlhbGl6YXRp b24gaW5zdGFuY2UuDQorDQorKiovDQorUkVUVVJOX1NUQVRVUw0KK0VGSUFQSQ0KK1NlcmlhbGl6 ZVZhcmlhYmxlc0ZyZWVJbnN0YW5jZSAoDQorICBJTiBFRklfSEFORExFIEhhbmRsZQ0KKyAgKTsN CisNCisNCisvKioNCisgIENyZWF0ZXMgYSBuZXcgdmFyaWFibGUgc2VyaWFsaXphdGlvbiBpbnN0 YW5jZSB1c2luZyB0aGUgZ2l2ZW4NCisgIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFy aWFibGVzIHRvIGZpbGwgdGhlIG5ldyBpbnN0YW5jZQ0KKw0KKyAgQHBhcmFtW291dF0gSGFuZGxl IC0gSGFuZGxlIGZvciBhIHZhcmlhYmxlIHNlcmlhbGl6YXRpb24gaW5zdGFuY2UNCisgIEBwYXJh bVtpbl0gIEJ1ZmZlciAtIEEgYnVmZmVyIHdpdGggdGhlIHNlcmlhbGl6ZWQgcmVwcmVzZW50YXRp b24NCisgICAgICAgICAgICAgICAgb2YgdGhlIHZhcmlhYmxlcy4gIE11c3QgYmUgdGhlIHNhbWUg Zm9ybWF0IGFzIHByb2R1Y2VkDQorICAgICAgICAgICAgICAgIGJ5IFNlcmlhbGl6ZVZhcmlhYmxl c1RvQnVmZmVyLg0KKyAgQHBhcmFtW2luXSAgU2l6ZSAtIFRoaXMgaXMgdGhlIHNpemUgb2YgdGhl IGJpbmFyeSByZXByZXNlbnRhdGlvbg0KKyAgICAgICAgICAgICAgICBvZiB0aGUgdmFyaWFibGVz Lg0KKw0KKyAgQHJldHZhbCAgICAgIFJFVFVSTl9TVUNDRVNTIC0gVGhlIGJpbmFyeSByZXByZXNl bnRhdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5DQorICAgICAgICAgICAgICAgICBpbXBvcnRlZCBpbnRv IGEgbmV3IHZhcmlhYmxlIHNlcmlhbGl6YXRpb24gaW5zdGFuY2UNCisgIEByZXR2YWwgICAgICBS RVRVUk5fT1VUX09GX1JFU09VUkNFUyAtIFRoZXJlIHdlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRv DQorICAgICAgICAgICAgICAgICBjcmVhdGUgdGhlIG5ldyB2YXJpYWJsZSBzZXJpYWxpemF0aW9u IGluc3RhbmNlDQorDQorKiovDQorUkVUVVJOX1NUQVRVUw0KK0VGSUFQSQ0KK1NlcmlhbGl6ZVZh cmlhYmxlc05ld0luc3RhbmNlRnJvbUJ1ZmZlciAoDQorICBPVVQgRUZJX0hBTkRMRSAgICAgICAg ICAgICAgICAgICAgICAgICAgKkhhbmRsZSwNCisgIElOICBWT0lEICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqQnVmZmVyLA0KKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNpemUNCisgICk7DQorDQorDQorLyoqDQorICBJdGVyYXRlcyBhbGwgdmFyaWFi bGVzIGZvdW5kIHdpdGggUnVudGltZVNlcnZpY2VzIEdldE5leHRWYXJpYWJsZU5hbWUNCisNCisg IEBwYXJhbVtpbl0gICBDYWxsYmFja0Z1bmN0aW9uIC0gRnVuY3Rpb24gY2FsbGVkIGZvciBlYWNo IHZhcmlhYmxlIGluc3RhbmNlDQorICBAcGFyYW1baW5dICAgQ29udGV4dCAtIFBhc3NlZCB0byBl YWNoIGNhbGwgb2YgQ2FsbGJhY2tGdW5jdGlvbg0KKw0KKyAgQHJldHZhbCAgICAgIFJFVFVSTl9T VUNDRVNTIC0gQWxsIHZhcmlhYmxlcyB3ZXJlIGl0ZXJhdGVkIHdpdGhvdXQgdGhlDQorICAgICAg ICAgICAgICAgICBDYWxsYmFja0Z1bmN0aW9uIHJldHVybmluZyBhbiBlcnJvcg0KKyAgQHJldHZh bCAgICAgIFJFVFVSTl9PVVRfT0ZfUkVTT1VSQ0VTIC0gVGhlcmUgd2Ugbm90IGVub3VnaCByZXNv dXJjZXMgdG8NCisgICAgICAgICAgICAgICAgIGl0ZXJhdGUgdGhyb3VnaCB0aGUgdmFyaWFibGVz DQorICBAcmV0dXJuICAgICAgQW55IG9mIFJFVFVSTl9FUlJPUiBpbmRpY2F0ZXMgYW4gZXJyb3Ig cmVhZGluZyB0aGUgdmFyaWFibGUNCisgICAgICAgICAgICAgICAgIG9yIGFuIGVycm9yIHdhcyBy ZXR1cm5lZCBmcm9tIENhbGxiYWNrRnVuY3Rpb24NCisNCisqKi8NCitSRVRVUk5fU1RBVFVTDQor RUZJQVBJDQorU2VyaWFsaXplVmFyaWFibGVzSXRlcmF0ZVN5c3RlbVZhcmlhYmxlcyAoDQorICBJ TiBWQVJJQUJMRV9TRVJJQUxJWkFUSU9OX0lURVJBVElPTl9DQUxMQkFDSyBDYWxsYmFja0Z1bmN0 aW9uLA0KKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNv bnRleHQNCisgICk7DQorDQorDQorLyoqDQorICBJdGVyYXRlcyBhbGwgdmFyaWFibGVzIGZvdW5k IGluIHRoZSB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorDQorICBAcGFyYW1baW5d ICAgSGFuZGxlIC0gSGFuZGxlIGZvciBhIHZhcmlhYmxlIHNlcmlhbGl6YXRpb24gaW5zdGFuY2UN CisgIEBwYXJhbVtpbl0gICBDYWxsYmFja0Z1bmN0aW9uIC0gRnVuY3Rpb24gY2FsbGVkIGZvciBl YWNoIHZhcmlhYmxlIGluc3RhbmNlDQorICBAcGFyYW1baW5dICAgQ29udGV4dCAtIFBhc3NlZCB0 byBlYWNoIGNhbGwgb2YgQ2FsbGJhY2tGdW5jdGlvbg0KKw0KKyAgQHJldHZhbCAgICAgIFJFVFVS Tl9TVUNDRVNTIC0gQWxsIHZhcmlhYmxlcyB3ZXJlIGl0ZXJhdGVkIHdpdGhvdXQgdGhlDQorICAg ICAgICAgICAgICAgICBDYWxsYmFja0Z1bmN0aW9uIHJldHVybmluZyBhbiBlcnJvcg0KKyAgQHJl dHZhbCAgICAgIFJFVFVSTl9PVVRfT0ZfUkVTT1VSQ0VTIC0gVGhlcmUgd2Ugbm90IGVub3VnaCBy ZXNvdXJjZXMgdG8NCisgICAgICAgICAgICAgICAgIGl0ZXJhdGUgdGhyb3VnaCB0aGUgdmFyaWFi bGVzDQorICBAcmV0dXJuICAgICAgQW55IG9mIFJFVFVSTl9FUlJPUiBpbmRpY2F0ZXMgYW4gZXJy b3IgcmVhZGluZyB0aGUgdmFyaWFibGUNCisgICAgICAgICAgICAgICAgIG9yIGFuIGVycm9yIHdh cyByZXR1cm5lZCBmcm9tIENhbGxiYWNrRnVuY3Rpb24NCisNCisqKi8NCitSRVRVUk5fU1RBVFVT DQorRUZJQVBJDQorU2VyaWFsaXplVmFyaWFibGVzSXRlcmF0ZUluc3RhbmNlVmFyaWFibGVzICgN CisgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZSwN CisgIElOIFZBUklBQkxFX1NFUklBTElaQVRJT05fSVRFUkFUSU9OX0NBTExCQUNLIENhbGxiYWNr RnVuY3Rpb24sDQorICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqQ29udGV4dA0KKyAgKTsNCisNCisNCisvKioNCisgIFNldHMgYWxsIHZhcmlhYmxlcyBmb3Vu ZCBpbiB0aGUgdmFyaWFibGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZQ0KKw0KKyAgQHBhcmFtW2lu XSAgIEhhbmRsZSAtIEhhbmRsZSBmb3IgYSB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNl DQorDQorICBAcmV0dmFsICAgICAgUkVUVVJOX1NVQ0NFU1MgLSBBbGwgdmFyaWFibGVzIHdlcmUg c2V0IHN1Y2Nlc3NmdWxseQ0KKyAgQHJldHZhbCAgICAgIFJFVFVSTl9PVVRfT0ZfUkVTT1VSQ0VT IC0gVGhlcmUgd2Ugbm90IGVub3VnaCByZXNvdXJjZXMgdG8NCisgICAgICAgICAgICAgICAgIHNl dCBhbGwgdGhlIHZhcmlhYmxlcw0KKyAgQHJldHVybiAgICAgIEFueSBvZiBSRVRVUk5fRVJST1Ig aW5kaWNhdGVzIGFuIGVycm9yIHJlYWRpbmcgdGhlIHZhcmlhYmxlcw0KKyAgICAgICAgICAgICAg ICAgb3IgaW4gYXR0ZW1wdGluZyB0byBzZXQgYSB2YXJpYWJsZQ0KKw0KKyoqLw0KK1JFVFVSTl9T VEFUVVMNCitFRklBUEkNCitTZXJpYWxpemVWYXJpYWJsZXNTZXRTZXJpYWxpemVkVmFyaWFibGVz ICgNCisgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZQ0KKyAgKTsN CisNCisNCisvKioNCisgIEFkZHMgYSB2YXJpYWJsZSB0byB0aGUgdmFyaWFibGUgc2VyaWFsaXph dGlvbiBpbnN0YW5jZQ0KKw0KKyAgQHBhcmFtW2luXSBIYW5kbGUgLSBIYW5kbGUgZm9yIGEgdmFy aWFibGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZQ0KKyAgQHBhcmFtW2luXSBWYXJpYWJsZU5hbWUg LSBSZWZlciB0byBSdW50aW1lU2VydmljZXMgR2V0VmFyaWFibGUNCisgIEBwYXJhbVtpbl0gVmVu ZG9yR3VpZCAtIFJlZmVyIHRvIFJ1bnRpbWVTZXJ2aWNlcyBHZXRWYXJpYWJsZQ0KKyAgQHBhcmFt W2luXSBBdHRyaWJ1dGVzIC0gUmVmZXIgdG8gUnVudGltZVNlcnZpY2VzIEdldFZhcmlhYmxlDQor ICBAcGFyYW1baW5dIERhdGFTaXplIC0gUmVmZXIgdG8gUnVudGltZVNlcnZpY2VzIEdldFZhcmlh YmxlDQorICBAcGFyYW1baW5dIERhdGEgLSBSZWZlciB0byBSdW50aW1lU2VydmljZXMgR2V0VmFy aWFibGUNCisNCisgIEByZXR2YWwgICAgICBSRVRVUk5fU1VDQ0VTUyAtIEFsbCB2YXJpYWJsZXMg d2VyZSBzZXQgc3VjY2Vzc2Z1bGx5DQorICBAcmV0dmFsICAgICAgUkVUVVJOX09VVF9PRl9SRVNP VVJDRVMgLSBUaGVyZSB3ZSBub3QgZW5vdWdoIHJlc291cmNlcyB0bw0KKyAgICAgICAgICAgICAg ICAgYWRkIHRoZSB2YXJpYWJsZQ0KKw0KKyoqLw0KK1JFVFVSTl9TVEFUVVMNCitFRklBUEkNCitT ZXJpYWxpemVWYXJpYWJsZXNBZGRWYXJpYWJsZSAoDQorICBJTiBFRklfSEFORExFICAgICAgICAg ICAgICAgICAgIEhhbmRsZSwNCisgIElOIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgKlZh cmlhYmxlTmFtZSwNCisgIElOIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgKlZlbmRvckd1 aWQsDQorICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMsDQorICBJ TiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTaXplLA0KKyAgSU4gVk9JRCAgICAg ICAgICAgICAgICAgICAgICAgICAqRGF0YQ0KKyAgKTsNCisNCisNCisvKioNCisgIFNlcmlhbGl6 ZXMgdGhlIHZhcmlhYmxlcyBrbm93biB0byB0aGlzIGluc3RhbmNlIGludG8gdGhlDQorICBwcm92 aWRlZCBidWZmZXIuDQorDQorICBAcGFyYW1baW5dICAgICBIYW5kbGUgLSBIYW5kbGUgZm9yIGEg dmFyaWFibGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZQ0KKyAgQHBhcmFtW291dF0gICAgQnVmZmVy IC0gQSBidWZmZXIgdG8gc3RvcmUgdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbg0KKyAgICAgICAg ICAgICAgICAgICBvZiB0aGUgdmFyaWFibGVzLg0KKyAgQHBhcmFtW2luLG91dF0gU2l6ZSAtIE9u IGlucHV0IHRoaXMgaXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4NCisgICAgICAgICAgICAgICAg ICAgT24gb3V0cHV0IHRoaXMgaXMgdGhlIHNpemUgb2YgdGhlIGJpbmFyeSByZXByZXNlbnRhdGlv bg0KKyAgICAgICAgICAgICAgICAgICBvZiB0aGUgdmFyaWFibGVzLg0KKw0KKyAgQHJldHZhbCAg ICAgIFJFVFVSTl9TVUNDRVNTIC0gVGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiB3YXMgc3VjY2Vz c2Z1bGx5DQorICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgYW5kIHJldHVybmVkIGluIHRoZSBi dWZmZXIuDQorICBAcmV0dmFsICAgICAgUkVUVVJOX09VVF9PRl9SRVNPVVJDRVMgLSBUaGVyZSB3 ZSBub3QgZW5vdWdoIHJlc291cmNlcyB0bw0KKyAgICAgICAgICAgICAgICAgc2F2ZSB0aGUgdmFy aWFibGVzIHRvIHRoZSBidWZmZXIuDQorICBAcmV0dmFsICAgICAgUkVUVVJOX0lOVkFMSURfUEFS QU1FVEVSIC0gSGFuZGxlIHdhcyBub3QgYSB2YWxpZA0KKyAgICAgICAgICAgICAgICAgdmFyaWFi bGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZSBvcg0KKyAgICAgICAgICAgICAgICAgU2l6ZSBvciBC dWZmZXIgd2VyZSBOVUxMLg0KKw0KKyoqLw0KK1JFVFVSTl9TVEFUVVMNCitFRklBUEkNCitTZXJp YWxpemVWYXJpYWJsZXNUb0J1ZmZlciAoDQorICBJTiAgICAgRUZJX0hBTkRMRSAgICAgICAgICAg ICAgICAgICAgICAgSGFuZGxlLA0KKyAgT1VUICAgIFZPSUQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpCdWZmZXIsDQorICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgKlNpemUNCisgICk7DQorDQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0v SW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0luY2x1ZGUvU2ltaWNzUGxhdGZvcm1zLmggYi9QbGF0 Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvSW5jbHVkZS9TaW1pY3NQbGF0Zm9ybXMuaA0K bmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLjY3YmIzYWY1ODQNCi0tLSAv ZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9JbmNsdWRl L1NpbWljc1BsYXRmb3Jtcy5oDQpAQCAtMCwwICsxLDU1IEBADQorLyoqIEBmaWxlDQorICBTaW1p Y3MgUGxhdGZvcm0gZGVmaW5pdGlvbnMNCisNCisgIENvcHlyaWdodCAoQykgMjAxNSwgUmVkIEhh dCwgSW5jLg0KKyAgQ29weXJpZ2h0IChjKSAyMDE0LCBHYWJyaWVsIEwuIFNvbWxvIDxzb21sb0Bj bXUuZWR1Pg0KKyAgQ29weXJpZ2h0IChjKSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC48QlI+DQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTIt Q2xhdXNlLVBhdGVudA0KKyoqLw0KKw0KKyNpZm5kZWYgX19TSU1JQ1NfUExBVEZPUk1TX0hfXw0K KyNkZWZpbmUgX19TSU1JQ1NfUExBVEZPUk1TX0hfXw0KKw0KKyNpbmNsdWRlIDxMaWJyYXJ5L1Bj aUxpYi5oPg0KKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL1BjaTIyLmg+DQorI2luY2x1ZGUg PFJlZ2lzdGVyL1g1OEljaDEwLmg+DQorI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvSTQ0MEZ4 UGlpeDQuaD4NCisNCisvLw0KKy8vIFNpbWljcyBIb3N0IEJyaWRnZSBESUQgQWRkcmVzcw0KKy8v DQorI2RlZmluZSBTSU1JQ1NfSE9TVEJSSURHRV9ESUQgXA0KKyAgUENJX0xJQl9BRERSRVNTICgw LCAwLCAwLCBQQ0lfREVWSUNFX0lEX09GRlNFVCkNCisNCisvLw0KKy8vIFNpbWljcyBTaWRlQmFu ZCBQQ0kgZGV2aWNlIHJlZ2lzdGVycw0KKy8vDQorI2RlZmluZSBTSU1JQ1NfU0lERUJBTkRQQ0lf REVWICAwDQorI2RlZmluZSBTSU1JQ1NfU0lERUJBTkRQQ0lfRlVOQyA3DQorI2RlZmluZSBTSU1J Q1NfU0lERUJBTkRQQ0lfU1ZJRCBcDQorICBQQ0lfTElCX0FERFJFU1MgKDAsIDAsIDcsIFBDSV9T VklEX09GRlNFVCkNCisjZGVmaW5lIFNJTUlDU19TSURFQkFORFBDSV9TRElEIFwNCisgIFBDSV9M SUJfQUREUkVTUyAoMCwgMCwgNywgUENJX1NJRF9PRkZTRVQpDQorI2RlZmluZSBTSU1JQ1NfU0lE RUJBTkRQQ0lfQ0FQIFwNCisgIFBDSV9MSUJfQUREUkVTUyAoMCwgMCwgNywgUENJX0NBUEJJTElU WV9QT0lOVEVSX09GRlNFVCkNCisjZGVmaW5lIFNJTUlDU19TSURFQkFORFBDSV9DQVBfT2Zmc2V0 IDB4NDANCisjZGVmaW5lIFNJTUlDU19TSURFQkFORFBDSV9DQVBfSUQgICAgIDB4RkYNCisNCisv Lw0KKy8vIFZhbHVlcyB3ZSBwcm9ncmFtIGludG8gdGhlIFBNIGJhc2UgYWRkcmVzcyByZWdpc3Rl cnMNCisvLw0KKyNkZWZpbmUgUElJWDRfUE1CQV9WQUxVRSAgMHhCMDAwDQorI2RlZmluZSBJQ0gx MF9QTUJBU0VfVkFMVUUgMHgwNDAwDQorDQorLy8NCisvLyBDb21tb24gYml0cyBpbiBzYW1lLXB1 cnBvc2UgcmVnaXN0ZXJzDQorLy8NCisjZGVmaW5lIFBNQkFfUlRFIEJJVDANCisNCisvLw0KKy8v IENvbW1vbiBJTyBwb3J0cyByZWxhdGl2ZSB0byB0aGUgUG93ZXIgTWFuYWdlbWVudCBCYXNlIEFk ZHJlc3MNCisvLw0KKyNkZWZpbmUgQUNQSV9USU1FUl9PRkZTRVQgMHg4DQorDQorI2VuZGlmDQpk aWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvRHhl TG9nb0xpYi9EeGVMb2dvTGliLmluZiBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBr Zy9MaWJyYXJ5L0R4ZUxvZ29MaWIvRHhlTG9nb0xpYi5pbmYNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQppbmRleCAwMDAwMDAwMDAwLi4xY2Y5MWYwMmMyDQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0 Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9EeGVMb2dvTGliL0R4ZUxvZ29M aWIuaW5mDQpAQCAtMCwwICsxLDU1IEBADQorIyMjIEBmaWxlDQorIyBNb2R1bGUgdGhhdCBzaG93 IHByb2dyZXNzIGJhciBhbmQgdGl0bGUgYWJvdmUgaXQuDQorIw0KKyMgR2VuZXJhbCBCRFMgZGVm aW5lcyBhbmQgcHJvZHVjZSBnZW5lcmFsIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIEJEUyBkcml2 ZXIgaW5jbHVkaW5nOg0KKyMgMSkgQkRTIGJvb3QgcG9saWN5IGludGVyZmFjZTsNCisjIDIpIEJE UyBib290IGRldmljZSBjb25uZWN0IGludGVyZmFjZTsNCisjIDMpIEJEUyBNaXNjIGludGVyZmFj ZXMgZm9yIG1haW50aW5nIGJvb3QgdmFyaWFibGUsIG91cHV0IHN0cmluZywgZXRjLg0KKyMNCisj IENvcHlyaWdodCAoYykgMjAwNyAtIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuIDxCUj4NCisjDQorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLVBhdGVudA0KKyMNCisjIyMNCisNCitbRGVmaW5lc10NCisgIElORl9WRVJTSU9OICAgICAg ICAgICAgICAgICAgICA9IDB4MDAwMTAwMTcNCisgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAg ICAgICA9IER4ZUxvZ29MaWINCisgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IEY1 QUU1QjVDLTQyRTgtNEE5Qi04MjlELTVCNjMxQ0Q1MzY3QQ0KKyAgVkVSU0lPTl9TVFJJTkcgICAg ICAgICAgICAgICAgID0gMS4wDQorICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBE WEVfRFJJVkVSDQorICBMSUJSQVJZX0NMQVNTICAgICAgICAgICAgICAgICAgPSBMb2dvTGlifERY RV9EUklWRVIgVUVGSV9BUFBMSUNBVElPTg0KKyMNCisjIFRoZSBmb2xsb3dpbmcgaW5mb3JtYXRp b24gaXMgZm9yIHJlZmVyZW5jZSBvbmx5IGFuZCBub3QgcmVxdWlyZWQgYnkgdGhlIGJ1aWxkIHRv b2xzLg0KKyMNCisjIFZBTElEX0FSQ0hJVEVDVFVSRVMgPSBJQTMyIFg2NCBJUEYgRUJDDQorIw0K Kw0KK1tMaWJyYXJ5Q2xhc3Nlc10NCisgIEJhc2VMaWINCisgIFVlZmlCb290U2VydmljZXNUYWJs ZUxpYg0KKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KKyAgVWVmaUxpYg0KKyAgQmFzZU1lbW9yeUxp Yg0KKyAgRGVidWdMaWINCisgIFByaW50TGliDQorICBQY2RMaWINCisgIER4ZVNlcnZpY2VzTGli DQorDQorW1BhY2thZ2VzXQ0KKyAgTWRlUGtnL01kZVBrZy5kZWMNCisgIE1kZU1vZHVsZVBrZy9N ZGVNb2R1bGVQa2cuZGVjDQorICBTaW1pY3NPcGVuQm9hcmRQa2cvT3BlbkJvYXJkUGtnLmRlYw0K Kw0KK1tGZWF0dXJlUGNkXQ0KKyAgZ0VmaU1kZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFVnYUNvbnN1 bWVTdXBwb3J0DQorDQorW1NvdXJjZXNdDQorICBMb2dvLmMNCisNCitbUHJvdG9jb2xzXQ0KKyAg Z0VmaUdyYXBoaWNzT3V0cHV0UHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICMjIFNPTUVUSU1F U19DT05TVU1FUw0KKyAgZ0VmaVVnYURyYXdQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICAg ICAgICMjIFNPTUVUSU1FU19DT05TVU1FUw0KKyAgZ0VmaUJvb3RMb2dvUHJvdG9jb2xHdWlkICAg ICAgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUw0KKyAgZ0VmaVVzZXJNYW5h Z2VyUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICMjIENPTlNVTUVTDQorICBnRWZpT0VN QmFkZ2luZ1Byb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgIyMgQ09OU1VNRVMNCmRpZmYg LS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9EeGVMb2dv TGliL09FTUJhZGdpbmcuaCBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJy YXJ5L0R4ZUxvZ29MaWIvT0VNQmFkZ2luZy5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMDAwMC4uNGYwNmJhZTVkMQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50 ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvRHhlTG9nb0xpYi9PRU1CYWRnaW5nLmgNCkBA IC0wLDAgKzEsODMgQEANCisvKiogQGZpbGUNCisgIFRoZSBPRU0gQmFkZ2luZyBQcm90b2NvbCBk ZWZpbmVzIHRoZSBpbnRlcmZhY2UgdG8gZ2V0IHRoZSBPRU0gYmFkZ2luZyANCisgIGltYWdlIHdp dGggdGhlIGRpc3BsYXkgYXR0cmlidXRlLiBUaGlzIHByb3RvY29sIGNhbiBiZSBwcm9kdWNlZCBi YXNlZCBvbiBPRU0gYmFkZ2luZyBpbWFnZXMuDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAy MDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQorDQorICBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKw0KKyoqLw0KKw0K KyNpZm5kZWYgX19FRklfT0VNX0JBREdJTkdfSF9fDQorI2RlZmluZSBfX0VGSV9PRU1fQkFER0lO R19IX18NCisNCisvLw0KKy8vIEdVSUQgZm9yIEVGSSBPRU0gQmFkZ2luZyBQcm90b2NvbA0KKy8v DQorI2RlZmluZSBFRklfT0VNX0JBREdJTkdfUFJPVE9DT0xfR1VJRCBcDQorICB7IDB4MTcwZTEz YzAsIDB4YmYxYiwgMHg0MjE4LCB7MHg4NywgMHgxZCwgMHgyYSwgMHhiZCwgMHhjNiwgMHhmOCwg MHg4NywgMHhiYyB9IH0NCisNCisNCit0eXBlZGVmIHN0cnVjdCBfRUZJX09FTV9CQURHSU5HX1BS T1RPQ09MIEVGSV9PRU1fQkFER0lOR19QUk9UT0NPTDsNCisNCit0eXBlZGVmIGVudW0gew0KKyAg RWZpQmFkZ2luZ0Zvcm1hdEJNUCwNCisgIEVmaUJhZGdpbmdGb3JtYXRKUEVHLA0KKyAgRWZpQmFk Z2luZ0Zvcm1hdFRJRkYsDQorICBFZmlCYWRnaW5nRm9ybWF0R0lGLA0KKyAgRWZpQmFkZ2luZ0Zv cm1hdFVua25vd24NCit9IEVGSV9CQURHSU5HX0ZPUk1BVDsNCisNCit0eXBlZGVmIGVudW0gew0K KyAgRWZpQmFkZ2luZ0Rpc3BsYXlBdHRyaWJ1dGVMZWZ0VG9wLA0KKyAgRWZpQmFkZ2luZ0Rpc3Bs YXlBdHRyaWJ1dGVDZW50ZXJUb3AsDQorICBFZmlCYWRnaW5nRGlzcGxheUF0dHJpYnV0ZVJpZ2h0 VG9wLA0KKyAgRWZpQmFkZ2luZ0Rpc3BsYXlBdHRyaWJ1dGVDZW50ZXJSaWdodCwNCisgIEVmaUJh ZGdpbmdEaXNwbGF5QXR0cmlidXRlUmlnaHRCb3R0b20sDQorICBFZmlCYWRnaW5nRGlzcGxheUF0 dHJpYnV0ZUNlbnRlckJvdHRvbSwNCisgIEVmaUJhZGdpbmdEaXNwbGF5QXR0cmlidXRlTGVmdEJv dHRvbSwNCisgIEVmaUJhZGdpbmdEaXNwbGF5QXR0cmlidXRlQ2VudGVyTGVmdCwNCisgIEVmaUJh ZGdpbmdEaXNwbGF5QXR0cmlidXRlQ2VudGVyLA0KKyAgRWZpQmFkZ2luZ0Rpc3BsYXlBdHRyaWJ1 dGVDdXN0b21pemVkDQorfSBFRklfQkFER0lOR19ESVNQTEFZX0FUVFJJQlVURTsNCisNCisvKioN CisNCisgIExvYWQgYW4gT0VNIGJhZGdlIGltYWdlIGFuZCByZXR1cm4gaXRzIGRhdGEgYW5kIGF0 dHJpYnV0ZXMuDQorDQorICBAcGFyYW0gVGhpcyAgICAgICAgICAgICAgVGhlIHBvaW50ZXIgdG8g dGhpcyBwcm90b2NvbCBpbnN0YW5jZS4NCisgIEBwYXJhbSBJbnN0YW5jZSAgICAgICAgICBUaGUg dmlzaWJsZSBpbWFnZSBpbnN0YW5jZSBpcyBmb3VuZC4NCisgIEBwYXJhbSBGb3JtYXQgICAgICAg ICAgICBUaGUgZm9ybWF0IG9mIHRoZSBpbWFnZS4gRXhhbXBsZXM6IEJNUCwgSlBFRy4NCisgIEBw YXJhbSBJbWFnZURhdGEgICAgICAgICBUaGUgaW1hZ2UgZGF0YSBmb3IgdGhlIGJhZGdlIGZpbGUu IEN1cnJlbnRseSBvbmx5IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIHRo ZSAuYm1wIGZpbGUgZm9ybWF0LiANCisgIEBwYXJhbSBJbWFnZVNpemUgICAgICAgICBUaGUgc2l6 ZSBvZiB0aGUgaW1hZ2UgcmV0dXJuZWQuDQorICBAcGFyYW0gQXR0cmlidXRlICAgICAgICAgVGhl IGRpc3BsYXkgYXR0cmlidXRlcyBvZiB0aGUgaW1hZ2UgcmV0dXJuZWQuDQorICBAcGFyYW0gQ29v cmRpbmF0ZVggICAgICAgVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgaW1hZ2UuDQorICBAcGFyYW0g Q29vcmRpbmF0ZVkgICAgICAgVGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgaW1hZ2UuDQorDQorICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgVGhlIGltYWdlIHdhcyBmZXRjaGVkIHN1Y2Nlc3NmdWxs eS4NCisgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICBUaGUgc3BlY2lmaWVkIGltYWdlIGNvdWxk IG5vdCBiZSBmb3VuZC4NCisNCisqKi8NCit0eXBlZGVmDQorRUZJX1NUQVRVUw0KKyhFRklBUEkg KkVGSV9CQURHSU5HX0dFVF9JTUFHRSkoDQorICBJTiAgICAgRUZJX09FTV9CQURHSU5HX1BST1RP Q09MICAgICAgICAgICpUaGlzLA0KKyAgSU4gT1VUIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqSW5zdGFuY2UsDQorICAgICBPVVQgRUZJX0JBREdJTkdfRk9STUFUICAgICAgICAg ICAgICAgICpGb3JtYXQsDQorICAgICBPVVQgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAg ICAgICoqSW1hZ2VEYXRhLA0KKyAgICAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqSW1hZ2VTaXplLA0KKyAgICAgT1VUIEVGSV9CQURHSU5HX0RJU1BMQVlfQVRUUklCVVRF ICAgICAqQXR0cmlidXRlLA0KKyAgICAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqQ29vcmRpbmF0ZVgsDQorICAgICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpDb29yZGluYXRlWQ0KKyk7DQorDQorDQorc3RydWN0IF9FRklfT0VNX0JBREdJTkdf UFJPVE9DT0wgew0KKyAgRUZJX0JBREdJTkdfR0VUX0lNQUdFICAgICAgIEdldEltYWdlOw0KK307 DQorDQorDQorZXh0ZXJuIEVGSV9HVUlEIGdFZmlPRU1CYWRnaW5nUHJvdG9jb2xHdWlkOw0KKw0K KyNlbmRpZg0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9M aWJyYXJ5L0xvYWRMaW51eExpYi9EeGVMb2FkTGludXhMaWIuaW5mIGIvUGxhdGZvcm0vSW50ZWwv U2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvTG9hZExpbnV4TGliL0R4ZUxvYWRMaW51eExpYi5p bmYNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi5jZGVmZWViYmRkDQot LS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGli cmFyeS9Mb2FkTGludXhMaWIvRHhlTG9hZExpbnV4TGliLmluZg0KQEAgLTAsMCArMSw0MiBAQA0K KyMjIEBmaWxlDQorIw0KKyMgQ29weXJpZ2h0IChjKSAyMDA4IC0gMjAxOSBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gPEJSPg0KKyMNCisjIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorIw0KKyMjDQorDQorW0RlZmluZXNdDQorICBJ TkZfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDA1DQorICBCQVNFX05BTUUg ICAgICAgICAgICAgICAgICAgICAgPSBEeGVMb2FkTGludXhMaWINCisgIEZJTEVfR1VJRCAgICAg ICAgICAgICAgICAgICAgICA9IDYzQ0M4NDk3LUM5RDAtNDZBOC1BQzA4LTQ5REY5MkEyRkY2Mg0K KyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0gQkFTRQ0KKyAgVkVSU0lPTl9TVFJJ TkcgICAgICAgICAgICAgICAgID0gMS4wDQorICBMSUJSQVJZX0NMQVNTICAgICAgICAgICAgICAg ICAgPSBEeGVMb2FkTGludXhMaWJ8RFhFX0RSSVZFUg0KKw0KKyMNCisjIFRoZSBmb2xsb3dpbmcg aW5mb3JtYXRpb24gaXMgZm9yIHJlZmVyZW5jZSBvbmx5IGFuZCBub3QgcmVxdWlyZWQgYnkgdGhl IGJ1aWxkIHRvb2xzLg0KKyMNCisjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAgICAgICA9IElB MzIgWDY0DQorIw0KKw0KK1tTb3VyY2VzLmNvbW1vbl0NCisgIExpbnV4LmMNCisgIExpbnV4R2R0 LmMNCisNCitbU291cmNlcy5JQTMyXQ0KKyAgSWEzMi9KdW1wVG9LZXJuZWwubmFzbQ0KKw0KK1tT b3VyY2VzLlg2NF0NCisgIFg2NC9KdW1wVG9LZXJuZWwubmFzbQ0KKw0KK1tQYWNrYWdlc10NCisg IE1kZVBrZy9NZGVQa2cuZGVjDQorICBTaW1pY3NPcGVuQm9hcmRQa2cvT3BlbkJvYXJkUGtnLmRl Yw0KKw0KK1tMaWJyYXJ5Q2xhc3Nlc10NCisgIEJhc2VMaWINCisgIERlYnVnTGliDQorICBNZW1v cnlBbGxvY2F0aW9uTGliDQorICBCYXNlTWVtb3J5TGliDQorDQpkaWZmIC0tZ2l0IGEvUGxhdGZv cm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvTG9hZExpbnV4TGliL0lhMzIvSnVt cFRvS2VybmVsLm5hc20gYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFy eS9Mb2FkTGludXhMaWIvSWEzMi9KdW1wVG9LZXJuZWwubmFzbQ0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCmluZGV4IDAwMDAwMDAwMDAuLmM2ZjFjMzFhNTkNCi0tLSAvZGV2L251bGwNCisrKyBiL1Bs YXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L0xvYWRMaW51eExpYi9JYTMy L0p1bXBUb0tlcm5lbC5uYXNtDQpAQCAtMCwwICsxLDQxIEBADQorOyBAZmlsZQ0KKzsgQ29weXJp Z2h0IChjKSAyMDA2IC0gMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4gPEJSPg0KKzsNCis7IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0 ZW50DQorOw0KKw0KKyAgU0VDVElPTiAudGV4dA0KKw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N Cis7IFZPSUQNCis7IEVGSUFQSQ0KKzsgSnVtcFRvS2VybmVsICgNCis7ICAgVk9JRCAqS2VybmVs U3RhcnQsDQorOyAgIFZPSUQgKktlcm5lbEJvb3RQYXJhbXMNCis7ICAgKTsNCis7LS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQorZ2xvYmFsIEFTTV9QRlgoSnVtcFRvS2VybmVsKQ0KK0FTTV9QRlgoSnVt cFRvS2VybmVsKToNCisNCisgICAgbW92ICAgICBlc2ksIFtlc3AgKyA4XQ0KKyAgICBjYWxsICAg IERXT1JEIFtlc3AgKyA0XQ0KKyAgICByZXQNCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQor OyBWT0lEDQorOyBFRklBUEkNCis7IEp1bXBUb1VlZmlLZXJuZWwgKA0KKzsgICBFRklfSEFORExF IEltYWdlSGFuZGxlLA0KKzsgICBFRklfU1lTVEVNX1RBQkxFICpTeXN0ZW1UYWJsZSwNCis7ICAg Vk9JRCAqS2VybmVsQm9vdFBhcmFtcywNCis7ICAgVk9JRCAqS2VybmVsU3RhcnQNCis7ICAgKTsN Cis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorZ2xvYmFsIEFTTV9QRlgoSnVtcFRvVWVmaUtlcm5l bCkNCitBU01fUEZYKEp1bXBUb1VlZmlLZXJuZWwpOg0KKw0KKyAgICBtb3YgICAgIGVheCwgW2Vz cCArIDEyXQ0KKyAgICBtb3YgICAgIGVheCwgW2VheCArIDB4MjY0XQ0KKyAgICBhZGQgICAgIGVh eCwgW2VzcCArIDE2XQ0KKyAgICBqbXAgICAgIGVheA0KKw0KZGlmZiAtLWdpdCBhL1BsYXRmb3Jt L0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L0xvYWRMaW51eExpYi9Mb2FkTGludXhM aWIuaCBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L0xvYWRMaW51 eExpYi9Mb2FkTGludXhMaWIuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAw MDAuLjljMGFiODA5MDQNCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWlj c09wZW5Cb2FyZFBrZy9MaWJyYXJ5L0xvYWRMaW51eExpYi9Mb2FkTGludXhMaWIuaA0KQEAgLTAs MCArMSw1MiBAQA0KKy8qKiBAZmlsZQ0KKyAgQm9vdCBVRUZJIExpbnV4Lg0KKw0KKyAgQ29weXJp Z2h0IChjKSAyMDA4IC0gMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4gPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQNCisqKi8NCisNCisjaWZuZGVmIF9MT0FEX0xJTlVYX0xJQl9JTkNMVURFRF8NCisjZGVmaW5l IF9MT0FEX0xJTlVYX0xJQl9JTkNMVURFRF8NCisNCisjaW5jbHVkZSA8VWVmaS5oPg0KKyNpbmNs dWRlIDxMaWJyYXJ5L0xvYWRMaW51eExpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIu aD4NCisjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQorI2luY2x1ZGUgPExpYnJh cnkvRGVidWdMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+ DQorI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQorI2luY2x1 ZGUgPExpYnJhcnkvVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliLmg+DQorDQorI2luY2x1ZGUg PEluZHVzdHJ5U3RhbmRhcmQvTGludXhCekltYWdlLmg+DQorDQorI2luY2x1ZGUgPFByb3RvY29s L0dyYXBoaWNzT3V0cHV0Lmg+DQorDQorVk9JRA0KK0VGSUFQSQ0KK0p1bXBUb0tlcm5lbCAoDQor ICBWT0lEICpLZXJuZWxTdGFydCwNCisgIFZPSUQgKktlcm5lbEJvb3RQYXJhbXMNCisgICk7DQor DQorVk9JRA0KK0VGSUFQSQ0KK0p1bXBUb1VlZmlLZXJuZWwgKA0KKyAgRUZJX0hBTkRMRSBJbWFn ZUhhbmRsZSwNCisgIEVGSV9TWVNURU1fVEFCTEUgKlN5c3RlbVRhYmxlLA0KKyAgVk9JRCAqS2Vy bmVsQm9vdFBhcmFtcywNCisgIFZPSUQgKktlcm5lbFN0YXJ0DQorICApOw0KKw0KK1ZPSUQNCitJ bml0TGludXhEZXNjcmlwdG9yVGFibGVzICgNCisgIFZPSUQNCisgICk7DQorDQorVk9JRA0KK1Nl dExpbnV4RGVzY3JpcHRvclRhYmxlcyAoDQorICBWT0lEDQorICApOw0KKw0KKyNlbmRpZg0KKw0K ZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L0xv YWRMaW51eExpYi9YNjQvSnVtcFRvS2VybmVsLm5hc20gYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NP cGVuQm9hcmRQa2cvTGlicmFyeS9Mb2FkTGludXhMaWIvWDY0L0p1bXBUb0tlcm5lbC5uYXNtDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uMmI1Mzk1ZjZmOA0KLS0tIC9k ZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkv TG9hZExpbnV4TGliL1g2NC9KdW1wVG9LZXJuZWwubmFzbQ0KQEAgLTAsMCArMSw4NSBAQA0KKzsg QGZpbGUNCis7IENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFs bCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCis7DQorOyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTItQ2xhdXNlLVBhdGVudA0KKzsNCisNCisgIERFRkFVTFQgUkVMDQorICBTRUNUSU9OIC50 ZXh0DQorDQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKzsgVk9JRA0KKzsgRUZJQVBJDQorOyBK dW1wVG9LZXJuZWwgKA0KKzsgICBWT0lEICpLZXJuZWxTdGFydCwgICAgICAgICAvLyByY3gNCis7 ICAgVk9JRCAqS2VybmVsQm9vdFBhcmFtcyAgICAgLy8gcmR4DQorOyAgICk7DQorOy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KK2dsb2JhbCBBU01fUEZYKEp1bXBUb0tlcm5lbCkNCitBU01fUEZYKEp1 bXBUb0tlcm5lbCk6DQorDQorICAgIDsgU2V0IHVwIGZvciBleGVjdXRpbmcga2VybmVsLiBCUCBp biAlZXNpLCBlbnRyeSBwb2ludCBvbiB0aGUgc3RhY2sNCisgICAgOyAoNjQtYml0IHdoZW4gdGhl ICdyZXQnIHdpbGwgdXNlIGl0IGFzIDMyLWJpdCwgYnV0IHdlJ3JlIGxpdHRsZS1lbmRpYW4pDQor ICAgIG1vdiAgICByc2ksIHJkeA0KKyAgICBwdXNoICAgcmN4DQorDQorICAgIDsgSnVtcCBpbnRv IHRoZSBjb21wYXRpYmlsaXR5IG1vZGUgQ1MNCisgICAgcHVzaCAgICAweDEwDQorICAgIGxlYSAg ICAgcmF4LCBbLjBdDQorICAgIHB1c2ggICAgcmF4DQorICAgIERCIDB4NDgsIDB4Y2IgICAgICAg ICAgICAgICAgICAgICAgOyByZXRmcQ0KKw0KKy4wOg0KKyAgICA7IE5vdyBpbiBjb21wYXRpYmls aXR5IG1vZGUuDQorDQorICAgIERCIDB4YjgsIDB4MTgsIDB4MCwgMHgwLCAweDAgICAgOyBtb3Zs ICAgICQweDE4LCAlZWF4DQorICAgIERCIDB4OGUsIDB4ZDggICAgICAgICAgICAgICAgICAgICAg OyBtb3ZsICAgICVlYXgsICVkcw0KKyAgICBEQiAweDhlLCAweGMwICAgICAgICAgICAgICAgICAg ICAgIDsgbW92bCAgICAlZWF4LCAlZXMNCisgICAgREIgMHg4ZSwgMHhlMCAgICAgICAgICAgICAg ICAgICAgICA7IG1vdmwgICAgJWVheCwgJWZzDQorICAgIERCIDB4OGUsIDB4ZTggICAgICAgICAg ICAgICAgICAgICAgOyBtb3ZsICAgICVlYXgsICVncw0KKyAgICBEQiAweDhlLCAweGQwICAgICAg ICAgICAgICAgICAgICAgIDsgbW92bCAgICAlZWF4LCAlc3MNCisNCisgICAgOyBEaXNhYmxlIHBh Z2luZw0KKyAgICBEQiAweGYsIDB4MjAsIDB4YzAgICAgICAgICAgICAgICAgOyBtb3ZsICAgICVj cjAsICVlYXgNCisgICAgREIgMHhmLCAweGJhLCAweGY4LCAweDFmICAgICAgICAgIDsgYnRjbCAg ICAkMzEsICVlYXgNCisgICAgREIgMHhmLCAweDIyLCAweGMwICAgICAgICAgICAgICAgIDsgbW92 bCAgICAlZWF4LCAlY3IwDQorDQorICAgIDsgRGlzYWJsZSBsb25nIG1vZGUgaW4gRUZFUg0KKyAg ICBEQiAweGI5LCAweDgwLCAweDAsIDB4MCwgMHhjMCAgICA7IG1vdmwgICAgJDB4MGMwMDAwMDgw LCAlZWN4DQorICAgIERCIDB4ZiwgMHgzMiAgICAgICAgICAgICAgICAgICAgICA7IHJkbXNyDQor ICAgIERCIDB4ZiwgMHhiYSwgMHhmOCwgMHg4ICAgICAgICAgIDsgYnRjbCAgICAkOCwgJWVheA0K KyAgICBEQiAweGYsIDB4MzAgICAgICAgICAgICAgICAgICAgICAgOyB3cm1zcg0KKw0KKyAgICA7 IERpc2FibGUgUEFFDQorICAgIERCIDB4ZiwgMHgyMCwgMHhlMCAgICAgICAgICAgICAgICA7IG1v dmwgICAgJWNyNCwgJWVheA0KKyAgICBEQiAweGYsIDB4YmEsIDB4ZjgsIDB4NSAgICAgICAgICA7 IGJ0Y2wgICAgJDUsICVlYXgNCisgICAgREIgMHhmLCAweDIyLCAweGUwICAgICAgICAgICAgICAg IDsgbW92bCAgICAlZWF4LCAlY3I0DQorDQorICAgIERCIDB4MzEsIDB4ZWQgICAgICAgICAgICAg ICAgICAgICAgOyB4b3IgICAgICVlYnAsICVlYnANCisgICAgREIgMHgzMSwgMHhmZiAgICAgICAg ICAgICAgICAgICAgICA7IHhvciAgICAgJWVkaSwgJWVkaQ0KKyAgICBEQiAweDMxLCAweGRiICAg ICAgICAgICAgICAgICAgICAgIDsgeG9yICAgICAlZWJ4LCAlZWJ4DQorICAgIERCIDB4YzMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOyByZXQNCisNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQorOyBWT0lEDQorOyBFRklBUEkNCis7IEp1bXBUb1VlZmlLZXJuZWwgKA0KKzsgICBFRklfSEFO RExFIEltYWdlSGFuZGxlLCAgICAgICAgLy8gcmN4DQorOyAgIEVGSV9TWVNURU1fVEFCTEUgKlN5 c3RlbVRhYmxlLCAvLyByZHgNCis7ICAgVk9JRCAqS2VybmVsQm9vdFBhcmFtcyAgICAgICAgIC8v IHI4DQorOyAgIFZPSUQgKktlcm5lbFN0YXJ0LCAgICAgICAgICAgICAvLyByOQ0KKzsgICApOw0K KzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitnbG9iYWwgQVNNX1BGWChKdW1wVG9VZWZpS2VybmVs KQ0KK0FTTV9QRlgoSnVtcFRvVWVmaUtlcm5lbCk6DQorDQorICAgIG1vdiAgICAgcmRpLCByY3gN CisgICAgbW92ICAgICByc2ksIHJkeA0KKyAgICBtb3YgICAgIHJkeCwgcjgNCisgICAgeG9yICAg ICByYXgsIHJheA0KKyAgICBtb3YgICAgIGVheCwgW3I4ICsgMHgyNjRdDQorICAgIGFkZCAgICAg cjksIHJheA0KKyAgICBhZGQgICAgIHI5LCAweDIwMA0KKyAgICBjYWxsICAgIHI5DQorICAgIHJl dA0KKw0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJy YXJ5L052VmFyc0ZpbGVMaWIvTnZWYXJzRmlsZUxpYi5oIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNz T3BlbkJvYXJkUGtnL0xpYnJhcnkvTnZWYXJzRmlsZUxpYi9OdlZhcnNGaWxlTGliLmgNCm5ldyBm aWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi44MDc3NmZkMDAzDQotLS0gL2Rldi9u dWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9OdlZh cnNGaWxlTGliL052VmFyc0ZpbGVMaWIuaA0KQEAgLTAsMCArMSw1NSBAQA0KKy8qKiBAZmlsZQ0K KyAgU2F2ZSBOb24tVm9sYXRpbGUgVmFyaWFibGVzIHRvIGEgZmlsZSBzeXN0ZW0uDQorDQorICBD b3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLiA8QlI+DQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNl LVBhdGVudA0KKyoqLw0KKw0KKyNpZm5kZWYgX19OVl9WQVJTX0ZJTEVfTElCX0lOU1RBTkNFX18N CisjZGVmaW5lIF9fTlZfVkFSU19GSUxFX0xJQl9JTlNUQU5DRV9fDQorDQorI2luY2x1ZGUgPFVl ZmkuaD4NCisNCisjaW5jbHVkZSA8R3VpZC9GaWxlSW5mby5oPg0KKw0KKyNpbmNsdWRlIDxQcm90 b2NvbC9TaW1wbGVGaWxlU3lzdGVtLmg+DQorDQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5o Pg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0ZpbGVIYW5kbGVMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFy eS9TZXJpYWxpemVWYXJpYWJsZXNMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNl cnZpY2VzVGFibGVMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpUnVudGltZVNlcnZpY2Vz VGFibGVMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQorDQorLyoqDQorICBM b2FkcyB0aGUgbm9uLXZvbGF0aWxlIHZhcmlhYmxlcyBmcm9tIHRoZSBOdlZhcnMgZmlsZSBvbiB0 aGUNCisgIGdpdmVuIGZpbGUgc3lzdGVtLg0KKw0KKyAgQHBhcmFtW2luXSAgRnNIYW5kbGUgLSBI YW5kbGUgZm9yIGEgZ0VmaVNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1aWQgaW5zdGFuY2UNCisN CisgIEByZXR1cm4gICAgIEVGSV9TVEFUVVMgYmFzZWQgb24gdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVy ZSBvZiBsb2FkIG9wZXJhdGlvbg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitMb2FkTnZWYXJzRnJv bUZzICgNCisgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnNIYW5kbGUN CisgICk7DQorDQorDQorLyoqDQorICBTYXZlcyB0aGUgbm9uLXZvbGF0aWxlIHZhcmlhYmxlcyBp bnRvIHRoZSBOdlZhcnMgZmlsZSBvbiB0aGUNCisgIGdpdmVuIGZpbGUgc3lzdGVtLg0KKw0KKyAg QHBhcmFtW2luXSAgRnNIYW5kbGUgLSBIYW5kbGUgZm9yIGEgZ0VmaVNpbXBsZUZpbGVTeXN0ZW1Q cm90b2NvbEd1aWQgaW5zdGFuY2UNCisNCisgIEByZXR1cm4gICAgIEVGSV9TVEFUVVMgYmFzZWQg b24gdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBsb2FkIG9wZXJhdGlvbg0KKw0KKyoqLw0KK0VG SV9TVEFUVVMNCitTYXZlTnZWYXJzVG9GcyAoDQorICBFRklfSEFORExFICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZzSGFuZGxlDQorICApOw0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBh L1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L052VmFyc0ZpbGVMaWIv TnZWYXJzRmlsZUxpYi5pbmYgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGli cmFyeS9OdlZhcnNGaWxlTGliL052VmFyc0ZpbGVMaWIuaW5mDQpuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KaW5kZXggMDAwMDAwMDAwMC4uNDczMWU3Nzg2NQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxh dGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvTnZWYXJzRmlsZUxpYi9OdlZh cnNGaWxlTGliLmluZg0KQEAgLTAsMCArMSw1MyBAQA0KKyMjIEBmaWxlDQorIyAgTnZWYXJzRmls ZUxpYg0KKyMNCisjICBUaGlzIGxpYnJhcnkgc2F2ZXMgYW5kIHJlc3RvcmVzIG5vbi12b2xhdGls ZSB2YXJpYWJsZXMgaW4gYQ0KKyMgIGZpbGUgd2l0aGluIGEgZmlsZSBzeXN0ZW0uDQorIw0KKyMg Q29weXJpZ2h0IChjKSAyMDA2IC0gMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4gPEJSPg0KKyMNCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1 c2UtUGF0ZW50DQorIw0KKyMjDQorDQorW0RlZmluZXNdDQorICBJTkZfVkVSU0lPTiAgICAgICAg ICAgICAgICAgICAgPSAweDAwMDEwMDA1DQorICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAg ICAgPSBOdlZhcnNGaWxlTGliDQorICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSA4 RUNENENDMC0xNzcyLTQ1ODMtOEE3NC04MzYzM0ExNUZBQTANCisgIE1PRFVMRV9UWVBFICAgICAg ICAgICAgICAgICAgICA9IFVFRklfRFJJVkVSDQorICBWRVJTSU9OX1NUUklORyAgICAgICAgICAg ICAgICAgPSAxLjANCisgIExJQlJBUllfQ0xBU1MgICAgICAgICAgICAgICAgICA9IE52VmFyc0Zp bGVMaWJ8RFhFX0RSSVZFUiBEWEVfUlVOVElNRV9EUklWRVIgVUVGSV9EUklWRVINCisNCisjDQor IyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGZvciByZWZlcmVuY2Ugb25seSBhbmQgbm90 IHJlcXVpcmVkIGJ5IHRoZSBidWlsZCB0b29scy4NCisjDQorIyAgVkFMSURfQVJDSElURUNUVVJF UyAgICAgICAgICAgPSBJQTMyIFg2NCBFQkMNCisjDQorDQorW1NvdXJjZXNdDQorICBGc0FjY2Vz cy5jDQorICBOdlZhcnNGaWxlTGliLmMNCisNCitbUGFja2FnZXNdDQorICBNZGVQa2cvTWRlUGtn LmRlYw0KKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCisgIFNoZWxsUGtnL1NoZWxs UGtnLmRlYw0KKyAgT3ZtZlBrZy9Pdm1mUGtnLmRlYw0KKw0KK1tMaWJyYXJ5Q2xhc3Nlc10NCisg IEJhc2VMaWINCisgIEJhc2VNZW1vcnlMaWINCisgIERlYnVnTGliDQorICBGaWxlSGFuZGxlTGli DQorICBNZW1vcnlBbGxvY2F0aW9uTGliDQorICBTZXJpYWxpemVWYXJpYWJsZXNMaWINCisNCitb UHJvdG9jb2xzXQ0KKyAgZ0VmaVNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1aWQgICAgICAgICAg ICAgICMjIENPTlNVTUVTDQorDQorW0d1aWRzXQ0KKyAgZ0VmaUZpbGVJbmZvR3VpZA0KKw0KK1tE ZXBleF0NCisgIGdFZmlWYXJpYWJsZVdyaXRlQXJjaFByb3RvY29sR3VpZA0KKw0KZGlmZiAtLWdp dCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1BjaUhvc3RCcmlk Z2VMaWIvUGNpSG9zdEJyaWRnZS5oIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtn L0xpYnJhcnkvUGNpSG9zdEJyaWRnZUxpYi9QY2lIb3N0QnJpZGdlLmgNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi4wYzc1NDMwMjYwDQotLS0gL2Rldi9udWxsDQorKysg Yi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9QY2lIb3N0QnJpZGdl TGliL1BjaUhvc3RCcmlkZ2UuaA0KQEAgLTAsMCArMSw2OCBAQA0KKy8qKiBAZmlsZQ0KKyAgSGVh ZGVyIGZpbGUgb2YgT1ZNRiBpbnN0YW5jZSBvZiBQY2lIb3N0QnJpZGdlTGliLg0KKw0KKyAgQ29w eXJpZ2h0IChjKSAyMDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8 QlI+DQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0K KyoqLw0KKw0KK1BDSV9ST09UX0JSSURHRSAqDQorU2NhbkZvclJvb3RCcmlkZ2VzICgNCisgIFVJ TlROICAgICAgKk51bWJlck9mUm9vdEJyaWRnZXMNCispOw0KKw0KKy8qKg0KKyAgSW5pdGlhbGl6 ZSBhIFBDSV9ST09UX0JSSURHRSBzdHJ1Y3R1cmUuDQorDQorICBAcGFyYW1baW5dICBTdXBwb3J0 cyAgICAgICAgIFN1cHBvcnRlZCBhdHRyaWJ1dGVzLg0KKw0KKyAgQHBhcmFtW2luXSAgQXR0cmli dXRlcyAgICAgICBJbml0aWFsIGF0dHJpYnV0ZXMuDQorDQorICBAcGFyYW1baW5dICBBbGxvY0F0 dHJpYnV0ZXMgIEFsbG9jYXRpb24gYXR0cmlidXRlcy4NCisNCisgIEBwYXJhbVtpbl0gIFJvb3RC dXNOdW1iZXIgICAgVGhlIGJ1cyBudW1iZXIgdG8gc3RvcmUgaW4gUm9vdEJ1cy4NCisNCisgIEBw YXJhbVtpbl0gIE1heFN1YkJ1c051bWJlciAgVGhlIGluY2x1c2l2ZSBtYXhpbXVtIGJ1cyBudW1i ZXIgdGhhdCBjYW4gYmUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduZWQg dG8gYW55IHN1Ym9yZGluYXRlIGJ1cyBmb3VuZCBiZWhpbmQgYW55DQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBDSSBicmlkZ2UgaGFuZ2luZyBvZmYgdGhpcyByb290IGJ1cy4NCisN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNhbGxlciBpcyByZXBzb25zaWJs ZSBmb3IgZW5zdXJpbmcgdGhhdA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb290 QnVzTnVtYmVyIDw9IE1heFN1YkJ1c051bWJlci4gSWYNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUm9vdEJ1c051bWJlciBlcXVhbHMgTWF4U3ViQnVzTnVtYmVyLCB0aGVuIHRoZQ0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290IGJ1cyBoYXMgbm8gcm9vbSBmb3Ig c3Vib3JkaW5hdGUgYnVzZXMuDQorDQorICBAcGFyYW1baW5dICBJbyAgICAgICAgICAgICAgIElP IGFwZXJ0dXJlLg0KKw0KKyAgQHBhcmFtW2luXSAgTWVtICAgICAgICAgICAgICBNTUlPIGFwZXJ0 dXJlLg0KKw0KKyAgQHBhcmFtW2luXSAgTWVtQWJvdmU0RyAgICAgICBNTUlPIGFwZXJ0dXJlIGFi b3ZlIDRHLg0KKw0KKyAgQHBhcmFtW2luXSAgUE1lbSAgICAgICAgICAgICBQcmVmZXRjaGFibGUg TU1JTyBhcGVydHVyZS4NCisNCisgIEBwYXJhbVtpbl0gIFBNZW1BYm92ZTRHICAgICAgUHJlZmV0 Y2hhYmxlIE1NSU8gYXBlcnR1cmUgYWJvdmUgNEcuDQorDQorICBAcGFyYW1bb3V0XSBSb290QnVz ICAgICAgICAgIFRoZSBQQ0lfUk9PVF9CUklER0Ugc3RydWN0dXJlIChhbGxvY2F0ZWQgYnkgdGhl DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlcikgdGhhdCBzaG91bGQgYmUg ZmlsbGVkIGluIGJ5IHRoaXMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp b24uDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBJbml0aWFsaXphdGlvbiBz dWNjZXNzZnVsLiBBIGRldmljZSBwYXRoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zaXN0aW5nIG9mIGFuIEFDUEkgZGV2aWNlIHBhdGggbm9kZSwgd2l0aA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVUlEID0gUm9vdEJ1c051bWJlciwgaGFzIGJlZW4gYWxs b2NhdGVkIGFuZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VkIGludG8g Um9vdEJ1cy4NCisNCisgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIE1lbW9yeSBhbGxv Y2F0aW9uIGZhaWxlZC4NCisqKi8NCitFRklfU1RBVFVTDQorSW5pdFJvb3RCcmlkZ2UgKA0KKyAg SU4gIFVJTlQ2NCAgICAgICAgICAgICAgICAgICBTdXBwb3J0cywNCisgIElOICBVSU5UNjQgICAg ICAgICAgICAgICAgICAgQXR0cmlidXRlcywNCisgIElOICBVSU5UNjQgICAgICAgICAgICAgICAg ICAgQWxsb2NBdHRyaWJ1dGVzLA0KKyAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICBSb290 QnVzTnVtYmVyLA0KKyAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICBNYXhTdWJCdXNOdW1i ZXIsDQorICBJTiAgUENJX1JPT1RfQlJJREdFX0FQRVJUVVJFICpJbywNCisgIElOICBQQ0lfUk9P VF9CUklER0VfQVBFUlRVUkUgKk1lbSwNCisgIElOICBQQ0lfUk9PVF9CUklER0VfQVBFUlRVUkUg Kk1lbUFib3ZlNEcsDQorICBJTiAgUENJX1JPT1RfQlJJREdFX0FQRVJUVVJFICpQTWVtLA0KKyAg SU4gIFBDSV9ST09UX0JSSURHRV9BUEVSVFVSRSAqUE1lbUFib3ZlNEcsDQorICBPVVQgUENJX1JP T1RfQlJJREdFICAgICAgICAgICpSb290QnVzDQorICApOw0KZGlmZiAtLWdpdCBhL1BsYXRmb3Jt L0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1BjaUhvc3RCcmlkZ2VMaWIvUGNpSG9z dEJyaWRnZUxpYi5pbmYgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFy eS9QY2lIb3N0QnJpZGdlTGliL1BjaUhvc3RCcmlkZ2VMaWIuaW5mDQpuZXcgZmlsZSBtb2RlIDEw MDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uYjIyNTMxYmI1Ng0KLS0tIC9kZXYvbnVsbA0KKysrIGIv UGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGNpSG9zdEJyaWRnZUxp Yi9QY2lIb3N0QnJpZGdlTGliLmluZg0KQEAgLTAsMCArMSw1MSBAQA0KKyMjIEBmaWxlDQorIyAg T1ZNRidzIGluc3RhbmNlIG9mIHRoZSBQQ0kgSG9zdCBCcmlkZ2UgTGlicmFyeS4NCisjDQorIyAg Q29weXJpZ2h0IChDKSAyMDE2LCBSZWQgSGF0LCBJbmMuDQorIyBDb3B5cmlnaHQgKGMpIDIwMTYg LSAyMDE4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQorIw0K KyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisjDQorIyMN CisNCitbRGVmaW5lc10NCisgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAw MTAwMDUNCisgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IFBjaUhvc3RCcmlkZ2VM aWINCisgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDJGMDRFQzQxLUMzQTAtNDNF Qi1BQzZBLTQwOUY5NzNGNDQzOQ0KKyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0g RFhFX0RSSVZFUg0KKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQorICBM SUJSQVJZX0NMQVNTICAgICAgICAgICAgICAgICAgPSBQY2lIb3N0QnJpZGdlTGliDQorDQorIw0K KyMgVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBmb3IgcmVmZXJlbmNlIG9ubHkgYW5kIG5v dCByZXF1aXJlZCBieSB0aGUgYnVpbGQNCisjIHRvb2xzLg0KKyMNCisjICBWQUxJRF9BUkNISVRF Q1RVUkVTICAgICAgICAgICA9IElBMzIgWDY0IEVCQw0KKyMNCisNCitbU291cmNlc10NCisgIFBj aUhvc3RCcmlkZ2VMaWIuYw0KKyAgUGNpSG9zdEJyaWRnZS5oDQorDQorW1BhY2thZ2VzXQ0KKyAg TWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCisgIE1kZVBrZy9NZGVQa2cuZGVjDQorICBT aW1pY3NPcGVuQm9hcmRQa2cvT3BlbkJvYXJkUGtnLmRlYw0KKyAgU2ltaWNzSWNoMTBQa2cvSWNo MTBQa2cuZGVjDQorDQorW0xpYnJhcnlDbGFzc2VzXQ0KKyAgQmFzZU1lbW9yeUxpYg0KKyAgRGVi dWdMaWINCisgIERldmljZVBhdGhMaWINCisgIE1lbW9yeUFsbG9jYXRpb25MaWINCisgIFBjaUxp Yg0KKw0KK1tQY2RdDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RQY2lJb0Jhc2UN CisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlkLlBjZFBjaUlvU2l6ZQ0KKyAgZ0JvYXJkTW9k dWxlVG9rZW5TcGFjZUd1aWQuUGNkUGNpTW1pbzMyQmFzZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5T cGFjZUd1aWQuUGNkUGNpTW1pbzMyU2l6ZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFjZUd1aWQu UGNkUGNpTW1pbzY0QmFzZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFjZUd1aWQuUGNkUGNpTW1p bzY0U2l6ZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFjZUd1aWQuUGNkU2ltaWNzWDU4SG9zdEJy aWRnZVBjaURldklkDQorICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkUGNpRGlz YWJsZUJ1c0VudW1lcmF0aW9uDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3Bl bkJvYXJkUGtnL0xpYnJhcnkvUGVpUmVwb3J0RnZMaWIvUGVpUmVwb3J0RnZMaWIuaW5mIGIvUGxh dGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGVpUmVwb3J0RnZMaWIvUGVp UmVwb3J0RnZMaWIuaW5mDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4u NjQ2NWYzOWZiNA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3Bl bkJvYXJkUGtnL0xpYnJhcnkvUGVpUmVwb3J0RnZMaWIvUGVpUmVwb3J0RnZMaWIuaW5mDQpAQCAt MCwwICsxLDU2IEBADQorIyMjIEBmaWxlDQorIyBDb21wb25lbnQgaW5mb3JtYXRpb24gZmlsZSBm b3IgdGhlIFJlcG9ydCBGaXJtd2FyZSBWb2x1bWUgKEZWKSBsaWJyYXJ5Lg0KKyMNCisjIENvcHly aWdodCAoYykgMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJS Pg0KKyMNCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQor Iw0KKyMjIw0KKw0KK1tEZWZpbmVzXQ0KKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAg ID0gMHgwMDAxMDAxNw0KKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gUGVpUmVw b3J0RnZMaWINCisgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDQ0MzI4RkE1LUU0 REQtNEExNS1BQkRGLUM2NTg0QUMzNjNEOQ0KKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAg ICAgID0gMS4wDQorICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBQRUlNDQorICBM SUJSQVJZX0NMQVNTICAgICAgICAgICAgICAgICAgPSBSZXBvcnRGdkxpYg0KKw0KK1tMaWJyYXJ5 Q2xhc3Nlc10NCisgIEJhc2VNZW1vcnlMaWINCisgIERlYnVnTGliDQorICBIb2JMaWINCisgIFBl aVNlcnZpY2VzTGliDQorICBQY2RMaWINCisgIElvTGliDQorDQorW1BhY2thZ2VzXQ0KKyAgTWRl UGtnL01kZVBrZy5kZWMNCisgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQorICBNaW5Q bGF0Zm9ybVBrZy9NaW5QbGF0Zm9ybVBrZy5kZWMNCisgIFNpbWljc09wZW5Cb2FyZFBrZy9PcGVu Qm9hcmRQa2cuZGVjDQorICBTaW1pY3NYNThTa3RQa2cvU2t0UGtnLmRlYw0KKyAgU2ltaWNzSWNo MTBQa2cvSWNoMTBQa2cuZGVjDQorDQorW1NvdXJjZXNdDQorICBQZWlSZXBvcnRGdkxpYi5jDQor ICBGdi5jDQorDQorW1BjZF0NCisgIGdNaW5QbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEZs YXNoQXJlYUJhc2VBZGRyZXNzICAgICAjIyBDT05TVU1FUw0KKyAgZ01pblBsYXRmb3JtUGtnVG9r ZW5TcGFjZUd1aWQuUGNkRmxhc2hBcmVhU2l6ZSAgICAgICAgICAgICMjIENPTlNVTUVTDQorICBn TWluUGxhdGZvcm1Qa2dUb2tlblNwYWNlR3VpZC5QY2RGbGFzaEZ2UG9zdE1lbW9yeUJhc2UgICAg IyMgQ09OU1VNRVMNCisgIGdNaW5QbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEZsYXNoRnZQ b3N0TWVtb3J5U2l6ZSAgICAjIyBDT05TVU1FUw0KKyAgZ01pblBsYXRmb3JtUGtnVG9rZW5TcGFj ZUd1aWQuUGNkRmxhc2hGdlVlZmlCb290QmFzZSAgICAgICMjIENPTlNVTUVTDQorICBnTWluUGxh dGZvcm1Qa2dUb2tlblNwYWNlR3VpZC5QY2RGbGFzaEZ2VWVmaUJvb3RTaXplICAgICAgIyMgQ09O U1VNRVMNCisgIGdNaW5QbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEZsYXNoRnZPc0Jvb3RC YXNlICAgICAgICAjIyBDT05TVU1FUw0KKyAgZ01pblBsYXRmb3JtUGtnVG9rZW5TcGFjZUd1aWQu UGNkRmxhc2hGdk9zQm9vdFNpemUgICAgICAgICMjIENPTlNVTUVTDQorICBnTWluUGxhdGZvcm1Q a2dUb2tlblNwYWNlR3VpZC5QY2RGbGFzaEZ2U2VjdXJpdHlCYXNlICAgICAgIyMgQ09OU1VNRVMN CisgIGdNaW5QbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEZsYXNoRnZTZWN1cml0eVNpemUg ICAgICAjIyBDT05TVU1FUw0KKyAgZ01pblBsYXRmb3JtUGtnVG9rZW5TcGFjZUd1aWQuUGNkRmxh c2hGdkFkdmFuY2VkQmFzZSAgICAgICMjIENPTlNVTUVTDQorICBnTWluUGxhdGZvcm1Qa2dUb2tl blNwYWNlR3VpZC5QY2RGbGFzaEZ2QWR2YW5jZWRTaXplICAgICAgIyMgQ09OU1VNRVMNCisgIGdC b2FyZE1vZHVsZVRva2VuU3BhY2VHdWlkLlBjZFNpbWljc1BlaU1lbUZ2QmFzZQ0KKyAgZ0JvYXJk TW9kdWxlVG9rZW5TcGFjZUd1aWQuUGNkU2ltaWNzUGVpTWVtRnZTaXplDQorICBnQm9hcmRNb2R1 bGVUb2tlblNwYWNlR3VpZC5QY2RTaW1pY3NEeGVNZW1GdkJhc2UNCisgIGdCb2FyZE1vZHVsZVRv a2VuU3BhY2VHdWlkLlBjZFNpbWljc0R4ZU1lbUZ2U2l6ZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5T cGFjZUd1aWQuUGNkU2ltaWNzRGVjb21wcmVzc2lvblNjcmF0Y2hFbmQNCisgIGdTaW1pY3NYNThQ a2dUb2tlblNwYWNlR3VpZC5QY2RTbW1TbXJhbVJlcXVpcmUNCmRpZmYgLS1naXQgYS9QbGF0Zm9y bS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9QbGF0Zm9ybUJvb3RNYW5hZ2VyTGli L0Jkc1BsYXRmb3JtLmggYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFy eS9QbGF0Zm9ybUJvb3RNYW5hZ2VyTGliL0Jkc1BsYXRmb3JtLmgNCm5ldyBmaWxlIG1vZGUgMTAw NjQ0DQppbmRleCAwMDAwMDAwMDAwLi4wMWJhMjBkMmRhDQotLS0gL2Rldi9udWxsDQorKysgYi9Q bGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9QbGF0Zm9ybUJvb3RNYW5h Z2VyTGliL0Jkc1BsYXRmb3JtLmgNCkBAIC0wLDAgKzEsMTcyIEBADQorLyoqIEBmaWxlDQorICBQ bGF0Zm9ybSBCRFMgY3VzdG9taXphdGlvbnMgaW5jbHVkZSBmaWxlLg0KKw0KKyAgQ29weXJpZ2h0 IChjKSAyMDA2IC0gMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4g PEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQN CisqKi8NCisNCisjaWZuZGVmIF9QTEFURk9STV9TUEVDSUZJQ19CRFNfUExBVEZPUk1fSF8NCisj ZGVmaW5lIF9QTEFURk9STV9TUEVDSUZJQ19CRFNfUExBVEZPUk1fSF8NCisNCisNCisjaW5jbHVk ZSA8UGlEeGUuaD4NCisNCisjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9QY2kuaD4NCisjaW5j bHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9BY3BpLmg+DQorI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRh cmQvU21CaW9zLmg+DQorI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvUGVJbWFnZS5oPg0KKw0K KyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1l bW9yeUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5o Pg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlSdW50aW1lU2VydmljZXNUYWJsZUxpYi5oPg0KKyNp bmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCisjaW5jbHVkZSA8TGlicmFy eS9CYXNlTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGNkTGliLmg+DQorI2luY2x1ZGUgPExp YnJhcnkvUGNpTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RNYW5hZ2VyTGliLmg+ DQorI2luY2x1ZGUgPExpYnJhcnkvQm9vdExvZ29MaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9I b2JMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQorI2luY2x1ZGUgPExpYnJh cnkvRHhlU2VydmljZXNUYWJsZUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0RldmljZVBhdGhM aWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9Jb0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L052 VmFyc0ZpbGVMaWIuaD4NCisNCisjaW5jbHVkZSA8UHJvdG9jb2wvRGVjb21wcmVzcy5oPg0KKyNp bmNsdWRlIDxQcm90b2NvbC9QY2lJby5oPg0KKyNpbmNsdWRlIDxQcm90b2NvbC9GaXJtd2FyZVZv bHVtZTIuaD4NCisjaW5jbHVkZSA8UHJvdG9jb2wvU2ltcGxlRmlsZVN5c3RlbS5oPg0KKyNpbmNs dWRlIDxQcm90b2NvbC9QY2lSb290QnJpZGdlSW8uaD4NCisjaW5jbHVkZSA8UHJvdG9jb2wvUzNT YXZlU3RhdGUuaD4NCisjaW5jbHVkZSA8UHJvdG9jb2wvRHhlU21tUmVhZHlUb0xvY2suaD4NCisj aW5jbHVkZSA8UHJvdG9jb2wvTG9hZGVkSW1hZ2UuaD4NCisNCisjaW5jbHVkZSA8R3VpZC9BY3Bp Lmg+DQorI2luY2x1ZGUgPEd1aWQvU21CaW9zLmg+DQorI2luY2x1ZGUgPEd1aWQvTXBzLmg+DQor I2luY2x1ZGUgPEd1aWQvSG9iTGlzdC5oPg0KKyNpbmNsdWRlIDxHdWlkL0dsb2JhbFZhcmlhYmxl Lmg+DQorI2luY2x1ZGUgPEd1aWQvRXZlbnRHcm91cC5oPg0KKw0KKyNpbmNsdWRlIDxTaW1pY3NQ bGF0Zm9ybXMuaD4NCisNCitleHRlcm4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgKmdQbGF0 Zm9ybUNvbm5lY3RTZXF1ZW5jZVtdOw0KK2V4dGVybiBBQ1BJX0hJRF9ERVZJQ0VfUEFUSCAgICAg ICBnUG5wUHMyS2V5Ym9hcmREZXZpY2VOb2RlOw0KK2V4dGVybiBBQ1BJX0hJRF9ERVZJQ0VfUEFU SCAgICAgICBnUG5wMTY1NTBDb21Qb3J0RGV2aWNlTm9kZTsNCitleHRlcm4gVUFSVF9ERVZJQ0Vf UEFUSCAgICAgICAgICAgZ1VhcnREZXZpY2VOb2RlOw0KK2V4dGVybiBWRU5ET1JfREVWSUNFX1BB VEggICAgICAgICBnVGVybWluYWxUeXBlRGV2aWNlTm9kZTsNCisNCisjZGVmaW5lIFBDSV9ERVZJ Q0VfUEFUSF9OT0RFKEZ1bmMsIERldikgXA0KKyAgeyBcDQorICAgIHsgXA0KKyAgICAgIEhBUkRX QVJFX0RFVklDRV9QQVRILCBcDQorICAgICAgSFdfUENJX0RQLCBcDQorICAgICAgeyBcDQorICAg ICAgICAoVUlOVDgpIChzaXplb2YgKFBDSV9ERVZJQ0VfUEFUSCkpLCBcDQorICAgICAgICAoVUlO VDgpICgoc2l6ZW9mIChQQ0lfREVWSUNFX1BBVEgpKSA+PiA4KSBcDQorICAgICAgfSBcDQorICAg IH0sIFwNCisgICAgKEZ1bmMpLCBcDQorICAgIChEZXYpIFwNCisgIH0NCisNCisjZGVmaW5lIFBO UElEX0RFVklDRV9QQVRIX05PREUoUG5wSWQpIFwNCisgIHsgXA0KKyAgICB7IFwNCisgICAgICBB Q1BJX0RFVklDRV9QQVRILCBcDQorICAgICAgQUNQSV9EUCwgXA0KKyAgICAgIHsgXA0KKyAgICAg ICAgKFVJTlQ4KSAoc2l6ZW9mIChBQ1BJX0hJRF9ERVZJQ0VfUEFUSCkpLCBcDQorICAgICAgICAo VUlOVDgpICgoc2l6ZW9mIChBQ1BJX0hJRF9ERVZJQ0VfUEFUSCkpID4+IDgpIFwNCisgICAgICB9 LCBcDQorICAgIH0sIFwNCisgICAgRUlTQV9QTlBfSUQoKFBucElkKSksIFwNCisgICAgMCBcDQor ICB9DQorDQorI2RlZmluZSBnUGNpSXNhQnJpZGdlIFwNCisgIFBDSV9ERVZJQ0VfUEFUSF9OT0RF KDAsIDB4MWYpDQorDQorI2RlZmluZSBnUDJQQnJpZGdlIFwNCisgIFBDSV9ERVZJQ0VfUEFUSF9O T0RFKDAsIDB4MWUpDQorDQorI2RlZmluZSBnUG5wUHMyS2V5Ym9hcmQgXA0KKyAgUE5QSURfREVW SUNFX1BBVEhfTk9ERSgweDAzMDMpDQorDQorI2RlZmluZSBnUG5wMTY1NTBDb21Qb3J0IFwNCisg IFBOUElEX0RFVklDRV9QQVRIX05PREUoMHgwNTAxKQ0KKw0KKyNkZWZpbmUgZ1VhcnQgXA0KKyAg eyBcDQorICAgIHsgXA0KKyAgICAgIE1FU1NBR0lOR19ERVZJQ0VfUEFUSCwgXA0KKyAgICAgIE1T R19VQVJUX0RQLCBcDQorICAgICAgeyBcDQorICAgICAgICAoVUlOVDgpIChzaXplb2YgKFVBUlRf REVWSUNFX1BBVEgpKSwgXA0KKyAgICAgICAgKFVJTlQ4KSAoKHNpemVvZiAoVUFSVF9ERVZJQ0Vf UEFUSCkpID4+IDgpIFwNCisgICAgICB9IFwNCisgICAgfSwgXA0KKyAgICAwLCBcDQorICAgIDEx NTIwMCwgXA0KKyAgICA4LCBcDQorICAgIDEsIFwNCisgICAgMSBcDQorICB9DQorDQorI2RlZmlu ZSBnUGNBbnNpVGVybWluYWwgXA0KKyAgeyBcDQorICAgIHsgXA0KKyAgICAgIE1FU1NBR0lOR19E RVZJQ0VfUEFUSCwgXA0KKyAgICAgIE1TR19WRU5ET1JfRFAsIFwNCisgICAgICB7IFwNCisgICAg ICAgIChVSU5UOCkgKHNpemVvZiAoVkVORE9SX0RFVklDRV9QQVRIKSksIFwNCisgICAgICAgIChV SU5UOCkgKChzaXplb2YgKFZFTkRPUl9ERVZJQ0VfUEFUSCkpID4+IDgpIFwNCisgICAgICB9IFwN CisgICAgfSwgXA0KKyAgICBERVZJQ0VfUEFUSF9NRVNTQUdJTkdfUENfQU5TSSBcDQorICB9DQor DQorI2RlZmluZSBQQ0lfQ0xBU1NfU0NDICAgICAgICAgIDB4MDcNCisjZGVmaW5lIFBDSV9TVUJD TEFTU19TRVJJQUwgICAgMHgwMA0KKyNkZWZpbmUgUENJX0lGXzE2NTUwICAgICAgICAgICAweDAy DQorI2RlZmluZSBJU19QQ0lfMTY1NTBTRVJJQUwoX3ApICAgICAgICAgICBJU19DTEFTUzMgKF9w LCBQQ0lfQ0xBU1NfU0NDLCBQQ0lfU1VCQ0xBU1NfU0VSSUFMLCBQQ0lfSUZfMTY1NTApDQorI2Rl ZmluZSBJU19QQ0lfSVNBX1BERUNPREUoX3ApICAgICAgICBJU19DTEFTUzMgKF9wLCBQQ0lfQ0xB U1NfQlJJREdFLCBQQ0lfQ0xBU1NfQlJJREdFX0lTQV9QREVDT0RFLCAwKQ0KKw0KK3R5cGVkZWYg c3RydWN0IHsNCisgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKkRldmljZVBhdGg7DQorICBV SU5UTiAgICAgICAgICAgICAgICAgICAgIENvbm5lY3RUeXBlOw0KK30gUExBVEZPUk1fQ09OU09M RV9DT05ORUNUX0VOVFJZOw0KKw0KKyNkZWZpbmUgQ09OU09MRV9PVVQgQklUMA0KKyNkZWZpbmUg Q09OU09MRV9JTiAgQklUMQ0KKyNkZWZpbmUgU1REX0VSUk9SICAgQklUMg0KK2V4dGVybiBQTEFU Rk9STV9DT05TT0xFX0NPTk5FQ1RfRU5UUlkgIGdQbGF0Zm9ybUNvbnNvbGVbXTsNCisNCisvLw0K Ky8vIFBsYXRmb3JtIEJEUyBGdW5jdGlvbnMNCisvLw0KKw0KK1ZPSUQNCitQbGF0Zm9ybUluaXRp YWxpemVDb25zb2xlICgNCisgIElOIFBMQVRGT1JNX0NPTlNPTEVfQ09OTkVDVF9FTlRSWSAgICpQ bGF0Zm9ybUNvbnNvbGUNCisgICk7DQorDQorLyoqDQorICBVc2UgU3lzdGVtVGFibGUgQ29uT3V0 IHRvIHN0b3AgdmlkZW8gYmFzZWQgU2ltcGxlIFRleHQgT3V0IGNvbnNvbGVzIGZyb20gZ29pbmcN CisgIHRvIHRoZSB2aWRlbyBkZXZpY2UuIFB1dCB1cCBMb2dvRmlsZSBvbiBldmVyeSB2aWRlbyBk ZXZpY2UgdGhhdCBpcyBhIGNvbnNvbGUuDQorDQorICBAcGFyYW1baW5dICBMb2dvRmlsZSAgIFRo ZSBmaWxlIG5hbWUgb2YgbG9nbyB0byBkaXNwbGF5IG9uIHRoZSBjZW50ZXIgb2YgdGhlIHNjcmVl bi4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIENvbnNvbGVDb250cm9sIGhhcyBiZWVu IGZsaXBwZWQgdG8gZ3JhcGhpY3MgYW5kIGxvZ28gZGlzcGxheWVkLg0KKyAgQHJldHZhbCBFRklf VU5TVVBQT1JURUQgTG9nbyBub3QgZm91bmQuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQ SQ0KK0VuYWJsZUJvb3RMb2dvKA0KKyAgSU4gIEVGSV9HVUlEICAqTG9nb0ZpbGUNCispOw0KKw0K KyNlbmRpZiAvLyBfUExBVEZPUk1fU1BFQ0lGSUNfQkRTX1BMQVRGT1JNX0hfDQpkaWZmIC0tZ2l0 IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGxhdGZvcm1Cb290 TWFuYWdlckxpYi9QbGF0Zm9ybUJvb3RNYW5hZ2VyTGliLmluZiBiL1BsYXRmb3JtL0ludGVsL1Np bWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1BsYXRmb3JtQm9vdE1hbmFnZXJMaWIvUGxhdGZvcm1C b290TWFuYWdlckxpYi5pbmYNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAw Li5jZGI2ZTI0MmU4DQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NP cGVuQm9hcmRQa2cvTGlicmFyeS9QbGF0Zm9ybUJvb3RNYW5hZ2VyTGliL1BsYXRmb3JtQm9vdE1h bmFnZXJMaWIuaW5mDQpAQCAtMCwwICsxLDcyIEBADQorIyMgQGZpbGUNCisjICBQbGF0Zm9ybSBC RFMgY3VzdG9taXphdGlvbnMgbGlicmFyeS4NCisjDQorIyBDb3B5cmlnaHQgKGMpIDIwMDcgLSAy MDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQorIw0KKyMg U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisjDQorIyMNCisN CitbRGVmaW5lc10NCisgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAw MDUNCisgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IFBsYXRmb3JtQm9vdE1hbmFn ZXJMaWINCisgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDhBRTQ3NTZGLTBDNzEt NEMwNi04NEQ0LTRDNzFGMjA0RDUxNA0KKyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAg ID0gRFhFX0RSSVZFUg0KKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQor ICBMSUJSQVJZX0NMQVNTICAgICAgICAgICAgICAgICAgPSBQbGF0Zm9ybUJvb3RNYW5hZ2VyTGli fERYRV9EUklWRVINCisNCisjDQorIyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGZvciBy ZWZlcmVuY2Ugb25seSBhbmQgbm90IHJlcXVpcmVkIGJ5IHRoZSBidWlsZCB0b29scy4NCisjDQor IyAgVkFMSURfQVJDSElURUNUVVJFUyAgICAgICAgICAgPSBJQTMyIFg2NCBFQkMNCisjDQorDQor W1NvdXJjZXNdDQorICBCZHNQbGF0Zm9ybS5jDQorICBQbGF0Zm9ybURhdGEuYw0KKyAgQmRzUGxh dGZvcm0uaA0KKw0KK1tQYWNrYWdlc10NCisgIE1kZVBrZy9NZGVQa2cuZGVjDQorICBNZGVNb2R1 bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KKyAgU2ltaWNzT3BlbkJvYXJkUGtnL09wZW5Cb2FyZFBr Zy5kZWMNCisgIE92bWZQa2cvT3ZtZlBrZy5kZWMNCisgIFNpbWljc0ljaDEwUGtnL0ljaDEwUGtn LmRlYw0KKw0KK1tMaWJyYXJ5Q2xhc3Nlc10NCisgIEJhc2VMaWINCisgIE1lbW9yeUFsbG9jYXRp b25MaWINCisgIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0KKyAgQmFzZU1lbW9yeUxpYg0KKyAg RGVidWdMaWINCisgIFBjZExpYg0KKyAgVWVmaUJvb3RNYW5hZ2VyTGliDQorICBCb290TG9nb0xp Yg0KKyAgRGV2aWNlUGF0aExpYg0KKyAgUGNpTGliDQorICBOdlZhcnNGaWxlTGliDQorICBEeGVM b2FkTGludXhMaWINCisgIFVlZmlMaWINCisgIExvZ29MaWINCisNCitbUGNkXQ0KKyAgZ0JvYXJk TW9kdWxlVG9rZW5TcGFjZUd1aWQuUGNkRW11VmFyaWFibGVFdmVudA0KKyAgZ0JvYXJkTW9kdWxl VG9rZW5TcGFjZUd1aWQuUGNkT3ZtZkZsYXNoVmFyaWFibGVzRW5hYmxlDQorICBnQm9hcmRNb2R1 bGVUb2tlblNwYWNlR3VpZC5QY2RTaW1pY3NYNThIb3N0QnJpZGdlUGNpRGV2SWQNCisgIGdFZmlN ZGVQa2dUb2tlblNwYWNlR3VpZC5QY2RQbGF0Zm9ybUJvb3RUaW1lT3V0DQorICBnQm9hcmRNb2R1 bGVUb2tlblNwYWNlR3VpZC5QY2RTaGVsbEZpbGUNCisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VH dWlkLlBjZExvZ29GaWxlDQorDQorW1BjZC5JQTMyLCBQY2QuWDY0XQ0KKyAgZ0VmaU1kZVBrZ1Rv a2VuU3BhY2VHdWlkLlBjZEZTQkNsb2NrDQorDQorW1Byb3RvY29sc10NCisgIGdFZmlEZWNvbXBy ZXNzUHJvdG9jb2xHdWlkDQorICBnRWZpUGNpUm9vdEJyaWRnZUlvUHJvdG9jb2xHdWlkDQorICBn RWZpUzNTYXZlU3RhdGVQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICAgIyBQUk9UT0NPTCBT T01FVElNRVNfQ09OU1VNRUQNCisgIGdFZmlEeGVTbW1SZWFkeVRvTG9ja1Byb3RvY29sR3VpZCAg ICAgICAgICAgICAjIFBST1RPQ09MIFNPTUVUSU1FU19QUk9EVUNFRA0KKyAgZ0VmaUxvYWRlZElt YWdlUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICMgUFJPVE9DT0wgU09NRVRJTUVTX1BS T0RVQ0VEDQorICBnRWZpRmlybXdhcmVWb2x1bWUyUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAg IyBQUk9UT0NPTCBTT01FVElNRVNfQ09OU1VNRUQNCisNCitbR3VpZHNdDQorICBnRWZpRW5kT2ZE eGVFdmVudEdyb3VwR3VpZA0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5C b2FyZFBrZy9MaWJyYXJ5L1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi9TZXJpYWxpemVWYXJpYWJsZXNM aWIuaCBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1NlcmlhbGl6 ZVZhcmlhYmxlc0xpYi9TZXJpYWxpemVWYXJpYWJsZXNMaWIuaA0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCmluZGV4IDAwMDAwMDAwMDAuLjliNGMyYTYyOWENCi0tLSAvZGV2L251bGwNCisrKyBiL1Bs YXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1NlcmlhbGl6ZVZhcmlhYmxl c0xpYi9TZXJpYWxpemVWYXJpYWJsZXNMaWIuaA0KQEAgLTAsMCArMSwzMyBAQA0KKy8qKiBAZmls ZQ0KKyAgU2VyaWFsaXplIFZhcmlhYmxlcyBMaWJyYXJ5IGltcGxlbWVudGF0aW9uDQorDQorICBD b3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLiA8QlI+DQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNl LVBhdGVudA0KKyoqLw0KKw0KKyNpZm5kZWYgX19TRVJJQUxJWkVfVkFSSUFCTEVTX0xJQl9JTlNU QU5DRV9fDQorI2RlZmluZSBfX1NFUklBTElaRV9WQVJJQUJMRVNfTElCX0lOU1RBTkNFX18NCisN CisjaW5jbHVkZSA8VWVmaS5oPg0KKw0KKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCisj aW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvRGVi dWdMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQorI2lu Y2x1ZGUgPExpYnJhcnkvU2VyaWFsaXplVmFyaWFibGVzTGliLmg+DQorI2luY2x1ZGUgPExpYnJh cnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvVWVmaVJ1 bnRpbWVTZXJ2aWNlc1RhYmxlTGliLmg+DQorDQorI2RlZmluZSBTVl9GUk9NX0hBTkRMRShhKSAg ICAgICBDUiAoYSwgU1ZfSU5TVEFOQ0UsIFNpZ25hdHVyZSwgU1ZfU0lHTkFUVVJFKQ0KKyNkZWZp bmUgU1ZfU0lHTkFUVVJFICAgICAgICAgICAgU0lHTkFUVVJFXzMyICgnUycsICdWJywgJ0EnLCAn UicpDQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU2lnbmF0dXJlOw0KKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKkJ1ZmZlclB0cjsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1 ZmZlclNpemU7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhU2l6 ZTsNCit9IFNWX0lOU1RBTkNFOw0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL1BsYXRmb3Jt L0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi9T ZXJpYWxpemVWYXJpYWJsZXNMaWIuaW5mIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJk UGtnL0xpYnJhcnkvU2VyaWFsaXplVmFyaWFibGVzTGliL1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi5p bmYNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi4wOGM1NjFmNTg2DQot LS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGli cmFyeS9TZXJpYWxpemVWYXJpYWJsZXNMaWIvU2VyaWFsaXplVmFyaWFibGVzTGliLmluZg0KQEAg LTAsMCArMSwzNiBAQA0KKyMjIEBmaWxlDQorIyAgU2VyaWFsaXplIFZhcmlhYmxlcyBMaWJyYXJ5 IGltcGxlbWVudGF0aW9uDQorIw0KKyMgIFRoaXMgbGlicmFyeSBzZXJpYWxpemVzIGFuZCBkZXNl cmlhbGl6ZXMgVUVGSSB2YXJpYWJsZXMNCisjDQorIyBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE5 IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQorIw0KKyMgU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisjDQorIyMNCisNCitb RGVmaW5lc10NCisgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDUN CisgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IER4ZVNlcmlhbGl6ZVZhcmlhYmxl c0xpYg0KKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0gMjY2QTE0MzQtNkIyMi00 NDFGLUE4RDItRDU0QUE4RkRGOTVDDQorICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAg PSBVRUZJX0RSSVZFUg0KKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQor ICBMSUJSQVJZX0NMQVNTICAgICAgICAgICAgICAgICAgPSBTZXJpYWxpemVWYXJpYWJsZXNMaWJ8 RFhFX0RSSVZFUiBEWEVfUlVOVElNRV9EUklWRVIgVUVGSV9EUklWRVINCisNCitbU291cmNlc10N CisgIFNlcmlhbGl6ZVZhcmlhYmxlc0xpYi5jDQorDQorW1BhY2thZ2VzXQ0KKyAgTWRlUGtnL01k ZVBrZy5kZWMNCisgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQorICBTaGVsbFBrZy9T aGVsbFBrZy5kZWMNCisgIFNpbWljc09wZW5Cb2FyZFBrZy9PcGVuQm9hcmRQa2cuZGVjDQorDQor W0xpYnJhcnlDbGFzc2VzXQ0KKyAgQmFzZUxpYg0KKyAgQmFzZU1lbW9yeUxpYg0KKyAgRGVidWdM aWINCisgIE1lbW9yeUFsbG9jYXRpb25MaWINCisgIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0K KyAgVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliDQorDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0v SW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1BvbGljeS9MaWJyYXJ5L1NpbGljb25Qb2xpY3lJbml0 TGliL1NpbGljb25Qb2xpY3lJbml0TGliLmluZiBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5C b2FyZFBrZy9Qb2xpY3kvTGlicmFyeS9TaWxpY29uUG9saWN5SW5pdExpYi9TaWxpY29uUG9saWN5 SW5pdExpYi5pbmYNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi42YmUz YjMwMWFkDQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9h cmRQa2cvUG9saWN5L0xpYnJhcnkvU2lsaWNvblBvbGljeUluaXRMaWIvU2lsaWNvblBvbGljeUlu aXRMaWIuaW5mDQpAQCAtMCwwICsxLDM4IEBADQorIyMgQGZpbGUNCisjDQorIyBDb3B5cmlnaHQg KGMpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCisj DQorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyMNCisj Iw0KKw0KK1tEZWZpbmVzXQ0KKyAgSU5GX1ZFUlNJT04gICAgICAgICAgPSAweDAwMDEwMDA1DQor ICBCQVNFX05BTUUgICAgICAgICAgICA9IFNpbGljb25Qb2xpY3lJbml0TGliDQorICBGSUxFX0dV SUQgICAgICAgICAgICA9IEI0OTRERjM5LUE1RjgtNDhBMS1CMkQwLUVGNTIzQUQ5MUM1NQ0KKyAg TU9EVUxFX1RZUEUgICAgICAgICAgPSBQRUlNDQorICBWRVJTSU9OX1NUUklORyAgICAgICA9IDEu MA0KKyAgTElCUkFSWV9DTEFTUyAgICAgICAgPSBTaWxpY29uUG9saWN5SW5pdExpYg0KKw0KK1tT b3VyY2VzXQ0KKyAgU2lsaWNvblBvbGljeUluaXRMaWIuYw0KKw0KKyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjDQorIw0KKyMgUGFja2FnZSBEZXBlbmRlbmN5IFNlY3Rpb24gLSBsaXN0IG9mIFBhY2th Z2UgZmlsZXMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yDQorIyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRoaXMgbW9kdWxlLg0KKyMNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KK1tQYWNr YWdlc10NCisgIE1kZVBrZy9NZGVQa2cuZGVjDQorDQorW0xpYnJhcnlDbGFzc2VzXQ0KKyAgQmFz ZU1lbW9yeUxpYg0KKyAgQmFzZUxpYg0KKyAgRGVidWdMaWINCisgIERlYnVnUHJpbnRFcnJvckxl dmVsTGliDQorICBIb2JMaWINCisgIElvTGliDQorICBNZW1vcnlBbGxvY2F0aW9uTGliDQorICBQ ZWlTZXJ2aWNlc0xpYg0KKw0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5C b2FyZFBrZy9Qb2xpY3kvTGlicmFyeS9TaWxpY29uUG9saWN5VXBkYXRlTGliL1NpbGljb25Qb2xp Y3lVcGRhdGVMaWIuaW5mIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1BvbGlj eS9MaWJyYXJ5L1NpbGljb25Qb2xpY3lVcGRhdGVMaWIvU2lsaWNvblBvbGljeVVwZGF0ZUxpYi5p bmYNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi40ZmRlM2M3NWE2DQot LS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvUG9s aWN5L0xpYnJhcnkvU2lsaWNvblBvbGljeVVwZGF0ZUxpYi9TaWxpY29uUG9saWN5VXBkYXRlTGli LmluZg0KQEAgLTAsMCArMSwzNSBAQA0KKyMjIEBmaWxlDQorIw0KKyMgQ29weXJpZ2h0IChjKSAy MDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQorIw0KKyMg U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisjDQorIyMNCisN CitbRGVmaW5lc10NCisgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAw MDUNCisgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IFNpbGljb25Qb2xpY3lVcGRh dGVMaWINCisgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDZFQTk1ODVDLTNDMTUt NDdkYS05RkZDLTI1RTlFNEVBNEQwQw0KKyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAg ID0gUEVJTQ0KKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQorICBMSUJS QVJZX0NMQVNTICAgICAgICAgICAgICAgICAgPSBTaWxpY29uUG9saWN5VXBkYXRlTGliDQorDQor W1NvdXJjZXNdDQorICBTaWxpY29uUG9saWN5VXBkYXRlTGliLmMNCisNCitbUGFja2FnZXNdDQor ICBNZGVQa2cvTWRlUGtnLmRlYw0KKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCisN CitbTGlicmFyeUNsYXNzZXNdDQorICBIb2JMaWINCisgIElvTGliDQorICBQY2RMaWINCisNCitb UGNkXQ0KKw0KK1tGaXhlZFBjZF0NCisNCitbUHBpc10NCisNCitbR3VpZHNdDQpkaWZmIC0tZ2l0 IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NlY0NvcmUvSWEzMi9TZWNFbnRy eS5uYXNtIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NlY0NvcmUvSWEzMi9T ZWNFbnRyeS5uYXNtDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uYWRi ODdkZTk0Mw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJv YXJkUGtnL1NlY0NvcmUvSWEzMi9TZWNFbnRyeS5uYXNtDQpAQCAtMCwwICsxLDQ1IEBADQorOyBA ZmlsZQ0KKzsgQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC4gPEJSPg0KKzsNCis7IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC U0QtMi1DbGF1c2UtUGF0ZW50DQorOw0KKw0KKyNpbmNsdWRlIDxCYXNlLmg+DQorDQorICAgIFNF Q1RJT04gLnRleHQNCisNCitleHRlcm4gQVNNX1BGWChTZWNDb3JlU3RhcnR1cFdpdGhTdGFjaykN CisNCis7DQorOyBTZWNDb3JlIEVudHJ5IFBvaW50DQorOw0KKzsgUHJvY2Vzc29yIGlzIGluIGZs YXQgcHJvdGVjdGVkIG1vZGUNCis7DQorOyBAcGFyYW1baW5dICBFQVggICBJbml0aWFsIHZhbHVl IG9mIHRoZSBFQVggcmVnaXN0ZXIgKEJJU1Q6IEJ1aWx0LWluIFNlbGYgVGVzdCkNCis7IEBwYXJh bVtpbl0gIERJICAgICdCUCc6IGJvb3Qtc3RyYXAgcHJvY2Vzc29yLCBvciAnQVAnOiBhcHBsaWNh dGlvbiBwcm9jZXNzb3INCis7IEBwYXJhbVtpbl0gIEVCUCAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0 IG9mIHRoZSBCb290IEZpcm13YXJlIFZvbHVtZQ0KKzsNCis7IEByZXR1cm4gICAgIE5vbmUgIFRo aXMgcm91dGluZSBkb2VzIG5vdCByZXR1cm4NCis7DQorZ2xvYmFsIEFTTV9QRlgoX01vZHVsZUVu dHJ5UG9pbnQpDQorQVNNX1BGWChfTW9kdWxlRW50cnlQb2ludCk6DQorDQorICAgIDsNCisgICAg OyBMb2FkIHRlbXBvcmFyeSBSQU0gc3RhY2sgYmFzZWQgb24gUENEcw0KKyAgICA7DQorICAgICVk ZWZpbmUgU0VDX1RPUF9PRl9TVEFDSyAoRml4ZWRQY2RHZXQzMiAoUGNkU2ltaWNzU2VjUGVpVGVt cFJhbUJhc2UpICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWRQY2RHZXQzMiAo UGNkU2ltaWNzU2VjUGVpVGVtcFJhbVNpemUpKQ0KKyAgICBtb3YgICAgIGVheCwgU0VDX1RPUF9P Rl9TVEFDSw0KKyAgICBtb3YgICAgIGVzcCwgZWF4DQorICAgIG5vcA0KKw0KKyAgICA7DQorICAg IDsgU2V0dXAgcGFyYW1ldGVycyBhbmQgY2FsbCBTZWNDb3JlU3RhcnR1cFdpdGhTdGFjaw0KKyAg ICA7ICAgW2VzcF0gICByZXR1cm4gYWRkcmVzcyBmb3IgY2FsbA0KKyAgICA7ICAgW2VzcCs0XSBC b290RmlybXdhcmVWb2x1bWVQdHINCisgICAgOyAgIFtlc3ArOF0gVG9wT2ZDdXJyZW50U3RhY2sN CisgICAgOw0KKyAgICBwdXNoICAgIGVheA0KKyAgICBwdXNoICAgIGVicA0KKyAgICBjYWxsICAg IEFTTV9QRlgoU2VjQ29yZVN0YXJ0dXBXaXRoU3RhY2spDQorDQpkaWZmIC0tZ2l0IGEvUGxhdGZv cm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NlY0NvcmUvU2VjTWFpbi5pbmYgYi9QbGF0Zm9y bS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2VjQ29yZS9TZWNNYWluLmluZg0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLmIxZDMxOWM1ZWENCi0tLSAvZGV2L251bGwN CisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TZWNDb3JlL1NlY01haW4u aW5mDQpAQCAtMCwwICsxLDczIEBADQorIyMgQGZpbGUNCisjICBTRUMgRHJpdmVyDQorIw0KKyMg Q29weXJpZ2h0IChjKSAyMDA4IC0gMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4gPEJSPg0KKyMNCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1 c2UtUGF0ZW50DQorIw0KKyMjDQorDQorW0RlZmluZXNdDQorICBJTkZfVkVSU0lPTiAgICAgICAg ICAgICAgICAgICAgPSAweDAwMDEwMDA1DQorICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAg ICAgPSBTZWNNYWluDQorICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSBlNjdmMTU2 Zi01NGM1LTQ3ZjMtYTM1ZC0wN2MwNDU4ODFlMTQNCisgIE1PRFVMRV9UWVBFICAgICAgICAgICAg ICAgICAgICA9IFNFQw0KKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQor ICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPSBTZWNNYWluDQorDQorIw0KKyMgVGhl IGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBmb3IgcmVmZXJlbmNlIG9ubHkgYW5kIG5vdCByZXF1 aXJlZCBieSB0aGUgYnVpbGQgdG9vbHMuDQorIw0KKyMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAg ICAgICAgID0gSUEzMiBYNjQgRUJDDQorIw0KKw0KK1tTb3VyY2VzXQ0KKyAgU2VjTWFpbi5jDQor DQorW1NvdXJjZXMuSUEzMl0NCisgIElhMzIvU2VjRW50cnkubmFzbQ0KKw0KK1tTb3VyY2VzLlg2 NF0NCisgIFg2NC9TZWNFbnRyeS5uYXNtDQorDQorW1BhY2thZ2VzXQ0KKyAgTWRlUGtnL01kZVBr Zy5kZWMNCisgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQorICBVZWZpQ3B1UGtnL1Vl ZmlDcHVQa2cuZGVjDQorICBTaW1pY3NYNThTa3RQa2cvU2t0UGtnLmRlYw0KKyAgU2ltaWNzT3Bl bkJvYXJkUGtnL09wZW5Cb2FyZFBrZy5kZWMNCisgIFNpbWljc0ljaDEwUGtnL0ljaDEwUGtnLmRl Yw0KKw0KK1tMaWJyYXJ5Q2xhc3Nlc10NCisgIEJhc2VMaWINCisgIERlYnVnTGliDQorICBCYXNl TWVtb3J5TGliDQorICBQZWlTZXJ2aWNlc0xpYg0KKyAgUGNkTGliDQorICBVZWZpQ3B1TGliDQor ICBEZWJ1Z0FnZW50TGliDQorICBJb0xpYg0KKyAgUGVDb2ZmTGliDQorICBQZUNvZmZHZXRFbnRy eVBvaW50TGliDQorICBQZUNvZmZFeHRyYUFjdGlvbkxpYg0KKyAgRXh0cmFjdEd1aWRlZFNlY3Rp b25MaWINCisgIExvY2FsQXBpY0xpYg0KKyAgUGNpQ2Y4TGliDQorDQorW1BwaXNdDQorICBnRWZp VGVtcG9yYXJ5UmFtU3VwcG9ydFBwaUd1aWQgICAgICAgICAgICAgICAgIyBQUEkgQUxXQVlTX1BS T0RVQ0VEDQorDQorW1BjZF0NCisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlkLlBjZFNpbWlj c1BlaU1lbUZ2QmFzZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFjZUd1aWQuUGNkU2ltaWNzUGVp TWVtRnZTaXplDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RTaW1pY3NEeGVNZW1G dkJhc2UNCisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlkLlBjZFNpbWljc0R4ZU1lbUZ2U2l6 ZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFjZUd1aWQuUGNkU2ltaWNzU2VjUGFnZVRhYmxlc0Jh c2UNCisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlkLlBjZFNpbWljc1NlY1BlaVRlbXBSYW1C YXNlDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RTaW1pY3NTZWNQZWlUZW1wUmFt U2l6ZQ0KKyAgZ0VmaU1kZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEd1aWRlZEV4dHJhY3RIYW5kbGVy VGFibGVBZGRyZXNzDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RHdWlkZWRFeHRy YWN0SGFuZGxlclRhYmxlU2l6ZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFjZUd1aWQuUGNkU2lt aWNzRGVjb21wcmVzc2lvblNjcmF0Y2hFbmQNCisNCitbRmVhdHVyZVBjZF0NCisgIGdTaW1pY3NY NThQa2dUb2tlblNwYWNlR3VpZC5QY2RTbW1TbXJhbVJlcXVpcmUNCmRpZmYgLS1naXQgYS9QbGF0 Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2VjQ29yZS9YNjQvU2VjRW50cnkubmFzbSBi L1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TZWNDb3JlL1g2NC9TZWNFbnRyeS5u YXNtDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uMmU2ZDhmNjE4Yw0K LS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1Nl Y0NvcmUvWDY0L1NlY0VudHJ5Lm5hc20NCkBAIC0wLDAgKzEsNDUgQEANCis7IEBmaWxlDQorOyBD b3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLiA8QlI+DQorOw0KKzsgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVz ZS1QYXRlbnQNCis7DQorDQorI2luY2x1ZGUgPEJhc2UuaD4NCisNCitERUZBVUxUIFJFTA0KK1NF Q1RJT04gLnRleHQNCisNCitleHRlcm4gQVNNX1BGWChTZWNDb3JlU3RhcnR1cFdpdGhTdGFjaykN CisNCis7DQorOyBTZWNDb3JlIEVudHJ5IFBvaW50DQorOw0KKzsgUHJvY2Vzc29yIGlzIGluIGZs YXQgcHJvdGVjdGVkIG1vZGUNCis7DQorOyBAcGFyYW1baW5dICBSQVggICBJbml0aWFsIHZhbHVl IG9mIHRoZSBFQVggcmVnaXN0ZXIgKEJJU1Q6IEJ1aWx0LWluIFNlbGYgVGVzdCkNCis7IEBwYXJh bVtpbl0gIERJICAgICdCUCc6IGJvb3Qtc3RyYXAgcHJvY2Vzc29yLCBvciAnQVAnOiBhcHBsaWNh dGlvbiBwcm9jZXNzb3INCis7IEBwYXJhbVtpbl0gIFJCUCAgIFBvaW50ZXIgdG8gdGhlIHN0YXJ0 IG9mIHRoZSBCb290IEZpcm13YXJlIFZvbHVtZQ0KKzsNCis7IEByZXR1cm4gICAgIE5vbmUgIFRo aXMgcm91dGluZSBkb2VzIG5vdCByZXR1cm4NCis7DQorZ2xvYmFsIEFTTV9QRlgoX01vZHVsZUVu dHJ5UG9pbnQpDQorQVNNX1BGWChfTW9kdWxlRW50cnlQb2ludCk6DQorDQorICAgIDsNCisgICAg OyBMb2FkIHRlbXBvcmFyeSBSQU0gc3RhY2sgYmFzZWQgb24gUENEcw0KKyAgICA7DQorICAgICVk ZWZpbmUgU0VDX1RPUF9PRl9TVEFDSyAoRml4ZWRQY2RHZXQzMiAoUGNkU2ltaWNzU2VjUGVpVGVt cFJhbUJhc2UpICsgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWRQY2RHZXQzMiAo UGNkU2ltaWNzU2VjUGVpVGVtcFJhbVNpemUpKQ0KKyAgICBtb3YgICAgIHJzcCwgU0VDX1RPUF9P Rl9TVEFDSw0KKyAgICBub3ANCisNCisgICAgOw0KKyAgICA7IFNldHVwIHBhcmFtZXRlcnMgYW5k IGNhbGwgU2VjQ29yZVN0YXJ0dXBXaXRoU3RhY2sNCisgICAgOyAgIHJjeDogQm9vdEZpcm13YXJl Vm9sdW1lUHRyDQorICAgIDsgICByZHg6IFRvcE9mQ3VycmVudFN0YWNrDQorICAgIDsNCisgICAg bW92ICAgICByY3gsIHJicA0KKyAgICBtb3YgICAgIHJkeCwgcnNwDQorICAgIHN1YiAgICAgcnNw LCAweDIwDQorICAgIGNhbGwgICAgQVNNX1BGWChTZWNDb3JlU3RhcnR1cFdpdGhTdGFjaykNCisN CmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhl L1BsYXRmb3JtLmggYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhl L1BsYXRmb3JtLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi5iZWY4 MDFiZDY0DQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9h cmRQa2cvU2ltaWNzRHhlL1BsYXRmb3JtLmgNCkBAIC0wLDAgKzEsMzcgQEANCisvKiogQGZpbGUN CisgIFRoaXMgZHJpdmVyIGVmZmVjdHVhdGVzIFFTUCBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIHNl dHRpbmdzIGFuZCBleHBvc2VzDQorICB0aGVtIHZpYSBISUkuDQorDQorICBDb3B5cmlnaHQgKEMp IDIwMTQsIFJlZCBIYXQsIEluYy4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt Mi1DbGF1c2UtUGF0ZW50DQorKiovDQorDQorI2lmbmRlZiBfUExBVEZPUk1fSF8NCisjZGVmaW5l IF9QTEFURk9STV9IXw0KKw0KKy8vDQorLy8gTWFjcm8gYW5kIHR5cGUgZGVmaW5pdGlvbnMgdGhh dCBjb25uZWN0IHRoZSBmb3JtIHdpdGggdGhlIEhJSSBkcml2ZXIgY29kZS4NCisvLw0KKyNkZWZp bmUgRk9STVNUQVRFSURfTUFJTl9GT1JNICAxDQorI2RlZmluZSBGT1JNSURfTUFJTl9GT1JNICAg ICAgIDENCisNCisjZGVmaW5lIFFVRVNUSU9OX1JFU19DVVIgICAgICAgMQ0KKyNkZWZpbmUgTUFY U0laRV9SRVNfQ1VSICAgICAgIDE2DQorDQorI2RlZmluZSBMQUJFTF9SRVNfTkVYVCAgICAgICAg IDENCisjZGVmaW5lIFFVRVNUSU9OX1JFU19ORVhUICAgICAgMg0KKw0KKyNkZWZpbmUgUVVFU1RJ T05fU0FWRV9FWElUICAgICAzDQorI2RlZmluZSBRVUVTVElPTl9ESVNDQVJEX0VYSVQgIDQNCisN CisvLw0KKy8vIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgZm9ybSBzdGF0ZS4gSXRzIGZp ZWxkcyByZWxhdGUgc3RyaWN0bHkgdG8gdGhlDQorLy8gdmlzdWFsIHdpZGdldHMgb24gdGhlIGZv cm0uDQorLy8NCit0eXBlZGVmIHN0cnVjdCB7DQorICBVSU5UMTYgQ3VycmVudFByZWZlcnJlZFJl c29sdXRpb25bTUFYU0laRV9SRVNfQ1VSXTsNCisgIFVJTlQzMiBOZXh0UHJlZmVycmVkUmVzb2x1 dGlvbjsNCit9IE1BSU5fRk9STV9TVEFURTsNCisNCisjZW5kaWYgLy8gX1BMQVRGT1JNX0hfDQpk aWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9Q bGF0Zm9ybS51bmkgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhl L1BsYXRmb3JtLnVuaQ0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLjZk NjhjYmViNGYNCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5C b2FyZFBrZy9TaW1pY3NEeGUvUGxhdGZvcm0udW5pDQpAQCAtMCwwICsxLDMxIEBADQorLy8gKisr DQorLy8NCisvLyBDb3B5cmlnaHQgKEMpIDIwMTQsIFJlZCBIYXQsIEluYy4NCisvLyBDb3B5cmln aHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4N CisvLw0KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQor Ly8NCisvLyBNb2R1bGUgTmFtZToNCisvLw0KKy8vICAgUGxhdGZvcm0udW5pDQorLy8NCisvLyBB YnN0cmFjdDoNCisvLw0KKy8vICAgU3RyaW5nIGRlZmluaXRpb25zIGZvciBQbGF0Zm9ybUZvcm1z LnZmcg0KKy8vDQorLy8gLS0qLw0KKw0KKy89Iw0KKw0KKyNsYW5nZGVmIGVuLVVTICJFbmdsaXNo Ig0KKw0KKyNzdHJpbmcgU1RSX0ZPUk1TRVRfVElUTEUgICAgICAgICNsYW5ndWFnZSBlbi1VUyAi UVNQIFBsYXRmb3JtIENvbmZpZ3VyYXRpb24iDQorI3N0cmluZyBTVFJfRk9STVNFVF9IRUxQICAg ICAgICAgI2xhbmd1YWdlIGVuLVVTICJDaGFuZ2UgdmFyaW91cyBRU1AgcGxhdGZvcm0gc2V0dGlu Z3MuIg0KKyNzdHJpbmcgU1RSX01BSU5fRk9STV9USVRMRSAgICAgICNsYW5ndWFnZSBlbi1VUyAi UVNQIFNldHRpbmdzIg0KKyNzdHJpbmcgU1RSX1JFU19DVVIgICAgICAgICAgICAgICNsYW5ndWFn ZSBlbi1VUyAiUHJlZmVycmVkIFJlc29sdXRpb24gYXQgTmV4dCBCb290Ig0KKyNzdHJpbmcgU1RS X1JFU19DVVJfSEVMUCAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiVGhlIHByZWZlcnJlZCByZXNv bHV0aW9uIG9mIHRoZSBHcmFwaGljcyBDb25zb2xlIGF0IG5leHQgYm9vdC4gSXQgbWlnaHQgYmUg dW5zZXQsIG9yIGV2ZW4gaW52YWxpZCAoaGVuY2UgaWdub3JlZCkgd3J0LiB0aGUgdmlkZW8gUkFN IHNpemUuIg0KKyNzdHJpbmcgU1RSX1JFU19ORVhUICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1V UyAiQ2hhbmdlIFByZWZlcnJlZCBSZXNvbHV0aW9uIGZvciBOZXh0IEJvb3QiDQorI3N0cmluZyBT VFJfUkVTX05FWFRfSEVMUCAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJZb3UgY2FuIHNwZWNpZnkg YSBuZXcgcHJlZmVyZW5jZSBmb3IgdGhlIEdyYXBoaWNzIENvbnNvbGUgaGVyZS4gVGhlIGxpc3Qg aXMgZmlsdGVyZWQgYWdhaW5zdCB0aGUgdmlkZW8gUkFNIHNpemUuIg0KKyNzdHJpbmcgU1RSX1NB VkVfRVhJVCAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiQ29tbWl0IENoYW5nZXMgYW5kIEV4 aXQiDQorI3N0cmluZyBTVFJfRElTQ0FSRF9FWElUICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJE aXNjYXJkIENoYW5nZXMgYW5kIEV4aXQiDQorDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwv U2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9QbGF0Zm9ybUNvbmZpZy5oIGIvUGxhdGZvcm0v SW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9QbGF0Zm9ybUNvbmZpZy5oDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uZDNmMDQxZGRlYQ0KLS0tIC9kZXYv bnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9Q bGF0Zm9ybUNvbmZpZy5oDQpAQCAtMCwwICsxLDUxIEBADQorLyoqIEBmaWxlDQorICBVdGlsaXR5 IGZ1bmN0aW9ucyBmb3Igc2VyaWFsaXppbmcgKHBlcnNpc3RlbnRseSBzdG9yaW5nKSBhbmQgZGVz ZXJpYWxpemluZw0KKyAgT1ZNRidzIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uDQorDQorICBDb3B5 cmlnaHQgKEMpIDIwMTQsIFJlZCBIYXQsIEluYy4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiovDQorDQorI2lmbmRlZiBfUExBVEZPUk1fQ09O RklHX0hfDQorI2RlZmluZSBfUExBVEZPUk1fQ09ORklHX0hfDQorDQorI2luY2x1ZGUgPEJhc2Uu aD4NCisNCisvLw0KKy8vIFRoaXMgc3RydWN0dXJlIHBhcnRpY2lwYXRlcyBpbiBkcml2ZXIgY29u ZmlndXJhdGlvbi4gSXQgZG9lcyBub3QNCisvLyAobmVjZXNzYXJpbHkpIHJlZmxlY3QgdGhlIHdp cmUgZm9ybWF0IGluIHRoZSBwZXJzaXN0ZW50IHN0b3JlLg0KKy8vDQorI3ByYWdtYSBwYWNrKDEp DQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgLy8NCisgIC8vIHByZWZlcnJlZCBncmFwaGljcyBjb25z b2xlIHJlc29sdXRpb24gd2hlbiBib290aW5nDQorICAvLw0KKyAgVUlOVDMyIEhvcml6b250YWxS ZXNvbHV0aW9uOw0KKyAgVUlOVDMyIFZlcnRpY2FsUmVzb2x1dGlvbjsNCit9IFBMQVRGT1JNX0NP TkZJRzsNCisjcHJhZ21hIHBhY2soKQ0KKw0KKy8vDQorLy8gUGxlYXNlIHNlZSB0aGUgQVBJIGRv Y3VtZW50YXRpb24gbmVhciB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMuDQorLy8NCitFRklfU1RB VFVTDQorRUZJQVBJDQorUGxhdGZvcm1Db25maWdTYXZlICgNCisgIElOIFBMQVRGT1JNX0NPTkZJ RyAqUGxhdGZvcm1Db25maWcNCisgICk7DQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1BsYXRm b3JtQ29uZmlnTG9hZCAoDQorICBPVVQgUExBVEZPUk1fQ09ORklHICpQbGF0Zm9ybUNvbmZpZywN CisgIE9VVCBVSU5UNjQgICAgICAgICAgKk9wdGlvbmFsRWxlbWVudHMNCisgICk7DQorDQorLy8N CisvLyBGZWF0dXJlIGZsYWdzIGZvciBPcHRpb25hbEVsZW1lbnRzLg0KKy8vDQorI2RlZmluZSBQ TEFURk9STV9DT05GSUdfRl9HUkFQSElDU19SRVNPTFVUSU9OIEJJVDANCisjZGVmaW5lIFBMQVRG T1JNX0NPTkZJR19GX0RPV05HUkFERSAgICAgICAgICAgQklUNjMNCisNCisjZW5kaWYgLy8gX1BM QVRGT1JNX0NPTkZJR19IXw0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5C b2FyZFBrZy9TaW1pY3NEeGUvUGxhdGZvcm1Gb3Jtcy52ZnIgYi9QbGF0Zm9ybS9JbnRlbC9TaW1p Y3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhlL1BsYXRmb3JtRm9ybXMudmZyDQpuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uMjFiZjlmNTg1NA0KLS0tIC9kZXYvbnVsbA0KKysr IGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9QbGF0Zm9ybUZv cm1zLnZmcg0KQEAgLTAsMCArMSw2NyBAQA0KKy8vICorKw0KKy8vDQorLy8gQ29weXJpZ2h0IChD KSAyMDE0LCBSZWQgSGF0LCBJbmMuDQorLy8gQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxMSwgSW50 ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKy8vDQorLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisvLw0KKy8vIE1vZHVsZSBO YW1lOg0KKy8vDQorLy8gICBQbGF0Zm9ybUZvcm1zLnZmcg0KKy8vDQorLy8gQWJzdHJhY3Q6DQor Ly8NCisvLyAgIEZvcm0gZGVmaW5pdGlvbnMgZm9yIGV4cG9zaW5nIHNvbWUgb2YgT1ZNRidzIHBs YXRmb3JtIGtub2JzIHZpYSBISUkuDQorLy8NCisvLyAtLSovDQorDQorI2luY2x1ZGUgPEd1aWQv U2ltaWNzQm9hcmRDb25maWcuaD4NCisjaW5jbHVkZSAiUGxhdGZvcm0uaCINCisNCitmb3Jtc2V0 DQorICBndWlkICA9IFNJTUlDU19CT0FSRF9DT05GSUdfR1VJRCwNCisgIHRpdGxlID0gU1RSSU5H X1RPS0VOKFNUUl9GT1JNU0VUX1RJVExFKSwNCisgIGhlbHAgID0gU1RSSU5HX1RPS0VOKFNUUl9G T1JNU0VUX0hFTFApLA0KKw0KKyAgdmFyc3RvcmUgTUFJTl9GT1JNX1NUQVRFLA0KKyAgICB2YXJp ZCA9IEZPUk1TVEFURUlEX01BSU5fRk9STSwNCisgICAgbmFtZSAgPSBNYWluRm9ybVN0YXRlLA0K KyAgICBndWlkICA9IFNJTUlDU19CT0FSRF9DT05GSUdfR1VJRDsNCisNCisgIGZvcm0NCisgICAg Zm9ybWlkID0gRk9STUlEX01BSU5fRk9STSwNCisgICAgdGl0bGUgID0gU1RSSU5HX1RPS0VOKFNU Ul9NQUlOX0ZPUk1fVElUTEUpOw0KKw0KKyAgICAvLw0KKyAgICAvLyBEaXNwbGF5IHRoZSBjdXJy ZW50IHByZWZlcmVuY2UgaW4gYSByZWFkLW9ubHkgc3RyaW5nIGZpZWxkLg0KKyAgICAvLw0KKyAg ICBzdHJpbmcNCisgICAgICB2YXJpZCAgICAgID0gTWFpbkZvcm1TdGF0ZS5DdXJyZW50UHJlZmVy cmVkUmVzb2x1dGlvbiwNCisgICAgICBxdWVzdGlvbmlkID0gUVVFU1RJT05fUkVTX0NVUiwNCisg ICAgICBwcm9tcHQgICAgID0gU1RSSU5HX1RPS0VOKFNUUl9SRVNfQ1VSKSwNCisgICAgICBoZWxw ICAgICAgID0gU1RSSU5HX1RPS0VOKFNUUl9SRVNfQ1VSX0hFTFApLA0KKyAgICAgIGZsYWdzICAg ICAgPSBSRUFEX09OTFksDQorICAgICAgbWluc2l6ZSAgICA9IDAsDQorICAgICAgbWF4c2l6ZSAg ICA9IE1BWFNJWkVfUkVTX0NVUiwNCisgICAgZW5kc3RyaW5nOw0KKw0KKyAgICAvLw0KKyAgICAv LyBXZSdsbCBkeW5hbWljYWxseSBnZW5lcmF0ZSBhIG9uZS1vZi1tYW55IHNlbGVjdGlvbiBhdCB0 aGlzIGxhYmVsLg0KKyAgICAvLw0KKyAgICBsYWJlbCBMQUJFTF9SRVNfTkVYVDsNCisNCisgICAg dGV4dA0KKyAgICAgIGhlbHAgID0gU1RSSU5HX1RPS0VOKFNUUl9TQVZFX0VYSVQpLA0KKyAgICAg IHRleHQgID0gU1RSSU5HX1RPS0VOKFNUUl9TQVZFX0VYSVQpLA0KKyAgICAgIGZsYWdzID0gSU5U RVJBQ1RJVkUsDQorICAgICAga2V5ICAgPSBRVUVTVElPTl9TQVZFX0VYSVQ7DQorDQorICAgIHRl eHQNCisgICAgICBoZWxwICA9IFNUUklOR19UT0tFTihTVFJfRElTQ0FSRF9FWElUKSwNCisgICAg ICB0ZXh0ICA9IFNUUklOR19UT0tFTihTVFJfRElTQ0FSRF9FWElUKSwNCisgICAgICBmbGFncyA9 IElOVEVSQUNUSVZFLA0KKyAgICAgIGtleSAgID0gUVVFU1RJT05fRElTQ0FSRF9FWElUOw0KKw0K KyAgZW5kZm9ybTsNCisNCitlbmRmb3Jtc2V0Ow0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVs L1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NEeGUvU2ltaWNzRHhlLmluZiBiL1BsYXRmb3JtL0lu dGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NEeGUvU2ltaWNzRHhlLmluZg0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLjM5MDI4ZTFhNzANCi0tLSAvZGV2L251bGwN CisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NEeGUvU2ltaWNz RHhlLmluZg0KQEAgLTAsMCArMSw2NSBAQA0KKyMjIEBmaWxlDQorIyAgVGhpcyBkcml2ZXIgZWZm ZWN0dWF0ZXMgU2ltaWNzIFg1OCBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFuZCBl eHBvc2VzDQorIyAgdGhlbSB2aWEgSElJLg0KKyMNCisjICBDb3B5cmlnaHQgKEMpIDIwMTQsIFJl ZCBIYXQsIEluYy4NCisjICBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDEwLCBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorIw0KKyMgU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisjDQorIyMNCisNCitbRGVmaW5lc10NCisgIElO Rl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDUNCisgIEJBU0VfTkFNRSAg ICAgICAgICAgICAgICAgICAgICA9IFNpbWljc0R4ZQ0KKyAgRklMRV9HVUlEICAgICAgICAgICAg ICAgICAgICAgID0gNzRCNjREQzEtQjBCNi00ODUzLUE2QkQtQzY0MjYwNTlBQjFFDQorICBNT0RV TEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBEWEVfRFJJVkVSDQorICBWRVJTSU9OX1NUUklO RyAgICAgICAgICAgICAgICAgPSAxLjANCisgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAg ICA9IFBsYXRmb3JtSW5pdA0KKyAgVU5MT0FEX0lNQUdFICAgICAgICAgICAgICAgICAgID0gUGxh dGZvcm1VbmxvYWQNCisNCitbU291cmNlc10NCisgIFBsYXRmb3JtLmMNCisgIFBsYXRmb3JtLnVu aQ0KKyAgUGxhdGZvcm1Db25maWcuYw0KKyAgUGxhdGZvcm1Gb3Jtcy52ZnINCisNCitbUGFja2Fn ZXNdDQorICBNZGVQa2cvTWRlUGtnLmRlYw0KKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5k ZWMNCisgIFNpbWljc09wZW5Cb2FyZFBrZy9PcGVuQm9hcmRQa2cuZGVjDQorICBNaW5QbGF0Zm9y bVBrZy9NaW5QbGF0Zm9ybVBrZy5kZWMNCisNCitbTGlicmFyeUNsYXNzZXNdDQorICBCYXNlTGli DQorICBCYXNlTWVtb3J5TGliDQorICBEZWJ1Z0xpYg0KKyAgRGV2aWNlUGF0aExpYg0KKyAgSGlp TGliDQorICBNZW1vcnlBbGxvY2F0aW9uTGliDQorICBQcmludExpYg0KKyAgVWVmaUJvb3RTZXJ2 aWNlc1RhYmxlTGliDQorICBVZWZpSGlpU2VydmljZXNMaWINCisgIFVlZmlMaWINCisgIFVlZmlS dW50aW1lU2VydmljZXNUYWJsZUxpYg0KKyAgVWVmaURyaXZlckVudHJ5UG9pbnQNCisgIER4ZVNl cnZpY2VzVGFibGVMaWINCisNCitbUGNkXQ0KKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VH dWlkLlBjZFZpZGVvSG9yaXpvbnRhbFJlc29sdXRpb24NCisgIGdFZmlNZGVNb2R1bGVQa2dUb2tl blNwYWNlR3VpZC5QY2RWaWRlb1ZlcnRpY2FsUmVzb2x1dGlvbg0KKw0KK1tQcm90b2NvbHNdDQor ICBnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCAgICAgICMjIFBST0RVQ0VTDQorICBnRWZpR3Jh cGhpY3NPdXRwdXRQcm90b2NvbEd1aWQgICMjIENPTlNVTUVTDQorICBnRWZpSGlpQ29uZmlnQWNj ZXNzUHJvdG9jb2xHdWlkICMjIFBST0RVQ0VTDQorDQorW0d1aWRzXQ0KKyAgZ0VmaUlmclRpYW5v R3VpZA0KKyAgZ1NpbWljc0JvYXJkQ29uZmlnR3VpZA0KKw0KK1tEZXBleF0NCisgIGdFZmlIaWlD b25maWdSb3V0aW5nUHJvdG9jb2xHdWlkICBBTkQNCisgIGdFZmlIaWlEYXRhYmFzZVByb3RvY29s R3VpZCAgICAgICBBTkQNCisgIGdFZmlWYXJpYWJsZUFyY2hQcm90b2NvbEd1aWQgICAgICBBTkQN CisgIGdFZmlWYXJpYWJsZVdyaXRlQXJjaFByb3RvY29sR3VpZA0KZGlmZiAtLWdpdCBhL1BsYXRm b3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NQZWkvQ21vcy5oIGIvUGxhdGZvcm0v SW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1BlaS9DbW9zLmgNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi4wN2ZhMmUyZDExDQotLS0gL2Rldi9udWxsDQorKysg Yi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVpL0Ntb3MuaA0KQEAg LTAsMCArMSw1MCBAQA0KKy8qKiBAZmlsZQ0KKyAgUEMvQVQgQ01PUyBhY2Nlc3Mgcm91dGluZXMN CisNCisgIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuIDxCUj4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt Mi1DbGF1c2UtUGF0ZW50DQorKiovDQorDQorI2lmbmRlZiBfX0NNT1NfSF9fDQorI2RlZmluZSBf X0NNT1NfSF9fDQorDQorLyoqDQorICBSZWFkcyA4LWJpdHMgb2YgQ01PUyBkYXRhLg0KKw0KKyAg UmVhZHMgdGhlIDgtYml0cyBvZiBDTU9TIGRhdGEgYXQgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBi eSBJbmRleC4NCisgIFRoZSA4LWJpdCByZWFkIHZhbHVlIGlzIHJldHVybmVkLg0KKw0KKyAgQHBh cmFtICBJbmRleCAgVGhlIENNT1MgbG9jYXRpb24gdG8gcmVhZC4NCisNCisgIEByZXR1cm4gVGhl IHZhbHVlIHJlYWQuDQorDQorKiovDQorVUlOVDgNCitFRklBUEkNCitDbW9zUmVhZDggKA0KKyAg SU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEluZGV4DQorICApOw0KKw0KKy8qKg0K KyAgV3JpdGVzIDgtYml0cyBvZiBDTU9TIGRhdGEuDQorDQorICBXcml0ZXMgOC1iaXRzIG9mIENN T1MgZGF0YSB0byB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IEluZGV4DQorICB3aXRoIHRoZSB2 YWx1ZSBzcGVjaWZpZWQgYnkgVmFsdWUgYW5kIHJldHVybnMgVmFsdWUuDQorDQorICBAcGFyYW0g IEluZGV4ICBUaGUgQ01PUyBsb2NhdGlvbiB0byB3cml0ZS4NCisgIEBwYXJhbSAgVmFsdWUgIFRo ZSB2YWx1ZSB0byB3cml0ZSB0byBDTU9TLg0KKw0KKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRl biB0byBDTU9TLg0KKw0KKyoqLw0KK1VJTlQ4DQorRUZJQVBJDQorQ21vc1dyaXRlOCAoDQorICBJ TiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5kZXgsDQorICBJTiAgICAgIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgVmFsdWUNCisgICk7DQorDQorDQorI2VuZGlmDQorDQpkaWZm IC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1BlaS9QbGF0 Zm9ybS5oIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1BlaS9QbGF0 Zm9ybS5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uMTAyZDIxY2Q2 NA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtn L1NpbWljc1BlaS9QbGF0Zm9ybS5oDQpAQCAtMCwwICsxLDg4IEBADQorLyoqIEBmaWxlDQorICBQ bGF0Zm9ybSBQRUkgbW9kdWxlIGluY2x1ZGUgZmlsZS4NCisNCisgIENvcHlyaWdodCAoYykgMjAw NiAtIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCisN CisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiovDQor DQorI2lmbmRlZiBfUExBVEZPUk1fUEVJX0hfSU5DTFVERURfDQorI2RlZmluZSBfUExBVEZPUk1f UEVJX0hfSU5DTFVERURfDQorDQorVk9JRA0KK0FkZElvTWVtb3J5QmFzZVNpemVIb2IgKA0KKyAg RUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgIE1lbW9yeUJhc2UsDQorICBVSU5UNjQgICAgICAg ICAgICAgICAgICAgICAgTWVtb3J5U2l6ZQ0KKyAgKTsNCisNCitWT0lEDQorQWRkSW9NZW1vcnlS YW5nZUhvYiAoDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgTWVtb3J5QmFzZSwNCisg IEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBNZW1vcnlMaW1pdA0KKyAgKTsNCisNCitWT0lE DQorQWRkTWVtb3J5QmFzZVNpemVIb2IgKA0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAg IE1lbW9yeUJhc2UsDQorICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5U2l6ZQ0K KyAgKTsNCisNCitWT0lEDQorQWRkTWVtb3J5UmFuZ2VIb2IgKA0KKyAgRUZJX1BIWVNJQ0FMX0FE RFJFU1MgICAgICAgIE1lbW9yeUJhc2UsDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAg TWVtb3J5TGltaXQNCisgICk7DQorDQorVk9JRA0KK0FkZFVudGVzdGVkTWVtb3J5QmFzZVNpemVI b2IgKA0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgIE1lbW9yeUJhc2UsDQorICBVSU5U NjQgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5U2l6ZQ0KKyAgKTsNCisNCitWT0lEDQorQWRk UmVzZXJ2ZWRNZW1vcnlCYXNlU2l6ZUhvYiAoDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAg ICAgTWVtb3J5QmFzZSwNCisgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlTaXpl LA0KKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgIENhY2hlYWJsZQ0KKyAgKTsNCisNCitW T0lEDQorQWRkcmVzc1dpZHRoSW5pdGlhbGl6YXRpb24gKA0KKyAgVk9JRA0KKyAgKTsNCisNCitW T0lEDQorWDU4VHNlZ01ieXRlc0luaXRpYWxpemF0aW9uICgNCisgIFZPSUQNCisgICk7DQorDQor RUZJX1NUQVRVUw0KK1B1Ymxpc2hQZWlNZW1vcnkgKA0KKyAgVk9JRA0KKyAgKTsNCisNCitVSU5U MzINCitHZXRTeXN0ZW1NZW1vcnlTaXplQmVsb3c0Z2IgKA0KKyAgVk9JRA0KKyAgKTsNCisNCitW T0lEDQorSW5pdGlhbGl6ZVJhbVJlZ2lvbnMgKA0KKyAgVk9JRA0KKyAgKTsNCisNCitWT0lEDQor SW5zdGFsbEZlYXR1cmVDb250cm9sQ2FsbGJhY2sgKA0KKyAgVk9JRA0KKyAgKTsNCisNCitleHRl cm4gRUZJX0JPT1RfTU9ERSBtQm9vdE1vZGU7DQorDQorZXh0ZXJuIEJPT0xFQU4gbVMzU3VwcG9y dGVkOw0KKw0KK2V4dGVybiBVSU5UOCBtUGh5c01lbUFkZHJlc3NXaWR0aDsNCisNCitleHRlcm4g VUlOVDMyIG1NYXhDcHVDb3VudDsNCisNCitleHRlcm4gVUlOVDE2IG1Ib3N0QnJpZGdlRGV2SWQ7 DQorI2VuZGlmIC8vIF9QTEFURk9STV9QRUlfSF9JTkNMVURFRF8NCmRpZmYgLS1naXQgYS9QbGF0 Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVpL1NpbWljc1BlaS5pbmYgYi9Q bGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVpL1NpbWljc1BlaS5pbmYN Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi5jY2M3MDM3ZDc1DQotLS0g L2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNz UGVpL1NpbWljc1BlaS5pbmYNCkBAIC0wLDAgKzEsMTA0IEBADQorIyMgQGZpbGUNCisjICBQbGF0 Zm9ybSBQRUkgZHJpdmVyDQorIw0KKyMgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHBsYXRmb3JtIHNw ZWNpZmljIGZ1bmN0aW9uIHRvIGRldGVjdCBib290IG1vZGUuDQorIyBDb3B5cmlnaHQgKGMpIDIw MDYgLSAyMDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQor Iw0KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisjDQor IyMNCisNCitbRGVmaW5lc10NCisgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4 MDAwMTAwMDUNCisgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IFNpbWljc1BlaQ0K KyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0gMDUxMTYyMTgtZjlmMS00MWY4LThk MTctYzIyMDcwMDZmZmZmDQorICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBQRUlN DQorICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAxLjANCisgIEVOVFJZX1BPSU5U ICAgICAgICAgICAgICAgICAgICA9IEluaXRpYWxpemVQbGF0Zm9ybQ0KKw0KKyMNCisjIFRoZSBm b2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgZm9yIHJlZmVyZW5jZSBvbmx5IGFuZCBub3QgcmVxdWly ZWQgYnkgdGhlIGJ1aWxkIHRvb2xzLg0KKyMNCisjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAg ICAgICA9IElBMzIgWDY0IEVCQw0KKyMNCisNCitbU291cmNlc10NCisgIENtb3MuYw0KKyAgRmVh dHVyZUNvbnRyb2wuYw0KKyAgTWVtRGV0ZWN0LmMNCisgIFBsYXRmb3JtLmMNCisNCitbUGFja2Fn ZXNdDQorICBNZGVQa2cvTWRlUGtnLmRlYw0KKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5k ZWMNCisgIFVlZmlDcHVQa2cvVWVmaUNwdVBrZy5kZWMNCisgIFNpbWljc09wZW5Cb2FyZFBrZy9P cGVuQm9hcmRQa2cuZGVjDQorICBNaW5QbGF0Zm9ybVBrZy9NaW5QbGF0Zm9ybVBrZy5kZWMNCisg IFNpbWljc1g1OFNrdFBrZy9Ta3RQa2cuZGVjDQorICBTaW1pY3NJY2gxMFBrZy9JY2gxMFBrZy5k ZWMNCisNCitbR3VpZHNdDQorICBnRWZpTWVtb3J5VHlwZUluZm9ybWF0aW9uR3VpZA0KKyAgZ0Vm aVNtbVBlaVNtcmFtTWVtb3J5UmVzZXJ2ZUd1aWQgICAgICAgICAgICAgICMjIENPTlNVTUVTDQor DQorW0xpYnJhcnlDbGFzc2VzXQ0KKyAgQmFzZUxpYg0KKyAgRGVidWdMaWINCisgIEhvYkxpYg0K KyAgSW9MaWINCisgIFBjaUxpYg0KKyAgUGVpUmVzb3VyY2VQdWJsaWNhdGlvbkxpYg0KKyAgUGVp U2VydmljZXNMaWINCisgIFBlaVNlcnZpY2VzVGFibGVQb2ludGVyTGliDQorICBQZWltRW50cnlQ b2ludA0KKyAgTXRyckxpYg0KKyAgUGNkTGliDQorDQorW1BjZF0NCisgIGdCb2FyZE1vZHVsZVRv a2VuU3BhY2VHdWlkLlBjZFNpbWljc1BlaU1lbUZ2QmFzZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5T cGFjZUd1aWQuUGNkU2ltaWNzUGVpTWVtRnZTaXplDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNl R3VpZC5QY2RTaW1pY3NEeGVNZW1GdkJhc2UNCisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlk LlBjZFNpbWljc0R4ZU1lbUZ2U2l6ZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFjZUd1aWQuUGNk U2ltaWNzTG9ja0JveFN0b3JhZ2VCYXNlDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5Q Y2RTaW1pY3NMb2NrQm94U3RvcmFnZVNpemUNCisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlk LlBjZFNpbWljc1NlY1BhZ2VUYWJsZXNCYXNlDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3Vp ZC5QY2RTaW1pY3NTZWNQZWlUZW1wUmFtQmFzZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFjZUd1 aWQuUGNkU2ltaWNzU2VjUGVpVGVtcFJhbVNpemUNCisgIGdFZmlNZGVQa2dUb2tlblNwYWNlR3Vp ZC5QY2RHdWlkZWRFeHRyYWN0SGFuZGxlclRhYmxlQWRkcmVzcw0KKyAgZ0JvYXJkTW9kdWxlVG9r ZW5TcGFjZUd1aWQuUGNkR3VpZGVkRXh0cmFjdEhhbmRsZXJUYWJsZVNpemUNCisgIGdCb2FyZE1v ZHVsZVRva2VuU3BhY2VHdWlkLlBjZFNpbWljc0RlY29tcHJlc3Npb25TY3JhdGNoRW5kDQorICBn Qm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RTaW1pY3NYNThIb3N0QnJpZGdlUGNpRGV2SWQN CisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlkLlBjZFBjaUlvQmFzZQ0KKyAgZ0JvYXJkTW9k dWxlVG9rZW5TcGFjZUd1aWQuUGNkUGNpSW9TaXplDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNl R3VpZC5QY2RQY2lNbWlvMzJCYXNlDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RQ Y2lNbWlvMzJTaXplDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RQY2lNbWlvNjRC YXNlDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RQY2lNbWlvNjRTaXplDQorICBn U2ltaWNzWDU4UGtnVG9rZW5TcGFjZUd1aWQuUGNkWDU4VHNlZ01ieXRlcw0KKyAgZ1NpbWljc1g1 OFBrZ1Rva2VuU3BhY2VHdWlkLlBjZFNtbVNtcmFtUmVxdWlyZQ0KKyAgZ0VmaU1kZU1vZHVsZVBr Z1Rva2VuU3BhY2VHdWlkLlBjZFZhcmlhYmxlU3RvcmVTaXplDQorICBnRWZpTWRlTW9kdWxlUGtn VG9rZW5TcGFjZUd1aWQuUGNkRmxhc2hOdlN0b3JhZ2VGdHdTcGFyZVNpemUNCisgIGdFZmlNZGVN b2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RGbGFzaE52U3RvcmFnZVZhcmlhYmxlU2l6ZQ0KKyAg Z0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEVtdVZhcmlhYmxlTnZTdG9yZVJlc2Vy dmVkDQorICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRHhlSXBsU3dpdGNoVG9M b25nTW9kZQ0KKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFVzZTFHUGFnZVRh YmxlDQorICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkQWNwaVMzRW5hYmxlDQor ICBnVWVmaUNwdVBrZ1Rva2VuU3BhY2VHdWlkLlBjZENwdUxvY2FsQXBpY0Jhc2VBZGRyZXNzDQor ICBnVWVmaUNwdVBrZ1Rva2VuU3BhY2VHdWlkLlBjZENwdU1heExvZ2ljYWxQcm9jZXNzb3JOdW1i ZXINCisgIGdVZWZpQ3B1UGtnVG9rZW5TcGFjZUd1aWQuUGNkQ3B1QXBJbml0VGltZU91dEluTWlj cm9TZWNvbmRzDQorICBnVWVmaUNwdVBrZ1Rva2VuU3BhY2VHdWlkLlBjZENwdUFwU3RhY2tTaXpl DQorICBnTWluUGxhdGZvcm1Qa2dUb2tlblNwYWNlR3VpZC5QY2RGbGFzaEFyZWFCYXNlQWRkcmVz cyAgIyMgQ09OU1VNRVMNCisgIGdNaW5QbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEZsYXNo QXJlYVNpemUgICAgICAgICAjIyBDT05TVU1FUw0KKyAgZ01pblBsYXRmb3JtUGtnVG9rZW5TcGFj ZUd1aWQuUGNkSW9BcGljSWQNCisNCitbRml4ZWRQY2RdDQorICBnRWZpTWRlUGtnVG9rZW5TcGFj ZUd1aWQuUGNkUGNpRXhwcmVzc0Jhc2VBZGRyZXNzDQorDQorDQorW1BwaXNdDQorICBnRWZpUGVp TWFzdGVyQm9vdE1vZGVQcGlHdWlkDQorICBnRWZpUGVpTXBTZXJ2aWNlc1BwaUd1aWQNCisNCitb RGVwZXhdDQorICBUUlVFDQorDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3Bl bkJvYXJkUGtnL1NtYmlvc1BsYXRmb3JtRHhlL1NtYmlvc1BsYXRmb3JtRHhlLmggYi9QbGF0Zm9y bS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU21iaW9zUGxhdGZvcm1EeGUvU21iaW9zUGxhdGZv cm1EeGUuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLmQ2NzliY2Q2 MzENCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBr Zy9TbWJpb3NQbGF0Zm9ybUR4ZS9TbWJpb3NQbGF0Zm9ybUR4ZS5oDQpAQCAtMCwwICsxLDM4IEBA DQorLyoqIEBmaWxlDQorICBUaGlzIGRyaXZlciBpbnN0YWxscyBTTUJJT1MgaW5mb3JtYXRpb24g Zm9yIFFTUA0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDExLCBCZWkgR3VhbiA8Z2J0anU4NUBnbWFp bC5jb20+DQorICBDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLjxCUj4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQorKiovDQorDQorI2lmbmRlZiBfU01CSU9TX1BMQVRGT1JNX0RYRV9IXw0K KyNkZWZpbmUgX1NNQklPU19QTEFURk9STV9EWEVfSF8NCisNCisjaW5jbHVkZSA8UGlEeGUuaD4N CisNCisjaW5jbHVkZSA8UHJvdG9jb2wvU21iaW9zLmg+DQorI2luY2x1ZGUgPEluZHVzdHJ5U3Rh bmRhcmQvU21CaW9zLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCisjaW5jbHVk ZSA8TGlicmFyeS9CYXNlTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5o Pg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KKyNpbmNs dWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9J b0xpYi5oPg0KKw0KKy8qKg0KKyAgVmFsaWRhdGVzIHRoZSBTTUJJT1MgZW50cnkgcG9pbnQgc3Ry dWN0dXJlDQorDQorICBAcGFyYW0gIEVudHJ5UG9pbnRTdHJ1Y3R1cmUgIFNNQklPUyBlbnRyeSBw b2ludCBzdHJ1Y3R1cmUNCisNCisgIEByZXR2YWwgVFJVRSAgIFRoZSBlbnRyeSBwb2ludCBzdHJ1 Y3R1cmUgaXMgdmFsaWQNCisgIEByZXR2YWwgRkFMU0UgIFRoZSBlbnRyeSBwb2ludCBzdHJ1Y3R1 cmUgaXMgbm90IHZhbGlkDQorDQorKiovDQorQk9PTEVBTg0KK0lzRW50cnlQb2ludFN0cnVjdHVy ZVZhbGlkICgNCisgIElOIFNNQklPU19UQUJMRV9FTlRSWV9QT0lOVCAgKkVudHJ5UG9pbnRTdHJ1 Y3R1cmUNCisgICk7DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwvU2lt aWNzT3BlbkJvYXJkUGtnL1NtYmlvc1BsYXRmb3JtRHhlL1NtYmlvc1BsYXRmb3JtRHhlLmluZiBi L1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TbWJpb3NQbGF0Zm9ybUR4ZS9TbWJp b3NQbGF0Zm9ybUR4ZS5pbmYNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAw Li5jNTk4NjA0OWYxDQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NP cGVuQm9hcmRQa2cvU21iaW9zUGxhdGZvcm1EeGUvU21iaW9zUGxhdGZvcm1EeGUuaW5mDQpAQCAt MCwwICsxLDUxIEBADQorIyMgQGZpbGUNCisjICBUaGlzIGRyaXZlciBpbnN0YWxscyBTTUJJT1Mg aW5mb3JtYXRpb24gZm9yIFFTUA0KKyMNCisjICBDb3B5cmlnaHQgKGMpIDIwMTEsIEJlaSBHdWFu IDxnYnRqdTg1QGdtYWlsLmNvbT4NCisjICBDb3B5cmlnaHQgKGMpIDIwMTEgLSAyMDE4LCBJbnRl bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorIw0KKyMgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisjDQorIyMNCisNCitbRGVmaW5l c10NCisgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDUNCisgIEJB U0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IFNtYmlvc1BsYXRmb3JtRHhlDQorICBGSUxF X0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSA0YjE4MzIzZC0yZDQyLTRhZmEtYjllNS05MTUx NmE2ZmU1MDUNCisgIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IERYRV9EUklWRVIN CisgIFZFUlNJT05fU1RSSU5HICAgICAgICAgICAgICAgICA9IDEuMA0KKw0KKyAgRU5UUllfUE9J TlQgICAgICAgICAgICAgICAgICAgID0gU21iaW9zVGFibGVQdWJsaXNoRW50cnkNCisNCisjDQor IyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGZvciByZWZlcmVuY2Ugb25seSBhbmQgbm90 IHJlcXVpcmVkIGJ5IHRoZSBidWlsZCB0b29scy4NCisjDQorIyAgVkFMSURfQVJDSElURUNUVVJF UyAgICAgICAgICAgPSBJQTMyIFg2NCBFQkMgQVJNIEFBUkNINjQNCisjDQorDQorW1NvdXJjZXNd DQorICBTbWJpb3NQbGF0Zm9ybUR4ZS5oDQorICBTbWJpb3NQbGF0Zm9ybUR4ZS5jDQorDQorW1Bh Y2thZ2VzXQ0KKyAgTWRlUGtnL01kZVBrZy5kZWMNCisgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQ a2cuZGVjDQorICBTaW1pY3NPcGVuQm9hcmRQa2cvT3BlbkJvYXJkUGtnLmRlYw0KKyAgQWR2YW5j ZWRGZWF0dXJlUGtnL0FkdmFuY2VkRmVhdHVyZVBrZy5kZWMNCisNCitbTGlicmFyeUNsYXNzZXNd DQorICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCisgIEJhc2VNZW1vcnlMaWINCisgIEJhc2VM aWINCisgIFVlZmlEcml2ZXJFbnRyeVBvaW50DQorICBEZWJ1Z0xpYg0KKyAgSG9iTGliDQorICBN ZW1vcnlBbGxvY2F0aW9uTGliDQorICBJb0xpYg0KKw0KK1tQcm90b2NvbHNdDQorICBnRWZpU21i aW9zUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAgICMgUFJPVE9DT0wgQUxXQVlTX0NP TlNVTUVEDQorDQorW0RlcGV4XQ0KKyAgZ0VmaVNtYmlvc1Byb3RvY29sR3VpZA0KKw0KLS0gDQoy LjE2LjIud2luZG93cy4xDQoNCg==