Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ebuAf-0006vQ-6i for pgsql-hackers@arkaria.postgresql.org; Wed, 17 Jan 2018 20:18:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ebuAe-0002sL-PQ for pgsql-hackers@arkaria.postgresql.org; Wed, 17 Jan 2018 20:18:52 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1ebu9i-0007Kl-HW for pgsql-hackers@lists.postgresql.org; Wed, 17 Jan 2018 20:17:55 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by makus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1ebu9d-00072D-VF for pgsql-hackers@postgresql.org; Wed, 17 Jan 2018 20:17:53 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id CDDFC21C1C3F; Wed, 17 Jan 2018 23:17:46 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from zilders-MacBook-Pro.local (unknown [94.29.3.222]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 93FA021C1AA1; Wed, 17 Jan 2018 23:17:46 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1516220266; bh=ET8dAQkUgv09q79iogOWf2k4Chgyzg8UzBOBrLvYLjA=; h=From:Subject:To:Cc:References:Date:In-Reply-To; b=Sy1AXjMdqMzfIZVhy3x7REjB6wwSm5Rzdkz8XiU3AOmlL+tC2EpaQ/72qVJN+4kQ6 YRPWA4/uvtIPLWQVsdeAWQnFrV8/N9H/S8a016sbTc/W6Y3UqpjkGXw9ZFgA95AW3j iFE7QrXGU7zXTJCr5NIYovGQuYatwjLZF/AZMcvE= From: Ildar Musin Subject: Re: General purpose hashing func in pgbench To: Fabien COELHO Cc: pgsql-hackers References: <0e8bd39e-dfcd-2879-f88f-272799ad7ef2@postgrespro.ru> <699225ee-c30c-b22e-4028-415e9eab26b2@postgrespro.ru> <80e9c570-5c49-1a01-f309-3d8d0cbbae42@postgrespro.ru> <38f1503e-7b63-4612-24a9-041af25bb022@postgrespro.ru> <9603bac9-ae5d-36c5-5978-a88bdb700e37@postgrespro.ru> <63f5a6ac-0c5b-8d59-ca8b-fc8e11244a66@postgrespro.ru> <291822a3-0b3a-0b21-c694-c10776f516ac@postgrespro.ru> <6e47c84a-d42a-0e08-1b0d-33e6a6c87778@postgrespro.ru> Message-ID: <960a8096-dde5-5175-7d7c-ef151086cbee@postgrespro.ru> Date: Wed, 17 Jan 2018 23:17:45 +0300 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------FD3D85C890B4089A4A9A30A5" Content-Language: ru List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------FD3D85C890B4089A4A9A30A5 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Hello Fabien, 17/01/2018 10:52, Fabien COELHO пишет: >> Here is a new version of patch. I've splitted it into two parts. The >> first one is almost the same as v4 from [1] with some refactoring. >> The second part introduces random_seed variable as you proposed. > > Patch 1 applies. Compilations fails, there are two "hash_seed" > declared in "pgbench.c". > > Patch 2 applies cleanly on top of the previous patch and compiles, > because the variable is removed... > > If an ":hash_seed" pgbench variable is used, ISTM that there is no > need for a global variable at all, so the two patches are going back > and forth, which is unhelpful. ISTM better to provide just one > combined patch for the feature. > > If the hash_seed variable really needs to be kept, it should be an > "int64" variable, like other pgbench values. > > The len < 1 || len > 2 is checked twice, once in the "switch", on in > an "if" just after the "switch". Once is enough. I totally messed up doing git rebase and didn't double check the code. *facepalm* There shouldn't be hash_seed variable and the second 'len < 1 || len > 2' check. Sorry for that, fixed in the attached patch. > Calling random just usually initializes about 31 bits, so random > should be called 2 or maybe 3 times? Or maybe use the internal getrand > which has 48 pseudorandom bits? Done. I used code from get_random_uint64() as an example. > > For me "random seed" is what is passed to srandom, so the variable > should rather be named hash_seed because there could also be a random > seed (actually, there is in another parallel patch:-). Moreover, this > seed may or may not be random if set, so calling it "random_seed" is > not desirable. > My intention was to introduce seed variable which potentially could be used in different contexts, not only for hash functions. I renamed it to 'hash_seed' for now. But what do you think about naming it simply 'seed' or choosing some other general name? >> I didn't do the executor simplification thing yet because I'm a >> little concerned about inventive users, who may want to change >> random_seed variable in runtime (which is possible since pgbench >> doesn't have read only variables aka constants AFAIK). > > If the user choses to overide hash_seed in their script, it is their > decision, the documentation has only to be clear about :hash_seed > being the default seed. I see no clear reason to work around this > possibility by evaluating the seed at parse time, especially as the > variable may not have its final value yet depending on the option > order. I'd suggest to just use make_variable("hash_seed") for the > default second argument and simplify the executor. That is a great idea, I didn't see that possibility. Done. > > The seed variable is not tested explicitely in the script, you could add > a "hash(5432) == hash(5432, :hash_seed)" for instance. > > It would be nice if an native English speaker could proofread the > documentation text. I'd suggest: "*an* optional seed parameter". "In > case *the* seed...". ":hash_seed". "shared for" -> > "shared by". "following listing" -> "following pgbench script". "few > accounts generates" -> "few accounts generate". > Done as well. > For the document example, I'd use larger values for the random & > modulo, eg 100000000 and 1000000. The drawback is that zipfian does a > costly computation of the generalized harmonic number when the > parameter is lower than 1.0. For cities, the parameter found by Zipf > was 1.07 (says Wikipedia). Maybe use this historical value. Or maybe > use an exponential distribution in the example. > Changed parameter to 1.07. Thanks! -- Ildar Musin Postgres Professional: http://www.postgrespro.com Russian Postgres Company --------------FD3D85C890B4089A4A9A30A5 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="pgbench_hash_v8.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pgbench_hash_v8.patch" ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9wZ2JlbmNoLnNnbWwKaW5kZXggM2RkNDkyYy4uYzMxMjU0YyAxMDA2NDQKLS0t IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Jl Zi9wZ2JlbmNoLnNnbWwKQEAgLTg4Miw2ICs4ODIsMTEgQEAgcGdiZW5jaCA8b3B0aW9uYWw+ IDxyZXBsYWNlYWJsZT5vcHRpb25zPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPHJlcGxh Y2VhYmxlPmQKICAgICAgICA8ZW50cnk+IDxsaXRlcmFsPmNsaWVudF9pZDwvbGl0ZXJhbD4g PC9lbnRyeT4KICAgICAgICA8ZW50cnk+dW5pcXVlIG51bWJlciBpZGVudGlmeWluZyB0aGUg Y2xpZW50IHNlc3Npb24gKHN0YXJ0cyBmcm9tIHplcm8pPC9lbnRyeT4KICAgICAgIDwvcm93 PgorCisgICAgICA8cm93PgorICAgICAgIDxlbnRyeT4gPGxpdGVyYWw+aGFzaF9zZWVkPC9s aXRlcmFsPiA8L2VudHJ5PgorICAgICAgIDxlbnRyeT5yYW5kb20gc2VlZCB1c2VkIGluIGhh c2ggZnVuY3Rpb25zIGJ5IGRlZmF1bHQ8L2VudHJ5PgorICAgICAgPC9yb3c+CiAgICAgIDwv dGJvZHk+CiAgICAgPC90Z3JvdXA+CiAgICA8L3RhYmxlPgpAQCAtMTI0Niw2ICsxMjUxLDI3 IEBAIHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvcmVwbGFjZWFi bGU+IDwvb3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5kCiAgICAgICAgPGVudHJ5PjxsaXRlcmFs PjU8L2xpdGVyYWw+PC9lbnRyeT4KICAgICAgIDwvcm93PgogICAgICAgPHJvdz4KKyAgICAg ICA8ZW50cnk+PGxpdGVyYWw+PGZ1bmN0aW9uPmhhc2goPHJlcGxhY2VhYmxlPmE8L3JlcGxh Y2VhYmxlPiBbLCA8cmVwbGFjZWFibGU+c2VlZDwvcmVwbGFjZWFibGU+IF0gKTwvZnVuY3Rp b24+PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgPGVudHJ5PmludGVnZXI8L2VudHJ5Pgor ICAgICAgIDxlbnRyeT5hbGlhcyBmb3IgPGxpdGVyYWw+aGFzaF9tdXJtdXIyKCk8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+PGxpdGVyYWw+aGFzaCgxMCwgNTQzMik8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+PGxpdGVyYWw+LTU4MTc4NzcwODE3Njg3 MjE2NzY8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgICAgPHJvdz4KKyAg ICAgICA8ZW50cnk+PGxpdGVyYWw+PGZ1bmN0aW9uPmhhc2hfZm52MWEoPHJlcGxhY2VhYmxl PmE8L3JlcGxhY2VhYmxlPiBbLCA8cmVwbGFjZWFibGU+c2VlZDwvcmVwbGFjZWFibGU+IF0g KTwvZnVuY3Rpb24+PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgPGVudHJ5PmludGVnZXI8 L2VudHJ5PgorICAgICAgIDxlbnRyeT48bGl0ZXJhbD5GTlY8L2xpdGVyYWw+IGhhc2g8L2Vu dHJ5PgorICAgICAgIDxlbnRyeT48bGl0ZXJhbD5oYXNoX2ZudjFhKDEwLCA1NDMyKTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgIDxlbnRyeT48bGl0ZXJhbD4tNzc5MzgyOTMzNTM2NTU0 MjE1MzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgPC9yb3c+CisgICAgICA8cm93PgorICAg ICAgIDxlbnRyeT48bGl0ZXJhbD48ZnVuY3Rpb24+aGFzaF9tdXJtdXIyKDxyZXBsYWNlYWJs ZT5hPC9yZXBsYWNlYWJsZT4gWywgPHJlcGxhY2VhYmxlPnNlZWQ8L3JlcGxhY2VhYmxlPiBd ICk8L2Z1bmN0aW9uPjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgIDxlbnRyeT5pbnRlZ2Vy PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+PGxpdGVyYWw+bXVybXVyMjwvbGl0ZXJhbD4gaGFz aDwvZW50cnk+CisgICAgICAgPGVudHJ5PjxsaXRlcmFsPmhhc2hfbXVybXVyMigxMCwgNTQz Mik8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+PGxpdGVyYWw+LTU4MTc4Nzcw ODE3Njg3MjE2NzY8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgICAgPHJv dz4KICAgICAgICA8ZW50cnk+PGxpdGVyYWw+PGZ1bmN0aW9uPmludCg8cmVwbGFjZWFibGU+ eDwvcmVwbGFjZWFibGU+KTwvZnVuY3Rpb24+PC9saXRlcmFsPjwvZW50cnk+CiAgICAgICAg PGVudHJ5PmludGVnZXI8L2VudHJ5PgogICAgICAgIDxlbnRyeT5jYXN0IHRvIGludDwvZW50 cnk+CkBAIC0xNDIzLDYgKzE0NDksMjIgQEAgZih4KSA9IFBISSgyLjAgKiBwYXJhbWV0ZXIg KiAoeCAtIG11KSAvIChtYXggLSBtaW4gKyAxKSkgLwogICAgPC9pdGVtaXplZGxpc3Q+CiAK ICAgPHBhcmE+CisgICAgSGFzaCBmdW5jdGlvbnMgYWNjZXB0cyBhbiBpbnB1dCB2YWx1ZSBh bmQgYW4gb3B0aW9uYWwgc2VlZCBwYXJhbWV0ZXIuIEluIGNhc2UgdGhlIHNlZWQgaXNuJ3Qg cHJvdmlkZWQgPGxpdGVyYWw+aGFzaF9zZWVkPC9saXRlcmFsPiB2YWx1ZSBpcyB1c2VkLiBI YXNoIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIG1vZGlmeSB0aGUg ZGlzdHJpYnV0aW9uIG9mIDxsaXRlcmFsPnJhbmRvbV96aXBmaWFuPC9saXRlcmFsPiBvciA8 bGl0ZXJhbD5yYW5kb21fZXhwb25lbnRpYWw8L2xpdGVyYWw+IGZ1bmN0aW9ucyBpbiBvcmRl ciB0byBvYnRhaW4gc2NhdHRlcmVkIGRpc3RyaWJ1dGlvbi4gVGh1cyB0aGUgZm9sbG93aW5n IHBnYmVuY2ggc2NyaXB0IHNpbXVsYXRlcyBwb3NzaWJsZSByZWFsIHdvcmxkIHdvcmtsb2Fk IHR5cGljYWwgZm9yIHNvY2lhbCBtZWRpYSBhbmQgYmxvZ2dpbmcgcGxhdGZvcm1zIHdoZXJl IGZldyBhY2NvdW50cyBnZW5lcmF0ZSBleGNlc3NpdmUgbG9hZDoKKworPHByb2dyYW1saXN0 aW5nPgorXHNldCByIHJhbmRvbV96aXBmaWFuKDAsIDEwMDAwMDAwMCwgMS4wNykKK1xzZXQg ayBhYnMoaGFzaCg6cikpICUgMTAwMDAwMAorPC9wcm9ncmFtbGlzdGluZz4KKworICAgIElu IHNvbWUgY2FzZXMgc2V2ZXJhbCBkaXN0aW5jdCBkaXN0cmlidXRpb25zIGFyZSBuZWVkZWQg d2hpY2ggZG9uJ3QgY29ycmVsYXRlIHdpdGggZWFjaCBvdGhlciBhbmQgdGhpcyBpcyB3aGVu IGltcGxpY2l0IHNlZWQgcGFyYW1ldGVyIGNvbWVzIGluIGhhbmR5OgorCis8cHJvZ3JhbWxp c3Rpbmc+Citcc2V0IGsxIGFicyhoYXNoKDpyKSwgOmhhc2hfc2VlZCArIDEyMykgJSAxMDAw MDAwCitcc2V0IGsyIGFicyhoYXNoKDpyKSwgOmhhc2hfc2VlZCArIDMyMSkgJSAxMDAwMDAw Cis8L3Byb2dyYW1saXN0aW5nPgorICA8L3BhcmE+CisKKyAgPHBhcmE+CiAgICBBcyBhbiBl eGFtcGxlLCB0aGUgZnVsbCBkZWZpbml0aW9uIG9mIHRoZSBidWlsdC1pbiBUUEMtQi1saWtl CiAgICB0cmFuc2FjdGlvbiBpczoKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL2V4 cHJwYXJzZS55IGIvc3JjL2Jpbi9wZ2JlbmNoL2V4cHJwYXJzZS55CmluZGV4IGUyM2NhNTEu LmI1ZTE1MGYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC9leHBycGFyc2UueQorKysg Yi9zcmMvYmluL3BnYmVuY2gvZXhwcnBhcnNlLnkKQEAgLTE2LDYgKzE2LDEwIEBACiAKICNp bmNsdWRlICJwZ2JlbmNoLmgiCiAKKyNkZWZpbmUgUEdCRU5DSF9OQVJHU19WQVJJQUJMRQko LTEpCisjZGVmaW5lIFBHQkVOQ0hfTkFSR1NfQ0FTRQkJKC0yKQorI2RlZmluZSBQR0JFTkNI X05BUkdTX0hBU0gJCSgtMykKKwogUGdCZW5jaEV4cHIgKmV4cHJfcGFyc2VfcmVzdWx0Owog CiBzdGF0aWMgUGdCZW5jaEV4cHJMaXN0ICptYWtlX2VsaXN0KFBnQmVuY2hFeHByICpleHAs IFBnQmVuY2hFeHByTGlzdCAqbGlzdCk7CkBAIC0yMjYsOSArMjMwLDEzIEBAIG1ha2VfdW9w KHl5c2Nhbl90IHl5c2Nhbm5lciwgY29uc3QgY2hhciAqb3BlcmF0b3IsIFBnQmVuY2hFeHBy ICpleHByKQogLyoKICAqIExpc3Qgb2YgYXZhaWxhYmxlIGZ1bmN0aW9uczoKICAqIC0gZm5h bWU6IGZ1bmN0aW9uIG5hbWUsICIhLi4uIiBmb3Igc3BlY2lhbCBpbnRlcm5hbCBmdW5jdGlv bnMKLSAqIC0gbmFyZ3M6IG51bWJlciBvZiBhcmd1bWVudHMKLSAqCQkJLTEgaXMgYSBzcGVj aWFsIHZhbHVlIGZvciBsZWFzdCAmIGdyZWF0ZXN0IG1lYW5pbmcgI2FyZ3MgPj0gMQotICoJ CQktMiBpcyBmb3IgdGhlICJDQVNFIFdIRU4gLi4uIiBmdW5jdGlvbiwgd2hpY2ggaGFzICNh cmdzID49IDMgYW5kIG9kZAorICogLSBuYXJnczogbnVtYmVyIG9mIGFyZ3VtZW50cy4gU3Bl Y2lhbCBjYXNlczoKKyAqCQkJLSBQR0JFTkNIX05BUkdTX1ZBUklBQkxFIGlzIGEgc3BlY2lh bCB2YWx1ZSBmb3IgbGVhc3QgJiBncmVhdGVzdAorICoJCQkgIG1lYW5pbmcgI2FyZ3MgPj0g MTsKKyAqCQkJLSBQR0JFTkNIX05BUkdTX0NBU0UgaXMgZm9yIHRoZSAiQ0FTRSBXSEVOIC4u LiIgZnVuY3Rpb24sIHdoaWNoCisgKgkJCSAgaGFzICNhcmdzID49IDMgYW5kIG9kZDsKKyAq IAkJCS0gUEdCRU5DSF9OQVJHU19IQVNIIGlzIGZvciBoYXNoIGZ1bmN0aW9ucywgd2hpY2gg aGF2ZSBvbmUgcmVxdWlyZWQKKyAqCQkJICBhbmQgb25lIG9wdGlvbmFsIGFyZ3VtZW50Owog ICogLSB0YWc6IGZ1bmN0aW9uIGlkZW50aWZpZXIgZnJvbSBQZ0JlbmNoRnVuY3Rpb24gZW51 bQogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0CkBAIC0yNTksMTAgKzI2NywxMCBAQCBzdGF0 aWMgY29uc3Qgc3RydWN0CiAJCSJhYnMiLCAxLCBQR0JFTkNIX0FCUwogCX0sCiAJewotCQki bGVhc3QiLCAtMSwgUEdCRU5DSF9MRUFTVAorCQkibGVhc3QiLCBQR0JFTkNIX05BUkdTX1ZB UklBQkxFLCBQR0JFTkNIX0xFQVNUCiAJfSwKIAl7Ci0JCSJncmVhdGVzdCIsIC0xLCBQR0JF TkNIX0dSRUFURVNUCisJCSJncmVhdGVzdCIsIFBHQkVOQ0hfTkFSR1NfVkFSSUFCTEUsIFBH QkVOQ0hfR1JFQVRFU1QKIAl9LAogCXsKIAkJImRlYnVnIiwgMSwgUEdCRU5DSF9ERUJVRwpA QCAtMzQ3LDcgKzM1NSwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0CiAJfSwKIAkvKiAiY2Fz ZSB3aGVuIC4uLiB0aGVuIC4uLiBlbHNlIC4uLiBlbmQiIGNvbnN0cnVjdGlvbiAqLwogCXsK LQkJIiFjYXNlX2VuZCIsIC0yLCBQR0JFTkNIX0NBU0UKKwkJIiFjYXNlX2VuZCIsIFBHQkVO Q0hfTkFSR1NfQ0FTRSwgUEdCRU5DSF9DQVNFCisJfSwKKwl7CisJCSJoYXNoIiwgUEdCRU5D SF9OQVJHU19IQVNILCBQR0JFTkNIX0hBU0hfTVVSTVVSMgorCX0sCisJeworCQkiaGFzaF9t dXJtdXIyIiwgUEdCRU5DSF9OQVJHU19IQVNILCBQR0JFTkNIX0hBU0hfTVVSTVVSMgorCX0s CisJeworCQkiaGFzaF9mbnYxYSIsIFBHQkVOQ0hfTkFSR1NfSEFTSCwgUEdCRU5DSF9IQVNI X0ZOVjFBCisJfSwKKwl7CisJCSJoYXNoIiwgLTMsIFBHQkVOQ0hfSEFTSF9NVVJNVVIyCisJ fSwKKwl7CisJCSJoYXNoX211cm11cjIiLCAtMywgUEdCRU5DSF9IQVNIX01VUk1VUjIKKwl9 LAorCXsKKwkJImhhc2hfZm52MWEiLCAtMywgUEdCRU5DSF9IQVNIX0ZOVjFBCiAJfSwKIAkv KiBrZWVwIGFzIGxhc3QgYXJyYXkgZWxlbWVudCAqLwogCXsKQEAgLTQyMywyOSArNDQ5LDQ5 IEBAIGVsaXN0X2xlbmd0aChQZ0JlbmNoRXhwckxpc3QgKmxpc3QpCiBzdGF0aWMgUGdCZW5j aEV4cHIgKgogbWFrZV9mdW5jKHl5c2Nhbl90IHl5c2Nhbm5lciwgaW50IGZudW1iZXIsIFBn QmVuY2hFeHByTGlzdCAqYXJncykKIHsKKwlpbnQgbGVuID0gZWxpc3RfbGVuZ3RoKGFyZ3Mp OworCiAJUGdCZW5jaEV4cHIgKmV4cHIgPSBwZ19tYWxsb2Moc2l6ZW9mKFBnQmVuY2hFeHBy KSk7CiAKIAlBc3NlcnQoZm51bWJlciA+PSAwKTsKIAotCWlmIChQR0JFTkNIX0ZVTkNUSU9O U1tmbnVtYmVyXS5uYXJncyA+PSAwICYmCi0JCVBHQkVOQ0hfRlVOQ1RJT05TW2ZudW1iZXJd Lm5hcmdzICE9IGVsaXN0X2xlbmd0aChhcmdzKSkKLQkJZXhwcl95eWVycm9yX21vcmUoeXlz Y2FubmVyLCAidW5leHBlY3RlZCBudW1iZXIgb2YgYXJndW1lbnRzIiwKLQkJCQkJCSAgUEdC RU5DSF9GVU5DVElPTlNbZm51bWJlcl0uZm5hbWUpOwotCi0JLyogY2hlY2sgYXQgbGVhc3Qg b25lIGFyZyBmb3IgbGVhc3QgJiBncmVhdGVzdCAqLwotCWlmIChQR0JFTkNIX0ZVTkNUSU9O U1tmbnVtYmVyXS5uYXJncyA9PSAtMSAmJgotCQllbGlzdF9sZW5ndGgoYXJncykgPT0gMCkK LQkJZXhwcl95eWVycm9yX21vcmUoeXlzY2FubmVyLCAiYXQgbGVhc3Qgb25lIGFyZ3VtZW50 IGV4cGVjdGVkIiwKLQkJCQkJCSAgUEdCRU5DSF9GVU5DVElPTlNbZm51bWJlcl0uZm5hbWUp OwotCS8qIHNwZWNpYWwgY2FzZTogY2FzZSAod2hlbiAuLi4gdGhlbiAuLi4pKyAoZWxzZSAu Li4pPyBlbmQgKi8KLQlpZiAoUEdCRU5DSF9GVU5DVElPTlNbZm51bWJlcl0ubmFyZ3MgPT0g LTIpCi0JewotCQlpbnQgbGVuID0gZWxpc3RfbGVuZ3RoKGFyZ3MpOwotCi0JCS8qICdlbHNl JyBicmFuY2ggaXMgYWx3YXlzIHByZXNlbnQsIGJ1dCBjb3VsZCBiZSBhIE5VTEwtY29uc3Rh bnQgKi8KLQkJaWYgKGxlbiA8IDMgfHwgbGVuICUgMiAhPSAxKQotCQkJZXhwcl95eWVycm9y X21vcmUoeXlzY2FubmVyLCAib2RkIGFuZCA+PSAzIG51bWJlciBvZiBhcmd1bWVudHMgZXhw ZWN0ZWQiLAotCQkJCQkJCSAgImNhc2UgY29udHJvbCBzdHJ1Y3R1cmUiKTsKKwkvKiB2YWxp ZGF0ZSBhcmd1bWVudHMgbnVtYmVyIGluY2x1ZGluZyBmZXcgc3BlY2lhbCBjYXNlcyAqLwor CXN3aXRjaCAoUEdCRU5DSF9GVU5DVElPTlNbZm51bWJlcl0ubmFyZ3MpCisJeworCQkvKiBj aGVjayBhdCBsZWFzdCBvbmUgYXJnIGZvciBsZWFzdCAmIGdyZWF0ZXN0ICovCisJCWNhc2Ug UEdCRU5DSF9OQVJHU19WQVJJQUJMRToKKwkJCWlmIChsZW4gPT0gMCkKKwkJCQlleHByX3l5 ZXJyb3JfbW9yZSh5eXNjYW5uZXIsICJhdCBsZWFzdCBvbmUgYXJndW1lbnQgZXhwZWN0ZWQi LAorCQkJCQkJCQkgIFBHQkVOQ0hfRlVOQ1RJT05TW2ZudW1iZXJdLmZuYW1lKTsKKwkJCWJy ZWFrOworCisJCS8qIGNhc2UgKHdoZW4gLi4uIHRoZW4gLi4uKSsgKGVsc2UgLi4uKT8gZW5k ICovCisJCWNhc2UgUEdCRU5DSF9OQVJHU19DQVNFOgorCQkJLyogJ2Vsc2UnIGJyYW5jaCBp cyBhbHdheXMgcHJlc2VudCwgYnV0IGNvdWxkIGJlIGEgTlVMTC1jb25zdGFudCAqLworCQkJ aWYgKGxlbiA8IDMgfHwgbGVuICUgMiAhPSAxKQorCQkJCWV4cHJfeXllcnJvcl9tb3JlKHl5 c2Nhbm5lciwKKwkJCQkJCQkJICAib2RkIGFuZCA+PSAzIG51bWJlciBvZiBhcmd1bWVudHMg ZXhwZWN0ZWQiLAorCQkJCQkJCQkgICJjYXNlIGNvbnRyb2wgc3RydWN0dXJlIik7CisJCQli cmVhazsKKworCQkvKiBoYXNoIGZ1bmN0aW9ucyB3aXRoIG9wdGlvbmFsIHNlZWQgYXJndW1l bnQgKi8KKwkJY2FzZSBQR0JFTkNIX05BUkdTX0hBU0g6CisJCQlpZiAobGVuID4gMikKKwkJ CQlleHByX3l5ZXJyb3JfbW9yZSh5eXNjYW5uZXIsICJ1bmV4cGVjdGVkIG51bWJlciBvZiBh cmd1bWVudHMiLAorCQkJCQkJCQkgIFBHQkVOQ0hfRlVOQ1RJT05TW2ZudW1iZXJdLmZuYW1l KTsKKworCQkJaWYgKGxlbiA9PSAxKQorCQkJeworCQkJCVBnQmVuY2hFeHByICp2YXIgPSBt YWtlX3ZhcmlhYmxlKCJoYXNoX3NlZWQiKTsKKwkJCQlhcmdzID0gbWFrZV9lbGlzdCh2YXIs IGFyZ3MpOworCQkJfQorCQkJYnJlYWs7CisKKwkJLyogY29tbW9uIGNhc2U6IHBvc2l0aXZl IGFyZ3VtZW50cyBudW1iZXIgKi8KKwkJZGVmYXVsdDoKKwkJCWlmIChQR0JFTkNIX0ZVTkNU SU9OU1tmbnVtYmVyXS5uYXJncyAhPSBsZW4pCisJCQkJZXhwcl95eWVycm9yX21vcmUoeXlz Y2FubmVyLCAidW5leHBlY3RlZCBudW1iZXIgb2YgYXJndW1lbnRzIiwKKwkJCQkJCQkJICBQ R0JFTkNIX0ZVTkNUSU9OU1tmbnVtYmVyXS5mbmFtZSk7CiAJfQogCiAJZXhwci0+ZXR5cGUg PSBFTk9ERV9GVU5DVElPTjsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNo LmMgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDMxZWE2Y2EuLjhlNmUwYWQg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKKysrIGIvc3JjL2Jpbi9w Z2JlbmNoL3BnYmVuY2guYwpAQCAtNjEsNiArNjEsMTQgQEAKICNkZWZpbmUgRVJSQ09ERV9V TkRFRklORURfVEFCTEUgICI0MlAwMSIKIAogLyoKKyAqIEhhc2hpbmcgY29uc3RhbnRzCisg Ki8KKyNkZWZpbmUgRk5WX1BSSU1FIDB4MTAwMDAwMDAxYjMKKyNkZWZpbmUgRk5WX09GRlNF VF9CQVNJUyAweGNiZjI5Y2U0ODQyMjIzMjUKKyNkZWZpbmUgTU0yX01VTCAweGM2YTRhNzkz NWJkMWU5OTUKKyNkZWZpbmUgTU0yX1JPVCA0NworCisvKgogICogTXVsdGktcGxhdGZvcm0g cHRocmVhZCBpbXBsZW1lbnRhdGlvbnMKICAqLwogCkBAIC05MTUsNiArOTIzLDUxIEBAIGdl dFppcGZpYW5SYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBtaW4sIGludDY0IG1heCwgZG91 YmxlIHMpCiB9CiAKIC8qCisgKiBGTlYtMWEgaGFzaCBmdW5jdGlvbgorICovCitzdGF0aWMg aW50NjQKK2dldEhhc2hGbnYxYShpbnQ2NCB2YWwsIHVpbnQ2NCBzZWVkKQoreworCWludDY0 CXJlc3VsdDsKKwlpbnQJCWk7CisKKwlyZXN1bHQgPSBGTlZfT0ZGU0VUX0JBU0lTIF4gc2Vl ZDsKKwlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQorCXsKKwkJaW50MzIgb2N0ZXQgPSB2YWwg JiAweGZmOworCisJCXZhbCA9IHZhbCA+PiA4OworCQlyZXN1bHQgPSByZXN1bHQgXiBvY3Rl dDsKKwkJcmVzdWx0ID0gcmVzdWx0ICogRk5WX1BSSU1FOworCX0KKworCXJldHVybiByZXN1 bHQ7Cit9CisKKy8qCisgKiBNdXJtdXIyIGhhc2ggZnVuY3Rpb24KKyAqLworc3RhdGljIGlu dDY0CitnZXRIYXNoTXVybXVyMihpbnQ2NCB2YWwsIHVpbnQ2NCBzZWVkKQoreworCXVpbnQ2 NAlyZXN1bHQgPSBzZWVkIF4gKHNpemVvZihpbnQ2NCkgKiBNTTJfTVVMKTsKKwl1aW50NjQJ ayA9ICh1aW50NjQpIHZhbDsKKworCWsgKj0gTU0yX01VTDsKKwlrIF49IGsgPj4gTU0yX1JP VDsKKwlrICo9IE1NMl9NVUw7CisKKwlyZXN1bHQgXj0gazsKKwlyZXN1bHQgKj0gTU0yX01V TDsKKworCXJlc3VsdCBePSByZXN1bHQgPj4gTU0yX1JPVDsKKwlyZXN1bHQgKj0gTU0yX01V TDsKKwlyZXN1bHQgXj0gcmVzdWx0ID4+IE1NMl9ST1Q7CisKKwlyZXR1cm4gKGludDY0KSBy ZXN1bHQ7Cit9CisKKy8qCiAgKiBJbml0aWFsaXplIHRoZSBnaXZlbiBTaW1wbGVTdGF0cyBz dHJ1Y3QgdG8gYWxsIHplcm9lcwogICovCiBzdGF0aWMgdm9pZApAQCAtMjIwOSw2ICsyMjYy LDI4IEBAIGV2YWxTdGFuZGFyZEZ1bmMoCiAJCQkJcmV0dXJuIHRydWU7CiAJCQl9CiAKKwkJ CS8qIGhhc2hpbmcgKi8KKwkJY2FzZSBQR0JFTkNIX0hBU0hfRk5WMUE6CisJCWNhc2UgUEdC RU5DSF9IQVNIX01VUk1VUjI6CisJCQl7CisJCQkJaW50NjQJdmFsOworCQkJCWludDY0CXNl ZWQ7CisJCQkJaW50NjQJcmVzdWx0OworCisJCQkJQXNzZXJ0KG5hcmdzID09IDIpOworCisJ CQkJaWYgKCFjb2VyY2VUb0ludCgmdmFyZ3NbMF0sICZ2YWwpKQorCQkJCQlyZXR1cm4gZmFs c2U7CisKKwkJCQlpZiAoIWNvZXJjZVRvSW50KCZ2YXJnc1sxXSwgJnNlZWQpKQorCQkJCQly ZXR1cm4gZmFsc2U7CisKKwkJCQlyZXN1bHQgPSAoZnVuYyA9PSBQR0JFTkNIX0hBU0hfRk5W MUEpID8KKwkJCQkJZ2V0SGFzaEZudjFhKHZhbCwgc2VlZCkgOiBnZXRIYXNoTXVybXVyMih2 YWwsIHNlZWQpOworCQkJCXNldEludFZhbHVlKHJldHZhbCwgcmVzdWx0KTsKKwkJCQlyZXR1 cm4gdHJ1ZTsKKwkJCX0KKwogCQlkZWZhdWx0OgogCQkJLyogY2Fubm90IGdldCBoZXJlICov CiAJCQlBc3NlcnQoMCk7CkBAIC00OTcyLDYgKzUwNDcsMTAgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJCWV4aXQoMSk7CiAJfQogCisJLyogc2V0IHJhbmRvbSBzZWVkICov CisJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChzdGFydF90aW1lKTsKKwlzcmFuZG9tKCh1bnNp Z25lZCBpbnQpIElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKHN0YXJ0X3RpbWUpKTsKKwogCWlm IChpbnRlcm5hbF9zY3JpcHRfdXNlZCkKIAl7CiAJCS8qCkBAIC01MDMzLDYgKzUxMTIsMjEg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCX0KIAl9CiAKKwkvKiBzZXQgZGVm YXVsdCBzZWVkIGZvciBoYXNoIGZ1bmN0aW9ucyAqLworCWlmIChsb29rdXBWYXJpYWJsZSgm c3RhdGVbMF0sICJoYXNoX3NlZWQiKSA9PSBOVUxMKQorCXsKKwkJdWludDY0CQlzZWVkOwor CisJCXNlZWQgPSAodWludDY0KSAocmFuZG9tKCkgJiAweEZGRkYpIDw8IDQ4OworCQlzZWVk IHw9ICh1aW50NjQpIChyYW5kb20oKSAmIDB4RkZGRikgPDwgMzI7CisJCXNlZWQgfD0gKHVp bnQ2NCkgKHJhbmRvbSgpICYgMHhGRkZGKSA8PCAxNjsKKwkJc2VlZCB8PSAodWludDY0KSAo cmFuZG9tKCkgJiAweEZGRkYpOworCisJCWZvciAoaSA9IDA7IGkgPCBuY2xpZW50czsgaSsr KQorCQkJaWYgKCFwdXRWYXJpYWJsZUludCgmc3RhdGVbaV0sICJzdGFydHVwIiwgImhhc2hf c2VlZCIsIChpbnQ2NCkgc2VlZCkpCisJCQkJZXhpdCgxKTsKKwl9CisKIAlpZiAoIWlzX25v X3ZhY3V1bSkKIAl7CiAJCWZwcmludGYoc3RkZXJyLCAic3RhcnRpbmcgdmFjdXVtLi4uIik7 CkBAIC01MDUwLDEwICs1MTQ0LDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ fQogCVBRZmluaXNoKGNvbik7CiAKLQkvKiBzZXQgcmFuZG9tIHNlZWQgKi8KLQlJTlNUUl9U SU1FX1NFVF9DVVJSRU5UKHN0YXJ0X3RpbWUpOwotCXNyYW5kb20oKHVuc2lnbmVkIGludCkg SU5TVFJfVElNRV9HRVRfTUlDUk9TRUMoc3RhcnRfdGltZSkpOwotCiAJLyogc2V0IHVwIHRo cmVhZCBkYXRhIHN0cnVjdHVyZXMgKi8KIAl0aHJlYWRzID0gKFRTdGF0ZSAqKSBwZ19tYWxs b2Moc2l6ZW9mKFRTdGF0ZSkgKiBudGhyZWFkcyk7CiAJbmNsaWVudHNfZGVhbHQgPSAwOwpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guaCBiL3NyYy9iaW4vcGdiZW5j aC9wZ2JlbmNoLmgKaW5kZXggMDcwNWNjZC4uNjk4Mzg2NSAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ2JlbmNoL3BnYmVuY2guaAorKysgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5oCkBA IC05Nyw3ICs5Nyw5IEBAIHR5cGVkZWYgZW51bSBQZ0JlbmNoRnVuY3Rpb24KIAlQR0JFTkNI X0xFLAogCVBHQkVOQ0hfTFQsCiAJUEdCRU5DSF9JUywKLQlQR0JFTkNIX0NBU0UKKwlQR0JF TkNIX0NBU0UsCisJUEdCRU5DSF9IQVNIX0ZOVjFBLAorCVBHQkVOQ0hfSEFTSF9NVVJNVVIy CiB9IFBnQmVuY2hGdW5jdGlvbjsKIAogdHlwZWRlZiBzdHJ1Y3QgUGdCZW5jaEV4cHIgUGdC ZW5jaEV4cHI7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5jaF93 aXRoX3NlcnZlci5wbCBiL3NyYy9iaW4vcGdiZW5jaC90LzAwMV9wZ2JlbmNoX3dpdGhfc2Vy dmVyLnBsCmluZGV4IGE4YjI5NjIuLjc1MmMyOTkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdi ZW5jaC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsCisrKyBiL3NyYy9iaW4vcGdiZW5j aC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsCkBAIC0yNTksNiArMjU5LDExIEBAIHBn YmVuY2goCiAJCXFye2NvbW1hbmQ9NDYuOiBpbnQgNDZcYn0sCiAJCXFye2NvbW1hbmQ9NDcu OiBib29sZWFuIHRydWVcYn0sCiAJCXFye2NvbW1hbmQ9NDguOiBib29sZWFuIHRydWVcYn0s CisJCXFye2NvbW1hbmQ9NDkuOiBpbnQgLTU4MTc4NzcwODE3Njg3MjE2NzZcYn0sCisJCXFy e2NvbW1hbmQ9NTAuOiBib29sZWFuIHRydWVcYn0sCisJCXFye2NvbW1hbmQ9NTEuOiBpbnQg LTc3OTM4MjkzMzUzNjU1NDIxNTNcYn0sCisJCXFye2NvbW1hbmQ9NTIuOiBpbnQgLT9cZCtc Yn0sCisJCXFye2NvbW1hbmQ9NTMuOiBib29sZWFuIHRydWVcYn0sCiAJXSwKIAkncGdiZW5j aCBleHByZXNzaW9ucycsCiAJeyAgICcwMDFfcGdiZW5jaF9leHByZXNzaW9ucycgPT4gcXst LSBpbnRlZ2VyIGZ1bmN0aW9ucwpAQCAtMzI3LDYgKzMzMiwxMiBAQCBwZ2JlbmNoKAogXHNl dCBuNiBkZWJ1Zyg6biBJUyBOVUxMIEFORCBOT1QgOmYgQU5EIDp0KQogLS0gY29uZGl0aW9u YWwgdHJ1dGgKIFxzZXQgY3MgZGVidWcoQ0FTRSBXSEVOIDEgVEhFTiBUUlVFIEVORCBBTkQg Q0FTRSBXSEVOIDEuMCBUSEVOIFRSVUUgRU5EIEFORCBDQVNFIFdIRU4gOm4gVEhFTiBOVUxM IEVMU0UgVFJVRSBFTkQpCistLSBoYXNoIGZ1bmN0aW9ucworXHNldCBoMCBkZWJ1ZyhoYXNo KDEwLCA1NDMyKSkKK1xzZXQgaDEgZGVidWcoOmgwID0gaGFzaF9tdXJtdXIyKDEwLCA1NDMy KSkKK1xzZXQgaDMgZGVidWcoaGFzaF9mbnYxYSgxMCwgNTQzMikpCitcc2V0IGg0IGRlYnVn KGhhc2goMTApKQorXHNldCBoNSBkZWJ1ZyhoYXNoKDEwKSA9IGhhc2goMTAsIDpoYXNoX3Nl ZWQpKQogLS0gbGF6eSBldmFsdWF0aW9uCiBcc2V0IHp5IDAKIFxzZXQgeXogZGVidWcoY2Fz ZSB3aGVuIDp6eSA9IDAgdGhlbiAtMSBlbHNlICgxIC8gOnp5KSBlbmQpCg== --------------FD3D85C890B4089A4A9A30A5--