From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-002e3701.pphosted.com (mx0b-002e3701.pphosted.com [148.163.143.35]) by mx.groups.io with SMTP id smtpd.web11.2190.1607647097188353351 for ; Thu, 10 Dec 2020 16:38:17 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@hpe.com header.s=pps0720 header.b=GkRUiOTY; spf=pass (domain: hpe.com, ip: 148.163.143.35, mailfrom: prvs=0614b7d20b=abner.chang@hpe.com) Received: from pps.filterd (m0134424.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 0BB0X3N3008353; Fri, 11 Dec 2020 00:37:55 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pps0720; bh=ID1lWz6XPuSVfXay96ZMQmnqsS9VappAmSMuOVz8E2A=; b=GkRUiOTYpSvwtrLyyGg19hP4SyTllFS9wk0uo8F7NBAU1o/yVkySvxWvpMbh93suXkc2 ZdhuZEOnhdwhzOHAKoYXxxf3jdqCxZazNRWNrM4I78UyJ9dDdusAgJ8L4MRO5inIsSAp HPJQTDAujdFCVhuRJ7ueQjuyT+OVIdrfyGCgvK89gj0PJLRj49yk6Gn7whvlB1NTQMo0 zKkG6MmgpE55i8IWgfwTSJGnb+SnBTqGtI4anYK+LPV5r6kyY67UIGrWQC4jSUnXzWzf CubaMop/+Jnr+YArgD2OsYWRw7fRhXhnhShxOyjxeq0xS9KbTxrOSNdHridpuCG4nPp2 aA== Received: from g4t3426.houston.hpe.com (g4t3426.houston.hpe.com [15.241.140.75]) by mx0b-002e3701.pphosted.com with ESMTP id 35brskt6yx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Dec 2020 00:37:55 +0000 Received: from G9W9210.americas.hpqcorp.net (g9w9210.houston.hpecorp.net [16.220.66.155]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by g4t3426.houston.hpe.com (Postfix) with ESMTPS id 521575F; Fri, 11 Dec 2020 00:37:51 +0000 (UTC) Received: from G9W9210.americas.hpqcorp.net (2002:10dc:429b::10dc:429b) by G9W9210.americas.hpqcorp.net (2002:10dc:429b::10dc:429b) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 11 Dec 2020 00:37:51 +0000 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (15.241.52.11) by G9W9210.americas.hpqcorp.net (16.220.66.155) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Fri, 11 Dec 2020 00:37:51 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AtNqeaU7TJYsUqOuIq47CF1vwo6z+rrqZc3sZ13gL3am5h27V/MnK+7x0ZeeAPhJ3biHSUYs+dqOxXtz2EIXKhH9Lqx3j6kZpM9jrqoGcO73VVAWwPfp8p3ovOc1I4lzGUit/bVBbJ7yKZXXsjFAR/5fVTCMUk1sjiXYvt8IlYZEjreDcAwFalgjYZ8jgMZfJr5TdHh4tp3TZ51mcVeXyqhG8EcWNYdw7EYCqHw43C44UBom3eFlBEDNSQxmW7NOJfUhVjT9u2nSj1sFFZwRQqhrihvy+7vU83E0UfbcoOeU9+UwjrdUJnAxeaVwSA+z2VdZ6X/yLTs7X23pwJDztQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8Im1dp3i6xdHKlGRYsSG9aGgFIcucB5sksqjIt6X6aQ=; b=HwtYAoEaHLG6hg8YxOxnce3K6H73/dvu4S6KDaaK2ZVbSqE36o0GsL0TmJZTxXtGTZTY9OukjtEncYLc8VwVRiAWj1fWnQ5RoiP+qKFDKpvEaB8euFfWSbuD4WArZcVLyFdVfrxs4uwfQa7D6RaGm1QWgxqPLCjb5GQCT8D9Erbp9TJrQKvfoDP6gcICB3uYjWBYplGvQCJmQd6Rgkm0W1fAJCGmQeQ64IAWCOBHEJT/raGjjCoK1U9U9fHnUwKs8+Yjfjy4Q7LWA3Q6somoIn7H2Ll5O0bs71uyRaeM0yKJNiX7sVnE22+WhcBL2ItQ5EAksy4mR/xNczmIj2wr5A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7508::16) by CS1PR8401MB0406.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7508::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.12; Fri, 11 Dec 2020 00:37:50 +0000 Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::a094:ed67:fb40:340e]) by CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::a094:ed67:fb40:340e%10]) with mapi id 15.20.3654.017; Fri, 11 Dec 2020 00:37:50 +0000 From: "Abner Chang" To: "devel@edk2.groups.io" , "samer.el-haj-mahmoud@arm.com" CC: Liming Gao , Leif Lindholm , "Wang, Nickle (HPS SW)" , "O'Hanley, Peter (EXL)" Subject: Re: [edk2-devel] [PATCH v5 1/6] RedfishPkg/Ucs2Utf8lib: UCS2 to UFT8 manipulation library Thread-Topic: [edk2-devel] [PATCH v5 1/6] RedfishPkg/Ucs2Utf8lib: UCS2 to UFT8 manipulation library Thread-Index: AQHWzvs7wn9FNvJ9RUyyH8Z6l6BMxanwYDfggAAo9YCAAIRDoA== Date: Fri, 11 Dec 2020 00:37:49 +0000 Message-ID: References: <20201208021048.9104-1-abner.chang@hpe.com> <20201208021048.9104-2-abner.chang@hpe.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=hpe.com; x-originating-ip: [165.225.116.142] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 1c46a38c-ebc9-462d-8811-08d89d6cfd09 x-ms-traffictypediagnostic: CS1PR8401MB0406: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:248; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: d77occ5JTR40W+90ETgXTJJhKubbZiMQhMhYWuqmE8cFWp2A+MuLoKoR1to4LORj+rPIK6ZfPAvPvRKczGeojgZrI007E8I8UZXuY3nKmzJ2Q+vHH60XXMu8Dqjq8kS/qKChJx8rwsdVHwEOhomhoO2Cls41mF6GhUN8aiq4o9TN8FZHkQcvVFbQHoFzOJIAIxdPliEyqS+ZAfjBbc8Hkv+QP8Nqe8nsKboLop0mgYCoCpZgm+fb3ee8925wmPWL5IP9KFZS374Ar3D4z0USjIub6u6c80N9Wc70eY7lPMHF6AlYn0miCS4oPrRmg1MhLFfFlWjvgXcUyYBiebv69HQw9v8FI+SIYW5x4tJqrnMwY5OxNqre2+RGFXgo5MnsMbTVCqrM8QO5RMUmdzRy0g== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(136003)(366004)(376002)(346002)(7696005)(52536014)(6506007)(8676002)(53546011)(30864003)(2906002)(508600001)(86362001)(33656002)(71200400001)(19627235002)(110136005)(83380400001)(55016002)(64756008)(55236004)(54906003)(66556008)(9686003)(8936002)(4326008)(66476007)(66446008)(66946007)(5660300002)(26005)(186003)(76116006)(966005)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?UWdsRG91NE1QUm1vaXZqSmtJa2ZKZ2FyZWVYOFpEaHF4MjByOENaNnJiM0hz?= =?utf-8?B?QkwyaVpnbzBuVGMxeCtua3BHTzJGYkZNaDlyekw5ODgwTzFScS8reE9hbFNN?= =?utf-8?B?U3haOGIwME84RlhyTk5BNWErd1U5ekgveFI3TXF6UXpBSG5EbG1JMGh0SWZL?= =?utf-8?B?ejVYeU9MbGI1T3c0N0wwWDNweWhiYnhXMGxpc2hBakdVZllvR0U3TElKUzZK?= =?utf-8?B?aU00bWdQZ3ZTMUJQNkhVK2RKcFQwZlQzUmovakZZTVhrMXRlemNQNzZMcjdC?= =?utf-8?B?RkpEVFQrTGVBRWoySERRUDU0TElTUGJzcXN0ZWpoa05ZMW96T2dOZFlrdUVR?= =?utf-8?B?ZE1Lc2gwOUV6N24xa0RWdlI5VmtTZjNuVHhZd2xGU1JncmdQWU4yeWljcCt1?= =?utf-8?B?R0JiSjNKK1dNOEdmVXVjMGV1MjhENXFQQ2FEbWgvYVp3WnF0REliaVhjYURZ?= =?utf-8?B?UzNiYW9WTWRHZ1hNelZicGRhVExmVTZZQXgvbW5VR0pqMlM4YmhzbG5XdDB5?= =?utf-8?B?dEtRK0xaTExtWGJ4eUVNL3RnTnE3QkUwejhVQlQ1SmplLzRrc2F0MlJKRUcx?= =?utf-8?B?U1MyNEpSYUhSZnN1YjBIVnQ4RHNEaWo3UFkvQlRvWXBSY1J2ZzJhVWJGSXZo?= =?utf-8?B?azk5UWVNbDNYK1RueEFHLzVzNVlKQjd1Tms5NGxxdUJKL0hEMmUrUWRFWCsy?= =?utf-8?B?NFFIOWdsSnErUHVCMFo4NGpGMHY4TjljVjdxWWtKZVdyYzk3NXAxU1Eya1pP?= =?utf-8?B?eGNlVGYzVHh5Y0xrSjlWdDJqNDlIUWg5R0JqL0xUYVN2VTVPTFdablVKcTB0?= =?utf-8?B?Y2NoRUUvazBrZXo4dTlkSUl6SFhNR2V6SVdUVWFESDdud2dTdjB2c1hEclU2?= =?utf-8?B?OW9CemQ1RmVIOEMyZlFPam9HUkpWc1FOU1JZODhWQmtOUjl2d3hVcHJOREhi?= =?utf-8?B?VHJpWkZKcUtKdEsycWNnUXZMaElKSlZycGhTTnNya2FYTmlCVWVodlk1dTNx?= =?utf-8?B?WVh2UjR6M0h0SWYvVldMdWR5Wm53ZytjdjJIQkszdXdQdHNnRVFYWlExTDhm?= =?utf-8?B?aU4yQXpwbzJwMTFZdlVXV0JpbXg3N3Axc3NINXZoOEpPSWM2NG8wVG5TZjJw?= =?utf-8?B?ZTdVdzlPSzg1MElnWFR4MTY3a1NVS3g0MitIZ1lQTTg5dXFHUTE1dFY4eDk1?= =?utf-8?B?Z2h2NkFVeU5UaTRidTRtS1hJSUJ3M21GWjlKM0hQV0IrS1NIKzl2OE1MSzYr?= =?utf-8?B?b1BGdWR1RC9WWGhLcWlGSDlwNmxqdU5aMnBSaDU2RGRhU0Q5blpNWVFMSWVs?= =?utf-8?Q?9KYqt90uksOM0PvPd/3Gp7tyl0V5firQux?= X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 1c46a38c-ebc9-462d-8811-08d89d6cfd09 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Dec 2020 00:37:49.9444 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: BVivqPTvUcXR0w4ISBQAkSMh0YLR0yKz9mJCCEhUBDjNT0REBs3wLwOmQsLyFyNm616IeJjVHLCYJFak/SEi3g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR8401MB0406 X-OriginatorOrg: hpe.com X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.343,18.0.737 definitions=2020-12-10_11:2020-12-09,2020-12-10 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=999 spamscore=0 lowpriorityscore=0 mlxscore=0 adultscore=0 suspectscore=0 priorityscore=1501 phishscore=0 malwarescore=0 impostorscore=0 bulkscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2012110002 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogZGV2ZWxAZWRrMi5ncm91 cHMuaW8gW21haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pb10gT24gQmVoYWxmIE9mDQo+IFNhbWVy IEVsLUhhai1NYWhtb3VkDQo+IFNlbnQ6IEZyaWRheSwgRGVjZW1iZXIgMTEsIDIwMjAgMTI6NDMg QU0NCj4gVG86IENoYW5nLCBBYm5lciAoSFBTIFNXL0ZXIFRlY2hub2xvZ2lzdCkgPGFibmVyLmNo YW5nQGhwZS5jb20+Ow0KPiBkZXZlbEBlZGsyLmdyb3Vwcy5pbw0KPiBDYzogTGltaW5nIEdhbyA8 Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPjsgTGVpZiBMaW5kaG9sbQ0KPiA8bGVpZkBudXZpYWlu Yy5jb20+OyBXYW5nLCBOaWNrbGUgKEhQUyBTVykgPG5pY2tsZS53YW5nQGhwZS5jb20+Ow0KPiBP J0hhbmxleSwgUGV0ZXIgKEVYTCkgPHBldGVyLm9oYW5sZXlAaHBlLmNvbT47IFNhbWVyIEVsLUhh ai1NYWhtb3VkDQo+IDxTYW1lci5FbC1IYWotTWFobW91ZEBhcm0uY29tPg0KPiBTdWJqZWN0OiBS ZTogW2VkazItZGV2ZWxdIFtQQVRDSCB2NSAxLzZdIFJlZGZpc2hQa2cvVWNzMlV0ZjhsaWI6IFVD UzIgdG8NCj4gVUZUOCBtYW5pcHVsYXRpb24gbGlicmFyeQ0KPiANCj4gTmFoLCBubyBmaWdodCBu ZWNlc3Nhcnkg8J+YiiBBcG9sb2dpZXMgZm9yIG1pc3NpbmcgdGhlIGVhcmxpZXIgY29udmVyc2F0 aW9uLiBJDQpUaGF04oCZcyBubyBwcm9ibGVtDQoNCj4gZ3Vlc3MgbW92aW5nIGl0IHRvIE1kZU1v ZHVsZVBrZyBpbiB0aGUgZnV0dXJlICh3aGVuIHRoZXJlIGFyZSBtb3JlIHVzZQ0KPiBjYXNlcykg aXMgZmluZS4gSSBqdXN0IHJlbWVtYmVyIHRoZSB0b3BpYyBvZiBoYW5kbGluZyBVVEY4IGluIEVE SzIgY29taW5nIHVwDQo+IGluIHZhcmlvdXMgZm9ydW1zIGFuZCB3YXMgcGxlYXNhbnRseSBzdXJw cmlzZWQgdG8gc2VlIHRoZSBwYXRjaC4gVGhhbmtzIGZvcg0KPiBzdWJtaXR0aW5nIGl0Lg0KR29v ZCB0byBrbm93IHRoYXQsIHRoYW5rcyBTYW1lci4NCj4gDQo+IC0tU2FtZXINCj4gDQo+IA0KPiAN Cj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IENoYW5nLCBBYm5lciAo SFBTIFNXL0ZXIFRlY2hub2xvZ2lzdCkgPGFibmVyLmNoYW5nQGhwZS5jb20+DQo+ID4gU2VudDog VGh1cnNkYXksIERlY2VtYmVyIDEwLCAyMDIwIDk6MjcgQU0NCj4gPiBUbzogU2FtZXIgRWwtSGFq LU1haG1vdWQgPFNhbWVyLkVsLUhhai1NYWhtb3VkQGFybS5jb20+Ow0KPiA+IGRldmVsQGVkazIu Z3JvdXBzLmlvDQo+ID4gQ2M6IExpbWluZyBHYW8gPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj47 IExlaWYgTGluZGhvbG0NCj4gPiA8bGVpZkBudXZpYWluYy5jb20+OyBXYW5nLCBOaWNrbGUgKEhQ UyBTVykgPG5pY2tsZS53YW5nQGhwZS5jb20+Ow0KPiA+IE8nSGFubGV5LCBQZXRlciAoRVhMKSA8 cGV0ZXIub2hhbmxleUBocGUuY29tPg0KPiA+IFN1YmplY3Q6IFJFOiBbZWRrMi1kZXZlbF0gW1BB VENIIHY1IDEvNl0gUmVkZmlzaFBrZy9VY3MyVXRmOGxpYjogVUNTMg0KPiA+IHRvDQo+ID4gVUZU OCBtYW5pcHVsYXRpb24gbGlicmFyeQ0KPiA+DQo+ID4gSGFoIGhhaCBTYW1lciwgdGhpcyBmaWxl IHdhcyBvcmlnaW5hbGx5IHdlbnQgd2l0aCBKc29uTGliLiBMZWlmDQo+ID4gc3VnZ2VzdGVkIHRv IG1vdmUgVUNTMi1VVEY4ICBmdW5jdGlvbnMgdG8gYSBzZXBhcmF0ZWQgbGliIHVuZGVyDQo+ID4g TWRlTW9kdWxlUGtnIHdoaWNoIHdhcyBhIGdvb2QgaWRlYSBhcyB5b3UgbWVudGlvbmVkLiBIb3dl dmVyIHRoZQ0KPiA+IHBhY2thZ2Ugc3Rld2FyZCB3b3VsZCBsaWtlIHRvIGtlZXAgdGhpcyBsaWJy YXJ5IGluIFJlZGZpc2hQa2cgYW5kIG1vdmUNCj4gPiBpdCB0byB1bmRlciBNZGVNb2R1bGVQa2cg dW50aWwgbW9yZSB1c2UgY2FzZXMgcmVxdWVzdCB0aGlzIGxpYiwgdGhpcyBtYWtlcw0KPiBzZW5z ZSBhcyB3ZWxsLg0KPiA+IEkgdGhpbmsgd2UgbmVlZCBhIGZpZ2h0IDopDQo+ID4gQWJuZXINCj4g Pg0KPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+IEZyb206IFNhbWVyIEVs LUhhai1NYWhtb3VkIFttYWlsdG86U2FtZXIuRWwtSGFqLQ0KPiBNYWhtb3VkQGFybS5jb21dDQo+ ID4gPiBTZW50OiBUaHVyc2RheSwgRGVjZW1iZXIgMTAsIDIwMjAgOTo0OSBQTQ0KPiA+ID4gVG86 IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBDaGFuZywgQWJuZXIgKEhQUyBTVy9GVyBUZWNobm9sb2dp c3QpDQo+ID4gPiA8YWJuZXIuY2hhbmdAaHBlLmNvbT4NCj4gPiA+IENjOiBMaW1pbmcgR2FvIDxn YW9saW1pbmdAYnlvc29mdC5jb20uY24+OyBMZWlmIExpbmRob2xtDQo+ID4gPiA8bGVpZkBudXZp YWluYy5jb20+OyBXYW5nLCBOaWNrbGUgKEhQUyBTVykgPG5pY2tsZS53YW5nQGhwZS5jb20+Ow0K PiA+ID4gTydIYW5sZXksIFBldGVyIChFWEwpIDxwZXRlci5vaGFubGV5QGhwZS5jb20+OyBTYW1l ciBFbC1IYWotDQo+IE1haG1vdWQNCj4gPiA+IDxTYW1lci5FbC1IYWotTWFobW91ZEBhcm0uY29t Pg0KPiA+ID4gU3ViamVjdDogUkU6IFtlZGsyLWRldmVsXSBbUEFUQ0ggdjUgMS82XSBSZWRmaXNo UGtnL1VjczJVdGY4bGliOg0KPiA+ID4gVUNTMiB0bw0KPiA+ID4gVUZUOCBtYW5pcHVsYXRpb24g bGlicmFyeQ0KPiA+ID4NCj4gPiA+IERvZXMgdGhpcyByZWFsbHkgbmVlZCB0byBiZSBpbiBSZWRm aXNoUGtnPyBCb3RoIFVDUy1TIGFuZCBVVEY4IGFyZQ0KPiA+ID4gc3RhbmRhcmQgYW5kIGNvbW1v biBmb3JtYXRzLCBzbyBJdCBzZWVtcyBsaWtlIGEgdXNlZnVsIHN0cmluZw0KPiA+ID4gbWFuaXB1 bGF0aW9uIGxpYnJhcnkgdGhhdCBtYXkgaGF2ZSBvdGhlciB1c2UgY2FzZXM/IE1heWJlIG1vdmUg aXQgdG8NCj4gPiBNZGVNb2R1bGVQa2c/DQo+ID4gPg0KPiA+ID4gPiAtLS0tLU9yaWdpbmFsIE1l c3NhZ2UtLS0tLQ0KPiA+ID4gPiBGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbyA8ZGV2ZWxAZWRr Mi5ncm91cHMuaW8+IE9uIEJlaGFsZiBPZg0KPiA+IEFibmVyDQo+ID4gPiA+IENoYW5nIHZpYSBn cm91cHMuaW8NCj4gPiA+ID4gU2VudDogTW9uZGF5LCBEZWNlbWJlciA3LCAyMDIwIDk6MTEgUE0N Cj4gPiA+ID4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+ID4gPiA+IENjOiBMaW1pbmcgR2Fv IDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+OyBMZWlmIExpbmRob2xtDQo+ID4gPiA+IDxsZWlm QG51dmlhaW5jLmNvbT47IE5pY2tsZSBXYW5nIDxuaWNrbGUud2FuZ0BocGUuY29tPjsgUGV0ZXIN Cj4gPiA+IE8nSGFubGV5DQo+ID4gPiA+IDxwZXRlci5vaGFubGV5QGhwZS5jb20+DQo+ID4gPiA+ IFN1YmplY3Q6IFtlZGsyLWRldmVsXSBbUEFUQ0ggdjUgMS82XSBSZWRmaXNoUGtnL1VjczJVdGY4 bGliOiBVQ1MyDQo+ID4gPiA+IHRvDQo+ID4gPiA+IFVGVDggbWFuaXB1bGF0aW9uIGxpYnJhcnkN Cj4gPiA+ID4NCj4gPiA+ID4gVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIFVDUzIgdG8gVUZUOCBvciB2 aXNlIHZlcnNhIGZ1bmN0aW9ucyB0bw0KPiA+ID4gPiBtYW5pcHVsYXRlDQo+ID4gPiA+IFVDUzIv VVRGOCBzdHJpbmdzLiBUaGlzIGxpYnJhcnkgaXMgY3VycmVudGx5IHVzZWQgYnkgZWRrMiBwb3J0 IG9mDQo+ID4gPiA+IG9wZW4gc291cmNlIGphbnNzb24gbGlicmFyeS4NCj4gPiA+ID4NCj4gPiA+ ID4gU2lnbmVkLW9mZi1ieTogQWJuZXIgQ2hhbmcgPGFibmVyLmNoYW5nQGhwZS5jb20+DQo+ID4g PiA+DQo+ID4gPiA+IENjOiBMaW1pbmcgR2FvIDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+DQo+ ID4gPiA+IENjOiBMZWlmIExpbmRob2xtIDxsZWlmQG51dmlhaW5jLmNvbT4NCj4gPiA+ID4gQ2M6 IE5pY2tsZSBXYW5nIDxuaWNrbGUud2FuZ0BocGUuY29tPg0KPiA+ID4gPiBDYzogUGV0ZXIgTydI YW5sZXkgPHBldGVyLm9oYW5sZXlAaHBlLmNvbT4NCj4gPiA+ID4gLS0tDQo+ID4gPiA+ICBSZWRm aXNoUGtnL0luY2x1ZGUvTGlicmFyeS9CYXNlVWNzMlV0ZjhMaWIuaCAgfCAgNjkgKysrDQo+ID4g PiA+IC4uLi9MaWJyYXJ5L0Jhc2VVY3MyVXRmOExpYi9CYXNlVWNzMlV0ZjhMaWIuYyB8IDQxNw0K PiA+ID4gKysrKysrKysrKysrKysrKysrDQo+ID4gPiA+ICAuLi4vQmFzZVVjczJVdGY4TGliL0Jh c2VVY3MyVXRmOExpYi5pbmYgICAgICAgfCAgMzEgKysNCj4gPiA+ID4gIFJlZGZpc2hQa2cvUmVk ZmlzaExpYnMuZHNjLmluYyAgICAgICAgICAgICAgICB8ICAgMSArDQo+ID4gPiA+ICBSZWRmaXNo UGtnL1JlZGZpc2hQa2cuZGVjICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKw0KPiA+ID4gPiAg UmVkZmlzaFBrZy9SZWRmaXNoUGtnLmRzYyAgICAgICAgICAgICAgICAgICAgIHwgICAxICsNCj4g PiA+ID4gIDYgZmlsZXMgY2hhbmdlZCwgNTIzIGluc2VydGlvbnMoKykgIGNyZWF0ZSBtb2RlIDEw MDY0NA0KPiA+ID4gPiBSZWRmaXNoUGtnL0luY2x1ZGUvTGlicmFyeS9CYXNlVWNzMlV0ZjhMaWIu aA0KPiA+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gPiA+IFJlZGZpc2hQa2cvTGlicmFy eS9CYXNlVWNzMlV0ZjhMaWIvQmFzZVVjczJVdGY4TGliLmMNCj4gPiA+ID4gIGNyZWF0ZSBtb2Rl IDEwMDY0NA0KPiA+ID4gPiBSZWRmaXNoUGtnL0xpYnJhcnkvQmFzZVVjczJVdGY4TGliL0Jhc2VV Y3MyVXRmOExpYi5pbmYNCj4gPiA+ID4NCj4gPiA+ID4gZGlmZiAtLWdpdCBhL1JlZGZpc2hQa2cv SW5jbHVkZS9MaWJyYXJ5L0Jhc2VVY3MyVXRmOExpYi5oDQo+ID4gPiA+IGIvUmVkZmlzaFBrZy9J bmNsdWRlL0xpYnJhcnkvQmFzZVVjczJVdGY4TGliLmgNCj4gPiA+ID4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gPiA+ID4gaW5kZXggMDAwMDAwMDAwMC4uNTFhZTkyNDkyOQ0KPiA+ID4gPiAtLS0g L2Rldi9udWxsDQo+ID4gPiA+ICsrKyBiL1JlZGZpc2hQa2cvSW5jbHVkZS9MaWJyYXJ5L0Jhc2VV Y3MyVXRmOExpYi5oDQo+ID4gPiA+IEBAIC0wLDAgKzEsNjkgQEANCj4gPiA+ID4gKy8qKiBAZmls ZQ0KPiA+ID4gPiArICBVQ1MyIHRvIFVURjggbWFuaXB1bGF0aW9uIGxpYnJhcnkgaGVhZGVyIGZp bGUuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDE5LCBJbnRlbCBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gPiA+ICsgIChDKSBDb3B5cmln aHQgMjAyMCBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudA0KPiA+ID4gPiAr IExQPEJSPg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyNpZm5kZWYgQkFTRV9VQ1MyVVRGOF9MSUJfSF8NCj4gPiA+ID4gKyNkZWZpbmUg QkFTRV9VQ1MyVVRGOF9MSUJfSF8NCj4gPiA+ID4gKw0KPiA+ID4gPiArI2luY2x1ZGUgPEJhc2Uu aD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxVZWZpLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8TGlicmFy eS9CYXNlTGliLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+ ICNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8TGlicmFy eS9QcmludExpYi5oPiAjaW5jbHVkZQ0KPiA+ID4gPiArPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlv bkxpYi5oPg0KPiA+ID4gPiArDQo+ID4gPiA+ICsvLy8NCj4gPiA+ID4gKy8vLyAgTCJcdTAwMDAi DQo+ID4gPiA+ICsvLy8NCj4gPiA+ID4gKyNkZWZpbmUgVU5JQ09ERV9GT1JNQVRfTEVOICAgICAg ICAgNg0KPiA+ID4gPiArI2RlZmluZSBVTklDT0RFX0ZPUk1BVF9DSEFSX0xFTiAgICAyDQo+ID4g PiA+ICsjZGVmaW5lIFVOSUNPREVfRk9STUFUX0NIQVJfU0laRSAgIDMNCj4gPiA+ID4gKw0KPiA+ ID4gPiArI2RlZmluZSBVVEY4X0JVRkZFUl9GT1JfVUNTMl9NQVhfU0laRSAgIDMNCj4gPiA+ID4g Kw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIENvbnZlcnQgYSBVQ1MyIHN0cmluZyB0byBhIFVU RjggZW5jb2RlZCBzdHJpbmcuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW2luXSAgICBV Y3MyU3RyICAgICAgICAgICAgICAgIFRoZSBwcm92aWRlZCBVQ1MyIHN0cmluZy4NCj4gPiA+ID4g KyAgQHBhcmFtW291dF0gICBVdGY4U3RyQWRkciAgICAgICAgICAgIFRoZSBjb252ZXJ0ZWQgVVRG OCBzdHJpbmcgYWRkcmVzcy4NCj4gPiA+IENhbGxlcg0KPiA+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaXMgcmVzcG9uc2libGUgZm9yIEZyZWUgdGhpcyBzdHJp bmcuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgICBFRklfSU5WQUxJRF9QQVJB TUVURVIgIE9uZSBvciBtb3JlIHBhcmFtZXRlcnMgYXJlDQo+ID4gPiA+IGludmFsaWQuDQo+ID4g PiA+ICsgIEByZXR2YWwgICAgICAgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBTeXN0ZW0gcnVucyBv dXQgb2YgcmVzb3VyY2VzLg0KPiA+ID4gPiArICBAcmV0dmFsICAgICAgIEVGSV9TVUNDRVNTICAg ICAgICAgICAgVGhlIFVURjggZW5jb2RlZCBzdHJpbmcgaGFzIGJlZW4NCj4gPiA+ID4gY29udmVy dGVkLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ ID4gK1VDUzJTdHJUb1VURjggKA0KPiA+ID4gPiArICBJTiAgQ0hBUjE2ICAgICAqVWNzMlN0ciwN Cj4gPiA+ID4gKyAgT1VUIENIQVI4ICAgICAgKipVdGY4U3RyQWRkcg0KPiA+ID4gPiArICApOw0K PiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgQ29udmVydCBhIFVURjggZW5jb2Rl ZCBzdHJpbmcgdG8gYSBVQ1MyIHN0cmluZy4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1b aW5dICAgIFV0ZjhTdHIgICAgICAgICAgICAgICAgVGhlIHByb3ZpZGVkIFVURjggZW5jb2RlZCBz dHJpbmcuDQo+ID4gPiA+ICsgIEBwYXJhbVtvdXRdICAgVWNzMlN0ckFkZHIgICAgICAgICAgICBU aGUgY29udmVydGVkIFVDUzIgc3RyaW5nIGFkZHJlc3MuDQo+ID4gPiA+IENhbGxlcg0KPiA+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcmVzcG9uc2libGUg Zm9yIEZyZWUgdGhpcyBzdHJpbmcuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCAgICAg ICBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFRoZSBVVEY4IGVuY29kZWQgc3RyaW5nIGlzIG5vdA0K PiA+ID4gdmFsaWQNCj4gPiA+ID4gdG8NCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnZlcnQgdG8gVUNTMiBzdHJpbmcuDQo+ID4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmUgb3IgbW9yZSBwYXJhbWV0ZXJzIGFy ZSBpbnZhbGlkLg0KPiA+ID4gPiArICBAcmV0dmFsICAgICAgIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT ICAgU3lzdGVtIHJ1bnMgb3V0IG9mIHJlc291cmNlcy4NCj4gPiA+ID4gKyAgQHJldHZhbCAgICAg ICBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBVQ1MyIHN0cmluZyBoYXMgYmVlbiBjb252ZXJ0 ZWQuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4g PiArVVRGOFN0clRvVUNTMiAoDQo+ID4gPiA+ICsgIElOICBDSEFSOCAgICAgICpVdGY4U3RyLA0K PiA+ID4gPiArICBPVVQgQ0hBUjE2ICAgICAqKlVjczJTdHJBZGRyDQo+ID4gPiA+ICsgICk7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvUmVkZmlzaFBr Zy9MaWJyYXJ5L0Jhc2VVY3MyVXRmOExpYi9CYXNlVWNzMlV0ZjhMaWIuYw0KPiA+ID4gPiBiL1Jl ZGZpc2hQa2cvTGlicmFyeS9CYXNlVWNzMlV0ZjhMaWIvQmFzZVVjczJVdGY4TGliLmMNCj4gPiA+ ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+ID4gaW5kZXggMDAwMDAwMDAwMC4uNmNmZjEw OWE1Yw0KPiA+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiA+ICsrKyBiL1JlZGZpc2hQa2cvTGli cmFyeS9CYXNlVWNzMlV0ZjhMaWIvQmFzZVVjczJVdGY4TGliLmMNCj4gPiA+ID4gQEAgLTAsMCAr MSw0MTcgQEANCj4gPiA+ID4gKy8qKiBAZmlsZQ0KPiA+ID4gPiArICBVQ1MyIHRvIFVURjggbWFu aXB1bGF0aW9uIGxpYnJhcnkuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQ29weXJpZ2h0IChjKSAy MDE4IC0gMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMNCj4gPiA+ID4gKyByZXNl cnZlZC48QlI+DQo+ID4gPiA+ICsgIChDKSBDb3B5cmlnaHQgMjAyMCBIZXdsZXR0IFBhY2thcmQg RW50ZXJwcmlzZSBEZXZlbG9wbWVudA0KPiA+ID4gPiArIExQPEJSPg0KPiA+ID4gPiArDQo+ID4g PiA+ICsgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4g PiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNpbmNsdWRlIDxMaWJy YXJ5L0Jhc2VVY3MyVXRmOExpYi5oPg0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4g KyAgU2luY2UgZWFjaCBVQ1MyIGNoYXJhY3RlciBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgMS0zIFVU RjgNCj4gPiA+ID4gK2VuY29kZWQgY2hhcmFjdGVycywNCj4gPiA+ID4gKyAgdGhpcyBmdW5jdGlv biBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBVVEY4IGVuY29kaW5nIHNpemUgZm9yIGENCj4gPiA+ ID4gK1VDUzINCj4gPiA+ID4gY2hhcmFjdGVyLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBwYXJh bVtpbl0gICBVdGY4QnVmZmVyICAgICAgIFRoZSBidWZmZXIgZm9yIFVURjggZW5jb2RlZCBkYXRh Lg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2YWwgICAgICBSZXR1cm4gdGhlIHNpemUgb2Yg VVRGOCBlbmNvZGluZyBzdHJpbmcgb3IgMCBpZiBpdCBpcyBub3QgZm9yDQo+ID4gPiA+ICsgICAg ICAgICAgICAgICBVQ1MyIGZvcm1hdC4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ ICtVSU5UOA0KPiA+ID4gPiArR2V0VVRGOFNpemVGb3JVQ1MyICgNCj4gPiA+ID4gKyAgSU4gICAg Q0hBUjggICAgICAqVXRmOEJ1ZmZlcg0KPiA+ID4gPiArICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ ICsgIENIQVI4ICAgIFRlbXBDaGFyOw0KPiA+ID4gPiArICBVSU5UOCAgICBVdGY4U2l6ZTsNCj4g PiA+ID4gKw0KPiA+ID4gPiArICBBU1NFUlQgKFV0ZjhCdWZmZXIgIT0gTlVMTCk7DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyAgVGVtcENoYXIgPSAqVXRmOEJ1ZmZlcjsNCj4gPiA+ID4gKyAgaWYgKChU ZW1wQ2hhciAmIDB4RjApID09IDB4RjApIHsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIC8vDQo+ ID4gPiA+ICsgICAgLy8gVGhpcyBmb3JtYXQgaXMgbm90IGZvciBVQ1MyLg0KPiA+ID4gPiArICAg IC8vDQo+ID4gPiA+ICsgICAgcmV0dXJuIDA7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ ID4gPiArICBVdGY4U2l6ZSA9IDE7DQo+ID4gPiA+ICsgIGlmICgoVGVtcENoYXIgJiAweDgwKSA9 PSAweDgwKSB7DQo+ID4gPiA+ICsgICAgaWYgKChUZW1wQ2hhciAmIDB4QzApID09IDB4QzApIHsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgVXRmOFNpemUgKys7DQo+ID4gPiA+ICsgICAgICBp ZiAoKFRlbXBDaGFyICYgMHhFMCkgPT0gMHhFMCkgew0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAg ICAgIFV0ZjhTaXplICsrOw0KPiA+ID4gPiArICAgICAgfQ0KPiA+ID4gPiArICAgIH0NCj4gPiA+ ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIHJldHVybiBVdGY4U2l6ZTsNCj4gPiA+ID4g K30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgIFNpbmNlIGVhY2ggVUNTMiBj aGFyYWN0ZXIgY2FuIGJlIHJlcHJlc2VudGVkIGJ5IHRoZSBmb3JtYXQ6DQo+ID4gPiA+ICtcdVhY WFgsIHRoaXMgZnVuY3Rpb24NCj4gPiA+ID4gKyAgaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgVUNT MiBjaGFyYWN0ZXIgZnJvbSBhIFVuaWNvZGUgZm9ybWF0Lg0KPiA+ID4gPiArICBDYWxsIE1VU1Qg bWFrZSBzdXJlIHRoZXJlIGFyZSBhdCBsZWFzdCA2IEJ5dGVzIGluIHRoZSBpbnB1dA0KPiA+ID4g PiArVVRGOA0KPiA+IGJ1ZmZlci4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1baW5dICAg IFV0ZjhCdWZmZXIgICAgICAgICAgICAgVGhlIGJ1ZmZlciBmb3IgVVRGOCBlbmNvZGVkIGRhdGEu DQo+ID4gPiA+ICsgIEBwYXJhbVtvdXRdICAgVWNzMkNoYXIgICAgICAgICAgICAgICBUaGUgY29u dmVydGVkIFVDUzIgY2hhcmFjdGVyLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2YWwgICAg ICAgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBOb24tQXNjaWkgY2hhcmFjdGVycyBmb3VuZCBpbg0K PiA+IHRoZQ0KPiA+ID4gPiBoZXhhZGVjaW1hbA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGlnaXRzIHN0cmluZywgYW5kIGNhbid0IGJlIGNvbnZlcnRl ZCB0byBhIFVDUzINCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXJhY3Rlci4NCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgICBFRklfU1VDQ0VTUyAgICAg ICAgICAgIFRoZSBVQ1MyIGNoYXJhY3RlciBoYXMgYmVlbiByZXRyaWV2ZWQuDQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gPiArR2V0VUNTMkNoYXJC eUZvcm1hdCAoDQo+ID4gPiA+ICsgIElOICAgIENIQVI4ICAgICAgKlV0ZjhCdWZmZXIsDQo+ID4g PiA+ICsgIE9VVCAgIENIQVIxNiAgICAgKlVjczJDaGFyDQo+ID4gPiA+ICsgICkNCj4gPiA+ID4g K3sNCj4gPiA+ID4gKyAgVUlOVDggICAgIE51bTE7DQo+ID4gPiA+ICsgIFVJTlQ4ICAgICBOdW0y Ow0KPiA+ID4gPiArICBVSU5UOCAgICAgSW5kZXg7DQo+ID4gPiA+ICsgIENIQVI4ICAgICBVY3My Q2hhckZvcm1hdFtVTklDT0RFX0ZPUk1BVF9DSEFSX1NJWkVdOyAgLy8vIHR3bw0KPiA+ID4gPiBI ZXhhZGVjaW1hbCBkaWdpdHMgQXNjaWkgc3RyaW5nLCBsaWtlICIzRiINCj4gPiA+ID4gKw0KPiA+ ID4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCA0OyBJbmRleCArKykgew0KPiA+ID4gPiAr ICAgIGlmICgoKihVdGY4QnVmZmVyICsgMiArIEluZGV4KSAmIDB4ODApICE9IDB4MDApIHsNCj4g PiA+ID4gKyAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiA+ICsgICAg fQ0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgWmVyb01lbSAoVWNzMkNoYXJG b3JtYXQsIFVOSUNPREVfRk9STUFUX0NIQVJfU0laRSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg Ly8NCj4gPiA+ID4gKyAgLy8gR2V0IHRoZSBGaXJzdCBOdW1iZXIsIE9mZnNldCBpcyAyICAvLyAg Q29weU1lbQ0KPiA+ID4gPiArIChVY3MyQ2hhckZvcm1hdCwgVXRmOEJ1ZmZlciArIDIsDQo+ID4g PiA+IFVOSUNPREVfRk9STUFUX0NIQVJfTEVOKTsNCj4gPiA+ID4gKyAgTnVtMSA9IChVSU5UOCkg QXNjaWlTdHJIZXhUb1VpbnRuIChVY3MyQ2hhckZvcm1hdCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4g KyAgLy8NCj4gPiA+ID4gKyAgLy8gR2V0IHRoZSBTZWNvbmQgTnVtYmVyLCBPZmZzZXQgaXMgNCAg Ly8gIENvcHlNZW0NCj4gPiA+ID4gKyAoVWNzMkNoYXJGb3JtYXQsIFV0ZjhCdWZmZXIgKyA0LCBV TklDT0RFX0ZPUk1BVF9DSEFSX0xFTik7DQo+ID4gPiA+ICsgIE51bTIgPSAoVUlOVDgpIEFzY2lp U3RySGV4VG9VaW50biAoVWNzMkNoYXJGb3JtYXQpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIC8v DQo+ID4gPiA+ICsgIC8vIFVjczJDaGFyIGlzIExpdHRsZS1FbmRpYW4NCj4gPiA+ID4gKyAgLy8N Cj4gPiA+ID4gKyAgKigoQ0hBUjggKikgVWNzMkNoYXIpICAgICAgICA9IE51bTI7DQo+ID4gPiA+ ICsgICooKChDSEFSOCAqKSBVY3MyQ2hhcikgKyAxKSA9IE51bTE7DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ ICsvKioNCj4gPiA+ID4gKyAgQ29udmVydCBhIFVDUzIgY2hhcmFjdGVyIHRvIFVURjggZW5jb2Rp bmcgc3RyaW5nLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gICAgVWNzMkNoYXIg ICAgICAgICAgICAgICBUaGUgcHJvdmlkZWQgVUNTMiBjaGFyYWN0ZXIuDQo+ID4gPiA+ICsgIEBw YXJhbVtvdXRdICAgVXRmOEJ1ZmZlciAgICAgICAgICAgICBUaGUgY29udmVydGVkIFVURjggZW5j b2RlZCBkYXRhLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2YWwgICAgICBSZXR1cm4gdGhl IHNpemUgb2YgVVRGOCBlbmNvZGluZyBkYXRhIGZvciB0aGlzIFVDUzINCj4gPiBjaGFyYWN0ZXIu DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArVUlOVDgNCj4gPiA+ID4gK1VDUzJD aGFyVG9VVEY4ICgNCj4gPiA+ID4gKyAgSU4gIENIQVIxNiAgICAgVWNzMkNoYXIsDQo+ID4gPiA+ ICsgIE9VVCBDSEFSOCAgICAgICpVdGY4QnVmZmVyDQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sN Cj4gPiA+ID4gKyAgVUlOVDE2ICAgIFVjczJOdW1iZXI7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg QVNTRVJUIChVdGY4QnVmZmVyICE9IE5VTEwpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFVjczJO dW1iZXIgPSAoVUlOVDE2KSBVY3MyQ2hhcjsgIGlmIChVY3MyTnVtYmVyIDw9IDB4MDA3Rikgew0K PiA+ID4gPiArDQo+ID4gPiA+ICsgICAgLy8NCj4gPiA+ID4gKyAgICAvLyBVVEY4IGZvcm1hdDog MHh4eHh4eHgNCj4gPiA+ID4gKyAgICAvLw0KPiA+ID4gPiArICAgICpVdGY4QnVmZmVyID0gVWNz MkNoYXIgJiAweDdGOw0KPiA+ID4gPiArICAgIHJldHVybiAxOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgIH0gZWxzZSBpZiAoVWNzMk51bWJlciA+PSAweDAwODAgJiYgVWNzMk51bWJlciA8PSAweDA3 RkYpIHsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIC8vDQo+ID4gPiA+ICsgICAgLy8gVVRGOCBm b3JtYXQ6IDExMHh4eHh4IDEweHh4eHh4DQo+ID4gPiA+ICsgICAgLy8NCj4gPiA+ID4gKyAgICAq KFV0ZjhCdWZmZXIgKyAxKSA9IChVY3MyQ2hhciAmIDB4M0YpIHwgMHg4MDsNCj4gPiA+ID4gKyAg ICAqVXRmOEJ1ZmZlciAgICAgICA9ICgoVWNzMkNoYXIgPj4gNikgJiAweDFGKSB8IDB4QzA7DQo+ ID4gPiA+ICsgICAgcmV0dXJuIDI7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgfSBlbHNlIHsgIC8v LyBVY3MyTnVtYmVyID49IDB4MDgwMCAmJiBVY3MyTnVtYmVyIDw9IDB4RkZGRg0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgICAgLy8NCj4gPiA+ID4gKyAgICAvLyBVVEY4IGZvcm1hdDogMTExMHh4eHgg MTB4eHh4eHggMTB4eHh4eHgNCj4gPiA+ID4gKyAgICAvLw0KPiA+ID4gPiArICAgICooVXRmOEJ1 ZmZlciArIDIpID0gKFVjczJDaGFyICYgMHgzRikgfCAweDgwOw0KPiA+ID4gPiArICAgICooVXRm OEJ1ZmZlciArIDEpID0gKChVY3MyQ2hhciA+PiA2KSAmIDB4M0YpIHwgMHg4MDsNCj4gPiA+ID4g KyAgICAqVXRmOEJ1ZmZlciAgICAgICA9ICgoVWNzMkNoYXIgPj4gMTIpICYgMHgwRikgfCAweEUw Ow0KPiA+ID4gPiArICAgIHJldHVybiAzOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICt9DQo+ID4g PiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICBDb252ZXJ0IGEgVVRGOCBlbmNvZGVkIGRh dGEgdG8gYSBVQ1MyIGNoYXJhY3Rlci4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1baW5d ICAgIFV0ZjhCdWZmZXIgICAgICAgICAgICAgVGhlIHByb3ZpZGVkIFVURjggZW5jb2RlZCBkYXRh Lg0KPiA+ID4gPiArICBAcGFyYW1bb3V0XSAgIFVjczJDaGFyICAgICAgICAgICAgICAgVGhlIGNv bnZlcnRlZCBVQ1MyIGNoYXJhY3Rlci4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcmV0dmFsICAg ICAgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVGhlIFVURjggZW5jb2RlZCBzdHJpbmcgaXMgbm90 DQo+ID4gPiB2YWxpZA0KPiA+ID4gPiBvcg0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbm90IGZvciBVQ1MyIGNoYXJhY3Rlci4NCj4gPiA+ID4gKyAgQHJl dHZhbCAgICAgICBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBjb252ZXJ0ZWQgVUNTMiBjaGFy YWN0ZXIuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArRUZJX1NUQVRVUw0KPiA+ ID4gPiArVVRGOFRvVUNTMkNoYXIgKA0KPiA+ID4gPiArICBJTiAgIENIQVI4ICAgICAgKlV0ZjhC dWZmZXIsDQo+ID4gPiA+ICsgIE9VVCAgQ0hBUjE2ICAgICAqVWNzMkNoYXINCj4gPiA+ID4gKyAg KQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICBVSU5UOCAgICBVdGY4U2l6ZTsNCj4gPiA+ID4gKyAg Q0hBUjggICAgKlVjczJCdWZmZXI7DQo+ID4gPiA+ICsgIENIQVI4ICAgIFRlbXBDaGFyMTsNCj4g PiA+ID4gKyAgQ0hBUjggICAgVGVtcENoYXIyOw0KPiA+ID4gPiArICBDSEFSOCAgICBUZW1wQ2hh cjM7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQVNTRVJUIChVdGY4QnVmZmVyICE9IE5VTEwgJiYg VWNzMkNoYXIgIT0gTlVMTCk7ICBaZXJvTWVtDQo+ID4gPiA+ICsgKFVjczJDaGFyLCBzaXplb2Yg KENIQVIxNikpOyAgVWNzMkJ1ZmZlciA9IChDSEFSOCAqKSBVY3MyQ2hhcjsNCj4gPiA+ID4gKw0K PiA+ID4gPiArICBVdGY4U2l6ZSA9IEdldFVURjhTaXplRm9yVUNTMiAoVXRmOEJ1ZmZlcik7ICBz d2l0Y2ggKFV0ZjhTaXplKQ0KPiA+ID4gPiArIHsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIGNh c2UgMToNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgLy8NCj4gPiA+ID4gKyAgICAgIC8vIFVU RjggZm9ybWF0OiAweHh4eHh4eA0KPiA+ID4gPiArICAgICAgLy8NCj4gPiA+ID4gKyAgICAgIFRl bXBDaGFyMSA9ICpVdGY4QnVmZmVyOw0KPiA+ID4gPiArICAgICAgaWYgKChUZW1wQ2hhcjEgJiAw eDgwKSAhPSAweDAwKSB7DQo+ID4gPiA+ICsgICAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJB TUVURVI7DQo+ID4gPiA+ICsgICAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgICpVY3My QnVmZmVyICAgICAgID0gVGVtcENoYXIxOw0KPiA+ID4gPiArICAgICAgKihVY3MyQnVmZmVyICsg MSkgPSAwOw0KPiA+ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBj YXNlIDI6DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIC8vDQo+ID4gPiA+ICsgICAgICAvLyBV VEY4IGZvcm1hdDogMTEweHh4eHggMTB4eHh4eHgNCj4gPiA+ID4gKyAgICAgIC8vDQo+ID4gPiA+ ICsgICAgICBUZW1wQ2hhcjEgPSAqVXRmOEJ1ZmZlcjsNCj4gPiA+ID4gKyAgICAgIGlmICgoVGVt cENoYXIxICYgMHhFMCkgIT0gMHhDMCkgew0KPiA+ID4gPiArICAgICAgICByZXR1cm4gRUZJX0lO VkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gPiArICAgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsg ICAgICBUZW1wQ2hhcjIgPSAqKFV0ZjhCdWZmZXIgKyAxKTsNCj4gPiA+ID4gKyAgICAgIGlmICgo VGVtcENoYXIyICYgMHhDMCkgIT0gMHg4MCkgew0KPiA+ID4gPiArICAgICAgICByZXR1cm4gRUZJ X0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gPiArICAgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgICAgICAqVWNzMkJ1ZmZlciAgICAgICA9IChUZW1wQ2hhcjEgPDwgNikgKyAoVGVtcENoYXIy ICYgMHgzRik7DQo+ID4gPiA+ICsgICAgICAqKFVjczJCdWZmZXIgKyAxKSA9IChUZW1wQ2hhcjEg Pj4gMikgJiAweDA3Ow0KPiA+ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiA+ICsNCj4gPiA+ID4g KyAgICBjYXNlIDM6DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIC8vDQo+ID4gPiA+ICsgICAg ICAvLyBVVEY4IGZvcm1hdDogMTExMHh4eHggMTB4eHh4eHggMTB4eHh4eHgNCj4gPiA+ID4gKyAg ICAgIC8vDQo+ID4gPiA+ICsgICAgICBUZW1wQ2hhcjEgPSAqVXRmOEJ1ZmZlcjsNCj4gPiA+ID4g KyAgICAgIGlmICgoVGVtcENoYXIxICYgMHhGMCkgIT0gMHhFMCkgew0KPiA+ID4gPiArICAgICAg ICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gPiArICAgICAgfQ0KPiA+ID4g PiArDQo+ID4gPiA+ICsgICAgICBUZW1wQ2hhcjIgPSAqKFV0ZjhCdWZmZXIgKyAxKTsNCj4gPiA+ ID4gKyAgICAgIGlmICgoVGVtcENoYXIyICYgMHhDMCkgIT0gMHg4MCkgew0KPiA+ID4gPiArICAg ICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gPiArICAgICAgfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgICAgICBUZW1wQ2hhcjMgPSAqKFV0ZjhCdWZmZXIgKyAyKTsNCj4g PiA+ID4gKyAgICAgIGlmICgoVGVtcENoYXIzICYgMHhDMCkgIT0gMHg4MCkgew0KPiA+ID4gPiAr ICAgICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gPiArICAgICAgfQ0K PiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICAqVWNzMkJ1ZmZlciAgICAgICA9IChUZW1wQ2hhcjIg PDwgNikgKyAoVGVtcENoYXIzICYgMHgzRik7DQo+ID4gPiA+ICsgICAgICAqKFVjczJCdWZmZXIg KyAxKSA9IChUZW1wQ2hhcjEgPDwgNCkgKyAoKFRlbXBDaGFyMiA+PiAyKSAmDQo+ID4gPiA+ICsg MHgwRik7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIGJyZWFrOw0KPiA+ID4gPiArDQo+ID4g PiA+ICsgICAgZGVmYXVsdDoNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICByZXR1cm4gRUZJX1NV Q0NFU1M7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICBD b252ZXJ0IGEgVUNTMiBzdHJpbmcgdG8gYSBVVEY4IGVuY29kZWQgc3RyaW5nLg0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgIEBwYXJhbVtpbl0gICAgVWNzMlN0ciAgICAgICAgICAgICAgICBUaGUgcHJv dmlkZWQgVUNTMiBzdHJpbmcuDQo+ID4gPiA+ICsgIEBwYXJhbVtvdXRdICAgVXRmOFN0ckFkZHIg ICAgICAgICAgICBUaGUgY29udmVydGVkIFVURjggc3RyaW5nIGFkZHJlc3MuDQo+ID4gPiBDYWxs ZXINCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJl c3BvbnNpYmxlIGZvciBGcmVlIHRoaXMgc3RyaW5nLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBy ZXR2YWwgICAgICAgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBPbmUgb3IgbW9yZSBwYXJhbWV0ZXJz IGFyZQ0KPiA+ID4gPiBpbnZhbGlkLg0KPiA+ID4gPiArICBAcmV0dmFsICAgICAgIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTICAgU3lzdGVtIHJ1bnMgb3V0IG9mIHJlc291cmNlcy4NCj4gPiA+ID4gKyAg QHJldHZhbCAgICAgICBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBVVEY4IGVuY29kZWQgc3Ry aW5nIGhhcyBiZWVuDQo+ID4gPiA+IGNvbnZlcnRlZC4NCj4gPiA+ID4gKw0KPiA+ID4gPiArKiov DQo+ID4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiA+ICtVQ1MyU3RyVG9VVEY4ICgNCj4gPiA+ID4g KyAgSU4gIENIQVIxNiAgICAgKlVjczJTdHIsDQo+ID4gPiA+ICsgIE9VVCBDSEFSOCAgICAgICoq VXRmOFN0ckFkZHINCj4gPiA+ID4gKyAgKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICBVSU5UTiAg ICBVY3MyU3RySW5kZXg7DQo+ID4gPiA+ICsgIFVJTlROICAgIFVjczJTdHJMZW5ndGg7DQo+ID4g PiA+ICsgIENIQVI4ICAgICpVdGY4U3RyOw0KPiA+ID4gPiArICBVSU5UTiAgICBVdGY4U3RyTGVu Z3RoOw0KPiA+ID4gPiArICBVSU5UTiAgICBVdGY4U3RySW5kZXg7DQo+ID4gPiA+ICsgIENIQVI4 ICAgIFV0ZjhCdWZmZXJbVVRGOF9CVUZGRVJfRk9SX1VDUzJfTUFYX1NJWkVdOw0KPiA+ID4gPiAr ICBVSU5UOCAgICBVdGY4QnVmZmVyU2l6ZTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAoVWNz MlN0ciA9PSBOVUxMIHx8IFV0ZjhTdHJBZGRyID09IE5VTEwpIHsNCj4gPiA+ID4gKyAgICByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFVjczJT dHJMZW5ndGggPSBTdHJMZW4gKFVjczJTdHIpOyAgVXRmOFN0ckxlbmd0aCA9IDA7DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyAgZm9yIChVY3MyU3RySW5kZXggPSAwOyBVY3MyU3RySW5kZXggPCBVY3My U3RyTGVuZ3RoOw0KPiA+ID4gPiArIFVjczJTdHJJbmRleA0KPiA+ID4gPiArICsrKSB7DQo+ID4g PiA+ICsNCj4gPiA+ID4gKyAgICBaZXJvTWVtIChVdGY4QnVmZmVyLCBzaXplb2YgKFV0ZjhCdWZm ZXIpKTsNCj4gPiA+ID4gKyAgICBVdGY4QnVmZmVyU2l6ZSA9IFVDUzJDaGFyVG9VVEY4IChVY3My U3RyW1VjczJTdHJJbmRleF0sDQo+ID4gVXRmOEJ1ZmZlcik7DQo+ID4gPiA+ICsgICAgVXRmOFN0 ckxlbmd0aCArPSBVdGY4QnVmZmVyU2l6ZTsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBVdGY4 U3RyID0gQWxsb2NhdGVaZXJvUG9vbCAoVXRmOFN0ckxlbmd0aCArIDEpOyAgaWYgKFV0ZjhTdHIg PT0NCj4gPiA+ID4gKyBOVUxMKSB7DQo+ID4gPiA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVT T1VSQ0VTOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgVXRmOFN0ckluZGV4 ID0gMDsNCj4gPiA+ID4gKyAgZm9yIChVY3MyU3RySW5kZXggPSAwOyBVY3MyU3RySW5kZXggPCBV Y3MyU3RyTGVuZ3RoOw0KPiA+ID4gPiArIFVjczJTdHJJbmRleA0KPiA+ID4gPiArICsrKSB7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBaZXJvTWVtIChVdGY4QnVmZmVyLCBzaXplb2YgKFV0ZjhC dWZmZXIpKTsNCj4gPiA+ID4gKyAgICBVdGY4QnVmZmVyU2l6ZSA9IFVDUzJDaGFyVG9VVEY4IChV Y3MyU3RyW1VjczJTdHJJbmRleF0sDQo+ID4gPiA+ICsgVXRmOEJ1ZmZlcik7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgICBDb3B5TWVtIChVdGY4U3RyICsgVXRmOFN0ckluZGV4LCBVdGY4QnVmZmVy LCBVdGY4QnVmZmVyU2l6ZSk7DQo+ID4gPiA+ICsgICAgVXRmOFN0ckluZGV4ICs9IFV0ZjhCdWZm ZXJTaXplOyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIFV0ZjhTdHJbVXRmOFN0ckluZGV4XSA9 ICdcMCc7DQo+ID4gPiA+ICsgICpVdGY4U3RyQWRkciA9IFV0ZjhTdHI7DQo+ID4gPiA+ICsNCj4g PiA+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4g PiA+ICsvKioNCj4gPiA+ID4gKyAgQ29udmVydCBhIFVURjggZW5jb2RlZCBzdHJpbmcgdG8gYSBV Q1MyIHN0cmluZy4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1baW5dICAgIFV0ZjhTdHIg ICAgICAgICAgICAgICAgVGhlIHByb3ZpZGVkIFVURjggZW5jb2RlZCBzdHJpbmcuDQo+ID4gPiA+ ICsgIEBwYXJhbVtvdXRdICAgVWNzMlN0ckFkZHIgICAgICAgICAgICBUaGUgY29udmVydGVkIFVD UzIgc3RyaW5nIGFkZHJlc3MuDQo+ID4gPiA+IENhbGxlcg0KPiA+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcmVzcG9uc2libGUgZm9yIEZyZWUgdGhpcyBz dHJpbmcuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgICBFRklfSU5WQUxJRF9Q QVJBTUVURVIgIFRoZSBVVEY4IGVuY29kZWQgc3RyaW5nIGlzIG5vdA0KPiA+ID4gdmFsaWQNCj4g PiA+ID4gdG8NCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnZlcnQgdG8gVUNTMiBzdHJpbmcuDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPbmUgb3IgbW9yZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLg0KPiA+ ID4gPiArICBAcmV0dmFsICAgICAgIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgU3lzdGVtIHJ1bnMg b3V0IG9mIHJlc291cmNlcy4NCj4gPiA+ID4gKyAgQHJldHZhbCAgICAgICBFRklfU1VDQ0VTUyAg ICAgICAgICAgIFRoZSBVQ1MyIHN0cmluZyBoYXMgYmVlbiBjb252ZXJ0ZWQuDQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gPiArVVRGOFN0clRvVUNT MiAoDQo+ID4gPiA+ICsgIElOICBDSEFSOCAgICAgICpVdGY4U3RyLA0KPiA+ID4gPiArICBPVVQg Q0hBUjE2ICAgICAqKlVjczJTdHJBZGRyDQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ ID4gKyAgRUZJX1NUQVRVUyAgICBTdGF0dXM7DQo+ID4gPiA+ICsgIFVJTlROICAgICAgICAgVXRm OFN0ckluZGV4Ow0KPiA+ID4gPiArICBVSU5UTiAgICAgICAgIFV0ZjhTdHJMZW5ndGg7DQo+ID4g PiA+ICsgIFVJTlROICAgICAgICAgVWNzMlN0ckluZGV4Ow0KPiA+ID4gPiArICBVSU5UOCAgICAg ICAgIFV0ZjhCdWZmZXJTaXplOw0KPiA+ID4gPiArICBDSEFSMTYgICAgICAgICpVY3MyU3RyVGVt cDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiAoVXRmOFN0ciA9PSBOVUxMIHx8IFVjczJTdHJB ZGRyID09IE5VTEwpIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS OyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIC8vIEl0IGlzIG5vdCBh biBBc2NpaSBzdHJpbmcsIGNhbGN1bGF0ZSBzdHJpbmcgbGVuZ3RoLg0KPiA+ID4gPiArICAvLw0K PiA+ID4gPiArICBVdGY4U3RyTGVuZ3RoID0gMDsNCj4gPiA+ID4gKyAgd2hpbGUgKCooVXRmOFN0 ciArIFV0ZjhTdHJMZW5ndGgpICE9ICdcMCcpIHsNCj4gPiA+ID4gKyAgICBVdGY4U3RyTGVuZ3Ro ICsrOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAg Ly8gVUNTMiBzdHJpbmcgc2hhbGwgbm90IGJlIGxvbmdlciB0aGFuIHRoZSBVVEY4IHN0cmluZy4N Cj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgVWNzMlN0clRlbXAgPSBBbGxvY2F0ZVplcm9Qb29s ICgoVXRmOFN0ckxlbmd0aCArIDEpICogc2l6ZW9mDQo+ID4gPiA+ICsgKENIQVIxNikpOyAgaWYg KFVjczJTdHJUZW1wID09IE5VTEwpIHsNCj4gPiA+ID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9S RVNPVVJDRVM7DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBVdGY4U3RySW5k ZXggPSAwOw0KPiA+ID4gPiArICBVY3MyU3RySW5kZXggPSAwOw0KPiA+ID4gPiArICB3aGlsZSAo VXRmOFN0cltVdGY4U3RySW5kZXhdICE9ICdcMCcpIHsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAg IGlmIChDb21wYXJlTWVtIChVdGY4U3RyICsgVXRmOFN0ckluZGV4LCAiXFx1IiwgMikgPT0gMCAm Jg0KPiA+ID4gPiArICAgICAgVXRmOFN0ckxlbmd0aCAtIFV0ZjhTdHJJbmRleCA+PSBVTklDT0RF X0ZPUk1BVF9MRU4pIHsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgU3RhdHVzID0gR2V0VUNT MkNoYXJCeUZvcm1hdCAoVXRmOFN0ciArIFV0ZjhTdHJJbmRleCwNCj4gPiA+ID4gKyBVY3MyU3Ry VGVtcCArDQo+ID4gPiA+IFVjczJTdHJJbmRleCk7DQo+ID4gPiA+ICsgICAgICBpZiAoIUVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICAgIFV0ZjhTdHJJbmRl eCArPSBVTklDT0RFX0ZPUk1BVF9MRU47DQo+ID4gPiA+ICsgICAgICAgIFVjczJTdHJJbmRleCAr KzsNCj4gPiA+ID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgICAg U3RyQ3B5UyAoVWNzMlN0clRlbXAgKyBVY3MyU3RySW5kZXgsIDMsIEwiXFx1Iik7DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyAgICAgICAgVWNzMlN0ckluZGV4ICs9IDI7DQo+ID4gPiA+ICsgICAgICAg IFV0ZjhTdHJJbmRleCArPSAyOw0KPiA+ID4gPiArICAgICAgfQ0KPiA+ID4gPiArICAgIH0gZWxz ZSB7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgIFV0ZjhCdWZmZXJTaXplID0gR2V0VVRGOFNp emVGb3JVQ1MyIChVdGY4U3RyICsgVXRmOFN0ckluZGV4KTsNCj4gPiA+ID4gKyAgICAgIGlmIChV dGY4QnVmZmVyU2l6ZSA9PSAwIHx8IFV0ZjhTdHJMZW5ndGggLSBVdGY4U3RySW5kZXggPA0KPiA+ ID4gPiArIFV0ZjhCdWZmZXJTaXplKSB7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgICAgRnJl ZVBvb2wgKFVjczJTdHJUZW1wKTsNCj4gPiA+ID4gKyAgICAgICAgcmV0dXJuIEVGSV9JTlZBTElE X1BBUkFNRVRFUjsNCj4gPiA+ID4gKyAgICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAg U3RhdHVzID0gVVRGOFRvVUNTMkNoYXIgKFV0ZjhTdHIgKyBVdGY4U3RySW5kZXgsDQo+ID4gPiA+ ICsgVWNzMlN0clRlbXANCj4gPiA+ID4gKyArDQo+ID4gPiA+IFVjczJTdHJJbmRleCk7DQo+ID4g PiA+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiA+ICsNCj4gPiA+ID4g KyAgICAgICAgRnJlZVBvb2wgKFVjczJTdHJUZW1wKTsNCj4gPiA+ID4gKyAgICAgICAgcmV0dXJu IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ID4gKyAgICAgIH0NCj4gPiA+ID4gKw0KPiA+ ID4gPiArICAgICAgVWNzMlN0ckluZGV4ICsrOw0KPiA+ID4gPiArICAgICAgVXRmOFN0ckluZGV4 ICs9IFV0ZjhCdWZmZXJTaXplOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKyAgfQ0KPiA+ID4g PiArDQo+ID4gPiA+ICsgICpVY3MyU3RyQWRkciA9IEFsbG9jYXRlWmVyb1Bvb2wgKChVY3MyU3Ry SW5kZXggKyAxKSAqIHNpemVvZg0KPiA+ID4gPiArIChDSEFSMTYpKTsgIGlmICgqVWNzMlN0ckFk ZHIgPT0gTlVMTCkgew0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgRnJlZVBvb2wgKFVjczJTdHJU ZW1wKTsNCj4gPiA+ID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gPiA+ ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBTdHJDcHlTICgqVWNzMlN0ckFkZHIsIFVjczJT dHJJbmRleCArIDEsIFVjczJTdHJUZW1wKTsNCj4gPiA+ID4gKyAqKCpVY3MyU3RyQWRkciArIFVj czJTdHJJbmRleCkgPSBMJ1wwJzsgIEZyZWVQb29sIChVY3MyU3RyVGVtcCk7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ ID4gPiA+IGRpZmYgLS1naXQNCj4gPiA+ID4gYS9SZWRmaXNoUGtnL0xpYnJhcnkvQmFzZVVjczJV dGY4TGliL0Jhc2VVY3MyVXRmOExpYi5pbmYNCj4gPiA+ID4gYi9SZWRmaXNoUGtnL0xpYnJhcnkv QmFzZVVjczJVdGY4TGliL0Jhc2VVY3MyVXRmOExpYi5pbmYNCj4gPiA+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gPiA+ID4gaW5kZXggMDAwMDAwMDAwMC4uY2NkMDJlZTMyMA0KPiA+ID4gPiAt LS0gL2Rldi9udWxsDQo+ID4gPiA+ICsrKyBiL1JlZGZpc2hQa2cvTGlicmFyeS9CYXNlVWNzMlV0 ZjhMaWIvQmFzZVVjczJVdGY4TGliLmluZg0KPiA+ID4gPiBAQCAtMCwwICsxLDMxIEBADQo+ID4g PiA+ICsjIyBAZmlsZQ0KPiA+ID4gPiArIyBVQ1MyIHRvIFVURjggbWFuaXB1bGF0aW9uIGxpYnJh cnkuDQo+ID4gPiA+ICsjDQo+ID4gPiA+ICsjIENvcHlyaWdodCAoYykgMjAxOSwgSW50ZWwgQ29y cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ID4gPiArIw0KPiA+ID4gPiAr KEMpIENvcHlyaWdodCAyMDIwIEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50 IExQPEJSPiAjDQo+ID4gPiA+ICsjICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQo+ID4gPiA+ICsjDQo+ID4gPiA+ICsjIw0KPiA+ID4gPiArDQo+ID4gPiA+ ICtbRGVmaW5lc10NCj4gPiA+ID4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0g MHgwMDAxMDAxYg0KPiA+ID4gPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBC YXNlVWNzMlV0ZjhMaWINCj4gPiA+ID4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAg ID0gNTM2NjQ2QzMtNDZEMC00QjEyLUFCQzQtQ0RFMUEzM0I1MjU2DQo+ID4gPiA+ICsgIE1PRFVM RV9UWVBFICAgICAgICAgICAgICAgICAgICA9IEJBU0UNCj4gPiA+ID4gKyAgVkVSU0lPTl9TVFJJ TkcgICAgICAgICAgICAgICAgID0gMS4wDQo+ID4gPiA+ICsgIExJQlJBUllfQ0xBU1MgICAgICAg ICAgICAgICAgICA9IFVjczJVdGY4TGliDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyMNCj4gPiA+ID4g KyMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gSUEzMiBYNjQgQVJNIEFBUkNINjQg UklTQ1Y2NA0KPiA+ID4gPiArIw0KPiA+ID4gPiArDQo+ID4gPiA+ICtbU291cmNlcy5jb21tb25d DQo+ID4gPiA+ICsgIEJhc2VVY3MyVXRmOExpYi5jDQo+ID4gPiA+ICsNCj4gPiA+ID4gK1tQYWNr YWdlc10NCj4gPiA+ID4gKyAgTWRlUGtnL01kZVBrZy5kZWMNCj4gPiA+ID4gKyAgTWRlTW9kdWxl UGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gPiA+ID4gKyAgUmVkZmlzaFBrZy9SZWRmaXNoUGtnLmRl Yw0KPiA+ID4gPiArDQo+ID4gPiA+ICsNCj4gPiA+ID4gZGlmZiAtLWdpdCBhL1JlZGZpc2hQa2cv UmVkZmlzaExpYnMuZHNjLmluYw0KPiA+ID4gPiBiL1JlZGZpc2hQa2cvUmVkZmlzaExpYnMuZHNj LmluYyBpbmRleCBlNzgwYjVjMjcwLi5kNGMwOGUxOGFjDQo+ID4gPiA+IDEwMDY0NA0KPiA+ID4g PiAtLS0gYS9SZWRmaXNoUGtnL1JlZGZpc2hMaWJzLmRzYy5pbmMNCj4gPiA+ID4gKysrIGIvUmVk ZmlzaFBrZy9SZWRmaXNoTGlicy5kc2MuaW5jDQo+ID4gPiA+IEBAIC0xMSw1ICsxMSw2IEBADQo+ ID4gPiA+ICAjDQo+ID4gPiA+ICAjIw0KPiA+ID4gPiAgIWlmICQoUkVERklTSF9FTkFCTEUpID09 IFRSVUUNCj4gPiA+ID4gKw0KPiA+ID4gPiArIFVjczJVdGY4TGlifFJlZGZpc2hQa2cvTGlicmFy eS9CYXNlVWNzMlV0ZjhMaWIvQmFzZVVjczJVdGY4TGliLmkNCj4gPiA+ID4gKyBVY3MyVXRmOExp YnxuZg0KPiA+ID4gPiAgIWVuZGlmDQo+ID4gPiA+DQo+ID4gPiA+IGRpZmYgLS1naXQgYS9SZWRm aXNoUGtnL1JlZGZpc2hQa2cuZGVjIGIvUmVkZmlzaFBrZy9SZWRmaXNoUGtnLmRlYw0KPiA+ID4g PiBpbmRleCBiMzhlOWI0Nzg5Li5hZWNjMWY0YTNhIDEwMDY0NA0KPiA+ID4gPiAtLS0gYS9SZWRm aXNoUGtnL1JlZGZpc2hQa2cuZGVjDQo+ID4gPiA+ICsrKyBiL1JlZGZpc2hQa2cvUmVkZmlzaFBr Zy5kZWMNCj4gPiA+ID4gQEAgLTIwLDYgKzIwLDEwIEBADQo+ID4gPiA+ICAgICMjICBAbGlicmFy eWNsYXNzIFBsYXRmb3JtIFJlZGZpc2ggSG9zdCBJbnRlcmZhY2UgTGlicmFyeQ0KPiA+ID4gPiAg ICAjICAgUGxhdGZvcm0gaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgUmVkZmlzaCBIb3N0IEludGVy ZmFjZS4NCj4gPiA+ID4NCj4gPiA+ID4gUmVkZmlzaFBsYXRmb3JtSG9zdEludGVyZmFjZUxpYnxJ bmNsdWRlL0xpYnJhcnkvUmVkZmlzaEhvc3RJbnRlcmZhDQo+ID4gPiA+IFJlZGZpc2hQbGF0Zm9y bUhvc3RJbnRlcmZhY2VMaWJ8Y2UNCj4gPiA+ID4gUmVkZmlzaFBsYXRmb3JtSG9zdEludGVyZmFj ZUxpYnxMaQ0KPiA+ID4gPiBSZWRmaXNoUGxhdGZvcm1Ib3N0SW50ZXJmYWNlTGlifGIuaA0KPiA+ ID4gPiArICAjIyAgQGxpYnJhcnljbGFzcyAgVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIFVDUzIgdG8g VVRGOCBtYW5pcHVsYXRpb24NCj4gPiA+ID4gKyAgIyAgIGZ1bmN0aW9ucy4NCj4gPiA+ID4gKyAg Iw0KPiA+ID4gPiArICBVY3MyVXRmOExpYnxJbmNsdWRlL0xpYnJhcnkvQmFzZVVjczJVdGY4TGli LmgNCj4gPiA+ID4NCj4gPiA+ID4gIFtQcm90b2NvbHNdDQo+ID4gPiA+ICAgICMjIEluY2x1ZGUv UHJvdG9jb2wvUmVkZmlzaERpc2NvdmVyLmgNCj4gPiA+ID4gZGlmZiAtLWdpdCBhL1JlZGZpc2hQ a2cvUmVkZmlzaFBrZy5kc2MgYi9SZWRmaXNoUGtnL1JlZGZpc2hQa2cuZHNjDQo+ID4gPiA+IGlu ZGV4DQo+ID4gPiA+IDk0ZTcxMjdiYzYuLmQxOThhOTRiNzMgMTAwNjQ0DQo+ID4gPiA+IC0tLSBh L1JlZGZpc2hQa2cvUmVkZmlzaFBrZy5kc2MNCj4gPiA+ID4gKysrIGIvUmVkZmlzaFBrZy9SZWRm aXNoUGtnLmRzYw0KPiA+ID4gPiBAQCAtNDMsNSArNDMsNiBAQA0KPiA+ID4gPg0KPiA+ID4gPiAg W0NvbXBvbmVudHNdDQo+ID4gPiA+DQo+ID4gPiA+IFJlZGZpc2hQa2cvTGlicmFyeS9QbGF0Zm9y bUhvc3RJbnRlcmZhY2VMaWJOdWxsL1BsYXRmb3JtSG9zdEludGVyZg0KPiA+ID4gPiBhYw0KPiA+ ID4gPiBlTA0KPiA+ID4gPiBpYk4NCj4gPiA+ID4gdWxsLmluZg0KPiA+ID4gPiArICBSZWRmaXNo UGtnL0xpYnJhcnkvQmFzZVVjczJVdGY4TGliL0Jhc2VVY3MyVXRmOExpYi5pbmYNCj4gPiA+ID4N Cj4gPiA+ID4gICAgIWluY2x1ZGUgUmVkZmlzaFBrZy9SZWRmaXNoLmRzYy5pbmMNCj4gPiA+ID4g LS0NCj4gPiA+ID4gMi4xNy4xDQo+ID4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+DQo+ ID4gPiA+DQo+ID4gPg0KPiA+ID4gSU1QT1JUQU5UIE5PVElDRTogVGhlIGNvbnRlbnRzIG9mIHRo aXMgZW1haWwgYW5kIGFueSBhdHRhY2htZW50cyBhcmUNCj4gPiA+IGNvbmZpZGVudGlhbCBhbmQg bWF5IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkDQo+ID4g PiByZWNpcGllbnQsIHBsZWFzZSBub3RpZnkgdGhlIHNlbmRlciBpbW1lZGlhdGVseSBhbmQgZG8g bm90IGRpc2Nsb3NlDQo+ID4gPiB0aGUgY29udGVudHMgdG8gYW55IG90aGVyIHBlcnNvbiwgdXNl IGl0IGZvciBhbnkgcHVycG9zZSwgb3Igc3RvcmUNCj4gPiA+IG9yIGNvcHkgdGhlIGluZm9ybWF0 aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCj4gSU1QT1JUQU5UIE5PVElDRTogVGhlIGNv bnRlbnRzIG9mIHRoaXMgZW1haWwgYW5kIGFueSBhdHRhY2htZW50cyBhcmUNCj4gY29uZmlkZW50 aWFsIGFuZCBtYXkgYWxzbyBiZSBwcml2aWxlZ2VkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5k ZWQgcmVjaXBpZW50LA0KPiBwbGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYW5k IGRvIG5vdCBkaXNjbG9zZSB0aGUgY29udGVudHMgdG8gYW55DQo+IG90aGVyIHBlcnNvbiwgdXNl IGl0IGZvciBhbnkgcHVycG9zZSwgb3Igc3RvcmUgb3IgY29weSB0aGUgaW5mb3JtYXRpb24gaW4g YW55DQo+IG1lZGl1bS4gVGhhbmsgeW91Lg0KPiANCj4gDQo+IA0KPiANCg0K