From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 254E9C433EF for ; Thu, 10 Feb 2022 23:28:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345663AbiBJX2t (ORCPT ); Thu, 10 Feb 2022 18:28:49 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:41296 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345656AbiBJX2n (ORCPT ); Thu, 10 Feb 2022 18:28:43 -0500 Received: from mail-ua1-x949.google.com (mail-ua1-x949.google.com [IPv6:2607:f8b0:4864:20::949]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1F93F116D for ; Thu, 10 Feb 2022 15:28:41 -0800 (PST) Received: by mail-ua1-x949.google.com with SMTP id a16-20020ab03c90000000b0033c71cc6a2cso3595882uax.0 for ; Thu, 10 Feb 2022 15:28:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=d9YF2gn6l8jputdnpO3x6JGJt1dtz0Ft//7QQRNUVJE=; b=WmyyULPumeHgxc1ERw2+3vLQ75rhVUdGfGLcSVxJrslYBQod71h0STLWsMb5erYCQY BgoVelMIu1cwLYWJRUeF+JqoT7uGLg7MacGTAv0VpGMULrkN+FOdYVfb+Kf5mdGOkxIw t0dDUQBv0+LFWQLq9vTsvLdiKAdNEIF4UdfE6cn7FYPVbXsYWpR2jw3fyM52ES0YVwku IPC2cogx0MCek6WVMtCzX2NXUuvIMcquiyKuE6GDdPELReTIgsaBIK+ZOBr0bpDv3YDA ZbC5q/zztpsQCzit+SqFoQcyIEiuiStwa+NomXyyoQbx1Iiw8c5lqM9iSN9lFeVFTSA3 h/6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=d9YF2gn6l8jputdnpO3x6JGJt1dtz0Ft//7QQRNUVJE=; b=J7/4EUUTOX0PFUN0aA6IjO+sqPLok6yKk7xGDtONV80yjeWge0/GFRu65HjrvGvAXC uQnlucMrlfuhkg/gSpcDizPW/MfMdbR+hztjEi7bqhjqjPl1UoffJJ50Gq6Quw4FxdcY +Qo9RxHaBj5BWz92dLyH1G9QKgYa+31OUeyWHxbpADKE/Csp6OsNXn/fL2p0T28UnCBJ YwPYWKUjg52EAB+NI6PAy0wbC/ycxQgcIm47OqUSqY4n4OW1jTO4KFzJHvBATR4AP9Ej rXHoOuf4AHNzex9rNexc+AbmphvrRw6tnVAF5bcia87uWye2JNf7leI6aPaX2yQo1Mpt vCGg== X-Gm-Message-State: AOAM533vzPp82aeQ2SPpu5oWfHdimydLcuEgMwxiYwAatjsG0GF54xxh NCbHyrsZavx7HzDcgXZyP8QvEc+4joZPis2CGuY2zYEy3pfpMOvC00HIXQfdNVerplMRAPeP7bY I0ZNqdLbf5Z/2SzkEEQ3/rxjnIqGydkenYLR0AotEls5iypxIOJDjG+sv3mFq5aLHrck= X-Google-Smtp-Source: ABdhPJzi5wtD/9oQf+cS/3y6gfXtS/2UCdeJ9UiylpldkPk5qgepWuKzhjJHAlUHXHfa3t8+0uuxJQXfvw== X-Received: from nhuck.c.googlers.com ([fda3:e722:ac3:cc00:14:4d90:c0a8:39cc]) (user=nhuck job=sendgmr) by 2002:a67:cc1b:: with SMTP id q27mr1154352vsl.67.1644535720255; Thu, 10 Feb 2022 15:28:40 -0800 (PST) Date: Thu, 10 Feb 2022 23:28:08 +0000 In-Reply-To: <20220210232812.798387-1-nhuck@google.com> Message-Id: <20220210232812.798387-4-nhuck@google.com> Mime-Version: 1.0 References: <20220210232812.798387-1-nhuck@google.com> X-Mailer: git-send-email 2.35.1.265.g69c8d7142f-goog Subject: [RFC PATCH v2 3/7] crypto: hctr2 - Add HCTR2 support From: Nathan Huckleberry To: linux-crypto@vger.kernel.org Cc: Herbert Xu , "David S. Miller" , linux-arm-kernel@lists.infradead.org, Paul Crowley , Eric Biggers , Sami Tolvanen , Ard Biesheuvel , Nathan Huckleberry Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org Add support for HCTR2 as a template. HCTR2 is a length-preserving encryption mode that is efficient on processors with instructions to accelerate AES and carryless multiplication, e.g. x86 processors with AES-NI and CLMUL, and ARM processors with the ARMv8 Crypto Extensions. As a length-preserving encryption mode, HCTR2 is suitable for applications such as storage encryption where ciphertext expansion is not possible, and thus authenticated encryption cannot be used. Currently, such applications usually use XTS, or in some cases Adiantum. XTS has the disadvantage that it is a narrow-block mode: a bitflip will only change 16 bytes in the resulting ciphertext or plaintext. This reveals more information to an attacker than necessary. HCTR2 is a wide-block mode, so it provides a stronger security property: a bitflip will change the entire message. HCTR2 is somewhat similar to Adiantum, which is also a wide-block mode. However, HCTR2 is designed to take advantage of existing crypto instructions, while Adiantum targets devices without such hardware support. Adiantum is also designed with longer messages in mind, while HCTR2 is designed to be efficient even on short messages. HCTR2 requires POLYVAL and XCTR as components. More information on HCTR2 can be found here: Length-preserving encryption with HCTR2: https://eprint.iacr.org/2021/1441.pdf Signed-off-by: Nathan Huckleberry --- Changes since v1: * Rename streamcipher -> xctr * Rename hash -> polyval * Use __le64 instead of u64 for little-endian length * memzero_explicit in set_key * Use crypto request length instead of scatterlist length for polyval * Add comments referencing the paper's pseudocode * Derive blockcipher name from xctr name * Pass IV through request context * Use .generic_driver * Make tests more comprehensive crypto/Kconfig | 11 + crypto/Makefile | 1 + crypto/hctr2.c | 532 +++++++++++++++++++++++++++++++++++++ crypto/tcrypt.c | 5 + crypto/testmgr.c | 8 + crypto/testmgr.h | 670 +++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 1227 insertions(+) create mode 100644 crypto/hctr2.c diff --git a/crypto/Kconfig b/crypto/Kconfig index 0c61d03530a6..2a9029f51caf 100644 --- a/crypto/Kconfig +++ b/crypto/Kconfig @@ -524,6 +524,17 @@ config CRYPTO_ADIANTUM =20 If unsure, say N. =20 +config CRYPTO_HCTR2 + tristate "HCTR2 support" + select CRYPTO_XCTR + select CRYPTO_POLYVAL + select CRYPTO_MANAGER + help + HCTR2 is a length-preserving encryption mode for storage encryption tha= t + is efficient on processors with instructions to accelerate AES and + carryless multiplication, e.g. x86 processors with AES-NI and CLMUL, an= d + ARM processors with the ARMv8 crypto extensions. + config CRYPTO_ESSIV tristate "ESSIV support for block encryption" select CRYPTO_AUTHENC diff --git a/crypto/Makefile b/crypto/Makefile index 561f901a91d4..2dca9dbdede6 100644 --- a/crypto/Makefile +++ b/crypto/Makefile @@ -94,6 +94,7 @@ obj-$(CONFIG_CRYPTO_LRW) +=3D lrw.o obj-$(CONFIG_CRYPTO_XTS) +=3D xts.o obj-$(CONFIG_CRYPTO_CTR) +=3D ctr.o obj-$(CONFIG_CRYPTO_XCTR) +=3D xctr.o +obj-$(CONFIG_CRYPTO_HCTR2) +=3D hctr2.o obj-$(CONFIG_CRYPTO_KEYWRAP) +=3D keywrap.o obj-$(CONFIG_CRYPTO_ADIANTUM) +=3D adiantum.o obj-$(CONFIG_CRYPTO_NHPOLY1305) +=3D nhpoly1305.o diff --git a/crypto/hctr2.c b/crypto/hctr2.c new file mode 100644 index 000000000000..6ccc2a2f9038 --- /dev/null +++ b/crypto/hctr2.c @@ -0,0 +1,532 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * HCTR2 length-preserving encryption mode + * + * Copyright 2021 Google LLC + */ + + +/* + * HCTR2 is a length-preserving encryption mode that is efficient on + * processors with instructions to accelerate aes and carryless + * multiplication, e.g. x86 processors with AES-NI and CLMUL, and ARM + * processors with the ARMv8 crypto extensions. + * + * For more details, see the paper: Length-preserving encryption with HCTR= 2 + * (https://eprint.iacr.org/2021/1441.pdf) + */ + +#include +#include +#include +#include +#include +#include + +#define BLOCKCIPHER_BLOCK_SIZE 16 + +/* + * The specification allows variable-length tweaks, but Linux's crypto API + * currently only allows algorithms to support a single length. The "natu= ral" + * tweak length for HCTR2 is 16, since that fits into one POLYVAL block fo= r + * the best performance. But longer tweaks are useful for fscrypt, to avo= id + * needing to derive per-file keys. So instead we use two blocks, or 32 b= ytes. + */ +#define TWEAK_SIZE 32 + +struct hctr2_instance_ctx { + struct crypto_cipher_spawn blockcipher_spawn; + struct crypto_skcipher_spawn xctr_spawn; + struct crypto_shash_spawn polyval_spawn; +}; + +struct hctr2_tfm_ctx { + struct crypto_cipher *blockcipher; + struct crypto_skcipher *xctr; + struct crypto_shash *polyval; + u8 L[BLOCKCIPHER_BLOCK_SIZE]; +}; + +struct hctr2_request_ctx { + u8 first_block[BLOCKCIPHER_BLOCK_SIZE]; + u8 xctr_iv[BLOCKCIPHER_BLOCK_SIZE]; + struct scatterlist *bulk_part_dst; + struct scatterlist *bulk_part_src; + struct scatterlist sg_src[2]; + struct scatterlist sg_dst[2]; + /* Sub-requests, must be last */ + union { + struct shash_desc hash_desc; + struct skcipher_request xctr_req; + } u; +}; + +static int hctr2_setkey(struct crypto_skcipher *tfm, const u8 *key, + unsigned int keylen) +{ + struct hctr2_tfm_ctx *tctx =3D crypto_skcipher_ctx(tfm); + u8 hbar[BLOCKCIPHER_BLOCK_SIZE]; + int err; + + crypto_cipher_clear_flags(tctx->blockcipher, CRYPTO_TFM_REQ_MASK); + crypto_cipher_set_flags(tctx->blockcipher, + crypto_skcipher_get_flags(tfm) & + CRYPTO_TFM_REQ_MASK); + err =3D crypto_cipher_setkey(tctx->blockcipher, key, keylen); + if (err) + return err; + + crypto_skcipher_clear_flags(tctx->xctr, CRYPTO_TFM_REQ_MASK); + crypto_skcipher_set_flags(tctx->xctr, + crypto_skcipher_get_flags(tfm) & + CRYPTO_TFM_REQ_MASK); + err =3D crypto_skcipher_setkey(tctx->xctr, key, keylen); + if (err) + return err; + + memset(tctx->L, 0, sizeof(tctx->L)); + memset(hbar, 0, sizeof(hbar)); + tctx->L[0] =3D 0x01; + crypto_cipher_encrypt_one(tctx->blockcipher, tctx->L, tctx->L); + crypto_cipher_encrypt_one(tctx->blockcipher, hbar, hbar); + + crypto_shash_clear_flags(tctx->polyval, CRYPTO_TFM_REQ_MASK); + crypto_shash_set_flags(tctx->polyval, crypto_skcipher_get_flags(tfm) & + CRYPTO_TFM_REQ_MASK); + err =3D crypto_shash_setkey(tctx->polyval, hbar, BLOCKCIPHER_BLOCK_SIZE); + memzero_explicit(hbar, sizeof(hbar)); + return err; +} + +static int hctr2_hash_tweak(struct skcipher_request *req) +{ + __le64 tweak_length_block[2]; + struct crypto_skcipher *tfm =3D crypto_skcipher_reqtfm(req); + const struct hctr2_tfm_ctx *tctx =3D crypto_skcipher_ctx(tfm); + struct hctr2_request_ctx *rctx =3D skcipher_request_ctx(req); + struct shash_desc *hash_desc =3D &rctx->u.hash_desc; + int err; + + memset(tweak_length_block, 0, sizeof(tweak_length_block)); + if (req->cryptlen % POLYVAL_BLOCK_SIZE =3D=3D 0) + tweak_length_block[0] =3D cpu_to_le64(TWEAK_SIZE * 8 * 2 + 2); + else + tweak_length_block[0] =3D cpu_to_le64(TWEAK_SIZE * 8 * 2 + 3); + + hash_desc->tfm =3D tctx->polyval; + err =3D crypto_shash_init(hash_desc); + if (err) + return err; + + err =3D crypto_shash_update(hash_desc, (u8 *)tweak_length_block, + sizeof(tweak_length_block)); + if (err) + return err; + return crypto_shash_update(hash_desc, req->iv, TWEAK_SIZE); +} + +static int hctr2_hash_message(struct skcipher_request *req, + struct scatterlist *sgl, + u8 digest[POLYVAL_DIGEST_SIZE]) +{ + u8 padding[BLOCKCIPHER_BLOCK_SIZE]; + struct hctr2_request_ctx *rctx =3D skcipher_request_ctx(req); + struct shash_desc *hash_desc =3D &rctx->u.hash_desc; + const unsigned int bulk_len =3D req->cryptlen - BLOCKCIPHER_BLOCK_SIZE; + struct sg_mapping_iter miter; + unsigned int remainder =3D bulk_len % BLOCKCIPHER_BLOCK_SIZE; + int err, i; + int n =3D 0; + + sg_miter_start(&miter, sgl, sg_nents(sgl), + SG_MITER_FROM_SG | SG_MITER_ATOMIC); + for (i =3D 0; i < bulk_len; i +=3D n) { + sg_miter_next(&miter); + n =3D min_t(unsigned int, miter.length, bulk_len - i); + err =3D crypto_shash_update(hash_desc, miter.addr, n); + if (err) + break; + } + sg_miter_stop(&miter); + + if (err) + return err; + + if (remainder) { + memset(padding, 0, BLOCKCIPHER_BLOCK_SIZE); + padding[0] =3D 0x01; + err =3D crypto_shash_update(hash_desc, padding, + BLOCKCIPHER_BLOCK_SIZE - remainder); + if (err) + return err; + } + return crypto_shash_final(hash_desc, digest); +} + +static int hctr2_finish(struct skcipher_request *req) +{ + struct hctr2_request_ctx *rctx =3D skcipher_request_ctx(req); + u8 digest[POLYVAL_DIGEST_SIZE]; + int err; + + // U =3D UU ^ H(T || V) + err =3D hctr2_hash_tweak(req); + if (err) + return err; + err =3D hctr2_hash_message(req, rctx->bulk_part_dst, digest); + if (err) + return err; + crypto_xor(rctx->first_block, digest, BLOCKCIPHER_BLOCK_SIZE); + + // Copy U into dst scatterlist + scatterwalk_map_and_copy(rctx->first_block, req->dst, + 0, BLOCKCIPHER_BLOCK_SIZE, 1); + return 0; +} + +static void hctr2_xctr_done(struct crypto_async_request *areq, + int err) +{ + struct skcipher_request *req =3D areq->data; + + if (!err) + err =3D hctr2_finish(req); + + skcipher_request_complete(req, err); +} + +static int hctr2_crypt(struct skcipher_request *req, bool enc) +{ + struct crypto_skcipher *tfm =3D crypto_skcipher_reqtfm(req); + const struct hctr2_tfm_ctx *tctx =3D crypto_skcipher_ctx(tfm); + struct hctr2_request_ctx *rctx =3D skcipher_request_ctx(req); + u8 digest[POLYVAL_DIGEST_SIZE]; + int bulk_len =3D req->cryptlen - BLOCKCIPHER_BLOCK_SIZE; + int err; + + // Requests must be at least one block + if (req->cryptlen < BLOCKCIPHER_BLOCK_SIZE) + return -EINVAL; + + // Copy M into a temporary buffer + scatterwalk_map_and_copy(rctx->first_block, req->src, + 0, BLOCKCIPHER_BLOCK_SIZE, 0); + + // Create scatterlists for N and V + rctx->bulk_part_src =3D scatterwalk_ffwd(rctx->sg_src, req->src, + BLOCKCIPHER_BLOCK_SIZE); + rctx->bulk_part_dst =3D scatterwalk_ffwd(rctx->sg_dst, req->dst, + BLOCKCIPHER_BLOCK_SIZE); + + // MM =3D M ^ H(T || N) + err =3D hctr2_hash_tweak(req); + if (err) + return err; + err =3D hctr2_hash_message(req, rctx->bulk_part_src, digest); + if (err) + return err; + crypto_xor(digest, rctx->first_block, BLOCKCIPHER_BLOCK_SIZE); + + // UU =3D E(MM) + if (enc) + crypto_cipher_encrypt_one(tctx->blockcipher, rctx->first_block, + digest); + else + crypto_cipher_decrypt_one(tctx->blockcipher, rctx->first_block, + digest); + + // S =3D MM ^ UU ^ L + crypto_xor(digest, rctx->first_block, BLOCKCIPHER_BLOCK_SIZE); + crypto_xor_cpy(rctx->xctr_iv, digest, tctx->L, BLOCKCIPHER_BLOCK_SIZE); + + // V =3D XCTR(S, N) + skcipher_request_set_tfm(&rctx->u.xctr_req, tctx->xctr); + skcipher_request_set_crypt(&rctx->u.xctr_req, rctx->bulk_part_src, + rctx->bulk_part_dst, bulk_len, + rctx->xctr_iv); + skcipher_request_set_callback(&rctx->u.xctr_req, + req->base.flags, + hctr2_xctr_done, req); + return crypto_skcipher_encrypt(&rctx->u.xctr_req) ?: + hctr2_finish(req); +} + +static int hctr2_encrypt(struct skcipher_request *req) +{ + return hctr2_crypt(req, true); +} + +static int hctr2_decrypt(struct skcipher_request *req) +{ + return hctr2_crypt(req, false); +} + +static int hctr2_init_tfm(struct crypto_skcipher *tfm) +{ + struct skcipher_instance *inst =3D skcipher_alg_instance(tfm); + struct hctr2_instance_ctx *ictx =3D skcipher_instance_ctx(inst); + struct hctr2_tfm_ctx *tctx =3D crypto_skcipher_ctx(tfm); + struct crypto_skcipher *xctr; + struct crypto_cipher *blockcipher; + struct crypto_shash *polyval; + unsigned int subreq_size; + int err; + + xctr =3D crypto_spawn_skcipher(&ictx->xctr_spawn); + if (IS_ERR(xctr)) + return PTR_ERR(xctr); + + blockcipher =3D crypto_spawn_cipher(&ictx->blockcipher_spawn); + if (IS_ERR(blockcipher)) { + err =3D PTR_ERR(blockcipher); + goto err_free_xctr; + } + + polyval =3D crypto_spawn_shash(&ictx->polyval_spawn); + if (IS_ERR(polyval)) { + err =3D PTR_ERR(polyval); + goto err_free_blockcipher; + } + + tctx->xctr =3D xctr; + tctx->blockcipher =3D blockcipher; + tctx->polyval =3D polyval; + + BUILD_BUG_ON(offsetofend(struct hctr2_request_ctx, u) !=3D + sizeof(struct hctr2_request_ctx)); + subreq_size =3D max(sizeof_field(struct hctr2_request_ctx, u.hash_desc) + + crypto_shash_descsize(polyval), sizeof_field(struct + hctr2_request_ctx, u.xctr_req) + + crypto_skcipher_reqsize(xctr)); + + crypto_skcipher_set_reqsize(tfm, offsetof(struct hctr2_request_ctx, u) + + subreq_size); + return 0; + +err_free_blockcipher: + crypto_free_cipher(blockcipher); +err_free_xctr: + crypto_free_skcipher(xctr); + return err; +} + +static void hctr2_exit_tfm(struct crypto_skcipher *tfm) +{ + struct hctr2_tfm_ctx *tctx =3D crypto_skcipher_ctx(tfm); + + crypto_free_cipher(tctx->blockcipher); + crypto_free_skcipher(tctx->xctr); + crypto_free_shash(tctx->polyval); +} + +static void hctr2_free_instance(struct skcipher_instance *inst) +{ + struct hctr2_instance_ctx *ictx =3D skcipher_instance_ctx(inst); + + crypto_drop_cipher(&ictx->blockcipher_spawn); + crypto_drop_skcipher(&ictx->xctr_spawn); + crypto_drop_shash(&ictx->polyval_spawn); + kfree(inst); +} + +/* + * Check for a supported set of inner algorithms. + * See the comment at the beginning of this file. + */ +static bool hctr2_supported_algorithms(struct skcipher_alg *xctr_alg, + struct crypto_alg *blockcipher_alg, + struct shash_alg *polyval_alg) +{ + if (strncmp(xctr_alg->base.cra_name, "xctr(", 4) !=3D 0) + return false; + + if (blockcipher_alg->cra_blocksize !=3D BLOCKCIPHER_BLOCK_SIZE) + return false; + + if (strcmp(polyval_alg->base.cra_name, "polyval") !=3D 0) + return false; + + return true; +} + +static int hctr2_create_common(struct crypto_template *tmpl, + struct rtattr **tb, + const char *blockcipher_name, + const char *xctr_name, + const char *polyval_name) +{ + u32 mask; + struct skcipher_instance *inst; + struct hctr2_instance_ctx *ictx; + struct skcipher_alg *xctr_alg; + struct crypto_alg *blockcipher_alg; + struct shash_alg *polyval_alg; + int err; + + err =3D crypto_check_attr_type(tb, CRYPTO_ALG_TYPE_SKCIPHER, &mask); + if (err) + return err; + + inst =3D kzalloc(sizeof(*inst) + sizeof(*ictx), GFP_KERNEL); + if (!inst) + return -ENOMEM; + ictx =3D skcipher_instance_ctx(inst); + + /* Stream cipher, xctr(block_cipher) */ + err =3D crypto_grab_skcipher(&ictx->xctr_spawn, + skcipher_crypto_instance(inst), + xctr_name, 0, mask); + if (err) + goto err_free_inst; + xctr_alg =3D crypto_spawn_skcipher_alg(&ictx->xctr_spawn); + + /* Block cipher, e.g. "aes" */ + err =3D crypto_grab_cipher(&ictx->blockcipher_spawn, + skcipher_crypto_instance(inst), + blockcipher_name, 0, mask); + if (err) + goto err_free_inst; + blockcipher_alg =3D crypto_spawn_cipher_alg(&ictx->blockcipher_spawn); + + /* Polyval =CE=B5-=E2=88=86U hash function */ + err =3D crypto_grab_shash(&ictx->polyval_spawn, + skcipher_crypto_instance(inst), + polyval_name, 0, mask); + if (err) + goto err_free_inst; + polyval_alg =3D crypto_spawn_shash_alg(&ictx->polyval_spawn); + + /* Check the set of algorithms */ + if (!hctr2_supported_algorithms(xctr_alg, blockcipher_alg, + polyval_alg)) { + pr_warn("Unsupported HCTR2 instantiation: (%s,%s,%s)\n", + xctr_alg->base.cra_name, blockcipher_alg->cra_name, + polyval_alg->base.cra_name); + err =3D -EINVAL; + goto err_free_inst; + } + + /* Instance fields */ + + err =3D -ENAMETOOLONG; + if (snprintf(inst->alg.base.cra_name, CRYPTO_MAX_ALG_NAME, "hctr2(%s)", + blockcipher_alg->cra_name) >=3D CRYPTO_MAX_ALG_NAME) + goto err_free_inst; + if (snprintf(inst->alg.base.cra_driver_name, CRYPTO_MAX_ALG_NAME, + "hctr2_base(%s,%s)", + xctr_alg->base.cra_driver_name, + polyval_alg->base.cra_driver_name) >=3D CRYPTO_MAX_ALG_NAME) + goto err_free_inst; + + inst->alg.base.cra_blocksize =3D BLOCKCIPHER_BLOCK_SIZE; + inst->alg.base.cra_ctxsize =3D sizeof(struct hctr2_tfm_ctx); + inst->alg.base.cra_alignmask =3D xctr_alg->base.cra_alignmask | + polyval_alg->base.cra_alignmask; + /* + * The hash function is called twice, so it is weighted higher than the + * xctr and blockcipher. + */ + inst->alg.base.cra_priority =3D (2 * xctr_alg->base.cra_priority + + 4 * polyval_alg->base.cra_priority + + blockcipher_alg->cra_priority) / 7; + + inst->alg.setkey =3D hctr2_setkey; + inst->alg.encrypt =3D hctr2_encrypt; + inst->alg.decrypt =3D hctr2_decrypt; + inst->alg.init =3D hctr2_init_tfm; + inst->alg.exit =3D hctr2_exit_tfm; + inst->alg.min_keysize =3D crypto_skcipher_alg_min_keysize(xctr_alg); + inst->alg.max_keysize =3D crypto_skcipher_alg_max_keysize(xctr_alg); + inst->alg.ivsize =3D TWEAK_SIZE; + + inst->free =3D hctr2_free_instance; + + err =3D skcipher_register_instance(tmpl, inst); + if (err) { +err_free_inst: + hctr2_free_instance(inst); + } + return err; +} + +static int hctr2_create_base(struct crypto_template *tmpl, struct rtattr *= *tb) +{ + const char *xctr_name; + const char *polyval_name; + char blockcipher_name[CRYPTO_MAX_ALG_NAME]; + int len; + + xctr_name =3D crypto_attr_alg_name(tb[1]); + if (IS_ERR(xctr_name)) + return PTR_ERR(xctr_name); + + if (!strncmp(xctr_name, "xctr(", 5)) { + len =3D strscpy(blockcipher_name, xctr_name + 5, + sizeof(blockcipher_name)); + + if (len < 1) + return -EINVAL; + + if (blockcipher_name[len - 1] !=3D ')') + return -EINVAL; + + blockcipher_name[len - 1] =3D 0; + } else + return -EINVAL; + + polyval_name =3D crypto_attr_alg_name(tb[2]); + if (IS_ERR(polyval_name)) + return PTR_ERR(polyval_name); + + return hctr2_create_common(tmpl, tb, blockcipher_name, + xctr_name, polyval_name); +} + +static int hctr2_create(struct crypto_template *tmpl, struct rtattr **tb) +{ + const char *blockcipher_name; + char xctr_name[CRYPTO_MAX_ALG_NAME]; + + blockcipher_name =3D crypto_attr_alg_name(tb[1]); + if (IS_ERR(blockcipher_name)) + return PTR_ERR(blockcipher_name); + + if (snprintf(xctr_name, CRYPTO_MAX_ALG_NAME, "xctr(%s)", + blockcipher_name) >=3D CRYPTO_MAX_ALG_NAME) + return -ENAMETOOLONG; + return hctr2_create_common(tmpl, tb, blockcipher_name, + xctr_name, "polyval"); +} + +/* hctr2(blockcipher_name) */ +/* hctr2_base(xctr_name, polyval_name) */ +static struct crypto_template hctr2_tmpls[] =3D { + { + .name =3D "hctr2_base", + .create =3D hctr2_create_base, + .module =3D THIS_MODULE, + }, { + .name =3D "hctr2", + .create =3D hctr2_create, + .module =3D THIS_MODULE, + } +}; + +static int __init hctr2_module_init(void) +{ + return crypto_register_templates(hctr2_tmpls, ARRAY_SIZE(hctr2_tmpls)); +} + +static void __exit hctr2_module_exit(void) +{ + return crypto_unregister_templates(hctr2_tmpls, + ARRAY_SIZE(hctr2_tmpls)); +} + +subsys_initcall(hctr2_module_init); +module_exit(hctr2_module_exit); + +MODULE_DESCRIPTION("HCTR2 length-preserving encryption mode"); +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS_CRYPTO("hctr2"); +MODULE_IMPORT_NS(CRYPTO_INTERNAL); diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c index ced7467bb481..3a5cd6831e65 100644 --- a/crypto/tcrypt.c +++ b/crypto/tcrypt.c @@ -2191,6 +2191,11 @@ static int do_test(const char *alg, u32 type, u32 ma= sk, int m, u32 num_mb) 16, 16, aead_speed_template_19, num_mb); break; =20 + case 226: + test_cipher_speed("hctr2(aes)", ENCRYPT, sec, NULL, + 0, speed_template_32); + break; + case 300: if (alg) { test_hash_speed(alg, sec, generic_hash_speed_template); diff --git a/crypto/testmgr.c b/crypto/testmgr.c index 3e54d17fe644..2e92a4a89285 100644 --- a/crypto/testmgr.c +++ b/crypto/testmgr.c @@ -4991,6 +4991,14 @@ static const struct alg_test_desc alg_test_descs[] = =3D { .suite =3D { .hash =3D __VECS(ghash_tv_template) } + }, { + .alg =3D "hctr2(aes)", + .generic_driver =3D + "hctr2_base(xctr(aes-generic),polyval-generic)", + .test =3D alg_test_skcipher, + .suite =3D { + .cipher =3D __VECS(aes_hctr2_tv_template) + } }, { .alg =3D "hmac(md5)", .test =3D alg_test_hash, diff --git a/crypto/testmgr.h b/crypto/testmgr.h index da3736e51982..a16b631730e9 100644 --- a/crypto/testmgr.h +++ b/crypto/testmgr.h @@ -33630,4 +33630,674 @@ static const struct hash_testvec polyval_tv_templ= ate[] =3D { }, }; =20 +/* + * Test vectors generated using https://github.com/google/hctr2 + */ +static const struct cipher_testvec aes_hctr2_tv_template[] =3D { + { + .key =3D "\xe1\x15\x66\x3c\x8d\xc6\x3a\xff" + "\xef\x41\xd7\x47\xa2\xcc\x8a\xba", + .iv =3D "\xc3\xbe\x2a\xcb\xb5\x39\x86\xf1" + "\x91\xad\x6c\xf4\xde\x74\x45\x63" + "\x5c\x7a\xd5\xcc\x8b\x76\xef\x0e" + "\xcf\x2c\x60\x69\x37\xfd\x07\x96", + .ptext =3D "\x65\x75\xae\xd3\xe2\xbc\x43\x5c" + "\xb3\x1a\xd8\x05\xc3\xd0\x56\x29", + .ctext =3D "\x11\x91\xea\x74\x58\xcc\xd5\xa2" + "\xd0\x55\x9e\x3d\xfe\x7f\xc8\xfe", + .klen =3D 16, + .len =3D 16, + }, + { + .key =3D "\x50\xcc\x28\x5c\xaf\x62\xa2\x4e" + "\x02\xf0\xc0\x5e\xc1\x29\x80\xca", + .iv =3D "\x64\xa5\xd5\xf9\xf4\x68\x26\xea" + "\xce\xbb\x6c\xdd\xa5\xef\x39\xb5" + "\x5c\x93\xdf\x1b\x93\x21\xbe\x49" + "\xff\x9e\x86\x4f\x7c\x4d\x51\x15", + .ptext =3D "\x34\xc1\x08\x3e\x9c\x28\x0a\xcf" + "\x33\xdb\x3f\x0d\x05\x27\xa4\xed", + .ctext =3D "\x7c\xae\xbb\x37\x4a\x55\x94\x5b" + "\xc6\x6f\x8f\x9f\x68\x5f\xc7\x62", + .klen =3D 16, + .len =3D 16, + }, + { + .key =3D "\xda\xce\x30\x85\xe7\x06\xe6\x02" + "\x8f\x02\xbf\x9a\x82\x6e\x54\xde", + .iv =3D "\xf6\x7a\x28\xce\xfb\x6c\xb3\xc5" + "\x47\x81\x58\x69\x07\xe5\x22\xdb" + "\x66\x93\xd7\xe9\xbd\x5c\x7f\xf0" + "\x8a\x0b\x07\x09\xbb\xf1\x48\xc4", + .ptext =3D "\x01\xcd\xa4\x47\x8e\x4e\xbc\x7d" + "\xfd\xd8\xe9\xaa\xc7\x37\x25\x3d" + "\x56", + .ctext =3D "\xf3\xb2\x9e\xde\x96\x5d\xf0\xf6" + "\xb6\x43\x57\xc5\x53\xe8\xf9\x05" + "\x87", + .klen =3D 16, + .len =3D 17, + }, + { + .key =3D "\xe1\x22\xee\x5b\x3c\x92\x0e\x52" + "\xd7\x95\x88\xa3\x79\x6c\xf8\xd9", + .iv =3D "\xb8\xd1\xe7\x32\x36\x96\xd6\x44" + "\x9c\x36\xad\x31\x5c\xaa\xf0\x17" + "\x33\x2f\x29\x04\x31\xf5\x46\xc1" + "\x2f\x1b\xfa\xa1\xbd\x86\xc4\xd3", + .ptext =3D "\x87\xd7\xb8\x2d\x12\x62\xed\x41" + "\x30\x7e\xd4\x0c\xfd\xb9\x6d\x8e" + "\x30", + .ctext =3D "\xb6\x6a\x0c\x71\x96\x22\xb9\x40" + "\xa2\x04\x56\x14\x22\xae\xaa\x94" + "\x26", + .klen =3D 16, + .len =3D 17, + }, + { + .key =3D "\xd8\x4f\xbc\x25\x8d\x3b\x30\xb9" + "\x1a\xbc\x20\x6d\xae\xfd\xc8\x26" + "\xcd\x23\xb4\x86\x28\x07\x4c\x3e", + .iv =3D "\xeb\xd5\x97\xaf\x03\x85\x03\x83" + "\x0c\x6b\xa3\xab\xe1\x00\x15\xf2" + "\x4c\x7d\xfb\x98\x50\xcd\x19\x75" + "\x28\x27\xe8\x18\x02\xbc\xe0\xdd", + .ptext =3D "\x7e\x3a\x0e\x9c\xa8\x52\xa8\x3a" + "\x15\x53\xed\x5c\x0b\x2a\x96\x5c" + "\x71\x24\x82\xee\x53\xd4\xd5\xde" + "\x27\xcd\x36\x18\xf7\x91\x4f", + .ctext =3D "\xd0\x82\xa9\xdb\x77\x12\x3b\x90" + "\xe6\xd5\xdd\x26\x6f\x31\xeb\xdf" + "\xd4\x0c\x56\x2e\x84\x76\x77\x86" + "\x35\xb4\x0f\xfb\x1d\x5a\x15", + .klen =3D 24, + .len =3D 31, + }, + { + .key =3D "\xba\xb1\x52\xa3\x76\x5e\x83\xee" + "\x49\xe6\xcf\x01\xf6\x63\xa4\xba" + "\xa1\x87\xbd\x58\xbb\x20\x96\xa5", + .iv =3D "\x1d\x6a\x6d\x26\x40\x9c\xce\x76" + "\x5e\xb8\x22\x1a\x10\xb6\x1d\xf2" + "\x93\x1f\x87\x04\xb8\xb4\x6e\xf8" + "\x35\x51\x96\x1b\xee\x7f\x8a\x60", + .ptext =3D "\x67\xdf\x68\x07\xc0\xf9\x45\x4c" + "\x1a\xfe\xd3\xc9\xb6\x7d\xe5\x18" + "\x54\xf5\xb3\xae\xf6\xda\x52\x27" + "\x3e\x52\xe8\xed\x04\xd7\x80", + .ctext =3D "\x11\xa1\x00\x15\x7a\x46\x92\x82" + "\x07\x5b\x64\xf1\x61\x27\x25\xc5" + "\xc5\xaf\xa7\x2e\x61\x09\xb5\x5a" + "\x9a\x1d\xc9\x20\xf0\xab\x1e", + .klen =3D 24, + .len =3D 31, + }, + { + .key =3D "\xbf\xaf\xd7\x67\x8c\x47\xcf\x21" + "\x8a\xa5\xdd\x32\x25\x47\xbe\x4f" + "\xf1\x3a\x0b\xa6\xaa\x2d\xcf\x09", + .iv =3D "\xd9\xe8\xf0\x92\x4e\xfc\x1d\xf2" + "\x81\x37\x7c\x8f\xf1\x59\x09\x20" + "\xf4\x46\x51\x86\x4f\x54\x8b\x32" + "\x58\xd1\x99\x8b\x8c\x03\xeb\x5d", + .ptext =3D "\xcd\x64\x90\xf9\x7c\xe5\x0e\x5a" + "\x75\xe7\x8e\x39\x86\xec\x20\x43" + "\x8a\x49\x09\x15\x47\xf4\x3c\x89" + "\x21\xeb\xcf\x4e\xcf\x91\xb5\x40" + "\xcd\xe5\x4d\x5c\x6f\xf2\xd2\x80" + "\xfa\xab\xb3\x76\x9f\x7f\x84\x0a", + .ctext =3D "\x44\x98\x64\x15\xb7\x0b\x80\xa3" + "\xb9\xca\x23\xff\x3b\x0b\x68\x74" + "\xbb\x3e\x20\x19\x9f\x28\x71\x2a" + "\x48\x3c\x7c\xe2\xef\xb5\x10\xac" + "\x82\x9f\xcd\x08\x8f\x6b\x16\x6f" + "\xc3\xbb\x07\xfb\x3c\xb0\x1b\x27", + .klen =3D 24, + .len =3D 48, + }, + { + .key =3D "\xbe\xbb\x77\x46\x06\x9c\xf4\x4d" + "\x37\x9a\xe6\x3f\x27\xa7\x3b\x6e" + "\x7a\x36\xb8\xb3\xff\xba\x51\xcc", + .iv =3D "\x06\xbc\x8f\x66\x6a\xbe\xed\x5e" + "\x51\xf2\x72\x11\x3a\x56\x85\x21" + "\x44\xfe\xec\x47\x2b\x09\xb8\x6f" + "\x08\x85\x2a\x93\xa3\xc3\xab\x5e", + .ptext =3D "\xc7\x74\x42\xf1\xea\xc5\x37\x2d" + "\xc2\xa0\xf6\xd5\x5a\x9a\xbb\xa0" + "\xb2\xfd\x54\x8e\x98\xa0\xea\xc7" + "\x79\x09\x65\x63\xa0\x2e\x82\x4e" + "\x49\x9c\x39\x67\xd0\x0d\x80\x3e" + "\x1a\x86\x84\x2b\x20\x23\xdf\xa7", + .ctext =3D "\x5f\xa3\x11\xca\x93\xfa\x24\x3a" + "\x24\xb6\xcf\x1e\x76\xbc\xab\xc4" + "\xf3\x24\xa0\x27\xac\x90\xec\xe9" + "\x73\x28\x7d\x35\x67\xfe\x2e\xa8" + "\x89\x77\xac\xeb\xc3\x68\x36\xf4" + "\x8f\x80\x2c\xf1\x80\xef\x49\x49", + .klen =3D 24, + .len =3D 48, + }, + { + .key =3D "\xa5\x28\x24\x34\x1a\x3c\xd8\xf7" + "\x05\x91\x8f\xee\x85\x1f\x35\x7f" + "\x80\x3d\xfc\x9b\x94\xf6\xfc\x9e" + "\x19\x09\x00\xa9\x04\x31\x4f\x11", + .iv =3D "\xa1\xba\x49\x95\xff\x34\x6d\xb8" + "\xcd\x87\x5d\x5e\xfd\xea\x85\xdb" + "\x8a\x7b\x5e\xb2\x5d\x57\xdd\x62" + "\xac\xa9\x8c\x41\x42\x94\x75\xb7", + .ptext =3D "\x69\xb4\xe8\x8c\x37\xe8\x67\x82" + "\xf1\xec\x5d\x04\xe5\x14\x91\x13" + "\xdf\xf2\x87\x1b\x69\x81\x1d\x71" + "\x70\x9e\x9c\x3b\xde\x49\x70\x11" + "\xa0\xa3\xdb\x0d\x54\x4f\x66\x69" + "\xd7\xdb\x80\xa7\x70\x92\x68\xce" + "\x81\x04\x2c\xc6\xab\xae\xe5\x60" + "\x15\xe9\x6f\xef\xaa\x8f\xa7\xa7" + "\x63\x8f\xf2\xf0\x77\xf1\xa8\xea" + "\xe1\xb7\x1f\x9e\xab\x9e\x4b\x3f" + "\x07\x87\x5b\x6f\xcd\xa8\xaf\xb9" + "\xfa\x70\x0b\x52\xb8\xa8\xa7\x9e" + "\x07\x5f\xa6\x0e\xb3\x9b\x79\x13" + "\x79\xc3\x3e\x8d\x1c\x2c\x68\xc8" + "\x51\x1d\x3c\x7b\x7d\x79\x77\x2a" + "\x56\x65\xc5\x54\x23\x28\xb0\x03", + .ctext =3D "\xeb\xf9\x98\x86\x3c\x40\x9f\x16" + "\x84\x01\xf9\x06\x0f\xeb\x3c\xa9" + "\x4c\xa4\x8e\x5d\xc3\x8d\xe5\xd3" + "\xae\xa6\xe6\xcc\xd6\x2d\x37\x4f" + "\x99\xc8\xa3\x21\x46\xb8\x69\xf2" + "\xe3\x14\x89\xd7\xb9\xf5\x9e\x4e" + "\x07\x93\x6f\x78\x8e\x6b\xea\x8f" + "\xfb\x43\xb8\x3e\x9b\x4c\x1d\x7e" + "\x20\x9a\xc5\x87\xee\xaf\xf6\xf9" + "\x46\xc5\x18\x8a\xe8\x69\xe7\x96" + "\x52\x55\x5f\x00\x1e\x1a\xdc\xcc" + "\x13\xa5\xee\xff\x4b\x27\xca\xdc" + "\x10\xa6\x48\x76\x98\x43\x94\xa3" + "\xc7\xe2\xc9\x65\x9b\x08\x14\x26" + "\x1d\x68\xfb\x15\x0a\x33\x49\x84" + "\x84\x33\x5a\x1b\x24\x46\x31\x92", + .klen =3D 32, + .len =3D 128, + }, + { + .key =3D "\x91\x35\xf6\xba\x36\x94\x44\x6e" + "\xf5\x7b\xaf\xe7\x56\x15\x0c\x8d" + "\x98\x4b\x5d\xc0\x99\x39\xd9\x75" + "\x71\xa6\x6b\x80\xa1\x92\xde\x6b", + .iv =3D "\xda\xf3\x93\x88\x19\x70\xd2\x7a" + "\x8f\xe5\x7a\xbc\xec\x74\xc0\xf1" + "\x6b\x46\x37\x79\x92\x91\x1d\x15" + "\x3b\xe4\x89\x2c\xf9\x50\x7f\x5c", + .ptext =3D "\x66\xd2\xd9\xaa\x76\x91\x8d\x04" + "\x78\xd3\x93\xeb\xe4\x9d\x88\xad" + "\x14\x6b\x05\x96\x55\x60\x17\x04" + "\x9d\x4d\xf0\x0d\x49\x78\xcc\xfc" + "\xc7\x46\xf3\x3f\xf5\x21\x39\x51" + "\xd1\x88\x84\x3e\x34\xde\x86\x19" + "\xa4\x3b\x75\x18\x98\x89\x0a\x93" + "\xe9\x6e\xbf\x52\xa1\x63\xf8\xa2" + "\x77\xab\x57\xed\x5e\xc9\x64\xed" + "\x5c\x1a\x1d\xb6\x14\xbc\x7b\x26" + "\x27\xce\xf1\xfe\xc5\x74\xd0\x9d" + "\x60\x77\x87\x36\xfd\x70\x54\x03" + "\x8b\x9a\x36\x11\xf9\x0f\x7d\x1a" + "\x66\xc5\xf0\x21\xbb\xfc\x84\xcd" + "\x45\xbc\xdf\xc0\x81\xd3\xdf\x0f" + "\x14\x20\xff\x20\x05\x0c\x47\x38", + .ctext =3D "\xd4\x99\xdc\x4c\xba\xb9\x9c\xca" + "\x5c\x85\x98\x3b\x11\x5e\xfb\xdc" + "\xed\x49\x0f\x49\xf2\x45\x6c\x2c" + "\x16\x4d\x75\xbf\x9b\x28\x20\x38" + "\xea\xdf\xbe\x72\xea\xf8\x6e\x34" + "\x7a\x97\x7c\xe8\xa9\x4f\x2f\xb0" + "\x45\x48\x05\xcd\xd6\xc8\x59\xe5" + "\x5f\x51\x42\xc4\x4e\x12\x64\xce" + "\x99\xb1\xaf\x78\x13\x4d\x7e\x4a" + "\xa5\x01\x0c\xd1\xad\xfe\x31\xbb" + "\xbf\x1c\x02\x58\xa4\xd5\xd2\x70" + "\x8a\xf8\x7d\x8f\x5d\xdf\xe7\x10" + "\x09\xd6\xe1\x05\x50\xe8\x31\x7a" + "\xa7\xfc\x4b\xf7\xad\xd5\x10\x29" + "\x76\x60\x3e\x71\x99\x0a\x22\xe4" + "\x29\xba\x63\xb7\x16\x56\xa2\x37", + .klen =3D 32, + .len =3D 128, + }, + { + .key =3D "\x36\x45\x11\xa2\x98\x5f\x96\x7c" + "\xc6\xb4\x94\x31\x0a\x67\x09\x32" + "\x6c\x6f\x6f\x00\xf0\x17\xcb\xac" + "\xa5\xa9\x47\x9e\x2e\x85\x2f\xfa", + .iv =3D "\x28\x88\xaa\x9b\x59\x3b\x1e\x97" + "\x82\xe5\x5c\x9e\x6d\x14\x11\x19" + "\x6e\x38\x8f\xd5\x40\x2b\xca\xf9" + "\x7b\x4c\xe4\xa3\xd0\xd2\x8a\x13", + .ptext =3D "\x95\xd2\xf7\x71\x1b\xca\xa5\x86" + "\xd9\x48\x01\x93\x2f\x79\x55\x29" + "\x71\x13\x15\x0e\xe6\x12\xbc\x4d" + "\x8a\x31\xe3\x40\x2a\xc6\x5e\x0d" + "\x68\xbb\x4a\x62\x8d\xc7\x45\x77" + "\xd2\xb8\xc7\x1d\xf1\xd2\x5d\x97" + "\xcf\xac\x52\xe5\x32\x77\xb6\xda" + "\x30\x85\xcf\x2b\x98\xe9\xaa\x34" + "\x62\xb5\x23\x9e\xb7\xa6\xd4\xe0" + "\xb4\x58\x18\x8c\x4d\xde\x4d\x01" + "\x83\x89\x24\xca\xfb\x11\xd4\x82" + "\x30\x7a\x81\x35\xa0\xb4\xd4\xb6" + "\x84\xea\x47\x91\x8c\x19\x86\x25" + "\xa6\x06\x8d\x78\xe6\xed\x87\xeb" + "\xda\xea\x73\x7c\xbf\x66\xb8\x72" + "\xe3\x0a\xb8\x0c\xcb\x1a\x73\xf1" + "\xa7\xca\x0a\xde\x57\x2b\xbd\x2b" + "\xeb\x8b\x24\x38\x22\xd3\x0e\x1f" + "\x17\xa0\x84\x98\x31\x77\xfd\x34" + "\x6a\x4e\x3d\x84\x4c\x0e\xfb\xed" + "\xc8\x2a\x51\xfa\xd8\x73\x21\x8a" + "\xdb\xb5\xfe\x1f\xee\xc4\xe8\x65" + "\x54\x84\xdd\x96\x6d\xfd\xd3\x31" + "\x77\x36\x52\x6b\x80\x4f\x9e\xb4" + "\xa2\x55\xbf\x66\x41\x49\x4e\x87" + "\xa7\x0c\xca\xe7\xa5\xc5\xf6\x6f" + "\x27\x56\xe2\x48\x22\xdd\x5f\x59" + "\x3c\xf1\x9f\x83\xe5\x2d\xfb\x71" + "\xad\xd1\xae\x1b\x20\x5c\x47\xb7" + "\x3b\xd3\x14\xce\x81\x42\xb1\x0a" + "\xf0\x49\xfa\xc2\xe7\x86\xbf\xcd" + "\xb0\x95\x9f\x8f\x79\x41\x54", + .ctext =3D "\xf6\x57\x51\xc4\x25\x61\x2d\xfa" + "\xd6\xd9\x3f\x9a\x81\x51\xdd\x8e" + "\x3d\xe7\xaa\x2d\xb1\xda\xc8\xa6" + "\x9d\xaa\x3c\xab\x62\xf2\x80\xc3" + "\x2c\xe7\x58\x72\x1d\x44\xc5\x28" + "\x7f\xb4\xf9\xbc\x9c\xb2\xab\x8e" + "\xfa\xd1\x4d\x72\xd9\x79\xf5\xa0" + "\x24\x3e\x90\x25\x31\x14\x38\x45" + "\x59\xc8\xf6\xe2\xc6\xf6\xc1\xa7" + "\xb2\xf8\xa7\xa9\x2b\x6f\x12\x3a" + "\xb0\x81\xa4\x08\x57\x59\xb1\x56" + "\x4c\x8f\x18\x55\x33\x5f\xd6\x6a" + "\xc6\xa0\x4b\xd6\x6b\x64\x3e\x9e" + "\xfd\x66\x16\xe2\xdb\xeb\x5f\xb3" + "\x50\x50\x3e\xde\x8d\x72\x76\x01" + "\xbe\xcc\xc9\x52\x09\x2d\x8d\xe7" + "\xd6\xc3\x66\xdb\x36\x08\xd1\x77" + "\xc8\x73\x46\x26\x24\x29\xbf\x68" + "\x2d\x2a\x99\x43\x56\x55\xe4\x93" + "\xaf\xae\x4d\xe7\x55\x4a\xc0\x45" + "\x26\xeb\x3b\x12\x90\x7c\xdc\xd1" + "\xd5\x6f\x0a\xd0\xa9\xd7\x4b\x89" + "\x0b\x07\xd8\x86\xad\xa1\xc4\x69" + "\x1f\x5e\x8b\xc4\x9e\x91\x41\x25" + "\x56\x98\x69\x78\x3a\x9e\xae\x91" + "\xd8\xd9\xfa\xfb\xff\x81\x25\x09" + "\xfc\xed\x2d\x87\xbc\x04\x62\x97" + "\x35\xe1\x26\xc2\x46\x1c\xcf\xd7" + "\x14\xed\x02\x09\xa5\xb2\xb6\xaa" + "\x27\x4e\x61\xb3\x71\x6b\x47\x16" + "\xb7\xe8\xd4\xaf\x52\xeb\x6a\x6b" + "\xdb\x4c\x65\x21\x9e\x1c\x36", + .klen =3D 32, + .len =3D 255, + }, + { + .key =3D "\x56\x33\x37\x21\xc4\xea\x8b\x88" + "\x67\x5e\xee\xb8\x0b\x6c\x04\x43" + "\x17\xc5\x2b\x8a\x37\x17\x8b\x37" + "\x60\x57\x3f\xa7\x82\xcd\xb9\x09", + .iv =3D "\x88\xee\x9b\x35\x21\x2d\x41\xa1" + "\x16\x0d\x7f\xdf\x57\xc9\xb9\xc3" + "\xf6\x30\x53\xbf\x89\x46\xe6\x87" + "\x60\xc8\x5e\x59\xdd\x8a\x7b\xfe", + .ptext =3D "\x49\xe2\x0a\x4f\x7a\x60\x75\x9b" + "\x95\x98\x2c\xe7\x4f\xb4\x58\xb9" + "\x24\x54\x46\x34\xdf\x58\x31\xe7" + "\x23\xc6\xa2\x60\x4a\xd2\x59\xb6" + "\xeb\x3e\xc2\xf8\xe5\x14\x3c\x6d" + "\x4b\x72\xcb\x5f\xcb\xa7\x47\xb9" + "\x7a\x49\xfc\xf1\xad\x92\x76\x55" + "\xac\x59\xdc\x3a\xc6\x8b\x7c\xdb" + "\x06\xcd\xea\x6a\x34\x51\xb7\xb2" + "\xe5\x39\x3c\x87\x00\x90\xc2\xbb" + "\xb2\xa5\x2c\x58\xc2\x9b\xe3\x77" + "\x95\x82\x50\xcb\x23\xdc\x18\xd8" + "\x4e\xbb\x13\x5d\x35\x3d\x9a\xda" + "\xe4\x75\xa1\x75\x17\x59\x8c\x6a" + "\xb2\x76\x7e\xd4\x45\x31\x0a\x45" + "\x2e\x60\x83\x3d\xdc\x8d\x43\x20" + "\x58\x24\xb2\x9d\xd5\x59\x64\x32" + "\x4e\x6f\xb9\x9c\xde\x77\x4d\x65" + "\xdf\xc0\x7a\xeb\x40\x80\xe8\xe5" + "\xc7\xc1\x77\x3b\xae\x2b\x85\xce" + "\x56\xfa\x43\x41\x96\x23\x8e\xab" + "\xd3\xc8\x65\xef\x0b\xfe\x42\x4c" + "\x3a\x8a\x54\x55\xab\xa3\xf9\x62" + "\x9f\x8e\xbe\x33\x9a\xfe\x6b\x52" + "\xd4\x4c\x93\x84\x7c\x7e\xb1\x5e" + "\x32\xaf\x6e\x21\x44\xd2\x6b\x56" + "\xcd\x2c\x9d\x03\x3b\x50\x1f\x0a" + "\xc3\x98\xff\x3a\x1d\x36\x7e\x6d" + "\xcf\xbc\xe7\xe8\xfc\x24\x55\xfd" + "\x72\x3d\xa7\x3f\x09\xa7\x38\xe6" + "\x57\x8d\xc4\x74\x7f\xd3\x26\x75" + "\xda\xfa\x29\x35\xc1\x31\x82", + .ctext =3D "\x02\x23\x74\x02\x56\xf4\x7b\xc8" + "\x55\x61\xa0\x6b\x68\xff\xde\x87" + "\x9d\x66\x77\x86\x98\x63\xab\xd5" + "\xd6\xf4\x7e\x3b\xf4\xae\x97\x13" + "\x79\xc0\x96\x75\x87\x33\x2a\x0e" + "\xc2\x1a\x13\x90\x5f\x6e\x93\xed" + "\x54\xfe\xee\x05\x48\xae\x20\x2d" + "\xa9\x2b\x98\xa3\xc8\xaf\x17\x6b" + "\x82\x4a\x9a\x7f\xf0\xce\xd9\x26" + "\x16\x28\xeb\xf4\x4b\xab\x7d\x6e" + "\x96\x27\xd2\x90\xbb\x8d\x98\xdc" + "\xb8\x6f\x7a\x98\x67\xef\x1c\xfb" + "\xd0\x23\x1a\x2f\xc9\x58\x4e\xc6" + "\x38\x03\x53\x61\x8e\xff\x55\x46" + "\x47\xe8\x1f\x9d\x66\x95\x9b\x7f" + "\x26\xac\xf2\x61\xa4\x05\x15\xcb" + "\x62\xb6\x6b\x7c\x57\x95\x9d\x25" + "\x9e\x83\xb1\x88\x50\x39\xb5\x34" + "\x8a\x04\x2b\x76\x1b\xb8\x8c\x57" + "\x26\x21\x99\x2e\x93\xc8\x9b\xb2" + "\x31\xe1\xe3\x27\xde\xc8\xf2\xc5" + "\x01\x7a\x45\x38\x6f\xe7\xa0\x9d" + "\x8c\x41\x99\xec\x3d\xb6\xaf\x66" + "\x76\xac\xc8\x78\xb0\xdf\xcf\xce" + "\xa1\x29\x46\x6f\xe3\x35\x4a\x67" + "\x59\x27\x14\xcc\x04\xdb\xb3\x03" + "\xb7\x2d\x8d\xf9\x75\x9e\x59\x42" + "\xe3\xa4\xf8\xf4\x82\x27\xa3\xa9" + "\x79\xac\x6b\x8a\xd8\xdb\x29\x73" + "\x02\xbb\x6f\x85\x00\x92\xea\x59" + "\x30\x1b\x19\xf3\xab\x6e\x99\x9a" + "\xf2\x23\x27\xc6\x59\x5a\x9c", + .klen =3D 32, + .len =3D 255, + }, + { + .key =3D "\xd3\x81\x72\x18\x23\xff\x6f\x4a" + "\x25\x74\x29\x0d\x51\x8a\x0e\x13" + "\xc1\x53\x5d\x30\x8d\xee\x75\x0d" + "\x14\xd6\x69\xc9\x15\xa9\x0c\x60", + .iv =3D "\x65\x9b\xd4\xa8\x7d\x29\x1d\xf4" + "\xc4\xd6\x9b\x6a\x28\xab\x64\xe2" + "\x62\x81\x97\xc5\x81\xaa\xf9\x44" + "\xc1\x72\x59\x82\xaf\x16\xc8\x2c", + .ptext =3D "\xc7\x6b\x52\x6a\x10\xf0\xcc\x09" + "\xc1\x12\x1d\x6d\x21\xa6\x78\xf5" + "\x05\xa3\x69\x60\x91\x36\x98\x57" + "\xba\x0c\x14\xcc\xf3\x2d\x73\x03" + "\xc6\xb2\x5f\xc8\x16\x27\x37\x5d" + "\xd0\x0b\x87\xb2\x50\x94\x7b\x58" + "\x04\xf4\xe0\x7f\x6e\x57\x8e\xc9" + "\x41\x84\xc1\xb1\x7e\x4b\x91\x12" + "\x3a\x8b\x5d\x50\x82\x7b\xcb\xd9" + "\x9a\xd9\x4e\x18\x06\x23\x9e\xd4" + "\xa5\x20\x98\xef\xb5\xda\xe5\xc0" + "\x8a\x6a\x83\x77\x15\x84\x1e\xae" + "\x78\x94\x9d\xdf\xb7\xd1\xea\x67" + "\xaa\xb0\x14\x15\xfa\x67\x21\x84" + "\xd3\x41\x2a\xce\xba\x4b\x4a\xe8" + "\x95\x62\xa9\x55\xf0\x80\xad\xbd" + "\xab\xaf\xdd\x4f\xa5\x7c\x13\x36" + "\xed\x5e\x4f\x72\xad\x4b\xf1\xd0" + "\x88\x4e\xec\x2c\x88\x10\x5e\xea" + "\x12\xc0\x16\x01\x29\xa3\xa0\x55" + "\xaa\x68\xf3\xe9\x9d\x3b\x0d\x3b" + "\x6d\xec\xf8\xa0\x2d\xf0\x90\x8d" + "\x1c\xe2\x88\xd4\x24\x71\xf9\xb3" + "\xc1\x9f\xc5\xd6\x76\x70\xc5\x2e" + "\x9c\xac\xdb\x90\xbd\x83\x72\xba" + "\x6e\xb5\xa5\x53\x83\xa9\xa5\xbf" + "\x7d\x06\x0e\x3c\x2a\xd2\x04\xb5" + "\x1e\x19\x38\x09\x16\xd2\x82\x1f" + "\x75\x18\x56\xb8\x96\x0b\xa6\xf9" + "\xcf\x62\xd9\x32\x5d\xa9\xd7\x1d" + "\xec\xe4\xdf\x1b\xbe\xf1\x36\xee" + "\xe3\x7b\xb5\x2f\xee\xf8\x53\x3d" + "\x6a\xb7\x70\xa9\xfc\x9c\x57\x25" + "\xf2\x89\x10\xd3\xb8\xa8\x8c\x30" + "\xae\x23\x4f\x0e\x13\x66\x4f\xe1" + "\xb6\xc0\xe4\xf8\xef\x93\xbd\x6e" + "\x15\x85\x6b\xe3\x60\x81\x1d\x68" + "\xd7\x31\x87\x89\x09\xab\xd5\x96" + "\x1d\xf3\x6d\x67\x80\xca\x07\x31" + "\x5d\xa7\xe4\xfb\x3e\xf2\x9b\x33" + "\x52\x18\xc8\x30\xfe\x2d\xca\x1e" + "\x79\x92\x7a\x60\x5c\xb6\x58\x87" + "\xa4\x36\xa2\x67\x92\x8b\xa4\xb7" + "\xf1\x86\xdf\xdc\xc0\x7e\x8f\x63" + "\xd2\xa2\xdc\x78\xeb\x4f\xd8\x96" + "\x47\xca\xb8\x91\xf9\xf7\x94\x21" + "\x5f\x9a\x9f\x5b\xb8\x40\x41\x4b" + "\x66\x69\x6a\x72\xd0\xcb\x70\xb7" + "\x93\xb5\x37\x96\x05\x37\x4f\xe5" + "\x8c\xa7\x5a\x4e\x8b\xb7\x84\xea" + "\xc7\xfc\x19\x6e\x1f\x5a\xa1\xac" + "\x18\x7d\x52\x3b\xb3\x34\x62\x99" + "\xe4\x9e\x31\x04\x3f\xc0\x8d\x84" + "\x17\x7c\x25\x48\x52\x67\x11\x27" + "\x67\xbb\x5a\x85\xca\x56\xb2\x5c" + "\xe6\xec\xd5\x96\x3d\x15\xfc\xfb" + "\x22\x25\xf4\x13\xe5\x93\x4b\x9a" + "\x77\xf1\x52\x18\xfa\x16\x5e\x49" + "\x03\x45\xa8\x08\xfa\xb3\x41\x92" + "\x79\x50\x33\xca\xd0\xd7\x42\x55" + "\xc3\x9a\x0c\x4e\xd9\xa4\x3c\x86" + "\x80\x9f\x53\xd1\xa4\x2e\xd1\xbc" + "\xf1\x54\x6e\x93\xa4\x65\x99\x8e" + "\xdf\x29\xc0\x64\x63\x07\xbb\xea", + .ctext =3D "\x9f\x72\x87\xc7\x17\xfb\x20\x15" + "\x65\xb3\x55\xa8\x1c\x8e\x52\x32" + "\xb1\x82\x8d\xbf\xb5\x9f\x10\x0a" + "\xe8\x0c\x70\x62\xef\x89\xb6\x1f" + "\x73\xcc\xe4\xcc\x7a\x3a\x75\x4a" + "\x26\xe7\xf5\xd7\x7b\x17\x39\x2d" + "\xd2\x27\x6e\xf9\x2f\x9e\xe2\xf6" + "\xfa\x16\xc2\xf2\x49\x26\xa7\x5b" + "\xe7\xca\x25\x0e\x45\xa0\x34\xc2" + "\x9a\x37\x79\x7e\x7c\x58\x18\x94" + "\x10\xa8\x7c\x48\xa9\xd7\x63\x89" + "\x9e\x61\x4d\x26\x34\xd9\xf0\xb1" + "\x2d\x17\x2c\x6f\x7c\x35\x0e\xbe" + "\x77\x71\x7c\x17\x5b\xab\x70\xdb" + "\x2f\x54\x0f\xa9\xc8\xf4\xf5\xab" + "\x52\x04\x3a\xb8\x03\xa7\xfd\x57" + "\x45\x5e\xbc\x77\xe1\xee\x79\x8c" + "\x58\x7b\x1f\xf7\x75\xde\x68\x17" + "\x98\x85\x8a\x18\x5c\xd2\x39\x78" + "\x7a\x6f\x26\x6e\xe1\x13\x91\xdd" + "\xdf\x0e\x6e\x67\xcc\x51\x53\xd8" + "\x17\x5e\xce\xa7\xe4\xaf\xfa\xf3" + "\x4f\x9f\x01\x9b\x04\xe7\xfc\xf9" + "\x6a\xdc\x1d\x0c\x9a\xaa\x3a\x7a" + "\x73\x03\xdf\xbf\x3b\x82\xbe\xb0" + "\xb4\xa4\xcf\x07\xd7\xde\x71\x25" + "\xc5\x10\xee\x0a\x15\x96\x8b\x4f" + "\xfe\xb8\x28\xbd\x4a\xcd\xeb\x9f" + "\x5d\x00\xc1\xee\xe8\x16\x44\xec" + "\xe9\x7b\xd6\x85\x17\x29\xcf\x58" + "\x20\xab\xf7\xce\x6b\xe7\x71\x7d" + "\x4f\xa8\xb0\xe9\x7d\x70\xd6\x0b" + "\x2e\x20\xb1\x1a\x63\x37\xaa\x2c" + "\x94\xee\xd5\xf6\x58\x2a\xf4\x7a" + "\x4c\xba\xf5\xe9\x3c\x6f\x95\x13" + "\x5f\x96\x81\x5b\xb5\x62\xf2\xd7" + "\x8d\xbe\xa1\x31\x51\xe6\xfe\xc9" + "\x07\x7d\x0f\x00\x3a\x66\x8c\x4b" + "\x94\xaa\xe5\x56\xde\xcd\x74\xa7" + "\x48\x67\x6f\xed\xc9\x6a\xef\xaf" + "\x9a\xb7\xae\x60\xfa\xc0\x37\x39" + "\xa5\x25\xe5\x22\xea\x82\x55\x68" + "\x3e\x30\xc3\x5a\xb6\x29\x73\x7a" + "\xb6\xfb\x34\xee\x51\x7c\x54\xe5" + "\x01\x4d\x72\x25\x32\x4a\xa3\x68" + "\x80\x9a\x89\xc5\x11\x66\x4c\x8c" + "\x44\x50\xbe\xd7\xa0\xee\xa6\xbb" + "\x92\x0c\xe6\xd7\x83\x51\xb1\x69" + "\x63\x40\xf3\xf4\x92\x84\xc4\x38" + "\x29\xfb\xb4\x84\xa0\x19\x75\x16" + "\x60\xbf\x0a\x9c\x89\xee\xad\xb4" + "\x43\xf9\x71\x39\x45\x7c\x24\x83" + "\x30\xbb\xee\x28\xb0\x86\x7b\xec" + "\x93\xc1\xbf\xb9\x97\x1b\x96\xef" + "\xee\x58\x35\x61\x12\x19\xda\x25" + "\x77\xe5\x80\x1a\x31\x27\x9b\xe4" + "\xda\x8b\x7e\x51\x4d\xcb\x01\x19" + "\x4f\xdc\x92\x1a\x17\xd5\x6b\xf4" + "\x50\xe3\x06\xe4\x76\x9f\x65\x00" + "\xbd\x7a\xe2\x64\x26\xf2\xe4\x7e" + "\x40\xf2\x80\xab\x62\xd5\xef\x23" + "\x8b\xfb\x6f\x24\x6e\x9b\x66\x0e" + "\xf4\x1c\x24\x1e\x1d\x26\x95\x09" + "\x94\x3c\xb2\xb6\x02\xa7\xd9\x9a", + .klen =3D 32, + .len =3D 512, + }, + { + .key =3D "\x83\x8a\xa7\xd6\x31\x10\xb1\x67" + "\xbf\xed\xf6\x93\x1d\x2e\xc9\x4c" + "\x18\xab\x98\x2c\xed\x5a\x14\x30" + "\xc9\xe0\x4b\x67\xb5\x0d\x6c\xb4", + .iv =3D "\x79\x9a\xea\x92\x10\xd8\x0b\x6a" + "\xb4\xcf\x49\x29\xdb\x50\xce\x54" + "\xf2\x93\x09\x1d\xcc\xd6\x1a\xf7" + "\x80\x49\x74\x83\x76\x50\xaf\x2c", + .ptext =3D "\xce\x7a\x3c\xde\x95\x4b\x2f\x63" + "\x39\x5f\x50\x87\x39\xfb\x5e\x42" + "\x17\xcd\xff\x5e\x5c\x77\x67\x21" + "\x9c\xae\xad\xa6\xbf\x89\xc2\x7e" + "\x99\xfe\xec\x25\x3d\x94\x7f\xcf" + "\x43\x52\xad\x87\x9d\x12\x54\x08" + "\xc7\xb8\xe2\x5c\x4e\x4f\xc0\x6e" + "\x1c\xff\xc1\x30\x66\xd4\x2e\x60" + "\xe6\xc6\xfa\xf5\xc1\xc8\xb1\xd0" + "\x89\x83\x13\x00\x35\x52\x3f\x08" + "\xb7\x62\x77\xbd\x9b\x66\x35\xd3" + "\x57\x24\x94\xe6\x2c\x2e\x9e\xda" + "\x44\xf9\x6b\xae\x0b\xd7\x9f\x55" + "\x86\x4e\x1b\x4b\xe2\x32\x20\x9c" + "\x03\x15\xd1\x6e\x22\x56\xc7\x5c" + "\xe4\x51\xbc\xd8\x21\xd0\xc4\x19" + "\x18\xce\x62\x73\xad\x0c\x31\xa6" + "\x66\xed\x1a\x7d\x54\xcb\xa4\x7c" + "\xeb\xed\xdf\x80\x02\x8d\x26\x4b" + "\xd4\x97\x13\x9d\xeb\xe7\x0b\x09" + "\x99\x4d\xe6\xba\xb5\x38\x37\xff" + "\x7d\xc5\xf2\xb9\x8a\xa8\x00\x4d" + "\xff\x43\xb4\x22\xc0\x0b\x72\xea" + "\x5b\x3e\xc3\xdb\xc8\xa7\xb0\x50" + "\x48\x90\x6d\x8a\xf7\x30\x62\xd8" + "\x3a\xcf\xf9\xcd\x6a\x67\xab\x55" + "\x64\x70\x64\xda\x23\xed\x58\x26" + "\xf6\x90\x2a\x6e\x5a\x98\xd4\x8e" + "\x54\x6a\x9d\x1d\x29\xef\x84\xfa" + "\x3c\xba\x2b\x5e\x34\x45\x7d\xfc" + "\x45\x4f\x13\xb7\xdd\xd7\x2b\xb7" + "\x1a\xb4\x86\x5e\xcf\x35\x54\xc3" + "\xb6\x0d\xe7\xcd\x46\x44\xa4\xc4" + "\x48\x2f\xd0\xfe\x72\xe1\xf0\x92" + "\x1f\x53\xe4\x95\x45\x03\xb9\x9e" + "\xc8\xe0\xcc\x04\x9c\xdd\x19\x19" + "\xa3\xcf\x87\xec\xf1\x84\x0e\x65" + "\xbc\xc9\xe7\x12\x26\x45\xe6\x2e" + "\x9e\xe4\x79\x6c\xa0\x04\xdb\xca" + "\x72\x97\x29\xfc\x20\x43\xd0\x37" + "\x64\xf3\x33\x90\x14\xcf\x00\xa2" + "\xf9\x1b\xa4\x9b\x30\x4b\xd0\x7a" + "\x0d\x52\x2b\x1a\xd1\xea\xe8\x84" + "\x8b\x44\x61\xb1\xfd\x4d\xdb\xf7" + "\x0b\xd5\x55\x32\x83\xb2\x71\x42" + "\x8a\x7f\x80\xc6\xff\x94\x16\xdf" + "\xb5\xfe\x59\xe7\xb5\xa4\x58\x9c" + "\x88\xd2\xb4\x63\x8b\xcb\x9b\x9f" + "\xc6\x5c\x94\x1b\x41\x8b\xa2\x66" + "\xda\x0d\xbc\x9d\x3a\x59\xd8\x66" + "\xd0\x67\xfa\x50\x6f\xe6\xd0\x7a" + "\xd1\x06\x23\x42\x0e\x14\x20\x65" + "\x20\x73\xaa\x34\xac\xa7\x6d\xe5" + "\x23\x28\xa0\xcf\x57\x3e\x19\x00" + "\x3a\x85\x2f\x9d\x79\x15\x29\x4c" + "\x9f\xf7\x3d\xa3\x24\x3c\xa0\x68" + "\xc6\x4c\x44\x5a\x87\xe7\xbc\x0f" + "\xbb\x19\xea\x3e\x37\xc4\x3b\xcc" + "\x1e\xdd\xfa\xfa\x71\x0e\x37\xd5" + "\x3a\xc5\x1e\x90\x5e\xf0\x13\x1f" + "\x7a\x35\xb2\x63\x29\xb6\x27\xf2" + "\x0a\x57\x5c\x43\xe2\xc7\x02\x4a" + "\xc6\x56\xf0\xc1\xa7\xd8\xc6\x3c" + "\x81\xd4\x5e\x16\x5e\x2a\x77\x77", + .ctext =3D "\xd8\xb0\xf0\x69\xef\x35\x99\x52" + "\xf1\x05\xd6\x07\x09\x8f\x2a\xd2" + "\x69\xea\x3e\x3a\xc1\xa6\xbe\xdb" + "\x9a\x13\xa2\x19\x59\x6d\xc9\x52" + "\xf4\xf7\x3e\xed\xb2\xe2\xac\x2a" + "\x75\xfa\x63\x29\x7a\x28\x97\x2b" + "\xdb\xd2\xa4\xef\x5a\x92\x0a\xf0" + "\xb5\x83\x60\x4c\x14\x20\x68\x19" + "\x89\xee\xc6\x5b\xe9\x62\x58\x63" + "\x41\x3e\xca\xa4\x5b\xdb\x49\x9b" + "\xc0\x32\x10\x24\x19\xc2\xb1\x36" + "\x7d\x04\xec\xc2\x1a\xfd\x74\xe5" + "\x20\xe5\x2c\x0b\x9d\x70\x8b\x1a" + "\xb5\xaf\x57\xad\x88\x8c\xe8\x51" + "\x87\x0e\xca\x11\xfe\x93\x17\x6b" + "\xa3\x03\x72\x66\x5e\x73\x2f\x15" + "\xfd\xd3\xbb\x16\x44\x56\x73\x55" + "\x0e\xfb\xfa\x71\x4e\x21\x40\xe4" + "\xac\x77\x0a\x8a\x2a\x62\xd6\xcc" + "\x30\x11\x75\xbb\x9c\x7f\x70\x31" + "\x6d\xbc\x99\x33\xe6\x01\xfb\xb4" + "\xd6\x5b\x93\xaf\x7e\xb5\x60\x11" + "\x6c\x91\xa4\xd4\xa0\xeb\x9b\xa2" + "\x33\x66\x68\x6b\xb8\xe4\x4f\xb6" + "\x24\x89\x3e\xb7\xdc\xef\x6c\x6f" + "\x80\x8e\x1d\xa0\xbe\xbe\x51\x49" + "\xd7\x63\x62\x71\x37\x9e\x2d\x7f" + "\xa6\x8f\xb8\xee\x9c\x64\x73\xd4" + "\xd3\xe2\x3e\x42\x84\x31\xbb\x83" + "\x19\x15\xdd\xdd\x56\x04\x22\x48" + "\xd1\xb2\x0f\x65\x2f\x92\x56\x52" + "\xb6\x96\x25\x93\x2b\xf1\x86\x9f" + "\x30\x75\x23\xab\x48\x8e\x6c\x71" + "\x1a\x46\x65\xe1\x3b\x8d\x09\xfb" + "\xba\x9a\xb6\x08\xdc\xd6\x3e\x54" + "\x74\xe7\xd2\xe7\x6b\xeb\x01\x46" + "\x6b\xc9\x69\xc6\xaa\x3e\xd5\xe2" + "\xd9\x45\x36\x2e\xf0\x46\x2f\x6f" + "\xcb\x2b\xb7\xf0\xaf\x0a\xe7\x22" + "\xc7\x15\x8d\x7f\x52\x63\x50\x88" + "\x49\xbe\x52\xe7\x20\xf7\x65\x72" + "\x32\xce\x50\x44\x1c\x8b\xe0\x34" + "\x8c\x88\x0d\x2c\x7f\xde\xf9\xfd" + "\xaf\x11\x03\x31\xf8\x86\xba\xe9" + "\xc1\x61\x63\xeb\x64\x9f\x6c\x37" + "\x8e\x20\x93\xdb\x6d\x05\xf3\x3c" + "\x89\x3d\xbe\x8d\x3f\xee\x6d\xa0" + "\xb4\x4b\xc2\xe5\x66\x6a\xa8\xcc" + "\x8c\x06\xa6\xd2\xcd\x16\x73\xae" + "\x28\xf1\x03\x2d\x38\x1a\x1c\x44" + "\xb3\xf7\x35\x5f\xc8\xd1\xdb\xff" + "\x3e\xc6\x65\x19\x06\xfc\x94\x80" + "\x4f\xf5\xea\x33\x39\x02\x6a\x4d" + "\x0e\xa6\x57\xe9\xf6\x38\x32\x0a" + "\x9f\x97\x42\xb4\x23\x0e\xc8\x9d" + "\x32\xdc\xb5\x5a\x94\x8d\x64\xd6" + "\x4d\xcc\x42\xd0\xd8\xf6\x0b\x02" + "\xb3\x51\x37\x46\x61\x59\x58\x00" + "\x8c\x89\xa9\xbb\x00\x09\x4f\x1f" + "\x57\xa1\xf5\x25\x14\x69\x4d\x22" + "\x76\xa7\x5f\x7e\x12\xb5\x51\x5c" + "\x1a\xc6\x54\x95\x7c\x7c\xa3\x6e" + "\xba\xac\xa3\x2f\x13\xcb\x96\xd7" + "\x4f\x45\xd4\xb4\x97\x73\xe4\x43", + .klen =3D 32, + .len =3D 512, + }, +}; + #endif /* _CRYPTO_TESTMGR_H */ --=20 2.35.1.265.g69c8d7142f-goog From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 152A4C433EF for ; Thu, 10 Feb 2022 23:31:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:References: Mime-Version:Message-Id:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=JuIcgjjA1y1kqvwlOU6UICSKvSk5caoZr8/AMIYoP1E=; b=ZcVCapjz/A320kqnGVfoLealbp blQ5yrIpllTfxMOKGAjAIx9kNgwYqjQsL+y4s51ZhY33WRMGr5v6B8kkTvmWpZD0mvc67gxDLxZRH ekurNBxPMNTOA9Kz44qxHjm6fnuok7m0XwZupypSKFgCwE1xDPP8A958brbvKdoXWgcjG4jvf/W4M BC7O0RJmQ4jELRxRggC4EPNwaKpFp1qaxMuUSKEhx8tXM+mN93Wo7O3qW+Hw/FwzuZ8z382ZrINoO IvS2GDJAguPnvaQd1Bluk1sdtrg8VBRdwnK7G0NViYyqcdQJn1WqwXsHE48PbmrDjPV3UDc3ndxrB XJDdl8Ig==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nIIsL-005ANo-Ea; Thu, 10 Feb 2022 23:29:21 +0000 Received: from mail-ua1-x94a.google.com ([2607:f8b0:4864:20::94a]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nIIri-005AEi-7a for linux-arm-kernel@lists.infradead.org; Thu, 10 Feb 2022 23:28:48 +0000 Received: by mail-ua1-x94a.google.com with SMTP id d10-20020ab030ea000000b0033c779854a4so3581649uam.5 for ; Thu, 10 Feb 2022 15:28:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=d9YF2gn6l8jputdnpO3x6JGJt1dtz0Ft//7QQRNUVJE=; b=WmyyULPumeHgxc1ERw2+3vLQ75rhVUdGfGLcSVxJrslYBQod71h0STLWsMb5erYCQY BgoVelMIu1cwLYWJRUeF+JqoT7uGLg7MacGTAv0VpGMULrkN+FOdYVfb+Kf5mdGOkxIw t0dDUQBv0+LFWQLq9vTsvLdiKAdNEIF4UdfE6cn7FYPVbXsYWpR2jw3fyM52ES0YVwku IPC2cogx0MCek6WVMtCzX2NXUuvIMcquiyKuE6GDdPELReTIgsaBIK+ZOBr0bpDv3YDA ZbC5q/zztpsQCzit+SqFoQcyIEiuiStwa+NomXyyoQbx1Iiw8c5lqM9iSN9lFeVFTSA3 h/6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=d9YF2gn6l8jputdnpO3x6JGJt1dtz0Ft//7QQRNUVJE=; b=OpgEusD7pQ6d6nuuiWPPYI0b5wsg/NQHVKFfY383pxy56JJZeSWT23z2tUko06hgPl 83pFDJ/eq6I5d3alz1GgSEw1ro6Q+HB9CZw1rHVjfrJw9nS/8lEhuMVEWq70OIOJkp8w Vq0t4G4EAtzirptXg369CdEscBpONl+8wE7drxQ8jUBJhBa0W3iWVRbj/nY/ydWOOrDo u6/dOfYFRerQeNtvxUMIkJcaYMgyKIhS4fCongwTuuvOYSw2BAmRiJu1jJp7SBHvJXWb 10+cA9Dh+Eqz/Y8/91s2kVOR6a2B8AAfdfzj99y7sDfwYnHywXBeUvLjKtfehVR9ysgo Mk3A== X-Gm-Message-State: AOAM530zO0RInPLxUtMFfZBqMvxPGUa3SUCFk3eBpmqbCWkEpEoOEtR1 6/BaRHMKhDWlxb6D8xyCT8/SKlGyUA== X-Google-Smtp-Source: ABdhPJzi5wtD/9oQf+cS/3y6gfXtS/2UCdeJ9UiylpldkPk5qgepWuKzhjJHAlUHXHfa3t8+0uuxJQXfvw== X-Received: from nhuck.c.googlers.com ([fda3:e722:ac3:cc00:14:4d90:c0a8:39cc]) (user=nhuck job=sendgmr) by 2002:a67:cc1b:: with SMTP id q27mr1154352vsl.67.1644535720255; Thu, 10 Feb 2022 15:28:40 -0800 (PST) Date: Thu, 10 Feb 2022 23:28:08 +0000 In-Reply-To: <20220210232812.798387-1-nhuck@google.com> Message-Id: <20220210232812.798387-4-nhuck@google.com> Mime-Version: 1.0 References: <20220210232812.798387-1-nhuck@google.com> X-Mailer: git-send-email 2.35.1.265.g69c8d7142f-goog Subject: [RFC PATCH v2 3/7] crypto: hctr2 - Add HCTR2 support From: Nathan Huckleberry To: linux-crypto@vger.kernel.org Cc: Herbert Xu , "David S. Miller" , linux-arm-kernel@lists.infradead.org, Paul Crowley , Eric Biggers , Sami Tolvanen , Ard Biesheuvel , Nathan Huckleberry X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220210_152842_369641_47A5FC35 X-CRM114-Status: GOOD ( 25.89 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org QWRkIHN1cHBvcnQgZm9yIEhDVFIyIGFzIGEgdGVtcGxhdGUuICBIQ1RSMiBpcyBhIGxlbmd0aC1w cmVzZXJ2aW5nCmVuY3J5cHRpb24gbW9kZSB0aGF0IGlzIGVmZmljaWVudCBvbiBwcm9jZXNzb3Jz IHdpdGggaW5zdHJ1Y3Rpb25zIHRvCmFjY2VsZXJhdGUgQUVTIGFuZCBjYXJyeWxlc3MgbXVsdGlw bGljYXRpb24sIGUuZy4geDg2IHByb2Nlc3NvcnMgd2l0aApBRVMtTkkgYW5kIENMTVVMLCBhbmQg QVJNIHByb2Nlc3NvcnMgd2l0aCB0aGUgQVJNdjggQ3J5cHRvIEV4dGVuc2lvbnMuCgpBcyBhIGxl bmd0aC1wcmVzZXJ2aW5nIGVuY3J5cHRpb24gbW9kZSwgSENUUjIgaXMgc3VpdGFibGUgZm9yCmFw cGxpY2F0aW9ucyBzdWNoIGFzIHN0b3JhZ2UgZW5jcnlwdGlvbiB3aGVyZSBjaXBoZXJ0ZXh0IGV4 cGFuc2lvbiBpcwpub3QgcG9zc2libGUsIGFuZCB0aHVzIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlv biBjYW5ub3QgYmUgdXNlZC4KQ3VycmVudGx5LCBzdWNoIGFwcGxpY2F0aW9ucyB1c3VhbGx5IHVz ZSBYVFMsIG9yIGluIHNvbWUgY2FzZXMgQWRpYW50dW0uClhUUyBoYXMgdGhlIGRpc2FkdmFudGFn ZSB0aGF0IGl0IGlzIGEgbmFycm93LWJsb2NrIG1vZGU6IGEgYml0ZmxpcCB3aWxsCm9ubHkgY2hh bmdlIDE2IGJ5dGVzIGluIHRoZSByZXN1bHRpbmcgY2lwaGVydGV4dCBvciBwbGFpbnRleHQuICBU aGlzCnJldmVhbHMgbW9yZSBpbmZvcm1hdGlvbiB0byBhbiBhdHRhY2tlciB0aGFuIG5lY2Vzc2Fy eS4KCkhDVFIyIGlzIGEgd2lkZS1ibG9jayBtb2RlLCBzbyBpdCBwcm92aWRlcyBhIHN0cm9uZ2Vy IHNlY3VyaXR5IHByb3BlcnR5OgphIGJpdGZsaXAgd2lsbCBjaGFuZ2UgdGhlIGVudGlyZSBtZXNz YWdlLiAgSENUUjIgaXMgc29tZXdoYXQgc2ltaWxhciB0bwpBZGlhbnR1bSwgd2hpY2ggaXMgYWxz byBhIHdpZGUtYmxvY2sgbW9kZS4gIEhvd2V2ZXIsIEhDVFIyIGlzIGRlc2lnbmVkCnRvIHRha2Ug YWR2YW50YWdlIG9mIGV4aXN0aW5nIGNyeXB0byBpbnN0cnVjdGlvbnMsIHdoaWxlIEFkaWFudHVt CnRhcmdldHMgZGV2aWNlcyB3aXRob3V0IHN1Y2ggaGFyZHdhcmUgc3VwcG9ydC4gIEFkaWFudHVt IGlzIGFsc28KZGVzaWduZWQgd2l0aCBsb25nZXIgbWVzc2FnZXMgaW4gbWluZCwgd2hpbGUgSENU UjIgaXMgZGVzaWduZWQgdG8gYmUKZWZmaWNpZW50IGV2ZW4gb24gc2hvcnQgbWVzc2FnZXMuCgpI Q1RSMiByZXF1aXJlcyBQT0xZVkFMIGFuZCBYQ1RSIGFzIGNvbXBvbmVudHMuICBNb3JlIGluZm9y bWF0aW9uIG9uCkhDVFIyIGNhbiBiZSBmb3VuZCBoZXJlOiBMZW5ndGgtcHJlc2VydmluZyBlbmNy eXB0aW9uIHdpdGggSENUUjI6Cmh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMjEvMTQ0MS5wZGYK ClNpZ25lZC1vZmYtYnk6IE5hdGhhbiBIdWNrbGViZXJyeSA8bmh1Y2tAZ29vZ2xlLmNvbT4KLS0t CgpDaGFuZ2VzIHNpbmNlIHYxOgogKiBSZW5hbWUgc3RyZWFtY2lwaGVyIC0+IHhjdHIKICogUmVu YW1lIGhhc2ggLT4gcG9seXZhbAogKiBVc2UgX19sZTY0IGluc3RlYWQgb2YgdTY0IGZvciBsaXR0 bGUtZW5kaWFuIGxlbmd0aAogKiBtZW16ZXJvX2V4cGxpY2l0IGluIHNldF9rZXkKICogVXNlIGNy eXB0byByZXF1ZXN0IGxlbmd0aCBpbnN0ZWFkIG9mIHNjYXR0ZXJsaXN0IGxlbmd0aCBmb3IgcG9s eXZhbAogKiBBZGQgY29tbWVudHMgcmVmZXJlbmNpbmcgdGhlIHBhcGVyJ3MgcHNldWRvY29kZQog KiBEZXJpdmUgYmxvY2tjaXBoZXIgbmFtZSBmcm9tIHhjdHIgbmFtZQogKiBQYXNzIElWIHRocm91 Z2ggcmVxdWVzdCBjb250ZXh0CiAqIFVzZSAuZ2VuZXJpY19kcml2ZXIKICogTWFrZSB0ZXN0cyBt b3JlIGNvbXByZWhlbnNpdmUKCiBjcnlwdG8vS2NvbmZpZyAgIHwgIDExICsKIGNyeXB0by9NYWtl ZmlsZSAgfCAgIDEgKwogY3J5cHRvL2hjdHIyLmMgICB8IDUzMiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBjcnlwdG8vdGNyeXB0LmMgIHwgICA1ICsKIGNyeXB0by90ZXN0 bWdyLmMgfCAgIDggKwogY3J5cHRvL3Rlc3RtZ3IuaCB8IDY3MCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMjI3IGluc2Vy dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjcnlwdG8vaGN0cjIuYwoKZGlmZiAtLWdpdCBh L2NyeXB0by9LY29uZmlnIGIvY3J5cHRvL0tjb25maWcKaW5kZXggMGM2MWQwMzUzMGE2Li4yYTkw MjlmNTFjYWYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9LY29uZmlnCisrKyBiL2NyeXB0by9LY29uZmln CkBAIC01MjQsNiArNTI0LDE3IEBAIGNvbmZpZyBDUllQVE9fQURJQU5UVU0KIAogCSAgSWYgdW5z dXJlLCBzYXkgTi4KIAorY29uZmlnIENSWVBUT19IQ1RSMgorCXRyaXN0YXRlICJIQ1RSMiBzdXBw b3J0IgorCXNlbGVjdCBDUllQVE9fWENUUgorCXNlbGVjdCBDUllQVE9fUE9MWVZBTAorCXNlbGVj dCBDUllQVE9fTUFOQUdFUgorCWhlbHAKKwkgIEhDVFIyIGlzIGEgbGVuZ3RoLXByZXNlcnZpbmcg ZW5jcnlwdGlvbiBtb2RlIGZvciBzdG9yYWdlIGVuY3J5cHRpb24gdGhhdAorCSAgaXMgZWZmaWNp ZW50IG9uIHByb2Nlc3NvcnMgd2l0aCBpbnN0cnVjdGlvbnMgdG8gYWNjZWxlcmF0ZSBBRVMgYW5k CisJICBjYXJyeWxlc3MgbXVsdGlwbGljYXRpb24sIGUuZy4geDg2IHByb2Nlc3NvcnMgd2l0aCBB RVMtTkkgYW5kIENMTVVMLCBhbmQKKwkgIEFSTSBwcm9jZXNzb3JzIHdpdGggdGhlIEFSTXY4IGNy eXB0byBleHRlbnNpb25zLgorCiBjb25maWcgQ1JZUFRPX0VTU0lWCiAJdHJpc3RhdGUgIkVTU0lW IHN1cHBvcnQgZm9yIGJsb2NrIGVuY3J5cHRpb24iCiAJc2VsZWN0IENSWVBUT19BVVRIRU5DCmRp ZmYgLS1naXQgYS9jcnlwdG8vTWFrZWZpbGUgYi9jcnlwdG8vTWFrZWZpbGUKaW5kZXggNTYxZjkw MWE5MWQ0Li4yZGNhOWRiZGVkZTYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9NYWtlZmlsZQorKysgYi9j cnlwdG8vTWFrZWZpbGUKQEAgLTk0LDYgKzk0LDcgQEAgb2JqLSQoQ09ORklHX0NSWVBUT19MUlcp ICs9IGxydy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1hUUykgKz0geHRzLm8KIG9iai0kKENPTkZJ R19DUllQVE9fQ1RSKSArPSBjdHIubwogb2JqLSQoQ09ORklHX0NSWVBUT19YQ1RSKSArPSB4Y3Ry Lm8KK29iai0kKENPTkZJR19DUllQVE9fSENUUjIpICs9IGhjdHIyLm8KIG9iai0kKENPTkZJR19D UllQVE9fS0VZV1JBUCkgKz0ga2V5d3JhcC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0FESUFOVFVN KSArPSBhZGlhbnR1bS5vCiBvYmotJChDT05GSUdfQ1JZUFRPX05IUE9MWTEzMDUpICs9IG5ocG9s eTEzMDUubwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2hjdHIyLmMgYi9jcnlwdG8vaGN0cjIuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjZjY2MyYTJmOTAzOAotLS0gL2Rl di9udWxsCisrKyBiL2NyeXB0by9oY3RyMi5jCkBAIC0wLDAgKzEsNTMyIEBACisvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIEhDVFIyIGxlbmd0aC1wcmVzZXJ2aW5n IGVuY3J5cHRpb24gbW9kZQorICoKKyAqIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTEMKKyAqLwor CisKKy8qCisgKiBIQ1RSMiBpcyBhIGxlbmd0aC1wcmVzZXJ2aW5nIGVuY3J5cHRpb24gbW9kZSB0 aGF0IGlzIGVmZmljaWVudCBvbgorICogcHJvY2Vzc29ycyB3aXRoIGluc3RydWN0aW9ucyB0byBh Y2NlbGVyYXRlIGFlcyBhbmQgY2FycnlsZXNzCisgKiBtdWx0aXBsaWNhdGlvbiwgZS5nLiB4ODYg cHJvY2Vzc29ycyB3aXRoIEFFUy1OSSBhbmQgQ0xNVUwsIGFuZCBBUk0KKyAqIHByb2Nlc3NvcnMg d2l0aCB0aGUgQVJNdjggY3J5cHRvIGV4dGVuc2lvbnMuCisgKgorICogRm9yIG1vcmUgZGV0YWls cywgc2VlIHRoZSBwYXBlcjogTGVuZ3RoLXByZXNlcnZpbmcgZW5jcnlwdGlvbiB3aXRoIEhDVFIy CisgKiAoaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAyMS8xNDQxLnBkZikKKyAqLworCisjaW5j bHVkZSA8Y3J5cHRvL2ludGVybmFsL2NpcGhlci5oPgorI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5h bC9oYXNoLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NrY2lwaGVyLmg+CisjaW5jbHVk ZSA8Y3J5cHRvL3BvbHl2YWwuaD4KKyNpbmNsdWRlIDxjcnlwdG8vc2NhdHRlcndhbGsuaD4KKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2RlZmluZSBCTE9DS0NJUEhFUl9CTE9DS19TSVpF CQkxNgorCisvKgorICogVGhlIHNwZWNpZmljYXRpb24gYWxsb3dzIHZhcmlhYmxlLWxlbmd0aCB0 d2Vha3MsIGJ1dCBMaW51eCdzIGNyeXB0byBBUEkKKyAqIGN1cnJlbnRseSBvbmx5IGFsbG93cyBh bGdvcml0aG1zIHRvIHN1cHBvcnQgYSBzaW5nbGUgbGVuZ3RoLiAgVGhlICJuYXR1cmFsIgorICog dHdlYWsgbGVuZ3RoIGZvciBIQ1RSMiBpcyAxNiwgc2luY2UgdGhhdCBmaXRzIGludG8gb25lIFBP TFlWQUwgYmxvY2sgZm9yCisgKiB0aGUgYmVzdCBwZXJmb3JtYW5jZS4gIEJ1dCBsb25nZXIgdHdl YWtzIGFyZSB1c2VmdWwgZm9yIGZzY3J5cHQsIHRvIGF2b2lkCisgKiBuZWVkaW5nIHRvIGRlcml2 ZSBwZXItZmlsZSBrZXlzLiAgU28gaW5zdGVhZCB3ZSB1c2UgdHdvIGJsb2Nrcywgb3IgMzIgYnl0 ZXMuCisgKi8KKyNkZWZpbmUgVFdFQUtfU0laRQkJMzIKKworc3RydWN0IGhjdHIyX2luc3RhbmNl X2N0eCB7CisJc3RydWN0IGNyeXB0b19jaXBoZXJfc3Bhd24gYmxvY2tjaXBoZXJfc3Bhd247CisJ c3RydWN0IGNyeXB0b19za2NpcGhlcl9zcGF3biB4Y3RyX3NwYXduOworCXN0cnVjdCBjcnlwdG9f c2hhc2hfc3Bhd24gcG9seXZhbF9zcGF3bjsKK307CisKK3N0cnVjdCBoY3RyMl90Zm1fY3R4IHsK KwlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqYmxvY2tjaXBoZXI7CisJc3RydWN0IGNyeXB0b19za2Np cGhlciAqeGN0cjsKKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoICpwb2x5dmFsOworCXU4IExbQkxPQ0tD SVBIRVJfQkxPQ0tfU0laRV07Cit9OworCitzdHJ1Y3QgaGN0cjJfcmVxdWVzdF9jdHggeworCXU4 IGZpcnN0X2Jsb2NrW0JMT0NLQ0lQSEVSX0JMT0NLX1NJWkVdOworCXU4IHhjdHJfaXZbQkxPQ0tD SVBIRVJfQkxPQ0tfU0laRV07CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpidWxrX3BhcnRfZHN0Owor CXN0cnVjdCBzY2F0dGVybGlzdCAqYnVsa19wYXJ0X3NyYzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qg c2dfc3JjWzJdOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ19kc3RbMl07CisJLyogU3ViLXJlcXVl c3RzLCBtdXN0IGJlIGxhc3QgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCBzaGFzaF9kZXNjIGhhc2hf ZGVzYzsKKwkJc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgeGN0cl9yZXE7CisJfSB1OworfTsKKwor c3RhdGljIGludCBoY3RyMl9zZXRrZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtLCBjb25z dCB1OCAqa2V5LAorCQkJdW5zaWduZWQgaW50IGtleWxlbikKK3sKKwlzdHJ1Y3QgaGN0cjJfdGZt X2N0eCAqdGN0eCA9IGNyeXB0b19za2NpcGhlcl9jdHgodGZtKTsKKwl1OCBoYmFyW0JMT0NLQ0lQ SEVSX0JMT0NLX1NJWkVdOworCWludCBlcnI7CisKKwljcnlwdG9fY2lwaGVyX2NsZWFyX2ZsYWdz KHRjdHgtPmJsb2NrY2lwaGVyLCBDUllQVE9fVEZNX1JFUV9NQVNLKTsKKwljcnlwdG9fY2lwaGVy X3NldF9mbGFncyh0Y3R4LT5ibG9ja2NpcGhlciwKKwkJCQljcnlwdG9fc2tjaXBoZXJfZ2V0X2Zs YWdzKHRmbSkgJgorCQkJCUNSWVBUT19URk1fUkVRX01BU0spOworCWVyciA9IGNyeXB0b19jaXBo ZXJfc2V0a2V5KHRjdHgtPmJsb2NrY2lwaGVyLCBrZXksIGtleWxlbik7CisJaWYgKGVycikKKwkJ cmV0dXJuIGVycjsKKworCWNyeXB0b19za2NpcGhlcl9jbGVhcl9mbGFncyh0Y3R4LT54Y3RyLCBD UllQVE9fVEZNX1JFUV9NQVNLKTsKKwljcnlwdG9fc2tjaXBoZXJfc2V0X2ZsYWdzKHRjdHgtPnhj dHIsCisJCQkJICBjcnlwdG9fc2tjaXBoZXJfZ2V0X2ZsYWdzKHRmbSkgJgorCQkJCSAgQ1JZUFRP X1RGTV9SRVFfTUFTSyk7CisJZXJyID0gY3J5cHRvX3NrY2lwaGVyX3NldGtleSh0Y3R4LT54Y3Ry LCBrZXksIGtleWxlbik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCW1lbXNldCh0Y3R4 LT5MLCAwLCBzaXplb2YodGN0eC0+TCkpOworCW1lbXNldChoYmFyLCAwLCBzaXplb2YoaGJhcikp OworCXRjdHgtPkxbMF0gPSAweDAxOworCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGN0eC0+ YmxvY2tjaXBoZXIsIHRjdHgtPkwsIHRjdHgtPkwpOworCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9v bmUodGN0eC0+YmxvY2tjaXBoZXIsIGhiYXIsIGhiYXIpOworCisJY3J5cHRvX3NoYXNoX2NsZWFy X2ZsYWdzKHRjdHgtPnBvbHl2YWwsIENSWVBUT19URk1fUkVRX01BU0spOworCWNyeXB0b19zaGFz aF9zZXRfZmxhZ3ModGN0eC0+cG9seXZhbCwgY3J5cHRvX3NrY2lwaGVyX2dldF9mbGFncyh0Zm0p ICYKKwkJCSAgICAgICBDUllQVE9fVEZNX1JFUV9NQVNLKTsKKwllcnIgPSBjcnlwdG9fc2hhc2hf c2V0a2V5KHRjdHgtPnBvbHl2YWwsIGhiYXIsIEJMT0NLQ0lQSEVSX0JMT0NLX1NJWkUpOworCW1l bXplcm9fZXhwbGljaXQoaGJhciwgc2l6ZW9mKGhiYXIpKTsKKwlyZXR1cm4gZXJyOworfQorCitz dGF0aWMgaW50IGhjdHIyX2hhc2hfdHdlYWsoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSkK K3sKKwlfX2xlNjQgdHdlYWtfbGVuZ3RoX2Jsb2NrWzJdOworCXN0cnVjdCBjcnlwdG9fc2tjaXBo ZXIgKnRmbSA9IGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKTsKKwljb25zdCBzdHJ1Y3QgaGN0 cjJfdGZtX2N0eCAqdGN0eCA9IGNyeXB0b19za2NpcGhlcl9jdHgodGZtKTsKKwlzdHJ1Y3QgaGN0 cjJfcmVxdWVzdF9jdHggKnJjdHggPSBza2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOworCXN0cnVj dCBzaGFzaF9kZXNjICpoYXNoX2Rlc2MgPSAmcmN0eC0+dS5oYXNoX2Rlc2M7CisJaW50IGVycjsK KworCW1lbXNldCh0d2Vha19sZW5ndGhfYmxvY2ssIDAsIHNpemVvZih0d2Vha19sZW5ndGhfYmxv Y2spKTsKKwlpZiAocmVxLT5jcnlwdGxlbiAlIFBPTFlWQUxfQkxPQ0tfU0laRSA9PSAwKQorCQl0 d2Vha19sZW5ndGhfYmxvY2tbMF0gPSBjcHVfdG9fbGU2NChUV0VBS19TSVpFICogOCAqIDIgKyAy KTsKKwllbHNlCisJCXR3ZWFrX2xlbmd0aF9ibG9ja1swXSA9IGNwdV90b19sZTY0KFRXRUFLX1NJ WkUgKiA4ICogMiArIDMpOworCisJaGFzaF9kZXNjLT50Zm0gPSB0Y3R4LT5wb2x5dmFsOworCWVy ciA9IGNyeXB0b19zaGFzaF9pbml0KGhhc2hfZGVzYyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVy cjsKKworCWVyciA9IGNyeXB0b19zaGFzaF91cGRhdGUoaGFzaF9kZXNjLCAodTggKil0d2Vha19s ZW5ndGhfYmxvY2ssCisJCQkJICBzaXplb2YodHdlYWtfbGVuZ3RoX2Jsb2NrKSk7CisJaWYgKGVy cikKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gY3J5cHRvX3NoYXNoX3VwZGF0ZShoYXNoX2Rlc2Ms IHJlcS0+aXYsIFRXRUFLX1NJWkUpOworfQorCitzdGF0aWMgaW50IGhjdHIyX2hhc2hfbWVzc2Fn ZShzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxLAorCQkJICAgICAgc3RydWN0IHNjYXR0ZXJs aXN0ICpzZ2wsCisJCQkgICAgICB1OCBkaWdlc3RbUE9MWVZBTF9ESUdFU1RfU0laRV0pCit7CisJ dTggcGFkZGluZ1tCTE9DS0NJUEhFUl9CTE9DS19TSVpFXTsKKwlzdHJ1Y3QgaGN0cjJfcmVxdWVz dF9jdHggKnJjdHggPSBza2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOworCXN0cnVjdCBzaGFzaF9k ZXNjICpoYXNoX2Rlc2MgPSAmcmN0eC0+dS5oYXNoX2Rlc2M7CisJY29uc3QgdW5zaWduZWQgaW50 IGJ1bGtfbGVuID0gcmVxLT5jcnlwdGxlbiAtIEJMT0NLQ0lQSEVSX0JMT0NLX1NJWkU7CisJc3Ry dWN0IHNnX21hcHBpbmdfaXRlciBtaXRlcjsKKwl1bnNpZ25lZCBpbnQgcmVtYWluZGVyID0gYnVs a19sZW4gJSBCTE9DS0NJUEhFUl9CTE9DS19TSVpFOworCWludCBlcnIsIGk7CisJaW50IG4gPSAw OworCisJc2dfbWl0ZXJfc3RhcnQoJm1pdGVyLCBzZ2wsIHNnX25lbnRzKHNnbCksCisJCSAgICAg ICBTR19NSVRFUl9GUk9NX1NHIHwgU0dfTUlURVJfQVRPTUlDKTsKKwlmb3IgKGkgPSAwOyBpIDwg YnVsa19sZW47IGkgKz0gbikgeworCQlzZ19taXRlcl9uZXh0KCZtaXRlcik7CisJCW4gPSBtaW5f dCh1bnNpZ25lZCBpbnQsIG1pdGVyLmxlbmd0aCwgYnVsa19sZW4gLSBpKTsKKwkJZXJyID0gY3J5 cHRvX3NoYXNoX3VwZGF0ZShoYXNoX2Rlc2MsIG1pdGVyLmFkZHIsIG4pOworCQlpZiAoZXJyKQor CQkJYnJlYWs7CisJfQorCXNnX21pdGVyX3N0b3AoJm1pdGVyKTsKKworCWlmIChlcnIpCisJCXJl dHVybiBlcnI7CisKKwlpZiAocmVtYWluZGVyKSB7CisJCW1lbXNldChwYWRkaW5nLCAwLCBCTE9D S0NJUEhFUl9CTE9DS19TSVpFKTsKKwkJcGFkZGluZ1swXSA9IDB4MDE7CisJCWVyciA9IGNyeXB0 b19zaGFzaF91cGRhdGUoaGFzaF9kZXNjLCBwYWRkaW5nLAorCQkJCQkgIEJMT0NLQ0lQSEVSX0JM T0NLX1NJWkUgLSByZW1haW5kZXIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJ cmV0dXJuIGNyeXB0b19zaGFzaF9maW5hbChoYXNoX2Rlc2MsIGRpZ2VzdCk7Cit9CisKK3N0YXRp YyBpbnQgaGN0cjJfZmluaXNoKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEpCit7CisJc3Ry dWN0IGhjdHIyX3JlcXVlc3RfY3R4ICpyY3R4ID0gc2tjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsK Kwl1OCBkaWdlc3RbUE9MWVZBTF9ESUdFU1RfU0laRV07CisJaW50IGVycjsKKworCS8vIFUgPSBV VSBeIEgoVCB8fCBWKQorCWVyciA9IGhjdHIyX2hhc2hfdHdlYWsocmVxKTsKKwlpZiAoZXJyKQor CQlyZXR1cm4gZXJyOworCWVyciA9IGhjdHIyX2hhc2hfbWVzc2FnZShyZXEsIHJjdHgtPmJ1bGtf cGFydF9kc3QsIGRpZ2VzdCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwljcnlwdG9feG9y KHJjdHgtPmZpcnN0X2Jsb2NrLCBkaWdlc3QsIEJMT0NLQ0lQSEVSX0JMT0NLX1NJWkUpOworCisJ Ly8gQ29weSBVIGludG8gZHN0IHNjYXR0ZXJsaXN0CisJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5 KHJjdHgtPmZpcnN0X2Jsb2NrLCByZXEtPmRzdCwKKwkJCQkgMCwgQkxPQ0tDSVBIRVJfQkxPQ0tf U0laRSwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhjdHIyX3hjdHJfZG9uZShz dHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsCisJCQkJICAgIGludCBlcnIpCit7CisJ c3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSA9IGFyZXEtPmRhdGE7CisKKwlpZiAoIWVycikK KwkJZXJyID0gaGN0cjJfZmluaXNoKHJlcSk7CisKKwlza2NpcGhlcl9yZXF1ZXN0X2NvbXBsZXRl KHJlcSwgZXJyKTsKK30KKworc3RhdGljIGludCBoY3RyMl9jcnlwdChzdHJ1Y3Qgc2tjaXBoZXJf cmVxdWVzdCAqcmVxLCBib29sIGVuYykKK3sKKwlzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0Zm0g PSBjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKHJlcSk7CisJY29uc3Qgc3RydWN0IGhjdHIyX3RmbV9j dHggKnRjdHggPSBjcnlwdG9fc2tjaXBoZXJfY3R4KHRmbSk7CisJc3RydWN0IGhjdHIyX3JlcXVl c3RfY3R4ICpyY3R4ID0gc2tjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKKwl1OCBkaWdlc3RbUE9M WVZBTF9ESUdFU1RfU0laRV07CisJaW50IGJ1bGtfbGVuID0gcmVxLT5jcnlwdGxlbiAtIEJMT0NL Q0lQSEVSX0JMT0NLX1NJWkU7CisJaW50IGVycjsKKworCS8vIFJlcXVlc3RzIG11c3QgYmUgYXQg bGVhc3Qgb25lIGJsb2NrCisJaWYgKHJlcS0+Y3J5cHRsZW4gPCBCTE9DS0NJUEhFUl9CTE9DS19T SVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8vIENvcHkgTSBpbnRvIGEgdGVtcG9yYXJ5IGJ1 ZmZlcgorCXNjYXR0ZXJ3YWxrX21hcF9hbmRfY29weShyY3R4LT5maXJzdF9ibG9jaywgcmVxLT5z cmMsCisJCQkJIDAsIEJMT0NLQ0lQSEVSX0JMT0NLX1NJWkUsIDApOworCisJLy8gQ3JlYXRlIHNj YXR0ZXJsaXN0cyBmb3IgTiBhbmQgVgorCXJjdHgtPmJ1bGtfcGFydF9zcmMgPSBzY2F0dGVyd2Fs a19mZndkKHJjdHgtPnNnX3NyYywgcmVxLT5zcmMsCisJCQkJCSAgICAgICBCTE9DS0NJUEhFUl9C TE9DS19TSVpFKTsKKwlyY3R4LT5idWxrX3BhcnRfZHN0ID0gc2NhdHRlcndhbGtfZmZ3ZChyY3R4 LT5zZ19kc3QsIHJlcS0+ZHN0LAorCQkJCQkgICAgICAgQkxPQ0tDSVBIRVJfQkxPQ0tfU0laRSk7 CisKKwkvLyBNTSA9IE0gXiBIKFQgfHwgTikKKwllcnIgPSBoY3RyMl9oYXNoX3R3ZWFrKHJlcSk7 CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBoY3RyMl9oYXNoX21lc3NhZ2UocmVx LCByY3R4LT5idWxrX3BhcnRfc3JjLCBkaWdlc3QpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7 CisJY3J5cHRvX3hvcihkaWdlc3QsIHJjdHgtPmZpcnN0X2Jsb2NrLCBCTE9DS0NJUEhFUl9CTE9D S19TSVpFKTsKKworCS8vIFVVID0gRShNTSkKKwlpZiAoZW5jKQorCQljcnlwdG9fY2lwaGVyX2Vu Y3J5cHRfb25lKHRjdHgtPmJsb2NrY2lwaGVyLCByY3R4LT5maXJzdF9ibG9jaywKKwkJCQkJICBk aWdlc3QpOworCWVsc2UKKwkJY3J5cHRvX2NpcGhlcl9kZWNyeXB0X29uZSh0Y3R4LT5ibG9ja2Np cGhlciwgcmN0eC0+Zmlyc3RfYmxvY2ssCisJCQkJCSAgZGlnZXN0KTsKKworCS8vIFMgPSBNTSBe IFVVIF4gTAorCWNyeXB0b194b3IoZGlnZXN0LCByY3R4LT5maXJzdF9ibG9jaywgQkxPQ0tDSVBI RVJfQkxPQ0tfU0laRSk7CisJY3J5cHRvX3hvcl9jcHkocmN0eC0+eGN0cl9pdiwgZGlnZXN0LCB0 Y3R4LT5MLCBCTE9DS0NJUEhFUl9CTE9DS19TSVpFKTsKKworCS8vIFYgPSBYQ1RSKFMsIE4pCisJ c2tjaXBoZXJfcmVxdWVzdF9zZXRfdGZtKCZyY3R4LT51LnhjdHJfcmVxLCB0Y3R4LT54Y3RyKTsK Kwlza2NpcGhlcl9yZXF1ZXN0X3NldF9jcnlwdCgmcmN0eC0+dS54Y3RyX3JlcSwgcmN0eC0+YnVs a19wYXJ0X3NyYywKKwkJCQkgICByY3R4LT5idWxrX3BhcnRfZHN0LCBidWxrX2xlbiwKKwkJCQkg ICByY3R4LT54Y3RyX2l2KTsKKwlza2NpcGhlcl9yZXF1ZXN0X3NldF9jYWxsYmFjaygmcmN0eC0+ dS54Y3RyX3JlcSwKKwkJCQkgICAgICByZXEtPmJhc2UuZmxhZ3MsCisJCQkJICAgICAgaGN0cjJf eGN0cl9kb25lLCByZXEpOworCXJldHVybiBjcnlwdG9fc2tjaXBoZXJfZW5jcnlwdCgmcmN0eC0+ dS54Y3RyX3JlcSkgPzoKKwkJaGN0cjJfZmluaXNoKHJlcSk7Cit9CisKK3N0YXRpYyBpbnQgaGN0 cjJfZW5jcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiBoY3Ry Ml9jcnlwdChyZXEsIHRydWUpOworfQorCitzdGF0aWMgaW50IGhjdHIyX2RlY3J5cHQoc3RydWN0 IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gaGN0cjJfY3J5cHQocmVxLCBmYWxz ZSk7Cit9CisKK3N0YXRpYyBpbnQgaGN0cjJfaW5pdF90Zm0oc3RydWN0IGNyeXB0b19za2NpcGhl ciAqdGZtKQoreworCXN0cnVjdCBza2NpcGhlcl9pbnN0YW5jZSAqaW5zdCA9IHNrY2lwaGVyX2Fs Z19pbnN0YW5jZSh0Zm0pOworCXN0cnVjdCBoY3RyMl9pbnN0YW5jZV9jdHggKmljdHggPSBza2Np cGhlcl9pbnN0YW5jZV9jdHgoaW5zdCk7CisJc3RydWN0IGhjdHIyX3RmbV9jdHggKnRjdHggPSBj cnlwdG9fc2tjaXBoZXJfY3R4KHRmbSk7CisJc3RydWN0IGNyeXB0b19za2NpcGhlciAqeGN0cjsK KwlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqYmxvY2tjaXBoZXI7CisJc3RydWN0IGNyeXB0b19zaGFz aCAqcG9seXZhbDsKKwl1bnNpZ25lZCBpbnQgc3VicmVxX3NpemU7CisJaW50IGVycjsKKworCXhj dHIgPSBjcnlwdG9fc3Bhd25fc2tjaXBoZXIoJmljdHgtPnhjdHJfc3Bhd24pOworCWlmIChJU19F UlIoeGN0cikpCisJCXJldHVybiBQVFJfRVJSKHhjdHIpOworCisJYmxvY2tjaXBoZXIgPSBjcnlw dG9fc3Bhd25fY2lwaGVyKCZpY3R4LT5ibG9ja2NpcGhlcl9zcGF3bik7CisJaWYgKElTX0VSUihi bG9ja2NpcGhlcikpIHsKKwkJZXJyID0gUFRSX0VSUihibG9ja2NpcGhlcik7CisJCWdvdG8gZXJy X2ZyZWVfeGN0cjsKKwl9CisKKwlwb2x5dmFsID0gY3J5cHRvX3NwYXduX3NoYXNoKCZpY3R4LT5w b2x5dmFsX3NwYXduKTsKKwlpZiAoSVNfRVJSKHBvbHl2YWwpKSB7CisJCWVyciA9IFBUUl9FUlIo cG9seXZhbCk7CisJCWdvdG8gZXJyX2ZyZWVfYmxvY2tjaXBoZXI7CisJfQorCisJdGN0eC0+eGN0 ciA9IHhjdHI7CisJdGN0eC0+YmxvY2tjaXBoZXIgPSBibG9ja2NpcGhlcjsKKwl0Y3R4LT5wb2x5 dmFsID0gcG9seXZhbDsKKworCUJVSUxEX0JVR19PTihvZmZzZXRvZmVuZChzdHJ1Y3QgaGN0cjJf cmVxdWVzdF9jdHgsIHUpICE9CisJCQkJIHNpemVvZihzdHJ1Y3QgaGN0cjJfcmVxdWVzdF9jdHgp KTsKKwlzdWJyZXFfc2l6ZSA9IG1heChzaXplb2ZfZmllbGQoc3RydWN0IGhjdHIyX3JlcXVlc3Rf Y3R4LCB1Lmhhc2hfZGVzYykgKworCQkJICBjcnlwdG9fc2hhc2hfZGVzY3NpemUocG9seXZhbCks IHNpemVvZl9maWVsZChzdHJ1Y3QKKwkJCSAgaGN0cjJfcmVxdWVzdF9jdHgsIHUueGN0cl9yZXEp ICsKKwkJCSAgY3J5cHRvX3NrY2lwaGVyX3JlcXNpemUoeGN0cikpOworCisJY3J5cHRvX3NrY2lw aGVyX3NldF9yZXFzaXplKHRmbSwgb2Zmc2V0b2Yoc3RydWN0IGhjdHIyX3JlcXVlc3RfY3R4LCB1 KSArCisJCQkJICAgIHN1YnJlcV9zaXplKTsKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfYmxvY2tj aXBoZXI6CisJY3J5cHRvX2ZyZWVfY2lwaGVyKGJsb2NrY2lwaGVyKTsKK2Vycl9mcmVlX3hjdHI6 CisJY3J5cHRvX2ZyZWVfc2tjaXBoZXIoeGN0cik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGlj IHZvaWQgaGN0cjJfZXhpdF90Zm0oc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtKQoreworCXN0 cnVjdCBoY3RyMl90Zm1fY3R4ICp0Y3R4ID0gY3J5cHRvX3NrY2lwaGVyX2N0eCh0Zm0pOworCisJ Y3J5cHRvX2ZyZWVfY2lwaGVyKHRjdHgtPmJsb2NrY2lwaGVyKTsKKwljcnlwdG9fZnJlZV9za2Np cGhlcih0Y3R4LT54Y3RyKTsKKwljcnlwdG9fZnJlZV9zaGFzaCh0Y3R4LT5wb2x5dmFsKTsKK30K Kworc3RhdGljIHZvaWQgaGN0cjJfZnJlZV9pbnN0YW5jZShzdHJ1Y3Qgc2tjaXBoZXJfaW5zdGFu Y2UgKmluc3QpCit7CisJc3RydWN0IGhjdHIyX2luc3RhbmNlX2N0eCAqaWN0eCA9IHNrY2lwaGVy X2luc3RhbmNlX2N0eChpbnN0KTsKKworCWNyeXB0b19kcm9wX2NpcGhlcigmaWN0eC0+YmxvY2tj aXBoZXJfc3Bhd24pOworCWNyeXB0b19kcm9wX3NrY2lwaGVyKCZpY3R4LT54Y3RyX3NwYXduKTsK KwljcnlwdG9fZHJvcF9zaGFzaCgmaWN0eC0+cG9seXZhbF9zcGF3bik7CisJa2ZyZWUoaW5zdCk7 Cit9CisKKy8qCisgKiBDaGVjayBmb3IgYSBzdXBwb3J0ZWQgc2V0IG9mIGlubmVyIGFsZ29yaXRo bXMuCisgKiBTZWUgdGhlIGNvbW1lbnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZpbGUuCisg Ki8KK3N0YXRpYyBib29sIGhjdHIyX3N1cHBvcnRlZF9hbGdvcml0aG1zKHN0cnVjdCBza2NpcGhl cl9hbGcgKnhjdHJfYWxnLAorCQkJCSAgICAgICBzdHJ1Y3QgY3J5cHRvX2FsZyAqYmxvY2tjaXBo ZXJfYWxnLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2hhc2hfYWxnICpwb2x5dmFsX2FsZykKK3sKKwlp ZiAoc3RybmNtcCh4Y3RyX2FsZy0+YmFzZS5jcmFfbmFtZSwgInhjdHIoIiwgNCkgIT0gMCkKKwkJ cmV0dXJuIGZhbHNlOworCisJaWYgKGJsb2NrY2lwaGVyX2FsZy0+Y3JhX2Jsb2Nrc2l6ZSAhPSBC TE9DS0NJUEhFUl9CTE9DS19TSVpFKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoc3RyY21wKHBv bHl2YWxfYWxnLT5iYXNlLmNyYV9uYW1lLCAicG9seXZhbCIpICE9IDApCisJCXJldHVybiBmYWxz ZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IGhjdHIyX2NyZWF0ZV9jb21tb24o c3RydWN0IGNyeXB0b190ZW1wbGF0ZSAqdG1wbCwKKwkJCSAgICAgICBzdHJ1Y3QgcnRhdHRyICoq dGIsCisJCQkgICAgICAgY29uc3QgY2hhciAqYmxvY2tjaXBoZXJfbmFtZSwKKwkJCSAgICAgICBj b25zdCBjaGFyICp4Y3RyX25hbWUsCisJCQkgICAgICAgY29uc3QgY2hhciAqcG9seXZhbF9uYW1l KQoreworCXUzMiBtYXNrOworCXN0cnVjdCBza2NpcGhlcl9pbnN0YW5jZSAqaW5zdDsKKwlzdHJ1 Y3QgaGN0cjJfaW5zdGFuY2VfY3R4ICppY3R4OworCXN0cnVjdCBza2NpcGhlcl9hbGcgKnhjdHJf YWxnOworCXN0cnVjdCBjcnlwdG9fYWxnICpibG9ja2NpcGhlcl9hbGc7CisJc3RydWN0IHNoYXNo X2FsZyAqcG9seXZhbF9hbGc7CisJaW50IGVycjsKKworCWVyciA9IGNyeXB0b19jaGVja19hdHRy X3R5cGUodGIsIENSWVBUT19BTEdfVFlQRV9TS0NJUEhFUiwgJm1hc2spOworCWlmIChlcnIpCisJ CXJldHVybiBlcnI7CisKKwlpbnN0ID0ga3phbGxvYyhzaXplb2YoKmluc3QpICsgc2l6ZW9mKCpp Y3R4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnN0KQorCQlyZXR1cm4gLUVOT01FTTsKKwlpY3R4 ID0gc2tjaXBoZXJfaW5zdGFuY2VfY3R4KGluc3QpOworCisJLyogU3RyZWFtIGNpcGhlciwgeGN0 cihibG9ja19jaXBoZXIpICovCisJZXJyID0gY3J5cHRvX2dyYWJfc2tjaXBoZXIoJmljdHgtPnhj dHJfc3Bhd24sCisJCQkJICAgc2tjaXBoZXJfY3J5cHRvX2luc3RhbmNlKGluc3QpLAorCQkJCSAg IHhjdHJfbmFtZSwgMCwgbWFzayk7CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9pbnN0Owor CXhjdHJfYWxnID0gY3J5cHRvX3NwYXduX3NrY2lwaGVyX2FsZygmaWN0eC0+eGN0cl9zcGF3bik7 CisKKwkvKiBCbG9jayBjaXBoZXIsIGUuZy4gImFlcyIgKi8KKwllcnIgPSBjcnlwdG9fZ3JhYl9j aXBoZXIoJmljdHgtPmJsb2NrY2lwaGVyX3NwYXduLAorCQkJCSBza2NpcGhlcl9jcnlwdG9faW5z dGFuY2UoaW5zdCksCisJCQkJIGJsb2NrY2lwaGVyX25hbWUsIDAsIG1hc2spOworCWlmIChlcnIp CisJCWdvdG8gZXJyX2ZyZWVfaW5zdDsKKwlibG9ja2NpcGhlcl9hbGcgPSBjcnlwdG9fc3Bhd25f Y2lwaGVyX2FsZygmaWN0eC0+YmxvY2tjaXBoZXJfc3Bhd24pOworCisJLyogUG9seXZhbCDOtS3i iIZVIGhhc2ggZnVuY3Rpb24gKi8KKwllcnIgPSBjcnlwdG9fZ3JhYl9zaGFzaCgmaWN0eC0+cG9s eXZhbF9zcGF3biwKKwkJCQlza2NpcGhlcl9jcnlwdG9faW5zdGFuY2UoaW5zdCksCisJCQkJcG9s eXZhbF9uYW1lLCAwLCBtYXNrKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlX2luc3Q7CisJ cG9seXZhbF9hbGcgPSBjcnlwdG9fc3Bhd25fc2hhc2hfYWxnKCZpY3R4LT5wb2x5dmFsX3NwYXdu KTsKKworCS8qIENoZWNrIHRoZSBzZXQgb2YgYWxnb3JpdGhtcyAqLworCWlmICghaGN0cjJfc3Vw cG9ydGVkX2FsZ29yaXRobXMoeGN0cl9hbGcsIGJsb2NrY2lwaGVyX2FsZywKKwkJCQkJcG9seXZh bF9hbGcpKSB7CisJCXByX3dhcm4oIlVuc3VwcG9ydGVkIEhDVFIyIGluc3RhbnRpYXRpb246ICgl cywlcywlcylcbiIsCisJCQl4Y3RyX2FsZy0+YmFzZS5jcmFfbmFtZSwgYmxvY2tjaXBoZXJfYWxn LT5jcmFfbmFtZSwKKwkJCXBvbHl2YWxfYWxnLT5iYXNlLmNyYV9uYW1lKTsKKwkJZXJyID0gLUVJ TlZBTDsKKwkJZ290byBlcnJfZnJlZV9pbnN0OworCX0KKworCS8qIEluc3RhbmNlIGZpZWxkcyAq LworCisJZXJyID0gLUVOQU1FVE9PTE9ORzsKKwlpZiAoc25wcmludGYoaW5zdC0+YWxnLmJhc2Uu Y3JhX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUsICJoY3RyMiglcykiLAorCQkgICAgIGJsb2Nr Y2lwaGVyX2FsZy0+Y3JhX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUpCisJCWdvdG8gZXJy X2ZyZWVfaW5zdDsKKwlpZiAoc25wcmludGYoaW5zdC0+YWxnLmJhc2UuY3JhX2RyaXZlcl9uYW1l LCBDUllQVE9fTUFYX0FMR19OQU1FLAorCQkgICAgICJoY3RyMl9iYXNlKCVzLCVzKSIsCisJCSAg ICAgeGN0cl9hbGctPmJhc2UuY3JhX2RyaXZlcl9uYW1lLAorCQkgICAgIHBvbHl2YWxfYWxnLT5i YXNlLmNyYV9kcml2ZXJfbmFtZSkgPj0gQ1JZUFRPX01BWF9BTEdfTkFNRSkKKwkJZ290byBlcnJf ZnJlZV9pbnN0OworCisJaW5zdC0+YWxnLmJhc2UuY3JhX2Jsb2Nrc2l6ZSA9IEJMT0NLQ0lQSEVS X0JMT0NLX1NJWkU7CisJaW5zdC0+YWxnLmJhc2UuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0 IGhjdHIyX3RmbV9jdHgpOworCWluc3QtPmFsZy5iYXNlLmNyYV9hbGlnbm1hc2sgPSB4Y3RyX2Fs Zy0+YmFzZS5jcmFfYWxpZ25tYXNrIHwKKwkJCQkgICAgICAgcG9seXZhbF9hbGctPmJhc2UuY3Jh X2FsaWdubWFzazsKKwkvKgorCSAqIFRoZSBoYXNoIGZ1bmN0aW9uIGlzIGNhbGxlZCB0d2ljZSwg c28gaXQgaXMgd2VpZ2h0ZWQgaGlnaGVyIHRoYW4gdGhlCisJICogeGN0ciBhbmQgYmxvY2tjaXBo ZXIuCisJICovCisJaW5zdC0+YWxnLmJhc2UuY3JhX3ByaW9yaXR5ID0gKDIgKiB4Y3RyX2FsZy0+ YmFzZS5jcmFfcHJpb3JpdHkgKworCQkJCSAgICAgICA0ICogcG9seXZhbF9hbGctPmJhc2UuY3Jh X3ByaW9yaXR5ICsKKwkJCQkgICAgICAgYmxvY2tjaXBoZXJfYWxnLT5jcmFfcHJpb3JpdHkpIC8g NzsKKworCWluc3QtPmFsZy5zZXRrZXkgPSBoY3RyMl9zZXRrZXk7CisJaW5zdC0+YWxnLmVuY3J5 cHQgPSBoY3RyMl9lbmNyeXB0OworCWluc3QtPmFsZy5kZWNyeXB0ID0gaGN0cjJfZGVjcnlwdDsK KwlpbnN0LT5hbGcuaW5pdCA9IGhjdHIyX2luaXRfdGZtOworCWluc3QtPmFsZy5leGl0ID0gaGN0 cjJfZXhpdF90Zm07CisJaW5zdC0+YWxnLm1pbl9rZXlzaXplID0gY3J5cHRvX3NrY2lwaGVyX2Fs Z19taW5fa2V5c2l6ZSh4Y3RyX2FsZyk7CisJaW5zdC0+YWxnLm1heF9rZXlzaXplID0gY3J5cHRv X3NrY2lwaGVyX2FsZ19tYXhfa2V5c2l6ZSh4Y3RyX2FsZyk7CisJaW5zdC0+YWxnLml2c2l6ZSA9 IFRXRUFLX1NJWkU7CisKKwlpbnN0LT5mcmVlID0gaGN0cjJfZnJlZV9pbnN0YW5jZTsKKworCWVy ciA9IHNrY2lwaGVyX3JlZ2lzdGVyX2luc3RhbmNlKHRtcGwsIGluc3QpOworCWlmIChlcnIpIHsK K2Vycl9mcmVlX2luc3Q6CisJCWhjdHIyX2ZyZWVfaW5zdGFuY2UoaW5zdCk7CisJfQorCXJldHVy biBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaGN0cjJfY3JlYXRlX2Jhc2Uoc3RydWN0IGNyeXB0b190 ZW1wbGF0ZSAqdG1wbCwgc3RydWN0IHJ0YXR0ciAqKnRiKQoreworCWNvbnN0IGNoYXIgKnhjdHJf bmFtZTsKKwljb25zdCBjaGFyICpwb2x5dmFsX25hbWU7CisJY2hhciBibG9ja2NpcGhlcl9uYW1l W0NSWVBUT19NQVhfQUxHX05BTUVdOworCWludCBsZW47CisKKwl4Y3RyX25hbWUgPSBjcnlwdG9f YXR0cl9hbGdfbmFtZSh0YlsxXSk7CisJaWYgKElTX0VSUih4Y3RyX25hbWUpKQorCQlyZXR1cm4g UFRSX0VSUih4Y3RyX25hbWUpOworCisJaWYgKCFzdHJuY21wKHhjdHJfbmFtZSwgInhjdHIoIiwg NSkpIHsKKwkJbGVuID0gc3Ryc2NweShibG9ja2NpcGhlcl9uYW1lLCB4Y3RyX25hbWUgKyA1LAor CQkJICAgIHNpemVvZihibG9ja2NpcGhlcl9uYW1lKSk7CisKKwkJaWYgKGxlbiA8IDEpCisJCQly ZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoYmxvY2tjaXBoZXJfbmFtZVtsZW4gLSAxXSAhPSAnKScp CisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlibG9ja2NpcGhlcl9uYW1lW2xlbiAtIDFdID0gMDsK Kwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwb2x5dmFsX25hbWUgPSBjcnlwdG9fYXR0 cl9hbGdfbmFtZSh0YlsyXSk7CisJaWYgKElTX0VSUihwb2x5dmFsX25hbWUpKQorCQlyZXR1cm4g UFRSX0VSUihwb2x5dmFsX25hbWUpOworCisJcmV0dXJuIGhjdHIyX2NyZWF0ZV9jb21tb24odG1w bCwgdGIsIGJsb2NrY2lwaGVyX25hbWUsCisJCQkJICAgeGN0cl9uYW1lLCBwb2x5dmFsX25hbWUp OworfQorCitzdGF0aWMgaW50IGhjdHIyX2NyZWF0ZShzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlICp0 bXBsLCBzdHJ1Y3QgcnRhdHRyICoqdGIpCit7CisJY29uc3QgY2hhciAqYmxvY2tjaXBoZXJfbmFt ZTsKKwljaGFyIHhjdHJfbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKKworCWJsb2NrY2lwaGVy X25hbWUgPSBjcnlwdG9fYXR0cl9hbGdfbmFtZSh0YlsxXSk7CisJaWYgKElTX0VSUihibG9ja2Np cGhlcl9uYW1lKSkKKwkJcmV0dXJuIFBUUl9FUlIoYmxvY2tjaXBoZXJfbmFtZSk7CisKKwlpZiAo c25wcmludGYoeGN0cl9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLCAieGN0ciglcykiLAorCQkg ICAgYmxvY2tjaXBoZXJfbmFtZSkgPj0gQ1JZUFRPX01BWF9BTEdfTkFNRSkKKwkJcmV0dXJuIC1F TkFNRVRPT0xPTkc7CisJcmV0dXJuIGhjdHIyX2NyZWF0ZV9jb21tb24odG1wbCwgdGIsIGJsb2Nr Y2lwaGVyX25hbWUsCisJCQkJICAgeGN0cl9uYW1lLCAicG9seXZhbCIpOworfQorCisvKiBoY3Ry MihibG9ja2NpcGhlcl9uYW1lKSAqLworLyogaGN0cjJfYmFzZSh4Y3RyX25hbWUsIHBvbHl2YWxf bmFtZSkgKi8KK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlIGhjdHIyX3RtcGxzW10gPSB7 CisJeworCQkubmFtZSA9ICJoY3RyMl9iYXNlIiwKKwkJLmNyZWF0ZSA9IGhjdHIyX2NyZWF0ZV9i YXNlLAorCQkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJfSwgeworCQkubmFtZSA9ICJoY3RyMiIs CisJCS5jcmVhdGUgPSBoY3RyMl9jcmVhdGUsCisJCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKKwl9 Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBoY3RyMl9tb2R1bGVfaW5pdCh2b2lkKQoreworCXJl dHVybiBjcnlwdG9fcmVnaXN0ZXJfdGVtcGxhdGVzKGhjdHIyX3RtcGxzLCBBUlJBWV9TSVpFKGhj dHIyX3RtcGxzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBoY3RyMl9tb2R1bGVfZXhpdCh2 b2lkKQoreworCXJldHVybiBjcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZXMoaGN0cjJfdG1wbHMs CisJCQkJCSAgIEFSUkFZX1NJWkUoaGN0cjJfdG1wbHMpKTsKK30KKworc3Vic3lzX2luaXRjYWxs KGhjdHIyX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGhjdHIyX21vZHVsZV9leGl0KTsKKwor TU9EVUxFX0RFU0NSSVBUSU9OKCJIQ1RSMiBsZW5ndGgtcHJlc2VydmluZyBlbmNyeXB0aW9uIG1v ZGUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBU19DUllQVE8oImhj dHIyIik7CitNT0RVTEVfSU1QT1JUX05TKENSWVBUT19JTlRFUk5BTCk7CmRpZmYgLS1naXQgYS9j cnlwdG8vdGNyeXB0LmMgYi9jcnlwdG8vdGNyeXB0LmMKaW5kZXggY2VkNzQ2N2JiNDgxLi4zYTVj ZDY4MzFlNjUgMTAwNjQ0Ci0tLSBhL2NyeXB0by90Y3J5cHQuYworKysgYi9jcnlwdG8vdGNyeXB0 LmMKQEAgLTIxOTEsNiArMjE5MSwxMSBAQCBzdGF0aWMgaW50IGRvX3Rlc3QoY29uc3QgY2hhciAq YWxnLCB1MzIgdHlwZSwgdTMyIG1hc2ssIGludCBtLCB1MzIgbnVtX21iKQogCQkJCSAgIDE2LCAx NiwgYWVhZF9zcGVlZF90ZW1wbGF0ZV8xOSwgbnVtX21iKTsKIAkJYnJlYWs7CiAKKwljYXNlIDIy NjoKKwkJdGVzdF9jaXBoZXJfc3BlZWQoImhjdHIyKGFlcykiLCBFTkNSWVBULCBzZWMsIE5VTEws CisJCQkJICAwLCBzcGVlZF90ZW1wbGF0ZV8zMik7CisJCWJyZWFrOworCiAJY2FzZSAzMDA6CiAJ CWlmIChhbGcpIHsKIAkJCXRlc3RfaGFzaF9zcGVlZChhbGcsIHNlYywgZ2VuZXJpY19oYXNoX3Nw ZWVkX3RlbXBsYXRlKTsKZGlmZiAtLWdpdCBhL2NyeXB0by90ZXN0bWdyLmMgYi9jcnlwdG8vdGVz dG1nci5jCmluZGV4IDNlNTRkMTdmZTY0NC4uMmU5MmE0YTg5Mjg1IDEwMDY0NAotLS0gYS9jcnlw dG8vdGVzdG1nci5jCisrKyBiL2NyeXB0by90ZXN0bWdyLmMKQEAgLTQ5OTEsNiArNDk5MSwxNCBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IGFsZ190ZXN0X2Rlc2MgYWxnX3Rlc3RfZGVzY3NbXSA9IHsK IAkJLnN1aXRlID0gewogCQkJLmhhc2ggPSBfX1ZFQ1MoZ2hhc2hfdHZfdGVtcGxhdGUpCiAJCX0K Kwl9LCB7CisJCS5hbGcgPSAiaGN0cjIoYWVzKSIsCisJCS5nZW5lcmljX2RyaXZlciA9CisJCSAg ICAiaGN0cjJfYmFzZSh4Y3RyKGFlcy1nZW5lcmljKSxwb2x5dmFsLWdlbmVyaWMpIiwKKwkJLnRl c3QgPSBhbGdfdGVzdF9za2NpcGhlciwKKwkJLnN1aXRlID0geworCQkJLmNpcGhlciA9IF9fVkVD UyhhZXNfaGN0cjJfdHZfdGVtcGxhdGUpCisJCX0KIAl9LCB7CiAJCS5hbGcgPSAiaG1hYyhtZDUp IiwKIAkJLnRlc3QgPSBhbGdfdGVzdF9oYXNoLApkaWZmIC0tZ2l0IGEvY3J5cHRvL3Rlc3RtZ3Iu aCBiL2NyeXB0by90ZXN0bWdyLmgKaW5kZXggZGEzNzM2ZTUxOTgyLi5hMTZiNjMxNzMwZTkgMTAw NjQ0Ci0tLSBhL2NyeXB0by90ZXN0bWdyLmgKKysrIGIvY3J5cHRvL3Rlc3RtZ3IuaApAQCAtMzM2 MzAsNCArMzM2MzAsNjc0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGFzaF90ZXN0dmVjIHBvbHl2 YWxfdHZfdGVtcGxhdGVbXSA9IHsKIAl9LAogfTsKIAorLyoKKyAqIFRlc3QgdmVjdG9ycyBnZW5l cmF0ZWQgdXNpbmcgaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9oY3RyMgorICovCitzdGF0aWMg Y29uc3Qgc3RydWN0IGNpcGhlcl90ZXN0dmVjIGFlc19oY3RyMl90dl90ZW1wbGF0ZVtdID0gewor CXsKKwkJLmtleQk9ICJceGUxXHgxNVx4NjZceDNjXHg4ZFx4YzZceDNhXHhmZiIKKwkJCSAgIlx4 ZWZceDQxXHhkN1x4NDdceGEyXHhjY1x4OGFceGJhIiwKKwkJLml2CT0gIlx4YzNceGJlXHgyYVx4 Y2JceGI1XHgzOVx4ODZceGYxIgorCQkJICAiXHg5MVx4YWRceDZjXHhmNFx4ZGVceDc0XHg0NVx4 NjMiCisJCQkgICJceDVjXHg3YVx4ZDVceGNjXHg4Ylx4NzZceGVmXHgwZSIKKwkJCSAgIlx4Y2Zc eDJjXHg2MFx4NjlceDM3XHhmZFx4MDdceDk2IiwKKwkJLnB0ZXh0CT0gIlx4NjVceDc1XHhhZVx4 ZDNceGUyXHhiY1x4NDNceDVjIgorCQkJICAiXHhiM1x4MWFceGQ4XHgwNVx4YzNceGQwXHg1Nlx4 MjkiLAorCQkuY3RleHQJPSAiXHgxMVx4OTFceGVhXHg3NFx4NThceGNjXHhkNVx4YTIiCisJCQkg ICJceGQwXHg1NVx4OWVceDNkXHhmZVx4N2ZceGM4XHhmZSIsCisJCS5rbGVuCT0gMTYsCisJCS5s ZW4JPSAxNiwKKwl9LAorCXsKKwkJLmtleQk9ICJceDUwXHhjY1x4MjhceDVjXHhhZlx4NjJceGEy XHg0ZSIKKwkJCSAgIlx4MDJceGYwXHhjMFx4NWVceGMxXHgyOVx4ODBceGNhIiwKKwkJLml2CT0g Ilx4NjRceGE1XHhkNVx4ZjlceGY0XHg2OFx4MjZceGVhIgorCQkJICAiXHhjZVx4YmJceDZjXHhk ZFx4YTVceGVmXHgzOVx4YjUiCisJCQkgICJceDVjXHg5M1x4ZGZceDFiXHg5M1x4MjFceGJlXHg0 OSIKKwkJCSAgIlx4ZmZceDllXHg4Nlx4NGZceDdjXHg0ZFx4NTFceDE1IiwKKwkJLnB0ZXh0CT0g Ilx4MzRceGMxXHgwOFx4M2VceDljXHgyOFx4MGFceGNmIgorCQkJICAiXHgzM1x4ZGJceDNmXHgw ZFx4MDVceDI3XHhhNFx4ZWQiLAorCQkuY3RleHQJPSAiXHg3Y1x4YWVceGJiXHgzN1x4NGFceDU1 XHg5NFx4NWIiCisJCQkgICJceGM2XHg2Zlx4OGZceDlmXHg2OFx4NWZceGM3XHg2MiIsCisJCS5r bGVuCT0gMTYsCisJCS5sZW4JPSAxNiwKKwl9LAorCXsKKwkJLmtleQk9ICJceGRhXHhjZVx4MzBc eDg1XHhlN1x4MDZceGU2XHgwMiIKKwkJCSAgIlx4OGZceDAyXHhiZlx4OWFceDgyXHg2ZVx4NTRc eGRlIiwKKwkJLml2CT0gIlx4ZjZceDdhXHgyOFx4Y2VceGZiXHg2Y1x4YjNceGM1IgorCQkJICAi XHg0N1x4ODFceDU4XHg2OVx4MDdceGU1XHgyMlx4ZGIiCisJCQkgICJceDY2XHg5M1x4ZDdceGU5 XHhiZFx4NWNceDdmXHhmMCIKKwkJCSAgIlx4OGFceDBiXHgwN1x4MDlceGJiXHhmMVx4NDhceGM0 IiwKKwkJLnB0ZXh0CT0gIlx4MDFceGNkXHhhNFx4NDdceDhlXHg0ZVx4YmNceDdkIgorCQkJICAi XHhmZFx4ZDhceGU5XHhhYVx4YzdceDM3XHgyNVx4M2QiCisJCQkgICJceDU2IiwKKwkJLmN0ZXh0 CT0gIlx4ZjNceGIyXHg5ZVx4ZGVceDk2XHg1ZFx4ZjBceGY2IgorCQkJICAiXHhiNlx4NDNceDU3 XHhjNVx4NTNceGU4XHhmOVx4MDUiCisJCQkgICJceDg3IiwKKwkJLmtsZW4JPSAxNiwKKwkJLmxl bgk9IDE3LAorCX0sCisJeworCQkua2V5CT0gIlx4ZTFceDIyXHhlZVx4NWJceDNjXHg5Mlx4MGVc eDUyIgorCQkJICAiXHhkN1x4OTVceDg4XHhhM1x4NzlceDZjXHhmOFx4ZDkiLAorCQkuaXYJPSAi XHhiOFx4ZDFceGU3XHgzMlx4MzZceDk2XHhkNlx4NDQiCisJCQkgICJceDljXHgzNlx4YWRceDMx XHg1Y1x4YWFceGYwXHgxNyIKKwkJCSAgIlx4MzNceDJmXHgyOVx4MDRceDMxXHhmNVx4NDZceGMx IgorCQkJICAiXHgyZlx4MWJceGZhXHhhMVx4YmRceDg2XHhjNFx4ZDMiLAorCQkucHRleHQJPSAi XHg4N1x4ZDdceGI4XHgyZFx4MTJceDYyXHhlZFx4NDEiCisJCQkgICJceDMwXHg3ZVx4ZDRceDBj XHhmZFx4YjlceDZkXHg4ZSIKKwkJCSAgIlx4MzAiLAorCQkuY3RleHQJPSAiXHhiNlx4NmFceDBj XHg3MVx4OTZceDIyXHhiOVx4NDAiCisJCQkgICJceGEyXHgwNFx4NTZceDE0XHgyMlx4YWVceGFh XHg5NCIKKwkJCSAgIlx4MjYiLAorCQkua2xlbgk9IDE2LAorCQkubGVuCT0gMTcsCisJfSwKKwl7 CisJCS5rZXkJPSAiXHhkOFx4NGZceGJjXHgyNVx4OGRceDNiXHgzMFx4YjkiCisJCQkgICJceDFh XHhiY1x4MjBceDZkXHhhZVx4ZmRceGM4XHgyNiIKKwkJCSAgIlx4Y2RceDIzXHhiNFx4ODZceDI4 XHgwN1x4NGNceDNlIiwKKwkJLml2CT0gIlx4ZWJceGQ1XHg5N1x4YWZceDAzXHg4NVx4MDNceDgz IgorCQkJICAiXHgwY1x4NmJceGEzXHhhYlx4ZTFceDAwXHgxNVx4ZjIiCisJCQkgICJceDRjXHg3 ZFx4ZmJceDk4XHg1MFx4Y2RceDE5XHg3NSIKKwkJCSAgIlx4MjhceDI3XHhlOFx4MThceDAyXHhi Y1x4ZTBceGRkIiwKKwkJLnB0ZXh0CT0gIlx4N2VceDNhXHgwZVx4OWNceGE4XHg1Mlx4YThceDNh IgorCQkJICAiXHgxNVx4NTNceGVkXHg1Y1x4MGJceDJhXHg5Nlx4NWMiCisJCQkgICJceDcxXHgy NFx4ODJceGVlXHg1M1x4ZDRceGQ1XHhkZSIKKwkJCSAgIlx4MjdceGNkXHgzNlx4MThceGY3XHg5 MVx4NGYiLAorCQkuY3RleHQJPSAiXHhkMFx4ODJceGE5XHhkYlx4NzdceDEyXHgzYlx4OTAiCisJ CQkgICJceGU2XHhkNVx4ZGRceDI2XHg2Zlx4MzFceGViXHhkZiIKKwkJCSAgIlx4ZDRceDBjXHg1 Nlx4MmVceDg0XHg3Nlx4NzdceDg2IgorCQkJICAiXHgzNVx4YjRceDBmXHhmYlx4MWRceDVhXHgx NSIsCisJCS5rbGVuCT0gMjQsCisJCS5sZW4JPSAzMSwKKwl9LAorCXsKKwkJLmtleQk9ICJceGJh XHhiMVx4NTJceGEzXHg3Nlx4NWVceDgzXHhlZSIKKwkJCSAgIlx4NDlceGU2XHhjZlx4MDFceGY2 XHg2M1x4YTRceGJhIgorCQkJICAiXHhhMVx4ODdceGJkXHg1OFx4YmJceDIwXHg5Nlx4YTUiLAor CQkuaXYJPSAiXHgxZFx4NmFceDZkXHgyNlx4NDBceDljXHhjZVx4NzYiCisJCQkgICJceDVlXHhi OFx4MjJceDFhXHgxMFx4YjZceDFkXHhmMiIKKwkJCSAgIlx4OTNceDFmXHg4N1x4MDRceGI4XHhi NFx4NmVceGY4IgorCQkJICAiXHgzNVx4NTFceDk2XHgxYlx4ZWVceDdmXHg4YVx4NjAiLAorCQku cHRleHQJPSAiXHg2N1x4ZGZceDY4XHgwN1x4YzBceGY5XHg0NVx4NGMiCisJCQkgICJceDFhXHhm ZVx4ZDNceGM5XHhiNlx4N2RceGU1XHgxOCIKKwkJCSAgIlx4NTRceGY1XHhiM1x4YWVceGY2XHhk YVx4NTJceDI3IgorCQkJICAiXHgzZVx4NTJceGU4XHhlZFx4MDRceGQ3XHg4MCIsCisJCS5jdGV4 dAk9ICJceDExXHhhMVx4MDBceDE1XHg3YVx4NDZceDkyXHg4MiIKKwkJCSAgIlx4MDdceDViXHg2 NFx4ZjFceDYxXHgyN1x4MjVceGM1IgorCQkJICAiXHhjNVx4YWZceGE3XHgyZVx4NjFceDA5XHhi NVx4NWEiCisJCQkgICJceDlhXHgxZFx4YzlceDIwXHhmMFx4YWJceDFlIiwKKwkJLmtsZW4JPSAy NCwKKwkJLmxlbgk9IDMxLAorCX0sCisJeworCQkua2V5CT0gIlx4YmZceGFmXHhkN1x4NjdceDhj XHg0N1x4Y2ZceDIxIgorCQkJICAiXHg4YVx4YTVceGRkXHgzMlx4MjVceDQ3XHhiZVx4NGYiCisJ CQkgICJceGYxXHgzYVx4MGJceGE2XHhhYVx4MmRceGNmXHgwOSIsCisJCS5pdgk9ICJceGQ5XHhl OFx4ZjBceDkyXHg0ZVx4ZmNceDFkXHhmMiIKKwkJCSAgIlx4ODFceDM3XHg3Y1x4OGZceGYxXHg1 OVx4MDlceDIwIgorCQkJICAiXHhmNFx4NDZceDUxXHg4Nlx4NGZceDU0XHg4Ylx4MzIiCisJCQkg ICJceDU4XHhkMVx4OTlceDhiXHg4Y1x4MDNceGViXHg1ZCIsCisJCS5wdGV4dAk9ICJceGNkXHg2 NFx4OTBceGY5XHg3Y1x4ZTVceDBlXHg1YSIKKwkJCSAgIlx4NzVceGU3XHg4ZVx4MzlceDg2XHhl Y1x4MjBceDQzIgorCQkJICAiXHg4YVx4NDlceDA5XHgxNVx4NDdceGY0XHgzY1x4ODkiCisJCQkg ICJceDIxXHhlYlx4Y2ZceDRlXHhjZlx4OTFceGI1XHg0MCIKKwkJCSAgIlx4Y2RceGU1XHg0ZFx4 NWNceDZmXHhmMlx4ZDJceDgwIgorCQkJICAiXHhmYVx4YWJceGIzXHg3Nlx4OWZceDdmXHg4NFx4 MGEiLAorCQkuY3RleHQJPSAiXHg0NFx4OThceDY0XHgxNVx4YjdceDBiXHg4MFx4YTMiCisJCQkg ICJceGI5XHhjYVx4MjNceGZmXHgzYlx4MGJceDY4XHg3NCIKKwkJCSAgIlx4YmJceDNlXHgyMFx4 MTlceDlmXHgyOFx4NzFceDJhIgorCQkJICAiXHg0OFx4M2NceDdjXHhlMlx4ZWZceGI1XHgxMFx4 YWMiCisJCQkgICJceDgyXHg5Zlx4Y2RceDA4XHg4Zlx4NmJceDE2XHg2ZiIKKwkJCSAgIlx4YzNc eGJiXHgwN1x4ZmJceDNjXHhiMFx4MWJceDI3IiwKKwkJLmtsZW4JPSAyNCwKKwkJLmxlbgk9IDQ4 LAorCX0sCisJeworCQkua2V5CT0gIlx4YmVceGJiXHg3N1x4NDZceDA2XHg5Y1x4ZjRceDRkIgor CQkJICAiXHgzN1x4OWFceGU2XHgzZlx4MjdceGE3XHgzYlx4NmUiCisJCQkgICJceDdhXHgzNlx4 YjhceGIzXHhmZlx4YmFceDUxXHhjYyIsCisJCS5pdgk9ICJceDA2XHhiY1x4OGZceDY2XHg2YVx4 YmVceGVkXHg1ZSIKKwkJCSAgIlx4NTFceGYyXHg3Mlx4MTFceDNhXHg1Nlx4ODVceDIxIgorCQkJ ICAiXHg0NFx4ZmVceGVjXHg0N1x4MmJceDA5XHhiOFx4NmYiCisJCQkgICJceDA4XHg4NVx4MmFc eDkzXHhhM1x4YzNceGFiXHg1ZSIsCisJCS5wdGV4dAk9ICJceGM3XHg3NFx4NDJceGYxXHhlYVx4 YzVceDM3XHgyZCIKKwkJCSAgIlx4YzJceGEwXHhmNlx4ZDVceDVhXHg5YVx4YmJceGEwIgorCQkJ ICAiXHhiMlx4ZmRceDU0XHg4ZVx4OThceGEwXHhlYVx4YzciCisJCQkgICJceDc5XHgwOVx4NjVc eDYzXHhhMFx4MmVceDgyXHg0ZSIKKwkJCSAgIlx4NDlceDljXHgzOVx4NjdceGQwXHgwZFx4ODBc eDNlIgorCQkJICAiXHgxYVx4ODZceDg0XHgyYlx4MjBceDIzXHhkZlx4YTciLAorCQkuY3RleHQJ PSAiXHg1Zlx4YTNceDExXHhjYVx4OTNceGZhXHgyNFx4M2EiCisJCQkgICJceDI0XHhiNlx4Y2Zc eDFlXHg3Nlx4YmNceGFiXHhjNCIKKwkJCSAgIlx4ZjNceDI0XHhhMFx4MjdceGFjXHg5MFx4ZWNc eGU5IgorCQkJICAiXHg3M1x4MjhceDdkXHgzNVx4NjdceGZlXHgyZVx4YTgiCisJCQkgICJceDg5 XHg3N1x4YWNceGViXHhjM1x4NjhceDM2XHhmNCIKKwkJCSAgIlx4OGZceDgwXHgyY1x4ZjFceDgw XHhlZlx4NDlceDQ5IiwKKwkJLmtsZW4JPSAyNCwKKwkJLmxlbgk9IDQ4LAorCX0sCisJeworCQku a2V5CT0gIlx4YTVceDI4XHgyNFx4MzRceDFhXHgzY1x4ZDhceGY3IgorCQkJICAiXHgwNVx4OTFc eDhmXHhlZVx4ODVceDFmXHgzNVx4N2YiCisJCQkgICJceDgwXHgzZFx4ZmNceDliXHg5NFx4ZjZc eGZjXHg5ZSIKKwkJCSAgIlx4MTlceDA5XHgwMFx4YTlceDA0XHgzMVx4NGZceDExIiwKKwkJLml2 CT0gIlx4YTFceGJhXHg0OVx4OTVceGZmXHgzNFx4NmRceGI4IgorCQkJICAiXHhjZFx4ODdceDVk XHg1ZVx4ZmRceGVhXHg4NVx4ZGIiCisJCQkgICJceDhhXHg3Ylx4NWVceGIyXHg1ZFx4NTdceGRk XHg2MiIKKwkJCSAgIlx4YWNceGE5XHg4Y1x4NDFceDQyXHg5NFx4NzVceGI3IiwKKwkJLnB0ZXh0 CT0gIlx4NjlceGI0XHhlOFx4OGNceDM3XHhlOFx4NjdceDgyIgorCQkJICAiXHhmMVx4ZWNceDVk XHgwNFx4ZTVceDE0XHg5MVx4MTMiCisJCQkgICJceGRmXHhmMlx4ODdceDFiXHg2OVx4ODFceDFk XHg3MSIKKwkJCSAgIlx4NzBceDllXHg5Y1x4M2JceGRlXHg0OVx4NzBceDExIgorCQkJICAiXHhh MFx4YTNceGRiXHgwZFx4NTRceDRmXHg2Nlx4NjkiCisJCQkgICJceGQ3XHhkYlx4ODBceGE3XHg3 MFx4OTJceDY4XHhjZSIKKwkJCSAgIlx4ODFceDA0XHgyY1x4YzZceGFiXHhhZVx4ZTVceDYwIgor CQkJICAiXHgxNVx4ZTlceDZmXHhlZlx4YWFceDhmXHhhN1x4YTciCisJCQkgICJceDYzXHg4Zlx4 ZjJceGYwXHg3N1x4ZjFceGE4XHhlYSIKKwkJCSAgIlx4ZTFceGI3XHgxZlx4OWVceGFiXHg5ZVx4 NGJceDNmIgorCQkJICAiXHgwN1x4ODdceDViXHg2Zlx4Y2RceGE4XHhhZlx4YjkiCisJCQkgICJc eGZhXHg3MFx4MGJceDUyXHhiOFx4YThceGE3XHg5ZSIKKwkJCSAgIlx4MDdceDVmXHhhNlx4MGVc eGIzXHg5Ylx4NzlceDEzIgorCQkJICAiXHg3OVx4YzNceDNlXHg4ZFx4MWNceDJjXHg2OFx4Yzgi CisJCQkgICJceDUxXHgxZFx4M2NceDdiXHg3ZFx4NzlceDc3XHgyYSIKKwkJCSAgIlx4NTZceDY1 XHhjNVx4NTRceDIzXHgyOFx4YjBceDAzIiwKKwkJLmN0ZXh0CT0gIlx4ZWJceGY5XHg5OFx4ODZc eDNjXHg0MFx4OWZceDE2IgorCQkJICAiXHg4NFx4MDFceGY5XHgwNlx4MGZceGViXHgzY1x4YTki CisJCQkgICJceDRjXHhhNFx4OGVceDVkXHhjM1x4OGRceGU1XHhkMyIKKwkJCSAgIlx4YWVceGE2 XHhlNlx4Y2NceGQ2XHgyZFx4MzdceDRmIgorCQkJICAiXHg5OVx4YzhceGEzXHgyMVx4NDZceGI4 XHg2OVx4ZjIiCisJCQkgICJceGUzXHgxNFx4ODlceGQ3XHhiOVx4ZjVceDllXHg0ZSIKKwkJCSAg Ilx4MDdceDkzXHg2Zlx4NzhceDhlXHg2Ylx4ZWFceDhmIgorCQkJICAiXHhmYlx4NDNceGI4XHgz ZVx4OWJceDRjXHgxZFx4N2UiCisJCQkgICJceDIwXHg5YVx4YzVceDg3XHhlZVx4YWZceGY2XHhm OSIKKwkJCSAgIlx4NDZceGM1XHgxOFx4OGFceGU4XHg2OVx4ZTdceDk2IgorCQkJICAiXHg1Mlx4 NTVceDVmXHgwMFx4MWVceDFhXHhkY1x4Y2MiCisJCQkgICJceDEzXHhhNVx4ZWVceGZmXHg0Ylx4 MjdceGNhXHhkYyIKKwkJCSAgIlx4MTBceGE2XHg0OFx4NzZceDk4XHg0M1x4OTRceGEzIgorCQkJ ICAiXHhjN1x4ZTJceGM5XHg2NVx4OWJceDA4XHgxNFx4MjYiCisJCQkgICJceDFkXHg2OFx4ZmJc eDE1XHgwYVx4MzNceDQ5XHg4NCIKKwkJCSAgIlx4ODRceDMzXHg1YVx4MWJceDI0XHg0Nlx4MzFc eDkyIiwKKwkJLmtsZW4JPSAzMiwKKwkJLmxlbgk9IDEyOCwKKwl9LAorCXsKKwkJLmtleQk9ICJc eDkxXHgzNVx4ZjZceGJhXHgzNlx4OTRceDQ0XHg2ZSIKKwkJCSAgIlx4ZjVceDdiXHhhZlx4ZTdc eDU2XHgxNVx4MGNceDhkIgorCQkJICAiXHg5OFx4NGJceDVkXHhjMFx4OTlceDM5XHhkOVx4NzUi CisJCQkgICJceDcxXHhhNlx4NmJceDgwXHhhMVx4OTJceGRlXHg2YiIsCisJCS5pdgk9ICJceGRh XHhmM1x4OTNceDg4XHgxOVx4NzBceGQyXHg3YSIKKwkJCSAgIlx4OGZceGU1XHg3YVx4YmNceGVj XHg3NFx4YzBceGYxIgorCQkJICAiXHg2Ylx4NDZceDM3XHg3OVx4OTJceDkxXHgxZFx4MTUiCisJ CQkgICJceDNiXHhlNFx4ODlceDJjXHhmOVx4NTBceDdmXHg1YyIsCisJCS5wdGV4dAk9ICJceDY2 XHhkMlx4ZDlceGFhXHg3Nlx4OTFceDhkXHgwNCIKKwkJCSAgIlx4NzhceGQzXHg5M1x4ZWJceGU0 XHg5ZFx4ODhceGFkIgorCQkJICAiXHgxNFx4NmJceDA1XHg5Nlx4NTVceDYwXHgxN1x4MDQiCisJ CQkgICJceDlkXHg0ZFx4ZjBceDBkXHg0OVx4NzhceGNjXHhmYyIKKwkJCSAgIlx4YzdceDQ2XHhm M1x4M2ZceGY1XHgyMVx4MzlceDUxIgorCQkJICAiXHhkMVx4ODhceDg0XHgzZVx4MzRceGRlXHg4 Nlx4MTkiCisJCQkgICJceGE0XHgzYlx4NzVceDE4XHg5OFx4ODlceDBhXHg5MyIKKwkJCSAgIlx4 ZTlceDZlXHhiZlx4NTJceGExXHg2M1x4ZjhceGEyIgorCQkJICAiXHg3N1x4YWJceDU3XHhlZFx4 NWVceGM5XHg2NFx4ZWQiCisJCQkgICJceDVjXHgxYVx4MWRceGI2XHgxNFx4YmNceDdiXHgyNiIK KwkJCSAgIlx4MjdceGNlXHhmMVx4ZmVceGM1XHg3NFx4ZDBceDlkIgorCQkJICAiXHg2MFx4Nzdc eDg3XHgzNlx4ZmRceDcwXHg1NFx4MDMiCisJCQkgICJceDhiXHg5YVx4MzZceDExXHhmOVx4MGZc eDdkXHgxYSIKKwkJCSAgIlx4NjZceGM1XHhmMFx4MjFceGJiXHhmY1x4ODRceGNkIgorCQkJICAi XHg0NVx4YmNceGRmXHhjMFx4ODFceGQzXHhkZlx4MGYiCisJCQkgICJceDE0XHgyMFx4ZmZceDIw XHgwNVx4MGNceDQ3XHgzOCIsCisJCS5jdGV4dAk9ICJceGQ0XHg5OVx4ZGNceDRjXHhiYVx4Yjlc eDljXHhjYSIKKwkJCSAgIlx4NWNceDg1XHg5OFx4M2JceDExXHg1ZVx4ZmJceGRjIgorCQkJICAi XHhlZFx4NDlceDBmXHg0OVx4ZjJceDQ1XHg2Y1x4MmMiCisJCQkgICJceDE2XHg0ZFx4NzVceGJm XHg5Ylx4MjhceDIwXHgzOCIKKwkJCSAgIlx4ZWFceGRmXHhiZVx4NzJceGVhXHhmOFx4NmVceDM0 IgorCQkJICAiXHg3YVx4OTdceDdjXHhlOFx4YTlceDRmXHgyZlx4YjAiCisJCQkgICJceDQ1XHg0 OFx4MDVceGNkXHhkNlx4YzhceDU5XHhlNSIKKwkJCSAgIlx4NWZceDUxXHg0Mlx4YzRceDRlXHgx Mlx4NjRceGNlIgorCQkJICAiXHg5OVx4YjFceGFmXHg3OFx4MTNceDRkXHg3ZVx4NGEiCisJCQkg ICJceGE1XHgwMVx4MGNceGQxXHhhZFx4ZmVceDMxXHhiYiIKKwkJCSAgIlx4YmZceDFjXHgwMlx4 NThceGE0XHhkNVx4ZDJceDcwIgorCQkJICAiXHg4YVx4ZjhceDdkXHg4Zlx4NWRceGRmXHhlN1x4 MTAiCisJCQkgICJceDA5XHhkNlx4ZTFceDA1XHg1MFx4ZThceDMxXHg3YSIKKwkJCSAgIlx4YTdc eGZjXHg0Ylx4ZjdceGFkXHhkNVx4MTBceDI5IgorCQkJICAiXHg3Nlx4NjBceDNlXHg3MVx4OTlc eDBhXHgyMlx4ZTQiCisJCQkgICJceDI5XHhiYVx4NjNceGI3XHgxNlx4NTZceGEyXHgzNyIsCisJ CS5rbGVuCT0gMzIsCisJCS5sZW4JPSAxMjgsCisJfSwKKwl7CisJCS5rZXkJPSAiXHgzNlx4NDVc eDExXHhhMlx4OThceDVmXHg5Nlx4N2MiCisJCQkgICJceGM2XHhiNFx4OTRceDMxXHgwYVx4Njdc eDA5XHgzMiIKKwkJCSAgIlx4NmNceDZmXHg2Zlx4MDBceGYwXHgxN1x4Y2JceGFjIgorCQkJICAi XHhhNVx4YTlceDQ3XHg5ZVx4MmVceDg1XHgyZlx4ZmEiLAorCQkuaXYJPSAiXHgyOFx4ODhceGFh XHg5Ylx4NTlceDNiXHgxZVx4OTciCisJCQkgICJceDgyXHhlNVx4NWNceDllXHg2ZFx4MTRceDEx XHgxOSIKKwkJCSAgIlx4NmVceDM4XHg4Zlx4ZDVceDQwXHgyYlx4Y2FceGY5IgorCQkJICAiXHg3 Ylx4NGNceGU0XHhhM1x4ZDBceGQyXHg4YVx4MTMiLAorCQkucHRleHQJPSAiXHg5NVx4ZDJceGY3 XHg3MVx4MWJceGNhXHhhNVx4ODYiCisJCQkgICJceGQ5XHg0OFx4MDFceDkzXHgyZlx4NzlceDU1 XHgyOSIKKwkJCSAgIlx4NzFceDEzXHgxNVx4MGVceGU2XHgxMlx4YmNceDRkIgorCQkJICAiXHg4 YVx4MzFceGUzXHg0MFx4MmFceGM2XHg1ZVx4MGQiCisJCQkgICJceDY4XHhiYlx4NGFceDYyXHg4 ZFx4YzdceDQ1XHg3NyIKKwkJCSAgIlx4ZDJceGI4XHhjN1x4MWRceGYxXHhkMlx4NWRceDk3Igor CQkJICAiXHhjZlx4YWNceDUyXHhlNVx4MzJceDc3XHhiNlx4ZGEiCisJCQkgICJceDMwXHg4NVx4 Y2ZceDJiXHg5OFx4ZTlceGFhXHgzNCIKKwkJCSAgIlx4NjJceGI1XHgyM1x4OWVceGI3XHhhNlx4 ZDRceGUwIgorCQkJICAiXHhiNFx4NThceDE4XHg4Y1x4NGRceGRlXHg0ZFx4MDEiCisJCQkgICJc eDgzXHg4OVx4MjRceGNhXHhmYlx4MTFceGQ0XHg4MiIKKwkJCSAgIlx4MzBceDdhXHg4MVx4MzVc eGEwXHhiNFx4ZDRceGI2IgorCQkJICAiXHg4NFx4ZWFceDQ3XHg5MVx4OGNceDE5XHg4Nlx4MjUi CisJCQkgICJceGE2XHgwNlx4OGRceDc4XHhlNlx4ZWRceDg3XHhlYiIKKwkJCSAgIlx4ZGFceGVh XHg3M1x4N2NceGJmXHg2Nlx4YjhceDcyIgorCQkJICAiXHhlM1x4MGFceGI4XHgwY1x4Y2JceDFh XHg3M1x4ZjEiCisJCQkgICJceGE3XHhjYVx4MGFceGRlXHg1N1x4MmJceGJkXHgyYiIKKwkJCSAg Ilx4ZWJceDhiXHgyNFx4MzhceDIyXHhkM1x4MGVceDFmIgorCQkJICAiXHgxN1x4YTBceDg0XHg5 OFx4MzFceDc3XHhmZFx4MzQiCisJCQkgICJceDZhXHg0ZVx4M2RceDg0XHg0Y1x4MGVceGZiXHhl ZCIKKwkJCSAgIlx4YzhceDJhXHg1MVx4ZmFceGQ4XHg3M1x4MjFceDhhIgorCQkJICAiXHhkYlx4 YjVceGZlXHgxZlx4ZWVceGM0XHhlOFx4NjUiCisJCQkgICJceDU0XHg4NFx4ZGRceDk2XHg2ZFx4 ZmRceGQzXHgzMSIKKwkJCSAgIlx4NzdceDM2XHg1Mlx4NmJceDgwXHg0Zlx4OWVceGI0IgorCQkJ ICAiXHhhMlx4NTVceGJmXHg2Nlx4NDFceDQ5XHg0ZVx4ODciCisJCQkgICJceGE3XHgwY1x4Y2Fc eGU3XHhhNVx4YzVceGY2XHg2ZiIKKwkJCSAgIlx4MjdceDU2XHhlMlx4NDhceDIyXHhkZFx4NWZc eDU5IgorCQkJICAiXHgzY1x4ZjFceDlmXHg4M1x4ZTVceDJkXHhmYlx4NzEiCisJCQkgICJceGFk XHhkMVx4YWVceDFiXHgyMFx4NWNceDQ3XHhiNyIKKwkJCSAgIlx4M2JceGQzXHgxNFx4Y2VceDgx XHg0Mlx4YjFceDBhIgorCQkJICAiXHhmMFx4NDlceGZhXHhjMlx4ZTdceDg2XHhiZlx4Y2QiCisJ CQkgICJceGIwXHg5NVx4OWZceDhmXHg3OVx4NDFceDU0IiwKKwkJLmN0ZXh0CT0gIlx4ZjZceDU3 XHg1MVx4YzRceDI1XHg2MVx4MmRceGZhIgorCQkJICAiXHhkNlx4ZDlceDNmXHg5YVx4ODFceDUx XHhkZFx4OGUiCisJCQkgICJceDNkXHhlN1x4YWFceDJkXHhiMVx4ZGFceGM4XHhhNiIKKwkJCSAg Ilx4OWRceGFhXHgzY1x4YWJceDYyXHhmMlx4ODBceGMzIgorCQkJICAiXHgyY1x4ZTdceDU4XHg3 Mlx4MWRceDQ0XHhjNVx4MjgiCisJCQkgICJceDdmXHhiNFx4ZjlceGJjXHg5Y1x4YjJceGFiXHg4 ZSIKKwkJCSAgIlx4ZmFceGQxXHg0ZFx4NzJceGQ5XHg3OVx4ZjVceGEwIgorCQkJICAiXHgyNFx4 M2VceDkwXHgyNVx4MzFceDE0XHgzOFx4NDUiCisJCQkgICJceDU5XHhjOFx4ZjZceGUyXHhjNlx4 ZjZceGMxXHhhNyIKKwkJCSAgIlx4YjJceGY4XHhhN1x4YTlceDJiXHg2Zlx4MTJceDNhIgorCQkJ ICAiXHhiMFx4ODFceGE0XHgwOFx4NTdceDU5XHhiMVx4NTYiCisJCQkgICJceDRjXHg4Zlx4MThc eDU1XHgzM1x4NWZceGQ2XHg2YSIKKwkJCSAgIlx4YzZceGEwXHg0Ylx4ZDZceDZiXHg2NFx4M2Vc eDllIgorCQkJICAiXHhmZFx4NjZceDE2XHhlMlx4ZGJceGViXHg1Zlx4YjMiCisJCQkgICJceDUw XHg1MFx4M2VceGRlXHg4ZFx4NzJceDc2XHgwMSIKKwkJCSAgIlx4YmVceGNjXHhjOVx4NTJceDA5 XHgyZFx4OGRceGU3IgorCQkJICAiXHhkNlx4YzNceDY2XHhkYlx4MzZceDA4XHhkMVx4NzciCisJ CQkgICJceGM4XHg3M1x4NDZceDI2XHgyNFx4MjlceGJmXHg2OCIKKwkJCSAgIlx4MmRceDJhXHg5 OVx4NDNceDU2XHg1NVx4ZTRceDkzIgorCQkJICAiXHhhZlx4YWVceDRkXHhlN1x4NTVceDRhXHhj MFx4NDUiCisJCQkgICJceDI2XHhlYlx4M2JceDEyXHg5MFx4N2NceGRjXHhkMSIKKwkJCSAgIlx4 ZDVceDZmXHgwYVx4ZDBceGE5XHhkN1x4NGJceDg5IgorCQkJICAiXHgwYlx4MDdceGQ4XHg4Nlx4 YWRceGExXHhjNFx4NjkiCisJCQkgICJceDFmXHg1ZVx4OGJceGM0XHg5ZVx4OTFceDQxXHgyNSIK KwkJCSAgIlx4NTZceDk4XHg2OVx4NzhceDNhXHg5ZVx4YWVceDkxIgorCQkJICAiXHhkOFx4ZDlc eGZhXHhmYlx4ZmZceDgxXHgyNVx4MDkiCisJCQkgICJceGZjXHhlZFx4MmRceDg3XHhiY1x4MDRc eDYyXHg5NyIKKwkJCSAgIlx4MzVceGUxXHgyNlx4YzJceDQ2XHgxY1x4Y2ZceGQ3IgorCQkJICAi XHgxNFx4ZWRceDAyXHgwOVx4YTVceGIyXHhiNlx4YWEiCisJCQkgICJceDI3XHg0ZVx4NjFceGIz XHg3MVx4NmJceDQ3XHgxNiIKKwkJCSAgIlx4YjdceGU4XHhkNFx4YWZceDUyXHhlYlx4NmFceDZi IgorCQkJICAiXHhkYlx4NGNceDY1XHgyMVx4OWVceDFjXHgzNiIsCisJCS5rbGVuCT0gMzIsCisJ CS5sZW4JPSAyNTUsCisJfSwKKwl7CisJCS5rZXkJPSAiXHg1Nlx4MzNceDM3XHgyMVx4YzRceGVh XHg4Ylx4ODgiCisJCQkgICJceDY3XHg1ZVx4ZWVceGI4XHgwYlx4NmNceDA0XHg0MyIKKwkJCSAg Ilx4MTdceGM1XHgyYlx4OGFceDM3XHgxN1x4OGJceDM3IgorCQkJICAiXHg2MFx4NTdceDNmXHhh N1x4ODJceGNkXHhiOVx4MDkiLAorCQkuaXYJPSAiXHg4OFx4ZWVceDliXHgzNVx4MjFceDJkXHg0 MVx4YTEiCisJCQkgICJceDE2XHgwZFx4N2ZceGRmXHg1N1x4YzlceGI5XHhjMyIKKwkJCSAgIlx4 ZjZceDMwXHg1M1x4YmZceDg5XHg0Nlx4ZTZceDg3IgorCQkJICAiXHg2MFx4YzhceDVlXHg1OVx4 ZGRceDhhXHg3Ylx4ZmUiLAorCQkucHRleHQJPSAiXHg0OVx4ZTJceDBhXHg0Zlx4N2FceDYwXHg3 NVx4OWIiCisJCQkgICJceDk1XHg5OFx4MmNceGU3XHg0Zlx4YjRceDU4XHhiOSIKKwkJCSAgIlx4 MjRceDU0XHg0Nlx4MzRceGRmXHg1OFx4MzFceGU3IgorCQkJICAiXHgyM1x4YzZceGEyXHg2MFx4 NGFceGQyXHg1OVx4YjYiCisJCQkgICJceGViXHgzZVx4YzJceGY4XHhlNVx4MTRceDNjXHg2ZCIK KwkJCSAgIlx4NGJceDcyXHhjYlx4NWZceGNiXHhhN1x4NDdceGI5IgorCQkJICAiXHg3YVx4NDlc eGZjXHhmMVx4YWRceDkyXHg3Nlx4NTUiCisJCQkgICJceGFjXHg1OVx4ZGNceDNhXHhjNlx4OGJc eDdjXHhkYiIKKwkJCSAgIlx4MDZceGNkXHhlYVx4NmFceDM0XHg1MVx4YjdceGIyIgorCQkJICAi XHhlNVx4MzlceDNjXHg4N1x4MDBceDkwXHhjMlx4YmIiCisJCQkgICJceGIyXHhhNVx4MmNceDU4 XHhjMlx4OWJceGUzXHg3NyIKKwkJCSAgIlx4OTVceDgyXHg1MFx4Y2JceDIzXHhkY1x4MThceGQ4 IgorCQkJICAiXHg0ZVx4YmJceDEzXHg1ZFx4MzVceDNkXHg5YVx4ZGEiCisJCQkgICJceGU0XHg3 NVx4YTFceDc1XHgxN1x4NTlceDhjXHg2YSIKKwkJCSAgIlx4YjJceDc2XHg3ZVx4ZDRceDQ1XHgz MVx4MGFceDQ1IgorCQkJICAiXHgyZVx4NjBceDgzXHgzZFx4ZGNceDhkXHg0M1x4MjAiCisJCQkg ICJceDU4XHgyNFx4YjJceDlkXHhkNVx4NTlceDY0XHgzMiIKKwkJCSAgIlx4NGVceDZmXHhiOVx4 OWNceGRlXHg3N1x4NGRceDY1IgorCQkJICAiXHhkZlx4YzBceDdhXHhlYlx4NDBceDgwXHhlOFx4 ZTUiCisJCQkgICJceGM3XHhjMVx4NzdceDNiXHhhZVx4MmJceDg1XHhjZSIKKwkJCSAgIlx4NTZc eGZhXHg0M1x4NDFceDk2XHgyM1x4OGVceGFiIgorCQkJICAiXHhkM1x4YzhceDY1XHhlZlx4MGJc eGZlXHg0Mlx4NGMiCisJCQkgICJceDNhXHg4YVx4NTRceDU1XHhhYlx4YTNceGY5XHg2MiIKKwkJ CSAgIlx4OWZceDhlXHhiZVx4MzNceDlhXHhmZVx4NmJceDUyIgorCQkJICAiXHhkNFx4NGNceDkz XHg4NFx4N2NceDdlXHhiMVx4NWUiCisJCQkgICJceDMyXHhhZlx4NmVceDIxXHg0NFx4ZDJceDZi XHg1NiIKKwkJCSAgIlx4Y2RceDJjXHg5ZFx4MDNceDNiXHg1MFx4MWZceDBhIgorCQkJICAiXHhj M1x4OThceGZmXHgzYVx4MWRceDM2XHg3ZVx4NmQiCisJCQkgICJceGNmXHhiY1x4ZTdceGU4XHhm Y1x4MjRceDU1XHhmZCIKKwkJCSAgIlx4NzJceDNkXHhhN1x4M2ZceDA5XHhhN1x4MzhceGU2Igor CQkJICAiXHg1N1x4OGRceGM0XHg3NFx4N2ZceGQzXHgyNlx4NzUiCisJCQkgICJceGRhXHhmYVx4 MjlceDM1XHhjMVx4MzFceDgyIiwKKwkJLmN0ZXh0CT0gIlx4MDJceDIzXHg3NFx4MDJceDU2XHhm NFx4N2JceGM4IgorCQkJICAiXHg1NVx4NjFceGEwXHg2Ylx4NjhceGZmXHhkZVx4ODciCisJCQkg ICJceDlkXHg2Nlx4NzdceDg2XHg5OFx4NjNceGFiXHhkNSIKKwkJCSAgIlx4ZDZceGY0XHg3ZVx4 M2JceGY0XHhhZVx4OTdceDEzIgorCQkJICAiXHg3OVx4YzBceDk2XHg3NVx4ODdceDMzXHgyYVx4 MGUiCisJCQkgICJceGMyXHgxYVx4MTNceDkwXHg1Zlx4NmVceDkzXHhlZCIKKwkJCSAgIlx4NTRc eGZlXHhlZVx4MDVceDQ4XHhhZVx4MjBceDJkIgorCQkJICAiXHhhOVx4MmJceDk4XHhhM1x4Yzhc eGFmXHgxN1x4NmIiCisJCQkgICJceDgyXHg0YVx4OWFceDdmXHhmMFx4Y2VceGQ5XHgyNiIKKwkJ CSAgIlx4MTZceDI4XHhlYlx4ZjRceDRiXHhhYlx4N2RceDZlIgorCQkJICAiXHg5Nlx4MjdceGQy XHg5MFx4YmJceDhkXHg5OFx4ZGMiCisJCQkgICJceGI4XHg2Zlx4N2FceDk4XHg2N1x4ZWZceDFj XHhmYiIKKwkJCSAgIlx4ZDBceDIzXHgxYVx4MmZceGM5XHg1OFx4NGVceGM2IgorCQkJICAiXHgz OFx4MDNceDUzXHg2MVx4OGVceGZmXHg1NVx4NDYiCisJCQkgICJceDQ3XHhlOFx4MWZceDlkXHg2 Nlx4OTVceDliXHg3ZiIKKwkJCSAgIlx4MjZceGFjXHhmMlx4NjFceGE0XHgwNVx4MTVceGNiIgor CQkJICAiXHg2Mlx4YjZceDZiXHg3Y1x4NTdceDk1XHg5ZFx4MjUiCisJCQkgICJceDllXHg4M1x4 YjFceDg4XHg1MFx4MzlceGI1XHgzNCIKKwkJCSAgIlx4OGFceDA0XHgyYlx4NzZceDFiXHhiOFx4 OGNceDU3IgorCQkJICAiXHgyNlx4MjFceDk5XHgyZVx4OTNceGM4XHg5Ylx4YjIiCisJCQkgICJc eDMxXHhlMVx4ZTNceDI3XHhkZVx4YzhceGYyXHhjNSIKKwkJCSAgIlx4MDFceDdhXHg0NVx4Mzhc eDZmXHhlN1x4YTBceDlkIgorCQkJICAiXHg4Y1x4NDFceDk5XHhlY1x4M2RceGI2XHhhZlx4NjYi CisJCQkgICJceDc2XHhhY1x4YzhceDc4XHhiMFx4ZGZceGNmXHhjZSIKKwkJCSAgIlx4YTFceDI5 XHg0Nlx4NmZceGUzXHgzNVx4NGFceDY3IgorCQkJICAiXHg1OVx4MjdceDE0XHhjY1x4MDRceGRi XHhiM1x4MDMiCisJCQkgICJceGI3XHgyZFx4OGRceGY5XHg3NVx4OWVceDU5XHg0MiIKKwkJCSAg Ilx4ZTNceGE0XHhmOFx4ZjRceDgyXHgyN1x4YTNceGE5IgorCQkJICAiXHg3OVx4YWNceDZiXHg4 YVx4ZDhceGRiXHgyOVx4NzMiCisJCQkgICJceDAyXHhiYlx4NmZceDg1XHgwMFx4OTJceGVhXHg1 OSIKKwkJCSAgIlx4MzBceDFiXHgxOVx4ZjNceGFiXHg2ZVx4OTlceDlhIgorCQkJICAiXHhmMlx4 MjNceDI3XHhjNlx4NTlceDVhXHg5YyIsCisJCS5rbGVuCT0gMzIsCisJCS5sZW4JPSAyNTUsCisJ fSwKKwl7CisJCS5rZXkJPSAiXHhkM1x4ODFceDcyXHgxOFx4MjNceGZmXHg2Zlx4NGEiCisJCQkg ICJceDI1XHg3NFx4MjlceDBkXHg1MVx4OGFceDBlXHgxMyIKKwkJCSAgIlx4YzFceDUzXHg1ZFx4 MzBceDhkXHhlZVx4NzVceDBkIgorCQkJICAiXHgxNFx4ZDZceDY5XHhjOVx4MTVceGE5XHgwY1x4 NjAiLAorCQkuaXYJPSAiXHg2NVx4OWJceGQ0XHhhOFx4N2RceDI5XHgxZFx4ZjQiCisJCQkgICJc eGM0XHhkNlx4OWJceDZhXHgyOFx4YWJceDY0XHhlMiIKKwkJCSAgIlx4NjJceDgxXHg5N1x4YzVc eDgxXHhhYVx4ZjlceDQ0IgorCQkJICAiXHhjMVx4NzJceDU5XHg4Mlx4YWZceDE2XHhjOFx4MmMi LAorCQkucHRleHQJPSAiXHhjN1x4NmJceDUyXHg2YVx4MTBceGYwXHhjY1x4MDkiCisJCQkgICJc eGMxXHgxMlx4MWRceDZkXHgyMVx4YTZceDc4XHhmNSIKKwkJCSAgIlx4MDVceGEzXHg2OVx4NjBc eDkxXHgzNlx4OThceDU3IgorCQkJICAiXHhiYVx4MGNceDE0XHhjY1x4ZjNceDJkXHg3M1x4MDMi CisJCQkgICJceGM2XHhiMlx4NWZceGM4XHgxNlx4MjdceDM3XHg1ZCIKKwkJCSAgIlx4ZDBceDBi XHg4N1x4YjJceDUwXHg5NFx4N2JceDU4IgorCQkJICAiXHgwNFx4ZjRceGUwXHg3Zlx4NmVceDU3 XHg4ZVx4YzkiCisJCQkgICJceDQxXHg4NFx4YzFceGIxXHg3ZVx4NGJceDkxXHgxMiIKKwkJCSAg Ilx4M2FceDhiXHg1ZFx4NTBceDgyXHg3Ylx4Y2JceGQ5IgorCQkJICAiXHg5YVx4ZDlceDRlXHgx OFx4MDZceDIzXHg5ZVx4ZDQiCisJCQkgICJceGE1XHgyMFx4OThceGVmXHhiNVx4ZGFceGU1XHhj MCIKKwkJCSAgIlx4OGFceDZhXHg4M1x4NzdceDE1XHg4NFx4MWVceGFlIgorCQkJICAiXHg3OFx4 OTRceDlkXHhkZlx4YjdceGQxXHhlYVx4NjciCisJCQkgICJceGFhXHhiMFx4MTRceDE1XHhmYVx4 NjdceDIxXHg4NCIKKwkJCSAgIlx4ZDNceDQxXHgyYVx4Y2VceGJhXHg0Ylx4NGFceGU4IgorCQkJ ICAiXHg5NVx4NjJceGE5XHg1NVx4ZjBceDgwXHhhZFx4YmQiCisJCQkgICJceGFiXHhhZlx4ZGRc eDRmXHhhNVx4N2NceDEzXHgzNiIKKwkJCSAgIlx4ZWRceDVlXHg0Zlx4NzJceGFkXHg0Ylx4ZjFc eGQwIgorCQkJICAiXHg4OFx4NGVceGVjXHgyY1x4ODhceDEwXHg1ZVx4ZWEiCisJCQkgICJceDEy XHhjMFx4MTZceDAxXHgyOVx4YTNceGEwXHg1NSIKKwkJCSAgIlx4YWFceDY4XHhmM1x4ZTlceDlk XHgzYlx4MGRceDNiIgorCQkJICAiXHg2ZFx4ZWNceGY4XHhhMFx4MmRceGYwXHg5MFx4OGQiCisJ CQkgICJceDFjXHhlMlx4ODhceGQ0XHgyNFx4NzFceGY5XHhiMyIKKwkJCSAgIlx4YzFceDlmXHhj NVx4ZDZceDc2XHg3MFx4YzVceDJlIgorCQkJICAiXHg5Y1x4YWNceGRiXHg5MFx4YmRceDgzXHg3 Mlx4YmEiCisJCQkgICJceDZlXHhiNVx4YTVceDUzXHg4M1x4YTlceGE1XHhiZiIKKwkJCSAgIlx4 N2RceDA2XHgwZVx4M2NceDJhXHhkMlx4MDRceGI1IgorCQkJICAiXHgxZVx4MTlceDM4XHgwOVx4 MTZceGQyXHg4Mlx4MWYiCisJCQkgICJceDc1XHgxOFx4NTZceGI4XHg5Nlx4MGJceGE2XHhmOSIK KwkJCSAgIlx4Y2ZceDYyXHhkOVx4MzJceDVkXHhhOVx4ZDdceDFkIgorCQkJICAiXHhlY1x4ZTRc eGRmXHgxYlx4YmVceGYxXHgzNlx4ZWUiCisJCQkgICJceGUzXHg3Ylx4YjVceDJmXHhlZVx4Zjhc eDUzXHgzZCIKKwkJCSAgIlx4NmFceGI3XHg3MFx4YTlceGZjXHg5Y1x4NTdceDI1IgorCQkJICAi XHhmMlx4ODlceDEwXHhkM1x4YjhceGE4XHg4Y1x4MzAiCisJCQkgICJceGFlXHgyM1x4NGZceDBl XHgxM1x4NjZceDRmXHhlMSIKKwkJCSAgIlx4YjZceGMwXHhlNFx4ZjhceGVmXHg5M1x4YmRceDZl IgorCQkJICAiXHgxNVx4ODVceDZiXHhlM1x4NjBceDgxXHgxZFx4NjgiCisJCQkgICJceGQ3XHgz MVx4ODdceDg5XHgwOVx4YWJceGQ1XHg5NiIKKwkJCSAgIlx4MWRceGYzXHg2ZFx4NjdceDgwXHhj YVx4MDdceDMxIgorCQkJICAiXHg1ZFx4YTdceGU0XHhmYlx4M2VceGYyXHg5Ylx4MzMiCisJCQkg ICJceDUyXHgxOFx4YzhceDMwXHhmZVx4MmRceGNhXHgxZSIKKwkJCSAgIlx4NzlceDkyXHg3YVx4 NjBceDVjXHhiNlx4NThceDg3IgorCQkJICAiXHhhNFx4MzZceGEyXHg2N1x4OTJceDhiXHhhNFx4 YjciCisJCQkgICJceGYxXHg4Nlx4ZGZceGRjXHhjMFx4N2VceDhmXHg2MyIKKwkJCSAgIlx4ZDJc eGEyXHhkY1x4NzhceGViXHg0Zlx4ZDhceDk2IgorCQkJICAiXHg0N1x4Y2FceGI4XHg5MVx4Zjlc eGY3XHg5NFx4MjEiCisJCQkgICJceDVmXHg5YVx4OWZceDViXHhiOFx4NDBceDQxXHg0YiIKKwkJ CSAgIlx4NjZceDY5XHg2YVx4NzJceGQwXHhjYlx4NzBceGI3IgorCQkJICAiXHg5M1x4YjVceDM3 XHg5Nlx4MDVceDM3XHg0Zlx4ZTUiCisJCQkgICJceDhjXHhhN1x4NWFceDRlXHg4Ylx4YjdceDg0 XHhlYSIKKwkJCSAgIlx4YzdceGZjXHgxOVx4NmVceDFmXHg1YVx4YTFceGFjIgorCQkJICAiXHgx OFx4N2RceDUyXHgzYlx4YjNceDM0XHg2Mlx4OTkiCisJCQkgICJceGU0XHg5ZVx4MzFceDA0XHgz Zlx4YzBceDhkXHg4NCIKKwkJCSAgIlx4MTdceDdjXHgyNVx4NDhceDUyXHg2N1x4MTFceDI3Igor CQkJICAiXHg2N1x4YmJceDVhXHg4NVx4Y2FceDU2XHhiMlx4NWMiCisJCQkgICJceGU2XHhlY1x4 ZDVceDk2XHgzZFx4MTVceGZjXHhmYiIKKwkJCSAgIlx4MjJceDI1XHhmNFx4MTNceGU1XHg5M1x4 NGJceDlhIgorCQkJICAiXHg3N1x4ZjFceDUyXHgxOFx4ZmFceDE2XHg1ZVx4NDkiCisJCQkgICJc eDAzXHg0NVx4YThceDA4XHhmYVx4YjNceDQxXHg5MiIKKwkJCSAgIlx4NzlceDUwXHgzM1x4Y2Fc eGQwXHhkN1x4NDJceDU1IgorCQkJICAiXHhjM1x4OWFceDBjXHg0ZVx4ZDlceGE0XHgzY1x4ODYi CisJCQkgICJceDgwXHg5Zlx4NTNceGQxXHhhNFx4MmVceGQxXHhiYyIKKwkJCSAgIlx4ZjFceDU0 XHg2ZVx4OTNceGE0XHg2NVx4OTlceDhlIgorCQkJICAiXHhkZlx4MjlceGMwXHg2NFx4NjNceDA3 XHhiYlx4ZWEiLAorCQkuY3RleHQJPSAiXHg5Zlx4NzJceDg3XHhjN1x4MTdceGZiXHgyMFx4MTUi CisJCQkgICJceDY1XHhiM1x4NTVceGE4XHgxY1x4OGVceDUyXHgzMiIKKwkJCSAgIlx4YjFceDgy XHg4ZFx4YmZceGI1XHg5Zlx4MTBceDBhIgorCQkJICAiXHhlOFx4MGNceDcwXHg2Mlx4ZWZceDg5 XHhiNlx4MWYiCisJCQkgICJceDczXHhjY1x4ZTRceGNjXHg3YVx4M2FceDc1XHg0YSIKKwkJCSAg Ilx4MjZceGU3XHhmNVx4ZDdceDdiXHgxN1x4MzlceDJkIgorCQkJICAiXHhkMlx4MjdceDZlXHhm OVx4MmZceDllXHhlMlx4ZjYiCisJCQkgICJceGZhXHgxNlx4YzJceGYyXHg0OVx4MjZceGE3XHg1 YiIKKwkJCSAgIlx4ZTdceGNhXHgyNVx4MGVceDQ1XHhhMFx4MzRceGMyIgorCQkJICAiXHg5YVx4 MzdceDc5XHg3ZVx4N2NceDU4XHgxOFx4OTQiCisJCQkgICJceDEwXHhhOFx4N2NceDQ4XHhhOVx4 ZDdceDYzXHg4OSIKKwkJCSAgIlx4OWVceDYxXHg0ZFx4MjZceDM0XHhkOVx4ZjBceGIxIgorCQkJ ICAiXHgyZFx4MTdceDJjXHg2Zlx4N2NceDM1XHgwZVx4YmUiCisJCQkgICJceDc3XHg3MVx4N2Nc eDE3XHg1Ylx4YWJceDcwXHhkYiIKKwkJCSAgIlx4MmZceDU0XHgwZlx4YTlceGM4XHhmNFx4ZjVc eGFiIgorCQkJICAiXHg1Mlx4MDRceDNhXHhiOFx4MDNceGE3XHhmZFx4NTciCisJCQkgICJceDQ1 XHg1ZVx4YmNceDc3XHhlMVx4ZWVceDc5XHg4YyIKKwkJCSAgIlx4NThceDdiXHgxZlx4ZjdceDc1 XHhkZVx4NjhceDE3IgorCQkJICAiXHg5OFx4ODVceDhhXHgxOFx4NWNceGQyXHgzOVx4NzgiCisJ CQkgICJceDdhXHg2Zlx4MjZceDZlXHhlMVx4MTNceDkxXHhkZCIKKwkJCSAgIlx4ZGZceDBlXHg2 ZVx4NjdceGNjXHg1MVx4NTNceGQ4IgorCQkJICAiXHgxN1x4NWVceGNlXHhhN1x4ZTRceGFmXHhm YVx4ZjMiCisJCQkgICJceDRmXHg5Zlx4MDFceDliXHgwNFx4ZTdceGZjXHhmOSIKKwkJCSAgIlx4 NmFceGRjXHgxZFx4MGNceDlhXHhhYVx4M2FceDdhIgorCQkJICAiXHg3M1x4MDNceGRmXHhiZlx4 M2JceDgyXHhiZVx4YjAiCisJCQkgICJceGI0XHhhNFx4Y2ZceDA3XHhkN1x4ZGVceDcxXHgyNSIK KwkJCSAgIlx4YzVceDEwXHhlZVx4MGFceDE1XHg5Nlx4OGJceDRmIgorCQkJICAiXHhmZVx4Yjhc eDI4XHhiZFx4NGFceGNkXHhlYlx4OWYiCisJCQkgICJceDVkXHgwMFx4YzFceGVlXHhlOFx4MTZc eDQ0XHhlYyIKKwkJCSAgIlx4ZTlceDdiXHhkNlx4ODVceDE3XHgyOVx4Y2ZceDU4IgorCQkJICAi XHgyMFx4YWJceGY3XHhjZVx4NmJceGU3XHg3MVx4N2QiCisJCQkgICJceDRmXHhhOFx4YjBceGU5 XHg3ZFx4NzBceGQ2XHgwYiIKKwkJCSAgIlx4MmVceDIwXHhiMVx4MWFceDYzXHgzN1x4YWFceDJj IgorCQkJICAiXHg5NFx4ZWVceGQ1XHhmNlx4NThceDJhXHhmNFx4N2EiCisJCQkgICJceDRjXHhi YVx4ZjVceGU5XHgzY1x4NmZceDk1XHgxMyIKKwkJCSAgIlx4NWZceDk2XHg4MVx4NWJceGI1XHg2 Mlx4ZjJceGQ3IgorCQkJICAiXHg4ZFx4YmVceGExXHgzMVx4NTFceGU2XHhmZVx4YzkiCisJCQkg ICJceDA3XHg3ZFx4MGZceDAwXHgzYVx4NjZceDhjXHg0YiIKKwkJCSAgIlx4OTRceGFhXHhlNVx4 NTZceGRlXHhjZFx4NzRceGE3IgorCQkJICAiXHg0OFx4NjdceDZmXHhlZFx4YzlceDZhXHhlZlx4 YWYiCisJCQkgICJceDlhXHhiN1x4YWVceDYwXHhmYVx4YzBceDM3XHgzOSIKKwkJCSAgIlx4YTVc eDI1XHhlNVx4MjJceGVhXHg4Mlx4NTVceDY4IgorCQkJICAiXHgzZVx4MzBceGMzXHg1YVx4YjZc eDI5XHg3M1x4N2EiCisJCQkgICJceGI2XHhmYlx4MzRceGVlXHg1MVx4N2NceDU0XHhlNSIKKwkJ CSAgIlx4MDFceDRkXHg3Mlx4MjVceDMyXHg0YVx4YTNceDY4IgorCQkJICAiXHg4MFx4OWFceDg5 XHhjNVx4MTFceDY2XHg0Y1x4OGMiCisJCQkgICJceDQ0XHg1MFx4YmVceGQ3XHhhMFx4ZWVceGE2 XHhiYiIKKwkJCSAgIlx4OTJceDBjXHhlNlx4ZDdceDgzXHg1MVx4YjFceDY5IgorCQkJICAiXHg2 M1x4NDBceGYzXHhmNFx4OTJceDg0XHhjNFx4MzgiCisJCQkgICJceDI5XHhmYlx4YjRceDg0XHhh MFx4MTlceDc1XHgxNiIKKwkJCSAgIlx4NjBceGJmXHgwYVx4OWNceDg5XHhlZVx4YWRceGI0Igor CQkJICAiXHg0M1x4ZjlceDcxXHgzOVx4NDVceDdjXHgyNFx4ODMiCisJCQkgICJceDMwXHhiYlx4 ZWVceDI4XHhiMFx4ODZceDdiXHhlYyIKKwkJCSAgIlx4OTNceGMxXHhiZlx4YjlceDk3XHgxYlx4 OTZceGVmIgorCQkJICAiXHhlZVx4NThceDM1XHg2MVx4MTJceDE5XHhkYVx4MjUiCisJCQkgICJc eDc3XHhlNVx4ODBceDFhXHgzMVx4MjdceDliXHhlNCIKKwkJCSAgIlx4ZGFceDhiXHg3ZVx4NTFc eDRkXHhjYlx4MDFceDE5IgorCQkJICAiXHg0Zlx4ZGNceDkyXHgxYVx4MTdceGQ1XHg2Ylx4ZjQi CisJCQkgICJceDUwXHhlM1x4MDZceGU0XHg3Nlx4OWZceDY1XHgwMCIKKwkJCSAgIlx4YmRceDdh XHhlMlx4NjRceDI2XHhmMlx4ZTRceDdlIgorCQkJICAiXHg0MFx4ZjJceDgwXHhhYlx4NjJceGQ1 XHhlZlx4MjMiCisJCQkgICJceDhiXHhmYlx4NmZceDI0XHg2ZVx4OWJceDY2XHgwZSIKKwkJCSAg Ilx4ZjRceDFjXHgyNFx4MWVceDFkXHgyNlx4OTVceDA5IgorCQkJICAiXHg5NFx4M2NceGIyXHhi Nlx4MDJceGE3XHhkOVx4OWEiLAorCQkua2xlbgk9IDMyLAorCQkubGVuCT0gNTEyLAorCX0sCisJ eworCQkua2V5CT0gIlx4ODNceDhhXHhhN1x4ZDZceDMxXHgxMFx4YjFceDY3IgorCQkJICAiXHhi Zlx4ZWRceGY2XHg5M1x4MWRceDJlXHhjOVx4NGMiCisJCQkgICJceDE4XHhhYlx4OThceDJjXHhl ZFx4NWFceDE0XHgzMCIKKwkJCSAgIlx4YzlceGUwXHg0Ylx4NjdceGI1XHgwZFx4NmNceGI0IiwK KwkJLml2CT0gIlx4NzlceDlhXHhlYVx4OTJceDEwXHhkOFx4MGJceDZhIgorCQkJICAiXHhiNFx4 Y2ZceDQ5XHgyOVx4ZGJceDUwXHhjZVx4NTQiCisJCQkgICJceGYyXHg5M1x4MDlceDFkXHhjY1x4 ZDZceDFhXHhmNyIKKwkJCSAgIlx4ODBceDQ5XHg3NFx4ODNceDc2XHg1MFx4YWZceDJjIiwKKwkJ LnB0ZXh0CT0gIlx4Y2VceDdhXHgzY1x4ZGVceDk1XHg0Ylx4MmZceDYzIgorCQkJICAiXHgzOVx4 NWZceDUwXHg4N1x4MzlceGZiXHg1ZVx4NDIiCisJCQkgICJceDE3XHhjZFx4ZmZceDVlXHg1Y1x4 NzdceDY3XHgyMSIKKwkJCSAgIlx4OWNceGFlXHhhZFx4YTZceGJmXHg4OVx4YzJceDdlIgorCQkJ ICAiXHg5OVx4ZmVceGVjXHgyNVx4M2RceDk0XHg3Zlx4Y2YiCisJCQkgICJceDQzXHg1Mlx4YWRc eDg3XHg5ZFx4MTJceDU0XHgwOCIKKwkJCSAgIlx4YzdceGI4XHhlMlx4NWNceDRlXHg0Zlx4YzBc eDZlIgorCQkJICAiXHgxY1x4ZmZceGMxXHgzMFx4NjZceGQ0XHgyZVx4NjAiCisJCQkgICJceGU2 XHhjNlx4ZmFceGY1XHhjMVx4YzhceGIxXHhkMCIKKwkJCSAgIlx4ODlceDgzXHgxM1x4MDBceDM1 XHg1Mlx4M2ZceDA4IgorCQkJICAiXHhiN1x4NjJceDc3XHhiZFx4OWJceDY2XHgzNVx4ZDMiCisJ CQkgICJceDU3XHgyNFx4OTRceGU2XHgyY1x4MmVceDllXHhkYSIKKwkJCSAgIlx4NDRceGY5XHg2 Ylx4YWVceDBiXHhkN1x4OWZceDU1IgorCQkJICAiXHg4Nlx4NGVceDFiXHg0Ylx4ZTJceDMyXHgy MFx4OWMiCisJCQkgICJceDAzXHgxNVx4ZDFceDZlXHgyMlx4NTZceGM3XHg1YyIKKwkJCSAgIlx4 ZTRceDUxXHhiY1x4ZDhceDIxXHhkMFx4YzRceDE5IgorCQkJICAiXHgxOFx4Y2VceDYyXHg3M1x4 YWRceDBjXHgzMVx4YTYiCisJCQkgICJceDY2XHhlZFx4MWFceDdkXHg1NFx4Y2JceGE0XHg3YyIK KwkJCSAgIlx4ZWJceGVkXHhkZlx4ODBceDAyXHg4ZFx4MjZceDRiIgorCQkJICAiXHhkNFx4OTdc eDEzXHg5ZFx4ZWJceGU3XHgwYlx4MDkiCisJCQkgICJceDk5XHg0ZFx4ZTZceGJhXHhiNVx4Mzhc eDM3XHhmZiIKKwkJCSAgIlx4N2RceGM1XHhmMlx4YjlceDhhXHhhOFx4MDBceDRkIgorCQkJICAi XHhmZlx4NDNceGI0XHgyMlx4YzBceDBiXHg3Mlx4ZWEiCisJCQkgICJceDViXHgzZVx4YzNceGRi XHhjOFx4YTdceGIwXHg1MCIKKwkJCSAgIlx4NDhceDkwXHg2ZFx4OGFceGY3XHgzMFx4NjJceGQ4 IgorCQkJICAiXHgzYVx4Y2ZceGY5XHhjZFx4NmFceDY3XHhhYlx4NTUiCisJCQkgICJceDY0XHg3 MFx4NjRceGRhXHgyM1x4ZWRceDU4XHgyNiIKKwkJCSAgIlx4ZjZceDkwXHgyYVx4NmVceDVhXHg5 OFx4ZDRceDhlIgorCQkJICAiXHg1NFx4NmFceDlkXHgxZFx4MjlceGVmXHg4NFx4ZmEiCisJCQkg ICJceDNjXHhiYVx4MmJceDVlXHgzNFx4NDVceDdkXHhmYyIKKwkJCSAgIlx4NDVceDRmXHgxM1x4 YjdceGRkXHhkN1x4MmJceGI3IgorCQkJICAiXHgxYVx4YjRceDg2XHg1ZVx4Y2ZceDM1XHg1NFx4 YzMiCisJCQkgICJceGI2XHgwZFx4ZTdceGNkXHg0Nlx4NDRceGE0XHhjNCIKKwkJCSAgIlx4NDhc eDJmXHhkMFx4ZmVceDcyXHhlMVx4ZjBceDkyIgorCQkJICAiXHgxZlx4NTNceGU0XHg5NVx4NDVc eDAzXHhiOVx4OWUiCisJCQkgICJceGM4XHhlMFx4Y2NceDA0XHg5Y1x4ZGRceDE5XHgxOSIKKwkJ CSAgIlx4YTNceGNmXHg4N1x4ZWNceGYxXHg4NFx4MGVceDY1IgorCQkJICAiXHhiY1x4YzlceGU3 XHgxMlx4MjZceDQ1XHhlNlx4MmUiCisJCQkgICJceDllXHhlNFx4NzlceDZjXHhhMFx4MDRceGRi XHhjYSIKKwkJCSAgIlx4NzJceDk3XHgyOVx4ZmNceDIwXHg0M1x4ZDBceDM3IgorCQkJICAiXHg2 NFx4ZjNceDMzXHg5MFx4MTRceGNmXHgwMFx4YTIiCisJCQkgICJceGY5XHgxYlx4YTRceDliXHgz MFx4NGJceGQwXHg3YSIKKwkJCSAgIlx4MGRceDUyXHgyYlx4MWFceGQxXHhlYVx4ZThceDg0Igor CQkJICAiXHg4Ylx4NDRceDYxXHhiMVx4ZmRceDRkXHhkYlx4ZjciCisJCQkgICJceDBiXHhkNVx4 NTVceDMyXHg4M1x4YjJceDcxXHg0MiIKKwkJCSAgIlx4OGFceDdmXHg4MFx4YzZceGZmXHg5NFx4 MTZceGRmIgorCQkJICAiXHhiNVx4ZmVceDU5XHhlN1x4YjVceGE0XHg1OFx4OWMiCisJCQkgICJc eDg4XHhkMlx4YjRceDYzXHg4Ylx4Y2JceDliXHg5ZiIKKwkJCSAgIlx4YzZceDVjXHg5NFx4MWJc eDQxXHg4Ylx4YTJceDY2IgorCQkJICAiXHhkYVx4MGRceGJjXHg5ZFx4M2FceDU5XHhkOFx4NjYi CisJCQkgICJceGQwXHg2N1x4ZmFceDUwXHg2Zlx4ZTZceGQwXHg3YSIKKwkJCSAgIlx4ZDFceDA2 XHgyM1x4NDJceDBlXHgxNFx4MjBceDY1IgorCQkJICAiXHgyMFx4NzNceGFhXHgzNFx4YWNceGE3 XHg2ZFx4ZTUiCisJCQkgICJceDIzXHgyOFx4YTBceGNmXHg1N1x4M2VceDE5XHgwMCIKKwkJCSAg Ilx4M2FceDg1XHgyZlx4OWRceDc5XHgxNVx4MjlceDRjIgorCQkJICAiXHg5Zlx4ZjdceDNkXHhh M1x4MjRceDNjXHhhMFx4NjgiCisJCQkgICJceGM2XHg0Y1x4NDRceDVhXHg4N1x4ZTdceGJjXHgw ZiIKKwkJCSAgIlx4YmJceDE5XHhlYVx4M2VceDM3XHhjNFx4M2JceGNjIgorCQkJICAiXHgxZVx4 ZGRceGZhXHhmYVx4NzFceDBlXHgzN1x4ZDUiCisJCQkgICJceDNhXHhjNVx4MWVceDkwXHg1ZVx4 ZjBceDEzXHgxZiIKKwkJCSAgIlx4N2FceDM1XHhiMlx4NjNceDI5XHhiNlx4MjdceGYyIgorCQkJ ICAiXHgwYVx4NTdceDVjXHg0M1x4ZTJceGM3XHgwMlx4NGEiCisJCQkgICJceGM2XHg1Nlx4ZjBc eGMxXHhhN1x4ZDhceGM2XHgzYyIKKwkJCSAgIlx4ODFceGQ0XHg1ZVx4MTZceDVlXHgyYVx4Nzdc eDc3IiwKKwkJLmN0ZXh0CT0gIlx4ZDhceGIwXHhmMFx4NjlceGVmXHgzNVx4OTlceDUyIgorCQkJ ICAiXHhmMVx4MDVceGQ2XHgwN1x4MDlceDhmXHgyYVx4ZDIiCisJCQkgICJceDY5XHhlYVx4M2Vc eDNhXHhjMVx4YTZceGJlXHhkYiIKKwkJCSAgIlx4OWFceDEzXHhhMlx4MTlceDU5XHg2ZFx4Yzlc eDUyIgorCQkJICAiXHhmNFx4ZjdceDNlXHhlZFx4YjJceGUyXHhhY1x4MmEiCisJCQkgICJceDc1 XHhmYVx4NjNceDI5XHg3YVx4MjhceDk3XHgyYiIKKwkJCSAgIlx4ZGJceGQyXHhhNFx4ZWZceDVh XHg5Mlx4MGFceGYwIgorCQkJICAiXHhiNVx4ODNceDYwXHg0Y1x4MTRceDIwXHg2OFx4MTkiCisJ CQkgICJceDg5XHhlZVx4YzZceDViXHhlOVx4NjJceDU4XHg2MyIKKwkJCSAgIlx4NDFceDNlXHhj YVx4YTRceDViXHhkYlx4NDlceDliIgorCQkJICAiXHhjMFx4MzJceDEwXHgyNFx4MTlceGMyXHhi MVx4MzYiCisJCQkgICJceDdkXHgwNFx4ZWNceGMyXHgxYVx4ZmRceDc0XHhlNSIKKwkJCSAgIlx4 MjBceGU1XHgyY1x4MGJceDlkXHg3MFx4OGJceDFhIgorCQkJICAiXHhiNVx4YWZceDU3XHhhZFx4 ODhceDhjXHhlOFx4NTEiCisJCQkgICJceDg3XHgwZVx4Y2FceDExXHhmZVx4OTNceDE3XHg2YiIK KwkJCSAgIlx4YTNceDAzXHg3Mlx4NjZceDVlXHg3M1x4MmZceDE1IgorCQkJICAiXHhmZFx4ZDNc eGJiXHgxNlx4NDRceDU2XHg3M1x4NTUiCisJCQkgICJceDBlXHhmYlx4ZmFceDcxXHg0ZVx4MjFc eDQwXHhlNCIKKwkJCSAgIlx4YWNceDc3XHgwYVx4OGFceDJhXHg2Mlx4ZDZceGNjIgorCQkJICAi XHgzMFx4MTFceDc1XHhiYlx4OWNceDdmXHg3MFx4MzEiCisJCQkgICJceDZkXHhiY1x4OTlceDMz XHhlNlx4MDFceGZiXHhiNCIKKwkJCSAgIlx4ZDZceDViXHg5M1x4YWZceDdlXHhiNVx4NjBceDEx IgorCQkJICAiXHg2Y1x4OTFceGE0XHhkNFx4YTBceGViXHg5Ylx4YTIiCisJCQkgICJceDMzXHg2 Nlx4NjhceDZiXHhiOFx4ZTRceDRmXHhiNiIKKwkJCSAgIlx4MjRceDg5XHgzZVx4YjdceGRjXHhl Zlx4NmNceDZmIgorCQkJICAiXHg4MFx4OGVceDFkXHhhMFx4YmVceGJlXHg1MVx4NDkiCisJCQkg ICJceGQ3XHg2M1x4NjJceDcxXHgzN1x4OWVceDJkXHg3ZiIKKwkJCSAgIlx4YTZceDhmXHhiOFx4 ZWVceDljXHg2NFx4NzNceGQ0IgorCQkJICAiXHhkM1x4ZTJceDNlXHg0Mlx4ODRceDMxXHhiYlx4 ODMiCisJCQkgICJceDE5XHgxNVx4ZGRceGRkXHg1Nlx4MDRceDIyXHg0OCIKKwkJCSAgIlx4ZDFc eGIyXHgwZlx4NjVceDJmXHg5Mlx4NTZceDUyIgorCQkJICAiXHhiNlx4OTZceDI1XHg5M1x4MmJc eGYxXHg4Nlx4OWYiCisJCQkgICJceDMwXHg3NVx4MjNceGFiXHg0OFx4OGVceDZjXHg3MSIKKwkJ CSAgIlx4MWFceDQ2XHg2NVx4ZTFceDNiXHg4ZFx4MDlceGZiIgorCQkJICAiXHhiYVx4OWFceGI2 XHgwOFx4ZGNceGQ2XHgzZVx4NTQiCisJCQkgICJceDc0XHhlN1x4ZDJceGU3XHg2Ylx4ZWJceDAx XHg0NiIKKwkJCSAgIlx4NmJceGM5XHg2OVx4YzZceGFhXHgzZVx4ZDVceGUyIgorCQkJICAiXHhk OVx4NDVceDM2XHgyZVx4ZjBceDQ2XHgyZlx4NmYiCisJCQkgICJceGNiXHgyYlx4YjdceGYwXHhh Zlx4MGFceGU3XHgyMiIKKwkJCSAgIlx4YzdceDE1XHg4ZFx4N2ZceDUyXHg2M1x4NTBceDg4Igor CQkJICAiXHg0OVx4YmVceDUyXHhlN1x4MjBceGY3XHg2NVx4NzIiCisJCQkgICJceDMyXHhjZVx4 NTBceDQ0XHgxY1x4OGJceGUwXHgzNCIKKwkJCSAgIlx4OGNceDg4XHgwZFx4MmNceDdmXHhkZVx4 ZjlceGZkIgorCQkJICAiXHhhZlx4MTFceDAzXHgzMVx4ZjhceDg2XHhiYVx4ZTkiCisJCQkgICJc eGMxXHg2MVx4NjNceGViXHg2NFx4OWZceDZjXHgzNyIKKwkJCSAgIlx4OGVceDIwXHg5M1x4ZGJc eDZkXHgwNVx4ZjNceDNjIgorCQkJICAiXHg4OVx4M2RceGJlXHg4ZFx4M2ZceGVlXHg2ZFx4YTAi CisJCQkgICJceGI0XHg0Ylx4YzJceGU1XHg2Nlx4NmFceGE4XHhjYyIKKwkJCSAgIlx4OGNceDA2 XHhhNlx4ZDJceGNkXHgxNlx4NzNceGFlIgorCQkJICAiXHgyOFx4ZjFceDAzXHgyZFx4MzhceDFh XHgxY1x4NDQiCisJCQkgICJceGIzXHhmN1x4MzVceDVmXHhjOFx4ZDFceGRiXHhmZiIKKwkJCSAg Ilx4M2VceGM2XHg2NVx4MTlceDA2XHhmY1x4OTRceDgwIgorCQkJICAiXHg0Zlx4ZjVceGVhXHgz M1x4MzlceDAyXHg2YVx4NGQiCisJCQkgICJceDBlXHhhNlx4NTdceGU5XHhmNlx4MzhceDMyXHgw YSIKKwkJCSAgIlx4OWZceDk3XHg0Mlx4YjRceDIzXHgwZVx4YzhceDlkIgorCQkJICAiXHgzMlx4 ZGNceGI1XHg1YVx4OTRceDhkXHg2NFx4ZDYiCisJCQkgICJceDRkXHhjY1x4NDJceGQwXHhkOFx4 ZjZceDBiXHgwMiIKKwkJCSAgIlx4YjNceDUxXHgzN1x4NDZceDYxXHg1OVx4NThceDAwIgorCQkJ ICAiXHg4Y1x4ODlceGE5XHhiYlx4MDBceDA5XHg0Zlx4MWYiCisJCQkgICJceDU3XHhhMVx4ZjVc eDI1XHgxNFx4NjlceDRkXHgyMiIKKwkJCSAgIlx4NzZceGE3XHg1Zlx4N2VceDEyXHhiNVx4NTFc eDVjIgorCQkJICAiXHgxYVx4YzZceDU0XHg5NVx4N2NceDdjXHhhM1x4NmUiCisJCQkgICJceGJh XHhhY1x4YTNceDJmXHgxM1x4Y2JceDk2XHhkNyIKKwkJCSAgIlx4NGZceDQ1XHhkNFx4YjRceDk3 XHg3M1x4ZTRceDQzIiwKKwkJLmtsZW4JPSAzMiwKKwkJLmxlbgk9IDUxMiwKKwl9LAorfTsKKwog I2VuZGlmCS8qIF9DUllQVE9fVEVTVE1HUl9IICovCi0tIAoyLjM1LjEuMjY1Lmc2OWM4ZDcxNDJm LWdvb2cKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwps aW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJh ZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1hcm0ta2VybmVsCg==