From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from f473.i.mail.ru (f473.i.mail.ru [217.69.138.140]) (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 D5006446439 for ; Thu, 5 Nov 2020 14:07:50 +0300 (MSK) From: =?UTF-8?B?SWx5YSBLb3NhcmV2?= MIME-Version: 1.0 Date: Thu, 05 Nov 2020 14:07:49 +0300 Reply-To: =?UTF-8?B?SWx5YSBLb3NhcmV2?= Message-ID: <1604574469.294782134@f473.i.mail.ru> Content-Type: multipart/alternative; boundary="--ALT--dCbCbE3333AabA6acC8e31a0E78062351604574469" In-Reply-To: <59b0d6c4-acca-db29-1cf8-223841d664bd@tarantool.org> References: <20201023211220.13166-1-i.kosarev@tarantool.org> <59b0d6c4-acca-db29-1cf8-223841d664bd@tarantool.org> Subject: Re: [Tarantool-patches] =?utf-8?q?=5BPATCH_v3=5D_core=3A_introduce_ev?= =?utf-8?q?enly_distributed_int64_random_in_range?= List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?UTF-8?B?VmxhZGlzbGF2IFNocGlsZXZveQ==?= Cc: tarantool-patches@dev.tarantool.org ----ALT--dCbCbE3333AabA6acC8e31a0E78062351604574469 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 CkhpLArCoApUaGFua3MgZm9yIHlvdXIgcmV2aWV3IQrCoApTZW50IHY0IGNvbnNpZGVyaW5nIHRo ZSBjb21tZW50cy4KU29tZSBhbnN3ZXJzIGJlbG93LiAKPtCS0YLQvtGA0L3QuNC6LCAzINC90L7R j9Cx0YDRjyAyMDIwLCAwOjM4ICswMzowMCDQvtGCIFZsYWRpc2xhdiBTaHBpbGV2b3kgPHYuc2hw aWxldm95QHRhcmFudG9vbC5vcmc+Ogo+wqAKPkhpISBUaGFua3MgZm9yIHRoZSBwYXRjaCEKPgo+ QWxtb3N0IGZpbmlzaGVkIQo+Cj5TZWUgNSBjb21tZW50cyBiZWxvdy4KPgo+PiBkaWZmIC0tZ2l0 IGEvc3JjL2xpYi9jb3JlL3JhbmRvbS5jIGIvc3JjL2xpYi9jb3JlL3JhbmRvbS5jCj4+IGluZGV4 IGY0ZmE3NWIxYy4uY2ZjYTJiN2E5IDEwMDY0NAo+PiAtLS0gYS9zcmMvbGliL2NvcmUvcmFuZG9t LmMKPj4gKysrIGIvc3JjL2xpYi9jb3JlL3JhbmRvbS5jCj4+IEBAIC05NywzICsxMDIsODUgQEAg cmFuZDoKPj4gd2hpbGUgKGdlbmVyYXRlZCA8IHNpemUpCj4+IGJ1ZltnZW5lcmF0ZWQrK10gPSBy YW5kKCk7Cj4+IH0KPj4gKwo+PiArdWludDY0X3QKPj4gK3JlYWxfcmFuZG9tKHZvaWQpCj4+ICt7 Cj4+ICsgdWludDY0X3QgcmVzdWx0Owo+PiArIHJhbmRvbV9ieXRlcygoY2hhciAqKSgmcmVzdWx0 KSwgc2l6ZW9mKHJlc3VsdCkpOwo+Cj4xLiBXaHkgZG8geW91IG5lZWQgKCkgYXJvdW5kICZyZXN1 bHQ/ClJpZ2h0LCBubyBuZWVkIGhlcmUsIGNoYW5nZWQgaW4gdjQuCj4KPj4gKyByZXR1cm4gcmVz dWx0Owo+PiArfQo+PiArCj4+ICt1aW50NjRfdCAqCj4+ICt4b3NoaXJvX3N0YXRlKHZvaWQpCj4+ ICt7Cj4+ICsgcmV0dXJuIHN0YXRlOwo+PiArfQo+PiArCj4+ICtzaXplX3QKPj4gK3hvc2hpcm9f c3RhdGVfc2l6ZSh2b2lkKQo+PiArewo+PiArIHJldHVybiBzaXplb2Yoc3RhdGUpIC8gc2l6ZW9m KHN0YXRlWzBdKTsKPj4gK30KPgo+Mi4gT3IgaW5zdGVhZCBvZiB0aGVzZSB0d28gZnVuY3Rpb25z IGl0IGNvdWxkIGJlIHNpbXBsZXIKPnRvIGltcGxlbWVudCB4b3NoaXJvX3N0YXRlX3N0cigpLCB3 aGljaCB3b3VsZCByZXR1cm4KPml0cyA0IHVpbnQ2NCBudW1iZXJzIGFzIHR0X3NwcmludGYoKS4g QW55d2F5IHdlIG5lZWQgdG8KPnByaW50IHRoZSBzdGF0ZSBpbiBhIGh1bWFuIHJlYWRhYmxlIGZv cm1hdC4KT2ssIHJpZ2h0LCBpIHdhbnRlZCB0byBtYWtlIGl0IG1vcmUgbXVsdGktcHVycG9zZSwg YnV0IGFjdHVhbGx5Cmxvb2tzIGxpa2Ugbm8gb25lIG5lZWQgaW50ZXJuYWwgeG9zaGlybyBzdGF0 ZSBvdXQgdGhlcmUuIFNvIHRoZQpzdHJpbmcgd2lsbCBiZSBlbm91Z2ggZm9yIGNhc2VzIHdoZXJl IGl0IGlzIG5lZWRlZCB0byBiZSBwcmludGVkLgpDaGFuZ2VkIGluIHY0Lgo+Cj4+ICsKPj4gK2lu dDY0X3QKPj4gK3JlYWxfcmFuZG9tX2luX3JhbmdlKGludDY0X3QgbWluLCBpbnQ2NF90IG1heCkK Pj4gK3sKPj4gKyBhc3NlcnQobWF4ID49IG1pbik7Cj4+ICsgdWludDY0X3QgcmFuZ2UgPSAodWlu dDY0X3QpbWF4IC0gbWluOwo+Cj4zLiBUaGlzIGlzIFVCLCBpZiBtYXggaXMgbmVnYXRpdmUuClNp Z25lZCB0byB1bnNpZ25lZCBpbnQgY2FzdCBpcyBub3QgVUIuCkhlcmUgaXMgdGhlwqBxdW90ZSBm cm9twqBDOTkgc3RhbmRhcmQgKHNhbWUgaW4gQzExKToKNi4zLjEuMyBTaWduZWQgYW5kIHVuc2ln bmVkIGludGVnZXJzCjEgV2hlbiBhIHZhbHVlIHdpdGggaW50ZWdlciB0eXBlIGlzIGNvbnZlcnRl ZCB0byBhbm90aGVyCmludGVnZXIgdHlwZSBvdGhlciB0aGFuIF9Cb29sLCBpZiB0aGUgdmFsdWUg Y2FuIGJlIHJlcHJlc2VudGVkCmJ5IHRoZSBuZXcgdHlwZSwgaXQgaXMgdW5jaGFuZ2VkLgoyIE90 aGVyd2lzZSwgaWYgdGhlIG5ldyB0eXBlIGlzIHVuc2lnbmVkLCB0aGUgdmFsdWUgaXMgY29udmVy dGVkCmJ5IHJlcGVhdGVkbHkgYWRkaW5nIG9yIHN1YnRyYWN0aW5nIG9uZSBtb3JlIHRoYW4gdGhl IG1heGltdW0gdmFsdWUKdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gdGhlIG5ldyB0eXBlIHVu dGlsIHRoZSB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UKb2bCoHRoZSBuZXcgdHlwZS4KMyBPdGhlcndp c2UsIHRoZSBuZXcgdHlwZSBpcyBzaWduZWQgYW5kIHRoZSB2YWx1ZSBjYW5ub3QgYmUKcmVwcmVz ZW50ZWQgaW4gaXQ7IGVpdGhlciB0aGUgcmVzdWx0IGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQg b3IKYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBzaWduYWwgaXMgcmFpc2VkLgo+Cj4+ICsgdWlu dDY0X3QgbWFzayA9IFVJTlQ2NF9NQVggPj4gYml0X2Nsel91NjQocmFuZ2UgfCAxKTsKPj4gKyB1 aW50NjRfdCByZXN1bHQ7Cj4+ICsgZG8gewo+PiArIHJlc3VsdCA9IHJlYWxfcmFuZG9tKCkgJiBt YXNrOwo+PiArIH0gd2hpbGUgKHJlc3VsdCA+IHJhbmdlKTsKPj4gKyByZXR1cm4gbWluICsgcmVz dWx0Owo+PiArfQo+PiArCj4+ICtpbnQ2NF90Cj4+ICtwc2V1ZG9fcmFuZG9tX2luX3JhbmdlKGlu dDY0X3QgbWluLCBpbnQ2NF90IG1heCkKPj4gK3sKPj4gKyBhc3NlcnQobWF4ID49IG1pbik7Cj4+ ICsgdWludDY0X3QgcmFuZ2UgPSAodWludDY0X3QpbWF4IC0gbWluOwo+PiArIHVpbnQ2NF90IG1h c2sgPSBVSU5UNjRfTUFYID4+IGJpdF9jbHpfdTY0KHJhbmdlIHwgMSk7Cj4+ICsgdWludDY0X3Qg cmVzdWx0Owo+PiArIGRvIHsKPj4gKyByZXN1bHQgPSB4b3NoaXJvX3JhbmRvbSgpICYgbWFzazsK Pj4gKyB9IHdoaWxlIChyZXN1bHQgPiByYW5nZSk7Cj4+ICsgcmV0dXJuIG1pbiArIHJlc3VsdDsK Pj4gK30KPj4gZGlmZiAtLWdpdCBhL3Rlc3QvdW5pdC9yYW5kb20uYyBiL3Rlc3QvdW5pdC9yYW5k b20uYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAuLjNkNzQxNjk4 OAo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL3Rlc3QvdW5pdC9yYW5kb20uYwo+PiBAQCAtMCww ICsxLDQ4IEBACj4+ICsjaW5jbHVkZSA8Y29yZS9yYW5kb20uaD4KPj4gKwo+PiArI2luY2x1ZGUg PHN0ZGlvLmg+Cj4+ICsjaW5jbHVkZSA8YXNzZXJ0Lmg+Cj4+ICsKPj4gKyNpbmNsdWRlICJ1bml0 LmgiCj4+ICsKPj4gK3N0YXRpYyB2b2lkCj4+ICt0ZXN0X3hvc2hpcm9fcmFuZG9tX2luX3Jhbmdl X29uZShpbnQ2NF90IG1pbiwgaW50NjRfdCBtYXgpCj4+ICt7Cj4+ICsgaW50NjRfdCByZXN1bHQg PSBwc2V1ZG9fcmFuZG9tX2luX3JhbmdlKG1pbiwgbWF4KTsKPj4gKyBhc3NlcnQobWluIDw9IHJl c3VsdCAmJiByZXN1bHQgPD0gbWF4KTsKPj4gKyBpZiAobWluID09IG1heCkKPj4gKyBwcmludGYo InBzZXVkb19yYW5kb21faW5fcmFuZ2UoJWxsZCwgJWxsZCkgPSAlbGxkXG4iLAo+PiArIChsb25n IGxvbmcpbWluLCAobG9uZyBsb25nKW1heCwgKGxvbmcgbG9uZylyZXN1bHQpOwo+PiArfQo+Cj40 LiBXaHkgbm8gdGVzdHMgZm9yIHJlYWwgcmFuZG9tPwpNeSBiYWQsIGFkZGVkIGluIHY0Lgo+Cj4+ IGRpZmYgLS1naXQgYS90ZXN0L3VuaXQvc3dpbV90ZXN0X3V0aWxzLmMgYi90ZXN0L3VuaXQvc3dp bV90ZXN0X3V0aWxzLmMKPj4gaW5kZXggOWRiZDI4YTlmLi41OTBjZTk3YTEgMTAwNjQ0Cj4+IC0t LSBhL3Rlc3QvdW5pdC9zd2ltX3Rlc3RfdXRpbHMuYwo+PiArKysgYi90ZXN0L3VuaXQvc3dpbV90 ZXN0X3V0aWxzLmMKPj4gQEAgLTg3NSw3ICs4NzUsMTUgQEAgc3dpbV9ydW5fdGVzdChjb25zdCBj aGFyICpsb2dfZmlsZSwgZmliZXJfZnVuYyB0ZXN0KQo+PiAqIFByaW50IHRoZSBzZWVkIHRvIGJl IGFibGUgdG8gcmVwcm9kdWNlIGEgYnVnIHdpdGggdGhlCj4+ICogc2FtZSBzZWVkLgo+PiAqLwo+ PiAtIHNheV9pbmZvKCJSYW5kb20gc2VlZCA9ICVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKSBz ZWVkKTsKPj4gKyBzYXlfaW5mbygiUmFuZG9tIHNlZWQgPSAlbGx1IiwgKHVuc2lnbmVkIGxvbmcg bG9uZylzZWVkKTsKPj4gKyB1aW50NjRfdCAqc3RhdGUgPSB4b3NoaXJvX3N0YXRlKCk7Cj4+ICsg Y2hhciBzdGF0ZV9idWZbMTAwXSA9ICIiOwo+PiArIGludCBmaWxsZWQgPSAwOwo+PiArIGZvciAo c2l6ZV90IGkgPSAwOyBpIDwgeG9zaGlyb19zdGF0ZV9zaXplKCk7IGkrKykKPj4gKyBmaWxsZWQg Kz0gc25wcmludGYoc3RhdGVfYnVmICsgZmlsbGVkLAo+PiArIHNpemVvZihzdGF0ZV9idWYpIC0g ZmlsbGVkLAo+PiArICIgJWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpc3RhdGVbaV0pOwo+PiAr IHNheV9pbmZvKCJ4b3NoaXJvIHJhbmRvbSBzdGF0ZSA9JXMiLCBzdGF0ZV9idWYpOwo+Cj41LiBz bnByaW50ZigpIHJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgaGF2ZSBiZWVuCj5w cmludGVkIGlmIHRoZSBidWZmZXIgd291bGQgYmUgbG9uZyBlbm91Z2guIEl0IG1lYW5zLCB0aGF0 Cj4ic2l6ZW9mKHN0YXRlX2J1ZikgLSBmaWxsZWQiIG1heSBiZWNvbWUgbmVnYXRpdmUgd2l0aCBz dWNoCj5hY2N1bXVsYXRpb24uIElmIHN0YXRlIHNpemUgd2lsbCBldmVuIGJlY29tZSBiaWdnZXIs Cj5mb3IgZXhhbXBsZS4gQW5kIHNpbmNlIHNucHJpbnRmKCkncyBzZWNvbmQgYXJndW1lbnQgaXMK PnNpemVfdCwgaXQgd2lsbCBvdmVyZmxvdyB0byBhIGh1Z2UgdmFsdWUsIGxlYWRpbmcgdG8gdGhl Cj5zdGFjayBjb3JydXB0aW9uLgo+Cj5CZXR0ZXIgcmV0dXJuIGEgc3RyaW5nIG9uIHR0X3Nwcmlu dGYoKSByaWdodCBmcm9tIHJhbmRvbS5jLAo+c28gYXMgbm90IHRvIGNhcmUgYWJvdXQgc25wcmlu dGYgc3BlY2lmaWNzIGluIHRoZSB0ZXN0cy4KQWxsIHJpZ2h0LCBmaXhlZCBpbiB2NC4KPgo+Pgo+ PiBzdHJ1Y3QgZmliZXIgKm1haW5fZmliZXIgPSBmaWJlcl9uZXcoIm1haW4iLCB0ZXN0KTsKPj4g ZmliZXJfc2V0X2pvaW5hYmxlKG1haW5fZmliZXIsIHRydWUpOwo+PgrCoArCoAotLQpJbHlhIEtv c2FyZXY= ----ALT--dCbCbE3333AabA6acC8e31a0E78062351604574469 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 CjxIVE1MPjxCT0RZPjxkaXY+SGksPC9kaXY+PGRpdj4mbmJzcDs8L2Rpdj48ZGl2PlRoYW5rcyBm b3IgeW91ciByZXZpZXchPC9kaXY+PGRpdj4mbmJzcDs8L2Rpdj48ZGl2PlNlbnQgdjQgY29uc2lk ZXJpbmcgdGhlIGNvbW1lbnRzLjwvZGl2PjxkaXY+U29tZSBhbnN3ZXJzIGJlbG93LjwvZGl2Pjxi bG9ja3F1b3RlIHN0eWxlPSJib3JkZXItbGVmdDoxcHggc29saWQgIzA4NTdBNjsgbWFyZ2luOjEw cHg7IHBhZGRpbmc6MCAwIDAgMTBweDsiPtCS0YLQvtGA0L3QuNC6LCAzINC90L7Rj9Cx0YDRjyAy MDIwLCAwOjM4ICswMzowMCDQvtGCIFZsYWRpc2xhdiBTaHBpbGV2b3kgJmx0O3Yuc2hwaWxldm95 QHRhcmFudG9vbC5vcmcmZ3Q7Ojxicj4mbmJzcDs8ZGl2IGlkPSIiPjxkaXYgY2xhc3M9ImpzLWhl bHBlciBqcy1yZWFkbXNnLW1zZyI+PGRpdj48ZGl2IGlkPSJzdHlsZV8xNjA0MzUzMTI0MDE4NDcz MDg0MF9CT0RZIj5IaSEgVGhhbmtzIGZvciB0aGUgcGF0Y2ghPGJyPjxicj5BbG1vc3QgZmluaXNo ZWQhPGJyPjxicj5TZWUgNSBjb21tZW50cyBiZWxvdy48YnI+PGJyPiZndDsgZGlmZiAtLWdpdCBh L3NyYy9saWIvY29yZS9yYW5kb20uYyBiL3NyYy9saWIvY29yZS9yYW5kb20uYzxicj4mZ3Q7IGlu ZGV4IGY0ZmE3NWIxYy4uY2ZjYTJiN2E5IDEwMDY0NDxicj4mZ3Q7IC0tLSBhL3NyYy9saWIvY29y ZS9yYW5kb20uYzxicj4mZ3Q7ICsrKyBiL3NyYy9saWIvY29yZS9yYW5kb20uYzxicj4mZ3Q7IEBA IC05NywzICsxMDIsODUgQEAgcmFuZDo8YnI+Jmd0OyB3aGlsZSAoZ2VuZXJhdGVkICZsdDsgc2l6 ZSk8YnI+Jmd0OyBidWZbZ2VuZXJhdGVkKytdID0gcmFuZCgpOzxicj4mZ3Q7IH08YnI+Jmd0OyAr PGJyPiZndDsgK3VpbnQ2NF90PGJyPiZndDsgK3JlYWxfcmFuZG9tKHZvaWQpPGJyPiZndDsgK3s8 YnI+Jmd0OyArIHVpbnQ2NF90IHJlc3VsdDs8YnI+Jmd0OyArIHJhbmRvbV9ieXRlcygoY2hhciAq KSgmYW1wO3Jlc3VsdCksIHNpemVvZihyZXN1bHQpKTs8YnI+PGJyPjEuIFdoeSBkbyB5b3UgbmVl ZCAoKSBhcm91bmQgJmFtcDtyZXN1bHQ/PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9ibG9ja3F1 b3RlPjxkaXY+UmlnaHQsIG5vIG5lZWQgaGVyZSwgY2hhbmdlZCBpbiB2NC48L2Rpdj48YmxvY2tx dW90ZSBzdHlsZT0iYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICMwODU3QTY7IG1hcmdpbjoxMHB4OyBw YWRkaW5nOjAgMCAwIDEwcHg7Ij48ZGl2PjxkaXYgY2xhc3M9ImpzLWhlbHBlciBqcy1yZWFkbXNn LW1zZyI+PGRpdj48ZGl2Pjxicj4mZ3Q7ICsgcmV0dXJuIHJlc3VsdDs8YnI+Jmd0OyArfTxicj4m Z3Q7ICs8YnI+Jmd0OyArdWludDY0X3QgKjxicj4mZ3Q7ICt4b3NoaXJvX3N0YXRlKHZvaWQpPGJy PiZndDsgK3s8YnI+Jmd0OyArIHJldHVybiBzdGF0ZTs8YnI+Jmd0OyArfTxicj4mZ3Q7ICs8YnI+ Jmd0OyArc2l6ZV90PGJyPiZndDsgK3hvc2hpcm9fc3RhdGVfc2l6ZSh2b2lkKTxicj4mZ3Q7ICt7 PGJyPiZndDsgKyByZXR1cm4gc2l6ZW9mKHN0YXRlKSAvIHNpemVvZihzdGF0ZVswXSk7PGJyPiZn dDsgK308YnI+PGJyPjIuIE9yIGluc3RlYWQgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpdCBjb3Vs ZCBiZSBzaW1wbGVyPGJyPnRvIGltcGxlbWVudCB4b3NoaXJvX3N0YXRlX3N0cigpLCB3aGljaCB3 b3VsZCByZXR1cm48YnI+aXRzIDQgdWludDY0IG51bWJlcnMgYXMgdHRfc3ByaW50ZigpLiBBbnl3 YXkgd2UgbmVlZCB0bzxicj5wcmludCB0aGUgc3RhdGUgaW4gYSBodW1hbiByZWFkYWJsZSBmb3Jt YXQuPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjxkaXY+T2ssIHJpZ2h0LCBp IHdhbnRlZCB0byBtYWtlIGl0IG1vcmUgbXVsdGktcHVycG9zZSwgYnV0IGFjdHVhbGx5PC9kaXY+ PGRpdj5sb29rcyBsaWtlIG5vIG9uZSBuZWVkIGludGVybmFsIHhvc2hpcm8gc3RhdGUgb3V0IHRo ZXJlLiBTbyB0aGU8L2Rpdj48ZGl2PnN0cmluZyB3aWxsIGJlIGVub3VnaCBmb3IgY2FzZXMgd2hl cmUgaXQgaXMgbmVlZGVkIHRvIGJlIHByaW50ZWQuPC9kaXY+PGRpdj5DaGFuZ2VkIGluIHY0Ljwv ZGl2PjxibG9ja3F1b3RlIHN0eWxlPSJib3JkZXItbGVmdDoxcHggc29saWQgIzA4NTdBNjsgbWFy Z2luOjEwcHg7IHBhZGRpbmc6MCAwIDAgMTBweDsiPjxkaXY+PGRpdiBjbGFzcz0ianMtaGVscGVy IGpzLXJlYWRtc2ctbXNnIj48ZGl2PjxkaXY+PGJyPiZndDsgKzxicj4mZ3Q7ICtpbnQ2NF90PGJy PiZndDsgK3JlYWxfcmFuZG9tX2luX3JhbmdlKGludDY0X3QgbWluLCBpbnQ2NF90IG1heCk8YnI+ Jmd0OyArezxicj4mZ3Q7ICsgYXNzZXJ0KG1heCAmZ3Q7PSBtaW4pOzxicj4mZ3Q7ICsgdWludDY0 X3QgcmFuZ2UgPSAodWludDY0X3QpbWF4IC0gbWluOzxicj48YnI+My4gVGhpcyBpcyBVQiwgaWYg bWF4IGlzIG5lZ2F0aXZlLjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2 PlNpZ25lZCB0byB1bnNpZ25lZCBpbnQgY2FzdCBpcyBub3QgVUIuPC9kaXY+PGRpdj5IZXJlIGlz IHRoZSZuYnNwO3F1b3RlIGZyb20mbmJzcDtDOTkgc3RhbmRhcmQgKHNhbWUgaW4gQzExKTo8L2Rp dj48ZGl2PjYuMy4xLjMgU2lnbmVkIGFuZCB1bnNpZ25lZCBpbnRlZ2VyczwvZGl2PjxkaXY+MSBX aGVuIGEgdmFsdWUgd2l0aCBpbnRlZ2VyIHR5cGUgaXMgY29udmVydGVkIHRvIGFub3RoZXI8L2Rp dj48ZGl2PmludGVnZXIgdHlwZSBvdGhlciB0aGFuIF9Cb29sLCBpZiB0aGUgdmFsdWUgY2FuIGJl IHJlcHJlc2VudGVkPC9kaXY+PGRpdj5ieSB0aGUgbmV3IHR5cGUsIGl0IGlzIHVuY2hhbmdlZC48 L2Rpdj48ZGl2PjIgT3RoZXJ3aXNlLCBpZiB0aGUgbmV3IHR5cGUgaXMgdW5zaWduZWQsIHRoZSB2 YWx1ZSBpcyBjb252ZXJ0ZWQ8L2Rpdj48ZGl2PmJ5IHJlcGVhdGVkbHkgYWRkaW5nIG9yIHN1YnRy YWN0aW5nIG9uZSBtb3JlIHRoYW4gdGhlIG1heGltdW0gdmFsdWU8L2Rpdj48ZGl2PnRoYXQgY2Fu IGJlIHJlcHJlc2VudGVkIGluIHRoZSBuZXcgdHlwZSB1bnRpbCB0aGUgdmFsdWUgaXMgaW4gdGhl IHJhbmdlPC9kaXY+PGRpdj5vZiZuYnNwO3RoZSBuZXcgdHlwZS48L2Rpdj48ZGl2PjMgT3RoZXJ3 aXNlLCB0aGUgbmV3IHR5cGUgaXMgc2lnbmVkIGFuZCB0aGUgdmFsdWUgY2Fubm90IGJlPC9kaXY+ PGRpdj5yZXByZXNlbnRlZCBpbiBpdDsgZWl0aGVyIHRoZSByZXN1bHQgaXMgaW1wbGVtZW50YXRp b24tZGVmaW5lZCBvcjwvZGl2PjxkaXY+YW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBzaWduYWwg aXMgcmFpc2VkLjwvZGl2PjxibG9ja3F1b3RlIHN0eWxlPSJib3JkZXItbGVmdDoxcHggc29saWQg IzA4NTdBNjsgbWFyZ2luOjEwcHg7IHBhZGRpbmc6MCAwIDAgMTBweDsiPjxkaXY+PGRpdiBjbGFz cz0ianMtaGVscGVyIGpzLXJlYWRtc2ctbXNnIj48ZGl2PjxkaXY+PGJyPiZndDsgKyB1aW50NjRf dCBtYXNrID0gVUlOVDY0X01BWCAmZ3Q7Jmd0OyBiaXRfY2x6X3U2NChyYW5nZSB8IDEpOzxicj4m Z3Q7ICsgdWludDY0X3QgcmVzdWx0Ozxicj4mZ3Q7ICsgZG8gezxicj4mZ3Q7ICsgcmVzdWx0ID0g cmVhbF9yYW5kb20oKSAmYW1wOyBtYXNrOzxicj4mZ3Q7ICsgfSB3aGlsZSAocmVzdWx0ICZndDsg cmFuZ2UpOzxicj4mZ3Q7ICsgcmV0dXJuIG1pbiArIHJlc3VsdDs8YnI+Jmd0OyArfTxicj4mZ3Q7 ICs8YnI+Jmd0OyAraW50NjRfdDxicj4mZ3Q7ICtwc2V1ZG9fcmFuZG9tX2luX3JhbmdlKGludDY0 X3QgbWluLCBpbnQ2NF90IG1heCk8YnI+Jmd0OyArezxicj4mZ3Q7ICsgYXNzZXJ0KG1heCAmZ3Q7 PSBtaW4pOzxicj4mZ3Q7ICsgdWludDY0X3QgcmFuZ2UgPSAodWludDY0X3QpbWF4IC0gbWluOzxi cj4mZ3Q7ICsgdWludDY0X3QgbWFzayA9IFVJTlQ2NF9NQVggJmd0OyZndDsgYml0X2Nsel91NjQo cmFuZ2UgfCAxKTs8YnI+Jmd0OyArIHVpbnQ2NF90IHJlc3VsdDs8YnI+Jmd0OyArIGRvIHs8YnI+ Jmd0OyArIHJlc3VsdCA9IHhvc2hpcm9fcmFuZG9tKCkgJmFtcDsgbWFzazs8YnI+Jmd0OyArIH0g d2hpbGUgKHJlc3VsdCAmZ3Q7IHJhbmdlKTs8YnI+Jmd0OyArIHJldHVybiBtaW4gKyByZXN1bHQ7 PGJyPiZndDsgK308YnI+Jmd0OyBkaWZmIC0tZ2l0IGEvdGVzdC91bml0L3JhbmRvbS5jIGIvdGVz dC91bml0L3JhbmRvbS5jPGJyPiZndDsgbmV3IGZpbGUgbW9kZSAxMDA2NDQ8YnI+Jmd0OyBpbmRl eCAwMDAwMDAwMDAuLjNkNzQxNjk4ODxicj4mZ3Q7IC0tLSAvZGV2L251bGw8YnI+Jmd0OyArKysg Yi90ZXN0L3VuaXQvcmFuZG9tLmM8YnI+Jmd0OyBAQCAtMCwwICsxLDQ4IEBAPGJyPiZndDsgKyNp bmNsdWRlICZsdDtjb3JlL3JhbmRvbS5oJmd0Ozxicj4mZ3Q7ICs8YnI+Jmd0OyArI2luY2x1ZGUg Jmx0O3N0ZGlvLmgmZ3Q7PGJyPiZndDsgKyNpbmNsdWRlICZsdDthc3NlcnQuaCZndDs8YnI+Jmd0 OyArPGJyPiZndDsgKyNpbmNsdWRlICJ1bml0LmgiPGJyPiZndDsgKzxicj4mZ3Q7ICtzdGF0aWMg dm9pZDxicj4mZ3Q7ICt0ZXN0X3hvc2hpcm9fcmFuZG9tX2luX3JhbmdlX29uZShpbnQ2NF90IG1p biwgaW50NjRfdCBtYXgpPGJyPiZndDsgK3s8YnI+Jmd0OyArIGludDY0X3QgcmVzdWx0ID0gcHNl dWRvX3JhbmRvbV9pbl9yYW5nZShtaW4sIG1heCk7PGJyPiZndDsgKyBhc3NlcnQobWluICZsdDs9 IHJlc3VsdCAmYW1wOyZhbXA7IHJlc3VsdCAmbHQ7PSBtYXgpOzxicj4mZ3Q7ICsgaWYgKG1pbiA9 PSBtYXgpPGJyPiZndDsgKyBwcmludGYoInBzZXVkb19yYW5kb21faW5fcmFuZ2UoJWxsZCwgJWxs ZCkgPSAlbGxkXG4iLDxicj4mZ3Q7ICsgKGxvbmcgbG9uZyltaW4sIChsb25nIGxvbmcpbWF4LCAo bG9uZyBsb25nKXJlc3VsdCk7PGJyPiZndDsgK308YnI+PGJyPjQuIFdoeSBubyB0ZXN0cyBmb3Ig cmVhbCByYW5kb20/PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjxkaXY+TXkg YmFkLCBhZGRlZCBpbiB2NC48L2Rpdj48YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyLWxlZnQ6MXB4 IHNvbGlkICMwODU3QTY7IG1hcmdpbjoxMHB4OyBwYWRkaW5nOjAgMCAwIDEwcHg7Ij48ZGl2Pjxk aXYgY2xhc3M9ImpzLWhlbHBlciBqcy1yZWFkbXNnLW1zZyI+PGRpdj48ZGl2Pjxicj4mZ3Q7IGRp ZmYgLS1naXQgYS90ZXN0L3VuaXQvc3dpbV90ZXN0X3V0aWxzLmMgYi90ZXN0L3VuaXQvc3dpbV90 ZXN0X3V0aWxzLmM8YnI+Jmd0OyBpbmRleCA5ZGJkMjhhOWYuLjU5MGNlOTdhMSAxMDA2NDQ8YnI+ Jmd0OyAtLS0gYS90ZXN0L3VuaXQvc3dpbV90ZXN0X3V0aWxzLmM8YnI+Jmd0OyArKysgYi90ZXN0 L3VuaXQvc3dpbV90ZXN0X3V0aWxzLmM8YnI+Jmd0OyBAQCAtODc1LDcgKzg3NSwxNSBAQCBzd2lt X3J1bl90ZXN0KGNvbnN0IGNoYXIgKmxvZ19maWxlLCBmaWJlcl9mdW5jIHRlc3QpPGJyPiZndDsg KiBQcmludCB0aGUgc2VlZCB0byBiZSBhYmxlIHRvIHJlcHJvZHVjZSBhIGJ1ZyB3aXRoIHRoZTxi cj4mZ3Q7ICogc2FtZSBzZWVkLjxicj4mZ3Q7ICovPGJyPiZndDsgLSBzYXlfaW5mbygiUmFuZG9t IHNlZWQgPSAlbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2VlZCk7PGJyPiZndDsgKyBzYXlf aW5mbygiUmFuZG9tIHNlZWQgPSAlbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzZWVkKTs8YnI+ Jmd0OyArIHVpbnQ2NF90ICpzdGF0ZSA9IHhvc2hpcm9fc3RhdGUoKTs8YnI+Jmd0OyArIGNoYXIg c3RhdGVfYnVmWzEwMF0gPSAiIjs8YnI+Jmd0OyArIGludCBmaWxsZWQgPSAwOzxicj4mZ3Q7ICsg Zm9yIChzaXplX3QgaSA9IDA7IGkgJmx0OyB4b3NoaXJvX3N0YXRlX3NpemUoKTsgaSsrKTxicj4m Z3Q7ICsgZmlsbGVkICs9IHNucHJpbnRmKHN0YXRlX2J1ZiArIGZpbGxlZCw8YnI+Jmd0OyArIHNp emVvZihzdGF0ZV9idWYpIC0gZmlsbGVkLDxicj4mZ3Q7ICsgIiAlbGx1IiwgKHVuc2lnbmVkIGxv bmcgbG9uZylzdGF0ZVtpXSk7PGJyPiZndDsgKyBzYXlfaW5mbygieG9zaGlybyByYW5kb20gc3Rh dGUgPSVzIiwgc3RhdGVfYnVmKTs8YnI+PGJyPjUuIHNucHJpbnRmKCkgcmV0dXJucyBudW1iZXIg b2YgYnl0ZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW48YnI+cHJpbnRlZCBpZiB0aGUgYnVmZmVyIHdv dWxkIGJlIGxvbmcgZW5vdWdoLiBJdCBtZWFucywgdGhhdDxicj4ic2l6ZW9mKHN0YXRlX2J1Zikg LSBmaWxsZWQiIG1heSBiZWNvbWUgbmVnYXRpdmUgd2l0aCBzdWNoPGJyPmFjY3VtdWxhdGlvbi4g SWYgc3RhdGUgc2l6ZSB3aWxsIGV2ZW4gYmVjb21lIGJpZ2dlciw8YnI+Zm9yIGV4YW1wbGUuIEFu ZCBzaW5jZSBzbnByaW50ZigpJ3Mgc2Vjb25kIGFyZ3VtZW50IGlzPGJyPnNpemVfdCwgaXQgd2ls bCBvdmVyZmxvdyB0byBhIGh1Z2UgdmFsdWUsIGxlYWRpbmcgdG8gdGhlPGJyPnN0YWNrIGNvcnJ1 cHRpb24uPGJyPjxicj5CZXR0ZXIgcmV0dXJuIGEgc3RyaW5nIG9uIHR0X3NwcmludGYoKSByaWdo dCBmcm9tIHJhbmRvbS5jLDxicj5zbyBhcyBub3QgdG8gY2FyZSBhYm91dCBzbnByaW50ZiBzcGVj aWZpY3MgaW4gdGhlIHRlc3RzLjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48 ZGl2PkFsbCByaWdodCwgZml4ZWQgaW4gdjQuPC9kaXY+PGJsb2NrcXVvdGUgc3R5bGU9ImJvcmRl ci1sZWZ0OjFweCBzb2xpZCAjMDg1N0E2OyBtYXJnaW46MTBweDsgcGFkZGluZzowIDAgMCAxMHB4 OyI+PGRpdj48ZGl2IGNsYXNzPSJqcy1oZWxwZXIganMtcmVhZG1zZy1tc2ciPjxkaXY+PGRpdj48 YnI+Jmd0Ozxicj4mZ3Q7IHN0cnVjdCBmaWJlciAqbWFpbl9maWJlciA9IGZpYmVyX25ldygibWFp biIsIHRlc3QpOzxicj4mZ3Q7IGZpYmVyX3NldF9qb2luYWJsZShtYWluX2ZpYmVyLCB0cnVlKTs8 YnI+Jmd0OzwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2PiZuYnNwOzxk aXY+Jm5ic3A7PGRpdiBkYXRhLXNpZ25hdHVyZS13aWRnZXQ9ImNvbnRhaW5lciI+PGRpdiBkYXRh LXNpZ25hdHVyZS13aWRnZXQ9ImNvbnRlbnQiPjxkaXY+LS08YnI+SWx5YSBLb3NhcmV2PC9kaXY+ PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9CT0RZPjwvSFRNTD4K ----ALT--dCbCbE3333AabA6acC8e31a0E78062351604574469--