Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ebSYM-0004Q3-GC for pgsql-hackers@arkaria.postgresql.org; Tue, 16 Jan 2018 14:49:31 +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 1ebSYM-00058x-2R for pgsql-hackers@arkaria.postgresql.org; Tue, 16 Jan 2018 14:49:30 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1ebSYL-00058l-N4 for pgsql-hackers@lists.postgresql.org; Tue, 16 Jan 2018 14:49:29 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by magus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1ebSYH-0002GC-Hv for pgsql-hackers@postgresql.org; Tue, 16 Jan 2018 14:49:29 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 2D30C21C1C5B; Tue, 16 Jan 2018 17:49:24 +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 (gw.postgrespro.ru [93.174.131.141]) (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 F2E1E21C1C5A; Tue, 16 Jan 2018 17:49:23 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1516114164; bh=qVZ/ovyh68uV8ivFnQRcqzDhkTiLjoMkz9jVt9DKTUk=; h=Subject:To:Cc:References:From:Date:In-Reply-To; b=QSnHIwxCS58IthIY38EgP0dZToAme6094YvKwVDmnrh2uABOqZsQCMRvAcCR1qYPg AhjDGROM6cn4tOX2JBMGQMBWes/Lr+vCDKUvtmXVGwv6TUX2s6qwwvrU+Uo7YMhSva fmQaCZnQt/P7j4BXoAb3mIH9tUOijjfcC+e28y6Q= 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> From: Ildar Musin Message-ID: Date: Tue, 16 Jan 2018 17:49:23 +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="------------083461624C3AEA41ABF241B8" 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. --------------083461624C3AEA41ABF241B8 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Hi Fabien, 13/01/2018 11:16, Fabien COELHO пишет: > > Hello Ildar, > >>> so that different instances of hash function within one script would >>> have different seeds. Yes, that is a good idea, I can do that. >>> >> Added this feature in attached patch. But on a second thought this could >> be something that user won't expect. For example, they may want to run >> pgbench with two scripts: >> - the first one updates row by key that is a hashed random_zipfian >> value; >> - the second one reads row by key generated the same way >> (that is actually what YCSB workloads A and B do) >> >> It feels natural to write something like this: >> \set rnd random_zipfian(0, 1000000, 0.99) >> \set key abs(hash(:rnd)) % 1000 >> in both scripts and expect that they both would have the same >> distribution. But they wouldn't. We could of course describe this >> implicit behaviour in documentation, but ISTM that shared seed would be >> more clear. > > I think that it depends on the use case, that both can be useful, so > there should be a way to do either. > > With "always different" default seed, distinct distributions are achieved > with: > >    -- DIFF distinct seeds inside and between runs >    \set i1 abs(hash(:r1)) % 1000 >    \set j1 abs(hash(:r2)) % 1000 > > and the same distribution can be done with an explicit seed: > >    -- DIFF same seed inside and between runs >    \set i1 abs(hash(:r1), 5432) % 1000 >    \set j1 abs(hash(:r2), 5432) % 1000 > > The drawback is that the same seed is used between runs in this case, > which is not desirable. This could be circumvented by adding the > random seed as an automatic variable and using it, eg: > >    -- DIFF same seed inside run, distinct between runs >    \set i1 abs(hash(:r1), :random_seed + 5432) % 1000 >    \set j1 abs(hash(:r2), :random_seed + 2345) % 1000 > > > Now with a shared hash_seed the same distribution is by default: > >    -- SHARED same underlying hash_seed inside run, distinct between runs >    \set i1 abs(hash(:r1)) % 1000 >    \set j1 abs(hash(:r2)) % 1000 > > However some trick is needed now to get distinct seeds. With > >    -- SHARED distinct seed inside run, but same between runs >    \set i1 abs(hash(:r1, 5432)) % 1000 >    \set j1 abs(hash(:r2, 2345)) % 1000 > > We are back to the same issue has the previous case because then the > distribution is the same from one run to the next, which is not > desirable. I found this workaround trick: > >    -- SHARED distinct seeds inside and between runs >    \set i1 abs(hash(:r1, hash(5432))) % 1000 >    \set j1 abs(hash(:r2, hash(2345))) % 1000 > > Or with a new :hash_seed or :random_seed automatic variable, we could > also have: > >    -- SHARED distinct seeds inside and between runs >    \set i1 abs(hash(:r1, :hash_seed + 5432)) % 1000 >    \set j1 abs(hash(:r2, :hash_seed + 2345)) % 1000 > > It provides controllable distinct seeds between runs but equal one > between if desired, by reusing the same value to be hashed as a seed. > > I also agree with your argument that the user may reasonably expect > that hash(5432) == hash(5432) inside and between scripts, at least on > the same run, so would be surprised that it is not the case. > > So I've changed my mind, I'm sorry for making you going back and forth > on the subject. I'm now okay with one shared 64 bit hash seed, with a > clear documentation about the fact, and an outline of the trick to > achieve distinct distributions inside a run if desired and why it > would be desirable to avoid correlations. Also, I think that providing > the seed as automatic variable (:hash_seed or :hseed or whatever) > would make some sense as well. Maybe this could be used as a way to > fix the seed explicitely, eg: > >    pgbench -D hash_seed=1234 ... > > Would use this value instead of the random generated one. Also, with > that the default inserted second argument could be simply > ":hash_seed", which would simplify the executor which would not have > to do check for an optional second argument. > 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. 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). [1] https://www.postgresql.org/message-id/43a8fbbb-32fa-6478-30a9-f64041adf019%40postgrespro.ru -- Ildar Musin Postgres Professional: http://www.postgrespro.com Russian Postgres Company --------------083461624C3AEA41ABF241B8 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="001_pgbench_hash_v7.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="001_pgbench_hash_v7.patch" ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9wZ2JlbmNoLnNnbWwKaW5kZXggM2RkNDkyYy4uYzU3NWYxOSAxMDA2NDQKLS0t IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Jl Zi9wZ2JlbmNoLnNnbWwKQEAgLTEyNDYsNiArMTI0NiwyNyBAQCBwZ2JlbmNoIDxvcHRpb25h bD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPiA8cmVw bGFjZWFibGU+ZAogICAgICAgIDxlbnRyeT48bGl0ZXJhbD41PC9saXRlcmFsPjwvZW50cnk+ CiAgICAgICA8L3Jvdz4KICAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5PjxsaXRlcmFsPjxm dW5jdGlvbj5oYXNoKDxyZXBsYWNlYWJsZT5hPC9yZXBsYWNlYWJsZT4gWywgPHJlcGxhY2Vh YmxlPnNlZWQ8L3JlcGxhY2VhYmxlPiBdICk8L2Z1bmN0aW9uPjwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICA8ZW50cnk+YWxpYXMg Zm9yIDxsaXRlcmFsPmhhc2hfbXVybXVyMigpPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg PGVudHJ5PjxsaXRlcmFsPmhhc2goMTAsIDU0MzIpPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgPGVudHJ5PjxsaXRlcmFsPi01ODE3ODc3MDgxNzY4NzIxNjc2PC9saXRlcmFsPjwvZW50 cnk+CisgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5PjxsaXRlcmFs PjxmdW5jdGlvbj5oYXNoX2ZudjFhKDxyZXBsYWNlYWJsZT5hPC9yZXBsYWNlYWJsZT4gWywg PHJlcGxhY2VhYmxlPnNlZWQ8L3JlcGxhY2VhYmxlPiBdICk8L2Z1bmN0aW9uPjwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRyeT4KKyAgICAgICA8ZW50 cnk+PGxpdGVyYWw+Rk5WPC9saXRlcmFsPiBoYXNoPC9lbnRyeT4KKyAgICAgICA8ZW50cnk+ PGxpdGVyYWw+aGFzaF9mbnYxYSgxMCwgNTQzMik8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICA8ZW50cnk+PGxpdGVyYWw+LTc3OTM4MjkzMzUzNjU1NDIxNTM8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgIDwvcm93PgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnk+PGxpdGVyYWw+ PGZ1bmN0aW9uPmhhc2hfbXVybXVyMig8cmVwbGFjZWFibGU+YTwvcmVwbGFjZWFibGU+IFss IDxyZXBsYWNlYWJsZT5zZWVkPC9yZXBsYWNlYWJsZT4gXSApPC9mdW5jdGlvbj48L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+aW50ZWdlcjwvZW50cnk+CisgICAgICAgPGVu dHJ5PjxsaXRlcmFsPm11cm11cjI8L2xpdGVyYWw+IGhhc2g8L2VudHJ5PgorICAgICAgIDxl bnRyeT48bGl0ZXJhbD5oYXNoX211cm11cjIoMTAsIDU0MzIpPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgPGVudHJ5PjxsaXRlcmFsPi01ODE3ODc3MDgxNzY4NzIxNjc2PC9saXRlcmFs PjwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CiAgICAgICAgPGVudHJ5Pjxs aXRlcmFsPjxmdW5jdGlvbj5pbnQoPHJlcGxhY2VhYmxlPng8L3JlcGxhY2VhYmxlPik8L2Z1 bmN0aW9uPjwvbGl0ZXJhbD48L2VudHJ5PgogICAgICAgIDxlbnRyeT5pbnRlZ2VyPC9lbnRy eT4KICAgICAgICA8ZW50cnk+Y2FzdCB0byBpbnQ8L2VudHJ5PgpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ2JlbmNoL2V4cHJwYXJzZS55IGIvc3JjL2Jpbi9wZ2JlbmNoL2V4cHJwYXJzZS55 CmluZGV4IGUyM2NhNTEuLjVlOTgyYmIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC9l eHBycGFyc2UueQorKysgYi9zcmMvYmluL3BnYmVuY2gvZXhwcnBhcnNlLnkKQEAgLTE2LDYg KzE2LDEwIEBACiAKICNpbmNsdWRlICJwZ2JlbmNoLmgiCiAKKyNkZWZpbmUgUEdCRU5DSF9O QVJHU19WQVJJQUJMRQkoLTEpCisjZGVmaW5lIFBHQkVOQ0hfTkFSR1NfQ0FTRQkJKC0yKQor I2RlZmluZSBQR0JFTkNIX05BUkdTX0hBU0gJCSgtMykKKwogUGdCZW5jaEV4cHIgKmV4cHJf cGFyc2VfcmVzdWx0OwogCiBzdGF0aWMgUGdCZW5jaEV4cHJMaXN0ICptYWtlX2VsaXN0KFBn QmVuY2hFeHByICpleHAsIFBnQmVuY2hFeHByTGlzdCAqbGlzdCk7CkBAIC0yMjYsOSArMjMw LDEzIEBAIG1ha2VfdW9wKHl5c2Nhbl90IHl5c2Nhbm5lciwgY29uc3QgY2hhciAqb3BlcmF0 b3IsIFBnQmVuY2hFeHByICpleHByKQogLyoKICAqIExpc3Qgb2YgYXZhaWxhYmxlIGZ1bmN0 aW9uczoKICAqIC0gZm5hbWU6IGZ1bmN0aW9uIG5hbWUsICIhLi4uIiBmb3Igc3BlY2lhbCBp bnRlcm5hbCBmdW5jdGlvbnMKLSAqIC0gbmFyZ3M6IG51bWJlciBvZiBhcmd1bWVudHMKLSAq CQkJLTEgaXMgYSBzcGVjaWFsIHZhbHVlIGZvciBsZWFzdCAmIGdyZWF0ZXN0IG1lYW5pbmcg I2FyZ3MgPj0gMQotICoJCQktMiBpcyBmb3IgdGhlICJDQVNFIFdIRU4gLi4uIiBmdW5jdGlv biwgd2hpY2ggaGFzICNhcmdzID49IDMgYW5kIG9kZAorICogLSBuYXJnczogbnVtYmVyIG9m IGFyZ3VtZW50cy4gU3BlY2lhbCBjYXNlczoKKyAqCQkJLSBQR0JFTkNIX05BUkdTX1ZBUklB QkxFIGlzIGEgc3BlY2lhbCB2YWx1ZSBmb3IgbGVhc3QgJiBncmVhdGVzdAorICoJCQkgIG1l YW5pbmcgI2FyZ3MgPj0gMTsKKyAqCQkJLSBQR0JFTkNIX05BUkdTX0NBU0UgaXMgZm9yIHRo ZSAiQ0FTRSBXSEVOIC4uLiIgZnVuY3Rpb24sIHdoaWNoCisgKgkJCSAgaGFzICNhcmdzID49 IDMgYW5kIG9kZDsKKyAqIAkJCS0gUEdCRU5DSF9OQVJHU19IQVNIIGlzIGZvciBoYXNoIGZ1 bmN0aW9ucywgd2hpY2ggaGF2ZSBvbmUgcmVxdWlyZWQKKyAqCQkJICBhbmQgb25lIG9wdGlv bmFsIGFyZ3VtZW50OwogICogLSB0YWc6IGZ1bmN0aW9uIGlkZW50aWZpZXIgZnJvbSBQZ0Jl bmNoRnVuY3Rpb24gZW51bQogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0CkBAIC0yNTksMTAg KzI2NywxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0CiAJCSJhYnMiLCAxLCBQR0JFTkNIX0FC UwogCX0sCiAJewotCQkibGVhc3QiLCAtMSwgUEdCRU5DSF9MRUFTVAorCQkibGVhc3QiLCBQ R0JFTkNIX05BUkdTX1ZBUklBQkxFLCBQR0JFTkNIX0xFQVNUCiAJfSwKIAl7Ci0JCSJncmVh dGVzdCIsIC0xLCBQR0JFTkNIX0dSRUFURVNUCisJCSJncmVhdGVzdCIsIFBHQkVOQ0hfTkFS R1NfVkFSSUFCTEUsIFBHQkVOQ0hfR1JFQVRFU1QKIAl9LAogCXsKIAkJImRlYnVnIiwgMSwg UEdCRU5DSF9ERUJVRwpAQCAtMzQ3LDcgKzM1NSwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 CiAJfSwKIAkvKiAiY2FzZSB3aGVuIC4uLiB0aGVuIC4uLiBlbHNlIC4uLiBlbmQiIGNvbnN0 cnVjdGlvbiAqLwogCXsKLQkJIiFjYXNlX2VuZCIsIC0yLCBQR0JFTkNIX0NBU0UKKwkJIiFj YXNlX2VuZCIsIFBHQkVOQ0hfTkFSR1NfQ0FTRSwgUEdCRU5DSF9DQVNFCisJfSwKKwl7CisJ CSJoYXNoIiwgUEdCRU5DSF9OQVJHU19IQVNILCBQR0JFTkNIX0hBU0hfTVVSTVVSMgorCX0s CisJeworCQkiaGFzaF9tdXJtdXIyIiwgUEdCRU5DSF9OQVJHU19IQVNILCBQR0JFTkNIX0hB U0hfTVVSTVVSMgorCX0sCisJeworCQkiaGFzaF9mbnYxYSIsIFBHQkVOQ0hfTkFSR1NfSEFT SCwgUEdCRU5DSF9IQVNIX0ZOVjFBCisJfSwKKwl7CisJCSJoYXNoIiwgLTMsIFBHQkVOQ0hf SEFTSF9NVVJNVVIyCisJfSwKKwl7CisJCSJoYXNoX211cm11cjIiLCAtMywgUEdCRU5DSF9I QVNIX01VUk1VUjIKKwl9LAorCXsKKwkJImhhc2hfZm52MWEiLCAtMywgUEdCRU5DSF9IQVNI X0ZOVjFBCiAJfSwKIAkvKiBrZWVwIGFzIGxhc3QgYXJyYXkgZWxlbWVudCAqLwogCXsKQEAg LTQyMywyOSArNDQ5LDUyIEBAIGVsaXN0X2xlbmd0aChQZ0JlbmNoRXhwckxpc3QgKmxpc3Qp CiBzdGF0aWMgUGdCZW5jaEV4cHIgKgogbWFrZV9mdW5jKHl5c2Nhbl90IHl5c2Nhbm5lciwg aW50IGZudW1iZXIsIFBnQmVuY2hFeHByTGlzdCAqYXJncykKIHsKKwlpbnQgbGVuID0gZWxp c3RfbGVuZ3RoKGFyZ3MpOworCiAJUGdCZW5jaEV4cHIgKmV4cHIgPSBwZ19tYWxsb2Moc2l6 ZW9mKFBnQmVuY2hFeHByKSk7CiAKIAlBc3NlcnQoZm51bWJlciA+PSAwKTsKIAotCWlmIChQ R0JFTkNIX0ZVTkNUSU9OU1tmbnVtYmVyXS5uYXJncyA+PSAwICYmCi0JCVBHQkVOQ0hfRlVO Q1RJT05TW2ZudW1iZXJdLm5hcmdzICE9IGVsaXN0X2xlbmd0aChhcmdzKSkKLQkJZXhwcl95 eWVycm9yX21vcmUoeXlzY2FubmVyLCAidW5leHBlY3RlZCBudW1iZXIgb2YgYXJndW1lbnRz IiwKLQkJCQkJCSAgUEdCRU5DSF9GVU5DVElPTlNbZm51bWJlcl0uZm5hbWUpOwotCi0JLyog Y2hlY2sgYXQgbGVhc3Qgb25lIGFyZyBmb3IgbGVhc3QgJiBncmVhdGVzdCAqLwotCWlmIChQ R0JFTkNIX0ZVTkNUSU9OU1tmbnVtYmVyXS5uYXJncyA9PSAtMSAmJgotCQllbGlzdF9sZW5n dGgoYXJncykgPT0gMCkKLQkJZXhwcl95eWVycm9yX21vcmUoeXlzY2FubmVyLCAiYXQgbGVh c3Qgb25lIGFyZ3VtZW50IGV4cGVjdGVkIiwKLQkJCQkJCSAgUEdCRU5DSF9GVU5DVElPTlNb Zm51bWJlcl0uZm5hbWUpOwotCS8qIHNwZWNpYWwgY2FzZTogY2FzZSAod2hlbiAuLi4gdGhl biAuLi4pKyAoZWxzZSAuLi4pPyBlbmQgKi8KLQlpZiAoUEdCRU5DSF9GVU5DVElPTlNbZm51 bWJlcl0ubmFyZ3MgPT0gLTIpCisJLyogdmFsaWRhdGUgYXJndW1lbnRzIG51bWJlciBpbmNs dWRpbmcgZmV3IHNwZWNpYWwgY2FzZXMgKi8KKwlzd2l0Y2ggKFBHQkVOQ0hfRlVOQ1RJT05T W2ZudW1iZXJdLm5hcmdzKQorCXsKKwkJLyogY2hlY2sgYXQgbGVhc3Qgb25lIGFyZyBmb3Ig bGVhc3QgJiBncmVhdGVzdCAqLworCQljYXNlIFBHQkVOQ0hfTkFSR1NfVkFSSUFCTEU6CisJ CQlpZiAobGVuID09IDApCisJCQkJZXhwcl95eWVycm9yX21vcmUoeXlzY2FubmVyLCAiYXQg bGVhc3Qgb25lIGFyZ3VtZW50IGV4cGVjdGVkIiwKKwkJCQkJCQkJICBQR0JFTkNIX0ZVTkNU SU9OU1tmbnVtYmVyXS5mbmFtZSk7CisJCQlicmVhazsKKworCQkvKiBjYXNlICh3aGVuIC4u LiB0aGVuIC4uLikrIChlbHNlIC4uLik/IGVuZCAqLworCQljYXNlIFBHQkVOQ0hfTkFSR1Nf Q0FTRToKKwkJCS8qICdlbHNlJyBicmFuY2ggaXMgYWx3YXlzIHByZXNlbnQsIGJ1dCBjb3Vs ZCBiZSBhIE5VTEwtY29uc3RhbnQgKi8KKwkJCWlmIChsZW4gPCAzIHx8IGxlbiAlIDIgIT0g MSkKKwkJCQlleHByX3l5ZXJyb3JfbW9yZSh5eXNjYW5uZXIsCisJCQkJCQkJCSAgIm9kZCBh bmQgPj0gMyBudW1iZXIgb2YgYXJndW1lbnRzIGV4cGVjdGVkIiwKKwkJCQkJCQkJICAiY2Fz ZSBjb250cm9sIHN0cnVjdHVyZSIpOworCQkJYnJlYWs7CisKKwkJLyogaGFzaCBmdW5jdGlv bnMgd2l0aCBvcHRpb25hbCBzZWVkIGFyZ3VtZW50ICovCisJCWNhc2UgUEdCRU5DSF9OQVJH U19IQVNIOgorCQkJaWYgKGxlbiA8IDEgfHwgbGVuID4gMikKKwkJCWV4cHJfeXllcnJvcl9t b3JlKHl5c2Nhbm5lciwgInVuZXhwZWN0ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIsCisJCQkJ CQkJICBQR0JFTkNIX0ZVTkNUSU9OU1tmbnVtYmVyXS5mbmFtZSk7CisJCQlicmVhazsKKwor CQkvKiBjb21tb24gY2FzZTogcG9zaXRpdmUgYXJndW1lbnRzIG51bWJlciAqLworCQlkZWZh dWx0OgorCQkJaWYgKFBHQkVOQ0hfRlVOQ1RJT05TW2ZudW1iZXJdLm5hcmdzICE9IGxlbikK KwkJCQlleHByX3l5ZXJyb3JfbW9yZSh5eXNjYW5uZXIsICJ1bmV4cGVjdGVkIG51bWJlciBv ZiBhcmd1bWVudHMiLAorCQkJCQkJCQkgIFBHQkVOQ0hfRlVOQ1RJT05TW2ZudW1iZXJdLmZu YW1lKTsKKwl9CisJLyogc3BlY2lhbCBjYXNlOiBoYXNoIGZ1bmN0aW9ucyB3aXRoIG9wdGlv bmFsIGFyZ3VtZW50cyAqLworCWlmIChQR0JFTkNIX0ZVTkNUSU9OU1tmbnVtYmVyXS5uYXJn cyA9PSAtMykKIAl7CiAJCWludCBsZW4gPSBlbGlzdF9sZW5ndGgoYXJncyk7CiAKLQkJLyog J2Vsc2UnIGJyYW5jaCBpcyBhbHdheXMgcHJlc2VudCwgYnV0IGNvdWxkIGJlIGEgTlVMTC1j b25zdGFudCAqLwotCQlpZiAobGVuIDwgMyB8fCBsZW4gJSAyICE9IDEpCi0JCQlleHByX3l5 ZXJyb3JfbW9yZSh5eXNjYW5uZXIsICJvZGQgYW5kID49IDMgbnVtYmVyIG9mIGFyZ3VtZW50 cyBleHBlY3RlZCIsCi0JCQkJCQkJICAiY2FzZSBjb250cm9sIHN0cnVjdHVyZSIpOworCQlp ZiAobGVuIDwgMSB8fCBsZW4gPiAyKQorCQkJZXhwcl95eWVycm9yX21vcmUoeXlzY2FubmVy LCAidW5leHBlY3RlZCBudW1iZXIgb2YgYXJndW1lbnRzIiwKKwkJCQkJCQkgIFBHQkVOQ0hf RlVOQ1RJT05TW2ZudW1iZXJdLmZuYW1lKTsKIAl9CiAKIAlleHByLT5ldHlwZSA9IEVOT0RF X0ZVTkNUSU9OOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyBiL3Ny Yy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKaW5kZXggMzFlYTZjYS4uNmUwZjM0MCAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYworKysgYi9zcmMvYmluL3BnYmVuY2gv cGdiZW5jaC5jCkBAIC02MSw2ICs2MSwxNCBAQAogI2RlZmluZSBFUlJDT0RFX1VOREVGSU5F RF9UQUJMRSAgIjQyUDAxIgogCiAvKgorICogSGFzaGluZyBjb25zdGFudHMKKyAqLworI2Rl ZmluZSBGTlZfUFJJTUUgMHgxMDAwMDAwMDFiMworI2RlZmluZSBGTlZfT0ZGU0VUX0JBU0lT IDB4Y2JmMjljZTQ4NDIyMjMyNQorI2RlZmluZSBNTTJfTVVMIDB4YzZhNGE3OTM1YmQxZTk5 NQorI2RlZmluZSBNTTJfUk9UIDQ3CisKKy8qCiAgKiBNdWx0aS1wbGF0Zm9ybSBwdGhyZWFk IGltcGxlbWVudGF0aW9ucwogICovCiAKQEAgLTE4NCw2ICsxOTIsOCBAQCBjaGFyCSAgICpk Yk5hbWU7CiBjaGFyCSAgICpsb2dmaWxlX3ByZWZpeCA9IE5VTEw7CiBjb25zdCBjaGFyICpw cm9nbmFtZTsKIAoraW50CQkJaGFzaF9zZWVkOworCiAjZGVmaW5lIFdTRVAgJ0AnCQkJCS8q IHdlaWdodCBzZXBhcmF0b3IgKi8KIAogdm9sYXRpbGUgYm9vbCB0aW1lcl9leGNlZWRlZCA9 IGZhbHNlOwkvKiBmbGFnIGZyb20gc2lnbmFsIGhhbmRsZXIgKi8KQEAgLTQzOSw2ICs0NDks OCBAQCBzdGF0aWMgaW50CW51bV9zY3JpcHRzOwkJLyogbnVtYmVyIG9mIHNjcmlwdHMgaW4g c3FsX3NjcmlwdFtdICovCiBzdGF0aWMgaW50CW51bV9jb21tYW5kcyA9IDA7CS8qIHRvdGFs IG51bWJlciBvZiBDb21tYW5kIHN0cnVjdHMgKi8KIHN0YXRpYyBpbnQ2NCB0b3RhbF93ZWln aHQgPSAwOwogCitzdGF0aWMgaW50IGhhc2hfc2VlZDsJCQkvKiBkZWZhdWx0IHNlZWQgdXNl ZCBpbiBoYXNoIGZ1bmN0aW9ucyAqLworCiBzdGF0aWMgaW50CWRlYnVnID0gMDsJCQkvKiBk ZWJ1ZyBmbGFnICovCiAKIC8qIEJ1aWx0aW4gdGVzdCBzY3JpcHRzICovCkBAIC05MTUsNiAr OTI3LDUxIEBAIGdldFppcGZpYW5SYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBtaW4sIGlu dDY0IG1heCwgZG91YmxlIHMpCiB9CiAKIC8qCisgKiBGTlYtMWEgaGFzaCBmdW5jdGlvbgor ICovCitzdGF0aWMgaW50NjQKK2dldEhhc2hGbnYxYShpbnQ2NCB2YWwsIHVpbnQ2NCBzZWVk KQoreworCWludDY0CXJlc3VsdDsKKwlpbnQJCWk7CisKKwlyZXN1bHQgPSBGTlZfT0ZGU0VU X0JBU0lTIF4gc2VlZDsKKwlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQorCXsKKwkJaW50MzIg b2N0ZXQgPSB2YWwgJiAweGZmOworCisJCXZhbCA9IHZhbCA+PiA4OworCQlyZXN1bHQgPSBy ZXN1bHQgXiBvY3RldDsKKwkJcmVzdWx0ID0gcmVzdWx0ICogRk5WX1BSSU1FOworCX0KKwor CXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBNdXJtdXIyIGhhc2ggZnVuY3Rpb24KKyAq Lworc3RhdGljIGludDY0CitnZXRIYXNoTXVybXVyMihpbnQ2NCB2YWwsIHVpbnQ2NCBzZWVk KQoreworCXVpbnQ2NAlyZXN1bHQgPSBzZWVkIF4gKHNpemVvZihpbnQ2NCkgKiBNTTJfTVVM KTsKKwl1aW50NjQJayA9ICh1aW50NjQpIHZhbDsKKworCWsgKj0gTU0yX01VTDsKKwlrIF49 IGsgPj4gTU0yX1JPVDsKKwlrICo9IE1NMl9NVUw7CisKKwlyZXN1bHQgXj0gazsKKwlyZXN1 bHQgKj0gTU0yX01VTDsKKworCXJlc3VsdCBePSByZXN1bHQgPj4gTU0yX1JPVDsKKwlyZXN1 bHQgKj0gTU0yX01VTDsKKwlyZXN1bHQgXj0gcmVzdWx0ID4+IE1NMl9ST1Q7CisKKwlyZXR1 cm4gKGludDY0KSByZXN1bHQ7Cit9CisKKy8qCiAgKiBJbml0aWFsaXplIHRoZSBnaXZlbiBT aW1wbGVTdGF0cyBzdHJ1Y3QgdG8gYWxsIHplcm9lcwogICovCiBzdGF0aWMgdm9pZApAQCAt MjIwOSw2ICsyMjY2LDM0IEBAIGV2YWxTdGFuZGFyZEZ1bmMoCiAJCQkJcmV0dXJuIHRydWU7 CiAJCQl9CiAKKwkJCS8qIGhhc2hpbmcgKi8KKwkJY2FzZSBQR0JFTkNIX0hBU0hfRk5WMUE6 CisJCWNhc2UgUEdCRU5DSF9IQVNIX01VUk1VUjI6CisJCQl7CisJCQkJaW50NjQJdmFsOwor CQkJCWludDY0CXNlZWQ7CisJCQkJaW50NjQJcmVzdWx0OworCisJCQkJQXNzZXJ0KG5hcmdz ID49IDEpOworCisJCQkJaWYgKCFjb2VyY2VUb0ludCgmdmFyZ3NbMF0sICZ2YWwpKQorCQkJ CQlyZXR1cm4gZmFsc2U7CisKKwkJCQkvKiByZWFkIG9wdGlvbmFsIHNlZWQgdmFsdWUgKi8K KwkJCQlpZiAobmFyZ3MgPiAxKQorCQkJCXsKKwkJCQkJaWYgKCFjb2VyY2VUb0ludCgmdmFy Z3NbMV0sICZzZWVkKSkKKwkJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJZWxzZQor CQkJCQlzZWVkID0gaGFzaF9zZWVkOworCisJCQkJcmVzdWx0ID0gKGZ1bmMgPT0gUEdCRU5D SF9IQVNIX0ZOVjFBKSA/CisJCQkJCWdldEhhc2hGbnYxYSh2YWwsIHNlZWQpIDogZ2V0SGFz aE11cm11cjIodmFsLCBzZWVkKTsKKwkJCQlzZXRJbnRWYWx1ZShyZXR2YWwsIHJlc3VsdCk7 CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisKIAkJZGVmYXVsdDoKIAkJCS8qIGNhbm5vdCBn ZXQgaGVyZSAqLwogCQkJQXNzZXJ0KDApOwpAQCAtNTA1NCw2ICs1MTM5LDkgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChzdGFydF90 aW1lKTsKIAlzcmFuZG9tKCh1bnNpZ25lZCBpbnQpIElOU1RSX1RJTUVfR0VUX01JQ1JPU0VD KHN0YXJ0X3RpbWUpKTsKIAorCS8qIHNldCBkZWZhdWx0IHNlZWQgZm9yIGhhc2ggZnVuY3Rp b25zICovCisJaGFzaF9zZWVkID0gcmFuZG9tKCk7CisKIAkvKiBzZXQgdXAgdGhyZWFkIGRh dGEgc3RydWN0dXJlcyAqLwogCXRocmVhZHMgPSAoVFN0YXRlICopIHBnX21hbGxvYyhzaXpl b2YoVFN0YXRlKSAqIG50aHJlYWRzKTsKIAluY2xpZW50c19kZWFsdCA9IDA7CmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5oIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVu Y2guaAppbmRleCAwNzA1Y2NkLi42MDcwOTA4IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVu Y2gvcGdiZW5jaC5oCisrKyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmgKQEAgLTk3LDcg Kzk3LDkgQEAgdHlwZWRlZiBlbnVtIFBnQmVuY2hGdW5jdGlvbgogCVBHQkVOQ0hfTEUsCiAJ UEdCRU5DSF9MVCwKIAlQR0JFTkNIX0lTLAotCVBHQkVOQ0hfQ0FTRQorCVBHQkVOQ0hfQ0FT RSwKKwlQR0JFTkNIX0hBU0hfRk5WMUEsCisJUEdCRU5DSF9IQVNIX01VUk1VUjIKIH0gUGdC ZW5jaEZ1bmN0aW9uOwogCiB0eXBlZGVmIHN0cnVjdCBQZ0JlbmNoRXhwciBQZ0JlbmNoRXhw cjsKQEAgLTEzNiw2ICsxMzgsNyBAQCBzdHJ1Y3QgUGdCZW5jaEV4cHJMaXN0CiB9OwogCiBl eHRlcm4gUGdCZW5jaEV4cHIgKmV4cHJfcGFyc2VfcmVzdWx0OworZXh0ZXJuIGludCBoYXNo X3NlZWQ7CiAKIGV4dGVybiBpbnQJZXhwcl95eXBhcnNlKHl5c2Nhbl90IHl5c2Nhbm5lcik7 CiBleHRlcm4gaW50CWV4cHJfeXlsZXgodW5pb24gWVlTVFlQRSAqbHZhbHAsIHl5c2Nhbl90 IHl5c2Nhbm5lcik7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVuY2gvdC8wMDFfcGdiZW5j aF93aXRoX3NlcnZlci5wbCBiL3NyYy9iaW4vcGdiZW5jaC90LzAwMV9wZ2JlbmNoX3dpdGhf c2VydmVyLnBsCmluZGV4IGE4YjI5NjIuLmVkYTI4ZWEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdiZW5jaC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsCisrKyBiL3NyYy9iaW4vcGdi ZW5jaC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsCkBAIC0yNTksNiArMjU5LDEwIEBA IHBnYmVuY2goCiAJCXFye2NvbW1hbmQ9NDYuOiBpbnQgNDZcYn0sCiAJCXFye2NvbW1hbmQ9 NDcuOiBib29sZWFuIHRydWVcYn0sCiAJCXFye2NvbW1hbmQ9NDguOiBib29sZWFuIHRydWVc Yn0sCisJCXFye2NvbW1hbmQ9NDkuOiBpbnQgLTU4MTc4NzcwODE3Njg3MjE2NzZcYn0sCisJ CXFye2NvbW1hbmQ9NTAuOiBib29sZWFuIHRydWVcYn0sCisJCXFye2NvbW1hbmQ9NTEuOiBp bnQgLTc3OTM4MjkzMzUzNjU1NDIxNTNcYn0sCisJCXFye2NvbW1hbmQ9NTIuOiBpbnQgLT9c ZCtcYn0sCiAJXSwKIAkncGdiZW5jaCBleHByZXNzaW9ucycsCiAJeyAgICcwMDFfcGdiZW5j aF9leHByZXNzaW9ucycgPT4gcXstLSBpbnRlZ2VyIGZ1bmN0aW9ucwpAQCAtMzI3LDYgKzMz MSwxMSBAQCBwZ2JlbmNoKAogXHNldCBuNiBkZWJ1Zyg6biBJUyBOVUxMIEFORCBOT1QgOmYg QU5EIDp0KQogLS0gY29uZGl0aW9uYWwgdHJ1dGgKIFxzZXQgY3MgZGVidWcoQ0FTRSBXSEVO IDEgVEhFTiBUUlVFIEVORCBBTkQgQ0FTRSBXSEVOIDEuMCBUSEVOIFRSVUUgRU5EIEFORCBD QVNFIFdIRU4gOm4gVEhFTiBOVUxMIEVMU0UgVFJVRSBFTkQpCistLSBoYXNoIGZ1bmN0aW9u cworXHNldCBoMCBkZWJ1ZyhoYXNoKDEwLCA1NDMyKSkKK1xzZXQgaDEgZGVidWcoOmgwID0g aGFzaF9tdXJtdXIyKDEwLCA1NDMyKSkKK1xzZXQgaDMgZGVidWcoaGFzaF9mbnYxYSgxMCwg NTQzMikpCitcc2V0IGg0IGRlYnVnKGhhc2goMTApKQogLS0gbGF6eSBldmFsdWF0aW9uCiBc c2V0IHp5IDAKIFxzZXQgeXogZGVidWcoY2FzZSB3aGVuIDp6eSA9IDAgdGhlbiAtMSBlbHNl ICgxIC8gOnp5KSBlbmQpCg== --------------083461624C3AEA41ABF241B8 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="002_pgbench_hash_seed.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="002_pgbench_hash_seed.patch" ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9wZ2JlbmNoLnNnbWwKaW5kZXggYzU3NWYxOS4uNzkwZjA3NSAxMDA2NDQKLS0t IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Jl Zi9wZ2JlbmNoLnNnbWwKQEAgLTg4Miw2ICs4ODIsMTEgQEAgcGdiZW5jaCA8b3B0aW9uYWw+ IDxyZXBsYWNlYWJsZT5vcHRpb25zPC9yZXBsYWNlYWJsZT4gPC9vcHRpb25hbD4gPHJlcGxh Y2VhYmxlPmQKICAgICAgICA8ZW50cnk+IDxsaXRlcmFsPmNsaWVudF9pZDwvbGl0ZXJhbD4g PC9lbnRyeT4KICAgICAgICA8ZW50cnk+dW5pcXVlIG51bWJlciBpZGVudGlmeWluZyB0aGUg Y2xpZW50IHNlc3Npb24gKHN0YXJ0cyBmcm9tIHplcm8pPC9lbnRyeT4KICAgICAgIDwvcm93 PgorCisgICAgICA8cm93PgorICAgICAgIDxlbnRyeT4gPGxpdGVyYWw+cmFuZG9tX3NlZWQ8 L2xpdGVyYWw+IDwvZW50cnk+CisgICAgICAgPGVudHJ5PnJhbmRvbSBzZWVkIHNoYXJlZCBm b3IgYWxsIHNlc3Npb25zPC9lbnRyeT4KKyAgICAgIDwvcm93PgogICAgICA8L3Rib2R5Pgog ICAgIDwvdGdyb3VwPgogICAgPC90YWJsZT4KQEAgLTE0NDQsNiArMTQ0OSwyMiBAQCBmKHgp ID0gUEhJKDIuMCAqIHBhcmFtZXRlciAqICh4IC0gbXUpIC8gKG1heCAtIG1pbiArIDEpKSAv CiAgICA8L2l0ZW1pemVkbGlzdD4KIAogICA8cGFyYT4KKyAgICBIYXNoIGZ1bmN0aW9ucyBh Y2NlcHRzIGFuIGlucHV0IHZhbHVlIGFuZCBvcHRpb25hbCBzZWVkIHBhcmFtZXRlci4gSW4g Y2FzZSBzZWVkIGlzbid0IHByb3ZpZGVkIDpyYW5kb21fc2VlZCB2YWx1ZSBpcyB1c2VkLiBI YXNoIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIG1vZGlmeSB0aGUg ZGlzdHJpYnV0aW9uIG9mIHJhbmRvbV96aXBmaWFuIG9yIHJhbmRvbV9leHBvbmVudGlhbCBm dW5jdGlvbnMgaW4gb3JkZXIgdG8gb2J0YWluIHNjYXR0ZXJlZCBkaXN0cmlidXRpb24uIFRo dXMgdGhlIGZvbGxvd2luZyBsaXN0aW5nIHNpbXVsYXRlcyBzb21lIHBvc3NpYmxlIHJlYWwg d29ybGQgd29ya2xvYWQgdHlwaWNhbCBmb3Igc29jaWFsIG1lZGlhIGFuZCBibG9nZ2luZyBw bGF0Zm9ybXMgd2hlcmUgZmV3IGFjY291bnRzIGdlbmVyYXRlcyBleGNlc3NpdmUgbG9hZDoK KworPHByb2dyYW1saXN0aW5nPgorXHNldCByIHJhbmRvbV96aXBmaWFuKDAsIDEwMDAwMCwg MC45OSkKK1xzZXQgayBhYnMoaGFzaCg6cikpICUgMTAwMAorPC9wcm9ncmFtbGlzdGluZz4K KworICAgIEluIHNvbWUgY2FzZXMgc2V2ZXJhbCBkaXN0aW5jdCBkaXN0cmlidXRpb25zIGFy ZSBuZWVkZWQgd2hpY2ggZG9uJ3QgY29ycmVsYXRlIHdpdGggZWFjaCBvdGhlciBhbmQgdGhp cyBpcyB3aGVuIGltcGxpY2l0IHNlZWQgcGFyYW1ldGVyIGNvbWVzIGluIGhhbmR5OgorCis8 cHJvZ3JhbWxpc3Rpbmc+Citcc2V0IGsxIGFicyhoYXNoKDpyKSwgOnJhbmRvbV9zZWVkICsg MTIzKSAlIDEwMDAKK1xzZXQgazIgYWJzKGhhc2goOnIpLCA6cmFuZG9tX3NlZWQgKyAzMjEp ICUgMTAwMAorPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgogICAg QXMgYW4gZXhhbXBsZSwgdGhlIGZ1bGwgZGVmaW5pdGlvbiBvZiB0aGUgYnVpbHQtaW4gVFBD LUItbGlrZQogICAgdHJhbnNhY3Rpb24gaXM6CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdi ZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCmluZGV4IDZlMGYz NDAuLmI2ZWQ4MjkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKKysr IGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYwpAQCAtMTkyLDggKzE5Miw2IEBAIGNoYXIJ ICAgKmRiTmFtZTsKIGNoYXIJICAgKmxvZ2ZpbGVfcHJlZml4ID0gTlVMTDsKIGNvbnN0IGNo YXIgKnByb2duYW1lOwogCi1pbnQJCQloYXNoX3NlZWQ7Ci0KICNkZWZpbmUgV1NFUCAnQCcJ CQkJLyogd2VpZ2h0IHNlcGFyYXRvciAqLwogCiB2b2xhdGlsZSBib29sIHRpbWVyX2V4Y2Vl ZGVkID0gZmFsc2U7CS8qIGZsYWcgZnJvbSBzaWduYWwgaGFuZGxlciAqLwpAQCAtNDQ5LDgg KzQ0Nyw2IEBAIHN0YXRpYyBpbnQJbnVtX3NjcmlwdHM7CQkvKiBudW1iZXIgb2Ygc2NyaXB0 cyBpbiBzcWxfc2NyaXB0W10gKi8KIHN0YXRpYyBpbnQJbnVtX2NvbW1hbmRzID0gMDsJLyog dG90YWwgbnVtYmVyIG9mIENvbW1hbmQgc3RydWN0cyAqLwogc3RhdGljIGludDY0IHRvdGFs X3dlaWdodCA9IDA7CiAKLXN0YXRpYyBpbnQgaGFzaF9zZWVkOwkJCS8qIGRlZmF1bHQgc2Vl ZCB1c2VkIGluIGhhc2ggZnVuY3Rpb25zICovCi0KIHN0YXRpYyBpbnQJZGVidWcgPSAwOwkJ CS8qIGRlYnVnIGZsYWcgKi8KIAogLyogQnVpbHRpbiB0ZXN0IHNjcmlwdHMgKi8KQEAgLTIy ODYsNyArMjI4MiwxOCBAQCBldmFsU3RhbmRhcmRGdW5jKAogCQkJCQkJcmV0dXJuIGZhbHNl OwogCQkJCX0KIAkJCQllbHNlCi0JCQkJCXNlZWQgPSBoYXNoX3NlZWQ7CisJCQkJeworCQkJ CQlWYXJpYWJsZSAqdmFyOworCisJCQkJCS8qIHJlYWQgc2VlZCBmcm9tIHZhcmlhYmxlICov CisJCQkJCXZhciA9IGxvb2t1cFZhcmlhYmxlKHN0LCAicmFuZG9tX3NlZWQiKTsKKwkJCQkJ QXNzZXJ0KHZhciAhPSBOVUxMKTsKKwkJCQkJaWYgKHZhci0+dmFsdWUudHlwZSA9PSBQR0JU X05PX1ZBTFVFKQorCQkJCQkJaWYgKCFtYWtlVmFyaWFibGVWYWx1ZSh2YXIpKQorCQkJCQkJ CXJldHVybiBmYWxzZTsKKwkJCQkJaWYgKCFjb2VyY2VUb0ludCgmdmFyLT52YWx1ZSwgJnNl ZWQpKQorCQkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KIAogCQkJCXJlc3VsdCA9IChmdW5j ID09IFBHQkVOQ0hfSEFTSF9GTlYxQSkgPwogCQkJCQlnZXRIYXNoRm52MWEodmFsLCBzZWVk KSA6IGdldEhhc2hNdXJtdXIyKHZhbCwgc2VlZCk7CkBAIC01MDA0LDYgKzUwMTEsMTAgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICovCiAJbWFpbl9waWQgPSAoaW50KSBn ZXRwaWQoKTsKIAorCS8qIHNldCByYW5kb20gc2VlZCAqLworCUlOU1RSX1RJTUVfU0VUX0NV UlJFTlQoc3RhcnRfdGltZSk7CisJc3JhbmRvbSgodW5zaWduZWQgaW50KSBJTlNUUl9USU1F X0dFVF9NSUNST1NFQyhzdGFydF90aW1lKSk7CisKIAlpZiAobmNsaWVudHMgPiAxKQogCXsK IAkJc3RhdGUgPSAoQ1N0YXRlICopIHBnX3JlYWxsb2Moc3RhdGUsIHNpemVvZihDU3RhdGUp ICogbmNsaWVudHMpOwpAQCAtNTExOCw2ICs1MTI5LDE2IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQl9CiAJfQogCisJLyogc2V0IGRlZmF1bHQgc2VlZCBmb3IgaGFzaCBm dW5jdGlvbnMgKi8KKwlpZiAobG9va3VwVmFyaWFibGUoJnN0YXRlWzBdLCAicmFuZG9tX3Nl ZWQiKSA9PSBOVUxMKQorCXsKKwkJaW50NjQgc2VlZCA9IHJhbmRvbSgpOworCisJCWZvciAo aSA9IDA7IGkgPCBuY2xpZW50czsgaSsrKQorCQkJaWYgKCFwdXRWYXJpYWJsZUludCgmc3Rh dGVbaV0sICJzdGFydHVwIiwgInJhbmRvbV9zZWVkIiwgc2VlZCkpCisJCQkJZXhpdCgxKTsK Kwl9CisKIAlpZiAoIWlzX25vX3ZhY3V1bSkKIAl7CiAJCWZwcmludGYoc3RkZXJyLCAic3Rh cnRpbmcgdmFjdXVtLi4uIik7CkBAIC01MTM1LDEzICs1MTU2LDYgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAJfQogCVBRZmluaXNoKGNvbik7CiAKLQkvKiBzZXQgcmFuZG9t IHNlZWQgKi8KLQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHN0YXJ0X3RpbWUpOwotCXNyYW5k b20oKHVuc2lnbmVkIGludCkgSU5TVFJfVElNRV9HRVRfTUlDUk9TRUMoc3RhcnRfdGltZSkp OwotCi0JLyogc2V0IGRlZmF1bHQgc2VlZCBmb3IgaGFzaCBmdW5jdGlvbnMgKi8KLQloYXNo X3NlZWQgPSByYW5kb20oKTsKLQogCS8qIHNldCB1cCB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVz ICovCiAJdGhyZWFkcyA9IChUU3RhdGUgKikgcGdfbWFsbG9jKHNpemVvZihUU3RhdGUpICog bnRocmVhZHMpOwogCW5jbGllbnRzX2RlYWx0ID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdiZW5jaC9wZ2JlbmNoLmggYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5oCmluZGV4IDYw NzA5MDguLjY5ODM4NjUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmgK KysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guaApAQCAtMTM4LDcgKzEzOCw2IEBAIHN0 cnVjdCBQZ0JlbmNoRXhwckxpc3QKIH07CiAKIGV4dGVybiBQZ0JlbmNoRXhwciAqZXhwcl9w YXJzZV9yZXN1bHQ7Ci1leHRlcm4gaW50IGhhc2hfc2VlZDsKIAogZXh0ZXJuIGludAlleHBy X3l5cGFyc2UoeXlzY2FuX3QgeXlzY2FubmVyKTsKIGV4dGVybiBpbnQJZXhwcl95eWxleCh1 bmlvbiBZWVNUWVBFICpsdmFscCwgeXlzY2FuX3QgeXlzY2FubmVyKTsK --------------083461624C3AEA41ABF241B8--