From octave-sources-request at bevo dot che dot wisc dot edu Thu Jan 17 09:20:21 2002 Subject: 3/N-D MArrays From: "G.W.M. Vissers" To: Octave Sources Mailing List Date: Thu, 17 Jan 2002 16:16:14 +0100 (CET) This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime at docserver dot cac dot washington dot edu for more info. ---1367106628-1575818483-1011280574=:12910 Content-Type: TEXT/PLAIN; charset=ISO-8859-1 Content-Transfer-Encoding: 8BIT Hi, I started working on multi-dimensional array support for octave. Attached is a patch against cvs that implements 3-D and N-D element-by-element math operations. The patch includes: * 2 new template classes, MArray3 and MArrayN, that implement element-by-element operations. * insert functions for the Array3 and ArrayN classes. * error functions in MArray-misc.cc for non-conforming MArray3 and MArrayN classes. This is only the very first step towards support for multi-dimensional arrays, it's just a plain extension of the existing MArray classes, but one's got to start somewhere :) Greetings, Gé ---1367106628-1575818483-1011280574=:12910 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="MArray3N.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: MArray 3/N patch Content-Disposition: attachment; filename="MArray3N.patch" ZGlmZiAtTmF1ciBvY3RhdmUvbGlib2N0YXZlL0FycmF5My5jYyBvY3RhdmUt bmV3L2xpYm9jdGF2ZS9BcnJheTMuY2MNCi0tLSBvY3RhdmUvbGlib2N0YXZl L0FycmF5My5jYwlUaHUgSmFuIDE3IDE1OjUwOjM0IDIwMDINCisrKyBvY3Rh dmUtbmV3L2xpYm9jdGF2ZS9BcnJheTMuY2MJV2VkIEphbiAxNiAyMDo1MDo0 NiAyMDAyDQpAQCAtMTU0LDYgKzE1NCwyOSBAQA0KICAgICBkZWxldGUgb2xk X3JlcDsNCiB9DQogDQordGVtcGxhdGUgPGNsYXNzIFQ+DQorQXJyYXkzPFQ+ Jg0KK0FycmF5MzxUPjo6aW5zZXJ0IChjb25zdCBBcnJheTM8VD4mIGEsIGlu dCByLCBpbnQgYywgaW50IHMpDQorew0KKyAgaW50IGFfcm93cyAgID0gYS5y b3dzICgpOw0KKyAgaW50IGFfY29scyAgID0gYS5jb2xzICgpOw0KKyAgaW50 IGFfc2xpY2VzID0gYS5zbGljZXMgKCk7DQorIA0KKyAgaWYgKCAgciA8IDAg fHwgciArIGFfcm93cyA+IHJvd3MgKCkgfHwgYyA8IDAgfHwgYyArIGFfY29s cyA+IGNvbHMgKCkNCisgICAgIHx8IHMgPCAwIHx8IHMgKyBhX3NsaWNlcyA+ IHNsaWNlcyAoKSkNCisgICAgew0KKyAgICAgICgqY3VycmVudF9saWJvY3Rh dmVfZXJyb3JfaGFuZGxlcikgKCJyYW5nZSBlcnJvciBmb3IgaW5zZXJ0Iik7 DQorICAgICAgcmV0dXJuICp0aGlzOw0KKyAgICB9DQorIA0KKyAgZm9yIChp bnQgayA9IDA7IGsgPCBhX3NsaWNlczsgaysrKQ0KKyAgICBmb3IgKGludCBq ID0gMDsgaiA8IGFfY29sczsgaisrKQ0KKyAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgYV9yb3dzOyBpKyspDQorICAgICAgICBlbGVtIChyK2ksIGMraiwg cytrKSA9IGEuZWxlbSAoaSwgaiwgayk7DQorIA0KKyAgcmV0dXJuICp0aGlz Ow0KK30NCisNCiAvKg0KIDs7OyBMb2NhbCBWYXJpYWJsZXM6ICoqKg0KIDs7 OyBtb2RlOiBDKysgKioqDQpkaWZmIC1OYXVyIG9jdGF2ZS9saWJvY3RhdmUv QXJyYXkzLmggb2N0YXZlLW5ldy9saWJvY3RhdmUvQXJyYXkzLmgNCi0tLSBv Y3RhdmUvbGlib2N0YXZlL0FycmF5My5oCVRodSBKYW4gMTcgMTU6NTA6MzQg MjAwMg0KKysrIG9jdGF2ZS1uZXcvbGlib2N0YXZlL0FycmF5My5oCVdlZCBK YW4gMTYgMjA6NTA6NTIgMjAwMg0KQEAgLTk5LDYgKzk5LDggQEANCiAgICAg fQ0KIA0KICAgaW50IGRpbTMgKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGQzOyB9 DQorICANCisgIGludCBzbGljZXMgKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGQz OyB9DQogDQogICAvLyBObyBjaGVja2luZyBvZiBhbnkga2luZCwgZXZlci4N CiANCkBAIC0xNDgsNiArMTUwLDggQEANCiANCiAgIHZvaWQgcmVzaXplIChp bnQgbiwgaW50IG0sIGludCBrKTsNCiAgIHZvaWQgcmVzaXplIChpbnQgbiwg aW50IG0sIGludCBrLCBjb25zdCBUJiB2YWwpOw0KKyAgDQorICBBcnJheTM8 VD4mIGluc2VydCAoY29uc3QgQXJyYXkzPFQ+JiBhLCBpbnQgciwgaW50IGMs IGludCBzKTsNCiANCiAjaWZkZWYgSEVBVllXRUlHSFRfSU5ERVhJTkcNCiAg IHZvaWQgbWF5YmVfZGVsZXRlX2VsZW1lbnRzIChpZHhfdmVjdG9yJiBpLCBp ZHhfdmVjdG9yJiBqLCBpZHhfdmVjdG9yJiBrKTsNCmRpZmYgLU5hdXIgb2N0 YXZlL2xpYm9jdGF2ZS9BcnJheU4uY2Mgb2N0YXZlLW5ldy9saWJvY3RhdmUv QXJyYXlOLmNjDQotLS0gb2N0YXZlL2xpYm9jdGF2ZS9BcnJheU4uY2MJVGh1 IEphbiAxNyAxNTo1MDozNCAyMDAyDQorKysgb2N0YXZlLW5ldy9saWJvY3Rh dmUvQXJyYXlOLmNjCVRodSBKYW4gMTcgMTQ6NTI6MjUgMjAwMg0KQEAgLTMy MCwxMSArMzIwLDEzIEBADQogDQogICBpZiAobiA9PSBkaW1lbnNpb25zLmxl bmd0aCAoKSkNCiAgICAgew0KLSAgICAgIEFycmF5PGludD4gYV9kaW1zID0g YS5kaW1zICgpOw0KKyAgICAgIEFycmF5PGludD4gYV9kaW1zID0gYS5kaW1z ICgpLCBydW5faWR4ID0gYXJyX2lkeDsNCisgICAgICBpbnQgaWRpbTsNCiAN Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykNCisgICAgICBm b3IgKGlkaW0gPSAwOyBpZGltIDwgbjsgaWRpbSsrKQ0KIAl7DQotCSAgaWYg KGFycl9pZHgoaSkgPCAwIHx8IGFycl9pZHgoaSkgKyBhX2RpbXMoaSkgPiBk aW1lbnNpb25zKGkpKQ0KKwkgIGlmICggIGFycl9pZHgoaWRpbSkgPCAwIA0K KyAgICAgICAgICAgICB8fCBhcnJfaWR4KGlkaW0pICsgYV9kaW1zKGlkaW0p ID4gZGltZW5zaW9ucyhpZGltKSkNCiAJICAgIHsNCiAJICAgICAgKCpjdXJy ZW50X2xpYm9jdGF2ZV9lcnJvcl9oYW5kbGVyKQ0KIAkJKCJBcnJheU48VD46 Omluc2VydDogcmFuZ2UgZXJyb3IgZm9yIGluc2VydCIpOw0KQEAgLTMzMiwx NCArMzM0LDE5IEBADQogCSAgICB9DQogCX0NCiANCi0jaWYgMA0KLSAgICAg IC8vIFhYWCBGSVhNRSBYWFggLS0gbmVlZCB0byBjb3B5IGVsZW1lbnRzDQot DQotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhX2NvbHM7IGorKykNCi0J Zm9yIChpbnQgaSA9IDA7IGkgPCBhX3Jvd3M7IGkrKykNCi0JICBlbGVtIChy K2ksIGMraikgPSBhLmVsZW0gKGksIGopOw0KLSNlbmRpZg0KLQ0KKyAgICAg IC8vIFhYWCBGSVhNRSBYWFg6IHRoaXMgaXMgcHJvYmFibHkgdmVyeSBzbG93 Li4uDQorICAgICAgY29uc3QgVCogYV9kYXRhID0gYS5kYXRhICgpOw0KKyAg ICAgIA0KKyAgICAgIGZvciAoaW50IGlkID0gMDsgaWQgPCBhLmxlbmd0aCAo KTsgaWQrKykgew0KKyAgICAgICAgZWxlbSAocnVuX2lkeCkgPSBhX2RhdGFb aWRdOw0KKyAgICAgICAgaWRpbSA9IDA7DQorICAgICAgICBydW5faWR4KGlk aW0pKys7DQorICAgICAgICB3aGlsZSAocnVuX2lkeChpZGltKSA+PSBhX2Rp bXMoaWRpbSkgKyBhcnJfaWR4KGlkaW0pKSB7DQorICAgICAgICAgIHJ1bl9p ZHgoaWRpbSkgPSBhcnJfaWR4KGlkaW0pOw0KKyAgICAgICAgICBpZGltKys7 DQorICAgICAgICAgIHJ1bl9pZHggKGlkaW0pKys7DQorICAgICAgICB9DQor ICAgICAgfQ0KICAgICB9DQogICBlbHNlDQogICAgICgqY3VycmVudF9saWJv Y3RhdmVfZXJyb3JfaGFuZGxlcikNCmRpZmYgLU5hdXIgb2N0YXZlL2xpYm9j dGF2ZS9NQXJyYXktbWlzYy5jYyBvY3RhdmUtbmV3L2xpYm9jdGF2ZS9NQXJy YXktbWlzYy5jYw0KLS0tIG9jdGF2ZS9saWJvY3RhdmUvTUFycmF5LW1pc2Mu Y2MJVGh1IEphbiAxNyAxNTo1MDozNCAyMDAyDQorKysgb2N0YXZlLW5ldy9s aWJvY3RhdmUvTUFycmF5LW1pc2MuY2MJVGh1IEphbiAxNyAxMDowMzo0OCAy MDAyDQpAQCAtMzgsMTIgKzM4LDU3IEBADQogDQogdm9pZA0KIGdyaXBlX25v bmNvbmZvcm1hbnQgKGNvbnN0IGNoYXIgKm9wLCBpbnQgb3AxX25yLCBpbnQg b3AxX25jLA0KLQkJICAgICBpbnQgb3AyX25yLCBpbnQgb3AyX25jKQ0KKyAg ICAgICAgICAgICAgICAgICAgIGludCBvcDJfbnIsIGludCBvcDJfbmMpDQog ew0KICAgKCpjdXJyZW50X2xpYm9jdGF2ZV9lcnJvcl9oYW5kbGVyKQ0KICAg ICAoIiVzOiBub25jb25mb3JtYW50IGFyZ3VtZW50cyAob3AxIGlzICVkeCVk LCBvcDIgaXMgJWR4JWQpIiwNCiAgICAgIG9wLCBvcDFfbnIsIG9wMV9uYywg b3AyX25yLCBvcDJfbmMpOw0KIH0NCisNCit2b2lkDQorZ3JpcGVfbm9uY29u Zm9ybWFudCAoY29uc3QgY2hhciAqb3AsIGludCBvcDFfbnIsIGludCBvcDFf bmMsIGludCBvcDFfbnMsDQorCQkgICAgIGludCBvcDJfbnIsIGludCBvcDJf bmMsIGludCBvcDJfbnMpDQorew0KKyAgKCpjdXJyZW50X2xpYm9jdGF2ZV9l cnJvcl9oYW5kbGVyKQ0KKyAgICAoIiVzOiBub25jb25mb3JtYW50IGFyZ3Vt ZW50cyAob3AxIGlzICVkeCVkeCVkLCBvcDIgaXMgJWR4JWR4JWQpIiwNCisg ICAgIG9wLCBvcDFfbnIsIG9wMV9uYywgb3AxX25zLCBvcDJfbnIsIG9wMl9u Yywgb3AyX25zKTsNCit9DQorDQordm9pZA0KK2dyaXBlX25vbmNvbmZvcm1h bnQgKGNvbnN0IGNoYXIgKm9wLCBjb25zdCBBcnJheTxpbnQ+JiBkaW0xLCAN CisgICAgICAgICAgICAgICAgICAgICBjb25zdCBBcnJheTxpbnQ+JiBkaW0y KQ0KK3sNCisgIGNoYXIgdG1wWzE2XTsNCisgIHN0ZDo6c3RyaW5nIHN0cmQx LCBzdHJkMjsNCisgIA0KKyAgaWYgKGRpbTEubGVuZ3RoICgpKSB7IA0KKyAg ICBzcHJpbnRmICh0bXAsICIlZCIsIGRpbTEoMCkpOw0KKyAgICBzdHJkMS5h cHBlbmQgKHRtcCk7DQorICB9IGVsc2Ugew0KKyAgICBzdHJkMSA9ICI8ZW1w dHk+IjsNCisgIH0NCisgIA0KKyAgaWYgKGRpbTIubGVuZ3RoICgpKSB7DQor ICAgIHNwcmludGYgKHRtcCwgIiVkIiwgZGltMigwKSk7DQorICAgIHN0cmQy LmFwcGVuZCAodG1wKTsNCisgIH0gZWxzZSB7DQorICAgIHN0cmQyID0gIjxl bXB0eT4iOw0KKyAgfQ0KKyAgDQorICBmb3IgKGludCBpZGltMSA9IDE7IGlk aW0xIDwgZGltMS5sZW5ndGggKCk7IGlkaW0xKyspIHsNCisgICAgc3ByaW50 ZiAodG1wLCAieCVkIiwgZGltMShpZGltMSkpOw0KKyAgICBzdHJkMS5hcHBl bmQgKHRtcCk7DQorICB9DQorICBmb3IgKGludCBpZGltMiA9IDE7IGlkaW0y IDwgZGltMi5sZW5ndGggKCk7IGlkaW0yKyspIHsNCisgICAgc3ByaW50ZiAo dG1wLCAieCVkIiwgZGltMihpZGltMikpOw0KKyAgICBzdHJkMi5hcHBlbmQg KHRtcCk7DQorICB9DQorICANCisgICgqY3VycmVudF9saWJvY3RhdmVfZXJy b3JfaGFuZGxlcikNCisgICAgKCIlczogbm9uY29uZm9ybWFudCBhcmd1bWVu dHMgKG9wMSBpcyAlcywgb3AyIGlzICVzKSIsIA0KKyAgICAgb3AsIHN0cmQx LmRhdGEgKCksIHN0cmQyLmRhdGEgKCkpOw0KK30NCisNCiANCiAvKg0KIDs7 OyBMb2NhbCBWYXJpYWJsZXM6ICoqKg0KZGlmZiAtTmF1ciBvY3RhdmUvbGli b2N0YXZlL01BcnJheTMuY2Mgb2N0YXZlLW5ldy9saWJvY3RhdmUvTUFycmF5 My5jYw0KLS0tIG9jdGF2ZS9saWJvY3RhdmUvTUFycmF5My5jYwlUaHUgSmFu ICAxIDAxOjAwOjAwIDE5NzANCisrKyBvY3RhdmUtbmV3L2xpYm9jdGF2ZS9N QXJyYXkzLmNjCVRodSBKYW4gMTcgMTU6NDA6NDIgMjAwMg0KQEAgLTAsMCAr MSwxODEgQEANCisjaWYgZGVmaW5lZCAoX19HTlVHX18pDQorI3ByYWdtYSBp bXBsZW1lbnRhdGlvbg0KKyNlbmRpZg0KKyANCisjaWZkZWYgSEFWRV9DT05G SUdfSA0KKyNpbmNsdWRlIDxjb25maWcuaD4NCisjZW5kaWYNCisgDQorI2lu Y2x1ZGUgIk1BcnJheTMuaCINCisjaW5jbHVkZSAibG8tZXJyb3IuaCINCisN CisjaW5jbHVkZSAiTUFycmF5LWRlZnMuaCINCisgDQorLy8gVGhyZWUgZGlt ZW5zaW9uYWwgYXJyYXkgd2l0aCBtYXRoIG9wcy4NCisgDQorLy8gRWxlbWVu dCBieSBlbGVtZW50IE1BcnJheTMgYnkgc2NhbGFyIG9wcy50ZW1wbGF0ZSA8 Y2xhc3MgVD4NCisNCit0ZW1wbGF0ZSA8Y2xhc3MgVD4NCitNQXJyYXkzPFQ+ Jg0KK29wZXJhdG9yICs9IChNQXJyYXkzPFQ+JiBhLCBjb25zdCBUJiBzKQ0K K3sNCisgIERPX1ZTX09QMiAoKz0pDQorICByZXR1cm4gYTsNCit9DQorDQor dGVtcGxhdGUgPGNsYXNzIFQ+DQorTUFycmF5MzxUPiYNCitvcGVyYXRvciAt PSAoTUFycmF5MzxUPiYgYSwgY29uc3QgVCYgcykNCit7DQorICBET19WU19P UDIgKC09KQ0KKyAgcmV0dXJuIGE7DQorfQ0KKw0KKy8vIEVsZW1lbnQgYnkg ZWxlbWVudCBNQXJyYXkzIGJ5IE1BcnJheTMgb3BzLg0KKyANCit0ZW1wbGF0 ZSA8Y2xhc3MgVD4NCitNQXJyYXkzPFQ+Jg0KK29wZXJhdG9yICs9IChNQXJy YXkzPFQ+JiBhLCBjb25zdCBNQXJyYXkzPFQ+JiBiKQ0KK3sNCisgIGludCBy ID0gYS5yb3dzICgpOw0KKyAgaW50IGMgPSBhLmNvbHMgKCk7DQorICBpbnQg cyA9IGEuc2xpY2VzICgpOw0KKyAgaW50IGJyID0gYi5yb3dzICgpOw0KKyAg aW50IGJjID0gYi5jb2xzICgpOw0KKyAgaW50IGJzID0gYi5zbGljZXMgKCk7 DQorICBpZiAociAhPSBiciB8fCBjICE9IGJjIHx8IHMgIT0gYnMpDQorICAg IGdyaXBlX25vbmNvbmZvcm1hbnQgKCJvcGVyYXRvciArPSIsIHIsIGMsIHMs IGJyLCBiYywgYnMpOw0KKyAgZWxzZQ0KKyAgICB7DQorICAgICAgaWYgKHIg PiAwICYmIGMgPiAwICYmIHMgPiAwKQ0KKyAgICAgICAgew0KKyAgICAgICAg ICBpbnQgbCA9IGEubGVuZ3RoICgpOw0KKyAgICAgICAgICBET19WVl9PUDIg KCs9KTsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgcmV0dXJuIGE7DQorfQ0K Kw0KK3RlbXBsYXRlIDxjbGFzcyBUPg0KK01BcnJheTM8VD4mDQorb3BlcmF0 b3IgLT0gKE1BcnJheTM8VD4mIGEsIGNvbnN0IE1BcnJheTM8VD4mIGIpDQor ew0KKyAgaW50IHIgPSBhLnJvd3MgKCk7DQorICBpbnQgYyA9IGEuY29scyAo KTsNCisgIGludCBzID0gYS5zbGljZXMgKCk7DQorICBpbnQgYnIgPSBiLnJv d3MgKCk7DQorICBpbnQgYmMgPSBiLmNvbHMgKCk7DQorICBpbnQgYnMgPSBi LnNsaWNlcyAoKTsNCisgIGlmIChyICE9IGJyIHx8IGMgIT0gYmMgfHwgcyAh PSBicykNCisgICAgZ3JpcGVfbm9uY29uZm9ybWFudCAoIm9wZXJhdG9yIC09 IiwgciwgYywgcywgYnIsIGJjLCBicyk7DQorICBlbHNlDQorICAgIHsNCisg ICAgICBpZiAociA+IDAgJiYgYyA+IDAgJiYgcyA+IDApDQorICAgICAgICB7 DQorICAgICAgICAgIGludCBsID0gYS5sZW5ndGggKCk7DQorICAgICAgICAg IERPX1ZWX09QMiAoLT0pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICByZXR1 cm4gYTsNCit9DQorDQorLy8gRWxlbWVudCBieSBlbGVtZW50IE1BcnJheTMg Ynkgc2NhbGFyIG9wcy4NCisgDQorI2RlZmluZSBNQVJSQVlfQTNTX09QKE9Q KSBcDQorICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gXA0KKyAgTUFycmF5MzxUPiBc DQorICBvcGVyYXRvciBPUCAoY29uc3QgTUFycmF5MzxUPiYgYSwgY29uc3Qg VCYgcykgXA0KKyAgeyBcDQorICAgIE1BcnJheTM8VD4gcmVzdWx0IChhLnJv d3MgKCksIGEuY29scyAoKSwgYS5zbGljZXMgKCkpOyBcDQorICAgIFQgKnIg PSByZXN1bHQuZm9ydHJhbl92ZWMgKCk7IFwNCisgICAgaW50IGwgPSBhLmxl bmd0aCAoKTsgXA0KKyAgICBjb25zdCBUICp2ID0gYS5kYXRhICgpOyBcDQor ICAgIERPX1ZTX09QIChyLCBsLCB2LCBPUCwgcyk7IFwNCisgICAgcmV0dXJu IHJlc3VsdDsgXA0KKyAgfQ0KKyAgIA0KK01BUlJBWV9BM1NfT1AgKCspDQor TUFSUkFZX0EzU19PUCAoLSkNCitNQVJSQVlfQTNTX09QICgqKQ0KK01BUlJB WV9BM1NfT1AgKC8pDQorDQorLy8gRWxlbWVudCBieSBlbGVtZW50IHNjYWxh ciBieSBNQXJyYXkzIG9wcy4NCisgDQorI2RlZmluZSBNQVJSQVlfU0EzX09Q KE9QKSBcDQorICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gXA0KKyAgTUFycmF5MzxU PiBcDQorICBvcGVyYXRvciBPUCAoY29uc3QgVCYgcywgY29uc3QgTUFycmF5 MzxUPiYgYSkgXA0KKyAgeyBcDQorICAgIE1BcnJheTM8VD4gcmVzdWx0IChh LnJvd3MgKCksIGEuY29scyAoKSwgYS5zbGljZXMgKCkpOyBcDQorICAgIFQg KnIgPSByZXN1bHQuZm9ydHJhbl92ZWMgKCk7IFwNCisgICAgaW50IGwgPSBh Lmxlbmd0aCAoKTsgXA0KKyAgICBjb25zdCBUICp2ID0gYS5kYXRhICgpOyBc DQorICAgIERPX1NWX09QIChyLCBsLCBzLCBPUCwgdik7IFwNCisgICAgcmV0 dXJuIHJlc3VsdDsgXA0KKyAgfQ0KKyANCitNQVJSQVlfU0EzX09QICgrKQ0K K01BUlJBWV9TQTNfT1AgKC0pDQorTUFSUkFZX1NBM19PUCAoKikNCitNQVJS QVlfU0EzX09QICgvKQ0KKw0KKy8vIEVsZW1lbnQgYnkgZWxlbWVudCBNQXJy YXkzIGJ5IE1BcnJheTMgb3BzLg0KKyANCisjZGVmaW5lIE1BUlJBWV9BM0Ez X09QKEZDTiwgT1ApIFwNCisgIHRlbXBsYXRlIDxjbGFzcyBUPiBcDQorICBN QXJyYXkzPFQ+IFwNCisgIEZDTiAoY29uc3QgTUFycmF5MzxUPiYgYSwgY29u c3QgTUFycmF5MzxUPiYgYikgXA0KKyAgeyBcDQorICAgIGludCBhX25yID0g YS5yb3dzICgpOyBcDQorICAgIGludCBhX25jID0gYS5jb2xzICgpOyBcDQor ICAgIGludCBhX25zID0gYS5zbGljZXMgKCk7IFwNCisgICAgaW50IGJfbnIg PSBiLnJvd3MgKCk7IFwNCisgICAgaW50IGJfbmMgPSBiLmNvbHMgKCk7IFwN CisgICAgaW50IGJfbnMgPSBiLnNsaWNlcyAoKTsgXA0KKyAgICBpZiAoYV9u ciAhPSBiX25yIHx8IGFfbmMgIT0gYl9uYyB8fCBhX25zICE9IGJfbnMpIFwN CisgICAgICB7IFwNCisgICAgICAgIGdyaXBlX25vbmNvbmZvcm1hbnQgKCNG Q04sIGFfbnIsIGFfbmMsIGFfbnMsIGJfbnIsIGJfbmMsIGJfbnMpOyBcDQor ICAgICAgICByZXR1cm4gTUFycmF5MzxUPiAoKTsgXA0KKyAgICAgIH0gXA0K KyAgICBpZiAoYV9uciA9PSAwIHx8IGFfbmMgPT0gMCB8fCBhX25zID09IDAp IFwNCisgICAgICByZXR1cm4gTUFycmF5MzxUPiAoYV9uciwgYV9uYywgYV9u cyk7IFwNCisgICAgaW50IGwgPSBhLmxlbmd0aCAoKTsgXA0KKyAgICBNQXJy YXkzPFQ+IHJlc3VsdCAoYV9uciwgYV9uYywgYV9ucyk7IFwNCisgICAgVCAq ciA9IHJlc3VsdC5mb3J0cmFuX3ZlYyAoKTsgXA0KKyAgICBjb25zdCBUICp4 ID0gYS5kYXRhICgpOyBcDQorICAgIGNvbnN0IFQgKnkgPSBiLmRhdGEgKCk7 IFwNCisgICAgRE9fVlZfT1AgKHIsIGwsIHgsIE9QLCB5KTsgXA0KKyAgICBy ZXR1cm4gcmVzdWx0OyBcDQorICB9DQorDQorTUFSUkFZX0EzQTNfT1AgKG9w ZXJhdG9yICssICspDQorTUFSUkFZX0EzQTNfT1AgKG9wZXJhdG9yIC0sIC0p DQorTUFSUkFZX0EzQTNfT1AgKHByb2R1Y3QsICAgICopDQorTUFSUkFZX0Ez QTNfT1AgKHF1b3RpZW50LCAgIC8pDQorDQorLy8gVW5hcnkgTUFycmF5MyBv cHMuDQorIA0KK3RlbXBsYXRlIDxjbGFzcyBUPg0KK01BcnJheTM8VD4NCitv cGVyYXRvciArIChjb25zdCBNQXJyYXkzPFQ+JiBhKQ0KK3sNCisgIHJldHVy biBhOw0KK30NCisgDQordGVtcGxhdGUgPGNsYXNzIFQ+DQorTUFycmF5MzxU Pg0KK29wZXJhdG9yIC0gKGNvbnN0IE1BcnJheTM8VD4mIGEpDQorew0KKyAg aW50IGwgPSBhLmxlbmd0aCAoKTsNCisgIE1BcnJheTM8VD4gcmVzdWx0IChh LnJvd3MgKCksIGEuY29scyAoKSwgYS5zbGljZXMgKCkpOw0KKyAgVCAqciA9 IHJlc3VsdC5mb3J0cmFuX3ZlYyAoKTsNCisgIGNvbnN0IFQgKnggPSBhLmRh dGEgKCk7DQorICBORUdfViAociwgbCwgeCk7DQorICByZXR1cm4gcmVzdWx0 Ow0KK30NCisNCisvKg0KKzs7OyBMb2NhbCBWYXJpYWJsZXM6ICoqKg0KKzs7 OyBtb2RlOiBDKysgKioqDQorOzs7IEVuZDogKioqDQorKi8NCmRpZmYgLU5h dXIgb2N0YXZlL2xpYm9jdGF2ZS9NQXJyYXkzLmggb2N0YXZlLW5ldy9saWJv Y3RhdmUvTUFycmF5My5oDQotLS0gb2N0YXZlL2xpYm9jdGF2ZS9NQXJyYXkz LmgJVGh1IEphbiAgMSAwMTowMDowMCAxOTcwDQorKysgb2N0YXZlLW5ldy9s aWJvY3RhdmUvTUFycmF5My5oCVRodSBKYW4gMTcgMTU6NDA6NDIgMjAwMg0K QEAgLTAsMCArMSw2OSBAQA0KKyNpZiBkZWZpbmVkIChfX0dOVUdfXykNCisj cHJhZ21hIGludGVyZmFjZQ0KKyNlbmRpZg0KKyANCisjaWYgIWRlZmluZWQg KG9jdGF2ZV9NQXJyYXkzX2gpDQorI2RlZmluZSBvY3RhdmVfTUFycmF5M19o IDENCisNCisjaW5jbHVkZSAiQXJyYXkzLmgiIA0KKw0KKy8vIFRocmVlIGRp bWVuc2lvbmFsIGFycmF5IHdpdGggbWF0aCBvcHMuDQorIA0KKy8vIEJ1dCBm aXJzdCwgc29tZSBwcmVwcm9jZXNzb3IgYWJ1c2UuLi4NCisgDQorI2luY2x1 ZGUgIk1BcnJheS1kZWZzLmgiDQorDQorTUFSUkFZX09QU19GT1JXQVJEX0RF Q0xTIChNQXJyYXkzKQ0KKyANCit0ZW1wbGF0ZSA8Y2xhc3MgVD4NCitjbGFz cw0KK01BcnJheTMgOiBwdWJsaWMgQXJyYXkzPFQ+DQorew0KK3Byb3RlY3Rl ZDoNCisgDQorICBNQXJyYXkzIChUICpkLCBpbnQgbiwgaW50IG0sIGludCBr KSA6IEFycmF5MzxUPiAoZCwgbiwgbSwgaykgeyB9DQorIA0KK3B1YmxpYzoN CisgDQorICBNQXJyYXkzICh2b2lkKSA6IEFycmF5MzxUPiAoKSB7IH0NCisg DQorICBNQXJyYXkzIChpbnQgbiwgaW50IG0sIGludCBrKSA6IEFycmF5MzxU PiAobiwgbSwgaykgeyB9DQorIA0KKyAgTUFycmF5MyAoaW50IG4sIGludCBt LCBpbnQgaywgY29uc3QgVCYgdmFsKSA6IEFycmF5MzxUPiAobiwgbSwgaywg dmFsKSB7IH0NCisgDQorICBNQXJyYXkzIChjb25zdCBNQXJyYXkzPFQ+JiBh KSA6IEFycmF5MzxUPiAoYSkgeyB9DQorIA0KKyAgTUFycmF5MyAoY29uc3Qg QXJyYXkzPFQ+JiBhKSA6IEFycmF5MzxUPiAoYSkgeyB9DQorIA0KKyAgfk1B cnJheTMgKHZvaWQpIHsgfQ0KKw0KKyAgTUFycmF5MzxUPiYgb3BlcmF0b3Ig PSAoY29uc3QgTUFycmF5MzxUPiYgYSkNCisgICAgew0KKyAgICAgIEFycmF5 MzxUPjo6b3BlcmF0b3IgPSAoYSk7DQorICAgICAgcmV0dXJuICp0aGlzOw0K KyAgICB9DQorIA0KKyAgTUFycmF5MzxUPiYgaW5zZXJ0IChjb25zdCBBcnJh eTM8VD4mIGEsIGludCByLCBpbnQgYywgaW50IHMpDQorICB7DQorICAgIEFy cmF5MzxUPjo6aW5zZXJ0IChhLCByLCBjLCBzKTsNCisgICAgcmV0dXJuICp0 aGlzOw0KKyAgfQ0KKyANCisgIC8vIEN1cnJlbnRseSwgdGhlIE9QUyBmdW5j dGlvbnMgZG9uJ3QgbmVlZCB0byBiZSBmcmllbmRzLCBidXQgdGhhdA0KKyAg Ly8gbWF5IGNoYW5nZS4NCisgDQorICAvLyBNQVJSQVlfT1BTX0ZSSUVORF9E RUNMUyAoTUFycmF5MykNCit9Ow0KKw0KKyANCitleHRlcm4gdm9pZA0KK2dy aXBlX25vbmNvbmZvcm1hbnQgKGNvbnN0IGNoYXIgKm9wLCBpbnQgb3AxX25y LCBpbnQgb3AxX25jLCBpbnQgb3AxX25zLA0KKyAgICAgICAgICAgICAgICAg ICAgIGludCBvcDJfbnIsIGludCBvcDJfbmMsIGludCBvcDJfbnMpOw0KKyAN CisjZW5kaWYNCisgDQorLyoNCis7OzsgTG9jYWwgVmFyaWFibGVzOiAqKioN Cis7OzsgbW9kZTogQysrICoqKg0KKzs7OyBFbmQ6ICoqKg0KKyovDQpkaWZm IC1OYXVyIG9jdGF2ZS9saWJvY3RhdmUvTUFycmF5Ti5jYyBvY3RhdmUtbmV3 L2xpYm9jdGF2ZS9NQXJyYXlOLmNjDQotLS0gb2N0YXZlL2xpYm9jdGF2ZS9N QXJyYXlOLmNjCVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MA0KKysrIG9jdGF2 ZS1uZXcvbGlib2N0YXZlL01BcnJheU4uY2MJVGh1IEphbiAxNyAxNTo0MDo0 MiAyMDAyDQpAQCAtMCwwICsxLDE4OSBAQA0KKyNpZiBkZWZpbmVkIChfX0dO VUdfXykNCisjcHJhZ21hIGltcGxlbWVudGF0aW9uDQorI2VuZGlmDQorDQor I2lmZGVmIEhBVkVfQ09ORklHX0gNCisjaW5jbHVkZSA8Y29uZmlnLmg+DQor I2VuZGlmDQorDQorI2luY2x1ZGUgIk1BcnJheU4uaCINCisjaW5jbHVkZSAi bG8tZXJyb3IuaCINCisNCisjaW5jbHVkZSAiTUFycmF5LWRlZnMuaCINCisN CisvLyBOLWRpbWVuc2lvbmFsIGFycmF5IHdpdGggbWF0aCBvcHMuDQorDQor Ly8gRWxlbWVudCBieSBlbGVtZW50IE1BcnJheU4gYnkgc2NhbGFyIG9wcy4N CisNCit0ZW1wbGF0ZSA8Y2xhc3MgVD4NCitNQXJyYXlOPFQ+Jg0KK29wZXJh dG9yICs9IChNQXJyYXlOPFQ+JiBhLCBjb25zdCBUJiBzKQ0KK3sNCisgIERP X1ZTX09QMiAoKz0pDQorICByZXR1cm4gYTsNCit9DQorDQordGVtcGxhdGUg PGNsYXNzIFQ+DQorTUFycmF5TjxUPiYNCitvcGVyYXRvciAtPSAoTUFycmF5 TjxUPiYgYSwgY29uc3QgVCYgcykNCit7DQorICBET19WU19PUDIgKC09KQ0K KyAgcmV0dXJuIGE7DQorfQ0KKw0KKy8vIEVsZW1lbnQgYnkgZWxlbWVudCBN QXJyYXlOIGJ5IE1BcnJheU4gb3BzLg0KKw0KK3RlbXBsYXRlIDxjbGFzcyBU Pg0KK01BcnJheU48VD4mDQorb3BlcmF0b3IgKz0gKE1BcnJheU48VD4mIGEs IGNvbnN0IE1BcnJheU48VD4mIGIpDQorew0KKyAgQXJyYXk8aW50PiBkaW1z X2EgPSBhLmRpbXMgKCksIGRpbXNfYiA9IGIuZGltcyAoKTsNCisgIGludCBs ZGltc19hID0gZGltc19hLmxlbmd0aCAoKSwgbGRpbXNfYiA9IGRpbXNfYi5s ZW5ndGggKCk7DQorICBib29sIGRpbXNvayA9IGxkaW1zX2EgPT0gbGRpbXNf YiwgZGltc3BvcyA9IHRydWU7DQorDQorICBmb3IgKGlkaW0gPSAwOyBkaW1z b2sgJiYgaWRpbSA8IGxkaW1zX2E7IGlkaW0rKykgew0KKyAgICBkaW1zb2sg ID0gZGltc29rICYmIGRpbXNfYShpZGltKSA9PSBkaW1zX2IoaWRpbSk7DQor ICAgIGRpbXNwb3MgPSBkaW1zcG9zICYmIGRpbXNfYShpZGltKSA+IDA7DQor ICB9IA0KKyAgDQorICBpZiAoIWRpbXNvaykNCisgICAgZ3JpcGVfbm9uY29u Zm9ybWFudCAoIm9wZXJhdG9yICs9IiwgZGltc19hLCBkaW1zX2IpOw0KKyAg ZWxzZQ0KKyAgICB7DQorICAgICAgaWYgKGRpbXNwb3MpDQorICAgICAgICB7 DQorICAgICAgICAgIGludCBsID0gYS5sZW5ndGggKCk7DQorICAgICAgICAg IERPX1ZWX09QMiAoKz0pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICByZXR1 cm4gYTsNCit9DQorDQordGVtcGxhdGUgPGNsYXNzIFQ+DQorTUFycmF5TjxU PiYNCitvcGVyYXRvciAtPSAoTUFycmF5TjxUPiYgYSwgY29uc3QgTUFycmF5 TjxUPiYgYikNCit7DQorICBBcnJheTxpbnQ+IGRpbXNfYSA9IGEuZGltcyAo KSwgZGltc19iID0gYi5kaW1zICgpOw0KKyAgaW50IGxkaW1zX2EgPSBkaW1z X2EubGVuZ3RoICgpLCBsZGltc19iID0gZGltc19iLmxlbmd0aCAoKTsNCisg IGJvb2wgZGltc29rID0gbGRpbXNfYSA9PSBsZGltc19iLCBkaW1zcG9zID0g dHJ1ZTsNCisNCisgIGZvciAoaW50IGlkaW0gPSAwOyBkaW1zb2sgJiYgaWRp bSA8IGxkaW1zX2E7IGlkaW0rKykgew0KKyAgICBkaW1zb2sgID0gZGltc29r ICYmIGRpbXNfYShpZGltKSA9PSBkaW1zX2IoaWRpbSk7DQorICAgIGRpbXNw b3MgPSBkaW1zcG9zICYmIGRpbXNfYShpZGltKSA+IDA7DQorICB9IA0KKyAg DQorICBpZiAoIWRpbXNvaykNCisgICAgZ3JpcGVfbm9uY29uZm9ybWFudCAo Im9wZXJhdG9yIC09IiwgZGltc19hLCBkaW1zX2IpOw0KKyAgZWxzZQ0KKyAg ICB7DQorICAgICAgaWYgKGRpbXNwb3MpDQorICAgICAgICB7DQorICAgICAg ICAgIGludCBsID0gYS5sZW5ndGggKCk7DQorICAgICAgICAgIERPX1ZWX09Q MiAoLT0pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICByZXR1cm4gYTsNCit9 DQorDQorLy8gRWxlbWVudCBieSBlbGVtZW50IE1BcnJheU4gYnkgc2NhbGFy IG9wcy4NCisgDQorI2RlZmluZSBNQVJSQVlfQU5TX09QKE9QKSBcDQorICB0 ZW1wbGF0ZSA8Y2xhc3MgVD4gXA0KKyAgTUFycmF5TjxUPiBcDQorICBvcGVy YXRvciBPUCAoY29uc3QgTUFycmF5TjxUPiYgYSwgY29uc3QgVCYgcykgXA0K KyAgeyBcDQorICAgIE1BcnJheU48VD4gcmVzdWx0IChhLmRpbXMgKCkpOyBc DQorICAgIFQgKnIgPSByZXN1bHQuZm9ydHJhbl92ZWMgKCk7IFwNCisgICAg aW50IGwgPSBhLmxlbmd0aCAoKTsgXA0KKyAgICBjb25zdCBUICp2ID0gYS5k YXRhICgpOyBcDQorICAgIERPX1ZTX09QIChyLCBsLCB2LCBPUCwgcyk7IFwN CisgICAgcmV0dXJuIHJlc3VsdDsgXA0KKyAgfQ0KKyANCitNQVJSQVlfQU5T X09QICgrKQ0KK01BUlJBWV9BTlNfT1AgKC0pDQorTUFSUkFZX0FOU19PUCAo KikNCitNQVJSQVlfQU5TX09QICgvKQ0KKw0KKyANCisvLyBFbGVtZW50IGJ5 IGVsZW1lbnQgc2NhbGFyIGJ5IE1BcnJheU4gb3BzLg0KKyANCisjZGVmaW5l IE1BUlJBWV9TQU5fT1AoT1ApIFwNCisgIHRlbXBsYXRlIDxjbGFzcyBUPiBc DQorICBNQXJyYXlOPFQ+IFwNCisgIG9wZXJhdG9yIE9QIChjb25zdCBUJiBz LCBjb25zdCBNQXJyYXlOPFQ+JiBhKSBcDQorICB7IFwNCisgICAgTUFycmF5 TjxUPiByZXN1bHQgKGEuZGltcyAoKSk7IFwNCisgICAgVCAqciA9IHJlc3Vs dC5mb3J0cmFuX3ZlYyAoKTsgXA0KKyAgICBpbnQgbCA9IGEubGVuZ3RoICgp OyBcDQorICAgIGNvbnN0IFQgKnYgPSBhLmRhdGEgKCk7IFwNCisgICAgRE9f U1ZfT1AgKHIsIGwsIHMsIE9QLCB2KTsgXA0KKyAgICByZXR1cm4gcmVzdWx0 OyBcDQorICB9DQorIA0KK01BUlJBWV9TQU5fT1AgKCspDQorTUFSUkFZX1NB Tl9PUCAoLSkNCitNQVJSQVlfU0FOX09QICgqKQ0KK01BUlJBWV9TQU5fT1Ag KC8pDQorDQorLy8gRWxlbWVudCBieSBlbGVtZW50IE1BcnJheU4gYnkgTUFy cmF5TiBvcHMuDQorIA0KKyNkZWZpbmUgTUFSUkFZX0FOQU5fT1AoRkNOLCBP UCkgXA0KKyAgdGVtcGxhdGUgPGNsYXNzIFQ+IFwNCisgIE1BcnJheU48VD4g XA0KKyAgRkNOIChjb25zdCBNQXJyYXlOPFQ+JiBhLCBjb25zdCBNQXJyYXlO PFQ+JiBiKSBcDQorICB7IFwNCisgICAgQXJyYXk8aW50PiBkaW1zX2EgPSBh LmRpbXMgKCksIGRpbXNfYiA9IGIuZGltcyAoKTsgXA0KKyAgICBpbnQgbGRp bXNfYSA9IGRpbXNfYS5sZW5ndGggKCksIGxkaW1zX2IgPSBkaW1zX2IubGVu Z3RoICgpOyBcDQorICAgIGJvb2wgZGltc29rID0gbGRpbXNfYSA9PSBsZGlt c19iLCBkaW1zcG9zID0gdHJ1ZTsgXA0KKyAgICBmb3IgKGludCBpZGltID0g MDsgZGltc29rICYmIGlkaW0gPCBsZGltc19hOyBpZGltKyspIHsgXA0KKyAg ICAgIGRpbXNvayAgPSBkaW1zb2sgJiYgZGltc19hKGlkaW0pID09IGRpbXNf YihpZGltKTsgXA0KKyAgICAgIGRpbXNwb3MgPSBkaW1zcG9zICYmIGRpbXNf YShpZGltKSA+IDA7IFwNCisgICAgfSBcDQorICAgIGlmICghZGltc29rKSBc DQorICAgICAgeyBcDQorICAgICAgICBncmlwZV9ub25jb25mb3JtYW50ICgj RkNOLCBkaW1zX2EsIGRpbXNfYik7IFwNCisgICAgICAgIHJldHVybiBNQXJy YXlOPFQ+ICgpOyBcDQorICAgICAgfSBcDQorICAgIGlmICghZGltc3Bvcykg XA0KKyAgICAgIHJldHVybiBNQXJyYXlOPFQ+IChkaW1zX2EpOyBcDQorICAg IGludCBsID0gYS5sZW5ndGggKCk7IFwNCisgICAgTUFycmF5TjxUPiByZXN1 bHQgKGRpbXNfYSk7IFwNCisgICAgVCAqciA9IHJlc3VsdC5mb3J0cmFuX3Zl YyAoKTsgXA0KKyAgICBjb25zdCBUICp4ID0gYS5kYXRhICgpOyBcDQorICAg IGNvbnN0IFQgKnkgPSBiLmRhdGEgKCk7IFwNCisgICAgRE9fVlZfT1AgKHIs IGwsIHgsIE9QLCB5KTsgXA0KKyAgICByZXR1cm4gcmVzdWx0OyBcDQorICB9 DQorIA0KK01BUlJBWV9BTkFOX09QIChvcGVyYXRvciArLCArKQ0KK01BUlJB WV9BTkFOX09QIChvcGVyYXRvciAtLCAtKQ0KK01BUlJBWV9BTkFOX09QIChw cm9kdWN0LCAgICAqKQ0KK01BUlJBWV9BTkFOX09QIChxdW90aWVudCwgICAv KQ0KKw0KKy8vIFVuYXJ5IE1BcnJheU4gb3BzLg0KKyANCit0ZW1wbGF0ZSA8 Y2xhc3MgVD4NCitNQXJyYXlOPFQ+DQorb3BlcmF0b3IgKyAoY29uc3QgTUFy cmF5TjxUPiYgYSkNCit7DQorICByZXR1cm4gYTsNCit9DQorIA0KK3RlbXBs YXRlIDxjbGFzcyBUPg0KK01BcnJheU48VD4NCitvcGVyYXRvciAtIChjb25z dCBNQXJyYXlOPFQ+JiBhKQ0KK3sNCisgIGludCBsID0gYS5sZW5ndGggKCk7 DQorICBNQXJyYXlOPFQ+IHJlc3VsdCAoYS5kaW1zICgpKTsNCisgIFQgKnIg PSByZXN1bHQuZm9ydHJhbl92ZWMgKCk7DQorICBjb25zdCBUICp4ID0gYS5k YXRhICgpOw0KKyAgTkVHX1YgKHIsIGwsIHgpOw0KKyAgcmV0dXJuIHJlc3Vs dDsNCit9DQorDQorLyoNCis7OzsgTG9jYWwgVmFyaWFibGVzOiAqKioNCis7 OzsgbW9kZTogQysrICoqKg0KKzs7OyBFbmQ6ICoqKg0KKyovDQpkaWZmIC1O YXVyIG9jdGF2ZS9saWJvY3RhdmUvTUFycmF5Ti5oIG9jdGF2ZS1uZXcvbGli b2N0YXZlL01BcnJheU4uaA0KLS0tIG9jdGF2ZS9saWJvY3RhdmUvTUFycmF5 Ti5oCVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MA0KKysrIG9jdGF2ZS1uZXcv bGlib2N0YXZlL01BcnJheU4uaAlUaHUgSmFuIDE3IDE1OjQwOjQyIDIwMDIN CkBAIC0wLDAgKzEsNzQgQEANCisjaWYgZGVmaW5lZCAoX19HTlVHX18pDQor I3ByYWdtYSBpbnRlcmZhY2UNCisjZW5kaWYNCisgDQorI2lmICFkZWZpbmVk IChvY3RhdmVfTUFycmF5Tl9oKQ0KKyNkZWZpbmUgb2N0YXZlX01BcnJheU5f aCAxDQorIA0KKyNpbmNsdWRlICJBcnJheU4uaCINCisgDQorLy8gTi1kaW1l bnNpb25hbCBhcnJheSB3aXRoIG1hdGggb3BzLg0KKyANCisvLyBCdXQgZmly c3QsIHNvbWUgcHJlcHJvY2Vzc29yIGFidXNlLi4uDQorIA0KKyNpbmNsdWRl ICJNQXJyYXktZGVmcy5oIg0KKyANCitNQVJSQVlfT1BTX0ZPUldBUkRfREVD TFMgKE1BcnJheU4pDQorIA0KK3RlbXBsYXRlIDxjbGFzcyBUPg0KK2NsYXNz DQorTUFycmF5TiA6IHB1YmxpYyBBcnJheU48VD4NCit7DQorcHJvdGVjdGVk Og0KKw0KKyAgTUFycmF5TiAoVCAqZCwgY29uc3QgQXJyYXk8aW50PiYgZGlt cykgOiBBcnJheU48VD4gKGQsIGRpbXMpIHsgfQ0KKyANCitwdWJsaWM6DQor IA0KKyAgTUFycmF5TiAodm9pZCkgOiBBcnJheU48VD4gKCkgeyB9DQorIA0K KyAgTUFycmF5TiAoY29uc3QgQXJyYXk8aW50PiYgZGltcykgOiBBcnJheU48 VD4gKGRpbXMpIHsgfQ0KKyANCisgIE1BcnJheU4gKGNvbnN0IEFycmF5PGlu dD4mIGRpbXMsIGNvbnN0IFQmIHZhbCkgOiBBcnJheU48VD4gKGRpbXMsIHZh bCkgeyB9DQorIA0KKyAgTUFycmF5TiAoY29uc3QgTUFycmF5TjxUPiYgYSkg OiBBcnJheU48VD4gKGEpIHsgfQ0KKyANCisgIE1BcnJheU4gKGNvbnN0IEFy cmF5TjxUPiYgYSkgOiBBcnJheU48VD4gKGEpIHsgfQ0KKyAgDQorICBNQXJy YXlOIChjb25zdCBNQXJyYXlOPFQ+JiBhLCBjb25zdCBBcnJheTxpbnQ+JiBk aW1zKSANCisgICAgOiBBcnJheU48VD4gKGEsIGRpbXMpIHsgfQ0KKyANCisg IE1BcnJheU4gKGNvbnN0IEFycmF5TjxUPiYgYSwgY29uc3QgQXJyYXk8aW50 PiYgZGltcykgDQorICAgIDogQXJyYXlOPFQ+IChhLCBkaW1zKSB7IH0NCisg DQorICB+TUFycmF5TiAodm9pZCkgeyB9DQorIA0KKyAgTUFycmF5TjxUPiYg b3BlcmF0b3IgPSAoY29uc3QgTUFycmF5TjxUPiYgYSkNCisgICAgew0KKyAg ICAgIEFycmF5TjxUPjo6b3BlcmF0b3IgPSAoYSk7DQorICAgICAgcmV0dXJu ICp0aGlzOw0KKyAgICB9DQorICAgDQorICBNQXJyYXlOPFQ+JiBpbnNlcnQg KGNvbnN0IE1BcnJheU48VD4mIGEsIGNvbnN0IEFycmF5PGludD4mIGlkeCkN CisgIHsNCisgICAgQXJyYXlOPFQ+OjppbnNlcnQgKGEsIGlkeCk7DQorICAg IHJldHVybiAqdGhpczsNCisgIH0NCisgDQorICAvLyBDdXJyZW50bHksIHRo ZSBPUFMgZnVuY3Rpb25zIGRvbid0IG5lZWQgdG8gYmUgZnJpZW5kcywgYnV0 IHRoYXQNCisgIC8vIG1heSBjaGFuZ2UuDQorIA0KKyAgLy8gTUFSUkFZX09Q U19GUklFTkRfREVDTFMgKE1BcnJheU4pDQorfTsNCisgDQorZXh0ZXJuIHZv aWQNCitncmlwZV9ub25jb25mb3JtYW50IChjb25zdCBjaGFyICpvcCwgY29u c3QgQXJyYXk8aW50PiYgZGltMSwNCisgICAgICAgICAgICAgICAgICAgICBj b25zdCBBcnJheTxpbnQ+JiBkaW0yKTsNCisgDQorI2VuZGlmDQorIA0KKy8q DQorOzs7IExvY2FsIFZhcmlhYmxlczogKioqDQorOzs7IG1vZGU6IEMrKyAq KioNCis7OzsgRW5kOiAqKioNCisqLw0K ---1367106628-1575818483-1011280574=:12910--