Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tkyPS-008GY3-51 for pgsql-hackers@arkaria.postgresql.org; Thu, 20 Feb 2025 04:43:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tkyPQ-000iv7-5r for pgsql-hackers@arkaria.postgresql.org; Thu, 20 Feb 2025 04:43:36 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tkyPP-000iux-8I for pgsql-hackers@lists.postgresql.org; Thu, 20 Feb 2025 04:43:36 +0000 Received: from mail-io1-xd2e.google.com ([2607:f8b0:4864:20::d2e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tkyPJ-001pz1-2a for pgsql-hackers@lists.postgresql.org; Thu, 20 Feb 2025 04:43:34 +0000 Received: by mail-io1-xd2e.google.com with SMTP id ca18e2360f4ac-855183fdcafso44726139f.1 for ; Wed, 19 Feb 2025 20:43:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740026609; x=1740631409; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=cWyf2EWR/Amg0i/mQsx9YGulaCFnZetjneR9/JN6LRI=; b=F53NEcwbvjnluhLhxoAaS1DF37+T+3+KdV1vl+GbJNRja/RxnMOB8KXpdmMuiPzCcb 7OBvh0zd+p1VSnDCHWXLcJjDSNsKecz4rKdGD5/OOfWzY+S/PkFyZZgbrZwq2Qb8mDYh zmcMH/YCH1K2QsNKY7nn7doq9kraBTysTuzm1Lx7nb64jBmCFUVzNyN9mQGpKLT28NSe EvTqpuAcfG9L425vrPAYS2w8een+h6v2ORcc3DtGzo31XFBPVYo1FugaOC43pv1/0ubX if/0SAqzgWGbCYZgCqmxXUFC4p9LcG1sKdR1xMXBePcce1zxzSHTSWcrqsxybSeGlqIc UH5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740026609; x=1740631409; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=cWyf2EWR/Amg0i/mQsx9YGulaCFnZetjneR9/JN6LRI=; b=A5C22KyIUE0QOrdXIORzO5i90nP8Xd2aW98ur29IdSi3jOurH6PEtANMNjsuqSxnys BQZUS4jPtKoRawes8UQR9r8jPgQkk7d6CNMWukLg9mskOK+Qak/bp0E+Ntt8VDnE+sU3 bMDzJzTVqroSJ1Ly9+1MzqpoB+aoJTDxHRqlVoRoSGj+2LyG4EBeH3zmZnsTIIME90zY 6ACzruBnXOS+hSvDo3GWo+WaSLahiyouRiyvT0CrPxtitAJSiwb0NCDLkkCYMnjdZB2a FNkIXciNbHP7cjLaWtLF8YurTajxrw9inT2LUpZRIoBIAgUJMDQCGBj6O19n62s3/aTo 8Eeg== X-Forwarded-Encrypted: i=1; AJvYcCUodfeCts7nPW0qG6ZokdjPM5XnUv8d0RQu/lMuOAjqIrCUEpD3SJ3kwGx+rehCXKH1mUBqqQ1zuvvkJwsX@lists.postgresql.org X-Gm-Message-State: AOJu0Yw8qDrGUuGLeN3LyneqMMEEneWP5KisDpkcD/5BzKCPH47kB+sk C8HCe6oZM/TKZBkDCBpOtr4qIw2OkF9CgO+9N5xdbdCgEIr5ckEcGyPEhOEWuiiM1PkRxgD728O YYHpVaRAyPVcLv3u6Weuece5W8j8= X-Gm-Gg: ASbGncsqnF4U07WZgYyulGtDd4+g5LzBO3XcuAEiZSQSfcywkF+9QqmoFxJwd9eipnv xIToUuxX57f1Fuej3vv7YtXGYST6yl738e8rdjXhijND8a8cOBhXS8m01PBKssJaKLa34PZkj X-Google-Smtp-Source: AGHT+IFz3wU4u9LttFdrbFE03pXm8nxxTYQrRX0/qqHXC6gvBiFmlkE941ASeWdETvzhCUod5S74mxpx85zPAKeFYew= X-Received: by 2002:a05:6e02:3786:b0:3cf:ba90:6ad9 with SMTP id e9e14a558f8ab-3d2c01ed3a7mr16824875ab.9.1740026608925; Wed, 19 Feb 2025 20:43:28 -0800 (PST) MIME-Version: 1.0 References: <4630636f-7720-4ce4-ab1c-253b390e5174@vondra.me> In-Reply-To: From: Corey Huinker Date: Wed, 19 Feb 2025 23:43:16 -0500 X-Gm-Features: AWEUYZmruSX2zI1JXtcHk3WVL0Sh4I-qKYyAdXfn6FQ0wU4yPld8b_RU1yral3E Message-ID: Subject: Re: Extended Statistics set/restore/clear functions. To: jian he Cc: Tomas Vondra , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000ece857062e8b83c2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ece857062e8b83c2 Content-Type: multipart/alternative; boundary="000000000000ece856062e8b83c0" --000000000000ece856062e8b83c0 Content-Type: text/plain; charset="UTF-8" > > select '{"1, 0B100101":"NaN"}'::pg_ndistinct; >> pg_ndistinct >> ------------------------ >> {"1, 37": -2147483648} >> (1 row) >> > > I think my initial reaction is to just refuse those special values, but > I'll look into the parsing code to see what can be done. > I noticed that the output function for pg_ndistinct casts that value to an integer before formatting it %d, so it's being treated as an integer even if it is not stored as one. After some consultation with Tomas, it made the most sense to just replicate this on the input side as well, and that is addressed in the patches below. I've updated and rebased the patches. The existing pg_ndistinct and pg_dependences formats were kept as-is. The formats are clumsy, more processing-friendly formats would be easier, but the need for such processing is minimal bordering on theoretical, so there is little impact in keeping the historical format. There are now checks to ensure that the pg_ndistinct or pg_dependencies value assigned to an extended statistics object actually makes sense for that object. What this amounts to is checking that for every attnum cited, the positive attnums are also ones found the in the stxkeys of the pg_statistic_ext tuple, and the negative attnums correspond do not exceed the number of expressions in the attnum. In other words, if the stats object has no expressions in it, then no negative numbers will be accepted, if it has 2 expressions than any value -3 or lower will be rejected, etc. All patches rebased to 71f17823ba010296da9946bd906bb8bcad6325bc. --000000000000ece856062e8b83c0 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
select '{&q= uot;1, 0B100101":"NaN"}'::pg_ndistinct;
=C2=A0 =C2=A0 =C2=A0 pg_ndistinct
------------------------
=C2=A0{"1, 37": -2147483648}
(1 row)

I think my initial reaction is = to just refuse those special values, but I'll look into the parsing cod= e to see what can be done.

I noticed that the output function for pg_ndistinct casts that value = to an integer before formatting it %d, so it's being treated as an inte= ger even if it is not stored as one. After=C2=A0some consultation with Toma= s, it made the most sense to just replicate this on the input side as well,= and that is addressed in the patches below.

I'= ;ve updated and rebased the patches.

The existing = pg_ndistinct and pg_dependences formats were kept as-is. The formats are cl= umsy, more processing-friendly formats would be easier, but the need for su= ch processing is minimal bordering on theoretical, so there is little impac= t in keeping the historical format.

There are now checks to ensure t= hat the pg_ndistinct or pg_dependencies value assigned to an extended stati= stics object actually makes sense for that object. What this amounts to is = checking that for every attnum cited, the positive attnums are also ones fo= und the in the stxkeys=C2=A0of the pg_statistic_ext tuple, and the negative= attnums correspond do not exceed the number of expressions in the attnum. = In other words, if the stats object has no expressions in it, then no negat= ive numbers will be accepted, if it has 2 expressions than any value -3 or = lower will be rejected, etc.

All patches rebased to=C2=A071f17823ba0= 10296da9946bd906bb8bcad6325bc.
--000000000000ece856062e8b83c0-- --000000000000ece857062e8b83c2 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-Add-working-input-function-for-pg_ndistinct.patch" Content-Disposition: attachment; filename="v3-0001-Add-working-input-function-for-pg_ndistinct.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7cujf2f0 RnJvbSA2MGZlN2MyNTY5Mzk3NjY3NmRjMDE5ZWUzODc4ZDJkMWE5M2YzYzc1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogVHVlLCAxNyBEZWMgMjAyNCAwMzozMDo1NSAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djMgMS80XSBBZGQgd29ya2luZyBpbnB1dCBmdW5jdGlvbiBmb3IgcGdfbmRpc3RpbmN0LgoKVGhp cyBpcyBuZWVkZWQgdG8gaW1wb3J0IGV4dGVuZGVkIHN0YXRpc3RpY3MuCi0tLQogLi4uL3N0YXRp c3RpY3MvZXh0ZW5kZWRfc3RhdHNfaW50ZXJuYWwuaCAgICAgIHwgICA4ICsKIHNyYy9iYWNrZW5k L3N0YXRpc3RpY3MvbXZkaXN0aW5jdC5jICAgICAgICAgICB8IDM1OSArKysrKysrKysrKysrKysr Ky0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dCAgICAgICB8ICAgNyAr CiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3FsICAgICAgICAgICAgfCAgIDMgKwog NCBmaWxlcyBjaGFuZ2VkLCAzNzEgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzX2ludGVybmFsLmgg Yi9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzX2ludGVybmFsLmgKaW5kZXgg ZWZjYjdkYzM1NDYuLjM5NjkxNWE4YTk3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdGF0aXN0 aWNzL2V4dGVuZGVkX3N0YXRzX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RhdGlzdGlj cy9leHRlbmRlZF9zdGF0c19pbnRlcm5hbC5oCkBAIC0xMjcsNCArMTI3LDEyIEBAIGV4dGVybiBT ZWxlY3Rpdml0eSBtY3ZfY2xhdXNlX3NlbGVjdGl2aXR5X29yKFBsYW5uZXJJbmZvICpyb290LAog CQkJCQkJCQkJCQkgU2VsZWN0aXZpdHkgKm92ZXJsYXBfYmFzZXNlbCwKIAkJCQkJCQkJCQkJIFNl bGVjdGl2aXR5ICp0b3RhbHNlbCk7CiAKK2V4dGVybiBEYXR1bSBpbXBvcnRfbWN2bGlzdChIZWFw VHVwbGUgdHVwLCBpbnQgZWxldmVsLCBpbnQgbnVtYXR0cnMsCisJCQkJCQkJT2lkICphdHR0eXBp ZHMsIGludDMyICphdHR0eXBtb2RzLCBPaWQgKmF0dHR5cGNvbGxzLAorCQkJCQkJCWludCBuaXRl bXMsIERhdHVtICptY3ZfZWxlbXMsIGJvb2wgKm1jdl9udWxscywKKwkJCQkJCQlib29sICptY3Zf ZWxlbV9udWxscywgZmxvYXQ4ICpmcmVxcywgZmxvYXQ4ICpiYXNlX2ZyZXFzKTsKK2V4dGVybiBi b29sIHBnX25kaXN0aW5jdF92YWxpZGF0ZV9pdGVtcyhNVk5EaXN0aW5jdCAqbmRpc3RpbmN0LCBp bnQydmVjdG9yICpzdHhrZXlzLAorCQkJCQkJCQkJCWludCBudW1leHBycywgaW50IGVsZXZlbCk7 CitleHRlcm4gdm9pZCBmcmVlX3BnX25kaXN0aW5jdChNVk5EaXN0aW5jdCAqbmRpc3RpbmN0KTsK KwogI2VuZGlmCQkJCQkJCS8qIEVYVEVOREVEX1NUQVRTX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbXZkaXN0aW5jdC5jIGIvc3JjL2JhY2tlbmQvc3Rh dGlzdGljcy9tdmRpc3RpbmN0LmMKaW5kZXggN2U3YTYzNDA1YzguLmU5YzAyYWFhNjNlIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL212ZGlzdGluY3QuYworKysgYi9zcmMvYmFj a2VuZC9zdGF0aXN0aWNzL212ZGlzdGluY3QuYwpAQCAtMjcsMTAgKzI3LDE5IEBACiAKICNpbmNs dWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19leHQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N0 YXRpc3RpY19leHRfZGF0YS5oIgorI2luY2x1ZGUgImNvbW1vbi9pbnQuaCIKKyNpbmNsdWRlICJj b21tb24vanNvbmFwaS5oIgorI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJsaWIvc3RyaW5n aW5mby5oIgorI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCisjaW5jbHVkZSAibm9kZXMvbWlzY25v ZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgogI2luY2x1ZGUgInN0YXRpc3RpY3Mv ZXh0ZW5kZWRfc3RhdHNfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJzdGF0aXN0aWNzL3N0YXRpc3Rp Y3MuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2Zsb2F0 LmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgorI2luY2x1ZGUgInV0aWxzL3BhbGxv Yy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdHlwY2Fj aGUuaCIKICNpbmNsdWRlICJ2YXJhdHQuaCIKQEAgLTMyOCwyMyArMzM3LDM2MSBAQCBzdGF0ZXh0 X25kaXN0aW5jdF9kZXNlcmlhbGl6ZShieXRlYSAqZGF0YSkKIAlyZXR1cm4gbmRpc3RpbmN0Owog fQogCit0eXBlZGVmIHN0cnVjdAoreworCWNvbnN0IGNoYXIgKnN0cjsKKwlib29sCQlmb3VuZF9v bmx5X29iamVjdDsKKwlMaXN0CSAgICpkaXN0aW5jdF9pdGVtczsKKwlOb2RlCSAgICplc2NvbnRl eHQ7CisKKwlNVk5EaXN0aW5jdEl0ZW0gKmN1cnJlbnRfaXRlbTsKK30JCQluZGlzdGluY3RQYXJz ZVN0YXRlOworCisvKgorICogSW52b2tlZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBvYmplY3QgaW4g dGhlIEpTT04gZG9jdW1lbnQuCisgKiBUaGUgZW50aXJlIEpTT04gZG9jdW1lbnQgc2hvdWxkIGJl IG9uZSBvYmplY3Qgd2l0aCBubyBzdWItb2JqZWN0cy4KKyAqCisgKiBJZiB3ZSdyZSBhbnl3aGVy ZSBlbHNlIGluIHRoZSBkb2N1bWVudCwgaXQncyBhbiBlcnJvci4KKyAqLworc3RhdGljIEpzb25Q YXJzZUVycm9yVHlwZQorbmRpc3RpbmN0X29iamVjdF9zdGFydCh2b2lkICpzdGF0ZSkKK3sKKwlu ZGlzdGluY3RQYXJzZVN0YXRlICpwYXJzZSA9IHN0YXRlOworCisJaWYgKHBhcnNlLT5mb3VuZF9v bmx5X29iamVjdCA9PSB0cnVlKQorCXsKKwkJZXJldHVybihwYXJzZS0+ZXNjb250ZXh0LCAoRGF0 dW0pIDAsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04p LAorCQkJCSBlcnJtc2coIm1hbGZvcm1lZCBwZ19uZGlzdGluY3Q6IFwiJXNcIiIsIHBhcnNlLT5z dHIpLAorCQkJCSBlcnJkZXRhaWwoIk11c3QgYmVnaW4gd2l0aCBcIntcIiIpKSk7CisJCXJldHVy biBKU09OX1NFTV9BQ1RJT05fRkFJTEVEOworCX0KKworCXBhcnNlLT5mb3VuZF9vbmx5X29iamVj dCA9IHRydWU7CisJcmV0dXJuIEpTT05fU1VDQ0VTUzsKK30KKworLyoKKyAqIG5kc2l0aW5jdCBp bnB1dCBmb3JtYXQgZG9lcyBub3QgaGF2ZSBhcnJheXMsIHNvIGFueSBhcnJheSBlbGVtZW50cyBl bmNvdW50ZXJlZAorICogYXJlIGFuIGVycm9yLgorICovCitzdGF0aWMgSnNvblBhcnNlRXJyb3JU eXBlCituZGlzdGluY3RfYXJyYXlfc3RhcnQodm9pZCAqc3RhdGUpCit7CisJbmRpc3RpbmN0UGFy c2VTdGF0ZSAqcGFyc2UgPSBzdGF0ZTsKKworCWVyZXR1cm4ocGFyc2UtPmVzY29udGV4dCwgKERh dHVtKSAwLAorCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04p LAorCQkJIGVycm1zZygibWFsZm9ybWVkIHBnX25kaXN0aW5jdDogXCIlc1wiIiwgcGFyc2UtPnN0 ciksCisJCQkgZXJyZGV0YWlsKCJBbGwgbmRpc3RpbmN0IGNvdW50IHZhbHVlcyBhcmUgc2NhbGFy IGRvdWJsZXMuIikpKTsKKwlyZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsKK30KKworc3Rh dGljIGludAorYXR0bnVtX2NvbXBhcmUoY29uc3Qgdm9pZCAqYXB0ciwgY29uc3Qgdm9pZCAqYnB0 cikKK3sKKwlBdHRyTnVtYmVyCWEgPSAqKGNvbnN0IEF0dHJOdW1iZXIgKikgYXB0cjsKKwlBdHRy TnVtYmVyCWIgPSAqKGNvbnN0IEF0dHJOdW1iZXIgKikgYnB0cjsKKworCXJldHVybiBwZ19jbXBf czE2KGEsYik7Cit9CisKKy8qCisgKiBUaGUgb2JqZWN0IGtleXMgYXJlIHRoZW1zZWx2ZXMgY29t bWEtc2VwYXJhdGVkIGxpc3RzIG9mIGF0dG51bXMKKyAqIHdpdGggbmVnYXRpdmUgYXR0bnVtcyBy ZXByZXNlbnRpbmcgb25lIG9mIHRoZSBleHByZXNzaW9ucyBkZWZpbmVkCisgKiBpbiB0aGUgZXh0 ZW5lZCBzdGF0aXN0aWNzIG9iamVjdC4KKyAqLworc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZQor bmRpc3RpbmN0X29iamVjdF9maWVsZF9zdGFydCh2b2lkICpzdGF0ZSwgY2hhciAqZm5hbWUsIGJv b2wgaXNudWxsKQoreworCW5kaXN0aW5jdFBhcnNlU3RhdGUgKnBhcnNlID0gc3RhdGU7CisJY2hh cgkgICAqdG9rZW47CisJY2hhcgkgICAqc2F2ZXB0cjsKKwljb25zdCBjaGFyICpkZWxpbSA9ICIs ICI7CisJY2hhcgkgICAqc2NyYXRjaDsKKwlMaXN0CSAgICphdHRudW1fbGlzdCA9IE5JTDsKKwlp bnQJCQluYXR0cyA9IDA7CisJTVZORGlzdGluY3RJdGVtICppdGVtOworCUF0dHJOdW1iZXIgKmF0 dHJzb3J0OworCisJaWYgKGlzbnVsbCB8fCBmbmFtZSA9PSBOVUxMKQorCXsKKwkJZXJldHVybihw YXJzZS0+ZXNjb250ZXh0LCAoRGF0dW0pIDAsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1RFWFRfUkVQUkVTRU5UQVRJT04pLAorCQkJCSBlcnJtc2coIm1hbGZvcm1lZCBwZ19uZGlzdGlu Y3Q6IFwiJXNcIiIsIHBhcnNlLT5zdHIpLAorCQkJCSBlcnJkZXRhaWwoIkFsbCBuZGlzdGluY3Qg YXR0bnVtIGxpc3RzIG11c3QgYmUgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBhdHRudW1zLiIp KSk7CisKKwkJcmV0dXJuIEpTT05fU0VNX0FDVElPTl9GQUlMRUQ7CisJfQorCisJc2NyYXRjaCA9 IHBzdHJkdXAoZm5hbWUpOworCisJdG9rZW4gPSBzdHJ0b2tfcihzY3JhdGNoLCBkZWxpbSwgJnNh dmVwdHIpOworCisJd2hpbGUgKHRva2VuICE9IE5VTEwpCisJeworCQlhdHRudW1fbGlzdCA9IGxh cHBlbmQoYXR0bnVtX2xpc3QsICh2b2lkICopIHRva2VuKTsKKworCQl0b2tlbiA9IHN0cnRva19y KE5VTEwsIGRlbGltLCAmc2F2ZXB0cik7CisJfQorCW5hdHRzID0gYXR0bnVtX2xpc3QtPmxlbmd0 aDsKKworCS8qCisJICogV2UgbmVlZCBhdCBsZWFzdCAyIGF0dG51bXMgZm9yIGEgbmRpc3RpbmN0 IGl0ZW0sIGFueXRoaW5nIGxlc3MgaXMKKwkgKiBtYWxmb3JtZWQuCisJICovCisJaWYgKG5hdHRz IDwgMikKKwl7CisJCWVyZXR1cm4ocGFyc2UtPmVzY29udGV4dCwgKERhdHVtKSAwLAorCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCQkgZXJybXNn KCJtYWxmb3JtZWQgcGdfbmRpc3RpbmN0OiBcIiVzXCIiLCBwYXJzZS0+c3RyKSwKKwkJCQkgZXJy ZGV0YWlsKCJBbGwgbmRpc3RpbmN0IGF0dG51bSBsaXN0cyBtdXN0IGJlIGEgY29tbWEgc2VwYXJh dGVkIGxpc3Qgb2YgYXR0bnVtcy4iKSkpOworCisJCXJldHVybiBKU09OX1NFTV9BQ1RJT05fRkFJ TEVEOworCX0KKworCWl0ZW0gPSBwYWxsb2Moc2l6ZW9mKE1WTkRpc3RpbmN0SXRlbSkpOworCWl0 ZW0tPm5hdHRyaWJ1dGVzID0gbmF0dHM7CisJaXRlbS0+YXR0cmlidXRlcyA9IHBhbGxvYzAobmF0 dHMgKiBzaXplb2YoQXR0ck51bWJlcikpOworCWF0dHJzb3J0ID0gcGFsbG9jMChuYXR0cyAqIHNp emVvZihBdHRyTnVtYmVyKSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5hdHRzOyBpKyspCisJ eworCQljaGFyCSAgICpzID0gKGNoYXIgKikgYXR0bnVtX2xpc3QtPmVsZW1lbnRzW2ldLnB0cl92 YWx1ZTsKKworCQlhdHRyc29ydFtpXSA9IHBnX3N0cnRvaW50MTZfc2FmZShzLCBwYXJzZS0+ZXNj b250ZXh0KTsKKwkJaXRlbS0+YXR0cmlidXRlc1tpXSA9IGF0dHJzb3J0W2ldOworCisJCWlmIChT T0ZUX0VSUk9SX09DQ1VSUkVEKHBhcnNlLT5lc2NvbnRleHQpKQorCQkJcmV0dXJuIEpTT05fU0VN X0FDVElPTl9GQUlMRUQ7CisJfQorCisJbGlzdF9mcmVlKGF0dG51bV9saXN0KTsKKwlwZnJlZShz Y3JhdGNoKTsKKworCXFzb3J0KGF0dHJzb3J0LG5hdHRzLHNpemVvZihBdHRyTnVtYmVyKSxhdHRu dW1fY29tcGFyZSk7CisJZm9yIChpbnQgaSA9IDE7IGkgPCBuYXR0czsgaSsrKQorCQlpZiAoYXR0 cnNvcnRbaV0gPT0gYXR0cnNvcnRbaS0xXSkKKwkJeworCQkJZXJldHVybihwYXJzZS0+ZXNjb250 ZXh0LCAoRGF0dW0pIDAsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJF U0VOVEFUSU9OKSwKKwkJCQkJZXJybXNnKCJtYWxmb3JtZWQgcGdfbmRpc3RpbmN0OiBcIiVzXCIi LCBwYXJzZS0+c3RyKSwKKwkJCQkJZXJyZGV0YWlsKCJhdHRudW0gbGlzdCBkdXBsaWNhdGUgdmFs dWUgZm91bmQ6ICVkIiwgYXR0cnNvcnRbaV0pKSk7CisKKwkJCXJldHVybiBKU09OX1NFTV9BQ1RJ T05fRkFJTEVEOworCQl9CisKKwlwZnJlZShhdHRyc29ydCk7CisKKwkvKiBhZGQgbmRpc3RpbmN0 LWxlc3MgTVZORGlzdGluY3RJdGVtIHRvIHRoZSBsaXN0ICovCisJcGFyc2UtPmN1cnJlbnRfaXRl bSA9IGl0ZW07CisJcGFyc2UtPmRpc3RpbmN0X2l0ZW1zID0gbGFwcGVuZChwYXJzZS0+ZGlzdGlu Y3RfaXRlbXMsICh2b2lkICopIGl0ZW0pOworCXJldHVybiBKU09OX1NVQ0NFU1M7Cit9CisKKy8q CisgKiBuZHNpdGluY3QgaW5wdXQgZm9ybWF0IGRvZXMgbm90IGhhdmUgYXJyYXlzLCBzbyBhbnkg YXJyYXkgZWxlbWVudHMgZW5jb3VudGVyZWQKKyAqIGFyZSBhbiBlcnJvci4KKyAqLworc3RhdGlj IEpzb25QYXJzZUVycm9yVHlwZQorbmRpc3RpbmN0X2FycmF5X2VsZW1lbnRfc3RhcnQodm9pZCAq c3RhdGUsIGJvb2wgaXNudWxsKQoreworCW5kaXN0aW5jdFBhcnNlU3RhdGUgKnBhcnNlID0gc3Rh dGU7CisKKwllcmV0dXJuKHBhcnNlLT5lc2NvbnRleHQsIChEYXR1bSkgMCwKKwkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCSBlcnJtc2coIm1hbGZv cm1lZCBwZ19uZGlzdGluY3Q6IFwiJXNcIiIsIHBhcnNlLT5zdHIpLAorCQkJIGVycmRldGFpbCgi Q2Fubm90IGNvbnRhaW4gYXJyYXkgZWxlbWVudHMuIikpKTsKKworCXJldHVybiBKU09OX1NFTV9B Q1RJT05fRkFJTEVEOworfQorCisvKgorICogSGFuZGxlIHNjYWxhciBldmVudHMgZnJvbSB0aGUg bmRpc3RpbmN0IGlucHV0IHBhcnNlci4KKyAqCisgKiBUaGVyZSBpcyBvbmx5IG9uZSBjYXNlIHdo ZXJlIHdlIHdpbGwgZW5jb3VudGVyIGEgc2NhbGFyLCBhbmQgdGhhdCBpcyB0aGUKKyAqIG5kc2l0 aW5jdCB2YWx1ZSBmb3IgdGhlIHByZXZpb3VzIG9iamVjdCBrZXkuCisgKi8KK3N0YXRpYyBKc29u UGFyc2VFcnJvclR5cGUKK25kaXN0aW5jdF9zY2FsYXIodm9pZCAqc3RhdGUsIGNoYXIgKnRva2Vu LCBKc29uVG9rZW5UeXBlIHRva2VudHlwZSkKK3sKKwluZGlzdGluY3RQYXJzZVN0YXRlICpwYXJz ZSA9IHN0YXRlOworCisJLyogaWYgdGhlIGVudGlyZSBqc29uIGlzIGp1c3Qgb25lIHNjYWxhciwg dGhhdCdzIHdyb25nICovCisJaWYgKHBhcnNlLT5mb3VuZF9vbmx5X29iamVjdCAhPSB0cnVlKQor CXsKKwkJZXJldHVybihwYXJzZS0+ZXNjb250ZXh0LCAoRGF0dW0pIDAsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04pLAorCQkJCSBlcnJtc2coIm1hbGZv cm1lZCBwZ19uZGlzdGluY3Q6IFwiJXNcIiIsIHBhcnNlLT5zdHIpLAorCQkJCSBlcnJkZXRhaWwo Ik11c3QgYmVnaW4gd2l0aCBcIntcIiIpKSk7CisKKwkJcmV0dXJuIEpTT05fU0VNX0FDVElPTl9G QUlMRUQ7CisJfQorCisJQXNzZXJ0KHBhcnNlLT5jdXJyZW50X2l0ZW0gIT0gTlVMTCk7CisKKwlw YXJzZS0+Y3VycmVudF9pdGVtLT5uZGlzdGluY3QgPSBmbG9hdDhpbl9pbnRlcm5hbCh0b2tlbiwg TlVMTCwgImRvdWJsZSIsCisJCQkJCQkJCQkJCQkJICAgdG9rZW4sIHBhcnNlLT5lc2NvbnRleHQp OworCisJaWYgKFNPRlRfRVJST1JfT0NDVVJSRUQocGFyc2UtPmVzY29udGV4dCkpCisJCXJldHVy biBKU09OX1NFTV9BQ1RJT05fRkFJTEVEOworCisJLyogbWFyayB1cyBkb25lIHdpdGggdGhpcyBp dGVtICovCisJcGFyc2UtPmN1cnJlbnRfaXRlbSA9IE5VTEw7CisJcmV0dXJuIEpTT05fU1VDQ0VT UzsKK30KKwogLyoKICAqIHBnX25kaXN0aW5jdF9pbgogICoJCWlucHV0IHJvdXRpbmUgZm9yIHR5 cGUgcGdfbmRpc3RpbmN0CiAgKgotICogcGdfbmRpc3RpbmN0IGlzIHJlYWwgZW5vdWdoIHRvIGJl IGEgdGFibGUgY29sdW1uLCBidXQgaXQgaGFzIG5vCi0gKiBvcGVyYXRpb25zIG9mIGl0cyBvd24s IGFuZCBkaXNhbGxvd3MgaW5wdXQgKGp1c3QgbGlrZSBwZ19ub2RlX3RyZWUpLgorICogZXhhbXBs ZSBpbnB1dDogeyI2LCAtMSI6IDE0LCAiNiwgLTIiOiA5MTQzLCAiLTEsIC0yIjogMTM0NTQsICI2 LCAtMSwgLTIiOiAxNDU0OX0KKyAqCisgKiBUaGlzIGltcG9ydCBmb3JtYXQgaXMgY2xlYXJseSBh IHNwZWNpZmljIHN1YnNldCBvZiBKU09OLCB0aGVyZWZvcmUgaXQgbWFrZXMKKyAqIHNlbnNlIHRv IGxldmVyYWdlIHRob3NlIHBhcnNpbmcgdXRpbGl0aWVzLCBhbmQgZnVydGhlciB2YWxpZGF0ZSBp dCBmcm9tIHRoZXJlLgogICovCiBEYXR1bQogcGdfbmRpc3RpbmN0X2luKFBHX0ZVTkNUSU9OX0FS R1MpCiB7Ci0JZXJlcG9ydChFUlJPUiwKLQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1Rf U1VQUE9SVEVEKSwKLQkJCSBlcnJtc2coImNhbm5vdCBhY2NlcHQgYSB2YWx1ZSBvZiB0eXBlICVz IiwgInBnX25kaXN0aW5jdCIpKSk7CisJY2hhcgkgICAqc3RyID0gUEdfR0VUQVJHX0NTVFJJTkco MCk7CiAKLQlQR19SRVRVUk5fVk9JRCgpOwkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwlu ZGlzdGluY3RQYXJzZVN0YXRlIHBhcnNlX3N0YXRlOworCUpzb25QYXJzZUVycm9yVHlwZSByZXN1 bHQ7CisJSnNvbkxleENvbnRleHQgKmxleDsKKwlKc29uU2VtQWN0aW9uIHNlbV9hY3Rpb247CisK KwkvKiBpbml0aWFsaXplIHNlbWFudGljIHN0YXRlICovCisJcGFyc2Vfc3RhdGUuc3RyID0gc3Ry OworCXBhcnNlX3N0YXRlLmZvdW5kX29ubHlfb2JqZWN0ID0gZmFsc2U7CisJcGFyc2Vfc3RhdGUu ZGlzdGluY3RfaXRlbXMgPSBOSUw7CisJcGFyc2Vfc3RhdGUuZXNjb250ZXh0ID0gZmNpbmZvLT5j b250ZXh0OworCXBhcnNlX3N0YXRlLmN1cnJlbnRfaXRlbSA9IE5VTEw7CisKKwkvKiBzZXQgY2Fs bGJhY2tzICovCisJc2VtX2FjdGlvbi5zZW1zdGF0ZSA9ICh2b2lkICopICZwYXJzZV9zdGF0ZTsK KwlzZW1fYWN0aW9uLm9iamVjdF9zdGFydCA9IG5kaXN0aW5jdF9vYmplY3Rfc3RhcnQ7CisJc2Vt X2FjdGlvbi5vYmplY3RfZW5kID0gTlVMTDsKKwlzZW1fYWN0aW9uLmFycmF5X3N0YXJ0ID0gbmRp c3RpbmN0X2FycmF5X3N0YXJ0OworCXNlbV9hY3Rpb24uYXJyYXlfZW5kID0gTlVMTDsKKwlzZW1f YWN0aW9uLm9iamVjdF9maWVsZF9zdGFydCA9IG5kaXN0aW5jdF9vYmplY3RfZmllbGRfc3RhcnQ7 CisJc2VtX2FjdGlvbi5vYmplY3RfZmllbGRfZW5kID0gTlVMTDsKKwlzZW1fYWN0aW9uLmFycmF5 X2VsZW1lbnRfc3RhcnQgPSBuZGlzdGluY3RfYXJyYXlfZWxlbWVudF9zdGFydDsKKwlzZW1fYWN0 aW9uLmFycmF5X2VsZW1lbnRfZW5kID0gTlVMTDsKKwlzZW1fYWN0aW9uLnNjYWxhciA9IG5kaXN0 aW5jdF9zY2FsYXI7CisKKwlsZXggPSBtYWtlSnNvbkxleENvbnRleHRDc3RyaW5nTGVuKE5VTEws IHN0ciwgc3RybGVuKHN0ciksCisJCQkJCQkJCQkgICBQR19VVEY4LCB0cnVlKTsKKwlyZXN1bHQg PSBwZ19wYXJzZV9qc29uKGxleCwgJnNlbV9hY3Rpb24pOworCWZyZWVKc29uTGV4Q29udGV4dChs ZXgpOworCWlmIChyZXN1bHQgPT0gSlNPTl9TVUNDRVNTKQorCXsKKwkJTVZORGlzdGluY3QgKm5k aXN0aW5jdDsKKwkJaW50CQkJbml0ZW1zID0gcGFyc2Vfc3RhdGUuZGlzdGluY3RfaXRlbXMtPmxl bmd0aDsKKwkJYnl0ZWEJICAgKmJ5dGVzOworCisJCW5kaXN0aW5jdCA9IHBhbGxvYyhvZmZzZXRv ZihNVk5EaXN0aW5jdCwgaXRlbXMpICsKKwkJCQkJCSAgIG5pdGVtcyAqIHNpemVvZihNVk5EaXN0 aW5jdEl0ZW0pKTsKKworCQluZGlzdGluY3QtPm1hZ2ljID0gU1RBVFNfTkRJU1RJTkNUX01BR0lD OworCQluZGlzdGluY3QtPnR5cGUgPSBTVEFUU19ORElTVElOQ1RfVFlQRV9CQVNJQzsKKwkJbmRp c3RpbmN0LT5uaXRlbXMgPSBuaXRlbXM7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuaXRlbXM7 IGkrKykKKwkJeworCQkJTVZORGlzdGluY3RJdGVtICppdGVtID0gcGFyc2Vfc3RhdGUuZGlzdGlu Y3RfaXRlbXMtPmVsZW1lbnRzW2ldLnB0cl92YWx1ZTsKKworCQkJbmRpc3RpbmN0LT5pdGVtc1tp XS5uZGlzdGluY3QgPSBpdGVtLT5uZGlzdGluY3Q7CisJCQluZGlzdGluY3QtPml0ZW1zW2ldLm5h dHRyaWJ1dGVzID0gaXRlbS0+bmF0dHJpYnV0ZXM7CisJCQluZGlzdGluY3QtPml0ZW1zW2ldLmF0 dHJpYnV0ZXMgPSBpdGVtLT5hdHRyaWJ1dGVzOworCisJCQkvKgorCQkJICogZnJlZSB0aGUgTVZO RGlzdGluY3RJdGVtLCBidXQgbm90IHRoZSBhdHRyaWJ1dGVzIHdlJ3JlIHN0aWxsCisJCQkgKiB1 c2luZworCQkJICovCisJCQlwZnJlZShpdGVtKTsKKwkJfQorCQlieXRlcyA9IHN0YXRleHRfbmRp c3RpbmN0X3NlcmlhbGl6ZShuZGlzdGluY3QpOworCisJCWxpc3RfZnJlZShwYXJzZV9zdGF0ZS5k aXN0aW5jdF9pdGVtcyk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbml0ZW1zOyBpKyspCisJCQlw ZnJlZShuZGlzdGluY3QtPml0ZW1zW2ldLmF0dHJpYnV0ZXMpOworCQlwZnJlZShuZGlzdGluY3Qp OworCisJCVBHX1JFVFVSTl9CWVRFQV9QKGJ5dGVzKTsKKwl9CisJZWxzZSBpZiAocmVzdWx0ID09 IEpTT05fU0VNX0FDVElPTl9GQUlMRUQpCisJCVBHX1JFVFVSTl9OVUxMKCk7CQkvKiBlc2NvbnRl eHQgYWxyZWFkeSBzZXQgKi8KKworCS8qIEFueXRoaW5nIGVsc2UgaXMgYSBnZW5lcmljIEpTT04g cGFyc2UgZXJyb3IgKi8KKwllcmV0dXJuKHBhcnNlX3N0YXRlLmVzY29udGV4dCwgKERhdHVtKSAw LAorCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04pLAorCQkJ IGVycm1zZygibWFsZm9ybWVkIHBnX25kaXN0aW5jdDogXCIlc1wiIiwgc3RyKSwKKwkJCSBlcnJk ZXRhaWwoIk11c3QgYmUgdmFsaWQgSlNPTi4iKSkpOworCVBHX1JFVFVSTl9OVUxMKCk7CiB9CiAK Ky8qCisgKiBGcmVlIGFsbG9jYXRpb25zIG9mIGFuIE1WTkRpc3RpbmN0CisgKi8KK3ZvaWQKK2Zy ZWVfcGdfbmRpc3RpbmN0KE1WTkRpc3RpbmN0ICpuZGlzdGluY3QpCit7CisJZm9yIChpbnQgaSA9 IDA7IGkgPCBuZGlzdGluY3QtPm5pdGVtczsgaSsrKQorCQlwZnJlZShuZGlzdGluY3QtPml0ZW1z W2ldLmF0dHJpYnV0ZXMpOworCisJcGZyZWUobmRpc3RpbmN0KTsKK30KKworLyoKKyAqIFZhbGlk YXRlIGFuIE1WTkRpc3RpbmN0IGFnYWluc3QgdGhlIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0 IGRlZmluaXRpb24uCisgKgorICogRXZlcnkgTVZORGlzdGluY3RJdGVtIG11c3QgYmUgY2hlY2tl ZCB0byBlbnN1cmUgdGhhdCB0aGUgYXR0bnVtcyBpbiB0aGUKKyAqIGF0dHJpYnV0ZXMgbGlzdCBj b3JyZXNwb25kIHRvIGF0dG51bXMvZXhwcmVzc2lvbnMgZGVmaW5lZCBieSB0aGUKKyAqIGV4dGVu ZGVkIHN0YXRpc3RpY3Mgb2JqZWN0LgorICoKKyAqIFBvc2l0aXZlIGF0dG51bXMgYXJlIGF0dHJp YnV0ZXMgd2hpY2ggbXVzdCBiZSBmb3VuZCBpbiB0aGUgc3R4a2V5cywKKyAqIHdoaWxlIG5lZ2F0 aXZlIGF0dG51bXMgY29ycmVzcG9uZCB0byBhbiBleHByIG51bWJlciwgc28gdGhlIGF0dG51bSAK KyAqIGNhbid0IGJlIGJlbG93ICgwIC0gbnVtZXhwcnMpLgorICovCitib29sCitwZ19uZGlzdGlu Y3RfdmFsaWRhdGVfaXRlbXMoTVZORGlzdGluY3QgKm5kaXN0aW5jdCwgaW50MnZlY3RvciAqc3R4 a2V5cywgaW50IG51bWV4cHJzLCBpbnQgZWxldmVsKQoreworCWludAkJYXR0bnVtX2V4cHJfbG93 Ym91bmQgPSAwIC0gbnVtZXhwcnM7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5kaXN0aW5jdC0+ bml0ZW1zOyBpKyspCisJeworCQlNVk5EaXN0aW5jdEl0ZW0gaXRlbSA9IG5kaXN0aW5jdC0+aXRl bXNbaV07CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCBpdGVtLm5hdHRyaWJ1dGVzOyBqKyspCisJ CXsKKwkJCUF0dHJOdW1iZXIJYXR0bnVtID0gaXRlbS5hdHRyaWJ1dGVzW2pdOworCQkJYm9vbAkJ b2sgPSBmYWxzZTsKKworCQkJaWYgKGF0dG51bSA+IDApCisJCQl7CisJCQkJZm9yIChpbnQgayA9 IDA7IGsgPCBzdHhrZXlzLT5kaW0xOyBrKyspCisJCQkJCWlmIChhdHRudW0gPT0gc3R4a2V5cy0+ dmFsdWVzW2tdKQorCQkJCQl7CisJCQkJCQlvayA9IHRydWU7CisJCQkJCQlicmVhazsKKwkJCQkJ fQorCQkJfQorCQkJZWxzZSBpZiAoKGF0dG51bSA8IDApICYmIChhdHRudW0gPj0gYXR0bnVtX2V4 cHJfbG93Ym91bmQpKQorCQkJCW9rID0gdHJ1ZTsKKworCQkJaWYgKCFvaykKKwkJCXsKKwkJCQll cmVwb3J0KGVsZXZlbCwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJF U0VOVEFUSU9OKSwKKwkJCQkJCWVycm1zZygicGdfbmRpc3RpbmN0OiBpbnZhbGlkIGF0dG51bSBm b3IgdGhpcyBzdGF0aXN0aWNzIG9iamVjdDogJWQiLCBhdHRudW0pKSk7CisJCQkJcmV0dXJuIGZh bHNlOworCQkJfQorCQl9CisJfQorCXJldHVybiB0cnVlOworfQorCisKIC8qCiAgKiBwZ19uZGlz dGluY3QKICAqCQlvdXRwdXQgcm91dGluZSBmb3IgdHlwZSBwZ19uZGlzdGluY3QKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dAppbmRleCA5MDRkM2U2MjNmNS4uMjAzMzM2Njdl NWYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4dC5vdXQKQEAgLTMzNTgsNiAr MzM1OCwxMyBAQCBTRUxFQ1Qgc3RhdGlzdGljc19uYW1lLCBtb3N0X2NvbW1vbl92YWxzIEZST00g cGdfc3RhdHNfZXh0X2V4cHJzIHgKICBzX2V4cHIgICAgICAgICAgfCB7MX0KICgyIHJvd3MpCiAK Ky0tIG5ldyBpbnB1dCBmdW5jdGlvbnMKK1NFTEVDVCAneyI2LCAtMSI6IDE0LCAiNiwgLTIiOiA5 MTQzLCAiLTEsIC0yIjogMTM0NTQsICI2LCAtMSwgLTIiOiAxNDU0OX0nOjpwZ19uZGlzdGluY3Q7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19uZGlzdGluY3QgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgeyI2LCAtMSI6IDE0LCAiNiwgLTIiOiA5MTQzLCAi LTEsIC0yIjogMTM0NTQsICI2LCAtMSwgLTIiOiAxNDU0OX0KKygxIHJvdykKKwogLS0gVGlkeSB1 cAogRFJPUCBPUEVSQVRPUiA8PDwgKGludCwgaW50KTsKIERST1AgRlVOQ1RJT04gb3BfbGVhayhp bnQsIGludCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3Fs IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfZXh0LnNxbAppbmRleCA4OGIzM2NjYWVmOC4u MzUzOWQ3YjVjZDIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2V4dC5z cWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfZXh0LnNxbApAQCAtMTcwMCw2ICsx NzAwLDkgQEAgU0VMRUNUIHN0YXRpc3RpY3NfbmFtZSwgbW9zdF9jb21tb25fdmFscyBGUk9NIHBn X3N0YXRzX2V4dCB4CiBTRUxFQ1Qgc3RhdGlzdGljc19uYW1lLCBtb3N0X2NvbW1vbl92YWxzIEZS T00gcGdfc3RhdHNfZXh0X2V4cHJzIHgKICAgICBXSEVSRSB0YWJsZW5hbWUgPSAnc3RhdHNfZXh0 X3RibCcgT1JERVIgQlkgUk9XKHguKik7CiAKKy0tIG5ldyBpbnB1dCBmdW5jdGlvbnMKK1NFTEVD VCAneyI2LCAtMSI6IDE0LCAiNiwgLTIiOiA5MTQzLCAiLTEsIC0yIjogMTM0NTQsICI2LCAtMSwg LTIiOiAxNDU0OX0nOjpwZ19uZGlzdGluY3Q7CisKIC0tIFRpZHkgdXAKIERST1AgT1BFUkFUT1Ig PDw8IChpbnQsIGludCk7CiBEUk9QIEZVTkNUSU9OIG9wX2xlYWsoaW50LCBpbnQpOwoKYmFzZS1j b21taXQ6IDcxZjE3ODIzYmEwMTAyOTZkYTk5NDZiZDkwNmJiOGJjYWQ2MzI1YmMKLS0gCjIuNDgu MQoK --000000000000ece857062e8b83c2 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0002-Add-working-input-function-for-pg_dependencies.patch" Content-Disposition: attachment; filename="v3-0002-Add-working-input-function-for-pg_dependencies.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7cujiym1 RnJvbSA1OWUzZWQ0MmRkNTI4YTE5MDFhZTQyOTA5Mzk4YzZjNmRkODNlNTc4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogVHVlLCAxNyBEZWMgMjAyNCAxOTo0Nzo0MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djMgMi80XSBBZGQgd29ya2luZyBpbnB1dCBmdW5jdGlvbiBmb3IgcGdfZGVwZW5kZW5jaWVzLgoK VGhpcyBpcyBuZWVkZWQgdG8gaW1wb3J0IGV4dGVuZGVkIHN0YXRpc3RpY3MuCi0tLQogc3JjL2Jh Y2tlbmQvc3RhdGlzdGljcy9kZXBlbmRlbmNpZXMuYyAgIHwgMzQ4ICsrKysrKysrKysrKysrKysr KysrKysrLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19leHQub3V0IHwgIDE4ICsr CiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3FsICAgICAgfCAgIDYgKwogMyBmaWxl cyBjaGFuZ2VkLCAzNjIgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9kZXBlbmRlbmNpZXMuYyBiL3NyYy9iYWNrZW5kL3N0 YXRpc3RpY3MvZGVwZW5kZW5jaWVzLmMKaW5kZXggZWIyZmM0MzY2YjQuLmVjMjZhMjQyN2UyIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2RlcGVuZGVuY2llcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3N0YXRpc3RpY3MvZGVwZW5kZW5jaWVzLmMKQEAgLTEzLDE4ICsxMywyNyBAQAog ICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9hdHRudW0uaCIK ICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19z dGF0aXN0aWNfZXh0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWNfZXh0X2RhdGEu aCIKKyNpbmNsdWRlICJjb21tb24vaW50LmgiCisjaW5jbHVkZSAiY29tbW9uL2pzb25hcGkuaCIK KyNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKKyNpbmNsdWRl ICJtYi9wZ193Y2hhci5oIgorI2luY2x1ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgogI2luY2x1ZGUg Im5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCiAjaW5jbHVkZSAi bm9kZXMvcGF0aG5vZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgogI2luY2x1ZGUg Im9wdGltaXplci9jbGF1c2VzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgog I2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKICNpbmNsdWRlICJzdGF0aXN0aWNzL2V4dGVu ZGVkX3N0YXRzX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3RhdGlzdGljcy9zdGF0aXN0aWNzLmgi CisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbG9hdC5oIgog I2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5o IgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgpAQCAtNjQzLDI0ICs2NTIsMzQzIEBAIHN0 YXRleHRfZGVwZW5kZW5jaWVzX2xvYWQoT2lkIG12b2lkLCBib29sIGluaCkKIAlyZXR1cm4gcmVz dWx0OwogfQogCit0eXBlZGVmIHN0cnVjdAoreworCWNvbnN0IGNoYXIgKnN0cjsKKwlib29sCQlm b3VuZF9vbmx5X29iamVjdDsKKwlMaXN0CSAgICpkZXBlbmRlbmN5X2xpc3Q7CisJTm9kZQkgICAq ZXNjb250ZXh0OworCisJTVZEZXBlbmRlbmN5ICpjdXJyZW50X2RlcGVuZGVuY3k7Cit9CQkJZGVw ZW5kZW5jaWVzUGFyc2VTdGF0ZTsKKworLyoKKyAqIEludm9rZWQgYXQgdGhlIHN0YXJ0IG9mIGVh Y2ggb2JqZWN0IGluIHRoZSBKU09OIGRvY3VtZW50LgorICogVGhlIGVudGlyZSBKU09OIGRvY3Vt ZW50IHNob3VsZCBiZSBvbmUgb2JqZWN0IHdpdGggbm8gc3ViLW9iamVjdHMuCisgKgorICogSWYg d2UncmUgYW55d2hlcmUgZWxzZSBpbiB0aGUgZG9jdW1lbnQsIGl0J3MgYW4gZXJyb3IuCisgKi8K K3N0YXRpYyBKc29uUGFyc2VFcnJvclR5cGUKK2RlcGVuZGVuY2llc19vYmplY3Rfc3RhcnQodm9p ZCAqc3RhdGUpCit7CisJZGVwZW5kZW5jaWVzUGFyc2VTdGF0ZSAqcGFyc2UgPSBzdGF0ZTsKKwor CWlmIChwYXJzZS0+Zm91bmRfb25seV9vYmplY3QgPT0gdHJ1ZSkKKwl7CisJCWVyZXR1cm4ocGFy c2UtPmVzY29udGV4dCwgKERhdHVtKSAwLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9U RVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxmb3JtZWQgcGdfZGVwZW5kZW5j aWVzOiBcIiVzXCIiLCBwYXJzZS0+c3RyKSwKKwkJCQkgZXJyZGV0YWlsKCJNdXN0IGJlZ2luIHdp dGggXCJ7XCIiKSkpOworCQlyZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsKKwl9CisKKwlw YXJzZS0+Zm91bmRfb25seV9vYmplY3QgPSB0cnVlOworCXJldHVybiBKU09OX1NVQ0NFU1M7Cit9 CisKKy8qCisgKiBkZXBlbmRlbmNpZXMgaW5wdXQgZm9ybWF0IGRvZXMgbm90IGhhdmUgYXJyYXlz LCBzbyBhbnkgYXJyYXkgZWxlbWVudHMgZW5jb3VudGVyZWQKKyAqIGFyZSBhbiBlcnJvci4KKyAq Lworc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZQorZGVwZW5kZW5jaWVzX2FycmF5X3N0YXJ0KHZv aWQgKnN0YXRlKQoreworCWRlcGVuZGVuY2llc1BhcnNlU3RhdGUgKnBhcnNlID0gc3RhdGU7CisK KwllcmV0dXJuKHBhcnNlLT5lc2NvbnRleHQsIChEYXR1bSkgMCwKKwkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCSBlcnJtc2coIm1hbGZvcm1lZCBw Z19kZXBlbmRlbmNpZXM6IFwiJXNcIiIsIHBhcnNlLT5zdHIpLAorCQkJIGVycmRldGFpbCgiQWxs IGRlcGVuZGVuY2llcyBjb3VudCB2YWx1ZXMgYXJlIHNjYWxhciBkb3VibGVzLiIpKSk7CisJcmV0 dXJuIEpTT05fU0VNX0FDVElPTl9GQUlMRUQ7Cit9CisKK3N0YXRpYyBpbnQKK2F0dG51bV9jb21w YXJlKGNvbnN0IHZvaWQgKmFwdHIsIGNvbnN0IHZvaWQgKmJwdHIpCit7CisJQXR0ck51bWJlcglh ID0gKihjb25zdCBBdHRyTnVtYmVyICopIGFwdHI7CisJQXR0ck51bWJlcgliID0gKihjb25zdCBB dHRyTnVtYmVyICopIGJwdHI7CisKKwlyZXR1cm4gcGdfY21wX3MxNihhLGIpOworfQorCisvKgor ICogVGhlIG9iamVjdCBrZXlzIGFyZSB0aGVtc2VsdmVzIGNvbW1hLXNlcGFyYXRlZCBsaXN0cyBv ZiBhdHRudW1zCisgKiB3aXRoIG5lZ2F0aXZlIGF0dG51bXMgcmVwcmVzZW50aW5nIG9uZSBvZiB0 aGUgZXhwcmVzc2lvbnMgZGVmaW5lZAorICogaW4gdGhlIGV4dGVuZWQgc3RhdGlzdGljcyBvYmpl Y3QsIGZvbGxvd2VkIGJ5IGEgPT4gYW5kIGEgZmluYWwgYXR0bnVtLgorICoKKyAqIGV4YW1wbGU6 ICItMSwgMiA9PiAtMSIKKyAqLworc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZQorZGVwZW5kZW5j aWVzX29iamVjdF9maWVsZF9zdGFydCh2b2lkICpzdGF0ZSwgY2hhciAqZm5hbWUsIGJvb2wgaXNu dWxsKQoreworCWRlcGVuZGVuY2llc1BhcnNlU3RhdGUgKnBhcnNlID0gc3RhdGU7CisJY2hhcgkg ICAqdG9rZW47CisJY2hhcgkgICAqc2F2ZXB0cjsKKwljb25zdCBjaGFyICpkZWxpbSA9ICIsICI7 CisJY29uc3QgY2hhciAqYXJyb3dfZGVsaW0gPSAiID0+ICI7CisJY2hhcgkgICAqc2NyYXRjaDsK KwljaGFyCSAgICphcnJvd19wOworCWNoYXIJICAgKmFmdGVyX2Fycm93X3A7CisJTGlzdAkgICAq YXR0bnVtX2xpc3QgPSBOSUw7CisJaW50CQkJbmF0dHMgPSAwOworCUF0dHJOdW1iZXIJZmluYWxf YXR0bnVtOworCU1WRGVwZW5kZW5jeSAqZGVwOworCUF0dHJOdW1iZXIgKmF0dHJzb3J0OworCisJ aWYgKGlzbnVsbCB8fCBmbmFtZSA9PSBOVUxMKQorCXsKKwkJZXJldHVybihwYXJzZS0+ZXNjb250 ZXh0LCAoRGF0dW0pIDAsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVT RU5UQVRJT04pLAorCQkJCSBlcnJtc2coIm1hbGZvcm1lZCBwZ19kZXBlbmRlbmNpZXM6IFwiJXNc IiIsIHBhcnNlLT5zdHIpLAorCQkJCSBlcnJkZXRhaWwoIkFsbCBkZXBlbmRlbmNpZXMgYXR0bnVt IGxpc3RzIG11c3QgYmUgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBhdHRudW1zIHdpdGggYSBm aW5hbCA9PiBhdHRudW0uIikpKTsKKworCQlyZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsK Kwl9CisKKwlzY3JhdGNoID0gcHN0cmR1cChmbmFtZSk7CisKKwkvKiBUaGUgc3VidHJpbmcgJyA9 PiAnIG11c3Qgb2NjdXIgZXhhY3RseSBvbmNlICovCisJYXJyb3dfcCA9IHN0cnN0cihzY3JhdGNo LCBhcnJvd19kZWxpbSk7CisJaWYgKGFycm93X3AgPT0gTlVMTCkKKwl7CisJCWVyZXR1cm4ocGFy c2UtPmVzY29udGV4dCwgKERhdHVtKSAwLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9U RVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxmb3JtZWQgcGdfZGVwZW5kZW5j aWVzOiBcIiVzXCIiLCBwYXJzZS0+c3RyKSwKKwkJCQkgZXJyZGV0YWlsKCJBbGwgZGVwZW5kZW5j aWVzIGF0dG51bSBsaXN0cyBtdXN0IGJlIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgYXR0bnVt cyB3aXRoIGEgZmluYWwgPT4gYXR0bnVtLiIpKSk7CisKKwkJcmV0dXJuIEpTT05fU0VNX0FDVElP Tl9GQUlMRUQ7CisJfQorCisJLyoKKwkgKiBFdmVyeXRoaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBh cnJvdyBpcyB0aGUgYXR0cmlidXRlIGxpc3QsIHNvIHNwbGl0CisJICogdGhhdCBvZmYgaW50byBp dHMgb3duIHN0cmluZy4KKwkgKgorCSAqIEV2ZXJ5dGhpbmcgdG8gdGhlIHJpZ2h0IHNob3VsZCBi ZSB0aGUgbG9uZSB0YXJnZXQgYXR0cmlidXRlLgorCSAqLworCSphcnJvd19wID0gJ1wwJzsKKwor CS8qIGxvb2sgZm9yIHRoZSBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmV5b25kIHRoZSBkZWxpbWl0 ZXIgd2UganVzdCBmb3VuZCAqLworCWFmdGVyX2Fycm93X3AgPSBhcnJvd19wICsgc3RybGVuKGFy cm93X2RlbGltKTsKKworCS8qIFdlIHNob3VsZCBub3QgZmluZCBhbm90aGVyIGFycm93IGRlbGlt ICovCisJaWYgKHN0cnN0cihhZnRlcl9hcnJvd19wLCBhcnJvd19kZWxpbSkgIT0gTlVMTCkKKwl7 CisJCWVyZXR1cm4ocGFyc2UtPmVzY29udGV4dCwgKERhdHVtKSAwLAorCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCQkgZXJybXNnKCJtYWxmb3Jt ZWQgcGdfZGVwZW5kZW5jaWVzOiBcIiVzXCIiLCBwYXJzZS0+c3RyKSwKKwkJCQkgZXJyZGV0YWls KCJBbGwgZGVwZW5kZW5jaWVzIGF0dG51bSBsaXN0cyBtdXN0IGJlIGEgY29tbWEgc2VwYXJhdGVk IGxpc3Qgb2YgYXR0bnVtcyB3aXRoIGEgZmluYWwgPT4gYXR0bnVtLiIpKSk7CisKKwkJcmV0dXJu IEpTT05fU0VNX0FDVElPTl9GQUlMRUQ7CisJfQorCisJLyogd2hhdCBpcyBsZWZ0IHNob3VsZCBi ZSBleGFjdGx5IG9uZSBhdHRudW0gKi8KKwlmaW5hbF9hdHRudW0gPSBwZ19zdHJ0b2ludDE2X3Nh ZmUoYWZ0ZXJfYXJyb3dfcCwgcGFyc2UtPmVzY29udGV4dCk7CisKKwlpZiAoU09GVF9FUlJPUl9P Q0NVUlJFRChwYXJzZS0+ZXNjb250ZXh0KSkKKwkJcmV0dXJuIEpTT05fU0VNX0FDVElPTl9GQUlM RUQ7CisKKwkvKiBMZWZ0IG9mIHRoZSBhcnJvdyBpcyBqdXN0IHJlZ3VsYXIgYXR0bnVtcyAqLwor CXRva2VuID0gc3RydG9rX3Ioc2NyYXRjaCwgZGVsaW0sICZzYXZlcHRyKTsKKworCXdoaWxlICh0 b2tlbiAhPSBOVUxMKQorCXsKKwkJYXR0bnVtX2xpc3QgPSBsYXBwZW5kKGF0dG51bV9saXN0LCAo dm9pZCAqKSB0b2tlbik7CisKKwkJdG9rZW4gPSBzdHJ0b2tfcihOVUxMLCBkZWxpbSwgJnNhdmVw dHIpOworCX0KKwluYXR0cyA9IGF0dG51bV9saXN0LT5sZW5ndGg7CisKKwkvKgorCSAqIFdlIG5l ZWQgYXQgbGVhc3QgMiBhdHRudW1zIGxlZnQgb2YgdGhlIGFycm93IGZvciBhIGRlcGVuZGVuY2ll cyBpdGVtLAorCSAqIGFueXRoaW5nIGxlc3MgaXMgbWFsZm9ybWVkLgorCSAqLworCWlmIChuYXR0 cyA8IDEpCisJeworCQllcmV0dXJuKHBhcnNlLT5lc2NvbnRleHQsIChEYXR1bSkgMCwKKwkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiksCisJCQkJIGVycm1z ZygibWFsZm9ybWVkIHBnX2RlcGVuZGVuY2llczogXCIlc1wiIiwgcGFyc2UtPnN0ciksCisJCQkJ IGVycmRldGFpbCgiQWxsIGRlcGVuZGVuY2llcyBhdHRudW0gbGlzdHMgbXVzdCBiZSBhIGNvbW1h IHNlcGFyYXRlZCBsaXN0IG9mIGF0dG51bXMuIikpKTsKKworCQlyZXR1cm4gSlNPTl9TRU1fQUNU SU9OX0ZBSUxFRDsKKwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgdGhl IGRlcGVuZGVuY3ksIHRoZSBhdHRudW1zIGluIHRoZSBsaXN0LCBwbHVzCisJICogdGhlIGZpbmFs IGF0dG51bQorCSAqLworCWRlcCA9IHBhbGxvYzAob2Zmc2V0b2YoTVZEZXBlbmRlbmN5LCBhdHRy aWJ1dGVzKSArICgobmF0dHMgKyAxKSAqIHNpemVvZihBdHRyTnVtYmVyKSkpOworCWRlcC0+bmF0 dHJpYnV0ZXMgPSBuYXR0cyArIDE7CisJZGVwLT5hdHRyaWJ1dGVzW25hdHRzXSA9IGZpbmFsX2F0 dG51bTsKKworCWF0dHJzb3J0ID0gcGFsbG9jMChkZXAtPm5hdHRyaWJ1dGVzICogc2l6ZW9mKEF0 dHJOdW1iZXIpKTsKKwlhdHRyc29ydFtuYXR0c10gPSBmaW5hbF9hdHRudW07CisKKwlmb3IgKGlu dCBpID0gMDsgaSA8IG5hdHRzOyBpKyspCisJeworCQljaGFyCSAgICpzID0gKGNoYXIgKikgYXR0 bnVtX2xpc3QtPmVsZW1lbnRzW2ldLnB0cl92YWx1ZTsKKworCQlhdHRyc29ydFtpXSA9IHBnX3N0 cnRvaW50MTZfc2FmZShzLCBwYXJzZS0+ZXNjb250ZXh0KTsKKwkJZGVwLT5hdHRyaWJ1dGVzW2ld ID0gYXR0cnNvcnRbaV07CisKKwkJaWYgKFNPRlRfRVJST1JfT0NDVVJSRUQocGFyc2UtPmVzY29u dGV4dCkpCisJCQlyZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsKKwl9CisKKwlsaXN0X2Zy ZWUoYXR0bnVtX2xpc3QpOworCXBmcmVlKHNjcmF0Y2gpOworCisJcXNvcnQoYXR0cnNvcnQsZGVw LT5uYXR0cmlidXRlcyxzaXplb2YoQXR0ck51bWJlciksYXR0bnVtX2NvbXBhcmUpOworCWZvciAo aW50IGkgPSAxOyBpIDwgZGVwLT5uYXR0cmlidXRlczsgaSsrKQorCQlpZiAoYXR0cnNvcnRbaV0g PT0gYXR0cnNvcnRbaS0xXSkKKwkJeworCQkJZXJldHVybihwYXJzZS0+ZXNjb250ZXh0LCAoRGF0 dW0pIDAsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9O KSwKKwkJCQkJZXJybXNnKCJtYWxmb3JtZWQgcGdfZGVwZW5kZW5jaWVzOiBcIiVzXCIiLCBwYXJz ZS0+c3RyKSwKKwkJCQkJZXJyZGV0YWlsKCJhdHRudW0gbGlzdCBkdXBsaWNhdGUgdmFsdWUgZm91 bmQ6ICVkIiwgYXR0cnNvcnRbaV0pKSk7CisKKwkJCXJldHVybiBKU09OX1NFTV9BQ1RJT05fRkFJ TEVEOworCQl9CisKKwlwZnJlZShhdHRyc29ydCk7CisKKwkvKiBhZGQgZGVwZW5kZW5jaWVzLWxl c3MgTVZkZXBlbmRlbmNpZXNJdGVtIHRvIHRoZSBsaXN0ICovCisJcGFyc2UtPmN1cnJlbnRfZGVw ZW5kZW5jeSA9IGRlcDsKKwlwYXJzZS0+ZGVwZW5kZW5jeV9saXN0ID0gbGFwcGVuZChwYXJzZS0+ ZGVwZW5kZW5jeV9saXN0LCAodm9pZCAqKSBkZXApOworCXJldHVybiBKU09OX1NVQ0NFU1M7Cit9 CisKKy8qCisgKiBuZHNpdGluY3QgaW5wdXQgZm9ybWF0IGRvZXMgbm90IGhhdmUgYXJyYXlzLCBz byBhbnkgYXJyYXkgZWxlbWVudHMgZW5jb3VudGVyZWQKKyAqIGFyZSBhbiBlcnJvci4KKyAqLwor c3RhdGljIEpzb25QYXJzZUVycm9yVHlwZQorZGVwZW5kZW5jaWVzX2FycmF5X2VsZW1lbnRfc3Rh cnQodm9pZCAqc3RhdGUsIGJvb2wgaXNudWxsKQoreworCWRlcGVuZGVuY2llc1BhcnNlU3RhdGUg KnBhcnNlID0gc3RhdGU7CisKKwllcmV0dXJuKHBhcnNlLT5lc2NvbnRleHQsIChEYXR1bSkgMCwK KwkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCSBl cnJtc2coIm1hbGZvcm1lZCBwZ19kZXBlbmRlbmNpZXM6IFwiJXNcIiIsIHBhcnNlLT5zdHIpLAor CQkJIGVycmRldGFpbCgiQ2Fubm90IGNvbnRhaW4gYXJyYXkgZWxlbWVudHMuIikpKTsKKworCXJl dHVybiBKU09OX1NFTV9BQ1RJT05fRkFJTEVEOworfQorCisvKgorICogSGFuZGxlIHNjYWxhciBl dmVudHMgZnJvbSB0aGUgZGVwZW5kZW5jaWVzIGlucHV0IHBhcnNlci4KKyAqCisgKiBUaGVyZSBp cyBvbmx5IG9uZSBjYXNlIHdoZXJlIHdlIHdpbGwgZW5jb3VudGVyIGEgc2NhbGFyLCBhbmQgdGhh dCBpcyB0aGUKKyAqIGRlcGVuZGVuY3kgZGVncmVlIGZvciB0aGUgcHJldmlvdXMgb2JqZWN0IGtl eS4KKyAqLworc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZQorZGVwZW5kZW5jaWVzX3NjYWxhcih2 b2lkICpzdGF0ZSwgY2hhciAqdG9rZW4sIEpzb25Ub2tlblR5cGUgdG9rZW50eXBlKQoreworCWRl cGVuZGVuY2llc1BhcnNlU3RhdGUgKnBhcnNlID0gc3RhdGU7CisKKwkvKiBpZiB0aGUgZW50aXJl IGpzb24gaXMganVzdCBvbmUgc2NhbGFyLCB0aGF0J3Mgd3JvbmcgKi8KKwlpZiAocGFyc2UtPmZv dW5kX29ubHlfb2JqZWN0ICE9IHRydWUpCisJeworCQllcmV0dXJuKHBhcnNlLT5lc2NvbnRleHQs IChEYXR1bSkgMCwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRB VElPTiksCisJCQkJIGVycm1zZygibWFsZm9ybWVkIHBnX2RlcGVuZGVuY2llczogXCIlc1wiIiwg cGFyc2UtPnN0ciksCisJCQkJIGVycmRldGFpbCgiTXVzdCBiZWdpbiB3aXRoIFwie1wiIikpKTsK KworCQlyZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsKKwl9CisKKwlBc3NlcnQocGFyc2Ut PmN1cnJlbnRfZGVwZW5kZW5jeSAhPSBOVUxMKTsKKworCXBhcnNlLT5jdXJyZW50X2RlcGVuZGVu Y3ktPmRlZ3JlZSA9IGZsb2F0OGluX2ludGVybmFsKHRva2VuLCBOVUxMLCAiZG91YmxlIiwKKwkJ CQkJCQkJCQkJCQkJICB0b2tlbiwgcGFyc2UtPmVzY29udGV4dCk7CisKKwlpZiAoU09GVF9FUlJP Ul9PQ0NVUlJFRChwYXJzZS0+ZXNjb250ZXh0KSkKKwkJcmV0dXJuIEpTT05fU0VNX0FDVElPTl9G QUlMRUQ7CisKKwkvKiBtYXJrIHVzIGRvbmUgd2l0aCB0aGlzIGRlcGVuZGVuY3kgKi8KKwlwYXJz ZS0+Y3VycmVudF9kZXBlbmRlbmN5ID0gTlVMTDsKKwlyZXR1cm4gSlNPTl9TVUNDRVNTOworfQor CiAvKgogICogcGdfZGVwZW5kZW5jaWVzX2luCQktIGlucHV0IHJvdXRpbmUgZm9yIHR5cGUgcGdf ZGVwZW5kZW5jaWVzLgogICoKLSAqIHBnX2RlcGVuZGVuY2llcyBpcyByZWFsIGVub3VnaCB0byBi ZSBhIHRhYmxlIGNvbHVtbiwgYnV0IGl0IGhhcyBubyBvcGVyYXRpb25zCi0gKiBvZiBpdHMgb3du LCBhbmQgZGlzYWxsb3dzIGlucHV0IHRvbworICogZXhhbXBsZSBpbnB1dDoKKyAqICAgICB7Ii0y ID0+IDYiOiAwLjI5MjUwOCwKKyAqICAgICAgIi0yID0+IC0xIjogMC4xMTM5OTksCisgKiAgICAg ICI2LCAtMiA9PiAtMSI6IDAuMzQ4NDc5LAorICogICAgICAiLTEsIC0yID0+IDYiOiAwLjgzOTY5 MX0KKyAqCisgKiBUaGlzIGltcG9ydCBmb3JtYXQgaXMgY2xlYXJseSBhIHNwZWNpZmljIHN1YnNl dCBvZiBKU09OLCB0aGVyZWZvcmUgaXQgbWFrZXMKKyAqIHNlbnNlIHRvIGxldmVyYWdlIHRob3Nl IHBhcnNpbmcgdXRpbGl0aWVzLCBhbmQgZnVydGhlciB2YWxpZGF0ZSBpdCBmcm9tIHRoZXJlLgog ICovCiBEYXR1bQogcGdfZGVwZW5kZW5jaWVzX2luKFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JLyoK LQkgKiBwZ19ub2RlX2xpc3Qgc3RvcmVzIHRoZSBkYXRhIGluIGJpbmFyeSBmb3JtIGFuZCBwYXJz aW5nIHRleHQgaW5wdXQgaXMKLQkgKiBub3QgbmVlZGVkLCBzbyBkaXNhbGxvdyB0aGlzLgotCSAq LwotCWVyZXBvcnQoRVJST1IsCi0JCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBP UlRFRCksCi0JCQkgZXJybXNnKCJjYW5ub3QgYWNjZXB0IGEgdmFsdWUgb2YgdHlwZSAlcyIsICJw Z19kZXBlbmRlbmNpZXMiKSkpOworCWNoYXIJICAgKnN0ciA9IFBHX0dFVEFSR19DU1RSSU5HKDAp OwogCi0JUEdfUkVUVVJOX1ZPSUQoKTsJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCisJZGVw ZW5kZW5jaWVzUGFyc2VTdGF0ZSBwYXJzZV9zdGF0ZTsKKwlKc29uUGFyc2VFcnJvclR5cGUgcmVz dWx0OworCUpzb25MZXhDb250ZXh0ICpsZXg7CisJSnNvblNlbUFjdGlvbiBzZW1fYWN0aW9uOwor CisJLyogaW5pdGlhbGl6ZSB0aGUgc2VtYW50aWMgc3RhdGUgKi8KKwlwYXJzZV9zdGF0ZS5zdHIg PSBzdHI7CisJcGFyc2Vfc3RhdGUuZm91bmRfb25seV9vYmplY3QgPSBmYWxzZTsKKwlwYXJzZV9z dGF0ZS5kZXBlbmRlbmN5X2xpc3QgPSBOSUw7CisJcGFyc2Vfc3RhdGUuZXNjb250ZXh0ID0gZmNp bmZvLT5jb250ZXh0OworCXBhcnNlX3N0YXRlLmN1cnJlbnRfZGVwZW5kZW5jeSA9IE5VTEw7CisK KwkvKiBzZXQgY2FsbGJhY2tzICovCisJc2VtX2FjdGlvbi5zZW1zdGF0ZSA9ICh2b2lkICopICZw YXJzZV9zdGF0ZTsKKwlzZW1fYWN0aW9uLm9iamVjdF9zdGFydCA9IGRlcGVuZGVuY2llc19vYmpl Y3Rfc3RhcnQ7CisJc2VtX2FjdGlvbi5vYmplY3RfZW5kID0gTlVMTDsKKwlzZW1fYWN0aW9uLmFy cmF5X3N0YXJ0ID0gZGVwZW5kZW5jaWVzX2FycmF5X3N0YXJ0OworCXNlbV9hY3Rpb24uYXJyYXlf ZW5kID0gTlVMTDsKKwlzZW1fYWN0aW9uLmFycmF5X2VsZW1lbnRfc3RhcnQgPSBkZXBlbmRlbmNp ZXNfYXJyYXlfZWxlbWVudF9zdGFydDsKKwlzZW1fYWN0aW9uLmFycmF5X2VsZW1lbnRfZW5kID0g TlVMTDsKKwlzZW1fYWN0aW9uLm9iamVjdF9maWVsZF9zdGFydCA9IGRlcGVuZGVuY2llc19vYmpl Y3RfZmllbGRfc3RhcnQ7CisJc2VtX2FjdGlvbi5vYmplY3RfZmllbGRfZW5kID0gTlVMTDsKKwlz ZW1fYWN0aW9uLnNjYWxhciA9IGRlcGVuZGVuY2llc19zY2FsYXI7CisKKwlsZXggPSBtYWtlSnNv bkxleENvbnRleHRDc3RyaW5nTGVuKE5VTEwsIHN0ciwgc3RybGVuKHN0ciksIFBHX1VURjgsIHRy dWUpOworCisJcmVzdWx0ID0gcGdfcGFyc2VfanNvbihsZXgsICZzZW1fYWN0aW9uKTsKKwlmcmVl SnNvbkxleENvbnRleHQobGV4KTsKKworCWlmIChyZXN1bHQgPT0gSlNPTl9TVUNDRVNTKQorCXsK KwkJTGlzdAkgICAqbGlzdCA9IHBhcnNlX3N0YXRlLmRlcGVuZGVuY3lfbGlzdDsKKwkJaW50CQkJ bmRlcHMgPSBsaXN0LT5sZW5ndGg7CisJCU1WRGVwZW5kZW5jaWVzICptdmRlcHM7CisJCWJ5dGVh CSAgICpieXRlczsKKworCQltdmRlcHMgPSBwYWxsb2MwKG9mZnNldG9mKE1WRGVwZW5kZW5jaWVz LCBkZXBzKSArIG5kZXBzICogc2l6ZW9mKE1WRGVwZW5kZW5jeSkpOworCQltdmRlcHMtPm1hZ2lj ID0gU1RBVFNfREVQU19NQUdJQzsKKwkJbXZkZXBzLT50eXBlID0gU1RBVFNfREVQU19UWVBFX0JB U0lDOworCQltdmRlcHMtPm5kZXBzID0gbmRlcHM7CisKKwkJLyogY29weSBNVkRlcGVuZGVuY3kg c3RydWN0cyBvdXQgb2YgdGhlIGxpc3QgaW50byB0aGUgTVZEZXBlbmRlbmNpZXMgKi8KKwkJZm9y IChpbnQgaSA9IDA7IGkgPCBuZGVwczsgaSsrKQorCQkJbXZkZXBzLT5kZXBzW2ldID0gbGlzdC0+ ZWxlbWVudHNbaV0ucHRyX3ZhbHVlOworCQlieXRlcyA9IHN0YXRleHRfZGVwZW5kZW5jaWVzX3Nl cmlhbGl6ZShtdmRlcHMpOworCisJCWxpc3RfZnJlZShsaXN0KTsKKwkJZm9yIChpbnQgaSA9IDA7 IGkgPCBuZGVwczsgaSsrKQorCQkJcGZyZWUobXZkZXBzLT5kZXBzW2ldKTsKKwkJcGZyZWUobXZk ZXBzKTsKKworCQlQR19SRVRVUk5fQllURUFfUChieXRlcyk7CisJfQorCWVsc2UgaWYgKHJlc3Vs dCA9PSBKU09OX1NFTV9BQ1RJT05fRkFJTEVEKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJLyog QW55dGhpbmcgZWxzZSBpcyBhIGdlbmVyaWMgSlNPTiBwYXJzZSBlcnJvciAqLworCWVyZXR1cm4o cGFyc2Vfc3RhdGUuZXNjb250ZXh0LCAoRGF0dW0pIDAsCisJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiksCisJCQkgZXJybXNnKCJtYWxmb3JtZWQgcGdfZGVw ZW5kZW5jaWVzOiBcIiVzXCIiLCBzdHIpLAorCQkJIGVycmRldGFpbCgiTXVzdCBiZSB2YWxpZCBK U09OLiIpKSk7CisKKwlQR19SRVRVUk5fTlVMTCgpOwkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQg Ki8KIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNf ZXh0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dAppbmRleCAy MDMzMzY2N2U1Zi4uNDg5ZTZhMTk3NzEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3RhdHNfZXh0Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRz X2V4dC5vdXQKQEAgLTMzNjUsNiArMzM2NSwyNCBAQCBTRUxFQ1QgJ3siNiwgLTEiOiAxNCwgIjYs IC0yIjogOTE0MywgIi0xLCAtMiI6IDEzNDU0LCAiNiwgLTEsIC0yIjogMTQ1NDl9Jzo6cGdfbgog IHsiNiwgLTEiOiAxNCwgIjYsIC0yIjogOTE0MywgIi0xLCAtMiI6IDEzNDU0LCAiNiwgLTEsIC0y IjogMTQ1NDl9CiAoMSByb3cpCiAKKy0tIGNhbid0IGhhdmUgZHVwbGljYXRlcyBhdHRudW1zIGlu IGxpc3QKK1NFTEVDVCAneyI2LCAtMSI6IDE0LCAiNiwgLTIiOiA5MTQzLCAiLTEsIC0xIjogMTM0 NTQsICI2LCAtMSwgLTIiOiAxNDU0OX0nOjpwZ19uZGlzdGluY3Q7CitFUlJPUjogIG1hbGZvcm1l ZCBwZ19uZGlzdGluY3Q6ICJ7IjYsIC0xIjogMTQsICI2LCAtMiI6IDkxNDMsICItMSwgLTEiOiAx MzQ1NCwgIjYsIC0xLCAtMiI6IDE0NTQ5fSIKK0xJTkUgMTogU0VMRUNUICd7IjYsIC0xIjogMTQs ICI2LCAtMiI6IDkxNDMsICItMSwgLTEiOiAxMzQ1NCwgIjYsIC0xLi4uCisgICAgICAgICAgICAg ICBeCitERVRBSUw6ICBhdHRudW0gbGlzdCBkdXBsaWNhdGUgdmFsdWUgZm91bmQ6IC0xCitTRUxF Q1QgJ3siLTIgPT4gNiI6IDAuMjkyNTA4LCAiLTIgPT4gLTEiOiAwLjExMzk5OSwgIjYsIC0yID0+ IC0xIjogMC4zNDg0NzksICItMSwgLTIgPT4gNiI6IDAuODM5NjkxfSc6OnBnX2RlcGVuZGVuY2ll czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19kZXBlbmRlbmNp ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHsiLTIgPT4gNiI6IDAuMjkyNTA4LCAiLTIgPT4g LTEiOiAwLjExMzk5OSwgIjYsIC0yID0+IC0xIjogMC4zNDg0NzksICItMSwgLTIgPT4gNiI6IDAu ODM5NjkxfQorKDEgcm93KQorCistLSBjYW4ndCBoYXZlIGR1cGxpY2F0ZXMgYXR0bnVtcyBpbiBs aXN0CitTRUxFQ1QgJ3siNiA9PiA2IjogMC4yOTI1MDgsICItMiA9PiAtMSI6IDAuMTEzOTk5LCAi NiwgLTIgPT4gLTEiOiAwLjM0ODQ3OSwgIi0xLCAtMiA9PiA2IjogMC44Mzk2OTF9Jzo6cGdfZGVw ZW5kZW5jaWVzOworRVJST1I6ICBtYWxmb3JtZWQgcGdfZGVwZW5kZW5jaWVzOiAieyI2ID0+IDYi OiAwLjI5MjUwOCwgIi0yID0+IC0xIjogMC4xMTM5OTksICI2LCAtMiA9PiAtMSI6IDAuMzQ4NDc5 LCAiLTEsIC0yID0+IDYiOiAwLjgzOTY5MX0iCitMSU5FIDE6IFNFTEVDVCAneyI2ID0+IDYiOiAw LjI5MjUwOCwgIi0yID0+IC0xIjogMC4xMTM5OTksICI2LCAtMiA9Pi4uLgorICAgICAgICAgICAg ICAgXgorREVUQUlMOiAgYXR0bnVtIGxpc3QgZHVwbGljYXRlIHZhbHVlIGZvdW5kOiA2CiAtLSBU aWR5IHVwCiBEUk9QIE9QRVJBVE9SIDw8PCAoaW50LCBpbnQpOwogRFJPUCBGVU5DVElPTiBvcF9s ZWFrKGludCwgaW50KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2V4 dC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3FsCmluZGV4IDM1MzlkN2I1 Y2QyLi5kYTVjMTFhZWRkNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNf ZXh0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3FsCkBAIC0xNzAy LDYgKzE3MDIsMTIgQEAgU0VMRUNUIHN0YXRpc3RpY3NfbmFtZSwgbW9zdF9jb21tb25fdmFscyBG Uk9NIHBnX3N0YXRzX2V4dF9leHBycyB4CiAKIC0tIG5ldyBpbnB1dCBmdW5jdGlvbnMKIFNFTEVD VCAneyI2LCAtMSI6IDE0LCAiNiwgLTIiOiA5MTQzLCAiLTEsIC0yIjogMTM0NTQsICI2LCAtMSwg LTIiOiAxNDU0OX0nOjpwZ19uZGlzdGluY3Q7CistLSBjYW4ndCBoYXZlIGR1cGxpY2F0ZXMgYXR0 bnVtcyBpbiBsaXN0CitTRUxFQ1QgJ3siNiwgLTEiOiAxNCwgIjYsIC0yIjogOTE0MywgIi0xLCAt MSI6IDEzNDU0LCAiNiwgLTEsIC0yIjogMTQ1NDl9Jzo6cGdfbmRpc3RpbmN0OworCitTRUxFQ1Qg J3siLTIgPT4gNiI6IDAuMjkyNTA4LCAiLTIgPT4gLTEiOiAwLjExMzk5OSwgIjYsIC0yID0+IC0x IjogMC4zNDg0NzksICItMSwgLTIgPT4gNiI6IDAuODM5NjkxfSc6OnBnX2RlcGVuZGVuY2llczsK Ky0tIGNhbid0IGhhdmUgZHVwbGljYXRlcyBhdHRudW1zIGluIGxpc3QKK1NFTEVDVCAneyI2ID0+ IDYiOiAwLjI5MjUwOCwgIi0yID0+IC0xIjogMC4xMTM5OTksICI2LCAtMiA9PiAtMSI6IDAuMzQ4 NDc5LCAiLTEsIC0yID0+IDYiOiAwLjgzOTY5MX0nOjpwZ19kZXBlbmRlbmNpZXM7CiAKIC0tIFRp ZHkgdXAKIERST1AgT1BFUkFUT1IgPDw8IChpbnQsIGludCk7Ci0tIAoyLjQ4LjEKCg== --000000000000ece857062e8b83c2 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0003-Expose-attribute-statistics-functions-for-use-in-.patch" Content-Disposition: attachment; filename="v3-0003-Expose-attribute-statistics-functions-for-use-in-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7cujm2n2 RnJvbSBiYmFmYzQzMDE0NDdlNWM0MDJkM2I0ZjI3NTM1MDFiYjA2MWU5MjIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjaHVpbmtlckBhbWF6b24uY29tPgpE YXRlOiBUaHUsIDI2IERlYyAyMDI0IDA1OjAyOjA2IC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2MyAz LzRdIEV4cG9zZSBhdHRyaWJ1dGUgc3RhdGlzdGljcyBmdW5jdGlvbnMgZm9yIHVzZSBpbgogZXh0 ZW5kZWRfc3RhdHMuCgpNYW55IG9mIHRoZSBvcGVyYXRpb25zIG9mIGF0dHJpYnV0ZSBzdGF0cyBo YXZlIGFuYWxvZ291cyBvcGVyYXRpb25zIGluCmV4dGVuZGVkIHN0YXRzLgoKKiBnZXRfYXR0cl9z dGF0X3R5cGUoKQoqIGluaXRfZW1wdHlfc3RhdHNfdHVwbGUoKQoqIHRleHRfdG9fc3RhdmFsdWVz KCkKKiBnZXRfZWxlbV9zdGF0X3R5cGUoKQotLS0KIHNyYy9pbmNsdWRlL3N0YXRpc3RpY3Mvc3Rh dGlzdGljcy5oICAgICAgfCAxNyArKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvc3RhdGlz dGljcy9hdHRyaWJ1dGVfc3RhdHMuYyB8IDI0ICsrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQogMiBm aWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL3N0YXRpc3RpY3MuaCBiL3NyYy9pbmNsdWRlL3N0 YXRpc3RpY3Mvc3RhdGlzdGljcy5oCmluZGV4IDdkZDBmOTc1NTQ1Li5mNDdmMTkyZGZmMCAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9zdGF0aXN0aWNzLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RhdGlzdGljcy9zdGF0aXN0aWNzLmgKQEAgLTEyNyw0ICsxMjcsMjEgQEAgZXh0ZXJu IFN0YXRpc3RpY0V4dEluZm8gKmNob29zZV9iZXN0X3N0YXRpc3RpY3MoTGlzdCAqc3RhdHMsIGNo YXIgcmVxdWlyZWRraW5kLAogCQkJCQkJCQkJCQkJaW50IG5jbGF1c2VzKTsKIGV4dGVybiBIZWFw VHVwbGUgc3RhdGV4dF9leHByZXNzaW9uc19sb2FkKE9pZCBzdHhvaWQsIGJvb2wgaW5oLCBpbnQg aWR4KTsKIAorZXh0ZXJuIHZvaWQgZ2V0X2F0dHJfc3RhdF90eXBlKE9pZCByZWxvaWQsIEF0dHJO dW1iZXIgYXR0bnVtLCBpbnQgZWxldmVsLAorCQkJCQkJCSAgIE9pZCAqYXR0dHlwaWQsIGludDMy ICphdHR0eXBtb2QsCisJCQkJCQkJICAgY2hhciAqYXR0dHlwdHlwZSwgT2lkICphdHR0eXBjb2xs LAorCQkJCQkJCSAgIE9pZCAqZXFfb3ByLCBPaWQgKmx0X29wcik7CitleHRlcm4gdm9pZCBpbml0 X2VtcHR5X3N0YXRzX3R1cGxlKE9pZCByZWxvaWQsIGludDE2IGF0dG51bSwgYm9vbCBpbmhlcml0 ZWQsCisJCQkJCQkJCSAgIERhdHVtICp2YWx1ZXMsIGJvb2wgKm51bGxzLCBib29sICpyZXBsYWNl cyk7CisKK2V4dGVybiB2b2lkIHNldF9zdGF0c19zbG90KERhdHVtICp2YWx1ZXMsIGJvb2wgKm51 bGxzLCBib29sICpyZXBsYWNlcywKKwkJCQkJCSAgIGludDE2IHN0YWtpbmQsIE9pZCBzdGFvcCwg T2lkIHN0YWNvbGwsCisJCQkJCQkgICBEYXR1bSBzdGFudW1iZXJzLCBib29sIHN0YW51bWJlcnNf aXNudWxsLAorCQkJCQkJICAgRGF0dW0gc3RhdmFsdWVzLCBib29sIHN0YXZhbHVlc19pc251bGwp OworCitleHRlcm4gRGF0dW0gdGV4dF90b19zdGF2YWx1ZXMoY29uc3QgY2hhciAqc3RhbmFtZSwg Rm1nckluZm8gKmFycmF5X2luLCBEYXR1bSBkLAorCQkJCQkJCSAgIE9pZCB0eXBpZCwgaW50MzIg dHlwbW9kLCBpbnQgZWxldmVsLCBib29sICpvayk7CitleHRlcm4gYm9vbCBnZXRfZWxlbV9zdGF0 X3R5cGUoT2lkIGF0dHR5cGlkLCBjaGFyIGF0dHR5cHR5cGUsIGludCBlbGV2ZWwsCisJCQkJCQkJ ICAgT2lkICplbGVtdHlwaWQsIE9pZCAqZWxlbV9lcV9vcHIpOworCiAjZW5kaWYJCQkJCQkJLyog U1RBVElTVElDU19IICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2F0dHJp YnV0ZV9zdGF0cy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuYwpp bmRleCA5NGY3ZGQ2M2EwMy4uZjYxNzE2NTM4NjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0 YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9h dHRyaWJ1dGVfc3RhdHMuYwpAQCAtNzgsMjMgKzc4LDkgQEAgc3RhdGljIHN0cnVjdCBTdGF0c0Fy Z0luZm8gYXR0YXJnaW5mb1tdID0KIAogc3RhdGljIGJvb2wgYXR0cmlidXRlX3N0YXRpc3RpY3Nf dXBkYXRlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBpbnQgZWxldmVsKTsKIHN0YXRpYyBOb2Rl ICpnZXRfYXR0cl9leHByKFJlbGF0aW9uIHJlbCwgaW50IGF0dG51bSk7Ci1zdGF0aWMgdm9pZCBn ZXRfYXR0cl9zdGF0X3R5cGUoT2lkIHJlbG9pZCwgQXR0ck51bWJlciBhdHRudW0sIGludCBlbGV2 ZWwsCi0JCQkJCQkJICAgT2lkICphdHR0eXBpZCwgaW50MzIgKmF0dHR5cG1vZCwKLQkJCQkJCQkg ICBjaGFyICphdHR0eXB0eXBlLCBPaWQgKmF0dHR5cGNvbGwsCi0JCQkJCQkJICAgT2lkICplcV9v cHIsIE9pZCAqbHRfb3ByKTsKLXN0YXRpYyBib29sIGdldF9lbGVtX3N0YXRfdHlwZShPaWQgYXR0 dHlwaWQsIGNoYXIgYXR0dHlwdHlwZSwgaW50IGVsZXZlbCwKLQkJCQkJCQkgICBPaWQgKmVsZW10 eXBpZCwgT2lkICplbGVtX2VxX29wcik7Ci1zdGF0aWMgRGF0dW0gdGV4dF90b19zdGF2YWx1ZXMo Y29uc3QgY2hhciAqc3RhbmFtZSwgRm1nckluZm8gKmFycmF5X2luLCBEYXR1bSBkLAotCQkJCQkJ CSAgIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLCBpbnQgZWxldmVsLCBib29sICpvayk7Ci1zdGF0 aWMgdm9pZCBzZXRfc3RhdHNfc2xvdChEYXR1bSAqdmFsdWVzLCBib29sICpudWxscywgYm9vbCAq cmVwbGFjZXMsCi0JCQkJCQkgICBpbnQxNiBzdGFraW5kLCBPaWQgc3Rhb3AsIE9pZCBzdGFjb2xs LAotCQkJCQkJICAgRGF0dW0gc3RhbnVtYmVycywgYm9vbCBzdGFudW1iZXJzX2lzbnVsbCwKLQkJ CQkJCSAgIERhdHVtIHN0YXZhbHVlcywgYm9vbCBzdGF2YWx1ZXNfaXNudWxsKTsKIHN0YXRpYyB2 b2lkIHVwc2VydF9wZ19zdGF0aXN0aWMoUmVsYXRpb24gc3RhcmVsLCBIZWFwVHVwbGUgb2xkdHVw LAogCQkJCQkJCQlEYXR1bSAqdmFsdWVzLCBib29sICpudWxscywgYm9vbCAqcmVwbGFjZXMpOwog c3RhdGljIGJvb2wgZGVsZXRlX3BnX3N0YXRpc3RpYyhPaWQgcmVsb2lkLCBBdHRyTnVtYmVyIGF0 dG51bSwgYm9vbCBzdGFpbmhlcml0KTsKLXN0YXRpYyB2b2lkIGluaXRfZW1wdHlfc3RhdHNfdHVw bGUoT2lkIHJlbG9pZCwgaW50MTYgYXR0bnVtLCBib29sIGluaGVyaXRlZCwKLQkJCQkJCQkJICAg RGF0dW0gKnZhbHVlcywgYm9vbCAqbnVsbHMsIGJvb2wgKnJlcGxhY2VzKTsKIAogLyoKICAqIElu c2VydCBvciBVcGRhdGUgQXR0cmlidXRlIFN0YXRpc3RpY3MKQEAgLTUwMiw3ICs0ODgsNyBAQCBn ZXRfYXR0cl9leHByKFJlbGF0aW9uIHJlbCwgaW50IGF0dG51bSkKIC8qCiAgKiBEZXJpdmUgdHlw ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBhdHRyaWJ1dGUuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lk CiBnZXRfYXR0cl9zdGF0X3R5cGUoT2lkIHJlbG9pZCwgQXR0ck51bWJlciBhdHRudW0sIGludCBl bGV2ZWwsCiAJCQkJICAgT2lkICphdHR0eXBpZCwgaW50MzIgKmF0dHR5cG1vZCwKIAkJCQkgICBj aGFyICphdHR0eXB0eXBlLCBPaWQgKmF0dHR5cGNvbGwsCkBAIC01ODQsNyArNTcwLDcgQEAgZ2V0 X2F0dHJfc3RhdF90eXBlKE9pZCByZWxvaWQsIEF0dHJOdW1iZXIgYXR0bnVtLCBpbnQgZWxldmVs LAogLyoKICAqIERlcml2ZSBlbGVtZW50IHR5cGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgYXR0cmli dXRlIHR5cGUuCiAgKi8KLXN0YXRpYyBib29sCitib29sCiBnZXRfZWxlbV9zdGF0X3R5cGUoT2lk IGF0dHR5cGlkLCBjaGFyIGF0dHR5cHR5cGUsIGludCBlbGV2ZWwsCiAJCQkJICAgT2lkICplbGVt dHlwaWQsIE9pZCAqZWxlbV9lcV9vcHIpCiB7CkBAIC02MjQsNyArNjEwLDcgQEAgZ2V0X2VsZW1f c3RhdF90eXBlKE9pZCBhdHR0eXBpZCwgY2hhciBhdHR0eXB0eXBlLCBpbnQgZWxldmVsLAogICog dG8gZmFsc2UuIElmIHRoZSByZXN1bHRpbmcgYXJyYXkgY29udGFpbnMgTlVMTHMsIHJhaXNlIGFu IGVycm9yIGF0IGVsZXZlbAogICogYW5kIHNldCBvayB0byBmYWxzZS4gT3RoZXJ3aXNlLCBzZXQg b2sgdG8gdHJ1ZS4KICAqLwotc3RhdGljIERhdHVtCitEYXR1bQogdGV4dF90b19zdGF2YWx1ZXMo Y29uc3QgY2hhciAqc3RhbmFtZSwgRm1nckluZm8gKmFycmF5X2luLCBEYXR1bSBkLCBPaWQgdHlw aWQsCiAJCQkJICBpbnQzMiB0eXBtb2QsIGludCBlbGV2ZWwsIGJvb2wgKm9rKQogewpAQCAtNjc4 LDcgKzY2NCw3IEBAIHRleHRfdG9fc3RhdmFsdWVzKGNvbnN0IGNoYXIgKnN0YW5hbWUsIEZtZ3JJ bmZvICphcnJheV9pbiwgRGF0dW0gZCwgT2lkIHR5cGlkLAogICogRmluZCBhbmQgdXBkYXRlIHRo ZSBzbG90IHdpdGggdGhlIGdpdmVuIHN0YWtpbmQsIG9yIHVzZSB0aGUgZmlyc3QgZW1wdHkKICAq IHNsb3QuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBzZXRfc3RhdHNfc2xvdChEYXR1bSAqdmFs dWVzLCBib29sICpudWxscywgYm9vbCAqcmVwbGFjZXMsCiAJCQkgICBpbnQxNiBzdGFraW5kLCBP aWQgc3Rhb3AsIE9pZCBzdGFjb2xsLAogCQkJICAgRGF0dW0gc3RhbnVtYmVycywgYm9vbCBzdGFu dW1iZXJzX2lzbnVsbCwKQEAgLTgwMiw3ICs3ODgsNyBAQCBkZWxldGVfcGdfc3RhdGlzdGljKE9p ZCByZWxvaWQsIEF0dHJOdW1iZXIgYXR0bnVtLCBib29sIHN0YWluaGVyaXQpCiAvKgogICogSW5p dGlhbGl6ZSB2YWx1ZXMgYW5kIG51bGxzIGZvciBhIG5ldyBzdGF0cyB0dXBsZS4KICAqLwotc3Rh dGljIHZvaWQKK3ZvaWQKIGluaXRfZW1wdHlfc3RhdHNfdHVwbGUoT2lkIHJlbG9pZCwgaW50MTYg YXR0bnVtLCBib29sIGluaGVyaXRlZCwKIAkJCQkJICAgRGF0dW0gKnZhbHVlcywgYm9vbCAqbnVs bHMsIGJvb2wgKnJlcGxhY2VzKQogewotLSAKMi40OC4xCgo= --000000000000ece857062e8b83c2 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0004-Add-extended-statistics-support-functions.patch" Content-Disposition: attachment; filename="v3-0004-Add-extended-statistics-support-functions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7cujofh3 RnJvbSAwNzNmNTIzNjA1Zjk5MjdmZjIxMDk3MGMwY2JlMjk0YTMzMDdhMmMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogRnJpLCAzIEphbiAyMDI1IDEzOjQzOjI5IC0wNTAwClN1YmplY3Q6IFtQQVRDSCB2 MyA0LzRdIEFkZCBleHRlbmRlZCBzdGF0aXN0aWNzIHN1cHBvcnQgZnVuY3Rpb25zLgoKQWRkIHBn X3NldF9leHRlbmRlZF9zdGF0cygpLCBwZ19jbGVhcl9leHRlbmRlZF9zdGF0cygpLCBhbmQKcGdf cmVzdG9yZV9leHRlbmRlZF9zdGF0cygpLiBUaGVzZSBmdW5jdGlvbiBjbG9zZWx5IG1pcnJvciB0 aGVpcgpyZWxhdGlvbiBhbmQgYXR0cmlidXRlIGNvdW50ZXJwYXJ0cywgYnV0IGZvciBleHRlbmRl ZCBzdGF0aXN0aWNzIChpLmUuCkNSRUFURSBTVEFUSVNUSUNTKSBvYmplY3RzLgotLS0KIHNyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICB8ICAgMjMgKwogLi4uL3N0 YXRpc3RpY3MvZXh0ZW5kZWRfc3RhdHNfaW50ZXJuYWwuaCAgICAgIHwgICAgOCArCiBzcmMvYmFj a2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsICAgICAgfCAgIDE3ICsKIHNyYy9iYWNr ZW5kL3N0YXRpc3RpY3MvZGVwZW5kZW5jaWVzLmMgICAgICAgICB8ICAgNjUgKwogc3JjL2JhY2tl bmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jICAgICAgIHwgMTA5OSArKysrKysrKysrKysr KysrKwogc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYyAgICAgICAgICAgICAgICAgIHwgIDE0 NCArKysKIHNyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbXZkaXN0aW5jdC5jICAgICAgICAgICB8ICAg MTQgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dCAgICAgICB8ICAg MTMgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19pbXBvcnQub3V0ICAgIHwgIDQ0 OSArKysrKystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19leHQuc3FsICAgICAgICAgICAg fCAgICA0ICsKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2ltcG9ydC5zcWwgICAgICAgICB8 ICAzNDEgKysrKy0KIGRvYy9zcmMvc2dtbC9mdW5jLnNnbWwgICAgICAgICAgICAgICAgICAgICAg ICB8ICAxMjQgKysKIDEyIGZpbGVzIGNoYW5nZWQsIDIxOTAgaW5zZXJ0aW9ucygrKSwgMTExIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDllODAzZDYxMGQ3Li40MTZk ODIwNWI4NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMjQ2Myw1ICsxMjQ2MywyOCBA QAogICBwcm9uYW1lID0+ICdnaXN0X3N0cmF0bnVtX2NvbW1vbicsIHByb3JldHR5cGUgPT4gJ2lu dDInLAogICBwcm9hcmd0eXBlcyA9PiAnaW50NCcsCiAgIHByb3NyYyA9PiAnZ2lzdF9zdHJhdG51 bV9jb21tb24nIH0sCit7IG9pZCA9PiAnOTk0NycsCisgIGRlc2NyID0+ICdyZXN0b3JlIHN0YXRp c3RpY3Mgb24gZXh0ZW5kZWQgc3RhdGlzdGljcyBvYmplY3QnLAorICBwcm9uYW1lID0+ICdwZ19y ZXN0b3JlX2V4dGVuZGVkX3N0YXRzJywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9pc3N0cmljdCA9 PiAnZicsCisgIHByb3ZhcmlhZGljID0+ICdhbnknLAorICBwcm9wYXJhbGxlbCA9PiAndScsIHBy b3JldHR5cGUgPT4gJ2Jvb2wnLAorICBwcm9hcmd0eXBlcyA9PiAnYW55JywKKyAgcHJvYXJnbmFt ZXMgPT4gJ3trd2FyZ3N9JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3t2fScsCisgIHByb3NyYyA9PiAn cGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cycgfSwKK3sgb2lkID0+ICc5OTQ4JywKKyAgZGVzY3Ig PT4gJ3NldCBzdGF0aXN0aWNzIG9uIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0JywKKyAgcHJv bmFtZSA9PiAncGdfc2V0X2V4dGVuZGVkX3N0YXRzJywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9p c3N0cmljdCA9PiAnZicsCisgIHByb3BhcmFsbGVsID0+ICd1JywgcHJvcmV0dHlwZSA9PiAndm9p ZCcsCisgIHByb2FyZ3R5cGVzID0+ICdyZWduYW1lc3BhY2UgbmFtZSBib29sIHBnX25kaXN0aW5j dCBwZ19kZXBlbmRlbmNpZXMgX3RleHQgX2Jvb2wgX2Zsb2F0OCBfZmxvYXQ4IF90ZXh0JywKKyAg cHJvYXJnbmFtZXMgPT4gJ3tzdGF0aXN0aWNzX3NjaGVtYW5hbWUsc3RhdGlzdGljc19uYW1lLGlu aGVyaXRlZCxuX2Rpc3RpbmN0LGRlcGVuZGVuY2llcyxtb3N0X2NvbW1vbl92YWxzLG1vc3RfY29t bW9uX3ZhbF9udWxscyxtb3N0X2NvbW1vbl9mcmVxcyxtb3N0X2NvbW1vbl9iYXNlX2ZyZXFzLGV4 cHJzfScsCisgIHByb3NyYyA9PiAncGdfc2V0X2V4dGVuZGVkX3N0YXRzJyB9LAoreyBvaWQgPT4g Jzk5NDknLAorICBkZXNjciA9PiAnY2xlYXIgc3RhdGlzdGljcyBvbiBleHRlbmRlZCBzdGF0aXN0 aWNzIG9iamVjdCcsCisgIHByb25hbWUgPT4gJ3BnX2NsZWFyX2V4dGVuZGVkX3N0YXRzJywgcHJv dm9sYXRpbGUgPT4gJ3YnLCBwcm9pc3N0cmljdCA9PiAnZicsCisgIHByb3BhcmFsbGVsID0+ICd1 JywgcHJvcmV0dHlwZSA9PiAndm9pZCcsCisgIHByb2FyZ3R5cGVzID0+ICdyZWduYW1lc3BhY2Ug bmFtZSBib29sJywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tzdGF0aXN0aWNzX3NjaGVtYW5hbWUsc3Rh dGlzdGljc19uYW1lLGluaGVyaXRlZH0nLAorICBwcm9zcmMgPT4gJ3BnX2NsZWFyX2V4dGVuZGVk X3N0YXRzJyB9LAogCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL2V4dGVu ZGVkX3N0YXRzX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0 YXRzX2ludGVybmFsLmgKaW5kZXggMzk2OTE1YThhOTcuLjY4ODYyYmIxMzA0IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzX2ludGVybmFsLmgKKysrIGIv c3JjL2luY2x1ZGUvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0c19pbnRlcm5hbC5oCkBAIC0xMjYs NiArMTI2LDEwIEBAIGV4dGVybiBTZWxlY3Rpdml0eSBtY3ZfY2xhdXNlX3NlbGVjdGl2aXR5X29y KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkgU2VsZWN0aXZpdHkgKm92ZXJsYXBfbWN2 c2VsLAogCQkJCQkJCQkJCQkgU2VsZWN0aXZpdHkgKm92ZXJsYXBfYmFzZXNlbCwKIAkJCQkJCQkJ CQkJIFNlbGVjdGl2aXR5ICp0b3RhbHNlbCk7CitleHRlcm4gRGF0dW0gaW1wb3J0X21jdmxpc3Qo SGVhcFR1cGxlIHR1cCwgaW50IGVsZXZlbCwgaW50IG51bWF0dHJzLAorCQkJCQkJCU9pZCAqYXR0 dHlwaWRzLCBpbnQzMiAqYXR0dHlwbW9kcywgT2lkICphdHR0eXBjb2xscywKKwkJCQkJCQlpbnQg bml0ZW1zLCBEYXR1bSAqbWN2X2VsZW1zLCBib29sICptY3ZfbnVsbHMsCisJCQkJCQkJYm9vbCAq bWN2X2VsZW1fbnVsbHMsIGZsb2F0OCAqZnJlcXMsIGZsb2F0OCAqYmFzZV9mcmVxcyk7CiAKIGV4 dGVybiBEYXR1bSBpbXBvcnRfbWN2bGlzdChIZWFwVHVwbGUgdHVwLCBpbnQgZWxldmVsLCBpbnQg bnVtYXR0cnMsCiAJCQkJCQkJT2lkICphdHR0eXBpZHMsIGludDMyICphdHR0eXBtb2RzLCBPaWQg KmF0dHR5cGNvbGxzLApAQCAtMTM0LDUgKzEzOCw5IEBAIGV4dGVybiBEYXR1bSBpbXBvcnRfbWN2 bGlzdChIZWFwVHVwbGUgdHVwLCBpbnQgZWxldmVsLCBpbnQgbnVtYXR0cnMsCiBleHRlcm4gYm9v bCBwZ19uZGlzdGluY3RfdmFsaWRhdGVfaXRlbXMoTVZORGlzdGluY3QgKm5kaXN0aW5jdCwgaW50 MnZlY3RvciAqc3R4a2V5cywKIAkJCQkJCQkJCQlpbnQgbnVtZXhwcnMsIGludCBlbGV2ZWwpOwog ZXh0ZXJuIHZvaWQgZnJlZV9wZ19uZGlzdGluY3QoTVZORGlzdGluY3QgKm5kaXN0aW5jdCk7Citl eHRlcm4gYm9vbCBwZ19kZXBlbmRlbmNpZXNfdmFsaWRhdGVfZGVwcyhNVkRlcGVuZGVuY2llcyAq ZGVwZW5kZW5jaWVzLAorCQkJCQkJCQkJCSAgaW50MnZlY3RvciAqc3R4a2V5cywgaW50IG51bWV4 cHJzLAorCQkJCQkJCQkJCSAgaW50IGVsZXZlbCk7CitleHRlcm4gdm9pZCBmcmVlX3BnX2RlcGVu ZGVuY2llcyhNVkRlcGVuZGVuY2llcyAqZGVwZW5kZW5jaWVzKTsKIAogI2VuZGlmCQkJCQkJCS8q IEVYVEVOREVEX1NUQVRTX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9m dW5jdGlvbnMuc3FsCmluZGV4IDU5MTE1N2IxZDFiLi44MjkwMWJkOGUxMCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbAorKysgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCkBAIC02NjgsNiArNjY4LDIzIEBAIExBTkdV QUdFIElOVEVSTkFMCiBDQUxMRUQgT04gTlVMTCBJTlBVVCBWT0xBVElMRQogQVMgJ3BnX3NldF9h dHRyaWJ1dGVfc3RhdHMnOwogCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTgorICBwZ19zZXRf ZXh0ZW5kZWRfc3RhdHMoc3RhdGlzdGljc19zY2hlbWFuYW1lIHJlZ25hbWVzcGFjZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NfbmFtZSBuYW1lLAorICAgICAgICAgICAgICAg ICAgICAgICAgaW5oZXJpdGVkIGJvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICBuX2Rpc3Rp bmN0IHBnX25kaXN0aW5jdCBERUZBVUxUIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICBk ZXBlbmRlbmNpZXMgcGdfZGVwZW5kZW5jaWVzIERFRkFVTFQgTlVMTCwKKyAgICAgICAgICAgICAg ICAgICAgICAgIG1vc3RfY29tbW9uX3ZhbHMgdGV4dFtdIERFRkFVTFQgTlVMTCwKKyAgICAgICAg ICAgICAgICAgICAgICAgIG1vc3RfY29tbW9uX3ZhbF9udWxscyBib29sZWFuW10gREVGQVVMVCBO VUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgbW9zdF9jb21tb25fZnJlcXMgZG91YmxlIHBy ZWNpc2lvbltdIERFRkFVTFQgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vc3RfY29t bW9uX2Jhc2VfZnJlcXMgZG91YmxlIHByZWNpc2lvbltdIERFRkFVTFQgTlVMTCwKKyAgICAgICAg ICAgICAgICAgICAgICAgIGV4cHJzIHRleHRbXSBERUZBVUxUIE5VTEwpCitSRVRVUk5TIHZvaWQK K0xBTkdVQUdFIElOVEVSTkFMCitDQUxMRUQgT04gTlVMTCBJTlBVVCBWT0xBVElMRQorQVMgJ3Bn X3NldF9leHRlbmRlZF9zdGF0cyc7CisKKwogLS0KIC0tIFRoZSBkZWZhdWx0IHBlcm1pc3Npb25z IGZvciBmdW5jdGlvbnMgbWVhbiB0aGF0IGFueW9uZSBjYW4gZXhlY3V0ZSB0aGVtLgogLS0gQSBu dW1iZXIgb2YgZnVuY3Rpb25zIHNob3VsZG4ndCBiZSBleGVjdXRhYmxlIGJ5IGp1c3QgYW55b25l LCBidXQgcmF0aGVyCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2RlcGVuZGVu Y2llcy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9kZXBlbmRlbmNpZXMuYwppbmRleCBlYzI2 YTI0MjdlMi4uZGI0MjRkNDhkMjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3Mv ZGVwZW5kZW5jaWVzLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9kZXBlbmRlbmNpZXMu YwpAQCAtMzM3LDYgKzMzNywxMCBAQCBkZXBlbmRlbmN5X2RlZ3JlZShTdGF0c0J1aWxkRGF0YSAq ZGF0YSwgaW50IGssIEF0dHJOdW1iZXIgKmRlcGVuZGVuY3kpCiAJcmV0dXJuIChuX3N1cHBvcnRp bmdfcm93cyAqIDEuMCAvIGRhdGEtPm51bXJvd3MpOwogfQogCisKK3ZvaWQKK2ZyZWVfcGdfZGVw ZW5kZW5jaWVzKE1WRGVwZW5kZW5jaWVzICpkZXBlbmRlbmNpZXMpOworCiAvKgogICogZGV0ZWN0 cyBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGdyb3VwcyBvZiBjb2x1bW5zCiAgKgpA QCAtOTA5LDYgKzkxMyw1NSBAQCBkZXBlbmRlbmNpZXNfc2NhbGFyKHZvaWQgKnN0YXRlLCBjaGFy ICp0b2tlbiwgSnNvblRva2VuVHlwZSB0b2tlbnR5cGUpCiAJcmV0dXJuIEpTT05fU1VDQ0VTUzsK IH0KIAorLyoKKyAqIFZhbGlkYXRlIGFuIE1WRGVwZW5kZW5jaWVzIGFnYWluc3QgdGhlIGV4dGVu ZGVkIHN0YXRpc3RpY3Mgb2JqZWN0IGRlZmluaXRpb24uCisgKgorICogRXZlcnkgTVZEZXBlbmRl bmNpZXMgbXVzdCBiZSBjaGVja2VkIHRvIGVuc3VyZSB0aGF0IHRoZSBhdHRudW1zIGluIHRoZQor ICogYXR0cmlidXRlcyBsaXN0IGNvcnJlc3BvbmQgdG8gYXR0bnVtcy9leHByZXNzaW9ucyBkZWZp bmVkIGJ5IHRoZQorICogZXh0ZW5kZWQgc3RhdGlzdGljcyBvYmplY3QuCisgKgorICogUG9zaXRp dmUgYXR0bnVtcyBhcmUgYXR0cmlidXRlcyB3aGljaCBtdXN0IGJlIGZvdW5kIGluIHRoZSBzdHhr ZXlzLAorICogd2hpbGUgbmVnYXRpdmUgYXR0bnVtcyBjb3JyZXNwb25kIHRvIGFuIGV4cHIgbnVt YmVyLCBzbyB0aGUgYXR0bnVtCisgKiBjYW4ndCBiZSBiZWxvdyAoMCAtIG51bWV4cHJzKS4KKyAq LworYm9vbAorcGdfZGVwZW5kZW5jaWVzX3ZhbGlkYXRlX2RlcHMoTVZEZXBlbmRlbmNpZXMgKmRl cGVuZGVuY2llcywgaW50MnZlY3RvciAqc3R4a2V5cywgaW50IG51bWV4cHJzLCBpbnQgZWxldmVs KQoreworCWludAkJYXR0bnVtX2V4cHJfbG93Ym91bmQgPSAwIC0gbnVtZXhwcnM7CisKKwlmb3Ig KGludCBpID0gMDsgaSA8IGRlcGVuZGVuY2llcy0+bmRlcHM7IGkrKykKKwl7CisJCU1WRGVwZW5k ZW5jeSAqZGVwID0gZGVwZW5kZW5jaWVzLT5kZXBzW2ldOworCisJCWZvciAoaW50IGogPSAwOyBq IDwgZGVwLT5uYXR0cmlidXRlczsgaisrKQorCQl7CisJCQlBdHRyTnVtYmVyCWF0dG51bSA9IGRl cC0+YXR0cmlidXRlc1tqXTsKKwkJCWJvb2wJCW9rID0gZmFsc2U7CisKKwkJCWlmIChhdHRudW0g PiAwKQorCQkJeworCQkJCWZvciAoaW50IGsgPSAwOyBrIDwgc3R4a2V5cy0+ZGltMTsgaysrKQor CQkJCQlpZiAoYXR0bnVtID09IHN0eGtleXMtPnZhbHVlc1trXSkKKwkJCQkJeworCQkJCQkJb2sg PSB0cnVlOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKChhdHRudW0g PCAwKSAmJiAoYXR0bnVtID49IGF0dG51bV9leHByX2xvd2JvdW5kKSkKKwkJCQlvayA9IHRydWU7 CisKKwkJCWlmICghb2spCisJCQl7CisJCQkJZXJlcG9ydChlbGV2ZWwsCisJCQkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiksCisJCQkJCQllcnJtc2coInBn X2RlcGVuZGVuY2llczogaW52YWxpZCBhdHRudW0gZm9yIHRoaXMgc3RhdGlzdGljcyBvYmplY3Q6 ICVkIiwgYXR0bnVtKSkpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1 cm4gdHJ1ZTsKK30KKwogLyoKICAqIHBnX2RlcGVuZGVuY2llc19pbgkJLSBpbnB1dCByb3V0aW5l IGZvciB0eXBlIHBnX2RlcGVuZGVuY2llcy4KICAqCkBAIC05OTEsNiArMTA0NCwxOCBAQCBwZ19k ZXBlbmRlbmNpZXNfaW4oUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fTlVMTCgpOwkJCS8q IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIH0KIAorLyoKKyAqIEZyZWUgYWxsb2NhdGlvbnMgb2Yg YW4gTVZORGlzdGluY3QKKyAqLwordm9pZAorZnJlZV9wZ19kZXBlbmRlbmNpZXMoTVZEZXBlbmRl bmNpZXMgKmRlcGVuZGVuY2llcykKK3sKKwlmb3IgKGludCBpID0gMDsgaSA8IGRlcGVuZGVuY2ll cy0+bmRlcHM7IGkrKykKKwkJcGZyZWUoZGVwZW5kZW5jaWVzLT5kZXBzW2ldKTsKKworCXBmcmVl KGRlcGVuZGVuY2llcyk7Cit9CisKIC8qCiAgKiBwZ19kZXBlbmRlbmNpZXMJCS0gb3V0cHV0IHJv dXRpbmUgZm9yIHR5cGUgcGdfZGVwZW5kZW5jaWVzLgogICovCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNz L2V4dGVuZGVkX3N0YXRzLmMKaW5kZXggYThiNjNlYzA4ODQuLjRjMDEzNDZhYWE0IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2V4dGVuZGVkX3N0YXRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RhdGlzdGljcy9leHRlbmRlZF9zdGF0cy5jCkBAIC0xOCwxMSArMTgsMTUgQEAKIAog I2luY2x1ZGUgImFjY2Vzcy9kZXRvYXN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCisj aW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgorI2luY2x1ZGUgImFjY2Vzcy9odHVwLmgiCiAjaW5j bHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgog I2luY2x1ZGUgImNhdGFsb2cvaW5kZXhpbmcuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxh dGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljX2V4dC5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfc3RhdGlzdGljX2V4dF9kYXRhLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190 eXBlX2QuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKICNpbmNsdWRlICJjb21tYW5k cy9wcm9ncmVzcy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCkBAIC0zMyw2ICsz Nyw3IEBACiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFj dXVtLmgiCiAjaW5jbHVkZSAic3RhdGlzdGljcy9leHRlbmRlZF9zdGF0c19pbnRlcm5hbC5oIgor I2luY2x1ZGUgInN0YXRpc3RpY3Mvc3RhdF91dGlscy5oIgogI2luY2x1ZGUgInN0YXRpc3RpY3Mv c3RhdGlzdGljcy5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2Fy cmF5LmgiCkBAIC03Miw2ICs3Nyw3MSBAQCB0eXBlZGVmIHN0cnVjdCBTdGF0RXh0RW50cnkKIAlM aXN0CSAgICpleHByczsJCQkvKiBleHByZXNzaW9ucyAqLwogfSBTdGF0RXh0RW50cnk7CiAKK2Vu dW0gZXh0ZW5kZWRfc3RhdHNfYXJnbnVtCit7CisJU1RBVFNDSEVNQV9BUkcgPSAwLAorCVNUQVRO QU1FX0FSRywKKwlJTkhFUklURURfQVJHLAorCU5ESVNUSU5DVF9BUkcsCisJREVQRU5ERU5DSUVT X0FSRywKKwlNT1NUX0NPTU1PTl9WQUxTX0FSRywKKwlNT1NUX0NPTU1PTl9WQUxfTlVMTFNfQVJH LAorCU1PU1RfQ09NTU9OX0ZSRVFTX0FSRywKKwlNT1NUX0NPTU1PTl9CQVNFX0ZSRVFTX0FSRywK KwlFWFBSRVNTSU9OU19BUkcsCisJTlVNX0VYVEVOREVEX1NUQVRTX0FSR1MKK307CisKK3N0YXRp YyBzdHJ1Y3QgU3RhdHNBcmdJbmZvIGV4dGFyZ2luZm9bXSA9Cit7CisJW1NUQVRTQ0hFTUFfQVJH XSA9IHsic3RhdGlzdGljc19zY2hlbWFuYW1lIiwgUkVHTkFNRVNQQUNFT0lEfSwKKwlbU1RBVE5B TUVfQVJHXSA9IHsic3RhdGlzdGljc19uYW1lIiwgTkFNRU9JRH0sCisJW0lOSEVSSVRFRF9BUkdd ID0geyJpbmhlcml0ZWQiLCBCT09MT0lEfSwKKwlbTkRJU1RJTkNUX0FSR10gPSB7Im5fZGlzdGlu Y3QiLCBQR19ORElTVElOQ1RPSUR9LAorCVtERVBFTkRFTkNJRVNfQVJHXSA9IHsiZGVwZW5kZW5j aWVzIiwgUEdfREVQRU5ERU5DSUVTT0lEfSwKKwlbTU9TVF9DT01NT05fVkFMU19BUkddID0geyJt b3N0X2NvbW1vbl92YWxzIiwgVEVYVEFSUkFZT0lEfSwKKwlbTU9TVF9DT01NT05fVkFMX05VTExT X0FSR10gPSB7Im1vc3RfY29tbW9uX3ZhbF9udWxscyIsIEJPT0xBUlJBWU9JRH0sCisJW01PU1Rf Q09NTU9OX0ZSRVFTX0FSR10gPSB7Im1vc3RfY29tbW9uX2ZyZXFzIiwgRkxPQVQ4QVJSQVlPSUR9 LAorCVtNT1NUX0NPTU1PTl9CQVNFX0ZSRVFTX0FSR10gPSB7Im1vc3RfY29tbW9uX2Jhc2VfZnJl cXMiLCBGTE9BVDhBUlJBWU9JRH0sCisJW0VYUFJFU1NJT05TX0FSR10gPSB7ImV4cHJzIiwgVEVY VEFSUkFZT0lEfSwKKwlbTlVNX0VYVEVOREVEX1NUQVRTX0FSR1NdID0gezB9Cit9OworCisvKgor ICogTk9URTogdGhlIFJBTkdFX0xFTkdUSCAmIFJBTkdFX0JPVU5EUyBzdGF0cyBhcmUgbm90IHll dCByZWZsZWN0ZWQgaW4gYW55CisgKiB2ZXJzaW9uIG9mIHBnX3N0YXRfZXh0X2V4cHJzLgorICov CitlbnVtIGV4dGVuZGVkX3N0YXRzX2V4cHJzX2VsZW1lbnQKK3sKKwlOVUxMX0ZSQUNfRUxFTSA9 IDAsCisJQVZHX1dJRFRIX0VMRU0sCisJTl9ESVNUSU5DVF9FTEVNLAorCU1PU1RfQ09NTU9OX1ZB TFNfRUxFTSwKKwlNT1NUX0NPTU1PTl9GUkVRU19FTEVNLAorCUhJU1RPR1JBTV9CT1VORFNfRUxF TSwKKwlDT1JSRUxBVElPTl9FTEVNLAorCU1PU1RfQ09NTU9OX0VMRU1TX0VMRU0sCisJTU9TVF9D T01NT05fRUxFTV9GUkVRU19FTEVNLAorCUVMRU1fQ09VTlRfSElTVE9HUkFNX0VMRU0sCisJTlVN X0FUVFJJQlVURV9TVEFUU19FTEVNUworfTsKKworc3RhdGljIHN0cnVjdCBTdGF0c0FyZ0luZm8g ZXh0ZXhwcmFyZ2luZm9bXSA9Cit7CisJW05VTExfRlJBQ19FTEVNXSA9IHsibnVsbF9mcmFjIiwg RkxPQVQ0T0lEfSwKKwlbQVZHX1dJRFRIX0VMRU1dID0geyJhdmdfd2lkdGgiLCBJTlQ0T0lEfSwK KwlbTl9ESVNUSU5DVF9FTEVNXSA9IHsibl9kaXN0aW5jdCIsIEZMT0FUNE9JRH0sCisJW01PU1Rf Q09NTU9OX1ZBTFNfRUxFTV0gPSB7Im1vc3RfY29tbW9uX3ZhbHMiLCBURVhUT0lEfSwKKwlbTU9T VF9DT01NT05fRlJFUVNfRUxFTV0gPSB7Im1vc3RfY29tbW9uX2ZyZXFzIiwgRkxPQVQ0QVJSQVlP SUR9LAorCVtISVNUT0dSQU1fQk9VTkRTX0VMRU1dID0geyJoaXN0b2dyYW1fYm91bmRzIiwgVEVY VE9JRH0sCisJW0NPUlJFTEFUSU9OX0VMRU1dID0geyJjb3JyZWxhdGlvbiIsIEZMT0FUNE9JRH0s CisJW01PU1RfQ09NTU9OX0VMRU1TX0VMRU1dID0geyJtb3N0X2NvbW1vbl9lbGVtcyIsIFRFWFRP SUR9LAorCVtNT1NUX0NPTU1PTl9FTEVNX0ZSRVFTX0VMRU1dID0geyJtb3N0X2NvbW1vbl9lbGVt X2ZyZXFzIiwgRkxPQVQ0QVJSQVlPSUR9LAorCVtFTEVNX0NPVU5UX0hJU1RPR1JBTV9FTEVNXSA9 IHsiZWxlbV9jb3VudF9oaXN0b2dyYW0iLCBGTE9BVDRBUlJBWU9JRH0sCisJW05VTV9BVFRSSUJV VEVfU1RBVFNfRUxFTVNdID0gezB9Cit9OworCitzdGF0aWMgYm9vbCBleHRlbmRlZF9zdGF0aXN0 aWNzX3VwZGF0ZShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgaW50IGVsZXZlbCk7CiAKIHN0YXRp YyBMaXN0ICpmZXRjaF9zdGF0ZW50cmllc19mb3JfcmVsYXRpb24oUmVsYXRpb24gcGdfc3RhdGV4 dCwgT2lkIHJlbGlkKTsKIHN0YXRpYyBWYWNBdHRyU3RhdHMgKipsb29rdXBfdmFyX2F0dHJfc3Rh dHMoQml0bWFwc2V0ICphdHRycywgTGlzdCAqZXhwcnMsCkBAIC05OSw2ICsxNjksMjggQEAgc3Rh dGljIFN0YXRzQnVpbGREYXRhICptYWtlX2J1aWxkX2RhdGEoUmVsYXRpb24gcmVsLCBTdGF0RXh0 RW50cnkgKnN0YXQsCiAJCQkJCQkJCQkgICBpbnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLAog CQkJCQkJCQkJICAgVmFjQXR0clN0YXRzICoqc3RhdHMsIGludCBzdGF0dGFyZ2V0KTsKIAorc3Rh dGljIEhlYXBUdXBsZSBnZXRfcGdfc3RhdGlzdGljX2V4dChSZWxhdGlvbiBwZ19zdGV4dCwgT2lk IG5zcG9pZCwgTmFtZSBzdHhuYW1lKTsKK3N0YXRpYyBib29sIGRlbGV0ZV9wZ19zdGF0aXN0aWNf ZXh0X2RhdGEoT2lkIHN0eG9pZCwgYm9vbCBpbmhlcml0ZWQpOworCit0eXBlZGVmIHN0cnVjdAor eworCWJvb2wJCW5kaXN0aW5jdDsKKwlib29sCQlkZXBlbmRlbmNpZXM7CisJYm9vbAkJbWN2Owor CWJvb2wJCWV4cHJlc3Npb25zOworfQkJCXN0YWtpbmRGbGFnczsKKworc3RhdGljIHZvaWQgZXhw YW5kX3N0eGtpbmQoSGVhcFR1cGxlIHR1cCwgc3Rha2luZEZsYWdzICogZW5hYmxlZCk7CitzdGF0 aWMgdm9pZCB1cHNlcnRfcGdfc3RhdGlzdGljX2V4dF9kYXRhKERhdHVtICp2YWx1ZXMsIGJvb2wg Km51bGxzLCBib29sICpyZXBsYWNlcyk7CitzdGF0aWMgYm9vbCBjaGVja19tY3ZsaXN0X2FycmF5 KEFycmF5VHlwZSAqYXJyLCBpbnQgYXJnaW5kZXgsCisJCQkJCQkJCWludCByZXF1aXJlZF9uZGlt c3MsIGludCBtY3ZfbGVuZ3RoLAorCQkJCQkJCQlpbnQgZWxldmVsKTsKK3N0YXRpYyBEYXR1bSBp bXBvcnRfZXhwcmVzc2lvbnMoUmVsYXRpb24gcGdzZCwgaW50IGVsZXZlbCwgaW50IG51bWV4cHJz LAorCQkJCQkJCQlPaWQgKmF0dHR5cGlkcywgaW50MzIgKmF0dHR5cG1vZHMsCisJCQkJCQkJCU9p ZCAqYXR0dHlwY29sbHMsIEFycmF5VHlwZSAqZXhwcnNfYXJyKTsKK3N0YXRpYyBib29sIHRleHRf dG9fZmxvYXQ0KERhdHVtIGlucHV0LCBEYXR1bSAqb3V0cHV0KTsKK3N0YXRpYyBib29sIHRleHRf dG9faW50NChEYXR1bSBpbnB1dCwgRGF0dW0gKm91dHB1dCk7CisKIAogLyoKICAqIENvbXB1dGUg cmVxdWVzdGVkIGV4dGVuZGVkIHN0YXRzLCB1c2luZyB0aGUgcm93cyBzYW1wbGVkIGZvciB0aGUg cGxhaW4KQEAgLTI2MzEsMyArMjcyMywxMDEwIEBAIG1ha2VfYnVpbGRfZGF0YShSZWxhdGlvbiBy ZWwsIFN0YXRFeHRFbnRyeSAqc3RhdCwgaW50IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywKIAog CXJldHVybiByZXN1bHQ7CiB9CisKK3N0YXRpYyBIZWFwVHVwbGUKK2dldF9wZ19zdGF0aXN0aWNf ZXh0KFJlbGF0aW9uIHBnX3N0ZXh0LCBPaWQgbnNwb2lkLCBOYW1lIHN0eG5hbWUpCit7CisJU2Nh bktleURhdGEga2V5WzJdOworCVN5c1NjYW5EZXNjIHNjYW47CisJSGVhcFR1cGxlCXR1cDsKKwlP aWQJCQlzdHhvaWQgPSBJbnZhbGlkT2lkOworCisJU2NhbktleUluaXQoJmtleVswXSwKKwkJCQlB bnVtX3BnX3N0YXRpc3RpY19leHRfc3R4bmFtZSwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIs CisJCQkJRl9OQU1FRVEsCisJCQkJTmFtZUdldERhdHVtKHN0eG5hbWUpKTsKKwlTY2FuS2V5SW5p dCgma2V5WzFdLAorCQkJCUFudW1fcGdfc3RhdGlzdGljX2V4dF9zdHhuYW1lc3BhY2UsCisJCQkJ QlRFcXVhbFN0cmF0ZWd5TnVtYmVyLAorCQkJCUZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1 bShuc3BvaWQpKTsKKworCS8qCisJICogVHJ5IHRvIGZpbmQgbWF0Y2hpbmcgcGdfc3RhdGlzdGlj X2V4dCByb3cuCisJICovCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19zdGV4dCwKKwkJ CQkJCQkgIFN0YXRpc3RpY0V4dE5hbWVJbmRleElkLAorCQkJCQkJCSAgdHJ1ZSwKKwkJCQkJCQkg IE5VTEwsCisJCQkJCQkJICAyLAorCQkJCQkJCSAga2V5KTsKKworCS8qIFVuaXF1ZSBpbmRleCwg ZWl0aGVyIHdlIGdldCBhIHR1cGxlIG9yIHdlIGRvbid0LiAqLworCXR1cCA9IHN5c3RhYmxlX2dl dG5leHQoc2Nhbik7CisKKwlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQlzdHhvaWQgPSAo KEZvcm1fcGdfc3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHR1cCkpLT5vaWQ7CisKKwlzeXN0YWJs ZV9lbmRzY2FuKHNjYW4pOworCisJaWYgKCFPaWRJc1ZhbGlkKHN0eG9pZCkpCisJCXJldHVybiBO VUxMOworCisJcmV0dXJuIFNlYXJjaFN5c0NhY2hlQ29weTEoU1RBVEVYVE9JRCwgT2JqZWN0SWRH ZXREYXR1bShzdHhvaWQpKTsKK30KKworLyoKKyAqIERlY29kZSB0aGUgc3R4a2luZCBjb2x1bW4g c28gdGhhdCB3ZSBrbm93IHdoaWNoIHN0YXRzIHR5cGVzIHRvIGV4cGVjdC4KKyAqLworc3RhdGlj IHZvaWQKK2V4cGFuZF9zdHhraW5kKEhlYXBUdXBsZSB0dXAsIHN0YWtpbmRGbGFncyAqIGVuYWJs ZWQpCit7CisJRGF0dW0JCWRhdHVtOworCUFycmF5VHlwZSAgKmFycjsKKwljaGFyCSAgICpraW5k czsKKworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyTm90TnVsbChTVEFURVhUT0lELAorCQkJCQkJ CQkgICB0dXAsCisJCQkJCQkJCSAgIEFudW1fcGdfc3RhdGlzdGljX2V4dF9zdHhraW5kKTsKKwlh cnIgPSBEYXR1bUdldEFycmF5VHlwZVAoZGF0dW0pOworCWlmIChBUlJfTkRJTShhcnIpICE9IDEg fHwgQVJSX0hBU05VTEwoYXJyKSB8fCBBUlJfRUxFTVRZUEUoYXJyKSAhPSBDSEFST0lEKQorCQll bG9nKEVSUk9SLCAic3R4a2luZCBpcyBub3QgYSAxLUQgY2hhciBhcnJheSIpOworCisJa2luZHMg PSAoY2hhciAqKSBBUlJfREFUQV9QVFIoYXJyKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgQVJS X0RJTVMoYXJyKVswXTsgaSsrKQorCQlpZiAoa2luZHNbaV0gPT0gU1RBVFNfRVhUX05ESVNUSU5D VCkKKwkJCWVuYWJsZWQtPm5kaXN0aW5jdCA9IHRydWU7CisJCWVsc2UgaWYgKGtpbmRzW2ldID09 IFNUQVRTX0VYVF9ERVBFTkRFTkNJRVMpCisJCQllbmFibGVkLT5kZXBlbmRlbmNpZXMgPSB0cnVl OworCQllbHNlIGlmIChraW5kc1tpXSA9PSBTVEFUU19FWFRfTUNWKQorCQkJZW5hYmxlZC0+bWN2 ID0gdHJ1ZTsKKwkJZWxzZSBpZiAoa2luZHNbaV0gPT0gU1RBVFNfRVhUX0VYUFJFU1NJT05TKQor CQkJZW5hYmxlZC0+ZXhwcmVzc2lvbnMgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZAordXBzZXJ0 X3BnX3N0YXRpc3RpY19leHRfZGF0YShEYXR1bSAqdmFsdWVzLCBib29sICpudWxscywgYm9vbCAq cmVwbGFjZXMpCit7CisJUmVsYXRpb24JcGdfc3RleHRkYXRhOworCUhlYXBUdXBsZQlzdHhkdHVw OworCUhlYXBUdXBsZQluZXd0dXA7CisKKwlwZ19zdGV4dGRhdGEgPSB0YWJsZV9vcGVuKFN0YXRp c3RpY0V4dERhdGFSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXN0eGR0dXAgPSBT ZWFyY2hTeXNDYWNoZTIoU1RBVEVYVERBVEFTVFhPSUQsCisJCQkJCQkJICB2YWx1ZXNbQW51bV9w Z19zdGF0aXN0aWNfZXh0X2RhdGFfc3R4b2lkIC0gMV0sCisJCQkJCQkJICB2YWx1ZXNbQW51bV9w Z19zdGF0aXN0aWNfZXh0X2RhdGFfc3R4ZGluaGVyaXQgLSAxXSk7CisKKwlpZiAoSGVhcFR1cGxl SXNWYWxpZChzdHhkdHVwKSkKKwl7CisJCW5ld3R1cCA9IGhlYXBfbW9kaWZ5X3R1cGxlKHN0eGR0 dXAsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0RGVzY3IocGdfc3RleHRkYXRhKSwKKwkJCQkJCQkJ ICAgdmFsdWVzLAorCQkJCQkJCQkgICBudWxscywKKwkJCQkJCQkJICAgcmVwbGFjZXMpOworCQlD YXRhbG9nVHVwbGVVcGRhdGUocGdfc3RleHRkYXRhLCAmbmV3dHVwLT50X3NlbGYsIG5ld3R1cCk7 CisJCVJlbGVhc2VTeXNDYWNoZShzdHhkdHVwKTsKKwl9CisJZWxzZQorCXsKKwkJbmV3dHVwID0g aGVhcF9mb3JtX3R1cGxlKFJlbGF0aW9uR2V0RGVzY3IocGdfc3RleHRkYXRhKSwgdmFsdWVzLCBu dWxscyk7CisJCUNhdGFsb2dUdXBsZUluc2VydChwZ19zdGV4dGRhdGEsIG5ld3R1cCk7CisJfQor CisJaGVhcF9mcmVldHVwbGUobmV3dHVwKTsKKworCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7 CisKKwl0YWJsZV9jbG9zZShwZ19zdGV4dGRhdGEsIFJvd0V4Y2x1c2l2ZUxvY2spOworfQorCisv KgorICogSW5zZXJ0IG9yIFVwZGF0ZSBFeHRlbmRlZCBTdGF0aXN0aWNzCisgKgorICogTWFqb3Ig ZXJyb3JzLCBzdWNoIGFzIHRoZSB0YWJsZSBub3QgZXhpc3RpbmcsIHRoZSBzdGF0aXN0aWNzIG9i amVjdCBub3QKKyAqIGV4aXN0aW5nLCBvciBhIHBlcm1pc3Npb25zIGZhaWx1cmUgYXJlIGFsd2F5 cyByZXBvcnRlZCBhdCBFUlJPUi4gT3RoZXIKKyAqIGVycm9ycywgc3VjaCBhcyBhIGNvbnZlcnNp b24gZmFpbHVyZSBvbiBvbmUgc3RhdGlzdGljIGtpbmQsIGFyZSByZXBvcnRlZAorICogYXQgJ2Vs ZXZlbCcsIGFuZCBvdGhlciBzdGF0aXN0aWMga2luZHMgbWF5IHN0aWxsIGJlIHVwZGF0ZWQuCisg Ki8KK3N0YXRpYyBib29sCitleHRlbmRlZF9zdGF0aXN0aWNzX3VwZGF0ZShGdW5jdGlvbkNhbGxJ bmZvIGZjaW5mbywgaW50IGVsZXZlbCkKK3sKKwlPaWQJCQluc3BvaWQ7CisJTmFtZQkJc3R4bmFt ZTsKKwlib29sCQlpbmhlcml0ZWQ7CisJUmVsYXRpb24JcGdfc3RleHQ7CisJSGVhcFR1cGxlCXR1 cCA9IE5VTEw7CisKKwlzdGFraW5kRmxhZ3MgZW5hYmxlZDsKKwlzdGFraW5kRmxhZ3MgaGFzOwor CisJRm9ybV9wZ19zdGF0aXN0aWNfZXh0IHN0eGZvcm07CisKKwlEYXR1bQkJdmFsdWVzW05hdHRz X3BnX3N0YXRpc3RpY19leHRfZGF0YV07CisJYm9vbAkJbnVsbHNbTmF0dHNfcGdfc3RhdGlzdGlj X2V4dF9kYXRhXTsKKwlib29sCQlyZXBsYWNlc1tOYXR0c19wZ19zdGF0aXN0aWNfZXh0X2RhdGFd OworCisJYm9vbAkJc3VjY2VzcyA9IHRydWU7CisKKwlEYXR1bQkJZXhwcmRhdHVtOworCWJvb2wJ CWlzbnVsbDsKKwlMaXN0CSAgICpleHBycyA9IE5JTDsKKwlpbnQJCQludW1hdHRudW1zID0gMDsK KwlpbnQJCQludW1leHBycyA9IDA7CisJaW50CQkJbnVtYXR0cnMgPSAwOworCisJLyogYXJyYXlz IG9mIHR5cGUgaW5mbywgaWYgd2UgbmVlZCB0aGVtICovCisJT2lkCQkgICAqYXR0dHlwaWRzID0g TlVMTDsKKwlpbnQzMgkgICAqYXR0dHlwbW9kcyA9IE5VTEw7CisJT2lkCQkgICAqYXR0dHlwY29s bHMgPSBOVUxMOworCisJbWVtc2V0KG51bGxzLCBmYWxzZSwgc2l6ZW9mKG51bGxzKSk7CisJbWVt c2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVlcykpOworCW1lbXNldChyZXBsYWNlcywgMCwgc2l6 ZW9mKHJlcGxhY2VzKSk7CisJbWVtc2V0KCZlbmFibGVkLCAwLCBzaXplb2YoZW5hYmxlZCkpOwor CisJaGFzLm1jdiA9ICghUEdfQVJHSVNOVUxMKE1PU1RfQ09NTU9OX1ZBTFNfQVJHKSAmJgorCQkJ ICAgIVBHX0FSR0lTTlVMTChNT1NUX0NPTU1PTl9WQUxfTlVMTFNfQVJHKSAmJgorCQkJICAgIVBH X0FSR0lTTlVMTChNT1NUX0NPTU1PTl9GUkVRU19BUkcpICYmCisJCQkgICAhUEdfQVJHSVNOVUxM KE1PU1RfQ09NTU9OX0JBU0VfRlJFUVNfQVJHKSk7CisJaGFzLm5kaXN0aW5jdCA9ICFQR19BUkdJ U05VTEwoTkRJU1RJTkNUX0FSRyk7CisJaGFzLmRlcGVuZGVuY2llcyA9ICFQR19BUkdJU05VTEwo REVQRU5ERU5DSUVTX0FSRyk7CisJaGFzLmV4cHJlc3Npb25zID0gIVBHX0FSR0lTTlVMTChFWFBS RVNTSU9OU19BUkcpOworCisJaWYgKFJlY292ZXJ5SW5Qcm9ncmVzcygpKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RB VEUpLAorCQkJCSBlcnJtc2coInJlY292ZXJ5IGlzIGluIHByb2dyZXNzIiksCisJCQkJIGVycmhp bnQoIlN0YXRpc3RpY3MgY2Fubm90IGJlIG1vZGlmaWVkIGR1cmluZyByZWNvdmVyeS4iKSkpOwor CisJc3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgZXh0YXJnaW5mbywgU1RBVFNDSEVN QV9BUkcpOworCW5zcG9pZCA9IFBHX0dFVEFSR19PSUQoU1RBVFNDSEVNQV9BUkcpOworCXN0YXRz X2NoZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8sIGV4dGFyZ2luZm8sIFNUQVROQU1FX0FSRyk7CisJ c3R4bmFtZSA9IFBHX0dFVEFSR19OQU1FKFNUQVROQU1FX0FSRyk7CisJc3RhdHNfY2hlY2tfcmVx dWlyZWRfYXJnKGZjaW5mbywgZXh0YXJnaW5mbywgSU5IRVJJVEVEX0FSRyk7CisJaW5oZXJpdGVk ID0gUEdfR0VUQVJHX05BTUUoSU5IRVJJVEVEX0FSRyk7CisKKwlwZ19zdGV4dCA9IHRhYmxlX29w ZW4oU3RhdGlzdGljRXh0UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJdHVwID0gZ2V0 X3BnX3N0YXRpc3RpY19leHQocGdfc3RleHQsIG5zcG9pZCwgc3R4bmFtZSk7CisKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQodHVwKSkKKwl7CisJCXRhYmxlX2Nsb3NlKHBnX3N0ZXh0LCBSb3dFeGNs dXNpdmVMb2NrKTsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVG SU5FRF9PQkpFQ1QpLAorCQkJCSBlcnJtc2coIkV4dGVuZGVkIFN0YXRpc3RpY3MgT2JqZWN0IFwi JXNcIi5cIiVzXCIgbm90IGZvdW5kLiIsCisJCQkJCQlnZXRfbmFtZXNwYWNlX25hbWUobnNwb2lk KSwKKwkJCQkJCU5hbWVTdHIoKnN0eG5hbWUpKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ c3R4Zm9ybSA9IChGb3JtX3BnX3N0YXRpc3RpY19leHQpIEdFVFNUUlVDVCh0dXApOworCWV4cGFu ZF9zdHhraW5kKHR1cCwgJmVuYWJsZWQpOworCW51bWF0dG51bXMgPSBzdHhmb3JtLT5zdHhrZXlz LmRpbTE7CisKKwkvKiBkZWNvZGUgZXhwcmVzc2lvbiAoaWYgYW55KSAqLworCWV4cHJkYXR1bSA9 IFN5c0NhY2hlR2V0QXR0cihTVEFURVhUT0lELAorCQkJCQkJCQl0dXAsCisJCQkJCQkJCUFudW1f cGdfc3RhdGlzdGljX2V4dF9zdHhleHBycywKKwkJCQkJCQkJJmlzbnVsbCk7CisKKwlpZiAoIWlz bnVsbCkKKwl7CisJCWNoYXIJICAgKnM7CisKKwkJcyA9IFRleHREYXR1bUdldENTdHJpbmcoZXhw cmRhdHVtKTsKKwkJZXhwcnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUocyk7CisJCXBmcmVlKHMp OworCisJCS8qCisJCQkqIFJ1biB0aGUgZXhwcmVzc2lvbnMgdGhyb3VnaCBldmFsX2NvbnN0X2V4 cHJlc3Npb25zLiBUaGlzIGlzIG5vdAorCQkJKiBqdXN0IGFuIG9wdGltaXphdGlvbiwgYnV0IGlz IG5lY2Vzc2FyeSwgYmVjYXVzZSB0aGUgcGxhbm5lcgorCQkJKiB3aWxsIGJlIGNvbXBhcmluZyB0 aGVtIHRvIHNpbWlsYXJseS1wcm9jZXNzZWQgcXVhbCBjbGF1c2VzLCBhbmQKKwkJCSogbWF5IGZh aWwgdG8gZGV0ZWN0IHZhbGlkIG1hdGNoZXMgd2l0aG91dCB0aGlzLiAgV2UgbXVzdCBub3QgdXNl CisJCQkqIGNhbm9uaWNhbGl6ZV9xdWFsLCBob3dldmVyLCBzaW5jZSB0aGVzZSBhcmVuJ3QgcXVh bAorCQkJKiBleHByZXNzaW9ucy4KKwkJCSovCisJCWV4cHJzID0gKExpc3QgKikgZXZhbF9jb25z dF9leHByZXNzaW9ucyhOVUxMLCAoTm9kZSAqKSBleHBycyk7CisKKwkJLyogTWF5IGFzIHdlbGwg Zml4IG9wZnVuY2lkcyB0b28gKi8KKwkJZml4X29wZnVuY2lkcygoTm9kZSAqKSBleHBycyk7CisJ fQorCW51bWV4cHJzID0gbGlzdF9sZW5ndGgoZXhwcnMpOworCW51bWF0dHJzID0gbnVtYXR0bnVt cyArIG51bWV4cHJzOworCisJLyogbG9jayB0YWJsZSAqLworCXN0YXRzX2xvY2tfY2hlY2tfcHJp dmlsZWdlcyhzdHhmb3JtLT5zdHhyZWxpZCk7CisKKwlpZiAoaGFzLm1jdikKKwl7CisJCWlmICgh ZW5hYmxlZC5tY3YpCisJCXsKKwkJCWVyZXBvcnQoZWxldmVsLAorCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiTUNWIHBhcmFtZXRl cnMgXCIlc1wiLCBcIiVzXCIsIFwiJXNcIiwgYW5kIFwiJXNcIiB3ZXJlIGFsbCAiCisJCQkJCQkJ InNwZWNpZmllZCBmb3IgZXh0ZW5kZWQgc3RhdGlzdGljcyBvYmplY3QgdGhhdCBkb2VzIG5vdCBl eHBlY3QgTUNWICIsCisJCQkJCQkJZXh0YXJnaW5mb1tNT1NUX0NPTU1PTl9WQUxTX0FSR10uYXJn bmFtZSwKKwkJCQkJCQlleHRhcmdpbmZvW01PU1RfQ09NTU9OX1ZBTF9OVUxMU19BUkddLmFyZ25h bWUsCisJCQkJCQkJZXh0YXJnaW5mb1tNT1NUX0NPTU1PTl9GUkVRU19BUkddLmFyZ25hbWUsCisJ CQkJCQkJZXh0YXJnaW5mb1tNT1NUX0NPTU1PTl9CQVNFX0ZSRVFTX0FSR10uYXJnbmFtZSkpKTsK KwkJCWhhcy5tY3YgPSBmYWxzZTsKKwkJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJfQorCX0KKwllbHNl CisJeworCQkvKiBUaGUgTUNWIGFyZ3MgbXVzdCBhbGwgYmUgTlVMTCAqLworCQlpZiAoIVBHX0FS R0lTTlVMTChNT1NUX0NPTU1PTl9WQUxTX0FSRykgfHwKKwkJCSFQR19BUkdJU05VTEwoTU9TVF9D T01NT05fVkFMX05VTExTX0FSRykgfHwKKwkJCSFQR19BUkdJU05VTEwoTU9TVF9DT01NT05fRlJF UVNfQVJHKSB8fAorCQkJIVBHX0FSR0lTTlVMTChNT1NUX0NPTU1PTl9CQVNFX0ZSRVFTX0FSRykp CisJCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIk1DViBwYXJhbWV0ZXJzIFwiJXNcIiwgXCIlc1wi LCBcIiVzXCIsIGFuZCBcIiVzXCIgbXVzdCBiZSBhbGwgc3BlY2lmaWVkIGlmIGFueSBhcmUgc3Bl Y2lmaWVkIiwKKwkJCQkJCQlleHRhcmdpbmZvW01PU1RfQ09NTU9OX1ZBTFNfQVJHXS5hcmduYW1l LAorCQkJCQkJCWV4dGFyZ2luZm9bTU9TVF9DT01NT05fVkFMX05VTExTX0FSR10uYXJnbmFtZSwK KwkJCQkJCQlleHRhcmdpbmZvW01PU1RfQ09NTU9OX0ZSRVFTX0FSR10uYXJnbmFtZSwKKwkJCQkJ CQlleHRhcmdpbmZvW01PU1RfQ09NTU9OX0JBU0VfRlJFUVNfQVJHXS5hcmduYW1lKSkpOworCX0K KworCWlmIChoYXMubmRpc3RpbmN0ICYmICFlbmFibGVkLm5kaXN0aW5jdCkKKwl7CisJCWVyZXBv cnQoZWxldmVsLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCSBlcnJtc2coIlBhcmFtZXRlcnMgXCIlc1wiIHdhcyBzcGVjaWZpZWQgZm9yIGV4dGVu ZGVkIHN0YXRpc3RpY3Mgb2JqZWN0ICIKKwkJCQkJCSJ0aGF0IGRvZXMgbm90IGV4cGVjdCBcIiVz XCIiLAorCQkJCQkJZXh0YXJnaW5mb1tORElTVElOQ1RfQVJHXS5hcmduYW1lLAorCQkJCQkJZXh0 YXJnaW5mb1tORElTVElOQ1RfQVJHXS5hcmduYW1lKSkpOworCQloYXMubmRpc3RpbmN0ID0gZmFs c2U7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwl9CisKKwlpZiAoaGFzLmRlcGVuZGVuY2llcyAmJiAh ZW5hYmxlZC5kZXBlbmRlbmNpZXMpCisJeworCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJQYXJhbWV0 ZXJzIFwiJXNcIiB3YXMgc3BlY2lmaWVkIGZvciBleHRlbmRlZCBzdGF0aXN0aWNzIG9iamVjdCAi CisJCQkJCQkidGhhdCBkb2VzIG5vdCBleHBlY3QgXCIlc1wiIiwKKwkJCQkJCWV4dGFyZ2luZm9b REVQRU5ERU5DSUVTX0FSR10uYXJnbmFtZSwKKwkJCQkJCWV4dGFyZ2luZm9bREVQRU5ERU5DSUVT X0FSR10uYXJnbmFtZSkpKTsKKwkJaGFzLmRlcGVuZGVuY2llcyA9IGZhbHNlOworCQlzdWNjZXNz ID0gZmFsc2U7CisJfQorCisJaWYgKGhhcy5leHByZXNzaW9ucyAmJiAhZW5hYmxlZC5leHByZXNz aW9ucykKKwl7CisJCWVyZXBvcnQoZWxldmVsLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIlBhcmFtZXRlcnMgXCIlc1wiIHdhcyBz cGVjaWZpZWQgZm9yIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0ICIKKwkJCQkJCSJ0aGF0IGRv ZXMgbm90IGV4cGVjdCBcIiVzXCIiLAorCQkJCQkJZXh0YXJnaW5mb1tERVBFTkRFTkNJRVNfQVJH XS5hcmduYW1lLAorCQkJCQkJZXh0YXJnaW5mb1tERVBFTkRFTkNJRVNfQVJHXS5hcmduYW1lKSkp OworCQloYXMuZXhwcmVzc2lvbnMgPSBmYWxzZTsKKwkJc3VjY2VzcyA9IGZhbHNlOworCX0KKwor CS8qCisJICogRWl0aGVyIG9mIHRoZXNlIHN0YXRzaXN0aWMgdHlwZXMgcmVxdWlyZXMgdGhhdCB3 ZSBzdXBwbHkKKwkgKiBzZW1pLWZpbGxlZC1vdXQgVmFjQXR0clN0YXRQIGFycmF5LgorCSAqCisJ ICoKKwkgKiBJdCBpcyBub3QgcG9zc2libGUgdG8gdXNlIHRoZSBleGlzdGluZyBsb29rdXBfdmFy X2F0dHJfc3RhdHMoKSBhbmQKKwkgKiBleGFtaW5lX2F0dHJpYnV0ZSgpIGJlY2F1c2UgdGhlc2Ug ZnVuY3Rpb25zIHdpbGwgc2tpcCBhdHRyaWJ1dGVzIGZvcgorCSAqIHdoaWNoIGF0dHN0YXR0YXJn ZXQgaXMgMCwgYW5kIHdlIG1heSBoYXZlIHN0YXRzIHRvIGltcG9ydCBmb3IgdGhvc2UKKwkgKiBh dHRyaWJ1dGVzLgorCSAqLworCWlmIChoYXMubWN2IHx8IGhhcy5leHByZXNzaW9ucykKKwl7CisJ CWF0dHR5cGlkcyA9IHBhbGxvYzAobnVtYXR0cnMgKiBzaXplb2YoT2lkKSk7CisJCWF0dHR5cG1v ZHMgPSBwYWxsb2MwKG51bWF0dHJzICogc2l6ZW9mKGludDMyKSk7CisJCWF0dHR5cGNvbGxzID0g cGFsbG9jMChudW1hdHRycyAqIHNpemVvZihPaWQpKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8 IG51bWF0dG51bXM7IGkrKykKKwkJeworCQkJQXR0ck51bWJlcglhdHRudW0gPSBzdHhmb3JtLT5z dHhrZXlzLnZhbHVlc1tpXTsKKworCQkJT2lkCQkJbHRfb3ByOworCQkJT2lkCQkJZXFfb3ByOwor CQkJY2hhcgkJdHlwZXR5cGU7CisKKwkJCS8qCisJCQkgKiBmZXRjaCBhdHRyaWJ1dGUgZW50cmll cyB0aGUgc2FtZSBhcyBhcmUgZG9uZSBmb3IgYXR0cmlidXRlCisJCQkgKiBzdGF0cworCQkJICov CisJCQlnZXRfYXR0cl9zdGF0X3R5cGUoc3R4Zm9ybS0+c3R4cmVsaWQsCisJCQkJCQkJICAgYXR0 bnVtLAorCQkJCQkJCSAgIGVsZXZlbCwKKwkJCQkJCQkgICAmYXR0dHlwaWRzW2ldLAorCQkJCQkJ CSAgICZhdHR0eXBtb2RzW2ldLAorCQkJCQkJCSAgICZ0eXBldHlwZSwKKwkJCQkJCQkgICAmYXR0 dHlwY29sbHNbaV0sCisJCQkJCQkJICAgJmx0X29wciwKKwkJCQkJCQkgICAmZXFfb3ByKTsKKwkJ fQorCisJCWZvciAoaW50IGkgPSBudW1hdHRudW1zOyBpIDwgbnVtYXR0cnM7IGkrKykKKwkJewor CQkJTm9kZQkgICAqZXhwciA9IGxpc3RfbnRoKGV4cHJzLCBpIC0gbnVtYXR0bnVtcyk7CisKKwkJ CWF0dHR5cGlkc1tpXSA9IGV4cHJUeXBlKGV4cHIpOworCQkJYXR0dHlwbW9kc1tpXSA9IGV4cHJU eXBtb2QoZXhwcik7CisJCQlhdHR0eXBjb2xsc1tpXSA9IGV4cHJDb2xsYXRpb24oZXhwcik7CisK KwkJCS8qCisJCQkgKiBEdXBsaWNhdGUgbG9naWMgZnJvbSBnZXRfYXR0cl9zdGF0X3R5cGUKKwkJ CSAqLworCisJCQkvKgorCQkJICogSWYgaXQncyBhIG11bHRpcmFuZ2UsIHN0ZXAgZG93biB0byB0 aGUgcmFuZ2UgdHlwZSwgYXMgaXMgZG9uZQorCQkJICogYnkgbXVsdGlyYW5nZV90eXBhbmFseXpl KCkuCisJCQkgKi8KKwkJCWlmICh0eXBlX2lzX211bHRpcmFuZ2UoYXR0dHlwaWRzW2ldKSkKKwkJ CQlhdHR0eXBpZHNbaV0gPSBnZXRfbXVsdGlyYW5nZV9yYW5nZShhdHR0eXBpZHNbaV0pOworCisJ CQkvKgorCQkJICogU3BlY2lhbCBjYXNlOiBjb2xsYXRpb24gZm9yIHRzdmVjdG9yIGlzIERFRkFV TFRfQ09MTEFUSU9OX09JRC4KKwkJCSAqIFNlZSBjb21wdXRlX3RzdmVjdG9yX3N0YXRzKCkuCisJ CQkgKi8KKwkJCWlmIChhdHR0eXBpZHNbaV0gPT0gVFNWRUNUT1JPSUQpCisJCQkJYXR0dHlwY29s bHNbaV0gPSBERUZBVUxUX0NPTExBVElPTl9PSUQ7CisKKwkJfQorCX0KKworCS8qIFByaW1hcnkg S2V5OiBjYW5ub3QgYmUgTlVMTCBvciByZXBsYWNlZC4gKi8KKwl2YWx1ZXNbQW51bV9wZ19zdGF0 aXN0aWNfZXh0X2RhdGFfc3R4b2lkIC0gMV0gPSBPYmplY3RJZEdldERhdHVtKHN0eGZvcm0tPm9p ZCk7CisJdmFsdWVzW0FudW1fcGdfc3RhdGlzdGljX2V4dF9kYXRhX3N0eGRpbmhlcml0IC0gMV0g PSBCb29sR2V0RGF0dW0oaW5oZXJpdGVkKTsKKworCWlmIChoYXMubmRpc3RpbmN0KQorCXsKKwkJ RGF0dW0JCQluZGlzdGluY3RfZGF0dW0gPSBQR19HRVRBUkdfREFUVU0oTkRJU1RJTkNUX0FSRyk7 CisJCWJ5dGVhCQkgICAqZGF0YSA9IERhdHVtR2V0Qnl0ZWFQUChuZGlzdGluY3RfZGF0dW0pOwor CQlNVk5EaXN0aW5jdAkgICAqbmRpc3RpbmN0ID0gc3RhdGV4dF9uZGlzdGluY3RfZGVzZXJpYWxp emUoZGF0YSk7CisKKwkJaWYgKHBnX25kaXN0aW5jdF92YWxpZGF0ZV9pdGVtcyhuZGlzdGluY3Qs ICZzdHhmb3JtLT5zdHhrZXlzLCBudW1leHBycywgZWxldmVsKSkKKwkJeworCQkJdmFsdWVzW0Fu dW1fcGdfc3RhdGlzdGljX2V4dF9kYXRhX3N0eGRuZGlzdGluY3QgLSAxXSA9IG5kaXN0aW5jdF9k YXR1bTsKKwkJCXJlcGxhY2VzW0FudW1fcGdfc3RhdGlzdGljX2V4dF9kYXRhX3N0eGRuZGlzdGlu Y3QgLSAxXSA9IHRydWU7CisJCX0KKwkJZWxzZQorCQl7CisJCQludWxsc1tBbnVtX3BnX3N0YXRp c3RpY19leHRfZGF0YV9zdHhkbmRpc3RpbmN0IC0gMV0gPSB0cnVlOworCQkJc3VjY2VzcyA9IGZh bHNlOworCQl9CisKKwkJZnJlZV9wZ19uZGlzdGluY3QobmRpc3RpbmN0KTsKKwl9CisJZWxzZQor CQludWxsc1tBbnVtX3BnX3N0YXRpc3RpY19leHRfZGF0YV9zdHhkbmRpc3RpbmN0IC0gMV0gPSB0 cnVlOworCisJaWYgKGhhcy5kZXBlbmRlbmNpZXMpCisJeworCQlEYXR1bQkJCWRlcGVuZGVuY2ll c19kYXR1bSA9IFBHX0dFVEFSR19EQVRVTShERVBFTkRFTkNJRVNfQVJHKTsKKwkJYnl0ZWEJCSAg ICpkYXRhID0gRGF0dW1HZXRCeXRlYVBQKGRlcGVuZGVuY2llc19kYXR1bSk7CisJCU1WRGVwZW5k ZW5jaWVzICpkZXBlbmRlbmNpZXMgPSBzdGF0ZXh0X2RlcGVuZGVuY2llc19kZXNlcmlhbGl6ZShk YXRhKTsKKworCQlpZiAocGdfZGVwZW5kZW5jaWVzX3ZhbGlkYXRlX2RlcHMoZGVwZW5kZW5jaWVz LCAmc3R4Zm9ybS0+c3R4a2V5cywgbnVtZXhwcnMsIGVsZXZlbCkpCisJCXsKKwkJCXZhbHVlc1tB bnVtX3BnX3N0YXRpc3RpY19leHRfZGF0YV9zdHhkZGVwZW5kZW5jaWVzIC0gMV0gPSBkZXBlbmRl bmNpZXNfZGF0dW07CisJCQlyZXBsYWNlc1tBbnVtX3BnX3N0YXRpc3RpY19leHRfZGF0YV9zdHhk ZGVwZW5kZW5jaWVzIC0gMV0gPSB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJbnVsbHNbQW51 bV9wZ19zdGF0aXN0aWNfZXh0X2RhdGFfc3R4ZGRlcGVuZGVuY2llcyAtIDFdID0gdHJ1ZTsKKwkJ CXN1Y2Nlc3MgPSBmYWxzZTsKKwkJfQorCisJCWZyZWVfcGdfZGVwZW5kZW5jaWVzKGRlcGVuZGVu Y2llcyk7CisJfQorCWVsc2UKKwkJbnVsbHNbQW51bV9wZ19zdGF0aXN0aWNfZXh0X2RhdGFfc3R4 ZGRlcGVuZGVuY2llcyAtIDFdID0gdHJ1ZTsKKworCWlmIChoYXMubWN2KQorCXsKKwkJRGF0dW0J CWRhdHVtOworCQlBcnJheVR5cGUgICptY3ZfYXJyID0gUEdfR0VUQVJHX0FSUkFZVFlQRV9QKE1P U1RfQ09NTU9OX1ZBTFNfQVJHKTsKKwkJQXJyYXlUeXBlICAqbnVsbHNfYXJyID0gUEdfR0VUQVJH X0FSUkFZVFlQRV9QKE1PU1RfQ09NTU9OX1ZBTF9OVUxMU19BUkcpOworCQlBcnJheVR5cGUgICpm cmVxc19hcnIgPSBQR19HRVRBUkdfQVJSQVlUWVBFX1AoTU9TVF9DT01NT05fRlJFUVNfQVJHKTsK KwkJQXJyYXlUeXBlICAqYmFzZV9mcmVxc19hcnIgPSBQR19HRVRBUkdfQVJSQVlUWVBFX1AoTU9T VF9DT01NT05fQkFTRV9GUkVRU19BUkcpOworCQlpbnQJCQluaXRlbXM7CisJCURhdHVtCSAgICpt Y3ZfZWxlbXM7CisJCWJvb2wJICAgKm1jdl9udWxsczsKKwkJaW50CQkJY2hlY2tfbnVtbWN2Owor CisJCS8qCisJCSAqIFRoZSBtY3ZfYXJyIGlzIGFuIGFycmF5IG9mIGFycmF5cyBvZiB0ZXh0LCBh bmQgd2UgdXNlIGl0IGFzIHRoZQorCQkgKiByZWZlcmVuY2UgYXJyYXkgZm9yIGNoZWNraW5nIHRo ZSBsZW5ndGhzIG9mIHRoZSBvdGhlciAzIGFycmF5cy4KKwkJICovCisJCWlmIChBUlJfTkRJTSht Y3ZfYXJyKSAhPSAyKQorCQl7CisJCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIlBhcmFtZXRlcnMg XCIlc1wiIG11c3QgYmUgYSB0ZXh0IGFycmF5IG9mIDIgZGltZW5zaW9ucy4iLAorCQkJCQkJCWV4 dGFyZ2luZm9bTU9TVF9DT01NT05fVkFMU19BUkddLmFyZ25hbWUpKSk7CisJCQlyZXR1cm4gKERh dHVtKSAwOworCQl9CisKKwkJbml0ZW1zID0gQVJSX0RJTVMobWN2X2FycilbMF07CisKKwkJLyog Zml4ZWQgbGVuZ3RoIGFycmF5cyB0aGF0IGNhbm5vdCBjb250YWluIE5VTExzICovCisJCWlmICgh Y2hlY2tfbWN2bGlzdF9hcnJheShudWxsc19hcnIsIE1PU1RfQ09NTU9OX1ZBTF9OVUxMU19BUkcs CisJCQkJCQkJCSAyLCBuaXRlbXMsIGVsZXZlbCkgfHwKKwkJCSFjaGVja19tY3ZsaXN0X2FycmF5 KGZyZXFzX2FyciwgTU9TVF9DT01NT05fRlJFUVNfQVJHLAorCQkJCQkJCQkgMSwgbml0ZW1zLCBl bGV2ZWwpIHx8CisJCQkhY2hlY2tfbWN2bGlzdF9hcnJheShiYXNlX2ZyZXFzX2FyciwgTU9TVF9D T01NT05fQkFTRV9GUkVRU19BUkcsCisJCQkJCQkJCSAxLCBuaXRlbXMsIGVsZXZlbCkpCisJCQly ZXR1cm4gKERhdHVtKSAwOworCisKKwkJZGVjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihtY3ZfYXJy LCBURVhUT0lELCAmbWN2X2VsZW1zLAorCQkJCQkJCQkgICZtY3ZfbnVsbHMsICZjaGVja19udW1t Y3YpOworCisJCUFzc2VydChjaGVja19udW1tY3YgPT0gKG5pdGVtcyAqIG51bWF0dHJzKSk7CisK KwkJZGF0dW0gPSBpbXBvcnRfbWN2bGlzdCh0dXAsIGVsZXZlbCwgbnVtYXR0cnMsCisJCQkJCQkJ ICAgYXR0dHlwaWRzLCBhdHR0eXBtb2RzLCBhdHR0eXBjb2xscywKKwkJCQkJCQkgICBuaXRlbXMs IG1jdl9lbGVtcywgbWN2X251bGxzLAorCQkJCQkJCSAgIChib29sICopIEFSUl9EQVRBX1BUUihu dWxsc19hcnIpLAorCQkJCQkJCSAgIChmbG9hdDggKikgQVJSX0RBVEFfUFRSKGZyZXFzX2Fyciks CisJCQkJCQkJICAgKGZsb2F0OCAqKSBBUlJfREFUQV9QVFIoYmFzZV9mcmVxc19hcnIpKTsKKwor CQl2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfZXh0X2RhdGFfc3R4ZG1jdiAtIDFdID0gZGF0dW07 CisJCXJlcGxhY2VzW0FudW1fcGdfc3RhdGlzdGljX2V4dF9kYXRhX3N0eGRtY3YgLSAxXSA9IHRy dWU7CisJfQorCWVsc2UKKwkJbnVsbHNbQW51bV9wZ19zdGF0aXN0aWNfZXh0X2RhdGFfc3R4ZG1j diAtIDFdID0gdHJ1ZTsKKworCWlmIChoYXMuZXhwcmVzc2lvbnMpCisJeworCQlEYXR1bQkJZGF0 dW07CisJCVJlbGF0aW9uCXBnc2Q7CisKKwkJcGdzZCA9IHRhYmxlX29wZW4oU3RhdGlzdGljUmVs YXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwkJZGF0dW0gPSBpbXBvcnRfZXhwcmVzc2lv bnMocGdzZCwgZWxldmVsLCBudW1leHBycywKKwkJCQkJCQkJICAgJmF0dHR5cGlkc1tudW1hdHRu dW1zXSwgJmF0dHR5cG1vZHNbbnVtYXR0bnVtc10sCisJCQkJCQkJCSAgICZhdHR0eXBjb2xsc1tu dW1hdHRudW1zXSwKKwkJCQkJCQkJICAgUEdfR0VUQVJHX0FSUkFZVFlQRV9QKEVYUFJFU1NJT05T X0FSRykpOworCisJCXRhYmxlX2Nsb3NlKHBnc2QsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJCXZh bHVlc1tBbnVtX3BnX3N0YXRpc3RpY19leHRfZGF0YV9zdHhkZXhwciAtIDFdID0gZGF0dW07CisJ CXJlcGxhY2VzW0FudW1fcGdfc3RhdGlzdGljX2V4dF9kYXRhX3N0eGRleHByIC0gMV0gPSB0cnVl OworCX0KKwllbHNlCisJCW51bGxzW0FudW1fcGdfc3RhdGlzdGljX2V4dF9kYXRhX3N0eGRleHBy IC0gMV0gPSB0cnVlOworCisJdXBzZXJ0X3BnX3N0YXRpc3RpY19leHRfZGF0YSh2YWx1ZXMsIG51 bGxzLCByZXBsYWNlcyk7CisKKwloZWFwX2ZyZWV0dXBsZSh0dXApOworCXRhYmxlX2Nsb3NlKHBn X3N0ZXh0LCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCWlmIChhdHR0eXBpZHMgIT0gTlVMTCkKKwkJ cGZyZWUoYXR0dHlwaWRzKTsKKwlpZiAoYXR0dHlwbW9kcyAhPSBOVUxMKQorCQlwZnJlZShhdHR0 eXBtb2RzKTsKKwlpZiAoYXR0dHlwY29sbHMgIT0gTlVMTCkKKwkJcGZyZWUoYXR0dHlwY29sbHMp OworCXJldHVybiBzdWNjZXNzOworfQorCisvKgorICogQ29uc2lzdGVuY3kgY2hlY2tzIHRvIGVu c3VyZSB0aGF0IG90aGVyIG1jdmxpc3QgYXJyYXlzIGFyZSBpbiBhbGlnbm1lbnQKKyAqIHdpdGgg dGhlIG1jdiBhcnJheS4KKyAqLworc3RhdGljIGJvb2wKK2NoZWNrX21jdmxpc3RfYXJyYXkoQXJy YXlUeXBlICphcnIsIGludCBhcmdpbmRleCwgaW50IHJlcXVpcmVkX25kaW1zLAorCQkJCQlpbnQg bWN2X2xlbmd0aCwgaW50IGVsZXZlbCkKK3sKKwlpZiAoQVJSX05ESU0oYXJyKSAhPSByZXF1aXJl ZF9uZGltcykKKwl7CisJCWVyZXBvcnQoZWxldmVsLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIlBhcmFtZXRlciBcIiVzXCIgbXVz dCBiZSBhbiBhcnJheSBvZiAlZCBkaW1lbnNpb25zLiIsCisJCQkJCQlleHRhcmdpbmZvW2FyZ2lu ZGV4XS5hcmduYW1lLCByZXF1aXJlZF9uZGltcykpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwor CWlmIChhcnJheV9jb250YWluc19udWxscyhhcnIpKQorCXsKKwkJZXJlcG9ydChlbGV2ZWwsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1z ZygiQXJyYXkgXCIlc1wiIGNhbm5vdCBjb250YWluIE5VTExzLiIsCisJCQkJCQlleHRhcmdpbmZv W2FyZ2luZGV4XS5hcmduYW1lKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKEFSUl9E SU1TKGFycilbMF0gIT0gbWN2X2xlbmd0aCkKKwl7CisJCWVyZXBvcnQoZWxldmVsLAorCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIlBh cmFtZXRlcnMgXCIlc1wiIG11c3QgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgZWxlbWVudHMgYXMg XCIlc1wiIiwKKwkJCQkJCWV4dGFyZ2luZm9bYXJnaW5kZXhdLmFyZ25hbWUsCisJCQkJCQlleHRh cmdpbmZvW01PU1RfQ09NTU9OX1ZBTFNfQVJHXS5hcmduYW1lKSkpOworCQlyZXR1cm4gZmFsc2U7 CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBDcmVhdGUgdGhlIHN0eGRleHBycyBk YXR1bSB1c2luZyB0aGUgdXNlciBpbnB1dCBpbiBhbiBhcnJheSBvZiBhcnJheSBvZgorICogdGV4 dCwgcmVmZXJlbmNlZCBhZ2FpbnN0IHRoZSBkYXRhdHlwZXMgZm9yIHRoZSBleHByZXNzaW9ucy4K KyAqLworc3RhdGljIERhdHVtCitpbXBvcnRfZXhwcmVzc2lvbnMoUmVsYXRpb24gcGdzZCwgaW50 IGVsZXZlbCwgaW50IG51bWV4cHJzLAorCQkJCSAgIE9pZCAqYXR0dHlwaWRzLCBpbnQzMiAqYXR0 dHlwbW9kcywKKwkJCQkgICBPaWQgKmF0dHR5cGNvbGxzLCBBcnJheVR5cGUgKmV4cHJzX2FycikK K3sKKwlEYXR1bQkgICAqZXhwcnNfZWxlbXM7CisJYm9vbAkgICAqZXhwcnNfbnVsbHM7CisJaW50 CQkJY2hlY2tfbnVtZXhwcnM7CisJaW50CQkJb2Zmc2V0ID0gMDsKKworCUZtZ3JJbmZvCWFycmF5 X2luX2ZuOworCisJT2lkCQkJcGdzdHlwb2lkID0gZ2V0X3JlbF90eXBlX2lkKFN0YXRpc3RpY1Jl bGF0aW9uSWQpOworCisJQXJyYXlCdWlsZFN0YXRlICphc3RhdGUgPSBOVUxMOworCisKKwlpZiAo QVJSX05ESU0oZXhwcnNfYXJyKSAhPSAyKQorCXsKKwkJZXJlcG9ydChlbGV2ZWwsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiUGFy YW1ldGVyIFwiJXNcIiBtdXN0IGJlIGEgdGV4dCBhcnJheSBvZiAyIGRpbWVuc2lvbnMuIiwKKwkJ CQkJCWV4dGFyZ2luZm9bRVhQUkVTU0lPTlNfQVJHXS5hcmduYW1lKSkpOworCQlyZXR1cm4gKERh dHVtKSAwOworCX0KKworCWlmIChBUlJfRElNUyhleHByc19hcnIpWzBdICE9IG51bWV4cHJzKQor CXsKKwkJZXJlcG9ydChlbGV2ZWwsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiUGFyYW1ldGVyIFwiJXNcIiBtdXN0IGhhdmUgYW4g b3V0ZXIgZGltZW5zaW9uIG9mICVkIGVsZW1lbnRzLiIsCisJCQkJCQlleHRhcmdpbmZvW0VYUFJF U1NJT05TX0FSR10uYXJnbmFtZSwgbnVtZXhwcnMpKSk7CisJCXJldHVybiAoRGF0dW0pIDA7CisJ fQorCWlmIChBUlJfRElNUyhleHByc19hcnIpWzFdICE9IE5VTV9BVFRSSUJVVEVfU1RBVFNfRUxF TVMpCisJeworCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJQYXJhbWV0ZXIgXCIlc1wiIG11c3QgaGF2 ZSBhbiBpbm5lciBkaW1lbnNpb24gb2YgJWQgZWxlbWVudHMuIiwKKwkJCQkJCWV4dGFyZ2luZm9b RVhQUkVTU0lPTlNfQVJHXS5hcmduYW1lLAorCQkJCQkJTlVNX0FUVFJJQlVURV9TVEFUU19FTEVN UykpKTsKKwkJcmV0dXJuIChEYXR1bSkgMDsKKwl9CisKKwlmbWdyX2luZm8oRl9BUlJBWV9JTiwg JmFycmF5X2luX2ZuKTsKKworCWRlY29uc3RydWN0X2FycmF5X2J1aWx0aW4oZXhwcnNfYXJyLCBU RVhUT0lELCAmZXhwcnNfZWxlbXMsCisJCQkJCQkJICAmZXhwcnNfbnVsbHMsICZjaGVja19udW1l eHBycyk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG51bWV4cHJzOyBpKyspCisJeworCQlPaWQJ CQl0eXBpZCA9IGF0dHR5cGlkc1tpXTsKKwkJaW50MzIJCXR5cG1vZCA9IGF0dHR5cG1vZHNbaV07 CisJCU9pZAkJCXN0YWNvbGwgPSBhdHR0eXBjb2xsc1tpXTsKKwkJVHlwZUNhY2hlRW50cnkgKnR5 cGNhY2hlOworCisJCU9pZAkJCWVsZW10eXBpZCA9IEludmFsaWRPaWQ7CisJCU9pZAkJCWVsZW1f ZXFfb3ByID0gSW52YWxpZE9pZDsKKworCQlib29sCQlvazsKKworCQlEYXR1bQkJdmFsdWVzW05h dHRzX3BnX3N0YXRpc3RpY107CisJCWJvb2wJCW51bGxzW05hdHRzX3BnX3N0YXRpc3RpY107CisJ CWJvb2wJCXJlcGxhY2VzW05hdHRzX3BnX3N0YXRpc3RpY107CisKKwkJSGVhcFR1cGxlCXBnc3R1 cDsKKwkJRGF0dW0JCXBnc3RkYXQ7CisKKwkJLyogZmluZHMgdGhlIHJpZ2h0IG9wZXJhdG9ycyBl dmVuIGlmIGF0dHR5cGlkIGlzIGEgZG9tYWluICovCisJCXR5cGNhY2hlID0gbG9va3VwX3R5cGVf Y2FjaGUodHlwaWQsIFRZUEVDQUNIRV9MVF9PUFIgfCBUWVBFQ0FDSEVfRVFfT1BSKTsKKworCQlp bml0X2VtcHR5X3N0YXRzX3R1cGxlKEludmFsaWRPaWQsIEludmFsaWRBdHRyTnVtYmVyLCBmYWxz ZSwKKwkJCQkJCQkgICB2YWx1ZXMsIG51bGxzLCByZXBsYWNlcyk7CisKKwkJaWYgKCFleHByc19u dWxsc1tvZmZzZXQgKyBOVUxMX0ZSQUNfRUxFTV0pCisJCXsKKwkJCW9rID0gdGV4dF90b19mbG9h dDQoZXhwcnNfZWxlbXNbb2Zmc2V0ICsgTlVMTF9GUkFDX0VMRU1dLAorCQkJCQkJCQkmdmFsdWVz W0FudW1fcGdfc3RhdGlzdGljX3N0YW51bGxmcmFjIC0gMV0pOworCisJCQlpZiAoIW9rKQorCQkJ eworCQkJCWNoYXIJICAgKnMgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHJzX2VsZW1zW29mZnNl dCArIE5VTExfRlJBQ19FTEVNXSk7CisKKwkJCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiRXhw cmVzc2lvbiAlcyBlbGVtZW50IFwiJXNcIiBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBpbnB1dCB0 eXBlLiIsCisJCQkJCQkJCWV4dGV4cHJhcmdpbmZvW05VTExfRlJBQ19FTEVNXS5hcmduYW1lLCBz KSkpOworCQkJCXBmcmVlKHMpOworCQkJCXJldHVybiAoRGF0dW0pIDA7CisJCQl9CisJCX0KKwor CQlpZiAoIWV4cHJzX251bGxzW29mZnNldCArIEFWR19XSURUSF9FTEVNXSkKKwkJeworCQkJb2sg PSB0ZXh0X3RvX2ludDQoZXhwcnNfZWxlbXNbb2Zmc2V0ICsgQVZHX1dJRFRIX0VMRU1dLAorCQkJ CQkJCSAgJnZhbHVlc1tBbnVtX3BnX3N0YXRpc3RpY19zdGF3aWR0aCAtIDFdKTsKKworCQkJaWYg KCFvaykKKwkJCXsKKwkJCQljaGFyCSAgICpzID0gVGV4dERhdHVtR2V0Q1N0cmluZyhleHByc19l bGVtc1tvZmZzZXQgKyBOVUxMX0ZSQUNfRUxFTV0pOworCisJCQkJZXJlcG9ydChlbGV2ZWwsCisJ CQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBl cnJtc2coIkV4cHJlc3Npb24gJXMgZWxlbWVudCBcIiVzXCIgZG9lcyBub3QgbWF0Y2ggZXhwZWN0 ZWQgaW5wdXQgdHlwZS4iLAorCQkJCQkJCQlleHRleHByYXJnaW5mb1tBVkdfV0lEVEhfRUxFTV0u YXJnbmFtZSwgcykpKTsKKwkJCQlwZnJlZShzKTsKKwkJCQlyZXR1cm4gKERhdHVtKSAwOworCQkJ fQorCQl9CisKKwkJaWYgKCFleHByc19udWxsc1tvZmZzZXQgKyBOX0RJU1RJTkNUX0VMRU1dKQor CQl7CisJCQlvayA9IHRleHRfdG9fZmxvYXQ0KGV4cHJzX2VsZW1zW29mZnNldCArIE5fRElTVElO Q1RfRUxFTV0sCisJCQkJCQkJCSZ2YWx1ZXNbQW51bV9wZ19zdGF0aXN0aWNfc3RhZGlzdGluY3Qg LSAxXSk7CisKKwkJCWlmICghb2spCisJCQl7CisJCQkJY2hhcgkgICAqcyA9IFRleHREYXR1bUdl dENTdHJpbmcoZXhwcnNfZWxlbXNbb2Zmc2V0ICsgTlVMTF9GUkFDX0VMRU1dKTsKKworCQkJCWVy ZXBvcnQoZWxldmVsLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJCQkgZXJybXNnKCJFeHByZXNzaW9uICVzIGVsZW1lbnQgXCIlc1wiIGRvZXMg bm90IG1hdGNoIGV4cGVjdGVkIGlucHV0IHR5cGUuIiwKKwkJCQkJCQkJZXh0ZXhwcmFyZ2luZm9b Tl9ESVNUSU5DVF9FTEVNXS5hcmduYW1lLCBzKSkpOworCQkJCXBmcmVlKHMpOworCQkJCXJldHVy biAoRGF0dW0pIDA7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBUaGUgU1RBS0lORCBzdGF0aXN0 aWNzIGFyZSB0aGUgc2FtZSBhcyB0aGUgb25lcyBmb3VuZCBpbiBhdHRyaWJ1dGUKKwkJICogc3Rh dHMuIEhvd2V2ZXIsIHRoZXNlIGFyZSBhbGwgZGVyaXZlZCBmcm9tIHRleHQgY29sdW1ucywgd2hl cmVhcworCQkgKiB0aGUgb25lcyBkZXJpdmVkIGZvciBhdHRyaWJ1dGUgc3RhdHMgYXJlIGEgbWl4 IG9mIGRhdGF0eXBlcy4gVGhpcworCQkgKiBsaW1pdHMgdGhlIG9wcG9ydHVuaXRpZXMgZm9yIGNv ZGUgc2hhcmluZyBiZXR3ZWVuIHRoZSB0d28uCisJCSAqLworCisJCS8qIFNUQVRJU1RJQ19LSU5E X01DViAqLworCQlpZiAoZXhwcnNfbnVsbHNbb2Zmc2V0ICsgTU9TVF9DT01NT05fVkFMU19FTEVN XSAhPQorCQkJZXhwcnNfbnVsbHNbb2Zmc2V0ICsgTU9TVF9DT01NT05fRlJFUVNfRUxFTV0pCisJ CXsKKwkJCWVyZXBvcnQoZWxldmVsLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiRXhwcmVzc2lvbiAlcyBhbmQgJXMgbXVzdCBi b3RoIGJlIE5PVCBOVUxMIG9yIGJvdGggTlVMTC4iLAorCQkJCQkJCWV4dGV4cHJhcmdpbmZvW01P U1RfQ09NTU9OX1ZBTFNfRUxFTV0uYXJnbmFtZSwKKwkJCQkJCQlleHRleHByYXJnaW5mb1tNT1NU X0NPTU1PTl9GUkVRU19FTEVNXS5hcmduYW1lKSkpOworCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJ fQorCisJCWlmICghZXhwcnNfbnVsbHNbb2Zmc2V0ICsgTU9TVF9DT01NT05fVkFMU19FTEVNXSkK KwkJeworCQkJRGF0dW0JCXN0YXZhbHVlczsKKwkJCURhdHVtCQlzdGFudW1iZXJzOworCisJCQlz dGF2YWx1ZXMgPSB0ZXh0X3RvX3N0YXZhbHVlcyhleHRleHByYXJnaW5mb1tNT1NUX0NPTU1PTl9W QUxTX0VMRU1dLmFyZ25hbWUsCisJCQkJCQkJCQkJICAmYXJyYXlfaW5fZm4sIGV4cHJzX2VsZW1z W29mZnNldCArIE1PU1RfQ09NTU9OX1ZBTFNfRUxFTV0sCisJCQkJCQkJCQkJICB0eXBpZCwgdHlw bW9kLCBlbGV2ZWwsICZvayk7CisKKwkJCWlmICghb2spCisJCQkJcmV0dXJuIChEYXR1bSkgMDsK KworCQkJc3RhbnVtYmVycyA9IHRleHRfdG9fc3RhdmFsdWVzKGV4dGV4cHJhcmdpbmZvW01PU1Rf Q09NTU9OX1ZBTFNfRUxFTV0uYXJnbmFtZSwKKwkJCQkJCQkJCQkgICAmYXJyYXlfaW5fZm4sIGV4 cHJzX2VsZW1zW29mZnNldCArIE1PU1RfQ09NTU9OX0ZSRVFTX0VMRU1dLAorCQkJCQkJCQkJCSAg IEZMT0FUNE9JRCwgLTEsIGVsZXZlbCwgJm9rKTsKKworCQkJaWYgKCFvaykKKwkJCQlyZXR1cm4g KERhdHVtKSAwOworCisJCQlzZXRfc3RhdHNfc2xvdCh2YWx1ZXMsIG51bGxzLCByZXBsYWNlcywK KwkJCQkJCSAgIFNUQVRJU1RJQ19LSU5EX01DViwKKwkJCQkJCSAgIHR5cGNhY2hlLT5lcV9vcHIs IHN0YWNvbGwsCisJCQkJCQkgICBzdGFudW1iZXJzLCBmYWxzZSwgc3RhdmFsdWVzLCBmYWxzZSk7 CisJCX0KKworCQkvKiBTVEFUSVNUSUNfS0lORF9ISVNUT0dSQU0gKi8KKwkJaWYgKCFleHByc19u dWxsc1tvZmZzZXQgKyBISVNUT0dSQU1fQk9VTkRTX0VMRU1dKQorCQl7CisJCQlEYXR1bQkJc3Rh dmFsdWVzOworCisJCQlzdGF2YWx1ZXMgPSB0ZXh0X3RvX3N0YXZhbHVlcyhleHRleHByYXJnaW5m b1tISVNUT0dSQU1fQk9VTkRTX0VMRU1dLmFyZ25hbWUsCisJCQkJCQkJCQkJICAmYXJyYXlfaW5f Zm4sIGV4cHJzX2VsZW1zW29mZnNldCArIEhJU1RPR1JBTV9CT1VORFNfRUxFTV0sCisJCQkJCQkJ CQkJICB0eXBpZCwgdHlwbW9kLCBlbGV2ZWwsICZvayk7CisKKwkJCWlmICghb2spCisJCQkJcmV0 dXJuIChEYXR1bSkgMDsKKworCQkJc2V0X3N0YXRzX3Nsb3QodmFsdWVzLCBudWxscywgcmVwbGFj ZXMsCisJCQkJCQkgICBTVEFUSVNUSUNfS0lORF9ISVNUT0dSQU0sCisJCQkJCQkgICB0eXBjYWNo ZS0+bHRfb3ByLCBzdGFjb2xsLAorCQkJCQkJICAgMCwgdHJ1ZSwgc3RhdmFsdWVzLCBmYWxzZSk7 CisJCX0KKworCQkvKiBTVEFUSVNUSUNfS0lORF9DT1JSRUxBVElPTiAqLworCQlpZiAoIWV4cHJz X251bGxzW29mZnNldCArIENPUlJFTEFUSU9OX0VMRU1dKQorCQl7CisJCQlEYXR1bQkJY29ycltd ID0geyhEYXR1bSkgMH07CisJCQlBcnJheVR5cGUgICphcnJ5OworCQkJRGF0dW0JCXN0YW51bWJl cnM7CisKKwkJCW9rID0gdGV4dF90b19mbG9hdDQoZXhwcnNfZWxlbXNbb2Zmc2V0ICsgQ09SUkVM QVRJT05fRUxFTV0sICZjb3JyWzBdKTsKKworCQkJaWYgKCFvaykKKwkJCXsKKwkJCQljaGFyCSAg ICpzID0gVGV4dERhdHVtR2V0Q1N0cmluZyhleHByc19lbGVtc1tvZmZzZXQgKyBDT1JSRUxBVElP Tl9FTEVNXSk7CisKKwkJCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiRXhwcmVzc2lvbiAlcyBl bGVtZW50IFwiJXNcIiBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBpbnB1dCB0eXBlLiIsCisJCQkJ CQkJCWV4dGV4cHJhcmdpbmZvW0NPUlJFTEFUSU9OX0VMRU1dLmFyZ25hbWUsIHMpKSk7CisJCQkJ cmV0dXJuIChEYXR1bSkgMDsKKwkJCX0KKworCQkJYXJyeSA9IGNvbnN0cnVjdF9hcnJheV9idWls dGluKGNvcnIsIDEsIEZMT0FUNE9JRCk7CisKKwkJCXN0YW51bWJlcnMgPSBQb2ludGVyR2V0RGF0 dW0oYXJyeSk7CisKKwkJCXNldF9zdGF0c19zbG90KHZhbHVlcywgbnVsbHMsIHJlcGxhY2VzLAor CQkJCQkJICAgU1RBVElTVElDX0tJTkRfQ09SUkVMQVRJT04sCisJCQkJCQkgICB0eXBjYWNoZS0+ bHRfb3ByLCBzdGFjb2xsLAorCQkJCQkJICAgc3RhbnVtYmVycywgZmFsc2UsIDAsIHRydWUpOwor CQl9CisKKwkJLyogU1RBVElTVElDX0tJTkRfTUNFTEVNICovCisJCWlmIChleHByc19udWxsc1tv ZmZzZXQgKyBNT1NUX0NPTU1PTl9FTEVNU19FTEVNXSAhPQorCQkJZXhwcnNfbnVsbHNbb2Zmc2V0 ICsgTU9TVF9DT01NT05fRUxFTV9GUkVRU19FTEVNXSkKKwkJeworCQkJZXJlcG9ydChlbGV2ZWws CisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkg ZXJybXNnKCJFeHByZXNzaW9uICVzIGFuZCAlcyBtdXN0IGJvdGggYmUgTk9UIE5VTEwgb3IgYm90 aCBOVUxMLiIsCisJCQkJCQkJZXh0ZXhwcmFyZ2luZm9bTU9TVF9DT01NT05fRUxFTVNfRUxFTV0u YXJnbmFtZSwKKwkJCQkJCQlleHRleHByYXJnaW5mb1tNT1NUX0NPTU1PTl9FTEVNX0ZSRVFTX0VM RU1dLmFyZ25hbWUpKSk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisKKwkJLyoKKwkJICog V2Ugb25seSBuZWVkIHRvIGZldGNoIGVsZW1lbnQgdHlwZSBhbmQgZXEgb3BlcmF0b3IgaWYgd2Ug aGF2ZSBhCisJCSAqIHN0YXQgb2YgdHlwZSBNQ0VMRU0gb3IgREVDSElTVC4KKwkJICovCisJCWlm ICghZXhwcnNfbnVsbHNbb2Zmc2V0ICsgTU9TVF9DT01NT05fRUxFTVNfRUxFTV0gfHwKKwkJCSFl eHByc19udWxsc1tvZmZzZXQgKyBFTEVNX0NPVU5UX0hJU1RPR1JBTV9FTEVNXSkKKwkJeworCQkJ aWYgKCFnZXRfZWxlbV9zdGF0X3R5cGUodHlwaWQsIHR5cGNhY2hlLT50eXB0eXBlLAorCQkJCQkJ CQkJZWxldmVsLCAmZWxlbXR5cGlkLCAmZWxlbV9lcV9vcHIpKQorCQkJeworCQkJCWVyZXBvcnQo ZWxldmVsLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJCQkgKGVycm1zZygidW5hYmxlIHRvIGRldGVybWluZSBlbGVtZW50IHR5cGUgb2YgZXhw cmVzc2lvbiIpKSkpOworCQkJCXJldHVybiAoRGF0dW0pIDA7CisJCQl9CisJCX0KKworCQlpZiAo IWV4cHJzX251bGxzW29mZnNldCArIE1PU1RfQ09NTU9OX0VMRU1TX0VMRU1dKQorCQl7CisJCQlE YXR1bQkJc3RhdmFsdWVzOworCQkJRGF0dW0JCXN0YW51bWJlcnM7CisKKwkJCXN0YXZhbHVlcyA9 IHRleHRfdG9fc3RhdmFsdWVzKGV4dGV4cHJhcmdpbmZvW01PU1RfQ09NTU9OX0VMRU1TX0VMRU1d LmFyZ25hbWUsCisJCQkJCQkJCQkJICAmYXJyYXlfaW5fZm4sCisJCQkJCQkJCQkJICBleHByc19l bGVtc1tvZmZzZXQgKyBNT1NUX0NPTU1PTl9FTEVNU19FTEVNXSwKKwkJCQkJCQkJCQkgIGVsZW10 eXBpZCwgdHlwbW9kLAorCQkJCQkJCQkJCSAgZWxldmVsLCAmb2spOworCisJCQlpZiAoIW9rKQor CQkJCXJldHVybiAoRGF0dW0pIDA7CisKKwkJCXN0YW51bWJlcnMgPSB0ZXh0X3RvX3N0YXZhbHVl cyhleHRleHByYXJnaW5mb1tNT1NUX0NPTU1PTl9FTEVNX0ZSRVFTX0VMRU1dLmFyZ25hbWUsCisJ CQkJCQkJCQkJICAgJmFycmF5X2luX2ZuLAorCQkJCQkJCQkJCSAgIGV4cHJzX2VsZW1zW29mZnNl dCArIE1PU1RfQ09NTU9OX0VMRU1fRlJFUVNfRUxFTV0sCisJCQkJCQkJCQkJICAgRkxPQVQ0T0lE LCAtMSwgZWxldmVsLCAmb2spOworCisJCQlpZiAoIW9rKQorCQkJCXJldHVybiAoRGF0dW0pIDA7 CisKKwkJCXNldF9zdGF0c19zbG90KHZhbHVlcywgbnVsbHMsIHJlcGxhY2VzLAorCQkJCQkJICAg U1RBVElTVElDX0tJTkRfTUNFTEVNLAorCQkJCQkJICAgZWxlbV9lcV9vcHIsIHN0YWNvbGwsCisJ CQkJCQkgICBzdGFudW1iZXJzLCBmYWxzZSwgc3RhdmFsdWVzLCBmYWxzZSk7CisJCX0KKworCQlp ZiAoIWV4cHJzX251bGxzW29mZnNldCArIEVMRU1fQ09VTlRfSElTVE9HUkFNX0VMRU1dKQorCQl7 CisJCQlEYXR1bQkJc3RhbnVtYmVyczsKKworCQkJc3RhbnVtYmVycyA9IHRleHRfdG9fc3RhdmFs dWVzKGV4dGV4cHJhcmdpbmZvW0VMRU1fQ09VTlRfSElTVE9HUkFNX0VMRU1dLmFyZ25hbWUsCisJ CQkJCQkJCQkJICAgJmFycmF5X2luX2ZuLAorCQkJCQkJCQkJCSAgIGV4cHJzX2VsZW1zW29mZnNl dCArIEVMRU1fQ09VTlRfSElTVE9HUkFNX0VMRU1dLAorCQkJCQkJCQkJCSAgIEZMT0FUNE9JRCwg LTEsIGVsZXZlbCwgJm9rKTsKKworCQkJaWYgKCFvaykKKwkJCQlyZXR1cm4gKERhdHVtKSAwOwor CisJCQlzZXRfc3RhdHNfc2xvdCh2YWx1ZXMsIG51bGxzLCByZXBsYWNlcywgU1RBVElTVElDX0tJ TkRfREVDSElTVCwKKwkJCQkJCSAgIGVsZW1fZXFfb3ByLCBzdGFjb2xsLAorCQkJCQkJICAgc3Rh bnVtYmVycywgZmFsc2UsIDAsIHRydWUpOworCQl9CisKKwkJLyoKKwkJICogQ3VycmVudGx5IHRo ZXJlIGFyZSBubyBleHRlbmRlZCBzdGF0cyBleHBvcnRzIG9mIHRoZSBzdGF0aXN0aWMKKwkJICog a2luZHMgU1RBVElTVElDX0tJTkRfQk9VTkRTX0hJU1RPR1JBTSBvcgorCQkgKiBTVEFUSVNUSUNf S0lORF9SQU5HRV9MRU5HVEhfSElTVE9HUkFNIHNvIHRoZXNlIGNhbm5vdCBiZSBpbXBvcnRlZC4K KwkJICogVGhlc2UgbWF5IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuCisJCSAqLworCisJCXBnc3R1 cCA9IGhlYXBfZm9ybV90dXBsZShSZWxhdGlvbkdldERlc2NyKHBnc2QpLCB2YWx1ZXMsIG51bGxz KTsKKwkJcGdzdGRhdCA9IGhlYXBfY29weV90dXBsZV9hc19kYXR1bShwZ3N0dXAsIFJlbGF0aW9u R2V0RGVzY3IocGdzZCkpOworCQlhc3RhdGUgPSBhY2N1bUFycmF5UmVzdWx0KGFzdGF0ZSwgcGdz dGRhdCwgZmFsc2UsIHBnc3R5cG9pZCwKKwkJCQkJCQkJICBDdXJyZW50TWVtb3J5Q29udGV4dCk7 CisKKwkJb2Zmc2V0ICs9IE5VTV9BVFRSSUJVVEVfU1RBVFNfRUxFTVM7CisJfQorCisJcGZyZWUo ZXhwcnNfZWxlbXMpOworCXBmcmVlKGV4cHJzX251bGxzKTsKKworCXJldHVybiBtYWtlQXJyYXlS ZXN1bHQoYXN0YXRlLCBDdXJyZW50TWVtb3J5Q29udGV4dCk7Cit9CisKK3N0YXRpYyBib29sCit0 ZXh0X3RvX2Zsb2F0NChEYXR1bSBpbnB1dCwgRGF0dW0gKm91dHB1dCkKK3sKKwlFcnJvclNhdmVD b250ZXh0IGVzY29udGV4dCA9IHtUX0Vycm9yU2F2ZUNvbnRleHR9OworCisJY2hhcgkgICAqczsK Kwlib29sCQlvazsKKworCXMgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGlucHV0KTsKKwlvayA9IERp cmVjdElucHV0RnVuY3Rpb25DYWxsU2FmZShmbG9hdDRpbiwgcywgSW52YWxpZE9pZCwgLTEsCisJ CQkJCQkJCQkgKE5vZGUgKikgJmVzY29udGV4dCwgb3V0cHV0KTsKKworCXBmcmVlKHMpOworCXJl dHVybiBvazsKK30KKworCitzdGF0aWMgYm9vbAordGV4dF90b19pbnQ0KERhdHVtIGlucHV0LCBE YXR1bSAqb3V0cHV0KQoreworCUVycm9yU2F2ZUNvbnRleHQgZXNjb250ZXh0ID0ge1RfRXJyb3JT YXZlQ29udGV4dH07CisKKwljaGFyCSAgICpzOworCWJvb2wJCW9rOworCisJcyA9IFRleHREYXR1 bUdldENTdHJpbmcoaW5wdXQpOworCW9rID0gRGlyZWN0SW5wdXRGdW5jdGlvbkNhbGxTYWZlKGlu dDRpbiwgcywgSW52YWxpZE9pZCwgLTEsCisJCQkJCQkJCQkgKE5vZGUgKikgJmVzY29udGV4dCwg b3V0cHV0KTsKKworCXBmcmVlKHMpOworCXJldHVybiBvazsKK30KKworc3RhdGljIGJvb2wKK2Rl bGV0ZV9wZ19zdGF0aXN0aWNfZXh0X2RhdGEoT2lkIHN0eG9pZCwgYm9vbCBpbmhlcml0ZWQpCit7 CisJUmVsYXRpb24Jc2VkID0gdGFibGVfb3BlbihTdGF0aXN0aWNFeHREYXRhUmVsYXRpb25JZCwg Um93RXhjbHVzaXZlTG9jayk7CisJSGVhcFR1cGxlCW9sZHR1cDsKKwlib29sCQlyZXN1bHQgPSBm YWxzZTsKKworCS8qIElzIHRoZXJlIGFscmVhZHkgYSBwZ19zdGF0aXN0aWMgdHVwbGUgZm9yIHRo aXMgYXR0cmlidXRlPyAqLworCW9sZHR1cCA9IFNlYXJjaFN5c0NhY2hlMihTVEFURVhUREFUQVNU WE9JRCwKKwkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShzdHhvaWQpLAorCQkJCQkJCSBCb29sR2V0 RGF0dW0oaW5oZXJpdGVkKSk7CisKKwlpZiAoSGVhcFR1cGxlSXNWYWxpZChvbGR0dXApKQorCXsK KwkJQ2F0YWxvZ1R1cGxlRGVsZXRlKHNlZCwgJm9sZHR1cC0+dF9zZWxmKTsKKwkJUmVsZWFzZVN5 c0NhY2hlKG9sZHR1cCk7CisJCXJlc3VsdCA9IHRydWU7CisJfQorCisJdGFibGVfY2xvc2Uoc2Vk LCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CisKKwly ZXR1cm4gcmVzdWx0OworfQorCisgLyoKKyAgKiBJbXBvcnQgc3RhdGlzdGljcyBmb3IgYSBnaXZl biBzdGF0aXN0aWNzIG9iamVjdC4KKyAgKgorICAqIEluc2VydHMgb3IgcmVwbGFjZXMgYSByb3cg aW4gcGdfc3RhdGlzdGljX2V4dF9kYXRhIGZvciB0aGUgZ2l2ZW4gcmVsYXRpb24KKyAgKiBhbmQg c3RhdGlzdGljIG9iamVjdCBzY2hlbWErbmFtZS4gSXQgdGFrZXMgaW5wdXQgcGFyYW1ldGVycyB0 aGF0CisgICogY29ycmVzcG9uZCB0byBjb2x1bW5zIGluIHRoZSB2aWV3IHBnX3N0YXRzX2V4dCBh bmQgcGdfc3RhdHNfZXh0X2V4cHJzLgorICAqCisgICogUGFyYW1ldGVycyBhcmUgb25seSBzdXBl cmZpY2lhbGx5IHZhbGlkYXRlZC4gT21pdHRpbmcgYSBwYXJhbWV0ZXIgb3IKKyAgKiBwYXNzaW5n IE5VTEwgbGVhdmVzIHRoZSBzdGF0aXN0aWMgdW5jaGFuZ2VkLgorICAqCisgICovCitEYXR1bQor cGdfc2V0X2V4dGVuZGVkX3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJZXh0ZW5kZWRfc3Rh dGlzdGljc191cGRhdGUoZmNpbmZvLCBFUlJPUik7CisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKwor CitEYXR1bQorcGdfcmVzdG9yZV9leHRlbmRlZF9zdGF0cyhQR19GVU5DVElPTl9BUkdTKQorewor CUxPQ0FMX0ZDSU5GTyhwb3NpdGlvbmFsX2ZjaW5mbywgTlVNX0VYVEVOREVEX1NUQVRTX0FSR1Mp OworCWJvb2wJCXJlc3VsdCA9IHRydWU7CisKKwlJbml0RnVuY3Rpb25DYWxsSW5mb0RhdGEoKnBv c2l0aW9uYWxfZmNpbmZvLCBOVUxMLCBOVU1fRVhURU5ERURfU1RBVFNfQVJHUywKKwkJCQkJCQkg SW52YWxpZE9pZCwgTlVMTCwgTlVMTCk7CisKKwlpZiAoIXN0YXRzX2ZpbGxfZmNpbmZvX2Zyb21f YXJnX3BhaXJzKGZjaW5mbywgcG9zaXRpb25hbF9mY2luZm8sCisJCQkJCQkJCQkJICBleHRhcmdp bmZvLCBXQVJOSU5HKSkKKwkJcmVzdWx0ID0gZmFsc2U7CisKKwlpZiAoIWV4dGVuZGVkX3N0YXRp c3RpY3NfdXBkYXRlKHBvc2l0aW9uYWxfZmNpbmZvLCBXQVJOSU5HKSkKKwkJcmVzdWx0ID0gZmFs c2U7CisKKwlQR19SRVRVUk5fQk9PTChyZXN1bHQpOworfQorCisvKgorICogRGVsZXRlIHN0YXRp c3RpY3MgZm9yIHRoZSBnaXZlbiBzdGF0aXN0aWNzIG9iamVjdC4KKyAqLworRGF0dW0KK3BnX2Ns ZWFyX2V4dGVuZGVkX3N0YXRzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQkJbnNwb2lkOwor CU5hbWUJCXN0eG5hbWU7CisJYm9vbAkJaW5oZXJpdGVkOworCVJlbGF0aW9uCXBnX3N0ZXh0Owor CUhlYXBUdXBsZQl0dXA7CisKKwlGb3JtX3BnX3N0YXRpc3RpY19leHQgc3R4Zm9ybTsKKworCisJ c3RhdHNfY2hlY2tfcmVxdWlyZWRfYXJnKGZjaW5mbywgZXh0YXJnaW5mbywgU1RBVFNDSEVNQV9B UkcpOworCW5zcG9pZCA9IFBHX0dFVEFSR19PSUQoU1RBVFNDSEVNQV9BUkcpOworCXN0YXRzX2No ZWNrX3JlcXVpcmVkX2FyZyhmY2luZm8sIGV4dGFyZ2luZm8sIFNUQVROQU1FX0FSRyk7CisJc3R4 bmFtZSA9IFBHX0dFVEFSR19OQU1FKFNUQVROQU1FX0FSRyk7CisJc3RhdHNfY2hlY2tfcmVxdWly ZWRfYXJnKGZjaW5mbywgZXh0YXJnaW5mbywgSU5IRVJJVEVEX0FSRyk7CisJaW5oZXJpdGVkID0g UEdfR0VUQVJHX05BTUUoSU5IRVJJVEVEX0FSRyk7CisKKwlpZiAoUmVjb3ZlcnlJblByb2dyZXNz KCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lO X1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygicmVjb3ZlcnkgaXMgaW4gcHJvZ3Jl c3MiKSwKKwkJCQkgZXJyaGludCgiU3RhdGlzdGljcyBjYW5ub3QgYmUgbW9kaWZpZWQgZHVyaW5n IHJlY292ZXJ5LiIpKSk7CisKKwlwZ19zdGV4dCA9IHRhYmxlX29wZW4oU3RhdGlzdGljRXh0UmVs YXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJdHVwID0gZ2V0X3BnX3N0YXRpc3RpY19leHQo cGdfc3RleHQsIG5zcG9pZCwgc3R4bmFtZSk7CisKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVw KSkKKwl7CisJCXRhYmxlX2Nsb3NlKHBnX3N0ZXh0LCBSb3dFeGNsdXNpdmVMb2NrKTsKKwkJZXJl cG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJ CSBlcnJtc2coIkV4dGVuZGVkIFN0YXRpc3RpY3MgT2JqZWN0IFwiJXNcIi5cIiVzXCIgbm90IGZv dW5kLiIsCisJCQkJCQlnZXRfbmFtZXNwYWNlX25hbWUobnNwb2lkKSwKKwkJCQkJCU5hbWVTdHIo KnN0eG5hbWUpKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJc3R4Zm9ybSA9IChGb3JtX3Bn X3N0YXRpc3RpY19leHQpIEdFVFNUUlVDVCh0dXApOworCisJc3RhdHNfbG9ja19jaGVja19wcml2 aWxlZ2VzKHN0eGZvcm0tPnN0eHJlbGlkKTsKKworCWRlbGV0ZV9wZ19zdGF0aXN0aWNfZXh0X2Rh dGEoc3R4Zm9ybS0+b2lkLCBpbmhlcml0ZWQpOworCWhlYXBfZnJlZXR1cGxlKHR1cCk7CisJdGFi bGVfY2xvc2UocGdfc3RleHQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJUEdfUkVUVVJOX1ZPSUQo KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvbWN2LmMgYi9zcmMvYmFj a2VuZC9zdGF0aXN0aWNzL21jdi5jCmluZGV4IGQ5OGNkYTY5OGQ5Li43M2Y3OGUwNjA3OCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tY3YuYworKysgYi9zcmMvYmFja2VuZC9z dGF0aXN0aWNzL21jdi5jCkBAIC0yMTczLDMgKzIxNzMsMTQ3IEBAIG1jdl9jbGF1c2Vfc2VsZWN0 aXZpdHlfb3IoUGxhbm5lckluZm8gKnJvb3QsIFN0YXRpc3RpY0V4dEluZm8gKnN0YXQsCiAKIAly ZXR1cm4gczsKIH0KKworLyoKKyAgKiBUaGUgTUNWIGlzIGFuIGFycmF5IG9mIHJlY29yZHMsIGJ1 dCB0aGlzIGlzIGV4cGVjdGVkIGFzIDQgc2VwYXJhdGUgYXJyYXlzLgorICAqIEl0IGlzIG5vdCBw b3NzaWJsZSB0byBoYXZlIGEgZ2VuZXJpYyBpbnB1dCBmdW5jdGlvbiBmb3IgcGdfbWN2X2xpc3QK KyAgKiBiZWNhdXNlIHRoZSBtb3N0X2NvbW1vbl92YWx1ZXMgaXMgYSBjb21wb3NpdGUgdHlwZSB3 aXRoIGVsZW1lbnQgdHlwZXMKKyAgKiBkZWZpbmVkIGJ5IHRoZSBzcGVjaWZpYyBzdGF0aXN0aWNz IG9iamVjdC4KKyAgKi8KK0RhdHVtCitpbXBvcnRfbWN2bGlzdChIZWFwVHVwbGUgdHVwLCBpbnQg ZWxldmVsLCBpbnQgbnVtYXR0cnMsIE9pZCAqYXR0dHlwaWRzLAorCQkJICAgaW50MzIgKmF0dHR5 cG1vZHMsIE9pZCAqYXR0dHlwY29sbHMsIGludCBuaXRlbXMsCisJCQkgICBEYXR1bSAqbWN2X2Vs ZW1zLCBib29sICptY3ZfbnVsbHMsCisJCQkgICBib29sICptY3ZfZWxlbV9udWxscywgZmxvYXQ4 ICpmcmVxcywgZmxvYXQ4ICpiYXNlX2ZyZXFzKQoreworCU1DVkxpc3QgICAgKm1jdmxpc3Q7CisJ Ynl0ZWEJICAgKmJ5dGVzOworCisJSGVhcFR1cGxlICAqdmF0dXBsZXM7CisJVmFjQXR0clN0YXRz ICoqdmFzdGF0czsKKworCS8qCisJICogQWxsb2NhdGUgdGhlIE1DViBsaXN0IHN0cnVjdHVyZSwg c2V0IHRoZSBnbG9iYWwgcGFyYW1ldGVycy4KKwkgKi8KKwltY3ZsaXN0ID0gKE1DVkxpc3QgKikg cGFsbG9jMChvZmZzZXRvZihNQ1ZMaXN0LCBpdGVtcykgKworCQkJCQkJCQkgIChzaXplb2YoTUNW SXRlbSkgKiBuaXRlbXMpKTsKKworCW1jdmxpc3QtPm1hZ2ljID0gU1RBVFNfTUNWX01BR0lDOwor CW1jdmxpc3QtPnR5cGUgPSBTVEFUU19NQ1ZfVFlQRV9CQVNJQzsKKwltY3ZsaXN0LT5uZGltZW5z aW9ucyA9IG51bWF0dHJzOworCW1jdmxpc3QtPm5pdGVtcyA9IG5pdGVtczsKKworCS8qIFNldCB0 aGUgdmFsdWVzIGZvciB0aGUgMS1EIGFycmF5cyBhbmQgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSAy LUQgYXJyYXlzICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBuaXRlbXM7IGkrKykKKwl7CisJCU1D Vkl0ZW0gICAgKml0ZW0gPSAmbWN2bGlzdC0+aXRlbXNbaV07CisKKwkJaXRlbS0+ZnJlcXVlbmN5 ID0gZnJlcXNbaV07CisJCWl0ZW0tPmJhc2VfZnJlcXVlbmN5ID0gYmFzZV9mcmVxc1tpXTsKKwkJ aXRlbS0+dmFsdWVzID0gKERhdHVtICopIHBhbGxvYzAoc2l6ZW9mKERhdHVtKSAqIG51bWF0dHJz KTsKKwkJaXRlbS0+aXNudWxsID0gKGJvb2wgKikgcGFsbG9jMChzaXplb2YoYm9vbCkgKiBudW1h dHRycyk7CisJfQorCisJLyogV2FsayB0aHJvdWdoIGVhY2ggZGltZW5zaW9uICovCisJZm9yIChp bnQgaiA9IDA7IGogPCBudW1hdHRyczsgaisrKQorCXsKKwkJRm1nckluZm8JZmluZm87CisJCU9p ZAkJCWlvcGFyYW07CisJCU9pZAkJCWluZnVuYzsKKwkJaW50CQkJaW5kZXggPSBqOworCisJCWdl dFR5cGVJbnB1dEluZm8oYXR0dHlwaWRzW2pdLCAmaW5mdW5jLCAmaW9wYXJhbSk7CisJCWZtZ3Jf aW5mbyhpbmZ1bmMsICZmaW5mbyk7CisKKwkJLyogc3RvcmUgaW5mbyBhYm91dCBkYXRhIHR5cGUg T0lEcyAqLworCQltY3ZsaXN0LT50eXBlc1tqXSA9IGF0dHR5cGlkc1tqXTsKKworCQlmb3IgKGlu dCBpID0gMDsgaSA8IG5pdGVtczsgaSsrKQorCQl7CisJCQlNQ1ZJdGVtICAgICppdGVtID0gJm1j dmxpc3QtPml0ZW1zW2ldOworCisJCQkvKiBUaGVzZSBzaG91bGQgYmUgaW4gYWdyZWVtZW50LCBi dXQganVzdCB0byBiZSBzYWZlIGNoZWNrIGJvdGggKi8KKwkJCWlmIChtY3ZfZWxlbV9udWxsc1tp bmRleF0gfHwgbWN2X251bGxzW2luZGV4XSkKKwkJCXsKKwkJCQlpdGVtLT52YWx1ZXNbal0gPSAo RGF0dW0pIDA7CisJCQkJaXRlbS0+aXNudWxsW2pdID0gdHJ1ZTsKKwkJCX0KKwkJCWVsc2UKKwkJ CXsKKwkJCQljaGFyCSAgICpzID0gVGV4dERhdHVtR2V0Q1N0cmluZyhtY3ZfZWxlbXNbaW5kZXhd KTsKKwkJCQlFcnJvclNhdmVDb250ZXh0IGVzY29udGV4dCA9IHtUX0Vycm9yU2F2ZUNvbnRleHR9 OworCisJCQkJaWYgKCFJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUoJmZpbmZvLCBzLCBpb3BhcmFtLCBh dHR0eXBtb2RzW2pdLAorCQkJCQkJCQkJCSAgIChmbU5vZGVQdHIpICZlc2NvbnRleHQsICZpdGVt LT52YWx1ZXNbal0pKQorCQkJCXsKKwkJCQkJZXJlcG9ydChlbGV2ZWwsCisJCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkJIGVycm1zZygiTUNW IGVsZW1lbWVudCBcIiVzXCIgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgaW5wdXQgdHlwZS4iLCBz KSkpOworCQkJCQlyZXR1cm4gKERhdHVtKSAwOworCQkJCX0KKworCQkJCXBmcmVlKHMpOworCQkJ fQorCisJCQlpbmRleCArPSBudW1hdHRyczsKKwkJfQorCX0KKworCS8qCisJICogVGhlIGZ1bmN0 aW9uIHN0YXRleHRfbWN2X3NlcmlhbGl6ZSgpIHJlcXVpcmVzIGFuIGFycmF5IG9mIHBvaW50ZXJz IHRvCisJICogVmFjQXR0clN0YXRzIHJlY29yZHMsIGJ1dCBvbmx5IGEgZmV3IGZpZWxkcyB3aXRo aW4gdGhvc2UgcmVjb3JkcyBoYXZlCisJICogdG8gYmUgZmlsbGVkIG91dC4KKwkgKi8KKwl2YXN0 YXRzID0gKFZhY0F0dHJTdGF0cyAqKikgcGFsbG9jMChudW1hdHRycyAqIHNpemVvZihWYWNBdHRy U3RhdHMpKTsKKwl2YXR1cGxlcyA9IChIZWFwVHVwbGUgKikgcGFsbG9jMChudW1hdHRycyAqIHNp emVvZihIZWFwVHVwbGUpKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtYXR0cnM7IGkrKykK Kwl7CisJCU9pZAkJCXR5cGlkID0gYXR0dHlwaWRzW2ldOworCQlIZWFwVHVwbGUJdHlwdHVwbGU7 CisKKwkJdHlwdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFRZUEVPSUQsIE9iamVjdElkR2V0 RGF0dW0odHlwaWQpKTsKKworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwdHVwbGUpKQorCQkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCB0eXBpZCk7CisK KwkJdmF0dXBsZXNbaV0gPSB0eXB0dXBsZTsKKworCQl2YXN0YXRzW2ldID0gcGFsbG9jMChzaXpl b2YoVmFjQXR0clN0YXRzKSk7CisKKwkJdmFzdGF0c1tpXS0+YXR0cnR5cGUgPSAoRm9ybV9wZ190 eXBlKSBHRVRTVFJVQ1QodHlwdHVwbGUpOworCQl2YXN0YXRzW2ldLT5hdHRydHlwaWQgPSB0eXBp ZDsKKwkJdmFzdGF0c1tpXS0+YXR0cmNvbGxpZCA9IGF0dHR5cGNvbGxzW2ldOworCX0KKworCWJ5 dGVzID0gc3RhdGV4dF9tY3Zfc2VyaWFsaXplKG1jdmxpc3QsIHZhc3RhdHMpOworCisJZm9yIChp bnQgaSA9IDA7IGkgPCBudW1hdHRyczsgaSsrKQorCXsKKwkJcGZyZWUodmF0dXBsZXNbaV0pOwor CQlwZnJlZSh2YXN0YXRzW2ldKTsKKwl9CisJcGZyZWUoKHZvaWQgKikgdmF0dXBsZXMpOworCXBm cmVlKCh2b2lkICopIHZhc3RhdHMpOworCisJaWYgKGJ5dGVzID09IE5VTEwpCisJeworCQllcmVw b3J0KGVsZXZlbCwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVF KSwKKwkJCQkgZXJybXNnKCJVbmFibGUgdG8gaW1wb3J0IG1jdiBsaXN0IikpKTsKKwkJcmV0dXJu IChEYXR1bSkgMDsKKwl9CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG5pdGVtczsgaSsrKQorCXsK KwkJTUNWSXRlbSAgICAqaXRlbSA9ICZtY3ZsaXN0LT5pdGVtc1tpXTsKKworCQlwZnJlZShpdGVt LT52YWx1ZXMpOworCQlwZnJlZShpdGVtLT5pc251bGwpOworCX0KKwlwZnJlZShtY3ZsaXN0KTsK KwlwZnJlZShtY3ZfZWxlbXMpOworCXBmcmVlKG1jdl9udWxscyk7CisKKwlyZXR1cm4gUG9pbnRl ckdldERhdHVtKGJ5dGVzKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3Mv bXZkaXN0aW5jdC5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9tdmRpc3RpbmN0LmMKaW5kZXgg ZTljMDJhYWE2M2UuLmRmNTZlMzgwOGFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdGF0aXN0 aWNzL212ZGlzdGluY3QuYworKysgYi9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL212ZGlzdGluY3Qu YwpAQCAtNTE2LDYgKzUxNiw3IEBAIHN0YXRpYyBKc29uUGFyc2VFcnJvclR5cGUKIG5kaXN0aW5j dF9zY2FsYXIodm9pZCAqc3RhdGUsIGNoYXIgKnRva2VuLCBKc29uVG9rZW5UeXBlIHRva2VudHlw ZSkKIHsKIAluZGlzdGluY3RQYXJzZVN0YXRlICpwYXJzZSA9IHN0YXRlOworCWludDY0CQluZGlz dGluY3Q7CiAKIAkvKiBpZiB0aGUgZW50aXJlIGpzb24gaXMganVzdCBvbmUgc2NhbGFyLCB0aGF0 J3Mgd3JvbmcgKi8KIAlpZiAocGFyc2UtPmZvdW5kX29ubHlfb2JqZWN0ICE9IHRydWUpCkBAIC01 MzAsMTIgKzUzMSwxOSBAQCBuZGlzdGluY3Rfc2NhbGFyKHZvaWQgKnN0YXRlLCBjaGFyICp0b2tl biwgSnNvblRva2VuVHlwZSB0b2tlbnR5cGUpCiAKIAlBc3NlcnQocGFyc2UtPmN1cnJlbnRfaXRl bSAhPSBOVUxMKTsKIAotCXBhcnNlLT5jdXJyZW50X2l0ZW0tPm5kaXN0aW5jdCA9IGZsb2F0OGlu X2ludGVybmFsKHRva2VuLCBOVUxMLCAiZG91YmxlIiwKLQkJCQkJCQkJCQkJCQkgICB0b2tlbiwg cGFyc2UtPmVzY29udGV4dCk7CisJLyoKKwkgKiBXaGlsZSB0aGUgc3RydWN0dXJlIGRpY3RhdGVz IHRoYXQgbmRpc3RpbmN0IGluIGEgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZworCSAqIHBvaW50 LCBpbiBwcmFjdGljZSBpdCBoYXMgYWx3YXlzIGJlZW4gYW4gaW50ZWdlciwgYW5kIGl0IGlzIG91 dHB1dCBhcyBzdWNoLgorCSAqIFRoZXJlZm9yZSwgd2UgZm9sbG93IHVzYWdlIHByZWNlbmRlbnQg b3ZlciB0aGUgYWN0dWFsIHN0b3JhZ2Ugc3RydWN0dXJlLAorCSAqIGFuZCByZWFkIGl0IGluIGFz IGFuIGludGVnZXIuCisJICovCisJbmRpc3RpbmN0ID0gcGdfc3RydG9pbnQ2NF9zYWZlKHRva2Vu LCBwYXJzZS0+ZXNjb250ZXh0KTsKIAogCWlmIChTT0ZUX0VSUk9SX09DQ1VSUkVEKHBhcnNlLT5l c2NvbnRleHQpKQogCQlyZXR1cm4gSlNPTl9TRU1fQUNUSU9OX0ZBSUxFRDsKIAorCXBhcnNlLT5j dXJyZW50X2l0ZW0tPm5kaXN0aW5jdCA9IChkb3VibGUpIG5kaXN0aW5jdDsKKwogCS8qIG1hcmsg dXMgZG9uZSB3aXRoIHRoaXMgaXRlbSAqLwogCXBhcnNlLT5jdXJyZW50X2l0ZW0gPSBOVUxMOwog CXJldHVybiBKU09OX1NVQ0NFU1M7CkBAIC02NTAsNyArNjU4LDcgQEAgZnJlZV9wZ19uZGlzdGlu Y3QoTVZORGlzdGluY3QgKm5kaXN0aW5jdCkKICAqIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0 LgogICoKICAqIFBvc2l0aXZlIGF0dG51bXMgYXJlIGF0dHJpYnV0ZXMgd2hpY2ggbXVzdCBiZSBm b3VuZCBpbiB0aGUgc3R4a2V5cywKLSAqIHdoaWxlIG5lZ2F0aXZlIGF0dG51bXMgY29ycmVzcG9u ZCB0byBhbiBleHByIG51bWJlciwgc28gdGhlIGF0dG51bSAKKyAqIHdoaWxlIG5lZ2F0aXZlIGF0 dG51bXMgY29ycmVzcG9uZCB0byBhbiBleHByIG51bWJlciwgc28gdGhlIGF0dG51bQogICogY2Fu J3QgYmUgYmVsb3cgKDAgLSBudW1leHBycykuCiAgKi8KIGJvb2wKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3RhdHNfZXh0Lm91dAppbmRleCA0ODllNmExOTc3MS4uZTNlODJhYTVkZmIgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3RhdHNfZXh0Lm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2V4dC5vdXQKQEAgLTMzNzEsNiArMzM3MSwxOSBA QCBFUlJPUjogIG1hbGZvcm1lZCBwZ19uZGlzdGluY3Q6ICJ7IjYsIC0xIjogMTQsICI2LCAtMiI6 IDkxNDMsICItMSwgLTEiOiAxMzQ1NCwgIgogTElORSAxOiBTRUxFQ1QgJ3siNiwgLTEiOiAxNCwg IjYsIC0yIjogOTE0MywgIi0xLCAtMSI6IDEzNDU0LCAiNiwgLTEuLi4KICAgICAgICAgICAgICAg IF4KIERFVEFJTDogIGF0dG51bSBsaXN0IGR1cGxpY2F0ZSB2YWx1ZSBmb3VuZDogLTEKKy0tIGNh bid0IHVzZSBpbmYvLWluZi9OYU4gZm9yIG5kaXN0aW5jdCB2YWx1ZXMuCitTRUxFQ1QgJ3siNiwg LTEiOiAiSW5mIiwgIjYsIC0yIjogOTE0MywgIi0xLCAtMiI6IDEzNDU0LCAiNiwgLTEsIC0yIjog MTQ1NDl9Jzo6cGdfbmRpc3RpbmN0OworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3Ig dHlwZSBiaWdpbnQ6ICJJbmYiCitMSU5FIDE6IFNFTEVDVCAneyI2LCAtMSI6ICJJbmYiLCAiNiwg LTIiOiA5MTQzLCAiLTEsIC0yIjogMTM0NTQsICI2LC4uLgorICAgICAgICAgICAgICAgXgorU0VM RUNUICd7IjYsIC0xIjogIi1JbmYiLCAiNiwgLTIiOiA5MTQzLCAiLTEsIC0yIjogMTM0NTQsICI2 LCAtMSwgLTIiOiAxNDU0OX0nOjpwZ19uZGlzdGluY3Q7CitFUlJPUjogIGludmFsaWQgaW5wdXQg c3ludGF4IGZvciB0eXBlIGJpZ2ludDogIi1JbmYiCitMSU5FIDE6IFNFTEVDVCAneyI2LCAtMSI6 ICItSW5mIiwgIjYsIC0yIjogOTE0MywgIi0xLCAtMiI6IDEzNDU0LCAiNi4uLgorICAgICAgICAg ICAgICAgXgorU0VMRUNUICd7IjYsIC0xIjogIk5hTiIsICI2LCAtMiI6IDkxNDMsICItMSwgLTIi OiAxMzQ1NCwgIjYsIC0xLCAtMiI6IDE0NTQ5fSc6OnBnX25kaXN0aW5jdDsKK0VSUk9SOiAgaW52 YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgYmlnaW50OiAiTmFOIgorTElORSAxOiBTRUxFQ1Qg J3siNiwgLTEiOiAiTmFOIiwgIjYsIC0yIjogOTE0MywgIi0xLCAtMiI6IDEzNDU0LCAiNiwuLi4K KyAgICAgICAgICAgICAgIF4KIFNFTEVDVCAneyItMiA9PiA2IjogMC4yOTI1MDgsICItMiA9PiAt MSI6IDAuMTEzOTk5LCAiNiwgLTIgPT4gLTEiOiAwLjM0ODQ3OSwgIi0xLCAtMiA9PiA2IjogMC44 Mzk2OTF9Jzo6cGdfZGVwZW5kZW5jaWVzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBnX2RlcGVuZGVuY2llcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2ltcG9ydC5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2ltcG9ydC5vdXQKaW5kZXggMGU4NDkxMTMxZTMuLmM2 MDUyZWUzYTEwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzX2lt cG9ydC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0c19pbXBvcnQub3V0 CkBAIC0yMjAsNyArMjIwLDYgQEAgQ1JFQVRFIFRBQkxFIHN0YXRzX2ltcG9ydC5wYXJ0X2NoaWxk XzEKICAgUEFSVElUSU9OIE9GIHN0YXRzX2ltcG9ydC5wYXJ0X3BhcmVudAogICBGT1IgVkFMVUVT IEZST00gKDApIFRPICgxMCkKICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwot Q1JFQVRFIElOREVYIHBhcnRfcGFyZW50X2kgT04gc3RhdHNfaW1wb3J0LnBhcnRfcGFyZW50KGkp OwogQU5BTFlaRSBzdGF0c19pbXBvcnQucGFydF9wYXJlbnQ7CiBTRUxFQ1QgcmVscGFnZXMKIEZS T00gcGdfY2xhc3MKQEAgLTIzMiwxNSArMjMxLDYgQEAgV0hFUkUgb2lkID0gJ3N0YXRzX2ltcG9y dC5wYXJ0X3BhcmVudCc6OnJlZ2NsYXNzOwogCiAtLSBhbHRob3VnaCBwYXJ0aXRpb25lZCB0YWJs ZXMgaGF2ZSBubyBzdG9yYWdlLCBzZXR0aW5nIHJlbHBhZ2VzIHRvIGEKIC0tIHBvc2l0aXZlIHZh bHVlIGlzIHN0aWxsIGFsbG93ZWQKLVNFTEVDVAotICAgIHBnX2NhdGFsb2cucGdfc2V0X3JlbGF0 aW9uX3N0YXRzKAotICAgICAgICByZWxhdGlvbiA9PiAnc3RhdHNfaW1wb3J0LnBhcnRfcGFyZW50 X2knOjpyZWdjbGFzcywKLSAgICAgICAgcmVscGFnZXMgPT4gMjo6aW50ZWdlcik7Ci0gcGdfc2V0 X3JlbGF0aW9uX3N0YXRzIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAKLSgxIHJvdykKLQog U0VMRUNUCiAgICAgcGdfY2F0YWxvZy5wZ19zZXRfcmVsYXRpb25fc3RhdHMoCiAgICAgICAgIHJl bGF0aW9uID0+ICdzdGF0c19pbXBvcnQucGFydF9wYXJlbnQnOjpyZWdjbGFzcywKQEAgLTI1MCw0 OCArMjQwLDYgQEAgU0VMRUNUCiAgCiAoMSByb3cpCiAKLS0tCi0tLSBQYXJ0aXRpb25lZCBpbmRl eGVzIGFyZW4ndCBhbmFseXplZCBidXQgaXQgaXMgcG9zc2libGUgdG8gc2V0Ci0tLSBzdGF0cy4g VGhlIGxvY2tpbmcgcnVsZXMgYXJlIGRpZmZlcmVudCBmcm9tIG5vcm1hbCBpbmRleGVzIGR1ZSB0 bwotLS0gdGhlIHJ1bGVzIGZvciBpbi1wbGFjZSB1cGRhdGVzOiBib3RoIHRoZSBwYXJ0aXRpb25l ZCB0YWJsZSBhbmQgdGhlCi0tLSBwYXJ0aXRpb25lZCBpbmRleCBhcmUgbG9ja2VkIGluIFNoYXJl VXBkYXRlRXhjbHVzaXZlIG1vZGUuCi0tLQotQkVHSU47Ci1TRUxFQ1QKLSAgICBwZ19jYXRhbG9n LnBnX3NldF9yZWxhdGlvbl9zdGF0cygKLSAgICAgICAgcmVsYXRpb24gPT4gJ3N0YXRzX2ltcG9y dC5wYXJ0X3BhcmVudF9pJzo6cmVnY2xhc3MsCi0gICAgICAgIHJlbHBhZ2VzID0+IDI6OmludGVn ZXIpOwotIHBnX3NldF9yZWxhdGlvbl9zdGF0cyAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g Ci0oMSByb3cpCi0KLVNFTEVDVCBtb2RlIEZST00gcGdfbG9ja3MKLVdIRVJFIHJlbGF0aW9uID0g J3N0YXRzX2ltcG9ydC5wYXJ0X3BhcmVudCc6OnJlZ2NsYXNzIEFORAotICAgICAgcGlkID0gcGdf YmFja2VuZF9waWQoKSBBTkQgZ3JhbnRlZDsKLSAgICAgICAgICAgbW9kZSAgICAgICAgICAgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jawotKDEg cm93KQotCi1TRUxFQ1QgbW9kZSBGUk9NIHBnX2xvY2tzCi1XSEVSRSByZWxhdGlvbiA9ICdzdGF0 c19pbXBvcnQucGFydF9wYXJlbnRfaSc6OnJlZ2NsYXNzIEFORAotICAgICAgcGlkID0gcGdfYmFj a2VuZF9waWQoKSBBTkQgZ3JhbnRlZDsKLSAgICAgICAgICAgbW9kZSAgICAgICAgICAgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jawotKDEgcm93 KQotCi1DT01NSVQ7Ci1TRUxFQ1QKLSAgICBwZ19jYXRhbG9nLnBnX3Jlc3RvcmVfcmVsYXRpb25f c3RhdHMoCi0gICAgICAgICdyZWxhdGlvbicsICdzdGF0c19pbXBvcnQucGFydF9wYXJlbnRfaSc6 OnJlZ2NsYXNzLAotICAgICAgICAncmVscGFnZXMnLCAyOjppbnRlZ2VyKTsKLSBwZ19yZXN0b3Jl X3JlbGF0aW9uX3N0YXRzIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gdAotKDEgcm93 KQotCiAtLSBub3RoaW5nIHN0b3BzIHVzIGZyb20gc2V0dGluZyBpdCB0byAtMQogU0VMRUNUCiAg ICAgcGdfY2F0YWxvZy5wZ19zZXRfcmVsYXRpb25fc3RhdHMoCkBAIC0xNTA0LDI0ICsxNDUyLDE1 IEBAIFNFTEVDVCAzLCAndHJlJywgKDMsIDMuMywgJ1RSRScsICcyMDAzLTAzLTAzJywgTlVMTCk6 OnN0YXRzX2ltcG9ydC5jb21wbGV4X3R5cGUsCiBVTklPTiBBTEwKIFNFTEVDVCA0LCAnZm91cics IE5VTEwsIGludDRyYW5nZSgwLDEwMCksIE5VTEw7CiBDUkVBVEUgSU5ERVggaXNfb2RkIE9OIHN0 YXRzX2ltcG9ydC50ZXN0KCgoY29tcCkuYSAlIDIgPSAxKSk7Ci0tLSByZXN0b3Jpbmcgc3RhdHMg b24gaW5kZXgKLVNFTEVDVCAqIEZST00gcGdfY2F0YWxvZy5wZ19yZXN0b3JlX3JlbGF0aW9uX3N0 YXRzKAotICAgICdyZWxhdGlvbicsICdzdGF0c19pbXBvcnQuaXNfb2RkJzo6cmVnY2xhc3MsCi0g ICAgJ3ZlcnNpb24nLCAnMTgwMDAwJzo6aW50ZWdlciwKLSAgICAncmVscGFnZXMnLCAnMTEnOjpp bnRlZ2VyLAotICAgICdyZWx0dXBsZXMnLCAnMTAwMDAnOjpyZWFsLAotICAgICdyZWxhbGx2aXNp YmxlJywgJzAnOjppbnRlZ2VyCi0pOwotIHBnX3Jlc3RvcmVfcmVsYXRpb25fc3RhdHMgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSB0Ci0oMSByb3cpCi0KK0NSRUFURSBTVEFUSVNUSUNT IHN0YXRzX2ltcG9ydC50ZXN0X3N0YXQgT04gbmFtZSwgY29tcCwgbG93ZXIoYXJhbmdlKSwgYXJy YXlfbGVuZ3RoKHRhZ3MsMSkKK0ZST00gc3RhdHNfaW1wb3J0LnRlc3Q7CiAtLSBHZW5lcmF0ZSBz dGF0aXN0aWNzIG9uIHRhYmxlIHdpdGggZGF0YQogQU5BTFlaRSBzdGF0c19pbXBvcnQudGVzdDsK IENSRUFURSBUQUJMRSBzdGF0c19pbXBvcnQudGVzdF9jbG9uZSAoIExJS0Ugc3RhdHNfaW1wb3J0 LnRlc3QgKQogICAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKIENSRUFURSBJ TkRFWCBpc19vZGRfY2xvbmUgT04gc3RhdHNfaW1wb3J0LnRlc3RfY2xvbmUoKChjb21wKS5hICUg MiA9IDEpKTsKK0NSRUFURSBTVEFUSVNUSUNTIHN0YXRzX2ltcG9ydC50ZXN0X3N0YXRfY2xvbmUg T04gbmFtZSwgY29tcCwgbG93ZXIoYXJhbmdlKSwgYXJyYXlfbGVuZ3RoKHRhZ3MsMSkKK0ZST00g c3RhdHNfaW1wb3J0LnRlc3RfY2xvbmU7CiAtLQogLS0gQ29weSBzdGF0cyBmcm9tIHRlc3QgdG8g dGVzdF9jbG9uZSwgYW5kIGlzX29kZCB0byBpc19vZGRfY2xvbmUKIC0tCkBAIC0xOTA0LDYgKzE4 NDMsMzg2IEBAIFdIRVJFIHMuc3RhcmVsaWQgPSAnc3RhdHNfaW1wb3J0LmlzX29kZCc6OnJlZ2Ns YXNzOwogLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLSstLS0tLS0tLS0tLQogKDAgcm93 cykKIAorLS0gc2V0IG5fZGlzdGluY3QgdXNpbmcgYXQgYXR0bnVtICgxKSB0aGF0IGlzIG5vdCBp biB0aGUgc3RhdGlzdGljcyBvYmplY3QKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfc2V0X2V4 dGVuZGVkX3N0YXRzKAorICAgICAgICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUgPT4gJ3N0YXRzX2lt cG9ydCc6OnJlZ25hbWVzcGFjZSwKKyAgICAgICAgc3RhdGlzdGljc19uYW1lID0+ICd0ZXN0X3N0 YXRfY2xvbmUnOjpuYW1lLAorICAgICAgICBpbmhlcml0ZWQgPT4gZmFsc2UsCisgICAgICAgIG5f ZGlzdGluY3QgPT4gJ3siMiwgMyI6IDQsICIyLCAtMSI6IDQsICIyLCAtMiI6IDQsICIzLCAtMSI6 IDQsICIzLCAtMiI6IDQsICItMSwgLTIiOiAzLCAiMiwgMywgLTEiOiA0LCAiMiwgMywgLTIiOiA0 LCAiMiwgLTEsIC0yIjogNCwgIjMsIC0xLCAtMiI6IDQsICIxLCAzLCAtMSwgLTIiOiA0fSc6OnBn X25kaXN0aW5jdAorICAgICAgKTsKK0VSUk9SOiAgcGdfbmRpc3RpbmN0OiBpbnZhbGlkIGF0dG51 bSBmb3IgdGhpcyBzdGF0aXN0aWNzIG9iamVjdDogMQorLS0gc2V0IG5fZGlzdGluY3QgdXNpbmcg YXQgYXR0bnVtIHRoYXQgaXMgMAorU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19zZXRfZXh0ZW5k ZWRfc3RhdHMoCisgICAgICAgIHN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9PiAnc3RhdHNfaW1wb3J0 Jzo6cmVnbmFtZXNwYWNlLAorICAgICAgICBzdGF0aXN0aWNzX25hbWUgPT4gJ3Rlc3Rfc3RhdF9j bG9uZSc6Om5hbWUsCisgICAgICAgIGluaGVyaXRlZCA9PiBmYWxzZSwKKyAgICAgICAgbl9kaXN0 aW5jdCA9PiAneyIyLCAzIjogNCwgIjIsIC0xIjogNCwgIjIsIDAiOiA0LCAiMywgLTEiOiA0LCAi MywgLTIiOiA0LCAiLTEsIC0yIjogMywgIjIsIDMsIC0xIjogNCwgIjIsIDMsIC0yIjogNCwgIjIs IC0xLCAtMiI6IDQsICIzLCAtMSwgLTIiOiA0LCAiMiwgMywgLTEsIC0yIjogNH0nOjpwZ19uZGlz dGluY3QKKyAgICAgICk7CitFUlJPUjogIHBnX25kaXN0aW5jdDogaW52YWxpZCBhdHRudW0gZm9y IHRoaXMgc3RhdGlzdGljcyBvYmplY3Q6IDAKKy0tIHNldCBuX2Rpc3RpbmN0IHVzaW5nIGF0IGF0 dG51bSB0aGF0IGlzIG91dHNpZGUgdGhlIGV4cHJlc3Npb24gYm91bmRzKGJlbG93IC0yKQorU0VM RUNUCisgICAgcGdfY2F0YWxvZy5wZ19zZXRfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgIHN0YXRp c3RpY3Nfc2NoZW1hbmFtZSA9PiAnc3RhdHNfaW1wb3J0Jzo6cmVnbmFtZXNwYWNlLAorICAgICAg ICBzdGF0aXN0aWNzX25hbWUgPT4gJ3Rlc3Rfc3RhdF9jbG9uZSc6Om5hbWUsCisgICAgICAgIGlu aGVyaXRlZCA9PiBmYWxzZSwKKyAgICAgICAgbl9kaXN0aW5jdCA9PiAneyIyLCAzIjogNCwgIjIs IC00IjogNCwgIjIsIC0yIjogNCwgIjMsIC0xIjogNCwgIjMsIC0yIjogNCwgIi0xLCAtMiI6IDMs ICIyLCAzLCAtMSI6IDQsICIyLCAzLCAtMiI6IDQsICIyLCAtMSwgLTIiOiA0LCAiMywgLTEsIC0y IjogNCwgIjEsIDMsIC0xLCAtMiI6IDR9Jzo6cGdfbmRpc3RpbmN0CisgICAgICApOworRVJST1I6 ICBwZ19uZGlzdGluY3Q6IGludmFsaWQgYXR0bnVtIGZvciB0aGlzIHN0YXRpc3RpY3Mgb2JqZWN0 OiAtNAorU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19zZXRfZXh0ZW5kZWRfc3RhdHMoCisgICAg ICAgIHN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9PiAnc3RhdHNfaW1wb3J0Jzo6cmVnbmFtZXNwYWNl LAorICAgICAgICBzdGF0aXN0aWNzX25hbWUgPT4gJ3Rlc3Rfc3RhdF9jbG9uZSc6Om5hbWUsCisg ICAgICAgIGluaGVyaXRlZCA9PiBmYWxzZSwKKyAgICAgICAgbl9kaXN0aW5jdCA9PiAneyIyLCAz IjogNCwgIjIsIC0xIjogNCwgIjIsIC0yIjogNCwgIjMsIC0xIjogNCwgIjMsIC0yIjogNCwgIi0x LCAtMiI6IDMsICIyLCAzLCAtMSI6IDQsICIyLCAzLCAtMiI6IDQsICIyLCAtMSwgLTIiOiA0LCAi MywgLTEsIC0yIjogNCwgIjIsIDMsIC0xLCAtMiI6IDR9Jzo6cGdfbmRpc3RpbmN0CisgICAgICAp OworIHBnX3NldF9leHRlbmRlZF9zdGF0cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCiso MSByb3cpCisKK1NFTEVDVAorICAgIGUubl9kaXN0aW5jdCwgZS5kZXBlbmRlbmNpZXMsIGUubW9z dF9jb21tb25fdmFscywgZS5tb3N0X2NvbW1vbl92YWxfbnVsbHMsCisgICAgZS5tb3N0X2NvbW1v bl9mcmVxcywgZS5tb3N0X2NvbW1vbl9iYXNlX2ZyZXFzCitGUk9NIHBnX3N0YXRzX2V4dCBBUyBl CitXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgZS5z dGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJworQU5EIGUuaW5oZXJpdGVkID0gZmFs c2UKK1xneAorLVsgUkVDT1JEIDEgXS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorbl9kaXN0aW5jdCAgICAgICAgICAgICB8IHsiMiwgMyI6IDQsICIy LCAtMSI6IDQsICIyLCAtMiI6IDQsICIzLCAtMSI6IDQsICIzLCAtMiI6IDQsICItMSwgLTIiOiAz LCAiMiwgMywgLTEiOiA0LCAiMiwgMywgLTIiOiA0LCAiMiwgLTEsIC0yIjogNCwgIjMsIC0xLCAt MiI6IDQsICIyLCAzLCAtMSwgLTIiOiA0fQorZGVwZW5kZW5jaWVzICAgICAgICAgICB8IAorbW9z dF9jb21tb25fdmFscyAgICAgICB8IAorbW9zdF9jb21tb25fdmFsX251bGxzICB8IAorbW9zdF9j b21tb25fZnJlcXMgICAgICB8IAorbW9zdF9jb21tb25fYmFzZV9mcmVxcyB8IAorCistLSBzZXQg ZGVwZW5kZW5jaWVzIHVzaW5nIGF0IGF0dG51bSAoMSkgdGhhdCBpcyBub3QgaW4gdGhlIHN0YXRp c3RpY3Mgb2JqZWN0CitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3NldF9leHRlbmRlZF9zdGF0 cygKKyAgICAgICAgc3RhdGlzdGljc19zY2hlbWFuYW1lID0+ICdzdGF0c19pbXBvcnQnOjpyZWdu YW1lc3BhY2UsCisgICAgICAgIHN0YXRpc3RpY3NfbmFtZSA9PiAndGVzdF9zdGF0X2Nsb25lJzo6 bmFtZSwKKyAgICAgICAgaW5oZXJpdGVkID0+IGZhbHNlLAorICAgICAgICBkZXBlbmRlbmNpZXMg PT4gJ3siMiA9PiAxIjogMS4wMDAwMDAsICIyID0+IC0xIjogMS4wMDAwMDAsICIyID0+IC0yIjog MS4wMDAwMDAsICIzID0+IDIiOiAxLjAwMDAwMCwgIjMgPT4gLTEiOiAxLjAwMDAwMCwgIjMgPT4g LTIiOiAxLjAwMDAwMCwgIi0xID0+IDIiOiAwLjUwMDAwMCwgIi0xID0+IDMiOiAwLjUwMDAwMCwg Ii0xID0+IC0yIjogMS4wMDAwMDAsICItMiA9PiAyIjogMC41MDAwMDAsICItMiA9PiAzIjogMC41 MDAwMDAsICItMiA9PiAtMSI6IDEuMDAwMDAwLCAiMiwgMyA9PiAtMSI6IDEuMDAwMDAwLCAiMiwg MyA9PiAtMiI6IDEuMDAwMDAwLCAiMiwgLTEgPT4gMyI6IDEuMDAwMDAwLCAiMiwgLTEgPT4gLTIi OiAxLjAwMDAwMCwgIjIsIC0yID0+IDMiOiAxLjAwMDAwMCwgIjIsIC0yID0+IC0xIjogMS4wMDAw MDAsICIzLCAtMSA9PiAyIjogMS4wMDAwMDAsICIzLCAtMSA9PiAtMiI6IDEuMDAwMDAwLCAiMywg LTIgPT4gMiI6IDEuMDAwMDAwLCAiMywgLTIgPT4gLTEiOiAxLjAwMDAwMCwgIi0xLCAtMiA9PiAy IjogMC41MDAwMDAsICItMSwgLTIgPT4gMyI6IDAuNTAwMDAwLCAiMiwgMywgLTEgPT4gLTIiOiAx LjAwMDAwMCwgIjIsIDMsIC0yID0+IC0xIjogMS4wMDAwMDAsICIyLCAtMSwgLTIgPT4gMyI6IDEu MDAwMDAwLCAiMywgLTEsIC0yID0+IDIiOiAxLjAwMDAwMH0nOjpwZ19kZXBlbmRlbmNpZXMKKyAg ICAgICk7CitFUlJPUjogIHBnX2RlcGVuZGVuY2llczogaW52YWxpZCBhdHRudW0gZm9yIHRoaXMg c3RhdGlzdGljcyBvYmplY3Q6IDEKKy0tIHNldCBkZXBlbmRlbmNpZXMgdXNpbmcgYXQgYXR0bnVt IHRoYXQgaXMgMAorU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19zZXRfZXh0ZW5kZWRfc3RhdHMo CisgICAgICAgIHN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9PiAnc3RhdHNfaW1wb3J0Jzo6cmVnbmFt ZXNwYWNlLAorICAgICAgICBzdGF0aXN0aWNzX25hbWUgPT4gJ3Rlc3Rfc3RhdF9jbG9uZSc6Om5h bWUsCisgICAgICAgIGluaGVyaXRlZCA9PiBmYWxzZSwKKyAgICAgICAgZGVwZW5kZW5jaWVzID0+ ICd7IjIgPT4gMyI6IDEuMDAwMDAwLCAiMCA9PiAtMSI6IDEuMDAwMDAwLCAiMiA9PiAtMiI6IDEu MDAwMDAwLCAiMyA9PiAyIjogMS4wMDAwMDAsICIzID0+IC0xIjogMS4wMDAwMDAsICIzID0+IC0y IjogMS4wMDAwMDAsICItMSA9PiAyIjogMC41MDAwMDAsICItMSA9PiAzIjogMC41MDAwMDAsICIt MSA9PiAtMiI6IDEuMDAwMDAwLCAiLTIgPT4gMiI6IDAuNTAwMDAwLCAiLTIgPT4gMyI6IDAuNTAw MDAwLCAiLTIgPT4gLTEiOiAxLjAwMDAwMCwgIjIsIDMgPT4gLTEiOiAxLjAwMDAwMCwgIjIsIDMg PT4gLTIiOiAxLjAwMDAwMCwgIjIsIC0xID0+IDMiOiAxLjAwMDAwMCwgIjIsIC0xID0+IC0yIjog MS4wMDAwMDAsICIyLCAtMiA9PiAzIjogMS4wMDAwMDAsICIyLCAtMiA9PiAtMSI6IDEuMDAwMDAw LCAiMywgLTEgPT4gMiI6IDEuMDAwMDAwLCAiMywgLTEgPT4gLTIiOiAxLjAwMDAwMCwgIjMsIC0y ID0+IDIiOiAxLjAwMDAwMCwgIjMsIC0yID0+IC0xIjogMS4wMDAwMDAsICItMSwgLTIgPT4gMiI6 IDAuNTAwMDAwLCAiLTEsIC0yID0+IDMiOiAwLjUwMDAwMCwgIjIsIDMsIC0xID0+IC0yIjogMS4w MDAwMDAsICIyLCAzLCAtMiA9PiAtMSI6IDEuMDAwMDAwLCAiMiwgLTEsIC0yID0+IDMiOiAxLjAw MDAwMCwgIjMsIC0xLCAtMiA9PiAyIjogMS4wMDAwMDB9Jzo6cGdfZGVwZW5kZW5jaWVzCisgICAg ICApOworRVJST1I6ICBwZ19kZXBlbmRlbmNpZXM6IGludmFsaWQgYXR0bnVtIGZvciB0aGlzIHN0 YXRpc3RpY3Mgb2JqZWN0OiAwCistLSBzZXQgZGVwZW5kZW5jaWVzIHVzaW5nIGF0IGF0dG51bSB0 aGF0IGlzIG91dHNpZGUgdGhlIGV4cHJlc3Npb24gYm91bmRzKGJlbG93IC0yKQorU0VMRUNUCisg ICAgcGdfY2F0YWxvZy5wZ19zZXRfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgIHN0YXRpc3RpY3Nf c2NoZW1hbmFtZSA9PiAnc3RhdHNfaW1wb3J0Jzo6cmVnbmFtZXNwYWNlLAorICAgICAgICBzdGF0 aXN0aWNzX25hbWUgPT4gJ3Rlc3Rfc3RhdF9jbG9uZSc6Om5hbWUsCisgICAgICAgIGluaGVyaXRl ZCA9PiBmYWxzZSwKKyAgICAgICAgZGVwZW5kZW5jaWVzID0+ICd7IjIgPT4gMyI6IDEuMDAwMDAw LCAiMiA9PiAtMyI6IDEuMDAwMDAwLCAiMiA9PiAtMiI6IDEuMDAwMDAwLCAiMyA9PiAyIjogMS4w MDAwMDAsICIzID0+IC0xIjogMS4wMDAwMDAsICIzID0+IC0yIjogMS4wMDAwMDAsICItMSA9PiAy IjogMC41MDAwMDAsICItMSA9PiAzIjogMC41MDAwMDAsICItMSA9PiAtMiI6IDEuMDAwMDAwLCAi LTIgPT4gMiI6IDAuNTAwMDAwLCAiLTIgPT4gMyI6IDAuNTAwMDAwLCAiLTIgPT4gLTEiOiAxLjAw MDAwMCwgIjIsIDMgPT4gLTEiOiAxLjAwMDAwMCwgIjIsIDMgPT4gLTIiOiAxLjAwMDAwMCwgIjIs IC0xID0+IDMiOiAxLjAwMDAwMCwgIjIsIC0xID0+IC0yIjogMS4wMDAwMDAsICIyLCAtMiA9PiAz IjogMS4wMDAwMDAsICIyLCAtMiA9PiAtMSI6IDEuMDAwMDAwLCAiMywgLTEgPT4gMiI6IDEuMDAw MDAwLCAiMywgLTEgPT4gLTIiOiAxLjAwMDAwMCwgIjMsIC0yID0+IDIiOiAxLjAwMDAwMCwgIjMs IC0yID0+IC0xIjogMS4wMDAwMDAsICItMSwgLTIgPT4gMiI6IDAuNTAwMDAwLCAiLTEsIC0yID0+ IDMiOiAwLjUwMDAwMCwgIjIsIDMsIC0xID0+IC0yIjogMS4wMDAwMDAsICIyLCAzLCAtMiA9PiAt MSI6IDEuMDAwMDAwLCAiMiwgLTEsIC0yID0+IDMiOiAxLjAwMDAwMCwgIjMsIC0xLCAtMiA9PiAy IjogMS4wMDAwMDB9Jzo6cGdfZGVwZW5kZW5jaWVzCisgICAgICApOworRVJST1I6ICBwZ19kZXBl bmRlbmNpZXM6IGludmFsaWQgYXR0bnVtIGZvciB0aGlzIHN0YXRpc3RpY3Mgb2JqZWN0OiAtMwor U0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19zZXRfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgIHN0 YXRpc3RpY3Nfc2NoZW1hbmFtZSA9PiAnc3RhdHNfaW1wb3J0Jzo6cmVnbmFtZXNwYWNlLAorICAg ICAgICBzdGF0aXN0aWNzX25hbWUgPT4gJ3Rlc3Rfc3RhdF9jbG9uZSc6Om5hbWUsCisgICAgICAg IGluaGVyaXRlZCA9PiBmYWxzZSwKKyAgICAgICAgZGVwZW5kZW5jaWVzID0+ICd7IjIgPT4gMyI6 IDEuMDAwMDAwLCAiMiA9PiAtMSI6IDEuMDAwMDAwLCAiMiA9PiAtMiI6IDEuMDAwMDAwLCAiMyA9 PiAyIjogMS4wMDAwMDAsICIzID0+IC0xIjogMS4wMDAwMDAsICIzID0+IC0yIjogMS4wMDAwMDAs ICItMSA9PiAyIjogMC41MDAwMDAsICItMSA9PiAzIjogMC41MDAwMDAsICItMSA9PiAtMiI6IDEu MDAwMDAwLCAiLTIgPT4gMiI6IDAuNTAwMDAwLCAiLTIgPT4gMyI6IDAuNTAwMDAwLCAiLTIgPT4g LTEiOiAxLjAwMDAwMCwgIjIsIDMgPT4gLTEiOiAxLjAwMDAwMCwgIjIsIDMgPT4gLTIiOiAxLjAw MDAwMCwgIjIsIC0xID0+IDMiOiAxLjAwMDAwMCwgIjIsIC0xID0+IC0yIjogMS4wMDAwMDAsICIy LCAtMiA9PiAzIjogMS4wMDAwMDAsICIyLCAtMiA9PiAtMSI6IDEuMDAwMDAwLCAiMywgLTEgPT4g MiI6IDEuMDAwMDAwLCAiMywgLTEgPT4gLTIiOiAxLjAwMDAwMCwgIjMsIC0yID0+IDIiOiAxLjAw MDAwMCwgIjMsIC0yID0+IC0xIjogMS4wMDAwMDAsICItMSwgLTIgPT4gMiI6IDAuNTAwMDAwLCAi LTEsIC0yID0+IDMiOiAwLjUwMDAwMCwgIjIsIDMsIC0xID0+IC0yIjogMS4wMDAwMDAsICIyLCAz LCAtMiA9PiAtMSI6IDEuMDAwMDAwLCAiMiwgLTEsIC0yID0+IDMiOiAxLjAwMDAwMCwgIjMsIC0x LCAtMiA9PiAyIjogMS4wMDAwMDB9Jzo6cGdfZGVwZW5kZW5jaWVzCisgICAgICApOworIHBnX3Nl dF9leHRlbmRlZF9zdGF0cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisK K1NFTEVDVAorICAgIGUubl9kaXN0aW5jdCwgZS5kZXBlbmRlbmNpZXMsIGUubW9zdF9jb21tb25f dmFscywgZS5tb3N0X2NvbW1vbl92YWxfbnVsbHMsCisgICAgZS5tb3N0X2NvbW1vbl9mcmVxcywg ZS5tb3N0X2NvbW1vbl9iYXNlX2ZyZXFzCitGUk9NIHBnX3N0YXRzX2V4dCBBUyBlCitXSEVSRSBl LnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgZS5zdGF0aXN0aWNz X25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJworQU5EIGUuaW5oZXJpdGVkID0gZmFsc2UKK1xneAor LVsgUkVDT1JEIDEgXS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K K25fZGlzdGluY3QgICAgICAgICAgICAgfCB7IjIsIDMiOiA0LCAiMiwgLTEiOiA0LCAiMiwgLTIi OiA0LCAiMywgLTEiOiA0LCAiMywgLTIiOiA0LCAiLTEsIC0yIjogMywgIjIsIDMsIC0xIjogNCwg IjIsIDMsIC0yIjogNCwgIjIsIC0xLCAtMiI6IDQsICIzLCAtMSwgLTIiOiA0LCAiMiwgMywgLTEs IC0yIjogNH0KK2RlcGVuZGVuY2llcyAgICAgICAgICAgfCB7IjIgPT4gMyI6IDEuMDAwMDAwLCAi MiA9PiAtMSI6IDEuMDAwMDAwLCAiMiA9PiAtMiI6IDEuMDAwMDAwLCAiMyA9PiAyIjogMS4wMDAw MDAsICIzID0+IC0xIjogMS4wMDAwMDAsICIzID0+IC0yIjogMS4wMDAwMDAsICItMSA9PiAyIjog MC41MDAwMDAsICItMSA9PiAzIjogMC41MDAwMDAsICItMSA9PiAtMiI6IDEuMDAwMDAwLCAiLTIg PT4gMiI6IDAuNTAwMDAwLCAiLTIgPT4gMyI6IDAuNTAwMDAwLCAiLTIgPT4gLTEiOiAxLjAwMDAw MCwgIjIsIDMgPT4gLTEiOiAxLjAwMDAwMCwgIjIsIDMgPT4gLTIiOiAxLjAwMDAwMCwgIjIsIC0x ID0+IDMiOiAxLjAwMDAwMCwgIjIsIC0xID0+IC0yIjogMS4wMDAwMDAsICIyLCAtMiA9PiAzIjog MS4wMDAwMDAsICIyLCAtMiA9PiAtMSI6IDEuMDAwMDAwLCAiMywgLTEgPT4gMiI6IDEuMDAwMDAw LCAiMywgLTEgPT4gLTIiOiAxLjAwMDAwMCwgIjMsIC0yID0+IDIiOiAxLjAwMDAwMCwgIjMsIC0y ID0+IC0xIjogMS4wMDAwMDAsICItMSwgLTIgPT4gMiI6IDAuNTAwMDAwLCAiLTEsIC0yID0+IDMi OiAwLjUwMDAwMCwgIjIsIDMsIC0xID0+IC0yIjogMS4wMDAwMDAsICIyLCAzLCAtMiA9PiAtMSI6 IDEuMDAwMDAwLCAiMiwgLTEsIC0yID0+IDMiOiAxLjAwMDAwMCwgIjMsIC0xLCAtMiA9PiAyIjog MS4wMDAwMDB9Cittb3N0X2NvbW1vbl92YWxzICAgICAgIHwgCittb3N0X2NvbW1vbl92YWxfbnVs bHMgIHwgCittb3N0X2NvbW1vbl9mcmVxcyAgICAgIHwgCittb3N0X2NvbW1vbl9iYXNlX2ZyZXFz IHwgCisKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfc2V0X2V4dGVuZGVkX3N0YXRzKAorICAg ICAgICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUgPT4gJ3N0YXRzX2ltcG9ydCc6OnJlZ25hbWVzcGFj ZSwKKyAgICAgICAgc3RhdGlzdGljc19uYW1lID0+ICd0ZXN0X3N0YXRfY2xvbmUnOjpuYW1lLAor ICAgICAgICBpbmhlcml0ZWQgPT4gZmFsc2UsCisgICAgICAgIG1vc3RfY29tbW9uX3ZhbHMgPT4g J3t7Zm91cixOVUxMLDAsTlVMTH0se29uZSwiKDEsMS4xLE9ORSwwMS0wMS0yMDAxLFwie1wiXCJ4 a2V5XCJcIjogXCJcInh2YWxcIlwifVwiKSIsMSwyfSx7dHJlLCIoMywzLjMsVFJFLDAzLTAzLTIw MDMsKSIsLTEsM30se3R3bywiKDIsMi4yLFRXTywwMi0wMi0yMDAyLFwiW3RydWUsIDQsIFwiXCJz aXhcIlwiXVwiKSIsMSwyfX0nCisgICAgICApOworRVJST1I6ICBNQ1YgcGFyYW1ldGVycyAibW9z dF9jb21tb25fdmFscyIsICJtb3N0X2NvbW1vbl92YWxfbnVsbHMiLCAibW9zdF9jb21tb25fZnJl cXMiLCBhbmQgIm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMiIG11c3QgYmUgYWxsIHNwZWNpZmllZCBp ZiBhbnkgYXJlIHNwZWNpZmllZAorU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19zZXRfZXh0ZW5k ZWRfc3RhdHMoCisgICAgICAgIHN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9PiAnc3RhdHNfaW1wb3J0 Jzo6cmVnbmFtZXNwYWNlLAorICAgICAgICBzdGF0aXN0aWNzX25hbWUgPT4gJ3Rlc3Rfc3RhdF9j bG9uZSc6Om5hbWUsCisgICAgICAgIGluaGVyaXRlZCA9PiBmYWxzZSwKKyAgICAgICAgbW9zdF9j b21tb25fdmFsX251bGxzID0+ICd7e2YsdCxmLHR9LHtmLGYsZixmfSx7ZixmLGYsZn0se2YsZixm LGZ9fScKKyAgICAgICk7CitFUlJPUjogIE1DViBwYXJhbWV0ZXJzICJtb3N0X2NvbW1vbl92YWxz IiwgIm1vc3RfY29tbW9uX3ZhbF9udWxscyIsICJtb3N0X2NvbW1vbl9mcmVxcyIsIGFuZCAibW9z dF9jb21tb25fYmFzZV9mcmVxcyIgbXVzdCBiZSBhbGwgc3BlY2lmaWVkIGlmIGFueSBhcmUgc3Bl Y2lmaWVkCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3NldF9leHRlbmRlZF9zdGF0cygKKyAg ICAgICAgc3RhdGlzdGljc19zY2hlbWFuYW1lID0+ICdzdGF0c19pbXBvcnQnOjpyZWduYW1lc3Bh Y2UsCisgICAgICAgIHN0YXRpc3RpY3NfbmFtZSA9PiAndGVzdF9zdGF0X2Nsb25lJzo6bmFtZSwK KyAgICAgICAgaW5oZXJpdGVkID0+IGZhbHNlLAorICAgICAgICBtb3N0X2NvbW1vbl9mcmVxcyA9 PiAnezAuMjUsMC4yNSwwLjI1LDAuMjV9JworICAgICAgKTsKK0VSUk9SOiAgTUNWIHBhcmFtZXRl cnMgIm1vc3RfY29tbW9uX3ZhbHMiLCAibW9zdF9jb21tb25fdmFsX251bGxzIiwgIm1vc3RfY29t bW9uX2ZyZXFzIiwgYW5kICJtb3N0X2NvbW1vbl9iYXNlX2ZyZXFzIiBtdXN0IGJlIGFsbCBzcGVj aWZpZWQgaWYgYW55IGFyZSBzcGVjaWZpZWQKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfc2V0 X2V4dGVuZGVkX3N0YXRzKAorICAgICAgICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUgPT4gJ3N0YXRz X2ltcG9ydCc6OnJlZ25hbWVzcGFjZSwKKyAgICAgICAgc3RhdGlzdGljc19uYW1lID0+ICd0ZXN0 X3N0YXRfY2xvbmUnOjpuYW1lLAorICAgICAgICBpbmhlcml0ZWQgPT4gZmFsc2UsCisgICAgICAg IG1vc3RfY29tbW9uX2Jhc2VfZnJlcXMgPT4gJ3swLjAwMzkwNjI1LDAuMDE1NjI1LDAuMDAzOTA2 MjUsMC4wMTU2MjV9JworICAgICAgKTsKK0VSUk9SOiAgTUNWIHBhcmFtZXRlcnMgIm1vc3RfY29t bW9uX3ZhbHMiLCAibW9zdF9jb21tb25fdmFsX251bGxzIiwgIm1vc3RfY29tbW9uX2ZyZXFzIiwg YW5kICJtb3N0X2NvbW1vbl9iYXNlX2ZyZXFzIiBtdXN0IGJlIGFsbCBzcGVjaWZpZWQgaWYgYW55 IGFyZSBzcGVjaWZpZWQKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfc2V0X2V4dGVuZGVkX3N0 YXRzKAorICAgICAgICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUgPT4gJ3N0YXRzX2ltcG9ydCc6OnJl Z25hbWVzcGFjZSwKKyAgICAgICAgc3RhdGlzdGljc19uYW1lID0+ICd0ZXN0X3N0YXRfY2xvbmUn OjpuYW1lLAorICAgICAgICBpbmhlcml0ZWQgPT4gZmFsc2UsCisgICAgICAgIG1vc3RfY29tbW9u X3ZhbHMgPT4gJ3t7Zm91cixOVUxMLDAsTlVMTH0se29uZSwiKDEsMS4xLE9ORSwwMS0wMS0yMDAx LFwie1wiXCJ4a2V5XCJcIjogXCJcInh2YWxcIlwifVwiKSIsMSwyfSx7dHJlLCIoMywzLjMsVFJF LDAzLTAzLTIwMDMsKSIsLTEsM30se3R3bywiKDIsMi4yLFRXTywwMi0wMi0yMDAyLFwiW3RydWUs IDQsIFwiXCJzaXhcIlwiXVwiKSIsMSwyfX0nLAorICAgICAgICBtb3N0X2NvbW1vbl92YWxfbnVs bHMgPT4gJ3t7Zix0LGYsdH0se2YsZixmLGZ9LHtmLGYsZixmfSx7ZixmLGYsZn19JywKKyAgICAg ICAgbW9zdF9jb21tb25fZnJlcXMgPT4gJ3swLjI1LDAuMjUsMC4yNSwwLjI1fScsCisgICAgICAg IG1vc3RfY29tbW9uX2Jhc2VfZnJlcXMgPT4gJ3swLjAwMzkwNjI1LDAuMDE1NjI1LDAuMDAzOTA2 MjUsMC4wMTU2MjV9JworICAgICAgKTsKKyBwZ19zZXRfZXh0ZW5kZWRfc3RhdHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QKKyAgICBlLm5fZGlzdGluY3Qs IGUuZGVwZW5kZW5jaWVzLCBlLm1vc3RfY29tbW9uX3ZhbHMsIGUubW9zdF9jb21tb25fdmFsX251 bGxzLAorICAgIGUubW9zdF9jb21tb25fZnJlcXMsIGUubW9zdF9jb21tb25fYmFzZV9mcmVxcwor RlJPTSBwZ19zdGF0c19leHQgQVMgZQorV0hFUkUgZS5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAn c3RhdHNfaW1wb3J0JworQU5EIGUuc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rfc3RhdF9jbG9uZScK K0FORCBlLmluaGVyaXRlZCA9IGZhbHNlCitcZ3gKKy1bIFJFQ09SRCAxIF0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCituX2Rpc3RpbmN0ICAgICAgICAgICAgIHwg eyIyLCAzIjogNCwgIjIsIC0xIjogNCwgIjIsIC0yIjogNCwgIjMsIC0xIjogNCwgIjMsIC0yIjog NCwgIi0xLCAtMiI6IDMsICIyLCAzLCAtMSI6IDQsICIyLCAzLCAtMiI6IDQsICIyLCAtMSwgLTIi OiA0LCAiMywgLTEsIC0yIjogNCwgIjIsIDMsIC0xLCAtMiI6IDR9CitkZXBlbmRlbmNpZXMgICAg ICAgICAgIHwgeyIyID0+IDMiOiAxLjAwMDAwMCwgIjIgPT4gLTEiOiAxLjAwMDAwMCwgIjIgPT4g LTIiOiAxLjAwMDAwMCwgIjMgPT4gMiI6IDEuMDAwMDAwLCAiMyA9PiAtMSI6IDEuMDAwMDAwLCAi MyA9PiAtMiI6IDEuMDAwMDAwLCAiLTEgPT4gMiI6IDAuNTAwMDAwLCAiLTEgPT4gMyI6IDAuNTAw MDAwLCAiLTEgPT4gLTIiOiAxLjAwMDAwMCwgIi0yID0+IDIiOiAwLjUwMDAwMCwgIi0yID0+IDMi OiAwLjUwMDAwMCwgIi0yID0+IC0xIjogMS4wMDAwMDAsICIyLCAzID0+IC0xIjogMS4wMDAwMDAs ICIyLCAzID0+IC0yIjogMS4wMDAwMDAsICIyLCAtMSA9PiAzIjogMS4wMDAwMDAsICIyLCAtMSA9 PiAtMiI6IDEuMDAwMDAwLCAiMiwgLTIgPT4gMyI6IDEuMDAwMDAwLCAiMiwgLTIgPT4gLTEiOiAx LjAwMDAwMCwgIjMsIC0xID0+IDIiOiAxLjAwMDAwMCwgIjMsIC0xID0+IC0yIjogMS4wMDAwMDAs ICIzLCAtMiA9PiAyIjogMS4wMDAwMDAsICIzLCAtMiA9PiAtMSI6IDEuMDAwMDAwLCAiLTEsIC0y ID0+IDIiOiAwLjUwMDAwMCwgIi0xLCAtMiA9PiAzIjogMC41MDAwMDAsICIyLCAzLCAtMSA9PiAt MiI6IDEuMDAwMDAwLCAiMiwgMywgLTIgPT4gLTEiOiAxLjAwMDAwMCwgIjIsIC0xLCAtMiA9PiAz IjogMS4wMDAwMDAsICIzLCAtMSwgLTIgPT4gMiI6IDEuMDAwMDAwfQorbW9zdF9jb21tb25fdmFs cyAgICAgICB8IHt7Zm91cixOVUxMLDAsTlVMTH0se29uZSwiKDEsMS4xLE9ORSwwMS0wMS0yMDAx LFwie1wiXCJ4a2V5XCJcIjogXCJcInh2YWxcIlwifVwiKSIsMSwyfSx7dHJlLCIoMywzLjMsVFJF LDAzLTAzLTIwMDMsKSIsLTEsM30se3R3bywiKDIsMi4yLFRXTywwMi0wMi0yMDAyLFwiW3RydWUs IDQsIFwiXCJzaXhcIlwiXVwiKSIsMSwyfX0KK21vc3RfY29tbW9uX3ZhbF9udWxscyAgfCB7e2Ys dCxmLHR9LHtmLGYsZixmfSx7ZixmLGYsZn0se2YsZixmLGZ9fQorbW9zdF9jb21tb25fZnJlcXMg ICAgICB8IHswLjI1LDAuMjUsMC4yNSwwLjI1fQorbW9zdF9jb21tb25fYmFzZV9mcmVxcyB8IHsw LjAwMzkwNjI1LDAuMDE1NjI1LDAuMDAzOTA2MjUsMC4wMTU2MjV9CisKK1NFTEVDVAorICAgIHBn X2NhdGFsb2cucGdfc2V0X2V4dGVuZGVkX3N0YXRzKAorICAgICAgICBzdGF0aXN0aWNzX3NjaGVt YW5hbWUgPT4gJ3N0YXRzX2ltcG9ydCc6OnJlZ25hbWVzcGFjZSwKKyAgICAgICAgc3RhdGlzdGlj c19uYW1lID0+ICd0ZXN0X3N0YXRfY2xvbmUnOjpuYW1lLAorICAgICAgICBpbmhlcml0ZWQgPT4g ZmFsc2UsCisgICAgICAgIGV4cHJzID0+ICd7ezAsNCwtMC43NSwiezF9IiwiezAuNX0iLCJ7LTEs MH0iLC0wLjYsTlVMTCxOVUxMLE5VTEx9LHswLjI1LDQsLTAuNSwiezJ9IiwiezAuNX0iLE5VTEws MSxOVUxMLE5VTEwsTlVMTH19JworICAgICAgKTsKKyBwZ19zZXRfZXh0ZW5kZWRfc3RhdHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QKKyAgICBlLmluaGVy aXRlZCwgZS5udWxsX2ZyYWMsIGUuYXZnX3dpZHRoLCBlLm5fZGlzdGluY3QsIGUubW9zdF9jb21t b25fdmFscywKKyAgICBlLm1vc3RfY29tbW9uX2ZyZXFzLCBlLmhpc3RvZ3JhbV9ib3VuZHMsIGUu Y29ycmVsYXRpb24sCisgICAgZS5tb3N0X2NvbW1vbl9lbGVtcywgZS5tb3N0X2NvbW1vbl9lbGVt X2ZyZXFzLCBlLmVsZW1fY291bnRfaGlzdG9ncmFtCitGUk9NIHBnX3N0YXRzX2V4dF9leHBycyBB UyBlCitXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQg ZS5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJworYW5kIGUuaW5oZXJpdGVkID0g ZmFsc2UKK1xneAorLVsgUkVDT1JEIDEgXS0tLS0tLS0tLS0rLS0tLS0tLQoraW5oZXJpdGVkICAg ICAgICAgICAgICB8IGYKK251bGxfZnJhYyAgICAgICAgICAgICAgfCAwCithdmdfd2lkdGggICAg ICAgICAgICAgIHwgNAorbl9kaXN0aW5jdCAgICAgICAgICAgICB8IC0wLjc1Cittb3N0X2NvbW1v bl92YWxzICAgICAgIHwgezF9Cittb3N0X2NvbW1vbl9mcmVxcyAgICAgIHwgezAuNX0KK2hpc3Rv Z3JhbV9ib3VuZHMgICAgICAgfCB7LTEsMH0KK2NvcnJlbGF0aW9uICAgICAgICAgICAgfCAtMC42 Cittb3N0X2NvbW1vbl9lbGVtcyAgICAgIHwgCittb3N0X2NvbW1vbl9lbGVtX2ZyZXFzIHwgCitl bGVtX2NvdW50X2hpc3RvZ3JhbSAgIHwgCistWyBSRUNPUkQgMiBdLS0tLS0tLS0tLSstLS0tLS0t Citpbmhlcml0ZWQgICAgICAgICAgICAgIHwgZgorbnVsbF9mcmFjICAgICAgICAgICAgICB8IDAu MjUKK2F2Z193aWR0aCAgICAgICAgICAgICAgfCA0CituX2Rpc3RpbmN0ICAgICAgICAgICAgIHwg LTAuNQorbW9zdF9jb21tb25fdmFscyAgICAgICB8IHsyfQorbW9zdF9jb21tb25fZnJlcXMgICAg ICB8IHswLjV9CitoaXN0b2dyYW1fYm91bmRzICAgICAgIHwgCitjb3JyZWxhdGlvbiAgICAgICAg ICAgIHwgMQorbW9zdF9jb21tb25fZWxlbXMgICAgICB8IAorbW9zdF9jb21tb25fZWxlbV9mcmVx cyB8IAorZWxlbV9jb3VudF9oaXN0b2dyYW0gICB8IAorCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9n LnBnX2NsZWFyX2V4dGVuZGVkX3N0YXRzKAorICAgICAgICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUg PT4gJ3N0YXRzX2ltcG9ydCc6OnJlZ25hbWVzcGFjZSwKKyAgICAgICAgc3RhdGlzdGljc19uYW1l ID0+ICd0ZXN0X3N0YXRfY2xvbmUnOjpuYW1lLAorICAgICAgICBpbmhlcml0ZWQgPT4gZmFsc2Up OworIHBnX2NsZWFyX2V4dGVuZGVkX3N0YXRzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IAorKDEgcm93KQorCitTRUxFQ1QgQ09VTlQoKikKK0ZST00gcGdfc3RhdHNfZXh0IEFTIGUKK1dI RVJFIGUuc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBlLnN0YXRp c3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRfY2xvbmUnCitBTkQgZS5pbmhlcml0ZWQgPSBmYWxzZTsK KyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMAorKDEgcm93KQorCitTRUxFQ1QgQ09VTlQoKikKK0ZS T00gcGdfc3RhdHNfZXh0X2V4cHJzIEFTIGUKK1dIRVJFIGUuc3RhdGlzdGljc19zY2hlbWFuYW1l ID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBlLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRfY2xv bmUnCitBTkQgZS5pbmhlcml0ZWQgPSBmYWxzZTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMAor KDEgcm93KQorCistLQorLS0gQ29weSBzdGF0cyBmcm9tIHRlc3Rfc3RhdCB0byB0ZXN0X3N0YXRf Y2xvbmUKKy0tCitTRUxFQ1QKKyAgICBlLnN0YXRpc3RpY3NfbmFtZSwKKyAgICBwZ19jYXRhbG9n LnBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgICdzdGF0aXN0aWNzX3NjaGVtYW5h bWUnLCBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZTo6cmVnbmFtZXNwYWNlLAorICAgICAgICAnc3Rh dGlzdGljc19uYW1lJywgJ3Rlc3Rfc3RhdF9jbG9uZSc6Om5hbWUsCisgICAgICAgICdpbmhlcml0 ZWQnLCBlLmluaGVyaXRlZCwKKyAgICAgICAgJ25fZGlzdGluY3QnLCBlLm5fZGlzdGluY3QsCisg ICAgICAgICdkZXBlbmRlbmNpZXMnLCBlLmRlcGVuZGVuY2llcywKKyAgICAgICAgJ21vc3RfY29t bW9uX3ZhbHMnLCBlLm1vc3RfY29tbW9uX3ZhbHMsCisgICAgICAgICdtb3N0X2NvbW1vbl92YWxf bnVsbHMnLCBlLm1vc3RfY29tbW9uX3ZhbF9udWxscywKKyAgICAgICAgJ21vc3RfY29tbW9uX2Zy ZXFzJywgZS5tb3N0X2NvbW1vbl9mcmVxcywKKyAgICAgICAgJ21vc3RfY29tbW9uX2Jhc2VfZnJl cXMnLCBlLm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMsCisgICAgICAgICdleHBycycsIHguZXhwcnMK KyAgICApCitGUk9NIHBnX3N0YXRzX2V4dCBBUyBlCitDUk9TUyBKT0lOIExBVEVSQUwgKAorICAg IFNFTEVDVAorICAgICAgICBhcnJheV9hZ2coCisgICAgICAgICAgICBBUlJBWVtlZS5udWxsX2Zy YWM6OnRleHQsIGVlLmF2Z193aWR0aDo6dGV4dCwKKyAgICAgICAgICAgICAgICAgIGVlLm5fZGlz dGluY3Q6OnRleHQsIGVlLm1vc3RfY29tbW9uX3ZhbHM6OnRleHQsCisgICAgICAgICAgICAgICAg ICBlZS5tb3N0X2NvbW1vbl9mcmVxczo6dGV4dCwgZWUuaGlzdG9ncmFtX2JvdW5kczo6dGV4dCwK KyAgICAgICAgICAgICAgICAgIGVlLmNvcnJlbGF0aW9uOjp0ZXh0LCBlZS5tb3N0X2NvbW1vbl9l bGVtczo6dGV4dCwKKyAgICAgICAgICAgICAgICAgIGVlLm1vc3RfY29tbW9uX2VsZW1fZnJlcXM6 OnRleHQsCisgICAgICAgICAgICAgICAgICBlZS5lbGVtX2NvdW50X2hpc3RvZ3JhbTo6dGV4dF0p CisgICAgRlJPTSBwZ19zdGF0c19leHRfZXhwcnMgQVMgZWUKKyAgICBXSEVSRSBlZS5zdGF0aXN0 aWNzX3NjaGVtYW5hbWUgPSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZQorICAgIEFORCBlZS5zdGF0 aXN0aWNzX25hbWUgPSBlLnN0YXRpc3RpY3NfbmFtZQorICAgIEFORCBlZS5pbmhlcml0ZWQgPSBl LmluaGVyaXRlZAorICAgICkgQVMgeChleHBycykKK1dIRVJFIGUuc3RhdGlzdGljc19zY2hlbWFu YW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBlLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXQn OworIHN0YXRpc3RpY3NfbmFtZSB8IHBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHMgCistLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ZXN0X3N0YXQgICAgICAg fCB0CisoMSByb3cpCisKK1NFTEVDVCBvLmluaGVyaXRlZCwKKyAgICAgICBvLm5fZGlzdGluY3Qs IG8uZGVwZW5kZW5jaWVzLCBvLm1vc3RfY29tbW9uX3ZhbHMsCisgICAgICAgby5tb3N0X2NvbW1v bl92YWxfbnVsbHMsIG8ubW9zdF9jb21tb25fZnJlcXMsCisgICAgICAgby5tb3N0X2NvbW1vbl9i YXNlX2ZyZXFzCitGUk9NIHBnX3N0YXRzX2V4dCBBUyBvCitXSEVSRSBvLnN0YXRpc3RpY3Nfc2No ZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQgby5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9z dGF0JworRVhDRVBUCitTRUxFQ1Qgbi5pbmhlcml0ZWQsCisgICAgICAgbi5uX2Rpc3RpbmN0LCBu LmRlcGVuZGVuY2llcywgbi5tb3N0X2NvbW1vbl92YWxzLAorICAgICAgIG4ubW9zdF9jb21tb25f dmFsX251bGxzLCBuLm1vc3RfY29tbW9uX2ZyZXFzLAorICAgICAgIG4ubW9zdF9jb21tb25fYmFz ZV9mcmVxcworRlJPTSBwZ19zdGF0c19leHQgQVMgbgorV0hFUkUgbi5zdGF0aXN0aWNzX3NjaGVt YW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5EIG4uc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rfc3Rh dF9jbG9uZSc7CisgaW5oZXJpdGVkIHwgbl9kaXN0aW5jdCB8IGRlcGVuZGVuY2llcyB8IG1vc3Rf Y29tbW9uX3ZhbHMgfCBtb3N0X2NvbW1vbl92YWxfbnVsbHMgfCBtb3N0X2NvbW1vbl9mcmVxcyB8 IG1vc3RfY29tbW9uX2Jhc2VfZnJlcXMgCistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCitTRUxF Q1Qgbi5pbmhlcml0ZWQsCisgICAgICAgbi5uX2Rpc3RpbmN0LCBuLmRlcGVuZGVuY2llcywgbi5t b3N0X2NvbW1vbl92YWxzLAorICAgICAgIG4ubW9zdF9jb21tb25fdmFsX251bGxzLCBuLm1vc3Rf Y29tbW9uX2ZyZXFzLAorICAgICAgIG4ubW9zdF9jb21tb25fYmFzZV9mcmVxcworRlJPTSBwZ19z dGF0c19leHQgQVMgbgorV0hFUkUgbi5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1w b3J0JworQU5EIG4uc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rfc3RhdF9jbG9uZScKK0VYQ0VQVAor U0VMRUNUIG8uaW5oZXJpdGVkLAorICAgICAgIG8ubl9kaXN0aW5jdCwgby5kZXBlbmRlbmNpZXMs IG8ubW9zdF9jb21tb25fdmFscywKKyAgICAgICBvLm1vc3RfY29tbW9uX3ZhbF9udWxscywgby5t b3N0X2NvbW1vbl9mcmVxcywKKyAgICAgICBvLm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMKK0ZST00g cGdfc3RhdHNfZXh0IEFTIG8KK1dIRVJFIG8uc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRz X2ltcG9ydCcKK0FORCBvLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXQnOworIGluaGVyaXRl ZCB8IG5fZGlzdGluY3QgfCBkZXBlbmRlbmNpZXMgfCBtb3N0X2NvbW1vbl92YWxzIHwgbW9zdF9j b21tb25fdmFsX251bGxzIHwgbW9zdF9jb21tb25fZnJlcXMgfCBtb3N0X2NvbW1vbl9iYXNlX2Zy ZXFzIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworU0VMRUNUIG8uaW5oZXJpdGVkLAorICAg ICAgIG8ubnVsbF9mcmFjLCBvLmF2Z193aWR0aCwgby5uX2Rpc3RpbmN0LAorICAgICAgIG8ubW9z dF9jb21tb25fdmFsczo6dGV4dCBBUyBtb3N0X2NvbW1vbl92YWxzLAorICAgICAgIG8ubW9zdF9j b21tb25fZnJlcXMsCisgICAgICAgby5oaXN0b2dyYW1fYm91bmRzOjp0ZXh0IEFTIGhpc3RvZ3Jh bV9ib3VuZHMsCisgICAgICAgby5jb3JyZWxhdGlvbiwKKyAgICAgICBvLm1vc3RfY29tbW9uX2Vs ZW1zOjp0ZXh0IEFTIG1vc3RfY29tbW9uX2VsZW1zLAorICAgICAgIG8ubW9zdF9jb21tb25fZWxl bV9mcmVxcywgby5lbGVtX2NvdW50X2hpc3RvZ3JhbQorRlJPTSBwZ19zdGF0c19leHRfZXhwcnMg QVMgbworV0hFUkUgby5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5E IG8uc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rfc3RhdCcKK0VYQ0VQVAorU0VMRUNUIG4uaW5oZXJp dGVkLAorICAgICAgIG4ubnVsbF9mcmFjLCBuLmF2Z193aWR0aCwgbi5uX2Rpc3RpbmN0LAorICAg ICAgIG4ubW9zdF9jb21tb25fdmFsczo6dGV4dCBBUyBtb3N0X2NvbW1vbl92YWxzLAorICAgICAg IG4ubW9zdF9jb21tb25fZnJlcXMsCisgICAgICAgbi5oaXN0b2dyYW1fYm91bmRzOjp0ZXh0IEFT IGhpc3RvZ3JhbV9ib3VuZHMsCisgICAgICAgbi5jb3JyZWxhdGlvbiwKKyAgICAgICBuLm1vc3Rf Y29tbW9uX2VsZW1zOjp0ZXh0IEFTIG1vc3RfY29tbW9uX2VsZW1zLAorICAgICAgIG4ubW9zdF9j b21tb25fZWxlbV9mcmVxcywgbi5lbGVtX2NvdW50X2hpc3RvZ3JhbQorRlJPTSBwZ19zdGF0c19l eHRfZXhwcnMgQVMgbgorV0hFUkUgbi5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1w b3J0JworQU5EIG4uc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rfc3RhdF9jbG9uZSc7CisgaW5oZXJp dGVkIHwgbnVsbF9mcmFjIHwgYXZnX3dpZHRoIHwgbl9kaXN0aW5jdCB8IG1vc3RfY29tbW9uX3Zh bHMgfCBtb3N0X2NvbW1vbl9mcmVxcyB8IGhpc3RvZ3JhbV9ib3VuZHMgfCBjb3JyZWxhdGlvbiB8 IG1vc3RfY29tbW9uX2VsZW1zIHwgbW9zdF9jb21tb25fZWxlbV9mcmVxcyB8IGVsZW1fY291bnRf aGlzdG9ncmFtIAorLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCBuLmluaGVy aXRlZCwKKyAgICAgICBuLm51bGxfZnJhYywgbi5hdmdfd2lkdGgsIG4ubl9kaXN0aW5jdCwKKyAg ICAgICBuLm1vc3RfY29tbW9uX3ZhbHM6OnRleHQgQVMgbW9zdF9jb21tb25fdmFscywKKyAgICAg ICBuLm1vc3RfY29tbW9uX2ZyZXFzLAorICAgICAgIG4uaGlzdG9ncmFtX2JvdW5kczo6dGV4dCBB UyBoaXN0b2dyYW1fYm91bmRzLAorICAgICAgIG4uY29ycmVsYXRpb24sCisgICAgICAgbi5tb3N0 X2NvbW1vbl9lbGVtczo6dGV4dCBBUyBtb3N0X2NvbW1vbl9lbGVtcywKKyAgICAgICBuLm1vc3Rf Y29tbW9uX2VsZW1fZnJlcXMsIG4uZWxlbV9jb3VudF9oaXN0b2dyYW0KK0ZST00gcGdfc3RhdHNf ZXh0X2V4cHJzIEFTIG4KK1dIRVJFIG4uc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2lt cG9ydCcKK0FORCBuLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRfY2xvbmUnCitFWENFUFQK K1NFTEVDVCBvLmluaGVyaXRlZCwKKyAgICAgICBvLm51bGxfZnJhYywgby5hdmdfd2lkdGgsIG8u bl9kaXN0aW5jdCwKKyAgICAgICBvLm1vc3RfY29tbW9uX3ZhbHM6OnRleHQgQVMgbW9zdF9jb21t b25fdmFscywKKyAgICAgICBvLm1vc3RfY29tbW9uX2ZyZXFzLAorICAgICAgIG8uaGlzdG9ncmFt X2JvdW5kczo6dGV4dCBBUyBoaXN0b2dyYW1fYm91bmRzLAorICAgICAgIG8uY29ycmVsYXRpb24s CisgICAgICAgby5tb3N0X2NvbW1vbl9lbGVtczo6dGV4dCBBUyBtb3N0X2NvbW1vbl9lbGVtcywK KyAgICAgICBvLm1vc3RfY29tbW9uX2VsZW1fZnJlcXMsIG8uZWxlbV9jb3VudF9oaXN0b2dyYW0K K0ZST00gcGdfc3RhdHNfZXh0X2V4cHJzIEFTIG8KK1dIRVJFIG8uc3RhdGlzdGljc19zY2hlbWFu YW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBvLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXQn OworIGluaGVyaXRlZCB8IG51bGxfZnJhYyB8IGF2Z193aWR0aCB8IG5fZGlzdGluY3QgfCBtb3N0 X2NvbW1vbl92YWxzIHwgbW9zdF9jb21tb25fZnJlcXMgfCBoaXN0b2dyYW1fYm91bmRzIHwgY29y cmVsYXRpb24gfCBtb3N0X2NvbW1vbl9lbGVtcyB8IG1vc3RfY29tbW9uX2VsZW1fZnJlcXMgfCBl bGVtX2NvdW50X2hpc3RvZ3JhbSAKKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCiBEUk9Q IFNDSEVNQSBzdGF0c19pbXBvcnQgQ0FTQ0FERTsKIE5PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8g NiBvdGhlciBvYmplY3RzCiBERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIHR5cGUgc3RhdHNfaW1w b3J0LmNvbXBsZXhfdHlwZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNf ZXh0LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2V4dC5zcWwKaW5kZXggZGE1YzEx YWVkZDcuLjZjMjQ5ZjNkMDBjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0 c19leHQuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2V4dC5zcWwKQEAgLTE3 MDQsNiArMTcwNCwxMCBAQCBTRUxFQ1Qgc3RhdGlzdGljc19uYW1lLCBtb3N0X2NvbW1vbl92YWxz IEZST00gcGdfc3RhdHNfZXh0X2V4cHJzIHgKIFNFTEVDVCAneyI2LCAtMSI6IDE0LCAiNiwgLTIi OiA5MTQzLCAiLTEsIC0yIjogMTM0NTQsICI2LCAtMSwgLTIiOiAxNDU0OX0nOjpwZ19uZGlzdGlu Y3Q7CiAtLSBjYW4ndCBoYXZlIGR1cGxpY2F0ZXMgYXR0bnVtcyBpbiBsaXN0CiBTRUxFQ1QgJ3si NiwgLTEiOiAxNCwgIjYsIC0yIjogOTE0MywgIi0xLCAtMSI6IDEzNDU0LCAiNiwgLTEsIC0yIjog MTQ1NDl9Jzo6cGdfbmRpc3RpbmN0OworLS0gY2FuJ3QgdXNlIGluZi8taW5mL05hTiBmb3IgbmRp c3RpbmN0IHZhbHVlcy4KK1NFTEVDVCAneyI2LCAtMSI6ICJJbmYiLCAiNiwgLTIiOiA5MTQzLCAi LTEsIC0yIjogMTM0NTQsICI2LCAtMSwgLTIiOiAxNDU0OX0nOjpwZ19uZGlzdGluY3Q7CitTRUxF Q1QgJ3siNiwgLTEiOiAiLUluZiIsICI2LCAtMiI6IDkxNDMsICItMSwgLTIiOiAxMzQ1NCwgIjYs IC0xLCAtMiI6IDE0NTQ5fSc6OnBnX25kaXN0aW5jdDsKK1NFTEVDVCAneyI2LCAtMSI6ICJOYU4i LCAiNiwgLTIiOiA5MTQzLCAiLTEsIC0yIjogMTM0NTQsICI2LCAtMSwgLTIiOiAxNDU0OX0nOjpw Z19uZGlzdGluY3Q7CiAKIFNFTEVDVCAneyItMiA9PiA2IjogMC4yOTI1MDgsICItMiA9PiAtMSI6 IDAuMTEzOTk5LCAiNiwgLTIgPT4gLTEiOiAwLjM0ODQ3OSwgIi0xLCAtMiA9PiA2IjogMC44Mzk2 OTF9Jzo6cGdfZGVwZW5kZW5jaWVzOwogLS0gY2FuJ3QgaGF2ZSBkdXBsaWNhdGVzIGF0dG51bXMg aW4gbGlzdApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHNfaW1wb3J0LnNx bCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2ltcG9ydC5zcWwKaW5kZXggNWUyNGM3Nzlk ODAuLjliNjllMmNkNDhmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0c19p bXBvcnQuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzX2ltcG9ydC5zcWwKQEAg LTE1MSw4ICsxNTEsNiBAQCBDUkVBVEUgVEFCTEUgc3RhdHNfaW1wb3J0LnBhcnRfY2hpbGRfMQog ICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMCkKICAgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVk ID0gZmFsc2UpOwogCi1DUkVBVEUgSU5ERVggcGFydF9wYXJlbnRfaSBPTiBzdGF0c19pbXBvcnQu cGFydF9wYXJlbnQoaSk7Ci0KIEFOQUxZWkUgc3RhdHNfaW1wb3J0LnBhcnRfcGFyZW50OwogCiBT RUxFQ1QgcmVscGFnZXMKQEAgLTE2MSw0NCArMTU5LDExIEBAIFdIRVJFIG9pZCA9ICdzdGF0c19p bXBvcnQucGFydF9wYXJlbnQnOjpyZWdjbGFzczsKIAogLS0gYWx0aG91Z2ggcGFydGl0aW9uZWQg dGFibGVzIGhhdmUgbm8gc3RvcmFnZSwgc2V0dGluZyByZWxwYWdlcyB0byBhCiAtLSBwb3NpdGl2 ZSB2YWx1ZSBpcyBzdGlsbCBhbGxvd2VkCi1TRUxFQ1QKLSAgICBwZ19jYXRhbG9nLnBnX3NldF9y ZWxhdGlvbl9zdGF0cygKLSAgICAgICAgcmVsYXRpb24gPT4gJ3N0YXRzX2ltcG9ydC5wYXJ0X3Bh cmVudF9pJzo6cmVnY2xhc3MsCi0gICAgICAgIHJlbHBhZ2VzID0+IDI6OmludGVnZXIpOwotCiBT RUxFQ1QKICAgICBwZ19jYXRhbG9nLnBnX3NldF9yZWxhdGlvbl9zdGF0cygKICAgICAgICAgcmVs YXRpb24gPT4gJ3N0YXRzX2ltcG9ydC5wYXJ0X3BhcmVudCc6OnJlZ2NsYXNzLAogICAgICAgICBy ZWxwYWdlcyA9PiAyOjppbnRlZ2VyKTsKIAotLS0KLS0tIFBhcnRpdGlvbmVkIGluZGV4ZXMgYXJl bid0IGFuYWx5emVkIGJ1dCBpdCBpcyBwb3NzaWJsZSB0byBzZXQKLS0tIHN0YXRzLiBUaGUgbG9j a2luZyBydWxlcyBhcmUgZGlmZmVyZW50IGZyb20gbm9ybWFsIGluZGV4ZXMgZHVlIHRvCi0tLSB0 aGUgcnVsZXMgZm9yIGluLXBsYWNlIHVwZGF0ZXM6IGJvdGggdGhlIHBhcnRpdGlvbmVkIHRhYmxl IGFuZCB0aGUKLS0tIHBhcnRpdGlvbmVkIGluZGV4IGFyZSBsb2NrZWQgaW4gU2hhcmVVcGRhdGVF eGNsdXNpdmUgbW9kZS4KLS0tCi1CRUdJTjsKLQotU0VMRUNUCi0gICAgcGdfY2F0YWxvZy5wZ19z ZXRfcmVsYXRpb25fc3RhdHMoCi0gICAgICAgIHJlbGF0aW9uID0+ICdzdGF0c19pbXBvcnQucGFy dF9wYXJlbnRfaSc6OnJlZ2NsYXNzLAotICAgICAgICByZWxwYWdlcyA9PiAyOjppbnRlZ2VyKTsK LQotU0VMRUNUIG1vZGUgRlJPTSBwZ19sb2NrcwotV0hFUkUgcmVsYXRpb24gPSAnc3RhdHNfaW1w b3J0LnBhcnRfcGFyZW50Jzo6cmVnY2xhc3MgQU5ECi0gICAgICBwaWQgPSBwZ19iYWNrZW5kX3Bp ZCgpIEFORCBncmFudGVkOwotCi1TRUxFQ1QgbW9kZSBGUk9NIHBnX2xvY2tzCi1XSEVSRSByZWxh dGlvbiA9ICdzdGF0c19pbXBvcnQucGFydF9wYXJlbnRfaSc6OnJlZ2NsYXNzIEFORAotICAgICAg cGlkID0gcGdfYmFja2VuZF9waWQoKSBBTkQgZ3JhbnRlZDsKLQotQ09NTUlUOwotCi1TRUxFQ1QK LSAgICBwZ19jYXRhbG9nLnBnX3Jlc3RvcmVfcmVsYXRpb25fc3RhdHMoCi0gICAgICAgICdyZWxh dGlvbicsICdzdGF0c19pbXBvcnQucGFydF9wYXJlbnRfaSc6OnJlZ2NsYXNzLAotICAgICAgICAn cmVscGFnZXMnLCAyOjppbnRlZ2VyKTsKLQogLS0gbm90aGluZyBzdG9wcyB1cyBmcm9tIHNldHRp bmcgaXQgdG8gLTEKIFNFTEVDVAogICAgIHBnX2NhdGFsb2cucGdfc2V0X3JlbGF0aW9uX3N0YXRz KApAQCAtMTEyMSwxNCArMTA4Niw4IEBAIFNFTEVDVCA0LCAnZm91cicsIE5VTEwsIGludDRyYW5n ZSgwLDEwMCksIE5VTEw7CiAKIENSRUFURSBJTkRFWCBpc19vZGQgT04gc3RhdHNfaW1wb3J0LnRl c3QoKChjb21wKS5hICUgMiA9IDEpKTsKIAotLS0gcmVzdG9yaW5nIHN0YXRzIG9uIGluZGV4Ci1T RUxFQ1QgKiBGUk9NIHBnX2NhdGFsb2cucGdfcmVzdG9yZV9yZWxhdGlvbl9zdGF0cygKLSAgICAn cmVsYXRpb24nLCAnc3RhdHNfaW1wb3J0LmlzX29kZCc6OnJlZ2NsYXNzLAotICAgICd2ZXJzaW9u JywgJzE4MDAwMCc6OmludGVnZXIsCi0gICAgJ3JlbHBhZ2VzJywgJzExJzo6aW50ZWdlciwKLSAg ICAncmVsdHVwbGVzJywgJzEwMDAwJzo6cmVhbCwKLSAgICAncmVsYWxsdmlzaWJsZScsICcwJzo6 aW50ZWdlcgotKTsKK0NSRUFURSBTVEFUSVNUSUNTIHN0YXRzX2ltcG9ydC50ZXN0X3N0YXQgT04g bmFtZSwgY29tcCwgbG93ZXIoYXJhbmdlKSwgYXJyYXlfbGVuZ3RoKHRhZ3MsMSkKK0ZST00gc3Rh dHNfaW1wb3J0LnRlc3Q7CiAKIC0tIEdlbmVyYXRlIHN0YXRpc3RpY3Mgb24gdGFibGUgd2l0aCBk YXRhCiBBTkFMWVpFIHN0YXRzX2ltcG9ydC50ZXN0OwpAQCAtMTEzOCw2ICsxMDk3LDkgQEAgQ1JF QVRFIFRBQkxFIHN0YXRzX2ltcG9ydC50ZXN0X2Nsb25lICggTElLRSBzdGF0c19pbXBvcnQudGVz dCApCiAKIENSRUFURSBJTkRFWCBpc19vZGRfY2xvbmUgT04gc3RhdHNfaW1wb3J0LnRlc3RfY2xv bmUoKChjb21wKS5hICUgMiA9IDEpKTsKIAorQ1JFQVRFIFNUQVRJU1RJQ1Mgc3RhdHNfaW1wb3J0 LnRlc3Rfc3RhdF9jbG9uZSBPTiBuYW1lLCBjb21wLCBsb3dlcihhcmFuZ2UpLCBhcnJheV9sZW5n dGgodGFncywxKQorRlJPTSBzdGF0c19pbXBvcnQudGVzdF9jbG9uZTsKKwogLS0KIC0tIENvcHkg c3RhdHMgZnJvbSB0ZXN0IHRvIHRlc3RfY2xvbmUsIGFuZCBpc19vZGQgdG8gaXNfb2RkX2Nsb25l CiAtLQpAQCAtMTQ0OSw0ICsxNDExLDI5NyBAQCBGUk9NIHBnX3N0YXRpc3RpYyBzCiBKT0lOIHBn X2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSBzLnN0YXJlbGlkIEFORCBhLmF0dG51bSA9IHMu c3RhYXR0bnVtCiBXSEVSRSBzLnN0YXJlbGlkID0gJ3N0YXRzX2ltcG9ydC5pc19vZGQnOjpyZWdj bGFzczsKIAorCistLSBzZXQgbl9kaXN0aW5jdCB1c2luZyBhdCBhdHRudW0gKDEpIHRoYXQgaXMg bm90IGluIHRoZSBzdGF0aXN0aWNzIG9iamVjdAorU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19z ZXRfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgIHN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9PiAnc3Rh dHNfaW1wb3J0Jzo6cmVnbmFtZXNwYWNlLAorICAgICAgICBzdGF0aXN0aWNzX25hbWUgPT4gJ3Rl c3Rfc3RhdF9jbG9uZSc6Om5hbWUsCisgICAgICAgIGluaGVyaXRlZCA9PiBmYWxzZSwKKyAgICAg ICAgbl9kaXN0aW5jdCA9PiAneyIyLCAzIjogNCwgIjIsIC0xIjogNCwgIjIsIC0yIjogNCwgIjMs IC0xIjogNCwgIjMsIC0yIjogNCwgIi0xLCAtMiI6IDMsICIyLCAzLCAtMSI6IDQsICIyLCAzLCAt MiI6IDQsICIyLCAtMSwgLTIiOiA0LCAiMywgLTEsIC0yIjogNCwgIjEsIDMsIC0xLCAtMiI6IDR9 Jzo6cGdfbmRpc3RpbmN0CisgICAgICApOworCistLSBzZXQgbl9kaXN0aW5jdCB1c2luZyBhdCBh dHRudW0gdGhhdCBpcyAwCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3NldF9leHRlbmRlZF9z dGF0cygKKyAgICAgICAgc3RhdGlzdGljc19zY2hlbWFuYW1lID0+ICdzdGF0c19pbXBvcnQnOjpy ZWduYW1lc3BhY2UsCisgICAgICAgIHN0YXRpc3RpY3NfbmFtZSA9PiAndGVzdF9zdGF0X2Nsb25l Jzo6bmFtZSwKKyAgICAgICAgaW5oZXJpdGVkID0+IGZhbHNlLAorICAgICAgICBuX2Rpc3RpbmN0 ID0+ICd7IjIsIDMiOiA0LCAiMiwgLTEiOiA0LCAiMiwgMCI6IDQsICIzLCAtMSI6IDQsICIzLCAt MiI6IDQsICItMSwgLTIiOiAzLCAiMiwgMywgLTEiOiA0LCAiMiwgMywgLTIiOiA0LCAiMiwgLTEs IC0yIjogNCwgIjMsIC0xLCAtMiI6IDQsICIyLCAzLCAtMSwgLTIiOiA0fSc6OnBnX25kaXN0aW5j dAorICAgICAgKTsKKworLS0gc2V0IG5fZGlzdGluY3QgdXNpbmcgYXQgYXR0bnVtIHRoYXQgaXMg b3V0c2lkZSB0aGUgZXhwcmVzc2lvbiBib3VuZHMoYmVsb3cgLTIpCitTRUxFQ1QKKyAgICBwZ19j YXRhbG9nLnBnX3NldF9leHRlbmRlZF9zdGF0cygKKyAgICAgICAgc3RhdGlzdGljc19zY2hlbWFu YW1lID0+ICdzdGF0c19pbXBvcnQnOjpyZWduYW1lc3BhY2UsCisgICAgICAgIHN0YXRpc3RpY3Nf bmFtZSA9PiAndGVzdF9zdGF0X2Nsb25lJzo6bmFtZSwKKyAgICAgICAgaW5oZXJpdGVkID0+IGZh bHNlLAorICAgICAgICBuX2Rpc3RpbmN0ID0+ICd7IjIsIDMiOiA0LCAiMiwgLTQiOiA0LCAiMiwg LTIiOiA0LCAiMywgLTEiOiA0LCAiMywgLTIiOiA0LCAiLTEsIC0yIjogMywgIjIsIDMsIC0xIjog NCwgIjIsIDMsIC0yIjogNCwgIjIsIC0xLCAtMiI6IDQsICIzLCAtMSwgLTIiOiA0LCAiMSwgMywg LTEsIC0yIjogNH0nOjpwZ19uZGlzdGluY3QKKyAgICAgICk7CisKK1NFTEVDVAorICAgIHBnX2Nh dGFsb2cucGdfc2V0X2V4dGVuZGVkX3N0YXRzKAorICAgICAgICBzdGF0aXN0aWNzX3NjaGVtYW5h bWUgPT4gJ3N0YXRzX2ltcG9ydCc6OnJlZ25hbWVzcGFjZSwKKyAgICAgICAgc3RhdGlzdGljc19u YW1lID0+ICd0ZXN0X3N0YXRfY2xvbmUnOjpuYW1lLAorICAgICAgICBpbmhlcml0ZWQgPT4gZmFs c2UsCisgICAgICAgIG5fZGlzdGluY3QgPT4gJ3siMiwgMyI6IDQsICIyLCAtMSI6IDQsICIyLCAt MiI6IDQsICIzLCAtMSI6IDQsICIzLCAtMiI6IDQsICItMSwgLTIiOiAzLCAiMiwgMywgLTEiOiA0 LCAiMiwgMywgLTIiOiA0LCAiMiwgLTEsIC0yIjogNCwgIjMsIC0xLCAtMiI6IDQsICIyLCAzLCAt MSwgLTIiOiA0fSc6OnBnX25kaXN0aW5jdAorICAgICAgKTsKKworU0VMRUNUCisgICAgZS5uX2Rp c3RpbmN0LCBlLmRlcGVuZGVuY2llcywgZS5tb3N0X2NvbW1vbl92YWxzLCBlLm1vc3RfY29tbW9u X3ZhbF9udWxscywKKyAgICBlLm1vc3RfY29tbW9uX2ZyZXFzLCBlLm1vc3RfY29tbW9uX2Jhc2Vf ZnJlcXMKK0ZST00gcGdfc3RhdHNfZXh0IEFTIGUKK1dIRVJFIGUuc3RhdGlzdGljc19zY2hlbWFu YW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBlLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRf Y2xvbmUnCitBTkQgZS5pbmhlcml0ZWQgPSBmYWxzZQorXGd4CisKKy0tIHNldCBkZXBlbmRlbmNp ZXMgdXNpbmcgYXQgYXR0bnVtICgxKSB0aGF0IGlzIG5vdCBpbiB0aGUgc3RhdGlzdGljcyBvYmpl Y3QKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfc2V0X2V4dGVuZGVkX3N0YXRzKAorICAgICAg ICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUgPT4gJ3N0YXRzX2ltcG9ydCc6OnJlZ25hbWVzcGFjZSwK KyAgICAgICAgc3RhdGlzdGljc19uYW1lID0+ICd0ZXN0X3N0YXRfY2xvbmUnOjpuYW1lLAorICAg ICAgICBpbmhlcml0ZWQgPT4gZmFsc2UsCisgICAgICAgIGRlcGVuZGVuY2llcyA9PiAneyIyID0+ IDEiOiAxLjAwMDAwMCwgIjIgPT4gLTEiOiAxLjAwMDAwMCwgIjIgPT4gLTIiOiAxLjAwMDAwMCwg IjMgPT4gMiI6IDEuMDAwMDAwLCAiMyA9PiAtMSI6IDEuMDAwMDAwLCAiMyA9PiAtMiI6IDEuMDAw MDAwLCAiLTEgPT4gMiI6IDAuNTAwMDAwLCAiLTEgPT4gMyI6IDAuNTAwMDAwLCAiLTEgPT4gLTIi OiAxLjAwMDAwMCwgIi0yID0+IDIiOiAwLjUwMDAwMCwgIi0yID0+IDMiOiAwLjUwMDAwMCwgIi0y ID0+IC0xIjogMS4wMDAwMDAsICIyLCAzID0+IC0xIjogMS4wMDAwMDAsICIyLCAzID0+IC0yIjog MS4wMDAwMDAsICIyLCAtMSA9PiAzIjogMS4wMDAwMDAsICIyLCAtMSA9PiAtMiI6IDEuMDAwMDAw LCAiMiwgLTIgPT4gMyI6IDEuMDAwMDAwLCAiMiwgLTIgPT4gLTEiOiAxLjAwMDAwMCwgIjMsIC0x ID0+IDIiOiAxLjAwMDAwMCwgIjMsIC0xID0+IC0yIjogMS4wMDAwMDAsICIzLCAtMiA9PiAyIjog MS4wMDAwMDAsICIzLCAtMiA9PiAtMSI6IDEuMDAwMDAwLCAiLTEsIC0yID0+IDIiOiAwLjUwMDAw MCwgIi0xLCAtMiA9PiAzIjogMC41MDAwMDAsICIyLCAzLCAtMSA9PiAtMiI6IDEuMDAwMDAwLCAi MiwgMywgLTIgPT4gLTEiOiAxLjAwMDAwMCwgIjIsIC0xLCAtMiA9PiAzIjogMS4wMDAwMDAsICIz LCAtMSwgLTIgPT4gMiI6IDEuMDAwMDAwfSc6OnBnX2RlcGVuZGVuY2llcworICAgICAgKTsKKwor LS0gc2V0IGRlcGVuZGVuY2llcyB1c2luZyBhdCBhdHRudW0gdGhhdCBpcyAwCitTRUxFQ1QKKyAg ICBwZ19jYXRhbG9nLnBnX3NldF9leHRlbmRlZF9zdGF0cygKKyAgICAgICAgc3RhdGlzdGljc19z Y2hlbWFuYW1lID0+ICdzdGF0c19pbXBvcnQnOjpyZWduYW1lc3BhY2UsCisgICAgICAgIHN0YXRp c3RpY3NfbmFtZSA9PiAndGVzdF9zdGF0X2Nsb25lJzo6bmFtZSwKKyAgICAgICAgaW5oZXJpdGVk ID0+IGZhbHNlLAorICAgICAgICBkZXBlbmRlbmNpZXMgPT4gJ3siMiA9PiAzIjogMS4wMDAwMDAs ICIwID0+IC0xIjogMS4wMDAwMDAsICIyID0+IC0yIjogMS4wMDAwMDAsICIzID0+IDIiOiAxLjAw MDAwMCwgIjMgPT4gLTEiOiAxLjAwMDAwMCwgIjMgPT4gLTIiOiAxLjAwMDAwMCwgIi0xID0+IDIi OiAwLjUwMDAwMCwgIi0xID0+IDMiOiAwLjUwMDAwMCwgIi0xID0+IC0yIjogMS4wMDAwMDAsICIt MiA9PiAyIjogMC41MDAwMDAsICItMiA9PiAzIjogMC41MDAwMDAsICItMiA9PiAtMSI6IDEuMDAw MDAwLCAiMiwgMyA9PiAtMSI6IDEuMDAwMDAwLCAiMiwgMyA9PiAtMiI6IDEuMDAwMDAwLCAiMiwg LTEgPT4gMyI6IDEuMDAwMDAwLCAiMiwgLTEgPT4gLTIiOiAxLjAwMDAwMCwgIjIsIC0yID0+IDMi OiAxLjAwMDAwMCwgIjIsIC0yID0+IC0xIjogMS4wMDAwMDAsICIzLCAtMSA9PiAyIjogMS4wMDAw MDAsICIzLCAtMSA9PiAtMiI6IDEuMDAwMDAwLCAiMywgLTIgPT4gMiI6IDEuMDAwMDAwLCAiMywg LTIgPT4gLTEiOiAxLjAwMDAwMCwgIi0xLCAtMiA9PiAyIjogMC41MDAwMDAsICItMSwgLTIgPT4g MyI6IDAuNTAwMDAwLCAiMiwgMywgLTEgPT4gLTIiOiAxLjAwMDAwMCwgIjIsIDMsIC0yID0+IC0x IjogMS4wMDAwMDAsICIyLCAtMSwgLTIgPT4gMyI6IDEuMDAwMDAwLCAiMywgLTEsIC0yID0+IDIi OiAxLjAwMDAwMH0nOjpwZ19kZXBlbmRlbmNpZXMKKyAgICAgICk7CisKKy0tIHNldCBkZXBlbmRl bmNpZXMgdXNpbmcgYXQgYXR0bnVtIHRoYXQgaXMgb3V0c2lkZSB0aGUgZXhwcmVzc2lvbiBib3Vu ZHMoYmVsb3cgLTIpCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3NldF9leHRlbmRlZF9zdGF0 cygKKyAgICAgICAgc3RhdGlzdGljc19zY2hlbWFuYW1lID0+ICdzdGF0c19pbXBvcnQnOjpyZWdu YW1lc3BhY2UsCisgICAgICAgIHN0YXRpc3RpY3NfbmFtZSA9PiAndGVzdF9zdGF0X2Nsb25lJzo6 bmFtZSwKKyAgICAgICAgaW5oZXJpdGVkID0+IGZhbHNlLAorICAgICAgICBkZXBlbmRlbmNpZXMg PT4gJ3siMiA9PiAzIjogMS4wMDAwMDAsICIyID0+IC0zIjogMS4wMDAwMDAsICIyID0+IC0yIjog MS4wMDAwMDAsICIzID0+IDIiOiAxLjAwMDAwMCwgIjMgPT4gLTEiOiAxLjAwMDAwMCwgIjMgPT4g LTIiOiAxLjAwMDAwMCwgIi0xID0+IDIiOiAwLjUwMDAwMCwgIi0xID0+IDMiOiAwLjUwMDAwMCwg Ii0xID0+IC0yIjogMS4wMDAwMDAsICItMiA9PiAyIjogMC41MDAwMDAsICItMiA9PiAzIjogMC41 MDAwMDAsICItMiA9PiAtMSI6IDEuMDAwMDAwLCAiMiwgMyA9PiAtMSI6IDEuMDAwMDAwLCAiMiwg MyA9PiAtMiI6IDEuMDAwMDAwLCAiMiwgLTEgPT4gMyI6IDEuMDAwMDAwLCAiMiwgLTEgPT4gLTIi OiAxLjAwMDAwMCwgIjIsIC0yID0+IDMiOiAxLjAwMDAwMCwgIjIsIC0yID0+IC0xIjogMS4wMDAw MDAsICIzLCAtMSA9PiAyIjogMS4wMDAwMDAsICIzLCAtMSA9PiAtMiI6IDEuMDAwMDAwLCAiMywg LTIgPT4gMiI6IDEuMDAwMDAwLCAiMywgLTIgPT4gLTEiOiAxLjAwMDAwMCwgIi0xLCAtMiA9PiAy IjogMC41MDAwMDAsICItMSwgLTIgPT4gMyI6IDAuNTAwMDAwLCAiMiwgMywgLTEgPT4gLTIiOiAx LjAwMDAwMCwgIjIsIDMsIC0yID0+IC0xIjogMS4wMDAwMDAsICIyLCAtMSwgLTIgPT4gMyI6IDEu MDAwMDAwLCAiMywgLTEsIC0yID0+IDIiOiAxLjAwMDAwMH0nOjpwZ19kZXBlbmRlbmNpZXMKKyAg ICAgICk7CisKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfc2V0X2V4dGVuZGVkX3N0YXRzKAor ICAgICAgICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUgPT4gJ3N0YXRzX2ltcG9ydCc6OnJlZ25hbWVz cGFjZSwKKyAgICAgICAgc3RhdGlzdGljc19uYW1lID0+ICd0ZXN0X3N0YXRfY2xvbmUnOjpuYW1l LAorICAgICAgICBpbmhlcml0ZWQgPT4gZmFsc2UsCisgICAgICAgIGRlcGVuZGVuY2llcyA9PiAn eyIyID0+IDMiOiAxLjAwMDAwMCwgIjIgPT4gLTEiOiAxLjAwMDAwMCwgIjIgPT4gLTIiOiAxLjAw MDAwMCwgIjMgPT4gMiI6IDEuMDAwMDAwLCAiMyA9PiAtMSI6IDEuMDAwMDAwLCAiMyA9PiAtMiI6 IDEuMDAwMDAwLCAiLTEgPT4gMiI6IDAuNTAwMDAwLCAiLTEgPT4gMyI6IDAuNTAwMDAwLCAiLTEg PT4gLTIiOiAxLjAwMDAwMCwgIi0yID0+IDIiOiAwLjUwMDAwMCwgIi0yID0+IDMiOiAwLjUwMDAw MCwgIi0yID0+IC0xIjogMS4wMDAwMDAsICIyLCAzID0+IC0xIjogMS4wMDAwMDAsICIyLCAzID0+ IC0yIjogMS4wMDAwMDAsICIyLCAtMSA9PiAzIjogMS4wMDAwMDAsICIyLCAtMSA9PiAtMiI6IDEu MDAwMDAwLCAiMiwgLTIgPT4gMyI6IDEuMDAwMDAwLCAiMiwgLTIgPT4gLTEiOiAxLjAwMDAwMCwg IjMsIC0xID0+IDIiOiAxLjAwMDAwMCwgIjMsIC0xID0+IC0yIjogMS4wMDAwMDAsICIzLCAtMiA9 PiAyIjogMS4wMDAwMDAsICIzLCAtMiA9PiAtMSI6IDEuMDAwMDAwLCAiLTEsIC0yID0+IDIiOiAw LjUwMDAwMCwgIi0xLCAtMiA9PiAzIjogMC41MDAwMDAsICIyLCAzLCAtMSA9PiAtMiI6IDEuMDAw MDAwLCAiMiwgMywgLTIgPT4gLTEiOiAxLjAwMDAwMCwgIjIsIC0xLCAtMiA9PiAzIjogMS4wMDAw MDAsICIzLCAtMSwgLTIgPT4gMiI6IDEuMDAwMDAwfSc6OnBnX2RlcGVuZGVuY2llcworICAgICAg KTsKKworU0VMRUNUCisgICAgZS5uX2Rpc3RpbmN0LCBlLmRlcGVuZGVuY2llcywgZS5tb3N0X2Nv bW1vbl92YWxzLCBlLm1vc3RfY29tbW9uX3ZhbF9udWxscywKKyAgICBlLm1vc3RfY29tbW9uX2Zy ZXFzLCBlLm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMKK0ZST00gcGdfc3RhdHNfZXh0IEFTIGUKK1dI RVJFIGUuc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBlLnN0YXRp c3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRfY2xvbmUnCitBTkQgZS5pbmhlcml0ZWQgPSBmYWxzZQor XGd4CisKK1NFTEVDVAorICAgIHBnX2NhdGFsb2cucGdfc2V0X2V4dGVuZGVkX3N0YXRzKAorICAg ICAgICBzdGF0aXN0aWNzX3NjaGVtYW5hbWUgPT4gJ3N0YXRzX2ltcG9ydCc6OnJlZ25hbWVzcGFj ZSwKKyAgICAgICAgc3RhdGlzdGljc19uYW1lID0+ICd0ZXN0X3N0YXRfY2xvbmUnOjpuYW1lLAor ICAgICAgICBpbmhlcml0ZWQgPT4gZmFsc2UsCisgICAgICAgIG1vc3RfY29tbW9uX3ZhbHMgPT4g J3t7Zm91cixOVUxMLDAsTlVMTH0se29uZSwiKDEsMS4xLE9ORSwwMS0wMS0yMDAxLFwie1wiXCJ4 a2V5XCJcIjogXCJcInh2YWxcIlwifVwiKSIsMSwyfSx7dHJlLCIoMywzLjMsVFJFLDAzLTAzLTIw MDMsKSIsLTEsM30se3R3bywiKDIsMi4yLFRXTywwMi0wMi0yMDAyLFwiW3RydWUsIDQsIFwiXCJz aXhcIlwiXVwiKSIsMSwyfX0nCisgICAgICApOworCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBn X3NldF9leHRlbmRlZF9zdGF0cygKKyAgICAgICAgc3RhdGlzdGljc19zY2hlbWFuYW1lID0+ICdz dGF0c19pbXBvcnQnOjpyZWduYW1lc3BhY2UsCisgICAgICAgIHN0YXRpc3RpY3NfbmFtZSA9PiAn dGVzdF9zdGF0X2Nsb25lJzo6bmFtZSwKKyAgICAgICAgaW5oZXJpdGVkID0+IGZhbHNlLAorICAg ICAgICBtb3N0X2NvbW1vbl92YWxfbnVsbHMgPT4gJ3t7Zix0LGYsdH0se2YsZixmLGZ9LHtmLGYs ZixmfSx7ZixmLGYsZn19JworICAgICAgKTsKKworCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBn X3NldF9leHRlbmRlZF9zdGF0cygKKyAgICAgICAgc3RhdGlzdGljc19zY2hlbWFuYW1lID0+ICdz dGF0c19pbXBvcnQnOjpyZWduYW1lc3BhY2UsCisgICAgICAgIHN0YXRpc3RpY3NfbmFtZSA9PiAn dGVzdF9zdGF0X2Nsb25lJzo6bmFtZSwKKyAgICAgICAgaW5oZXJpdGVkID0+IGZhbHNlLAorICAg ICAgICBtb3N0X2NvbW1vbl9mcmVxcyA9PiAnezAuMjUsMC4yNSwwLjI1LDAuMjV9JworICAgICAg KTsKKworU0VMRUNUCisgICAgcGdfY2F0YWxvZy5wZ19zZXRfZXh0ZW5kZWRfc3RhdHMoCisgICAg ICAgIHN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9PiAnc3RhdHNfaW1wb3J0Jzo6cmVnbmFtZXNwYWNl LAorICAgICAgICBzdGF0aXN0aWNzX25hbWUgPT4gJ3Rlc3Rfc3RhdF9jbG9uZSc6Om5hbWUsCisg ICAgICAgIGluaGVyaXRlZCA9PiBmYWxzZSwKKyAgICAgICAgbW9zdF9jb21tb25fYmFzZV9mcmVx cyA9PiAnezAuMDAzOTA2MjUsMC4wMTU2MjUsMC4wMDM5MDYyNSwwLjAxNTYyNX0nCisgICAgICAp OworCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3NldF9leHRlbmRlZF9zdGF0cygKKyAgICAg ICAgc3RhdGlzdGljc19zY2hlbWFuYW1lID0+ICdzdGF0c19pbXBvcnQnOjpyZWduYW1lc3BhY2Us CisgICAgICAgIHN0YXRpc3RpY3NfbmFtZSA9PiAndGVzdF9zdGF0X2Nsb25lJzo6bmFtZSwKKyAg ICAgICAgaW5oZXJpdGVkID0+IGZhbHNlLAorICAgICAgICBtb3N0X2NvbW1vbl92YWxzID0+ICd7 e2ZvdXIsTlVMTCwwLE5VTEx9LHtvbmUsIigxLDEuMSxPTkUsMDEtMDEtMjAwMSxcIntcIlwieGtl eVwiXCI6IFwiXCJ4dmFsXCJcIn1cIikiLDEsMn0se3RyZSwiKDMsMy4zLFRSRSwwMy0wMy0yMDAz LCkiLC0xLDN9LHt0d28sIigyLDIuMixUV08sMDItMDItMjAwMixcIlt0cnVlLCA0LCBcIlwic2l4 XCJcIl1cIikiLDEsMn19JywKKyAgICAgICAgbW9zdF9jb21tb25fdmFsX251bGxzID0+ICd7e2Ys dCxmLHR9LHtmLGYsZixmfSx7ZixmLGYsZn0se2YsZixmLGZ9fScsCisgICAgICAgIG1vc3RfY29t bW9uX2ZyZXFzID0+ICd7MC4yNSwwLjI1LDAuMjUsMC4yNX0nLAorICAgICAgICBtb3N0X2NvbW1v bl9iYXNlX2ZyZXFzID0+ICd7MC4wMDM5MDYyNSwwLjAxNTYyNSwwLjAwMzkwNjI1LDAuMDE1NjI1 fScKKyAgICAgICk7CisKK1NFTEVDVAorICAgIGUubl9kaXN0aW5jdCwgZS5kZXBlbmRlbmNpZXMs IGUubW9zdF9jb21tb25fdmFscywgZS5tb3N0X2NvbW1vbl92YWxfbnVsbHMsCisgICAgZS5tb3N0 X2NvbW1vbl9mcmVxcywgZS5tb3N0X2NvbW1vbl9iYXNlX2ZyZXFzCitGUk9NIHBnX3N0YXRzX2V4 dCBBUyBlCitXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitB TkQgZS5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJworQU5EIGUuaW5oZXJpdGVk ID0gZmFsc2UKK1xneAorCitTRUxFQ1QKKyAgICBwZ19jYXRhbG9nLnBnX3NldF9leHRlbmRlZF9z dGF0cygKKyAgICAgICAgc3RhdGlzdGljc19zY2hlbWFuYW1lID0+ICdzdGF0c19pbXBvcnQnOjpy ZWduYW1lc3BhY2UsCisgICAgICAgIHN0YXRpc3RpY3NfbmFtZSA9PiAndGVzdF9zdGF0X2Nsb25l Jzo6bmFtZSwKKyAgICAgICAgaW5oZXJpdGVkID0+IGZhbHNlLAorICAgICAgICBleHBycyA9PiAn e3swLDQsLTAuNzUsInsxfSIsInswLjV9Iiwiey0xLDB9IiwtMC42LE5VTEwsTlVMTCxOVUxMfSx7 MC4yNSw0LC0wLjUsInsyfSIsInswLjV9IixOVUxMLDEsTlVMTCxOVUxMLE5VTEx9fScKKyAgICAg ICk7CisKK1NFTEVDVAorICAgIGUuaW5oZXJpdGVkLCBlLm51bGxfZnJhYywgZS5hdmdfd2lkdGgs IGUubl9kaXN0aW5jdCwgZS5tb3N0X2NvbW1vbl92YWxzLAorICAgIGUubW9zdF9jb21tb25fZnJl cXMsIGUuaGlzdG9ncmFtX2JvdW5kcywgZS5jb3JyZWxhdGlvbiwKKyAgICBlLm1vc3RfY29tbW9u X2VsZW1zLCBlLm1vc3RfY29tbW9uX2VsZW1fZnJlcXMsIGUuZWxlbV9jb3VudF9oaXN0b2dyYW0K K0ZST00gcGdfc3RhdHNfZXh0X2V4cHJzIEFTIGUKK1dIRVJFIGUuc3RhdGlzdGljc19zY2hlbWFu YW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBlLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRf Y2xvbmUnCithbmQgZS5pbmhlcml0ZWQgPSBmYWxzZQorXGd4CisKK1NFTEVDVAorICAgIHBnX2Nh dGFsb2cucGdfY2xlYXJfZXh0ZW5kZWRfc3RhdHMoCisgICAgICAgIHN0YXRpc3RpY3Nfc2NoZW1h bmFtZSA9PiAnc3RhdHNfaW1wb3J0Jzo6cmVnbmFtZXNwYWNlLAorICAgICAgICBzdGF0aXN0aWNz X25hbWUgPT4gJ3Rlc3Rfc3RhdF9jbG9uZSc6Om5hbWUsCisgICAgICAgIGluaGVyaXRlZCA9PiBm YWxzZSk7CisKK1NFTEVDVCBDT1VOVCgqKQorRlJPTSBwZ19zdGF0c19leHQgQVMgZQorV0hFUkUg ZS5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0JworQU5EIGUuc3RhdGlzdGlj c19uYW1lID0gJ3Rlc3Rfc3RhdF9jbG9uZScKK0FORCBlLmluaGVyaXRlZCA9IGZhbHNlOworCitT RUxFQ1QgQ09VTlQoKikKK0ZST00gcGdfc3RhdHNfZXh0X2V4cHJzIEFTIGUKK1dIRVJFIGUuc3Rh dGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBlLnN0YXRpc3RpY3NfbmFt ZSA9ICd0ZXN0X3N0YXRfY2xvbmUnCitBTkQgZS5pbmhlcml0ZWQgPSBmYWxzZTsKKworLS0KKy0t IENvcHkgc3RhdHMgZnJvbSB0ZXN0X3N0YXQgdG8gdGVzdF9zdGF0X2Nsb25lCistLQorU0VMRUNU CisgICAgZS5zdGF0aXN0aWNzX25hbWUsCisgICAgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2V4dGVu ZGVkX3N0YXRzKAorICAgICAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywgZS5zdGF0aXN0aWNz X3NjaGVtYW5hbWU6OnJlZ25hbWVzcGFjZSwKKyAgICAgICAgJ3N0YXRpc3RpY3NfbmFtZScsICd0 ZXN0X3N0YXRfY2xvbmUnOjpuYW1lLAorICAgICAgICAnaW5oZXJpdGVkJywgZS5pbmhlcml0ZWQs CisgICAgICAgICduX2Rpc3RpbmN0JywgZS5uX2Rpc3RpbmN0LAorICAgICAgICAnZGVwZW5kZW5j aWVzJywgZS5kZXBlbmRlbmNpZXMsCisgICAgICAgICdtb3N0X2NvbW1vbl92YWxzJywgZS5tb3N0 X2NvbW1vbl92YWxzLAorICAgICAgICAnbW9zdF9jb21tb25fdmFsX251bGxzJywgZS5tb3N0X2Nv bW1vbl92YWxfbnVsbHMsCisgICAgICAgICdtb3N0X2NvbW1vbl9mcmVxcycsIGUubW9zdF9jb21t b25fZnJlcXMsCisgICAgICAgICdtb3N0X2NvbW1vbl9iYXNlX2ZyZXFzJywgZS5tb3N0X2NvbW1v bl9iYXNlX2ZyZXFzLAorICAgICAgICAnZXhwcnMnLCB4LmV4cHJzCisgICAgKQorRlJPTSBwZ19z dGF0c19leHQgQVMgZQorQ1JPU1MgSk9JTiBMQVRFUkFMICgKKyAgICBTRUxFQ1QKKyAgICAgICAg YXJyYXlfYWdnKAorICAgICAgICAgICAgQVJSQVlbZWUubnVsbF9mcmFjOjp0ZXh0LCBlZS5hdmdf d2lkdGg6OnRleHQsCisgICAgICAgICAgICAgICAgICBlZS5uX2Rpc3RpbmN0Ojp0ZXh0LCBlZS5t b3N0X2NvbW1vbl92YWxzOjp0ZXh0LAorICAgICAgICAgICAgICAgICAgZWUubW9zdF9jb21tb25f ZnJlcXM6OnRleHQsIGVlLmhpc3RvZ3JhbV9ib3VuZHM6OnRleHQsCisgICAgICAgICAgICAgICAg ICBlZS5jb3JyZWxhdGlvbjo6dGV4dCwgZWUubW9zdF9jb21tb25fZWxlbXM6OnRleHQsCisgICAg ICAgICAgICAgICAgICBlZS5tb3N0X2NvbW1vbl9lbGVtX2ZyZXFzOjp0ZXh0LAorICAgICAgICAg ICAgICAgICAgZWUuZWxlbV9jb3VudF9oaXN0b2dyYW06OnRleHRdKQorICAgIEZST00gcGdfc3Rh dHNfZXh0X2V4cHJzIEFTIGVlCisgICAgV0hFUkUgZWUuc3RhdGlzdGljc19zY2hlbWFuYW1lID0g ZS5zdGF0aXN0aWNzX3NjaGVtYW5hbWUKKyAgICBBTkQgZWUuc3RhdGlzdGljc19uYW1lID0gZS5z dGF0aXN0aWNzX25hbWUKKyAgICBBTkQgZWUuaW5oZXJpdGVkID0gZS5pbmhlcml0ZWQKKyAgICAp IEFTIHgoZXhwcnMpCitXSEVSRSBlLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBv cnQnCitBTkQgZS5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0JzsKKworU0VMRUNUIG8uaW5o ZXJpdGVkLAorICAgICAgIG8ubl9kaXN0aW5jdCwgby5kZXBlbmRlbmNpZXMsIG8ubW9zdF9jb21t b25fdmFscywKKyAgICAgICBvLm1vc3RfY29tbW9uX3ZhbF9udWxscywgby5tb3N0X2NvbW1vbl9m cmVxcywKKyAgICAgICBvLm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMKK0ZST00gcGdfc3RhdHNfZXh0 IEFTIG8KK1dIRVJFIG8uc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FO RCBvLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXQnCitFWENFUFQKK1NFTEVDVCBuLmluaGVy aXRlZCwKKyAgICAgICBuLm5fZGlzdGluY3QsIG4uZGVwZW5kZW5jaWVzLCBuLm1vc3RfY29tbW9u X3ZhbHMsCisgICAgICAgbi5tb3N0X2NvbW1vbl92YWxfbnVsbHMsIG4ubW9zdF9jb21tb25fZnJl cXMsCisgICAgICAgbi5tb3N0X2NvbW1vbl9iYXNlX2ZyZXFzCitGUk9NIHBnX3N0YXRzX2V4dCBB UyBuCitXSEVSRSBuLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitBTkQg bi5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0X2Nsb25lJzsKKworU0VMRUNUIG4uaW5oZXJp dGVkLAorICAgICAgIG4ubl9kaXN0aW5jdCwgbi5kZXBlbmRlbmNpZXMsIG4ubW9zdF9jb21tb25f dmFscywKKyAgICAgICBuLm1vc3RfY29tbW9uX3ZhbF9udWxscywgbi5tb3N0X2NvbW1vbl9mcmVx cywKKyAgICAgICBuLm1vc3RfY29tbW9uX2Jhc2VfZnJlcXMKK0ZST00gcGdfc3RhdHNfZXh0IEFT IG4KK1dIRVJFIG4uc3RhdGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBu LnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRfY2xvbmUnCitFWENFUFQKK1NFTEVDVCBvLmlu aGVyaXRlZCwKKyAgICAgICBvLm5fZGlzdGluY3QsIG8uZGVwZW5kZW5jaWVzLCBvLm1vc3RfY29t bW9uX3ZhbHMsCisgICAgICAgby5tb3N0X2NvbW1vbl92YWxfbnVsbHMsIG8ubW9zdF9jb21tb25f ZnJlcXMsCisgICAgICAgby5tb3N0X2NvbW1vbl9iYXNlX2ZyZXFzCitGUk9NIHBnX3N0YXRzX2V4 dCBBUyBvCitXSEVSRSBvLnN0YXRpc3RpY3Nfc2NoZW1hbmFtZSA9ICdzdGF0c19pbXBvcnQnCitB TkQgby5zdGF0aXN0aWNzX25hbWUgPSAndGVzdF9zdGF0JzsKKworU0VMRUNUIG8uaW5oZXJpdGVk LAorICAgICAgIG8ubnVsbF9mcmFjLCBvLmF2Z193aWR0aCwgby5uX2Rpc3RpbmN0LAorICAgICAg IG8ubW9zdF9jb21tb25fdmFsczo6dGV4dCBBUyBtb3N0X2NvbW1vbl92YWxzLAorICAgICAgIG8u bW9zdF9jb21tb25fZnJlcXMsCisgICAgICAgby5oaXN0b2dyYW1fYm91bmRzOjp0ZXh0IEFTIGhp c3RvZ3JhbV9ib3VuZHMsCisgICAgICAgby5jb3JyZWxhdGlvbiwKKyAgICAgICBvLm1vc3RfY29t bW9uX2VsZW1zOjp0ZXh0IEFTIG1vc3RfY29tbW9uX2VsZW1zLAorICAgICAgIG8ubW9zdF9jb21t b25fZWxlbV9mcmVxcywgby5lbGVtX2NvdW50X2hpc3RvZ3JhbQorRlJPTSBwZ19zdGF0c19leHRf ZXhwcnMgQVMgbworV0hFUkUgby5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3RhdHNfaW1wb3J0 JworQU5EIG8uc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rfc3RhdCcKK0VYQ0VQVAorU0VMRUNUIG4u aW5oZXJpdGVkLAorICAgICAgIG4ubnVsbF9mcmFjLCBuLmF2Z193aWR0aCwgbi5uX2Rpc3RpbmN0 LAorICAgICAgIG4ubW9zdF9jb21tb25fdmFsczo6dGV4dCBBUyBtb3N0X2NvbW1vbl92YWxzLAor ICAgICAgIG4ubW9zdF9jb21tb25fZnJlcXMsCisgICAgICAgbi5oaXN0b2dyYW1fYm91bmRzOjp0 ZXh0IEFTIGhpc3RvZ3JhbV9ib3VuZHMsCisgICAgICAgbi5jb3JyZWxhdGlvbiwKKyAgICAgICBu Lm1vc3RfY29tbW9uX2VsZW1zOjp0ZXh0IEFTIG1vc3RfY29tbW9uX2VsZW1zLAorICAgICAgIG4u bW9zdF9jb21tb25fZWxlbV9mcmVxcywgbi5lbGVtX2NvdW50X2hpc3RvZ3JhbQorRlJPTSBwZ19z dGF0c19leHRfZXhwcnMgQVMgbgorV0hFUkUgbi5zdGF0aXN0aWNzX3NjaGVtYW5hbWUgPSAnc3Rh dHNfaW1wb3J0JworQU5EIG4uc3RhdGlzdGljc19uYW1lID0gJ3Rlc3Rfc3RhdF9jbG9uZSc7CisK K1NFTEVDVCBuLmluaGVyaXRlZCwKKyAgICAgICBuLm51bGxfZnJhYywgbi5hdmdfd2lkdGgsIG4u bl9kaXN0aW5jdCwKKyAgICAgICBuLm1vc3RfY29tbW9uX3ZhbHM6OnRleHQgQVMgbW9zdF9jb21t b25fdmFscywKKyAgICAgICBuLm1vc3RfY29tbW9uX2ZyZXFzLAorICAgICAgIG4uaGlzdG9ncmFt X2JvdW5kczo6dGV4dCBBUyBoaXN0b2dyYW1fYm91bmRzLAorICAgICAgIG4uY29ycmVsYXRpb24s CisgICAgICAgbi5tb3N0X2NvbW1vbl9lbGVtczo6dGV4dCBBUyBtb3N0X2NvbW1vbl9lbGVtcywK KyAgICAgICBuLm1vc3RfY29tbW9uX2VsZW1fZnJlcXMsIG4uZWxlbV9jb3VudF9oaXN0b2dyYW0K K0ZST00gcGdfc3RhdHNfZXh0X2V4cHJzIEFTIG4KK1dIRVJFIG4uc3RhdGlzdGljc19zY2hlbWFu YW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBuLnN0YXRpc3RpY3NfbmFtZSA9ICd0ZXN0X3N0YXRf Y2xvbmUnCitFWENFUFQKK1NFTEVDVCBvLmluaGVyaXRlZCwKKyAgICAgICBvLm51bGxfZnJhYywg by5hdmdfd2lkdGgsIG8ubl9kaXN0aW5jdCwKKyAgICAgICBvLm1vc3RfY29tbW9uX3ZhbHM6OnRl eHQgQVMgbW9zdF9jb21tb25fdmFscywKKyAgICAgICBvLm1vc3RfY29tbW9uX2ZyZXFzLAorICAg ICAgIG8uaGlzdG9ncmFtX2JvdW5kczo6dGV4dCBBUyBoaXN0b2dyYW1fYm91bmRzLAorICAgICAg IG8uY29ycmVsYXRpb24sCisgICAgICAgby5tb3N0X2NvbW1vbl9lbGVtczo6dGV4dCBBUyBtb3N0 X2NvbW1vbl9lbGVtcywKKyAgICAgICBvLm1vc3RfY29tbW9uX2VsZW1fZnJlcXMsIG8uZWxlbV9j b3VudF9oaXN0b2dyYW0KK0ZST00gcGdfc3RhdHNfZXh0X2V4cHJzIEFTIG8KK1dIRVJFIG8uc3Rh dGlzdGljc19zY2hlbWFuYW1lID0gJ3N0YXRzX2ltcG9ydCcKK0FORCBvLnN0YXRpc3RpY3NfbmFt ZSA9ICd0ZXN0X3N0YXQnOworCiBEUk9QIFNDSEVNQSBzdGF0c19pbXBvcnQgQ0FTQ0FERTsKZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21s CmluZGV4IGRmMzJlZTBiZjViLi4wZWMxMjY5NThhZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L2Z1bmMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0zMDQwMCw2ICszMDQw MCwxMzAgQEAgcG9zdGdyZXM9IyBTRUxFQ1QgJzAvMCc6OnBnX2xzbiArIHBkLnNlZ21lbnRfbnVt YmVyICogcHMuc2V0dGluZzo6aW50ICsgOm9mZnNldAogICAgICdpbmhlcml0ZWQnLCAgIGZhbHNl LAogICAgICdhdmdfd2lkdGgnLCAgIDEyNTo6aW50ZWdlciwKICAgICAnbnVsbF9mcmFjJywgICAw LjU6OnJlYWwpOworPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8 cGFyYT4KKyAgICAgICAgIE1pbm9yIGVycm9ycyBhcmUgcmVwb3J0ZWQgYXMgYSA8bGl0ZXJhbD5X QVJOSU5HPC9saXRlcmFsPiBhbmQKKyAgICAgICAgIGlnbm9yZWQsIGFuZCByZW1haW5pbmcgc3Rh dGlzdGljcyB3aWxsIHN0aWxsIGJlIHJlc3RvcmVkLiBJZiBhbGwKKyAgICAgICAgIHNwZWNpZmll ZCBzdGF0aXN0aWNzIGFyZSBzdWNjZXNzZnVsbHkgcmVzdG9yZWQsIHJldHVybgorICAgICAgICAg PGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4sIG90aGVyd2lzZSA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJh bD4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2VudHJ5PgorICAgICAgPC9yb3c+CisgICAg ICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij4KKyAgICAgICAg PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICAgPGluZGV4dGVybT4KKyAgICAg ICAgICA8cHJpbWFyeT5wZ19zZXRfZXh0ZW5kZWRfc3RhdHM8L3ByaW1hcnk+CisgICAgICAgICA8 L2luZGV4dGVybT4KKyAgICAgICAgIDxmdW5jdGlvbj5wZ19zZXRfZXh0ZW5kZWRfc3RhdHM8L2Z1 bmN0aW9uPiAoCisgICAgICAgICA8cGFyYW1ldGVyPnN0YXRpc3RpY3Nfc2NoZW1hbmFtZTwvcGFy YW1ldGVyPiA8dHlwZT5yZWduYW1lc3BhY2U8L3R5cGU+LAorICAgICAgICAgPHBhcmFtZXRlcj5z dGF0aXN0aWNzX25hbWU8L3BhcmFtZXRlcj4gPHR5cGU+bmFtZTwvdHlwZT4sCisgICAgICAgICA8 cGFyYW1ldGVyPmluaGVyaXRlZDwvcGFyYW1ldGVyPiA8dHlwZT5ib29sZWFuPC90eXBlPiwKKyAg ICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+bl9kaXN0aW5jdDwvcGFyYW1ldGVyPiA8dHlw ZT5wZ19uZGlzdGluY3Q8L3R5cGU+PC9vcHRpb25hbD4sCisgICAgICAgICA8b3B0aW9uYWw+LCA8 cGFyYW1ldGVyPmRlcGVuZGVuY2llczwvcGFyYW1ldGVyPiA8dHlwZT5wZ19kZXBlbmRlbmNpZXM8 L3R5cGU+PC9vcHRpb25hbD4sCisgICAgICAgICA8b3B0aW9uYWw+LCA8cGFyYW1ldGVyPm1vc3Rf Y29tbW9uX3ZhbHM8L3BhcmFtZXRlcj4gPHR5cGU+dGV4dFtdPC90eXBlPjwvb3B0aW9uYWw+LAor ICAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5tb3N0X2NvbW1vbl92YWxfbnVsbHM8L3Bh cmFtZXRlcj4gPHR5cGU+Ym9vbGVhbltdPC90eXBlPjwvb3B0aW9uYWw+LAorICAgICAgICAgPG9w dGlvbmFsPiwgPHBhcmFtZXRlcj5tb3N0X2NvbW1vbl9mcmVxczwvcGFyYW1ldGVyPiA8dHlwZT5k b3VibGUgcHJlY2lzaW9uW108L3R5cGU+IDwvb3B0aW9uYWw+LAorICAgICAgICAgPG9wdGlvbmFs PiwgPHBhcmFtZXRlcj5tb3N0X2NvbW1vbl9iYXNlX2ZyZXFzPC9wYXJhbWV0ZXI+IDx0eXBlPmRv dWJsZSBwcmVjaXNpb25bXTwvdHlwZT4gPC9vcHRpb25hbD4sCisgICAgICAgICA8b3B0aW9uYWw+ LCA8cGFyYW1ldGVyPmV4cHJzPC9wYXJhbWV0ZXI+IDx0eXBlPnRleHRbXTwvdHlwZT4gPC9vcHRp b25hbD4gKQorICAgICAgICAgPHJldHVybnZhbHVlPnZvaWQ8L3JldHVybnZhbHVlPgorICAgICAg ICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgQ3JlYXRlcyBvciB1cGRhdGVzIHN0 YXRpc3RpY3MgZm9yIHRoZSBnaXZlbiBzdGF0aXN0aWNzIG9iamVjdCB0byB0aGUgCisgICAgICAg ICBzcGVjaWZpZWQgdmFsdWVzLiBUaGUgcGFyYW1ldGVycyBjb3JyZXNwb25kIHRvIGF0dHJpYnV0 ZXMgb2YgdGhlIHNhbWUKKyAgICAgICAgIG5hbWUgZm91bmQgaW4gdGhlIHZpZXcgPGxpbmsKKyAg ICAgICAgIGxpbmtlbmQ9InZpZXctcGctc3RhdHMtZXh0Ij48c3RydWN0bmFtZT5wZ19zdGF0c19l eHQ8L3N0cnVjdG5hbWU+PC9saW5rPgorICAgICAgICAgYW5kIDxsaW5rIGxpbmtlbmQ9InZpZXct cGctc3RhdHMtZXh0LWV4cHJzIj48c3RydWN0bmFtZT5wZ19zdGF0c19leHRfZXhwcnM8L3N0cnVj dG5hbWU+PC9saW5rPiwKKyAgICAgICAgIGV4Y2VwdCBmb3IgPHBhcmFtZXRlcj5leHByczwvcGFy YW1ldGVyPiB3aGljaCBjb3JyZXNwb25kcyB0bworICAgICAgICAgPHN0cnVjdGZpZWxkPnN0eGV4 cHI8L3N0cnVjdGZpZWxkPiBvbgorICAgICAgICAgPGxpbmsgbGlua2VuZD0iY2F0YWxvZy1wZy1z dGF0aXN0aWMtZXh0LWRhdGEiPjxzdHJ1Y3RuYW1lPnBnX3N0YXRpc3RpY19leHRfZGF0YTwvc3Ry dWN0bmFtZT48L2xpbms+CisgICAgICAgICBhcyBhIHR3by1kaW1lbnNpb25hbCB0ZXh0IGFycmF5 LiBUaGUgb3V0ZXIgZGltZW5zaW9uIHJlcHJlc2VudHMgYSBzaW5nbGUKKyAgICAgICAgIDxzdHJ1 Y3RuYW1lPnBnX3N0YXRpc3RpYzwvc3RydWN0bmFtZT4gb2JqZWN0LCBhbmQgdGhlIGlubmVyIGRp bWVuc2lvbiBlbGVtZW50cyBhcmUgdGhlCisgICAgICAgICBzdGF0aXN0aWNzIGZpZWxkcyBmcm9t IDxsaW5rIGxpbmtlbmQ9InZpZXctcGctc3RhdHMiPjxzdHJ1Y3RuYW1lPnBnX3N0YXRzPC9zdHJ1 Y3RuYW1lPjwvbGluaz4KKyAgICAgICAgIChjdXJyZW50bHkgPHN0cnVjdGZpZWxkPm51bGxfZnJh Yzwvc3RydWN0ZmllbGQ+IHRocm91Z2gKKyAgICAgICAgIDxzdHJ1Y3RmaWVsZD5lbGVtX2NvdW50 X2hpc3RvZ3JhbTwvc3RydWN0ZmllbGQ+KS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFy YT4KKyAgICAgICAgIE9wdGlvbmFsIHBhcmFtZXRlcnMgZGVmYXVsdCB0byA8bGl0ZXJhbD5OVUxM PC9saXRlcmFsPiwgd2hpY2ggbGVhdmUKKyAgICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRp c3RpYyB1bmNoYW5nZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAg ICBPcmRpbmFyaWx5LCB0aGVzZSBzdGF0aXN0aWNzIGFyZSBjb2xsZWN0ZWQgYXV0b21hdGljYWxs eSBvciB1cGRhdGVkCisgICAgICAgICBhcyBhIHBhcnQgb2YgPHhyZWYgbGlua2VuZD0ic3FsLXZh Y3V1bSIvPiBvciA8eHJlZgorICAgICAgICAgbGlua2VuZD0ic3FsLWFuYWx5emUiLz4sIHNvIGl0 J3Mgbm90IG5lY2Vzc2FyeSB0byBjYWxsIHRoaXMKKyAgICAgICAgIGZ1bmN0aW9uLiBIb3dldmVy LCBpdCBtYXkgYmUgdXNlZnVsIHdoZW4gdGVzdGluZyB0aGUgZWZmZWN0cyBvZgorICAgICAgICAg c3RhdGlzdGljcyBvbiB0aGUgcGxhbm5lciB0byB1bmRlcnN0YW5kIG9yIGFudGljaXBhdGUgcGxh biBjaGFuZ2VzLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgVGhl IGNhbGxlciBtdXN0IGhhdmUgdGhlIDxsaXRlcmFsPk1BSU5UQUlOPC9saXRlcmFsPiBwcml2aWxl Z2Ugb24KKyAgICAgICAgIHRoZSB0YWJsZSBvciBiZSB0aGUgb3duZXIgb2YgdGhlIGRhdGFiYXNl LgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9lbnRyeT4KKyAgICAgIDwvcm93PgorCisgICAg ICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij4KKyAgICAgICAg PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICAgPGluZGV4dGVybT4KKyAgICAg ICAgICA8cHJpbWFyeT5wZ19jbGVhcl9leHRlbmRlZF9zdGF0czwvcHJpbWFyeT4KKyAgICAgICAg IDwvaW5kZXh0ZXJtPgorICAgICAgICAgPGZ1bmN0aW9uPnBnX2NsZWFyX2V4dGVuZGVkX3N0YXRz PC9mdW5jdGlvbj4gKAorICAgICAgICAgPHBhcmFtZXRlcj5zdGF0aXN0aWNzX3NjaGVtYW5hbWU8 L3BhcmFtZXRlcj4gPHR5cGU+cmVnbmFtZXNwYWNlPC90eXBlPiwKKyAgICAgICAgIDxwYXJhbWV0 ZXI+c3RhdGlzdGljc19uYW1lPC9wYXJhbWV0ZXI+IDx0eXBlPm5hbWU8L3R5cGU+LAorICAgICAg ICAgPHBhcmFtZXRlcj5pbmhlcml0ZWQ8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwvdHlwZT4g KQorICAgICAgICAgPHJldHVybnZhbHVlPnZvaWQ8L3JldHVybnZhbHVlPgorICAgICAgICA8L3Bh cmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgQ2xlYXJzIHN0YXRpc3RpY3MgZm9yIHRoZSBn aXZlbiBzdGF0aXN0aWNzIG9iamVjdCwgYXMKKyAgICAgICAgIHRob3VnaCB0aGUgb2JqZWN0IHdh cyBuZXdseSBjcmVhdGVkLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAg ICAgVGhlIGNhbGxlciBtdXN0IGhhdmUgdGhlIDxsaXRlcmFsPk1BSU5UQUlOPC9saXRlcmFsPiBw cml2aWxlZ2Ugb24KKyAgICAgICAgIHRoZSB0YWJsZSBvciBiZSB0aGUgb3duZXIgb2YgdGhlIGRh dGFiYXNlLgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9lbnRyeT4KKyAgICAgIDwvcm93Pgor CisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFy YSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICA8 cHJpbWFyeT5wZ19yZXN0b3JlX2V4dGVuZGVkX3N0YXRzPC9wcmltYXJ5PgorICAgICAgICA8L2lu ZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX3Jlc3RvcmVfZXh0ZW5kZWRfc3RhdHM8L2Z1 bmN0aW9uPiAoCisgICAgICAgIDxsaXRlcmFsPlZBUklBRElDPC9saXRlcmFsPiA8cGFyYW1ldGVy Pmt3YXJnczwvcGFyYW1ldGVyPiA8dHlwZT4iYW55IjwvdHlwZT4gKQorICAgICAgICA8cmV0dXJu dmFsdWU+Ym9vbGVhbjwvcmV0dXJudmFsdWU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBh cmE+CisgICAgICAgICBTaW1pbGFyIHRvIDxmdW5jdGlvbj5wZ19zZXRfZXh0ZW5kZWRfc3RhdHMo KTwvZnVuY3Rpb24+LCBidXQKKyAgICAgICAgIGludGVuZGVkIGZvciBidWxrIHJlc3RvcmUgb2Yg ZXh0ZW5kZWQgc3RhdGlzdGljcy4gVGhlIHRyYWNrZWQKKyAgICAgICAgIHN0YXRpc3RpY3MgbWF5 IGNoYW5nZSBmcm9tIHZlcnNpb24gdG8gdmVyc2lvbiwgc28gdGhlIHByaW1hcnkgcHVycG9zZQor ICAgICAgICAgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBtYWludGFpbiBhIGNvbnNpc3RlbnQgZnVu Y3Rpb24gc2lnbmF0dXJlIHRvCisgICAgICAgICBhdm9pZCBlcnJvcnMgd2hlbiByZXN0b3Jpbmcg c3RhdGlzdGljcyBmcm9tIHByZXZpb3VzIHZlcnNpb25zLgorICAgICAgICA8L3BhcmE+CisgICAg ICAgIDxwYXJhPgorICAgICAgICAgQXJndW1lbnRzIGFyZSBwYXNzZWQgYXMgcGFpcnMgb2YgPHJl cGxhY2VhYmxlPmFyZ25hbWU8L3JlcGxhY2VhYmxlPgorICAgICAgICAgYW5kIDxyZXBsYWNlYWJs ZT5hcmd2YWx1ZTwvcmVwbGFjZWFibGU+LCB3aGVyZQorICAgICAgICAgPHJlcGxhY2VhYmxlPmFy Z25hbWU8L3JlcGxhY2VhYmxlPiBjb3JyZXNwb25kcyB0byBhIG5hbWVkIGFyZ3VtZW50IGluCisg ICAgICAgICA8ZnVuY3Rpb24+cGdfc2V0X2V4dGVuZGVkX3N0YXRzKCk8L2Z1bmN0aW9uPiBhbmQK KyAgICAgICAgIDxyZXBsYWNlYWJsZT5hcmd2YWx1ZTwvcmVwbGFjZWFibGU+IGlzIG9mIHRoZSBj b3JyZXNwb25kaW5nIHR5cGUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAg ICAgICBBZGRpdGlvbmFsbHksIHRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgYXJndW1lbnQgbmFtZQor ICAgICAgICAgPGxpdGVyYWw+dmVyc2lvbjwvbGl0ZXJhbD4gb2YgdHlwZSA8dHlwZT5pbnRlZ2Vy PC90eXBlPiwgd2hpY2gKKyAgICAgICAgIHNwZWNpZmllcyB0aGUgdmVyc2lvbiBmcm9tIHdoaWNo IHRoZSBzdGF0aXN0aWNzIG9yaWdpbmF0ZWQsIGltcHJvdmluZworICAgICAgICAgaW50ZXJwcmV0 YXRpb24gb2Ygb2xkZXIgc3RhdGlzdGljcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFy YT4KKyAgICAgICAgIEZvciBleGFtcGxlLCB0byBzZXQgdGhlIDxzdHJ1Y3RuYW1lPm5fZGlzdGlu Y3Q8L3N0cnVjdG5hbWU+IGFuZAorICAgICAgICAgPHN0cnVjdG5hbWU+ZXhwcnM8L3N0cnVjdG5h bWU+IGZvciB0aGUgb2JqZWN0CisgICAgICAgICA8c3RydWN0bmFtZT5teV9leHRlbmRlZF9zdGF0 PC9zdHJ1Y3RuYW1lPjoKKzxwcm9ncmFtbGlzdGluZz4KKyBTRUxFQ1QgcGdfcmVzdG9yZV9leHRl bmRlZF9zdGF0cygKKyAgICAnc3RhdGlzdGljc19zY2hlbWFuYW1lJywgJ3B1YmxpYyc6OnJlZ25h bWVzcGFjZSwKKyAgICAnc3RhdGlzdGljc19uYW1lJywgJ215X2V4dGVuZGVkX3N0YXQnOjpuYW1l LAorICAgICduX2Rpc3RpbmN0JywgJ3siMiwgMyI6IDQsICIyLCAtMSI6IDQsICIyLCAtMiI6IDQs ICIzLCAtMSI6IDQsICIzLCAtMiI6IDQsICItMSwgLTIiOiAzLCAiMiwgMywgLTEiOiA0LCAiMiwg MywgLTIiOiA0LCAiMiwgLTEsIC0yIjogNCwgIjMsIC0xLCAtMiI6IDQsICIyLCAzLCAtMSwgLTIi OiA0fSc6OnBnX25kaXN0aW5jdCwKKyAgICAnZXhwcnMnID0+ICd7ezAsNCwtMC43NSwiezF9Iiwi ezAuNX0iLCJ7LTEsMH0iLC0wLjYsTlVMTCxOVUxMLE5VTEx9LHswLjI1LDQsLTAuNSwiezJ9Iiwi ezAuNX0iLE5VTEwsMSxOVUxMLE5VTEwsTlVMTH19Jyk7CiA8L3Byb2dyYW1saXN0aW5nPgogICAg ICAgICA8L3BhcmE+CiAgICAgICAgIDxwYXJhPgotLSAKMi40OC4xCgo= --000000000000ece857062e8b83c2--