From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id 133C36ECDB; Wed, 16 Mar 2022 21:58:15 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 133C36ECDB DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1647457095; bh=J/UF+R+NeszCvkfhLZdNsogSQ1FFRX+/RTNUwbqXIio=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=Hpr/e9MPShSjbgGn0P7M1N/GzSHywwbE2As0E/yAleGymG1y4cVEjg4BuBNLareDU 8JXORfSTiEtuZRZRvJHfArOTC9QrTjU1DuAycMRGQMI6rqIlh2/6wwhwYDi99hdPU4 XY9+xpFPUYB5UtAPKbHNDm1ofW5+W8Y1lgI8ziII= Received: from f431.i.mail.ru (f431.i.mail.ru [45.84.128.218]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 3C1876ECDB for ; Wed, 16 Mar 2022 21:58:11 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 3C1876ECDB Received: by f431.i.mail.ru with local (envelope-from ) id 1nUYqX-0004pg-Dj; Wed, 16 Mar 2022 21:58:09 +0300 Received: by e.mail.ru with HTTP; Wed, 16 Mar 2022 21:58:09 +0300 To: =?UTF-8?B?TWF4aW0gS29rcnlhc2hraW4=?= MIME-Version: 1.0 X-Mailer: Mail.Ru Mailer 1.0 X-SenderField-ReMsg: 16474570460315102492 X-SenderField-Remind: 0 Date: Wed, 16 Mar 2022 21:58:09 +0300 X-Priority: 3 (Normal) Message-ID: <1647457089.1209166@f431.i.mail.ru> Content-Type: multipart/alternative; boundary="--ALT--1a7543ECc7E7671c0607a71D2653a0811647457089" In-Reply-To: <20220316185719.1017050-1-m.kokryashkin@tarantool.org> References: <20220316185719.1017050-1-m.kokryashkin@tarantool.org> X-4EC0790: 10 X-7564579A: 646B95376F6C166E X-77F55803: 119C1F4DF6A9251CAF9F8853D868A259ACB0202B7F99EA2E8335D3CA13DF10948FD872164937FA4C793DF807223B3D4EB2D4AE2D04E3552A65ECFE1A11F992831A2E9B75711A646A X-7FA49CB5: 70AAF3C13DB7016878DA827A17800CE7E9B2E3943695B0DED82A6BABE6F325AC08BE7437D75B48FABCF491FFA38154B613377AFFFEAFD269176DF2183F8FC7C09B25D085E9A31DCFC2099A533E45F2D0395957E7521B51C2CFCAF695D4D8E9FCEA1F7E6F0F101C6778DA827A17800CE7CFDA40FA2326E319EA1F7E6F0F101C6723150C8DA25C47586E58E00D9D99D84E1BDDB23E98D2D38BEBC5CAB6D411FFA61FFC5F920D2828DEB0B1334B61A69B46CC7F00164DA146DAFE8445B8C89999728AA50765F7900637F6B57BC7E64490618DEB871D839B7333395957E7521B51C2DFABB839C843B9C08941B15DA834481F8AA50765F7900637F6B57BC7E6449061A352F6E88A58FB86F5D81C698A659EA7E827F84554CEF5019E625A9149C048EE9ECD01F8117BC8BEE2021AF6380DFAD18AA50765F790063735872C767BF85DA227C277FBC8AE2E8B953A8A48A05D51F175ECD9A6C639B01B4E70A05D1297E1BBCB5012B2E24CD356 X-8FC586DF: 7088FE8F28191859 X-C1DE0DAB: 0D63561A33F958A5614D2B7D76314B6921F7B55F5A245B21CFEC38BEE5D3C633BDC6A1CF3F042BAD6DF99611D93F60EFD6FBC3EC642A93BB699F904B3F4130E343918A1A30D5E7FCCB5012B2E24CD356 X-C8649E89: 4E36BF7865823D7055A7F0CF078B5EC49A30900B95165D3482189E76C6218D8FD95FA711FFBEA4E223A8B9D560C1DD16DC091D5F987A5C8C640EFF8EECD0743D1D7E09C32AA3244C75A183981665EA98E342DF33C0E656A21E098CBE561D6343927AC6DF5659F194 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5+wYjsrrSY/u8Y3PrTqANeitKFiSd6Yd7yPpbiiZ/d5BsxIjK0jGQgCHUM3Ry2Lt2G3MDkMauH3h0dBdQGj+BB/iPzQYh7XS329fgu+/vnDhsEJvFovPzhPbimjVjXfQPw== X-Mailru-MI: 10000000000400800 X-Mailru-Sender: BDE7BFA655185B4BB04984737AA89EAFD8D9E5ED3FA9797AAE532198489FEB62EA24B0E89AA2597090F690EABC921FE2A1CD56D58F9B21F5D51284F0FE6F529ABC7555A253F5B200024ACE5D9AEE25D4E7B7573491FBF26DB0DAF586E7D11B3E67EA787935ED9F1B X-Mras: Ok X-Spam: undefined Subject: Re: [Tarantool-patches] =?utf-8?q?=5BPATCH_luajit_v2_6/7=5D_sysprof?= =?utf-8?q?=3A_introduce_Lua_API?= X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Maxim Kokryashkin via Tarantool-patches Reply-To: =?UTF-8?B?TWF4aW0gS29rcnlhc2hraW4=?= Cc: tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" ----ALT--1a7543ECc7E7671c0607a71D2653a0811647457089 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 Ck5ldyBicmFuY2g6wqAgaHR0cHM6Ly9naXRodWIuY29tL3RhcmFudG9vbC9sdWFqaXQvdHJlZS9m Y2t4b3JnL2doLTc4MS1wbGF0Zm9ybS1hbmQtbHVhLXByb2ZpbGVyLWZ1bGwtY2kKwqAgCj7QodGA 0LXQtNCwLCAxNiDQvNCw0YDRgtCwIDIwMjIsIDIxOjU3ICswMzowMCDQvtGCIE1heGltIEtva3J5 YXNoa2luIDxtYXgua29rcnlhc2hraW5AZ21haWwuY29tPjoKPsKgCj5UaGlzIGNvbW1pdCBpbnRy b2R1Y2VzIEx1YSBBUEkgZm9yIHN5c3Byb2YsIHNvIGl0IGlzIG5vdyBwb3NzaWJsZSB0bwo+Y2Fs bCBpdCBmcm9tIGFueXdoZXJlIGluIGEgTHVhIHNjcmlwdC4gQWxsIG9mIHRoZSBwYXJhbWV0ZXJz IGFyZSBwYXNzZWQKPmluc2lkZSBhIHNpbmdsZSBMdWEgdGFibGUuCj5UaGUgZm9sbG93aW5nIG9w dGlvbnMgYXJlIHN1cHBvcnRlZDoKPi0gbW9kZTogIkQiIChEZWZhdWx0IG1vZGUsIG9ubHkgdmly dHVhbCBtYWNoaW5lIHN0YXRlIGNvdW50ZXJzKQo+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkwi IChMZWFmIG1vZGUsIHNob3dzIHRoZSBsYXN0IGZyYW1lIG9uIHRoZSBzdGFjaykKPsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCJDIiAoQ2FsbGNoYWluIG1vZGUsIGZ1bGwgc3RhY2sgZHVtcCkKPi0g aW50ZXJ2YWw6IHRpbWUgYmV0d2VlbiBzYW1wbGVzIGluIG1pbGxpc2Vjb25kcwo+LSBwYXRoOiBQ YXRoIHRvIGZpbGUgaW4gd2hpY2ggcHJvZmlsaW5nIGRhdGEgc2hvdWxkIGJlIHN0b3JlZAo+Cj5Q YXJ0IG9mIHRhcmFudG9vbC90YXJhbnRvb2wjNzgxCj4tLS0KPj4+ICsjZGVmaW5lIFNZU1BST0Zf REVGQVVMVF9JTlRFUlZBTCAoMTEpCj4+V2h5IDExIGFuZCBub3QgMTAsIDkgb3Igc29tZXRoaW5n IGVsc2U/Cj5ObyByZWFzb24gZm9yIHRoYXQuIENoYW5nZWQgaXQgdG8gMTAsIHNvIGl0IGxlc3Mg cXVlc3Rpb25hYmxlIG5vdy4KPgo+Pj4gK2ludCBzeXNwcm9mX2Vycm9yKGx1YV9TdGF0ZSAqTCwg aW50IHN0YXR1cykKPj4+ICt7Cj4+PiArIHN3aXRjaCAoc3RhdHVzKSB7Cj4+PiArIGNhc2UgU1lT UFJPRl9FUlJVU0U6Cj4+PiArIGx1YV9wdXNobmlsKEwpOwo+Pj4gKyBsdWFfcHVzaHN0cmluZyhM LCBlcnIybXNnKExKX0VSUl9QUk9GX01JU1VTRSkpOwo+Pj4gKyBsdWFfcHVzaGludGVnZXIoTCwg RUlOVkFMKTsKPj4+ICsgcmV0dXJuIDM7Cj4+PiArIGNhc2UgU1lTUFJPRl9FUlJSVU46Cj4+Cj4+ TEpfRVJSX1BST0ZfSVNSVU5OSU5HIGFuZCBMSl9FUlJfUFJPRl9OT1RSVU5OSU5HIGlzIGRlZmlu ZWQgb25seSwgd2hlbgo+PkxKX0hBU01FTVBST0YgfHwgTEpfSEFTU1lTUFJPRiwgc28gaXQgbXVz dCBiZSB0aGUgY29ycmVzcG9uZGluZyBpZmRlZgo+PmhlcmUuCj5XaGF0IHZhbHVlIHNob3VsZCBi ZSByZXR1cm5lZCBpZiB3ZSBkb24ndCBoYXZlIG5laXRoZXIgc3lzcHJvZgo+bm9yIG1lbXByb2Y/ Cj4KPsKgc3JjL2xpYl9taXNjLmMgfCAyMzggKysrKysrKysrKysrKysrKystCj7CoC4uLi9taXNj bGliLXN5c3Byb2YtbGFwaS50ZXN0Lmx1YSB8IDExOCArKysrKysrKysKPsKgMiBmaWxlcyBjaGFu Z2VkLCAzNDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKPsKgY3JlYXRlIG1vZGUgMTAw NjQ0IHRlc3QvdGFyYW50b29sLXRlc3RzL21pc2NsaWItc3lzcHJvZi1sYXBpLnRlc3QubHVhCj4K PmRpZmYgLS1naXQgYS9zcmMvbGliX21pc2MuYyBiL3NyYy9saWJfbWlzYy5jCj5pbmRleCAyMmQy OWQ3OC4uZTkzY2Y1NWIgMTAwNjQ0Cj4tLS0gYS9zcmMvbGliX21pc2MuYwo+KysrIGIvc3JjL2xp Yl9taXNjLmMKPkBAIC0xMDksMTQgKzEwOSwxNCBAQCBzdGF0aWMgc2l6ZV90IGJ1ZmZlcl93cml0 ZXJfZGVmYXVsdChjb25zdCB2b2lkICoqYnVmX2FkZHIsIHNpemVfdCBsZW4sCj7CoMKgwqBsdWFf YXNzZXJ0KGxlbiA8PSBTVFJFQU1fQlVGRkVSX1NJWkUpOwo+wqAKPsKgwqDCoGZvciAoOzspIHsK Pi0gY29uc3Qgc2l6ZV90IHdyaXR0ZW4gPSB3cml0ZShmZCwgZGF0YSwgbGVuIC0gd3JpdGVfdG90 YWwpOwo+KyBjb25zdCBzc2l6ZV90IHdyaXR0ZW4gPSB3cml0ZShmZCwgZGF0YSwgbGVuIC0gd3Jp dGVfdG90YWwpOwo+wqAKPsKgwqDCoMKgwqBpZiAoTEpfVU5MSUtFTFkod3JpdHRlbiA9PSAtMSkp IHsKPsKgwqDCoMKgwqDCoMKgLyogUmUtdHJpZXMgd3JpdGUgaW4gY2FzZSBvZiBFSU5UUi4gKi8K PsKgwqDCoMKgwqDCoMKgaWYgKGVycm5vICE9IEVJTlRSKSB7Cj4tIC8qIFdpbGwgYmUgZnJlZWQg YXMgd2hvbGUgY2h1bmsgbGF0ZXIuICovCj4tICpidWZfYWRkciA9IE5VTEw7Cj4tIHJldHVybiB3 cml0ZV90b3RhbDsKPisgLyogV2lsbCBiZSBmcmVlZCBhcyB3aG9sZSBjaHVuayBsYXRlci4gKi8K PisgKmJ1Zl9hZGRyID0gTlVMTDsKPisgcmV0dXJuIHdyaXRlX3RvdGFsOwo+wqDCoMKgwqDCoMKg wqB9Cj7CoAo+wqDCoMKgwqDCoMKgwqBlcnJubyA9IDA7Cj5AQCAtMTM5LDE2ICsxMzksMjM2IEBA IHN0YXRpYyBzaXplX3QgYnVmZmVyX3dyaXRlcl9kZWZhdWx0KGNvbnN0IHZvaWQgKipidWZfYWRk ciwgc2l6ZV90IGxlbiwKPsKgLyogRGVmYXVsdCBvbiBzdG9wIGNhbGxiYWNrLiBKdXN0IGNsb3Nl IHRoZSBjb3JyZXNwb25kaW5nIGRlc2NyaXB0b3IuICovCj7CoHN0YXRpYyBpbnQgb25fc3RvcF9j Yl9kZWZhdWx0KHZvaWQgKm9wdCwgdWludDhfdCAqYnVmKQo+wqB7Cj4tIHN0cnVjdCBwcm9maWxl X2N0eCAqY3R4ID0gb3B0Owo+LSBjb25zdCBpbnQgZmQgPSBjdHgtPmZkOwo+KyBzdHJ1Y3QgcHJv ZmlsZV9jdHggKmN0eCA9IE5VTEw7Cj4rIGludCBmZCA9IDA7Cj4rCj4rIGlmIChvcHQgPT0gTlVM TCkgewo+KyAvKiBOb3RoaW5nIHRvIGRvLiAqLwo+KyByZXR1cm4gMDsKPisgfQo+Kwo+KyBjdHgg PSBvcHQ7Cj4rIGZkID0gY3R4LT5mZDsKPsKgwqDCoFVOVVNFRChidWYpOwo+wqDCoMKgbGpfbWVt X2ZyZWUoY3R4LT5nLCBjdHgsIHNpemVvZigqY3R4KSk7Cj7CoMKgwqByZXR1cm4gY2xvc2UoZmQp Owo+wqB9Cj7CoAo+Ky8qIC0tLS0tIG1pc2Muc3lzcHJvZiBtb2R1bGUgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwo+Kwo+KyNkZWZpbmUgTEpMSUJfTU9E VUxFX21pc2Nfc3lzcHJvZgo+Kwo+Ky8qIFRoZSBkZWZhdWx0IHByb2ZpbGluZyBpbnRlcnZhbCBl cXVhbHMgdG8gMTEgbXMuICovCj4rI2RlZmluZSBTWVNQUk9GX0RFRkFVTFRfSU5URVJWQUwgMTAK PisjZGVmaW5lIFNZU1BST0ZfREVGQVVMVF9PVVRQVVQgInN5c3Byb2YuYmluIgo+Kwo+K2ludCBz ZXRfb3V0cHV0X3BhdGgoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGx1YW1fc3lzcHJvZl9vcHRp b25zICpvcHQpIHsKPisgc3RydWN0IHByb2ZpbGVfY3R4ICpjdHggPSBvcHQtPmN0eDsKPisgaW50 IGZkID0gMDsKPisgbHVhX2Fzc2VydChwYXRoICE9IE5VTEwpOwo+KyBmZCA9IG9wZW4ocGF0aCwg T19DUkVBVCB8IE9fV1JPTkxZIHwgT19UUlVOQywgMDY0NCk7Cj4rIGlmKGZkID09IC0xKSB7Cj4r IHJldHVybiBTWVNQUk9GX0VSUklPOwo+KyB9Cj4rIGN0eC0+ZmQgPSBmZDsKPisgcmV0dXJuIFNZ U1BST0ZfU1VDQ0VTUzsKPit9Cj4rCj4raW50IHBhcnNlX3N5c3Byb2Zfb3B0cyhsdWFfU3RhdGUg KkwsIHN0cnVjdCBsdWFtX3N5c3Byb2Zfb3B0aW9ucyAqb3B0LCBpbnQgaWR4KSB7Cj4rIEdDdGFi ICpvcHRpb25zID0gbGpfbGliX2NoZWNrdGFiKEwsIGlkeCk7Cj4rCj4rIC8qIEdldCBwcm9maWxp bmcgbW9kZS4gKi8KPisgewo+KyBjb25zdCBjaGFyICptb2RlID0gTlVMTDsKPisKPisgY1RWYWx1 ZSAqbW9kZV9vcHQgPSBsal90YWJfZ2V0c3RyKG9wdGlvbnMsIGxqX3N0cl9uZXdsaXQoTCwgIm1v ZGUiKSk7Cj4rIGlmICghbW9kZV9vcHQgfHwgIXR2aXNzdHIobW9kZV9vcHQpKSB7Cj4rIHJldHVy biBTWVNQUk9GX0VSUlVTRTsKPisgfQo+Kwo+KyBtb2RlID0gc3RyVmRhdGEobW9kZV9vcHQpOwo+ KyBpZiAobW9kZVsxXSAhPSAnXDAnKQo+KyByZXR1cm4gU1lTUFJPRl9FUlJVU0U7Cj4rCj4rIHN3 aXRjaCAoKm1vZGUpIHsKPisgY2FzZSAnRCc6Cj4rIG9wdC0+bW9kZSA9IExVQU1fU1lTUFJPRl9E RUZBVUxUOwo+KyBicmVhazsKPisgY2FzZSAnTCc6Cj4rIG9wdC0+bW9kZSA9IExVQU1fU1lTUFJP Rl9MRUFGOwo+KyBicmVhazsKPisgY2FzZSAnQyc6Cj4rIG9wdC0+bW9kZSA9IExVQU1fU1lTUFJP Rl9DQUxMR1JBUEg7Cj4rIGJyZWFrOwo+KyBkZWZhdWx0Ogo+KyByZXR1cm4gU1lTUFJPRl9FUlJV U0U7Cj4rIH0KPisgfQo+Kwo+KyAvKiBHZXQgcHJvZmlsaW5nIGludGVydmFsLiAqLwo+KyB7Cj4r IGNUVmFsdWUgKmludGVydmFsID0gbGpfdGFiX2dldHN0cihvcHRpb25zLCBsal9zdHJfbmV3bGl0 KEwsICJpbnRlcnZhbCIpKTsKPisgb3B0LT5pbnRlcnZhbCA9IFNZU1BST0ZfREVGQVVMVF9JTlRF UlZBTDsKPisgaWYgKGludGVydmFsICYmIHR2aXNudW0oaW50ZXJ2YWwpKSB7Cj4rIGludDMyX3Qg c2lnbmVkX2ludGVydmFsID0gbnVtYmVyVmludChpbnRlcnZhbCk7Cj4rIGlmIChzaWduZWRfaW50 ZXJ2YWwgPCAxKQo+KyByZXR1cm4gU1lTUFJPRl9FUlJVU0U7Cj4rIG9wdC0+aW50ZXJ2YWwgPSBz aWduZWRfaW50ZXJ2YWw7Cj4rIH0KPisgfQo+Kwo+KyAvKiBHZXQgb3V0cHV0IHBhdGguICovCj4r IGlmIChvcHQtPm1vZGUgIT0gTFVBTV9TWVNQUk9GX0RFRkFVTFQpCj4rIHsKPisgY29uc3QgY2hh ciAqcGF0aCA9IE5VTEw7Cj4rIHN0cnVjdCBwcm9maWxlX2N0eCAqY3R4ID0gTlVMTDsKPisgaW50 IHN0YXR1cyA9IDA7Cj4rCj4rIGNUVmFsdWUgKnBhdGh0diA9IGxqX3RhYl9nZXRzdHIob3B0aW9u cywgbGpfc3RyX25ld2xpdChMLCAicGF0aCIpKTsKPisgaWYgKCFwYXRodHYpCj4rIHBhdGggPSBT WVNQUk9GX0RFRkFVTFRfT1VUUFVUOwo+KyBlbHNlIGlmICghdHZpc3N0cihwYXRodHYpKQo+KyBy ZXR1cm4gU1lTUFJPRl9FUlJVU0U7Cj4rIGVsc2UKPisgcGF0aCA9IHN0clZkYXRhKHBhdGh0dik7 Cj4rCj4rIGN0eCA9IGxqX21lbV9uZXcoTCwgc2l6ZW9mKCpjdHgpKTsKPisgY3R4LT5nID0gRyhM KTsKPisgb3B0LT5jdHggPSBjdHg7Cj4rIG9wdC0+YnVmID0gY3R4LT5idWY7Cj4rIG9wdC0+bGVu ID0gU1RSRUFNX0JVRkZFUl9TSVpFOwo+Kwo+KyBzdGF0dXMgPSBzZXRfb3V0cHV0X3BhdGgocGF0 aCwgb3B0KTsKPisgaWYgKHN0YXR1cyAhPSBTWVNQUk9GX1NVQ0NFU1MpIHsKPisgbGpfbWVtX2Zy ZWUoY3R4LT5nLCBjdHgsIHNpemVvZigqY3R4KSk7Cj4rIHJldHVybiBzdGF0dXM7Cj4rIH0KPisg fQo+Kwo+KyByZXR1cm4gU1lTUFJPRl9TVUNDRVNTOwo+K30KPisKPitpbnQgcGFyc2Vfb3B0aW9u cyhsdWFfU3RhdGUgKkwsIHN0cnVjdCBsdWFtX3N5c3Byb2Zfb3B0aW9ucyAqb3B0KQo+K3sKPisg aWYgKGx1YV9nZXR0b3AoTCkgIT0gMSkKPisgcmV0dXJuIFNZU1BST0ZfRVJSVVNFOwo+Kwo+KyBp ZiAoIWx1YV9pc3RhYmxlKEwsIDEpKQo+KyByZXR1cm4gU1lTUFJPRl9FUlJVU0U7Cj4rCj4rIHJl dHVybiBwYXJzZV9zeXNwcm9mX29wdHMoTCwgb3B0LCAxKTsKPit9Cj4rCj4raW50IHN5c3Byb2Zf ZXJyb3IobHVhX1N0YXRlICpMLCBpbnQgc3RhdHVzKQo+K3sKPisgc3dpdGNoIChzdGF0dXMpIHsK PisgY2FzZSBTWVNQUk9GX0VSUlVTRToKPisgbHVhX3B1c2huaWwoTCk7Cj4rIGx1YV9wdXNoc3Ry aW5nKEwsIGVycjJtc2coTEpfRVJSX1BST0ZfTUlTVVNFKSk7Cj4rIGx1YV9wdXNoaW50ZWdlcihM LCBFSU5WQUwpOwo+KyByZXR1cm4gMzsKPisgY2FzZSBTWVNQUk9GX0VSUlJVTjoKPisgbHVhX3B1 c2huaWwoTCk7Cj4rIGx1YV9wdXNoc3RyaW5nKEwsIGVycjJtc2coTEpfRVJSX1BST0ZfSVNSVU5O SU5HKSk7Cj4rIGx1YV9wdXNoaW50ZWdlcihMLCBFSU5WQUwpOwo+KyByZXR1cm4gMzsKPisgY2Fz ZSBTWVNQUk9GX0VSUlNUT1A6Cj4rIGx1YV9wdXNobmlsKEwpOwo+KyBsdWFfcHVzaHN0cmluZyhM LCBlcnIybXNnKExKX0VSUl9QUk9GX05PVFJVTk5JTkcpKTsKPisgbHVhX3B1c2hpbnRlZ2VyKEws IEVJTlZBTCk7Cj4rIHJldHVybiAzOwo+KyBjYXNlIFNZU1BST0ZfRVJSSU86Cj4rIHJldHVybiBs dWFMX2ZpbGVyZXN1bHQoTCwgMCwgTlVMTCk7Cj4rIGRlZmF1bHQ6Cj4rIGx1YV9hc3NlcnQoMCk7 Cj4rIHJldHVybiAwOwo+KyB9Cj4rfQo+Kwo+Ky8qIGxvY2FsIHJlcywgZXJyLCBlcnJubyA9IHN5 c3Byb2Yuc3RhcnQob3B0aW9ucykgKi8KPitMSkxJQl9DRihtaXNjX3N5c3Byb2Zfc3RhcnQpCj4r ewo+KyBpbnQgc3RhdHVzID0gU1lTUFJPRl9TVUNDRVNTOwo+Kwo+KyBzdHJ1Y3QgbHVhbV9zeXNw cm9mX29wdGlvbnMgb3B0ID0ge307Cj4rIHN0cnVjdCBsdWFtX3N5c3Byb2ZfY29uZmlnIGNvbmYg PSB7fTsKPisKPisKPisgc3RhdHVzID0gcGFyc2Vfb3B0aW9ucyhMLCAmb3B0KTsKPisgaWYgKExK X1VOTElLRUxZKHN0YXR1cyAhPSBQUk9GSUxFX1NVQ0NFU1MpKSB7Cj4rIHJldHVybiBzeXNwcm9m X2Vycm9yKEwsIHN0YXR1cyk7Cj4rIH0KPisKPisgY29uZi53cml0ZXIgPSBidWZmZXJfd3JpdGVy X2RlZmF1bHQ7Cj4rIGNvbmYub25fc3RvcCA9IG9uX3N0b3BfY2JfZGVmYXVsdDsKPisgY29uZi5i YWNrdHJhY2VyID0gTlVMTDsKPisKPisgc3RhdHVzID0gbHVhTV9zeXNwcm9mX2NvbmZpZ3VyZSgm Y29uZik7Cj4rIGlmIChMSl9VTkxJS0VMWShzdGF0dXMgIT0gUFJPRklMRV9TVUNDRVNTKSkgewo+ KyBvbl9zdG9wX2NiX2RlZmF1bHQob3B0LmN0eCwgb3B0LmJ1Zik7Cj4rIHJldHVybiBzeXNwcm9m X2Vycm9yKEwsIHN0YXR1cyk7Cj4rIH0KPisKPisgc3RhdHVzID0gbHVhTV9zeXNwcm9mX3N0YXJ0 KEwsICZvcHQpOwo+KyBpZiAoTEpfVU5MSUtFTFkoc3RhdHVzICE9IFBST0ZJTEVfU1VDQ0VTUykp Cj4rIC8qIEFsbG9jYXRlZCBtZW1vcnkgd2lsbCBiZSBmcmVlZCBpbiBvbl9zdG9wIGNhbGxiYWNr LiAqLwo+KyByZXR1cm4gc3lzcHJvZl9lcnJvcihMLCBzdGF0dXMpOwo+Kwo+KyBsdWFfcHVzaGJv b2xlYW4oTCwgMSk7Cj4rIHJldHVybiAxOwo+K30KPisKPisvKiBsb2NhbCByZXMsIGVyciwgZXJy bm8gPSBwcm9maWxlLnN5c3Byb2Zfc3RvcCgpICovCj4rTEpMSUJfQ0YobWlzY19zeXNwcm9mX3N0 b3ApCj4rewo+KyBpbnQgc3RhdHVzID0gbHVhTV9zeXNwcm9mX3N0b3AoTCk7Cj4rIGlmIChMSl9V TkxJS0VMWShzdGF0dXMgIT0gUFJPRklMRV9TVUNDRVNTKSkKPisgcmV0dXJuIHN5c3Byb2ZfZXJy b3IoTCwgc3RhdHVzKTsKPisKPisgbHVhX3B1c2hib29sZWFuKEwsIDEpOwo+KyByZXR1cm4gMTsK Pit9Cj4rCj4rLyogbG9jYWwgY291bnRlcnMsIGVyciwgZXJybm8gPSBzeXNwcm9mLnJlcG9ydCgp ICovCj4rTEpMSUJfQ0YobWlzY19zeXNwcm9mX3JlcG9ydCkKPit7Cj4rIHN0cnVjdCBsdWFtX3N5 c3Byb2ZfY291bnRlcnMgY291bnRlcnMgPSB7fTsKPisgR0N0YWIgKmRhdGFfdGFiID0gTlVMTDsK PisgR0N0YWIgKmNvdW50X3RhYiA9IE5VTEw7Cj4rCj4rIGludCBzdGF0dXMgPSBsdWFNX3N5c3By b2ZfcmVwb3J0KCZjb3VudGVycyk7Cj4rIGlmIChzdGF0dXMgIT0gU1lTUFJPRl9TVUNDRVNTKQo+ KyByZXR1cm4gc3lzcHJvZl9lcnJvcihMLCBzdGF0dXMpOwo+Kwo+KyBsdWFfY3JlYXRldGFibGUo TCwgMCwgMyk7Cj4rIGRhdGFfdGFiID0gdGFiVihMLT50b3AgLSAxKTsKPisKPisgc2V0bnVtZmll bGQoTCwgZGF0YV90YWIsICJzYW1wbGVzIiwgY291bnRlcnMuc2FtcGxlcyk7Cj4rIHNldG51bWZp ZWxkKEwsIGRhdGFfdGFiLCAib3ZlcnJ1bnMiLCBjb3VudGVycy5vdmVycnVucyk7Cj4rCj4rIGx1 YV9jcmVhdGV0YWJsZShMLCAwLCBMSl9WTVNUX19NQVggKyAxKTsKPisgY291bnRfdGFiID0gdGFi VihMLT50b3AgLSAxKTsKPisKPisgc2V0bnVtZmllbGQoTCwgY291bnRfdGFiLCAiSU5URVJQIiwg Y291bnRlcnMudm1zdF9pbnRlcnApOwo+KyBzZXRudW1maWVsZChMLCBjb3VudF90YWIsICJMRlVO QyIsIGNvdW50ZXJzLnZtc3RfbGZ1bmMpOwo+KyBzZXRudW1maWVsZChMLCBjb3VudF90YWIsICJG RlVOQyIsIGNvdW50ZXJzLnZtc3RfZmZ1bmMpOwo+KyBzZXRudW1maWVsZChMLCBjb3VudF90YWIs ICJDRlVOQyIsIGNvdW50ZXJzLnZtc3RfY2Z1bmMpOwo+KyBzZXRudW1maWVsZChMLCBjb3VudF90 YWIsICJHQyIsIGNvdW50ZXJzLnZtc3RfZ2MpOwo+KyBzZXRudW1maWVsZChMLCBjb3VudF90YWIs ICJFWElUIiwgY291bnRlcnMudm1zdF9leGl0KTsKPisgc2V0bnVtZmllbGQoTCwgY291bnRfdGFi LCAiUkVDT1JEIiwgY291bnRlcnMudm1zdF9yZWNvcmQpOwo+KyBzZXRudW1maWVsZChMLCBjb3Vu dF90YWIsICJPUFQiLCBjb3VudGVycy52bXN0X29wdCk7Cj4rIHNldG51bWZpZWxkKEwsIGNvdW50 X3RhYiwgIkFTTSIsIGNvdW50ZXJzLnZtc3RfYXNtKTsKPisgc2V0bnVtZmllbGQoTCwgY291bnRf dGFiLCAiVFJBQ0UiLCBjb3VudGVycy52bXN0X3RyYWNlKTsKPisKPisgbHVhX3NldGZpZWxkKEws IC0yLCAidm1zdGF0ZSIpOwo+Kwo+KyByZXR1cm4gMTsKPit9Cj4rCj7CoC8qIC0tLS0tIG1pc2Mu bWVtcHJvZiBtb2R1bGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSAqLwo+wqAKPsKgI2RlZmluZSBMSkxJQl9NT0RVTEVfbWlzY19tZW1wcm9mCj4rCj7CoC8q IGxvY2FsIHN0YXJ0ZWQsIGVyciwgZXJybm8gPSBtaXNjLm1lbXByb2Yuc3RhcnQoZm5hbWUpICov Cj7CoExKTElCX0NGKG1pc2NfbWVtcHJvZl9zdGFydCkKPsKgewo+QEAgLTE2OSw5ICszODksOSBA QCBMSkxJQl9DRihtaXNjX21lbXByb2Zfc3RhcnQpCj7CoMKgwqBvcHQubGVuID0gU1RSRUFNX0JV RkZFUl9TSVpFOwo+wqAKPsKgwqDCoGN0eC0+ZyA9IEcoTCk7Cj4tIGN0eC0+c3RyZWFtID0gZm9w ZW4oZm5hbWUsICJ3YiIpOwo+KyBjdHgtPmZkID0gb3BlbihmbmFtZSwgT19DUkVBVCB8IE9fV1JP TkxZIHwgT19UUlVOQyk7Cj7CoAo+LSBpZiAoY3R4LT5zdHJlYW0gPT0gTlVMTCkgewo+KyBpZiAo Y3R4LT5mZCA9PSAtMSkgewo+wqDCoMKgwqDCoGxqX21lbV9mcmVlKGN0eC0+ZywgY3R4LCBzaXpl b2YoKmN0eCkpOwo+wqDCoMKgwqDCoHJldHVybiBsdWFMX2ZpbGVyZXN1bHQoTCwgMCwgZm5hbWUp Owo+wqDCoMKgfQo+QEAgLTI0MCw1ICs0NjAsNyBAQCBMVUFMSUJfQVBJIGludCBsdWFvcGVuX21p c2Moc3RydWN0IGx1YV9TdGF0ZSAqTCkKPsKgewo+wqDCoMKgTEpfTElCX1JFRyhMLCBMVUFNX01J U0NMSUJOQU1FLCBtaXNjKTsKPsKgwqDCoExKX0xJQl9SRUcoTCwgTFVBTV9NSVNDTElCTkFNRSAi Lm1lbXByb2YiLCBtaXNjX21lbXByb2YpOwo+KyBMSl9MSUJfUkVHKEwsIExVQU1fTUlTQ0xJQk5B TUUgIi5zeXNwcm9mIiwgbWlzY19zeXNwcm9mKTsKPisKPsKgwqDCoHJldHVybiAxOwo+wqB9Cj5k aWZmIC0tZ2l0IGEvdGVzdC90YXJhbnRvb2wtdGVzdHMvbWlzY2xpYi1zeXNwcm9mLWxhcGkudGVz dC5sdWEgYi90ZXN0L3RhcmFudG9vbC10ZXN0cy9taXNjbGliLXN5c3Byb2YtbGFwaS50ZXN0Lmx1 YQo+bmV3IGZpbGUgbW9kZSAxMDA2NDQKPmluZGV4IDAwMDAwMDAwLi5iNGM5Y2I3Ygo+LS0tIC9k ZXYvbnVsbAo+KysrIGIvdGVzdC90YXJhbnRvb2wtdGVzdHMvbWlzY2xpYi1zeXNwcm9mLWxhcGku dGVzdC5sdWEKPkBAIC0wLDAgKzEsMTE4IEBACj4rLS0gU3lzcHJvZiBpcyBpbXBsZW1lbnRlZCBm b3IgeDg2IGFuZCB4NjQgYXJjaGl0ZWN0dXJlcyBvbmx5Lgo+K3JlcXVpcmUoInV0aWxzIikuc2tp cGNvbmQoCj4rIGppdC5hcmNoIH49ICJ4ODYiIGFuZCBqaXQuYXJjaCB+PSAieDY0IiwKPisgaml0 LmFyY2guLiIgYXJjaGl0ZWN0dXJlIGlzIE5JWSBmb3Igc3lzcHJvZiIKPispCj4rCj4rbG9jYWwg dGFwID0gcmVxdWlyZSgidGFwIikKPisKPitsb2NhbCB0ZXN0ID0gdGFwLnRlc3QoIm1pc2Mtc3lz cHJvZi1sYXBpIikKPit0ZXN0OnBsYW4oMTQpCj4rCj4raml0Lm9mZigpCj4raml0LmZsdXNoKCkK PisKPitsb2NhbCBidWZyZWFkID0gcmVxdWlyZSgidXRpbHMuYnVmcmVhZCIpCj4rbG9jYWwgc3lt dGFiID0gcmVxdWlyZSgidXRpbHMuc3ltdGFiIikKPisKPitsb2NhbCBUTVBfQklORklMRSA9IGFy Z1swXTpnc3ViKCIuKy8oW14vXSspJS50ZXN0JS5sdWEkIiwgIiUuJTEuc3lzcHJvZmRhdGEudG1w LmJpbiIpCj4rbG9jYWwgQkFEX1BBVEggPSBhcmdbMF06Z3N1YigiLisvKFteL10rKSUudGVzdCUu bHVhJCIsICIlMS9zeXNwcm9mZGF0YS50bXAuYmluIikKPisKPitsb2NhbCBmdW5jdGlvbiBwYXls b2FkKCkKPisgbG9jYWwgZnVuY3Rpb24gZmliKG4pCj4rIGlmIG4gPD0gMSB0aGVuCj4rIHJldHVy biBuCj4rIGVuZAo+KyByZXR1cm4gZmliKG4gLSAxKSArIGZpYihuIC0gMikKPisgZW5kCj4rIHJl dHVybiBmaWIoMzIpCj4rZW5kCj4rCj4rbG9jYWwgZnVuY3Rpb24gZ2VuZXJhdGVfb3V0cHV0KG9w dHMpCj4rIGxvY2FsIHJlcywgZXJyID0gbWlzYy5zeXNwcm9mLnN0YXJ0KG9wdHMpCj4rIGFzc2Vy dChyZXMsIGVycikKPisKPisgcGF5bG9hZCgpCj4rCj4rIHJlcyxlcnIgPSBtaXNjLnN5c3Byb2Yu c3RvcCgpCj4rIGFzc2VydChyZXMsIGVycikKPitlbmQKPisKPitsb2NhbCBmdW5jdGlvbiBjaGVj a19tb2RlKG1vZGUsIGludGVydmFsKQo+KyBsb2NhbCByZXMgPSBwY2FsbCgKPisgZ2VuZXJhdGVf b3V0cHV0LAo+KyB7IG1vZGUgPSBtb2RlLCBpbnRlcnZhbCA9IGludGVydmFsLCBwYXRoID0gVE1Q X0JJTkZJTEUgfQo+KyApCj4rCj4rIGlmIG5vdCByZXMgdGhlbgo+KyB0ZXN0OmZhaWwobW9kZSAu LiAnIG1vZGUgd2l0aCBpbnRlcnZhbCAnIC4uIGludGVydmFsKQo+KyBvcy5yZW1vdmUoVE1QX0JJ TkZJTEUpCj4rIGVuZAo+Kwo+KyBsb2NhbCByZWFkZXIgPSBidWZyZWFkLm5ldyhUTVBfQklORklM RSkKPisgc3ltdGFiLnBhcnNlKHJlYWRlcikKPitlbmQKPisKPistLSBHRU5FUkFMCj4rCj4rLS0g V3JvbmcgcHJvZmlsaW5nIG1vZGUuCj4rbG9jYWwgcmVzLCBlcnIsIGVycm5vID0gbWlzYy5zeXNw cm9mLnN0YXJ0eyBtb2RlID0gIkEiIH0KPit0ZXN0Om9rKHJlcyA9PSBuaWwgYW5kIGVycjptYXRj aCgicHJvZmlsZXIgbWlzdXNlIikpCj4rdGVzdDpvayh0eXBlKGVycm5vKSA9PSAibnVtYmVyIikK PisKPistLSBBbHJlYWR5IHJ1bm5pbmcuCj4rcmVzLCBlcnIgPSBtaXNjLnN5c3Byb2Yuc3RhcnR7 IG1vZGUgPSAiRCIgfQo+K2Fzc2VydChyZXMsIGVycikKPisKPityZXMsIGVyciwgZXJybm8gPSBt aXNjLnN5c3Byb2Yuc3RhcnR7IG1vZGUgPSAiRCIgfQo+K3Rlc3Q6b2socmVzID09IG5pbCBhbmQg ZXJyOm1hdGNoKCJwcm9maWxlciBtaXN1c2UiKSkKPit0ZXN0Om9rKHR5cGUoZXJybm8pID09ICJu dW1iZXIiKQo+Kwo+K3JlcywgZXJyID0gbWlzYy5zeXNwcm9mLnN0b3AoKQo+K2Fzc2VydChyZXMs IGVycikKPisKPistLSBOb3QgcnVubmluZy4KPityZXMsIGVyciwgZXJybm8gPSBtaXNjLnN5c3By b2Yuc3RvcCgpCj4rdGVzdDpvayhyZXMgPT0gbmlsIGFuZCBlcnI6bWF0Y2goInByb2ZpbGVyIGlz IG5vdCBydW5uaW5nIikpCj4rdGVzdDpvayh0eXBlKGVycm5vKSA9PSAibnVtYmVyIikKPisKPist LSBCYWQgcGF0aC4KPityZXMsIGVyciwgZXJybm8gPSBtaXNjLnN5c3Byb2Yuc3RhcnQoeyBtb2Rl ID0gIkMiLCBwYXRoID0gQkFEX1BBVEggfSkKPit0ZXN0Om9rKHJlcyA9PSBuaWwgYW5kIGVycjpt YXRjaCgiTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIpKQo+K3Rlc3Q6b2sodHlwZShlcnJubykg PT0gIm51bWJlciIpCj4rCj4rLS0gQmFkIGludGVydmFsLgo+K3JlcywgZXJyLCBlcnJubyA9IG1p c2Muc3lzcHJvZi5zdGFydHsgbW9kZSA9ICJDIiwgaW50ZXJ2YWwgPSAtMSB9Cj4rdGVzdDpvayhy ZXMgPT0gbmlsIGFuZCBlcnI6bWF0Y2goInByb2ZpbGVyIG1pc3VzZSIpKQo+K3Rlc3Q6b2sodHlw ZShlcnJubykgPT0gIm51bWJlciIpCj4rCj4rLS0gREVGQVVMVCBNT0RFCj4rCj4raWYgbm90IHBj YWxsKGdlbmVyYXRlX291dHB1dCwgeyBtb2RlID0gIkQiLCBpbnRlcnZhbCA9IDExIH0pIHRoZW4K PisgdGVzdDpmYWlsKCdgZGVmYXVsdGAgbW9kZSB3aXRoIGludGVydmFsIDExJykKPitlbmQKPisK Pitsb2NhbCByZXBvcnQgPSBtaXNjLnN5c3Byb2YucmVwb3J0KCkKPisKPit0ZXN0Om9rKHJlcG9y dC5zYW1wbGVzID4gMCkKPit0ZXN0Om9rKHJlcG9ydC52bXN0YXRlLkxGVU5DID4gMCkKPit0ZXN0 Om9rKHJlcG9ydC52bXN0YXRlLlRSQUNFID09IDApCj4rCj4rLS0gV2l0aCB2ZXJ5IGJpZyBpbnRl cnZhbC4KPitpZiBub3QgcGNhbGwoZ2VuZXJhdGVfb3V0cHV0LCB7IG1vZGUgPSAiRCIsIGludGVy dmFsID0gMTAwMCB9KSB0aGVuCj4rIHRlc3Q6ZmFpbCgnYGRlZmF1bHRgIG1vZGUgd2l0aCBpbnRl cnZhbCAxMDAwJykKPitlbmQKPisKPityZXBvcnQgPSBtaXNjLnN5c3Byb2YucmVwb3J0KCkKPit0 ZXN0Om9rKHJlcG9ydC5zYW1wbGVzID09IDApCj4rCj4rLS0gTEVBRiBNT0RFCj4rY2hlY2tfbW9k ZSgiTCIsIDExKQo+Kwo+Ky0tIENBTEwgTU9ERQo+K2NoZWNrX21vZGUoIkMiLCAxMSkKPisKPitv cy5yZW1vdmUoVE1QX0JJTkZJTEUpCj4rCj4raml0Lm9uKCkKPitvcy5leGl0KHRlc3Q6Y2hlY2so KSBhbmQgMCBvciAxKQo+LS0KPjIuMzUuMQrCoA== ----ALT--1a7543ECc7E7671c0607a71D2653a0811647457089 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 CjxIVE1MPjxCT0RZPjxkaXY+TmV3IGJyYW5jaDombmJzcDs8YSBocmVmPSJodHRwczovL2dpdGh1 Yi5jb20vdGFyYW50b29sL2x1YWppdC90cmVlL2Zja3hvcmcvZ2gtNzgxLXBsYXRmb3JtLWFuZC1s dWEtcHJvZmlsZXItZnVsbC1jaSI+aHR0cHM6Ly9naXRodWIuY29tL3RhcmFudG9vbC9sdWFqaXQv dHJlZS9mY2t4b3JnL2doLTc4MS1wbGF0Zm9ybS1hbmQtbHVhLXByb2ZpbGVyLWZ1bGwtY2k8L2E+ PC9kaXY+PGRpdj4mbmJzcDs8L2Rpdj48YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyLWxlZnQ6MXB4 IHNvbGlkICMwODU3QTY7IG1hcmdpbjoxMHB4OyBwYWRkaW5nOjAgMCAwIDEwcHg7Ij7QodGA0LXQ tNCwLCAxNiDQvNCw0YDRgtCwIDIwMjIsIDIxOjU3ICswMzowMCDQvtGCIE1heGltIEtva3J5YXNo a2luICZsdDttYXgua29rcnlhc2hraW5AZ21haWwuY29tJmd0Ozo8YnI+Jm5ic3A7PGRpdiBpZD0i Ij48ZGl2IGNsYXNzPSJqcy1oZWxwZXIganMtcmVhZG1zZy1tc2ciPjxkaXY+PGRpdiBpZD0ic3R5 bGVfMTY0NzQ1NzA0NjAzMTUxMDI0OTJfQk9EWSI+VGhpcyBjb21taXQgaW50cm9kdWNlcyBMdWEg QVBJIGZvciBzeXNwcm9mLCBzbyBpdCBpcyBub3cgcG9zc2libGUgdG88YnI+Y2FsbCBpdCBmcm9t IGFueXdoZXJlIGluIGEgTHVhIHNjcmlwdC4gQWxsIG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBwYXNz ZWQ8YnI+aW5zaWRlIGEgc2luZ2xlIEx1YSB0YWJsZS48YnI+VGhlIGZvbGxvd2luZyBvcHRpb25z IGFyZSBzdXBwb3J0ZWQ6PGJyPi0gbW9kZTogIkQiIChEZWZhdWx0IG1vZGUsIG9ubHkgdmlydHVh bCBtYWNoaW5lIHN0YXRlIGNvdW50ZXJzKTxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiTCIgKExlYWYgbW9k ZSwgc2hvd3MgdGhlIGxhc3QgZnJhbWUgb24gdGhlIHN0YWNrKTxicj4mbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsi QyIgKENhbGxjaGFpbiBtb2RlLCBmdWxsIHN0YWNrIGR1bXApPGJyPi0gaW50ZXJ2YWw6IHRpbWUg YmV0d2VlbiBzYW1wbGVzIGluIG1pbGxpc2Vjb25kczxicj4tIHBhdGg6IFBhdGggdG8gZmlsZSBp biB3aGljaCBwcm9maWxpbmcgZGF0YSBzaG91bGQgYmUgc3RvcmVkPGJyPjxicj5QYXJ0IG9mIHRh cmFudG9vbC90YXJhbnRvb2wjNzgxPGJyPi0tLTxicj4mZ3Q7Jmd0OyArI2RlZmluZSBTWVNQUk9G X0RFRkFVTFRfSU5URVJWQUwgKDExKTxicj4mZ3Q7V2h5IDExIGFuZCBub3QgMTAsIDkgb3Igc29t ZXRoaW5nIGVsc2U/PGJyPk5vIHJlYXNvbiBmb3IgdGhhdC4gQ2hhbmdlZCBpdCB0byAxMCwgc28g aXQgbGVzcyBxdWVzdGlvbmFibGUgbm93Ljxicj48YnI+Jmd0OyZndDsgK2ludCBzeXNwcm9mX2Vy cm9yKGx1YV9TdGF0ZSAqTCwgaW50IHN0YXR1cyk8YnI+Jmd0OyZndDsgK3s8YnI+Jmd0OyZndDsg KyBzd2l0Y2ggKHN0YXR1cykgezxicj4mZ3Q7Jmd0OyArIGNhc2UgU1lTUFJPRl9FUlJVU0U6PGJy PiZndDsmZ3Q7ICsgbHVhX3B1c2huaWwoTCk7PGJyPiZndDsmZ3Q7ICsgbHVhX3B1c2hzdHJpbmco TCwgZXJyMm1zZyhMSl9FUlJfUFJPRl9NSVNVU0UpKTs8YnI+Jmd0OyZndDsgKyBsdWFfcHVzaGlu dGVnZXIoTCwgRUlOVkFMKTs8YnI+Jmd0OyZndDsgKyByZXR1cm4gMzs8YnI+Jmd0OyZndDsgKyBj YXNlIFNZU1BST0ZfRVJSUlVOOjxicj4mZ3Q7PGJyPiZndDtMSl9FUlJfUFJPRl9JU1JVTk5JTkcg YW5kIExKX0VSUl9QUk9GX05PVFJVTk5JTkcgaXMgZGVmaW5lZCBvbmx5LCB3aGVuPGJyPiZndDtM Sl9IQVNNRU1QUk9GIHx8IExKX0hBU1NZU1BST0YsIHNvIGl0IG11c3QgYmUgdGhlIGNvcnJlc3Bv bmRpbmcgaWZkZWY8YnI+Jmd0O2hlcmUuPGJyPldoYXQgdmFsdWUgc2hvdWxkIGJlIHJldHVybmVk IGlmIHdlIGRvbid0IGhhdmUgbmVpdGhlciBzeXNwcm9mPGJyPm5vciBtZW1wcm9mPzxicj48YnI+ Jm5ic3A7c3JjL2xpYl9taXNjLmMgfCAyMzggKysrKysrKysrKysrKysrKystPGJyPiZuYnNwOy4u Li9taXNjbGliLXN5c3Byb2YtbGFwaS50ZXN0Lmx1YSB8IDExOCArKysrKysrKys8YnI+Jm5ic3A7 MiBmaWxlcyBjaGFuZ2VkLCAzNDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSk8YnI+Jm5i c3A7Y3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvdGFyYW50b29sLXRlc3RzL21pc2NsaWItc3lzcHJv Zi1sYXBpLnRlc3QubHVhPGJyPjxicj5kaWZmIC0tZ2l0IGEvc3JjL2xpYl9taXNjLmMgYi9zcmMv bGliX21pc2MuYzxicj5pbmRleCAyMmQyOWQ3OC4uZTkzY2Y1NWIgMTAwNjQ0PGJyPi0tLSBhL3Ny Yy9saWJfbWlzYy5jPGJyPisrKyBiL3NyYy9saWJfbWlzYy5jPGJyPkBAIC0xMDksMTQgKzEwOSwx NCBAQCBzdGF0aWMgc2l6ZV90IGJ1ZmZlcl93cml0ZXJfZGVmYXVsdChjb25zdCB2b2lkICoqYnVm X2FkZHIsIHNpemVfdCBsZW4sPGJyPiZuYnNwOyZuYnNwOyZuYnNwO2x1YV9hc3NlcnQobGVuICZs dDs9IFNUUkVBTV9CVUZGRVJfU0laRSk7PGJyPiZuYnNwOzxicj4mbmJzcDsmbmJzcDsmbmJzcDtm b3IgKDs7KSB7PGJyPi0gY29uc3Qgc2l6ZV90IHdyaXR0ZW4gPSB3cml0ZShmZCwgZGF0YSwgbGVu IC0gd3JpdGVfdG90YWwpOzxicj4rIGNvbnN0IHNzaXplX3Qgd3JpdHRlbiA9IHdyaXRlKGZkLCBk YXRhLCBsZW4gLSB3cml0ZV90b3RhbCk7PGJyPiZuYnNwOzxicj4mbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDtpZiAoTEpfVU5MSUtFTFkod3JpdHRlbiA9PSAtMSkpIHs8YnI+Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7LyogUmUtdHJpZXMgd3JpdGUgaW4gY2Fz ZSBvZiBFSU5UUi4gKi88YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7aWYgKGVycm5vICE9IEVJTlRSKSB7PGJyPi0gLyogV2lsbCBiZSBmcmVlZCBhcyB3aG9sZSBj aHVuayBsYXRlci4gKi88YnI+LSAqYnVmX2FkZHIgPSBOVUxMOzxicj4tIHJldHVybiB3cml0ZV90 b3RhbDs8YnI+KyAvKiBXaWxsIGJlIGZyZWVkIGFzIHdob2xlIGNodW5rIGxhdGVyLiAqLzxicj4r ICpidWZfYWRkciA9IE5VTEw7PGJyPisgcmV0dXJuIHdyaXRlX3RvdGFsOzxicj4mbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt9PGJyPiZuYnNwOzxicj4mbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtlcnJubyA9IDA7PGJyPkBAIC0xMzksMTYg KzEzOSwyMzYgQEAgc3RhdGljIHNpemVfdCBidWZmZXJfd3JpdGVyX2RlZmF1bHQoY29uc3Qgdm9p ZCAqKmJ1Zl9hZGRyLCBzaXplX3QgbGVuLDxicj4mbmJzcDsvKiBEZWZhdWx0IG9uIHN0b3AgY2Fs bGJhY2suIEp1c3QgY2xvc2UgdGhlIGNvcnJlc3BvbmRpbmcgZGVzY3JpcHRvci4gKi88YnI+Jm5i c3A7c3RhdGljIGludCBvbl9zdG9wX2NiX2RlZmF1bHQodm9pZCAqb3B0LCB1aW50OF90ICpidWYp PGJyPiZuYnNwO3s8YnI+LSBzdHJ1Y3QgcHJvZmlsZV9jdHggKmN0eCA9IG9wdDs8YnI+LSBjb25z dCBpbnQgZmQgPSBjdHgtJmd0O2ZkOzxicj4rIHN0cnVjdCBwcm9maWxlX2N0eCAqY3R4ID0gTlVM TDs8YnI+KyBpbnQgZmQgPSAwOzxicj4rPGJyPisgaWYgKG9wdCA9PSBOVUxMKSB7PGJyPisgLyog Tm90aGluZyB0byBkby4gKi88YnI+KyByZXR1cm4gMDs8YnI+KyB9PGJyPis8YnI+KyBjdHggPSBv cHQ7PGJyPisgZmQgPSBjdHgtJmd0O2ZkOzxicj4mbmJzcDsmbmJzcDsmbmJzcDtVTlVTRUQoYnVm KTs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7bGpfbWVtX2ZyZWUoY3R4LSZndDtnLCBjdHgsIHNpemVv ZigqY3R4KSk7PGJyPiZuYnNwOyZuYnNwOyZuYnNwO3JldHVybiBjbG9zZShmZCk7PGJyPiZuYnNw O308YnI+Jm5ic3A7PGJyPisvKiAtLS0tLSBtaXNjLnN5c3Byb2YgbW9kdWxlIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi88YnI+Kzxicj4rI2RlZmluZSBM SkxJQl9NT0RVTEVfbWlzY19zeXNwcm9mPGJyPis8YnI+Ky8qIFRoZSBkZWZhdWx0IHByb2ZpbGlu ZyBpbnRlcnZhbCBlcXVhbHMgdG8gMTEgbXMuICovPGJyPisjZGVmaW5lIFNZU1BST0ZfREVGQVVM VF9JTlRFUlZBTCAxMDxicj4rI2RlZmluZSBTWVNQUk9GX0RFRkFVTFRfT1VUUFVUICJzeXNwcm9m LmJpbiI8YnI+Kzxicj4raW50IHNldF9vdXRwdXRfcGF0aChjb25zdCBjaGFyICpwYXRoLCBzdHJ1 Y3QgbHVhbV9zeXNwcm9mX29wdGlvbnMgKm9wdCkgezxicj4rIHN0cnVjdCBwcm9maWxlX2N0eCAq Y3R4ID0gb3B0LSZndDtjdHg7PGJyPisgaW50IGZkID0gMDs8YnI+KyBsdWFfYXNzZXJ0KHBhdGgg IT0gTlVMTCk7PGJyPisgZmQgPSBvcGVuKHBhdGgsIE9fQ1JFQVQgfCBPX1dST05MWSB8IE9fVFJV TkMsIDA2NDQpOzxicj4rIGlmKGZkID09IC0xKSB7PGJyPisgcmV0dXJuIFNZU1BST0ZfRVJSSU87 PGJyPisgfTxicj4rIGN0eC0mZ3Q7ZmQgPSBmZDs8YnI+KyByZXR1cm4gU1lTUFJPRl9TVUNDRVNT Ozxicj4rfTxicj4rPGJyPitpbnQgcGFyc2Vfc3lzcHJvZl9vcHRzKGx1YV9TdGF0ZSAqTCwgc3Ry dWN0IGx1YW1fc3lzcHJvZl9vcHRpb25zICpvcHQsIGludCBpZHgpIHs8YnI+KyBHQ3RhYiAqb3B0 aW9ucyA9IGxqX2xpYl9jaGVja3RhYihMLCBpZHgpOzxicj4rPGJyPisgLyogR2V0IHByb2ZpbGlu ZyBtb2RlLiAqLzxicj4rIHs8YnI+KyBjb25zdCBjaGFyICptb2RlID0gTlVMTDs8YnI+Kzxicj4r IGNUVmFsdWUgKm1vZGVfb3B0ID0gbGpfdGFiX2dldHN0cihvcHRpb25zLCBsal9zdHJfbmV3bGl0 KEwsICJtb2RlIikpOzxicj4rIGlmICghbW9kZV9vcHQgfHwgIXR2aXNzdHIobW9kZV9vcHQpKSB7 PGJyPisgcmV0dXJuIFNZU1BST0ZfRVJSVVNFOzxicj4rIH08YnI+Kzxicj4rIG1vZGUgPSBzdHJW ZGF0YShtb2RlX29wdCk7PGJyPisgaWYgKG1vZGVbMV0gIT0gJ1wwJyk8YnI+KyByZXR1cm4gU1lT UFJPRl9FUlJVU0U7PGJyPis8YnI+KyBzd2l0Y2ggKCptb2RlKSB7PGJyPisgY2FzZSAnRCc6PGJy Pisgb3B0LSZndDttb2RlID0gTFVBTV9TWVNQUk9GX0RFRkFVTFQ7PGJyPisgYnJlYWs7PGJyPisg Y2FzZSAnTCc6PGJyPisgb3B0LSZndDttb2RlID0gTFVBTV9TWVNQUk9GX0xFQUY7PGJyPisgYnJl YWs7PGJyPisgY2FzZSAnQyc6PGJyPisgb3B0LSZndDttb2RlID0gTFVBTV9TWVNQUk9GX0NBTExH UkFQSDs8YnI+KyBicmVhazs8YnI+KyBkZWZhdWx0Ojxicj4rIHJldHVybiBTWVNQUk9GX0VSUlVT RTs8YnI+KyB9PGJyPisgfTxicj4rPGJyPisgLyogR2V0IHByb2ZpbGluZyBpbnRlcnZhbC4gKi88 YnI+KyB7PGJyPisgY1RWYWx1ZSAqaW50ZXJ2YWwgPSBsal90YWJfZ2V0c3RyKG9wdGlvbnMsIGxq X3N0cl9uZXdsaXQoTCwgImludGVydmFsIikpOzxicj4rIG9wdC0mZ3Q7aW50ZXJ2YWwgPSBTWVNQ Uk9GX0RFRkFVTFRfSU5URVJWQUw7PGJyPisgaWYgKGludGVydmFsICZhbXA7JmFtcDsgdHZpc251 bShpbnRlcnZhbCkpIHs8YnI+KyBpbnQzMl90IHNpZ25lZF9pbnRlcnZhbCA9IG51bWJlclZpbnQo aW50ZXJ2YWwpOzxicj4rIGlmIChzaWduZWRfaW50ZXJ2YWwgJmx0OyAxKTxicj4rIHJldHVybiBT WVNQUk9GX0VSUlVTRTs8YnI+KyBvcHQtJmd0O2ludGVydmFsID0gc2lnbmVkX2ludGVydmFsOzxi cj4rIH08YnI+KyB9PGJyPis8YnI+KyAvKiBHZXQgb3V0cHV0IHBhdGguICovPGJyPisgaWYgKG9w dC0mZ3Q7bW9kZSAhPSBMVUFNX1NZU1BST0ZfREVGQVVMVCk8YnI+KyB7PGJyPisgY29uc3QgY2hh ciAqcGF0aCA9IE5VTEw7PGJyPisgc3RydWN0IHByb2ZpbGVfY3R4ICpjdHggPSBOVUxMOzxicj4r IGludCBzdGF0dXMgPSAwOzxicj4rPGJyPisgY1RWYWx1ZSAqcGF0aHR2ID0gbGpfdGFiX2dldHN0 cihvcHRpb25zLCBsal9zdHJfbmV3bGl0KEwsICJwYXRoIikpOzxicj4rIGlmICghcGF0aHR2KTxi cj4rIHBhdGggPSBTWVNQUk9GX0RFRkFVTFRfT1VUUFVUOzxicj4rIGVsc2UgaWYgKCF0dmlzc3Ry KHBhdGh0dikpPGJyPisgcmV0dXJuIFNZU1BST0ZfRVJSVVNFOzxicj4rIGVsc2U8YnI+KyBwYXRo ID0gc3RyVmRhdGEocGF0aHR2KTs8YnI+Kzxicj4rIGN0eCA9IGxqX21lbV9uZXcoTCwgc2l6ZW9m KCpjdHgpKTs8YnI+KyBjdHgtJmd0O2cgPSBHKEwpOzxicj4rIG9wdC0mZ3Q7Y3R4ID0gY3R4Ozxi cj4rIG9wdC0mZ3Q7YnVmID0gY3R4LSZndDtidWY7PGJyPisgb3B0LSZndDtsZW4gPSBTVFJFQU1f QlVGRkVSX1NJWkU7PGJyPis8YnI+KyBzdGF0dXMgPSBzZXRfb3V0cHV0X3BhdGgocGF0aCwgb3B0 KTs8YnI+KyBpZiAoc3RhdHVzICE9IFNZU1BST0ZfU1VDQ0VTUykgezxicj4rIGxqX21lbV9mcmVl KGN0eC0mZ3Q7ZywgY3R4LCBzaXplb2YoKmN0eCkpOzxicj4rIHJldHVybiBzdGF0dXM7PGJyPisg fTxicj4rIH08YnI+Kzxicj4rIHJldHVybiBTWVNQUk9GX1NVQ0NFU1M7PGJyPit9PGJyPis8YnI+ K2ludCBwYXJzZV9vcHRpb25zKGx1YV9TdGF0ZSAqTCwgc3RydWN0IGx1YW1fc3lzcHJvZl9vcHRp b25zICpvcHQpPGJyPit7PGJyPisgaWYgKGx1YV9nZXR0b3AoTCkgIT0gMSk8YnI+KyByZXR1cm4g U1lTUFJPRl9FUlJVU0U7PGJyPis8YnI+KyBpZiAoIWx1YV9pc3RhYmxlKEwsIDEpKTxicj4rIHJl dHVybiBTWVNQUk9GX0VSUlVTRTs8YnI+Kzxicj4rIHJldHVybiBwYXJzZV9zeXNwcm9mX29wdHMo TCwgb3B0LCAxKTs8YnI+K308YnI+Kzxicj4raW50IHN5c3Byb2ZfZXJyb3IobHVhX1N0YXRlICpM LCBpbnQgc3RhdHVzKTxicj4rezxicj4rIHN3aXRjaCAoc3RhdHVzKSB7PGJyPisgY2FzZSBTWVNQ Uk9GX0VSUlVTRTo8YnI+KyBsdWFfcHVzaG5pbChMKTs8YnI+KyBsdWFfcHVzaHN0cmluZyhMLCBl cnIybXNnKExKX0VSUl9QUk9GX01JU1VTRSkpOzxicj4rIGx1YV9wdXNoaW50ZWdlcihMLCBFSU5W QUwpOzxicj4rIHJldHVybiAzOzxicj4rIGNhc2UgU1lTUFJPRl9FUlJSVU46PGJyPisgbHVhX3B1 c2huaWwoTCk7PGJyPisgbHVhX3B1c2hzdHJpbmcoTCwgZXJyMm1zZyhMSl9FUlJfUFJPRl9JU1JV Tk5JTkcpKTs8YnI+KyBsdWFfcHVzaGludGVnZXIoTCwgRUlOVkFMKTs8YnI+KyByZXR1cm4gMzs8 YnI+KyBjYXNlIFNZU1BST0ZfRVJSU1RPUDo8YnI+KyBsdWFfcHVzaG5pbChMKTs8YnI+KyBsdWFf cHVzaHN0cmluZyhMLCBlcnIybXNnKExKX0VSUl9QUk9GX05PVFJVTk5JTkcpKTs8YnI+KyBsdWFf cHVzaGludGVnZXIoTCwgRUlOVkFMKTs8YnI+KyByZXR1cm4gMzs8YnI+KyBjYXNlIFNZU1BST0Zf RVJSSU86PGJyPisgcmV0dXJuIGx1YUxfZmlsZXJlc3VsdChMLCAwLCBOVUxMKTs8YnI+KyBkZWZh dWx0Ojxicj4rIGx1YV9hc3NlcnQoMCk7PGJyPisgcmV0dXJuIDA7PGJyPisgfTxicj4rfTxicj4r PGJyPisvKiBsb2NhbCByZXMsIGVyciwgZXJybm8gPSBzeXNwcm9mLnN0YXJ0KG9wdGlvbnMpICov PGJyPitMSkxJQl9DRihtaXNjX3N5c3Byb2Zfc3RhcnQpPGJyPit7PGJyPisgaW50IHN0YXR1cyA9 IFNZU1BST0ZfU1VDQ0VTUzs8YnI+Kzxicj4rIHN0cnVjdCBsdWFtX3N5c3Byb2Zfb3B0aW9ucyBv cHQgPSB7fTs8YnI+KyBzdHJ1Y3QgbHVhbV9zeXNwcm9mX2NvbmZpZyBjb25mID0ge307PGJyPis8 YnI+Kzxicj4rIHN0YXR1cyA9IHBhcnNlX29wdGlvbnMoTCwgJmFtcDtvcHQpOzxicj4rIGlmIChM Sl9VTkxJS0VMWShzdGF0dXMgIT0gUFJPRklMRV9TVUNDRVNTKSkgezxicj4rIHJldHVybiBzeXNw cm9mX2Vycm9yKEwsIHN0YXR1cyk7PGJyPisgfTxicj4rPGJyPisgY29uZi53cml0ZXIgPSBidWZm ZXJfd3JpdGVyX2RlZmF1bHQ7PGJyPisgY29uZi5vbl9zdG9wID0gb25fc3RvcF9jYl9kZWZhdWx0 Ozxicj4rIGNvbmYuYmFja3RyYWNlciA9IE5VTEw7PGJyPis8YnI+KyBzdGF0dXMgPSBsdWFNX3N5 c3Byb2ZfY29uZmlndXJlKCZhbXA7Y29uZik7PGJyPisgaWYgKExKX1VOTElLRUxZKHN0YXR1cyAh PSBQUk9GSUxFX1NVQ0NFU1MpKSB7PGJyPisgb25fc3RvcF9jYl9kZWZhdWx0KG9wdC5jdHgsIG9w dC5idWYpOzxicj4rIHJldHVybiBzeXNwcm9mX2Vycm9yKEwsIHN0YXR1cyk7PGJyPisgfTxicj4r PGJyPisgc3RhdHVzID0gbHVhTV9zeXNwcm9mX3N0YXJ0KEwsICZhbXA7b3B0KTs8YnI+KyBpZiAo TEpfVU5MSUtFTFkoc3RhdHVzICE9IFBST0ZJTEVfU1VDQ0VTUykpPGJyPisgLyogQWxsb2NhdGVk IG1lbW9yeSB3aWxsIGJlIGZyZWVkIGluIG9uX3N0b3AgY2FsbGJhY2suICovPGJyPisgcmV0dXJu IHN5c3Byb2ZfZXJyb3IoTCwgc3RhdHVzKTs8YnI+Kzxicj4rIGx1YV9wdXNoYm9vbGVhbihMLCAx KTs8YnI+KyByZXR1cm4gMTs8YnI+K308YnI+Kzxicj4rLyogbG9jYWwgcmVzLCBlcnIsIGVycm5v ID0gcHJvZmlsZS5zeXNwcm9mX3N0b3AoKSAqLzxicj4rTEpMSUJfQ0YobWlzY19zeXNwcm9mX3N0 b3ApPGJyPit7PGJyPisgaW50IHN0YXR1cyA9IGx1YU1fc3lzcHJvZl9zdG9wKEwpOzxicj4rIGlm IChMSl9VTkxJS0VMWShzdGF0dXMgIT0gUFJPRklMRV9TVUNDRVNTKSk8YnI+KyByZXR1cm4gc3lz cHJvZl9lcnJvcihMLCBzdGF0dXMpOzxicj4rPGJyPisgbHVhX3B1c2hib29sZWFuKEwsIDEpOzxi cj4rIHJldHVybiAxOzxicj4rfTxicj4rPGJyPisvKiBsb2NhbCBjb3VudGVycywgZXJyLCBlcnJu byA9IHN5c3Byb2YucmVwb3J0KCkgKi88YnI+K0xKTElCX0NGKG1pc2Nfc3lzcHJvZl9yZXBvcnQp PGJyPit7PGJyPisgc3RydWN0IGx1YW1fc3lzcHJvZl9jb3VudGVycyBjb3VudGVycyA9IHt9Ozxi cj4rIEdDdGFiICpkYXRhX3RhYiA9IE5VTEw7PGJyPisgR0N0YWIgKmNvdW50X3RhYiA9IE5VTEw7 PGJyPis8YnI+KyBpbnQgc3RhdHVzID0gbHVhTV9zeXNwcm9mX3JlcG9ydCgmYW1wO2NvdW50ZXJz KTs8YnI+KyBpZiAoc3RhdHVzICE9IFNZU1BST0ZfU1VDQ0VTUyk8YnI+KyByZXR1cm4gc3lzcHJv Zl9lcnJvcihMLCBzdGF0dXMpOzxicj4rPGJyPisgbHVhX2NyZWF0ZXRhYmxlKEwsIDAsIDMpOzxi cj4rIGRhdGFfdGFiID0gdGFiVihMLSZndDt0b3AgLSAxKTs8YnI+Kzxicj4rIHNldG51bWZpZWxk KEwsIGRhdGFfdGFiLCAic2FtcGxlcyIsIGNvdW50ZXJzLnNhbXBsZXMpOzxicj4rIHNldG51bWZp ZWxkKEwsIGRhdGFfdGFiLCAib3ZlcnJ1bnMiLCBjb3VudGVycy5vdmVycnVucyk7PGJyPis8YnI+ KyBsdWFfY3JlYXRldGFibGUoTCwgMCwgTEpfVk1TVF9fTUFYICsgMSk7PGJyPisgY291bnRfdGFi ID0gdGFiVihMLSZndDt0b3AgLSAxKTs8YnI+Kzxicj4rIHNldG51bWZpZWxkKEwsIGNvdW50X3Rh YiwgIklOVEVSUCIsIGNvdW50ZXJzLnZtc3RfaW50ZXJwKTs8YnI+KyBzZXRudW1maWVsZChMLCBj b3VudF90YWIsICJMRlVOQyIsIGNvdW50ZXJzLnZtc3RfbGZ1bmMpOzxicj4rIHNldG51bWZpZWxk KEwsIGNvdW50X3RhYiwgIkZGVU5DIiwgY291bnRlcnMudm1zdF9mZnVuYyk7PGJyPisgc2V0bnVt ZmllbGQoTCwgY291bnRfdGFiLCAiQ0ZVTkMiLCBjb3VudGVycy52bXN0X2NmdW5jKTs8YnI+KyBz ZXRudW1maWVsZChMLCBjb3VudF90YWIsICJHQyIsIGNvdW50ZXJzLnZtc3RfZ2MpOzxicj4rIHNl dG51bWZpZWxkKEwsIGNvdW50X3RhYiwgIkVYSVQiLCBjb3VudGVycy52bXN0X2V4aXQpOzxicj4r IHNldG51bWZpZWxkKEwsIGNvdW50X3RhYiwgIlJFQ09SRCIsIGNvdW50ZXJzLnZtc3RfcmVjb3Jk KTs8YnI+KyBzZXRudW1maWVsZChMLCBjb3VudF90YWIsICJPUFQiLCBjb3VudGVycy52bXN0X29w dCk7PGJyPisgc2V0bnVtZmllbGQoTCwgY291bnRfdGFiLCAiQVNNIiwgY291bnRlcnMudm1zdF9h c20pOzxicj4rIHNldG51bWZpZWxkKEwsIGNvdW50X3RhYiwgIlRSQUNFIiwgY291bnRlcnMudm1z dF90cmFjZSk7PGJyPis8YnI+KyBsdWFfc2V0ZmllbGQoTCwgLTIsICJ2bXN0YXRlIik7PGJyPis8 YnI+KyByZXR1cm4gMTs8YnI+K308YnI+Kzxicj4mbmJzcDsvKiAtLS0tLSBtaXNjLm1lbXByb2Yg bW9kdWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi88 YnI+Jm5ic3A7PGJyPiZuYnNwOyNkZWZpbmUgTEpMSUJfTU9EVUxFX21pc2NfbWVtcHJvZjxicj4r PGJyPiZuYnNwOy8qIGxvY2FsIHN0YXJ0ZWQsIGVyciwgZXJybm8gPSBtaXNjLm1lbXByb2Yuc3Rh cnQoZm5hbWUpICovPGJyPiZuYnNwO0xKTElCX0NGKG1pc2NfbWVtcHJvZl9zdGFydCk8YnI+Jm5i c3A7ezxicj5AQCAtMTY5LDkgKzM4OSw5IEBAIExKTElCX0NGKG1pc2NfbWVtcHJvZl9zdGFydCk8 YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7b3B0LmxlbiA9IFNUUkVBTV9CVUZGRVJfU0laRTs8YnI+Jm5i c3A7PGJyPiZuYnNwOyZuYnNwOyZuYnNwO2N0eC0mZ3Q7ZyA9IEcoTCk7PGJyPi0gY3R4LSZndDtz dHJlYW0gPSBmb3BlbihmbmFtZSwgIndiIik7PGJyPisgY3R4LSZndDtmZCA9IG9wZW4oZm5hbWUs IE9fQ1JFQVQgfCBPX1dST05MWSB8IE9fVFJVTkMpOzxicj4mbmJzcDs8YnI+LSBpZiAoY3R4LSZn dDtzdHJlYW0gPT0gTlVMTCkgezxicj4rIGlmIChjdHgtJmd0O2ZkID09IC0xKSB7PGJyPiZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2xqX21lbV9mcmVlKGN0eC0mZ3Q7ZywgY3R4LCBzaXpl b2YoKmN0eCkpOzxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXR1cm4gbHVhTF9m aWxlcmVzdWx0KEwsIDAsIGZuYW1lKTs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7fTxicj5AQCAtMjQw LDUgKzQ2MCw3IEBAIExVQUxJQl9BUEkgaW50IGx1YW9wZW5fbWlzYyhzdHJ1Y3QgbHVhX1N0YXRl ICpMKTxicj4mbmJzcDt7PGJyPiZuYnNwOyZuYnNwOyZuYnNwO0xKX0xJQl9SRUcoTCwgTFVBTV9N SVNDTElCTkFNRSwgbWlzYyk7PGJyPiZuYnNwOyZuYnNwOyZuYnNwO0xKX0xJQl9SRUcoTCwgTFVB TV9NSVNDTElCTkFNRSAiLm1lbXByb2YiLCBtaXNjX21lbXByb2YpOzxicj4rIExKX0xJQl9SRUco TCwgTFVBTV9NSVNDTElCTkFNRSAiLnN5c3Byb2YiLCBtaXNjX3N5c3Byb2YpOzxicj4rPGJyPiZu YnNwOyZuYnNwOyZuYnNwO3JldHVybiAxOzxicj4mbmJzcDt9PGJyPmRpZmYgLS1naXQgYS90ZXN0 L3RhcmFudG9vbC10ZXN0cy9taXNjbGliLXN5c3Byb2YtbGFwaS50ZXN0Lmx1YSBiL3Rlc3QvdGFy YW50b29sLXRlc3RzL21pc2NsaWItc3lzcHJvZi1sYXBpLnRlc3QubHVhPGJyPm5ldyBmaWxlIG1v ZGUgMTAwNjQ0PGJyPmluZGV4IDAwMDAwMDAwLi5iNGM5Y2I3Yjxicj4tLS0gL2Rldi9udWxsPGJy PisrKyBiL3Rlc3QvdGFyYW50b29sLXRlc3RzL21pc2NsaWItc3lzcHJvZi1sYXBpLnRlc3QubHVh PGJyPkBAIC0wLDAgKzEsMTE4IEBAPGJyPistLSBTeXNwcm9mIGlzIGltcGxlbWVudGVkIGZvciB4 ODYgYW5kIHg2NCBhcmNoaXRlY3R1cmVzIG9ubHkuPGJyPityZXF1aXJlKCJ1dGlscyIpLnNraXBj b25kKDxicj4rIGppdC5hcmNoIH49ICJ4ODYiIGFuZCBqaXQuYXJjaCB+PSAieDY0Iiw8YnI+KyBq aXQuYXJjaC4uIiBhcmNoaXRlY3R1cmUgaXMgTklZIGZvciBzeXNwcm9mIjxicj4rKTxicj4rPGJy Pitsb2NhbCB0YXAgPSByZXF1aXJlKCJ0YXAiKTxicj4rPGJyPitsb2NhbCB0ZXN0ID0gdGFwLnRl c3QoIm1pc2Mtc3lzcHJvZi1sYXBpIik8YnI+K3Rlc3Q6cGxhbigxNCk8YnI+Kzxicj4raml0Lm9m ZigpPGJyPitqaXQuZmx1c2goKTxicj4rPGJyPitsb2NhbCBidWZyZWFkID0gcmVxdWlyZSgidXRp bHMuYnVmcmVhZCIpPGJyPitsb2NhbCBzeW10YWIgPSByZXF1aXJlKCJ1dGlscy5zeW10YWIiKTxi cj4rPGJyPitsb2NhbCBUTVBfQklORklMRSA9IGFyZ1swXTpnc3ViKCIuKy8oW14vXSspJS50ZXN0 JS5sdWEkIiwgIiUuJTEuc3lzcHJvZmRhdGEudG1wLmJpbiIpPGJyPitsb2NhbCBCQURfUEFUSCA9 IGFyZ1swXTpnc3ViKCIuKy8oW14vXSspJS50ZXN0JS5sdWEkIiwgIiUxL3N5c3Byb2ZkYXRhLnRt cC5iaW4iKTxicj4rPGJyPitsb2NhbCBmdW5jdGlvbiBwYXlsb2FkKCk8YnI+KyBsb2NhbCBmdW5j dGlvbiBmaWIobik8YnI+KyBpZiBuICZsdDs9IDEgdGhlbjxicj4rIHJldHVybiBuPGJyPisgZW5k PGJyPisgcmV0dXJuIGZpYihuIC0gMSkgKyBmaWIobiAtIDIpPGJyPisgZW5kPGJyPisgcmV0dXJu IGZpYigzMik8YnI+K2VuZDxicj4rPGJyPitsb2NhbCBmdW5jdGlvbiBnZW5lcmF0ZV9vdXRwdXQo b3B0cyk8YnI+KyBsb2NhbCByZXMsIGVyciA9IG1pc2Muc3lzcHJvZi5zdGFydChvcHRzKTxicj4r IGFzc2VydChyZXMsIGVycik8YnI+Kzxicj4rIHBheWxvYWQoKTxicj4rPGJyPisgcmVzLGVyciA9 IG1pc2Muc3lzcHJvZi5zdG9wKCk8YnI+KyBhc3NlcnQocmVzLCBlcnIpPGJyPitlbmQ8YnI+Kzxi cj4rbG9jYWwgZnVuY3Rpb24gY2hlY2tfbW9kZShtb2RlLCBpbnRlcnZhbCk8YnI+KyBsb2NhbCBy ZXMgPSBwY2FsbCg8YnI+KyBnZW5lcmF0ZV9vdXRwdXQsPGJyPisgeyBtb2RlID0gbW9kZSwgaW50 ZXJ2YWwgPSBpbnRlcnZhbCwgcGF0aCA9IFRNUF9CSU5GSUxFIH08YnI+KyApPGJyPis8YnI+KyBp ZiBub3QgcmVzIHRoZW48YnI+KyB0ZXN0OmZhaWwobW9kZSAuLiAnIG1vZGUgd2l0aCBpbnRlcnZh bCAnIC4uIGludGVydmFsKTxicj4rIG9zLnJlbW92ZShUTVBfQklORklMRSk8YnI+KyBlbmQ8YnI+ Kzxicj4rIGxvY2FsIHJlYWRlciA9IGJ1ZnJlYWQubmV3KFRNUF9CSU5GSUxFKTxicj4rIHN5bXRh Yi5wYXJzZShyZWFkZXIpPGJyPitlbmQ8YnI+Kzxicj4rLS0gR0VORVJBTDxicj4rPGJyPistLSBX cm9uZyBwcm9maWxpbmcgbW9kZS48YnI+K2xvY2FsIHJlcywgZXJyLCBlcnJubyA9IG1pc2Muc3lz cHJvZi5zdGFydHsgbW9kZSA9ICJBIiB9PGJyPit0ZXN0Om9rKHJlcyA9PSBuaWwgYW5kIGVycjpt YXRjaCgicHJvZmlsZXIgbWlzdXNlIikpPGJyPit0ZXN0Om9rKHR5cGUoZXJybm8pID09ICJudW1i ZXIiKTxicj4rPGJyPistLSBBbHJlYWR5IHJ1bm5pbmcuPGJyPityZXMsIGVyciA9IG1pc2Muc3lz cHJvZi5zdGFydHsgbW9kZSA9ICJEIiB9PGJyPithc3NlcnQocmVzLCBlcnIpPGJyPis8YnI+K3Jl cywgZXJyLCBlcnJubyA9IG1pc2Muc3lzcHJvZi5zdGFydHsgbW9kZSA9ICJEIiB9PGJyPit0ZXN0 Om9rKHJlcyA9PSBuaWwgYW5kIGVycjptYXRjaCgicHJvZmlsZXIgbWlzdXNlIikpPGJyPit0ZXN0 Om9rKHR5cGUoZXJybm8pID09ICJudW1iZXIiKTxicj4rPGJyPityZXMsIGVyciA9IG1pc2Muc3lz cHJvZi5zdG9wKCk8YnI+K2Fzc2VydChyZXMsIGVycik8YnI+Kzxicj4rLS0gTm90IHJ1bm5pbmcu PGJyPityZXMsIGVyciwgZXJybm8gPSBtaXNjLnN5c3Byb2Yuc3RvcCgpPGJyPit0ZXN0Om9rKHJl cyA9PSBuaWwgYW5kIGVycjptYXRjaCgicHJvZmlsZXIgaXMgbm90IHJ1bm5pbmciKSk8YnI+K3Rl c3Q6b2sodHlwZShlcnJubykgPT0gIm51bWJlciIpPGJyPis8YnI+Ky0tIEJhZCBwYXRoLjxicj4r cmVzLCBlcnIsIGVycm5vID0gbWlzYy5zeXNwcm9mLnN0YXJ0KHsgbW9kZSA9ICJDIiwgcGF0aCA9 IEJBRF9QQVRIIH0pPGJyPit0ZXN0Om9rKHJlcyA9PSBuaWwgYW5kIGVycjptYXRjaCgiTm8gc3Vj aCBmaWxlIG9yIGRpcmVjdG9yeSIpKTxicj4rdGVzdDpvayh0eXBlKGVycm5vKSA9PSAibnVtYmVy Iik8YnI+Kzxicj4rLS0gQmFkIGludGVydmFsLjxicj4rcmVzLCBlcnIsIGVycm5vID0gbWlzYy5z eXNwcm9mLnN0YXJ0eyBtb2RlID0gIkMiLCBpbnRlcnZhbCA9IC0xIH08YnI+K3Rlc3Q6b2socmVz ID09IG5pbCBhbmQgZXJyOm1hdGNoKCJwcm9maWxlciBtaXN1c2UiKSk8YnI+K3Rlc3Q6b2sodHlw ZShlcnJubykgPT0gIm51bWJlciIpPGJyPis8YnI+Ky0tIERFRkFVTFQgTU9ERTxicj4rPGJyPitp ZiBub3QgcGNhbGwoZ2VuZXJhdGVfb3V0cHV0LCB7IG1vZGUgPSAiRCIsIGludGVydmFsID0gMTEg fSkgdGhlbjxicj4rIHRlc3Q6ZmFpbCgnYGRlZmF1bHRgIG1vZGUgd2l0aCBpbnRlcnZhbCAxMScp PGJyPitlbmQ8YnI+Kzxicj4rbG9jYWwgcmVwb3J0ID0gbWlzYy5zeXNwcm9mLnJlcG9ydCgpPGJy Pis8YnI+K3Rlc3Q6b2socmVwb3J0LnNhbXBsZXMgJmd0OyAwKTxicj4rdGVzdDpvayhyZXBvcnQu dm1zdGF0ZS5MRlVOQyAmZ3Q7IDApPGJyPit0ZXN0Om9rKHJlcG9ydC52bXN0YXRlLlRSQUNFID09 IDApPGJyPis8YnI+Ky0tIFdpdGggdmVyeSBiaWcgaW50ZXJ2YWwuPGJyPitpZiBub3QgcGNhbGwo Z2VuZXJhdGVfb3V0cHV0LCB7IG1vZGUgPSAiRCIsIGludGVydmFsID0gMTAwMCB9KSB0aGVuPGJy PisgdGVzdDpmYWlsKCdgZGVmYXVsdGAgbW9kZSB3aXRoIGludGVydmFsIDEwMDAnKTxicj4rZW5k PGJyPis8YnI+K3JlcG9ydCA9IG1pc2Muc3lzcHJvZi5yZXBvcnQoKTxicj4rdGVzdDpvayhyZXBv cnQuc2FtcGxlcyA9PSAwKTxicj4rPGJyPistLSBMRUFGIE1PREU8YnI+K2NoZWNrX21vZGUoIkwi LCAxMSk8YnI+Kzxicj4rLS0gQ0FMTCBNT0RFPGJyPitjaGVja19tb2RlKCJDIiwgMTEpPGJyPis8 YnI+K29zLnJlbW92ZShUTVBfQklORklMRSk8YnI+Kzxicj4raml0Lm9uKCk8YnI+K29zLmV4aXQo dGVzdDpjaGVjaygpIGFuZCAwIG9yIDEpPGJyPi0tPGJyPjIuMzUuMTwvZGl2PjwvZGl2PjwvZGl2 PjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2PiZuYnNwOzwvZGl2PjwvQk9EWT48L0hUTUw+Cg== ----ALT--1a7543ECc7E7671c0607a71D2653a0811647457089--