ZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvWDE4TkNNU3N0dWJzLmRpZmYgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL1gxOE5DTVNzdHVicy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NGNlZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL1gxOE5DTVNzdHVicy5kaWZmCkBAIC0wLDAgKzEsNTIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorSW5kZXg6IGxpYlgxMS0xLjMvc3JjL2ltQ29udi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliWDExLTEuMy5vcmlnL3NyYy9pbUNvbnYuYworKysrIGxpYlgxMS0xLjMvc3JjL2ltQ29udi5jCitAQCAtODMsNiArODMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IFN1YnN0UmVjIFN1YnN0VGFibGVbCisgICogZnJvbSBVQ1MgY2hhciB0byBzcGVjaWZpZWQgY2hhcnNldCBjaGFyLgorICAqIFRoaXMgY29udmVydGVyIGlzIG5lZWRlZCBmb3IgX1hpbUdldENoYXJDb2RlIHN1YnJvdXRpbmUuCisgICovCisrI2lmZGVmIFhMT0NBTEUKKyBYUG9pbnRlcgorIF9YaW1HZXRMb2NhbGVDb2RlICgKKyAgICAgX1hjb25zdCBjaGFyKgllbmNvZGluZ19uYW1lKQorQEAgLTk2LDYgKzk3LDcgQEAgX1hpbUdldExvY2FsZUNvZGUgKAorICAgICB9CisgICAgIHJldHVybiBjdnQ7CisgfQorKyNlbmRpZgorIAorIC8qCisgICogUmV0dXJucyB0aGUgbG9jYWxlIGRlcGVuZGVudCByZXByZXNlbnRhdGlvbiBvZiBhIGtleXN5bS4KK0BAIC0xMDYsNiArMTA4LDcgQEAgX1hpbUdldExvY2FsZUNvZGUgKAorICAqIHRlcm1pbmF0aW5nIE5VTCBieXRlLiBSZXR1cm4gMCBpZiB0aGUga2V5c3ltIGlzIG5vdCByZXByZXNlbnRhYmxlIGluIHRoZQorICAqIGxvY2FsZQorICAqLworKyNpZmRlZiBYTE9DQUxFCisgLypBUkdTVVNFRCovCisgaW50CisgX1hpbUdldENoYXJDb2RlICgKK0BAIC0xMzUsNiArMTM4LDcgQEAgX1hpbUdldENoYXJDb2RlICgKKyAgICAgICAgIGJ1Zltjb3VudF09ICdcMCc7CisgICAgIHJldHVybiBjb3VudDsKKyB9CisrI2VuZGlmCisgCisgI2lmZGVmIFhLQgorIHN0YXRpYyBpbnQgbG9va3VwX3N0cmluZygKK0luZGV4OiBsaWJYMTEtMS4zL3NyYy9YMThOQ01Tc3R1YnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpYlgxMS0xLjMvc3JjL1gxOE5DTVNzdHVicy5jCitAQCAtMCwwICsxLDQyOCBAQAorKy8qCisrICogWDE4TkNNU3N0dWJzLmMKKysgKiAtIFByb3ZpZGVzIHN0dWJzIGFuZCBkdW1teSBmdW5jcyBuZWVkZWQgd2hlbiBYY21zIGFuZCBYTG9jYWxlIHN0dWZmIHJlbW92ZWQKKysgKgorKyAqIENvcHlyaWdodCCpIDIwMDMgTWF0dGhldyBBbGx1bQorKyAqCisrICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisrICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKKysgKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKKysgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisrICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTWF0dGhldyBBbGx1bSBub3QgYmUgdXNlZCBpbgorKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dAorKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBLZWl0aCBQYWNrYXJkIGFuZCBDb21wYXEgbWFrZXMgbm8KKysgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQKKysgKiBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorKyAqCisrICogTUFUVEhFVyBBTExVTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyAKKysgKiBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCAKKysgKiBJTiBOTyBFVkVOVCBTSEFMTCBLRUlUSCBQQUNLQVJEIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCisrICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCisrICogREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgorKyAqIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKKysgKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorKyAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSAiWGxpYmludC5oIgorKyNpbmNsdWRlICJYbGNpbnQuaCIKKysjaW5jbHVkZSA8WDExL1hsb2NhbGUuaD4KKysjaW5jbHVkZSA8WDExL1hvcy5oPgorKyNpZmRlZiBXSU4zMgorKyN1bmRlZiBjbG9zZQorKyNlbmRpZgorKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKysjaW5jbHVkZSAiWGxjUHViSS5oIgorKworKyNpbmNsdWRlICJYY21zaW50LmgiIAkJLyogZm9yIFhjbXNDQ0MgdHlwZSAgKi8KKysjaW5jbHVkZSAiWGxjUHViSS5oIiAgICAgICAgICAgIC8qIGZvciBYTENkIHR5cGUgKi8KKysjaW5jbHVkZSAiY29uZmlnLmgiCisrCisrI2lmICEgWExPQ0FMRQorKworK0Jvb2wKKytYU3VwcG9ydHNMb2NhbGUoKQorK3sKKysgIHJldHVybiBGYWxzZTsgCQkKKyt9CisrCisrY2hhciAqCisrWFNldExvY2FsZU1vZGlmaWVycygKKysgICAgY29uc3QgY2hhciAqbW9kaWZpZXJzKQorK3sKKysgIHJldHVybiBOVUxMOworK30KKysKKytYTENkCisrX1hPcGVuTEMoCisrICAgIGNoYXIgKm5hbWUpCisreworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK1hMQ2QKKytfWGxjQ3VycmVudExDKCkKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrdm9pZAorK19YbGNWYVRvQXJnTGlzdCgKKysgICAgdmFfbGlzdCB2YXIsCisrICAgIGludCBjb3VudCwKKysgICAgWGxjQXJnTGlzdCAqYXJnc19yZXQpCisreworKyAgcmV0dXJuOworK30KKysKKyt2b2lkCisrX1hsY0NvdW50VmFMaXN0KAorKyAgICB2YV9saXN0IHZhciwKKysgICAgaW50ICpjb3VudF9yZXQpCisreworKyAgcmV0dXJuOworK30KKysKKyt2b2lkCisrX1hDbG9zZUxDKAorKyAgICBYTENkIGxjZCkKKyt7CisrICByZXR1cm47CisrfQorKworK2ludAorK19YbGNDb252ZXJ0KAorKyAgICBYbGNDb252IGNvbnYsCisrICAgIFhQb2ludGVyICpmcm9tLAorKyAgICBpbnQgKmZyb21fbGVmdCwKKysgICAgWFBvaW50ZXIgKnRvLAorKyAgICBpbnQgKnRvX2xlZnQsCisrICAgIFhQb2ludGVyICphcmdzLAorKyAgICBpbnQgbnVtX2FyZ3MpCisreworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIFhJTSBTdHVicyAqLworKworK1hQb2ludGVyCisrX1hpbUdldExvY2FsZUNvZGUgKCBfWGNvbnN0IGNoYXIqIGVuY29kaW5nX25hbWUgKQorK3sKKysgIHJldHVybiBOVUxMOworK30KKysKKytpbnQKKytfWGltR2V0Q2hhckNvZGUgKAorKyAgICBYUG9pbnRlciAgICAgICAgICAgIHVjc19jb252LAorKyAgICBLZXlTeW0gICAgICAgICAgICAgIGtleXN5bSwKKysgICAgdW5zaWduZWQgY2hhciogICAgICBidWYsCisrICAgIGludCAgICAgICAgICAgICAgICAgbmJ5dGVzKQorK3sKKysgIHJldHVybiAwOworK30KKysKKysvKiBYcm0gU3R1YnMgKi8KKysKKytYcm1NZXRob2RzCisrX1hybUluaXRQYXJzZUluZm8oCisrICAgIFhQb2ludGVyICpzdGF0ZSkKKyt7CisrICAgIHJldHVybiAoWHJtTWV0aG9kcykgTlVMTDsKKyt9CisrCisrLyogWHdjIFN0dWJzICovCisrCisraW50CisrWHdjVGV4dEV4dGVudHMoCisrICAgIFhGb250U2V0ICAgICAgICAgICAgZm9udF9zZXQsCisrICAgIF9YY29uc3Qgd2NoYXJfdCAgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB0ZXh0X2xlbiwKKysgICAgWFJlY3RhbmdsZSAgICAgICAgICpvdmVyYWxsX2lua19leHRlbnRzLAorKyAgICBYUmVjdGFuZ2xlICAgICAgICAgKm92ZXJhbGxfbG9naWNhbF9leHRlbnRzKQorK3sKKysgIHJldHVybiAwOworK30KKysKKyt2b2lkIAorK1h3Y0RyYXdTdHJpbmcoRGlzcGxheSAqZGlzcGxheSwKKysJICAgICAgRHJhd2FibGUgZCwKKysJICAgICAgWEZvbnRTZXQgZm9udF9zZXQsCisrCSAgICAgIEdDIGdjLAorKwkgICAgICBpbnQgeCwgaW50IHksCisrCSAgICAgIF9YY29uc3Qgd2NoYXJfdCAqc3RyaW5nLAorKwkgICAgICBpbnQgbnVtX3djaGFycykKKyt7CisrICA7CisrfQorKworK3ZvaWQKKytYd2NEcmF3VGV4dCgKKysgICAgRGlzcGxheSAgICAgICAgICAgICpkcHksCisrICAgIERyYXdhYmxlICAgICAgICAgICAgZCwKKysgICAgR0MgICAgICAgICAgICAgICAgICBnYywKKysgICAgaW50ICAgICAgICAgICAgICAgICB4LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHksCisrICAgIFh3Y1RleHRJdGVtICAgICAgICAqdGV4dF9pdGVtcywKKysgICAgaW50ICAgICAgICAgICAgICAgICBuaXRlbXMpCisreworKyAgOworK30KKysKKyt2b2lkCisrWHdjRHJhd0ltYWdlU3RyaW5nKAorKyAgICBEaXNwbGF5ICAgICAgICAgICAgKmRweSwKKysgICAgRHJhd2FibGUgICAgICAgICAgICBkLAorKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorKyAgICBHQyAgICAgICAgICAgICAgICAgIGdjLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHgsCisrICAgIGludCAgICAgICAgICAgICAgICAgeSwKKysgICAgX1hjb25zdCB3Y2hhcl90ICAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHRleHRfbGVuKQorK3sKKysgIDsKKyt9CisrCisraW50CisrWHdjVGV4dEVzY2FwZW1lbnQoCisrICAgIFhGb250U2V0ICAgICAgICAgICAgZm9udF9zZXQsCisrICAgIF9YY29uc3Qgd2NoYXJfdCAgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB0ZXh0X2xlbikKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrU3RhdHVzCisrWHdjVGV4dFBlckNoYXJFeHRlbnRzKAorKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorKyAgICBfWGNvbnN0IHdjaGFyX3QgICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4sCisrICAgIFhSZWN0YW5nbGUgICAgICAgICAqaW5rX2V4dGVudHNfYnVmZmVyLAorKyAgICBYUmVjdGFuZ2xlICAgICAgICAgKmxvZ2ljYWxfZXh0ZW50c19idWZmZXIsCisrICAgIGludCAgICAgICAgICAgICAgICAgYnVmZmVyX3NpemUsCisrICAgIGludCAgICAgICAgICAgICAgICAqbnVtX2NoYXJzLAorKyAgICBYUmVjdGFuZ2xlICAgICAgICAgKm1heF9pbmtfZXh0ZW50cywKKysgICAgWFJlY3RhbmdsZSAgICAgICAgICptYXhfbG9naWNhbF9leHRlbnRzKQorK3sKKysgIHJldHVybihYY21zRmFpbHVyZSk7CisrfQorKworK2ludAorK1h3Y1RleHRQcm9wZXJ0eVRvVGV4dExpc3QoCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgY29uc3QgWFRleHRQcm9wZXJ0eSAqdGV4dF9wcm9wLAorKyAgICB3Y2hhcl90ICoqKmxpc3RfcmV0LAorKyAgICBpbnQgKmNvdW50X3JldCkKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisraW50CisrWHdjVGV4dExpc3RUb1RleHRQcm9wZXJ0eSgKKysgICAgRGlzcGxheSAqZHB5LAorKyAgICB3Y2hhcl90ICoqbGlzdCwKKysgICAgaW50IGNvdW50LAorKyAgICBYSUNDRW5jb2RpbmdTdHlsZSBzdHlsZSwKKysgICAgWFRleHRQcm9wZXJ0eSAqdGV4dF9wcm9wKQorK3sKKysgIHJldHVybiAwOworK30KKysKKyt2b2lkCisrWHdjRnJlZVN0cmluZ0xpc3Qod2NoYXJfdCAqKmxpc3QpCisreworKyAgcmV0dXJuOworK30KKysKKysKKyt2b2lkIFhtYlNldFdNUHJvcGVydGllcyAoICAgICAgICAvKiBBY3R1YWxseSBmcm9tIG1iV01Qcm9wcy5jICovCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgV2luZG93IHcsCisrICAgIF9YY29uc3QgY2hhciAqd2luZG93TmFtZSwKKysgICAgX1hjb25zdCBjaGFyICppY29uTmFtZSwKKysgICAgY2hhciAqKmFyZ3YsCisrICAgIGludCBhcmdjLAorKyAgICBYU2l6ZUhpbnRzICpzaXplSGludHMsCisrICAgIFhXTUhpbnRzICp3bUhpbnRzLAorKyAgICBYQ2xhc3NIaW50ICpjbGFzc0hpbnRzKQorK3sKKysgIHJldHVybjsKKyt9CisrCisraW50CisrWG1iVGV4dFByb3BlcnR5VG9UZXh0TGlzdCgKKysgICAgRGlzcGxheSAqZHB5LAorKyAgICBjb25zdCBYVGV4dFByb3BlcnR5ICp0ZXh0X3Byb3AsCisrICAgIGNoYXIgKioqbGlzdF9yZXQsCisrICAgIGludCAqY291bnRfcmV0KQorK3sKKysgIHJldHVybiBYTG9jYWxlTm90U3VwcG9ydGVkOworK30KKysKKytpbnQKKytYbWJUZXh0TGlzdFRvVGV4dFByb3BlcnR5KAorKyAgICBEaXNwbGF5ICpkcHksCisrICAgIGNoYXIgKipsaXN0LAorKyAgICBpbnQgY291bnQsCisrICAgIFhJQ0NFbmNvZGluZ1N0eWxlIHN0eWxlLAorKyAgICBYVGV4dFByb3BlcnR5ICp0ZXh0X3Byb3ApCisreworKyAgcmV0dXJuIFhMb2NhbGVOb3RTdXBwb3J0ZWQ7CisrfQorKworK2ludAorK1htYlRleHRFeHRlbnRzKAorKyAgICBYRm9udFNldCAgICAgICAgZm9udF9zZXQsCisrICAgIF9YY29uc3QgY2hhciAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgdGV4dF9sZW4sCisrICAgIFhSZWN0YW5nbGUgICAgICpvdmVyYWxsX2lua19leHRlbnRzLAorKyAgICBYUmVjdGFuZ2xlICAgICAqb3ZlcmFsbF9sb2dpY2FsX2V4dGVudHMpCisreworKyAgcmV0dXJuIDA7CisrfQorKworK3ZvaWQKKytYbWJEcmF3VGV4dCgKKysgICAgRGlzcGxheSAgICAgICAgICAgICpkcHksCisrICAgIERyYXdhYmxlICAgICAgICAgICAgZCwKKysgICAgR0MgICAgICAgICAgICAgICAgICBnYywKKysgICAgaW50ICAgICAgICAgICAgICAgICB4LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHksCisrICAgIFhtYlRleHRJdGVtICAgICAgICAqdGV4dF9pdGVtcywKKysgICAgaW50ICAgICAgICAgICAgICAgICBuaXRlbXMpCisreworKyAgOworK30KKysKKyt2b2lkCisrWG1iRHJhd1N0cmluZygKKysgICAgRGlzcGxheSAgICAgICAgICAgICpkcHksCisrICAgIERyYXdhYmxlICAgICAgICAgICAgZCwKKysgICAgWEZvbnRTZXQgICAgICAgICAgICBmb250X3NldCwKKysgICAgR0MgICAgICAgICAgICAgICAgICBnYywKKysgICAgaW50ICAgICAgICAgICAgICAgICB4LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHksCisrICAgIF9YY29uc3QgY2hhciAgICAgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB0ZXh0X2xlbikKKyt7CisrICA7CisrfQorKworK3ZvaWQKKytYbWJEcmF3SW1hZ2VTdHJpbmcoCisrICAgIERpc3BsYXkgICAgICAgICAgICAqZHB5LAorKyAgICBEcmF3YWJsZSAgICAgICAgICAgIGQsCisrICAgIFhGb250U2V0ICAgICAgICAgICAgZm9udF9zZXQsCisrICAgIEdDICAgICAgICAgICAgICAgICAgZ2MsCisrICAgIGludCAgICAgICAgICAgICAgICAgeCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB5LAorKyAgICBfWGNvbnN0IGNoYXIgICAgICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4pCisreworKyAgOworK30KKysKKytpbnQKKytYbWJUZXh0RXNjYXBlbWVudCgKKysgICAgWEZvbnRTZXQgICAgICAgIGZvbnRfc2V0LAorKyAgICBfWGNvbnN0IGNoYXIgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgIHRleHRfbGVuKQorK3sKKysgIHJldHVybiAwOworK30KKysKKytTdGF0dXMKKytYbWJUZXh0UGVyQ2hhckV4dGVudHMoCisrICAgIFhGb250U2V0ICAgICAgICBmb250X3NldCwKKysgICAgX1hjb25zdCBjaGFyICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICB0ZXh0X2xlbiwKKysgICAgWFJlY3RhbmdsZSAgICAgKmlua19leHRlbnRzX2J1ZmZlciwKKysgICAgWFJlY3RhbmdsZSAgICAgKmxvZ2ljYWxfZXh0ZW50c19idWZmZXIsCisrICAgIGludCAgICAgICAgICAgICBidWZmZXJfc2l6ZSwKKysgICAgaW50ICAgICAgICAgICAgKm51bV9jaGFycywKKysgICAgWFJlY3RhbmdsZSAgICAgKm1heF9pbmtfZXh0ZW50cywKKysgICAgWFJlY3RhbmdsZSAgICAgKm1heF9sb2dpY2FsX2V4dGVudHMpCisreworKyAgcmV0dXJuIDA7CisrfQorKworK3Vuc2lnbmVkIGludAorK0tleVN5bVRvVWNzNChLZXlTeW0ga2V5c3ltKQorK3sKKysgIHJldHVybiAwOworK30KKysKKysjZW5kaWYgCisrCisrI2lmICEgWENNUworKworK1hjbXNDQ0MgCisrWGNtc0NDQ09mQ29sb3JtYXAoZHB5LCBjbWFwKQorKyAgICBEaXNwbGF5ICpkcHk7CisrICAgIENvbG9ybWFwIGNtYXA7CisreworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK1N0YXR1cworK19YY21zUmVzb2x2ZUNvbG9yU3RyaW5nICgKKysgICAgWGNtc0NDQyBjY2MsCisrICAgIGNvbnN0IGNoYXIgKipjb2xvcl9zdHJpbmcsCisrICAgIFhjbXNDb2xvciAqcENvbG9yX2V4YWN0X3JldHVybiwKKysgICAgWGNtc0NvbG9yRm9ybWF0IHJlc3VsdF9mb3JtYXQpCisreworKyAgcmV0dXJuKFhjbXNGYWlsdXJlKTsKKyt9CisrCisrdm9pZAorK19YY21zVW5yZXNvbHZlQ29sb3IoCisrICAgIFhjbXNDQ0MgY2NjLAorKyAgICBYY21zQ29sb3IgKnBDb2xvcikKKyt7CisrICByZXR1cm47CisrfQorKworK3ZvaWQKKytfWFVucmVzb2x2ZUNvbG9yKAorKyAgICBYY21zQ0NDIGNjYywKKysgICAgWENvbG9yICpwWENvbG9yKQorK3sKKysgIHJldHVybjsKKyt9CisrCisrWGNtc0NtYXBSZWMgKgorK19YY21zQWRkQ21hcFJlYyhkcHksIGNtYXAsIHdpbmRvd0lELCB2aXN1YWwpCisrICAgIERpc3BsYXkgKmRweTsKKysgICAgQ29sb3JtYXAgY21hcDsKKysgICAgV2luZG93IHdpbmRvd0lEOworKyAgICBWaXN1YWwgKnZpc3VhbDsKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrdm9pZAorK19YY21zUkdCX3RvX1hDb2xvcigKKysgICAgWGNtc0NvbG9yICpwQ29sb3JzLAorKyAgICBYQ29sb3IgKnBYQ29sb3JzLAorKyAgICB1bnNpZ25lZCBpbnQgbkNvbG9ycykKKyt7CisrICByZXR1cm47CisrfQorKworK1hjbXNDbWFwUmVjICoKKytfWGNtc0NvcHlDbWFwUmVjQW5kRnJlZSgKKysgICAgRGlzcGxheSAqZHB5LAorKyAgICBDb2xvcm1hcCBzcmNfY21hcCwKKysgICAgQ29sb3JtYXAgY29weV9jbWFwKQorK3sKKysgIHJldHVybiBOVUxMOworK30KKysKKyt2b2lkCisrX1hjbXNEZWxldGVDbWFwUmVjKAorKyAgICBEaXNwbGF5ICpkcHksCisrICAgIENvbG9ybWFwIGNtYXApCisreworKyAgcmV0dXJuOworK30KKysKKysjZW5kaWYKK0luZGV4OiBsaWJYMTEtMS4zL3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYlgxMS0xLjMub3JpZy9zcmMvTWFrZWZpbGUuYW0KKysrKyBsaWJYMTEtMS4zL3NyYy9NYWtlZmlsZS5hbQorQEAgLTMzNSw2ICszMzUsOCBAQCBpZiBUSFJTVFVCUworIGxpYlgxMV9sYV9TT1VSQ0VTKz1VSVRoclN0dWJzLmMKKyBlbmRpZgorIAorK2xpYlgxMV9sYV9TT1VSQ0VTKz1YMThOQ01Tc3R1YnMuYworKworIHgxMWRhdGFkaXIgPSBAWDExX0RBVEFESVJACisgeDExZGF0YV9EQVRBID0gWEtleXN5bURCIFhFcnJvckRCCisgCitAQCAtMzQyLDYgKzM0NCw3IEBAIEVYVFJBX0RJU1QgPSBcCisgCSQoeDExZGF0YV9EQVRBKSBcCisgCW9zMlN0dWJzLmMgXAorLQlVSVRoclN0dWJzLmMgCisrCVVJVGhyU3R1YnMuYyBcCisrCVgxOE5DTVNzdHVicy5jCisgCisgaWYgWENCCisgbGliWDExX2xhX1NPVVJDRVMgKz0gXAorSW5kZXg6IGxpYlgxMS0xLjMvc3JjL2xvY2tpbmcuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYlgxMS0xLjMub3JpZy9zcmMvbG9ja2luZy5jCisrKysgbGliWDExLTEuMy9zcmMvbG9ja2luZy5jCitAQCAtNjYsNyArNjYsOSBAQCBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhCisgI2RlZmluZSBOVU1fRlJFRV9DVkxTIDQKKyAKKyAvKiBpbiBsY1dyYXAuYyAqLworKyNpZmRlZiBYTE9DQUxFCisgZXh0ZXJuIExvY2tJbmZvUHRyIF9YaTE4bl9sb2NrOworKyNlbmRpZgorIAorICNpZmRlZiBXSU4zMgorIHN0YXRpYyBEV09SRCBfWF9UbHNJbmRleCA9IChEV09SRCktMTsKK0BAIC01OTQsOSArNTk2LDExIEBAIFN0YXR1cyBYSW5pdFRocmVhZHModm9pZCkKKyAgICAgX1hnbG9iYWxfbG9jayA9ICZnbG9iYWxfbG9jazsKKyAgICAgeG11dGV4X2luaXQoX1hnbG9iYWxfbG9jay0+bG9jayk7CisgICAgIHhtdXRleF9zZXRfbmFtZShfWGdsb2JhbF9sb2NrLT5sb2NrLCAiWGxpYiBnbG9iYWwiKTsKKysjaWZkZWYgWExPQ0FMRQorICAgICBfWGkxOG5fbG9jayA9ICZpMThuX2xvY2s7CisgICAgIHhtdXRleF9pbml0KF9YaTE4bl9sb2NrLT5sb2NrKTsKKyAgICAgeG11dGV4X3NldF9uYW1lKF9YaTE4bl9sb2NrLT5sb2NrLCAiWGxpYiBpMThuIik7CisrI2VuZGlmCisgICAgIF9YTG9ja011dGV4X2ZuID0gX1hMb2NrTXV0ZXg7CisgICAgIF9YVW5sb2NrTXV0ZXhfZm4gPSBfWFVubG9ja011dGV4OworICAgICBfWENyZWF0ZU11dGV4X2ZuID0gX1hDcmVhdGVNdXRleDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZGlzYWJsZV90ZXN0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZGlzYWJsZV90ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWI2Y2RlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9kaXNhYmxlX3Rlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCitVcGRhdGUgZm9yIDEuNi4xCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC1OdXJkIGxpYlgxMS0xLjUuMC9ubHMvTWFrZWZpbGUuYW0gbGliWDExLTEuNS4wL25scy9NYWtlZmlsZS5hbQorLS0tIGxpYlgxMS0xLjUuMC9ubHMvTWFrZWZpbGUuYW0JMjAxMi0wNi0wMiAwOTozNzoxOC4wMDAwMDAwMDAgKzAzMDAKKysrKyBsaWJYMTEtMS41LjAvbmxzL01ha2VmaWxlLmFtCTIwMTMtMDEtMDIgMTY6MTA6MjQuOTYwMTU2MTMxICswMjAwCitAQCAtMzYsMTEgKzM2LDYgQEAKKyAgICAgICAgIDwgbG9jYWxlLmRpci5sMSA+IGxvY2FsZS5kaXIubDIKKwljYXQgbG9jYWxlLmRpci5sMiBsb2NhbGUuZGlyLmwxID4gbG9jYWxlLmRpcgorCistaWYgSEFWRV9QRVJMCistTE9HX0NPTVBJTEVSID0gJChQRVJMKQorLVRFU1RTID0gY29tcG9zZS1jaGVjay5wbAorLWVuZGlmIEhBVkVfUEVSTAorLQorCisgIyBQZXItbG9jYWxlIGRhdGEgZmlsZXMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZml4LWRpc2FibGUteGxvY2FsZS5kaWZmIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9maXgtZGlzYWJsZS14bG9jYWxlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjMzk4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZml4LWRpc2FibGUteGxvY2FsZS5kaWZmCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBYaWFvZmVuZyBZYW4gPHhpYW9mZW5nLnlhbkB3aW5kcml2ZXIuY29tPgorLS0tIGxpYlgxMS1YMTFSNy4wLTEuMC4wL3NyYy9Gb250LmMub3JpZwkyMDA2LTAzLTEyIDE4OjM1OjQyLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYlgxMS1YMTFSNy4wLTEuMC4wL3NyYy9Gb250LmMJMjAwNi0wMy0xMiAxODo0MDoyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC03MDEsNyArNzAxLDExIEBACisgICAgIH0KKyAgICAgaWYgKGwgLSAyIC0gKHAgLSBjaGFyc2V0KSA8IDApCisgCXJldHVybiAwOworKyNpZmRlZiBYTE9DQUxFCisgICAgIGlmIChfWGxjTkNvbXBhcmVJU09MYXRpbjEobmFtZSArIGwgLSAyIC0gKHAgLSBjaGFyc2V0KSwgY2hhcnNldCwgcCAtIGNoYXJzZXQpKQorKyNlbHNlCisrICAgIGlmIChzdHJuY2FzZWNtcChuYW1lICsgbCAtIDIgLSAocCAtIGNoYXJzZXQpLCBjaGFyc2V0LCBwIC0gY2hhcnNldCkpCisrI2VuZGlmCisgCXJldHVybiAwOworICAgICBpZiAoc3RybGVuKHAgKyAxKSArIGwgLSAxID49IHNpemVvZihidWYpIC0gMSkKKyAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2ZpeC11dGY4LXdyb25nLWRlZmluZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZml4LXV0Zjgtd3JvbmctZGVmaW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MzQ3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2ZpeC11dGY4LXdyb25nLWRlZmluZS5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWGlhb2ZlbmcgWWFuIDx4aWFvZmVuZy55YW5Ad2luZHJpdmVyLmNvbT4KKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cuaG9sZ2Vyc2NodXJpZy5kZS9wYXRjaGVyLmh0bWwKKyMKKworLS0tIGxpYlgxMS1YMTFSNy4wLTEuMC4wL2luY2x1ZGUvWDExL1hsaWIuaH5maXgtdXRmOC13cm9uZy1kZWZpbmUKKysrKyBsaWJYMTEtWDExUjcuMC0xLjAuMC9pbmNsdWRlL1gxMS9YbGliLmgKK0BAIC0xMDMsNyArMTAzLDcgQEAKKyAKKyAvKiBBUEkgbWVudGlvbmluZyAiVVRGOCIgb3IgInV0ZjgiIGlzIGFuIFhGcmVlODYgZXh0ZW5zaW9uLCBpbnRyb2R1Y2VkIGluCisgICAgTm92ZW1iZXIgMjAwMC4gSXRzIHByZXNlbmNlIGlzIGluZGljYXRlZCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgbWFjcm8uICovCistI2RlZmluZSBYX0hBVkVfVVRGOF9TVFJJTkcgMQorKyN1bmRlZiBYX0hBVkVfVVRGOF9TVFJJTkcKKyAKKyB0eXBlZGVmIGNoYXIgKlhQb2ludGVyOworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9saWJYMTEtQWRkLW1pc3NpbmctTlVMTC1jaGVjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvbGliWDExLUFkZC1taXNzaW5nLU5VTEwtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhYmY3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvbGliWDExLUFkZC1taXNzaW5nLU5VTEwtY2hlY2sucGF0Y2gKQEAgLTAsMCArMSw3MiBAQAorRnJvbSA0ZDg1ZDVmM2JkOGFmYWM4OTM3MzhmZDg4ZTE5ZDhjYjVjZjk5OGZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KK0RhdGU6IFN1biwgMjcgSnVsIDIwMTQgMTM6MTA6MDcgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGliWDExOiBBZGQgbWlzc2luZyBOVUxMIGNoZWNrIG9uIGltIGFuZCBpbS0+bWV0aG9kcworCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IChjODI3ZWRjZDFjNGE3ZjkyMGFhMjUyMDgwODNiNWI1OGQ2MGQyYjQ0KQorU2lnbmVkLW9mZi1ieTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KKworLS0tCisgc3JjL3hsaWJpMThuL0lDV3JhcC5jIHwgNSArKystLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLXJ1IGxpYlgxMS0xLjYuMi1vcmlnL3NyYy94bGliaTE4bi9JQ1dyYXAuYyBsaWJYMTEtMS42LjIvc3JjL3hsaWJpMThuL0lDV3JhcC5jCistLS0gbGliWDExLTEuNi4yLW9yaWcvc3JjL3hsaWJpMThuL0lDV3JhcC5jCTIwMTQtMDctMjcgMTM6Mzg6MjkuNTg2NjY2NDQ5IC0wNDAwCisrKysgbGliWDExLTEuNi4yL3NyYy94bGliaTE4bi9JQ1dyYXAuYwkyMDE0LTA3LTI3IDEzOjQxOjM5LjY3MTYwOTAzMCAtMDQwMAorQEAgLTE2OSw3ICsxNjksNyBAQAorICAgICB2YV9saXN0IHZhcjsKKyAgICAgaW50ICAgICB0b3RhbF9jb3VudDsKKyAgICAgWElNQXJnICphcmdzOworLSAgICBjaGFyICAgKnJldDsKKysgICAgY2hhciAgICpyZXQgPSBOVUxMOworIAorICAgICAvKgorICAgICAgKiBzbyBjb3VudCB0aGUgc3R1ZmYgZGFuZ2xpbmcgaGVyZQorQEAgLTE4NSw3ICsxODUsOCBAQAorICAgICBfWElNVmFUb05lc3RlZExpc3QodmFyLCB0b3RhbF9jb3VudCwgJmFyZ3MpOworICAgICB2YV9lbmQodmFyKTsKKyAKKy0gICAgcmV0ID0gKCppbS0+bWV0aG9kcy0+c2V0X3ZhbHVlcykgKGltLCBhcmdzKTsKKysgICAgaWYgKGltICYmIGltLT5tZXRob2RzKQorKwlyZXQgPSAoKmltLT5tZXRob2RzLT5zZXRfdmFsdWVzKSAoaW0sIGFyZ3MpOworICAgICBYZnJlZShhcmdzKTsKKyAgICAgcmV0dXJuIHJldDsKKyB9CitAQCAtMTk2LDcgKzE5Nyw3IEBACisgICAgIHZhX2xpc3QgdmFyOworICAgICBpbnQgICAgIHRvdGFsX2NvdW50OworICAgICBYSU1BcmcgKmFyZ3M7CistICAgIGNoYXIgICAqcmV0OworKyAgICBjaGFyICAgKnJldCA9IE5VTEw7CisgCisgICAgIC8qCisgICAgICAqIHNvIGNvdW50IHRoZSBzdHVmZiBkYW5nbGluZyBoZXJlCitAQCAtMjEyLDcgKzIxMyw4IEBACisgICAgIF9YSU1WYVRvTmVzdGVkTGlzdCh2YXIsIHRvdGFsX2NvdW50LCAmYXJncyk7CisgICAgIHZhX2VuZCh2YXIpOworIAorLSAgICByZXQgPSAoKmltLT5tZXRob2RzLT5nZXRfdmFsdWVzKSAoaW0sIGFyZ3MpOworKyAgICBpZiAoaW0gJiYgaW0tPm1ldGhvZHMpCisrCXJldCA9ICgqaW0tPm1ldGhvZHMtPmdldF92YWx1ZXMpIChpbSwgYXJncyk7CisgICAgIFhmcmVlKGFyZ3MpOworICAgICByZXR1cm4gcmV0OworIH0KK0BAIC0yMjgsNyArMjMwLDcgQEAKKyAgICAgdmFfbGlzdCB2YXI7CisgICAgIGludCAgICAgdG90YWxfY291bnQ7CisgICAgIFhJTUFyZyAqYXJnczsKKy0gICAgWElDICAgICBpYzsKKysgICAgWElDICAgICBpYyA9IE5VTEw7CisgCisgICAgIC8qCisgICAgICAqIHNvIGNvdW50IHRoZSBzdHVmZiBkYW5nbGluZyBoZXJlCitAQCAtMjQ0LDcgKzI0Niw4IEBACisgICAgIF9YSU1WYVRvTmVzdGVkTGlzdCh2YXIsIHRvdGFsX2NvdW50LCAmYXJncyk7CisgICAgIHZhX2VuZCh2YXIpOworIAorLSAgICBpYyA9IChYSUMpICgqaW0tPm1ldGhvZHMtPmNyZWF0ZV9pYykgKGltLCBhcmdzKTsKKysgICAgaWYgKGltICYmIGltLT5tZXRob2RzKQorKwlpYyA9IChYSUMpICgqaW0tPm1ldGhvZHMtPmNyZWF0ZV9pYykgKGltLCBhcmdzKTsKKyAgICAgWGZyZWUoYXJncyk7CisgICAgIGlmIChpYykgeworIAlpYy0+Y29yZS5uZXh0ID0gaW0tPmNvcmUuaWNfY2hhaW47Cg==