Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p6k8O-0002Gu-1Y for pgsql-hackers@arkaria.postgresql.org; Sun, 18 Dec 2022 03:14:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p6k8L-0005IB-KM for pgsql-hackers@arkaria.postgresql.org; Sun, 18 Dec 2022 03:14:37 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p6k8K-0005I2-Th for pgsql-hackers@lists.postgresql.org; Sun, 18 Dec 2022 03:14:37 +0000 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1p6k8D-0005Hd-PK for pgsql-hackers@postgresql.org; Sun, 18 Dec 2022 03:14:36 +0000 Received: by mail-pj1-x1030.google.com with SMTP id u15-20020a17090a3fcf00b002191825cf02so5963582pjm.2 for ; Sat, 17 Dec 2022 19:14:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20210112.gappssmtp.com; s=20210112; h=mime-version:user-agent:date:to:from:subject:message-id:from:to:cc :subject:date:message-id:reply-to; bh=slYVMAP9VrQPln3RprJblSx5ghmKYF70JwOY5NgT47Q=; b=zAxkHdAg28p2It+83AnAN+4NgHrNP6nhjCdY2H1KOUrKDFURegIzQCrKJ3lzW8tyi8 d1oB+yZwrGLmChJDGoKULx5Fctl/wb7eWY0AwHkfiCcjnZzO8Sz++mZtSjziH8qLaiNm 2sW4yFWS8rzn62mWjiet2hDVp0MC1pO0ETWIFI/6PQbmQeZUp3mRLfIASX9mLT1ewgx5 mLoVGr51NcGfor7GxRmD/2ZtHM1WxD6NCRC5+twCp130LyohUoZzb0tEfyyqoPnICwf5 4UK9v3hLR7vvMfyKomgehJPJSVpoHLq5DKi4d9yzMhR0BQ5mMCP/jZjR9e1T6JuyRhw+ nXDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:user-agent:date:to:from:subject:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=slYVMAP9VrQPln3RprJblSx5ghmKYF70JwOY5NgT47Q=; b=dTxuy/7hCVKv+J7v8PUCUyOOjCRoabI0WREdOSeryb8Jd3mva/Asdob0/2Qw1PpbJt miGqHZJ+ppMq/Z+eeBjmk4WsaAcNrRIlUrzzdWNQ4emgxSJtTY7XRDCinTwvZG1Vj457 Zuexnt2UwOwMtHU+0DFU1SBcx9/LEWPNWgRGOJT/sY78ZtjQZmswbcutLeiiLMg4Em4A MqdzLiNy+2f1/n1IGAvhQ2gZOCF/e0xhGUijvY1nF6iNURgU86WQV/6WxRZx+q5IxRtV i0OPDUxLNQ0tZAOMFYot8MnpyofXP4NTvIlAH2Dx9aTVJNDdHl5NEsQMmubLmYFQVyps zdkg== X-Gm-Message-State: ANoB5plfELUEwGomXGQuTNvoPJ2V8RaVucU2e/A9+TRM5E5/K18ZevPD S2iPhgWMyggBQeuMPTEDL0fh5STAH43Ryi/N X-Google-Smtp-Source: AA0mqf6r5Yhyth92IWGnNijFyJUXMPixIhUGQuZOPFWSQwvCLEzKp54Z2qweg2SgKJ+3WSvKQYHHOw== X-Received: by 2002:a05:6a21:1084:b0:9d:efbf:48bf with SMTP id nl4-20020a056a21108400b0009defbf48bfmr38231829pzb.3.1671333266213; Sat, 17 Dec 2022 19:14:26 -0800 (PST) Received: from jeff-laptop.lan (c-73-231-146-4.hsd1.ca.comcast.net. [73.231.146.4]) by smtp.gmail.com with ESMTPSA id y10-20020a63fa0a000000b0048988ed9e4bsm587924pgh.19.2022.12.17.19.14.24 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 17 Dec 2022 19:14:25 -0800 (PST) Message-ID: Subject: Rework of collation code, extensibility From: Jeff Davis To: pgsql-hackers@postgresql.org Date: Sat, 17 Dec 2022 19:14:23 -0800 Content-Type: multipart/mixed; boundary="=-Wwxe+64KlqA5LB703TXv" User-Agent: Evolution 3.44.4-0ubuntu1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-Wwxe+64KlqA5LB703TXv Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Attached is a new patch series. I think there are enough changes that this has become more of a "rework" of the collation code rather than just a refactoring. This is a continuation of some prior work[1][2] in a new thread given its new scope. Benefits: 1. Clearer division of responsibilities. 2. More consistent between libc and ICU providers. 3. Hooks that allow extensions to replace collation provider libraries. 4. New tests for the collation provider library hooks. There are a lot of changes, and still some loose ends, but I believe a few of these patches are close to ready. This set of changes does not express an opinion on how we might want to support multiple provider libraries in core; but whatever we choose, it should be easier to accomplish. Right now, the hooks have limited information on which to make the choice for a specific version of a collation provider library, but that's because there's limited information in the catalog. If the discussion here[3] concludes in adding collation provider library or library version information to the catalog, we can add additional parameters to the hooks. [1] https://postgr.es/m/99aa79cceefd1fe84fda23510494b8fbb7ad1e70.camel@j-davis.= com [2] https://postgr.es/m/c4fda90ec6a7568a896f243a38eb273c3b5c3d93.camel@j-davis.= com [3] https://postgr.es/m/CA+hUKGLEqMhnpZrgAcisoUeYFGz8W6EWdhtK2h-4QN0iOSFRqw@mai= l.gmail.com --=20 Jeff Davis PostgreSQL Contributor Team - AWS --=-Wwxe+64KlqA5LB703TXv Content-Disposition: attachment; filename="v4-0001-Add-pg_strcoll-and-pg_strncoll.patch" Content-Type: text/x-patch; name="v4-0001-Add-pg_strcoll-and-pg_strncoll.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBmNjA4ZDBmZjBlOGNhZDNmODdjMWI3MWNkZDg3OTZhNjg1M2MxOTM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU aHUsIDEgRGVjIDIwMjIgMTQ6NDU6MTUgLTA4MDAKU3ViamVjdDogW1BBVENIIHY0IDEvNl0gQWRk IHBnX3N0cmNvbGwoKSBhbmQgcGdfc3RybmNvbGwoKS4KCkNhbGxlcnMgd2l0aCBOVUwtdGVybWlu YXRlZCBzdHJpbmdzIHNob3VsZCBjYWxsIHRoZSBmb3JtZXI7IGNhbGxlcnMKd2l0aCBzdHJpbmdz IGFuZCB0aGVpciBsZW5ndGggc2hvdWxkIGNhbGwgdGhlIGxhdHRlci4KLS0tCiBzcmMvYmFja2Vu ZC91dGlscy9hZHQvcGdfbG9jYWxlLmMgfCA0MjAgKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jICAgfCAyMzAgKy0tLS0tLS0tLS0t LS0tLQogc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggICAgIHwgICAzICsKIDMgZmlsZXMg Y2hhbmdlZCwgNDA2IGluc2VydGlvbnMoKyksIDI0NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvcGdfbG9jYWxlLmMKaW5kZXggMmI0MmQ5Y2NkOC4uNmNkNjI5ZWNiNCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9wZ19sb2NhbGUuYwpAQCAtNzksNiArNzksMTIgQEAKICNpbmNsdWRlIDxzaGx3YXBpLmg+ CiAjZW5kaWYKIAorLyoKKyAqIFRoaXMgc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0aGF0IG1vc3Qg c3RyaW5ncyB3aWxsIGZpdCwgYnV0IHNtYWxsIGVub3VnaAorICogdGhhdCB3ZSBmZWVsIGNvbWZv cnRhYmxlIHB1dHRpbmcgaXQgb24gdGhlIHN0YWNrCisgKi8KKyNkZWZpbmUJCVRFWFRCVUZMRU4J CQkxMDI0CisKICNkZWZpbmUJCU1BWF9MMTBOX0RBVEEJCTgwCiAKIApAQCAtMTIzLDYgKzEyOSwx OSBAQCBzdGF0aWMgY2hhciAqSXNvTG9jYWxlTmFtZShjb25zdCBjaGFyICopOwogI2VuZGlmCiAK ICNpZmRlZiBVU0VfSUNVCisvKgorICogQ29udmVydGVyIG9iamVjdCBmb3IgY29udmVydGluZyBi ZXR3ZWVuIElDVSdzIFVDaGFyIHN0cmluZ3MgYW5kIEMgc3RyaW5ncworICogaW4gZGF0YWJhc2Ug ZW5jb2RpbmcuICBTaW5jZSB0aGUgZGF0YWJhc2UgZW5jb2RpbmcgZG9lc24ndCBjaGFuZ2UsIHdl IG9ubHkKKyAqIG5lZWQgb25lIG9mIHRoZXNlIHBlciBzZXNzaW9uLgorICovCitzdGF0aWMgVUNv bnZlcnRlciAqaWN1X2NvbnZlcnRlciA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIGluaXRfaWN1X2Nv bnZlcnRlcih2b2lkKTsKK3N0YXRpYyBzaXplX3QgdWNoYXJfbGVuZ3RoKFVDb252ZXJ0ZXIgKmNv bnZlcnRlciwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbik7CitzdGF0aWMg aW50MzJfdCB1Y2hhcl9jb252ZXJ0KFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwKKwkJCQkJCQkgVUNo YXIgKmRlc3QsIGludDMyX3QgZGVzdGxlbiwKKwkJCQkJCQkgY29uc3QgY2hhciAqc3RyLCBzaXpl X3Qgc3JjbGVuKTsKIHN0YXRpYyB2b2lkIGljdV9zZXRfY29sbGF0aW9uX2F0dHJpYnV0ZXMoVUNv bGxhdG9yICpjb2xsYXRvciwgY29uc3QgY2hhciAqbG9jKTsKICNlbmRpZgogCkBAIC0xNzMxLDE1 ICsxNzUwLDM1NiBAQCBnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJzaW9uKGNoYXIgY29sbHByb3Zp ZGVyLCBjb25zdCBjaGFyICpjb2xsY29sbGF0ZSkKIAlyZXR1cm4gY29sbHZlcnNpb247CiB9CiAK Ky8qCisgKiBwZ19zdHJuY29sbF9saWJjX3dpbjMyX3V0ZjgKKyAqCisgKiBXaW4zMiBkb2VzIG5v dCBoYXZlIFVURi04LiBDb252ZXJ0IFVURjggYXJndW1lbnRzIHRvIHdpZGUgY2hhcmFjdGVycyBh bmQKKyAqIGludm9rZSB3Y3Njb2xsKCkgb3Igd2NzY29sbF9sKCkuCisgKi8KKyNpZmRlZiBXSU4z Mgorc3RhdGljIGludAorcGdfc3RybmNvbGxfbGliY193aW4zMl91dGY4KGNvbnN0IGNoYXIgKmFy ZzEsIHNpemVfdCBsZW4xLCBjb25zdCBjaGFyICphcmcyLAorCQkJCQkJCXNpemVfdCBsZW4yLCBw Z19sb2NhbGVfdCBsb2NhbGUpCit7CisJY2hhcgkJc2J1ZltURVhUQlVGTEVOXTsKKwljaGFyCSAg ICpidWYgPSBzYnVmOworCWNoYXIJICAgKmExcCwKKwkJCSAgICphMnA7CisJaW50CQkJYTFsZW4g PSBsZW4xICogMiArIDI7CisJaW50CQkJYTJsZW4gPSBsZW4yICogMiArIDI7CisJaW50CQkJcjsK KwlpbnQJCQlyZXN1bHQ7CisKKwlBc3NlcnQoIWxvY2FsZSB8fCBsb2NhbGUtPnByb3ZpZGVyID09 IENPTExQUk9WSURFUl9MSUJDKTsKKwlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGluZygpID09IFBH X1VURjgpOworI2lmbmRlZiBXSU4zMgorCUFzc2VydChmYWxzZSk7CisjZW5kaWYKKworCWlmIChh MWxlbiArIGEybGVuID4gVEVYVEJVRkxFTikKKwkJYnVmID0gcGFsbG9jKGExbGVuICsgYTJsZW4p OworCisJYTFwID0gYnVmOworCWEycCA9IGJ1ZiArIGExbGVuOworCisJLyogQVBJIGRvZXMgbm90 IHdvcmsgZm9yIHplcm8tbGVuZ3RoIGlucHV0ICovCisJaWYgKGxlbjEgPT0gMCkKKwkJciA9IDA7 CisJZWxzZQorCXsKKwkJciA9IE11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfVVRGOCwgMCwgYXJnMSwg bGVuMSwKKwkJCQkJCQkJKExQV1NUUikgYTFwLCBhMWxlbiAvIDIpOworCQlpZiAoIXIpCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgY29udmVydCBzdHJpbmcgdG8g VVRGLTE2OiBlcnJvciBjb2RlICVsdSIsCisJCQkJCQkJR2V0TGFzdEVycm9yKCkpKSk7CisJfQor CSgoTFBXU1RSKSBhMXApW3JdID0gMDsKKworCWlmIChsZW4yID09IDApCisJCXIgPSAwOworCWVs c2UKKwl7CisJCXIgPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX1VURjgsIDAsIGFyZzIsIGxlbjIs CisJCQkJCQkJCShMUFdTVFIpIGEycCwgYTJsZW4gLyAyKTsKKwkJaWYgKCFyKQorCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycm1zZygiY291bGQgbm90IGNvbnZlcnQgc3RyaW5nIHRvIFVURi0x NjogZXJyb3IgY29kZSAlbHUiLAorCQkJCQkJCUdldExhc3RFcnJvcigpKSkpOworCX0KKwkoKExQ V1NUUikgYTJwKVtyXSA9IDA7CisKKwllcnJubyA9IDA7CisjaWZkZWYgSEFWRV9MT0NBTEVfVAor CWlmIChsb2NhbGUpCisJCXJlc3VsdCA9IHdjc2NvbGxfbCgoTFBXU1RSKSBhMXAsIChMUFdTVFIp IGEycCwgbG9jYWxlLT5pbmZvLmx0KTsKKwllbHNlCisjZW5kaWYKKwkJcmVzdWx0ID0gd2NzY29s bCgoTFBXU1RSKSBhMXAsIChMUFdTVFIpIGEycCk7CisJaWYgKHJlc3VsdCA9PSAyMTQ3NDgzNjQ3 KQkvKiBfTkxTQ01QRVJST1I7IG1pc3NpbmcgZnJvbSBtaW5ndworCQkJCQkJCQkgKiBoZWFkZXJz ICovCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygiY291bGQgbm90IGNvbXBhcmUgVW5p Y29kZSBzdHJpbmdzOiAlbSIpKSk7CisKKwlpZiAoYnVmICE9IHNidWYpCisJCXBmcmVlKGJ1Zik7 CisKKwlyZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCisKKy8qCisg KiBwZ19zdHJjb2xsX2xpYmMKKyAqCisgKiBDYWxsIHN0cmNvbGwoKSwgc3RyY29sbF9sKCksIHdj c2NvbGwoKSwgb3Igd2NzY29sbF9sKCkgYXMgYXBwcm9wcmlhdGUgZm9yCisgKiB0aGUgZ2l2ZW4g bG9jYWxlLCBwbGF0Zm9ybSwgYW5kIGRhdGFiYXNlIGVuY29kaW5nLiBJZiB0aGUgbG9jYWxlIGlz IE5VTEwsCisgKiB1c2UgdGhlIGRhdGFiYXNlIGNvbGxhdGlvbi4KKyAqCisgKiBBcmd1bWVudHMg bXVzdCBiZSBlbmNvZGVkIGluIHRoZSBkYXRhYmFzZSBlbmNvZGluZyBhbmQgbnVsLXRlcm1pbmF0 ZWQuCisgKi8KK3N0YXRpYyBpbnQKK3BnX3N0cmNvbGxfbGliYyhjb25zdCBjaGFyICphcmcxLCBj b25zdCBjaGFyICphcmcyLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJaW50IHJlc3VsdDsKKwor CUFzc2VydCghbG9jYWxlIHx8IGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMp OworI2lmZGVmIFdJTjMyCisJaWYgKEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KQor CXsKKwkJc2l6ZV90IGxlbjEgPSBzdHJsZW4oYXJnMSk7CisJCXNpemVfdCBsZW4yID0gc3RybGVu KGFyZzIpOworCQlyZXN1bHQgPSBwZ19zdHJuY29sbF9saWJjX3dpbjMyX3V0ZjgoYXJnMSwgbGVu MSwgYXJnMiwgbGVuMiwgbG9jYWxlKTsKKwl9CisJZWxzZQorI2VuZGlmCQkJCQkJCS8qIFdJTjMy ICovCisJaWYgKGxvY2FsZSkKKwl7CisjaWZkZWYgSEFWRV9MT0NBTEVfVAorCQlyZXN1bHQgPSBz dHJjb2xsX2woYXJnMSwgYXJnMiwgbG9jYWxlLT5pbmZvLmx0KTsKKyNlbHNlCisJCS8qIHNob3Vs ZG4ndCBoYXBwZW4gKi8KKwkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjog JWMiLCBsb2NhbGUtPnByb3ZpZGVyKTsKKyNlbmRpZgorCX0KKwllbHNlCisJCXJlc3VsdCA9IHN0 cmNvbGwoYXJnMSwgYXJnMik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogcGdfc3Ry bmNvbGxfbGliYworICoKKyAqIE51bGwtdGVybWluYXRlIHRoZSBhcmd1bWVudHMgYW5kIGNhbGwg cGdfc3RyY29sbF9saWJjKCkuCisgKi8KK3N0YXRpYyBpbnQKK3BnX3N0cm5jb2xsX2xpYmMoY29u c3QgY2hhciAqYXJnMSwgc2l6ZV90IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIsIHNpemVfdCBsZW4y LAorCQkJCSBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJY2hhcgkgc2J1ZltURVhUQlVGTEVOXTsK KwljaGFyCSpidWYJICA9IHNidWY7CisJc2l6ZV90CSBidWZzaXplMSA9IGxlbjEgKyAxOworCXNp emVfdAkgYnVmc2l6ZTIgPSBsZW4yICsgMTsKKwljaGFyCSphcmcxbjsKKwljaGFyCSphcmcybjsK KwlpbnQJCSByZXN1bHQ7CisKKwlBc3NlcnQoIWxvY2FsZSB8fCBsb2NhbGUtPnByb3ZpZGVyID09 IENPTExQUk9WSURFUl9MSUJDKTsKKworI2lmZGVmIFdJTjMyCisJLyogY2hlY2sgZm9yIHRoaXMg Y2FzZSBiZWZvcmUgZG9pbmcgdGhlIHdvcmsgZm9yIG51bC10ZXJtaW5hdGlvbiAqLworCWlmIChH ZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCkKKwkJcmV0dXJuIHBnX3N0cm5jb2xsX2xp YmNfd2luMzJfdXRmOChhcmcxLCBsZW4xLCBhcmcyLCBsZW4yLCBsb2NhbGUpOworI2VuZGlmCQkJ CQkJCS8qIFdJTjMyICovCisKKwlpZiAoYnVmc2l6ZTEgKyBidWZzaXplMiA+IFRFWFRCVUZMRU4p CisJCWJ1ZiA9IHBhbGxvYyhidWZzaXplMSArIGJ1ZnNpemUyKTsKKworCWFyZzFuID0gYnVmOwor CWFyZzJuID0gYnVmICsgYnVmc2l6ZTE7CisKKwkvKiBudWwtdGVybWluYXRlIGFyZ3VtZW50cyAq LworCW1lbWNweShhcmcxbiwgYXJnMSwgbGVuMSk7CisJYXJnMW5bbGVuMV0gPSAnXDAnOworCW1l bWNweShhcmcybiwgYXJnMiwgbGVuMik7CisJYXJnMm5bbGVuMl0gPSAnXDAnOworCisJcmVzdWx0 ID0gcGdfc3RyY29sbF9saWJjKGFyZzFuLCBhcmcybiwgbG9jYWxlKTsKKworCWlmIChidWYgIT0g c2J1ZikKKwkJcGZyZWUoYnVmKTsKKworCXJldHVybiByZXN1bHQ7Cit9CiAKICNpZmRlZiBVU0Vf SUNVCisKIC8qCi0gKiBDb252ZXJ0ZXIgb2JqZWN0IGZvciBjb252ZXJ0aW5nIGJldHdlZW4gSUNV J3MgVUNoYXIgc3RyaW5ncyBhbmQgQyBzdHJpbmdzCi0gKiBpbiBkYXRhYmFzZSBlbmNvZGluZy4g IFNpbmNlIHRoZSBkYXRhYmFzZSBlbmNvZGluZyBkb2Vzbid0IGNoYW5nZSwgd2Ugb25seQotICog bmVlZCBvbmUgb2YgdGhlc2UgcGVyIHNlc3Npb24uCisgKiBwZ19zdHJuY29sbF9pY3Vfbm9fdXRm OAorICoKKyAqIENvbnZlcnQgdGhlIGFyZ3VtZW50cyBmcm9tIHRoZSBkYXRhYmFzZSBlbmNvZGlu ZyB0byBVQ2hhciBzdHJpbmdzLCB0aGVuCisgKiBjYWxsIHVjb2xfc3RyY29sbCgpLgorICoKKyAq IFdoZW4gdGhlIGRhdGFiYXNlIGVuY29kaW5nIGlzIFVURi04LCBhbmQgSUNVIHN1cHBvcnRzIHVj b2xfc3RyY29sbFVURjgoKSwKKyAqIGNhbGxlciBzaG91bGQgY2FsbCB0aGF0IGluc3RlYWQuCiAg Ki8KLXN0YXRpYyBVQ29udmVydGVyICppY3VfY29udmVydGVyID0gTlVMTDsKK3N0YXRpYyBpbnQK K3BnX3N0cm5jb2xsX2ljdV9ub191dGY4KGNvbnN0IGNoYXIgKmFyZzEsIHNpemVfdCBsZW4xLAor CQkJCQkJY29uc3QgY2hhciAqYXJnMiwgc2l6ZV90IGxlbjIsIHBnX2xvY2FsZV90IGxvY2FsZSkK K3sKKwljaGFyCSBzYnVmW1RFWFRCVUZMRU5dOworCWNoYXIJKmJ1ZiA9IHNidWY7CisJaW50MzJf dAkgdWxlbjE7CisJaW50MzJfdAkgdWxlbjI7CisJc2l6ZV90ICAgYnVmc2l6ZTE7CisJc2l6ZV90 ICAgYnVmc2l6ZTI7CisJVUNoYXIJKnVjaGFyMSwKKwkJCSp1Y2hhcjI7CisJaW50CQkgcmVzdWx0 OworCisJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7CisjaWZk ZWYgSEFWRV9VQ09MX1NUUkNPTExVVEY4CisJQXNzZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSAh PSBQR19VVEY4KTsKKyNlbmRpZgorCisJaW5pdF9pY3VfY29udmVydGVyKCk7CisKKwl1bGVuMSA9 IHVjaGFyX2xlbmd0aChpY3VfY29udmVydGVyLCBhcmcxLCBsZW4xKTsKKwl1bGVuMiA9IHVjaGFy X2xlbmd0aChpY3VfY29udmVydGVyLCBhcmcyLCBsZW4yKTsKKworCWJ1ZnNpemUxID0gKHVsZW4x ICsgMSkgKiBzaXplb2YoVUNoYXIpOworCWJ1ZnNpemUyID0gKHVsZW4yICsgMSkgKiBzaXplb2Yo VUNoYXIpOworCisJaWYgKGJ1ZnNpemUxICsgYnVmc2l6ZTIgPiBURVhUQlVGTEVOKQorCQlidWYg PSBwYWxsb2MoYnVmc2l6ZTEgKyBidWZzaXplMik7CisKKwl1Y2hhcjEgPSAoVUNoYXIgKikgYnVm OworCXVjaGFyMiA9IChVQ2hhciAqKSAoYnVmICsgYnVmc2l6ZTEpOwogCisJdWxlbjEgPSB1Y2hh cl9jb252ZXJ0KGljdV9jb252ZXJ0ZXIsIHVjaGFyMSwgdWxlbjEgKyAxLCBhcmcxLCBsZW4xKTsK Kwl1bGVuMiA9IHVjaGFyX2NvbnZlcnQoaWN1X2NvbnZlcnRlciwgdWNoYXIyLCB1bGVuMiArIDEs IGFyZzIsIGxlbjIpOworCisJcmVzdWx0ID0gdWNvbF9zdHJjb2xsKGxvY2FsZS0+aW5mby5pY3Uu dWNvbCwKKwkJCQkJCSAgdWNoYXIxLCB1bGVuMSwKKwkJCQkJCSAgdWNoYXIyLCB1bGVuMik7CisK KwlpZiAoYnVmICE9IHNidWYpCisJCXBmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmVzdWx0OworfQor CisvKgorICogcGdfc3RybmNvbGxfaWN1CisgKgorICogQ2FsbCB1Y29sX3N0cmNvbGxVVEY4KCkg b3IgdWNvbF9zdHJjb2xsKCkgYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBnaXZlbgorICogZGF0YWJh c2UgZW5jb2RpbmcuCisgKgorICogQXJndW1lbnRzIG11c3QgYmUgZW5jb2RlZCBpbiB0aGUgZGF0 YWJhc2UgZW5jb2RpbmcuCisgKi8KK3N0YXRpYyBpbnQKK3BnX3N0cm5jb2xsX2ljdShjb25zdCBj aGFyICphcmcxLCBzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwgc2l6ZV90IGxlbjIsCisJ CQkJcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCWludCByZXN1bHQ7CisKKwlBc3NlcnQobG9jYWxl LT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKTsKKworI2lmZGVmIEhBVkVfVUNPTF9TVFJD T0xMVVRGOAorCWlmIChHZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCkKKwl7CisJCVVF cnJvckNvZGUJc3RhdHVzOworCisJCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKKwkJcmVzdWx0ID0g dWNvbF9zdHJjb2xsVVRGOChsb2NhbGUtPmluZm8uaWN1LnVjb2wsCisJCQkJCQkJCSAgYXJnMSwg bGVuMSwKKwkJCQkJCQkJICBhcmcyLCBsZW4yLAorCQkJCQkJCQkgICZzdGF0dXMpOworCQlpZiAo VV9GQUlMVVJFKHN0YXR1cykpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJjb2xs YXRpb24gZmFpbGVkOiAlcyIsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJfQorCWVsc2UKKyNl bmRpZgorCXsKKwkJcmVzdWx0ID0gcGdfc3RybmNvbGxfaWN1X25vX3V0ZjgoYXJnMSwgbGVuMSwg YXJnMiwgbGVuMiwgbG9jYWxlKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICog cGdfc3RyY29sbF9pY3UKKyAqCisgKiBDYWxjdWxhdGUgdGhlIHN0cmluZyBsZW5ndGhzIGFuZCBj YWxsIHBnX3N0cm5jb2xsX2ljdSgpLgorICovCitzdGF0aWMgaW50CitwZ19zdHJjb2xsX2ljdShj b25zdCBjaGFyICphcmcxLCBjb25zdCBjaGFyICphcmcyLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7 CisJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7CisJcmV0dXJu IHBnX3N0cm5jb2xsX2ljdShhcmcxLCAtMSwgYXJnMiwgLTEsIGxvY2FsZSk7Cit9CisKKyNlbmRp ZgkJCQkJCQkvKiBVU0VfSUNVICovCisKKy8qCisgKiBwZ19zdHJjb2xsCisgKgorICogQ2FsbCB1 Y29sX3N0cmNvbGxVVEY4KCksIHVjb2xfc3RyY29sbCgpLCBzdHJjb2xsKCksIHN0cmNvbGxfbCgp LCB3Y3Njb2xsKCksCisgKiBvciB3Y3Njb2xsX2woKSBhcyBhcHByb3ByaWF0ZSBmb3IgdGhlIGdp dmVuIGxvY2FsZSwgcGxhdGZvcm0sIGFuZCBkYXRhYmFzZQorICogZW5jb2RpbmcuIElmIHRoZSBs b2NhbGUgaXMgbm90IHNwZWNpZmllZCwgdXNlIHRoZSBkYXRhYmFzZSBjb2xsYXRpb24uCisgKgor ICogQXJndW1lbnRzIG11c3QgYmUgZW5jb2RlZCBpbiB0aGUgZGF0YWJhc2UgZW5jb2RpbmcgYW5k IG51bC10ZXJtaW5hdGVkLgorICoKKyAqIElmIHRoZSBjb2xsYXRpb24gaXMgZGV0ZXJtaW5pc3Rp YywgYnJlYWsgdGllcyB3aXRoIHN0cmNtcCgpLgorICovCitpbnQKK3BnX3N0cmNvbGwoY29uc3Qg Y2hhciAqYXJnMSwgY29uc3QgY2hhciAqYXJnMiwgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCWlu dAkJCXJlc3VsdDsKKworCWlmICghbG9jYWxlIHx8IGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBS T1ZJREVSX0xJQkMpCisJCXJlc3VsdCA9IHBnX3N0cmNvbGxfbGliYyhhcmcxLCBhcmcyLCBsb2Nh bGUpOworI2lmZGVmIFVTRV9JQ1UKKwllbHNlIGlmIChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQ Uk9WSURFUl9JQ1UpCisJCXJlc3VsdCA9IHBnX3N0cmNvbGxfaWN1KGFyZzEsIGFyZzIsIGxvY2Fs ZSk7CisjZW5kaWYKKwllbHNlCisJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwkJZWxvZyhFUlJP UiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBsb2NhbGUtPnByb3ZpZGVyKTsKKwor CS8qIEJyZWFrIHRpZSBpZiBuZWNlc3NhcnkuICovCisJaWYgKHJlc3VsdCA9PSAwICYmICghbG9j YWxlIHx8IGxvY2FsZS0+ZGV0ZXJtaW5pc3RpYykpCisJCXJlc3VsdCA9IHN0cmNtcChhcmcxLCBh cmcyKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBwZ19zdHJuY29sbAorICoKKyAq IENhbGwgdWNvbF9zdHJjb2xsVVRGOCgpLCB1Y29sX3N0cmNvbGwoKSwgc3RyY29sbCgpLCBzdHJj b2xsX2woKSwgd2NzY29sbCgpLAorICogb3Igd2NzY29sbF9sKCkgYXMgYXBwcm9wcmlhdGUgZm9y IHRoZSBnaXZlbiBsb2NhbGUsIHBsYXRmb3JtLCBhbmQgZGF0YWJhc2UKKyAqIGVuY29kaW5nLiBJ ZiB0aGUgbG9jYWxlIGlzIG5vdCBzcGVjaWZpZWQsIHVzZSB0aGUgZGF0YWJhc2UgY29sbGF0aW9u LgorICoKKyAqIEFyZ3VtZW50cyBtdXN0IGJlIGVuY29kZWQgaW4gdGhlIGRhdGFiYXNlIGVuY29k aW5nLgorICoKKyAqIElmIHRoZSBjb2xsYXRpb24gaXMgZGV0ZXJtaW5pc3RpYywgYnJlYWsgdGll cyB3aXRoIG1lbWNtcCgpLCBhbmQgdGhlbiB3aXRoCisgKiB0aGUgc3RyaW5nIGxlbmd0aC4KKyAq CisgKiBUaGlzIGZ1bmN0aW9uIG1heSBuZWVkIHRvIG51bC10ZXJtaW5hdGUgdGhlIGFyZ3VtZW50 cyBmb3IgbGliYyBmdW5jdGlvbnM7CisgKiBzbyBpZiB0aGUgY2FsbGVyIGFscmVhZHkgaGFzIG51 bC10ZXJtaW5hdGVkIHN0cmluZ3MsIGl0IHNob3VsZCBjYWxsCisgKiBwZ19zdHJjb2xsKCkgaW5z dGVhZC4KKyAqLworaW50CitwZ19zdHJuY29sbChjb25zdCBjaGFyICphcmcxLCBzaXplX3QgbGVu MSwgY29uc3QgY2hhciAqYXJnMiwgc2l6ZV90IGxlbjIsCisJCQlwZ19sb2NhbGVfdCBsb2NhbGUp Cit7CisJaW50CQkgcmVzdWx0OworCisJaWYgKCFsb2NhbGUgfHwgbG9jYWxlLT5wcm92aWRlciA9 PSBDT0xMUFJPVklERVJfTElCQykKKwkJcmVzdWx0ID0gcGdfc3RybmNvbGxfbGliYyhhcmcxLCBs ZW4xLCBhcmcyLCBsZW4yLCBsb2NhbGUpOworI2lmZGVmIFVTRV9JQ1UKKwllbHNlIGlmIChsb2Nh bGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJCXJlc3VsdCA9IHBnX3N0cm5jb2xs X2ljdShhcmcxLCBsZW4xLCBhcmcyLCBsZW4yLCBsb2NhbGUpOworI2VuZGlmCisJZWxzZQorCQkv KiBzaG91bGRuJ3QgaGFwcGVuICovCisJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBjb2xscHJv dmlkZXI6ICVjIiwgbG9jYWxlLT5wcm92aWRlcik7CisKKwkvKiBCcmVhayB0aWUgaWYgbmVjZXNz YXJ5LiAqLworCWlmIChyZXN1bHQgPT0gMCAmJiAoIWxvY2FsZSB8fCBsb2NhbGUtPmRldGVybWlu aXN0aWMpKQorCXsKKwkJcmVzdWx0ID0gbWVtY21wKGFyZzEsIGFyZzIsIE1pbihsZW4xLCBsZW4y KSk7CisJCWlmICgocmVzdWx0ID09IDApICYmIChsZW4xICE9IGxlbjIpKQorCQkJcmVzdWx0ID0g KGxlbjEgPCBsZW4yKSA/IC0xIDogMTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKyNp ZmRlZiBVU0VfSUNVCiBzdGF0aWMgdm9pZAogaW5pdF9pY3VfY29udmVydGVyKHZvaWQpCiB7CkBA IC0xNzY3LDYgKzIxMjcsMzkgQEAgaW5pdF9pY3VfY29udmVydGVyKHZvaWQpCiAJaWN1X2NvbnZl cnRlciA9IGNvbnY7CiB9CiAKKy8qCisgKiBGaW5kIGxlbmd0aCwgaW4gVUNoYXJzLCBvZiBnaXZl biBzdHJpbmcgaWYgY29udmVydGVkIHRvIFVDaGFyIHN0cmluZy4KKyAqLworc3RhdGljIHNpemVf dAordWNoYXJfbGVuZ3RoKFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwgY29uc3QgY2hhciAqc3RyLCBz aXplX3QgbGVuKQoreworCVVFcnJvckNvZGUJc3RhdHVzID0gVV9aRVJPX0VSUk9SOworCWludDMy X3QJCXVsZW47CisJdWxlbiA9IHVjbnZfdG9VQ2hhcnMoY29udmVydGVyLCBOVUxMLCAwLCBzdHIs IGxlbiwgJnN0YXR1cyk7CisJaWYgKFVfRkFJTFVSRShzdGF0dXMpICYmIHN0YXR1cyAhPSBVX0JV RkZFUl9PVkVSRkxPV19FUlJPUikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCIlcyBm YWlsZWQ6ICVzIiwgInVjbnZfdG9VQ2hhcnMiLCB1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCXJl dHVybiB1bGVuOworfQorCisvKgorICogQ29udmVydCB0aGUgZ2l2ZW4gc291cmNlIHN0cmluZyBp bnRvIGEgVUNoYXIgc3RyaW5nLCBzdG9yZWQgaW4gZGVzdCwgYW5kCisgKiByZXR1cm4gdGhlIGxl bmd0aCAoaW4gVUNoYXJzKS4KKyAqLworc3RhdGljIGludDMyX3QKK3VjaGFyX2NvbnZlcnQoVUNv bnZlcnRlciAqY29udmVydGVyLCBVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0bGVuLAorCQkJICBj b25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4pCit7CisJVUVycm9yQ29kZQlzdGF0dXMgPSBV X1pFUk9fRVJST1I7CisJaW50MzJfdAkJdWxlbjsKKwlzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisJ dWxlbiA9IHVjbnZfdG9VQ2hhcnMoY29udmVydGVyLCBkZXN0LCBkZXN0bGVuLCBzcmMsIHNyY2xl biwgJnN0YXR1cyk7CisJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJtc2coIiVzIGZhaWxlZDogJXMiLCAidWNudl90b1VDaGFycyIsIHVfZXJyb3JOYW1l KHN0YXR1cykpKSk7CisJcmV0dXJuIHVsZW47Cit9CisKIC8qCiAgKiBDb252ZXJ0IGEgc3RyaW5n IGluIHRoZSBkYXRhYmFzZSBlbmNvZGluZyBpbnRvIGEgc3RyaW5nIG9mIFVDaGFycy4KICAqCkBA IC0xNzgyLDI2ICsyMTc1LDE1IEBAIGluaXRfaWN1X2NvbnZlcnRlcih2b2lkKQogaW50MzJfdAog aWN1X3RvX3VjaGFyKFVDaGFyICoqYnVmZl91Y2hhciwgY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90 IG5ieXRlcykKIHsKLQlVRXJyb3JDb2RlCXN0YXR1czsKLQlpbnQzMl90CQlsZW5fdWNoYXI7CisJ aW50MzJfdCBsZW5fdWNoYXI7CiAKIAlpbml0X2ljdV9jb252ZXJ0ZXIoKTsKIAotCXN0YXR1cyA9 IFVfWkVST19FUlJPUjsKLQlsZW5fdWNoYXIgPSB1Y252X3RvVUNoYXJzKGljdV9jb252ZXJ0ZXIs IE5VTEwsIDAsCi0JCQkJCQkJICBidWZmLCBuYnl0ZXMsICZzdGF0dXMpOwotCWlmIChVX0ZBSUxV UkUoc3RhdHVzKSAmJiBzdGF0dXMgIT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCi0JCWVyZXBv cnQoRVJST1IsCi0JCQkJKGVycm1zZygiJXMgZmFpbGVkOiAlcyIsICJ1Y252X3RvVUNoYXJzIiwg dV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwlsZW5fdWNoYXIgPSB1Y2hhcl9sZW5ndGgoaWN1X2Nv bnZlcnRlciwgYnVmZiwgbmJ5dGVzKTsKIAogCSpidWZmX3VjaGFyID0gcGFsbG9jKChsZW5fdWNo YXIgKyAxKSAqIHNpemVvZigqKmJ1ZmZfdWNoYXIpKTsKLQotCXN0YXR1cyA9IFVfWkVST19FUlJP UjsKLQlsZW5fdWNoYXIgPSB1Y252X3RvVUNoYXJzKGljdV9jb252ZXJ0ZXIsICpidWZmX3VjaGFy LCBsZW5fdWNoYXIgKyAxLAotCQkJCQkJCSAgYnVmZiwgbmJ5dGVzLCAmc3RhdHVzKTsKLQlpZiAo VV9GQUlMVVJFKHN0YXR1cykpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycm1zZygiJXMgZmFp bGVkOiAlcyIsICJ1Y252X3RvVUNoYXJzIiwgdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwlsZW5f dWNoYXIgPSB1Y2hhcl9jb252ZXJ0KGljdV9jb252ZXJ0ZXIsCisJCQkJCQkJICAqYnVmZl91Y2hh ciwgbGVuX3VjaGFyICsgMSwgYnVmZiwgbmJ5dGVzKTsKIAogCXJldHVybiBsZW5fdWNoYXI7CiB9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3ZhcmxlbmEuYwppbmRleCAxYzUyZGVlYzU1Li41MmRkMGJiYmE4IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC92YXJsZW5hLmMKQEAgLTE1MzcsMTAgKzE1MzcsNiBAQCB2YXJzdHJfY21wKGNv bnN0IGNoYXIgKmFyZzEsIGludCBsZW4xLCBjb25zdCBjaGFyICphcmcyLCBpbnQgbGVuMiwgT2lk IGNvbGxpZCkKIAl9CiAJZWxzZQogCXsKLQkJY2hhcgkJYTFidWZbVEVYVEJVRkxFTl07Ci0JCWNo YXIJCWEyYnVmW1RFWFRCVUZMRU5dOwotCQljaGFyCSAgICphMXAsCi0JCQkJICAgKmEycDsKIAkJ cGdfbG9jYWxlX3QgbXlsb2NhbGU7CiAKIAkJbXlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9j b2xsYXRpb24oY29sbGlkKTsKQEAgLTE1NTcsMTcxICsxNTUzLDcgQEAgdmFyc3RyX2NtcChjb25z dCBjaGFyICphcmcxLCBpbnQgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwgaW50IGxlbjIsIE9pZCBj b2xsaWQpCiAJCWlmIChsZW4xID09IGxlbjIgJiYgbWVtY21wKGFyZzEsIGFyZzIsIGxlbjEpID09 IDApCiAJCQlyZXR1cm4gMDsKIAotI2lmZGVmIFdJTjMyCi0JCS8qIFdpbjMyIGRvZXMgbm90IGhh dmUgVVRGLTgsIHNvIHdlIG5lZWQgdG8gbWFwIHRvIFVURi0xNiAqLwotCQlpZiAoR2V0RGF0YWJh c2VFbmNvZGluZygpID09IFBHX1VURjgKLQkJCSYmICghbXlsb2NhbGUgfHwgbXlsb2NhbGUtPnBy b3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKSkKLQkJewotCQkJaW50CQkJYTFsZW47Ci0JCQlp bnQJCQlhMmxlbjsKLQkJCWludAkJCXI7Ci0KLQkJCWlmIChsZW4xID49IFRFWFRCVUZMRU4gLyAy KQotCQkJewotCQkJCWExbGVuID0gbGVuMSAqIDIgKyAyOwotCQkJCWExcCA9IHBhbGxvYyhhMWxl bik7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJYTFsZW4gPSBURVhUQlVGTEVOOwotCQkJCWEx cCA9IGExYnVmOwotCQkJfQotCQkJaWYgKGxlbjIgPj0gVEVYVEJVRkxFTiAvIDIpCi0JCQl7Ci0J CQkJYTJsZW4gPSBsZW4yICogMiArIDI7Ci0JCQkJYTJwID0gcGFsbG9jKGEybGVuKTsKLQkJCX0K LQkJCWVsc2UKLQkJCXsKLQkJCQlhMmxlbiA9IFRFWFRCVUZMRU47Ci0JCQkJYTJwID0gYTJidWY7 Ci0JCQl9Ci0KLQkJCS8qIHN0dXBpZCBNaWNyb3Nsb3RoIEFQSSBkb2VzIG5vdCB3b3JrIGZvciB6 ZXJvLWxlbmd0aCBpbnB1dCAqLwotCQkJaWYgKGxlbjEgPT0gMCkKLQkJCQlyID0gMDsKLQkJCWVs c2UKLQkJCXsKLQkJCQlyID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9VVEY4LCAwLCBhcmcxLCBs ZW4xLAotCQkJCQkJCQkJCShMUFdTVFIpIGExcCwgYTFsZW4gLyAyKTsKLQkJCQlpZiAoIXIpCi0J CQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJKGVycm1zZygiY291bGQgbm90IGNvbnZlcnQgc3Ry aW5nIHRvIFVURi0xNjogZXJyb3IgY29kZSAlbHUiLAotCQkJCQkJCQkJR2V0TGFzdEVycm9yKCkp KSk7Ci0JCQl9Ci0JCQkoKExQV1NUUikgYTFwKVtyXSA9IDA7Ci0KLQkJCWlmIChsZW4yID09IDAp Ci0JCQkJciA9IDA7Ci0JCQllbHNlCi0JCQl7Ci0JCQkJciA9IE11bHRpQnl0ZVRvV2lkZUNoYXIo Q1BfVVRGOCwgMCwgYXJnMiwgbGVuMiwKLQkJCQkJCQkJCQkoTFBXU1RSKSBhMnAsIGEybGVuIC8g Mik7Ci0JCQkJaWYgKCFyKQotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJtc2coImNv dWxkIG5vdCBjb252ZXJ0IHN0cmluZyB0byBVVEYtMTY6IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkJ CQkJCUdldExhc3RFcnJvcigpKSkpOwotCQkJfQotCQkJKChMUFdTVFIpIGEycClbcl0gPSAwOwot Ci0JCQllcnJubyA9IDA7Ci0jaWZkZWYgSEFWRV9MT0NBTEVfVAotCQkJaWYgKG15bG9jYWxlKQot CQkJCXJlc3VsdCA9IHdjc2NvbGxfbCgoTFBXU1RSKSBhMXAsIChMUFdTVFIpIGEycCwgbXlsb2Nh bGUtPmluZm8ubHQpOwotCQkJZWxzZQotI2VuZGlmCi0JCQkJcmVzdWx0ID0gd2NzY29sbCgoTFBX U1RSKSBhMXAsIChMUFdTVFIpIGEycCk7Ci0JCQlpZiAocmVzdWx0ID09IDIxNDc0ODM2NDcpCS8q IF9OTFNDTVBFUlJPUjsgbWlzc2luZyBmcm9tIG1pbmd3Ci0JCQkJCQkJCQkJICogaGVhZGVycyAq LwotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgY29tcGFyZSBV bmljb2RlIHN0cmluZ3M6ICVtIikpKTsKLQotCQkJLyogQnJlYWsgdGllIGlmIG5lY2Vzc2FyeS4g Ki8KLQkJCWlmIChyZXN1bHQgPT0gMCAmJgotCQkJCSghbXlsb2NhbGUgfHwgbXlsb2NhbGUtPmRl dGVybWluaXN0aWMpKQotCQkJewotCQkJCXJlc3VsdCA9IG1lbWNtcChhcmcxLCBhcmcyLCBNaW4o bGVuMSwgbGVuMikpOwotCQkJCWlmICgocmVzdWx0ID09IDApICYmIChsZW4xICE9IGxlbjIpKQot CQkJCQlyZXN1bHQgPSAobGVuMSA8IGxlbjIpID8gLTEgOiAxOwotCQkJfQotCi0JCQlpZiAoYTFw ICE9IGExYnVmKQotCQkJCXBmcmVlKGExcCk7Ci0JCQlpZiAoYTJwICE9IGEyYnVmKQotCQkJCXBm cmVlKGEycCk7Ci0KLQkJCXJldHVybiByZXN1bHQ7Ci0JCX0KLSNlbmRpZgkJCQkJCQkvKiBXSU4z MiAqLwotCi0JCWlmIChsZW4xID49IFRFWFRCVUZMRU4pCi0JCQlhMXAgPSAoY2hhciAqKSBwYWxs b2MobGVuMSArIDEpOwotCQllbHNlCi0JCQlhMXAgPSBhMWJ1ZjsKLQkJaWYgKGxlbjIgPj0gVEVY VEJVRkxFTikKLQkJCWEycCA9IChjaGFyICopIHBhbGxvYyhsZW4yICsgMSk7Ci0JCWVsc2UKLQkJ CWEycCA9IGEyYnVmOwotCi0JCW1lbWNweShhMXAsIGFyZzEsIGxlbjEpOwotCQlhMXBbbGVuMV0g PSAnXDAnOwotCQltZW1jcHkoYTJwLCBhcmcyLCBsZW4yKTsKLQkJYTJwW2xlbjJdID0gJ1wwJzsK LQotCQlpZiAobXlsb2NhbGUpCi0JCXsKLQkJCWlmIChteWxvY2FsZS0+cHJvdmlkZXIgPT0gQ09M TFBST1ZJREVSX0lDVSkKLQkJCXsKLSNpZmRlZiBVU0VfSUNVCi0jaWZkZWYgSEFWRV9VQ09MX1NU UkNPTExVVEY4Ci0JCQkJaWYgKEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KQotCQkJ CXsKLQkJCQkJVUVycm9yQ29kZQlzdGF0dXM7Ci0KLQkJCQkJc3RhdHVzID0gVV9aRVJPX0VSUk9S OwotCQkJCQlyZXN1bHQgPSB1Y29sX3N0cmNvbGxVVEY4KG15bG9jYWxlLT5pbmZvLmljdS51Y29s LAotCQkJCQkJCQkJCQkgIGFyZzEsIGxlbjEsCi0JCQkJCQkJCQkJCSAgYXJnMiwgbGVuMiwKLQkJ CQkJCQkJCQkJICAmc3RhdHVzKTsKLQkJCQkJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQotCQkJCQkJ ZXJlcG9ydChFUlJPUiwKLQkJCQkJCQkJKGVycm1zZygiY29sbGF0aW9uIGZhaWxlZDogJXMiLCB1 X2Vycm9yTmFtZShzdGF0dXMpKSkpOwotCQkJCX0KLQkJCQllbHNlCi0jZW5kaWYKLQkJCQl7Ci0J CQkJCWludDMyX3QJCXVsZW4xLAotCQkJCQkJCQl1bGVuMjsKLQkJCQkJVUNoYXIJICAgKnVjaGFy MSwKLQkJCQkJCQkgICAqdWNoYXIyOwotCi0JCQkJCXVsZW4xID0gaWN1X3RvX3VjaGFyKCZ1Y2hh cjEsIGFyZzEsIGxlbjEpOwotCQkJCQl1bGVuMiA9IGljdV90b191Y2hhcigmdWNoYXIyLCBhcmcy LCBsZW4yKTsKLQotCQkJCQlyZXN1bHQgPSB1Y29sX3N0cmNvbGwobXlsb2NhbGUtPmluZm8uaWN1 LnVjb2wsCi0JCQkJCQkJCQkJICB1Y2hhcjEsIHVsZW4xLAotCQkJCQkJCQkJCSAgdWNoYXIyLCB1 bGVuMik7Ci0KLQkJCQkJcGZyZWUodWNoYXIxKTsKLQkJCQkJcGZyZWUodWNoYXIyKTsKLQkJCQl9 Ci0jZWxzZQkJCQkJCQkvKiBub3QgVVNFX0lDVSAqLwotCQkJCS8qIHNob3VsZG4ndCBoYXBwZW4g Ki8KLQkJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgY29sbHByb3ZpZGVyOiAlYyIsIG15bG9j YWxlLT5wcm92aWRlcik7Ci0jZW5kaWYJCQkJCQkJLyogbm90IFVTRV9JQ1UgKi8KLQkJCX0KLQkJ CWVsc2UKLQkJCXsKLSNpZmRlZiBIQVZFX0xPQ0FMRV9UCi0JCQkJcmVzdWx0ID0gc3RyY29sbF9s KGExcCwgYTJwLCBteWxvY2FsZS0+aW5mby5sdCk7Ci0jZWxzZQotCQkJCS8qIHNob3VsZG4ndCBo YXBwZW4gKi8KLQkJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgY29sbHByb3ZpZGVyOiAlYyIs IG15bG9jYWxlLT5wcm92aWRlcik7Ci0jZW5kaWYKLQkJCX0KLQkJfQotCQllbHNlCi0JCQlyZXN1 bHQgPSBzdHJjb2xsKGExcCwgYTJwKTsKLQotCQkvKiBCcmVhayB0aWUgaWYgbmVjZXNzYXJ5LiAq LwotCQlpZiAocmVzdWx0ID09IDAgJiYKLQkJCSghbXlsb2NhbGUgfHwgbXlsb2NhbGUtPmRldGVy bWluaXN0aWMpKQotCQkJcmVzdWx0ID0gc3RyY21wKGExcCwgYTJwKTsKLQotCQlpZiAoYTFwICE9 IGExYnVmKQotCQkJcGZyZWUoYTFwKTsKLQkJaWYgKGEycCAhPSBhMmJ1ZikKLQkJCXBmcmVlKGEy cCk7CisJCXJlc3VsdCA9IHBnX3N0cm5jb2xsKGFyZzEsIGxlbjEsIGFyZzIsIGxlbjIsIG15bG9j YWxlKTsKIAl9CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMjM3OSw2NSArMjIxMSw3IEBAIHZhcnN0 cmZhc3RjbXBfbG9jYWxlKGNoYXIgKmExcCwgaW50IGxlbjEsIGNoYXIgKmEycCwgaW50IGxlbjIs IFNvcnRTdXBwb3J0IHNzdXApCiAJCXJldHVybiBzc3MtPmxhc3RfcmV0dXJuZWQ7CiAJfQogCi0J aWYgKHNzcy0+bG9jYWxlKQotCXsKLQkJaWYgKHNzcy0+bG9jYWxlLT5wcm92aWRlciA9PSBDT0xM UFJPVklERVJfSUNVKQotCQl7Ci0jaWZkZWYgVVNFX0lDVQotI2lmZGVmIEhBVkVfVUNPTF9TVFJD T0xMVVRGOAotCQkJaWYgKEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KQotCQkJewot CQkJCVVFcnJvckNvZGUJc3RhdHVzOwotCi0JCQkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCQkJ CXJlc3VsdCA9IHVjb2xfc3RyY29sbFVURjgoc3NzLT5sb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0J CQkJCQkJCQkJICBhMXAsIGxlbjEsCi0JCQkJCQkJCQkJICBhMnAsIGxlbjIsCi0JCQkJCQkJCQkJ ICAmc3RhdHVzKTsKLQkJCQlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCi0JCQkJCWVyZXBvcnQoRVJS T1IsCi0JCQkJCQkJKGVycm1zZygiY29sbGF0aW9uIGZhaWxlZDogJXMiLCB1X2Vycm9yTmFtZShz dGF0dXMpKSkpOwotCQkJfQotCQkJZWxzZQotI2VuZGlmCi0JCQl7Ci0JCQkJaW50MzJfdAkJdWxl bjEsCi0JCQkJCQkJdWxlbjI7Ci0JCQkJVUNoYXIJICAgKnVjaGFyMSwKLQkJCQkJCSAgICp1Y2hh cjI7Ci0KLQkJCQl1bGVuMSA9IGljdV90b191Y2hhcigmdWNoYXIxLCBhMXAsIGxlbjEpOwotCQkJ CXVsZW4yID0gaWN1X3RvX3VjaGFyKCZ1Y2hhcjIsIGEycCwgbGVuMik7Ci0KLQkJCQlyZXN1bHQg PSB1Y29sX3N0cmNvbGwoc3NzLT5sb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0JCQkJCQkJCQkgIHVj aGFyMSwgdWxlbjEsCi0JCQkJCQkJCQkgIHVjaGFyMiwgdWxlbjIpOwotCi0JCQkJcGZyZWUodWNo YXIxKTsKLQkJCQlwZnJlZSh1Y2hhcjIpOwotCQkJfQotI2Vsc2UJCQkJCQkJLyogbm90IFVTRV9J Q1UgKi8KLQkJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KLQkJCWVsb2coRVJST1IsICJ1bnN1cHBv cnRlZCBjb2xscHJvdmlkZXI6ICVjIiwgc3NzLT5sb2NhbGUtPnByb3ZpZGVyKTsKLSNlbmRpZgkJ CQkJCQkvKiBub3QgVVNFX0lDVSAqLwotCQl9Ci0JCWVsc2UKLQkJewotI2lmZGVmIEhBVkVfTE9D QUxFX1QKLQkJCXJlc3VsdCA9IHN0cmNvbGxfbChzc3MtPmJ1ZjEsIHNzcy0+YnVmMiwgc3NzLT5s b2NhbGUtPmluZm8ubHQpOwotI2Vsc2UKLQkJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KLQkJCWVs b2coRVJST1IsICJ1bnN1cHBvcnRlZCBjb2xscHJvdmlkZXI6ICVjIiwgc3NzLT5sb2NhbGUtPnBy b3ZpZGVyKTsKLSNlbmRpZgotCQl9Ci0JfQotCWVsc2UKLQkJcmVzdWx0ID0gc3RyY29sbChzc3Mt PmJ1ZjEsIHNzcy0+YnVmMik7Ci0KLQkvKiBCcmVhayB0aWUgaWYgbmVjZXNzYXJ5LiAqLwotCWlm IChyZXN1bHQgPT0gMCAmJgotCQkoIXNzcy0+bG9jYWxlIHx8IHNzcy0+bG9jYWxlLT5kZXRlcm1p bmlzdGljKSkKLQkJcmVzdWx0ID0gc3RyY21wKHNzcy0+YnVmMSwgc3NzLT5idWYyKTsKKwlyZXN1 bHQgPSBwZ19zdHJjb2xsKHNzcy0+YnVmMSwgc3NzLT5idWYyLCBzc3MtPmxvY2FsZSk7CiAKIAkv KiBDYWNoZSByZXN1bHQsIHBlcmhhcHMgc2F2aW5nIGFuIGV4cGVuc2l2ZSBzdHJjb2xsKCkgY2Fs bCBuZXh0IHRpbWUgKi8KIAlzc3MtPmNhY2hlX2Jsb2IgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxl LmgKaW5kZXggYTg3NTk0MjEyMy4uYmY3MGFlMDhjYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv dXRpbHMvcGdfbG9jYWxlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmgKQEAg LTEwMCw2ICsxMDAsOSBAQCBleHRlcm4gdm9pZCBtYWtlX2ljdV9jb2xsYXRvcihjb25zdCBjaGFy ICppY3Vsb2NzdHIsCiBleHRlcm4gcGdfbG9jYWxlX3QgcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0 aW9uKE9pZCBjb2xsaWQpOwogCiBleHRlcm4gY2hhciAqZ2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVy c2lvbihjaGFyIGNvbGxwcm92aWRlciwgY29uc3QgY2hhciAqY29sbGNvbGxhdGUpOworZXh0ZXJu IGludCBwZ19zdHJjb2xsKGNvbnN0IGNoYXIgKmFyZzEsIGNvbnN0IGNoYXIgKmFyZzIsIHBnX2xv Y2FsZV90IGxvY2FsZSk7CitleHRlcm4gaW50IHBnX3N0cm5jb2xsKGNvbnN0IGNoYXIgKmFyZzEs IHNpemVfdCBsZW4xLAorCQkJCQkgICBjb25zdCBjaGFyICphcmcyLCBzaXplX3QgbGVuMiwgcGdf bG9jYWxlX3QgbG9jYWxlKTsKIAogI2lmZGVmIFVTRV9JQ1UKIGV4dGVybiBpbnQzMl90IGljdV90 b191Y2hhcihVQ2hhciAqKmJ1ZmZfdWNoYXIsIGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0 ZXMpOwotLSAKMi4zNC4xCgo= --=-Wwxe+64KlqA5LB703TXv Content-Disposition: attachment; filename="v4-0002-Add-pg_strxfrm-and-pg_strxfrm_prefix.patch" Content-Type: text/x-patch; name="v4-0002-Add-pg_strxfrm-and-pg_strxfrm_prefix.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBmYWIyYTVjMzBiNTYwYzU5ZjAzMmM0NjgzNDMwMjdhOGNhNjlhYzZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU aHUsIDEgRGVjIDIwMjIgMTQ6NDE6MzggLTA4MDAKU3ViamVjdDogW1BBVENIIHY0IDIvNl0gQWRk IHBnX3N0cnhmcm0oKSBhbmQgcGdfc3RyeGZybV9wcmVmaXgoKS4KCkNhbGxlcnMgd2l0aCBhIE5V TC10ZXJtaW5hdGVkIHN0cmluZyBzaG91bGQgY2FsbCB0aGUgZm9ybWVyOyBjYWxsZXJzCndpdGgg YSBzdHJpbmcgYW5kIGxlbmd0aCBzaG91bGQgY2FsbCB0aGUgbGF0dGVyLgoKQWxzbyByZW1vdmUg dGhlIFRSVVNUX1NUUlhGUk0gZGVmaW5lLCBhbmQgcmVwbGFjZSB3aXRoIGEgZGV2ZWxvcGVyIEdV Qwpmb3IgZWFzaWVyIHRlc3RpbmcuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaGZ1 bmMuYyAgfCAgNDUgKystLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jICAgfCAz ODEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Zh cmNoYXIuYyAgICAgfCAgNDEgKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jICAg ICB8IDE0MiArKystLS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMg fCAgMTEgKwogc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggICAgICAgfCAgMTEgKwogNiBm aWxlcyBjaGFuZ2VkLCA0ODEgaW5zZXJ0aW9ucygrKSwgMTUwIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hmdW5jLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoZnVuYy5jCmluZGV4IGY4OTBmNzllZTEuLmI4MTM2ZTQ5NmYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hmdW5jLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaGZ1bmMuYwpAQCAtMjkxLDIxICsyOTEsMTkgQEAgaGFzaHRleHQo UEdfRlVOQ1RJT05fQVJHUykKICNpZmRlZiBVU0VfSUNVCiAJCWlmIChteWxvY2FsZS0+cHJvdmlk ZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKIAkJewotCQkJaW50MzJfdAkJdWxlbiA9IC0xOwotCQkJ VUNoYXIJICAgKnVjaGFyID0gTlVMTDsKLQkJCVNpemUJCWJzaXplOwotCQkJdWludDhfdCAgICAq YnVmOworCQkJU2l6ZQkJYnNpemUsIHJzaXplOworCQkJY2hhcgkgICAqYnVmOworCQkJY29uc3Qg Y2hhciAqa2V5ZGF0YSA9IFZBUkRBVEFfQU5ZKGtleSk7CisJCQlzaXplX3QJCWtleWxlbiA9IFZB UlNJWkVfQU5ZX0VYSERSKGtleSk7CiAKLQkJCXVsZW4gPSBpY3VfdG9fdWNoYXIoJnVjaGFyLCBW QVJEQVRBX0FOWShrZXkpLCBWQVJTSVpFX0FOWV9FWEhEUihrZXkpKTsKLQotCQkJYnNpemUgPSB1 Y29sX2dldFNvcnRLZXkobXlsb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0JCQkJCQkJCQl1Y2hhciwg dWxlbiwgTlVMTCwgMCk7CisJCQlic2l6ZSA9IHBnX3N0cm54ZnJtKE5VTEwsIDAsIGtleWRhdGEs IGtleWxlbiwgbXlsb2NhbGUpOwogCQkJYnVmID0gcGFsbG9jKGJzaXplKTsKLQkJCXVjb2xfZ2V0 U29ydEtleShteWxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCQl1Y2hhciwgdWxlbiwgYnVm LCBic2l6ZSk7Ci0JCQlwZnJlZSh1Y2hhcik7CiAKLQkJCXJlc3VsdCA9IGhhc2hfYW55KGJ1Ziwg YnNpemUpOworCQkJcnNpemUgPSBwZ19zdHJueGZybShidWYsIGJzaXplLCBrZXlkYXRhLCBrZXls ZW4sIG15bG9jYWxlKTsKKwkJCWlmIChyc2l6ZSAhPSBic2l6ZSkKKwkJCQllbG9nKEVSUk9SLCAi cGdfc3Rybnhmcm0oKSByZXR1cm5lZCB1bmV4cGVjdGVkIHJlc3VsdCIpOworCisJCQlyZXN1bHQg PSBoYXNoX2FueSgodWludDhfdCAqKSBidWYsIGJzaXplKTsKIAogCQkJcGZyZWUoYnVmKTsKIAkJ fQpAQCAtMzQ5LDIxICszNDcsMjAgQEAgaGFzaHRleHRleHRlbmRlZChQR19GVU5DVElPTl9BUkdT KQogI2lmZGVmIFVTRV9JQ1UKIAkJaWYgKG15bG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklE RVJfSUNVKQogCQl7Ci0JCQlpbnQzMl90CQl1bGVuID0gLTE7Ci0JCQlVQ2hhcgkgICAqdWNoYXIg PSBOVUxMOwotCQkJU2l6ZQkJYnNpemU7Ci0JCQl1aW50OF90ICAgICpidWY7CisJCQlTaXplCQli c2l6ZSwgcnNpemU7CisJCQljaGFyCSAgICpidWY7CisJCQljb25zdCBjaGFyICprZXlkYXRhID0g VkFSREFUQV9BTlkoa2V5KTsKKwkJCXNpemVfdAkJa2V5bGVuID0gVkFSU0laRV9BTllfRVhIRFIo a2V5KTsKIAotCQkJdWxlbiA9IGljdV90b191Y2hhcigmdWNoYXIsIFZBUkRBVEFfQU5ZKGtleSks IFZBUlNJWkVfQU5ZX0VYSERSKGtleSkpOwotCi0JCQlic2l6ZSA9IHVjb2xfZ2V0U29ydEtleSht eWxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCQkJCXVjaGFyLCB1bGVuLCBOVUxMLCAwKTsK KwkJCWJzaXplID0gcGdfc3Rybnhmcm0oTlVMTCwgMCwga2V5ZGF0YSwga2V5bGVuLCBteWxvY2Fs ZSk7CiAJCQlidWYgPSBwYWxsb2MoYnNpemUpOwotCQkJdWNvbF9nZXRTb3J0S2V5KG15bG9jYWxl LT5pbmZvLmljdS51Y29sLAotCQkJCQkJCXVjaGFyLCB1bGVuLCBidWYsIGJzaXplKTsKLQkJCXBm cmVlKHVjaGFyKTsKIAotCQkJcmVzdWx0ID0gaGFzaF9hbnlfZXh0ZW5kZWQoYnVmLCBic2l6ZSwg UEdfR0VUQVJHX0lOVDY0KDEpKTsKKwkJCXJzaXplID0gcGdfc3Rybnhmcm0oYnVmLCBic2l6ZSwg a2V5ZGF0YSwga2V5bGVuLCBteWxvY2FsZSk7CisJCQlpZiAocnNpemUgIT0gYnNpemUpCisJCQkJ ZWxvZyhFUlJPUiwgInBnX3N0cm54ZnJtKCkgcmV0dXJuZWQgdW5leHBlY3RlZCByZXN1bHQiKTsK KworCQkJcmVzdWx0ID0gaGFzaF9hbnlfZXh0ZW5kZWQoKHVpbnQ4X3QgKikgYnVmLCBic2l6ZSwK KwkJCQkJCQkJCSAgIFBHX0dFVEFSR19JTlQ2NCgxKSk7CiAKIAkJCXBmcmVlKGJ1Zik7CiAJCX0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYwppbmRleCA2Y2Q2MjllY2I0Li42NjMyODYxNjNlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCkBAIC05NCw2ICs5NCw5IEBAIGNoYXIJICAgKmxv Y2FsZV9tb25ldGFyeTsKIGNoYXIJICAgKmxvY2FsZV9udW1lcmljOwogY2hhcgkgICAqbG9jYWxl X3RpbWU7CiAKKy8qIEdVQyB0byBlbmFibGUgdXNlIG9mIHN0cnhmcm0oKSBmb3IgYWJicmV2aWF0 ZWQga2V5cyAqLworYm9vbCB0cnVzdF9zdHJ4ZnJtID0gZmFsc2U7CisKIC8qCiAgKiBsY190aW1l IGxvY2FsaXphdGlvbiBjYWNoZS4KICAqCkBAIC0yMDk5LDYgKzIxMDIsMzg0IEBAIHBnX3N0cm5j b2xsKGNvbnN0IGNoYXIgKmFyZzEsIHNpemVfdCBsZW4xLCBjb25zdCBjaGFyICphcmcyLCBzaXpl X3QgbGVuMiwKIH0KIAogCitzdGF0aWMgc2l6ZV90CitwZ19zdHJ4ZnJtX2xpYmMoY2hhciAqZGVz dCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgZGVzdHNpemUsCisJCQkJcGdfbG9jYWxlX3QgbG9j YWxlKQoreworCUFzc2VydCghbG9jYWxlIHx8IGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJ REVSX0xJQkMpOworCisjaWZkZWYgVFJVU1RfU1RYRlJNCisjaWZkZWYgSEFWRV9MT0NBTEVfVAor CWlmIChsb2NhbGUpCisJCXJldHVybiBzdHJ4ZnJtX2woZGVzdCwgc3JjLCBkZXN0c2l6ZSwgbG9j YWxlLT5pbmZvLmx0KTsKKwllbHNlCisjZW5kaWYKKwkJcmV0dXJuIHN0cnhmcm0oZGVzdCwgc3Jj LCBkZXN0c2l6ZSk7CisjZWxzZQorCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwllbG9nKEVSUk9S LCAidW5zdXBwb3J0ZWQgY29sbHByb3ZpZGVyOiAlYyIsIGxvY2FsZS0+cHJvdmlkZXIpOworI2Vu ZGlmCit9CisKK3N0YXRpYyBzaXplX3QKK3BnX3N0cm54ZnJtX2xpYmMoY2hhciAqZGVzdCwgY29u c3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLCBzaXplX3QgZGVzdHNpemUsCisJCQkJIHBnX2xv Y2FsZV90IGxvY2FsZSkKK3sKKwljaGFyCSBzYnVmW1RFWFRCVUZMRU5dOworCWNoYXIJKmJ1Zgkg PSBzYnVmOworCXNpemVfdAkgYnVmc2l6ZSA9IHNyY2xlbiArIDE7CisJc2l6ZV90CSByZXN1bHQ7 CisKKwlBc3NlcnQoIWxvY2FsZSB8fCBsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9M SUJDKTsKKworCWlmIChidWZzaXplID4gVEVYVEJVRkxFTikKKwkJYnVmID0gcGFsbG9jKGJ1ZnNp emUpOworCisJLyogbnVsLXRlcm1pbmF0ZSBhcmd1bWVudHMgKi8KKwltZW1jcHkoYnVmLCBzcmMs IHNyY2xlbik7CisJYnVmW3NyY2xlbl0gPSAnXDAnOworCisJcmVzdWx0ID0gcGdfc3RyeGZybV9s aWJjKGRlc3QsIGJ1ZiwgZGVzdHNpemUsIGxvY2FsZSk7CisKKwlpZiAoYnVmICE9IHNidWYpCisJ CXBmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc2l6ZV90CitwZ19z dHJ4ZnJtX3ByZWZpeF9saWJjKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGRl c3RzaXplLAorCQkJCQkgICBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJQXNzZXJ0KCFsb2NhbGUg fHwgbG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQyk7CisJLyogdW5zdXBwb3J0 ZWQ7IHNob3VsZG4ndCBoYXBwZW4gKi8KKwllbG9nKEVSUk9SLCAiY29sbHByb3ZpZGVyICclYycg ZG9lcyBub3Qgc3VwcG9ydCBwZ19zdHJ4ZnJtX3ByZWZpeCgpIiwKKwkJIGxvY2FsZS0+cHJvdmlk ZXIpOworfQorCitzdGF0aWMgc2l6ZV90CitwZ19zdHJueGZybV9wcmVmaXhfbGliYyhjaGFyICpk ZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4sCisJCQkJCQlzaXplX3QgZGVzdHNp emUsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlBc3NlcnQoIWxvY2FsZSB8fCBsb2NhbGUtPnBy b3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKTsKKwkvKiB1bnN1cHBvcnRlZDsgc2hvdWxkbid0 IGhhcHBlbiAqLworCWVsb2coRVJST1IsICJjb2xscHJvdmlkZXIgJyVjJyBkb2VzIG5vdCBzdXBw b3J0IHBnX3N0cm54ZnJtX3ByZWZpeCgpIiwKKwkJIGxvY2FsZS0+cHJvdmlkZXIpOworfQorCisj aWZkZWYgVVNFX0lDVQorCitzdGF0aWMgc2l6ZV90CitwZ19zdHJueGZybV9pY3UoY2hhciAqZGVz dCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLCBzaXplX3QgZGVzdHNpemUsCisJCQkJ cGdfbG9jYWxlX3QgbG9jYWxlKQoreworCWNoYXIJIHNidWZbVEVYVEJVRkxFTl07CisJY2hhcgkq YnVmCT0gc2J1ZjsKKwlVQ2hhcgkqdWNoYXI7CisJaW50MzJfdAkgdWxlbjsKKwlzaXplX3QgICB1 Y2hhcl9ic2l6ZTsKKwlTaXplCSByZXN1bHRfYnNpemU7CisKKwlBc3NlcnQobG9jYWxlLT5wcm92 aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKTsKKworCWluaXRfaWN1X2NvbnZlcnRlcigpOworCisJ dWxlbiA9IHVjaGFyX2xlbmd0aChpY3VfY29udmVydGVyLCBzcmMsIHNyY2xlbik7CisKKwl1Y2hh cl9ic2l6ZSA9ICh1bGVuICsgMSkgKiBzaXplb2YoVUNoYXIpOworCisJaWYgKHVjaGFyX2JzaXpl ID4gVEVYVEJVRkxFTikKKwkJYnVmID0gcGFsbG9jKHVjaGFyX2JzaXplKTsKKworCXVjaGFyID0g KFVDaGFyICopIGJ1ZjsKKworCXVsZW4gPSB1Y2hhcl9jb252ZXJ0KGljdV9jb252ZXJ0ZXIsIHVj aGFyLCB1bGVuICsgMSwgc3JjLCBzcmNsZW4pOworCisJcmVzdWx0X2JzaXplID0gdWNvbF9nZXRT b3J0S2V5KGxvY2FsZS0+aW5mby5pY3UudWNvbCwKKwkJCQkJCQkJICAgdWNoYXIsIHVsZW4sCisJ CQkJCQkJCSAgICh1aW50OF90ICopIGRlc3QsIGRlc3RzaXplKTsKKworCWlmIChidWYgIT0gc2J1 ZikKKwkJcGZyZWUoYnVmKTsKKworCXJldHVybiByZXN1bHRfYnNpemU7Cit9CisKK3N0YXRpYyBz aXplX3QKK3BnX3N0cnhmcm1faWN1KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90 IGRlc3RzaXplLAorCQkJICAgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCUFzc2VydChsb2NhbGUt PnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpOworCXJldHVybiBwZ19zdHJueGZybV9pY3Uo ZGVzdCwgc3JjLCAtMSwgZGVzdHNpemUsIGxvY2FsZSk7Cit9CisKK3N0YXRpYyBzaXplX3QKK3Bn X3N0cm54ZnJtX3ByZWZpeF9pY3Vfbm9fdXRmOChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMs IHNpemVfdCBzcmNsZW4sCisJCQkJCQkJICAgc2l6ZV90IGRlc3RzaXplLCBwZ19sb2NhbGVfdCBs b2NhbGUpCit7CisJY2hhcgkJCSBzYnVmW1RFWFRCVUZMRU5dOworCWNoYXIJCQkqYnVmICAgPSBz YnVmOworCVVDaGFySXRlcmF0b3IJIGl0ZXI7CisJdWludDMyX3QJCSBzdGF0ZVsyXTsKKwlVRXJy b3JDb2RlCQkgc3RhdHVzOworCWludDMyX3QJCQkgdWxlbiAgPSAtMTsKKwlVQ2hhcgkJCSp1Y2hh ciA9IE5VTEw7CisJc2l6ZV90CQkJIHVjaGFyX2JzaXplOworCVNpemUJCQkgcmVzdWx0X2JzaXpl OworCisJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7CisJQXNz ZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSAhPSBQR19VVEY4KTsKKworCWluaXRfaWN1X2NvbnZl cnRlcigpOworCisJdWxlbiA9IHVjaGFyX2xlbmd0aChpY3VfY29udmVydGVyLCBzcmMsIHNyY2xl bik7CisKKwl1Y2hhcl9ic2l6ZSA9ICh1bGVuICsgMSkgKiBzaXplb2YoVUNoYXIpOworCisJaWYg KHVjaGFyX2JzaXplID4gVEVYVEJVRkxFTikKKwkJYnVmID0gcGFsbG9jKHVjaGFyX2JzaXplKTsK KworCXVjaGFyID0gKFVDaGFyICopIGJ1ZjsKKworCXVsZW4gPSB1Y2hhcl9jb252ZXJ0KGljdV9j b252ZXJ0ZXIsIHVjaGFyLCB1bGVuICsgMSwgc3JjLCBzcmNsZW4pOworCisJdWl0ZXJfc2V0U3Ry aW5nKCZpdGVyLCB1Y2hhciwgdWxlbik7CisJc3RhdGVbMF0gPSBzdGF0ZVsxXSA9IDA7CS8qIHdv bid0IG5lZWQgdGhhdCBhZ2FpbiAqLworCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKKwlyZXN1bHRf YnNpemUgPSB1Y29sX25leHRTb3J0S2V5UGFydChsb2NhbGUtPmluZm8uaWN1LnVjb2wsCisJCQkJ CQkJCQkJJml0ZXIsCisJCQkJCQkJCQkJc3RhdGUsCisJCQkJCQkJCQkJKHVpbnQ4X3QgKikgZGVz dCwKKwkJCQkJCQkJCQlkZXN0c2l6ZSwKKwkJCQkJCQkJCQkmc3RhdHVzKTsKKwlpZiAoVV9GQUlM VVJFKHN0YXR1cykpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygic29ydCBrZXkgZ2Vu ZXJhdGlvbiBmYWlsZWQ6ICVzIiwKKwkJCQkJCXVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisKKwly ZXR1cm4gcmVzdWx0X2JzaXplOworfQorCitzdGF0aWMgc2l6ZV90CitwZ19zdHJueGZybV9wcmVm aXhfaWN1KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKKwkJCQkJ ICAgc2l6ZV90IGRlc3RzaXplLCBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJc2l6ZV90IHJlc3Vs dDsKKworCUFzc2VydChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpOworCisJ aWYgKEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KQorCXsKKwkJVUNoYXJJdGVyYXRv ciBpdGVyOworCQl1aW50MzJfdAlzdGF0ZVsyXTsKKwkJVUVycm9yQ29kZQlzdGF0dXM7CisKKwkJ dWl0ZXJfc2V0VVRGOCgmaXRlciwgc3JjLCBzcmNsZW4pOworCQlzdGF0ZVswXSA9IHN0YXRlWzFd ID0gMDsJLyogd29uJ3QgbmVlZCB0aGF0IGFnYWluICovCisJCXN0YXR1cyA9IFVfWkVST19FUlJP UjsKKwkJcmVzdWx0ID0gdWNvbF9uZXh0U29ydEtleVBhcnQobG9jYWxlLT5pbmZvLmljdS51Y29s LAorCQkJCQkJCQkJICAmaXRlciwKKwkJCQkJCQkJCSAgc3RhdGUsCisJCQkJCQkJCQkgICh1aW50 OF90ICopIGRlc3QsCisJCQkJCQkJCQkgIGRlc3RzaXplLAorCQkJCQkJCQkJICAmc3RhdHVzKTsK KwkJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycm1z Zygic29ydCBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQ6ICVzIiwKKwkJCQkJCQl1X2Vycm9yTmFtZShz dGF0dXMpKSkpOworCX0KKwllbHNlCisJCXJlc3VsdCA9IHBnX3N0cm54ZnJtX3ByZWZpeF9pY3Vf bm9fdXRmOChkZXN0LCBzcmMsIHNyY2xlbiwgZGVzdHNpemUsCisJCQkJCQkJCQkJCQlsb2NhbGUp OworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHNpemVfdAorcGdfc3RyeGZybV9wcmVm aXhfaWN1KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGRlc3RzaXplLAorCQkJ CQkgIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlBc3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBD T0xMUFJPVklERVJfSUNVKTsKKwlyZXR1cm4gcGdfc3Rybnhmcm1fcHJlZml4X2ljdShkZXN0LCBz cmMsIC0xLCBkZXN0c2l6ZSwgbG9jYWxlKTsKK30KKworI2VuZGlmCisKKy8qCisgKiBSZXR1cm4g dHJ1ZSBpZiB0aGUgY29sbGF0aW9uIHByb3ZpZGVyIHN1cHBvcnRzIHBnX3N0cnhmcm0oKSBhbmQK KyAqIHBnX3N0cm54ZnJtKCk7IG90aGVyd2lzZSBmYWxzZS4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5 LCBpdCBzZWVtcyB0aGF0IHN0cnhmcm0oKSBmb3Igbm9uLUMgY29sbGF0aW9ucyBpcyBicm9rZW4g b24KKyAqIG1hbnkgY29tbW9uIHBsYXRmb3JtczsgdGVzdGluZyBvZiBtdWx0aXBsZSB2ZXJzaW9u cyBvZiBnbGliYyByZXZlYWxzIHRoYXQsCisgKiBmb3IgbWFueSBsb2NhbGVzLCBzdHJjb2xsKCkg YW5kIHN0cnhmcm0oKSBkbyBub3QgcmV0dXJuIGNvbnNpc3RlbnQKKyAqIHJlc3VsdHMuIFdoaWxl IG5vIG90aGVyIGxpYmMgb3RoZXIgdGhhbiBDeWd3aW4gaGFzIHNvIGZhciBiZWVuIHNob3duIHRv CisgKiBoYXZlIGEgcHJvYmxlbSwgd2UgdGFrZSB0aGUgY29uc2VydmF0aXZlIGNvdXJzZSBvZiBh Y3Rpb24gZm9yIHJpZ2h0IG5vdyBhbmQKKyAqIGRpc2FibGUgdGhpcyBjYXRlZ29yaWNhbGx5LiAg KFVzZXJzIHdobyBhcmUgY2VydGFpbiB0aGlzIGlzbid0IGEgcHJvYmxlbSBvbgorICogdGhlaXIg c3lzdGVtIGNhbiBzZXQgdGhlIGRldmVsb3BlciBHVUMgInRydXN0X3N0cnhmcm0iLikKKyAqCisg KiBObyBzaW1pbGFyIHByb2JsZW0gaXMga25vd24gZm9yIHRoZSBJQ1UgcHJvdmlkZXIuCisgKi8K K2Jvb2wKK3BnX3N0cnhmcm1fZW5hYmxlZChwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJaWYgKCFs b2NhbGUgfHwgbG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQykKKwkJcmV0dXJu IHRydXN0X3N0cnhmcm07CisJZWxzZSBpZiAobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklE RVJfSUNVKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8K KwkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBsb2NhbGUtPnBy b3ZpZGVyKTsKK30KKworLyoKKyAqIHBnX3N0cnhmcm0KKyAqCisgKiBUcmFuc2Zvcm1zICdzcmMn IHRvIGEgbnVsLXRlcm1pbmF0ZWQgc3RyaW5nIHN0b3JlZCBpbiAnZGVzdCcgc3VjaCB0aGF0Cisg KiBvcmRpbmFyeSBzdHJjbXAoKSBvbiB0cmFuc2Zvcm1lZCBzdHJpbmdzIGlzIGVxdWl2YWxlbnQg dG8gcGdfc3RyY29sbCgpIG9uCisgKiB1bnRyYW5zZm9ybWVkIHN0cmluZ3MuCisgKgorICogVGhl IHByb3ZpZGVkICdzcmMnIG11c3QgYmUgbnVsLXRlcm1pbmF0ZWQuCisgKgorICogSWYgZGVzdHNp emUgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdCwgcmV0dXJucyB0aGUgbnVtYmVy IG9mIGJ5dGVzCisgKiBjb3BpZWQgdG8gJ2Rlc3QnOyBvdGhlcndpc2UsIHJldHVybnMgdGhlIG51 bWJlciBvZiBieXRlcyBuZWVkZWQgdG8gaG9sZCB0aGUKKyAqIHJlc3VsdCBhbmQgbGVhdmVzIHRo ZSBjb250ZW50cyBvZiAnZGVzdCcgdW5kZWZpbmVkLiBJZiBkZXN0c2l6ZSBpcyB6ZXJvLAorICog J2Rlc3QnIG1heSBiZSBOVUxMLgorICovCitzaXplX3QKK3BnX3N0cnhmcm0oY2hhciAqZGVzdCwg Y29uc3QgY2hhciAqc3JjLCBzaXplX3QgZGVzdHNpemUsIHBnX2xvY2FsZV90IGxvY2FsZSkKK3sK KwlzaXplX3QgcmVzdWx0OworCisJaWYgKCFsb2NhbGUgfHwgbG9jYWxlLT5wcm92aWRlciA9PSBD T0xMUFJPVklERVJfTElCQykKKwkJcmVzdWx0ID0gcGdfc3RyeGZybV9saWJjKGRlc3QsIHNyYywg ZGVzdHNpemUsIGxvY2FsZSk7CisjaWZkZWYgVVNFX0lDVQorCWVsc2UgaWYgKGxvY2FsZS0+cHJv dmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJcmVzdWx0ID0gcGdfc3RyeGZybV9pY3UoZGVz dCwgc3JjLCBkZXN0c2l6ZSwgbG9jYWxlKTsKKyNlbmRpZgorCWVsc2UKKwkJLyogc2hvdWxkbid0 IGhhcHBlbiAqLworCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgY29sbHByb3ZpZGVyOiAlYyIs IGxvY2FsZS0+cHJvdmlkZXIpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIHBnX3N0 cm54ZnJtCisgKgorICogVHJhbnNmb3JtcyAnc3JjJyB0byBhIG51bC10ZXJtaW5hdGVkIHN0cmlu ZyBzdG9yZWQgaW4gJ2Rlc3QnIHN1Y2ggdGhhdAorICogb3JkaW5hcnkgc3RyY21wKCkgb24gdHJh bnNmb3JtZWQgc3RyaW5ncyBpcyBlcXVpdmFsZW50IHRvIHBnX3N0cmNvbGwoKSBvbgorICogdW50 cmFuc2Zvcm1lZCBzdHJpbmdzLgorICoKKyAqIElmIGRlc3RzaXplIGlzIGxhcmdlIGVub3VnaCB0 byBob2xkIHRoZSByZXN1bHQsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcworICogY29waWVk IHRvICdkZXN0Jzsgb3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVk IHRvIGhvbGQgdGhlCisgKiByZXN1bHQgYW5kIGxlYXZlcyB0aGUgY29udGVudHMgb2YgJ2Rlc3Qn IHVuZGVmaW5lZC4gSWYgZGVzdHNpemUgaXMgemVybywKKyAqICdkZXN0JyBtYXkgYmUgTlVMTC4K KyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBuZWVkIHRvIG51bC10ZXJtaW5hdGUgdGhlIGFyZ3Vt ZW50IGZvciBsaWJjIGZ1bmN0aW9uczsKKyAqIHNvIGlmIHRoZSBjYWxsZXIgYWxyZWFkeSBoYXMg YSBudWwtdGVybWluYXRlZCBzdHJpbmcsIGl0IHNob3VsZCBjYWxsCisgKiBwZ19zdHJ4ZnJtKCkg aW5zdGVhZC4KKyAqLworc2l6ZV90CitwZ19zdHJueGZybShjaGFyICpkZXN0LCBzaXplX3QgZGVz dHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKKwkJCXBnX2xvY2FsZV90IGxv Y2FsZSkKK3sKKwlzaXplX3QgcmVzdWx0OworCisJaWYgKCFsb2NhbGUgfHwgbG9jYWxlLT5wcm92 aWRlciA9PSBDT0xMUFJPVklERVJfTElCQykKKwkJcmVzdWx0ID0gcGdfc3Rybnhmcm1fbGliYyhk ZXN0LCBzcmMsIHNyY2xlbiwgZGVzdHNpemUsIGxvY2FsZSk7CisjaWZkZWYgVVNFX0lDVQorCWVs c2UgaWYgKGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJcmVzdWx0ID0g cGdfc3Rybnhmcm1faWN1KGRlc3QsIHNyYywgc3JjbGVuLCBkZXN0c2l6ZSwgbG9jYWxlKTsKKyNl bmRpZgorCWVsc2UKKwkJLyogc2hvdWxkbid0IGhhcHBlbiAqLworCQllbG9nKEVSUk9SLCAidW5z dXBwb3J0ZWQgY29sbHByb3ZpZGVyOiAlYyIsIGxvY2FsZS0+cHJvdmlkZXIpOworCisJcmV0dXJu IHJlc3VsdDsKK30KKworLyoKKyAqIFJldHVybiB0cnVlIGlmIHRoZSBjb2xsYXRpb24gcHJvdmlk ZXIgc3VwcG9ydHMgcGdfc3RyeGZybV9wcmVmaXgoKSBhbmQKKyAqIHBnX3N0cm54ZnJtX3ByZWZp eCgpOyBvdGhlcndpc2UgZmFsc2UuCisgKi8KK2Jvb2wKK3BnX3N0cnhmcm1fcHJlZml4X2VuYWJs ZWQocGdfbG9jYWxlX3QgbG9jYWxlKQoreworCWlmICghbG9jYWxlIHx8IGxvY2FsZS0+cHJvdmlk ZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpCisJCXJldHVybiBmYWxzZTsKKwllbHNlIGlmIChsb2Nh bGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJCXJldHVybiB0cnVlOworCWVsc2UK KwkJLyogc2hvdWxkbid0IGhhcHBlbiAqLworCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgY29s bHByb3ZpZGVyOiAlYyIsIGxvY2FsZS0+cHJvdmlkZXIpOworfQorCisvKgorICogcGdfc3RyeGZy bV9wcmVmaXgKKyAqCisgKiBUcmFuc2Zvcm1zICdzcmMnIHRvIGEgYnl0ZSBzZXF1ZW5jZSBzdG9y ZWQgaW4gJ2Rlc3QnIHN1Y2ggdGhhdCBvcmRpbmFyeQorICogbWVtY21wKCkgb24gdGhlIGJ5dGUg c2VxdWVuY2UgaXMgZXF1aXZhbGVudCB0byBwZ19zdHJjb2xsKCkgb24KKyAqIHVudHJhbnNmb3Jt ZWQgc3RyaW5ncy4gVGhlIHJlc3VsdCBpcyBub3QgbnVsLXRlcm1pbmF0ZWQuCisgKgorICogVGhl IHByb3ZpZGVkICdzcmMnIG11c3QgYmUgbnVsLXRlcm1pbmF0ZWQuCisgKgorICogSWYgZGVzdHNp emUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBlbnRpcmUgcmVzdWx0LCBzdG9yZXMg anVzdCB0aGUKKyAqIHByZWZpeCBpbiAnZGVzdCcuIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRl cyBhY3R1YWxseSBjb3BpZWQgdG8gJ2Rlc3QnLgorICovCitzaXplX3QKK3BnX3N0cnhmcm1fcHJl Zml4KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGRlc3RzaXplLAorCQkJCSAg cGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXNpemVfdCByZXN1bHQ7CisKKwlpZiAoIWxvY2FsZSB8 fCBsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKQorCQlyZXN1bHQgPSBwZ19z dHJ4ZnJtX3ByZWZpeF9saWJjKGRlc3QsIHNyYywgZGVzdHNpemUsIGxvY2FsZSk7CisjaWZkZWYg VVNFX0lDVQorCWVsc2UgaWYgKGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkK KwkJcmVzdWx0ID0gcGdfc3RyeGZybV9wcmVmaXhfaWN1KGRlc3QsIHNyYywgZGVzdHNpemUsIGxv Y2FsZSk7CisjZW5kaWYKKwllbHNlCisJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwkJZWxvZyhF UlJPUiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBsb2NhbGUtPnByb3ZpZGVyKTsK KworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBwZ19zdHJueGZybV9wcmVmaXgKKyAqCisg KiBUcmFuc2Zvcm1zICdzcmMnIHRvIGEgYnl0ZSBzZXF1ZW5jZSBzdG9yZWQgaW4gJ2Rlc3QnIHN1 Y2ggdGhhdCBvcmRpbmFyeQorICogbWVtY21wKCkgb24gdGhlIGJ5dGUgc2VxdWVuY2UgaXMgZXF1 aXZhbGVudCB0byBwZ19zdHJjb2xsKCkgb24KKyAqIHVudHJhbnNmb3JtZWQgc3RyaW5ncy4gVGhl IHJlc3VsdCBpcyBub3QgbnVsLXRlcm1pbmF0ZWQuCisgKgorICogVGhlIHByb3ZpZGVkICdzcmMn IG11c3QgYmUgbnVsLXRlcm1pbmF0ZWQuCisgKgorICogSWYgZGVzdHNpemUgaXMgbm90IGxhcmdl IGVub3VnaCB0byBob2xkIHRoZSBlbnRpcmUgcmVzdWx0LCBzdG9yZXMganVzdCB0aGUKKyAqIHBy ZWZpeCBpbiAnZGVzdCcuIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSBjb3Bp ZWQgdG8gJ2Rlc3QnLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWF5IG5lZWQgdG8gbnVsLXRlcm1p bmF0ZSB0aGUgYXJndW1lbnQgZm9yIGxpYmMgZnVuY3Rpb25zOworICogc28gaWYgdGhlIGNhbGxl ciBhbHJlYWR5IGhhcyBhIG51bC10ZXJtaW5hdGVkIHN0cmluZywgaXQgc2hvdWxkIGNhbGwKKyAq IHBnX3N0cnhmcm1fcHJlZml4KCkgaW5zdGVhZC4KKyAqLworc2l6ZV90CitwZ19zdHJueGZybV9w cmVmaXgoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCisJCQkJ ICAgc2l6ZV90IHNyY2xlbiwgcGdfbG9jYWxlX3QgbG9jYWxlKQoreworCXNpemVfdCByZXN1bHQ7 CisKKwlpZiAoIWxvY2FsZSB8fCBsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJD KQorCQlyZXN1bHQgPSBwZ19zdHJueGZybV9wcmVmaXhfbGliYyhkZXN0LCBzcmMsIHNyY2xlbiwg ZGVzdHNpemUsIGxvY2FsZSk7CisjaWZkZWYgVVNFX0lDVQorCWVsc2UgaWYgKGxvY2FsZS0+cHJv dmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJcmVzdWx0ID0gcGdfc3Rybnhmcm1fcHJlZml4 X2ljdShkZXN0LCBzcmMsIHNyY2xlbiwgZGVzdHNpemUsIGxvY2FsZSk7CisjZW5kaWYKKwllbHNl CisJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGNv bGxwcm92aWRlcjogJWMiLCBsb2NhbGUtPnByb3ZpZGVyKTsKKworCXJldHVybiByZXN1bHQ7Cit9 CisKICNpZmRlZiBVU0VfSUNVCiBzdGF0aWMgdm9pZAogaW5pdF9pY3VfY29udmVydGVyKHZvaWQp CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFyY2hhci5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3ZhcmNoYXIuYwppbmRleCAwMWEyZGI2YjIzLi4xOTYzZDRkYzRlIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFyY2hhci5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC92YXJjaGFyLmMKQEAgLTEwMjQsMjEgKzEwMjQsMTcgQEAgaGFzaGJwY2hhcihQ R19GVU5DVElPTl9BUkdTKQogI2lmZGVmIFVTRV9JQ1UKIAkJaWYgKG15bG9jYWxlLT5wcm92aWRl ciA9PSBDT0xMUFJPVklERVJfSUNVKQogCQl7Ci0JCQlpbnQzMl90CQl1bGVuID0gLTE7Ci0JCQlV Q2hhcgkgICAqdWNoYXIgPSBOVUxMOwotCQkJU2l6ZQkJYnNpemU7Ci0JCQl1aW50OF90ICAgICpi dWY7CisJCQlTaXplCQlic2l6ZSwgcnNpemU7CisJCQljaGFyCSAgICpidWY7CiAKLQkJCXVsZW4g PSBpY3VfdG9fdWNoYXIoJnVjaGFyLCBrZXlkYXRhLCBrZXlsZW4pOwotCi0JCQlic2l6ZSA9IHVj b2xfZ2V0U29ydEtleShteWxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCQkJCXVjaGFyLCB1 bGVuLCBOVUxMLCAwKTsKKwkJCWJzaXplID0gcGdfc3Rybnhmcm0oTlVMTCwgMCwga2V5ZGF0YSwg a2V5bGVuLCBteWxvY2FsZSk7CiAJCQlidWYgPSBwYWxsb2MoYnNpemUpOwotCQkJdWNvbF9nZXRT b3J0S2V5KG15bG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCXVjaGFyLCB1bGVuLCBidWYs IGJzaXplKTsKLQkJCXBmcmVlKHVjaGFyKTsKIAotCQkJcmVzdWx0ID0gaGFzaF9hbnkoYnVmLCBi c2l6ZSk7CisJCQlyc2l6ZSA9IHBnX3N0cm54ZnJtKGJ1ZiwgYnNpemUsIGtleWRhdGEsIGtleWxl biwgbXlsb2NhbGUpOworCQkJaWYgKHJzaXplICE9IGJzaXplKQorCQkJCWVsb2coRVJST1IsICJw Z19zdHJueGZybSgpIHJldHVybmVkIHVuZXhwZWN0ZWQgcmVzdWx0Iik7CisKKwkJCXJlc3VsdCA9 IGhhc2hfYW55KCh1aW50OF90ICopIGJ1ZiwgYnNpemUpOwogCiAJCQlwZnJlZShidWYpOwogCQl9 CkBAIC0xMDg2LDIxICsxMDgyLDE4IEBAIGhhc2hicGNoYXJleHRlbmRlZChQR19GVU5DVElPTl9B UkdTKQogI2lmZGVmIFVTRV9JQ1UKIAkJaWYgKG15bG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJP VklERVJfSUNVKQogCQl7Ci0JCQlpbnQzMl90CQl1bGVuID0gLTE7Ci0JCQlVQ2hhcgkgICAqdWNo YXIgPSBOVUxMOwotCQkJU2l6ZQkJYnNpemU7Ci0JCQl1aW50OF90ICAgICpidWY7CisJCQlTaXpl CQlic2l6ZSwgcnNpemU7CisJCQljaGFyCSAgICpidWY7CiAKLQkJCXVsZW4gPSBpY3VfdG9fdWNo YXIoJnVjaGFyLCBrZXlkYXRhLCBrZXlsZW4pOwotCi0JCQlic2l6ZSA9IHVjb2xfZ2V0U29ydEtl eShteWxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCQkJCXVjaGFyLCB1bGVuLCBOVUxMLCAw KTsKKwkJCWJzaXplID0gcGdfc3Rybnhmcm0oTlVMTCwgMCwga2V5ZGF0YSwga2V5bGVuLCBteWxv Y2FsZSk7CiAJCQlidWYgPSBwYWxsb2MoYnNpemUpOwotCQkJdWNvbF9nZXRTb3J0S2V5KG15bG9j YWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCXVjaGFyLCB1bGVuLCBidWYsIGJzaXplKTsKLQkJ CXBmcmVlKHVjaGFyKTsKIAotCQkJcmVzdWx0ID0gaGFzaF9hbnlfZXh0ZW5kZWQoYnVmLCBic2l6 ZSwgUEdfR0VUQVJHX0lOVDY0KDEpKTsKKwkJCXJzaXplID0gcGdfc3Rybnhmcm0oYnVmLCBic2l6 ZSwga2V5ZGF0YSwga2V5bGVuLCBteWxvY2FsZSk7CisJCQlpZiAocnNpemUgIT0gYnNpemUpCisJ CQkJZWxvZyhFUlJPUiwgInBnX3N0cm54ZnJtKCkgcmV0dXJuZWQgdW5leHBlY3RlZCByZXN1bHQi KTsKKworCQkJcmVzdWx0ID0gaGFzaF9hbnlfZXh0ZW5kZWQoKHVpbnQ4X3QgKikgYnVmLCBic2l6 ZSwKKwkJCQkJCQkJCSAgIFBHX0dFVEFSR19JTlQ2NCgxKSk7CiAKIAkJCXBmcmVlKGJ1Zik7CiAJ CX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvdmFybGVuYS5jCmluZGV4IDUyZGQwYmJiYTguLjhkYTU0NTg0MWYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3ZhcmxlbmEuYwpAQCAtMTg4OSwyMCArMTg4OSw2IEBAIHZhcnN0cl9zb3J0 c3VwcG9ydChTb3J0U3VwcG9ydCBzc3VwLCBPaWQgdHlwaWQsIE9pZCBjb2xsaWQpCiAJCSAqLwog CQlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsKIAotCQkvKgot CQkgKiBUaGVyZSBpcyBhIGZ1cnRoZXIgZXhjZXB0aW9uIG9uIFdpbmRvd3MuICBXaGVuIHRoZSBk YXRhYmFzZQotCQkgKiBlbmNvZGluZyBpcyBVVEYtOCBhbmQgd2UgYXJlIG5vdCB1c2luZyB0aGUg QyBjb2xsYXRpb24sIGNvbXBsZXgKLQkJICogaGFja3MgYXJlIHJlcXVpcmVkLiAgV2UgZG9uJ3Qg Y3VycmVudGx5IGhhdmUgYSBjb21wYXJhdG9yIHRoYXQKLQkJICogaGFuZGxlcyB0aGF0IGNhc2Us IHNvIHdlIGZhbGwgYmFjayBvbiB0aGUgc2xvdyBtZXRob2Qgb2YgaGF2aW5nIHRoZQotCQkgKiBz b3J0IGNvZGUgaW52b2tlIGJ0dGV4dGNtcCgpIChpbiB0aGUgY2FzZSBvZiB0ZXh0KSB2aWEgdGhl IGZtZ3IKLQkJICogdHJhbXBvbGluZS4gIElDVSBsb2NhbGVzIHdvcmsganVzdCB0aGUgc2FtZSBv biBXaW5kb3dzLCBob3dldmVyLgotCQkgKi8KLSNpZmRlZiBXSU4zMgotCQlpZiAoR2V0RGF0YWJh c2VFbmNvZGluZygpID09IFBHX1VURjggJiYKLQkJCSEobG9jYWxlICYmIGxvY2FsZS0+cHJvdmlk ZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkpCi0JCQlyZXR1cm47Ci0jZW5kaWYKLQogCQkvKgogCQkg KiBXZSB1c2UgdmFybGVuYWZhc3RjbXBfbG9jYWxlIGV4Y2VwdCBmb3IgdHlwZSBOQU1FLgogCQkg Ki8KQEAgLTE5MTgsMTMgKzE5MDQsNyBAQCB2YXJzdHJfc29ydHN1cHBvcnQoU29ydFN1cHBvcnQg c3N1cCwgT2lkIHR5cGlkLCBPaWQgY29sbGlkKQogCiAJLyoKIAkgKiBVbmZvcnR1bmF0ZWx5LCBp dCBzZWVtcyB0aGF0IGFiYnJldmlhdGlvbiBmb3Igbm9uLUMgY29sbGF0aW9ucyBpcwotCSAqIGJy b2tlbiBvbiBtYW55IGNvbW1vbiBwbGF0Zm9ybXM7IHRlc3Rpbmcgb2YgbXVsdGlwbGUgdmVyc2lv bnMgb2YgZ2xpYmMKLQkgKiByZXZlYWxzIHRoYXQsIGZvciBtYW55IGxvY2FsZXMsIHN0cmNvbGwo KSBhbmQgc3RyeGZybSgpIGRvIG5vdCByZXR1cm4KLQkgKiBjb25zaXN0ZW50IHJlc3VsdHMsIHdo aWNoIGlzIGZhdGFsIHRvIHRoaXMgb3B0aW1pemF0aW9uLiAgV2hpbGUgbm8KLQkgKiBvdGhlciBs aWJjIG90aGVyIHRoYW4gQ3lnd2luIGhhcyBzbyBmYXIgYmVlbiBzaG93biB0byBoYXZlIGEgcHJv YmxlbSwKLQkgKiB3ZSB0YWtlIHRoZSBjb25zZXJ2YXRpdmUgY291cnNlIG9mIGFjdGlvbiBmb3Ig cmlnaHQgbm93IGFuZCBkaXNhYmxlCi0JICogdGhpcyBjYXRlZ29yaWNhbGx5LiAgKFVzZXJzIHdo byBhcmUgY2VydGFpbiB0aGlzIGlzbid0IGEgcHJvYmxlbSBvbgotCSAqIHRoZWlyIHN5c3RlbSBj YW4gZGVmaW5lIFRSVVNUX1NUUlhGUk0uKQorCSAqIGJyb2tlbiBvbiBtYW55IGNvbW1vbiBwbGF0 Zm9ybXM7IHNlZSBwZ19zdHJ4ZnJtX2VuYWJsZWQoKS4KIAkgKgogCSAqIEV2ZW4gYXBhcnQgZnJv bSB0aGUgcmlzayBvZiBicm9rZW4gbG9jYWxlcywgaXQncyBwb3NzaWJsZSB0aGF0IHRoZXJlCiAJ ICogYXJlIHBsYXRmb3JtcyB3aGVyZSB0aGUgdXNlIG9mIGFiYnJldmlhdGVkIGtleXMgc2hvdWxk IGJlIGRpc2FibGVkIGF0CkBAIC0xOTM3LDEwICsxOTE3LDggQEAgdmFyc3RyX3NvcnRzdXBwb3J0 KFNvcnRTdXBwb3J0IHNzdXAsIE9pZCB0eXBpZCwgT2lkIGNvbGxpZCkKIAkgKiBjYXRlZ29yaWNh bGx5LCB3ZSBtYXkgc3RpbGwgd2FudCBvciBuZWVkIHRvIGRpc2FibGUgaXQgZm9yIHBhcnRpY3Vs YXIKIAkgKiBwbGF0Zm9ybXMuCiAJICovCi0jaWZuZGVmIFRSVVNUX1NUUlhGUk0KLQlpZiAoIWNv bGxhdGVfYyAmJiAhKGxvY2FsZSAmJiBsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9J Q1UpKQorCWlmICghY29sbGF0ZV9jICYmICFwZ19zdHJ4ZnJtX2VuYWJsZWQobG9jYWxlKSkKIAkJ YWJicmV2aWF0ZSA9IGZhbHNlOwotI2VuZGlmCiAKIAkvKgogCSAqIElmIHdlJ3JlIHVzaW5nIGFi YnJldmlhdGVkIGtleXMsIG9yIGlmIHdlJ3JlIHVzaW5nIGEgbG9jYWxlLWF3YXJlCkBAIC0yMjI5 LDYgKzIyMDcsNyBAQCB2YXJzdHJmYXN0Y21wX2xvY2FsZShjaGFyICphMXAsIGludCBsZW4xLCBj aGFyICphMnAsIGludCBsZW4yLCBTb3J0U3VwcG9ydCBzc3VwKQogc3RhdGljIERhdHVtCiB2YXJz dHJfYWJicmV2X2NvbnZlcnQoRGF0dW0gb3JpZ2luYWwsIFNvcnRTdXBwb3J0IHNzdXApCiB7CisJ Y29uc3Qgc2l6ZV90IG1heF9wcmVmaXhfYnl0ZXMgPSBzaXplb2YoRGF0dW0pOwogCVZhclN0cmlu Z1NvcnRTdXBwb3J0ICpzc3MgPSAoVmFyU3RyaW5nU29ydFN1cHBvcnQgKikgc3N1cC0+c3N1cF9l eHRyYTsKIAlWYXJTdHJpbmcgICphdXRob3JpdGF0aXZlID0gRGF0dW1HZXRWYXJTdHJpbmdQUChv cmlnaW5hbCk7CiAJY2hhcgkgICAqYXV0aG9yaXRhdGl2ZV9kYXRhID0gVkFSREFUQV9BTlkoYXV0 aG9yaXRhdGl2ZSk7CkBAIC0yMjQxLDcgKzIyMjAsNyBAQCB2YXJzdHJfYWJicmV2X2NvbnZlcnQo RGF0dW0gb3JpZ2luYWwsIFNvcnRTdXBwb3J0IHNzdXApCiAKIAlwcmVzID0gKGNoYXIgKikgJnJl czsKIAkvKiBtZW1zZXQoKSwgc28gYW55IG5vbi1vdmVyd3JpdHRlbiBieXRlcyBhcmUgTlVMICov Ci0JbWVtc2V0KHByZXMsIDAsIHNpemVvZihEYXR1bSkpOworCW1lbXNldChwcmVzLCAwLCBtYXhf cHJlZml4X2J5dGVzKTsKIAlsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUihhdXRob3JpdGF0aXZlKTsK IAogCS8qIEdldCBudW1iZXIgb2YgYnl0ZXMsIGlnbm9yaW5nIHRyYWlsaW5nIHNwYWNlcyAqLwpA QCAtMjI3NiwxNCArMjI1NSwxMCBAQCB2YXJzdHJfYWJicmV2X2NvbnZlcnQoRGF0dW0gb3JpZ2lu YWwsIFNvcnRTdXBwb3J0IHNzdXApCiAJICogdGhpbmc6IGV4cGxpY2l0bHkgY29uc2lkZXIgc3Ry aW5nIGxlbmd0aC4KIAkgKi8KIAlpZiAoc3NzLT5jb2xsYXRlX2MpCi0JCW1lbWNweShwcmVzLCBh dXRob3JpdGF0aXZlX2RhdGEsIE1pbihsZW4sIHNpemVvZihEYXR1bSkpKTsKKwkJbWVtY3B5KHBy ZXMsIGF1dGhvcml0YXRpdmVfZGF0YSwgTWluKGxlbiwgbWF4X3ByZWZpeF9ieXRlcykpOwogCWVs c2UKIAl7CiAJCVNpemUJCWJzaXplOwotI2lmZGVmIFVTRV9JQ1UKLQkJaW50MzJfdAkJdWxlbiA9 IC0xOwotCQlVQ2hhcgkgICAqdWNoYXIgPSBOVUxMOwotI2VuZGlmCiAKIAkJLyoKIAkJICogV2Un cmUgbm90IHVzaW5nIHRoZSBDIGNvbGxhdGlvbiwgc28gZmFsbCBiYWNrIG9uIHN0cnhmcm0gb3Ig SUNVCkBAIC0yMzAxLDcgKzIyNzYsNyBAQCB2YXJzdHJfYWJicmV2X2NvbnZlcnQoRGF0dW0gb3Jp Z2luYWwsIFNvcnRTdXBwb3J0IHNzdXApCiAJCWlmIChzc3MtPmxhc3RfbGVuMSA9PSBsZW4gJiYg c3NzLT5jYWNoZV9ibG9iICYmCiAJCQltZW1jbXAoc3NzLT5idWYxLCBhdXRob3JpdGF0aXZlX2Rh dGEsIGxlbikgPT0gMCkKIAkJewotCQkJbWVtY3B5KHByZXMsIHNzcy0+YnVmMiwgTWluKHNpemVv ZihEYXR1bSksIHNzcy0+bGFzdF9sZW4yKSk7CisJCQltZW1jcHkocHJlcywgc3NzLT5idWYyLCBN aW4obWF4X3ByZWZpeF9ieXRlcywgc3NzLT5sYXN0X2xlbjIpKTsKIAkJCS8qIE5vIGNoYW5nZSBh ZmZlY3RpbmcgY2FyZGluYWxpdHksIHNvIG5vIGhhc2hpbmcgcmVxdWlyZWQgKi8KIAkJCWdvdG8g ZG9uZTsKIAkJfQpAQCAtMjMwOSw4MSArMjI4NCw0OSBAQCB2YXJzdHJfYWJicmV2X2NvbnZlcnQo RGF0dW0gb3JpZ2luYWwsIFNvcnRTdXBwb3J0IHNzdXApCiAJCW1lbWNweShzc3MtPmJ1ZjEsIGF1 dGhvcml0YXRpdmVfZGF0YSwgbGVuKTsKIAogCQkvKgotCQkgKiBKdXN0IGxpa2Ugc3RyY29sbCgp LCBzdHJ4ZnJtKCkgZXhwZWN0cyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4gTm90Ci0JCSAqIG5l Y2Vzc2FyeSBmb3IgSUNVLCBidXQgZG9lc24ndCBodXJ0LgorCQkgKiBwZ19zdHJ4ZnJtKCkgYW5k IHBnX3N0cnhmcm1fcHJlZml4IGV4cGVjdCBOVUwtdGVybWluYXRlZAorCQkgKiBzdHJpbmdzLgog CQkgKi8KIAkJc3NzLT5idWYxW2xlbl0gPSAnXDAnOwogCQlzc3MtPmxhc3RfbGVuMSA9IGxlbjsK IAotI2lmZGVmIFVTRV9JQ1UKLQkJLyogV2hlbiB1c2luZyBJQ1UgYW5kIG5vdCBVVEY4LCBjb252 ZXJ0IHN0cmluZyB0byBVQ2hhci4gKi8KLQkJaWYgKHNzcy0+bG9jYWxlICYmIHNzcy0+bG9jYWxl LT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVICYmCi0JCQlHZXREYXRhYmFzZUVuY29kaW5n KCkgIT0gUEdfVVRGOCkKLQkJCXVsZW4gPSBpY3VfdG9fdWNoYXIoJnVjaGFyLCBzc3MtPmJ1ZjEs IGxlbik7Ci0jZW5kaWYKLQotCQkvKgotCQkgKiBMb29wOiBDYWxsIHN0cnhmcm0oKSBvciB1Y29s X2dldFNvcnRLZXkoKSwgcG9zc2libHkgZW5sYXJnZSBidWZmZXIsCi0JCSAqIGFuZCB0cnkgYWdh aW4uICBCb3RoIG9mIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIHRoZSByZXN1bHQgYnVmZmVyCi0JCSAq IGNvbnRlbnQgdW5kZWZpbmVkIGlmIHRoZSByZXN1bHQgZGlkIG5vdCBmaXQsIHNvIHdlIG5lZWQg dG8gcmV0cnkKLQkJICogdW50aWwgZXZlcnl0aGluZyBmaXRzLCBldmVuIHRob3VnaCB3ZSBvbmx5 IG5lZWQgdGhlIGZpcnN0IGZldyBieXRlcwotCQkgKiBpbiB0aGUgZW5kLiAgV2hlbiB1c2luZyB1 Y29sX25leHRTb3J0S2V5UGFydCgpLCBob3dldmVyLCB3ZSBvbmx5Ci0JCSAqIGFzayBmb3IgYXMg bWFueSBieXRlcyBhcyB3ZSBhY3R1YWxseSBuZWVkLgotCQkgKi8KLQkJZm9yICg7OykKKwkJaWYg KHBnX3N0cnhmcm1fcHJlZml4X2VuYWJsZWQoc3NzLT5sb2NhbGUpKQogCQl7Ci0jaWZkZWYgVVNF X0lDVQotCQkJaWYgKHNzcy0+bG9jYWxlICYmIHNzcy0+bG9jYWxlLT5wcm92aWRlciA9PSBDT0xM UFJPVklERVJfSUNVKQorCQkJaWYgKHNzcy0+YnVmbGVuMiA8IG1heF9wcmVmaXhfYnl0ZXMpCiAJ CQl7Ci0JCQkJLyoKLQkJCQkgKiBXaGVuIHVzaW5nIFVURjgsIHVzZSB0aGUgaXRlcmF0aW9uIGlu dGVyZmFjZSBzbyB3ZSBvbmx5Ci0JCQkJICogbmVlZCB0byBwcm9kdWNlIGFzIG1hbnkgYnl0ZXMg YXMgd2UgYWN0dWFsbHkgbmVlZC4KLQkJCQkgKi8KLQkJCQlpZiAoR2V0RGF0YWJhc2VFbmNvZGlu ZygpID09IFBHX1VURjgpCi0JCQkJewotCQkJCQlVQ2hhckl0ZXJhdG9yIGl0ZXI7Ci0JCQkJCXVp bnQzMl90CXN0YXRlWzJdOwotCQkJCQlVRXJyb3JDb2RlCXN0YXR1czsKLQotCQkJCQl1aXRlcl9z ZXRVVEY4KCZpdGVyLCBzc3MtPmJ1ZjEsIGxlbik7Ci0JCQkJCXN0YXRlWzBdID0gc3RhdGVbMV0g PSAwOwkvKiB3b24ndCBuZWVkIHRoYXQgYWdhaW4gKi8KLQkJCQkJc3RhdHVzID0gVV9aRVJPX0VS Uk9SOwotCQkJCQlic2l6ZSA9IHVjb2xfbmV4dFNvcnRLZXlQYXJ0KHNzcy0+bG9jYWxlLT5pbmZv LmljdS51Y29sLAotCQkJCQkJCQkJCQkJICZpdGVyLAotCQkJCQkJCQkJCQkJIHN0YXRlLAotCQkJ CQkJCQkJCQkJICh1aW50OF90ICopIHNzcy0+YnVmMiwKLQkJCQkJCQkJCQkJCSBNaW4oc2l6ZW9m KERhdHVtKSwgc3NzLT5idWZsZW4yKSwKLQkJCQkJCQkJCQkJCSAmc3RhdHVzKTsKLQkJCQkJaWYg KFVfRkFJTFVSRShzdGF0dXMpKQotCQkJCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCQkJKGVycm1z Zygic29ydCBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQ6ICVzIiwKLQkJCQkJCQkJCQl1X2Vycm9yTmFt ZShzdGF0dXMpKSkpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJCWJzaXplID0gdWNvbF9nZXRTb3J0 S2V5KHNzcy0+bG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCQkJCQl1Y2hhciwgdWxlbiwK LQkJCQkJCQkJCQkJKHVpbnQ4X3QgKikgc3NzLT5idWYyLCBzc3MtPmJ1ZmxlbjIpOworCQkJCXNz cy0+YnVmbGVuMiA9IE1heChtYXhfcHJlZml4X2J5dGVzLAorCQkJCQkJCQkgICBNaW4oc3NzLT5i dWZsZW4yICogMiwgTWF4QWxsb2NTaXplKSk7CisJCQkJc3NzLT5idWYyID0gcmVwYWxsb2Moc3Nz LT5idWYyLCBzc3MtPmJ1ZmxlbjIpOwogCQkJfQotCQkJZWxzZQotI2VuZGlmCi0jaWZkZWYgSEFW RV9MT0NBTEVfVAotCQkJaWYgKHNzcy0+bG9jYWxlICYmIHNzcy0+bG9jYWxlLT5wcm92aWRlciA9 PSBDT0xMUFJPVklERVJfTElCQykKLQkJCQlic2l6ZSA9IHN0cnhmcm1fbChzc3MtPmJ1ZjIsIHNz cy0+YnVmMSwKLQkJCQkJCQkJICBzc3MtPmJ1ZmxlbjIsIHNzcy0+bG9jYWxlLT5pbmZvLmx0KTsK LQkJCWVsc2UKLSNlbmRpZgotCQkJCWJzaXplID0gc3RyeGZybShzc3MtPmJ1ZjIsIHNzcy0+YnVm MSwgc3NzLT5idWZsZW4yKTsKLQotCQkJc3NzLT5sYXN0X2xlbjIgPSBic2l6ZTsKLQkJCWlmIChi c2l6ZSA8IHNzcy0+YnVmbGVuMikKLQkJCQlicmVhazsKIAorCQkJYnNpemUgPSBwZ19zdHJ4ZnJt X3ByZWZpeChzc3MtPmJ1ZjIsIHNzcy0+YnVmMSwKKwkJCQkJCQkJCSAgbWF4X3ByZWZpeF9ieXRl cywgc3NzLT5sb2NhbGUpOworCQl9CisJCWVsc2UKKwkJewogCQkJLyoKLQkJCSAqIEdyb3cgYnVm ZmVyIGFuZCByZXRyeS4KKwkJCSAqIExvb3A6IENhbGwgcGdfc3RyeGZybSgpLCBwb3NzaWJseSBl bmxhcmdlIGJ1ZmZlciwgYW5kIHRyeQorCQkJICogYWdhaW4uICBUaGUgcGdfc3RyeGZybSgpIGZ1 bmN0aW9uIGxlYXZlcyB0aGUgcmVzdWx0IGJ1ZmZlcgorCQkJICogY29udGVudCB1bmRlZmluZWQg aWYgdGhlIHJlc3VsdCBkaWQgbm90IGZpdCwgc28gd2UgbmVlZCB0bworCQkJICogcmV0cnkgdW50 aWwgZXZlcnl0aGluZyBmaXRzLCBldmVuIHRob3VnaCB3ZSBvbmx5IG5lZWQgdGhlIGZpcnN0CisJ CQkgKiBmZXcgYnl0ZXMgaW4gdGhlIGVuZC4KIAkJCSAqLwotCQkJc3NzLT5idWZsZW4yID0gTWF4 KGJzaXplICsgMSwKLQkJCQkJCQkgICBNaW4oc3NzLT5idWZsZW4yICogMiwgTWF4QWxsb2NTaXpl KSk7Ci0JCQlzc3MtPmJ1ZjIgPSByZXBhbGxvYyhzc3MtPmJ1ZjIsIHNzcy0+YnVmbGVuMik7CisJ CQlmb3IgKDs7KQorCQkJeworCQkJCWJzaXplID0gcGdfc3RyeGZybShzc3MtPmJ1ZjIsIHNzcy0+ YnVmMSwgc3NzLT5idWZsZW4yLAorCQkJCQkJCQkgICBzc3MtPmxvY2FsZSk7CisKKwkJCQlzc3Mt Pmxhc3RfbGVuMiA9IGJzaXplOworCQkJCWlmIChic2l6ZSA8IHNzcy0+YnVmbGVuMikKKwkJCQkJ YnJlYWs7CisKKwkJCQkvKgorCQkJCSAqIEdyb3cgYnVmZmVyIGFuZCByZXRyeS4KKwkJCQkgKi8K KwkJCQlzc3MtPmJ1ZmxlbjIgPSBNYXgoYnNpemUgKyAxLAorCQkJCQkJCQkgICBNaW4oc3NzLT5i dWZsZW4yICogMiwgTWF4QWxsb2NTaXplKSk7CisJCQkJc3NzLT5idWYyID0gcmVwYWxsb2Moc3Nz LT5idWYyLCBzc3MtPmJ1ZmxlbjIpOworCQkJfQogCQl9CiAKIAkJLyoKQEAgLTIzOTUsMTIgKzIz MzgsNyBAQCB2YXJzdHJfYWJicmV2X2NvbnZlcnQoRGF0dW0gb3JpZ2luYWwsIFNvcnRTdXBwb3J0 IHNzdXApCiAJCSAqIChBY3R1YWxseSwgZXZlbiBpZiB0aGVyZSB3ZXJlIE5VTCBieXRlcyBpbiB0 aGUgYmxvYiBpdCB3b3VsZCBiZQogCQkgKiBva2F5LiAgU2VlIHJlbWFya3Mgb24gYnl0ZWEgY2Fz ZSBhYm92ZS4pCiAJCSAqLwotCQltZW1jcHkocHJlcywgc3NzLT5idWYyLCBNaW4oc2l6ZW9mKERh dHVtKSwgYnNpemUpKTsKLQotI2lmZGVmIFVTRV9JQ1UKLQkJaWYgKHVjaGFyKQotCQkJcGZyZWUo dWNoYXIpOwotI2VuZGlmCisJCW1lbWNweShwcmVzLCBzc3MtPmJ1ZjIsIE1pbihtYXhfcHJlZml4 X2J5dGVzLCBic2l6ZSkpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5j CmluZGV4IDFiZjE0ZWVjNjYuLmM0YTZjNWNiODMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3Rh Ymxlcy5jCkBAIC0xOTMzLDYgKzE5MzMsMTcgQEAgc3RydWN0IGNvbmZpZ19ib29sIENvbmZpZ3Vy ZU5hbWVzQm9vbFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7CisJCXsidHJ1c3Rf c3RyeGZybSIsIFBHQ19VU0VSU0VULCBERVZFTE9QRVJfT1BUSU9OUywKKwkJCWdldHRleHRfbm9v cCgiQWxsb3cgdXNlIG9mIHN0cnhmcm0oKSBmb3IgYWJicmV2aWF0ZWQga2V5cyBvcHRpbWl6YXRp b24gZm9yIGxpYmMgcHJvdmlkZXIuIiksCisJCQlOVUxMLAorCQkJR1VDX05PVF9JTl9TQU1QTEUK KwkJfSwKKwkJJnRydXN0X3N0cnhmcm0sCisJCWZhbHNlLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJ fSwKKwogCXsKIAkJeyJkYXRhX3N5bmNfcmV0cnkiLCBQR0NfUE9TVE1BU1RFUiwgRVJST1JfSEFO RExJTkdfT1BUSU9OUywKIAkJCWdldHRleHRfbm9vcCgiV2hldGhlciB0byBjb250aW51ZSBydW5u aW5nIGFmdGVyIGEgZmFpbHVyZSB0byBzeW5jIGRhdGEgZmlsZXMuIiksCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2Fs ZS5oCmluZGV4IGJmNzBhZTA4Y2EuLjJiZDk2YWI3ZTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3V0aWxzL3BnX2xvY2FsZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oCkBA IC00MCw2ICs0MCw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBjaGFyICpsb2NhbGVfbWVzc2FnZXM7 CiBleHRlcm4gUEdETExJTVBPUlQgY2hhciAqbG9jYWxlX21vbmV0YXJ5OwogZXh0ZXJuIFBHRExM SU1QT1JUIGNoYXIgKmxvY2FsZV9udW1lcmljOwogZXh0ZXJuIFBHRExMSU1QT1JUIGNoYXIgKmxv Y2FsZV90aW1lOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgdHJ1c3Rfc3RyeGZybTsKIAogLyog bGNfdGltZSBsb2NhbGl6YXRpb24gY2FjaGUgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBjaGFyICps b2NhbGl6ZWRfYWJicmV2X2RheXNbXTsKQEAgLTEwMyw2ICsxMDQsMTYgQEAgZXh0ZXJuIGNoYXIg KmdldF9jb2xsYXRpb25fYWN0dWFsX3ZlcnNpb24oY2hhciBjb2xscHJvdmlkZXIsIGNvbnN0IGNo YXIgKmNvbGxjb2wKIGV4dGVybiBpbnQgcGdfc3RyY29sbChjb25zdCBjaGFyICphcmcxLCBjb25z dCBjaGFyICphcmcyLCBwZ19sb2NhbGVfdCBsb2NhbGUpOwogZXh0ZXJuIGludCBwZ19zdHJuY29s bChjb25zdCBjaGFyICphcmcxLCBzaXplX3QgbGVuMSwKIAkJCQkJICAgY29uc3QgY2hhciAqYXJn Miwgc2l6ZV90IGxlbjIsIHBnX2xvY2FsZV90IGxvY2FsZSk7CitleHRlcm4gYm9vbCBwZ19zdHJ4 ZnJtX2VuYWJsZWQocGdfbG9jYWxlX3QgbG9jYWxlKTsKK2V4dGVybiBzaXplX3QgcGdfc3RyeGZy bShjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBkZXN0c2l6ZSwKKwkJCQkJCSBw Z19sb2NhbGVfdCBsb2NhbGUpOworZXh0ZXJuIHNpemVfdCBwZ19zdHJueGZybShjaGFyICpkZXN0 LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKKwkJCQkJCSAgc2l6ZV90IHNyY2xl biwgcGdfbG9jYWxlX3QgbG9jYWxlKTsKK2V4dGVybiBib29sIHBnX3N0cnhmcm1fcHJlZml4X2Vu YWJsZWQocGdfbG9jYWxlX3QgbG9jYWxlKTsKK2V4dGVybiBzaXplX3QgcGdfc3RyeGZybV9wcmVm aXgoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgZGVzdHNpemUsCisJCQkJCQkJ CXBnX2xvY2FsZV90IGxvY2FsZSk7CitleHRlcm4gc2l6ZV90IHBnX3N0cm54ZnJtX3ByZWZpeChj aGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKKwkJCQkJCQkJIHNp emVfdCBzcmNsZW4sIHBnX2xvY2FsZV90IGxvY2FsZSk7CiAKICNpZmRlZiBVU0VfSUNVCiBleHRl cm4gaW50MzJfdCBpY3VfdG9fdWNoYXIoVUNoYXIgKipidWZmX3VjaGFyLCBjb25zdCBjaGFyICpi dWZmLCBzaXplX3QgbmJ5dGVzKTsKLS0gCjIuMzQuMQoK --=-Wwxe+64KlqA5LB703TXv Content-Disposition: attachment; filename="v4-0003-Refactor-pg_locale_t-routines.patch" Content-Type: text/x-patch; name="v4-0003-Refactor-pg_locale_t-routines.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA0MWNkNjM5MTEyYzQxY2NlN2VhYmQwNjU2OWZkNmNmODVkMDRjZDQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDUgRGVjIDIwMjIgMTA6NDM6NTIgLTA4MDAKU3ViamVjdDogW1BBVENIIHY0IDMvNl0gUmVm YWN0b3IgcGdfbG9jYWxlX3Qgcm91dGluZXMuCgogICogYWRkIHBnX2xvY2FsZV9pbnRlcm5hbC5o IHRvIGhpZGUgcGdfbG9jYWxlX3N0cnVjdAogICogbW92ZSBpbmZvLmx0IGludG8gaW5mby5saWJj Lmx0IHRvIG1hdGNoIGljdQogICogaW50cm9kdWNlIGluaXRfZGVmYXVsdF9sb2NhbGUoKQogICog aW50cm9kdWNlIHBnX2xvY2FsZV9kZXRlcm1pbmlzdGljKCkgYWNjZXNzb3IKICAqIG1ha2UgZGVm YXVsdF9sb2NhbGUgYSBzdGF0aWMgZ2xvYmFsIGluIHBnX2xvY2FsZS5jCiAgKiByZWZhY3RvciBw Z19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oKQotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2hmdW5jLmMgICAgIHwgIDgyICsrKy0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0 aW9uY21kcy5jICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVnZXgvcmVnY19wZ19sb2NhbGUuYyAg ICAgfCAgNDUgKystLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYyAgICAgfCAg MjUgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlLmMgICAgICAgICAgIHwgICAzICstCiBz cmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9zdXBwb3J0LmMgICB8ICAgMyArLQogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jICAgICAgfCAzNDIgKysrKysrKysrKysrKysrLS0tLS0t LS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmNoYXIuYyAgICAgICAgfCAgNjIgKystLS0K IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMgICAgICAgIHwgICA4ICstCiBzcmMvYmFj a2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMgICAgICB8ICAyOSArKy0KIHNyYy9pbmNsdWRlL3V0 aWxzL3BnX2xvY2FsZS5oICAgICAgICAgIHwgIDU1ICstLS0KIHNyYy9pbmNsdWRlL3V0aWxzL3Bn X2xvY2FsZV9pbnRlcm5hbC5oIHwgIDY4ICsrKysrCiAxMiBmaWxlcyBjaGFuZ2VkLCA0MDAgaW5z ZXJ0aW9ucygrKSwgMzIzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNs dWRlL3V0aWxzL3BnX2xvY2FsZV9pbnRlcm5hbC5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaGZ1bmMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hmdW5j LmMKaW5kZXggYjgxMzZlNDk2Zi4uNmQ5ZjAxNGM1YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaGZ1bmMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo ZnVuYy5jCkBAIC0yODEsMzYgKzI4MSwyOCBAQCBoYXNodGV4dChQR19GVU5DVElPTl9BUkdTKQog CWlmICghbGNfY29sbGF0ZV9pc19jKGNvbGxpZCkpCiAJCW15bG9jYWxlID0gcGdfbmV3bG9jYWxl X2Zyb21fY29sbGF0aW9uKGNvbGxpZCk7CiAKLQlpZiAoIW15bG9jYWxlIHx8IG15bG9jYWxlLT5k ZXRlcm1pbmlzdGljKQorCWlmIChwZ19sb2NhbGVfZGV0ZXJtaW5pc3RpYyhteWxvY2FsZSkpCiAJ ewogCQlyZXN1bHQgPSBoYXNoX2FueSgodW5zaWduZWQgY2hhciAqKSBWQVJEQVRBX0FOWShrZXkp LAogCQkJCQkJICBWQVJTSVpFX0FOWV9FWEhEUihrZXkpKTsKIAl9CiAJZWxzZQogCXsKLSNpZmRl ZiBVU0VfSUNVCi0JCWlmIChteWxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkK LQkJewotCQkJU2l6ZQkJYnNpemUsIHJzaXplOwotCQkJY2hhcgkgICAqYnVmOwotCQkJY29uc3Qg Y2hhciAqa2V5ZGF0YSA9IFZBUkRBVEFfQU5ZKGtleSk7Ci0JCQlzaXplX3QJCWtleWxlbiA9IFZB UlNJWkVfQU5ZX0VYSERSKGtleSk7Ci0KLQkJCWJzaXplID0gcGdfc3Rybnhmcm0oTlVMTCwgMCwg a2V5ZGF0YSwga2V5bGVuLCBteWxvY2FsZSk7Ci0JCQlidWYgPSBwYWxsb2MoYnNpemUpOwotCi0J CQlyc2l6ZSA9IHBnX3N0cm54ZnJtKGJ1ZiwgYnNpemUsIGtleWRhdGEsIGtleWxlbiwgbXlsb2Nh bGUpOwotCQkJaWYgKHJzaXplICE9IGJzaXplKQotCQkJCWVsb2coRVJST1IsICJwZ19zdHJueGZy bSgpIHJldHVybmVkIHVuZXhwZWN0ZWQgcmVzdWx0Iik7Ci0KLQkJCXJlc3VsdCA9IGhhc2hfYW55 KCh1aW50OF90ICopIGJ1ZiwgYnNpemUpOwotCi0JCQlwZnJlZShidWYpOwotCQl9Ci0JCWVsc2UK LSNlbmRpZgotCQkJLyogc2hvdWxkbid0IGhhcHBlbiAqLwotCQkJZWxvZyhFUlJPUiwgInVuc3Vw cG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBteWxvY2FsZS0+cHJvdmlkZXIpOworCQlTaXplCQli c2l6ZSwgcnNpemU7CisJCWNoYXIJICAgKmJ1ZjsKKwkJY29uc3QgY2hhciAqa2V5ZGF0YSA9IFZB UkRBVEFfQU5ZKGtleSk7CisJCXNpemVfdAkJa2V5bGVuID0gVkFSU0laRV9BTllfRVhIRFIoa2V5 KTsKKworCQlic2l6ZSA9IHBnX3N0cm54ZnJtKE5VTEwsIDAsIGtleWRhdGEsIGtleWxlbiwgbXls b2NhbGUpOworCQlidWYgPSBwYWxsb2MoYnNpemUpOworCisJCXJzaXplID0gcGdfc3Rybnhmcm0o YnVmLCBic2l6ZSwga2V5ZGF0YSwga2V5bGVuLCBteWxvY2FsZSk7CisJCWlmIChyc2l6ZSAhPSBi c2l6ZSkKKwkJCWVsb2coRVJST1IsICJwZ19zdHJueGZybSgpIHJldHVybmVkIHVuZXhwZWN0ZWQg cmVzdWx0Iik7CisKKwkJcmVzdWx0ID0gaGFzaF9hbnkoKHVpbnQ4X3QgKikgYnVmLCBic2l6ZSk7 CisKKwkJcGZyZWUoYnVmKTsKIAl9CiAKIAkvKiBBdm9pZCBsZWFraW5nIG1lbW9yeSBmb3IgdG9h c3RlZCBpbnB1dHMgKi8KQEAgLTMzNiw3ICszMjgsNyBAQCBoYXNodGV4dGV4dGVuZGVkKFBHX0ZV TkNUSU9OX0FSR1MpCiAJaWYgKCFsY19jb2xsYXRlX2lzX2MoY29sbGlkKSkKIAkJbXlsb2NhbGUg PSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsKIAotCWlmICghbXlsb2NhbGUg fHwgbXlsb2NhbGUtPmRldGVybWluaXN0aWMpCisJaWYgKHBnX2xvY2FsZV9kZXRlcm1pbmlzdGlj KG15bG9jYWxlKSkKIAl7CiAJCXJlc3VsdCA9IGhhc2hfYW55X2V4dGVuZGVkKCh1bnNpZ25lZCBj aGFyICopIFZBUkRBVEFfQU5ZKGtleSksCiAJCQkJCQkJCSAgIFZBUlNJWkVfQU5ZX0VYSERSKGtl eSksCkBAIC0zNDQsMzAgKzMzNiwyMiBAQCBoYXNodGV4dGV4dGVuZGVkKFBHX0ZVTkNUSU9OX0FS R1MpCiAJfQogCWVsc2UKIAl7Ci0jaWZkZWYgVVNFX0lDVQotCQlpZiAobXlsb2NhbGUtPnByb3Zp ZGVyID09IENPTExQUk9WSURFUl9JQ1UpCi0JCXsKLQkJCVNpemUJCWJzaXplLCByc2l6ZTsKLQkJ CWNoYXIJICAgKmJ1ZjsKLQkJCWNvbnN0IGNoYXIgKmtleWRhdGEgPSBWQVJEQVRBX0FOWShrZXkp OwotCQkJc2l6ZV90CQlrZXlsZW4gPSBWQVJTSVpFX0FOWV9FWEhEUihrZXkpOwotCi0JCQlic2l6 ZSA9IHBnX3N0cm54ZnJtKE5VTEwsIDAsIGtleWRhdGEsIGtleWxlbiwgbXlsb2NhbGUpOwotCQkJ YnVmID0gcGFsbG9jKGJzaXplKTsKLQotCQkJcnNpemUgPSBwZ19zdHJueGZybShidWYsIGJzaXpl LCBrZXlkYXRhLCBrZXlsZW4sIG15bG9jYWxlKTsKLQkJCWlmIChyc2l6ZSAhPSBic2l6ZSkKLQkJ CQllbG9nKEVSUk9SLCAicGdfc3Rybnhmcm0oKSByZXR1cm5lZCB1bmV4cGVjdGVkIHJlc3VsdCIp OwotCi0JCQlyZXN1bHQgPSBoYXNoX2FueV9leHRlbmRlZCgodWludDhfdCAqKSBidWYsIGJzaXpl LAotCQkJCQkJCQkJICAgUEdfR0VUQVJHX0lOVDY0KDEpKTsKLQotCQkJcGZyZWUoYnVmKTsKLQkJ fQotCQllbHNlCi0jZW5kaWYKLQkJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KLQkJCWVsb2coRVJS T1IsICJ1bnN1cHBvcnRlZCBjb2xscHJvdmlkZXI6ICVjIiwgbXlsb2NhbGUtPnByb3ZpZGVyKTsK KwkJU2l6ZQkJYnNpemUsIHJzaXplOworCQljaGFyCSAgICpidWY7CisJCWNvbnN0IGNoYXIgKmtl eWRhdGEgPSBWQVJEQVRBX0FOWShrZXkpOworCQlzaXplX3QJCWtleWxlbiA9IFZBUlNJWkVfQU5Z X0VYSERSKGtleSk7CisKKwkJYnNpemUgPSBwZ19zdHJueGZybShOVUxMLCAwLCBrZXlkYXRhLCBr ZXlsZW4sIG15bG9jYWxlKTsKKwkJYnVmID0gcGFsbG9jKGJzaXplKTsKKworCQlyc2l6ZSA9IHBn X3N0cm54ZnJtKGJ1ZiwgYnNpemUsIGtleWRhdGEsIGtleWxlbiwgbXlsb2NhbGUpOworCQlpZiAo cnNpemUgIT0gYnNpemUpCisJCQllbG9nKEVSUk9SLCAicGdfc3Rybnhmcm0oKSByZXR1cm5lZCB1 bmV4cGVjdGVkIHJlc3VsdCIpOworCisJCXJlc3VsdCA9IGhhc2hfYW55X2V4dGVuZGVkKCh1aW50 OF90ICopIGJ1ZiwgYnNpemUsCisJCQkJCQkJCSAgIFBHX0dFVEFSR19JTlQ2NCgxKSk7CisKKwkJ cGZyZWUoYnVmKTsKIAl9CiAKIAlQR19GUkVFX0lGX0NPUFkoa2V5LCAwKTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2NvbGxhdGlvbmNtZHMuYwppbmRleCA4MWU1NGUwY2U2Li45ZTg0ZGE0ODkxIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRl ICJ1dGlscy9wZ19sb2NhbGUuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwu aCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZWdleC9yZWdjX3BnX2xvY2FsZS5jIGIvc3JjL2Jh Y2tlbmQvcmVnZXgvcmVnY19wZ19sb2NhbGUuYwppbmRleCAwMmQ0NjJhNjU5Li5hYzA1ZWZiNTU4 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZWdleC9yZWdjX3BnX2xvY2FsZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlZ2V4L3JlZ2NfcGdfbG9jYWxlLmMKQEAgLTE3LDYgKzE3LDcgQEAKIAogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdfbG9jYWxl LmgiCisjaW5jbHVkZSAidXRpbHMvcGdfbG9jYWxlX2ludGVybmFsLmgiCiAKIC8qCiAgKiBUbyBw cm92aWRlIGFzIG11Y2ggZnVuY3Rpb25hbGl0eSBhcyBwb3NzaWJsZSBvbiBhIHZhcmlldHkgb2Yg cGxhdGZvcm1zLApAQCAtMzA2LDEzICszMDcsMTMgQEAgcGdfd2NfaXNkaWdpdChwZ193Y2hhciBj KQogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9XSURFX0w6CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAog CQkJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAweEZGRkYpCi0J CQkJcmV0dXJuIGlzd2RpZ2l0X2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0 KTsKKwkJCQlyZXR1cm4gaXN3ZGlnaXRfbCgod2ludF90KSBjLCBwZ19yZWdleF9sb2NhbGUtPmlu Zm8ubGliYy5sdCk7CiAjZW5kaWYKIAkJCS8qIEZBTEwgVEhSVSAqLwogCQljYXNlIFBHX1JFR0VY X0xPQ0FMRV8xQllURV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCXJldHVybiAoYyA8PSAo cGdfd2NoYXIpIFVDSEFSX01BWCAmJgotCQkJCQlpc2RpZ2l0X2woKHVuc2lnbmVkIGNoYXIpIGMs IHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCkpOworCQkJCQlpc2RpZ2l0X2woKHVuc2lnbmVkIGNo YXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KSk7CiAjZW5kaWYKIAkJCWJyZWFr OwogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9JQ1U6CkBAIC0zNDIsMTMgKzM0MywxMyBAQCBwZ193 Y19pc2FscGhhKHBnX3djaGFyIGMpCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX1dJREVfTDoKICNp ZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlpZiAoc2l6ZW9mKHdjaGFyX3QpID49IDQgfHwgYyA8PSAo cGdfd2NoYXIpIDB4RkZGRikKLQkJCQlyZXR1cm4gaXN3YWxwaGFfbCgod2ludF90KSBjLCBwZ19y ZWdleF9sb2NhbGUtPmluZm8ubHQpOworCQkJCXJldHVybiBpc3dhbHBoYV9sKCh3aW50X3QpIGMs IHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KTsKICNlbmRpZgogCQkJLyogRkFMTCBUSFJV ICovCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFXzFCWVRFX0w6CiAjaWZkZWYgSEFWRV9MT0NBTEVf VAogCQkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgVUNIQVJfTUFYICYmCi0JCQkJCWlzYWxwaGFf bCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KSk7CisJCQkJCWlz YWxwaGFfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMubHQp KTsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX0lDVToKQEAgLTM3 OCwxMyArMzc5LDEzIEBAIHBnX3djX2lzYWxudW0ocGdfd2NoYXIgYykKIAkJY2FzZSBQR19SRUdF WF9MT0NBTEVfV0lERV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCWlmIChzaXplb2Yod2No YXJfdCkgPj0gNCB8fCBjIDw9IChwZ193Y2hhcikgMHhGRkZGKQotCQkJCXJldHVybiBpc3dhbG51 bV9sKCh3aW50X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7CisJCQkJcmV0dXJuIGlz d2FsbnVtX2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMubHQpOwogI2Vu ZGlmCiAJCQkvKiBGQUxMIFRIUlUgKi8KIAkJY2FzZSBQR19SRUdFWF9MT0NBTEVfMUJZVEVfTDoK ICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSBVQ0hBUl9N QVggJiYKLQkJCQkJaXNhbG51bV9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9sb2NhbGUt PmluZm8ubHQpKTsKKwkJCQkJaXNhbG51bV9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9s b2NhbGUtPmluZm8ubGliYy5sdCkpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBQR19SRUdF WF9MT0NBTEVfSUNVOgpAQCAtNDIzLDEzICs0MjQsMTMgQEAgcGdfd2NfaXN1cHBlcihwZ193Y2hh ciBjKQogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9XSURFX0w6CiAjaWZkZWYgSEFWRV9MT0NBTEVf VAogCQkJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAweEZGRkYp Ci0JCQkJcmV0dXJuIGlzd3VwcGVyX2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZv Lmx0KTsKKwkJCQlyZXR1cm4gaXN3dXBwZXJfbCgod2ludF90KSBjLCBwZ19yZWdleF9sb2NhbGUt PmluZm8ubGliYy5sdCk7CiAjZW5kaWYKIAkJCS8qIEZBTEwgVEhSVSAqLwogCQljYXNlIFBHX1JF R0VYX0xPQ0FMRV8xQllURV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCXJldHVybiAoYyA8 PSAocGdfd2NoYXIpIFVDSEFSX01BWCAmJgotCQkJCQlpc3VwcGVyX2woKHVuc2lnbmVkIGNoYXIp IGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCkpOworCQkJCQlpc3VwcGVyX2woKHVuc2lnbmVk IGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KSk7CiAjZW5kaWYKIAkJCWJy ZWFrOwogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9JQ1U6CkBAIC00NTksMTMgKzQ2MCwxMyBAQCBw Z193Y19pc2xvd2VyKHBnX3djaGFyIGMpCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX1dJREVfTDoK ICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlpZiAoc2l6ZW9mKHdjaGFyX3QpID49IDQgfHwgYyA8 PSAocGdfd2NoYXIpIDB4RkZGRikKLQkJCQlyZXR1cm4gaXN3bG93ZXJfbCgod2ludF90KSBjLCBw Z19yZWdleF9sb2NhbGUtPmluZm8ubHQpOworCQkJCXJldHVybiBpc3dsb3dlcl9sKCh3aW50X3Qp IGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KTsKICNlbmRpZgogCQkJLyogRkFMTCBU SFJVICovCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFXzFCWVRFX0w6CiAjaWZkZWYgSEFWRV9MT0NB TEVfVAogCQkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgVUNIQVJfTUFYICYmCi0JCQkJCWlzbG93 ZXJfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KSk7CisJCQkJ CWlzbG93ZXJfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMu bHQpKTsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX0lDVToKQEAg LTQ5NSwxMyArNDk2LDEzIEBAIHBnX3djX2lzZ3JhcGgocGdfd2NoYXIgYykKIAkJY2FzZSBQR19S RUdFWF9MT0NBTEVfV0lERV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCWlmIChzaXplb2Yo d2NoYXJfdCkgPj0gNCB8fCBjIDw9IChwZ193Y2hhcikgMHhGRkZGKQotCQkJCXJldHVybiBpc3dn cmFwaF9sKCh3aW50X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7CisJCQkJcmV0dXJu IGlzd2dyYXBoX2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMubHQpOwog I2VuZGlmCiAJCQkvKiBGQUxMIFRIUlUgKi8KIAkJY2FzZSBQR19SRUdFWF9MT0NBTEVfMUJZVEVf TDoKICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSBVQ0hB Ul9NQVggJiYKLQkJCQkJaXNncmFwaF9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9sb2Nh bGUtPmluZm8ubHQpKTsKKwkJCQkJaXNncmFwaF9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdl eF9sb2NhbGUtPmluZm8ubGliYy5sdCkpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBQR19S RUdFWF9MT0NBTEVfSUNVOgpAQCAtNTMxLDEzICs1MzIsMTMgQEAgcGdfd2NfaXNwcmludChwZ193 Y2hhciBjKQogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9XSURFX0w6CiAjaWZkZWYgSEFWRV9MT0NB TEVfVAogCQkJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAweEZG RkYpCi0JCQkJcmV0dXJuIGlzd3ByaW50X2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5p bmZvLmx0KTsKKwkJCQlyZXR1cm4gaXN3cHJpbnRfbCgod2ludF90KSBjLCBwZ19yZWdleF9sb2Nh bGUtPmluZm8ubGliYy5sdCk7CiAjZW5kaWYKIAkJCS8qIEZBTEwgVEhSVSAqLwogCQljYXNlIFBH X1JFR0VYX0xPQ0FMRV8xQllURV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCXJldHVybiAo YyA8PSAocGdfd2NoYXIpIFVDSEFSX01BWCAmJgotCQkJCQlpc3ByaW50X2woKHVuc2lnbmVkIGNo YXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCkpOworCQkJCQlpc3ByaW50X2woKHVuc2ln bmVkIGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KSk7CiAjZW5kaWYKIAkJ CWJyZWFrOwogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9JQ1U6CkBAIC01NjcsMTMgKzU2OCwxMyBA QCBwZ193Y19pc3B1bmN0KHBnX3djaGFyIGMpCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX1dJREVf TDoKICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlpZiAoc2l6ZW9mKHdjaGFyX3QpID49IDQgfHwg YyA8PSAocGdfd2NoYXIpIDB4RkZGRikKLQkJCQlyZXR1cm4gaXN3cHVuY3RfbCgod2ludF90KSBj LCBwZ19yZWdleF9sb2NhbGUtPmluZm8ubHQpOworCQkJCXJldHVybiBpc3dwdW5jdF9sKCh3aW50 X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5saWJjLmx0KTsKICNlbmRpZgogCQkJLyogRkFM TCBUSFJVICovCiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFXzFCWVRFX0w6CiAjaWZkZWYgSEFWRV9M T0NBTEVfVAogCQkJcmV0dXJuIChjIDw9IChwZ193Y2hhcikgVUNIQVJfTUFYICYmCi0JCQkJCWlz cHVuY3RfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KSk7CisJ CQkJCWlzcHVuY3RfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxp YmMubHQpKTsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgUEdfUkVHRVhfTE9DQUxFX0lDVToK QEAgLTYwMywxMyArNjA0LDEzIEBAIHBnX3djX2lzc3BhY2UocGdfd2NoYXIgYykKIAkJY2FzZSBQ R19SRUdFWF9MT0NBTEVfV0lERV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCWlmIChzaXpl b2Yod2NoYXJfdCkgPj0gNCB8fCBjIDw9IChwZ193Y2hhcikgMHhGRkZGKQotCQkJCXJldHVybiBp c3dzcGFjZV9sKCh3aW50X3QpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7CisJCQkJcmV0 dXJuIGlzd3NwYWNlX2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMubHQp OwogI2VuZGlmCiAJCQkvKiBGQUxMIFRIUlUgKi8KIAkJY2FzZSBQR19SRUdFWF9MT0NBTEVfMUJZ VEVfTDoKICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQlyZXR1cm4gKGMgPD0gKHBnX3djaGFyKSBV Q0hBUl9NQVggJiYKLQkJCQkJaXNzcGFjZV9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19yZWdleF9s b2NhbGUtPmluZm8ubHQpKTsKKwkJCQkJaXNzcGFjZV9sKCh1bnNpZ25lZCBjaGFyKSBjLCBwZ19y ZWdleF9sb2NhbGUtPmluZm8ubGliYy5sdCkpOwogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBQ R19SRUdFWF9MT0NBTEVfSUNVOgpAQCAtNjQ3LDEzICs2NDgsMTMgQEAgcGdfd2NfdG91cHBlcihw Z193Y2hhciBjKQogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV9XSURFX0w6CiAjaWZkZWYgSEFWRV9M T0NBTEVfVAogCQkJaWYgKHNpemVvZih3Y2hhcl90KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAw eEZGRkYpCi0JCQkJcmV0dXJuIHRvd3VwcGVyX2woKHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxl LT5pbmZvLmx0KTsKKwkJCQlyZXR1cm4gdG93dXBwZXJfbCgod2ludF90KSBjLCBwZ19yZWdleF9s b2NhbGUtPmluZm8ubGliYy5sdCk7CiAjZW5kaWYKIAkJCS8qIEZBTEwgVEhSVSAqLwogCQljYXNl IFBHX1JFR0VYX0xPQ0FMRV8xQllURV9MOgogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAkJCWlmIChj IDw9IChwZ193Y2hhcikgVUNIQVJfTUFYKQotCQkJCXJldHVybiB0b3VwcGVyX2woKHVuc2lnbmVk IGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5mby5sdCk7CisJCQkJcmV0dXJuIHRvdXBwZXJf bCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmxpYmMubHQpOwogI2Vu ZGlmCiAJCQlyZXR1cm4gYzsKIAkJY2FzZSBQR19SRUdFWF9MT0NBTEVfSUNVOgpAQCAtNjkxLDEz ICs2OTIsMTMgQEAgcGdfd2NfdG9sb3dlcihwZ193Y2hhciBjKQogCQljYXNlIFBHX1JFR0VYX0xP Q0FMRV9XSURFX0w6CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAogCQkJaWYgKHNpemVvZih3Y2hhcl90 KSA+PSA0IHx8IGMgPD0gKHBnX3djaGFyKSAweEZGRkYpCi0JCQkJcmV0dXJuIHRvd2xvd2VyX2wo KHdpbnRfdCkgYywgcGdfcmVnZXhfbG9jYWxlLT5pbmZvLmx0KTsKKwkJCQlyZXR1cm4gdG93bG93 ZXJfbCgod2ludF90KSBjLCBwZ19yZWdleF9sb2NhbGUtPmluZm8ubGliYy5sdCk7CiAjZW5kaWYK IAkJCS8qIEZBTEwgVEhSVSAqLwogCQljYXNlIFBHX1JFR0VYX0xPQ0FMRV8xQllURV9MOgogI2lm ZGVmIEhBVkVfTE9DQUxFX1QKIAkJCWlmIChjIDw9IChwZ193Y2hhcikgVUNIQVJfTUFYKQotCQkJ CXJldHVybiB0b2xvd2VyX2woKHVuc2lnbmVkIGNoYXIpIGMsIHBnX3JlZ2V4X2xvY2FsZS0+aW5m by5sdCk7CisJCQkJcmV0dXJuIHRvbG93ZXJfbCgodW5zaWduZWQgY2hhcikgYywgcGdfcmVnZXhf bG9jYWxlLT5pbmZvLmxpYmMubHQpOwogI2VuZGlmCiAJCQlyZXR1cm4gYzsKIAkJY2FzZSBQR19S RUdFWF9MT0NBTEVfSUNVOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1h dHRpbmcuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMKaW5kZXggNjU3NDZj NDhkMi4uMzA2NzQzMWNiZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1h dHRpbmcuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jCkBAIC04OCw2 ICs4OCw3IEBACiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9u dW1lcmljLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdfbG9jYWxlLmgiCisjaW5jbHVkZSAidXRpbHMv cGdfbG9jYWxlX2ludGVybmFsLmgiCiAKIAogLyogLS0tLS0tLS0tLQpAQCAtMTU3Niw3ICsxNTc3 LDcgQEAgaWN1X2NvbnZlcnRfY2FzZShJQ1VfQ29udmVydF9GdW5jIGZ1bmMsIHBnX2xvY2FsZV90 IG15bG9jYWxlLAogCSpidWZmX2Rlc3QgPSBwYWxsb2MobGVuX2Rlc3QgKiBzaXplb2YoKipidWZm X2Rlc3QpKTsKIAlzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAJbGVuX2Rlc3QgPSBmdW5jKCpidWZm X2Rlc3QsIGxlbl9kZXN0LCBidWZmX3NvdXJjZSwgbGVuX3NvdXJjZSwKLQkJCQkJbXlsb2NhbGUt PmluZm8uaWN1LmxvY2FsZSwgJnN0YXR1cyk7CisJCQkJCW15bG9jYWxlLT5jdHlwZSwgJnN0YXR1 cyk7CiAJaWYgKHN0YXR1cyA9PSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikKIAl7CiAJCS8qIHRy eSBhZ2FpbiB3aXRoIGFkanVzdGVkIGxlbmd0aCAqLwpAQCAtMTU4NCw3ICsxNTg1LDcgQEAgaWN1 X2NvbnZlcnRfY2FzZShJQ1VfQ29udmVydF9GdW5jIGZ1bmMsIHBnX2xvY2FsZV90IG15bG9jYWxl LAogCQkqYnVmZl9kZXN0ID0gcGFsbG9jKGxlbl9kZXN0ICogc2l6ZW9mKCoqYnVmZl9kZXN0KSk7 CiAJCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKIAkJbGVuX2Rlc3QgPSBmdW5jKCpidWZmX2Rlc3Qs IGxlbl9kZXN0LCBidWZmX3NvdXJjZSwgbGVuX3NvdXJjZSwKLQkJCQkJCW15bG9jYWxlLT5pbmZv LmljdS5sb2NhbGUsICZzdGF0dXMpOworCQkJCQkJbXlsb2NhbGUtPmN0eXBlLCAmc3RhdHVzKTsK IAl9CiAJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogCQllcmVwb3J0KEVSUk9SLApAQCAtMTY5Nyw3 ICsxNjk4LDcgQEAgc3RyX3RvbG93ZXIoY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcywg T2lkIGNvbGxpZCkKIAkJCQl7CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAogCQkJCQlpZiAobXlsb2Nh bGUpCi0JCQkJCQl3b3Jrc3BhY2VbY3Vycl9jaGFyXSA9IHRvd2xvd2VyX2wod29ya3NwYWNlW2N1 cnJfY2hhcl0sIG15bG9jYWxlLT5pbmZvLmx0KTsKKwkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJd ID0gdG93bG93ZXJfbCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubGliYy5s dCk7CiAJCQkJCWVsc2UKICNlbmRpZgogCQkJCQkJd29ya3NwYWNlW2N1cnJfY2hhcl0gPSB0b3ds b3dlcih3b3Jrc3BhY2VbY3Vycl9jaGFyXSk7CkBAIC0xNzMwLDcgKzE3MzEsNyBAQCBzdHJfdG9s b3dlcihjb25zdCBjaGFyICpidWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKQogCQkJCXsK ICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJCQkJCWlmIChteWxvY2FsZSkKLQkJCQkJCSpwID0gdG9s b3dlcl9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbXlsb2NhbGUtPmluZm8ubHQpOworCQkJCQkJKnAg PSB0b2xvd2VyX2woKHVuc2lnbmVkIGNoYXIpICpwLCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsK IAkJCQkJZWxzZQogI2VuZGlmCiAJCQkJCQkqcCA9IHBnX3RvbG93ZXIoKHVuc2lnbmVkIGNoYXIp ICpwKTsKQEAgLTE4MTksNyArMTgyMCw3IEBAIHN0cl90b3VwcGVyKGNvbnN0IGNoYXIgKmJ1ZmYs IHNpemVfdCBuYnl0ZXMsIE9pZCBjb2xsaWQpCiAJCQkJewogI2lmZGVmIEhBVkVfTE9DQUxFX1QK IAkJCQkJaWYgKG15bG9jYWxlKQotCQkJCQkJd29ya3NwYWNlW2N1cnJfY2hhcl0gPSB0b3d1cHBl cl9sKHdvcmtzcGFjZVtjdXJyX2NoYXJdLCBteWxvY2FsZS0+aW5mby5sdCk7CisJCQkJCQl3b3Jr c3BhY2VbY3Vycl9jaGFyXSA9IHRvd3VwcGVyX2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIG15bG9j YWxlLT5pbmZvLmxpYmMubHQpOwogCQkJCQllbHNlCiAjZW5kaWYKIAkJCQkJCXdvcmtzcGFjZVtj dXJyX2NoYXJdID0gdG93dXBwZXIod29ya3NwYWNlW2N1cnJfY2hhcl0pOwpAQCAtMTg1Miw3ICsx ODUzLDcgQEAgc3RyX3RvdXBwZXIoY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcywgT2lk IGNvbGxpZCkKIAkJCQl7CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAogCQkJCQlpZiAobXlsb2NhbGUp Ci0JCQkJCQkqcCA9IHRvdXBwZXJfbCgodW5zaWduZWQgY2hhcikgKnAsIG15bG9jYWxlLT5pbmZv Lmx0KTsKKwkJCQkJCSpwID0gdG91cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbXlsb2NhbGUt PmluZm8ubGliYy5sdCk7CiAJCQkJCWVsc2UKICNlbmRpZgogCQkJCQkJKnAgPSBwZ190b3VwcGVy KCh1bnNpZ25lZCBjaGFyKSAqcCk7CkBAIC0xOTQ0LDEwICsxOTQ1LDEwIEBAIHN0cl9pbml0Y2Fw KGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMsIE9pZCBjb2xsaWQpCiAJCQkJCWlmICht eWxvY2FsZSkKIAkJCQkJewogCQkJCQkJaWYgKHdhc2FsbnVtKQotCQkJCQkJCXdvcmtzcGFjZVtj dXJyX2NoYXJdID0gdG93bG93ZXJfbCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbXlsb2NhbGUtPmlu Zm8ubHQpOworCQkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gdG93bG93ZXJfbCh3b3Jrc3Bh Y2VbY3Vycl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubGliYy5sdCk7CiAJCQkJCQllbHNlCi0JCQkJ CQkJd29ya3NwYWNlW2N1cnJfY2hhcl0gPSB0b3d1cHBlcl9sKHdvcmtzcGFjZVtjdXJyX2NoYXJd LCBteWxvY2FsZS0+aW5mby5sdCk7Ci0JCQkJCQl3YXNhbG51bSA9IGlzd2FsbnVtX2wod29ya3Nw YWNlW2N1cnJfY2hhcl0sIG15bG9jYWxlLT5pbmZvLmx0KTsKKwkJCQkJCQl3b3Jrc3BhY2VbY3Vy cl9jaGFyXSA9IHRvd3VwcGVyX2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIG15bG9jYWxlLT5pbmZv LmxpYmMubHQpOworCQkJCQkJd2FzYWxudW0gPSBpc3dhbG51bV9sKHdvcmtzcGFjZVtjdXJyX2No YXJdLCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsKIAkJCQkJfQogCQkJCQllbHNlCiAjZW5kaWYK QEAgLTE5ODksMTAgKzE5OTAsMTAgQEAgc3RyX2luaXRjYXAoY29uc3QgY2hhciAqYnVmZiwgc2l6 ZV90IG5ieXRlcywgT2lkIGNvbGxpZCkKIAkJCQkJaWYgKG15bG9jYWxlKQogCQkJCQl7CiAJCQkJ CQlpZiAod2FzYWxudW0pCi0JCQkJCQkJKnAgPSB0b2xvd2VyX2woKHVuc2lnbmVkIGNoYXIpICpw LCBteWxvY2FsZS0+aW5mby5sdCk7CisJCQkJCQkJKnAgPSB0b2xvd2VyX2woKHVuc2lnbmVkIGNo YXIpICpwLCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsKIAkJCQkJCWVsc2UKLQkJCQkJCQkqcCA9 IHRvdXBwZXJfbCgodW5zaWduZWQgY2hhcikgKnAsIG15bG9jYWxlLT5pbmZvLmx0KTsKLQkJCQkJ CXdhc2FsbnVtID0gaXNhbG51bV9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbXlsb2NhbGUtPmluZm8u bHQpOworCQkJCQkJCSpwID0gdG91cHBlcl9sKCh1bnNpZ25lZCBjaGFyKSAqcCwgbXlsb2NhbGUt PmluZm8ubGliYy5sdCk7CisJCQkJCQl3YXNhbG51bSA9IGlzYWxudW1fbCgodW5zaWduZWQgY2hh cikgKnAsIG15bG9jYWxlLT5pbmZvLmxpYmMubHQpOwogCQkJCQl9CiAJCQkJCWVsc2UKICNlbmRp ZgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2UuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9saWtlLmMKaW5kZXggOGU2NzFiOWZhYi4uOTg3MTRhMDQ5MiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2UuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvbGlrZS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9wZ19sb2NhbGUuaCIKKyNp bmNsdWRlICJ1dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaCIKIAogCiAjZGVmaW5lIExJS0VfVFJV RQkJCQkJCTEKQEAgLTk2LDcgKzk3LDcgQEAgU0JfbG93ZXJfY2hhcih1bnNpZ25lZCBjaGFyIGMs IHBnX2xvY2FsZV90IGxvY2FsZSwgYm9vbCBsb2NhbGVfaXNfYykKIAkJcmV0dXJuIHBnX2FzY2lp X3RvbG93ZXIoYyk7CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAogCWVsc2UgaWYgKGxvY2FsZSkKLQkJ cmV0dXJuIHRvbG93ZXJfbChjLCBsb2NhbGUtPmluZm8ubHQpOworCQlyZXR1cm4gdG9sb3dlcl9s KGMsIGxvY2FsZS0+aW5mby5saWJjLmx0KTsKICNlbmRpZgogCWVsc2UKIAkJcmV0dXJuIHBnX3Rv bG93ZXIoYyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9zdXBwb3J0 LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbGlrZV9zdXBwb3J0LmMKaW5kZXggMmQzYWFhYWY2 Yi4uMjhkMjNhYzNhYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2xpa2Vfc3Vw cG9ydC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9saWtlX3N1cHBvcnQuYwpAQCAtNTIs NiArNTIsNyBAQAogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5 c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdfbG9jYWxlLmgiCisjaW5jbHVkZSAidXRpbHMv cGdfbG9jYWxlX2ludGVybmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvc2VsZnVuY3MuaCIKICNpbmNs dWRlICJ1dGlscy92YXJsZW5hLmgiCiAKQEAgLTE1MTEsNyArMTUxMiw3IEBAIHBhdHRlcm5fY2hh cl9pc2FscGhhKGNoYXIgYywgYm9vbCBpc19tdWx0aWJ5dGUsCiAJCQkoYyA+PSAnQScgJiYgYyA8 PSAnWicpIHx8IChjID49ICdhJyAmJiBjIDw9ICd6Jyk7CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAog CWVsc2UgaWYgKGxvY2FsZSAmJiBsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJD KQotCQlyZXR1cm4gaXNhbHBoYV9sKCh1bnNpZ25lZCBjaGFyKSBjLCBsb2NhbGUtPmluZm8ubHQp OworCQlyZXR1cm4gaXNhbHBoYV9sKCh1bnNpZ25lZCBjaGFyKSBjLCBsb2NhbGUtPmluZm8ubGli Yy5sdCk7CiAjZW5kaWYKIAllbHNlCiAJCXJldHVybiBpc2FscGhhKCh1bnNpZ25lZCBjaGFyKSBj KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYwppbmRleCA2NjMyODYxNjNlLi5kOGRmMmEzODMy IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVk ZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNs dWRlICJ1dGlscy9wZ19sb2NhbGUuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ19sb2NhbGVfaW50ZXJu YWwuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCiAjaWZkZWYgVVNFX0lDVQpAQCAt MTMxLDYgKzEzMiwxMSBAQCBzdGF0aWMgSFRBQiAqY29sbGF0aW9uX2NhY2hlID0gTlVMTDsKIHN0 YXRpYyBjaGFyICpJc29Mb2NhbGVOYW1lKGNvbnN0IGNoYXIgKik7CiAjZW5kaWYKIAorLyoKKyAq IERhdGFiYXNlIGRlZmF1bHQgbG9jYWxlLgorICovCitzdGF0aWMgcGdfbG9jYWxlX3QgZGVmYXVs dF9sb2NhbGUgPSBOVUxMOworCiAjaWZkZWYgVVNFX0lDVQogLyoKICAqIENvbnZlcnRlciBvYmpl Y3QgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBJQ1UncyBVQ2hhciBzdHJpbmdzIGFuZCBDIHN0cmlu Z3MKQEAgLTEzMzYsNyArMTM0Miw3IEBAIGxjX2NvbGxhdGVfaXNfYyhPaWQgY29sbGF0aW9uKQog CQlzdGF0aWMgaW50CXJlc3VsdCA9IC0xOwogCQljaGFyCSAgICpsb2NhbGVwdHI7CiAKLQkJaWYg KGRlZmF1bHRfbG9jYWxlLnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJCWlmIChkZWZh dWx0X2xvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKIAkJCXJldHVybiBmYWxz ZTsKIAogCQlpZiAocmVzdWx0ID49IDApCkBAIC0xMzg5LDcgKzEzOTUsNyBAQCBsY19jdHlwZV9p c19jKE9pZCBjb2xsYXRpb24pCiAJCXN0YXRpYyBpbnQJcmVzdWx0ID0gLTE7CiAJCWNoYXIJICAg KmxvY2FsZXB0cjsKIAotCQlpZiAoZGVmYXVsdF9sb2NhbGUucHJvdmlkZXIgPT0gQ09MTFBST1ZJ REVSX0lDVSkKKwkJaWYgKGRlZmF1bHRfbG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJf SUNVKQogCQkJcmV0dXJuIGZhbHNlOwogCiAJCWlmIChyZXN1bHQgPj0gMCkKQEAgLTE0MjAsMzgg KzE0MjYsNiBAQCBsY19jdHlwZV9pc19jKE9pZCBjb2xsYXRpb24pCiAJcmV0dXJuIChsb29rdXBf Y29sbGF0aW9uX2NhY2hlKGNvbGxhdGlvbiwgdHJ1ZSkpLT5jdHlwZV9pc19jOwogfQogCi1zdHJ1 Y3QgcGdfbG9jYWxlX3N0cnVjdCBkZWZhdWx0X2xvY2FsZTsKLQotdm9pZAotbWFrZV9pY3VfY29s bGF0b3IoY29uc3QgY2hhciAqaWN1bG9jc3RyLAotCQkJCSAgc3RydWN0IHBnX2xvY2FsZV9zdHJ1 Y3QgKnJlc3VsdHApCi17Ci0jaWZkZWYgVVNFX0lDVQotCVVDb2xsYXRvciAgKmNvbGxhdG9yOwot CVVFcnJvckNvZGUJc3RhdHVzOwotCi0Jc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCWNvbGxhdG9y ID0gdWNvbF9vcGVuKGljdWxvY3N0ciwgJnN0YXR1cyk7Ci0JaWYgKFVfRkFJTFVSRShzdGF0dXMp KQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJtc2coImNvdWxkIG5vdCBvcGVuIGNvbGxhdG9y IGZvciBsb2NhbGUgXCIlc1wiOiAlcyIsCi0JCQkJCQlpY3Vsb2NzdHIsIHVfZXJyb3JOYW1lKHN0 YXR1cykpKSk7Ci0KLQlpZiAoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPCA1NCkKLQkJaWN1X3Nl dF9jb2xsYXRpb25fYXR0cmlidXRlcyhjb2xsYXRvciwgaWN1bG9jc3RyKTsKLQotCS8qIFdlIHdp bGwgbGVhayB0aGlzIHN0cmluZyBpZiB0aGUgY2FsbGVyIGVycm9ycyBsYXRlciA6LSggKi8KLQly ZXN1bHRwLT5pbmZvLmljdS5sb2NhbGUgPSBNZW1vcnlDb250ZXh0U3RyZHVwKFRvcE1lbW9yeUNv bnRleHQsIGljdWxvY3N0cik7Ci0JcmVzdWx0cC0+aW5mby5pY3UudWNvbCA9IGNvbGxhdG9yOwot I2Vsc2UJCQkJCQkJLyogbm90IFVTRV9JQ1UgKi8KLQkvKiBjb3VsZCBnZXQgaGVyZSBpZiBhIGNv bGxhdGlvbiB3YXMgY3JlYXRlZCBieSBhIGJ1aWxkIHdpdGggSUNVICovCi0JZXJlcG9ydChFUlJP UiwKLQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCSBlcnJt c2coIklDVSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnVpbGQiKSkpOwotI2VuZGlmCQkJCQkJ CS8qIG5vdCBVU0VfSUNVICovCi19Ci0KLQogLyogc2ltcGxlIHN1YnJvdXRpbmUgZm9yIHJlcG9y dGluZyBlcnJvcnMgZnJvbSBuZXdsb2NhbGUoKSAqLwogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIHN0 YXRpYyB2b2lkCkBAIC0xNDg1LDYgKzE0NTksMTYzIEBAIHJlcG9ydF9uZXdsb2NhbGVfZmFpbHVy ZShjb25zdCBjaGFyICpsb2NhbGVuYW1lKQogI2VuZGlmCQkJCQkJCS8qIEhBVkVfTE9DQUxFX1Qg Ki8KIAogCisvKgorICogQ29uc3RydWN0IGEgbmV3IHBnX2xvY2FsZV90IG9iamVjdC4KKyAqCisg KiBQYXNzaW5nIE5VTEwgZm9yIHRoZSB2ZXJzaW9uIGlzIGFsbG93ZWQ7IGFuZCBldmVuIGlmIGl0 IGlzIHNwZWNpZmllZCwgdGhlCisgKiByZXN1bHQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBleGFj dGx5IG1hdGNoaW5nIHZlcnNpb24uIE90aGVyIHBhcmFtZXRlcnMKKyAqIGFyZSByZXF1aXJlZC4K KyAqCisgKiBPcmRpbmFyaWx5LCBjb2xsYXRlIGFuZCBjdHlwZSBzaG91bGQgYmUgdGhlIHNhbWUu IElmIHRoZSBwcm92aWRlciBpcyBJQ1UsCisgKiB0aGlzIGlzIGEgcmVxdWlyZW1lbnQsIGFuZCB0 aGUgJ2NvbGxhdGUnIGFuZCAnY3R5cGUnIGFyZ3VtZW50cyBzaG91bGQgYm90aAorICogY29tZSBm cm9tIGNvbGxpY3Vsb2NhbGUgKG9yIGRhdGljdWxvY2FsZSkuIElmIHRoZSBwcm92aWRlciBpcyBs aWJjLCB0aGUKKyAqIGFyZ3VtZW50cyBzaG91bGQgY29tZSBmcm9tIGNvbGxjb2xsYXRlIGFuZCBj b2xsY3R5cGUgKG9yIGRhdGNvbGxhdGUgYW5kCisgKiBkYXRjdHlwZSksIHJlc3BlY3RpdmVseS4K KyAqCisgKiBTdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgaW4gVG9wTWVtb3J5Q29udGV4dCwgYW5k IHRoZSBsaWJjIGxvY2FsZV90IG9yCisgKiBVQ29sbGF0b3IgaXMgbm90IGFsbG9jYXRlZCBpbiBh bnkgbWVtb3J5IGNvbnRleHQsIHNvIHRoZSByZXN1bHQgaXMKKyAqIGVmZmVjdGl2ZWx5IHBlcm1h bmVudC4KKyAqLworc3RhdGljIHBnX2xvY2FsZV90CitwZ19uZXdsb2NhbGUoY2hhciBwcm92aWRl ciwgYm9vbCBkZXRlcm1pbmlzdGljLCBjb25zdCBjaGFyICpjb2xsYXRlLAorCQkJIGNvbnN0IGNo YXIgKmN0eXBlLCBjb25zdCBjaGFyICp2ZXJzaW9uKQoreworCXBnX2xvY2FsZV90IHJlc3VsdCA9 IE1lbW9yeUNvbnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQlzaXplb2Yo c3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QpKTsKKworCS8qCisJICogSWYgQ09MTFBST1ZJREVSX0RF RkFVTFQsIGNhbGxlciBzaG91bGQgdXNlIGRlZmF1bHRfbG9jYWxlIG9yIE5VTEwKKwkgKiBpbnN0 ZWFkLgorCSAqLworCUFzc2VydChwcm92aWRlciAhPSBDT0xMUFJPVklERVJfREVGQVVMVCk7CisK KwlyZXN1bHQtPnByb3ZpZGVyID0gcHJvdmlkZXI7CisJcmVzdWx0LT5kZXRlcm1pbmlzdGljID0g ZGV0ZXJtaW5pc3RpYzsKKwlyZXN1bHQtPmNvbGxhdGUgPSBNZW1vcnlDb250ZXh0U3RyZHVwKFRv cE1lbW9yeUNvbnRleHQsIGNvbGxhdGUpOworCXJlc3VsdC0+Y3R5cGUgPSBNZW1vcnlDb250ZXh0 U3RyZHVwKFRvcE1lbW9yeUNvbnRleHQsIGN0eXBlKTsKKworCWlmIChwcm92aWRlciA9PSBDT0xM UFJPVklERVJfTElCQykKKwl7CisjaWZkZWYgSEFWRV9MT0NBTEVfVAorCQlsb2NhbGVfdCAgICAg ICAgbG9jOworCisJCS8qIG5ld2xvY2FsZSdzIHJlc3VsdCBtYXkgYmUgbGVha2VkIGlmIHdlIGVu Y291bnRlciBhbiBlcnJvciAqLworCisJCWlmIChzdHJjbXAoY29sbGF0ZSwgY3R5cGUpID09IDAp CisJCXsKKwkJCS8qIE5vcm1hbCBjYXNlIHdoZXJlIHRoZXkncmUgdGhlIHNhbWUgKi8KKwkJCWVy cm5vID0gMDsKKyNpZm5kZWYgV0lOMzIKKwkJCWxvYyA9IG5ld2xvY2FsZShMQ19DT0xMQVRFX01B U0sgfCBMQ19DVFlQRV9NQVNLLCBjb2xsYXRlLAorCQkJCQkJCU5VTEwpOworI2Vsc2UKKwkJCWxv YyA9IF9jcmVhdGVfbG9jYWxlKExDX0FMTCwgY29sbGF0ZSk7CisjZW5kaWYKKwkJCWlmICghbG9j KQorCQkJCXJlcG9ydF9uZXdsb2NhbGVfZmFpbHVyZShjb2xsYXRlKTsKKwkJfQorCQllbHNlCisJ CXsKKyNpZm5kZWYgV0lOMzIKKwkJCS8qIFdlIG5lZWQgdHdvIG5ld2xvY2FsZSgpIHN0ZXBzICov CisJCQlsb2NhbGVfdAlsb2MxOworCisJCQllcnJubyA9IDA7CisJCQlsb2MxID0gbmV3bG9jYWxl KExDX0NPTExBVEVfTUFTSywgY29sbGF0ZSwgTlVMTCk7CisJCQlpZiAoIWxvYzEpCisJCQkJcmVw b3J0X25ld2xvY2FsZV9mYWlsdXJlKGNvbGxhdGUpOworCQkJZXJybm8gPSAwOworCQkJbG9jID0g bmV3bG9jYWxlKExDX0NUWVBFX01BU0ssIGN0eXBlLCBsb2MxKTsKKwkJCWlmICghbG9jKQorCQkJ CXJlcG9ydF9uZXdsb2NhbGVfZmFpbHVyZShjdHlwZSk7CisjZWxzZQorCisJCQkvKgorCQkJICog WFhYIFRoZSBfY3JlYXRlX2xvY2FsZSgpIEFQSSBkb2Vzbid0IGFwcGVhciB0byBzdXBwb3J0CisJ CQkgKiB0aGlzLiBDb3VsZCBwZXJoYXBzIGJlIHdvcmtlZCBhcm91bmQgYnkgY2hhbmdpbmcKKwkJ CSAqIHBnX2xvY2FsZV90IHRvIGNvbnRhaW4gdHdvIHNlcGFyYXRlIGZpZWxkcy4KKwkJCSAqLwor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQ T1JURUQpLAorCQkJCQkgZXJybXNnKCJjb2xsYXRpb25zIHdpdGggZGlmZmVyZW50IGNvbGxhdGUg YW5kIGN0eXBlIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIikpKTsK KyNlbmRpZgorCQl9CisKKwkJcmVzdWx0LT5pbmZvLmxpYmMubHQgPSBsb2M7CisjZWxzZQkJCQkJ CQkvKiBub3QgSEFWRV9MT0NBTEVfVCAqLworCQkvKiBwbGF0Zm9ybSB0aGF0IGRvZXNuJ3Qgc3Vw cG9ydCBsb2NhbGVfdCAqLworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJjb2xsYXRpb24gcHJvdmlkZXIg TElCQyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKSkpOworI2VuZGlmCQkJCQkJ CS8qIG5vdCBIQVZFX0xPQ0FMRV9UICovCisJfQorI2lmZGVmIFVTRV9JQ1UKKwllbHNlIGlmIChw cm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQorCXsKKwkJVUNvbGxhdG9yICAqY29sbGF0b3I7 CisJCVVFcnJvckNvZGUJc3RhdHVzOworCisJCS8qIGNvbGxhdG9yIG1heSBiZSBsZWFrZWQgaWYg d2UgZW5jb3VudGVyIGFuIGVycm9yICovCisKKwkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOworCQlj b2xsYXRvciA9IHVjb2xfb3Blbihjb2xsYXRlLCAmc3RhdHVzKTsKKwkJaWYgKFVfRkFJTFVSRShz dGF0dXMpKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycm1zZygiY291bGQgbm90IG9wZW4g Y29sbGF0b3IgZm9yIGxvY2FsZSBcIiVzXCI6ICVzIiwKKwkJCQkJCQljb2xsYXRlLCB1X2Vycm9y TmFtZShzdGF0dXMpKSkpOworCisJCWlmIChVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA8IDU0KQor CQkJaWN1X3NldF9jb2xsYXRpb25fYXR0cmlidXRlcyhjb2xsYXRvciwgY29sbGF0ZSk7CisKKwkJ cmVzdWx0LT5pbmZvLmljdS51Y29sID0gY29sbGF0b3I7CisJfQorI2VuZGlmCisJZWxzZQorCQkv KiBzaG91bGRuJ3QgaGFwcGVuICovCisJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBjb2xscHJv dmlkZXI6ICVjIiwgcHJvdmlkZXIpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEFj Y2Vzc29yIHNvIHRoYXQgY2FsbGVycyBkb24ndCBuZWVkIHRvIGluY2x1ZGUgcGdfbG9jYWxlX2lu dGVybmFsLmguCisgKi8KK2Jvb2wKK3BnX2xvY2FsZV9kZXRlcm1pbmlzdGljKHBnX2xvY2FsZV90 IGxvY2FsZSkKK3sKKwlpZiAobG9jYWxlID09IE5VTEwpCisJCXJldHVybiB0cnVlOworCWVsc2UK KwkJcmV0dXJuIGxvY2FsZS0+ZGV0ZXJtaW5pc3RpYzsKK30KKworLyoKKyAqIEluaXRpYWxpemUg ZGVmYXVsdCBkYXRhYmFzZSBsb2NhbGUuCisgKi8KK3ZvaWQKK2luaXRfZGVmYXVsdF9sb2NhbGUo Y2hhciBwcm92aWRlciwgY29uc3QgY2hhciAqY29sbGF0ZSwgY29uc3QgY2hhciAqY3R5cGUsCisJ CQkJCWNvbnN0IGNoYXIgKmljdWxvY2FsZSwgY29uc3QgY2hhciAqdmVyc2lvbikKK3sKKwkvKgor CSAqIEZvciB0aGUgcHVycG9zZXMgb2YgcGdfbG9jYWxlX3QsIGlmIHRoZSBwcm92aWRlciBpcyBJ Q1UsIHdlIHVzZQorCSAqIGljdWxvY2FsZSBmb3IgYm90aCBjb2xsYXRlIGFuZCBjdHlwZS4KKwkg Ki8KKwlpZiAocHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwl7CisJCWNvbGxhdGUgPSBp Y3Vsb2NhbGU7CisJCWN0eXBlID0gaWN1bG9jYWxlOworCX0KKwllbHNlCisJCUFzc2VydChpY3Vs b2NhbGUgPT0gTlVMTCk7CisKKwkvKgorCSAqIERlZmF1bHQgbG9jYWxlIGlzIGN1cnJlbnRseSBh bHdheXMgZGV0ZXJtaW5pc3RpYy4gIE5vbmRldGVybWluaXN0aWMKKwkgKiBsb2NhbGVzIGN1cnJl bnRseSBkb24ndCBzdXBwb3J0IHBhdHRlcm4gbWF0Y2hpbmcsIHdoaWNoIHdvdWxkIGJyZWFrIGEK KwkgKiBsb3Qgb2YgdGhpbmdzIGlmIGFwcGxpZWQgZ2xvYmFsbHkuCisJICovCisJZGVmYXVsdF9s b2NhbGUgPSBwZ19uZXdsb2NhbGUocHJvdmlkZXIsIHRydWUsIGNvbGxhdGUsIGN0eXBlLCB2ZXJz aW9uKTsKK30KKwogLyoKICAqIENyZWF0ZSBhIGxvY2FsZV90IGZyb20gYSBjb2xsYXRpb24gT0lE LiAgUmVzdWx0cyBhcmUgY2FjaGVkIGZvciB0aGUKICAqIGxpZmV0aW1lIG9mIHRoZSBiYWNrZW5k LiAgVGh1cywgZG8gbm90IGZyZWUgdGhlIHJlc3VsdCB3aXRoIGZyZWVsb2NhbGUoKS4KQEAgLTE1 MDksOCArMTY0MCw4IEBAIHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihPaWQgY29sbGlkKQog CiAJaWYgKGNvbGxpZCA9PSBERUZBVUxUX0NPTExBVElPTl9PSUQpCiAJewotCQlpZiAoZGVmYXVs dF9sb2NhbGUucHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKLQkJCXJldHVybiAmZGVmYXVs dF9sb2NhbGU7CisJCWlmIChkZWZhdWx0X2xvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVS X0lDVSkKKwkJCXJldHVybiBkZWZhdWx0X2xvY2FsZTsKIAkJZWxzZQogCQkJcmV0dXJuIChwZ19s b2NhbGVfdCkgMDsKIAl9CkBAIC0xNTIyLDEwNyArMTY1Myw2NCBAQCBwZ19uZXdsb2NhbGVfZnJv bV9jb2xsYXRpb24oT2lkIGNvbGxpZCkKIAkJLyogV2UgaGF2ZW4ndCBjb21wdXRlZCB0aGlzIHll dCBpbiB0aGlzIHNlc3Npb24sIHNvIGRvIGl0ICovCiAJCUhlYXBUdXBsZQl0cDsKIAkJRm9ybV9w Z19jb2xsYXRpb24gY29sbGZvcm07Ci0JCXN0cnVjdCBwZ19sb2NhbGVfc3RydWN0IHJlc3VsdDsK LQkJcGdfbG9jYWxlX3QgcmVzdWx0cDsKKwkJcGdfbG9jYWxlX3QgbG9jYWxlOwogCQlEYXR1bQkJ ZGF0dW07CiAJCWJvb2wJCWlzbnVsbDsKKwkJY2hhcgkgICAqY29sbGF0ZTsKKwkJY2hhcgkgICAq Y3R5cGU7CisJCWNoYXIJICAgKmNvbGx2ZXJzaW9uc3RyOwogCiAJCXRwID0gU2VhcmNoU3lzQ2Fj aGUxKENPTExPSUQsIE9iamVjdElkR2V0RGF0dW0oY29sbGlkKSk7CiAJCWlmICghSGVhcFR1cGxl SXNWYWxpZCh0cCkpCiAJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29s bGF0aW9uICV1IiwgY29sbGlkKTsKIAkJY29sbGZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24pIEdF VFNUUlVDVCh0cCk7CiAKLQkJLyogV2UnbGwgZmlsbCBpbiB0aGUgcmVzdWx0IHN0cnVjdCBsb2Nh bGx5IGJlZm9yZSBhbGxvY2F0aW5nIG1lbW9yeSAqLwotCQltZW1zZXQoJnJlc3VsdCwgMCwgc2l6 ZW9mKHJlc3VsdCkpOwotCQlyZXN1bHQucHJvdmlkZXIgPSBjb2xsZm9ybS0+Y29sbHByb3ZpZGVy OwotCQlyZXN1bHQuZGV0ZXJtaW5pc3RpYyA9IGNvbGxmb3JtLT5jb2xsaXNkZXRlcm1pbmlzdGlj OworCQlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCB0cCwgQW51bV9wZ19jb2xsYXRp b25fY29sbHZlcnNpb24sCisJCQkJCQkJCSZpc251bGwpOworCQlpZiAoIWlzbnVsbCkKKwkJCWNv bGx2ZXJzaW9uc3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSk7CisJCWVsc2UKKwkJCWNv bGx2ZXJzaW9uc3RyID0gTlVMTDsKIAogCQlpZiAoY29sbGZvcm0tPmNvbGxwcm92aWRlciA9PSBD T0xMUFJPVklERVJfTElCQykKIAkJewotI2lmZGVmIEhBVkVfTE9DQUxFX1QKLQkJCWNvbnN0IGNo YXIgKmNvbGxjb2xsYXRlOwotCQkJY29uc3QgY2hhciAqY29sbGN0eXBlIHBnX2F0dHJpYnV0ZV91 bnVzZWQoKTsKLQkJCWxvY2FsZV90CWxvYzsKLQotCQkJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIo Q09MTE9JRCwgdHAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGxjb2xsYXRlLCAmaXNudWxsKTsKKwkJ CWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIHRwLCBBbnVtX3BnX2NvbGxhdGlvbl9j b2xsY29sbGF0ZSwKKwkJCQkJCQkJCSZpc251bGwpOwogCQkJQXNzZXJ0KCFpc251bGwpOwotCQkJ Y29sbGNvbGxhdGUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKLQkJCWRhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKENPTExPSUQsIHRwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsY3R5cGUsICZp c251bGwpOworCQkJY29sbGF0ZSA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOworCQkJZGF0 dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgdHAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGxj dHlwZSwKKwkJCQkJCQkJCSZpc251bGwpOwogCQkJQXNzZXJ0KCFpc251bGwpOwotCQkJY29sbGN0 eXBlID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSk7Ci0KLQkJCWlmIChzdHJjbXAoY29sbGNv bGxhdGUsIGNvbGxjdHlwZSkgPT0gMCkKLQkJCXsKLQkJCQkvKiBOb3JtYWwgY2FzZSB3aGVyZSB0 aGV5J3JlIHRoZSBzYW1lICovCi0JCQkJZXJybm8gPSAwOwotI2lmbmRlZiBXSU4zMgotCQkJCWxv YyA9IG5ld2xvY2FsZShMQ19DT0xMQVRFX01BU0sgfCBMQ19DVFlQRV9NQVNLLCBjb2xsY29sbGF0 ZSwKLQkJCQkJCQkJTlVMTCk7Ci0jZWxzZQotCQkJCWxvYyA9IF9jcmVhdGVfbG9jYWxlKExDX0FM TCwgY29sbGNvbGxhdGUpOwotI2VuZGlmCi0JCQkJaWYgKCFsb2MpCi0JCQkJCXJlcG9ydF9uZXds b2NhbGVfZmFpbHVyZShjb2xsY29sbGF0ZSk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0jaWZuZGVm IFdJTjMyCi0JCQkJLyogV2UgbmVlZCB0d28gbmV3bG9jYWxlKCkgc3RlcHMgKi8KLQkJCQlsb2Nh bGVfdAlsb2MxOwotCi0JCQkJZXJybm8gPSAwOwotCQkJCWxvYzEgPSBuZXdsb2NhbGUoTENfQ09M TEFURV9NQVNLLCBjb2xsY29sbGF0ZSwgTlVMTCk7Ci0JCQkJaWYgKCFsb2MxKQotCQkJCQlyZXBv cnRfbmV3bG9jYWxlX2ZhaWx1cmUoY29sbGNvbGxhdGUpOwotCQkJCWVycm5vID0gMDsKLQkJCQls b2MgPSBuZXdsb2NhbGUoTENfQ1RZUEVfTUFTSywgY29sbGN0eXBlLCBsb2MxKTsKLQkJCQlpZiAo IWxvYykKLQkJCQkJcmVwb3J0X25ld2xvY2FsZV9mYWlsdXJlKGNvbGxjdHlwZSk7Ci0jZWxzZQot Ci0JCQkJLyoKLQkJCQkgKiBYWFggVGhlIF9jcmVhdGVfbG9jYWxlKCkgQVBJIGRvZXNuJ3QgYXBw ZWFyIHRvIHN1cHBvcnQKLQkJCQkgKiB0aGlzLiBDb3VsZCBwZXJoYXBzIGJlIHdvcmtlZCBhcm91 bmQgYnkgY2hhbmdpbmcKLQkJCQkgKiBwZ19sb2NhbGVfdCB0byBjb250YWluIHR3byBzZXBhcmF0 ZSBmaWVsZHMuCi0JCQkJICovCi0JCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCShlcnJjb2RlKEVS UkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJCSBlcnJtc2coImNvbGxhdGlvbnMg d2l0aCBkaWZmZXJlbnQgY29sbGF0ZSBhbmQgY3R5cGUgdmFsdWVzIGFyZSBub3Qgc3VwcG9ydGVk IG9uIHRoaXMgcGxhdGZvcm0iKSkpOwotI2VuZGlmCi0JCQl9Ci0KLQkJCXJlc3VsdC5pbmZvLmx0 ID0gbG9jOwotI2Vsc2UJCQkJCQkJLyogbm90IEhBVkVfTE9DQUxFX1QgKi8KLQkJCS8qIHBsYXRm b3JtIHRoYXQgZG9lc24ndCBzdXBwb3J0IGxvY2FsZV90ICovCi0JCQllcmVwb3J0KEVSUk9SLAot CQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCSBlcnJt c2coImNvbGxhdGlvbiBwcm92aWRlciBMSUJDIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0 Zm9ybSIpKSk7Ci0jZW5kaWYJCQkJCQkJLyogbm90IEhBVkVfTE9DQUxFX1QgKi8KKwkJCWN0eXBl ID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSk7CiAJCX0KKyNpZmRlZiBVU0VfSUNVCiAJCWVs c2UgaWYgKGNvbGxmb3JtLT5jb2xscHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKIAkJewot CQkJY29uc3QgY2hhciAqaWN1bG9jc3RyOwotCi0JCQlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihD T0xMT0lELCB0cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGljdWxvY2FsZSwgJmlzbnVsbCk7CisJ CQlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCB0cCwgQW51bV9wZ19jb2xsYXRpb25f Y29sbGljdWxvY2FsZSwKKwkJCQkJCQkJCSZpc251bGwpOwogCQkJQXNzZXJ0KCFpc251bGwpOwot CQkJaWN1bG9jc3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSk7Ci0JCQltYWtlX2ljdV9j b2xsYXRvcihpY3Vsb2NzdHIsICZyZXN1bHQpOworCQkJY29sbGF0ZSA9IFRleHREYXR1bUdldENT dHJpbmcoZGF0dW0pOworCisJCQkvKiBmb3IgSUNVLCBjb2xsYXRlIGFuZCBjdHlwZSBhcmUgYm90 aCBzZXQgZnJvbSBpY3Vsb2NhbGUgKi8KKwkJCWN0eXBlID0gY29sbGF0ZTsKIAkJfQorI2VuZGlm CisJCWVsc2UKKwkJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKwkJCWVsb2coRVJST1IsICJ1bnN1 cHBvcnRlZCBjb2xscHJvdmlkZXI6ICVjIiwgY29sbGZvcm0tPmNvbGxwcm92aWRlcik7CiAKLQkJ ZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgdHAsIEFudW1fcGdfY29sbGF0aW9uX2Nv bGx2ZXJzaW9uLAotCQkJCQkJCQkmaXNudWxsKTsKLQkJaWYgKCFpc251bGwpCisJCWxvY2FsZSA9 IHBnX25ld2xvY2FsZShjb2xsZm9ybS0+Y29sbHByb3ZpZGVyLAorCQkJCQkJCSAgY29sbGZvcm0t PmNvbGxpc2RldGVybWluaXN0aWMsCisJCQkJCQkJICBjb2xsYXRlLCBjdHlwZSwgY29sbHZlcnNp b25zdHIpOworCisJCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisKKwkJaWYgKGNvbGx2ZXJzaW9uc3Ry ICE9IE5VTEwpCiAJCXsKIAkJCWNoYXIJICAgKmFjdHVhbF92ZXJzaW9uc3RyOwotCQkJY2hhcgkg ICAqY29sbHZlcnNpb25zdHI7CiAKLQkJCWNvbGx2ZXJzaW9uc3RyID0gVGV4dERhdHVtR2V0Q1N0 cmluZyhkYXR1bSk7Ci0KLQkJCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIHRwLCBj b2xsZm9ybS0+Y29sbHByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UgPyBBbnVtX3BnX2NvbGxh dGlvbl9jb2xsaWN1bG9jYWxlIDogQW51bV9wZ19jb2xsYXRpb25fY29sbGNvbGxhdGUsICZpc251 bGwpOwotCQkJQXNzZXJ0KCFpc251bGwpOworCQkJYWN0dWFsX3ZlcnNpb25zdHIgPSBnZXRfY29s bGF0aW9uX2FjdHVhbF92ZXJzaW9uKGNvbGxmb3JtLT5jb2xscHJvdmlkZXIsIGNvbGxhdGUpOwog Ci0JCQlhY3R1YWxfdmVyc2lvbnN0ciA9IGdldF9jb2xsYXRpb25fYWN0dWFsX3ZlcnNpb24oY29s bGZvcm0tPmNvbGxwcm92aWRlciwKLQkJCQkJCQkJCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5n KGRhdHVtKSk7CiAJCQlpZiAoIWFjdHVhbF92ZXJzaW9uc3RyKQogCQkJewogCQkJCS8qCkBAIC0x NjQ5LDEzICsxNzM3LDcgQEAgcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKE9pZCBjb2xsaWQp CiAJCQkJCQkJCQkJCQkJCQlOYW1lU3RyKGNvbGxmb3JtLT5jb2xsbmFtZSkpKSkpOwogCQl9CiAK LQkJUmVsZWFzZVN5c0NhY2hlKHRwKTsKLQotCQkvKiBXZSdsbCBrZWVwIHRoZSBwZ19sb2NhbGVf dCBzdHJ1Y3R1cmVzIGluIFRvcE1lbW9yeUNvbnRleHQgKi8KLQkJcmVzdWx0cCA9IE1lbW9yeUNv bnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LCBzaXplb2YoKnJlc3VsdHApKTsKLQkJKnJlc3Vs dHAgPSByZXN1bHQ7Ci0KLQkJY2FjaGVfZW50cnktPmxvY2FsZSA9IHJlc3VsdHA7CisJCWNhY2hl X2VudHJ5LT5sb2NhbGUgPSBsb2NhbGU7CiAJfQogCiAJcmV0dXJuIGNhY2hlX2VudHJ5LT5sb2Nh bGU7CkBAIC0xODE1LDcgKzE4OTcsNyBAQCBwZ19zdHJuY29sbF9saWJjX3dpbjMyX3V0ZjgoY29u c3QgY2hhciAqYXJnMSwgc2l6ZV90IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIsCiAJZXJybm8gPSAw OwogI2lmZGVmIEhBVkVfTE9DQUxFX1QKIAlpZiAobG9jYWxlKQotCQlyZXN1bHQgPSB3Y3Njb2xs X2woKExQV1NUUikgYTFwLCAoTFBXU1RSKSBhMnAsIGxvY2FsZS0+aW5mby5sdCk7CisJCXJlc3Vs dCA9IHdjc2NvbGxfbCgoTFBXU1RSKSBhMXAsIChMUFdTVFIpIGEycCwgbG9jYWxlLT5pbmZvLmxp YmMubHQpOwogCWVsc2UKICNlbmRpZgogCQlyZXN1bHQgPSB3Y3Njb2xsKChMUFdTVFIpIGExcCwg KExQV1NUUikgYTJwKTsKQEAgLTE4NTgsNyArMTk0MCw3IEBAIHBnX3N0cmNvbGxfbGliYyhjb25z dCBjaGFyICphcmcxLCBjb25zdCBjaGFyICphcmcyLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiAJaWYg KGxvY2FsZSkKIAl7CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAotCQlyZXN1bHQgPSBzdHJjb2xsX2wo YXJnMSwgYXJnMiwgbG9jYWxlLT5pbmZvLmx0KTsKKwkJcmVzdWx0ID0gc3RyY29sbF9sKGFyZzEs IGFyZzIsIGxvY2FsZS0+aW5mby5saWJjLmx0KTsKICNlbHNlCiAJCS8qIHNob3VsZG4ndCBoYXBw ZW4gKi8KIAkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBsb2Nh bGUtPnByb3ZpZGVyKTsKQEAgLTIxMTEsNyArMjE5Myw3IEBAIHBnX3N0cnhmcm1fbGliYyhjaGFy ICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBkZXN0c2l6ZSwKICNpZmRlZiBUUlVTVF9T VFhGUk0KICNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJaWYgKGxvY2FsZSkKLQkJcmV0dXJuIHN0cnhm cm1fbChkZXN0LCBzcmMsIGRlc3RzaXplLCBsb2NhbGUtPmluZm8ubHQpOworCQlyZXR1cm4gc3Ry eGZybV9sKGRlc3QsIHNyYywgZGVzdHNpemUsIGxvY2FsZS0+aW5mby5saWJjLmx0KTsKIAllbHNl CiAjZW5kaWYKIAkJcmV0dXJuIHN0cnhmcm0oZGVzdCwgc3JjLCBkZXN0c2l6ZSk7CkBAIC0yNzE3 LDggKzI3OTksOCBAQCB2b2lkCiBjaGVja19pY3VfbG9jYWxlKGNvbnN0IGNoYXIgKmljdV9sb2Nh bGUpCiB7CiAjaWZkZWYgVVNFX0lDVQotCVVDb2xsYXRvciAgKmNvbGxhdG9yOwotCVVFcnJvckNv ZGUJc3RhdHVzOworCVVDb2xsYXRvcgkqY29sbGF0b3I7CisJVUVycm9yQ29kZSAgIHN0YXR1czsK IAogCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKIAljb2xsYXRvciA9IHVjb2xfb3BlbihpY3VfbG9j YWxlLCAmc3RhdHVzKTsKQEAgLTI3OTIsMTAgKzI4NzQsMTAgQEAgd2NoYXIyY2hhcihjaGFyICp0 bywgY29uc3Qgd2NoYXJfdCAqZnJvbSwgc2l6ZV90IHRvbGVuLCBwZ19sb2NhbGVfdCBsb2NhbGUp CiAjaWZkZWYgSEFWRV9MT0NBTEVfVAogI2lmZGVmIEhBVkVfV0NTVE9NQlNfTAogCQkvKiBVc2Ug d2NzdG9tYnNfbCBmb3Igbm9uZGVmYXVsdCBsb2NhbGVzICovCi0JCXJlc3VsdCA9IHdjc3RvbWJz X2wodG8sIGZyb20sIHRvbGVuLCBsb2NhbGUtPmluZm8ubHQpOworCQlyZXN1bHQgPSB3Y3N0b21i c19sKHRvLCBmcm9tLCB0b2xlbiwgbG9jYWxlLT5pbmZvLmxpYmMubHQpOwogI2Vsc2UJCQkJCQkJ LyogIUhBVkVfV0NTVE9NQlNfTCAqLwogCQkvKiBXZSBoYXZlIHRvIHRlbXBvcmFyaWx5IHNldCB0 aGUgbG9jYWxlIGFzIGN1cnJlbnQgLi4uIHVnaCAqLwotCQlsb2NhbGVfdAlzYXZlX2xvY2FsZSA9 IHVzZWxvY2FsZShsb2NhbGUtPmluZm8ubHQpOworCQlsb2NhbGVfdAlzYXZlX2xvY2FsZSA9IHVz ZWxvY2FsZShsb2NhbGUtPmluZm8ubGliYy5sdCk7CiAKIAkJcmVzdWx0ID0gd2NzdG9tYnModG8s IGZyb20sIHRvbGVuKTsKIApAQCAtMjg2OSwxMCArMjk1MSwxMCBAQCBjaGFyMndjaGFyKHdjaGFy X3QgKnRvLCBzaXplX3QgdG9sZW4sIGNvbnN0IGNoYXIgKmZyb20sIHNpemVfdCBmcm9tbGVuLAog I2lmZGVmIEhBVkVfTE9DQUxFX1QKICNpZmRlZiBIQVZFX01CU1RPV0NTX0wKIAkJCS8qIFVzZSBt YnN0b3djc19sIGZvciBub25kZWZhdWx0IGxvY2FsZXMgKi8KLQkJCXJlc3VsdCA9IG1ic3Rvd2Nz X2wodG8sIHN0ciwgdG9sZW4sIGxvY2FsZS0+aW5mby5sdCk7CisJCQlyZXN1bHQgPSBtYnN0b3dj c19sKHRvLCBzdHIsIHRvbGVuLCBsb2NhbGUtPmluZm8ubGliYy5sdCk7CiAjZWxzZQkJCQkJCQkv KiAhSEFWRV9NQlNUT1dDU19MICovCiAJCQkvKiBXZSBoYXZlIHRvIHRlbXBvcmFyaWx5IHNldCB0 aGUgbG9jYWxlIGFzIGN1cnJlbnQgLi4uIHVnaCAqLwotCQkJbG9jYWxlX3QJc2F2ZV9sb2NhbGUg PSB1c2Vsb2NhbGUobG9jYWxlLT5pbmZvLmx0KTsKKwkJCWxvY2FsZV90CXNhdmVfbG9jYWxlID0g dXNlbG9jYWxlKGxvY2FsZS0+aW5mby5saWJjLmx0KTsKIAogCQkJcmVzdWx0ID0gbWJzdG93Y3Mo dG8sIHN0ciwgdG9sZW4pOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFy Y2hhci5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmNoYXIuYwppbmRleCAxOTYzZDRkYzRl Li45NzgyZDAyMTEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFyY2hhci5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJjaGFyLmMKQEAgLTc2Miw3ICs3NjIsNyBA QCBicGNoYXJlcShQR19GVU5DVElPTl9BUkdTKQogCWVsc2UKIAkJbXlsb2NhbGUgPSBwZ19uZXds b2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsKIAotCWlmIChsb2NhbGVfaXNfYyB8fCAhbXls b2NhbGUgfHwgbXlsb2NhbGUtPmRldGVybWluaXN0aWMpCisJaWYgKGxvY2FsZV9pc19jIHx8IHBn X2xvY2FsZV9kZXRlcm1pbmlzdGljKG15bG9jYWxlKSkKIAl7CiAJCS8qCiAJCSAqIFNpbmNlIHdl IG9ubHkgY2FyZSBhYm91dCBlcXVhbGl0eSBvciBub3QtZXF1YWxpdHksIHdlIGNhbiBhdm9pZCBh bGwKQEAgLTgwNyw3ICs4MDcsNyBAQCBicGNoYXJuZShQR19GVU5DVElPTl9BUkdTKQogCWVsc2UK IAkJbXlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsKIAotCWlm IChsb2NhbGVfaXNfYyB8fCAhbXlsb2NhbGUgfHwgbXlsb2NhbGUtPmRldGVybWluaXN0aWMpCisJ aWYgKGxvY2FsZV9pc19jIHx8IHBnX2xvY2FsZV9kZXRlcm1pbmlzdGljKG15bG9jYWxlKSkKIAl7 CiAJCS8qCiAJCSAqIFNpbmNlIHdlIG9ubHkgY2FyZSBhYm91dCBlcXVhbGl0eSBvciBub3QtZXF1 YWxpdHksIHdlIGNhbiBhdm9pZCBhbGwKQEAgLTEwMTUsMzMgKzEwMTUsMjUgQEAgaGFzaGJwY2hh cihQR19GVU5DVElPTl9BUkdTKQogCWlmICghbGNfY29sbGF0ZV9pc19jKGNvbGxpZCkpCiAJCW15 bG9jYWxlID0gcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKGNvbGxpZCk7CiAKLQlpZiAoIW15 bG9jYWxlIHx8IG15bG9jYWxlLT5kZXRlcm1pbmlzdGljKQorCWlmIChwZ19sb2NhbGVfZGV0ZXJt aW5pc3RpYyhteWxvY2FsZSkpCiAJewogCQlyZXN1bHQgPSBoYXNoX2FueSgodW5zaWduZWQgY2hh ciAqKSBrZXlkYXRhLCBrZXlsZW4pOwogCX0KIAllbHNlCiAJewotI2lmZGVmIFVTRV9JQ1UKLQkJ aWYgKG15bG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQotCQl7Ci0JCQlTaXpl CQlic2l6ZSwgcnNpemU7Ci0JCQljaGFyCSAgICpidWY7CisJCVNpemUJCWJzaXplLCByc2l6ZTsK KwkJY2hhcgkgICAqYnVmOwogCi0JCQlic2l6ZSA9IHBnX3N0cm54ZnJtKE5VTEwsIDAsIGtleWRh dGEsIGtleWxlbiwgbXlsb2NhbGUpOwotCQkJYnVmID0gcGFsbG9jKGJzaXplKTsKKwkJYnNpemUg PSBwZ19zdHJueGZybShOVUxMLCAwLCBrZXlkYXRhLCBrZXlsZW4sIG15bG9jYWxlKTsKKwkJYnVm ID0gcGFsbG9jKGJzaXplKTsKIAotCQkJcnNpemUgPSBwZ19zdHJueGZybShidWYsIGJzaXplLCBr ZXlkYXRhLCBrZXlsZW4sIG15bG9jYWxlKTsKLQkJCWlmIChyc2l6ZSAhPSBic2l6ZSkKLQkJCQll bG9nKEVSUk9SLCAicGdfc3Rybnhmcm0oKSByZXR1cm5lZCB1bmV4cGVjdGVkIHJlc3VsdCIpOwor CQlyc2l6ZSA9IHBnX3N0cm54ZnJtKGJ1ZiwgYnNpemUsIGtleWRhdGEsIGtleWxlbiwgbXlsb2Nh bGUpOworCQlpZiAocnNpemUgIT0gYnNpemUpCisJCQllbG9nKEVSUk9SLCAicGdfc3Rybnhmcm0o KSByZXR1cm5lZCB1bmV4cGVjdGVkIHJlc3VsdCIpOwogCi0JCQlyZXN1bHQgPSBoYXNoX2FueSgo dWludDhfdCAqKSBidWYsIGJzaXplKTsKKwkJcmVzdWx0ID0gaGFzaF9hbnkoKHVpbnQ4X3QgKikg YnVmLCBic2l6ZSk7CiAKLQkJCXBmcmVlKGJ1Zik7Ci0JCX0KLQkJZWxzZQotI2VuZGlmCi0JCQkv KiBzaG91bGRuJ3QgaGFwcGVuICovCi0JCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgY29sbHBy b3ZpZGVyOiAlYyIsIG15bG9jYWxlLT5wcm92aWRlcik7CisJCXBmcmVlKGJ1Zik7CiAJfQogCiAJ LyogQXZvaWQgbGVha2luZyBtZW1vcnkgZm9yIHRvYXN0ZWQgaW5wdXRzICovCkBAIC0xMDcyLDM1 ICsxMDY0LDI3IEBAIGhhc2hicGNoYXJleHRlbmRlZChQR19GVU5DVElPTl9BUkdTKQogCWlmICgh bGNfY29sbGF0ZV9pc19jKGNvbGxpZCkpCiAJCW15bG9jYWxlID0gcGdfbmV3bG9jYWxlX2Zyb21f Y29sbGF0aW9uKGNvbGxpZCk7CiAKLQlpZiAoIW15bG9jYWxlIHx8IG15bG9jYWxlLT5kZXRlcm1p bmlzdGljKQorCWlmIChwZ19sb2NhbGVfZGV0ZXJtaW5pc3RpYyhteWxvY2FsZSkpCiAJewogCQly ZXN1bHQgPSBoYXNoX2FueV9leHRlbmRlZCgodW5zaWduZWQgY2hhciAqKSBrZXlkYXRhLCBrZXls ZW4sCiAJCQkJCQkJCSAgIFBHX0dFVEFSR19JTlQ2NCgxKSk7CiAJfQogCWVsc2UKIAl7Ci0jaWZk ZWYgVVNFX0lDVQotCQlpZiAobXlsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1Up Ci0JCXsKLQkJCVNpemUJCWJzaXplLCByc2l6ZTsKLQkJCWNoYXIJICAgKmJ1ZjsKKwkJU2l6ZQkJ YnNpemUsIHJzaXplOworCQljaGFyCSAgICpidWY7CiAKLQkJCWJzaXplID0gcGdfc3Rybnhmcm0o TlVMTCwgMCwga2V5ZGF0YSwga2V5bGVuLCBteWxvY2FsZSk7Ci0JCQlidWYgPSBwYWxsb2MoYnNp emUpOworCQlic2l6ZSA9IHBnX3N0cm54ZnJtKE5VTEwsIDAsIGtleWRhdGEsIGtleWxlbiwgbXls b2NhbGUpOworCQlidWYgPSBwYWxsb2MoYnNpemUpOwogCi0JCQlyc2l6ZSA9IHBnX3N0cm54ZnJt KGJ1ZiwgYnNpemUsIGtleWRhdGEsIGtleWxlbiwgbXlsb2NhbGUpOwotCQkJaWYgKHJzaXplICE9 IGJzaXplKQotCQkJCWVsb2coRVJST1IsICJwZ19zdHJueGZybSgpIHJldHVybmVkIHVuZXhwZWN0 ZWQgcmVzdWx0Iik7CisJCXJzaXplID0gcGdfc3Rybnhmcm0oYnVmLCBic2l6ZSwga2V5ZGF0YSwg a2V5bGVuLCBteWxvY2FsZSk7CisJCWlmIChyc2l6ZSAhPSBic2l6ZSkKKwkJCWVsb2coRVJST1Is ICJwZ19zdHJueGZybSgpIHJldHVybmVkIHVuZXhwZWN0ZWQgcmVzdWx0Iik7CiAKLQkJCXJlc3Vs dCA9IGhhc2hfYW55X2V4dGVuZGVkKCh1aW50OF90ICopIGJ1ZiwgYnNpemUsCi0JCQkJCQkJCQkg ICBQR19HRVRBUkdfSU5UNjQoMSkpOworCQlyZXN1bHQgPSBoYXNoX2FueV9leHRlbmRlZCgodWlu dDhfdCAqKSBidWYsIGJzaXplLAorCQkJCQkJCQkgICBQR19HRVRBUkdfSU5UNjQoMSkpOwogCi0J CQlwZnJlZShidWYpOwotCQl9Ci0JCWVsc2UKLSNlbmRpZgotCQkJLyogc2hvdWxkbid0IGhhcHBl biAqLwotCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRlcjogJWMiLCBteWxv Y2FsZS0+cHJvdmlkZXIpOworCQlwZnJlZShidWYpOwogCX0KIAogCVBHX0ZSRUVfSUZfQ09QWShr ZXksIDApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKaW5kZXggOGRhNTQ1ODQxZi4uMDQwODk5NTc5 MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCkBAIC0xMjA1LDcgKzEyMDUsNyBAQCB0ZXh0X3Bv c2l0aW9uX3NldHVwKHRleHQgKnQxLCB0ZXh0ICp0MiwgT2lkIGNvbGxpZCwgVGV4dFBvc2l0aW9u U3RhdGUgKnN0YXRlKQogCWlmICghbGNfY29sbGF0ZV9pc19jKGNvbGxpZCkpCiAJCW15bG9jYWxl ID0gcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKGNvbGxpZCk7CiAKLQlpZiAobXlsb2NhbGUg JiYgIW15bG9jYWxlLT5kZXRlcm1pbmlzdGljKQorCWlmICghcGdfbG9jYWxlX2RldGVybWluaXN0 aWMobXlsb2NhbGUpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJub25kZXRlcm1pbmlzdGljIGNvbGxh dGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHN1YnN0cmluZyBzZWFyY2hlcyIpKSk7CkBAIC0x NjAzLDcgKzE2MDMsNyBAQCB0ZXh0ZXEoUEdfRlVOQ1RJT05fQVJHUykKIAllbHNlCiAJCW15bG9j YWxlID0gcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKGNvbGxpZCk7CiAKLQlpZiAobG9jYWxl X2lzX2MgfHwgIW15bG9jYWxlIHx8IG15bG9jYWxlLT5kZXRlcm1pbmlzdGljKQorCWlmIChsb2Nh bGVfaXNfYyB8fCBwZ19sb2NhbGVfZGV0ZXJtaW5pc3RpYyhteWxvY2FsZSkpCiAJewogCQlEYXR1 bQkJYXJnMSA9IFBHX0dFVEFSR19EQVRVTSgwKTsKIAkJRGF0dW0JCWFyZzIgPSBQR19HRVRBUkdf REFUVU0oMSk7CkBAIC0xNjYyLDcgKzE2NjIsNyBAQCB0ZXh0bmUoUEdfRlVOQ1RJT05fQVJHUykK IAllbHNlCiAJCW15bG9jYWxlID0gcGdfbmV3bG9jYWxlX2Zyb21fY29sbGF0aW9uKGNvbGxpZCk7 CiAKLQlpZiAobG9jYWxlX2lzX2MgfHwgIW15bG9jYWxlIHx8IG15bG9jYWxlLT5kZXRlcm1pbmlz dGljKQorCWlmIChsb2NhbGVfaXNfYyB8fCBwZ19sb2NhbGVfZGV0ZXJtaW5pc3RpYyhteWxvY2Fs ZSkpCiAJewogCQlEYXR1bQkJYXJnMSA9IFBHX0dFVEFSR19EQVRVTSgwKTsKIAkJRGF0dW0JCWFy ZzIgPSBQR19HRVRBUkdfREFUVU0oMSk7CkBAIC0xNzc2LDcgKzE3NzYsNyBAQCB0ZXh0X3N0YXJ0 c193aXRoKFBHX0ZVTkNUSU9OX0FSR1MpCiAJaWYgKCFsY19jb2xsYXRlX2lzX2MoY29sbGlkKSkK IAkJbXlsb2NhbGUgPSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsKIAotCWlm IChteWxvY2FsZSAmJiAhbXlsb2NhbGUtPmRldGVybWluaXN0aWMpCisJaWYgKCFwZ19sb2NhbGVf ZGV0ZXJtaW5pc3RpYyhteWxvY2FsZSkpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coIm5vbmRldGVybWlu aXN0aWMgY29sbGF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3Igc3Vic3RyaW5nIHNlYXJjaGVz IikpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYwppbmRleCBhOTkwYzgzM2M1Li5lYWQ3OTIy YzRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9wb3N0aW5pdC5jCkBAIC0zMTcsNiArMzE3LDcgQEAgQ2hl Y2tNeURhdGFiYXNlKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgYW1fc3VwZXJ1c2VyLCBib29sIG92 ZXJyaWRlX2FsbG93X2Nvbm5lY3QKIAljaGFyCSAgICpjb2xsYXRlOwogCWNoYXIJICAgKmN0eXBl OwogCWNoYXIJICAgKmljdWxvY2FsZTsKKwljaGFyCSAgICpjb2xsdmVyc2lvbnN0cjsKIAogCS8q IEZldGNoIG91ciBwZ19kYXRhYmFzZSByb3cgbm9ybWFsbHksIHZpYSBzeXNjYWNoZSAqLwogCXR1 cCA9IFNlYXJjaFN5c0NhY2hlMShEQVRBQkFTRU9JRCwgT2JqZWN0SWRHZXREYXR1bShNeURhdGFi YXNlSWQpKTsKQEAgLTQyNCwzNSArNDI1LDMzIEBAIENoZWNrTXlEYXRhYmFzZShjb25zdCBjaGFy ICpuYW1lLCBib29sIGFtX3N1cGVydXNlciwgYm9vbCBvdmVycmlkZV9hbGxvd19jb25uZWN0CiAJ CWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKERBVEFCQVNFT0lELCB0dXAsIEFudW1fcGdfZGF0YWJh c2VfZGF0aWN1bG9jYWxlLCAmaXNudWxsKTsKIAkJQXNzZXJ0KCFpc251bGwpOwogCQlpY3Vsb2Nh bGUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKLQkJbWFrZV9pY3VfY29sbGF0b3IoaWN1 bG9jYWxlLCAmZGVmYXVsdF9sb2NhbGUpOwogCX0KIAllbHNlCiAJCWljdWxvY2FsZSA9IE5VTEw7 CiAKLQlkZWZhdWx0X2xvY2FsZS5wcm92aWRlciA9IGRiZm9ybS0+ZGF0bG9jcHJvdmlkZXI7CisJ ZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoREFUQUJBU0VPSUQsIHR1cCwgQW51bV9wZ19kYXRhYmFz ZV9kYXRjb2xsdmVyc2lvbiwKKwkJCQkJCQkmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwkJY29s bHZlcnNpb25zdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKKwllbHNlCisJCWNvbGx2 ZXJzaW9uc3RyID0gTlVMTDsKIAotCS8qCi0JICogRGVmYXVsdCBsb2NhbGUgaXMgY3VycmVudGx5 IGFsd2F5cyBkZXRlcm1pbmlzdGljLiAgTm9uZGV0ZXJtaW5pc3RpYwotCSAqIGxvY2FsZXMgY3Vy cmVudGx5IGRvbid0IHN1cHBvcnQgcGF0dGVybiBtYXRjaGluZywgd2hpY2ggd291bGQgYnJlYWsg YQotCSAqIGxvdCBvZiB0aGluZ3MgaWYgYXBwbGllZCBnbG9iYWxseS4KLQkgKi8KLQlkZWZhdWx0 X2xvY2FsZS5kZXRlcm1pbmlzdGljID0gdHJ1ZTsKKwlpbml0X2RlZmF1bHRfbG9jYWxlKGRiZm9y bS0+ZGF0bG9jcHJvdmlkZXIsIGNvbGxhdGUsIGN0eXBlLCBpY3Vsb2NhbGUsCisJCQkJCQljb2xs dmVyc2lvbnN0cik7CiAKIAkvKgogCSAqIENoZWNrIGNvbGxhdGlvbiB2ZXJzaW9uLiAgU2VlIHNp bWlsYXIgY29kZSBpbgogCSAqIHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbigpLiAgTm90ZSB0 aGF0IGhlcmUgd2Ugd2FybiBpbnN0ZWFkIG9mIGVycm9yCiAJICogaW4gYW55IGNhc2UsIHNvIHRo YXQgd2UgZG9uJ3QgcHJldmVudCBjb25uZWN0aW5nLgogCSAqLwotCWRhdHVtID0gU3lzQ2FjaGVH ZXRBdHRyKERBVEFCQVNFT0lELCB0dXAsIEFudW1fcGdfZGF0YWJhc2VfZGF0Y29sbHZlcnNpb24s Ci0JCQkJCQkJJmlzbnVsbCk7Ci0JaWYgKCFpc251bGwpCisJaWYgKGNvbGx2ZXJzaW9uc3RyICE9 IE5VTEwpCiAJewogCQljaGFyCSAgICphY3R1YWxfdmVyc2lvbnN0cjsKLQkJY2hhcgkgICAqY29s bHZlcnNpb25zdHI7CiAKLQkJY29sbHZlcnNpb25zdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRh dHVtKTsKKwkJYWN0dWFsX3ZlcnNpb25zdHIgPSBnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJzaW9u KAorCQkJZGJmb3JtLT5kYXRsb2Nwcm92aWRlciwKKwkJCWRiZm9ybS0+ZGF0bG9jcHJvdmlkZXIg PT0gQ09MTFBST1ZJREVSX0lDVSA/IGljdWxvY2FsZSA6IGNvbGxhdGUpOwogCi0JCWFjdHVhbF92 ZXJzaW9uc3RyID0gZ2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lvbihkYmZvcm0tPmRhdGxvY3By b3ZpZGVyLCBkYmZvcm0tPmRhdGxvY3Byb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UgPyBpY3Vs b2NhbGUgOiBjb2xsYXRlKTsKIAkJaWYgKCFhY3R1YWxfdmVyc2lvbnN0cikKIAkJCS8qIHNob3Vs ZCBub3QgaGFwcGVuICovCiAJCQllbG9nKFdBUk5JTkcsCkBAIC00NzAsNiArNDY5LDggQEAgQ2hl Y2tNeURhdGFiYXNlKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgYW1fc3VwZXJ1c2VyLCBib29sIG92 ZXJyaWRlX2FsbG93X2Nvbm5lY3QKIAkJCQkJCQkgIm9yIGJ1aWxkIFBvc3RncmVTUUwgd2l0aCB0 aGUgcmlnaHQgbGlicmFyeSB2ZXJzaW9uLiIsCiAJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIobmFt ZSkpKSk7CiAJfQorCWVsc2UKKwkJY29sbHZlcnNpb25zdHIgPSBOVUxMOwogCiAJLyogTWFrZSB0 aGUgbG9jYWxlIHNldHRpbmdzIHZpc2libGUgYXMgR1VDIHZhcmlhYmxlcywgdG9vICovCiAJU2V0 Q29uZmlnT3B0aW9uKCJsY19jb2xsYXRlIiwgY29sbGF0ZSwgUEdDX0lOVEVSTkFMLCBQR0NfU19E WU5BTUlDX0RFRkFVTFQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxl LmggYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaAppbmRleCAyYmQ5NmFiN2UxLi43OWNm YWNiMzAyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaAorKysgYi9z cmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaApAQCAtMTUsMjIgKzE1LDYgQEAKICNpZiBkZWZp bmVkKExPQ0FMRV9UX0lOX1hMT0NBTEUpIHx8IGRlZmluZWQoV0NTVE9NQlNfTF9JTl9YTE9DQUxF KQogI2luY2x1ZGUgPHhsb2NhbGUuaD4KICNlbmRpZgotI2lmZGVmIFVTRV9JQ1UKLSNpbmNsdWRl IDx1bmljb2RlL3Vjb2wuaD4KLSNlbmRpZgotCi0jaWZkZWYgVVNFX0lDVQotLyoKLSAqIHVjb2xf c3RyY29sbFVURjgoKSB3YXMgaW50cm9kdWNlZCBpbiBJQ1UgNTAsIGJ1dCBpdCBpcyBidWdneSBi ZWZvcmUgSUNVIDUzLgotICogKHNlZQotICogPGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21l c3NhZ2UtaWQvZmxhdC9mMTQzOGVjNi0yMmFhLTQwMjktOWEzYi0yNmY3OWQzMzBlNzIlNDBtYW5p dG91LW1haWwub3JnPikKLSAqLwotI2lmIFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNID49IDUzCi0j ZGVmaW5lIEhBVkVfVUNPTF9TVFJDT0xMVVRGOCAxCi0jZWxzZQotI3VuZGVmIEhBVkVfVUNPTF9T VFJDT0xMVVRGOAotI2VuZGlmCi0jZW5kaWYKIAogLyogdXNlIGZvciBsaWJjIGxvY2FsZSBuYW1l cyAqLwogI2RlZmluZSBMT0NBTEVfTkFNRV9CVUZMRU4gMTI4CkBAIC02NSwzOSArNDksMTIgQEAg ZXh0ZXJuIHN0cnVjdCBsY29udiAqUEdMQ19sb2NhbGVjb252KHZvaWQpOwogZXh0ZXJuIHZvaWQg Y2FjaGVfbG9jYWxlX3RpbWUodm9pZCk7CiAKIAotLyoKLSAqIFdlIGRlZmluZSBvdXIgb3duIHdy YXBwZXIgYXJvdW5kIGxvY2FsZV90IHNvIHdlIGNhbiBrZWVwIHRoZSBzYW1lCi0gKiBmdW5jdGlv biBzaWduYXR1cmVzIGZvciBhbGwgYnVpbGRzLCB3aGlsZSBub3QgaGF2aW5nIHRvIGNyZWF0ZSBh Ci0gKiBmYWtlIHZlcnNpb24gb2YgdGhlIHN0YW5kYXJkIHR5cGUgbG9jYWxlX3QgaW4gdGhlIGds b2JhbCBuYW1lc3BhY2UuCi0gKiBwZ19sb2NhbGVfdCBpcyBvY2Nhc2lvbmFsbHkgY2hlY2tlZCBm b3IgdHJ1dGgsIHNvIG1ha2UgaXQgYSBwb2ludGVyLgotICovCi1zdHJ1Y3QgcGdfbG9jYWxlX3N0 cnVjdAotewotCWNoYXIJCXByb3ZpZGVyOwotCWJvb2wJCWRldGVybWluaXN0aWM7Ci0JdW5pb24K LQl7Ci0jaWZkZWYgSEFWRV9MT0NBTEVfVAotCQlsb2NhbGVfdAlsdDsKLSNlbmRpZgotI2lmZGVm IFVTRV9JQ1UKLQkJc3RydWN0Ci0JCXsKLQkJCWNvbnN0IGNoYXIgKmxvY2FsZTsKLQkJCVVDb2xs YXRvciAgKnVjb2w7Ci0JCX0JCQlpY3U7Ci0jZW5kaWYKLQkJaW50CQkJZHVtbXk7CQkvKiBpbiBj YXNlIHdlIGhhdmUgbmVpdGhlciBMT0NBTEVfVCBub3IgSUNVICovCi0JfQkJCWluZm87Ci19Owot CiB0eXBlZGVmIHN0cnVjdCBwZ19sb2NhbGVfc3RydWN0ICpwZ19sb2NhbGVfdDsKIAotZXh0ZXJu IFBHRExMSU1QT1JUIHN0cnVjdCBwZ19sb2NhbGVfc3RydWN0IGRlZmF1bHRfbG9jYWxlOwotCi1l eHRlcm4gdm9pZCBtYWtlX2ljdV9jb2xsYXRvcihjb25zdCBjaGFyICppY3Vsb2NzdHIsCi0JCQkJ CQkJICBzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdCAqcmVzdWx0cCk7Ci0KK2V4dGVybiB2b2lkIGlu aXRfZGVmYXVsdF9sb2NhbGUoY2hhciBwcm92aWRlciwgY29uc3QgY2hhciAqY29sbGF0ZSwKKwkJ CQkJCQkJY29uc3QgY2hhciAqY3R5cGUsIGNvbnN0IGNoYXIgKmljdWxvY2FsZSwKKwkJCQkJCQkJ Y29uc3QgY2hhciAqdmVyc2lvbik7CitleHRlcm4gYm9vbCBwZ19sb2NhbGVfZGV0ZXJtaW5pc3Rp YyhwZ19sb2NhbGVfdCBsb2NhbGUpOwogZXh0ZXJuIHBnX2xvY2FsZV90IHBnX25ld2xvY2FsZV9m cm9tX2NvbGxhdGlvbihPaWQgY29sbGlkKTsKIAogZXh0ZXJuIGNoYXIgKmdldF9jb2xsYXRpb25f YWN0dWFsX3ZlcnNpb24oY2hhciBjb2xscHJvdmlkZXIsIGNvbnN0IGNoYXIgKmNvbGxjb2xsYXRl KTsKQEAgLTExNSwxMCArNzIsNiBAQCBleHRlcm4gc2l6ZV90IHBnX3N0cnhmcm1fcHJlZml4KGNo YXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGRlc3RzaXplLAogZXh0ZXJuIHNpemVf dCBwZ19zdHJueGZybV9wcmVmaXgoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBj aGFyICpzcmMsCiAJCQkJCQkJCSBzaXplX3Qgc3JjbGVuLCBwZ19sb2NhbGVfdCBsb2NhbGUpOwog Ci0jaWZkZWYgVVNFX0lDVQotZXh0ZXJuIGludDMyX3QgaWN1X3RvX3VjaGFyKFVDaGFyICoqYnVm Zl91Y2hhciwgY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcyk7Ci1leHRlcm4gaW50MzJf dCBpY3VfZnJvbV91Y2hhcihjaGFyICoqcmVzdWx0LCBjb25zdCBVQ2hhciAqYnVmZl91Y2hhciwg aW50MzJfdCBsZW5fdWNoYXIpOwotI2VuZGlmCiBleHRlcm4gdm9pZCBjaGVja19pY3VfbG9jYWxl KGNvbnN0IGNoYXIgKmljdV9sb2NhbGUpOwogCiAvKiBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBm cm9tL3RvIGxpYmMncyB3Y2hhcl90LCAqbm90KiBwZ193Y2hhcl90ICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxz L3BnX2xvY2FsZV9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLjMzNDY1YWQ5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wZ19s b2NhbGVfaW50ZXJuYWwuaApAQCAtMCwwICsxLDY4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogUG9zdGdyZVNRTCBsb2NhbGUgdXRpbGl0aWVzCisgKgorICogc3JjL2luY2x1ZGUvdXRpbHMv cGdfbG9jYWxlX2ludGVybmFsLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAyMiwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKworCisjaWZuZGVmIF9QR19MT0NBTEVfSU5URVJOQUxfCisjZGVmaW5lIF9QR19MT0NBTEVf SU5URVJOQUxfCisKKyNpZmRlZiBVU0VfSUNVCisjaW5jbHVkZSA8dW5pY29kZS91Y29sLmg+Cisj ZW5kaWYKKworI2lmZGVmIFVTRV9JQ1UKKy8qCisgKiB1Y29sX3N0cmNvbGxVVEY4KCkgd2FzIGlu dHJvZHVjZWQgaW4gSUNVIDUwLCBidXQgaXQgaXMgYnVnZ3kgYmVmb3JlIElDVSA1My4KKyAqIChz ZWUKKyAqIDxodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvZjE0Mzhl YzYtMjJhYS00MDI5LTlhM2ItMjZmNzlkMzMwZTcyJTQwbWFuaXRvdS1tYWlsLm9yZz4pCisgKi8K KyNpZiBVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA+PSA1MworI2RlZmluZSBIQVZFX1VDT0xfU1RS Q09MTFVURjggMQorI2Vsc2UKKyN1bmRlZiBIQVZFX1VDT0xfU1RSQ09MTFVURjgKKyNlbmRpZgor I2VuZGlmCisKKy8qCisgKiBXZSBkZWZpbmUgb3VyIG93biB3cmFwcGVyIGFyb3VuZCBsb2NhbGVf dCBzbyB3ZSBjYW4ga2VlcCB0aGUgc2FtZQorICogZnVuY3Rpb24gc2lnbmF0dXJlcyBmb3IgYWxs IGJ1aWxkcywgd2hpbGUgbm90IGhhdmluZyB0byBjcmVhdGUgYQorICogZmFrZSB2ZXJzaW9uIG9m IHRoZSBzdGFuZGFyZCB0eXBlIGxvY2FsZV90IGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLgorICog cGdfbG9jYWxlX3QgaXMgb2NjYXNpb25hbGx5IGNoZWNrZWQgZm9yIHRydXRoLCBzbyBtYWtlIGl0 IGEgcG9pbnRlci4KKyAqLworc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3QKK3sKKwljaGFyCQlwcm92 aWRlcjsKKwlib29sCQlkZXRlcm1pbmlzdGljOworCWNoYXIJICAgKmNvbGxhdGU7CisJY2hhcgkg ICAqY3R5cGU7CisJdW5pb24KKwl7CisjaWZkZWYgSEFWRV9MT0NBTEVfVAorCQlzdHJ1Y3QKKwkJ eworCQkJbG9jYWxlX3QJbHQ7CisJCX0JCQlsaWJjOworI2VuZGlmCisjaWZkZWYgVVNFX0lDVQor CQlzdHJ1Y3QKKwkJeworCQkJVUNvbGxhdG9yCSp1Y29sOworCQl9CQkJaWN1OworI2VuZGlmCisJ CWludAkJCWR1bW15OwkJLyogaW4gY2FzZSB3ZSBoYXZlIG5laXRoZXIgTE9DQUxFX1Qgbm9yIElD VSAqLworCX0JCQlpbmZvOworfTsKKworI2lmZGVmIFVTRV9JQ1UKK2V4dGVybiBpbnQzMl90IGlj dV90b191Y2hhcihVQ2hhciAqKmJ1ZmZfdWNoYXIsIGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBu Ynl0ZXMpOworZXh0ZXJuIGludDMyX3QgaWN1X2Zyb21fdWNoYXIoY2hhciAqKnJlc3VsdCwgY29u c3QgVUNoYXIgKmJ1ZmZfdWNoYXIsIGludDMyX3QgbGVuX3VjaGFyKTsKKyNlbmRpZgorCisjZW5k aWYJCQkJCQkJLyogX1BHX0xPQ0FMRV9JTlRFUk5BTF8gKi8KLS0gCjIuMzQuMQoK --=-Wwxe+64KlqA5LB703TXv Content-Disposition: attachment; filename*0=v4-0004-Support-multiple-ICU-collation-provider-libraries.pat; filename*1=ch Content-Type: text/x-patch; name="v4-0004-Support-multiple-ICU-collation-provider-libraries.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAxNTI0M2JkODJlNDRkODNlOTA3NTFjNTFlMzBkY2NlNGU5YzNhMzlmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDcgRGVjIDIwMjIgMTE6MDc6MzEgLTA4MDAKU3ViamVjdDogW1BBVENIIHY0IDQvNl0gU3Vw cG9ydCBtdWx0aXBsZSBJQ1UgY29sbGF0aW9uIHByb3ZpZGVyIGxpYnJhcmllcy4KCkludHJvZHVj ZSBzdHJ1Y3R1cmUgcGdfaWN1X2xpYnJhcnksIHdoaWNoIGhvbGRzIHBvaW50ZXJzIHRvIGVhY2gK cmVxdWlyZWQgSUNVIG1ldGhvZCwgYW5kIHN0b3JlIHRoaXMgYXMgcGFydCBvZiBwZ19sb2NhbGVf dC4gRWFjaCBjYWxsCnRvIGFuIElDVSBmdW5jdGlvbiBpbnN0ZWFkIGdvZXMgdGhyb3VnaCB0aGlz IHN0cnVjdHVyZSwgc28gdGhhdCBpdCBjYW4KbW9yZSBlYXNpbHkgYmUgcmVwbGFjZWQgYnkgYSBu b24tYnVpbHRpbiBJQ1UgbGlicmFyeS4KCk9mZmVyIGEgaG9vayB0byBhbGxvdyBhbiBleHRlbnNp b24gdG8gY29udHJvbCB3aGljaCBJQ1UgbGlicmFyeSBpcwpsb2FkZWQgZm9yIGEgZ2l2ZW4gbG9j YWxlIGFuZCB2ZXJzaW9uLgoKQXV0aG9yOiBUaG9tYXMgTXVucm8sIEplZmYgRGF2aXMKLS0tCiBz cmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMgICB8ICAxNyArLQogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYyAgICAgfCAgNjcgKysrKy0tCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvcGdfbG9jYWxlLmMgICAgICB8IDI5OSArKysrKysrKysrKysrKysrKystLS0tLS0t CiBzcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaCB8IDEyMSArKysrKysrKyst CiA0IGZpbGVzIGNoYW5nZWQsIDM5OCBpbnNlcnRpb25zKCspLCAxMDYgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jCmluZGV4IDllODRkYTQ4OTEuLjRlOTBiZmE2 NWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKQEAgLTU2MCwxMyArNTYwLDE0 IEBAIGdldF9pY3VfbGFuZ3VhZ2VfdGFnKGNvbnN0IGNoYXIgKmxvY2FsZW5hbWUpCiB7CiAJY2hh cgkJYnVmW1VMT0NfRlVMTE5BTUVfQ0FQQUNJVFldOwogCVVFcnJvckNvZGUJc3RhdHVzOworCXBn X2ljdV9saWJyYXJ5ICppY3VsaWIgPSBnZXRfZGVmYXVsdF9pY3VfbGlicmFyeSgpOwogCiAJc3Rh dHVzID0gVV9aRVJPX0VSUk9SOwotCXVsb2NfdG9MYW5ndWFnZVRhZyhsb2NhbGVuYW1lLCBidWYs IHNpemVvZihidWYpLCB0cnVlLCAmc3RhdHVzKTsKKwlpY3VsaWItPnRvTGFuZ3VhZ2VUYWcobG9j YWxlbmFtZSwgYnVmLCBzaXplb2YoYnVmKSwgdHJ1ZSwgJnN0YXR1cyk7CiAJaWYgKFVfRkFJTFVS RShzdGF0dXMpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJtc2coImNvdWxkIG5vdCBjb252 ZXJ0IGxvY2FsZSBuYW1lIFwiJXNcIiB0byBsYW5ndWFnZSB0YWc6ICVzIiwKLQkJCQkJCWxvY2Fs ZW5hbWUsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJCQkJCQlsb2NhbGVuYW1lLCBpY3VsaWIt PmVycm9yTmFtZShzdGF0dXMpKSkpOwogCiAJcmV0dXJuIHBzdHJkdXAoYnVmKTsKIH0KQEAgLTU4 NSwxMSArNTg2LDEyIEBAIGdldF9pY3VfbG9jYWxlX2NvbW1lbnQoY29uc3QgY2hhciAqbG9jYWxl bmFtZSkKIAlpbnQzMgkJbGVuX3VjaGFyOwogCWludDMyCQlpOwogCWNoYXIJICAgKnJlc3VsdDsK KwlwZ19pY3VfbGlicmFyeSAqaWN1bGliID0gZ2V0X2RlZmF1bHRfaWN1X2xpYnJhcnkoKTsKIAog CXN0YXR1cyA9IFVfWkVST19FUlJPUjsKLQlsZW5fdWNoYXIgPSB1bG9jX2dldERpc3BsYXlOYW1l KGxvY2FsZW5hbWUsICJlbiIsCi0JCQkJCQkJCQlkaXNwbGF5bmFtZSwgbGVuZ3Rob2YoZGlzcGxh eW5hbWUpLAotCQkJCQkJCQkJJnN0YXR1cyk7CisJbGVuX3VjaGFyID0gaWN1bGliLT5nZXREaXNw bGF5TmFtZShsb2NhbGVuYW1lLCAiZW4iLAorCQkJCQkJCQkJICAgZGlzcGxheW5hbWUsIGxlbmd0 aG9mKGRpc3BsYXluYW1lKSwKKwkJCQkJCQkJCSAgICZzdGF0dXMpOwogCWlmIChVX0ZBSUxVUkUo c3RhdHVzKSkKIAkJcmV0dXJuIE5VTEw7CQkJLyogbm8gZ29vZCByZWFzb24gdG8gcmFpc2UgYW4g ZXJyb3IgKi8KIApAQCAtODA5LDEyICs4MTEsMTMgQEAgcGdfaW1wb3J0X3N5c3RlbV9jb2xsYXRp b25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAjaWZkZWYgVVNFX0lDVQogCXsKIAkJaW50CQkJaTsKKwkJ cGdfaWN1X2xpYnJhcnkgKmljdWxpYiA9IGdldF9kZWZhdWx0X2ljdV9saWJyYXJ5KCk7CiAKIAkJ LyoKIAkJICogU3RhcnQgdGhlIGxvb3AgYXQgLTEgdG8gc25lYWsgaW4gdGhlIHJvb3QgbG9jYWxl IHdpdGhvdXQgdG9vIG11Y2gKIAkJICogY29kZSBkdXBsaWNhdGlvbi4KIAkJICovCi0JCWZvciAo aSA9IC0xOyBpIDwgdWxvY19jb3VudEF2YWlsYWJsZSgpOyBpKyspCisJCWZvciAoaSA9IC0xOyBp IDwgaWN1bGliLT5jb3VudEF2YWlsYWJsZSgpOyBpKyspCiAJCXsKIAkJCWNvbnN0IGNoYXIgKm5h bWU7CiAJCQljaGFyCSAgICpsYW5ndGFnOwpAQCAtODI1LDcgKzgyOCw3IEBAIHBnX2ltcG9ydF9z eXN0ZW1fY29sbGF0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJaWYgKGkgPT0gLTEpCiAJCQkJ bmFtZSA9ICIiOwkJLyogSUNVIHJvb3QgbG9jYWxlICovCiAJCQllbHNlCi0JCQkJbmFtZSA9IHVs b2NfZ2V0QXZhaWxhYmxlKGkpOworCQkJCW5hbWUgPSBpY3VsaWItPmdldEF2YWlsYWJsZShpKTsK IAogCQkJbGFuZ3RhZyA9IGdldF9pY3VfbGFuZ3VhZ2VfdGFnKG5hbWUpOwogCQkJaWN1bG9jc3Ry ID0gVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPj0gNTQgPyBsYW5ndGFnIDogbmFtZTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvZm9ybWF0dGluZy5jCmluZGV4IDMwNjc0MzFjYmUuLjdmMzE4ZmUyYzcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYwpAQCAtMTU2NSw2ICsxNTY1LDExIEBAIHR5cGVkZWYg aW50MzJfdCAoKklDVV9Db252ZXJ0X0Z1bmMpIChVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2Fw YWNpdHksCiAJCQkJCQkJCQkgY29uc3QgVUNoYXIgKnNyYywgaW50MzJfdCBzcmNMZW5ndGgsCiAJ CQkJCQkJCQkgY29uc3QgY2hhciAqbG9jYWxlLAogCQkJCQkJCQkJIFVFcnJvckNvZGUgKnBFcnJv ckNvZGUpOwordHlwZWRlZiBpbnQzMl90ICgqSUNVX0NvbnZlcnRfQklfRnVuYykgKFVDaGFyICpk ZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwKKwkJCQkJCQkJCQljb25zdCBVQ2hhciAqc3JjLCBp bnQzMl90IHNyY0xlbmd0aCwKKwkJCQkJCQkJCQlVQnJlYWtJdGVyYXRvciAqYmksCisJCQkJCQkJ CQkJY29uc3QgY2hhciAqbG9jYWxlLAorCQkJCQkJCQkJCVVFcnJvckNvZGUgKnBFcnJvckNvZGUp OwogCiBzdGF0aWMgaW50MzJfdAogaWN1X2NvbnZlcnRfY2FzZShJQ1VfQ29udmVydF9GdW5jIGZ1 bmMsIHBnX2xvY2FsZV90IG15bG9jYWxlLApAQCAtMTU3Miw2ICsxNTc3LDcgQEAgaWN1X2NvbnZl cnRfY2FzZShJQ1VfQ29udmVydF9GdW5jIGZ1bmMsIHBnX2xvY2FsZV90IG15bG9jYWxlLAogewog CVVFcnJvckNvZGUJc3RhdHVzOwogCWludDMyX3QJCWxlbl9kZXN0OworCXBnX2ljdV9saWJyYXJ5 ICppY3VsaWIgPSBQR19JQ1VfTElCKG15bG9jYWxlKTsKIAogCWxlbl9kZXN0ID0gbGVuX3NvdXJj ZTsJCS8qIHRyeSBmaXJzdCB3aXRoIHNhbWUgbGVuZ3RoICovCiAJKmJ1ZmZfZGVzdCA9IHBhbGxv YyhsZW5fZGVzdCAqIHNpemVvZigqKmJ1ZmZfZGVzdCkpOwpAQCAtMTU4OSwxOCArMTU5NSw0MiBA QCBpY3VfY29udmVydF9jYXNlKElDVV9Db252ZXJ0X0Z1bmMgZnVuYywgcGdfbG9jYWxlX3QgbXls b2NhbGUsCiAJfQogCWlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKIAkJZXJlcG9ydChFUlJPUiwKLQkJ CQkoZXJybXNnKCJjYXNlIGNvbnZlcnNpb24gZmFpbGVkOiAlcyIsIHVfZXJyb3JOYW1lKHN0YXR1 cykpKSk7CisJCQkJKGVycm1zZygiY2FzZSBjb252ZXJzaW9uIGZhaWxlZDogJXMiLAorCQkJCQkJ aWN1bGliLT5lcnJvck5hbWUoc3RhdHVzKSkpKTsKIAlyZXR1cm4gbGVuX2Rlc3Q7CiB9CiAKKy8q CisgKiBMaWtlIGljdV9jb252ZXJ0X2Nhc2UsIGJ1dCBmdW5jIHRha2VzIGEgYnJlYWsgaXRlcmF0 b3IgKHdoaWNoIHdlIGRvbid0CisgKiBtYWtlIHVzZSBvZikuCisgKi8KIHN0YXRpYyBpbnQzMl90 Ci11X3N0clRvVGl0bGVfZGVmYXVsdF9CSShVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNp dHksCi0JCQkJCQljb25zdCBVQ2hhciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwKLQkJCQkJCWNv bnN0IGNoYXIgKmxvY2FsZSwKLQkJCQkJCVVFcnJvckNvZGUgKnBFcnJvckNvZGUpCitpY3VfY29u dmVydF9jYXNlX2JpKElDVV9Db252ZXJ0X0JJX0Z1bmMgZnVuYywgcGdfbG9jYWxlX3QgbXlsb2Nh bGUsCisJCQkJCVVDaGFyICoqYnVmZl9kZXN0LCBVQ2hhciAqYnVmZl9zb3VyY2UsIGludDMyX3Qg bGVuX3NvdXJjZSkKIHsKLQlyZXR1cm4gdV9zdHJUb1RpdGxlKGRlc3QsIGRlc3RDYXBhY2l0eSwg c3JjLCBzcmNMZW5ndGgsCi0JCQkJCQlOVUxMLCBsb2NhbGUsIHBFcnJvckNvZGUpOworCVVFcnJv ckNvZGUJc3RhdHVzOworCWludDMyX3QJCWxlbl9kZXN0OworCXBnX2ljdV9saWJyYXJ5ICppY3Vs aWIgPSBQR19JQ1VfTElCKG15bG9jYWxlKTsKKworCWxlbl9kZXN0ID0gbGVuX3NvdXJjZTsJCS8q IHRyeSBmaXJzdCB3aXRoIHNhbWUgbGVuZ3RoICovCisJKmJ1ZmZfZGVzdCA9IHBhbGxvYyhsZW5f ZGVzdCAqIHNpemVvZigqKmJ1ZmZfZGVzdCkpOworCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKKwls ZW5fZGVzdCA9IGZ1bmMoKmJ1ZmZfZGVzdCwgbGVuX2Rlc3QsIGJ1ZmZfc291cmNlLCBsZW5fc291 cmNlLCBOVUxMLAorCQkJCQlteWxvY2FsZS0+Y3R5cGUsICZzdGF0dXMpOworCWlmIChzdGF0dXMg PT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCisJeworCQkvKiB0cnkgYWdhaW4gd2l0aCBhZGp1 c3RlZCBsZW5ndGggKi8KKwkJcGZyZWUoKmJ1ZmZfZGVzdCk7CisJCSpidWZmX2Rlc3QgPSBwYWxs b2MobGVuX2Rlc3QgKiBzaXplb2YoKipidWZmX2Rlc3QpKTsKKwkJc3RhdHVzID0gVV9aRVJPX0VS Uk9SOworCQlsZW5fZGVzdCA9IGZ1bmMoKmJ1ZmZfZGVzdCwgbGVuX2Rlc3QsIGJ1ZmZfc291cmNl LCBsZW5fc291cmNlLCBOVUxMLAorCQkJCQkJbXlsb2NhbGUtPmN0eXBlLCAmc3RhdHVzKTsKKwl9 CisJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2co ImNhc2UgY29udmVyc2lvbiBmYWlsZWQ6ICVzIiwKKwkJCQkJCWljdWxpYi0+ZXJyb3JOYW1lKHN0 YXR1cykpKSk7CisJcmV0dXJuIGxlbl9kZXN0OwogfQogCiAjZW5kaWYJCQkJCQkJLyogVVNFX0lD VSAqLwpAQCAtMTY2NiwxMSArMTY5NiwxMiBAQCBzdHJfdG9sb3dlcihjb25zdCBjaGFyICpidWZm LCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKQogCQkJaW50MzJfdAkJbGVuX2NvbnY7CiAJCQlV Q2hhcgkgICAqYnVmZl91Y2hhcjsKIAkJCVVDaGFyCSAgICpidWZmX2NvbnY7CisJCQlwZ19pY3Vf bGlicmFyeSAqaWN1bGliID0gUEdfSUNVX0xJQihteWxvY2FsZSk7CiAKLQkJCWxlbl91Y2hhciA9 IGljdV90b191Y2hhcigmYnVmZl91Y2hhciwgYnVmZiwgbmJ5dGVzKTsKLQkJCWxlbl9jb252ID0g aWN1X2NvbnZlcnRfY2FzZSh1X3N0clRvTG93ZXIsIG15bG9jYWxlLAorCQkJbGVuX3VjaGFyID0g aWN1X3RvX3VjaGFyKGljdWxpYiwgJmJ1ZmZfdWNoYXIsIGJ1ZmYsIG5ieXRlcyk7CisJCQlsZW5f Y29udiA9IGljdV9jb252ZXJ0X2Nhc2UoaWN1bGliLT5zdHJUb0xvd2VyLCBteWxvY2FsZSwKIAkJ CQkJCQkJCQkmYnVmZl9jb252LCBidWZmX3VjaGFyLCBsZW5fdWNoYXIpOwotCQkJaWN1X2Zyb21f dWNoYXIoJnJlc3VsdCwgYnVmZl9jb252LCBsZW5fY29udik7CisJCQlpY3VfZnJvbV91Y2hhcihp Y3VsaWIsICZyZXN1bHQsIGJ1ZmZfY29udiwgbGVuX2NvbnYpOwogCQkJcGZyZWUoYnVmZl91Y2hh cik7CiAJCQlwZnJlZShidWZmX2NvbnYpOwogCQl9CkBAIC0xNzg4LDExICsxODE5LDEyIEBAIHN0 cl90b3VwcGVyKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMsIE9pZCBjb2xsaWQpCiAJ CQkJCQlsZW5fY29udjsKIAkJCVVDaGFyCSAgICpidWZmX3VjaGFyOwogCQkJVUNoYXIJICAgKmJ1 ZmZfY29udjsKKwkJCXBnX2ljdV9saWJyYXJ5ICppY3VsaWIgPSBQR19JQ1VfTElCKG15bG9jYWxl KTsKIAotCQkJbGVuX3VjaGFyID0gaWN1X3RvX3VjaGFyKCZidWZmX3VjaGFyLCBidWZmLCBuYnl0 ZXMpOwotCQkJbGVuX2NvbnYgPSBpY3VfY29udmVydF9jYXNlKHVfc3RyVG9VcHBlciwgbXlsb2Nh bGUsCisJCQlsZW5fdWNoYXIgPSBpY3VfdG9fdWNoYXIoaWN1bGliLCAmYnVmZl91Y2hhciwgYnVm ZiwgbmJ5dGVzKTsKKwkJCWxlbl9jb252ID0gaWN1X2NvbnZlcnRfY2FzZShpY3VsaWItPnN0clRv VXBwZXIsIG15bG9jYWxlLAogCQkJCQkJCQkJCSZidWZmX2NvbnYsIGJ1ZmZfdWNoYXIsIGxlbl91 Y2hhcik7Ci0JCQlpY3VfZnJvbV91Y2hhcigmcmVzdWx0LCBidWZmX2NvbnYsIGxlbl9jb252KTsK KwkJCWljdV9mcm9tX3VjaGFyKGljdWxpYiwgJnJlc3VsdCwgYnVmZl9jb252LCBsZW5fY29udik7 CiAJCQlwZnJlZShidWZmX3VjaGFyKTsKIAkJCXBmcmVlKGJ1ZmZfY29udik7CiAJCX0KQEAgLTE5 MTEsMTEgKzE5NDMsMTIgQEAgc3RyX2luaXRjYXAoY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5i eXRlcywgT2lkIGNvbGxpZCkKIAkJCQkJCWxlbl9jb252OwogCQkJVUNoYXIJICAgKmJ1ZmZfdWNo YXI7CiAJCQlVQ2hhcgkgICAqYnVmZl9jb252OworCQkJcGdfaWN1X2xpYnJhcnkgKmljdWxpYiA9 IFBHX0lDVV9MSUIobXlsb2NhbGUpOwogCi0JCQlsZW5fdWNoYXIgPSBpY3VfdG9fdWNoYXIoJmJ1 ZmZfdWNoYXIsIGJ1ZmYsIG5ieXRlcyk7Ci0JCQlsZW5fY29udiA9IGljdV9jb252ZXJ0X2Nhc2Uo dV9zdHJUb1RpdGxlX2RlZmF1bHRfQkksIG15bG9jYWxlLAotCQkJCQkJCQkJCSZidWZmX2NvbnYs IGJ1ZmZfdWNoYXIsIGxlbl91Y2hhcik7Ci0JCQlpY3VfZnJvbV91Y2hhcigmcmVzdWx0LCBidWZm X2NvbnYsIGxlbl9jb252KTsKKwkJCWxlbl91Y2hhciA9IGljdV90b191Y2hhcihpY3VsaWIsICZi dWZmX3VjaGFyLCBidWZmLCBuYnl0ZXMpOworCQkJbGVuX2NvbnYgPSBpY3VfY29udmVydF9jYXNl X2JpKGljdWxpYi0+c3RyVG9UaXRsZSwgbXlsb2NhbGUsCisJCQkJCQkJCQkJICAgJmJ1ZmZfY29u diwgYnVmZl91Y2hhciwgbGVuX3VjaGFyKTsKKwkJCWljdV9mcm9tX3VjaGFyKGljdWxpYiwgJnJl c3VsdCwgYnVmZl9jb252LCBsZW5fY29udik7CiAJCQlwZnJlZShidWZmX3VjaGFyKTsKIAkJCXBm cmVlKGJ1ZmZfY29udik7CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9w Z19sb2NhbGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYwppbmRleCBkOGRm MmEzODMyLi41NTIxZmUxMWE1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdf bG9jYWxlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCkBAIC03MCw2 ICs3MCw4IEBACiAKICNpZmRlZiBVU0VfSUNVCiAjaW5jbHVkZSA8dW5pY29kZS91Y252Lmg+Cisj aW5jbHVkZSA8dW5pY29kZS91bG9jZGF0YS5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdXN0cmluZy5o PgogI2VuZGlmCiAKICNpZmRlZiBfX0dMSUJDX18KQEAgLTExMCw2ICsxMTIsNDEgQEAgY2hhcgkg ICAqbG9jYWxpemVkX2Z1bGxfZGF5c1s3ICsgMV07CiBjaGFyCSAgICpsb2NhbGl6ZWRfYWJicmV2 X21vbnRoc1sxMiArIDFdOwogY2hhcgkgICAqbG9jYWxpemVkX2Z1bGxfbW9udGhzWzEyICsgMV07 CiAKKy8qCisgKiBUaGUgcHJlY2lzZSB2ZXJzaW9uIG9mIGEgY29sbGF0aW9uIHByb3ZpZGVyIGxp YnJhcnkgaXMgaW1wb3J0YW50LCBiZWNhdXNlCisgKiBzdWJ0bGUgY2hhbmdlcyBpbiBjb2xsYXRp b24gYmV0d2VlbiBsaWJyYXJ5IHZlcnNpb25zIGNhbiBjb3JydXB0CisgKiBpbmRleGVzLiBUaGlz IGhvb2sgYWxsb3dzIGNvbnRyb2wgb3ZlciBob3cgY29sbGF0aW9uIHByb3ZpZGVyIGxpYnJhcmll cyBhcmUKKyAqIGxvYWRlZC4KKyAqCisgKiBJZiB0aGUgaG9vayBpcyBub3Qgc2V0LCBvciBpZiBp dCByZXR1cm5zIE5VTEwsIFBvc3RncmVzIGNvbnN0cnVjdHMgdGhlCisgKiBwZ19pY3VfbGlicmFy eSBzdHJ1Y3R1cmUgZnJvbSB0aGUgc3ltYm9scyBQb3N0Z3JlcyBpcyBsaW5rZWQgd2l0aCBhdCBi dWlsZAorICogdGltZS4KKyAqCisgKiBJZiB0aGUgaG9vayBpcyBzZXQsIGl0IGNhbiBpbnN0ZWFk IGNvbnN0cnVjdCB0aGUgcGdfaWN1X2xpYnJhcnkgc3RydWN0dXJlCisgKiB1c2luZyBjdXN0b20g bG9naWMuIE9yZGluYXJpbHksIHRoaXMgY3VzdG9tIGxvZ2ljIHdvdWxkIGludm9sdmUgZmluZGlu ZyBhCisgKiBzcGVjaWZpYyBrbm93biB2ZXJzaW9uIG9mIHRoZSBjb2xsYXRpb24gcHJvdmlkZXIg bGlicmFyeSwgYW5kIGR5bmFtaWNhbGx5CisgKiBsb2FkaW5nIHRoZSBuZWNlc3Nhcnkgc3ltYm9s cy4gSWYgdGhlIGNvbGxhdGlvbiB2ZXJzaW9uIG9idGFpbmVkIGZyb20gdGhlCisgKiBsaWJyYXJ5 IGRvZXMgbm90IG1hdGNoIHRoZSBjb2xsYXRpb24gdmVyc2lvbiByZWNvcmRlZCBpbiB0aGUgY2F0 YWxvZywKKyAqIFBvc3RncmVzIHdpbGwgaXNzdWUgYSBXQVJOSU5HLgorICoKKyAqIFRoZSByZXR1 cm5lZCBzdHJ1Y3R1cmUgbXVzdCBiZSBhbGxvY2F0ZWQgaW4gVG9wTWVtb3J5Q29udGV4dCwgYW5k IHRoZQorICogYXNzb2NpYXRlZCBzeW1ib2xzIG11c3QgcmVtYWluIHZhbGlkIHBlcm1hbmVudGx5 LiBJdCdzIGV4cGVjdGVkIHRoYXQgdGhlCisgKiBob29rIHdpbGwgbWFpbnRhaW4gYSBzbWFsbCBm aW5pdGUgbGlzdCBvZiBsaWJyYXJpZXMgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8KKyAqIHRoZSBh cHByb3ByYWl0ZSBvbmUsIHNvIHRoYXQgcmVzb3VyY2UgdXNlIHJlbWFpbnMgYm91bmRlZC4KKyAq CisgKiBYWFg6IEZvciBub3csIHRoZSBvbmx5IGluZm9ybWF0aW9uIHRoZSBob29rIGhhcyBhY2Nl c3MgdG8gaXMgdGhlIElDVSBsb2NhbGUKKyAqIG5hbWUsIGFuZCB0aGUgY29sbGF0aW9uIHZlcnNp b24gYXMgcmVjb3JkZWQgaW4gdGhlIGNhdGFsb2cuIFdlIHNob3VsZAorICogY29uc2lkZXIgd2hh dCBvdGhlciBpbmZvcm1hdGlvbiBjYW4gYmUgcHJvdmlkZWQgdG8gYWxsb3cgZm9yIGdyZWF0ZXIK KyAqIGNvbnRyb2wgb3ZlciB3aGljaCBsaWJyYXJ5IGlzIGxvYWRlZC4KKyAqLworI2lmZGVmIFVT RV9JQ1UKK2dldF9pY3VfbGlicmFyeV9ob29rX3R5cGUgZ2V0X2ljdV9saWJyYXJ5X2hvb2sgPSBO VUxMOworI2VuZGlmCisKKyNpZmRlZiBVU0VfSUNVCitzdGF0aWMgcGdfaWN1X2xpYnJhcnkgKmJ1 aWx0aW5faWN1X2xpYnJhcnkgPSBOVUxMOworI2VuZGlmCisKIC8qIGluZGljYXRlcyB3aGV0aGVy IGxvY2FsZSBpbmZvcm1hdGlvbiBjYWNoZSBpcyB2YWxpZCAqLwogc3RhdGljIGJvb2wgQ3VycmVu dExvY2FsZUNvbnZWYWxpZCA9IGZhbHNlOwogc3RhdGljIGJvb2wgQ3VycmVudExDVGltZVZhbGlk ID0gZmFsc2U7CkBAIC0xMzYsOCArMTczLDEyIEBAIHN0YXRpYyBjaGFyICpJc29Mb2NhbGVOYW1l KGNvbnN0IGNoYXIgKik7CiAgKiBEYXRhYmFzZSBkZWZhdWx0IGxvY2FsZS4KICAqLwogc3RhdGlj IHBnX2xvY2FsZV90IGRlZmF1bHRfbG9jYWxlID0gTlVMTDsKKyNpZmRlZiBVU0VfSUNVCitzdGF0 aWMgcGdfaWN1X2xpYnJhcnkgKmRlZmF1bHRfaWN1ID0gTlVMTDsKKyNlbmRpZgogCiAjaWZkZWYg VVNFX0lDVQorCiAvKgogICogQ29udmVydGVyIG9iamVjdCBmb3IgY29udmVydGluZyBiZXR3ZWVu IElDVSdzIFVDaGFyIHN0cmluZ3MgYW5kIEMgc3RyaW5ncwogICogaW4gZGF0YWJhc2UgZW5jb2Rp bmcuICBTaW5jZSB0aGUgZGF0YWJhc2UgZW5jb2RpbmcgZG9lc24ndCBjaGFuZ2UsIHdlIG9ubHkK QEAgLTE0NSwxMyArMTg2LDE3IEBAIHN0YXRpYyBwZ19sb2NhbGVfdCBkZWZhdWx0X2xvY2FsZSA9 IE5VTEw7CiAgKi8KIHN0YXRpYyBVQ29udmVydGVyICppY3VfY29udmVydGVyID0gTlVMTDsKIAot c3RhdGljIHZvaWQgaW5pdF9pY3VfY29udmVydGVyKHZvaWQpOwotc3RhdGljIHNpemVfdCB1Y2hh cl9sZW5ndGgoVUNvbnZlcnRlciAqY29udmVydGVyLAorc3RhdGljIHZvaWQgaW5pdF9pY3VfY29u dmVydGVyKHBnX2ljdV9saWJyYXJ5ICppY3VsaWIpOworc3RhdGljIHNpemVfdCB1Y2hhcl9sZW5n dGgocGdfaWN1X2xpYnJhcnkgKmljdWxpYiwKKwkJCQkJCSAgIFVDb252ZXJ0ZXIgKmNvbnZlcnRl ciwKIAkJCQkJCSAgIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbik7Ci1zdGF0aWMgaW50MzJf dCB1Y2hhcl9jb252ZXJ0KFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwKK3N0YXRpYyBpbnQzMl90IHVj aGFyX2NvbnZlcnQocGdfaWN1X2xpYnJhcnkgKmljdWxpYiwKKwkJCQkJCQkgVUNvbnZlcnRlciAq Y29udmVydGVyLAogCQkJCQkJCSBVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0bGVuLAogCQkJCQkJ CSBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBzcmNsZW4pOwotc3RhdGljIHZvaWQgaWN1X3NldF9j b2xsYXRpb25fYXR0cmlidXRlcyhVQ29sbGF0b3IgKmNvbGxhdG9yLCBjb25zdCBjaGFyICpsb2Mp Oworc3RhdGljIHZvaWQgaWN1X3NldF9jb2xsYXRpb25fYXR0cmlidXRlcyhwZ19pY3VfbGlicmFy eSAqaWN1bGliLAorCQkJCQkJCQkJCSBVQ29sbGF0b3IgKmNvbGxhdG9yLAorCQkJCQkJCQkJCSBj b25zdCBjaGFyICpsb2MpOwogI2VuZGlmCiAKIC8qCkBAIC0xNDU4LDYgKzE1MDMsNzggQEAgcmVw b3J0X25ld2xvY2FsZV9mYWlsdXJlKGNvbnN0IGNoYXIgKmxvY2FsZW5hbWUpCiB9CiAjZW5kaWYJ CQkJCQkJLyogSEFWRV9MT0NBTEVfVCAqLwogCisjaWZkZWYgVVNFX0lDVQorc3RhdGljIHBnX2lj dV9saWJyYXJ5ICoKK2dldF9idWlsdGluX2ljdV9saWJyYXJ5KCkKK3sKKwlwZ19pY3VfbGlicmFy eSAqbGliOworCisJaWYgKGJ1aWx0aW5faWN1X2xpYnJhcnkgIT0gTlVMTCkKKwkJcmV0dXJuIGJ1 aWx0aW5faWN1X2xpYnJhcnk7CisKKwkvKgorCSAqIFRoZXNlIGFzc2lnbm1lbnRzIHdpbGwgZmFp bCB0byBjb21waWxlIGlmIGFuIGluY29tcGF0aWJsZSBBUEkgY2hhbmdlIGlzCisJICogbWFkZSB0 byBzb21lIGZ1dHVyZSB2ZXJzaW9uIG9mIElDVSwgYXQgd2hpY2ggcG9pbnQgd2UgbWlnaHQgbmVl ZCB0bworCSAqIGNvbnNpZGVyIHNwZWNpYWwgdHJlYXRtZW50IGZvciBkaWZmZXJlbnQgbWFqb3Ig dmVyc2lvbiByYW5nZXMsIHdpdGgKKwkgKiBpbnRlcm1lZGlhdGUgdHJhbXBvbGluZSBmdW5jdGlv bnMuCisJICovCisJbGliID0gTWVtb3J5Q29udGV4dEFsbG9jKFRvcE1lbW9yeUNvbnRleHQsIHNp emVvZihwZ19pY3VfbGlicmFyeSkpOworCWxpYi0+Z2V0SUNVVmVyc2lvbiA9IHVfZ2V0VmVyc2lv bjsKKwlsaWItPmdldFVuaWNvZGVWZXJzaW9uID0gdV9nZXRVbmljb2RlVmVyc2lvbjsKKwlsaWIt PmdldENMRFJWZXJzaW9uID0gdWxvY2RhdGFfZ2V0Q0xEUlZlcnNpb247CisJbGliLT5vcGVuQ29s bGF0b3IgPSB1Y29sX29wZW47CisJbGliLT5jbG9zZUNvbGxhdG9yID0gdWNvbF9jbG9zZTsKKwls aWItPmdldENvbGxhdG9yVmVyc2lvbiA9IHVjb2xfZ2V0VmVyc2lvbjsKKwlsaWItPmdldFVDQVZl cnNpb24gPSB1Y29sX2dldFVDQVZlcnNpb247CisJbGliLT52ZXJzaW9uVG9TdHJpbmcgPSB1X3Zl cnNpb25Ub1N0cmluZzsKKwlsaWItPnN0cmNvbGwgPSB1Y29sX3N0cmNvbGw7CisJbGliLT5zdHJj b2xsVVRGOCA9IHVjb2xfc3RyY29sbFVURjg7CisJbGliLT5nZXRTb3J0S2V5ID0gdWNvbF9nZXRT b3J0S2V5OworCWxpYi0+bmV4dFNvcnRLZXlQYXJ0ID0gdWNvbF9uZXh0U29ydEtleVBhcnQ7CisJ bGliLT5zZXRVVEY4ID0gdWl0ZXJfc2V0VVRGODsKKwlsaWItPmVycm9yTmFtZSA9IHVfZXJyb3JO YW1lOworCWxpYi0+c3RyVG9VcHBlciA9IHVfc3RyVG9VcHBlcjsKKwlsaWItPnN0clRvTG93ZXIg PSB1X3N0clRvTG93ZXI7CisJbGliLT5zdHJUb1RpdGxlID0gdV9zdHJUb1RpdGxlOworCWxpYi0+ c2V0QXR0cmlidXRlID0gdWNvbF9zZXRBdHRyaWJ1dGU7CisJbGliLT5vcGVuQ29udmVydGVyID0g dWNudl9vcGVuOworCWxpYi0+Y2xvc2VDb252ZXJ0ZXIgPSB1Y252X2Nsb3NlOworCWxpYi0+ZnJv bVVDaGFycyA9IHVjbnZfZnJvbVVDaGFyczsKKwlsaWItPnRvVUNoYXJzID0gdWNudl90b1VDaGFy czsKKwlsaWItPnRvTGFuZ3VhZ2VUYWcgPSB1bG9jX3RvTGFuZ3VhZ2VUYWc7CisJbGliLT5nZXRE aXNwbGF5TmFtZSA9IHVsb2NfZ2V0RGlzcGxheU5hbWU7CisJbGliLT5jb3VudEF2YWlsYWJsZSA9 IHVsb2NfY291bnRBdmFpbGFibGU7CisJbGliLT5nZXRBdmFpbGFibGUgPSB1bG9jX2dldEF2YWls YWJsZTsKKworCS8qCisJICogQWxzbyBhc3NlcnQgdGhlIHNpemUgb2YgYSBjb3VwbGUgb2YgdHlw ZXMgdXNlZCBhcyBvdXRwdXQgYnVmZmVycywgYXMgYQorCSAqIGNhbmFyeSB0byB0ZWxsIHVzIHRv IGFkZCBleHRyYSBwYWRkaW5nIGluIHRoZSAodW5saWtlbHkpIGV2ZW50IHRoYXQgYQorCSAqIGxh dGVyIHJlbGVhc2UgbWFrZXMgdGhlc2UgdmFsdWVzIHNtYWxsZXIuCisJICovCisJU3RhdGljQXNz ZXJ0U3RtdChVX01BWF9WRVJTSU9OX1NUUklOR19MRU5HVEggPT0gMjAsCisJCQkJCSAidV92ZXJz aW9uVG9TdHJpbmcgb3V0cHV0IGJ1ZmZlciBzaXplIGNoYW5nZWQgaW5jb21wYXRpYmx5Iik7CisJ U3RhdGljQXNzZXJ0U3RtdChVX01BWF9WRVJTSU9OX0xFTkdUSCA9PSA0LAorCQkJCQkgInVjb2xf Z2V0VmVyc2lvbiBvdXRwdXQgYnVmZmVyIHNpemUgY2hhbmdlZCBpbmNvbXBhdGlibHkiKTsKKwor CWJ1aWx0aW5faWN1X2xpYnJhcnkgPSBsaWI7CisJcmV0dXJuIGxpYjsKK30KKworc3RhdGljIHBn X2ljdV9saWJyYXJ5ICoKK2dldF9pY3VfbGlicmFyeShjb25zdCBjaGFyICpsb2NhbGUsIGNvbnN0 IGNoYXIgKnZlcnNpb24pCit7CisJcGdfaWN1X2xpYnJhcnkgKmxpYiA9IE5VTEw7CisKKwlpZiAo Z2V0X2ljdV9saWJyYXJ5X2hvb2sgIT0gTlVMTCkKKwkJbGliID0gZ2V0X2ljdV9saWJyYXJ5X2hv b2sobG9jYWxlLCB2ZXJzaW9uKTsKKworCWlmICghbGliKQorCQlsaWIgPSBnZXRfYnVpbHRpbl9p Y3VfbGlicmFyeSgpOworCisJcmV0dXJuIGxpYjsKK30KKworI2VuZGlmCiAKIC8qCiAgKiBDb25z dHJ1Y3QgYSBuZXcgcGdfbG9jYWxlX3Qgb2JqZWN0LgpAQCAtMTU1NCwyMCArMTY3MSwyNCBAQCBw Z19uZXdsb2NhbGUoY2hhciBwcm92aWRlciwgYm9vbCBkZXRlcm1pbmlzdGljLCBjb25zdCBjaGFy ICpjb2xsYXRlLAogCXsKIAkJVUNvbGxhdG9yICAqY29sbGF0b3I7CiAJCVVFcnJvckNvZGUJc3Rh dHVzOworCQlwZ19pY3VfbGlicmFyeSAqaWN1bGliID0gZ2V0X2ljdV9saWJyYXJ5KGNvbGxhdGUs IHZlcnNpb24pOworCisJCUFzc2VydChzdHJjbXAoY29sbGF0ZSwgY3R5cGUpID09IDApOwogCiAJ CS8qIGNvbGxhdG9yIG1heSBiZSBsZWFrZWQgaWYgd2UgZW5jb3VudGVyIGFuIGVycm9yICovCiAK IAkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCQljb2xsYXRvciA9IHVjb2xfb3Blbihjb2xsYXRl LCAmc3RhdHVzKTsKKwkJY29sbGF0b3IgPSBpY3VsaWItPm9wZW5Db2xsYXRvcihjb2xsYXRlLCAm c3RhdHVzKTsKIAkJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJ CQkJKGVycm1zZygiY291bGQgbm90IG9wZW4gY29sbGF0b3IgZm9yIGxvY2FsZSBcIiVzXCI6ICVz IiwKLQkJCQkJCQljb2xsYXRlLCB1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCQkJCQkJCWNvbGxh dGUsIGljdWxpYi0+ZXJyb3JOYW1lKHN0YXR1cykpKSk7CiAKIAkJaWYgKFVfSUNVX1ZFUlNJT05f TUFKT1JfTlVNIDwgNTQpCi0JCQlpY3Vfc2V0X2NvbGxhdGlvbl9hdHRyaWJ1dGVzKGNvbGxhdG9y LCBjb2xsYXRlKTsKKwkJCWljdV9zZXRfY29sbGF0aW9uX2F0dHJpYnV0ZXMoaWN1bGliLCBjb2xs YXRvciwgY29sbGF0ZSk7CiAKIAkJcmVzdWx0LT5pbmZvLmljdS51Y29sID0gY29sbGF0b3I7CisJ CXJlc3VsdC0+aW5mby5pY3UubGliID0gaWN1bGliOwogCX0KICNlbmRpZgogCWVsc2UKQEAgLTE1 ODksNiArMTcxMCwxNCBAQCBwZ19sb2NhbGVfZGV0ZXJtaW5pc3RpYyhwZ19sb2NhbGVfdCBsb2Nh bGUpCiAJCXJldHVybiBsb2NhbGUtPmRldGVybWluaXN0aWM7CiB9CiAKKyNpZmRlZiBVU0VfSUNV CitwZ19pY3VfbGlicmFyeSAqCitnZXRfZGVmYXVsdF9pY3VfbGlicmFyeSgpCit7CisJcmV0dXJu IGRlZmF1bHRfaWN1OworfQorI2VuZGlmCisKIC8qCiAgKiBJbml0aWFsaXplIGRlZmF1bHQgZGF0 YWJhc2UgbG9jYWxlLgogICovCkBAIC0xNTk2LDYgKzE3MjUsMTAgQEAgdm9pZAogaW5pdF9kZWZh dWx0X2xvY2FsZShjaGFyIHByb3ZpZGVyLCBjb25zdCBjaGFyICpjb2xsYXRlLCBjb25zdCBjaGFy ICpjdHlwZSwKIAkJCQkJY29uc3QgY2hhciAqaWN1bG9jYWxlLCBjb25zdCBjaGFyICp2ZXJzaW9u KQogeworI2lmZGVmIFVTRV9JQ1UKKwlkZWZhdWx0X2ljdSA9IGdldF9pY3VfbGlicmFyeShpY3Vs b2NhbGUsIHZlcnNpb24pOworI2VuZGlmCisKIAkvKgogCSAqIEZvciB0aGUgcHVycG9zZXMgb2Yg cGdfbG9jYWxlX3QsIGlmIHRoZSBwcm92aWRlciBpcyBJQ1UsIHdlIHVzZQogCSAqIGljdWxvY2Fs ZSBmb3IgYm90aCBjb2xsYXRlIGFuZCBjdHlwZS4KQEAgLTE3NTksMTcgKzE4OTIsMTggQEAgZ2V0 X2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lvbihjaGFyIGNvbGxwcm92aWRlciwgY29uc3QgY2hhciAq Y29sbGNvbGxhdGUpCiAJCVVFcnJvckNvZGUJc3RhdHVzOwogCQlVVmVyc2lvbkluZm8gdmVyc2lv bmluZm87CiAJCWNoYXIJCWJ1ZltVX01BWF9WRVJTSU9OX1NUUklOR19MRU5HVEhdOworCQlwZ19p Y3VfbGlicmFyeQkqaWN1bGliID0gZ2V0X2ljdV9saWJyYXJ5KGNvbGxjb2xsYXRlLCBOVUxMKTsK IAogCQlzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0JCWNvbGxhdG9yID0gdWNvbF9vcGVuKGNvbGxj b2xsYXRlLCAmc3RhdHVzKTsKKwkJY29sbGF0b3IgPSBpY3VsaWItPm9wZW5Db2xsYXRvcihjb2xs Y29sbGF0ZSwgJnN0YXR1cyk7CiAJCWlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKIAkJCWVyZXBvcnQo RVJST1IsCiAJCQkJCShlcnJtc2coImNvdWxkIG5vdCBvcGVuIGNvbGxhdG9yIGZvciBsb2NhbGUg XCIlc1wiOiAlcyIsCi0JCQkJCQkJY29sbGNvbGxhdGUsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7 Ci0JCXVjb2xfZ2V0VmVyc2lvbihjb2xsYXRvciwgdmVyc2lvbmluZm8pOwotCQl1Y29sX2Nsb3Nl KGNvbGxhdG9yKTsKKwkJCQkJCQljb2xsY29sbGF0ZSwgaWN1bGliLT5lcnJvck5hbWUoc3RhdHVz KSkpKTsKKwkJaWN1bGliLT5nZXRDb2xsYXRvclZlcnNpb24oY29sbGF0b3IsIHZlcnNpb25pbmZv KTsKKwkJaWN1bGliLT5jbG9zZUNvbGxhdG9yKGNvbGxhdG9yKTsKIAotCQl1X3ZlcnNpb25Ub1N0 cmluZyh2ZXJzaW9uaW5mbywgYnVmKTsKKwkJaWN1bGliLT52ZXJzaW9uVG9TdHJpbmcodmVyc2lv bmluZm8sIGJ1Zik7CiAJCWNvbGx2ZXJzaW9uID0gcHN0cmR1cChidWYpOwogCX0KIAllbHNlCkBA IC0yMDIxLDE2ICsyMTU1LDE3IEBAIHBnX3N0cm5jb2xsX2ljdV9ub191dGY4KGNvbnN0IGNoYXIg KmFyZzEsIHNpemVfdCBsZW4xLAogCVVDaGFyCSp1Y2hhcjEsCiAJCQkqdWNoYXIyOwogCWludAkJ IHJlc3VsdDsKKwlwZ19pY3VfbGlicmFyeSAqaWN1bGliID0gUEdfSUNVX0xJQihsb2NhbGUpOwog CiAJQXNzZXJ0KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSk7CiAjaWZkZWYg SEFWRV9VQ09MX1NUUkNPTExVVEY4CiAJQXNzZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSAhPSBQ R19VVEY4KTsKICNlbmRpZgogCi0JaW5pdF9pY3VfY29udmVydGVyKCk7CisJaW5pdF9pY3VfY29u dmVydGVyKGljdWxpYik7CiAKLQl1bGVuMSA9IHVjaGFyX2xlbmd0aChpY3VfY29udmVydGVyLCBh cmcxLCBsZW4xKTsKLQl1bGVuMiA9IHVjaGFyX2xlbmd0aChpY3VfY29udmVydGVyLCBhcmcyLCBs ZW4yKTsKKwl1bGVuMSA9IHVjaGFyX2xlbmd0aChpY3VsaWIsIGljdV9jb252ZXJ0ZXIsIGFyZzEs IGxlbjEpOworCXVsZW4yID0gdWNoYXJfbGVuZ3RoKGljdWxpYiwgaWN1X2NvbnZlcnRlciwgYXJn MiwgbGVuMik7CiAKIAlidWZzaXplMSA9ICh1bGVuMSArIDEpICogc2l6ZW9mKFVDaGFyKTsKIAli dWZzaXplMiA9ICh1bGVuMiArIDEpICogc2l6ZW9mKFVDaGFyKTsKQEAgLTIwNDEsMTIgKzIxNzYs MTIgQEAgcGdfc3RybmNvbGxfaWN1X25vX3V0ZjgoY29uc3QgY2hhciAqYXJnMSwgc2l6ZV90IGxl bjEsCiAJdWNoYXIxID0gKFVDaGFyICopIGJ1ZjsKIAl1Y2hhcjIgPSAoVUNoYXIgKikgKGJ1ZiAr IGJ1ZnNpemUxKTsKIAotCXVsZW4xID0gdWNoYXJfY29udmVydChpY3VfY29udmVydGVyLCB1Y2hh cjEsIHVsZW4xICsgMSwgYXJnMSwgbGVuMSk7Ci0JdWxlbjIgPSB1Y2hhcl9jb252ZXJ0KGljdV9j b252ZXJ0ZXIsIHVjaGFyMiwgdWxlbjIgKyAxLCBhcmcyLCBsZW4yKTsKKwl1bGVuMSA9IHVjaGFy X2NvbnZlcnQoaWN1bGliLCBpY3VfY29udmVydGVyLCB1Y2hhcjEsIHVsZW4xICsgMSwgYXJnMSwg bGVuMSk7CisJdWxlbjIgPSB1Y2hhcl9jb252ZXJ0KGljdWxpYiwgaWN1X2NvbnZlcnRlciwgdWNo YXIyLCB1bGVuMiArIDEsIGFyZzIsIGxlbjIpOwogCi0JcmVzdWx0ID0gdWNvbF9zdHJjb2xsKGxv Y2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCSAgdWNoYXIxLCB1bGVuMSwKLQkJCQkJCSAgdWNo YXIyLCB1bGVuMik7CisJcmVzdWx0ID0gaWN1bGliLT5zdHJjb2xsKGxvY2FsZS0+aW5mby5pY3Uu dWNvbCwKKwkJCQkJCQkgdWNoYXIxLCB1bGVuMSwKKwkJCQkJCQkgdWNoYXIyLCB1bGVuMik7CiAK IAlpZiAoYnVmICE9IHNidWYpCiAJCXBmcmVlKGJ1Zik7CkBAIC0yMDY3LDYgKzIyMDIsNyBAQCBw Z19zdHJuY29sbF9pY3UoY29uc3QgY2hhciAqYXJnMSwgc2l6ZV90IGxlbjEsIGNvbnN0IGNoYXIg KmFyZzIsIHNpemVfdCBsZW4yLAogCQkJCXBnX2xvY2FsZV90IGxvY2FsZSkKIHsKIAlpbnQgcmVz dWx0OworCXBnX2ljdV9saWJyYXJ5ICppY3VsaWIgPSBQR19JQ1VfTElCKGxvY2FsZSk7CiAKIAlB c3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKTsKIApAQCAtMjA3Niwx MyArMjIxMiwxNCBAQCBwZ19zdHJuY29sbF9pY3UoY29uc3QgY2hhciAqYXJnMSwgc2l6ZV90IGxl bjEsIGNvbnN0IGNoYXIgKmFyZzIsIHNpemVfdCBsZW4yLAogCQlVRXJyb3JDb2RlCXN0YXR1czsK IAogCQlzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0JCXJlc3VsdCA9IHVjb2xfc3RyY29sbFVURjgo bG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCQkgIGFyZzEsIGxlbjEsCi0JCQkJCQkJCSAg YXJnMiwgbGVuMiwKLQkJCQkJCQkJICAmc3RhdHVzKTsKKwkJcmVzdWx0ID0gaWN1bGliLT5zdHJj b2xsVVRGOChsb2NhbGUtPmluZm8uaWN1LnVjb2wsCisJCQkJCQkJCQkgYXJnMSwgbGVuMSwKKwkJ CQkJCQkJCSBhcmcyLCBsZW4yLAorCQkJCQkJCQkJICZzdGF0dXMpOwogCQlpZiAoVV9GQUlMVVJF KHN0YXR1cykpCiAJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJybXNnKCJjb2xsYXRpb24gZmFp bGVkOiAlcyIsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJCQkJCShlcnJtc2coImNvbGxhdGlv biBmYWlsZWQ6ICVzIiwKKwkJCQkJCQlpY3VsaWItPmVycm9yTmFtZShzdGF0dXMpKSkpOwogCX0K IAllbHNlCiAjZW5kaWYKQEAgLTIyNjEsMTIgKzIzOTgsMTMgQEAgcGdfc3Rybnhmcm1faWN1KGNo YXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwgc2l6ZV90IGRlc3RzaXpl LAogCWludDMyX3QJIHVsZW47CiAJc2l6ZV90ICAgdWNoYXJfYnNpemU7CiAJU2l6ZQkgcmVzdWx0 X2JzaXplOworCXBnX2ljdV9saWJyYXJ5ICppY3VsaWIgPSBQR19JQ1VfTElCKGxvY2FsZSk7CiAK IAlBc3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKTsKIAotCWluaXRf aWN1X2NvbnZlcnRlcigpOworCWluaXRfaWN1X2NvbnZlcnRlcihpY3VsaWIpOwogCi0JdWxlbiA9 IHVjaGFyX2xlbmd0aChpY3VfY29udmVydGVyLCBzcmMsIHNyY2xlbik7CisJdWxlbiA9IHVjaGFy X2xlbmd0aChpY3VsaWIsIGljdV9jb252ZXJ0ZXIsIHNyYywgc3JjbGVuKTsKIAogCXVjaGFyX2Jz aXplID0gKHVsZW4gKyAxKSAqIHNpemVvZihVQ2hhcik7CiAKQEAgLTIyNzUsMTEgKzI0MTMsMTEg QEAgcGdfc3Rybnhmcm1faWN1KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNy Y2xlbiwgc2l6ZV90IGRlc3RzaXplLAogCiAJdWNoYXIgPSAoVUNoYXIgKikgYnVmOwogCi0JdWxl biA9IHVjaGFyX2NvbnZlcnQoaWN1X2NvbnZlcnRlciwgdWNoYXIsIHVsZW4gKyAxLCBzcmMsIHNy Y2xlbik7CisJdWxlbiA9IHVjaGFyX2NvbnZlcnQoaWN1bGliLCBpY3VfY29udmVydGVyLCB1Y2hh ciwgdWxlbiArIDEsIHNyYywgc3JjbGVuKTsKIAotCXJlc3VsdF9ic2l6ZSA9IHVjb2xfZ2V0U29y dEtleShsb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0JCQkJCQkJCSAgIHVjaGFyLCB1bGVuLAotCQkJ CQkJCQkgICAodWludDhfdCAqKSBkZXN0LCBkZXN0c2l6ZSk7CisJcmVzdWx0X2JzaXplID0gaWN1 bGliLT5nZXRTb3J0S2V5KGxvY2FsZS0+aW5mby5pY3UudWNvbCwKKwkJCQkJCQkJCSAgdWNoYXIs IHVsZW4sCisJCQkJCQkJCQkgICh1aW50OF90ICopIGRlc3QsIGRlc3RzaXplKTsKIAogCWlmIChi dWYgIT0gc2J1ZikKIAkJcGZyZWUoYnVmKTsKQEAgLTIzMDgsMTMgKzI0NDYsMTQgQEAgcGdfc3Ry bnhmcm1fcHJlZml4X2ljdV9ub191dGY4KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6 ZV90IHNyY2xlbiwKIAlVQ2hhcgkJCSp1Y2hhciA9IE5VTEw7CiAJc2l6ZV90CQkJIHVjaGFyX2Jz aXplOwogCVNpemUJCQkgcmVzdWx0X2JzaXplOworCXBnX2ljdV9saWJyYXJ5CSppY3VsaWIgPSBQ R19JQ1VfTElCKGxvY2FsZSk7CiAKIAlBc3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJP VklERVJfSUNVKTsKIAlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGluZygpICE9IFBHX1VURjgpOwog Ci0JaW5pdF9pY3VfY29udmVydGVyKCk7CisJaW5pdF9pY3VfY29udmVydGVyKGljdWxpYik7CiAK LQl1bGVuID0gdWNoYXJfbGVuZ3RoKGljdV9jb252ZXJ0ZXIsIHNyYywgc3JjbGVuKTsKKwl1bGVu ID0gdWNoYXJfbGVuZ3RoKGljdWxpYiwgaWN1X2NvbnZlcnRlciwgc3JjLCBzcmNsZW4pOwogCiAJ dWNoYXJfYnNpemUgPSAodWxlbiArIDEpICogc2l6ZW9mKFVDaGFyKTsKIApAQCAtMjMyMywyMSAr MjQ2MiwxOSBAQCBwZ19zdHJueGZybV9wcmVmaXhfaWN1X25vX3V0ZjgoY2hhciAqZGVzdCwgY29u c3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAogCiAJdWNoYXIgPSAoVUNoYXIgKikgYnVmOwog Ci0JdWxlbiA9IHVjaGFyX2NvbnZlcnQoaWN1X2NvbnZlcnRlciwgdWNoYXIsIHVsZW4gKyAxLCBz cmMsIHNyY2xlbik7CisJdWxlbiA9IHVjaGFyX2NvbnZlcnQoaWN1bGliLCBpY3VfY29udmVydGVy LCB1Y2hhciwgdWxlbiArIDEsIHNyYywgc3JjbGVuKTsKIAogCXVpdGVyX3NldFN0cmluZygmaXRl ciwgdWNoYXIsIHVsZW4pOwogCXN0YXRlWzBdID0gc3RhdGVbMV0gPSAwOwkvKiB3b24ndCBuZWVk IHRoYXQgYWdhaW4gKi8KIAlzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0JcmVzdWx0X2JzaXplID0g dWNvbF9uZXh0U29ydEtleVBhcnQobG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCQkJCSZp dGVyLAotCQkJCQkJCQkJCXN0YXRlLAotCQkJCQkJCQkJCSh1aW50OF90ICopIGRlc3QsCi0JCQkJ CQkJCQkJZGVzdHNpemUsCi0JCQkJCQkJCQkJJnN0YXR1cyk7CisJcmVzdWx0X2JzaXplID0gaWN1 bGliLT5uZXh0U29ydEtleVBhcnQoCisJCWxvY2FsZS0+aW5mby5pY3UudWNvbCwgJml0ZXIsIHN0 YXRlLAorCQkodWludDhfdCAqKSBkZXN0LCBkZXN0c2l6ZSwgJnN0YXR1cyk7CisKIAlpZiAoVV9G QUlMVVJFKHN0YXR1cykpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycm1zZygic29ydCBrZXkg Z2VuZXJhdGlvbiBmYWlsZWQ6ICVzIiwKLQkJCQkJCXVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJ CQkJCQlpY3VsaWItPmVycm9yTmFtZShzdGF0dXMpKSkpOwogCiAJcmV0dXJuIHJlc3VsdF9ic2l6 ZTsKIH0KQEAgLTIzNDYsNiArMjQ4Myw3IEBAIHN0YXRpYyBzaXplX3QKIHBnX3N0cm54ZnJtX3By ZWZpeF9pY3UoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAogCQkJ CQkgICBzaXplX3QgZGVzdHNpemUsIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKKwlwZ19pY3VfbGli cmFyeSAqaWN1bGliID0gUEdfSUNVX0xJQihsb2NhbGUpOwogCXNpemVfdCByZXN1bHQ7CiAKIAlB c3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKTsKQEAgLTIzNTYsMTkg KzI0OTQsMTcgQEAgcGdfc3Rybnhmcm1fcHJlZml4X2ljdShjaGFyICpkZXN0LCBjb25zdCBjaGFy ICpzcmMsIHNpemVfdCBzcmNsZW4sCiAJCXVpbnQzMl90CXN0YXRlWzJdOwogCQlVRXJyb3JDb2Rl CXN0YXR1czsKIAotCQl1aXRlcl9zZXRVVEY4KCZpdGVyLCBzcmMsIHNyY2xlbik7CisJCWljdWxp Yi0+c2V0VVRGOCgmaXRlciwgc3JjLCBzcmNsZW4pOwogCQlzdGF0ZVswXSA9IHN0YXRlWzFdID0g MDsJLyogd29uJ3QgbmVlZCB0aGF0IGFnYWluICovCiAJCXN0YXR1cyA9IFVfWkVST19FUlJPUjsK LQkJcmVzdWx0ID0gdWNvbF9uZXh0U29ydEtleVBhcnQobG9jYWxlLT5pbmZvLmljdS51Y29sLAot CQkJCQkJCQkJICAmaXRlciwKLQkJCQkJCQkJCSAgc3RhdGUsCi0JCQkJCQkJCQkgICh1aW50OF90 ICopIGRlc3QsCi0JCQkJCQkJCQkgIGRlc3RzaXplLAotCQkJCQkJCQkJICAmc3RhdHVzKTsKKwkJ cmVzdWx0ID0gaWN1bGliLT5uZXh0U29ydEtleVBhcnQoCisJCQlsb2NhbGUtPmluZm8uaWN1LnVj b2wsICZpdGVyLCBzdGF0ZSwKKwkJCSh1aW50OF90ICopIGRlc3QsIGRlc3RzaXplLCAmc3RhdHVz KTsKKwogCQlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQko ZXJybXNnKCJzb3J0IGtleSBnZW5lcmF0aW9uIGZhaWxlZDogJXMiLAotCQkJCQkJCXVfZXJyb3JO YW1lKHN0YXR1cykpKSk7CisJCQkJCQkJaWN1bGliLT5lcnJvck5hbWUoc3RhdHVzKSkpKTsKIAl9 CiAJZWxzZQogCQlyZXN1bHQgPSBwZ19zdHJueGZybV9wcmVmaXhfaWN1X25vX3V0ZjgoZGVzdCwg c3JjLCBzcmNsZW4sIGRlc3RzaXplLApAQCAtMjU2NCw3ICsyNzAwLDcgQEAgcGdfc3Rybnhmcm1f cHJlZml4KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAogCiAj aWZkZWYgVVNFX0lDVQogc3RhdGljIHZvaWQKLWluaXRfaWN1X2NvbnZlcnRlcih2b2lkKQoraW5p dF9pY3VfY29udmVydGVyKHBnX2ljdV9saWJyYXJ5ICppY3VsaWIpCiB7CiAJY29uc3QgY2hhciAq aWN1X2VuY29kaW5nX25hbWU7CiAJVUVycm9yQ29kZQlzdGF0dXM7CkBAIC0yNTgxLDExICsyNzE3 LDExIEBAIGluaXRfaWN1X2NvbnZlcnRlcih2b2lkKQogCQkJCQkJcGdfZW5jb2RpbmdfdG9fY2hh cihHZXREYXRhYmFzZUVuY29kaW5nKCkpKSkpOwogCiAJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwot CWNvbnYgPSB1Y252X29wZW4oaWN1X2VuY29kaW5nX25hbWUsICZzdGF0dXMpOworCWNvbnYgPSBp Y3VsaWItPm9wZW5Db252ZXJ0ZXIoaWN1X2VuY29kaW5nX25hbWUsICZzdGF0dXMpOwogCWlmIChV X0ZBSUxVUkUoc3RhdHVzKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJybXNnKCJjb3VsZCBu b3Qgb3BlbiBJQ1UgY29udmVydGVyIGZvciBlbmNvZGluZyBcIiVzXCI6ICVzIiwKLQkJCQkJCWlj dV9lbmNvZGluZ19uYW1lLCB1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCQkJCQkJaWN1X2VuY29k aW5nX25hbWUsIGljdWxpYi0+ZXJyb3JOYW1lKHN0YXR1cykpKSk7CiAKIAlpY3VfY29udmVydGVy ID0gY29udjsKIH0KQEAgLTI1OTQsMTQgKzI3MzAsMTUgQEAgaW5pdF9pY3VfY29udmVydGVyKHZv aWQpCiAgKiBGaW5kIGxlbmd0aCwgaW4gVUNoYXJzLCBvZiBnaXZlbiBzdHJpbmcgaWYgY29udmVy dGVkIHRvIFVDaGFyIHN0cmluZy4KICAqLwogc3RhdGljIHNpemVfdAotdWNoYXJfbGVuZ3RoKFVD b252ZXJ0ZXIgKmNvbnZlcnRlciwgY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuKQordWNoYXJf bGVuZ3RoKHBnX2ljdV9saWJyYXJ5ICppY3VsaWIsIFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwgY29u c3QgY2hhciAqc3RyLCBzaXplX3QgbGVuKQogewogCVVFcnJvckNvZGUJc3RhdHVzID0gVV9aRVJP X0VSUk9SOwogCWludDMyX3QJCXVsZW47Ci0JdWxlbiA9IHVjbnZfdG9VQ2hhcnMoY29udmVydGVy LCBOVUxMLCAwLCBzdHIsIGxlbiwgJnN0YXR1cyk7CisJdWxlbiA9IGljdWxpYi0+dG9VQ2hhcnMo Y29udmVydGVyLCBOVUxMLCAwLCBzdHIsIGxlbiwgJnN0YXR1cyk7CiAJaWYgKFVfRkFJTFVSRShz dGF0dXMpICYmIHN0YXR1cyAhPSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikKIAkJZXJlcG9ydChF UlJPUiwKLQkJCQkoZXJybXNnKCIlcyBmYWlsZWQ6ICVzIiwgInVjbnZfdG9VQ2hhcnMiLCB1X2Vy cm9yTmFtZShzdGF0dXMpKSkpOworCQkJCShlcnJtc2coIiVzIGZhaWxlZDogJXMiLCAidWNudl90 b1VDaGFycyIsCisJCQkJCQlpY3VsaWItPmVycm9yTmFtZShzdGF0dXMpKSkpOwogCXJldHVybiB1 bGVuOwogfQogCkBAIC0yNjEwLDE2ICsyNzQ3LDE3IEBAIHVjaGFyX2xlbmd0aChVQ29udmVydGVy ICpjb252ZXJ0ZXIsIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbikKICAqIHJldHVybiB0aGUg bGVuZ3RoIChpbiBVQ2hhcnMpLgogICovCiBzdGF0aWMgaW50MzJfdAotdWNoYXJfY29udmVydChV Q29udmVydGVyICpjb252ZXJ0ZXIsIFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RsZW4sCi0JCQkg IGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbikKK3VjaGFyX2NvbnZlcnQocGdfaWN1X2xp YnJhcnkgKmljdWxpYiwgVUNvbnZlcnRlciAqY29udmVydGVyLCBVQ2hhciAqZGVzdCwKKwkJCSAg aW50MzJfdCBkZXN0bGVuLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4pCiB7CiAJVUVy cm9yQ29kZQlzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAJaW50MzJfdAkJdWxlbjsKIAlzdGF0dXMg PSBVX1pFUk9fRVJST1I7Ci0JdWxlbiA9IHVjbnZfdG9VQ2hhcnMoY29udmVydGVyLCBkZXN0LCBk ZXN0bGVuLCBzcmMsIHNyY2xlbiwgJnN0YXR1cyk7CisJdWxlbiA9IGljdWxpYi0+dG9VQ2hhcnMo Y29udmVydGVyLCBkZXN0LCBkZXN0bGVuLCBzcmMsIHNyY2xlbiwgJnN0YXR1cyk7CiAJaWYgKFVf RkFJTFVSRShzdGF0dXMpKQogCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJtc2coIiVzIGZhaWxl ZDogJXMiLCAidWNudl90b1VDaGFycyIsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJCQkJKGVy cm1zZygiJXMgZmFpbGVkOiAlcyIsICJ1Y252X3RvVUNoYXJzIiwKKwkJCQkJCWljdWxpYi0+ZXJy b3JOYW1lKHN0YXR1cykpKSk7CiAJcmV0dXJuIHVsZW47CiB9CiAKQEAgLTI2MzYsMTYgKzI3NzQs MTcgQEAgdWNoYXJfY29udmVydChVQ29udmVydGVyICpjb252ZXJ0ZXIsIFVDaGFyICpkZXN0LCBp bnQzMl90IGRlc3RsZW4sCiAgKiByZXN1bHQgbGVuZ3RoIGluc3RlYWQuCiAgKi8KIGludDMyX3QK LWljdV90b191Y2hhcihVQ2hhciAqKmJ1ZmZfdWNoYXIsIGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVf dCBuYnl0ZXMpCitpY3VfdG9fdWNoYXIocGdfaWN1X2xpYnJhcnkgKmljdWxpYiwgVUNoYXIgKipi dWZmX3VjaGFyLCBjb25zdCBjaGFyICpidWZmLAorCQkJIHNpemVfdCBuYnl0ZXMpCiB7CiAJaW50 MzJfdCBsZW5fdWNoYXI7CiAKLQlpbml0X2ljdV9jb252ZXJ0ZXIoKTsKKwlpbml0X2ljdV9jb252 ZXJ0ZXIoaWN1bGliKTsKIAotCWxlbl91Y2hhciA9IHVjaGFyX2xlbmd0aChpY3VfY29udmVydGVy LCBidWZmLCBuYnl0ZXMpOworCWxlbl91Y2hhciA9IHVjaGFyX2xlbmd0aChpY3VsaWIsIGljdV9j b252ZXJ0ZXIsIGJ1ZmYsIG5ieXRlcyk7CiAKIAkqYnVmZl91Y2hhciA9IHBhbGxvYygobGVuX3Vj aGFyICsgMSkgKiBzaXplb2YoKipidWZmX3VjaGFyKSk7Ci0JbGVuX3VjaGFyID0gdWNoYXJfY29u dmVydChpY3VfY29udmVydGVyLAorCWxlbl91Y2hhciA9IHVjaGFyX2NvbnZlcnQoaWN1bGliLCBp Y3VfY29udmVydGVyLAogCQkJCQkJCSAgKmJ1ZmZfdWNoYXIsIGxlbl91Y2hhciArIDEsIGJ1ZmYs IG5ieXRlcyk7CiAKIAlyZXR1cm4gbGVuX3VjaGFyOwpAQCAtMjY2MywzMCArMjgwMiwzMiBAQCBp Y3VfdG9fdWNoYXIoVUNoYXIgKipidWZmX3VjaGFyLCBjb25zdCBjaGFyICpidWZmLCBzaXplX3Qg bmJ5dGVzKQogICogVGhlIHJlc3VsdCBzdHJpbmcgaXMgbnVsLXRlcm1pbmF0ZWQuCiAgKi8KIGlu dDMyX3QKLWljdV9mcm9tX3VjaGFyKGNoYXIgKipyZXN1bHQsIGNvbnN0IFVDaGFyICpidWZmX3Vj aGFyLCBpbnQzMl90IGxlbl91Y2hhcikKK2ljdV9mcm9tX3VjaGFyKHBnX2ljdV9saWJyYXJ5ICpp Y3VsaWIsIGNoYXIgKipyZXN1bHQsIGNvbnN0IFVDaGFyICpidWZmX3VjaGFyLAorCQkJICAgaW50 MzJfdCBsZW5fdWNoYXIpCiB7CiAJVUVycm9yQ29kZQlzdGF0dXM7CiAJaW50MzJfdAkJbGVuX3Jl c3VsdDsKIAotCWluaXRfaWN1X2NvbnZlcnRlcigpOworCWluaXRfaWN1X2NvbnZlcnRlcihpY3Vs aWIpOwogCiAJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCWxlbl9yZXN1bHQgPSB1Y252X2Zyb21V Q2hhcnMoaWN1X2NvbnZlcnRlciwgTlVMTCwgMCwKLQkJCQkJCQkJIGJ1ZmZfdWNoYXIsIGxlbl91 Y2hhciwgJnN0YXR1cyk7CisJbGVuX3Jlc3VsdCA9IGljdWxpYi0+ZnJvbVVDaGFycyhpY3VfY29u dmVydGVyLCBOVUxMLCAwLAorCQkJCQkJCQkJYnVmZl91Y2hhciwgbGVuX3VjaGFyLCAmc3RhdHVz KTsKIAlpZiAoVV9GQUlMVVJFKHN0YXR1cykgJiYgc3RhdHVzICE9IFVfQlVGRkVSX09WRVJGTE9X X0VSUk9SKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJtc2coIiVzIGZhaWxlZDogJXMiLCAi dWNudl9mcm9tVUNoYXJzIiwKLQkJCQkJCXVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJCQkJCQlp Y3VsaWItPmVycm9yTmFtZShzdGF0dXMpKSkpOwogCiAJKnJlc3VsdCA9IHBhbGxvYyhsZW5fcmVz dWx0ICsgMSk7CiAKIAlzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0JbGVuX3Jlc3VsdCA9IHVjbnZf ZnJvbVVDaGFycyhpY3VfY29udmVydGVyLCAqcmVzdWx0LCBsZW5fcmVzdWx0ICsgMSwKLQkJCQkJ CQkJIGJ1ZmZfdWNoYXIsIGxlbl91Y2hhciwgJnN0YXR1cyk7CisJbGVuX3Jlc3VsdCA9IGljdWxp Yi0+ZnJvbVVDaGFycyhpY3VfY29udmVydGVyLCAqcmVzdWx0LAorCQkJCQkJCQkJbGVuX3Jlc3Vs dCArIDEsIGJ1ZmZfdWNoYXIsCisJCQkJCQkJCQlsZW5fdWNoYXIsICZzdGF0dXMpOwogCWlmIChV X0ZBSUxVUkUoc3RhdHVzKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJybXNnKCIlcyBmYWls ZWQ6ICVzIiwgInVjbnZfZnJvbVVDaGFycyIsCi0JCQkJCQl1X2Vycm9yTmFtZShzdGF0dXMpKSkp OworCQkJCQkJaWN1bGliLT5lcnJvck5hbWUoc3RhdHVzKSkpKTsKIAogCXJldHVybiBsZW5fcmVz dWx0OwogfQpAQCAtMjcwMiw3ICsyODQzLDggQEAgaWN1X2Zyb21fdWNoYXIoY2hhciAqKnJlc3Vs dCwgY29uc3QgVUNoYXIgKmJ1ZmZfdWNoYXIsIGludDMyX3QgbGVuX3VjaGFyKQogICovCiBwZ19h dHRyaWJ1dGVfdW51c2VkKCkKIHN0YXRpYyB2b2lkCi1pY3Vfc2V0X2NvbGxhdGlvbl9hdHRyaWJ1 dGVzKFVDb2xsYXRvciAqY29sbGF0b3IsIGNvbnN0IGNoYXIgKmxvYykKK2ljdV9zZXRfY29sbGF0 aW9uX2F0dHJpYnV0ZXMocGdfaWN1X2xpYnJhcnkgKmljdWxpYiwgVUNvbGxhdG9yICpjb2xsYXRv ciwKKwkJCQkJCQkgY29uc3QgY2hhciAqbG9jKQogewogCWNoYXIJICAgKnN0ciA9IGFzY190b2xv d2VyKGxvYywgc3RybGVuKGxvYykpOwogCkBAIC0yNzc2LDcgKzI5MTgsNyBAQCBpY3Vfc2V0X2Nv bGxhdGlvbl9hdHRyaWJ1dGVzKFVDb2xsYXRvciAqY29sbGF0b3IsIGNvbnN0IGNoYXIgKmxvYykK IAkJCQlzdGF0dXMgPSBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1I7CiAKIAkJCWlmIChzdGF0dXMg PT0gVV9aRVJPX0VSUk9SKQotCQkJCXVjb2xfc2V0QXR0cmlidXRlKGNvbGxhdG9yLCB1YXR0ciwg dXZhbHVlLCAmc3RhdHVzKTsKKwkJCQlpY3VsaWItPnNldEF0dHJpYnV0ZShjb2xsYXRvciwgdWF0 dHIsIHV2YWx1ZSwgJnN0YXR1cyk7CiAKIAkJCS8qCiAJCQkgKiBQcmV0ZW5kIHRoZSBlcnJvciBj YW1lIGZyb20gdWNvbF9vcGVuKCksIGZvciBjb25zaXN0ZW50IGVycm9yCkBAIC0yNzg1LDcgKzI5 MjcsNyBAQCBpY3Vfc2V0X2NvbGxhdGlvbl9hdHRyaWJ1dGVzKFVDb2xsYXRvciAqY29sbGF0b3Is IGNvbnN0IGNoYXIgKmxvYykKIAkJCWlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKIAkJCQllcmVwb3J0 KEVSUk9SLAogCQkJCQkJKGVycm1zZygiY291bGQgbm90IG9wZW4gY29sbGF0b3IgZm9yIGxvY2Fs ZSBcIiVzXCI6ICVzIiwKLQkJCQkJCQkJbG9jLCB1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCQkJ CQkJCQlsb2MsIGljdWxpYi0+ZXJyb3JOYW1lKHN0YXR1cykpKSk7CiAJCX0KIAl9CiB9CkBAIC0y ODAxLDE3ICsyOTQzLDE4IEBAIGNoZWNrX2ljdV9sb2NhbGUoY29uc3QgY2hhciAqaWN1X2xvY2Fs ZSkKICNpZmRlZiBVU0VfSUNVCiAJVUNvbGxhdG9yCSpjb2xsYXRvcjsKIAlVRXJyb3JDb2RlICAg c3RhdHVzOworCXBnX2ljdV9saWJyYXJ5ICppY3VsaWIgPSBnZXRfaWN1X2xpYnJhcnkoaWN1X2xv Y2FsZSwgTlVMTCk7CiAKIAlzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0JY29sbGF0b3IgPSB1Y29s X29wZW4oaWN1X2xvY2FsZSwgJnN0YXR1cyk7CisJY29sbGF0b3IgPSBpY3VsaWItPm9wZW5Db2xs YXRvcihpY3VfbG9jYWxlLCAmc3RhdHVzKTsKIAlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAJCWVy ZXBvcnQoRVJST1IsCiAJCQkJKGVycm1zZygiY291bGQgbm90IG9wZW4gY29sbGF0b3IgZm9yIGxv Y2FsZSBcIiVzXCI6ICVzIiwKLQkJCQkJCWljdV9sb2NhbGUsIHVfZXJyb3JOYW1lKHN0YXR1cykp KSk7CisJCQkJCQlpY3VfbG9jYWxlLCBpY3VsaWItPmVycm9yTmFtZShzdGF0dXMpKSkpOwogCiAJ aWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNIDwgNTQpCi0JCWljdV9zZXRfY29sbGF0aW9uX2F0 dHJpYnV0ZXMoY29sbGF0b3IsIGljdV9sb2NhbGUpOwotCXVjb2xfY2xvc2UoY29sbGF0b3IpOwor CQlpY3Vfc2V0X2NvbGxhdGlvbl9hdHRyaWJ1dGVzKGljdWxpYiwgY29sbGF0b3IsIGljdV9sb2Nh bGUpOworCWljdWxpYi0+Y2xvc2VDb2xsYXRvcihjb2xsYXRvcik7CiAjZWxzZQogCWVyZXBvcnQo RVJST1IsCiAJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaCBiL3NyYy9pbmNs dWRlL3V0aWxzL3BnX2xvY2FsZV9pbnRlcm5hbC5oCmluZGV4IDMzNDY1YWQ5MmQuLmFmYjZjMjRk NjQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZV9pbnRlcm5hbC5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZV9pbnRlcm5hbC5oCkBAIC0xNCw2ICsxNCw4 IEBACiAjZGVmaW5lIF9QR19MT0NBTEVfSU5URVJOQUxfCiAKICNpZmRlZiBVU0VfSUNVCisjaW5j bHVkZSA8dW5pY29kZS91YnJrLmg+CisjaW5jbHVkZSA8dW5pY29kZS91Y252Lmg+CiAjaW5jbHVk ZSA8dW5pY29kZS91Y29sLmg+CiAjZW5kaWYKIApAQCAtMzAsNiArMzIsMTA2IEBACiAjZW5kaWYK ICNlbmRpZgogCisjaWZkZWYgVVNFX0lDVQorLyoKKyAqIEFuIElDVSBsaWJyYXJ5IHZlcnNpb24g dGhhdCB3ZSdyZSBlaXRoZXIgbGlua2VkIGFnYWluc3Qgb3IgaGF2ZSBsb2FkZWQgYXQKKyAqIHJ1 bnRpbWUuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBnX2ljdV9saWJyYXJ5Cit7CisJaW50CQkJbWFq b3JfdmVyc2lvbjsKKwlpbnQJCQltaW5vcl92ZXJzaW9uOworCXZvaWQJCSgqZ2V0SUNVVmVyc2lv bikgKFVWZXJzaW9uSW5mbyBpbmZvKTsKKwl2b2lkCQkoKmdldFVuaWNvZGVWZXJzaW9uKSAoVVZl cnNpb25JbmZvIGludG8pOworCXZvaWQJCSgqZ2V0Q0xEUlZlcnNpb24pIChVVmVyc2lvbkluZm8g aW5mbywgVUVycm9yQ29kZSAqc3RhdHVzKTsKKwlVQ29sbGF0b3IgICooKm9wZW5Db2xsYXRvcikg KGNvbnN0IGNoYXIgKmxvYywgVUVycm9yQ29kZSAqc3RhdHVzKTsKKwl2b2lkCQkoKmNsb3NlQ29s bGF0b3IpIChVQ29sbGF0b3IgKmNvbGwpOworCXZvaWQJCSgqZ2V0Q29sbGF0b3JWZXJzaW9uKSAo Y29uc3QgVUNvbGxhdG9yICpjb2xsLCBVVmVyc2lvbkluZm8gaW5mbyk7CisJdm9pZAkJKCpnZXRV Q0FWZXJzaW9uKSAoY29uc3QgVUNvbGxhdG9yICpjb2xsLCBVVmVyc2lvbkluZm8gaW5mbyk7CisJ dm9pZAkJKCp2ZXJzaW9uVG9TdHJpbmcpIChjb25zdCBVVmVyc2lvbkluZm8gdmVyc2lvbkFycmF5 LAorCQkJCQkJCQkJY2hhciAqdmVyc2lvblN0cmluZyk7CisJVUNvbGxhdGlvblJlc3VsdCAoKnN0 cmNvbGwpIChjb25zdCBVQ29sbGF0b3IgKmNvbGwsCisJCQkJCQkJCSBjb25zdCBVQ2hhciAqc291 cmNlLAorCQkJCQkJCQkgaW50MzJfdCBzb3VyY2VMZW5ndGgsCisJCQkJCQkJCSBjb25zdCBVQ2hh ciAqdGFyZ2V0LAorCQkJCQkJCQkgaW50MzJfdCB0YXJnZXRMZW5ndGgpOworCVVDb2xsYXRpb25S ZXN1bHQgKCpzdHJjb2xsVVRGOCkgKGNvbnN0IFVDb2xsYXRvciAqY29sbCwKKwkJCQkJCQkJCSBj b25zdCBjaGFyICpzb3VyY2UsCisJCQkJCQkJCQkgaW50MzJfdCBzb3VyY2VMZW5ndGgsCisJCQkJ CQkJCQkgY29uc3QgY2hhciAqdGFyZ2V0LAorCQkJCQkJCQkJIGludDMyX3QgdGFyZ2V0TGVuZ3Ro LAorCQkJCQkJCQkJIFVFcnJvckNvZGUgKnN0YXR1cyk7CisJaW50MzJfdAkJKCpnZXRTb3J0S2V5 KSAoY29uc3QgVUNvbGxhdG9yICpjb2xsLAorCQkJCQkJCSAgIGNvbnN0IFVDaGFyICpzb3VyY2Us CisJCQkJCQkJICAgaW50MzJfdCBzb3VyY2VMZW5ndGgsCisJCQkJCQkJICAgdWludDhfdCAqcmVz dWx0LAorCQkJCQkJCSAgIGludDMyX3QgcmVzdWx0TGVuZ3RoKTsKKwlpbnQzMl90CQkoKm5leHRT b3J0S2V5UGFydCkgKGNvbnN0IFVDb2xsYXRvciAqY29sbCwKKwkJCQkJCQkJCVVDaGFySXRlcmF0 b3IgKml0ZXIsCisJCQkJCQkJCQl1aW50MzJfdCBzdGF0ZVsyXSwKKwkJCQkJCQkJCXVpbnQ4X3Qg KmRlc3QsCisJCQkJCQkJCQlpbnQzMl90IGNvdW50LAorCQkJCQkJCQkJVUVycm9yQ29kZSAqc3Rh dHVzKTsKKwl2b2lkCQkoKnNldFVURjgpIChVQ2hhckl0ZXJhdG9yICppdGVyLAorCQkJCQkJCWNv bnN0IGNoYXIgKnMsCisJCQkJCQkJaW50MzJfdCBsZW5ndGgpOworCWNvbnN0IGNoYXIgKigqZXJy b3JOYW1lKSAoVUVycm9yQ29kZSBjb2RlKTsKKwlpbnQzMl90CQkoKnN0clRvVXBwZXIpIChVQ2hh ciAqZGVzdCwKKwkJCQkJCQkgICBpbnQzMl90IGRlc3RDYXBhY2l0eSwKKwkJCQkJCQkgICBjb25z dCBVQ2hhciAqc3JjLAorCQkJCQkJCSAgIGludDMyX3Qgc3JjTGVuZ3RoLAorCQkJCQkJCSAgIGNv bnN0IGNoYXIgKmxvY2FsZSwKKwkJCQkJCQkgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKKwlp bnQzMl90CQkoKnN0clRvTG93ZXIpIChVQ2hhciAqZGVzdCwKKwkJCQkJCQkgICBpbnQzMl90IGRl c3RDYXBhY2l0eSwKKwkJCQkJCQkgICBjb25zdCBVQ2hhciAqc3JjLAorCQkJCQkJCSAgIGludDMy X3Qgc3JjTGVuZ3RoLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmxvY2FsZSwKKwkJCQkJCQkgICBV RXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKKwlpbnQzMl90CQkoKnN0clRvVGl0bGUpIChVQ2hhciAq ZGVzdCwKKwkJCQkJCQkgICBpbnQzMl90IGRlc3RDYXBhY2l0eSwKKwkJCQkJCQkgICBjb25zdCBV Q2hhciAqc3JjLAorCQkJCQkJCSAgIGludDMyX3Qgc3JjTGVuZ3RoLAorCQkJCQkJCSAgIFVCcmVh a0l0ZXJhdG9yICp0aXRsZUl0ZXIsCisJCQkJCQkJICAgY29uc3QgY2hhciAqbG9jYWxlLAorCQkJ CQkJCSAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCXZvaWQJCSgqc2V0QXR0cmlidXRlKSAo VUNvbGxhdG9yICpjb2xsLAorCQkJCQkJCQkgVUNvbEF0dHJpYnV0ZSBhdHRyLAorCQkJCQkJCQkg VUNvbEF0dHJpYnV0ZVZhbHVlIHZhbHVlLAorCQkJCQkJCQkgVUVycm9yQ29kZSAqc3RhdHVzKTsK KwlVQ29udmVydGVyICooKm9wZW5Db252ZXJ0ZXIpIChjb25zdCBjaGFyICpjb252ZXJ0ZXJOYW1l LAorCQkJCQkJCQkgIFVFcnJvckNvZGUgKiAgCWVycik7CisJdm9pZAkJKCpjbG9zZUNvbnZlcnRl cikgKFVDb252ZXJ0ZXIgKmNvbnZlcnRlcik7CisJaW50MzJfdAkJKCpmcm9tVUNoYXJzKSAoVUNv bnZlcnRlciAqY252LAorCQkJCQkJCSAgIGNoYXIgKmRlc3QsCisJCQkJCQkJICAgaW50MzJfdCBk ZXN0Q2FwYWNpdHksCisJCQkJCQkJICAgY29uc3QgVUNoYXIgKnNyYywKKwkJCQkJCQkgICBpbnQz Ml90IHNyY0xlbmd0aCwKKwkJCQkJCQkgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKKwlpbnQz Ml90CQkoKnRvVUNoYXJzKSAoVUNvbnZlcnRlciAqY252LAorCQkJCQkJCSBVQ2hhciAqZGVzdCwK KwkJCQkJCQkgaW50MzJfdCBkZXN0Q2FwYWNpdHksCisJCQkJCQkJIGNvbnN0IGNoYXIgKnNyYywK KwkJCQkJCQkgaW50MzJfdCBzcmNMZW5ndGgsCisJCQkJCQkJIFVFcnJvckNvZGUgKnBFcnJvckNv ZGUpOworCWludDMyX3QJCSgqdG9MYW5ndWFnZVRhZykgKGNvbnN0IGNoYXIgKmxvY2FsZUlELAor CQkJCQkJCQkgIGNoYXIgKmxhbmd0YWcsCisJCQkJCQkJCSAgaW50MzJfdCBsYW5ndGFnQ2FwYWNp dHksCisJCQkJCQkJCSAgVUJvb2wgc3RyaWN0LAorCQkJCQkJCQkgIFVFcnJvckNvZGUgKmVycik7 CisJaW50MzJfdAkJKCpnZXREaXNwbGF5TmFtZSkgKGNvbnN0IGNoYXIgKmxvY2FsZUlELAorCQkJ CQkJCQkgICBjb25zdCBjaGFyICppbkxvY2FsZUlELAorCQkJCQkJCQkgICBVQ2hhciAqcmVzdWx0 LAorCQkJCQkJCQkgICBpbnQzMl90IG1heFJlc3VsdFNpemUsCisJCQkJCQkJCSAgIFVFcnJvckNv ZGUgKmVycik7CisJaW50MzJfdAkJKCpjb3VudEF2YWlsYWJsZSkgKHZvaWQpOworCWNvbnN0IGNo YXIgKigqZ2V0QXZhaWxhYmxlKSAoaW50MzJfdCBuKTsKK30gcGdfaWN1X2xpYnJhcnk7CisKKyNk ZWZpbmUgUEdfSUNVX0xJQih4KSAoKHgpLT5pbmZvLmljdS5saWIpCisKKyNlbmRpZgorCiAvKgog ICogV2UgZGVmaW5lIG91ciBvd24gd3JhcHBlciBhcm91bmQgbG9jYWxlX3Qgc28gd2UgY2FuIGtl ZXAgdGhlIHNhbWUKICAqIGZ1bmN0aW9uIHNpZ25hdHVyZXMgZm9yIGFsbCBidWlsZHMsIHdoaWxl IG5vdCBoYXZpbmcgdG8gY3JlYXRlIGEKQEAgLTUzLDcgKzE1NSw4IEBAIHN0cnVjdCBwZ19sb2Nh bGVfc3RydWN0CiAjaWZkZWYgVVNFX0lDVQogCQlzdHJ1Y3QKIAkJewotCQkJVUNvbGxhdG9yCSp1 Y29sOworCQkJVUNvbGxhdG9yCQkqdWNvbDsKKwkJCXBnX2ljdV9saWJyYXJ5CSpsaWI7CiAJCX0J CQlpY3U7CiAjZW5kaWYKIAkJaW50CQkJZHVtbXk7CQkvKiBpbiBjYXNlIHdlIGhhdmUgbmVpdGhl ciBMT0NBTEVfVCBub3IgSUNVICovCkBAIC02MSw4ICsxNjQsMTggQEAgc3RydWN0IHBnX2xvY2Fs ZV9zdHJ1Y3QKIH07CiAKICNpZmRlZiBVU0VfSUNVCi1leHRlcm4gaW50MzJfdCBpY3VfdG9fdWNo YXIoVUNoYXIgKipidWZmX3VjaGFyLCBjb25zdCBjaGFyICpidWZmLCBzaXplX3QgbmJ5dGVzKTsK LWV4dGVybiBpbnQzMl90IGljdV9mcm9tX3VjaGFyKGNoYXIgKipyZXN1bHQsIGNvbnN0IFVDaGFy ICpidWZmX3VjaGFyLCBpbnQzMl90IGxlbl91Y2hhcik7Ci0jZW5kaWYKKwordHlwZWRlZiBwZ19p Y3VfbGlicmFyeSAqKCpnZXRfaWN1X2xpYnJhcnlfaG9va190eXBlKSgKKwljb25zdCBjaGFyICps b2NhbGUsIGNvbnN0IGNoYXIgKnZlcnNpb24pOworCitleHRlcm4gUEdETExJTVBPUlQgZ2V0X2lj dV9saWJyYXJ5X2hvb2tfdHlwZSBnZXRfaWN1X2xpYnJhcnlfaG9vazsKKworZXh0ZXJuIHBnX2lj dV9saWJyYXJ5ICpnZXRfZGVmYXVsdF9pY3VfbGlicmFyeSh2b2lkKTsKK2V4dGVybiBpbnQzMl90 IGljdV90b191Y2hhcihwZ19pY3VfbGlicmFyeSAqbGliLCBVQ2hhciAqKmJ1ZmZfdWNoYXIsCisJ CQkJCQkJY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcyk7CitleHRlcm4gaW50MzJfdCBp Y3VfZnJvbV91Y2hhcihwZ19pY3VfbGlicmFyeSAqbGliLCBjaGFyICoqcmVzdWx0LAorCQkJCQkJ CSAgY29uc3QgVUNoYXIgKmJ1ZmZfdWNoYXIsIGludDMyX3QgbGVuX3VjaGFyKTsKKworI2VuZGlm CQkJCQkJCS8qIFVTRV9JQ1UgKi8KIAogI2VuZGlmCQkJCQkJCS8qIF9QR19MT0NBTEVfSU5URVJO QUxfICovCi0tIAoyLjM0LjEKCg== --=-Wwxe+64KlqA5LB703TXv Content-Disposition: attachment; filename*0=v4-0005-Support-multiple-libc-collation-provider-librarie.pat; filename*1=ch Content-Type: text/x-patch; name="v4-0005-Support-multiple-libc-collation-provider-librarie.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAzNzU2NTNiMzZiZjkyNDhjYWVlMGVjNWZjZTQ3NmVmNjEzZTM5NmM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDE0IERlYyAyMDIyIDE1OjEyOjM1IC0wODAwClN1YmplY3Q6IFtQQVRDSCB2NCA1LzZdIFN1 cHBvcnQgbXVsdGlwbGUgbGliYyBjb2xsYXRpb24gcHJvdmlkZXIgbGlicmFyaWVzLgoKSW50cm9k dWNlIHN0cnVjdHVyZSBwZ19saWJjX2xpYnJhcnksIHdoaWNoIGhvbGRzIHBvaW50ZXJzIHRvIGVh Y2gKcmVxdWlyZWQgbGliYyBtZXRob2QgcmVsYXRlZCB0byBsb2NhbGVfdCwgZW5jb2RpbmcsIGNv bGxhdGlvbiwgb3IKY3R5cGUuIFN0b3JlIHRoaXMgYXMgcGFydCBvZiBwZ19sb2NhbGVfdC4gRWFj aCBjYWxsIHRvIG9uZSBvZiB0aGVzZQpsaWJjIGZ1bmN0aW9ucyBpbnN0ZWFkIGdvZXMgdGhyb3Vn aCB0aGlzIHN0cnVjdHVyZSwgc28gdGhhdCBpdCBjYW4KbW9yZSBlYXNpbHkgYmUgcmVwbGFjZWQg YnkgYSBub24tYnVpbHRpbiBsaWJjIGxpYnJhcnkuCgpPZmZlciBhIGhvb2sgdG8gYWxsb3cgYW4g ZXh0ZW5zaW9uIHRvIGNvbnRyb2wgd2hpY2ggbGliYyBsaWJyYXJ5CmlzIGxvYWRlZC4KCkFkZHMg YSB0ZXN0IG1vZHVsZSB0byB0ZXN0IHRoZSBob29rIGZ1bmN0aW9uYWxpdHkuCgpUT0RPOiBsb29z ZSBlbmRzIGluIHJlZ2V4IGNvZGUgYW5kIHBvc3NpYmx5IG90aGVyIHBsYWNlcyB3aGVyZSBsaWJj CmZ1bmN0aW9ucyBhcmUgY2FsbGVkIGRpcmVjdGx5LgoKQXV0aG9yOiBKZWZmIERhdmlzCi0tLQog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYyAgICAgfCAgMzEgKysrLS0KIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyAgICAgIHwgMTg1ICsrKysrKysrKysrKysrKysr KystLS0tLS0KIHNyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZV9pbnRlcm5hbC5oIHwgIDczICsr KysrKysrKy0KIDMgZmlsZXMgY2hhbmdlZCwgMjM2IGluc2VydGlvbnMoKyksIDUzIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jCmluZGV4IDdmMzE4ZmUyYzcuLjA3OWRk ZWJkNTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYwpAQCAtNjksNyArNjksNiBAQAog I2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxmbG9hdC5oPgogI2luY2x1ZGUgPGxpbWl0cy5o PgotI2luY2x1ZGUgPHdjdHlwZS5oPgogCiAjaWZkZWYgVVNFX0lDVQogI2luY2x1ZGUgPHVuaWNv ZGUvdXN0cmluZy5oPgpAQCAtMTcyOSwxMCArMTcyOCwxNiBAQCBzdHJfdG9sb3dlcihjb25zdCBj aGFyICpidWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKQogCQkJCXsKICNpZmRlZiBIQVZF X0xPQ0FMRV9UCiAJCQkJCWlmIChteWxvY2FsZSkKLQkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJd ID0gdG93bG93ZXJfbCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubGliYy5s dCk7CisJCQkJCXsKKwkJCQkJCXBnX2xpYmNfbGlicmFyeSAqbGliYyA9IFBHX0xJQkNfTElCKG15 bG9jYWxlKTsKKwkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gbGliYy0+Y190b3dsb3dlcl9s KHdvcmtzcGFjZVtjdXJyX2NoYXJdLCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsKKwkJCQkJfQog CQkJCQllbHNlCiAjZW5kaWYKLQkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gdG93bG93ZXIo d29ya3NwYWNlW2N1cnJfY2hhcl0pOworCQkJCQl7CisJCQkJCQlwZ19saWJjX2xpYnJhcnkgKmxp YmMgPSBnZXRfZGVmYXVsdF9saWJjX2xpYnJhcnkoKTsKKwkJCQkJCXdvcmtzcGFjZVtjdXJyX2No YXJdID0gbGliYy0+Y190b3dsb3dlcih3b3Jrc3BhY2VbY3Vycl9jaGFyXSk7CisJCQkJCX0KIAkJ CQl9CiAKIAkJCQkvKgpAQCAtMTg1MiwxMCArMTg1NywxNiBAQCBzdHJfdG91cHBlcihjb25zdCBj aGFyICpidWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKQogCQkJCXsKICNpZmRlZiBIQVZF X0xPQ0FMRV9UCiAJCQkJCWlmIChteWxvY2FsZSkKLQkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJd ID0gdG93dXBwZXJfbCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubGliYy5s dCk7CisJCQkJCXsKKwkJCQkJCXBnX2xpYmNfbGlicmFyeSAqbGliYyA9IFBHX0xJQkNfTElCKG15 bG9jYWxlKTsKKwkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gbGliYy0+Y190b3d1cHBlcl9s KHdvcmtzcGFjZVtjdXJyX2NoYXJdLCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsKKwkJCQkJfQog CQkJCQllbHNlCiAjZW5kaWYKLQkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJdID0gdG93dXBwZXIo d29ya3NwYWNlW2N1cnJfY2hhcl0pOworCQkJCQl7CisJCQkJCQlwZ19saWJjX2xpYnJhcnkgKmxp YmMgPSBnZXRfZGVmYXVsdF9saWJjX2xpYnJhcnkoKTsKKwkJCQkJCXdvcmtzcGFjZVtjdXJyX2No YXJdID0gbGliYy0+Y190b3d1cHBlcih3b3Jrc3BhY2VbY3Vycl9jaGFyXSk7CisJCQkJCX0KIAkJ CQl9CiAKIAkJCQkvKgpAQCAtMTk3NywxOSArMTk4OCwyMSBAQCBzdHJfaW5pdGNhcChjb25zdCBj aGFyICpidWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKQogI2lmZGVmIEhBVkVfTE9DQUxF X1QKIAkJCQkJaWYgKG15bG9jYWxlKQogCQkJCQl7CisJCQkJCQlwZ19saWJjX2xpYnJhcnkgKmxp YmMgPSBQR19MSUJDX0xJQihteWxvY2FsZSk7CiAJCQkJCQlpZiAod2FzYWxudW0pCi0JCQkJCQkJ d29ya3NwYWNlW2N1cnJfY2hhcl0gPSB0b3dsb3dlcl9sKHdvcmtzcGFjZVtjdXJyX2NoYXJdLCBt eWxvY2FsZS0+aW5mby5saWJjLmx0KTsKKwkJCQkJCQl3b3Jrc3BhY2VbY3Vycl9jaGFyXSA9IGxp YmMtPmNfdG93bG93ZXJfbCh3b3Jrc3BhY2VbY3Vycl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubGli Yy5sdCk7CiAJCQkJCQllbHNlCi0JCQkJCQkJd29ya3NwYWNlW2N1cnJfY2hhcl0gPSB0b3d1cHBl cl9sKHdvcmtzcGFjZVtjdXJyX2NoYXJdLCBteWxvY2FsZS0+aW5mby5saWJjLmx0KTsKKwkJCQkJ CQl3b3Jrc3BhY2VbY3Vycl9jaGFyXSA9IGxpYmMtPmNfdG93dXBwZXJfbCh3b3Jrc3BhY2VbY3Vy cl9jaGFyXSwgbXlsb2NhbGUtPmluZm8ubGliYy5sdCk7CiAJCQkJCQl3YXNhbG51bSA9IGlzd2Fs bnVtX2wod29ya3NwYWNlW2N1cnJfY2hhcl0sIG15bG9jYWxlLT5pbmZvLmxpYmMubHQpOwogCQkJ CQl9CiAJCQkJCWVsc2UKICNlbmRpZgogCQkJCQl7CisJCQkJCQlwZ19saWJjX2xpYnJhcnkgKmxp YmMgPSBnZXRfZGVmYXVsdF9saWJjX2xpYnJhcnkoKTsKIAkJCQkJCWlmICh3YXNhbG51bSkKLQkJ CQkJCQl3b3Jrc3BhY2VbY3Vycl9jaGFyXSA9IHRvd2xvd2VyKHdvcmtzcGFjZVtjdXJyX2NoYXJd KTsKKwkJCQkJCQl3b3Jrc3BhY2VbY3Vycl9jaGFyXSA9IGxpYmMtPmNfdG93bG93ZXIod29ya3Nw YWNlW2N1cnJfY2hhcl0pOwogCQkJCQkJZWxzZQotCQkJCQkJCXdvcmtzcGFjZVtjdXJyX2NoYXJd ID0gdG93dXBwZXIod29ya3NwYWNlW2N1cnJfY2hhcl0pOworCQkJCQkJCXdvcmtzcGFjZVtjdXJy X2NoYXJdID0gbGliYy0+Y190b3d1cHBlcih3b3Jrc3BhY2VbY3Vycl9jaGFyXSk7CiAJCQkJCQl3 YXNhbG51bSA9IGlzd2FsbnVtKHdvcmtzcGFjZVtjdXJyX2NoYXJdKTsKIAkJCQkJfQogCQkJCX0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYwppbmRleCA1NTIxZmUxMWE1Li43NTFmYTc5MzFiIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCkBAIC0xMTUsMTkgKzExNSwxOSBAQCBjaGFyCSAg ICpsb2NhbGl6ZWRfZnVsbF9tb250aHNbMTIgKyAxXTsKIC8qCiAgKiBUaGUgcHJlY2lzZSB2ZXJz aW9uIG9mIGEgY29sbGF0aW9uIHByb3ZpZGVyIGxpYnJhcnkgaXMgaW1wb3J0YW50LCBiZWNhdXNl CiAgKiBzdWJ0bGUgY2hhbmdlcyBpbiBjb2xsYXRpb24gYmV0d2VlbiBsaWJyYXJ5IHZlcnNpb25z IGNhbiBjb3JydXB0Ci0gKiBpbmRleGVzLiBUaGlzIGhvb2sgYWxsb3dzIGNvbnRyb2wgb3ZlciBo b3cgY29sbGF0aW9uIHByb3ZpZGVyIGxpYnJhcmllcyBhcmUKLSAqIGxvYWRlZC4KKyAqIGluZGV4 ZXMuIFRoZXNlIGhvb2tzIGFsbG93cyBjb250cm9sIG92ZXIgaG93IGNvbGxhdGlvbiBwcm92aWRl ciBsaWJyYXJpZXMKKyAqIGFyZSBsb2FkZWQuCiAgKgogICogSWYgdGhlIGhvb2sgaXMgbm90IHNl dCwgb3IgaWYgaXQgcmV0dXJucyBOVUxMLCBQb3N0Z3JlcyBjb25zdHJ1Y3RzIHRoZQotICogcGdf aWN1X2xpYnJhcnkgc3RydWN0dXJlIGZyb20gdGhlIHN5bWJvbHMgUG9zdGdyZXMgaXMgbGlua2Vk IHdpdGggYXQgYnVpbGQKLSAqIHRpbWUuCisgKiBwZ19saWJjX2xpYnJhcnkgb3IgcGdfaWN1X2xp YnJhcnkgc3RydWN0dXJlcyBmcm9tIHRoZSBzeW1ib2xzIFBvc3RncmVzIGlzCisgKiBsaW5rZWQg d2l0aCBhdCBidWlsZCB0aW1lLgogICoKLSAqIElmIHRoZSBob29rIGlzIHNldCwgaXQgY2FuIGlu c3RlYWQgY29uc3RydWN0IHRoZSBwZ19pY3VfbGlicmFyeSBzdHJ1Y3R1cmUKLSAqIHVzaW5nIGN1 c3RvbSBsb2dpYy4gT3JkaW5hcmlseSwgdGhpcyBjdXN0b20gbG9naWMgd291bGQgaW52b2x2ZSBm aW5kaW5nIGEKLSAqIHNwZWNpZmljIGtub3duIHZlcnNpb24gb2YgdGhlIGNvbGxhdGlvbiBwcm92 aWRlciBsaWJyYXJ5LCBhbmQgZHluYW1pY2FsbHkKLSAqIGxvYWRpbmcgdGhlIG5lY2Vzc2FyeSBz eW1ib2xzLiBJZiB0aGUgY29sbGF0aW9uIHZlcnNpb24gb2J0YWluZWQgZnJvbSB0aGUKLSAqIGxp YnJhcnkgZG9lcyBub3QgbWF0Y2ggdGhlIGNvbGxhdGlvbiB2ZXJzaW9uIHJlY29yZGVkIGluIHRo ZSBjYXRhbG9nLAotICogUG9zdGdyZXMgd2lsbCBpc3N1ZSBhIFdBUk5JTkcuCisgKiBJZiB0aGUg aG9vayBpcyBzZXQsIGl0IGNhbiBpbnN0ZWFkIGNvbnN0cnVjdCB0aGUgcGdfbGliY19saWJyYXJ5 IG9yCisgKiBwZ19pY3VfbGlicmFyeSBzdHJ1Y3R1cmVzIHVzaW5nIGN1c3RvbSBsb2dpYy4gT3Jk aW5hcmlseSwgdGhpcyBjdXN0b20gbG9naWMKKyAqIHdvdWxkIGludm9sdmUgZmluZGluZyBhIHNw ZWNpZmljIGtub3duIHZlcnNpb24gb2YgdGhlIGNvbGxhdGlvbiBwcm92aWRlcgorICogbGlicmFy eSwgYW5kIGR5bmFtaWNhbGx5IGxvYWRpbmcgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiBJZiB0aGUg Y29sbGF0aW9uCisgKiB2ZXJzaW9uIG9idGFpbmVkIGZyb20gdGhlIGxpYnJhcnkgZG9lcyBub3Qg bWF0Y2ggdGhlIGNvbGxhdGlvbiB2ZXJzaW9uCisgKiByZWNvcmRlZCBpbiB0aGUgY2F0YWxvZywg UG9zdGdyZXMgd2lsbCBpc3N1ZSBhIFdBUk5JTkcuCiAgKgogICogVGhlIHJldHVybmVkIHN0cnVj dHVyZSBtdXN0IGJlIGFsbG9jYXRlZCBpbiBUb3BNZW1vcnlDb250ZXh0LCBhbmQgdGhlCiAgKiBh c3NvY2lhdGVkIHN5bWJvbHMgbXVzdCByZW1haW4gdmFsaWQgcGVybWFuZW50bHkuIEl0J3MgZXhw ZWN0ZWQgdGhhdCB0aGUKQEAgLTEzOSwxMCArMTM5LDEyIEBAIGNoYXIJICAgKmxvY2FsaXplZF9m dWxsX21vbnRoc1sxMiArIDFdOwogICogY29uc2lkZXIgd2hhdCBvdGhlciBpbmZvcm1hdGlvbiBj YW4gYmUgcHJvdmlkZWQgdG8gYWxsb3cgZm9yIGdyZWF0ZXIKICAqIGNvbnRyb2wgb3ZlciB3aGlj aCBsaWJyYXJ5IGlzIGxvYWRlZC4KICAqLworZ2V0X2xpYmNfbGlicmFyeV9ob29rX3R5cGUgZ2V0 X2xpYmNfbGlicmFyeV9ob29rID0gTlVMTDsKICNpZmRlZiBVU0VfSUNVCiBnZXRfaWN1X2xpYnJh cnlfaG9va190eXBlIGdldF9pY3VfbGlicmFyeV9ob29rID0gTlVMTDsKICNlbmRpZgogCitzdGF0 aWMgcGdfbGliY19saWJyYXJ5ICpidWlsdGluX2xpYmNfbGlicmFyeSA9IE5VTEw7CiAjaWZkZWYg VVNFX0lDVQogc3RhdGljIHBnX2ljdV9saWJyYXJ5ICpidWlsdGluX2ljdV9saWJyYXJ5ID0gTlVM TDsKICNlbmRpZgpAQCAtMTczLDYgKzE3NSw3IEBAIHN0YXRpYyBjaGFyICpJc29Mb2NhbGVOYW1l KGNvbnN0IGNoYXIgKik7CiAgKiBEYXRhYmFzZSBkZWZhdWx0IGxvY2FsZS4KICAqLwogc3RhdGlj IHBnX2xvY2FsZV90IGRlZmF1bHRfbG9jYWxlID0gTlVMTDsKK3N0YXRpYyBwZ19saWJjX2xpYnJh cnkgKmRlZmF1bHRfbGliYyA9IE5VTEw7CiAjaWZkZWYgVVNFX0lDVQogc3RhdGljIHBnX2ljdV9s aWJyYXJ5ICpkZWZhdWx0X2ljdSA9IE5VTEw7CiAjZW5kaWYKQEAgLTEzOTIsNyArMTM5NSw3IEBA IGxjX2NvbGxhdGVfaXNfYyhPaWQgY29sbGF0aW9uKQogCiAJCWlmIChyZXN1bHQgPj0gMCkKIAkJ CXJldHVybiAoYm9vbCkgcmVzdWx0OwotCQlsb2NhbGVwdHIgPSBzZXRsb2NhbGUoTENfQ09MTEFU RSwgTlVMTCk7CisJCWxvY2FsZXB0ciA9IGRlZmF1bHRfbGliYy0+Y19zZXRsb2NhbGUoTENfQ09M TEFURSwgTlVMTCk7CiAJCWlmICghbG9jYWxlcHRyKQogCQkJZWxvZyhFUlJPUiwgImludmFsaWQg TENfQ09MTEFURSBzZXR0aW5nIik7CiAKQEAgLTE0NDUsNyArMTQ0OCw3IEBAIGxjX2N0eXBlX2lz X2MoT2lkIGNvbGxhdGlvbikKIAogCQlpZiAocmVzdWx0ID49IDApCiAJCQlyZXR1cm4gKGJvb2wp IHJlc3VsdDsKLQkJbG9jYWxlcHRyID0gc2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKTsKKwkJbG9j YWxlcHRyID0gZGVmYXVsdF9saWJjLT5jX3NldGxvY2FsZShMQ19DVFlQRSwgTlVMTCk7CiAJCWlm ICghbG9jYWxlcHRyKQogCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTENfQ1RZUEUgc2V0dGluZyIp OwogCkBAIC0xNTAzLDYgKzE1MDYsNzUgQEAgcmVwb3J0X25ld2xvY2FsZV9mYWlsdXJlKGNvbnN0 IGNoYXIgKmxvY2FsZW5hbWUpCiB9CiAjZW5kaWYJCQkJCQkJLyogSEFWRV9MT0NBTEVfVCAqLwog CitzdGF0aWMgcGdfbGliY19saWJyYXJ5ICoKK2dldF9idWlsdGluX2xpYmNfbGlicmFyeSgpCit7 CisJcGdfbGliY19saWJyYXJ5ICpsaWIgPSBOVUxMOworCisJaWYgKGJ1aWx0aW5fbGliY19saWJy YXJ5ICE9IE5VTEwpCisJCXJldHVybiBidWlsdGluX2xpYmNfbGlicmFyeTsKKworCWxpYiA9IE1l bW9yeUNvbnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LCBzaXplb2YocGdfbGliY19saWJyYXJ5 KSk7CisjaWYgZGVmaW5lZChfX0dMSUJDX18pCisJbGliLT5saWJjX3ZlcnNpb24gPSBnbnVfZ2V0 X2xpYmNfdmVyc2lvbjsKKyNlbHNlCisJbGliLT5saWJjX3ZlcnNpb24gPSBOVUxMOworI2VuZGlm CisJbGliLT5jX3NldGxvY2FsZSA9IHNldGxvY2FsZTsKKyNpZmRlZiBIQVZFX0xPQ0FMRV9UCisj aWZuZGVmIFdJTjMyCisJbGliLT5jX25ld2xvY2FsZSA9IG5ld2xvY2FsZTsKKwlsaWItPmNfZnJl ZWxvY2FsZSA9IGZyZWVsb2NhbGU7CisJbGliLT5jX3VzZWxvY2FsZSA9IHVzZWxvY2FsZTsKKyNl bHNlCisJbGliLT5fY3JlYXRlX2xvY2FsZSA9IF9jcmVhdGVfbG9jYWxlOworI2VuZGlmCisjZW5k aWYKKwlsaWItPmNfd2NzdG9tYnMgPSB3Y3N0b21iczsKKwlsaWItPmNfbWJzdG93Y3MgPSBtYnN0 b3djczsKKyNpZmRlZiBIQVZFX0xPQ0FMRV9UCisjaWZkZWYgSEFWRV9XQ1NUT01CU19MCisJbGli LT5jX3djc3RvbWJzX2wgPSB3Y3N0b21ic19sOworI2VuZGlmCisjaWZkZWYgSEFWRV9NQlNUT1dD U19MCisJbGliLT5jX21ic3Rvd2NzX2wgPSBtYnN0b3djc19sOworI2VuZGlmCisjZW5kaWYKKwls aWItPmNfc3RyY29sbCA9IHN0cmNvbGw7CisJbGliLT5jX3djc2NvbGwgPSB3Y3Njb2xsOworCWxp Yi0+Y19zdHJ4ZnJtID0gc3RyeGZybTsKKyNpZmRlZiBIQVZFX0xPQ0FMRV9UCisJbGliLT5jX3N0 cmNvbGxfbCA9IHN0cmNvbGxfbDsKKwlsaWItPmNfd2NzY29sbF9sID0gd2NzY29sbF9sOworCWxp Yi0+Y19zdHJ4ZnJtX2wgPSBzdHJ4ZnJtX2w7CisjZW5kaWYKKwlsaWItPmNfaXN3YWxudW0gPSBp c3dhbG51bTsKKwlsaWItPmNfdG93bG93ZXIgPSB0b3dsb3dlcjsKKwlsaWItPmNfdG93dXBwZXIg PSB0b3d1cHBlcjsKKyNpZmRlZiBIQVZFX0xPQ0FMRV9UCisJbGliLT5jX2lzd2FsbnVtX2wgPSBp c3dhbG51bV9sOworCWxpYi0+Y190b3dsb3dlcl9sID0gdG93bG93ZXJfbDsKKwlsaWItPmNfdG93 dXBwZXJfbCA9IHRvd3VwcGVyX2w7CisjZW5kaWYKKworCWJ1aWx0aW5fbGliY19saWJyYXJ5ID0g bGliOworCXJldHVybiBsaWI7Cit9CisKK3N0YXRpYyBwZ19saWJjX2xpYnJhcnkgKgorZ2V0X2xp YmNfbGlicmFyeShjb25zdCBjaGFyICpjb2xsYXRlLCBjb25zdCBjaGFyICpjdHlwZSwgY29uc3Qg Y2hhciAqdmVyc2lvbikKK3sKKwlwZ19saWJjX2xpYnJhcnkgKmxpYiA9IE5VTEw7CisKKwlpZiAo Z2V0X2xpYmNfbGlicmFyeV9ob29rICE9IE5VTEwpCisJCWxpYiA9IGdldF9saWJjX2xpYnJhcnlf aG9vayhjb2xsYXRlLCBjdHlwZSwgdmVyc2lvbik7CisKKwlpZighbGliKQorCQlsaWIgPSBnZXRf YnVpbHRpbl9saWJjX2xpYnJhcnkoKTsKKworCXJldHVybiBsaWI7Cit9CisKICNpZmRlZiBVU0Vf SUNVCiBzdGF0aWMgcGdfaWN1X2xpYnJhcnkgKgogZ2V0X2J1aWx0aW5faWN1X2xpYnJhcnkoKQpA QCAtMTYxNCw2ICsxNjg2LDcgQEAgcGdfbmV3bG9jYWxlKGNoYXIgcHJvdmlkZXIsIGJvb2wgZGV0 ZXJtaW5pc3RpYywgY29uc3QgY2hhciAqY29sbGF0ZSwKIAlpZiAocHJvdmlkZXIgPT0gQ09MTFBS T1ZJREVSX0xJQkMpCiAJewogI2lmZGVmIEhBVkVfTE9DQUxFX1QKKwkJcGdfbGliY19saWJyYXJ5 ICpsaWJjID0gZ2V0X2xpYmNfbGlicmFyeShjb2xsYXRlLCBjdHlwZSwgdmVyc2lvbik7CiAJCWxv Y2FsZV90ICAgICAgICBsb2M7CiAKIAkJLyogbmV3bG9jYWxlJ3MgcmVzdWx0IG1heSBiZSBsZWFr ZWQgaWYgd2UgZW5jb3VudGVyIGFuIGVycm9yICovCkBAIC0xNjIzLDEwICsxNjk2LDEwIEBAIHBn X25ld2xvY2FsZShjaGFyIHByb3ZpZGVyLCBib29sIGRldGVybWluaXN0aWMsIGNvbnN0IGNoYXIg KmNvbGxhdGUsCiAJCQkvKiBOb3JtYWwgY2FzZSB3aGVyZSB0aGV5J3JlIHRoZSBzYW1lICovCiAJ CQllcnJubyA9IDA7CiAjaWZuZGVmIFdJTjMyCi0JCQlsb2MgPSBuZXdsb2NhbGUoTENfQ09MTEFU RV9NQVNLIHwgTENfQ1RZUEVfTUFTSywgY29sbGF0ZSwKKwkJCWxvYyA9IGxpYmMtPmNfbmV3bG9j YWxlKExDX0NPTExBVEVfTUFTSyB8IExDX0NUWVBFX01BU0ssIGNvbGxhdGUsCiAJCQkJCQkJTlVM TCk7CiAjZWxzZQotCQkJbG9jID0gX2NyZWF0ZV9sb2NhbGUoTENfQUxMLCBjb2xsYXRlKTsKKwkJ CWxvYyA9IGxpYmMtPl9jcmVhdGVfbG9jYWxlKExDX0FMTCwgY29sbGF0ZSk7CiAjZW5kaWYKIAkJ CWlmICghbG9jKQogCQkJCXJlcG9ydF9uZXdsb2NhbGVfZmFpbHVyZShjb2xsYXRlKTsKQEAgLTE2 MzgsMTEgKzE3MTEsMTEgQEAgcGdfbmV3bG9jYWxlKGNoYXIgcHJvdmlkZXIsIGJvb2wgZGV0ZXJt aW5pc3RpYywgY29uc3QgY2hhciAqY29sbGF0ZSwKIAkJCWxvY2FsZV90CWxvYzE7CiAKIAkJCWVy cm5vID0gMDsKLQkJCWxvYzEgPSBuZXdsb2NhbGUoTENfQ09MTEFURV9NQVNLLCBjb2xsYXRlLCBO VUxMKTsKKwkJCWxvYzEgPSBsaWJjLT5jX25ld2xvY2FsZShMQ19DT0xMQVRFX01BU0ssIGNvbGxh dGUsIE5VTEwpOwogCQkJaWYgKCFsb2MxKQogCQkJCXJlcG9ydF9uZXdsb2NhbGVfZmFpbHVyZShj b2xsYXRlKTsKIAkJCWVycm5vID0gMDsKLQkJCWxvYyA9IG5ld2xvY2FsZShMQ19DVFlQRV9NQVNL LCBjdHlwZSwgbG9jMSk7CisJCQlsb2MgPSBsaWJjLT5jX25ld2xvY2FsZShMQ19DVFlQRV9NQVNL LCBjdHlwZSwgbG9jMSk7CiAJCQlpZiAoIWxvYykKIAkJCQlyZXBvcnRfbmV3bG9jYWxlX2ZhaWx1 cmUoY3R5cGUpOwogI2Vsc2UKQEAgLTE2NTksNiArMTczMiw3IEBAIHBnX25ld2xvY2FsZShjaGFy IHByb3ZpZGVyLCBib29sIGRldGVybWluaXN0aWMsIGNvbnN0IGNoYXIgKmNvbGxhdGUsCiAJCX0K IAogCQlyZXN1bHQtPmluZm8ubGliYy5sdCA9IGxvYzsKKwkJcmVzdWx0LT5pbmZvLmxpYmMubGli ID0gbGliYzsKICNlbHNlCQkJCQkJCS8qIG5vdCBIQVZFX0xPQ0FMRV9UICovCiAJCS8qIHBsYXRm b3JtIHRoYXQgZG9lc24ndCBzdXBwb3J0IGxvY2FsZV90ICovCiAJCWVyZXBvcnQoRVJST1IsCkBA IC0xNzEwLDYgKzE3ODQsMTIgQEAgcGdfbG9jYWxlX2RldGVybWluaXN0aWMocGdfbG9jYWxlX3Qg bG9jYWxlKQogCQlyZXR1cm4gbG9jYWxlLT5kZXRlcm1pbmlzdGljOwogfQogCitwZ19saWJjX2xp YnJhcnkgKgorZ2V0X2RlZmF1bHRfbGliY19saWJyYXJ5KCkKK3sKKwlyZXR1cm4gZGVmYXVsdF9s aWJjOworfQorCiAjaWZkZWYgVVNFX0lDVQogcGdfaWN1X2xpYnJhcnkgKgogZ2V0X2RlZmF1bHRf aWN1X2xpYnJhcnkoKQpAQCAtMTcyNSw2ICsxODA1LDE5IEBAIHZvaWQKIGluaXRfZGVmYXVsdF9s b2NhbGUoY2hhciBwcm92aWRlciwgY29uc3QgY2hhciAqY29sbGF0ZSwgY29uc3QgY2hhciAqY3R5 cGUsCiAJCQkJCWNvbnN0IGNoYXIgKmljdWxvY2FsZSwgY29uc3QgY2hhciAqdmVyc2lvbikKIHsK KwlkZWZhdWx0X2xpYmMgPSBnZXRfbGliY19saWJyYXJ5KGNvbGxhdGUsIGN0eXBlLCB2ZXJzaW9u KTsKKworCS8qCisJICogSWYgaXQncyB0aGUgYnVpbHRpbiBsaWJjLCBwZ19wZXJtX3NldGxvY2Fs ZSgpIHdpbGwgaGFuZGxlCisJICogc2V0bG9jYWxlKCkuIE90aGVyd2lzZSwgaXQgbXVzdCBiZSBk b25lIGhlcmUgc28gdGhhdCB0aGUgY29sbGF0ZSBhbmQKKwkgKiBjdHlwZSB0YWtlIGVmZmVjdC4K KwkgKi8KKwlpZiAoZGVmYXVsdF9saWJjICE9IGJ1aWx0aW5fbGliY19saWJyYXJ5KQorCXsKKwkJ ZGVmYXVsdF9saWJjLT5jX3NldGxvY2FsZShMQ19DT0xMQVRFLCBjb2xsYXRlKTsKKwkJZGVmYXVs dF9saWJjLT5jX3NldGxvY2FsZShMQ19DVFlQRSwgY3R5cGUpOworCX0KKwogI2lmZGVmIFVTRV9J Q1UKIAlkZWZhdWx0X2ljdSA9IGdldF9pY3VfbGlicmFyeShpY3Vsb2NhbGUsIHZlcnNpb24pOwog I2VuZGlmCkBAIC0xOTE0LDE4ICsyMDA3LDIxIEBAIGdldF9jb2xsYXRpb25fYWN0dWFsX3ZlcnNp b24oY2hhciBjb2xscHJvdmlkZXIsIGNvbnN0IGNoYXIgKmNvbGxjb2xsYXRlKQogCQkJcGdfc3Ry Y2FzZWNtcCgiUE9TSVgiLCBjb2xsY29sbGF0ZSkgIT0gMCkKIAl7CiAjaWYgZGVmaW5lZChfX0dM SUJDX18pCisJCXBnX2xpYmNfbGlicmFyeSAqbGliYyA9IGdldF9saWJjX2xpYnJhcnkoY29sbGNv bGxhdGUsIE5VTEwsIE5VTEwpOwogCQkvKiBVc2UgdGhlIGdsaWJjIHZlcnNpb24gYmVjYXVzZSB3 ZSBkb24ndCBoYXZlIGFueXRoaW5nIGJldHRlci4gKi8KLQkJY29sbHZlcnNpb24gPSBwc3RyZHVw KGdudV9nZXRfbGliY192ZXJzaW9uKCkpOworCQlpZiAobGliYy0+bGliY192ZXJzaW9uICE9IE5V TEwpCisJCQljb2xsdmVyc2lvbiA9IHBzdHJkdXAobGliYy0+bGliY192ZXJzaW9uKCkpOwogI2Vs aWYgZGVmaW5lZChMQ19WRVJTSU9OX01BU0spCisJCXBnX2xpYmNfbGlicmFyeSAqbGliYyA9IGdl dF9saWJjX2xpYnJhcnkoY29sbGNvbGxhdGUsIE5VTEwsIE5VTEwpOwogCQlsb2NhbGVfdAlsb2M7 CiAKIAkJLyogTG9vayB1cCBGcmVlQlNEIGNvbGxhdGlvbiB2ZXJzaW9uLiAqLwotCQlsb2MgPSBu ZXdsb2NhbGUoTENfQ09MTEFURSwgY29sbGNvbGxhdGUsIE5VTEwpOworCQlsb2MgPSBsaWJjLT5j X25ld2xvY2FsZShMQ19DT0xMQVRFLCBjb2xsY29sbGF0ZSwgTlVMTCk7CiAJCWlmIChsb2MpCiAJ CXsKIAkJCWNvbGx2ZXJzaW9uID0KIAkJCQlwc3RyZHVwKHF1ZXJ5bG9jYWxlKExDX0NPTExBVEVf TUFTSyB8IExDX1ZFUlNJT05fTUFTSywgbG9jKSk7Ci0JCQlmcmVlbG9jYWxlKGxvYyk7CisJCQls aWJjLT5jX2ZyZWVsb2NhbGUobG9jKTsKIAkJfQogCQllbHNlCiAJCQllcmVwb3J0KEVSUk9SLApA QCAtMjAzMSwxMCArMjEyNywxNCBAQCBwZ19zdHJuY29sbF9saWJjX3dpbjMyX3V0ZjgoY29uc3Qg Y2hhciAqYXJnMSwgc2l6ZV90IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIsCiAJZXJybm8gPSAwOwog I2lmZGVmIEhBVkVfTE9DQUxFX1QKIAlpZiAobG9jYWxlKQotCQlyZXN1bHQgPSB3Y3Njb2xsX2wo KExQV1NUUikgYTFwLCAoTFBXU1RSKSBhMnAsIGxvY2FsZS0+aW5mby5saWJjLmx0KTsKKwl7CisJ CXBnX2xpYmNfbGlicmFyeSAqbGliYyA9IFBHX0xJQkNfTElCKGxvY2FsZSk7CisJCXJlc3VsdCA9 IGxpYmMtPmNfd2NzY29sbF9sKChMUFdTVFIpIGExcCwgKExQV1NUUikgYTJwLCBsb2NhbGUtPmlu Zm8ubGliYy5sdCk7CisJfQogCWVsc2UKICNlbmRpZgotCQlyZXN1bHQgPSB3Y3Njb2xsKChMUFdT VFIpIGExcCwgKExQV1NUUikgYTJwKTsKKwkJcmVzdWx0ID0gZGVmYXVsdF9saWJjLT5jX3djc2Nv bGwoKExQV1NUUikgYTFwLCAoTFBXU1RSKSBhMnApOworCiAJaWYgKHJlc3VsdCA9PSAyMTQ3NDgz NjQ3KQkvKiBfTkxTQ01QRVJST1I7IG1pc3NpbmcgZnJvbSBtaW5ndwogCQkJCQkJCQkgKiBoZWFk ZXJzICovCiAJCWVyZXBvcnQoRVJST1IsCkBAIC0yMDYwLDcgKzIxNjAsNiBAQCBzdGF0aWMgaW50 CiBwZ19zdHJjb2xsX2xpYmMoY29uc3QgY2hhciAqYXJnMSwgY29uc3QgY2hhciAqYXJnMiwgcGdf bG9jYWxlX3QgbG9jYWxlKQogewogCWludCByZXN1bHQ7Ci0KIAlBc3NlcnQoIWxvY2FsZSB8fCBs b2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKTsKICNpZmRlZiBXSU4zMgogCWlm IChHZXREYXRhYmFzZUVuY29kaW5nKCkgPT0gUEdfVVRGOCkKQEAgLTIwNzQsMTQgKzIxNzMsMTYg QEAgcGdfc3RyY29sbF9saWJjKGNvbnN0IGNoYXIgKmFyZzEsIGNvbnN0IGNoYXIgKmFyZzIsIHBn X2xvY2FsZV90IGxvY2FsZSkKIAlpZiAobG9jYWxlKQogCXsKICNpZmRlZiBIQVZFX0xPQ0FMRV9U Ci0JCXJlc3VsdCA9IHN0cmNvbGxfbChhcmcxLCBhcmcyLCBsb2NhbGUtPmluZm8ubGliYy5sdCk7 CisJCXBnX2xpYmNfbGlicmFyeSAqbGliYyA9IFBHX0xJQkNfTElCKGxvY2FsZSk7CisKKwkJcmVz dWx0ID0gbGliYy0+Y19zdHJjb2xsX2woYXJnMSwgYXJnMiwgbG9jYWxlLT5pbmZvLmxpYmMubHQp OwogI2Vsc2UKIAkJLyogc2hvdWxkbid0IGhhcHBlbiAqLwogCQllbG9nKEVSUk9SLCAidW5zdXBw b3J0ZWQgY29sbHByb3ZpZGVyOiAlYyIsIGxvY2FsZS0+cHJvdmlkZXIpOwogI2VuZGlmCiAJfQog CWVsc2UKLQkJcmVzdWx0ID0gc3RyY29sbChhcmcxLCBhcmcyKTsKKwkJcmVzdWx0ID0gZGVmYXVs dF9saWJjLT5jX3N0cmNvbGwoYXJnMSwgYXJnMik7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAt MjMyNywxNyArMjQyOCwxNSBAQCBwZ19zdHJ4ZnJtX2xpYmMoY2hhciAqZGVzdCwgY29uc3QgY2hh ciAqc3JjLCBzaXplX3QgZGVzdHNpemUsCiB7CiAJQXNzZXJ0KCFsb2NhbGUgfHwgbG9jYWxlLT5w cm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQyk7CiAKLSNpZmRlZiBUUlVTVF9TVFhGUk0KICNp ZmRlZiBIQVZFX0xPQ0FMRV9UCiAJaWYgKGxvY2FsZSkKLQkJcmV0dXJuIHN0cnhmcm1fbChkZXN0 LCBzcmMsIGRlc3RzaXplLCBsb2NhbGUtPmluZm8ubGliYy5sdCk7CisJeworCQlwZ19saWJjX2xp YnJhcnkgKmxpYmMgPSBQR19MSUJDX0xJQihsb2NhbGUpOworCQlyZXR1cm4gbGliYy0+Y19zdHJ4 ZnJtX2woZGVzdCwgc3JjLCBkZXN0c2l6ZSwgbG9jYWxlLT5pbmZvLmxpYmMubHQpOworCX0KIAll bHNlCiAjZW5kaWYKLQkJcmV0dXJuIHN0cnhmcm0oZGVzdCwgc3JjLCBkZXN0c2l6ZSk7Ci0jZWxz ZQotCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KLQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgY29s bHByb3ZpZGVyOiAlYyIsIGxvY2FsZS0+cHJvdmlkZXIpOwotI2VuZGlmCisJCXJldHVybiBkZWZh dWx0X2xpYmMtPmNfc3RyeGZybShkZXN0LCBzcmMsIGRlc3RzaXplKTsKIH0KIAogc3RhdGljIHNp emVfdApAQCAtMzAxMCwyMSArMzEwOSwyMyBAQCB3Y2hhcjJjaGFyKGNoYXIgKnRvLCBjb25zdCB3 Y2hhcl90ICpmcm9tLCBzaXplX3QgdG9sZW4sIHBnX2xvY2FsZV90IGxvY2FsZSkKIAlpZiAobG9j YWxlID09IChwZ19sb2NhbGVfdCkgMCkKIAl7CiAJCS8qIFVzZSB3Y3N0b21icyBkaXJlY3RseSBm b3IgdGhlIGRlZmF1bHQgbG9jYWxlICovCi0JCXJlc3VsdCA9IHdjc3RvbWJzKHRvLCBmcm9tLCB0 b2xlbik7CisJCXJlc3VsdCA9IGRlZmF1bHRfbGliYy0+Y193Y3N0b21icyh0bywgZnJvbSwgdG9s ZW4pOwogCX0KIAllbHNlCiAJewogI2lmZGVmIEhBVkVfTE9DQUxFX1QKKwkJcGdfbGliY19saWJy YXJ5ICpsaWJjID0gUEdfTElCQ19MSUIobG9jYWxlKTsKKwogI2lmZGVmIEhBVkVfV0NTVE9NQlNf TAogCQkvKiBVc2Ugd2NzdG9tYnNfbCBmb3Igbm9uZGVmYXVsdCBsb2NhbGVzICovCi0JCXJlc3Vs dCA9IHdjc3RvbWJzX2wodG8sIGZyb20sIHRvbGVuLCBsb2NhbGUtPmluZm8ubGliYy5sdCk7CisJ CXJlc3VsdCA9IGxpYmMtPmNfd2NzdG9tYnNfbCh0bywgZnJvbSwgdG9sZW4sIGxvY2FsZS0+aW5m by5saWJjLmx0KTsKICNlbHNlCQkJCQkJCS8qICFIQVZFX1dDU1RPTUJTX0wgKi8KIAkJLyogV2Ug aGF2ZSB0byB0ZW1wb3JhcmlseSBzZXQgdGhlIGxvY2FsZSBhcyBjdXJyZW50IC4uLiB1Z2ggKi8K LQkJbG9jYWxlX3QJc2F2ZV9sb2NhbGUgPSB1c2Vsb2NhbGUobG9jYWxlLT5pbmZvLmxpYmMubHQp OworCQlsb2NhbGVfdAlzYXZlX2xvY2FsZSA9IGxpYmMtPmNfdXNlbG9jYWxlKGxvY2FsZS0+aW5m by5saWJjLmx0KTsKIAotCQlyZXN1bHQgPSB3Y3N0b21icyh0bywgZnJvbSwgdG9sZW4pOworCQly ZXN1bHQgPSBsaWJjLT5jX3djc3RvbWJzKHRvLCBmcm9tLCB0b2xlbik7CiAKLQkJdXNlbG9jYWxl KHNhdmVfbG9jYWxlKTsKKwkJbGliYy0+Y191c2Vsb2NhbGUoc2F2ZV9sb2NhbGUpOwogI2VuZGlm CQkJCQkJCS8qIEhBVkVfV0NTVE9NQlNfTCAqLwogI2Vsc2UJCQkJCQkJLyogIUhBVkVfTE9DQUxF X1QgKi8KIAkJLyogQ2FuJ3QgaGF2ZSBsb2NhbGUgIT0gMCB3aXRob3V0IEhBVkVfTE9DQUxFX1Qg Ki8KQEAgLTMwODcsMjEgKzMxODgsMjMgQEAgY2hhcjJ3Y2hhcih3Y2hhcl90ICp0bywgc2l6ZV90 IHRvbGVuLCBjb25zdCBjaGFyICpmcm9tLCBzaXplX3QgZnJvbWxlbiwKIAkJaWYgKGxvY2FsZSA9 PSAocGdfbG9jYWxlX3QpIDApCiAJCXsKIAkJCS8qIFVzZSBtYnN0b3djcyBkaXJlY3RseSBmb3Ig dGhlIGRlZmF1bHQgbG9jYWxlICovCi0JCQlyZXN1bHQgPSBtYnN0b3djcyh0bywgc3RyLCB0b2xl bik7CisJCQlyZXN1bHQgPSBkZWZhdWx0X2xpYmMtPmNfbWJzdG93Y3ModG8sIHN0ciwgdG9sZW4p OwogCQl9CiAJCWVsc2UKIAkJewogI2lmZGVmIEhBVkVfTE9DQUxFX1QKKwkJCXBnX2xpYmNfbGli cmFyeSAqbGliYyA9IFBHX0xJQkNfTElCKGxvY2FsZSk7CisKICNpZmRlZiBIQVZFX01CU1RPV0NT X0wKIAkJCS8qIFVzZSBtYnN0b3djc19sIGZvciBub25kZWZhdWx0IGxvY2FsZXMgKi8KLQkJCXJl c3VsdCA9IG1ic3Rvd2NzX2wodG8sIHN0ciwgdG9sZW4sIGxvY2FsZS0+aW5mby5saWJjLmx0KTsK KwkJCXJlc3VsdCA9IGxpYmMtPmNfbWJzdG93Y3NfbCh0bywgc3RyLCB0b2xlbiwgbG9jYWxlLT5p bmZvLmxpYmMubHQpOwogI2Vsc2UJCQkJCQkJLyogIUhBVkVfTUJTVE9XQ1NfTCAqLwogCQkJLyog V2UgaGF2ZSB0byB0ZW1wb3JhcmlseSBzZXQgdGhlIGxvY2FsZSBhcyBjdXJyZW50IC4uLiB1Z2gg Ki8KLQkJCWxvY2FsZV90CXNhdmVfbG9jYWxlID0gdXNlbG9jYWxlKGxvY2FsZS0+aW5mby5saWJj Lmx0KTsKKwkJCWxvY2FsZV90CXNhdmVfbG9jYWxlID0gbGliYy0+Y191c2Vsb2NhbGUobG9jYWxl LT5pbmZvLmxpYmMubHQpOwogCi0JCQlyZXN1bHQgPSBtYnN0b3djcyh0bywgc3RyLCB0b2xlbik7 CisJCQlyZXN1bHQgPSBsaWJjLT5jX21ic3Rvd2NzKHRvLCBzdHIsIHRvbGVuKTsKIAotCQkJdXNl bG9jYWxlKHNhdmVfbG9jYWxlKTsKKwkJCWxpYmMtPmNfdXNlbG9jYWxlKHNhdmVfbG9jYWxlKTsK ICNlbmRpZgkJCQkJCQkvKiBIQVZFX01CU1RPV0NTX0wgKi8KICNlbHNlCQkJCQkJCS8qICFIQVZF X0xPQ0FMRV9UICovCiAJCQkvKiBDYW4ndCBoYXZlIGxvY2FsZSAhPSAwIHdpdGhvdXQgSEFWRV9M T0NBTEVfVCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlX2ludGVy bmFsLmggYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaAppbmRleCBhZmI2 YzI0ZDY0Li5iYzZlOTMwNTgwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2Nh bGVfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwu aApAQCAtMTMsNiArMTMsOSBAQAogI2lmbmRlZiBfUEdfTE9DQUxFX0lOVEVSTkFMXwogI2RlZmlu ZSBfUEdfTE9DQUxFX0lOVEVSTkFMXwogCisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDx3 Y3R5cGUuaD4KKwogI2lmZGVmIFVTRV9JQ1UKICNpbmNsdWRlIDx1bmljb2RlL3VicmsuaD4KICNp bmNsdWRlIDx1bmljb2RlL3VjbnYuaD4KQEAgLTMyLDYgKzM1LDYzIEBACiAjZW5kaWYKICNlbmRp ZgogCit0eXBlZGVmIHN0cnVjdCBwZ19saWJjX2xpYnJhcnkKK3sKKwkvKiB2ZXJzaW9uICovCisJ Y29uc3QgY2hhciAqKCpsaWJjX3ZlcnNpb24pICh2b2lkKTsKKworCS8qIGxvY2FsZSAqLworCWNo YXIgKigqY19zZXRsb2NhbGUpIChpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxvY2FsZSk7Cisj aWZkZWYgSEFWRV9MT0NBTEVfVAorI2lmbmRlZiBXSU4zMgorCWxvY2FsZV90ICgqY19uZXdsb2Nh bGUpIChpbnQgY2F0ZWdvcnlfbWFzaywgY29uc3QgY2hhciAqbG9jYWxlLAorCQkJCQkJICAgbG9j YWxlX3QgYmFzZSk7CisJdm9pZCAoKmNfZnJlZWxvY2FsZSkgKGxvY2FsZV90IGxvY29iaik7CisJ bG9jYWxlX3QgKCpjX3VzZWxvY2FsZSkgKGxvY2FsZV90IG5ld2xvYyk7CisjZWxzZQorCV9sb2Nh bGVfdCAoKl9jcmVhdGVfbG9jYWxlKSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUp OworI2VuZGlmCisjZW5kaWYKKworCS8qIGVuY29kaW5nICovCisJc2l6ZV90ICgqY193Y3N0b21i cykgKGNoYXIgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYywgc2l6ZV90IG4pOworCXNpemVfdCAo KmNfbWJzdG93Y3MpICh3Y2hhcl90ICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBuKTsK KyNpZmRlZiBIQVZFX0xPQ0FMRV9UCisjaWZkZWYgSEFWRV9XQ1NUT01CU19MCisJc2l6ZV90ICgq Y193Y3N0b21ic19sKSAoY2hhciAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbiwK KwkJCQkJCSAgbG9jYWxlX3QgbG9jKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTUJTVE9XQ1NfTAor CXNpemVfdCAoKmNfbWJzdG93Y3NfbCkgKHdjaGFyX3QgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywg c2l6ZV90IG4sCisJCQkJCQkgIGxvY2FsZV90IGxvYyk7CisjZW5kaWYKKyNlbmRpZgorCisJLyog Y29sbGF0aW9uICovCisJaW50ICgqY19zdHJjb2xsKSAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNo YXIgKnMyKTsKKwlpbnQgKCpjX3djc2NvbGwpIChjb25zdCB3Y2hhcl90ICp3czEsIGNvbnN0IHdj aGFyX3QgKndzMik7CisJc2l6ZV90ICgqY19zdHJ4ZnJtKSAoY2hhciAqczEsIGNvbnN0IGNoYXIg KiBzMiwgc2l6ZV90IG4pOworI2lmZGVmIEhBVkVfTE9DQUxFX1QKKwlpbnQgKCpjX3N0cmNvbGxf bCkgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgbG9jYWxlX3QgbG9jYWxlKTsKKwlp bnQgKCpjX3djc2NvbGxfbCkgKGNvbnN0IHdjaGFyX3QgKndzMSwgY29uc3Qgd2NoYXJfdCAqd3My LAorCQkJCQkgIGxvY2FsZV90IGxvY2FsZSk7CisJc2l6ZV90ICgqY19zdHJ4ZnJtX2wpIChjaGFy ICpzMSwgY29uc3QgY2hhciAqIHMyLCBzaXplX3QgbiwKKwkJCQkJCSBsb2NhbGVfdCBsb2NhbGUp OworI2VuZGlmCisKKwkvKiBjdHlwZSAqLworCWludCAoKmNfaXN3YWxudW0pICh3aW50X3Qgd2Mp OworCXdpbnRfdCAoKmNfdG93bG93ZXIpICh3aW50X3Qgd2MpOworCXdpbnRfdCAoKmNfdG93dXBw ZXIpICh3aW50X3Qgd2MpOworI2lmZGVmIEhBVkVfTE9DQUxFX1QKKwlpbnQgKCpjX2lzd2FsbnVt X2wpICh3aW50X3Qgd2MsIGxvY2FsZV90IGxvY2FsZSk7CisJd2ludF90ICgqY190b3dsb3dlcl9s KSAod2ludF90IHdjLCBsb2NhbGVfdCBsb2NhbGUpOworCXdpbnRfdCAoKmNfdG93dXBwZXJfbCkg KHdpbnRfdCB3YywgbG9jYWxlX3QgbG9jYWxlKTsKKyNlbmRpZgorfSBwZ19saWJjX2xpYnJhcnk7 CisKKyNkZWZpbmUgUEdfTElCQ19MSUIoeCkgKCh4KS0+aW5mby5saWJjLmxpYikKKwogI2lmZGVm IFVTRV9JQ1UKIC8qCiAgKiBBbiBJQ1UgbGlicmFyeSB2ZXJzaW9uIHRoYXQgd2UncmUgZWl0aGVy IGxpbmtlZCBhZ2FpbnN0IG9yIGhhdmUgbG9hZGVkIGF0CkBAIC0xNDYsMTIgKzIwNiwxMyBAQCBz dHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdAogCWNoYXIJICAgKmN0eXBlOwogCXVuaW9uCiAJewotI2lm ZGVmIEhBVkVfTE9DQUxFX1QKIAkJc3RydWN0CiAJCXsKKyNpZmRlZiBIQVZFX0xPQ0FMRV9UCiAJ CQlsb2NhbGVfdAlsdDsKLQkJfQkJCWxpYmM7CiAjZW5kaWYKKwkJCXBnX2xpYmNfbGlicmFyeSAq bGliOworCQl9CQkJbGliYzsKICNpZmRlZiBVU0VfSUNVCiAJCXN0cnVjdAogCQl7CkBAIC0xNTks MTAgKzIyMCwxNiBAQCBzdHJ1Y3QgcGdfbG9jYWxlX3N0cnVjdAogCQkJcGdfaWN1X2xpYnJhcnkJ KmxpYjsKIAkJfQkJCWljdTsKICNlbmRpZgotCQlpbnQJCQlkdW1teTsJCS8qIGluIGNhc2Ugd2Ug aGF2ZSBuZWl0aGVyIExPQ0FMRV9UIG5vciBJQ1UgKi8KIAl9CQkJaW5mbzsKIH07CiAKK3R5cGVk ZWYgcGdfbGliY19saWJyYXJ5ICooKmdldF9saWJjX2xpYnJhcnlfaG9va190eXBlKSgKKwljb25z dCBjaGFyICpjb2xsYXRlLCBjb25zdCBjaGFyICpjdHlwZSwgY29uc3QgY2hhciAqdmVyc2lvbik7 CisKK2V4dGVybiBQR0RMTElNUE9SVCBnZXRfbGliY19saWJyYXJ5X2hvb2tfdHlwZSBnZXRfbGli Y19saWJyYXJ5X2hvb2s7CisKK2V4dGVybiBwZ19saWJjX2xpYnJhcnkgKmdldF9kZWZhdWx0X2xp YmNfbGlicmFyeSh2b2lkKTsKKwogI2lmZGVmIFVTRV9JQ1UKIAogdHlwZWRlZiBwZ19pY3VfbGli cmFyeSAqKCpnZXRfaWN1X2xpYnJhcnlfaG9va190eXBlKSgKLS0gCjIuMzQuMQoK --=-Wwxe+64KlqA5LB703TXv Content-Disposition: attachment; filename="v4-0006-Add-tests-for-collation-provider-hooks.patch" Content-Type: text/x-patch; name="v4-0006-Add-tests-for-collation-provider-hooks.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA2NjUxYTljMmE5OTE5OWY1ODQ4NjJmMzk2NDg2OTIyMzZlYjRlOTExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBT YXQsIDE3IERlYyAyMDIyIDEyOjM1OjA1IC0wODAwClN1YmplY3Q6IFtQQVRDSCB2NCA2LzZdIEFk ZCB0ZXN0cyBmb3IgY29sbGF0aW9uIHByb3ZpZGVyIGhvb2tzLgoKLS0tCiBzcmMvdGVzdC9tb2R1 bGVzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxl cy9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgIHwgICAxICsKIC4uLi9tb2R1bGVzL3Rlc3Rf Y29sbGF0aW9uX2xpYl9ob29rcy9NYWtlZmlsZSB8ICAyNCArCiAuLi4vdGVzdF9jb2xsYXRpb25f bGliX2hvb2tzL21lc29uLmJ1aWxkICAgICAgfCAgMzcgKysKIC4uLi90ZXN0X2NvbGxhdGlvbl9s aWJfaG9va3MvdC8wMDFfbGliYy5wbCAgICB8IDEzNiArKysrKysKIC4uLi90ZXN0X2NvbGxhdGlv bl9saWJfaG9va3MvdC8wMDJfaWN1LnBsICAgICB8IDExNSArKysrKwogLi4uL3Rlc3RfY29sbGF0 aW9uX2xpYl9ob29rcy5jICAgICAgICAgICAgICAgIHwgIDQ5ICsrKwogLi4uL3Rlc3RfY29sbGF0 aW9uX2xpYl9ob29rcy5jb250cm9sICAgICAgICAgIHwgICA0ICsKIC4uLi90ZXN0X2NvbGxhdGlv bl9saWJfaG9va3MuaCAgICAgICAgICAgICAgICB8ICAzMiArKwogLi4uL3Rlc3RfY29sbGF0aW9u X2xpYl9ob29rcy90ZXN0X2ljdV9ob29rLmMgIHwgMjI4ICsrKysrKysrKysKIC4uLi90ZXN0X2Nv bGxhdGlvbl9saWJfaG9va3MvdGVzdF9saWJjX2hvb2suYyB8IDQxMyArKysrKysrKysrKysrKysr KysKIDExIGZpbGVzIGNoYW5nZWQsIDEwNDAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL01ha2VmaWxlCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9v a3MvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf Y29sbGF0aW9uX2xpYl9ob29rcy90LzAwMV9saWJjLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvdC8wMDJfaWN1LnBsCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3Mv dGVzdF9jb2xsYXRpb25fbGliX2hvb2tzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3Mu Y29udHJvbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRp b25fbGliX2hvb2tzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvdGVzdF9pY3VfaG9v ay5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9s aWJfaG9va3MvdGVzdF9saWJjX2hvb2suYwoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv TWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCmluZGV4IGM2MjljYmUzODMuLjI2 MWJmNWU3MjkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMTUsNiArMTUsNyBAQCBTVUJESVJTID0gXAogCQkg IHNuYXBzaG90X3Rvb19vbGQgXAogCQkgIHNwZ2lzdF9uYW1lX29wcyBcCiAJCSAgdGVzdF9ibG9v bWZpbHRlciBcCisJCSAgdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzIFwKIAkJICB0ZXN0X2NvcHlf Y2FsbGJhY2tzIFwKIAkJICB0ZXN0X2N1c3RvbV9ybWdycyBcCiAJCSAgdGVzdF9kZGxfZGVwYXJz ZSBcCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3Qv bW9kdWxlcy9tZXNvbi5idWlsZAppbmRleCA5MTFhNzY4YTI5Li5iMjZjNTQyNmY5IDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv bWVzb24uYnVpbGQKQEAgLTksNiArOSw3IEBAIHN1YmRpcignc25hcHNob3RfdG9vX29sZCcpCiBz dWJkaXIoJ3NwZ2lzdF9uYW1lX29wcycpCiBzdWJkaXIoJ3NzbF9wYXNzcGhyYXNlX2NhbGxiYWNr JykKIHN1YmRpcigndGVzdF9ibG9vbWZpbHRlcicpCitzdWJkaXIoJ3Rlc3RfY29sbGF0aW9uX2xp Yl9ob29rcycpCiBzdWJkaXIoJ3Rlc3RfY29weV9jYWxsYmFja3MnKQogc3ViZGlyKCd0ZXN0X2N1 c3RvbV9ybWdycycpCiBzdWJkaXIoJ3Rlc3RfZGRsX2RlcGFyc2UnKQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvTWFrZWZpbGUgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jMzZlMWNiNzM5Ci0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvTWFrZWZpbGUKQEAgLTAs MCArMSwyNCBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy9N YWtlZmlsZQorCitNT0RVTEVfYmlnID0gdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzCitPQkpTID0g XAorCSQoV0lOMzJSRVMpIFwKKwl0ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MubyB0ZXN0X2ljdV9o b29rLm8gdGVzdF9saWJjX2hvb2subworUEdGSUxFREVTQyA9ICJ0ZXN0X2NvbGxhdGlvbl9saWJf aG9va3MgLSB0ZXN0IGNvbGxhdGlvbiBwcm92aWRlciBsaWJyYXJ5IGhvb2tzIgorCitFWFRFTlNJ T04gPSB0ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MKKworVEFQX1RFU1RTID0gMQorCitpZmRlZiBV U0VfUEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05G SUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4u CitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQo dG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKKworZXhwb3J0IHdp dGhfaWN1CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9o b29rcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hv b2tzL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjlj NGIwOGE5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0 aW9uX2xpYl9ob29rcy9tZXNvbi5idWlsZApAQCAtMCwwICsxLDM3IEBACisjIEZJWE1FOiBwcmV2 ZW50IGluc3RhbGwgZHVyaW5nIG1haW4gaW5zdGFsbCwgYnV0IG5vdCBkdXJpbmcgdGVzdCA6Lwor Cit0ZXN0X2NvbGxhdGlvbl9saWJfaG9va3Nfc291cmNlcyA9IGZpbGVzKAorICAndGVzdF9jb2xs YXRpb25fbGliX2hvb2tzLmMnLAorICAndGVzdF9saWJjX2hvb2suYycsCisgICd0ZXN0X2ljdV9o b29rLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgdGVzdF9jb2xsYXRp b25fbGliX2hvb2tzX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBl eHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICd0ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MnLAor ICAgICctLUZJTEVERVNDJywgJ3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcyAtIHRlc3QgY29sbGF0 aW9uIHByb3ZpZGVyIGxpYnJhcnkgaG9va3MnLF0pCitlbmRpZgorCit0ZXN0X2NvbGxhdGlvbl9s aWJfaG9va3MgPSBzaGFyZWRfbW9kdWxlKCd0ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MnLAorICB0 ZXN0X2NvbGxhdGlvbl9saWJfaG9va3Nfc291cmNlcywKKyAga3dhcmdzOiBwZ19tb2RfYXJncywK KykKK3Rlc3RwcmVwX3RhcmdldHMgKz0gdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzCisKK2luc3Rh bGxfZGF0YSgKKyAgJ3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy5jb250cm9sJywKKyAga3dhcmdz OiBjb250cmliX2RhdGFfYXJncywKKykKKwordGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0X2Nv bGxhdGlvbl9saWJfaG9va3MnLAorICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwK KyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAgJ3RhcCc6IHsKKyAgICAndGVz dHMnOiBbCisgICAgICAndC8wMDFfbGliYy5wbCcsCisgICAgICAndC8wMDJfaWN1LnBsJywKKyAg ICBdLAorICAgICdlbnYnOiB7J3dpdGhfaWN1JzogaWN1LmZvdW5kKCkgPyAneWVzJyA6ICdubyd9 LAorICB9LAorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9s aWJfaG9va3MvdC8wMDFfbGliYy5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25f bGliX2hvb2tzL3QvMDAxX2xpYmMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uZjg4YzQ0YzA4NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9jb2xsYXRpb25fbGliX2hvb2tzL3QvMDAxX2xpYmMucGwKQEAgLTAsMCArMSwxMzYgQEAKKyMg Q29weXJpZ2h0IChjKSAyMDIxLTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7 CisKK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdtYWluJyk7CisK KyRub2RlLT5pbml0OworJG5vZGUtPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBx eworc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzID0gJ3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcycK K30pOworJG5vZGUtPnN0YXJ0OworCisjIHNldHVwCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJcXFbQ1JFQVRFIENPTExBVElPTiB0ZXN0X3JldmVyc2VjYXNlCisJCQkgIChQUk9WSURF Uj1saWJjLCBMQ19DT0xMQVRFPSdBU0MnLCBMQ19DVFlQRT0nREVTQycpXSk7Ciskbm9kZS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJcXFbQ1JFQVRFIENPTExBVElPTiB0ZXN0X3JldmVyc2Vzb3J0 CisJCQkgIChQUk9WSURFUj1saWJjLCBMQ19DT0xMQVRFPSdERVNDJywgTENfQ1RZUEU9J0FTQycp XSk7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXFbQ1JFQVRFIFRBQkxFIHN0cmlu Z3ModCB0ZXh0KV0pOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxW0lOU0VSVCBJ TlRPIHN0cmluZ3MgVkFMVUVTICgnYUJjRCcpLCAoJ2ZHaEknKSwgKCd3WHlaJyldKTsKKworIyBj aGVjayB2ZXJzaW9ucworCitteSAkdmVyc2lvbl9hc2MgPQorICAkbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJICBxcVtTRUxFQ1QgY29sbHZlcnNpb24gRlJPTSBwZ19jb2xsYXRpb24gV0hF UkUgY29sbG5hbWU9J3Rlc3RfcmV2ZXJzZWNhc2UnXSk7CitpcygkdmVyc2lvbl9hc2MsICczLjE0 MTU5JywKKwknY29sbGF0aW9uICJ0ZXN0X3JldmVyc2VjYXNlIiBoYXMgY29ycmVjdCB2ZXJzaW9u IDMuMTQxNTknCispOworCitteSAkdmVyc2lvbl9kZXNjID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSAgcXFbU0VMRUNUIGNvbGx2ZXJzaW9uIEZST00gcGdfY29sbGF0aW9uIFdI RVJFIGNvbGxuYW1lPSd0ZXN0X3JldmVyc2Vzb3J0J10pOworaXMoJHZlcnNpb25fZGVzYywgJzMu MTQxNTknLAorCSdjb2xsYXRpb24gInRlc3RfcmV2ZXJzZXNvcnQiIGhhcyBjb3JyZWN0IHZlcnNp b24gMy4xNDE1OScKKyk7CisKK215ICRyZXNfc29ydF9leHBlY3RlZCA9ICJhQmNECitmR2hJCit3 WHlaIjsKKworbXkgJHJlc19yZXZlcnNlc29ydF9leHBlY3RlZCA9ICJ3WHlaCitmR2hJCithQmNE IjsKKworIyB0ZXN0IGNvbXBhcmlzb24KKworbXkgJGNvbXBhcmlzb24gPQorICAkbm9kZS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJICBxcVtTRUxFQ1QgJ2FCY0QnIENPTExBVEUgdGVzdF9yZXZl cnNlY2FzZSA8ICd3WHlaJyBDT0xMQVRFIHRlc3RfcmV2ZXJzZWNhc2VdKTsKK2lzKCRjb21wYXJp c29uLCAndCcsCisJJ2NvcnJlY3QgY29tcGFyaXNvbicKKyk7CisKKyMgdGVzdCByZXZlcnNlIGNv bXBhcmlzb24KKworbXkgJGNvbXBhcmlzb25fcmV2ZXJzZSA9CisgICRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkgIHFxW1NFTEVDVCAnYUJjRCcgQ09MTEFURSB0ZXN0X3JldmVyc2Vzb3J0 IDwgJ3dYeVonIENPTExBVEUgdGVzdF9yZXZlcnNlc29ydF0pOworaXMoJGNvbXBhcmlzb25fcmV2 ZXJzZSwgJ2YnLAorCSdjb3JyZWN0IHJldmVyc2UgY29tcGFyaXNvbicKKyk7CisKKyMgdGVzdCBh c2Mgc29ydCB3aXRoIHRydXN0X3N0cnhmcm0gPSBmYWxzZQorCitteSAkcmVzX3NvcnQgPQorICAk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJICBxcVtTRVQgdHJ1c3Rfc3RyeGZybSA9IGZh bHNlOworICAgICAgICAgU0VMRUNUIHQgRlJPTSBzdHJpbmdzIE9SREVSIEJZIHQgQ09MTEFURSB0 ZXN0X3JldmVyc2VjYXNlXSk7CitpcygkcmVzX3NvcnQsICRyZXNfc29ydF9leHBlY3RlZCwKKwkn Y29ycmVjdCBhc2NlbmRpbmcgc29ydCAodHJ1c3Rfc3RyeGZybSA9IGZhbHNlKScKKyk7CisKKyMg dGVzdCBkZXNjIHNvcnQgd2l0aCB0cnVzdF9zdHJ4ZnJtID0gZmFsc2UKKworbXkgJHJlc19yZXZl cnNlc29ydCA9CisgICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkgIHFxW1NFVCB0cnVz dF9zdHJ4ZnJtID0gZmFsc2U7CisgICAgICAgICBTRUxFQ1QgdCBGUk9NIHN0cmluZ3MgT1JERVIg QlkgdCBDT0xMQVRFIHRlc3RfcmV2ZXJzZXNvcnRdKTsKK2lzKCRyZXNfcmV2ZXJzZXNvcnQsICRy ZXNfcmV2ZXJzZXNvcnRfZXhwZWN0ZWQsCisJJ2NvcnJlY3QgZGVzY2VuZGluZyBzb3J0ICh0cnVz dF9zdHJ4ZnJtID0gZmFsc2UpJworKTsKKworIyB0ZXN0IGFzYyBzb3J0IHdpdGggdHJ1c3Rfc3Ry eGZybSA9IHRydWUKKworbXkgJHJlc19zb3J0X3N0cnhmcm0gPQorICAkbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJICBxcVtTRVQgdHJ1c3Rfc3RyeGZybSA9IHRydWU7CisgICAgICAgICBT RUxFQ1QgdCBGUk9NIHN0cmluZ3MgT1JERVIgQlkgdCBDT0xMQVRFIHRlc3RfcmV2ZXJzZWNhc2Vd KTsKK2lzKCRyZXNfc29ydF9zdHJ4ZnJtLCAkcmVzX3NvcnRfZXhwZWN0ZWQsCisJJ2NvcnJlY3Qg YXNjZW5kaW5nIHNvcnQgKHRydXN0X3N0cnhmcm0gPSB0cnVlKScKKyk7CisKKyMgdGVzdCBkZXNj IHNvcnQgd2l0aCB0cnVzdF9zdHJ4ZnJtID0gdHJ1ZQorCitteSAkcmVzX3JldmVyc2Vzb3J0X3N0 cnhmcm0gPQorICAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJICBxcVtTRVQgdHJ1c3Rf c3RyeGZybSA9IHRydWU7CisgICAgICAgICBTRUxFQ1QgdCBGUk9NIHN0cmluZ3MgT1JERVIgQlkg dCBDT0xMQVRFIHRlc3RfcmV2ZXJzZXNvcnRdKTsKK2lzKCRyZXNfcmV2ZXJzZXNvcnRfc3RyeGZy bSwgJHJlc19yZXZlcnNlc29ydF9leHBlY3RlZCwKKwknY29ycmVjdCBkZXNjZW5kaW5nIHNvcnQg KHRydXN0X3N0cnhmcm0gPSB0cnVlKScKKyk7CisKKyMgdGVzdCBsb3dlci91cHBlcgorCitteSAk dGNhc2UgPQorICAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJICBxcVtTRUxFQ1QgbG93 ZXIoJ2FCY0RmZ0hpd1h5WicgY29sbGF0ZSB0ZXN0X3JldmVyc2Vzb3J0KSwKKyAgICAgICAgICAg ICAgICB1cHBlcignYUJjRGZnSGl3WHlaJyBjb2xsYXRlIHRlc3RfcmV2ZXJzZXNvcnQpXSk7Citp cygkdGNhc2UsICdhYmNkZmdoaXd4eXp8QUJDREZHSElXWFlaJywKKwknY29ycmVjdCBsb3dlcmNh c2UgYW5kIHVwcGVyY2FzZScKKyk7CisKKyMgdGVzdCByZXZlcnNlIGxvd2VyL3VwcGVyCisKK215 ICR0Y2FzZV9yZXZlcnNlID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSAgcXFb U0VMRUNUIGxvd2VyKCdhQmNEZmdIaXdYeVonIGNvbGxhdGUgdGVzdF9yZXZlcnNlY2FzZSksCisg ICAgICAgICAgICAgICAgdXBwZXIoJ2FCY0RmZ0hpd1h5WicgY29sbGF0ZSB0ZXN0X3JldmVyc2Vj YXNlKV0pOworaXMoJHRjYXNlX3JldmVyc2UsICdBQkNERkdISVdYWVp8YWJjZGZnaGl3eHl6JywK KwknY29ycmVjdCBsb3dlcmNhc2UgYW5kIHVwcGVyY2FzZScKKyk7CisKKworCiskbm9kZS0+c3Rv cDsKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nv bGxhdGlvbl9saWJfaG9va3MvdC8wMDJfaWN1LnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nv bGxhdGlvbl9saWJfaG9va3MvdC8wMDJfaWN1LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLmNkZDdiMTZkM2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy90LzAwMl9pY3UucGwKQEAgLTAsMCArMSwxMTUg QEAKKyMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6 Ok1vcmU7CisKK2lmICgkRU5We3dpdGhfaWN1fSBuZSAneWVzJykKK3sKKwlwbGFuIHNraXBfYWxs ID0+ICdJQ1Ugbm90IHN1cHBvcnRlZCBieSB0aGlzIGJ1aWxkJzsKK30KKworbXkgJG5vZGUgPSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21haW4nKTsKKworJG5vZGUtPmluaXQ7Cisk bm9kZS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHF7CitzaGFyZWRfcHJlbG9h ZF9saWJyYXJpZXMgPSAndGVzdF9jb2xsYXRpb25fbGliX2hvb2tzJworfSk7Ciskbm9kZS0+c3Rh cnQ7CisKKyMgc2V0dXAKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxcVtDUkVBVEUg Q09MTEFUSU9OIHRlc3RfYXNjIChQUk9WSURFUj1pY3UsIExPQ0FMRT0nQVNDJyldKTsKKyRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxcVtDUkVBVEUgQ09MTEFUSU9OIHRlc3RfZGVzYyAo UFJPVklERVI9aWN1LCBMT0NBTEU9J0RFU0MnKV0pOworCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxW0NSRUFURSBUQUJMRSBzdHJpbmdzKHQgdGV4dCldKTsKKyRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwlxcVtJTlNFUlQgSU5UTyBzdHJpbmdzIFZBTFVFUyAoJ2FCY0QnKSwg KCdmR2hJJyksICgnd1h5WicpXSk7CisKKyMgY2hlY2sgdmVyc2lvbnMKKworbXkgJHZlcnNpb25f YXNjID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSAgcXFbU0VMRUNUIGNvbGx2 ZXJzaW9uIEZST00gcGdfY29sbGF0aW9uIFdIRVJFIGNvbGxuYW1lPSd0ZXN0X2FzYyddKTsKK2lz KCR2ZXJzaW9uX2FzYywgJzIuNzInLAorCSdjb2xsYXRpb24gInRlc3RfYXNjIiBoYXMgY29ycmVj dCB2ZXJzaW9uIDIuNzInCispOworCitteSAkdmVyc2lvbl9kZXNjID0KKyAgJG5vZGUtPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSAgcXFbU0VMRUNUIGNvbGx2ZXJzaW9uIEZST00gcGdfY29sbGF0 aW9uIFdIRVJFIGNvbGxuYW1lPSd0ZXN0X2Rlc2MnXSk7CitpcygkdmVyc2lvbl9kZXNjLCAnMi43 MicsCisJJ2NvbGxhdGlvbiAidGVzdF9kZXNjIiBoYXMgY29ycmVjdCB2ZXJzaW9uIDIuNzInCisp OworCitteSAkcmVzX3NvcnRfZXhwZWN0ZWQgPSAiYUJjRAorZkdoSQord1h5WiI7CisKK215ICRy ZXNfcmV2ZXJzZXNvcnRfZXhwZWN0ZWQgPSAid1h5WgorZkdoSQorYUJjRCI7CisKKyMgdGVzdCBj b21wYXJpc29uCisKK215ICRjb21wYXJpc29uID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSAgcXFbU0VMRUNUICdhQmNEJyBDT0xMQVRFIHRlc3RfYXNjIDwgJ3dYeVonIENPTExB VEUgdGVzdF9hc2NdKTsKK2lzKCRjb21wYXJpc29uLCAndCcsCisJJ2NvcnJlY3QgY29tcGFyaXNv bicKKyk7CisKKyMgdGVzdCByZXZlcnNlIGNvbXBhcmlzb24KKworbXkgJGNvbXBhcmlzb25fcmV2 ZXJzZSA9CisgICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkgIHFxW1NFTEVDVCAnYUJj RCcgQ09MTEFURSB0ZXN0X2Rlc2MgPCAnd1h5WicgQ09MTEFURSB0ZXN0X2Rlc2NdKTsKK2lzKCRj b21wYXJpc29uX3JldmVyc2UsICdmJywKKwknY29ycmVjdCByZXZlcnNlIGNvbXBhcmlzb24nCisp OworCisjIHRlc3QgYXNjIHNvcnQKKworbXkgJHJlc19zb3J0ID0KKyAgJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSAgcXFbU0VMRUNUIHQgRlJPTSBzdHJpbmdzIE9SREVSIEJZIHQgQ09M TEFURSB0ZXN0X2FzY10pOworaXMoJHJlc19zb3J0LCAkcmVzX3NvcnRfZXhwZWN0ZWQsCisJJ2Nv cnJlY3QgYXNjZW5kaW5nIHNvcnQnCispOworCisjIHRlc3QgZGVzYyBzb3J0CisKK215ICRyZXNf cmV2ZXJzZXNvcnQgPQorICAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJICBxcVtTRUxF Q1QgdCBGUk9NIHN0cmluZ3MgT1JERVIgQlkgdCBDT0xMQVRFIHRlc3RfZGVzY10pOworaXMoJHJl c19yZXZlcnNlc29ydCwgJHJlc19yZXZlcnNlc29ydF9leHBlY3RlZCwKKwknY29ycmVjdCBkZXNj ZW5kaW5nIHNvcnQnCispOworCisjIHRlc3QgbG93ZXIvdXBwZXIKKworbXkgJHRjYXNlID0KKyAg JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSAgcXFbU0VMRUNUIGxvd2VyKCdhQmNEZmdI aXdYeVonIGNvbGxhdGUgdGVzdF9hc2MpLAorICAgICAgICAgICAgICAgIHVwcGVyKCdhQmNEZmdI aXdYeVonIGNvbGxhdGUgdGVzdF9hc2MpXSk7CitpcygkdGNhc2UsICdhYmNkZmdoaXd4eXp8QUJD REZHSElXWFlaJywKKwknY29ycmVjdCBsb3dlcmNhc2UgYW5kIHVwcGVyY2FzZScKKyk7CisKKyMg dGVzdCByZXZlcnNlIGxvd2VyL3VwcGVyCisKK215ICR0Y2FzZV9yZXZlcnNlID0KKyAgJG5vZGUt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSAgcXFbU0VMRUNUIGxvd2VyKCdhQmNEZmdIaXdYeVon IGNvbGxhdGUgdGVzdF9kZXNjKSwKKyAgICAgICAgICAgICAgICB1cHBlcignYUJjRGZnSGl3WHla JyBjb2xsYXRlIHRlc3RfZGVzYyldKTsKK2lzKCR0Y2FzZV9yZXZlcnNlLCAnQUJDREZHSElXWFla fGFiY2RmZ2hpd3h5eicsCisJJ2NvcnJlY3QgcmV2ZXJzZSBsb3dlcmNhc2UgYW5kIHVwcGVyY2Fz ZScKKyk7CisKKyRub2RlLT5zdG9wOworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy90ZXN0X2NvbGxhdGlvbl9saWJf aG9va3MuYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL3Rlc3Rf Y29sbGF0aW9uX2xpYl9ob29rcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLmRhNTMyY2ViMWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf Y29sbGF0aW9uX2xpYl9ob29rcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MuYwpAQCAtMCwwICsx LDQ5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdGVzdF9jb2xsYXRpb25fbGliX2hv b2tzLmMKKyAqCQlDb2RlIGZvciB0ZXN0aW5nIGNvbGxhdGlvbiBwcm92aWRlciBsaWJyYXJ5IGhv b2tzCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQs IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJ Q0FUSU9OCisgKgkJc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvdGVz dF9jb2xsYXRpb25fbGliX2hvb2tzLmMKKyAqCisgKiBUZXN0IGltcGxlbWVudGF0aW9ucyBvZiBs aWJjLWxpa2UgYW5kIGljdS1saWtlIGNvbGxhdGlvbiBwcm92aWRlcnMuCisgKgorICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiZm1n ci5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorCisjaW5jbHVkZSAidGVzdF9jb2xsYXRpb25f bGliX2hvb2tzLmgiCisKK3N0YXRpYyBnZXRfbGliY19saWJyYXJ5X2hvb2tfdHlwZSBwcmV2X2dl dF9saWJjX2xpYnJhcnlfaG9vayA9IE5VTEw7CisjaWZkZWYgVVNFX0lDVQorc3RhdGljIGdldF9p Y3VfbGlicmFyeV9ob29rX3R5cGUgcHJldl9nZXRfaWN1X2xpYnJhcnlfaG9vayA9IE5VTEw7Cisj ZW5kaWYKKworUEdfTU9EVUxFX01BR0lDOworCisvKgorICogTW9kdWxlIGxvYWQgY2FsbGJhY2sK KyAqLwordm9pZAorX1BHX2luaXQodm9pZCkKK3sKKwlpZiAoIXByb2Nlc3Nfc2hhcmVkX3ByZWxv YWRfbGlicmFyaWVzX2luX3Byb2dyZXNzKQorCQllcmVwb3J0KEVSUk9SLCAoZXJybXNnKCJ0ZXN0 X2NvbGxhdGlvbl9saWJfaG9va3MgbXVzdCBiZSBsb2FkZWQgdmlhIHNoYXJlZF9wcmVsb2FkX2xp YnJhcmllcyIpKSk7CisKKwlwcmV2X2dldF9saWJjX2xpYnJhcnlfaG9vayA9IGdldF9saWJjX2xp YnJhcnlfaG9vazsKKwlnZXRfbGliY19saWJyYXJ5X2hvb2sgPSB0ZXN0X2dldF9saWJjX2xpYnJh cnk7CisJCisjaWZkZWYgVVNFX0lDVQorCXByZXZfZ2V0X2ljdV9saWJyYXJ5X2hvb2sgPSBnZXRf aWN1X2xpYnJhcnlfaG9vazsKKwlnZXRfaWN1X2xpYnJhcnlfaG9vayA9IHRlc3RfZ2V0X2ljdV9s aWJyYXJ5OwkKKyNlbmRpZgorCisJaW5pdF9saWJjX2hvb2soKTsKK30KZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL3Rlc3RfY29sbGF0aW9uX2xp Yl9ob29rcy5jb250cm9sIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9v a3MvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzLmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uYTBiOGUwMzFhNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29r cy5jb250cm9sCkBAIC0wLDAgKzEsNCBAQAorY29tbWVudCA9ICdUZXN0IGNvZGUgZm9yIGNvbGxh dGlvbiBwcm92aWRlciBsaWJyYXJ5IGhvb2tzJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21v ZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcycKKwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvdGVzdF9j b2xsYXRpb25fbGliX2hvb2tzLmggYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xp Yl9ob29rcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi45NGVhOTQzYjk3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tz LmgKQEAgLTAsMCArMSwzMiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHRlc3RfY29s bGF0aW9uX2xpYl9ob29rcy5oCisgKgkJRGVmaW5pdGlvbnMgZm9yIGNvbGxhdGlvbiBsaWJyYXJ5 IGhvb2tzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDIyLCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkJc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tz LmgKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lmbmRlZiBURVNUX0NPTExBVElP Tl9MSUJfSE9PS1NfSAorI2RlZmluZSBURVNUX0NPTExBVElPTl9MSUJfSE9PS1NfSAorCisjaW5j bHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVk ZSAidXRpbHMvcGdfbG9jYWxlLmgiCisjaW5jbHVkZSAidXRpbHMvcGdfbG9jYWxlX2ludGVybmFs LmgiCisKK2V4dGVybiB2b2lkIGluaXRfbGliY19ob29rKHZvaWQpOworZXh0ZXJuIHBnX2xpYmNf bGlicmFyeSAqdGVzdF9nZXRfbGliY19saWJyYXJ5KGNvbnN0IGNoYXIgKmNvbGxhdGUsCisJCQkJ CQkJCQkJCSAgY29uc3QgY2hhciAqY3R5cGUsCisJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqdmVy c2lvbik7CisjaWZkZWYgVVNFX0lDVQorZXh0ZXJuIHBnX2ljdV9saWJyYXJ5ICp0ZXN0X2dldF9p Y3VfbGlicmFyeShjb25zdCBjaGFyICpsb2NhbGUsCisJCQkJCQkJCQkJCWNvbnN0IGNoYXIgKnZl cnNpb24pOworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvdGVzdF9pY3VfaG9vay5jIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MvdGVzdF9pY3VfaG9vay5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmFlMjU3Y2MwM2IKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy90ZXN0X2ljdV9ob29rLmMK QEAgLTAsMCArMSwyMjggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB0ZXN0X2ljdV9o b29rLmMKKyAqCQlDb2RlIGZvciB0ZXN0aW5nIGNvbGxhdGlvbiBwcm92aWRlciBpY3UgaG9vay4K KyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJ T04KKyAqCQlzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy90ZXN0X2lj dV9ob29rLmMKKyAqCisgKiBJbXBsZW1lbnRzIGEgY3VzdG9tIGljdS1saWtlIGNvbGxhdGlvbiBw cm92aWRlciBsaWJyYXJ5IGZvciB0ZXN0aW5nIHRoZQorICogaG9va3MuIEl0IGFjY2VwdHMgYW55 IGNvbGxhdGlvbiBuYW1lIHJlcXVlc3RlZC4gQWxsIGJlaGF2ZSBleGFjdGx5IGxpa2UgdGhlCisg KiAiZW5fVVMiIGxvY2FsZSwgZXhjZXB0IGZvciB0aGUgbG9jYWxlIG5hbWVkICJERVNDIiwgd2hp Y2ggcmV2ZXJzZXMgdGhlIHNvcnQKKyAqIG9yZGVyIGFuZCByZXZlcnNlcyB1cHBlcmNhc2UvbG93 ZXJjYXNlIGJlaGF2aW9yLgorICoKKyAqIFRoZSB2ZXJzaW9uIGlzIGFsd2F5cyByZXBvcnRlZCBh cyAyLjcyLCBzbyBsb2FkaW5nIGl0IHdpbGwgY2F1c2UgYSB2ZXJzaW9uCisgKiBtaXNtYXRjaCB3 YXJuaW5nLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAidGVzdF9j b2xsYXRpb25fbGliX2hvb2tzLmgiCisKKyNpZmRlZiBVU0VfSUNVCisKKyNpbmNsdWRlIDx1bmlj b2RlL3VjbnYuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3Vsb2NkYXRhLmg+CisjaW5jbHVkZSA8dW5p Y29kZS91c3RyaW5nLmg+CisKKyNkZWZpbmUgVEVTVF9MT0NBTEUgImVuX1VTIgorCit0eXBlZGVm IHN0cnVjdCBUZXN0VUNvbGxhdG9yIHsKKwlVQ29sbGF0b3IJKnVjb2w7CisJYm9vbAkJIHJldmVy c2U7Cit9IFRlc3RVQ29sbGF0b3I7CisKK3N0YXRpYyBwZ19pY3VfbGlicmFyeSAqdGVzdF9pY3Vf bGlicmFyeSA9IE5VTEw7CitzdGF0aWMgY29uc3QgVVZlcnNpb25JbmZvIHRlc3RfaWN1X3ZlcnNp b24gPSB7IDIsIDcyIH07CisKK3N0YXRpYyBib29sCitsb2NhbGVfaXNfcmV2ZXJzZShjb25zdCBj aGFyICpsb2NhbGUpCit7CisJaWYgKHN0cmNtcChsb2NhbGUsICJERVNDIikgPT0gMCkKKwkJcmV0 dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBVQ29sbGF0b3Ig KgordGVzdF9vcGVuQ29sbGF0b3IoY29uc3QgY2hhciAqbG9jLCBVRXJyb3JDb2RlICpzdGF0dXMp Cit7CisJVGVzdFVDb2xsYXRvciAqdGVzdGNvbCA9IE1lbW9yeUNvbnRleHRBbGxvYyhUb3BNZW1v cnlDb250ZXh0LCBzaXplb2YoVGVzdFVDb2xsYXRvcikpOworCVVDb2xsYXRvciAqdWNvbCA9IHVj b2xfb3BlbihURVNUX0xPQ0FMRSwgc3RhdHVzKTsKKwl0ZXN0Y29sLT51Y29sID0gdWNvbDsKKwl0 ZXN0Y29sLT5yZXZlcnNlID0gbG9jYWxlX2lzX3JldmVyc2UobG9jKTsKKwlyZXR1cm4gKFVDb2xs YXRvciAqKXRlc3Rjb2w7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X2Nsb3NlQ29sbGF0b3IoVUNv bGxhdG9yICpjb2xsKQoreworCVRlc3RVQ29sbGF0b3IgKnRlc3Rjb2wgPSAoVGVzdFVDb2xsYXRv ciAqKSBjb2xsOworCXVjb2xfY2xvc2UodGVzdGNvbC0+dWNvbCk7CisJcGZyZWUodGVzdGNvbCk7 Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3NldEF0dHJpYnV0ZShVQ29sbGF0b3IgKmNvbGwsIFVD b2xBdHRyaWJ1dGUgYXR0ciwKKwkJCQkgIFVDb2xBdHRyaWJ1dGVWYWx1ZSB2YWx1ZSwgVUVycm9y Q29kZSAqc3RhdHVzKQoreworCVRlc3RVQ29sbGF0b3IgKnRlc3Rjb2wgPSAoVGVzdFVDb2xsYXRv ciAqKSBjb2xsOworCXVjb2xfc2V0QXR0cmlidXRlKHRlc3Rjb2wtPnVjb2wsIGF0dHIsIHZhbHVl LCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9nZXRDb2xsYXRvclZlcnNpb24oY29u c3QgVUNvbGxhdG9yICpjb2xsLCBVVmVyc2lvbkluZm8gaW5mbykKK3sKKwltZW1jcHkoaW5mbywg dGVzdF9pY3VfdmVyc2lvbiwgc2l6ZW9mKFVWZXJzaW9uSW5mbykpOworfQorCitzdGF0aWMgVUNv bGxhdGlvblJlc3VsdAordGVzdF9zdHJjb2xsKGNvbnN0IFVDb2xsYXRvciAqY29sbCwgY29uc3Qg VUNoYXIgKnNvdXJjZSwgaW50MzJfdCBzb3VyY2VMZW5ndGgsCisJCQkgY29uc3QgVUNoYXIgKnRh cmdldCwgaW50MzJfdCB0YXJnZXRMZW5ndGgpCit7CisJVGVzdFVDb2xsYXRvciAqdGVzdGNvbCA9 IChUZXN0VUNvbGxhdG9yICopIGNvbGw7CisJVUNvbGxhdGlvblJlc3VsdCByZXQgPSB1Y29sX3N0 cmNvbGwodGVzdGNvbC0+dWNvbCwgc291cmNlLCBzb3VyY2VMZW5ndGgsCisJCQkJCQkJCQkJdGFy Z2V0LCB0YXJnZXRMZW5ndGgpOworCWlmICh0ZXN0Y29sLT5yZXZlcnNlKQorCQlyZXR1cm4gLXJl dDsKKwllbHNlCisJCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBVQ29sbGF0aW9uUmVzdWx0Cit0 ZXN0X3N0cmNvbGxVVEY4KGNvbnN0IFVDb2xsYXRvciAqY29sbCwgY29uc3QgY2hhciAqc291cmNl LAorCQkJCSBpbnQzMl90IHNvdXJjZUxlbmd0aCwgY29uc3QgY2hhciAqdGFyZ2V0LAorCQkJCSBp bnQzMl90IHRhcmdldExlbmd0aCwgVUVycm9yQ29kZSAqc3RhdHVzKQoreworCVRlc3RVQ29sbGF0 b3IgKnRlc3Rjb2wgPSAoVGVzdFVDb2xsYXRvciAqKSBjb2xsOworCVVDb2xsYXRpb25SZXN1bHQg cmV0ID0gdWNvbF9zdHJjb2xsVVRGOCh0ZXN0Y29sLT51Y29sLCBzb3VyY2UsCisJCQkJCQkJCQkJ CXNvdXJjZUxlbmd0aCwgdGFyZ2V0LAorCQkJCQkJCQkJCQl0YXJnZXRMZW5ndGgsIHN0YXR1cyk7 CisJaWYgKHRlc3Rjb2wtPnJldmVyc2UpCisJCXJldHVybiAtcmV0OworCWVsc2UKKwkJcmV0dXJu IHJldDsKK30KKworc3RhdGljIGludDMyX3QKK3Rlc3RfZ2V0U29ydEtleShjb25zdCBVQ29sbGF0 b3IgKmNvbGwsIGNvbnN0IFVDaGFyICpzb3VyY2UsCisJCQkJaW50MzJfdCBzb3VyY2VMZW5ndGgs IHVpbnQ4X3QgKnJlc3VsdCwgaW50MzJfdCByZXN1bHRMZW5ndGgpCit7CisJVGVzdFVDb2xsYXRv ciAqdGVzdGNvbCA9IChUZXN0VUNvbGxhdG9yICopIGNvbGw7CisJaW50MzJfdCByZXQgPSB1Y29s X2dldFNvcnRLZXkodGVzdGNvbC0+dWNvbCwgc291cmNlLCBzb3VyY2VMZW5ndGgsCisJCQkJCQkJ CSAgcmVzdWx0LCByZXN1bHRMZW5ndGgpOworCXNpemVfdCByZXN1bHRfc2l6ZSA9IHJldCArIDE7 CisKKwlpZiAocmVzdWx0TGVuZ3RoID49IHJlc3VsdF9zaXplKQorCXsKKwkJcmVzdWx0W3Jlc3Vs dExlbmd0aF0gPSAnXDAnOworCisJCWlmICh0ZXN0Y29sLT5yZXZlcnNlKQorCQkJZm9yIChpbnQg aSA9IDA7IGkgPCByZXN1bHRfc2l6ZTsgaSsrKQorCQkJCSooKHVuc2lnbmVkIGNoYXIgKikgcmVz dWx0ICsgaSkgXj0gKHVuc2lnbmVkIGNoYXIpIDB4ZmY7CisJfQorCisJcmV0dXJuIHJlc3VsdF9z aXplOworfQorCitzdGF0aWMgaW50MzJfdAordGVzdF9uZXh0U29ydEtleVBhcnQoY29uc3QgVUNv bGxhdG9yICpjb2xsLCBVQ2hhckl0ZXJhdG9yICppdGVyLAorCQkJCQkgdWludDMyX3Qgc3RhdGVb Ml0sIHVpbnQ4X3QgKmRlc3QsIGludDMyX3QgY291bnQsCisJCQkJCSBVRXJyb3JDb2RlICpzdGF0 dXMpCit7CisJVGVzdFVDb2xsYXRvciAqdGVzdGNvbCA9IChUZXN0VUNvbGxhdG9yICopIGNvbGw7 CisJaW50MzJfdCByZXQgPSB1Y29sX25leHRTb3J0S2V5UGFydCh0ZXN0Y29sLT51Y29sLCBpdGVy LCBzdGF0ZSwgZGVzdCwKKwkJCQkJCQkJCSAgIGNvdW50LCBzdGF0dXMpOworCisJaWYgKHRlc3Rj b2wtPnJldmVyc2UpCisJCWZvciAoaW50IGkgPSAwOyBpIDwgcmV0OyBpKyspCisJCQkqKCh1bnNp Z25lZCBjaGFyICopIGRlc3QgKyBpKSBePSAodW5zaWduZWQgY2hhcikgMHhmZjsKKworCS8qCisJ ICogVGhlIGZvbGxvd2luZyBpcyBub3QgY29ycmVjdCBmb3IgY2FzZXMgd2hlcmUgd2UgZmluaXNo IHByZWNpc2VseSBvbiB0aGUKKwkgKiBib3VuZGFyeSAoaS5lLiBjb3VudCBpcyBleGFjdGx5IGVu b3VnaCkuIFRvIGZpeCB0aGlzIHdlJ2QgbmVlZCB0byB0cmFjaworCSAqIGFkZGl0aW9uYWwgc3Rh dGUgYWNyb3NzIGNhbGxzLCB3aGljaCBkb2Vzbid0IHNlZW0gd29ydGggaXQgZm9yIGEgdGVzdAor CSAqIGNhc2UuCisJICovCisJaWYgKGNvdW50ID49IHJldCAmJiByZXQgPiAwKQorCXsKKwkJaWYg KHRlc3Rjb2wtPnJldmVyc2UpCisJCQlkZXN0W3JldF0gPSAweGZmOworCQllbHNlCisJCQlkZXN0 W3JldF0gPSAnXDAnOworCQlyZXR1cm4gcmV0ICsgMTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW50MzJfdAordGVzdF9zdHJUb1VwcGVyKFVDaGFyICpkZXN0LCBpbnQzMl90IGRl c3RDYXBhY2l0eSwgY29uc3QgVUNoYXIgKnNyYywKKwkJCQlpbnQzMl90IHNyY0xlbmd0aCwgY29u c3QgY2hhciAqbG9jYWxlLCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKQoreworCWlmIChsb2NhbGVf aXNfcmV2ZXJzZShsb2NhbGUpKQorCQlyZXR1cm4gdV9zdHJUb0xvd2VyKGRlc3QsIGRlc3RDYXBh Y2l0eSwgc3JjLCBzcmNMZW5ndGgsCisJCQkJCQkJVEVTVF9MT0NBTEUsIHBFcnJvckNvZGUpOwor CWVsc2UKKwkJcmV0dXJuIHVfc3RyVG9VcHBlcihkZXN0LCBkZXN0Q2FwYWNpdHksIHNyYywgc3Jj TGVuZ3RoLAorCQkJCQkJCVRFU1RfTE9DQUxFLCBwRXJyb3JDb2RlKTsKK30KKworc3RhdGljIGlu dDMyX3QKK3Rlc3Rfc3RyVG9Mb3dlcihVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHks IGNvbnN0IFVDaGFyICpzcmMsCisJCQkJaW50MzJfdCBzcmNMZW5ndGgsIGNvbnN0IGNoYXIgKmxv Y2FsZSwgVUVycm9yQ29kZSAqcEVycm9yQ29kZSkKK3sKKwlpZiAobG9jYWxlX2lzX3JldmVyc2Uo bG9jYWxlKSkKKwkJcmV0dXJuIHVfc3RyVG9VcHBlcihkZXN0LCBkZXN0Q2FwYWNpdHksIHNyYywg c3JjTGVuZ3RoLAorCQkJCQkJCVRFU1RfTE9DQUxFLCBwRXJyb3JDb2RlKTsKKwllbHNlCisJCXJl dHVybiB1X3N0clRvTG93ZXIoZGVzdCwgZGVzdENhcGFjaXR5LCBzcmMsIHNyY0xlbmd0aCwKKwkJ CQkJCQlURVNUX0xPQ0FMRSwgcEVycm9yQ29kZSk7Cit9CisKK3BnX2ljdV9saWJyYXJ5ICoKK3Rl c3RfZ2V0X2ljdV9saWJyYXJ5KGNvbnN0IGNoYXIgKmxvY2FsZSwgY29uc3QgY2hhciAqdmVyc2lv bikKK3sKKwlwZ19pY3VfbGlicmFyeSAqbGliOworCisJaWYgKHRlc3RfaWN1X2xpYnJhcnkgIT0g TlVMTCkKKwkJcmV0dXJuIHRlc3RfaWN1X2xpYnJhcnk7CisKKwllcmVwb3J0KExPRywgKGVycm1z ZygibG9hZGluZyBjdXN0b20gSUNVIHByb3ZpZGVyIGZvciB0ZXN0X2NvbGxhdGlvbl9saWJfaG9v a3MiKSkpOworCisJbGliID0gTWVtb3J5Q29udGV4dEFsbG9jKFRvcE1lbW9yeUNvbnRleHQsIHNp emVvZihwZ19pY3VfbGlicmFyeSkpOworCWxpYi0+Z2V0SUNVVmVyc2lvbiA9IHVfZ2V0VmVyc2lv bjsKKwlsaWItPmdldFVuaWNvZGVWZXJzaW9uID0gdV9nZXRVbmljb2RlVmVyc2lvbjsKKwlsaWIt PmdldENMRFJWZXJzaW9uID0gdWxvY2RhdGFfZ2V0Q0xEUlZlcnNpb247CisJbGliLT5vcGVuQ29s bGF0b3IgPSB0ZXN0X29wZW5Db2xsYXRvcjsKKwlsaWItPmNsb3NlQ29sbGF0b3IgPSB0ZXN0X2Ns b3NlQ29sbGF0b3I7CisJbGliLT5nZXRDb2xsYXRvclZlcnNpb24gPSB0ZXN0X2dldENvbGxhdG9y VmVyc2lvbjsKKwlsaWItPmdldFVDQVZlcnNpb24gPSB1Y29sX2dldFVDQVZlcnNpb247CisJbGli LT52ZXJzaW9uVG9TdHJpbmcgPSB1X3ZlcnNpb25Ub1N0cmluZzsKKwlsaWItPnN0cmNvbGwgPSB0 ZXN0X3N0cmNvbGw7CisJbGliLT5zdHJjb2xsVVRGOCA9IHRlc3Rfc3RyY29sbFVURjg7CisJbGli LT5nZXRTb3J0S2V5ID0gdGVzdF9nZXRTb3J0S2V5OworCWxpYi0+bmV4dFNvcnRLZXlQYXJ0ID0g dGVzdF9uZXh0U29ydEtleVBhcnQ7CisJbGliLT5zZXRVVEY4ID0gdWl0ZXJfc2V0VVRGODsKKwls aWItPmVycm9yTmFtZSA9IHVfZXJyb3JOYW1lOworCWxpYi0+c3RyVG9VcHBlciA9IHRlc3Rfc3Ry VG9VcHBlcjsKKwlsaWItPnN0clRvTG93ZXIgPSB0ZXN0X3N0clRvTG93ZXI7CisJbGliLT5zdHJU b1RpdGxlID0gdV9zdHJUb1RpdGxlOworCWxpYi0+c2V0QXR0cmlidXRlID0gdGVzdF9zZXRBdHRy aWJ1dGU7CisJbGliLT5vcGVuQ29udmVydGVyID0gdWNudl9vcGVuOworCWxpYi0+Y2xvc2VDb252 ZXJ0ZXIgPSB1Y252X2Nsb3NlOworCWxpYi0+ZnJvbVVDaGFycyA9IHVjbnZfZnJvbVVDaGFyczsK KwlsaWItPnRvVUNoYXJzID0gdWNudl90b1VDaGFyczsKKwlsaWItPnRvTGFuZ3VhZ2VUYWcgPSB1 bG9jX3RvTGFuZ3VhZ2VUYWc7CisJbGliLT5nZXREaXNwbGF5TmFtZSA9IHVsb2NfZ2V0RGlzcGxh eU5hbWU7CisJbGliLT5jb3VudEF2YWlsYWJsZSA9IHVsb2NfY291bnRBdmFpbGFibGU7CisJbGli LT5nZXRBdmFpbGFibGUgPSB1bG9jX2dldEF2YWlsYWJsZTsKKworCXRlc3RfaWN1X2xpYnJhcnkg PSBsaWI7CisJcmV0dXJuIGxpYjsKK30KKworI2VuZGlmCQkJCS8qIFVTRV9JQ1UgKi8KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRpb25fbGliX2hvb2tzL3Rlc3RfbGli Y19ob29rLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9uX2xpYl9ob29rcy90ZXN0 X2xpYmNfaG9vay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmRlZGUz Y2NmNjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0aW9u X2xpYl9ob29rcy90ZXN0X2xpYmNfaG9vay5jCkBAIC0wLDAgKzEsNDEzIEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogdGVzdF9saWJjX2hvb2suYworICoJCUNvZGUgZm9yIHRlc3Rpbmcg Y29sbGF0aW9uIHByb3ZpZGVyIGxpYmMgaG9vay4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCQlzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfY29sbGF0aW9uX2xpYl9ob29rcy90ZXN0X2xpYmNfaG9vay5jCisgKgorICogSW1wbGVtZW50 cyBhIGN1c3RvbSBsaWJjLWxpa2UgY29sbGF0aW9uIHByb3ZpZGVyIGxpYnJhcnkgZm9yIHRlc3Rp bmcgdGhlCisgKiBob29rcy4gSXQgYWNjZXB0cyBhbnkgY29sbGF0aW9uIG5hbWUgcmVxdWVzdGVk LiBBbGwgYmVoYXZlIGV4YWN0bHkgbGlrZSB0aGUKKyAqICJDIiBsb2NhbGUsIGV4Y2VwdCBmb3Ig dGhlIGxvY2FsZSBuYW1lZCAiREVTQyIsIHdoaWNoIHJldmVyc2VzIHRoZSBzb3J0CisgKiBvcmRl ciBhbmQgcmV2ZXJzZXMgdXBwZXJjYXNlL2xvd2VyY2FzZSBiZWhhdmlvci4KKyAqCisgKiBUaGUg dmVyc2lvbiBpcyBhbHdheXMgcmVwb3J0ZWQgYXMgMy4xNDE1OSwgc28gbG9hZGluZyBpdCB3aWxs IGNhdXNlIGEKKyAqIHZlcnNpb24gbWlzbWF0Y2ggd2FybmluZy4KKyAqCisgKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKworI2luY2x1ZGUgInRlc3RfY29sbGF0aW9uX2xpYl9ob29rcy5oIgorCisj aWZkZWYgX19HTElCQ19fCisjaW5jbHVkZSA8Z251L2xpYmMtdmVyc2lvbi5oPgorI2VuZGlmCisK KyNpZmRlZiBXSU4zMgorI2luY2x1ZGUgPHNobHdhcGkuaD4KKyNlbmRpZgorCisjZGVmaW5lIFRF U1RfTElCQ19WRVJTSU9OICIzLjE0MTU5IgorI2RlZmluZSBMT0NBTEVfTkFNRV9MRU4gNjQKKwor dHlwZWRlZiBzdHJ1Y3QgdGVzdF9sb2NhbGVfdAoreworCWJvb2wgcmV2ZXJzZV9zb3J0OworCWJv b2wgcmV2ZXJzZV9jYXNlOworCWNoYXIgbGNfY29sbGF0ZVtMT0NBTEVfTkFNRV9MRU5dOworCWNo YXIgbGNfY3R5cGVbTE9DQUxFX05BTUVfTEVOXTsKK30gdGVzdF9sb2NhbGVfdDsKKworc3RhdGlj IHBnX2xpYmNfbGlicmFyeSAqdGVzdF9saWJjX2xpYnJhcnkgPSBOVUxMOworc3RhdGljIHRlc3Rf bG9jYWxlX3QgY3VycmVudF9zZXRsb2NhbGUgPSB7IC5sY19jb2xsYXRlID0gIkMiLCAubGNfY3R5 cGUgPSAiQyIgfTsKK3N0YXRpYyB0ZXN0X2xvY2FsZV90ICpjdXJyZW50X3VzZWxvY2FsZSA9ICh0 ZXN0X2xvY2FsZV90ICopTENfR0xPQkFMX0xPQ0FMRTsKKworI2lmZGVmIEhBVkVfTE9DQUxFX1QK K3N0YXRpYyBsb2NhbGVfdCBjX2xvY2FsZV90ID0gTlVMTDsKKyNlbmRpZgorCit2b2lkCitpbml0 X2xpYmNfaG9vaygpCit7CisJY19sb2NhbGVfdCA9IG5ld2xvY2FsZShMQ19BTExfTUFTSywgIkMi LCBOVUxMKTsKK30KKworc3RhdGljIGJvb2wKK2xvY2FsZV9pc19yZXZlcnNlKGNvbnN0IGNoYXIg KmxvY2FsZSkKK3sKKwlpZiAoc3RyY21wKGxvY2FsZSwgIkRFU0MiKSA9PSAwKQorCQlyZXR1cm4g dHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgor dGVzdF9saWJjX3ZlcnNpb24oKQoreworCXJldHVybiBURVNUX0xJQkNfVkVSU0lPTjsKK30KKwor c3RhdGljIGNoYXIgKgordGVzdF9zZXRsb2NhbGUoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICps b2NhbGUpCit7CisJaWYgKGNhdGVnb3J5ID09IExDX0FMTCkKKwl7CisJCWlmIChsb2NhbGUpCisJ CXsKKwkJCWlmIChsb2NhbGVfaXNfcmV2ZXJzZShsb2NhbGUpKQorCQkJeworCQkJCWN1cnJlbnRf c2V0bG9jYWxlLnJldmVyc2Vfc29ydCA9IHRydWU7CisJCQkJY3VycmVudF9zZXRsb2NhbGUucmV2 ZXJzZV9jYXNlID0gdHJ1ZTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQljdXJyZW50X3NldGxv Y2FsZS5yZXZlcnNlX3NvcnQgPSBmYWxzZTsKKwkJCQljdXJyZW50X3NldGxvY2FsZS5yZXZlcnNl X2Nhc2UgPSBmYWxzZTsKKwkJCX0KKwkJCXN0cm5jcHkoY3VycmVudF9zZXRsb2NhbGUubGNfY29s bGF0ZSwgbG9jYWxlLCBMT0NBTEVfTkFNRV9MRU4pOworCQkJc3RybmNweShjdXJyZW50X3NldGxv Y2FsZS5sY19jdHlwZSwgbG9jYWxlLCBMT0NBTEVfTkFNRV9MRU4pOworCQl9CisJCXJldHVybiBj dXJyZW50X3NldGxvY2FsZS5sY19jb2xsYXRlOworCX0KKwllbHNlIGlmIChjYXRlZ29yeSA9PSBM Q19DT0xMQVRFKQorCXsKKwkJaWYgKGxvY2FsZSkKKwkJCXN0cm5jcHkoY3VycmVudF9zZXRsb2Nh bGUubGNfY29sbGF0ZSwgbG9jYWxlLCBMT0NBTEVfTkFNRV9MRU4pOworCisJCXJldHVybiBjdXJy ZW50X3NldGxvY2FsZS5sY19jb2xsYXRlOworCX0KKwllbHNlIGlmIChjYXRlZ29yeSA9PSBMQ19D VFlQRSkKKwl7CisJCWlmIChsb2NhbGUpCisJCQlzdHJuY3B5KGN1cnJlbnRfc2V0bG9jYWxlLmxj X2N0eXBlLCBsb2NhbGUsIExPQ0FMRV9OQU1FX0xFTik7CisKKwkJcmV0dXJuIGN1cnJlbnRfc2V0 bG9jYWxlLmxjX2N0eXBlOworCX0KKwllbHNlCisJCUFzc2VydChmYWxzZSk7Cit9CisKKyNpZmRl ZiBIQVZFX0xPQ0FMRV9UCisKK3N0YXRpYyBsb2NhbGVfdAordGVzdF9uZXdsb2NhbGUoaW50IGNh dGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUsIGxvY2FsZV90IGJhc2Vsb2NhbGVfdCkKK3sKKwl0 ZXN0X2xvY2FsZV90ICpuZXdsb2M7CisKKwlpZiAoYmFzZWxvY2FsZV90ID09IE5VTEwpCisJewor CQluZXdsb2MgPSBNZW1vcnlDb250ZXh0QWxsb2MoVG9wTWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJ CXNpemVvZih0ZXN0X2xvY2FsZV90KSk7CisJCXN0cm5jcHkobmV3bG9jLT5sY19jb2xsYXRlLCAi QyIsIExPQ0FMRV9OQU1FX0xFTik7CisJCXN0cm5jcHkobmV3bG9jLT5sY19jdHlwZSwgIkMiLCBM T0NBTEVfTkFNRV9MRU4pOworCX0KKwllbHNlCisJCW5ld2xvYyA9ICh0ZXN0X2xvY2FsZV90ICop IGJhc2Vsb2NhbGVfdDsKKworCWlmIChjYXRlZ29yeSA9PSBMQ19BTExfTUFTSyB8fCBjYXRlZ29y eSA9PSBMQ19DT0xMQVRFX01BU0spCisJeworCQlpZiAobG9jYWxlX2lzX3JldmVyc2UobG9jYWxl KSkKKwkJCW5ld2xvYy0+cmV2ZXJzZV9zb3J0ID0gdHJ1ZTsKKwkJZWxzZQorCQkJbmV3bG9jLT5y ZXZlcnNlX3NvcnQgPSBmYWxzZTsKKwkJc3RybmNweShuZXdsb2MtPmxjX2NvbGxhdGUsIGxvY2Fs ZSwgTE9DQUxFX05BTUVfTEVOKTsKKwl9CisJaWYgKGNhdGVnb3J5ID09IExDX0FMTF9NQVNLIHx8 IGNhdGVnb3J5ID09IExDX0NUWVBFX01BU0spCisJeworCQlpZiAobG9jYWxlX2lzX3JldmVyc2Uo bG9jYWxlKSkKKwkJCW5ld2xvYy0+cmV2ZXJzZV9jYXNlID0gdHJ1ZTsKKwkJZWxzZQorCQkJbmV3 bG9jLT5yZXZlcnNlX2Nhc2UgPSBmYWxzZTsKKwkJc3RybmNweShuZXdsb2MtPmxjX2N0eXBlLCBs b2NhbGUsIExPQ0FMRV9OQU1FX0xFTik7CisJfQorCisJcmV0dXJuIChsb2NhbGVfdCkgbmV3bG9j OworfQorCisjaWZuZGVmIFdJTjMyCitzdGF0aWMgdm9pZAordGVzdF9mcmVlbG9jYWxlKGxvY2Fs ZV90IGxvYykKK3sKKwlwZnJlZShsb2MpOworfQorI2VuZGlmCisKKyNpZmRlZiBXSU4zMgorc3Rh dGljIGxvY2FsZV90CitfdGVzdF9jcmVhdGVfbG9jYWxlKGludCBjYXRlZ29yeSwgY29uc3QgY2hh ciAqbG9jYWxlKQoreworCXJldHVybiB0ZXN0X25ld2xvY2FsZShjYXRlZ29yeSwgbG9jYWxlLCBO VUxMKTsKK30KKyNlbmRpZgorCitzdGF0aWMgbG9jYWxlX3QKK3Rlc3RfdXNlbG9jYWxlKGxvY2Fs ZV90IGxvYykKK3sKKwl0ZXN0X2xvY2FsZV90ICpyZXN1bHQgPSBjdXJyZW50X3VzZWxvY2FsZTsK KworCWlmIChsb2MgIT0gTlVMTCkKKwkJY3VycmVudF91c2Vsb2NhbGUgPSAodGVzdF9sb2NhbGVf dCAqKSBsb2M7CisKKwlyZXR1cm4gKGxvY2FsZV90KSByZXN1bHQ7Cit9CisjZW5kaWYJCQkvKiBI QVZFX0xPQ0FMRV9UICovCisKK3N0YXRpYyBpbnQKK3Rlc3Rfc3RyY29sbChjb25zdCBjaGFyICpz MSwgY29uc3QgY2hhciAqczIpCit7CisJY2hhcgkJCSpzYXZlCQk9IHBzdHJkdXAoc2V0bG9jYWxl KExDX0NPTExBVEUsIE5VTEwpKTsKKwlpbnQJCQkJIHJldDsKKworCXNldGxvY2FsZShMQ19DT0xM QVRFLCAiQyIpOworCXJldCA9IHN0cmNvbGwoczEsIHMyKTsKKwlzZXRsb2NhbGUoTENfQ09MTEFU RSwgc2F2ZSk7CisJcGZyZWUoc2F2ZSk7CisKKwlpZiAoY3VycmVudF9zZXRsb2NhbGUucmV2ZXJz ZV9zb3J0KQorCQlyZXR1cm4gLXJldDsKKwllbHNlCisJCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbnQKK3Rlc3Rfd2NzY29sbChjb25zdCB3Y2hhcl90ICp3czEsIGNvbnN0IHdjaGFyX3QgKndz MikKK3sKKwljaGFyCQkJKnNhdmUJCT0gcHN0cmR1cChzZXRsb2NhbGUoTENfQ09MTEFURSwgTlVM TCkpOworCWludAkJCQkgcmV0OworCisJc2V0bG9jYWxlKExDX0NPTExBVEUsICJDIik7CisJcmV0 ID0gd2NzY29sbCh3czEsIHdzMik7CisJc2V0bG9jYWxlKExDX0NPTExBVEUsIHNhdmUpOworCXBm cmVlKHNhdmUpOworCisJaWYgKGN1cnJlbnRfc2V0bG9jYWxlLnJldmVyc2Vfc29ydCkKKwkJcmV0 dXJuIC1yZXQ7CisJZWxzZQorCQlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc2l6ZV90Cit0ZXN0 X3N0cnhmcm0oY2hhciAqczEsIGNvbnN0IGNoYXIgKiBzMiwgc2l6ZV90IG4pCit7CisJY2hhcgkJ CSpzYXZlCQkgPSBwc3RyZHVwKHNldGxvY2FsZShMQ19DT0xMQVRFLCBOVUxMKSk7CisJaW50CQkJ CSByZXQ7CisJc2l6ZV90CQkJIHJlc3VsdF9zaXplOworCisJc2V0bG9jYWxlKExDX0NPTExBVEUs ICJDIik7CisJcmV0ID0gc3RyeGZybShzMSwgczIsIG4pOworCXNldGxvY2FsZShMQ19DT0xMQVRF LCBzYXZlKTsKKwlwZnJlZShzYXZlKTsKKworCXJlc3VsdF9zaXplID0gcmV0ICsgMTsKKworCWlm IChuID49IHJlc3VsdF9zaXplKQorCXsKKwkJczFbcmV0XSA9ICdcMCc7CisKKwkJaWYgKGN1cnJl bnRfc2V0bG9jYWxlLnJldmVyc2Vfc29ydCkKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0 X3NpemU7IGkrKykKKwkJCQkqKCh1bnNpZ25lZCBjaGFyICopIHMxICsgaSkgXj0gKGNoYXIpIDB4 ZmY7CisJfQorCisJcmV0dXJuIHJlc3VsdF9zaXplOworfQorCisjaWZkZWYgSEFWRV9MT0NBTEVf VAorc3RhdGljIGludAordGVzdF9zdHJjb2xsX2woY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIg KnMyLCBsb2NhbGVfdCBsb2MpCit7CisJdGVzdF9sb2NhbGVfdCAqdGVzdGxvY2FsZSA9ICh0ZXN0 X2xvY2FsZV90ICopbG9jOworCWludCByZXQgPSBzdHJjb2xsX2woczEsIHMyLCBjX2xvY2FsZV90 KTsKKworCWlmICh0ZXN0bG9jYWxlLT5yZXZlcnNlX3NvcnQpCisJCXJldHVybiAtcmV0OworCWVs c2UKKwkJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAordGVzdF93Y3Njb2xsX2woY29uc3Qg d2NoYXJfdCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIsIGxvY2FsZV90IGxvY2FsZSkKK3sKKwl0 ZXN0X2xvY2FsZV90ICp0ZXN0bG9jYWxlID0gKHRlc3RfbG9jYWxlX3QgKikgbG9jYWxlOworCWlu dCByZXQgPSB3Y3Njb2xsX2wod3MxLCB3czIsIGNfbG9jYWxlX3QpOworCisJaWYgKHRlc3Rsb2Nh bGUtPnJldmVyc2Vfc29ydCkKKwkJcmV0dXJuIC1yZXQ7CisJZWxzZQorCQlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgc2l6ZV90Cit0ZXN0X3N0cnhmcm1fbChjaGFyICpzMSwgY29uc3QgY2hhciAq IHMyLCBzaXplX3QgbiwgbG9jYWxlX3QgbG9jKQoreworCXRlc3RfbG9jYWxlX3QgKnRlc3Rsb2Nh bGUgPSAodGVzdF9sb2NhbGVfdCAqKWxvYzsKKwlzaXplX3QgcmV0ID0gc3RyeGZybV9sKHMxLCBz MiwgbiwgY19sb2NhbGVfdCk7CisJc2l6ZV90IHJlc3VsdF9zaXplID0gcmV0ICsgMTsKKworCWlm IChuID49IHJlc3VsdF9zaXplKQorCXsKKwkJczFbcmV0XSA9ICdcMCc7CisKKwkJaWYgKHRlc3Rs b2NhbGUtPnJldmVyc2Vfc29ydCkKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0X3NpemU7 IGkrKykKKwkJCQkqKCh1bnNpZ25lZCBjaGFyICopIHMxICsgaSkgXj0gKHVuc2lnbmVkIGNoYXIp IDB4ZmY7CisJfQorCisJcmV0dXJuIHJlc3VsdF9zaXplOworfQorI2VuZGlmCQkJIC8qIEhBVkVf TE9DQUxFX1QgKi8KKworc3RhdGljIGludAordGVzdF9pc3dhbG51bSh3aW50X3Qgd2MpCit7CisJ Y2hhcgkJCSpzYXZlCQk9IHBzdHJkdXAoc2V0bG9jYWxlKExDX0NPTExBVEUsIE5VTEwpKTsKKwlp bnQJCQkJIHJldDsKKworCXNldGxvY2FsZShMQ19DT0xMQVRFLCAiQyIpOworCXJldCA9IGlzd2Fs bnVtKHdjKTsKKwlzZXRsb2NhbGUoTENfQ09MTEFURSwgc2F2ZSk7CisJcGZyZWUoc2F2ZSk7CisK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgd2ludF90Cit0ZXN0X3Rvd2xvd2VyKHdpbnRfdCB3 YykKK3sKKwljaGFyCQkJKnNhdmUJCT0gcHN0cmR1cChzZXRsb2NhbGUoTENfQ09MTEFURSwgTlVM TCkpOworCXdpbnRfdAkJCSByZXQ7CisKKwlzZXRsb2NhbGUoTENfQ09MTEFURSwgIkMiKTsKKwlp ZiAoY3VycmVudF9zZXRsb2NhbGUucmV2ZXJzZV9jYXNlKQorCQlyZXQgPSB0b3d1cHBlcih3Yyk7 CisJZWxzZQorCQlyZXQgPSB0b3dsb3dlcih3Yyk7CisJc2V0bG9jYWxlKExDX0NPTExBVEUsIHNh dmUpOworCXBmcmVlKHNhdmUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHdpbnRfdAor dGVzdF90b3d1cHBlcih3aW50X3Qgd2MpCit7CisJY2hhcgkJCSpzYXZlCQk9IHBzdHJkdXAoc2V0 bG9jYWxlKExDX0NPTExBVEUsIE5VTEwpKTsKKwl3aW50X3QJCQkgcmV0OworCisJc2V0bG9jYWxl KExDX0NPTExBVEUsICJDIik7CisJaWYgKGN1cnJlbnRfc2V0bG9jYWxlLnJldmVyc2VfY2FzZSkK KwkJcmV0ID0gdG93bG93ZXIod2MpOworCWVsc2UKKwkJcmV0ID0gdG93dXBwZXIod2MpOworCXNl dGxvY2FsZShMQ19DT0xMQVRFLCBzYXZlKTsKKwlwZnJlZShzYXZlKTsKKworCXJldHVybiByZXQ7 Cit9CisKKyNpZmRlZiBIQVZFX0xPQ0FMRV9UCitzdGF0aWMgaW50Cit0ZXN0X2lzd2FsbnVtX2wo d2ludF90IHdjLCBsb2NhbGVfdCBsb2NhbGUpCit7CisJcmV0dXJuIGlzd2FsbnVtX2wod2MsIGNf bG9jYWxlX3QpOworfQorCitzdGF0aWMgd2ludF90Cit0ZXN0X3Rvd2xvd2VyX2wod2ludF90IHdj LCBsb2NhbGVfdCBsb2NhbGUpCit7CisJdGVzdF9sb2NhbGVfdCAqdGVzdGxvY2FsZSA9ICh0ZXN0 X2xvY2FsZV90ICopIGxvY2FsZTsKKworCWlmICh0ZXN0bG9jYWxlLT5yZXZlcnNlX2Nhc2UpCisJ CXJldHVybiB0b3d1cHBlcl9sKHdjLCBjX2xvY2FsZV90KTsKKwllbHNlCisJCXJldHVybiB0b3ds b3dlcl9sKHdjLCBjX2xvY2FsZV90KTsKK30KKworc3RhdGljIHdpbnRfdAordGVzdF90b3d1cHBl cl9sKHdpbnRfdCB3YywgbG9jYWxlX3QgbG9jYWxlKQoreworCXRlc3RfbG9jYWxlX3QgKnRlc3Rs b2NhbGUgPSAodGVzdF9sb2NhbGVfdCAqKSBsb2NhbGU7CisKKwlpZiAodGVzdGxvY2FsZS0+cmV2 ZXJzZV9jYXNlKQorCQlyZXR1cm4gdG93bG93ZXJfbCh3YywgY19sb2NhbGVfdCk7CisJZWxzZQor CQlyZXR1cm4gdG93dXBwZXJfbCh3YywgY19sb2NhbGVfdCk7Cit9CisjZW5kaWYJCQkgLyogSEFW RV9MT0NBTEVfVCAqLworCitwZ19saWJjX2xpYnJhcnkgKgordGVzdF9nZXRfbGliY19saWJyYXJ5 KGNvbnN0IGNoYXIgKmNvbGxhdGUsIGNvbnN0IGNoYXIgKmN0eXBlLAorCQkJCQkgIGNvbnN0IGNo YXIgKnZlcnNpb24pCit7CisJcGdfbGliY19saWJyYXJ5ICpsaWIgPSBOVUxMOworCisJaWYgKHRl c3RfbGliY19saWJyYXJ5ICE9IE5VTEwpCisJCXJldHVybiB0ZXN0X2xpYmNfbGlicmFyeTsKKwor CWVyZXBvcnQoTE9HLCAoZXJybXNnKCJsb2FkaW5nIGN1c3RvbSBsaWJjIHByb3ZpZGVyIGZvciB0 ZXN0X2NvbGxhdGlvbl9saWJfaG9va3MiKSkpOworCisJbGliID0gTWVtb3J5Q29udGV4dEFsbG9j KFRvcE1lbW9yeUNvbnRleHQsIHNpemVvZihwZ19saWJjX2xpYnJhcnkpKTsKKwlsaWItPmxpYmNf dmVyc2lvbiA9IHRlc3RfbGliY192ZXJzaW9uOworCWxpYi0+Y19zZXRsb2NhbGUgPSB0ZXN0X3Nl dGxvY2FsZTsKKyNpZmRlZiBIQVZFX0xPQ0FMRV9UCisjaWZuZGVmIFdJTjMyCisJbGliLT5jX25l d2xvY2FsZSA9IHRlc3RfbmV3bG9jYWxlOworCWxpYi0+Y19mcmVlbG9jYWxlID0gdGVzdF9mcmVl bG9jYWxlOworCWxpYi0+Y191c2Vsb2NhbGUgPSB0ZXN0X3VzZWxvY2FsZTsKKyNlbHNlCisJbGli LT5fY3JlYXRlX2xvY2FsZSA9IF90ZXN0X2NyZWF0ZV9sb2NhbGU7CisjZW5kaWYKKyNlbmRpZgor CWxpYi0+Y193Y3N0b21icyA9IHdjc3RvbWJzOworCWxpYi0+Y19tYnN0b3djcyA9IG1ic3Rvd2Nz OworI2lmZGVmIEhBVkVfTE9DQUxFX1QKKyNpZmRlZiBIQVZFX1dDU1RPTUJTX0wKKwlsaWItPmNf d2NzdG9tYnNfbCA9IHdjc3RvbWJzX2w7CisjZW5kaWYKKyNpZmRlZiBIQVZFX01CU1RPV0NTX0wK KwlsaWItPmNfbWJzdG93Y3NfbCA9IG1ic3Rvd2NzX2w7CisjZW5kaWYKKyNlbmRpZgorCWxpYi0+ Y19zdHJjb2xsID0gdGVzdF9zdHJjb2xsOworCWxpYi0+Y193Y3Njb2xsID0gdGVzdF93Y3Njb2xs OworCWxpYi0+Y19zdHJ4ZnJtID0gdGVzdF9zdHJ4ZnJtOworI2lmZGVmIEhBVkVfTE9DQUxFX1QK KwlsaWItPmNfc3RyY29sbF9sID0gdGVzdF9zdHJjb2xsX2w7CisJbGliLT5jX3djc2NvbGxfbCA9 IHRlc3Rfd2NzY29sbF9sOworCWxpYi0+Y19zdHJ4ZnJtX2wgPSB0ZXN0X3N0cnhmcm1fbDsKKyNl bmRpZgorCWxpYi0+Y19pc3dhbG51bSA9IHRlc3RfaXN3YWxudW07CisJbGliLT5jX3Rvd2xvd2Vy ID0gdGVzdF90b3dsb3dlcjsKKwlsaWItPmNfdG93dXBwZXIgPSB0ZXN0X3Rvd3VwcGVyOworI2lm ZGVmIEhBVkVfTE9DQUxFX1QKKwlsaWItPmNfaXN3YWxudW1fbCA9IHRlc3RfaXN3YWxudW1fbDsK KwlsaWItPmNfdG93bG93ZXJfbCA9IHRlc3RfdG93bG93ZXJfbDsKKwlsaWItPmNfdG93dXBwZXJf bCA9IHRlc3RfdG93dXBwZXJfbDsKKyNlbmRpZgorCisJdGVzdF9saWJjX2xpYnJhcnkgPSBsaWI7 CisJcmV0dXJuIGxpYjsKK30KLS0gCjIuMzQuMQoK --=-Wwxe+64KlqA5LB703TXv--