From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by sourceware.org (Postfix) with ESMTPS id 1DF653858D32; Wed, 15 Nov 2023 16:54:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1DF653858D32 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 1DF653858D32 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::333 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700067249; cv=none; b=PuLX9SSUBdgnfEPLfQo0LNDzwfcgm7/hTtzBoAjBFQWhMksClT+8Zof9gXIhvAgxPRkgW89tT6GA60fr22vQsusJNEg5rywkTWcJfYMH55DRNB+qGqGxe10/TPWvSgyl2ephC9dK5kELX0IU4LEfKbFFhKCt46OBpei8qJqn7Us= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700067249; c=relaxed/simple; bh=/hiGMRTPWs9PjIZlD+oNpk1CGxzGsJZdu1PQ+a9Yl40=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=vraVy5GLo7Ew/O1i06DNioSzihxj9GBXoc8NqJZHBQOLzA+9Gqlk3dJcHu5djYnLYrP3dYck6vImc+ESmmoDsxCHbsoNkR6igSdw3lg2kDh1OCrfMYUqTJtfBP09Yxyn36pG0q716R1Anwj3lBdSSn6Y/9yHS0/V6KuNZd9thjQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-40907b82ab9so6488565e9.1; Wed, 15 Nov 2023 08:54:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700067243; x=1700672043; darn=gcc.gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=cI/TnkQRyrUihWXm7NHQzqItbT2TqZulqwTrLzHflCo=; b=TR859F0LiANb+Kc0OieEPIxiOZepSHPmizoRceXWMhEbQGwPwqocVc9p3k3rC0Bwet yAjY8UVOnbsi9ktxAOnzITzTTPrFKhfO7QohUGfpJ6lgPK+POZqJ3yizRuyMOmpRqZjU 9NFQLIpxNZ31seIi8xPW5PAoZSFrAiitTQc4BciTOMEpqMfkg1L5ZWhPb/HqYSzL06Ed 8nTNgOfG2G+iOvWFRsGjmfEwFBZS2S3CLV6SEOYM924mcjRQ1B4v5PxYLQOa6kEybdIS rLBx66dl+NbqR6LDI+HaRfrfDUR8pPyWzTFr3HbMp/uG+XwoPjUB4tmCXal3DNFp6cXs EqXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700067243; x=1700672043; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=cI/TnkQRyrUihWXm7NHQzqItbT2TqZulqwTrLzHflCo=; b=Q/lBOMIOa7aY6+DipyvUL9AQ6EpaNdldNrHyiySRXUaT4YrAaWrTc6a0DsRc2hZJQ7 Rfeg4FmQO1J/jIruKSGbIM7pMGNs828x6pwpuZ45xD55pdPTHrh1PzA3GkSH/jiguT6U ruokU3Mv52JOOoRZxdRJaAk9JiPkTKTboqSOgXLyt/J4FtD/iTtBwZXBxhTfuMljIcOH QPC1MwxafVNN58Q3xAaRwLFCTibDx/tanZy2RYiHRqq2RQAA2g59EjtNqgRKLyCR1oIf dk6YP21uUYO2wjYkj1UtE9fmAyGqbALmJs4PBFId+2q4qbhhpSjJgOpYM/I677zleBI+ s/2w== X-Gm-Message-State: AOJu0Ywi9P8RyQUBcTHLRmC2QGhEbr26gvtZuyGWYT8zjDYonqHf5m/c 2y5s5FhWcJHBBlDqdqNPiYtqG96Xks5bQBtr7hOHVSJW X-Google-Smtp-Source: AGHT+IFe4r5JYTuU646MfKI4aaEDkqGF67AmeMoahw766iU3ehws4PF0tIdJOiQo0BHMu3AcaKo78VVg2vom84o9Wxk= X-Received: by 2002:a05:6000:1447:b0:331:5975:a867 with SMTP id v7-20020a056000144700b003315975a867mr2105138wrx.19.1700067242528; Wed, 15 Nov 2023 08:54:02 -0800 (PST) MIME-Version: 1.0 From: Guillaume Gomez Date: Wed, 15 Nov 2023 17:53:51 +0100 Message-ID: Subject: [PATCH] Add support for function attributes and variable attributes To: jit@gcc.gnu.org, Antoni , gcc-patches@gcc.gnu.org, David Malcolm Content-Type: multipart/mixed; boundary="00000000000015f514060a33c00b" X-Spam-Status: No, score=-9.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --00000000000015f514060a33c00b Content-Type: text/plain; charset="UTF-8" Hi, This patch adds the (incomplete) support for function and variable attributes. The added attributes are the ones we're using in rustc_codegen_gcc but all the groundwork is done to add more (and we will very likely add more as we didn't add all the ones we use in rustc_codegen_gcc yet). The only big question with this patch is about `inline`. We currently handle it as an attribute because it is more convenient for us but is it ok or should we create a separate function to mark a function as inlined? Thanks in advance for the review. --00000000000015f514060a33c00b Content-Type: text/x-patch; charset="US-ASCII"; name="0001-PATCH-Add-support-for-function-attributes-and-variab.patch" Content-Disposition: attachment; filename="0001-PATCH-Add-support-for-function-attributes-and-variab.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lp000phw0 RnJvbSBkZjc1ZjBlYjhhYWNiYTI0OWI2ZTc5MTYwMzc1MmUzNTc3ODk1MWE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdWlsbGF1bWUgR29tZXogPGd1aWxsYXVtZTEuZ29tZXpAZ21h aWwuY29tPgpEYXRlOiBNb24sIDIwIEp1biAyMDIyIDE0OjM0OjM5IC0wNDAwClN1YmplY3Q6IFtQ QVRDSF0gW1BBVENIXSBBZGQgc3VwcG9ydCBmb3IgZnVuY3Rpb24gYXR0cmlidXRlcyBhbmQgdmFy aWFibGUKIGF0dHJpYnV0ZXMuCgpnY2Mvaml0L0NoYW5nZUxvZzoKCgkqIGR1bW15LWZyb250ZW5k LmNjIChoYW5kbGVfYWxpYXNfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGhhbmRsZV9hbHdh eXNfaW5saW5lX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShoYW5kbGVfY29sZF9hdHRyaWJ1 dGUpOiBOZXcgZnVuY3Rpb24uCgkoaGFuZGxlX2Zuc3BlY19hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rp b24uCgkoaGFuZGxlX2Zvcm1hdF9hcmdfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGhhbmRs ZV9mb3JtYXRfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGhhbmRsZV9ub2lubGluZV9hdHRy aWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoaGFuZGxlX3RhcmdldF9hdHRyaWJ1dGUpOiBOZXcgZnVu Y3Rpb24uCgkoaGFuZGxlX3VzZWRfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGhhbmRsZV92 aXNpYmlsaXR5X2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShoYW5kbGVfd2Vha19hdHRyaWJ1 dGUpOiBOZXcgZnVuY3Rpb24uCgkoaGFuZGxlX2FsaWFzX2lmdW5jX2F0dHJpYnV0ZSk6IE5ldyBm dW5jdGlvbi4KCSogaml0LXBsYXliYWNrLmNjIChmbl9hdHRyaWJ1dGVfdG9fc3RyaW5nKTogTmV3 IGZ1bmN0aW9uLgoJKHZhcmlhYmxlX2F0dHJpYnV0ZV90b19zdHJpbmcpOiBOZXcgZnVuY3Rpb24u CgkoZ2xvYmFsX25ld19kZWNsKTogQWRkIGF0dHJpYnV0ZXMgc3VwcG9ydC4KCShzZXRfdmFyaWFi bGVfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKG5ld19nbG9iYWwpOiBBZGQgYXR0cmlidXRl cyBzdXBwb3J0LgoJKG5ld19nbG9iYWxfaW5pdGlhbGl6ZWQpOiBBZGQgYXR0cmlidXRlcyBzdXBw b3J0LgoJKG5ld19sb2NhbCk6IEFkZCBhdHRyaWJ1dGVzIHN1cHBvcnQuCgkqIGppdC1wbGF5YmFj ay5oIChmbl9hdHRyaWJ1dGVfdG9fc3RyaW5nKTogTmV3IGZ1bmN0aW9uLgoJKHNldF92YXJpYWJs ZV9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkqIGppdC1yZWNvcmRpbmcuY2MgKHJlY29yZGlu Zzo6bHZhbHVlOjphZGRfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKHJlY29yZGluZzo6ZnVu Y3Rpb246OmZ1bmN0aW9uKTogTmV3IGZ1bmN0aW9uLgoJKHJlY29yZGluZzo6ZnVuY3Rpb246Ondy aXRlX3RvX2R1bXApOiBBZGQgYXR0cmlidXRlcyBzdXBwb3J0LgoJKHJlY29yZGluZzo6ZnVuY3Rp b246OmFkZF9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkocmVjb3JkaW5nOjpmdW5jdGlvbjo6 YWRkX3N0cmluZ19hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkocmVjb3JkaW5nOjpmdW5jdGlv bjo6YWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKHJlY29yZGlu Zzo6Z2xvYmFsOjpyZXBsYXlfaW50byk6IEFkZCBhdHRyaWJ1dGVzIHN1cHBvcnQuCgkocmVjb3Jk aW5nOjpsb2NhbDo6cmVwbGF5X2ludG8pOiBBZGQgYXR0cmlidXRlcyBzdXBwb3J0LgoJKiBsaWJn Y2NqaXQuY2MgKGdjY19qaXRfZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4K CShnY2Nfaml0X2Z1bmN0aW9uX2FkZF9zdHJpbmdfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJ KGdjY19qaXRfZnVuY3Rpb25fYWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlKTogTmV3IGZ1bmN0 aW9uLgoJKGdjY19qaXRfbHZhbHVlX2FkZF9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkqIGxp YmdjY2ppdC5oIChlbnVtIGdjY19qaXRfZm5fYXR0cmlidXRlKTogTmV3IGVudW0uCgkoZ2NjX2pp dF9mdW5jdGlvbl9hZGRfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGdjY19qaXRfZnVuY3Rp b25fYWRkX3N0cmluZ19hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoZ2NjX2ppdF9mdW5jdGlv bl9hZGRfaW50ZWdlcl9hcnJheV9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoZW51bSBnY2Nf aml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShnY2Nfaml0X2x2YWx1ZV9h ZGRfc3RyaW5nX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCSogbGliZ2Njaml0Lm1hcDogRGVj bGFyZSBuZXcgZnVuY3Rpb25zLgoKZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6CgoJKiBqaXQuZGcv aml0LmV4cDogQWRkIGBqaXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQtbm90YCB0ZXN0IGNvbW1h bmQuCgkqIGppdC5kZy90ZXN0LXJlc3RyaWN0LmM6IE5ldyB0ZXN0LgoJKiBqaXQuZGcvdGVzdC1y ZXN0cmljdC1hdHRyaWJ1dGUuYzogTmV3IHRlc3QuCgkqIGppdC5kZy90ZXN0LWFsaWFzLWF0dHJp YnV0ZS5jOiBOZXcgdGVzdC4KCSogaml0LmRnL3Rlc3QtYWx3YXlzX2lubGluZS1hdHRyaWJ1dGUu YzogTmV3IHRlc3QuCgkqIGppdC5kZy90ZXN0LWNvbGQtYXR0cmlidXRlLmM6IE5ldyB0ZXN0LgoJ KiBqaXQuZGcvdGVzdC1jb25zdC1hdHRyaWJ1dGUuYzogTmV3IHRlc3QuCgkqIGppdC5kZy90ZXN0 LW5vaW5saW5lLWF0dHJpYnV0ZS5jOiBOZXcgdGVzdC4KCSogaml0LmRnL3Rlc3Qtbm9ubnVsbC1h dHRyaWJ1dGUuYzogTmV3IHRlc3QuCgkqIGppdC5kZy90ZXN0LXB1cmUtYXR0cmlidXRlLmM6IE5l dyB0ZXN0LgoJKiBqaXQuZGcvdGVzdC11c2VkLWF0dHJpYnV0ZS5jOiBOZXcgdGVzdC4KCSogaml0 LmRnL3Rlc3QtdmFyaWFibGUtYXR0cmlidXRlLmM6IE5ldyB0ZXN0LgoJKiBqaXQuZGcvdGVzdC13 ZWFrLWF0dHJpYnV0ZS5jOiBOZXcgdGVzdC4KCmdjYy9qaXQvQ2hhbmdlTG9nOgoJKiBkb2NzL3Rv cGljcy9jb21wYXRpYmlsaXR5LnJzdDogQWRkIGRvY3VtZW50YXRpb24gZm9yIExJQkdDQ0pJVF9B QklfMjYuCgkqIGRvY3MvdG9waWNzL3R5cGVzLnJzdDogQWRkIGRvY3VtZW50YXRpb24gZm9yIG5l dyBmdW5jdGlvbnMuCgpDby1hdXRob3JlZC1ieTogQW50b25pIEJvdWNoZXIgPGJvdWFudG9Aem9o by5jb20+ClNpZ25lZC1vZmYtYnk6IEd1aWxsYXVtZSBHb21leiA8Z3VpbGxhdW1lMS5nb21lekBn bWFpbC5jb20+Ci0tLQogZ2NjL2ppdC9kb2NzL3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdCAgICAg ICAgIHwgIDEyICsKIGdjYy9qaXQvZG9jcy90b3BpY3MvdHlwZXMucnN0ICAgICAgICAgICAgICAg ICB8ICA3NyArKysKIGdjYy9qaXQvZHVtbXktZnJvbnRlbmQuY2MgICAgICAgICAgICAgICAgICAg ICB8IDUwNCArKysrKysrKysrKysrKysrLS0KIGdjYy9qaXQvaml0LXBsYXliYWNrLmNjICAgICAg ICAgICAgICAgICAgICAgICB8IDE2NSArKysrKy0KIGdjYy9qaXQvaml0LXBsYXliYWNrLmggICAg ICAgICAgICAgICAgICAgICAgICB8ICAzNyArLQogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjICAg ICAgICAgICAgICAgICAgICAgIHwgMTY2ICsrKysrLQogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgg ICAgICAgICAgICAgICAgICAgICAgIHwgIDE5ICstCiBnY2Mvaml0L2xpYmdjY2ppdC5jYyAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgNDUgKysKIGdjYy9qaXQvbGliZ2Njaml0LmggICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICA0OSArKwogZ2NjL2ppdC9saWJnY2NqaXQubWFwICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICA4ICsKIGdjYy90ZXN0c3VpdGUvaml0LmRnL2ppdC5leHAg ICAgICAgICAgICAgICAgICB8ICAzMyArKwogZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1hbGlh cy1hdHRyaWJ1dGUuYyAgIHwgIDUwICsrCiAuLi4vaml0LmRnL3Rlc3QtYWx3YXlzX2lubGluZS1h dHRyaWJ1dGUuYyAgICAgfCAxNTMgKysrKysrCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNv bGQtYXR0cmlidXRlLmMgICAgfCAgNTQgKysKIGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29u c3QtYXR0cmlidXRlLmMgICB8IDEzNCArKysrKwogLi4uL2ppdC5kZy90ZXN0LW5vaW5saW5lLWF0 dHJpYnV0ZS5jICAgICAgICAgIHwgMTE0ICsrKysKIGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qt bm9ubnVsbC1hdHRyaWJ1dGUuYyB8ICA5NCArKysrCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0 LXB1cmUtYXR0cmlidXRlLmMgICAgfCAxMzQgKysrKysKIC4uLnQtcmVzdHJpY3QuYyA9PiB0ZXN0 LXJlc3RyaWN0LWF0dHJpYnV0ZS5jfSB8ICAgNCArLQogZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVz dC11c2VkLWF0dHJpYnV0ZS5jICAgIHwgMTEyICsrKysKIC4uLi9qaXQuZGcvdGVzdC12YXJpYWJs ZS1hdHRyaWJ1dGUuYyAgICAgICAgICB8ICA0NiArKwogZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVz dC13ZWFrLWF0dHJpYnV0ZS5jICAgIHwgIDQxICsrCiAyMiBmaWxlcyBjaGFuZ2VkLCAxOTg2IGlu c2VydGlvbnMoKyksIDY1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0 c3VpdGUvaml0LmRnL3Rlc3QtYWxpYXMtYXR0cmlidXRlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBn Y2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWFsd2F5c19pbmxpbmUtYXR0cmlidXRlLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbGQtYXR0cmlidXRlLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbnN0LWF0dHJp YnV0ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1ub2lu bGluZS1hdHRyaWJ1dGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRn L3Rlc3Qtbm9ubnVsbC1hdHRyaWJ1dGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3Vp dGUvaml0LmRnL3Rlc3QtcHVyZS1hdHRyaWJ1dGUuYwogcmVuYW1lIGdjYy90ZXN0c3VpdGUvaml0 LmRnL3t0ZXN0LXJlc3RyaWN0LmMgPT4gdGVzdC1yZXN0cmljdC1hdHRyaWJ1dGUuY30gKDk1JSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXVzZWQtYXR0cmli dXRlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXZhcmlh YmxlLWF0dHJpYnV0ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcv dGVzdC13ZWFrLWF0dHJpYnV0ZS5jCgpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9kb2NzL3RvcGljcy9j b21wYXRpYmlsaXR5LnJzdCBiL2djYy9qaXQvZG9jcy90b3BpY3MvY29tcGF0aWJpbGl0eS5yc3QK aW5kZXggZWJlZGU0NDBlZTQuLmI0YTZlOTk3OTQxIDEwMDY0NAotLS0gYS9nY2Mvaml0L2RvY3Mv dG9waWNzL2NvbXBhdGliaWxpdHkucnN0CisrKyBiL2djYy9qaXQvZG9jcy90b3BpY3MvY29tcGF0 aWJpbGl0eS5yc3QKQEAgLTM3OCwzICszNzgsMTUgQEAgYWxpZ25tZW50IG9mIGEgdmFyaWFibGU6 CiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogYGBMSUJHQ0NKSVRfQUJJXzI1YGAgY292ZXJzIHRoZSBh ZGRpdGlvbiBvZgogOmZ1bmM6YGdjY19qaXRfdHlwZV9nZXRfcmVzdHJpY3RgCisKKy4uIF9MSUJH Q0NKSVRfQUJJXzI2OgorCitgYExJQkdDQ0pJVF9BQklfMjZgYAorLS0tLS0tLS0tLS0tLS0tLS0t LS0KK2BgTElCR0NDSklUX0FCSV8yNmBgIGNvdmVycyB0aGUgYWRkaXRpb24gb2YgZnVuY3Rpb25z IHRvIHNldCBhdHRyaWJ1dGVzCitvbiBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlczoKKworICAqIDpm dW5jOmBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGVgCisgICogOmZ1bmM6YGdjY19qaXRf ZnVuY3Rpb25fYWRkX3N0cmluZ19hdHRyaWJ1dGVgCisgICogOmZ1bmM6YGdjY19qaXRfZnVuY3Rp b25fYWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlYAorICAqIDpmdW5jOmBnY2Nfaml0X2x2YWx1 ZV9hZGRfc3RyaW5nX2F0dHJpYnV0ZWAKZGlmZiAtLWdpdCBhL2djYy9qaXQvZG9jcy90b3BpY3Mv dHlwZXMucnN0IGIvZ2NjL2ppdC9kb2NzL3RvcGljcy90eXBlcy5yc3QKaW5kZXggZDhjMWQxNWQ2 OWQuLjZjNzJjOTljYmQ5IDEwMDY0NAotLS0gYS9nY2Mvaml0L2RvY3MvdG9waWNzL3R5cGVzLnJz dAorKysgYi9nY2Mvaml0L2RvY3MvdG9waWNzL3R5cGVzLnJzdApAQCAtNTUzLDMgKzU1Myw4MCBA QCBSZWZsZWN0aW9uIEFQSQogICAgLi4gY29kZS1ibG9jazo6IGMKIAogICAgICAgI2lmZGVmIExJ QkdDQ0pJVF9IQVZFX2djY19qaXRfdHlwZV9nZXRfcmVzdHJpY3QKKworLi4gZnVuY3Rpb246OiAg dm9pZFwKKyAgICAgICAgICAgICAgIGdjY19qaXRfZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZSAoZ2Nj X2ppdF9mdW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZW51bSBnY2Nfaml0X2ZuX2F0dHJpYnV0ZSBhdHRyaWJ1dGUpCisKKyAgICAg QWRkIGFuIGF0dHJpYnV0ZSBgYGF0dHJpYnV0ZWBgIHRvIGEgZnVuY3Rpb24gYGBmdW5jYGAuCisK KyAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgY29kZToKKworICAuLiBj b2RlLWJsb2NrOjogYworCisgICAgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisKKyAg IFRoaXMgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gOnJlZjpgTElCR0NDSklUX0FCSV8yNmA7IHlv dSBjYW4gdGVzdCBmb3IKKyAgIGl0cyBwcmVzZW5jZSB1c2luZworCisgICAuLiBjb2RlLWJsb2Nr OjogYworCisgICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQVRUUklCVVRFUworCisuLiBmdW5j dGlvbjo6ICB2b2lkXAorICAgICAgICAgICAgICAgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfc3RyaW5n X2F0dHJpYnV0ZSAoZ2NjX2ppdF9mdW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ2NjX2ppdF9mbl9hdHRyaWJ1 dGUgYXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUpCisKKyAgICAgQWRkIGEgc3RyaW5nIGF0dHJp YnV0ZSBgYGF0dHJpYnV0ZWBgIHdpdGggdmFsdWUgYGB2YWx1ZWBgIHRvIGEgZnVuY3Rpb24KKyAg ICAgYGBmdW5jYGAuCisKKyAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcg Y29kZToKKworICAuLiBjb2RlLWJsb2NrOjogYworCisgICAgX19hdHRyaWJ1dGVfXyAoKGFsaWFz ICgieHh4IikpKQorCisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIDpyZWY6YExJQkdD Q0pJVF9BQklfMjZgOyB5b3UgY2FuIHRlc3QgZm9yCisgICBpdHMgcHJlc2VuY2UgdXNpbmcKKwor ICAgLi4gY29kZS1ibG9jazo6IGMKKworICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0FUVFJJ QlVURVMKKworLi4gZnVuY3Rpb246OiAgdm9pZFwKKyAgICAgICAgICAgICAgIGdjY19qaXRfZnVu Y3Rpb25fYWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlIChnY2Nfaml0X2Z1bmN0aW9uICpmdW5j LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVudW0gZ2NjX2ppdF9mbl9hdHRyaWJ1dGUgYXR0cmlidXRlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlu dCAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCkKKworICAgICBBZGQgYW4gYXR0cmlidXRlIGBg YXR0cmlidXRlYGAgd2l0aCBgYGxlbmd0aGBgIGludGVnZXIgdmFsdWVzIGBgdmFsdWVgYCB0byBh CisgICAgIGZ1bmN0aW9uIGBgZnVuY2BgLiBUaGUgaW50ZWdlciB2YWx1ZXMgbXVzdCBiZSB0aGUg c2FtZSBhcyB5b3Ugd291bGQgd3JpdGUKKyAgICAgdGhlbSBpbiBhIEMgY29kZS4KKworICAgICBU aGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyBjb2RlOgorCisgIC4uIGNvZGUtYmxv Y2s6OiBjCisKKyAgICBfX2F0dHJpYnV0ZV9fICgobm9ubnVsbCAoMSwgMikpKQorCisgICBUaGlz IGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9BQklfMjZgOyB5b3UgY2Fu IHRlc3QgZm9yCisgICBpdHMgcHJlc2VuY2UgdXNpbmcKKworICAgLi4gY29kZS1ibG9jazo6IGMK KworICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0FUVFJJQlVURVMKKworLi4gZnVuY3Rpb246 OiAgdm9pZFwKKyAgICAgICAgICAgICAgIGdjY19qaXRfbHZhbHVlX2FkZF9zdHJpbmdfYXR0cmli dXRlIChnY2Nfaml0X2x2YWx1ZSAqdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBnY2Nfaml0X2ZuX2F0dHJpYnV0ZSBhdHRy aWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqdmFsdWUpCisKKyAgICAgQWRkIGFuIGF0dHJpYnV0ZSBgYGF0dHJpYnV0 ZWBgIHdpdGggdmFsdWUgYGB2YWx1ZWBgIHRvIGEgdmFyaWFibGUgYGB2YXJpYWJsZWBgLgorCisg ICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9BQklfMjZgOyB5 b3UgY2FuIHRlc3QgZm9yCisgICBpdHMgcHJlc2VuY2UgdXNpbmcKKworICAgLi4gY29kZS1ibG9j azo6IGMKKworICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0FUVFJJQlVURVMKZGlmZiAtLWdp dCBhL2djYy9qaXQvZHVtbXktZnJvbnRlbmQuY2MgYi9nY2Mvaml0L2R1bW15LWZyb250ZW5kLmNj CmluZGV4IGE3MjkwODZiYWZiLi44OThiNGQ2ZTdmOCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9kdW1t eS1mcm9udGVuZC5jYworKysgYi9nY2Mvaml0L2R1bW15LWZyb250ZW5kLmNjCkBAIC0yOSwzMCAr MjksNDIgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBz ZWUKICNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAic3RyaW5ncG9vbC5oIgogI2luY2x1 ZGUgImF0dHJpYnMuaCIKKyNpbmNsdWRlICJjZ3JhcGguaCIKKyNpbmNsdWRlICJ0YXJnZXQuaCIK IAogI2luY2x1ZGUgPG1wZnIuaD4KIAogLyogQXR0cmlidXRlIGhhbmRsaW5nLiAgKi8KIAotc3Rh dGljIHRyZWUgaGFuZGxlX25vcmV0dXJuX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBp bnQsIGJvb2wgKik7Ci1zdGF0aWMgdHJlZSBoYW5kbGVfbGVhZl9hdHRyaWJ1dGUgKHRyZWUgKiwg dHJlZSwgdHJlZSwgaW50LCBib29sICopOworc3RhdGljIHRyZWUgaGFuZGxlX2FsaWFzX2F0dHJp YnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5k bGVfYWx3YXlzX2lubGluZV9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LAorCQkJ CQkgICAgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRsZV9jb2xkX2F0dHJpYnV0ZSAodHJlZSAq LCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CiBzdGF0aWMgdHJlZSBoYW5kbGVfY29uc3RfYXR0 cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhh bmRsZV9mbnNwZWNfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsK K3N0YXRpYyB0cmVlIGhhbmRsZV9mb3JtYXRfYXJnX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0 cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfZm9ybWF0X2F0dHJpYnV0ZSAo dHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfbGVh Zl9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwogc3RhdGljIHRy ZWUgaGFuZGxlX21hbGxvY19hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29s ICopOwotc3RhdGljIHRyZWUgaGFuZGxlX3B1cmVfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRy ZWUsIGludCwgYm9vbCAqKTsKLXN0YXRpYyB0cmVlIGhhbmRsZV9ub3ZvcHNfYXR0cmlidXRlICh0 cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRsZV9ub2lu bGluZV9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwogc3RhdGlj IHRyZWUgaGFuZGxlX25vbm51bGxfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwg Ym9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRsZV9ub3JldHVybl9hdHRyaWJ1dGUgKHRyZWUgKiwg dHJlZSwgdHJlZSwgaW50LCBib29sICopOwogc3RhdGljIHRyZWUgaGFuZGxlX25vdGhyb3dfYXR0 cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKLXN0YXRpYyB0cmVlIGhh bmRsZV9zZW50aW5lbF9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICop Owotc3RhdGljIHRyZWUgaGFuZGxlX3R5cGVfZ2VuZXJpY19hdHRyaWJ1dGUgKHRyZWUgKiwgdHJl ZSwgdHJlZSwgaW50LCBib29sICopOwotc3RhdGljIHRyZWUgaGFuZGxlX3RyYW5zYWN0aW9uX3B1 cmVfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKLXN0YXRpYyB0 cmVlIGhhbmRsZV9yZXR1cm5zX3R3aWNlX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBp bnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfbm92b3BzX2F0dHJpYnV0ZSAodHJlZSAq LCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CiBzdGF0aWMgdHJlZSBoYW5kbGVfcGF0Y2hhYmxl X2Z1bmN0aW9uX2VudHJ5X2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLAogCQkJCQkJICAg ICAgIGludCwgYm9vbCAqKTsKLXN0YXRpYyB0cmVlIGlnbm9yZV9hdHRyaWJ1dGUgKHRyZWUgKiwg dHJlZSwgdHJlZSwgaW50LCBib29sICopOworc3RhdGljIHRyZWUgaGFuZGxlX3B1cmVfYXR0cmli dXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRs ZV9yZXR1cm5zX3R3aWNlX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wg Kik7CitzdGF0aWMgdHJlZSBoYW5kbGVfc2VudGluZWxfYXR0cmlidXRlICh0cmVlICosIHRyZWUs IHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRsZV90YXJnZXRfYXR0cmlidXRl ICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRsZV90 cmFuc2FjdGlvbl9wdXJlX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wg Kik7CitzdGF0aWMgdHJlZSBoYW5kbGVfdHlwZV9nZW5lcmljX2F0dHJpYnV0ZSAodHJlZSAqLCB0 cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfdXNlZF9hdHRyaWJ1 dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworc3RhdGljIHRyZWUgaGFuZGxl X3Zpc2liaWxpdHlfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwKKwkJCQkJIGJv b2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfd2Vha19hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwg dHJlZSwgaW50LCBib29sICopIDsKIAotc3RhdGljIHRyZWUgaGFuZGxlX2Zvcm1hdF9hdHRyaWJ1 dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwotc3RhdGljIHRyZWUgaGFuZGxl X2Zuc3BlY19hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwotc3Rh dGljIHRyZWUgaGFuZGxlX2Zvcm1hdF9hcmdfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUs IGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGlnbm9yZV9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJl ZSwgdHJlZSwgaW50LCBib29sICopOwogCiAvKiBIZWxwZXIgdG8gZGVmaW5lIGF0dHJpYnV0ZSBl eGNsdXNpb25zLiAgKi8KICNkZWZpbmUgQVRUUl9FWENMKG5hbWUsIGZ1bmN0aW9uLCB0eXBlLCB2 YXJpYWJsZSkJXApAQCAtODEsNTUgKzkzLDk4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmli dXRlX3NwZWM6OmV4Y2x1c2lvbnMgYXR0cl9yZXR1cm5zX3R3aWNlX2V4Y2x1c2lvbnNbXSA9CiBz dGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjOjpleGNsdXNpb25zIGF0dHJfY29uc3Rf cHVyZV9leGNsdXNpb25zW10gPQogewogICBBVFRSX0VYQ0wgKCJjb25zdCIsIHRydWUsIHRydWUs IHRydWUpLAorICBBVFRSX0VYQ0wgKCJhbGxvY19hbGlnbiIsIHRydWUsIHRydWUsIHRydWUpLAor ICBBVFRSX0VYQ0wgKCJhbGxvY19zaXplIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisgIEFUVFJfRVhD TCAoIm1hbGxvYyIsIHRydWUsIHRydWUsIHRydWUpLAogICBBVFRSX0VYQ0wgKCJub3JldHVybiIs IHRydWUsIHRydWUsIHRydWUpLAogICBBVFRSX0VYQ0wgKCJwdXJlIiwgdHJ1ZSwgdHJ1ZSwgdHJ1 ZSksCiAgIEFUVFJfRVhDTCAoTlVMTCwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKIH07CiAKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWM6OmV4Y2x1c2lvbnMgYXR0cl9pbmxpbmVfZXhj bHVzaW9uc1tdID0KK3sKKyAgQVRUUl9FWENMICgibm9pbmxpbmUiLCB0cnVlLCB0cnVlLCB0cnVl KSwKKyAgQVRUUl9FWENMIChOVUxMLCBmYWxzZSwgZmFsc2UsIGZhbHNlKSwKK307CisKK2V4dGVy biBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWM6OmV4Y2x1c2lvbnMgYXR0cl9jb2xkX2hvdF9l eGNsdXNpb25zW10gPQoreworICBBVFRSX0VYQ0wgKCJjb2xkIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSks CisgIEFUVFJfRVhDTCAoImhvdCIsIHRydWUsIHRydWUsIHRydWUpLAorICBBVFRSX0VYQ0wgKE5V TEwsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJp YnV0ZV9zcGVjOjpleGNsdXNpb25zIGF0dHJfbm9pbmxpbmVfZXhjbHVzaW9uc1tdID0KK3sKKyAg QVRUUl9FWENMICgiYWx3YXlzX2lubGluZSIsIHRydWUsIHRydWUsIHRydWUpLAorICBBVFRSX0VY Q0wgKCJnbnVfaW5saW5lIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisgIEFUVFJfRVhDTCAoTlVMTCwg ZmFsc2UsIGZhbHNlLCBmYWxzZSksCit9OworCiAvKiBUYWJsZSBvZiBtYWNoaW5lLWluZGVwZW5k ZW50IGF0dHJpYnV0ZXMgc3VwcG9ydGVkIGluIGxpYmdjY2ppdC4gICovCiBjb25zdCBzdHJ1Y3Qg YXR0cmlidXRlX3NwZWMgaml0X2F0dHJpYnV0ZV90YWJsZVtdID0KIHsKICAgLyogeyBuYW1lLCBt aW5fbGVuLCBtYXhfbGVuLCBkZWNsX3JlcSwgdHlwZV9yZXEsIGZuX3R5cGVfcmVxLAogICAgICAg IGFmZmVjdHNfdHlwZV9pZGVudGl0eSwgaGFuZGxlciwgZXhjbHVkZSB9ICovCi0gIHsgIm5vcmV0 dXJuIiwgICAgICAgICAgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKLQkJ CSAgICAgIGhhbmRsZV9ub3JldHVybl9hdHRyaWJ1dGUsCi0JCQkgICAgICBhdHRyX25vcmV0dXJu X2V4Y2x1c2lvbnMgfSwKLSAgeyAibGVhZiIsCQkgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZh bHNlLCBmYWxzZSwKLQkJCSAgICAgIGhhbmRsZV9sZWFmX2F0dHJpYnV0ZSwgTlVMTCB9LAorICB7 ICJhbGlhcyIsCQkgICAgICAxLCAxLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJCSAg ICAgIGhhbmRsZV9hbGlhc19hdHRyaWJ1dGUsIE5VTEwgfSwKKyAgeyAiYWx3YXlzX2lubGluZSIs CSAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJICAgICAgaGFuZGxl X2Fsd2F5c19pbmxpbmVfYXR0cmlidXRlLAorCQkJICAgICAgYXR0cl9pbmxpbmVfZXhjbHVzaW9u cyB9LAorICB7ICJjb2xkIiwJCSAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNl LAorCQkJICAgICAgaGFuZGxlX2NvbGRfYXR0cmlidXRlLAorCQkJICAgICAgYXR0cl9jb2xkX2hv dF9leGNsdXNpb25zIH0sCiAgIC8qIFRoZSBzYW1lIGNvbW1lbnRzIGFzIGZvciBub3JldHVybiBh dHRyaWJ1dGVzIGFwcGx5IHRvIGNvbnN0IG9uZXMuICAqLwotICB7ICJjb25zdCIsICAgICAgICAg ICAgICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisgIHsgImNvbnN0IiwJ CSAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLAogCQkJICAgICAgaGFuZGxl X2NvbnN0X2F0dHJpYnV0ZSwKIAkJCSAgICAgIGF0dHJfY29uc3RfcHVyZV9leGNsdXNpb25zIH0s Ci0gIHsgIm1hbGxvYyIsICAgICAgICAgICAgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNl LCBmYWxzZSwKKyAgeyAiZm4gc3BlYyIsCQkgICAgICAxLCAxLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwg ZmFsc2UsCisJCQkgICAgICBoYW5kbGVfZm5zcGVjX2F0dHJpYnV0ZSwgTlVMTCB9LAorCisgIHsg ImxlYWYiLAkJICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQkgICAg ICBoYW5kbGVfbGVhZl9hdHRyaWJ1dGUsIE5VTEwgfSwKKyAgeyAibWFsbG9jIiwJCSAgICAgIDAs IDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLAogCQkJICAgICAgaGFuZGxlX21hbGxvY19h dHRyaWJ1dGUsIE5VTEwgfSwKLSAgeyAicHVyZSIsICAgICAgICAgICAgICAgICAgIDAsIDAsIHRy dWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLAotCQkJICAgICAgaGFuZGxlX3B1cmVfYXR0cmlidXRl LAotCQkJICAgICAgYXR0cl9jb25zdF9wdXJlX2V4Y2x1c2lvbnMgfSwKLSAgeyAibm8gdm9wcyIs ICAgICAgICAgICAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLAorICB7ICJu b3JldHVybiIsCQkgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJCSAg ICAgIGhhbmRsZV9ub3JldHVybl9hdHRyaWJ1dGUsCisJCQkgICAgICBhdHRyX25vcmV0dXJuX2V4 Y2x1c2lvbnMgfSwKKyAgeyAibm8gdm9wcyIsCQkgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZh bHNlLCBmYWxzZSwKIAkJCSAgICAgIGhhbmRsZV9ub3ZvcHNfYXR0cmlidXRlLCBOVUxMIH0sCi0g IHsgIm5vbm51bGwiLCAgICAgICAgICAgICAgICAwLCAtMSwgZmFsc2UsIHRydWUsIHRydWUsIGZh bHNlLAorICB7ICJub2lubGluZSIsCQkgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBm YWxzZSwKKwkJCSAgICAgIGhhbmRsZV9ub2lubGluZV9hdHRyaWJ1dGUsCisJCQkgICAgICBhdHRy X25vaW5saW5lX2V4Y2x1c2lvbnMgfSwKKyAgeyAibm9ubnVsbCIsCQkgICAgICAwLCAtMSwgZmFs c2UsIHRydWUsIHRydWUsIGZhbHNlLAogCQkJICAgICAgaGFuZGxlX25vbm51bGxfYXR0cmlidXRl LCBOVUxMIH0sCi0gIHsgIm5vdGhyb3ciLCAgICAgICAgICAgICAgICAwLCAwLCB0cnVlLCAgZmFs c2UsIGZhbHNlLCBmYWxzZSwKKyAgeyAibm90aHJvdyIsCQkgICAgICAwLCAwLCB0cnVlLCAgZmFs c2UsIGZhbHNlLCBmYWxzZSwKIAkJCSAgICAgIGhhbmRsZV9ub3Rocm93X2F0dHJpYnV0ZSwgTlVM TCB9LAogICB7ICJwYXRjaGFibGVfZnVuY3Rpb25fZW50cnkiLCAxLCAyLCB0cnVlLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLAogCQkJICAgICAgaGFuZGxlX3BhdGNoYWJsZV9mdW5jdGlvbl9lbnRyeV9h dHRyaWJ1dGUsCiAJCQkgICAgICBOVUxMIH0sCi0gIHsgInJldHVybnNfdHdpY2UiLCAgICAgICAg ICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKyAgeyAicHVyZSIsCQkgICAgICAw LCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJCSAgICAgIGhhbmRsZV9wdXJlX2F0 dHJpYnV0ZSwKKwkJCSAgICAgIGF0dHJfY29uc3RfcHVyZV9leGNsdXNpb25zIH0sCisgIHsgInJl dHVybnNfdHdpY2UiLAkgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKIAkJ CSAgICAgIGhhbmRsZV9yZXR1cm5zX3R3aWNlX2F0dHJpYnV0ZSwKIAkJCSAgICAgIGF0dHJfcmV0 dXJuc190d2ljZV9leGNsdXNpb25zIH0sCi0gIHsgInNlbnRpbmVsIiwgICAgICAgICAgICAgICAw LCAxLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsCisgIHsgInNlbnRpbmVsIiwJCSAgICAgIDAs IDEsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwKIAkJCSAgICAgIGhhbmRsZV9zZW50aW5lbF9h dHRyaWJ1dGUsIE5VTEwgfSwKLSAgeyAidHlwZSBnZW5lcmljIiwgICAgICAgICAgIDAsIDAsIGZh bHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwKKyAgeyAidGFyZ2V0IiwJCSAgICAgIDEsIC0xLCB0cnVl LCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJICAgICAgaGFuZGxlX3RhcmdldF9hdHRyaWJ1dGUs IE5VTEwgfSwKKyAgeyAidHlwZSBnZW5lcmljIiwJICAgICAgMCwgMCwgZmFsc2UsIHRydWUsIHRy dWUsIGZhbHNlLAogCQkJICAgICAgaGFuZGxlX3R5cGVfZ2VuZXJpY19hdHRyaWJ1dGUsIE5VTEwg fSwKLSAgeyAiZm4gc3BlYyIsCSAJICAgICAgMSwgMSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNl LAotCQkJICAgICAgaGFuZGxlX2Zuc3BlY19hdHRyaWJ1dGUsIE5VTEwgfSwKICAgeyAidHJhbnNh Y3Rpb25fcHVyZSIsCSAgICAgIDAsIDAsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwKIAkJCSAg ICAgIGhhbmRsZV90cmFuc2FjdGlvbl9wdXJlX2F0dHJpYnV0ZSwgTlVMTCB9LAogICAvKiBGb3Ig aW50ZXJuYWwgdXNlIG9ubHkuICBUaGUgbGVhZGluZyAnKicgYm90aCBwcmV2ZW50cyBpdHMgdXNh Z2UgaW4KICAgICAgc291cmNlIGNvZGUgYW5kIHNpZ25hbHMgdGhhdCBpdCBtYXkgYmUgb3ZlcnJp ZGRlbiBieSBtYWNoaW5lIHRhYmxlcy4gICovCi0gIHsgIip0bSByZWdwYXJtIiwgICAgICAgICAg ICAwLCAwLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsCisgIHsgIip0bSByZWdwYXJtIiwJICAg ICAgMCwgMCwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLAogCQkJICAgICAgaWdub3JlX2F0dHJp YnV0ZSwgTlVMTCB9LAotICB7IE5VTEwsICAgICAgICAgICAgICAgICAgICAgMCwgMCwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UsIE5VTEwsIE5VTEwgfQorICB7ICJ1c2VkIiwJCSAgICAgIDAs IDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJICAgICAgaGFuZGxlX3VzZWRfYXR0 cmlidXRlLCBOVUxMIH0sCisgIHsgInZpc2liaWxpdHkiLAkgICAgICAxLCAxLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSwKKwkJCSAgICAgIGhhbmRsZV92aXNpYmlsaXR5X2F0dHJpYnV0ZSwg TlVMTCB9LAorICB7ICJ3ZWFrIiwJCSAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZh bHNlLAorCQkJICAgICAgaGFuZGxlX3dlYWtfYXR0cmlidXRlLCBOVUxMIH0sCisgIHsgTlVMTCwJ CSAgICAgIDAsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBOVUxMLCBOVUxMIH0KIH07 CiAKIC8qIEdpdmUgdGhlIHNwZWNpZmljYXRpb25zIGZvciB0aGUgZm9ybWF0IGF0dHJpYnV0ZXMs IHVzZWQgYnkgQyBhbmQgYWxsCkBAIC0xMzksMTEgKzE5NCwxMSBAQCBjb25zdCBzdHJ1Y3QgYXR0 cmlidXRlX3NwZWMgaml0X2Zvcm1hdF9hdHRyaWJ1dGVfdGFibGVbXSA9CiB7CiAgIC8qIHsgbmFt ZSwgbWluX2xlbiwgbWF4X2xlbiwgZGVjbF9yZXEsIHR5cGVfcmVxLCBmbl90eXBlX3JlcSwKICAg ICAgICBhZmZlY3RzX3R5cGVfaWRlbnRpdHksIGhhbmRsZXIsIGV4Y2x1ZGUgfSAqLwotICB7ICJm b3JtYXQiLCAgICAgICAgICAgICAgICAgMywgMywgZmFsc2UsIHRydWUsICB0cnVlLCBmYWxzZSwK KyAgeyAiZm9ybWF0IiwJCSAgICAgIDMsIDMsIGZhbHNlLCB0cnVlLCAgdHJ1ZSwgZmFsc2UsCiAJ CQkgICAgICBoYW5kbGVfZm9ybWF0X2F0dHJpYnV0ZSwgTlVMTCB9LAotICB7ICJmb3JtYXRfYXJn IiwgICAgICAgICAgICAgMSwgMSwgZmFsc2UsIHRydWUsICB0cnVlLCBmYWxzZSwKKyAgeyAiZm9y bWF0X2FyZyIsCSAgICAgIDEsIDEsIGZhbHNlLCB0cnVlLCAgdHJ1ZSwgZmFsc2UsCiAJCQkgICAg ICBoYW5kbGVfZm9ybWF0X2FyZ19hdHRyaWJ1dGUsIE5VTEwgfSwKLSAgeyBOVUxMLCAgICAgICAg ICAgICAgICAgICAgIDAsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBOVUxMLCBOVUxM IH0KKyAgeyBOVUxMLAkJICAgICAgMCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIE5V TEwsIE5VTEwgfQogfTsKIAogLyogQXR0cmlidXRlIGhhbmRsZXJzLiAgKi8KQEAgLTQ4MCw2ICs1 MzUsMzg1IEBAIGhhbmRsZV9mbnNwZWNfYXR0cmlidXRlICh0cmVlICpub2RlIEFUVFJJQlVURV9V TlVTRUQsIHRyZWUgQVJHX1VOVVNFRCAobmFtZSksCiAgIHJldHVybiBOVUxMX1RSRUU7CiB9CiAK Ky8qIEhhbmRsZSBhbiAidmlzaWJpbGl0eSIgYXR0cmlidXRlOyBhcmd1bWVudHMgYXMgaW4KKyAg IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYy5oYW5kbGVyLiAgKi8KKworc3RhdGljIHRyZWUKK2hhbmRs ZV92aXNpYmlsaXR5X2F0dHJpYnV0ZSAodHJlZSAqbm9kZSwgdHJlZSBuYW1lLCB0cmVlIGFyZ3Ms CisJCQkgICAgIGludCBBUkdfVU5VU0VEIChmbGFncyksCisJCQkgICAgIGJvb2wgKkFSR19VTlVT RUQgKG5vX2FkZF9hdHRycykpCit7CisgIHRyZWUgZGVjbCA9ICpub2RlOworICB0cmVlIGlkID0g VFJFRV9WQUxVRSAoYXJncyk7CisgIGVudW0gc3ltYm9sX3Zpc2liaWxpdHkgdmlzOworCisgIGlm IChUWVBFX1AgKCpub2RlKSkKKyAgICB7CisgICAgICBpZiAoVFJFRV9DT0RFICgqbm9kZSkgPT0g RU5VTUVSQUxfVFlQRSkKKwkvKiBPSy4gICovOworICAgICAgZWxzZSBpZiAoIVJFQ09SRF9PUl9V TklPTl9UWVBFX1AgKCpub2RlKSkKKwl7CisJICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMsICIl cUUgYXR0cmlidXRlIGlnbm9yZWQgb24gbm9uLWNsYXNzIHR5cGVzIiwKKwkJICAgbmFtZSk7CisJ ICByZXR1cm4gTlVMTF9UUkVFOworCX0KKyAgICAgIGVsc2UgaWYgKFRZUEVfRklFTERTICgqbm9k ZSkpCisJeworCSAgZXJyb3IgKCIlcUUgYXR0cmlidXRlIGlnbm9yZWQgYmVjYXVzZSAlcVQgaXMg YWxyZWFkeSBkZWZpbmVkIiwKKwkJIG5hbWUsICpub2RlKTsKKwkgIHJldHVybiBOVUxMX1RSRUU7 CisJfQorICAgIH0KKyAgZWxzZSBpZiAoZGVjbF9mdW5jdGlvbl9jb250ZXh0IChkZWNsKSAhPSAw IHx8ICFUUkVFX1BVQkxJQyAoZGVjbCkpCisgICAgeworICAgICAgd2FybmluZyAoT1BUX1dhdHRy aWJ1dGVzLCAiJXFFIGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFtZSk7CisgICAgICByZXR1cm4gTlVM TF9UUkVFOworICAgIH0KKworICBpZiAoVFJFRV9DT0RFIChpZCkgIT0gU1RSSU5HX0NTVCkKKyAg ICB7CisgICAgICBlcnJvciAoInZpc2liaWxpdHkgYXJndW1lbnQgbm90IGEgc3RyaW5nIik7Cisg ICAgICByZXR1cm4gTlVMTF9UUkVFOworICAgIH0KKworICAvKiAgSWYgdGhpcyBpcyBhIHR5cGUs IHNldCB0aGUgdmlzaWJpbGl0eSBvbiB0aGUgdHlwZSBkZWNsLiAgKi8KKyAgaWYgKFRZUEVfUCAo ZGVjbCkpCisgICAgeworICAgICAgZGVjbCA9IFRZUEVfTkFNRSAoZGVjbCk7CisgICAgICBpZiAo IWRlY2wpCisJcmV0dXJuIE5VTExfVFJFRTsKKyAgICAgIGlmIChUUkVFX0NPREUgKGRlY2wpID09 IElERU5USUZJRVJfTk9ERSkKKwl7CisJICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiJXFF IGF0dHJpYnV0ZSBpZ25vcmVkIG9uIHR5cGVzIiwKKwkJICAgIG5hbWUpOworCSAgIHJldHVybiBO VUxMX1RSRUU7CisJfQorICAgIH0KKworICBpZiAoc3RyY21wIChUUkVFX1NUUklOR19QT0lOVEVS IChpZCksICJkZWZhdWx0IikgPT0gMCkKKyAgICB2aXMgPSBWSVNJQklMSVRZX0RFRkFVTFQ7Cisg IGVsc2UgaWYgKHN0cmNtcCAoVFJFRV9TVFJJTkdfUE9JTlRFUiAoaWQpLCAiaW50ZXJuYWwiKSA9 PSAwKQorICAgIHZpcyA9IFZJU0lCSUxJVFlfSU5URVJOQUw7CisgIGVsc2UgaWYgKHN0cmNtcCAo VFJFRV9TVFJJTkdfUE9JTlRFUiAoaWQpLCAiaGlkZGVuIikgPT0gMCkKKyAgICB2aXMgPSBWSVNJ QklMSVRZX0hJRERFTjsKKyAgZWxzZSBpZiAoc3RyY21wIChUUkVFX1NUUklOR19QT0lOVEVSIChp ZCksICJwcm90ZWN0ZWQiKSA9PSAwKQorICAgIHZpcyA9IFZJU0lCSUxJVFlfUFJPVEVDVEVEOwor ICBlbHNlCisgICAgeworICAgICAgZXJyb3IgKCJhdHRyaWJ1dGUgJXFFIGFyZ3VtZW50IG11c3Qg YmUgb25lIG9mICVxcywgJXFzLCAlcXMsIG9yICVxcyIsCisJICAgICBuYW1lLCAiZGVmYXVsdCIs ICJoaWRkZW4iLCAicHJvdGVjdGVkIiwgImludGVybmFsIik7CisgICAgICB2aXMgPSBWSVNJQklM SVRZX0RFRkFVTFQ7CisgICAgfQorCisgIGlmIChERUNMX1ZJU0lCSUxJVFlfU1BFQ0lGSUVEIChk ZWNsKQorICAgICAgJiYgdmlzICE9IERFQ0xfVklTSUJJTElUWSAoZGVjbCkpCisgICAgeworICAg ICAgdHJlZSBhdHRyaWJ1dGVzID0gKFRZUEVfUCAoKm5vZGUpCisJCQkgPyBUWVBFX0FUVFJJQlVU RVMgKCpub2RlKQorCQkJIDogREVDTF9BVFRSSUJVVEVTIChkZWNsKSk7CisgICAgICBpZiAobG9v a3VwX2F0dHJpYnV0ZSAoInZpc2liaWxpdHkiLCBhdHRyaWJ1dGVzKSkKKwllcnJvciAoIiVxRCBy ZWRlY2xhcmVkIHdpdGggZGlmZmVyZW50IHZpc2liaWxpdHkiLCBkZWNsKTsKKyAgICAgIGVsc2Ug aWYgKFRBUkdFVF9ETExJTVBPUlRfREVDTF9BVFRSSUJVVEVTCisJICAgICAgICYmIGxvb2t1cF9h dHRyaWJ1dGUgKCJkbGxpbXBvcnQiLCBhdHRyaWJ1dGVzKSkKKwllcnJvciAoIiVxRCB3YXMgZGVj bGFyZWQgJXFzIHdoaWNoIGltcGxpZXMgZGVmYXVsdCB2aXNpYmlsaXR5IiwKKwkgICAgICAgZGVj bCwgImRsbGltcG9ydCIpOworICAgICAgZWxzZSBpZiAoVEFSR0VUX0RMTElNUE9SVF9ERUNMX0FU VFJJQlVURVMKKwkgICAgICAgJiYgbG9va3VwX2F0dHJpYnV0ZSAoImRsbGV4cG9ydCIsIGF0dHJp YnV0ZXMpKQorCWVycm9yICgiJXFEIHdhcyBkZWNsYXJlZCAlcXMgd2hpY2ggaW1wbGllcyBkZWZh dWx0IHZpc2liaWxpdHkiLAorCSAgICAgICBkZWNsLCAiZGxsZXhwb3J0Iik7CisgICAgfQorCisg IERFQ0xfVklTSUJJTElUWSAoZGVjbCkgPSB2aXM7CisgIERFQ0xfVklTSUJJTElUWV9TUEVDSUZJ RUQgKGRlY2wpID0gMTsKKworICAvKiBHbyBhaGVhZCBhbmQgYXR0YWNoIHRoZSBhdHRyaWJ1dGUg dG8gdGhlIG5vZGUgYXMgd2VsbC4gIFRoaXMgaXMgbmVlZGVkCisgICAgIHNvIHdlIGNhbiBkZXRl cm1pbmUgd2hldGhlciB3ZSBoYXZlIFZJU0lCSUxJVFlfREVGQVVMVCBiZWNhdXNlIHRoZQorICAg ICB2aXNpYmlsaXR5IHdhcyBub3Qgc3BlY2lmaWVkLCBvciBiZWNhdXNlIGl0IHdhcyBleHBsaWNp dGx5IG92ZXJyaWRkZW4KKyAgICAgZnJvbSB0aGUgY29udGFpbmluZyBzY29wZS4gICovCisKKyAg cmV0dXJuIE5VTExfVFJFRTsKK30KKworLyogSGFuZGxlIGEgImFsd2F5c19pbmxpbmUiIGF0dHJp YnV0ZTsgYXJndW1lbnRzIGFzIGluCisgICBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMuaGFuZGxlci4g ICovCisKK3N0YXRpYyB0cmVlCitoYW5kbGVfYWx3YXlzX2lubGluZV9hdHRyaWJ1dGUgKHRyZWUg Km5vZGUsIHRyZWUgbmFtZSwKKwkJCQl0cmVlIEFSR19VTlVTRUQgKGFyZ3MpLAorCQkJCWludCBB UkdfVU5VU0VEIChmbGFncyksCisJCQkJYm9vbCAqbm9fYWRkX2F0dHJzKQoreworICBpZiAoVFJF RV9DT0RFICgqbm9kZSkgPT0gRlVOQ1RJT05fREVDTCkKKyAgICB7CisgICAgICBpZiAobG9va3Vw X2F0dHJpYnV0ZSAoIm5vaW5saW5lIiwgREVDTF9BVFRSSUJVVEVTICgqbm9kZSkpKQorCXsKKwkg IHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1dGUgaWdub3JlZCBkdWUgdG8g Y29uZmxpY3QgIgorCQkgICAid2l0aCAlcXMgYXR0cmlidXRlIiwgbmFtZSwgIm5vaW5saW5lIik7 CisJICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKKwl9CisgICAgICBlbHNlIGlmIChsb29rdXBfYXR0 cmlidXRlICgidGFyZ2V0X2Nsb25lcyIsIERFQ0xfQVRUUklCVVRFUyAoKm5vZGUpKSkKKwl7CisJ ICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMsICIlcUUgYXR0cmlidXRlIGlnbm9yZWQgZHVlIHRv IGNvbmZsaWN0ICIKKwkJICAgIndpdGggJXFzIGF0dHJpYnV0ZSIsIG5hbWUsICJ0YXJnZXRfY2xv bmVzIik7CisJICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKKwl9CisgICAgICBlbHNlCisJLyogU2V0 IHRoZSBhdHRyaWJ1dGUgYW5kIG1hcmsgaXQgZm9yIGRpc3JlZ2FyZGluZyBpbmxpbmUKKwkgICBs aW1pdHMuICAqLworCURFQ0xfRElTUkVHQVJEX0lOTElORV9MSU1JVFMgKCpub2RlKSA9IDE7Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiJXFF IGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFtZSk7CisgICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsK KyAgICB9CisKKyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKworLyogSGFuZGxlIGEgImNvbGQiIGFu ZCBhdHRyaWJ1dGU7IGFyZ3VtZW50cyBhcyBpbgorICAgc3RydWN0IGF0dHJpYnV0ZV9zcGVjLmhh bmRsZXIuICAqLworCitzdGF0aWMgdHJlZQoraGFuZGxlX2NvbGRfYXR0cmlidXRlICh0cmVlICpu b2RlLCB0cmVlIG5hbWUsIHRyZWUgQVJHX1VOVVNFRCAoYXJncyksCisJCSAgICAgICBpbnQgQVJH X1VOVVNFRCAoZmxhZ3MpLCBib29sICpub19hZGRfYXR0cnMpCit7CisgIGlmIChUUkVFX0NPREUg KCpub2RlKSA9PSBGVU5DVElPTl9ERUNMCisgICAgICB8fCBUUkVFX0NPREUgKCpub2RlKSA9PSBM QUJFTF9ERUNMKQorICAgIHsKKyAgICAgIC8qIEF0dHJpYnV0ZSBjb2xkIHByb2Nlc3NpbmcgaXMg ZG9uZSBsYXRlciB3aXRoIGxvb2t1cF9hdHRyaWJ1dGUuICAqLworICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1dGUgaWdub3Jl ZCIsIG5hbWUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgICAgfQorCisgIHJldHVy biBOVUxMX1RSRUU7Cit9CisKKy8qIEhhbmRsZSBhICJub2lubGluZSIgYXR0cmlidXRlOyBhcmd1 bWVudHMgYXMgaW4KKyAgIHN0cnVjdCBhdHRyaWJ1dGVfc3BlYy5oYW5kbGVyLiAgKi8KKworc3Rh dGljIHRyZWUKK2hhbmRsZV9ub2lubGluZV9hdHRyaWJ1dGUgKHRyZWUgKm5vZGUsIHRyZWUgbmFt ZSwKKwkJCSAgIHRyZWUgQVJHX1VOVVNFRCAoYXJncyksCisJCQkgICBpbnQgQVJHX1VOVVNFRCAo ZmxhZ3MpLCBib29sICpub19hZGRfYXR0cnMpCit7CisgIGlmIChUUkVFX0NPREUgKCpub2RlKSA9 PSBGVU5DVElPTl9ERUNMKQorICAgIHsKKyAgICAgIGlmIChsb29rdXBfYXR0cmlidXRlICgiYWx3 YXlzX2lubGluZSIsIERFQ0xfQVRUUklCVVRFUyAoKm5vZGUpKSkKKwl7CisJICB3YXJuaW5nIChP UFRfV2F0dHJpYnV0ZXMsICIlcUUgYXR0cmlidXRlIGlnbm9yZWQgZHVlIHRvIGNvbmZsaWN0ICIK KwkJICAgIndpdGggYXR0cmlidXRlICVxcyIsIG5hbWUsICJhbHdheXNfaW5saW5lIik7CisJICAq bm9fYWRkX2F0dHJzID0gdHJ1ZTsKKwl9CisgICAgICBlbHNlCisJREVDTF9VTklOTElOQUJMRSAo Km5vZGUpID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB3YXJuaW5nIChPUFRfV2F0 dHJpYnV0ZXMsICIlcUUgYXR0cmlidXRlIGlnbm9yZWQiLCBuYW1lKTsKKyAgICAgICpub19hZGRf YXR0cnMgPSB0cnVlOworICAgIH0KKworICByZXR1cm4gTlVMTF9UUkVFOworfQorCisvKiBIYW5k bGUgYSAid2VhayIgYXR0cmlidXRlOyBhcmd1bWVudHMgYXMgaW4KKyAgIHN0cnVjdCBhdHRyaWJ1 dGVfc3BlYy5oYW5kbGVyLiAgKi8KKworc3RhdGljIHRyZWUKK2hhbmRsZV93ZWFrX2F0dHJpYnV0 ZSAodHJlZSAqbm9kZSwgdHJlZSBuYW1lLAorCQkgICAgICAgdHJlZSBBUkdfVU5VU0VEIChhcmdz KSwKKwkJICAgICAgIGludCBBUkdfVU5VU0VEIChmbGFncyksCisJCSAgICAgICBib29sICogQVJH X1VOVVNFRCAobm9fYWRkX2F0dHJzKSkKK3sKKyAgaWYgKFRSRUVfQ09ERSAoKm5vZGUpID09IEZV TkNUSU9OX0RFQ0wKKyAgICAgICYmIERFQ0xfREVDTEFSRURfSU5MSU5FX1AgKCpub2RlKSkKKyAg ICB7CisgICAgICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMsICJpbmxpbmUgZnVuY3Rpb24gJXEr RCBkZWNsYXJlZCB3ZWFrIiwgKm5vZGUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7Cisg ICAgfQorICBlbHNlIGlmIChsb29rdXBfYXR0cmlidXRlICgiaWZ1bmMiLCBERUNMX0FUVFJJQlVU RVMgKCpub2RlKSkpCisgICAgeworICAgICAgZXJyb3IgKCJpbmRpcmVjdCBmdW5jdGlvbiAlcStE IGNhbm5vdCBiZSBkZWNsYXJlZCB3ZWFrIiwgKm5vZGUpOworICAgICAgKm5vX2FkZF9hdHRycyA9 IHRydWU7CisgICAgICByZXR1cm4gTlVMTF9UUkVFOworICAgIH0KKyAgZWxzZSBpZiAoVkFSX09S X0ZVTkNUSU9OX0RFQ0xfUCAoKm5vZGUpKQorICAgIGRlY2xhcmVfd2VhayAoKm5vZGUpOworICBl bHNlCisgICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiJXFFIGF0dHJpYnV0ZSBpZ25vcmVk IiwgbmFtZSk7CisKKyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKworLyogSGFuZGxlIGEgInRhcmdl dCIgYXR0cmlidXRlLiAgKi8KKworc3RhdGljIHRyZWUKK2hhbmRsZV90YXJnZXRfYXR0cmlidXRl ICh0cmVlICpub2RlLCB0cmVlIG5hbWUsIHRyZWUgYXJncywgaW50IGZsYWdzLAorCQkJIGJvb2wg Km5vX2FkZF9hdHRycykKK3sKKyAgLyogRW5zdXJlIHdlIGhhdmUgYSBmdW5jdGlvbiB0eXBlLiAg Ki8KKyAgaWYgKFRSRUVfQ09ERSAoKm5vZGUpICE9IEZVTkNUSU9OX0RFQ0wpCisgICAgeworICAg ICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiJXFFIGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFt ZSk7CisgICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKKyAgICB9CisgIGVsc2UgaWYgKGxvb2t1 cF9hdHRyaWJ1dGUgKCJ0YXJnZXRfY2xvbmVzIiwgREVDTF9BVFRSSUJVVEVTICgqbm9kZSkpKQor ICAgIHsKKyAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1dGUgaWdu b3JlZCBkdWUgdG8gY29uZmxpY3QgIgorCQkgICAid2l0aCAlcXMgYXR0cmlidXRlIiwgbmFtZSwg InRhcmdldF9jbG9uZXMiKTsKKyAgICAgICpub19hZGRfYXR0cnMgPSB0cnVlOworICAgIH0KKyAg ZWxzZSBpZiAoISB0YXJnZXRtLnRhcmdldF9vcHRpb24udmFsaWRfYXR0cmlidXRlX3AgKCpub2Rl LCBuYW1lLCBhcmdzLAorCQkJCQkJICAgICAgZmxhZ3MpKQorICAgICpub19hZGRfYXR0cnMgPSB0 cnVlOworCisgIC8qIENoZWNrIHRoYXQgdGhlcmUncyBubyBlbXB0eSBzdHJpbmcgaW4gdmFsdWVz IG9mIHRoZSBhdHRyaWJ1dGUuICAqLworICBmb3IgKHRyZWUgdCA9IGFyZ3M7IHQgIT0gTlVMTF9U UkVFOyB0ID0gVFJFRV9DSEFJTiAodCkpCisgICAgeworICAgICAgdHJlZSB2YWx1ZSA9IFRSRUVf VkFMVUUgKHQpOworICAgICAgaWYgKFRSRUVfQ09ERSAodmFsdWUpID09IFNUUklOR19DU1QKKwkg ICYmIFRSRUVfU1RSSU5HX0xFTkdUSCAodmFsdWUpID09IDEKKwkgICYmIFRSRUVfU1RSSU5HX1BP SU5URVIgKHZhbHVlKVswXSA9PSAnXDAnKQorCXsKKwkgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRl cywgImVtcHR5IHN0cmluZyBpbiBhdHRyaWJ1dGUgJTx0YXJnZXQlPiIpOworCSAgKm5vX2FkZF9h dHRycyA9IHRydWU7CisJfQorICAgIH0KKworICByZXR1cm4gTlVMTF9UUkVFOworfQorCisvKiBI YW5kbGUgYSAidXNlZCIgYXR0cmlidXRlOyBhcmd1bWVudHMgYXMgaW4KKyAgIHN0cnVjdCBhdHRy aWJ1dGVfc3BlYy5oYW5kbGVyLiAgKi8KKworc3RhdGljIHRyZWUKK2hhbmRsZV91c2VkX2F0dHJp YnV0ZSAodHJlZSAqcG5vZGUsIHRyZWUgbmFtZSwgdHJlZSBBUkdfVU5VU0VEIChhcmdzKSwKKwkJ ICAgICAgIGludCBBUkdfVU5VU0VEIChmbGFncyksIGJvb2wgKm5vX2FkZF9hdHRycykKK3sKKyAg dHJlZSBub2RlID0gKnBub2RlOworCisgIGlmIChUUkVFX0NPREUgKG5vZGUpID09IEZVTkNUSU9O X0RFQ0wKKyAgICAgIHx8IChWQVJfUCAobm9kZSkgJiYgVFJFRV9TVEFUSUMgKG5vZGUpKQorICAg ICAgfHwgKFRSRUVfQ09ERSAobm9kZSkgPT0gVFlQRV9ERUNMKSkKKyAgICB7CisgICAgICBUUkVF X1VTRUQgKG5vZGUpID0gMTsKKyAgICAgIERFQ0xfUFJFU0VSVkVfUCAobm9kZSkgPSAxOworICAg ICAgaWYgKFZBUl9QIChub2RlKSkKKwlERUNMX1JFQURfUCAobm9kZSkgPSAxOworICAgIH0KKyAg ZWxzZQorICAgIHsKKyAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1 dGUgaWdub3JlZCIsIG5hbWUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgICAgfQor CisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKKy8qIEhhbmRsZSBhbiAiYWxpYXMiIG9yICJpZnVu YyIgYXR0cmlidXRlOyBhcmd1bWVudHMgYXMgaW4KKyAgIHN0cnVjdCBhdHRyaWJ1dGVfc3BlYy5o YW5kbGVyLCBleGNlcHQgdGhhdCBJU19BTElBUyB0ZWxscyB1cworICAgd2hldGhlciB0aGlzIGlz IGFuIGFsaWFzIGFzIG9wcG9zZWQgdG8gaWZ1bmMgYXR0cmlidXRlLiAgKi8KKworc3RhdGljIHRy ZWUKK2hhbmRsZV9hbGlhc19pZnVuY19hdHRyaWJ1dGUgKGJvb2wgaXNfYWxpYXMsIHRyZWUgKm5v ZGUsIHRyZWUgbmFtZSwgdHJlZSBhcmdzLAorCQkJICAgICAgYm9vbCAqbm9fYWRkX2F0dHJzKQor eworICB0cmVlIGRlY2wgPSAqbm9kZTsKKworICBpZiAoVFJFRV9DT0RFIChkZWNsKSAhPSBGVU5D VElPTl9ERUNMCisgICAgICAmJiAoIWlzX2FsaWFzIHx8ICFWQVJfUCAoZGVjbCkpKQorICAgIHsK KyAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1dGUgaWdub3JlZCIs IG5hbWUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgICAgfQorICBlbHNlIGlmICgo VFJFRV9DT0RFIChkZWNsKSA9PSBGVU5DVElPTl9ERUNMICYmIERFQ0xfSU5JVElBTCAoZGVjbCkp CisgICAgICB8fCAoVFJFRV9DT0RFIChkZWNsKSAhPSBGVU5DVElPTl9ERUNMCisJICAmJiBUUkVF X1BVQkxJQyAoZGVjbCkgJiYgIURFQ0xfRVhURVJOQUwgKGRlY2wpKQorICAgICAgLyogQSBzdGF0 aWMgdmFyaWFibGUgZGVjbGFyYXRpb24gaXMgYWx3YXlzIGEgdGVudGF0aXZlIGRlZmluaXRpb24s CisJIGJ1dCB0aGUgYWxpYXMgaXMgYSBub24tdGVudGF0aXZlIGRlZmluaXRpb24gd2hpY2ggb3Zl cnJpZGVzLiAgKi8KKyAgICAgIHx8IChUUkVFX0NPREUgKGRlY2wpICE9IEZVTkNUSU9OX0RFQ0wK KwkgICYmICEgVFJFRV9QVUJMSUMgKGRlY2wpICYmIERFQ0xfSU5JVElBTCAoZGVjbCkpKQorICAg IHsKKyAgICAgIGVycm9yICgiJXErRCBkZWZpbmVkIGJvdGggbm9ybWFsbHkgYW5kIGFzICVxRSBh dHRyaWJ1dGUiLCBkZWNsLCBuYW1lKTsKKyAgICAgICpub19hZGRfYXR0cnMgPSB0cnVlOworICAg ICAgcmV0dXJuIE5VTExfVFJFRTsKKyAgICB9CisgIGVsc2UgaWYgKCFpc19hbGlhcworCSAgICYm IChsb29rdXBfYXR0cmlidXRlICgid2VhayIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkpCisJICAg ICAgIHx8IGxvb2t1cF9hdHRyaWJ1dGUgKCJ3ZWFrcmVmIiwgREVDTF9BVFRSSUJVVEVTIChkZWNs KSkpKQorICAgIHsKKyAgICAgIGVycm9yICgid2VhayAlcStEIGNhbm5vdCBiZSBkZWZpbmVkICVx RSIsIGRlY2wsIG5hbWUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgICAgICByZXR1 cm4gTlVMTF9UUkVFOworICAgIH0KKworICAvKiBOb3RlIHRoYXQgdGhlIHZlcnkgZmlyc3QgdGlt ZSB3ZSBwcm9jZXNzIGEgbmVzdGVkIGRlY2xhcmF0aW9uLAorICAgICBkZWNsX2Z1bmN0aW9uX2Nv bnRleHQgd2lsbCBub3QgYmUgc2V0LiAgSW5kZWVkLCAqd291bGQqIG5ldmVyCisgICAgIGJlIHNl dCBleGNlcHQgZm9yIHRoZSBERUNMX0lOSVRJQUwvREVDTF9FWFRFUk5BTCBmcm9iYmVyeSB0aGF0 CisgICAgIHdlIGRvIGJlbG93LiAgQWZ0ZXIgc3VjaCBmcm9iYmVyeSwgcHVzaGRlY2wgd291bGQg c2V0IHRoZSBjb250ZXh0LgorICAgICBJbiBhbnkgY2FzZSwgdGhpcyBpcyBuZXZlciB3aGF0IHdl IHdhbnQuICAqLworICBlbHNlIGlmIChkZWNsX2Z1bmN0aW9uX2NvbnRleHQgKGRlY2wpID09IDAg JiYgY3VycmVudF9mdW5jdGlvbl9kZWNsID09IE5VTEwpCisgICAgeworICAgICAgdHJlZSBpZDsK KworICAgICAgaWQgPSBUUkVFX1ZBTFVFIChhcmdzKTsKKyAgICAgIGlmIChUUkVFX0NPREUgKGlk KSAhPSBTVFJJTkdfQ1NUKQorCXsKKwkgIGVycm9yICgiYXR0cmlidXRlICVxRSBhcmd1bWVudCBu b3QgYSBzdHJpbmciLCBuYW1lKTsKKwkgICpub19hZGRfYXR0cnMgPSB0cnVlOworCSAgcmV0dXJu IE5VTExfVFJFRTsKKwl9CisgICAgICBpZCA9IGdldF9pZGVudGlmaWVyIChUUkVFX1NUUklOR19Q T0lOVEVSIChpZCkpOworICAgICAgLyogVGhpcyBjb3VudHMgYXMgYSB1c2Ugb2YgdGhlIG9iamVj dCBwb2ludGVkIHRvLiAgKi8KKyAgICAgIFRSRUVfVVNFRCAoaWQpID0gMTsKKworICAgICAgaWYg KFRSRUVfQ09ERSAoZGVjbCkgPT0gRlVOQ1RJT05fREVDTCkKKwlERUNMX0lOSVRJQUwgKGRlY2wp ID0gZXJyb3JfbWFya19ub2RlOworICAgICAgZWxzZQorCVRSRUVfU1RBVElDIChkZWNsKSA9IDE7 CisKKyAgICAgIGlmICghaXNfYWxpYXMpCisJeworCSAgLyogaWZ1bmNzIGFyZSBhbHNvIGFsaWFz ZXMsIHNvIHNldCB0aGF0IGF0dHJpYnV0ZSB0b28uICAqLworCSAgREVDTF9BVFRSSUJVVEVTIChk ZWNsKQorCSAgICA9IHRyZWVfY29ucyAoZ2V0X2lkZW50aWZpZXIgKCJhbGlhcyIpLCBhcmdzLAor CQkJIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkpOworCSAgREVDTF9BVFRSSUJVVEVTIChkZWNsKSA9 IHRyZWVfY29ucyAoZ2V0X2lkZW50aWZpZXIgKCJpZnVuYyIpLAorCQkJCQkgICAgICBOVUxMLCBE RUNMX0FUVFJJQlVURVMgKGRlY2wpKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAg d2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiJXFFIGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFtZSk7 CisgICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKKyAgICB9CisKKyAgaWYgKGRlY2xfaW5fc3lt dGFiX3AgKCpub2RlKSkKKyAgICB7CisgICAgICBzdHJ1Y3Qgc3ltdGFiX25vZGUgKm4gPSBzeW10 YWJfbm9kZTo6Z2V0IChkZWNsKTsKKyAgICAgIGlmIChuICYmIG4tPnJlZnVzZV92aXNpYmlsaXR5 X2NoYW5nZXMpCisJZXJyb3IgKCIlK3FEIGRlY2xhcmVkICVxcyBhZnRlciBiZWluZyB1c2VkIiwK KwkgICAgICAgZGVjbCwgaXNfYWxpYXMgPyAiYWxpYXMiIDogImlmdW5jIik7CisgICAgfQorCisK KyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKworLyogSGFuZGxlIGFuICJhbGlhcyIgb3IgImlmdW5j IiBhdHRyaWJ1dGU7IGFyZ3VtZW50cyBhcyBpbgorICAgc3RydWN0IGF0dHJpYnV0ZV9zcGVjLmhh bmRsZXIuICAqLworCitzdGF0aWMgdHJlZQoraGFuZGxlX2FsaWFzX2F0dHJpYnV0ZSAodHJlZSAq bm9kZSwgdHJlZSBuYW1lLCB0cmVlIGFyZ3MsCisJCQlpbnQgQVJHX1VOVVNFRCAoZmxhZ3MpLCBi b29sICpub19hZGRfYXR0cnMpCit7CisgIHJldHVybiBoYW5kbGVfYWxpYXNfaWZ1bmNfYXR0cmli dXRlICh0cnVlLCBub2RlLCBuYW1lLCBhcmdzLCBub19hZGRfYXR0cnMpOworfQorCiAvKiAoZW5k IG9mIGF0dHJpYnV0ZS1oYW5kbGluZykuICAqLwogCiAvKiBMYW5ndWFnZS1kZXBlbmRlbnQgY29u dGVudHMgb2YgYSB0eXBlLiAgKi8KZGlmZiAtLWdpdCBhL2djYy9qaXQvaml0LXBsYXliYWNrLmNj IGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suY2MKaW5kZXggMThjYzRkYTI1YjguLmQ4ZGJjNWFhYzYx IDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5jYworKysgYi9nY2Mvaml0L2ppdC1w bGF5YmFjay5jYwpAQCAtMjAsNiArMjAsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxl IENPUFlJTkczLiAgSWYgbm90IHNlZQogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZGVmaW5lIElO Q0xVREVfTVVURVgKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKICNpbmNsdWRlICJzeXN0ZW0uaCIK ICNpbmNsdWRlICJjb3JldHlwZXMuaCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKQEAgLTQ5OSw2ICs1 MDAsNTAgQEAgbmV3X3BhcmFtIChsb2NhdGlvbiAqbG9jLAogICByZXR1cm4gbmV3IHBhcmFtICh0 aGlzLCBpbm5lcik7CiB9CiAKK2NvbnN0IGNoYXIqIGZuX2F0dHJpYnV0ZV90b19zdHJpbmcgKGdj Y19qaXRfZm5fYXR0cmlidXRlIGF0dHIpCit7CisgIHN3aXRjaCAoYXR0cikKKyAgeworICAgIGNh c2UgR0NDX0pJVF9GTl9BVFRSSUJVVEVfQUxJQVM6CisgICAgICByZXR1cm4gImFsaWFzIjsKKyAg ICBjYXNlIEdDQ19KSVRfRk5fQVRUUklCVVRFX0FMV0FZU19JTkxJTkU6CisgICAgICByZXR1cm4g ImFsd2F5c19pbmxpbmUiOworICAgIGNhc2UgR0NDX0pJVF9GTl9BVFRSSUJVVEVfSU5MSU5FOgor ICAgICAgcmV0dXJuIE5VTEw7CisgICAgY2FzZSBHQ0NfSklUX0ZOX0FUVFJJQlVURV9OT0lOTElO RToKKyAgICAgIHJldHVybiAibm9pbmxpbmUiOworICAgIGNhc2UgR0NDX0pJVF9GTl9BVFRSSUJV VEVfVEFSR0VUOgorICAgICAgcmV0dXJuICJ0YXJnZXQiOworICAgIGNhc2UgR0NDX0pJVF9GTl9B VFRSSUJVVEVfVVNFRDoKKyAgICAgIHJldHVybiAidXNlZCI7CisgICAgY2FzZSBHQ0NfSklUX0ZO X0FUVFJJQlVURV9WSVNJQklMSVRZOgorICAgICAgcmV0dXJuICJ2aXNpYmlsaXR5IjsKKyAgICBj YXNlIEdDQ19KSVRfRk5fQVRUUklCVVRFX0NPTEQ6CisgICAgICByZXR1cm4gImNvbGQiOworICAg IGNhc2UgR0NDX0pJVF9GTl9BVFRSSUJVVEVfUkVUVVJOU19UV0lDRToKKyAgICAgIHJldHVybiAi cmV0dXJuc190d2ljZSI7CisgICAgY2FzZSBHQ0NfSklUX0ZOX0FUVFJJQlVURV9QVVJFOgorICAg ICAgcmV0dXJuICJwdXJlIjsKKyAgICBjYXNlIEdDQ19KSVRfRk5fQVRUUklCVVRFX0NPTlNUOgor ICAgICAgcmV0dXJuICJjb25zdCI7CisgICAgY2FzZSBHQ0NfSklUX0ZOX0FUVFJJQlVURV9XRUFL OgorICAgICAgcmV0dXJuICJ3ZWFrIjsKKyAgICBjYXNlIEdDQ19KSVRfRk5fQVRUUklCVVRFX05P Tk5VTEw6CisgICAgICByZXR1cm4gIm5vbm51bGwiOworICB9CisgIHJldHVybiBOVUxMOworfQor Citjb25zdCBjaGFyKiB2YXJpYWJsZV9hdHRyaWJ1dGVfdG9fc3RyaW5nIChnY2Nfaml0X3Zhcmlh YmxlX2F0dHJpYnV0ZSBhdHRyKQoreworICBzd2l0Y2ggKGF0dHIpCisgIHsKKyAgICBjYXNlIEdD Q19KSVRfVkFSSUFCTEVfQVRUUklCVVRFX1ZJU0lCSUxJVFk6CisgICAgICByZXR1cm4gInZpc2li aWxpdHkiOworICB9CisgIHJldHVybiBOVUxMOworfQorCiAvKiBDb25zdHJ1Y3QgYSBwbGF5YmFj azo6ZnVuY3Rpb24gaW5zdGFuY2UuICAqLwogCiBwbGF5YmFjazo6ZnVuY3Rpb24gKgpAQCAtNTA5 LDcgKzU1NCwxMyBAQCBuZXdfZnVuY3Rpb24gKGxvY2F0aW9uICpsb2MsCiAJICAgICAgY29uc3Qg Y2hhciAqbmFtZSwKIAkgICAgICBjb25zdCBhdXRvX3ZlYzxwYXJhbSAqPiAqcGFyYW1zLAogCSAg ICAgIGludCBpc192YXJpYWRpYywKLQkgICAgICBlbnVtIGJ1aWx0X2luX2Z1bmN0aW9uIGJ1aWx0 aW5faWQpCisJICAgICAgZW51bSBidWlsdF9pbl9mdW5jdGlvbiBidWlsdGluX2lkLAorCSAgICAg IGNvbnN0IHN0ZDo6dmVjdG9yPGdjY19qaXRfZm5fYXR0cmlidXRlPiAmYXR0cmlidXRlcywKKwkg ICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF9mbl9hdHRyaWJ1dGUsCisJ CQkJCSAgc3RkOjpzdHJpbmc+PiAmc3RyaW5nX2F0dHJpYnV0ZXMsCisJICAgICAgY29uc3Qgc3Rk Ojp2ZWN0b3I8c3RkOjpwYWlyPGdjY19qaXRfZm5fYXR0cmlidXRlLAorCQkJCQkgIHN0ZDo6dmVj dG9yPGludD4+PgorCQkJCQkgICZpbnRfYXJyYXlfYXR0cmlidXRlcykKIHsKICAgaW50IGk7CiAg IHBhcmFtICpwYXJhbTsKQEAgLTU0Myw2ICs1OTQsOCBAQCBuZXdfZnVuY3Rpb24gKGxvY2F0aW9u ICpsb2MsCiAgIERFQ0xfUkVTVUxUIChmbmRlY2wpID0gcmVzZGVjbDsKICAgREVDTF9DT05URVhU IChyZXNkZWNsKSA9IGZuZGVjbDsKIAorICB0cmVlIGZuX2F0dHJpYnV0ZXMgPSBOVUxMX1RSRUU7 CisKICAgaWYgKGJ1aWx0aW5faWQpCiAgICAgewogICAgICAgZ2NjX2Fzc2VydCAobG9jID09IE5V TEwpOwpAQCAtNTg4LDEyICs2NDEsNjIgQEAgbmV3X2Z1bmN0aW9uIChsb2NhdGlvbiAqbG9jLAog ICAgICAgREVDTF9ERUNMQVJFRF9JTkxJTkVfUCAoZm5kZWNsKSA9IDE7CiAKICAgICAgIC8qIEFk ZCBhdHRyaWJ1dGUgImFsd2F5c19pbmxpbmUiOiAqLwotICAgICAgREVDTF9BVFRSSUJVVEVTIChm bmRlY2wpID0KLQl0cmVlX2NvbnMgKGdldF9pZGVudGlmaWVyICgiYWx3YXlzX2lubGluZSIpLAot CQkgICBOVUxMLAotCQkgICBERUNMX0FUVFJJQlVURVMgKGZuZGVjbCkpOworICAgICAgZm5fYXR0 cmlidXRlcyA9IHRyZWVfY29ucyAoZ2V0X2lkZW50aWZpZXIgKCJhbHdheXNfaW5saW5lIiksCisJ CQkJIE5VTEwsCisJCQkJIGZuX2F0dHJpYnV0ZXMpOworICAgIH0KKworICAvKiBBbGwgYXR0cmli dXRlcyBuZWVkIHRvIGJlIGRlY2xhcmVkIGluIGBkdW1teS1mcm9udGVuZC5jY2AgYW5kIG1vcmUK KyAgICAgc3BlY2lmaWNhbGx5IGluIGBqaXRfYXR0cmlidXRlX3RhYmxlYC4gKi8KKyAgZm9yIChh dXRvIGF0dHI6IGF0dHJpYnV0ZXMpCisgIHsKKyAgICBpZiAoYXR0ciA9PSBHQ0NfSklUX0ZOX0FU VFJJQlVURV9JTkxJTkUpCisgICAgICBERUNMX0RFQ0xBUkVEX0lOTElORV9QIChmbmRlY2wpID0g MTsKKworICAgIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZSA9IGZuX2F0dHJpYnV0ZV90b19zdHJpbmcg KGF0dHIpOworICAgIGlmIChhdHRyaWJ1dGUpCisgICAgeworICAgICAgdHJlZSBpZGVudCA9IGdl dF9pZGVudGlmaWVyIChhdHRyaWJ1dGUpOworICAgICAgZm5fYXR0cmlidXRlcyA9IHRyZWVfY29u cyAoaWRlbnQsIE5VTExfVFJFRSwgZm5fYXR0cmlidXRlcyk7CiAgICAgfQorICB9CiAKKyAgZm9y IChhdXRvIGF0dHI6IHN0cmluZ19hdHRyaWJ1dGVzKQorICB7CisgICAgZ2NjX2ppdF9mbl9hdHRy aWJ1dGUmIG5hbWUgPSBzdGQ6OmdldDwwPihhdHRyKTsKKyAgICBzdGQ6OnN0cmluZyYgdmFsdWUg PSBzdGQ6OmdldDwxPihhdHRyKTsKKyAgICB0cmVlIGF0dHJpYnV0ZV92YWx1ZSA9IGJ1aWxkX3Ry ZWVfbGlzdCAoTlVMTF9UUkVFLAorCTo6YnVpbGRfc3RyaW5nICh2YWx1ZS5sZW5ndGggKCkgKyAx LCB2YWx1ZS5jX3N0ciAoKSkpOworICAgIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZSA9IGZuX2F0dHJp YnV0ZV90b19zdHJpbmcgKG5hbWUpOworICAgIHRyZWUgaWRlbnQgPSBhdHRyaWJ1dGUgPyBnZXRf aWRlbnRpZmllciAoYXR0cmlidXRlKSA6IE5VTEw7CisKKyAgICBpZiAoaWRlbnQpCisgICAgICBm bl9hdHRyaWJ1dGVzID0gdHJlZV9jb25zIChpZGVudCwgYXR0cmlidXRlX3ZhbHVlLCBmbl9hdHRy aWJ1dGVzKTsKKyAgfQorCisgIGZvciAoYXV0byBhdHRyOiBpbnRfYXJyYXlfYXR0cmlidXRlcykK KyAgeworICAgIGdjY19qaXRfZm5fYXR0cmlidXRlJiBuYW1lID0gc3RkOjpnZXQ8MD4oYXR0cik7 CisgICAgc3RkOjp2ZWN0b3I8aW50PiYgdmFsdWVzID0gc3RkOjpnZXQ8MT4oYXR0cik7CisKKyAg ICBjb25zdCBjaGFyKiBhdHRyaWJ1dGUgPSBmbl9hdHRyaWJ1dGVfdG9fc3RyaW5nIChuYW1lKTsK KyAgICB0cmVlIGlkZW50ID0gYXR0cmlidXRlID8gZ2V0X2lkZW50aWZpZXIgKGF0dHJpYnV0ZSkg OiBOVUxMOworCisgICAgaWYgKCFpZGVudCkKKyAgICAgIGNvbnRpbnVlOworCisgICAgdHJlZSB0 cmVlX2xpc3QgPSBOVUxMX1RSRUU7CisgICAgdHJlZSAqcF90cmVlX2xpc3QgPSAmdHJlZV9saXN0 OworICAgIGZvciAoYXV0byB2YWx1ZSA6IHZhbHVlcykKKyAgICB7CisgICAgICB0cmVlIGludF92 YWx1ZSA9IGJ1aWxkX2ludF9jc3QgKGludGVnZXJfdHlwZV9ub2RlLCB2YWx1ZSk7CisgICAgICAq cF90cmVlX2xpc3QgPSBidWlsZF90cmVlX2xpc3QgKE5VTEwsIGludF92YWx1ZSk7CisgICAgICBw X3RyZWVfbGlzdCA9ICZUUkVFX0NIQUlOICgqcF90cmVlX2xpc3QpOworICAgIH0KKyAgICBmbl9h dHRyaWJ1dGVzID0gdHJlZV9jb25zIChpZGVudCwgdHJlZV9saXN0LCBmbl9hdHRyaWJ1dGVzKTsK KyAgfQorCisgIGRlY2xfYXR0cmlidXRlcyAoJmZuZGVjbCwgZm5fYXR0cmlidXRlcywgMCk7CiAg IGZ1bmN0aW9uICpmdW5jID0gbmV3IGZ1bmN0aW9uICh0aGlzLCBmbmRlY2wsIGtpbmQpOwogICBt X2Z1bmN0aW9ucy5zYWZlX3B1c2ggKGZ1bmMpOwogICByZXR1cm4gZnVuYzsKQEAgLTYwNyw3ICs3 MTAsOSBAQCBnbG9iYWxfbmV3X2RlY2wgKGxvY2F0aW9uICpsb2MsCiAJCSBlbnVtIGdjY19qaXRf Z2xvYmFsX2tpbmQga2luZCwKIAkJIHR5cGUgKnR5cGUsCiAJCSBjb25zdCBjaGFyICpuYW1lLAot CQkgZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZsYWdzKQorCQkgZW51bSBnbG9iYWxfdmFyX2ZsYWdz IGZsYWdzLAorCQkgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGdjY19qaXRfdmFyaWFibGVf YXR0cmlidXRlLAorCQkJCQkgICAgIHN0ZDo6c3RyaW5nPj4gJmF0dHJpYnV0ZXMpCiB7CiAgIGdj Y19hc3NlcnQgKHR5cGUpOwogICBnY2NfYXNzZXJ0IChuYW1lKTsKQEAgLTY1Miw5ICs3NTcsMzIg QEAgZ2xvYmFsX25ld19kZWNsIChsb2NhdGlvbiAqbG9jLAogICBpZiAobG9jKQogICAgIHNldF90 cmVlX2xvY2F0aW9uIChpbm5lciwgbG9jKTsKIAorICBzZXRfdmFyaWFibGVfc3RyaW5nX2F0dHJp YnV0ZSAoYXR0cmlidXRlcywgaW5uZXIpOworCiAgIHJldHVybiBpbm5lcjsKIH0KIAordm9pZAor cGxheWJhY2s6Ogorc2V0X3ZhcmlhYmxlX3N0cmluZ19hdHRyaWJ1dGUgKAorICBjb25zdCBzdGQ6 OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGUsCisgIAkJCSAgICAg IHN0ZDo6c3RyaW5nPj4gJnN0cmluZ19hdHRyaWJ1dGVzLAorICB0cmVlIGRlY2wpCit7CisgIHRy ZWUgdmFyX2F0dHJpYnV0ZXMgPSBOVUxMX1RSRUU7CisgIGZvciAoYXV0byBhdHRyOiBzdHJpbmdf YXR0cmlidXRlcykKKyAgeworICAgIGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlJiBuYW1lID0g c3RkOjpnZXQ8MD4oYXR0cik7CisgICAgc3RkOjpzdHJpbmcmIHZhbHVlID0gc3RkOjpnZXQ8MT4o YXR0cik7CisgICAgdHJlZSBhdHRyaWJ1dGVfdmFsdWUgPSBidWlsZF90cmVlX2xpc3QgKE5VTExf VFJFRSwKKwk6OmJ1aWxkX3N0cmluZyAodmFsdWUubGVuZ3RoICgpICsgMSwgdmFsdWUuY19zdHIg KCkpKTsKKyAgICB0cmVlIGlkZW50ID0gZ2V0X2lkZW50aWZpZXIgKHZhcmlhYmxlX2F0dHJpYnV0 ZV90b19zdHJpbmcgKG5hbWUpKTsKKyAgICBpZiAoaWRlbnQpCisgICAgICB2YXJfYXR0cmlidXRl cyA9IHRyZWVfY29ucyAoaWRlbnQsIGF0dHJpYnV0ZV92YWx1ZSwgdmFyX2F0dHJpYnV0ZXMpOwor ICB9CisgIGRlY2xfYXR0cmlidXRlcyAoJmRlY2wsIHZhcl9hdHRyaWJ1dGVzLCAwKTsKK30KKwog LyogSW4gdXNlIGJ5IG5ld19nbG9iYWwgYW5kIG5ld19nbG9iYWxfaW5pdGlhbGl6ZWQuICAqLwog CiBwbGF5YmFjazo6bHZhbHVlICoKQEAgLTY3NCwxMCArODAyLDEyIEBAIG5ld19nbG9iYWwgKGxv Y2F0aW9uICpsb2MsCiAJICAgIGVudW0gZ2NjX2ppdF9nbG9iYWxfa2luZCBraW5kLAogCSAgICB0 eXBlICp0eXBlLAogCSAgICBjb25zdCBjaGFyICpuYW1lLAotCSAgICBlbnVtIGdsb2JhbF92YXJf ZmxhZ3MgZmxhZ3MpCisJICAgIGVudW0gZ2xvYmFsX3Zhcl9mbGFncyBmbGFncywKKwkgICAgY29u c3Qgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlLAorCQkJ CQlzdGQ6OnN0cmluZz4+ICZhdHRyaWJ1dGVzKQogewogICB0cmVlIGlubmVyID0KLSAgICBnbG9i YWxfbmV3X2RlY2wgKGxvYywga2luZCwgdHlwZSwgbmFtZSwgZmxhZ3MpOworICAgIGdsb2JhbF9u ZXdfZGVjbCAobG9jLCBraW5kLCB0eXBlLCBuYW1lLCBmbGFncywgYXR0cmlidXRlcyk7CiAKICAg cmV0dXJuIGdsb2JhbF9maW5hbGl6ZV9sdmFsdWUgKGlubmVyKTsKIH0KQEAgLTgxOCwxMyArOTQ4 LDE1IEBAIHBsYXliYWNrOjpjb250ZXh0OjoKIG5ld19nbG9iYWxfaW5pdGlhbGl6ZWQgKGxvY2F0 aW9uICpsb2MsCiAJCQllbnVtIGdjY19qaXRfZ2xvYmFsX2tpbmQga2luZCwKIAkJCXR5cGUgKnR5 cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZWxlbWVudF9zaXplLAorCQkJc2l6 ZV90IGVsZW1lbnRfc2l6ZSwKIAkJCXNpemVfdCBpbml0aWFsaXplcl9udW1fZWxlbSwKIAkJCWNv bnN0IHZvaWQgKmluaXRpYWxpemVyLAogCQkJY29uc3QgY2hhciAqbmFtZSwKLQkJCWVudW0gZ2xv YmFsX3Zhcl9mbGFncyBmbGFncykKKwkJCWVudW0gZ2xvYmFsX3Zhcl9mbGFncyBmbGFncywKKwkJ CWNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSwK KwkJCQkJCSAgICBzdGQ6OnN0cmluZz4+ICZhdHRyaWJ1dGVzKQogewotICB0cmVlIGlubmVyID0g Z2xvYmFsX25ld19kZWNsIChsb2MsIGtpbmQsIHR5cGUsIG5hbWUsIGZsYWdzKTsKKyAgdHJlZSBp bm5lciA9IGdsb2JhbF9uZXdfZGVjbCAobG9jLCBraW5kLCB0eXBlLCBuYW1lLCBmbGFncywgYXR0 cmlidXRlcyk7CiAKICAgdmVjPGNvbnN0cnVjdG9yX2VsdCwgdmFfZ2M+ICpjb25zdHJ1Y3Rvcl9l bGVtZW50cyA9IE5VTEw7CiAKQEAgLTE4MTIsNyArMTk0NCw5IEBAIHBsYXliYWNrOjpsdmFsdWUg KgogcGxheWJhY2s6OmZ1bmN0aW9uOjoKIG5ld19sb2NhbCAobG9jYXRpb24gKmxvYywKIAkgICB0 eXBlICp0eXBlLAotCSAgIGNvbnN0IGNoYXIgKm5hbWUpCisJICAgY29uc3QgY2hhciAqbmFtZSwK KwkgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1 dGUsCisJCQkJICAgICAgIHN0ZDo6c3RyaW5nPj4gJmF0dHJpYnV0ZXMpCiB7CiAgIGdjY19hc3Nl cnQgKHR5cGUpOwogICBnY2NfYXNzZXJ0IChuYW1lKTsKQEAgLTE4MjUsNiArMTk1OSw4IEBAIG5l d19sb2NhbCAobG9jYXRpb24gKmxvYywKICAgREVDTF9DSEFJTiAoaW5uZXIpID0gQklORF9FWFBS X1ZBUlMgKG1faW5uZXJfYmluZF9leHByKTsKICAgQklORF9FWFBSX1ZBUlMgKG1faW5uZXJfYmlu ZF9leHByKSA9IGlubmVyOwogCisgIHNldF92YXJpYWJsZV9zdHJpbmdfYXR0cmlidXRlIChhdHRy aWJ1dGVzLCBpbm5lcik7CisKICAgaWYgKGxvYykKICAgICBzZXRfdHJlZV9sb2NhdGlvbiAoaW5u ZXIsIGxvYyk7CiAgIHJldHVybiBuZXcgbHZhbHVlIChtX2N0eHQsIGlubmVyKTsKQEAgLTE5NDcs NiArMjA4Myw5IEBAIHBvc3Rwcm9jZXNzICgpCiAKICAgICAgIGN1cnJlbnRfZnVuY3Rpb25fZGVj bCA9IE5VTEw7CiAgICAgfQorICAgIGVsc2UKKyAgICAgIC8qIEFkZCB0byBjZ3JhcGggdG8gb3V0 cHV0IGFsaWFzZXM6ICovCisgICAgICByZXN0X29mX2RlY2xfY29tcGlsYXRpb24gKG1faW5uZXJf Zm5kZWNsLCB0cnVlLCAwKTsKIH0KIAogLyogRG9uJ3QgbGVhayB2ZWMncyBpbnRlcm5hbCBidWZm ZXIgKGluIG5vbi1HQyBoZWFwKSB3aGVuIHdlIGFyZQpAQCAtMzM2NSw3ICszNTA0LDcgQEAgdm9p ZAogcGxheWJhY2s6OmNvbnRleHQ6OgogaW5pdF90eXBlcyAoKQogewotICAvKiBTZWUgbHRvX2lu aXQoKSBpbiBsdG8tbGFuZy5jYyBvciB2b2lkIHZpc2l0IChUeXBlQmFzaWMgKnQpIGluIEQncyB0 eXBlcy5jYyAKKyAgLyogU2VlIGx0b19pbml0ICgpIGluIGx0by1sYW5nLmNjIG9yIHZvaWQgdmlz aXQgKFR5cGVCYXNpYyAqdCkgaW4gRCdzIHR5cGVzLmNjCiAgICAgIGZvciByZWZlcmVuY2UuIElm IFRZUEVfTkFNRSBpcyBub3Qgc2V0LCBkZWJ1ZyBpbmZvIHdpbGwgbm90IGNvbnRhaW4gdHlwZXMg Ki8KICNkZWZpbmUgTkFNRV9UWVBFKHQsbikgXAogaWYgKHQpIFwKZGlmZiAtLWdpdCBhL2djYy9q aXQvaml0LXBsYXliYWNrLmggYi9nY2Mvaml0L2ppdC1wbGF5YmFjay5oCmluZGV4IGY5ZTI5ZDBi YWVjLi5hMGU1NjUyMDcwMiAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suaAorKysg Yi9nY2Mvaml0L2ppdC1wbGF5YmFjay5oCkBAIC0yMSw3ICsyMSw5IEBAIGFsb25nIHdpdGggR0ND OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaWZuZGVmIEpJVF9QTEFZQkFD S19ICiAjZGVmaW5lIEpJVF9QTEFZQkFDS19ICiAKKyNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVk ZSA8dXRpbGl0eT4gLy8gZm9yIHN0ZDo6cGFpcgorI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1 ZGUgInRpbWV2YXIuaCIKICNpbmNsdWRlICJ2YXJhc20uaCIKQEAgLTM1LDEyICszNywyMSBAQCBu YW1lc3BhY2UgZ2NjIHsKIAogbmFtZXNwYWNlIGppdCB7CiAKK2NvbnN0IGNoYXIqIGZuX2F0dHJp YnV0ZV90b19zdHJpbmcgKGdjY19qaXRfZm5fYXR0cmlidXRlIGF0dHIpOworY29uc3QgY2hhciog dmFyaWFibGVfYXR0cmlidXRlX3RvX3N0cmluZyAoZ2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGUg YXR0cik7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCiAgUGxheWJhY2suCiAgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAog bmFtZXNwYWNlIHBsYXliYWNrIHsKIAordm9pZAorc2V0X3ZhcmlhYmxlX3N0cmluZ19hdHRyaWJ1 dGUgKAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF92YXJpYWJsZV9hdHRy aWJ1dGUsCisJCQkgICAgICBzdGQ6OnN0cmluZz4+ICZhdHRyaWJ1dGVzLAorICB0cmVlIGRlY2wp OworCiAvKiBwbGF5YmFjazo6Y29udGV4dCBpcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzLgogCiAg ICBUaGUgdHdvIGNvbmNyZXRlIHN1YmNsYXNzZXMgYXJlOgpAQCAtMTA0LDE0ICsxMTUsMjIgQEAg cHVibGljOgogCQljb25zdCBjaGFyICpuYW1lLAogCQljb25zdCBhdXRvX3ZlYzxwYXJhbSAqPiAq cGFyYW1zLAogCQlpbnQgaXNfdmFyaWFkaWMsCi0JCWVudW0gYnVpbHRfaW5fZnVuY3Rpb24gYnVp bHRpbl9pZCk7CisJCWVudW0gYnVpbHRfaW5fZnVuY3Rpb24gYnVpbHRpbl9pZCwKKwkJY29uc3Qg c3RkOjp2ZWN0b3I8Z2NjX2ppdF9mbl9hdHRyaWJ1dGU+ICZhdHRyaWJ1dGVzLAorCQljb25zdCBz dGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF9mbl9hdHRyaWJ1dGUsCisJCQkJCSAgICBzdGQ6 OnN0cmluZz4+ICZzdHJpbmdfYXR0cmlidXRlcywKKwkJY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpw YWlyPGdjY19qaXRfZm5fYXR0cmlidXRlLAorCQkJCQkgICAgc3RkOjp2ZWN0b3I8aW50Pj4+CisJ CQkJCSAgICAmaW50X2FycmF5X2F0dHJpYnV0ZXMpOwogCiAgIGx2YWx1ZSAqCiAgIG5ld19nbG9i YWwgKGxvY2F0aW9uICpsb2MsCiAJICAgICAgZW51bSBnY2Nfaml0X2dsb2JhbF9raW5kIGtpbmQs CiAJICAgICAgdHlwZSAqdHlwZSwKIAkgICAgICBjb25zdCBjaGFyICpuYW1lLAotCSAgICAgIGVu dW0gZ2xvYmFsX3Zhcl9mbGFncyBmbGFncyk7CisJICAgICAgZW51bSBnbG9iYWxfdmFyX2ZsYWdz IGZsYWdzLAorCSAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxnY2Nfaml0X3Zhcmlh YmxlX2F0dHJpYnV0ZSwKKwkJCQkJICBzdGQ6OnN0cmluZz4+ICZhdHRyaWJ1dGVzKTsKIAogICBs dmFsdWUgKgogICBuZXdfZ2xvYmFsX2luaXRpYWxpemVkIChsb2NhdGlvbiAqbG9jLApAQCAtMTIx LDcgKzE0MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBp bml0aWFsaXplcl9udW1fZWxlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p ZCAqaW5pdGlhbGl6ZXIsCiAJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgIGVudW0gZ2xvYmFs X3Zhcl9mbGFncyBmbGFncyk7CisJCQkgIGVudW0gZ2xvYmFsX3Zhcl9mbGFncyBmbGFncywKKwkJ CSAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPAorCQkJCQkgICAgZ2NjX2ppdF92YXJpYWJs ZV9hdHRyaWJ1dGUsCisJCQkJCSAgICBzdGQ6OnN0cmluZz4+CisJCQkJCSAgICAmYXR0cmlidXRl cyk7CiAKICAgcnZhbHVlICoKICAgbmV3X2N0b3IgKGxvY2F0aW9uICpsb2csCkBAIC0zMDYsNyAr MzI5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICBlbnVtIGdjY19qaXRfZ2xvYmFs X2tpbmQga2luZCwKICAgICAgICAgICAgICAgICAgICB0eXBlICp0eXBlLAogCQkgICBjb25zdCBj aGFyICpuYW1lLAotCQkgICBlbnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MpOworCQkgICBlbnVt IGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MsCisJCSAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6cGFp cjxnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSwKKwkJCQkJICAgICAgIHN0ZDo6c3RyaW5nPj4g JmF0dHJpYnV0ZXMpOwogICBsdmFsdWUgKgogICBnbG9iYWxfZmluYWxpemVfbHZhbHVlICh0cmVl IGlubmVyKTsKIApAQCAtNTAwLDcgKzUyNSw5IEBAIHB1YmxpYzoKICAgbHZhbHVlICoKICAgbmV3 X2xvY2FsIChsb2NhdGlvbiAqbG9jLAogCSAgICAgdHlwZSAqdHlwZSwKLQkgICAgIGNvbnN0IGNo YXIgKm5hbWUpOworCSAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkgICAgIGNvbnN0IHN0ZDo6dmVj dG9yPHN0ZDo6cGFpcjxnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSwKKwkJCQkJIHN0ZDo6c3Ry aW5nPj4gJmF0dHJpYnV0ZXMpOwogCiAgIGJsb2NrKgogICBuZXdfYmxvY2sgKGNvbnN0IGNoYXIg Km5hbWUpOwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjIGIvZ2NjL2ppdC9q aXQtcmVjb3JkaW5nLmNjCmluZGV4IDliNWI4MDA1ZWJlLi42NDMwMWEzMjllYyAxMDA2NDQKLS0t IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjCisrKyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5j YwpAQCAtMjksNiArMjksNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcz LiAgSWYgbm90IHNlZQogI2luY2x1ZGUgImppdC1idWlsdGlucy5oIgogI2luY2x1ZGUgImppdC1y ZWNvcmRpbmcuaCIKICNpbmNsdWRlICJqaXQtcGxheWJhY2suaCIKKyNpbmNsdWRlIDxzc3RyZWFt PgogCiBuYW1lc3BhY2UgZ2NjIHsKIG5hbWVzcGFjZSBqaXQgewpAQCAtMjA2OCw3ICsyMDY5LDcg QEAgcmVjb3JkaW5nOjptZW1lbnRvOjpnZXRfZGVidWdfc3RyaW5nICgpCiB2b2lkCiByZWNvcmRp bmc6Om1lbWVudG86OndyaXRlX3RvX2R1bXAgKGR1bXAgJmQpCiB7Ci0gIGQud3JpdGUoIiAgJXNc biIsIGdldF9kZWJ1Z19zdHJpbmcgKCkpOworICBkLndyaXRlICgiICAlc1xuIiwgZ2V0X2RlYnVn X3N0cmluZyAoKSk7CiB9CiAKIC8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBjbGFzcyBnY2M6Ompp dDo6cmVjb3JkaW5nOjpzdHJpbmcuICAqLwpAQCAtNDAyNiw2ICs0MDI3LDEzIEBAIHZvaWQgcmVj b3JkaW5nOjpsdmFsdWU6OnNldF9hbGlnbm1lbnQgKHVuc2lnbmVkIGJ5dGVzKQogICBtX2FsaWdu bWVudCA9IGJ5dGVzOwogfQogCit2b2lkIHJlY29yZGluZzo6bHZhbHVlOjphZGRfc3RyaW5nX2F0 dHJpYnV0ZSAoCisJZ2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGUgYXR0cmlidXRlLAorCWNvbnN0 IGNoYXIqIHZhbHVlKQoreworICBtX3N0cmluZ19hdHRyaWJ1dGVzLnB1c2hfYmFjayAoc3RkOjpt YWtlX3BhaXIgKGF0dHJpYnV0ZSwgc3RkOjpzdHJpbmcgKHZhbHVlKSkpOworfQorCiAvKiBUaGUg aW1wbGVtZW50YXRpb24gb2YgY2xhc3MgZ2NjOjpqaXQ6OnJlY29yZGluZzo6cGFyYW0uICAqLwog CiAvKiBJbXBsZW1lbnRhdGlvbiBvZiBwdXJlIHZpcnR1YWwgaG9vayByZWNvcmRpbmc6Om1lbWVu dG86OnJlcGxheV9pbnRvCkBAIC00MTAyLDcgKzQxMTAsMTAgQEAgcmVjb3JkaW5nOjpmdW5jdGlv bjo6ZnVuY3Rpb24gKGNvbnRleHQgKmN0eHQsCiAgIG1fYnVpbHRpbl9pZCAoYnVpbHRpbl9pZCks CiAgIG1fbG9jYWxzICgpLAogICBtX2Jsb2NrcyAoKSwKLSAgbV9mbl9wdHJfdHlwZSAoTlVMTCkK KyAgbV9mbl9wdHJfdHlwZSAoTlVMTCksCisgIG1fYXR0cmlidXRlcyAoKSwKKyAgbV9zdHJpbmdf YXR0cmlidXRlcyAoKSwKKyAgbV9pbnRfYXJyYXlfYXR0cmlidXRlcyAoKQogewogICBmb3IgKGlu dCBpID0gMDsgaTwgbnVtX3BhcmFtczsgaSsrKQogICAgIHsKQEAgLTQxNjEsNyArNDE3MiwxMCBA QCByZWNvcmRpbmc6OmZ1bmN0aW9uOjpyZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpCiAJCQkJICAg ICBtX25hbWUtPmNfc3RyICgpLAogCQkJCSAgICAgJnBhcmFtcywKIAkJCQkgICAgIG1faXNfdmFy aWFkaWMsCi0JCQkJICAgICBtX2J1aWx0aW5faWQpKTsKKwkJCQkgICAgIG1fYnVpbHRpbl9pZCwK KwkJCQkgICAgIG1fYXR0cmlidXRlcywKKwkJCQkgICAgIG1fc3RyaW5nX2F0dHJpYnV0ZXMsCisJ CQkJICAgICBtX2ludF9hcnJheV9hdHRyaWJ1dGVzKSk7CiB9CiAKIC8qIENyZWF0ZSBhIHJlY29y ZGluZzo6bG9jYWwgaW5zdGFuY2UgYW5kIGFkZCBpdCB0bwpAQCAtNDIxMCw2ICs0MjI0LDQwIEBA IHJlY29yZGluZzo6ZnVuY3Rpb246Om5ld19ibG9jayAoY29uc3QgY2hhciAqbmFtZSkKIHZvaWQK IHJlY29yZGluZzo6ZnVuY3Rpb246OndyaXRlX3RvX2R1bXAgKGR1bXAgJmQpCiB7CisgIGZvciAo YXV0byBhdHRyOiBtX2F0dHJpYnV0ZXMpCisgIHsKKyAgICBjb25zdCBjaGFyKiBhdHRyaWJ1dGUg PSBmbl9hdHRyaWJ1dGVfdG9fc3RyaW5nIChhdHRyKTsKKyAgICBpZiAoYXR0cmlidXRlKQorICAg ICAgZC53cml0ZSAoIl9fYXR0cmlidXRlKCVzKV9fXG4iLCBhdHRyaWJ1dGUpOworICB9CisgIGZv ciAoYXV0byBhdHRyOiBtX3N0cmluZ19hdHRyaWJ1dGVzKQorICB7CisgICAgZ2NjX2ppdF9mbl9h dHRyaWJ1dGUmIG5hbWUgPSBzdGQ6OmdldDwwPihhdHRyKTsKKyAgICBzdGQ6OnN0cmluZyYgdmFs dWUgPSBzdGQ6OmdldDwxPihhdHRyKTsKKyAgICBjb25zdCBjaGFyKiBhdHRyaWJ1dGUgPSBmbl9h dHRyaWJ1dGVfdG9fc3RyaW5nIChuYW1lKTsKKworICAgIGlmIChhdHRyaWJ1dGUpCisgICAgICBk LndyaXRlICgiX19hdHRyaWJ1dGUoJXMoXCIlc1wiKSlfX1xuIiwgYXR0cmlidXRlLCB2YWx1ZS5j X3N0cigpKTsKKyAgfQorICBmb3IgKGF1dG8gYXR0cjogbV9pbnRfYXJyYXlfYXR0cmlidXRlcykK KyAgeworICAgIGdjY19qaXRfZm5fYXR0cmlidXRlJiBuYW1lID0gc3RkOjpnZXQ8MD4oYXR0cik7 CisgICAgc3RkOjp2ZWN0b3I8aW50PiYgdmFsdWVzID0gc3RkOjpnZXQ8MT4oYXR0cik7CisgICAg Y29uc3QgY2hhciogYXR0cmlidXRlID0gZm5fYXR0cmlidXRlX3RvX3N0cmluZyAobmFtZSk7Cisg ICAgaWYgKGF0dHJpYnV0ZSkKKyAgICB7CisgICAgICBkLndyaXRlICgiX19hdHRyaWJ1dGUoJXMo IiwgYXR0cmlidXRlKTsKKyAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUo KTsgKytpKQorICAgICAgeworCWlmIChpID4gMCkKKwkgIGQud3JpdGUgKCIsICVkIiwgdmFsdWVz W2ldKTsKKwllbHNlCisJICBkLndyaXRlICgiJWQiLCB2YWx1ZXNbaV0pOworICAgICAgfQorICAg ICAgZC53cml0ZSAoIikpX19cbiIpOworICAgIH0KKyAgfQorCiAgIHN3aXRjaCAobV9raW5kKQog ICAgIHsKICAgICBkZWZhdWx0OiBnY2NfdW5yZWFjaGFibGUgKCk7CkBAIC00NDA0LDYgKzQ0NTIs MzEgQEAgcmVjb3JkaW5nOjpmdW5jdGlvbjo6Z2V0X2FkZHJlc3MgKHJlY29yZGluZzo6bG9jYXRp b24gKmxvYykKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZAorcmVjb3JkaW5nOjpmdW5jdGlv bjo6YWRkX2F0dHJpYnV0ZSAoZ2NjX2ppdF9mbl9hdHRyaWJ1dGUgYXR0cmlidXRlKQoreworICBt X2F0dHJpYnV0ZXMucHVzaF9iYWNrIChhdHRyaWJ1dGUpOworfQorCit2b2lkCityZWNvcmRpbmc6 OmZ1bmN0aW9uOjphZGRfc3RyaW5nX2F0dHJpYnV0ZSAoZ2NjX2ppdF9mbl9hdHRyaWJ1dGUgYXR0 cmlidXRlLAorCQkJCQkgICBjb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAgbV9zdHJpbmdfYXR0cmli dXRlcy5wdXNoX2JhY2sgKAorCXN0ZDo6bWFrZV9wYWlyIChhdHRyaWJ1dGUsIHN0ZDo6c3RyaW5n ICh2YWx1ZSkpKTsKK30KKwordm9pZAorcmVjb3JkaW5nOjpmdW5jdGlvbjo6YWRkX2ludGVnZXJf YXJyYXlfYXR0cmlidXRlICgKKwlnY2Nfaml0X2ZuX2F0dHJpYnV0ZSBhdHRyaWJ1dGUsCisJY29u c3QgaW50KiB2YWx1ZSwKKwlzaXplX3QgbGVuZ3RoKQoreworICBtX2ludF9hcnJheV9hdHRyaWJ1 dGVzLnB1c2hfYmFjayAoc3RkOjptYWtlX3BhaXIgKAorICAgIGF0dHJpYnV0ZSwKKyAgICBzdGQ6 OnZlY3RvcjxpbnQ+ICh2YWx1ZSwgdmFsdWUgKyBsZW5ndGgpKSk7Cit9CisKIC8qIEltcGxlbWVu dGF0aW9uIG9mIHJlY29yZGluZzo6bWVtZW50bzo6bWFrZV9kZWJ1Z19zdHJpbmcgZm9yCiAgICBm dW5jdGlvbnMuICAqLwogCkBAIC00NDI1LDYgKzQ0OTgsMzkgQEAgc3RhdGljIGNvbnN0IGNoYXIg KiBjb25zdCBuYW1lc19vZl9mdW5jdGlvbl9raW5kc1tdID0gewogCiAvKiBJbXBsZW1lbnRhdGlv biBvZiByZWNvcmRpbmc6Om1lbWVudG86OndyaXRlX3JlcHJvZHVjZXIgZm9yIGZ1bmN0aW9ucy4g Ki8KIAorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbl9hdHRyaWJ1dGVfcmVwcm9kdWNlcl9z dHJpbmdzW10gPQoreworICAiR0NDX0pJVF9GTl9BVFRSSUJVVEVfQUxJQVMiLAorICAiR0NDX0pJ VF9GTl9BVFRSSUJVVEVfQUxXQVlTX0lOTElORSIsCisgICJHQ0NfSklUX0ZOX0FUVFJJQlVURV9J TkxJTkUiLAorICAiR0NDX0pJVF9GTl9BVFRSSUJVVEVfTk9JTkxJTkUiLAorICAiR0NDX0pJVF9G Tl9BVFRSSUJVVEVfVEFSR0VUIiwKKyAgIkdDQ19KSVRfRk5fQVRUUklCVVRFX1VTRUQiLAorICAi R0NDX0pJVF9GTl9BVFRSSUJVVEVfVklTSUJJTElUWSIsCisgICJHQ0NfSklUX0ZOX0FUVFJJQlVU RV9DT0xEIiwKKyAgIkdDQ19KSVRfRk5fQVRUUklCVVRFX1JFVFVSTlNfVFdJQ0UiLAorICAiR0ND X0pJVF9GTl9BVFRSSUJVVEVfUFVSRSIsCisgICJHQ0NfSklUX0ZOX0FUVFJJQlVURV9DT05TVCIs CisgICJHQ0NfSklUX0ZOX0FUVFJJQlVURV9XRUFLIiwKKyAgIkdDQ19KSVRfRk5fQVRUUklCVVRF X05PTk5VTEwiLAorfTsKKworc3RkOjpzdHJpbmcKK2dldF92ZWN0b3JfaW50X2RlYnVnIChzdGQ6 OnZlY3RvcjxpbnQ+ICZ2YWx1ZXMpCit7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHM7CisKKyAgcyA8 PCAieyI7CisgIGZvcihhdXRvIGl0ID0gdmFsdWVzLmJlZ2luKCk7IGl0ICE9IHZhbHVlcy5lbmQo KTsgKytpdCkKKyAgICB7CisgICAgICBpZiAoaXQgIT0gdmFsdWVzLmJlZ2luKCkgKQorICAgICAg ICBzIDw8ICIsICI7CisgICAgICBzIDw8ICppdDsKKyAgICB9CisgIHMgPDwgIn0iOworICByZXR1 cm4gcy5zdHIoKTsKK30KKwogdm9pZAogcmVjb3JkaW5nOjpmdW5jdGlvbjo6d3JpdGVfcmVwcm9k dWNlciAocmVwcm9kdWNlciAmcikKIHsKQEAgLTQ0NjcsNiArNDU3MywyNSBAQCByZWNvcmRpbmc6 OmZ1bmN0aW9uOjp3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQogCSAgIG1fcGFyYW1z Lmxlbmd0aCAoKSwKIAkgICBwYXJhbXNfaWQsCiAJICAgbV9pc192YXJpYWRpYyk7CisgIGZvciAo YXV0byBhdHRyaWJ1dGUgOiBtX2F0dHJpYnV0ZXMpCisgICAgci53cml0ZSgiICBnY2Nfaml0X2Z1 bmN0aW9uX2FkZF9hdHRyaWJ1dGUgKCVzLCAlcyk7XG4iLAorCSAgICBpZCwKKwkgICAgZm5fYXR0 cmlidXRlX3JlcHJvZHVjZXJfc3RyaW5nc1thdHRyaWJ1dGVdKTsKKyAgZm9yIChhdXRvIGF0dHJp YnV0ZSA6IG1fc3RyaW5nX2F0dHJpYnV0ZXMpCisgICAgci53cml0ZSgiICBnY2Nfaml0X2Z1bmN0 aW9uX2FkZF9zdHJpbmdfYXR0cmlidXRlICglcywgJXMsIFwiJXNcIik7XG4iLAorCSAgICBpZCwK KwkgICAgZm5fYXR0cmlidXRlX3JlcHJvZHVjZXJfc3RyaW5nc1tzdGQ6OmdldDwwPihhdHRyaWJ1 dGUpXSwKKwkgICAgc3RkOjpnZXQ8MT4oYXR0cmlidXRlKS5jX3N0cigpKTsKKyAgZm9yIChhdXRv IGF0dHJpYnV0ZSA6IG1faW50X2FycmF5X2F0dHJpYnV0ZXMpIHsKKyAgICByLndyaXRlKCIgIGdj Y19qaXRfZnVuY3Rpb25fYWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlICglcyxcbiIKKwkgICAg IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzLFxuIgor CSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlu dFtdKSVzLFxuIgorCSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJWx1KTtcbiIsCisJICAgIGlkLAorCSAgICBmbl9hdHRyaWJ1dGVfcmVwcm9kdWNl cl9zdHJpbmdzW3N0ZDo6Z2V0PDA+KGF0dHJpYnV0ZSldLAorCSAgICBnZXRfdmVjdG9yX2ludF9k ZWJ1ZyAoc3RkOjpnZXQ8MT4oYXR0cmlidXRlKSkuY19zdHIoKSwKKwkgICAgc3RkOjpnZXQ8MT4o YXR0cmlidXRlKS5zaXplICgpKTsKKyAgfQogfQogCiAKQEAgLTQ4NzksMTIgKzUwMDQsMTQgQEAg cmVjb3JkaW5nOjpnbG9iYWw6OnJlcGxheV9pbnRvIChyZXBsYXllciAqcikKIAkJCQkgLyBtX3R5 cGUtPmRlcmVmZXJlbmNlICgpLT5nZXRfc2l6ZSAoKSwKIAkJCQkgbV9pbml0aWFsaXplciwKIAkJ CQkgcGxheWJhY2tfc3RyaW5nIChtX25hbWUpLAotCQkJCSBtX2ZsYWdzKQorCQkJCSBtX2ZsYWdz LAorCQkJCSBtX3N0cmluZ19hdHRyaWJ1dGVzKQogICAgIDogci0+bmV3X2dsb2JhbCAocGxheWJh Y2tfbG9jYXRpb24gKHIsIG1fbG9jKSwKIAkJICAgICBtX2tpbmQsCiAJCSAgICAgbV90eXBlLT5w bGF5YmFja190eXBlICgpLAogCQkgICAgIHBsYXliYWNrX3N0cmluZyAobV9uYW1lKSwKLQkJICAg ICBtX2ZsYWdzKTsKKwkJICAgICBtX2ZsYWdzLAorCQkgICAgIG1fc3RyaW5nX2F0dHJpYnV0ZXMp OwogCiAgIGlmIChtX3Rsc19tb2RlbCAhPSBHQ0NfSklUX1RMU19NT0RFTF9OT05FKQogICAgIGds b2JhbC0+c2V0X3Rsc19tb2RlbCAocmVjb3JkaW5nOjp0bHNfbW9kZWxzW21fdGxzX21vZGVsXSk7 CkBAIC00OTQzLDYgKzUwNzAsMTUgQEAgcmVjb3JkaW5nOjpnbG9iYWw6OndyaXRlX3RvX2R1bXAg KGR1bXAgJmQpCiAgICAgICBicmVhazsKICAgICB9CiAKKyAgZm9yIChhdXRvIGF0dHI6IG1fc3Ry aW5nX2F0dHJpYnV0ZXMpCisgIHsKKyAgICBnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSYgbmFt ZSA9IHN0ZDo6Z2V0PDA+KGF0dHIpOworICAgIHN0ZDo6c3RyaW5nJiB2YWx1ZSA9IHN0ZDo6Z2V0 PDE+KGF0dHIpOworICAgIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZSA9IHZhcmlhYmxlX2F0dHJpYnV0 ZV90b19zdHJpbmcgKG5hbWUpOworCisgICAgaWYgKGF0dHJpYnV0ZSkKKyAgICAgIGQud3JpdGUg KCJfX2F0dHJpYnV0ZSglcyhcIiVzXCIpKV9fXG4iLCBhdHRyaWJ1dGUsIHZhbHVlLmNfc3RyKCkp OworICB9CiAgIGQud3JpdGUgKCIlcyAlcyIsCiAJICAgbV90eXBlLT5nZXRfZGVidWdfc3RyaW5n ICgpLAogCSAgIGdldF9kZWJ1Z19zdHJpbmcgKCkpOwpAQCAtNTAxMyw2ICs1MTQ5LDEwIEBAIHN0 YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGxzX21vZGVsX2VudW1fc3RyaW5nc1tdID0gewogICAi R0NDX0pJVF9UTFNfTU9ERUxfTE9DQUxfRVhFQyIsCiB9OwogCitzdGF0aWMgY29uc3QgY2hhciAq IGNvbnN0IGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlX2VudW1fc3RyaW5nc1tdID0geworICAi R0NDX0pJVF9WQVJJQUJMRV9BVFRSSUJVVEVfVklTSUJJTElUWSIsCit9OworCiB2b2lkCiByZWNv cmRpbmc6Omdsb2JhbDo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikKIHsKQEAgLTUw NDIsNiArNTE4MiwxMyBAQCByZWNvcmRpbmc6Omdsb2JhbDo6d3JpdGVfcmVwcm9kdWNlciAocmVw cm9kdWNlciAmcikKICAgICAgaWQsCiAgICAgIG1fbGlua19zZWN0aW9uLT5jX3N0ciAoKSk7CiAK KyAgZm9yIChhdXRvIGF0dHJpYnV0ZSA6IG1fc3RyaW5nX2F0dHJpYnV0ZXMpCisgICAgci53cml0 ZSgiICBnY2Nfaml0X2x2YWx1ZV9hZGRfc3RyaW5nX2F0dHJpYnV0ZSAoJXMsICVzLCBcIiVzXCIp O1xuIiwKKwkgICAgaWQsCisJICAgIGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlX2VudW1fc3Ry aW5nc1tzdGQ6OmdldDwwPihhdHRyaWJ1dGUpXSwKKwkgICAgc3RkOjpnZXQ8MT4oYXR0cmlidXRl KS5jX3N0cigpKTsKKworCiAgIGlmIChtX2luaXRpYWxpemVyKQogICAgIHN3aXRjaCAobV90eXBl LT5kZXJlZmVyZW5jZSAoKS0+Z2V0X3NpemUgKCkpCiAgICAgICB7CkBAIC02NjIyLDcgKzY3Njks OCBAQCByZWNvcmRpbmc6OmxvY2FsOjpyZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpCiAgIHBsYXli YWNrOjpsdmFsdWUgKm9iaiA9IG1fZnVuYy0+cGxheWJhY2tfZnVuY3Rpb24gKCkKICAgICAgIC0+ bmV3X2xvY2FsIChwbGF5YmFja19sb2NhdGlvbiAociwgbV9sb2MpLAogCQkgICBtX3R5cGUtPnBs YXliYWNrX3R5cGUgKCksCi0JCSAgIHBsYXliYWNrX3N0cmluZyAobV9uYW1lKSk7CisJCSAgIHBs YXliYWNrX3N0cmluZyAobV9uYW1lKSwKKwkJICAgbV9zdHJpbmdfYXR0cmlidXRlcyk7CiAKICAg aWYgKG1fcmVnX25hbWUgIT0gTlVMTCkKICAgICBvYmotPnNldF9yZWdpc3Rlcl9uYW1lIChtX3Jl Z19uYW1lLT5jX3N0ciAoKSk7CkBAIC02NjQ0LDkgKzY3OTIsOSBAQCByZWNvcmRpbmc6OmxvY2Fs Ojp3cml0ZV90b19kdW1wIChkdW1wICZkKQogewogICBpZiAoZC51cGRhdGVfbG9jYXRpb25zICgp KQogICAgIG1fbG9jID0gZC5tYWtlX2xvY2F0aW9uICgpOwotICBkLndyaXRlKCIgICVzICVzO1xu IiwKLQkgIG1fdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKLQkgIGdldF9kZWJ1Z19zdHJpbmcg KCkpOworICBkLndyaXRlICgiICAlcyAlcztcbiIsCisJICAgbV90eXBlLT5nZXRfZGVidWdfc3Ry aW5nICgpLAorCSAgIGdldF9kZWJ1Z19zdHJpbmcgKCkpOwogfQogCiB2b2lkCmRpZmYgLS1naXQg YS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaCBiL2djYy9qaXQvaml0LXJlY29yZGluZy5oCmluZGV4 IDRhODA4Mjk5MWZiLi40NDY5NGY2MTBmYSAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcmVjb3Jk aW5nLmgKKysrIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKQEAgLTIzLDYgKzIzLDEwIEBAIGFs b25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAKICNpbmNs dWRlICJqaXQtY29tbW9uLmgiCiAjaW5jbHVkZSAiaml0LWxvZ2dpbmcuaCIKKyNpbmNsdWRlICJs aWJnY2NqaXQuaCIKKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CiAKIGNs YXNzIHRpbWVyOwogCkBAIC0xMjE2LDcgKzEyMjAsOCBAQCBwdWJsaWM6CiAgICAgbV9saW5rX3Nl Y3Rpb24gKE5VTEwpLAogICAgIG1fcmVnX25hbWUgKE5VTEwpLAogICAgIG1fdGxzX21vZGVsIChH Q0NfSklUX1RMU19NT0RFTF9OT05FKSwKLSAgICBtX2FsaWdubWVudCAoMCkKKyAgICBtX2FsaWdu bWVudCAoMCksCisgICAgbV9zdHJpbmdfYXR0cmlidXRlcyAoKQogICB7fQogCiAgIHBsYXliYWNr OjpsdmFsdWUgKgpAQCAtMTIzNiw2ICsxMjQxLDkgQEAgcHVibGljOgogICBhc19ydmFsdWUgKCkg eyByZXR1cm4gdGhpczsgfQogCiAgIGNvbnN0IGNoYXIgKmFjY2Vzc19hc19ydmFsdWUgKHJlcHJv ZHVjZXIgJnIpIG92ZXJyaWRlOworCisgIHZvaWQgYWRkX3N0cmluZ19hdHRyaWJ1dGUgKGdjY19q aXRfdmFyaWFibGVfYXR0cmlidXRlIGF0dHJpYnV0ZSwgY29uc3QgY2hhciogdmFsdWUpOworCiAg IHZpcnR1YWwgY29uc3QgY2hhciAqYWNjZXNzX2FzX2x2YWx1ZSAocmVwcm9kdWNlciAmcik7CiAg IHZpcnR1YWwgYm9vbCBpc19nbG9iYWwgKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgdm9p ZCBzZXRfdGxzX21vZGVsIChlbnVtIGdjY19qaXRfdGxzX21vZGVsIG1vZGVsKTsKQEAgLTEyNDks NiArMTI1Nyw4IEBAIHByb3RlY3RlZDoKICAgc3RyaW5nICptX3JlZ19uYW1lOwogICBlbnVtIGdj Y19qaXRfdGxzX21vZGVsIG1fdGxzX21vZGVsOwogICB1bnNpZ25lZCBtX2FsaWdubWVudDsKKyAg c3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlLAorCSAgICAg IHN0ZDo6c3RyaW5nPj4gbV9zdHJpbmdfYXR0cmlidXRlczsKIH07CiAKIGNsYXNzIHBhcmFtIDog cHVibGljIGx2YWx1ZQpAQCAtMTM0Miw2ICsxMzUyLDEwIEBAIHB1YmxpYzoKIAogICBydmFsdWUg KmdldF9hZGRyZXNzIChsb2NhdGlvbiAqbG9jKTsKIAorICB2b2lkIGFkZF9hdHRyaWJ1dGUgKGdj Y19qaXRfZm5fYXR0cmlidXRlIGF0dHJpYnV0ZSk7CisgIHZvaWQgYWRkX3N0cmluZ19hdHRyaWJ1 dGUgKGdjY19qaXRfZm5fYXR0cmlidXRlIGF0dHJpYnV0ZSwgY29uc3QgY2hhciogdmFsdWUpOwor ICB2b2lkIGFkZF9pbnRlZ2VyX2FycmF5X2F0dHJpYnV0ZSAoZ2NjX2ppdF9mbl9hdHRyaWJ1dGUg YXR0cmlidXRlLCBjb25zdCBpbnQqIHZhbHVlLCBzaXplX3QgbGVuZ3RoKTsKKwogcHJpdmF0ZToK ICAgc3RyaW5nICogbWFrZV9kZWJ1Z19zdHJpbmcgKCkgZmluYWwgb3ZlcnJpZGU7CiAgIHZvaWQg d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikgZmluYWwgb3ZlcnJpZGU7CkBAIC0xMzU3 LDYgKzEzNzEsOSBAQCBwcml2YXRlOgogICBhdXRvX3ZlYzxsb2NhbCAqPiBtX2xvY2FsczsKICAg YXV0b192ZWM8YmxvY2sgKj4gbV9ibG9ja3M7CiAgIHR5cGUgKm1fZm5fcHRyX3R5cGU7CisgIHN0 ZDo6dmVjdG9yPGdjY19qaXRfZm5fYXR0cmlidXRlPiBtX2F0dHJpYnV0ZXM7CisgIHN0ZDo6dmVj dG9yPHN0ZDo6cGFpcjxnY2Nfaml0X2ZuX2F0dHJpYnV0ZSwgc3RkOjpzdHJpbmc+PiBtX3N0cmlu Z19hdHRyaWJ1dGVzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF9mbl9hdHRyaWJ1 dGUsIHN0ZDo6dmVjdG9yPGludD4+PiBtX2ludF9hcnJheV9hdHRyaWJ1dGVzOwogfTsKIAogY2xh c3MgYmxvY2sgOiBwdWJsaWMgbWVtZW50bwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQu Y2MgYi9nY2Mvaml0L2xpYmdjY2ppdC5jYwppbmRleCAwNDUxYjRkZjdmOS4uMzM3ZDRlYTNiOTUg MTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0LmNjCisrKyBiL2djYy9qaXQvbGliZ2Njaml0 LmNjCkBAIC0zOTY1LDYgKzM5NjUsNTEgQEAgZ2NjX2ppdF90eXBlX2dldF9hbGlnbmVkIChnY2Nf aml0X3R5cGUgKnR5cGUsCiAgIHJldHVybiAoZ2NjX2ppdF90eXBlICopdHlwZS0+Z2V0X2FsaWdu ZWQgKGFsaWdubWVudF9pbl9ieXRlcyk7CiB9CiAKK3ZvaWQKK2djY19qaXRfZnVuY3Rpb25fYWRk X2F0dHJpYnV0ZSAoZ2NjX2ppdF9mdW5jdGlvbiAqZnVuYywKKwkJCQlnY2Nfaml0X2ZuX2F0dHJp YnV0ZSBhdHRyaWJ1dGUpCit7CisgIFJFVFVSTl9JRl9GQUlMIChmdW5jLCBOVUxMLCBOVUxMLCAi TlVMTCBmdW5jIik7CisKKyAgZnVuYy0+YWRkX2F0dHJpYnV0ZSAoYXR0cmlidXRlKTsKK30KKwor dm9pZAorZ2NjX2ppdF9mdW5jdGlvbl9hZGRfc3RyaW5nX2F0dHJpYnV0ZSAoZ2NjX2ppdF9mdW5j dGlvbiAqZnVuYywKKwkJCQkgICAgICAgZ2NjX2ppdF9mbl9hdHRyaWJ1dGUgYXR0cmlidXRlLAor CQkJCSAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAgUkVUVVJOX0lGX0ZBSUwgKGZ1bmMs IE5VTEwsIE5VTEwsICJOVUxMIGZ1bmMiKTsKKworICBmdW5jLT5hZGRfc3RyaW5nX2F0dHJpYnV0 ZSAoYXR0cmlidXRlLCB2YWx1ZSk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gYWRkcyBhbiBhdHRy aWJ1dGUgd2l0aCBtdWx0aXBsZSBpbnRlZ2VyIHZhbHVlcy4gIEZvciBleGFtcGxlCisgICBgbm9u bnVsbCgxLCAyKWAuICBUaGUgbnVtYmVycyBpbiBgdmFsdWVzYCBhcmUgc3VwcG9zZWQgdG8gbWFw IGhvdyB0aGV5CisgICBzaG91bGQgYmUgd3JpdHRlbiBpbiBDIGNvZGUuICBTbyBmb3IgYG5vbm51 bGwoMSwgMilgLCB5b3Ugc2hvdWxkIHBhc3MgYDFgCisgICBhbmQgYDJgIGluIGB2YWx1ZXNgIChh bmQgc2V0IGBsZW5ndGhgIHRvIGAyYCkuICovCit2b2lkCitnY2Nfaml0X2Z1bmN0aW9uX2FkZF9p bnRlZ2VyX2FycmF5X2F0dHJpYnV0ZSAoZ2NjX2ppdF9mdW5jdGlvbiAqZnVuYywKKwkJCQkJICAg ICAgZ2NjX2ppdF9mbl9hdHRyaWJ1dGUgYXR0cmlidXRlLAorCQkJCQkgICAgICBjb25zdCBpbnQq IHZhbHVlcywKKwkJCQkJICAgICAgc2l6ZV90IGxlbmd0aCkKK3sKKyAgUkVUVVJOX0lGX0ZBSUwg KGZ1bmMsIE5VTEwsIE5VTEwsICJOVUxMIGZ1bmMiKTsKKyAgUkVUVVJOX0lGX0ZBSUwgKHZhbHVl cywgTlVMTCwgTlVMTCwgIk5VTEwgdmFsdWVzIik7CisKKyAgZnVuYy0+YWRkX2ludGVnZXJfYXJy YXlfYXR0cmlidXRlIChhdHRyaWJ1dGUsIHZhbHVlcywgbGVuZ3RoKTsKK30KKwordm9pZAorZ2Nj X2ppdF9sdmFsdWVfYWRkX3N0cmluZ19hdHRyaWJ1dGUgKGdjY19qaXRfbHZhbHVlICp2YXJpYWJs ZSwKKwkJCQkgICAgIGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlIGF0dHJpYnV0ZSwKKwkJCQkg ICAgIGNvbnN0IGNoYXIqIHZhbHVlKQoreworICBSRVRVUk5fSUZfRkFJTCAodmFyaWFibGUsIE5V TEwsIE5VTEwsICJOVUxMIHZhcmlhYmxlIik7CisKKyAgdmFyaWFibGUtPmFkZF9zdHJpbmdfYXR0 cmlidXRlIChhdHRyaWJ1dGUsIHZhbHVlKTsKK30KKwogLyogUHVibGljIGVudHJ5cG9pbnQuICBT ZWUgZGVzY3JpcHRpb24gaW4gbGliZ2Njaml0LmguCiAKICAgIEFmdGVyIGVycm9yLWNoZWNraW5n LCB0aGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgdGhlCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdj Y2ppdC5oIGIvZ2NjL2ppdC9saWJnY2NqaXQuaAppbmRleCA3NDlmNmMyNDE3Ny4uNzdhYWQyZThm MjAgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0LmgKKysrIGIvZ2NjL2ppdC9saWJnY2Nq aXQuaApAQCAtMTk5OSw2ICsxOTk5LDU1IEBAIGdjY19qaXRfdmVjdG9yX3R5cGVfZ2V0X2VsZW1l bnRfdHlwZSAoZ2NjX2ppdF92ZWN0b3JfdHlwZSAqdmVjdG9yX3R5cGUpOwogZXh0ZXJuIGdjY19q aXRfdHlwZSAqCiBnY2Nfaml0X3R5cGVfdW5xdWFsaWZpZWQgKGdjY19qaXRfdHlwZSAqdHlwZSk7 CiAKKyNkZWZpbmUgTElCR0NDSklUX0hBVkVfQVRUUklCVVRFUworCisvKiBGdW5jdGlvbiBhdHRy aWJ1dGVzLiAgKi8KK2VudW0gZ2NjX2ppdF9mbl9hdHRyaWJ1dGUKK3sKKyAgR0NDX0pJVF9GTl9B VFRSSUJVVEVfQUxJQVMsCisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX0FMV0FZU19JTkxJTkUsCisg IEdDQ19KSVRfRk5fQVRUUklCVVRFX0lOTElORSwKKyAgR0NDX0pJVF9GTl9BVFRSSUJVVEVfTk9J TkxJTkUsCisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX1RBUkdFVCwKKyAgR0NDX0pJVF9GTl9BVFRS SUJVVEVfVVNFRCwKKyAgR0NDX0pJVF9GTl9BVFRSSUJVVEVfVklTSUJJTElUWSwKKyAgR0NDX0pJ VF9GTl9BVFRSSUJVVEVfQ09MRCwKKyAgR0NDX0pJVF9GTl9BVFRSSUJVVEVfUkVUVVJOU19UV0lD RSwKKyAgR0NDX0pJVF9GTl9BVFRSSUJVVEVfUFVSRSwKKyAgR0NDX0pJVF9GTl9BVFRSSUJVVEVf Q09OU1QsCisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX1dFQUssCisgIEdDQ19KSVRfRk5fQVRUUklC VVRFX05PTk5VTEwsCit9OworCisvKiBBZGQgYW4gYXR0cmlidXRlIHRvIGEgZnVuY3Rpb24uICAq LworZXh0ZXJuIHZvaWQKK2djY19qaXRfZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZSAoZ2NjX2ppdF9m dW5jdGlvbiAqZnVuYywKKwkJCQllbnVtIGdjY19qaXRfZm5fYXR0cmlidXRlIGF0dHJpYnV0ZSk7 CisKK2V4dGVybiB2b2lkCitnY2Nfaml0X2Z1bmN0aW9uX2FkZF9zdHJpbmdfYXR0cmlidXRlIChn Y2Nfaml0X2Z1bmN0aW9uICpmdW5jLAorCQkJCSAgICAgICBlbnVtIGdjY19qaXRfZm5fYXR0cmli dXRlIGF0dHJpYnV0ZSwKKwkJCQkgICAgICAgY29uc3QgY2hhciogdmFsdWUpOworCitleHRlcm4g dm9pZAorZ2NjX2ppdF9mdW5jdGlvbl9hZGRfaW50ZWdlcl9hcnJheV9hdHRyaWJ1dGUgKAorICBn Y2Nfaml0X2Z1bmN0aW9uICpmdW5jLAorICBlbnVtIGdjY19qaXRfZm5fYXR0cmlidXRlIGF0dHJp YnV0ZSwKKyAgY29uc3QgaW50KiB2YWx1ZSwKKyAgc2l6ZV90IGxlbmd0aCk7CisKKy8qIFZhcmlh YmxlIGF0dHJpYnV0ZXMuICAqLworZW51bSBnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZQorewor ICBHQ0NfSklUX1ZBUklBQkxFX0FUVFJJQlVURV9WSVNJQklMSVRZLAorfTsKKworLyogQWRkIGEg c3RyaW5nIGF0dHJpYnV0ZSB0byBhIHZhcmlhYmxlLiAgKi8KK2V4dGVybiB2b2lkCitnY2Nfaml0 X2x2YWx1ZV9hZGRfc3RyaW5nX2F0dHJpYnV0ZSAoZ2NjX2ppdF9sdmFsdWUgKnZhcmlhYmxlLAor CQkJCSAgICAgZW51bSBnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSBhdHRyaWJ1dGUsCisJCQkJ ICAgICBjb25zdCBjaGFyKiB2YWx1ZSk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlm IC8qIF9fY3BsdXNwbHVzICovCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdC5tYXAgYi9n Y2Mvaml0L2xpYmdjY2ppdC5tYXAKaW5kZXggOGI5MGEwZTJmZjMuLjNiZjhiYjVkOWI5IDEwMDY0 NAotLS0gYS9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQubWFw CkBAIC0yNzYsMyArMjc2LDExIEBAIExJQkdDQ0pJVF9BQklfMjUgewogICBnbG9iYWw6CiAgICAg Z2NjX2ppdF90eXBlX2dldF9yZXN0cmljdDsKIH0gTElCR0NDSklUX0FCSV8yNDsKKworTElCR0ND SklUX0FCSV8yNiB7CisgIGdsb2JhbDoKKyAgICBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1 dGU7CisgICAgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfc3RyaW5nX2F0dHJpYnV0ZTsKKyAgICBnY2Nf aml0X2x2YWx1ZV9hZGRfc3RyaW5nX2F0dHJpYnV0ZTsKKyAgICBnY2Nfaml0X2Z1bmN0aW9uX2Fk ZF9pbnRlZ2VyX2FycmF5X2F0dHJpYnV0ZTsKK30gTElCR0NDSklUX0FCSV8yNTsKZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL2ppdC5leHAgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy9q aXQuZXhwCmluZGV4IDhiZjdlNTFjMjRmLi42NTdiNDU0YTAwMyAxMDA2NDQKLS0tIGEvZ2NjL3Rl c3RzdWl0ZS9qaXQuZGcvaml0LmV4cAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy9qaXQuZXhw CkBAIC04OTksOCArODk5LDQxIEBAIHByb2Mgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0IHsg YXJncyB9IHsKIAlwYXNzICIke2FzbV9maWxlbmFtZX0gb3V0cHV0IHBhdHRlcm4gdGVzdCwgJHtk Zy1vdXRwdXQtdGV4dH0iCiAJdmVyYm9zZSAiUGFzc2VkIHRlc3QgZm9yIG91dHB1dCBwYXR0ZXJu ICR7ZGctb3V0cHV0LXRleHR9IiAzCiAgICAgfQorfQorCisjIEFzc3VtaW5nIHRoYXQgYSAucyBm aWxlIGhhcyBiZWVuIHdyaXR0ZW4gb3V0IG5hbWVkCisjIE9VVFBVVF9GSUxFTkFNRSwgY2hlY2sg dGhhdCB0aGUgYXJndW1lbnQgZG9lc24ndCBtYXRjaAorIyB0aGUgb3V0cHV0IGZpbGUuCitwcm9j IGppdC12ZXJpZnktYXNzZW1ibGVyLW91dHB1dC1ub3QgeyBhcmdzIH0geworICAgIHZlcmJvc2Ug ImppdC12ZXJpZnktYXNzZW1ibGVyOiAkYXJncyIKKworICAgIHNldCBkZy1vdXRwdXQtdGV4dCBb bGluZGV4ICRhcmdzIDBdCisgICAgdmVyYm9zZSAiZGctb3V0cHV0LXRleHQ6ICR7ZGctb3V0cHV0 LXRleHR9IgorCisgICAgdXB2YXIgMiBuYW1lIG5hbWUKKyAgICB2ZXJib3NlICJuYW1lOiAkbmFt ZSIKKworICAgIHVwdmFyIDIgcHJvZyBwcm9nCisgICAgdmVyYm9zZSAicHJvZzogJHByb2ciCisg ICAgc2V0IGFzbV9maWxlbmFtZSBbaml0LWdldC1vdXRwdXQtZmlsZW5hbWUgJHByb2ddCisgICAg dmVyYm9zZSAiICBhc21fZmlsZW5hbWU6ICR7YXNtX2ZpbGVuYW1lfSIKIAorICAgICMgUmVhZCB0 aGUgYXNzZW1ibHkgZmlsZS4KKyAgICBzZXQgZiBbb3BlbiAkYXNtX2ZpbGVuYW1lIHJdCisgICAg c2V0IGNvbnRlbnQgW3JlYWQgJGZdCisgICAgY2xvc2UgJGYKKworICAgICMgVmVyaWZ5IHRoYXQg dGhlIGFzc2VtYmx5IG1hdGNoZXMgdGhlIHJlZ2V4LgorICAgIGlmIHsgW3JlZ2V4cCAke2RnLW91 dHB1dC10ZXh0fSAkY29udGVudF0gfSB7CisJZmFpbCAiJHthc21fZmlsZW5hbWV9IG91dHB1dCBw YXR0ZXJuIHRlc3QsIGlzICR7Y29udGVudH0sIHNob3VsZCBtYXRjaCAke2RnLW91dHB1dC10ZXh0 fSIKKwl2ZXJib3NlICJGYWlsZWQgdGVzdCBmb3Igb3V0cHV0IHBhdHRlcm4gJHtkZy1vdXRwdXQt dGV4dH0iIDMKKyAgICB9IGVsc2UgeworCXBhc3MgIiR7YXNtX2ZpbGVuYW1lfSBvdXRwdXQgcGF0 dGVybiB0ZXN0LCAke2RnLW91dHB1dC10ZXh0fSIKKwl2ZXJib3NlICJQYXNzZWQgdGVzdCBmb3Ig b3V0cHV0IHBhdHRlcm4gJHtkZy1vdXRwdXQtdGV4dH0iIDMKKyAgICB9CiB9CisKKwogIyBBc3N1 bWluZyB0aGF0IGEgLm8gZmlsZSBoYXMgYmVlbiB3cml0dGVuIG91dCBuYW1lZAogIyBPVVRQVVRf RklMRU5BTUUsIGludm9rZSB0aGUgZHJpdmVyIHRvIHRyeSB0byB0dXJuIGl0IGludG8KICMgYW4g ZXhlY3V0YWJsZSwgYW5kIHRyeSB0byBydW4gdGhlIHJlc3VsdC4KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtYWxpYXMtYXR0cmlidXRlLmMgYi9nY2MvdGVzdHN1aXRlL2pp dC5kZy90ZXN0LWFsaWFzLWF0dHJpYnV0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5lYjI5MDAzZGZjOQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv aml0LmRnL3Rlc3QtYWxpYXMtYXR0cmlidXRlLmMKQEAgLTAsMCArMSw1MCBAQAorLyogeyBkZy1k byBjb21waWxlIHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9ICovCisKKyNpbmNsdWRlIDxzdGRsaWIu aD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisKKyNkZWZp bmUgVEVTVF9DT01QSUxJTkdfVE9fRklMRQorI2RlZmluZSBPVVRQVVRfS0lORCAgICAgIEdDQ19K SVRfT1VUUFVUX0tJTkRfQVNTRU1CTEVSCisjZGVmaW5lIE9VVFBVVF9GSUxFTkFNRSAgIm91dHB1 dC1vZi10ZXN0LWFsaWFzLWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2 b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEp Cit7CisgIC8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6CisKK3ZvaWQg eHh4ICgpIHt9Cit2b2lkIGYgKCkgX19hdHRyaWJ1dGVfXyAoKGFsaWFzICgieHh4IikpKTsKKyAg Ki8KKyAgZ2NjX2ppdF90eXBlICp2b2lkX3R5cGUgPQorICAgIGdjY19qaXRfY29udGV4dF9nZXRf dHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX1ZPSUQpOworCisgIC8qIENyZWF0aW5nIHRoZSBgeHh4 YCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9mdW5jdGlvbiAqeHh4X2Z1bmMgPQorICAgIGdjY19q aXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIE5VTEwsCisgICAgICAgICAgR0NDX0pJVF9G VU5DVElPTl9FWFBPUlRFRCwKKyAgICAgICAgICB2b2lkX3R5cGUsCisgICAgICAgICAgInh4eCIs CisgICAgICAgICAgMCwgTlVMTCwKKyAgICAgICAgICAwKTsKKworICAvKiBDcmVhdGluZyB0aGUg YGZgIGZ1bmN0aW9uLiAqLworICBnY2Nfaml0X2Z1bmN0aW9uICpmX2Z1bmMgPQorICAgIGdjY19q aXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIE5VTEwsCisJCQkJICBHQ0NfSklUX0ZVTkNU SU9OX0lNUE9SVEVELAorCQkJCSAgdm9pZF90eXBlLAorCQkJCSAgImYiLAorCQkJCSAgMCwgTlVM TCwKKwkJCQkgIDApOworICBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9zdHJpbmdfYXR0cmlidXRlKGZf ZnVuYywgR0NDX0pJVF9GTl9BVFRSSUJVVEVfQUxJQVMsICJ4eHgiKTsKKworICAvKiB2b2lkIHh4 eCAoKSB7fSAqLworICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3 X2Jsb2NrICh4eHhfZnVuYywgTlVMTCk7CisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfdm9pZF9y ZXR1cm4gKGJsb2NrLCBOVUxMKTsKK30KKworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktb3V0 cHV0LWZpbGUtd2FzLWNyZWF0ZWQgIiIgfSB9ICovCisvKiBDaGVjayB0aGF0IHRoZSBhdHRyaWJ1 dGUgd2FzIGFwcGxpZWQgY29ycmVjdGx5ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1h c3NlbWJsZXItb3V0cHV0ICIuc2V0XFxzK2YseHh4IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtYWx3YXlzX2lubGluZS1hdHRyaWJ1dGUuYyBiL2djYy90ZXN0 c3VpdGUvaml0LmRnL3Rlc3QtYWx3YXlzX2lubGluZS1hdHRyaWJ1dGUuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWMzZjM4NjY2M2YKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWFsd2F5c19pbmxpbmUtYXR0cmlidXRlLmMKQEAg LTAsMCArMSwxNTMgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQtKi0qIH0g fSAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1 ZGUgImxpYmdjY2ppdC5oIgorCisjZGVmaW5lIFRFU1RfRVNDSEVXU19TRVRfT1BUSU9OUworc3Rh dGljIHZvaWQgc2V0X29wdGlvbnMgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgY29uc3QgY2hhciAq YXJndjApCit7CisgIC8vIFNldCAiLU8wIi4KKyAgZ2NjX2ppdF9jb250ZXh0X3NldF9pbnRfb3B0 aW9uKGN0eHQsIEdDQ19KSVRfSU5UX09QVElPTl9PUFRJTUlaQVRJT05fTEVWRUwsIDApOworfQor CisjZGVmaW5lIFRFU1RfQ09NUElMSU5HX1RPX0ZJTEUKKyNkZWZpbmUgT1VUUFVUX0tJTkQgICAg ICBHQ0NfSklUX09VVFBVVF9LSU5EX0FTU0VNQkxFUgorI2RlZmluZSBPVVRQVVRfRklMRU5BTUUg ICJvdXRwdXQtb2YtdGVzdC1hbHdheXNfaW5saW5lLWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAi aGFybmVzcy5oIgorCitnY2Nfaml0X2Z1bmN0aW9uKgorY3JlYXRlX2Z1bmN0aW9uIChnY2Nfaml0 X2NvbnRleHQgKmN0eHQsCisJCSBjb25zdCBjaGFyICpmdW5jX25hbWUsCisJCSBnY2Nfaml0X3R5 cGUgKmludF90eXBlLAorCQkgZ2NjX2ppdF90eXBlICpwaW50X3R5cGUpCit7CisgIC8qIFRoZSBg YWAgZnVuY3Rpb24gYXJndW1lbnQgKi8KKyAgZ2NjX2ppdF9wYXJhbSAqYSA9IGdjY19qaXRfY29u dGV4dF9uZXdfcGFyYW0gKGN0eHQsIE5VTEwsIHBpbnRfdHlwZSwgImEiKTsKKyAgZ2NjX2ppdF9m dW5jdGlvbiAqZnVuYyA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwg TlVMTCwKKyAgICAgICAgICBHQ0NfSklUX0ZVTkNUSU9OX0lOVEVSTkFMLAorICAgICAgICAgIGlu dF90eXBlLAorICAgICAgICAgIGZ1bmNfbmFtZSwKKyAgICAgICAgICAxLCAmYSwKKyAgICAgICAg ICAwKTsKKworICBnY2Nfaml0X2Jsb2NrICppZl9jb25kID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9u X25ld19ibG9jayAoZnVuYywgImlmX2NvbmQiKTsKKyAgZ2NjX2ppdF9ibG9jayAqaWZfYm9keSA9 CisgICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZ1bmMsICJpZl9ib2R5Iik7CisgIGdj Y19qaXRfYmxvY2sgKmFmdGVyX2lmID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAo ZnVuYywgImFmdGVyX2lmIik7CisKKyAgLyogaWYgKCFhKSAqLworICBnY2Nfaml0X2Jsb2NrX2Vu ZF93aXRoX2NvbmRpdGlvbmFsICgKKyAgICBpZl9jb25kLCBOVUxMLAorICAgIGdjY19qaXRfY29u dGV4dF9uZXdfY29tcGFyaXNvbiAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9D T01QQVJJU09OX0VRLAorICAgICAgZ2NjX2ppdF9wYXJhbV9hc19ydmFsdWUgKGEpLAorICAgICAg Z2NjX2ppdF9jb250ZXh0X251bGwgKGN0eHQsIHBpbnRfdHlwZSkpLAorICAgIGlmX2JvZHksCisg ICAgYWZ0ZXJfaWYpOworICAvKiByZXR1cm4gLTE7ICovCisgIGdjY19qaXRfYmxvY2tfZW5kX3dp dGhfcmV0dXJuICgKKyAgICBpZl9ib2R5LCBOVUxMLAorICAgIGdjY19qaXRfY29udGV4dF9uZXdf cnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgLTEpKTsKKworICAvKiByZXR1cm4gKmE7 ICovCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuICgKKyAgICBhZnRlcl9pZiwgTlVM TCwKKyAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKAorICAgICAgZ2NjX2ppdF9ydmFsdWVf ZGVyZWZlcmVuY2UgKAorCWdjY19qaXRfcGFyYW1fYXNfcnZhbHVlIChhKSwgTlVMTCkpKTsKKwor ICByZXR1cm4gZnVuYzsKK30KKworCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0 ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIC8qIExldCdzIHRyeSB0byBpbmplY3QgdGhl IGVxdWl2YWxlbnQgb2Y6CitfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpCitzdGF0aWMg aW5saW5lIGludCByZW1vdmVkIChpbnQgKmEpIHsKKyAgaWYgKCFhKSB7CisgICAgcmV0dXJuIC0x OworICB9CisgIHJldHVybiAqYTsKK30KK3N0YXRpYyBpbnQgbm90X3JlbW92ZWQgKGludCAqYSkg eworICBpZiAoIWEpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgcmV0dXJuICphOworfQoraW50 IGZvbyAoKSB7CisgIGludCB4ID0gMDsKKyAgeCArPSByZW1vdmVkKE5VTEwpOworICB4ICs9IG5v dF9yZW1vdmVkKE5VTEwpOworICByZXR1cm4geDsKK30KKyAgKi8KKyAgZ2NjX2ppdF90eXBlICpp bnRfdHlwZSA9CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZ UEVfSU5UKTsKKyAgZ2NjX2ppdF90eXBlICpwaW50X3R5cGUgPSBnY2Nfaml0X3R5cGVfZ2V0X3Bv aW50ZXIgKGludF90eXBlKTsKKworICAvKiBDcmVhdGluZyB0aGUgYHJlbW92ZWRgIGZ1bmN0aW9u LiAqLworICBnY2Nfaml0X2Z1bmN0aW9uICpyZW1vdmVkX2Z1bmMgPQorICAgIGNyZWF0ZV9mdW5j dGlvbiAoY3R4dCwgInJlbW92ZWQiLCBpbnRfdHlwZSwgcGludF90eXBlKTsKKyAgLyogVGhpcyBv bmUgaXMgdG8gZGVjbGFyZSB0aGUgZnVuY3Rpb24gYXMgImlubGluZSIgKi8KKyAgZ2NjX2ppdF9m dW5jdGlvbl9hZGRfYXR0cmlidXRlKHJlbW92ZWRfZnVuYywgR0NDX0pJVF9GTl9BVFRSSUJVVEVf SU5MSU5FKTsKKyAgLyogX19hdHRyaWJ1dGVfXyAoKGFsd2F5c19pbmxpbmUpKSAqLworICBnY2Nf aml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGUocmVtb3ZlZF9mdW5jLCBHQ0NfSklUX0ZOX0FUVFJJ QlVURV9BTFdBWVNfSU5MSU5FKTsKKworICAvKiBDcmVhdGluZyB0aGUgYG5vdF9yZW1vdmVkYCBm dW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9mdW5jdGlvbiAqbm90X3JlbW92ZWRfZnVuYyA9CisgICAg Y3JlYXRlX2Z1bmN0aW9uIChjdHh0LCAibm90X3JlbW92ZWQiLCBpbnRfdHlwZSwgcGludF90eXBl KTsKKworICAvKiBDcmVhdGluZyB0aGUgYGZvb2AgZnVuY3Rpb24uICovCisgIGdjY19qaXRfZnVu Y3Rpb24gKmZvb19mdW5jID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0 LCBOVUxMLAorCQkJCSAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgIGludF90eXBl LAorCQkJCSAgImZvbyIsCisJCQkJICAwLCBOVUxMLAorCQkJCSAgMCk7CisKKyAgZ2NjX2ppdF9i bG9jayAqZm9vX2Jsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZvb19mdW5jLCBO VUxMKTsKKworICAvKiBCdWlsZCBsb2NhbHM6ICAqLworICBnY2Nfaml0X2x2YWx1ZSAqeCA9Cisg ICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdfbG9jYWwgKGZvb19mdW5jLCBOVUxMLCBpbnRfdHlwZSwg IngiKTsKKworICAvKiBpbnQgeCA9IDA7ICovCisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1l bnQgKAorICAgIGZvb19ibG9jaywgTlVMTCwKKyAgICB4LAorICAgIGdjY19qaXRfY29udGV4dF9u ZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgMCkpOworCisgIC8qIHggKz0gcmVt b3ZlZChOVUxMKTsgKi8KKyAgZ2NjX2ppdF9ydmFsdWUgKm51bGwgPSBnY2Nfaml0X2NvbnRleHRf bnVsbCAoY3R4dCwgcGludF90eXBlKTsKKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudF9v cCAoCisgICAgZm9vX2Jsb2NrLCBOVUxMLAorICAgIHgsCisgICAgR0NDX0pJVF9CSU5BUllfT1Bf UExVUywKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsIE5VTEwsIHJlbW92ZWRf ZnVuYywgMSwgJm51bGwpKTsKKyAgCisgIC8qIHggKz0gbm90X3JlbW92ZWQoTlVMTCk7ICovCisg IGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnRfb3AgKAorICAgIGZvb19ibG9jaywgTlVMTCwK KyAgICB4LAorICAgIEdDQ19KSVRfQklOQVJZX09QX1BMVVMsCisgICAgZ2NjX2ppdF9jb250ZXh0 X25ld19jYWxsIChjdHh0LCBOVUxMLCBub3RfcmVtb3ZlZF9mdW5jLCAxLCAmbnVsbCkpOworCisg IC8qIHJldHVybiB4OyAqLworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoZm9vX2Js b2NrLCBOVUxMLCBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUoeCkpOworfQorCisvKiB7IGRnLWZp bmFsIHsgaml0LXZlcmlmeS1vdXRwdXQtZmlsZS13YXMtY3JlYXRlZCAiIiB9IH0gKi8KKy8qIENo ZWNrIHRoYXQgdGhlICJyZW1vdmVkIiBmdW5jdGlvbiB3YXMgaW5saW5lZCwgYnV0IG5vdCB0aGUg b3RoZXJzICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0LW5v dCAiLnR5cGVcXHMrcmVtb3ZlZCxcXHMrQGZ1bmN0aW9uIiB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBqaXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQgIi50eXBlXFxzK25vdF9yZW1vdmVkLFxccytA ZnVuY3Rpb24iIH0gfSAqLworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktYXNzZW1ibGVyLW91 dHB1dCAiLnR5cGVcXHMrZm9vLFxccytAZnVuY3Rpb24iIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb2xkLWF0dHJpYnV0ZS5jIGIvZ2NjL3Rlc3RzdWl0ZS9q aXQuZGcvdGVzdC1jb2xkLWF0dHJpYnV0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi44ZGM3ZWM1YTM0YgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv aml0LmRnL3Rlc3QtY29sZC1hdHRyaWJ1dGUuYwpAQCAtMCwwICsxLDU0IEBACisvKiB7IGRnLWRv IGNvbXBpbGUgeyB0YXJnZXQgeDg2XzY0LSotKiB9IH0gKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5o PgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKworLyogV2Ug ZG9uJ3Qgd2FudCBzZXRfb3B0aW9ucygpIGluIGhhcm5lc3MuaCB0byBzZXQgLU8yIHRvIHNlZSB0 aGF0IHRoZSBjb2xkCisgICBhdHRyaWJ1dGUgYWZmZWN0cyB0aGUgb3B0aW1pemF0aW9ucy4gKi8K KyNkZWZpbmUgVEVTVF9FU0NIRVdTX1NFVF9PUFRJT05TCitzdGF0aWMgdm9pZCBzZXRfb3B0aW9u cyAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBjb25zdCBjaGFyICphcmd2MCkKK3sKKyAgLy8gU2V0 ICItTzIiLgorICBnY2Nfaml0X2NvbnRleHRfc2V0X2ludF9vcHRpb24oY3R4dCwgR0NDX0pJVF9J TlRfT1BUSU9OX09QVElNSVpBVElPTl9MRVZFTCwgMik7Cit9CisKKyNkZWZpbmUgVEVTVF9DT01Q SUxJTkdfVE9fRklMRQorI2RlZmluZSBPVVRQVVRfS0lORCAgICAgIEdDQ19KSVRfT1VUUFVUX0tJ TkRfQVNTRU1CTEVSCisjZGVmaW5lIE9VVFBVVF9GSUxFTkFNRSAgIm91dHB1dC1vZi10ZXN0LWNv bGQtYXR0cmlidXRlLmMucyIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9j b2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgLyogTGV0 J3MgdHJ5IHRvIGluamVjdCB0aGUgZXF1aXZhbGVudCBvZjoKK2ludAorX19hdHRyaWJ1dGVfXyAo KGNvbGQpKQordCgpCit7CisgIHJldHVybiAtMTsKK30KKworICAqLworICBnY2Nfaml0X3R5cGUg KmludF90eXBlID0KKyAgICBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRf VFlQRV9JTlQpOworCisgIGdjY19qaXRfZnVuY3Rpb24gKmZ1bmNfdCA9CisgICAgZ2NjX2ppdF9j b250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgTlVMTCwKKwkJCQkgIEdDQ19KSVRfRlVOQ1RJT05f RVhQT1JURUQsCisJCQkJICBpbnRfdHlwZSwKKwkJCQkgICJ0IiwKKwkJCQkgIDAsIE5VTEwsCisJ CQkJICAwKTsKKyAgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfYXR0cmlidXRlKGZ1bmNfdCwgR0NDX0pJ VF9GTl9BVFRSSUJVVEVfQ09MRCk7CisgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9m dW5jdGlvbl9uZXdfYmxvY2sgKGZ1bmNfdCwgTlVMTCk7CisgIGdjY19qaXRfcnZhbHVlICpyZXQg PSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwKKyAgICBpbnRfdHlw ZSwKKyAgICAtMSk7CisKKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLCBO VUxMLCByZXQpOworfQorCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1vdXRwdXQtZmlsZS13 YXMtY3JlYXRlZCAiIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LWFzc2VtYmxl ci1vdXRwdXQgIm9ybCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90 ZXN0LWNvbnN0LWF0dHJpYnV0ZS5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb25zdC1h dHRyaWJ1dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzA2NzQy ZDE2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbnN0 LWF0dHJpYnV0ZS5jCkBAIC0wLDAgKzEsMTM0IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJn ZXQgeDg2XzY0LSotKiB9IH0gKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0 ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKworLyogV2UgZG9uJ3Qgd2FudCBzZXRf b3B0aW9ucygpIGluIGhhcm5lc3MuaCB0byBzZXQgLU8zIHRvIHNlZSB0aGF0IHRoZSBjb25zdAor ICAgYXR0cmlidXRlIGFmZmVjdHMgdGhlIG9wdGltaXphdGlvbnMuICovCisjZGVmaW5lIFRFU1Rf RVNDSEVXU19TRVRfT1BUSU9OUworc3RhdGljIHZvaWQgc2V0X29wdGlvbnMgKGdjY19qaXRfY29u dGV4dCAqY3R4dCwgY29uc3QgY2hhciAqYXJndjApCit7CisgIC8vIFNldCAiLU8zIi4KKyAgZ2Nj X2ppdF9jb250ZXh0X3NldF9pbnRfb3B0aW9uKGN0eHQsIEdDQ19KSVRfSU5UX09QVElPTl9PUFRJ TUlaQVRJT05fTEVWRUwsIDMpOworfQorCisjZGVmaW5lIFRFU1RfQ09NUElMSU5HX1RPX0ZJTEUK KyNkZWZpbmUgT1VUUFVUX0tJTkQgICAgICBHQ0NfSklUX09VVFBVVF9LSU5EX0FTU0VNQkxFUgor I2RlZmluZSBPVVRQVVRfRklMRU5BTUUgICJvdXRwdXQtb2YtdGVzdC1jb25zdC1hdHRyaWJ1dGUu Yy5zIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRf Y29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICAvKiBMZXQncyB0cnkgdG8gaW5q ZWN0IHRoZSBlcXVpdmFsZW50IG9mOgorX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSkKK2ludCBmb28g KGludCB4KTsKK2ludCB4eHgodm9pZCkKK3sKKyAgaW50IHggPSA0NTsKKyAgaW50IHN1bSA9IDA7 CisKKyAgd2hpbGUgKHggPj49IDEpCisgICAgc3VtICs9IGZvbyAoeCkgKiAyOworICByZXR1cm4g c3VtOworfQorICAqLworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0KKyAgICBnY2Nfaml0X2Nv bnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQpOworCisgIC8qIENyZWF0aW5n IHRoZSBgZm9vYCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9wYXJhbSAqbiA9CisgICAgZ2NjX2pp dF9jb250ZXh0X25ld19wYXJhbSAoY3R4dCwgTlVMTCwgaW50X3R5cGUsICJ4Iik7CisgIGdjY19q aXRfcGFyYW0gKnBhcmFtc1sxXSA9IHtufTsKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm9vX2Z1bmMg PQorICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIE5VTEwsCisgICAgICAg ICAgR0NDX0pJVF9GVU5DVElPTl9JTVBPUlRFRCwKKyAgICAgICAgICBpbnRfdHlwZSwKKyAgICAg ICAgICAiZm9vIiwKKyAgICAgICAgICAxLCBwYXJhbXMsCisgICAgICAgICAgMCk7CisgIGdjY19q aXRfZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZShmb29fZnVuYywgR0NDX0pJVF9GTl9BVFRSSUJVVEVf Q09OU1QpOworCisgIC8qIENyZWF0aW5nIHRoZSBgeHh4YCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2pp dF9mdW5jdGlvbiAqeHh4X2Z1bmMgPQorICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24g KGN0eHQsIE5VTEwsCisJCQkJICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgaW50 X3R5cGUsCisJCQkJICAieHh4IiwKKwkJCQkgIDAsIE5VTEwsCisJCQkJICAwKTsKKworICBnY2Nf aml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrICh4eHhfZnVuYywg TlVMTCk7CisKKyAgLyogQnVpbGQgbG9jYWxzOiAgKi8KKyAgZ2NjX2ppdF9sdmFsdWUgKnggPQor ICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsICh4eHhfZnVuYywgTlVMTCwgaW50X3R5cGUs ICJ4Iik7CisgIGdjY19qaXRfbHZhbHVlICpzdW0gPQorICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3 X2xvY2FsICh4eHhfZnVuYywgTlVMTCwgaW50X3R5cGUsICJzdW0iKTsKKworICAvKiBpbnQgeCA9 IDQ1ICovCisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQgKAorICAgIGJsb2NrLCBOVUxM LAorICAgIHgsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQs IGludF90eXBlLCA0NSkpOworICAvKiBpbnQgc3VtID0gMCAqLworICBnY2Nfaml0X2Jsb2NrX2Fk ZF9hc3NpZ25tZW50ICgKKyAgICBibG9jaywgTlVMTCwKKyAgICBzdW0sCisgICAgZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAwKSk7CisKKyAgLyog d2hpbGUgKHggPj49IDEpIHsgc3VtICs9IGZvbyAoeCkgKiAyOyB9ICovCisgIGdjY19qaXRfYmxv Y2sgKmxvb3BfY29uZCA9CisgICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKHh4eF9mdW5j LCAibG9vcF9jb25kIik7CisgIGdjY19qaXRfYmxvY2sgKmxvb3BfYm9keSA9CisgICAgZ2NjX2pp dF9mdW5jdGlvbl9uZXdfYmxvY2sgKHh4eF9mdW5jLCAibG9vcF9ib2R5Iik7CisgIGdjY19qaXRf YmxvY2sgKmFmdGVyX2xvb3AgPQorICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrICh4eHhf ZnVuYywgImFmdGVyX2xvb3AiKTsKKworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX2p1bXAgKGJs b2NrLCBOVUxMLCBsb29wX2NvbmQpOworCisKKyAgLyogaWYgKHggPj49IDEpICovCisgIC8qIFNp bmNlIGdjY2ppdCBkb2Vzbid0ICh5ZXQ/KSBoYXZlIHN1cHBvcnQgZm9yIGA+Pj1gIG9wZXJhdG9y LCB3ZSB3aWxsIGRlY29tcG9zZSBpdCBpbnRvOgorICAgICBgaWYgKHggPSB4ID4+IDEpYCAqLwor ICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50X29wICgKKyAgICBsb29wX2NvbmQsIE5VTEws CisgICAgeCwKKyAgICBHQ0NfSklUX0JJTkFSWV9PUF9SU0hJRlQsCisgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAxKSk7CisgIC8qIFRoZSBj b25kaXRpb24gaXRzZWxmICovCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfY29uZGl0aW9uYWwg KAorICAgIGxvb3BfY29uZCwgTlVMTCwKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbXBhcmlz b24gKAorICAgICAgIGN0eHQsIE5VTEwsCisgICAgICAgR0NDX0pJVF9DT01QQVJJU09OX05FLAor ICAgICAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoeCksCisgICAgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAwKSksCisgICAgYWZ0ZXJf bG9vcCwKKyAgICBsb29wX2JvZHkpOworCisgIC8qIHN1bSArPSBmb28gKHgpICogMjsgKi8KKyAg Z2NjX2ppdF9ydmFsdWUgKmFyZyA9IGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSh4KTsKKyAgZ2Nj X2ppdF9ibG9ja19hZGRfYXNzaWdubWVudF9vcCAoCisgICAgbG9vcF9ib2R5LCBOVUxMLAorICAg IHgsCisgICAgR0NDX0pJVF9CSU5BUllfT1BfUExVUywKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3 X2JpbmFyeV9vcCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9CSU5BUllfT1Bf TVVMVCwgaW50X3R5cGUsCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsIE5V TEwsIGZvb19mdW5jLCAxLCAmYXJnKSwKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVl X2Zyb21faW50ICgKKwljdHh0LAorCWludF90eXBlLAorCTIpKSk7CisgIGdjY19qaXRfYmxvY2tf ZW5kX3dpdGhfanVtcCAobG9vcF9ib2R5LCBOVUxMLCBsb29wX2NvbmQpOworCisgIC8qIHJldHVy biBzdW07ICovCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChhZnRlcl9sb29wLCBO VUxMLCBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUoc3VtKSk7Cit9CisKKy8qIHsgZGctZmluYWwg eyBqaXQtdmVyaWZ5LW91dHB1dC1maWxlLXdhcy1jcmVhdGVkICIiIH0gfSAqLworLyogQ2hlY2sg dGhhdCB0aGUgbG9vcCB3YXMgb3B0aW1pemVkIGF3YXkgKi8KKy8qIHsgZGctZmluYWwgeyBqaXQt dmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQtbm90ICJqbmUiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1ub2lubGluZS1hdHRyaWJ1dGUuYyBiL2djYy90ZXN0c3Vp dGUvaml0LmRnL3Rlc3Qtbm9pbmxpbmUtYXR0cmlidXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjg0OTMzZTYwMDEwCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9qaXQuZGcvdGVzdC1ub2lubGluZS1hdHRyaWJ1dGUuYwpAQCAtMCwwICsxLDExNCBA QAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9ICovCisKKyNpbmNs dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0 LmgiCisKKy8qIFdlIGRvbid0IHdhbnQgc2V0X29wdGlvbnMoKSBpbiBoYXJuZXNzLmggdG8gc2V0 IC1PMiB0byBzZWUgdGhhdCB0aGUgYG5vaW5saW5lYAorICAgYXR0cmlidXRlIGFmZmVjdHMgdGhl IG9wdGltaXphdGlvbnMuICovCisjZGVmaW5lIFRFU1RfRVNDSEVXU19TRVRfT1BUSU9OUworc3Rh dGljIHZvaWQgc2V0X29wdGlvbnMgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgY29uc3QgY2hhciAq YXJndjApCit7CisgIC8vIFNldCAiLU8yIi4KKyAgZ2NjX2ppdF9jb250ZXh0X3NldF9pbnRfb3B0 aW9uKGN0eHQsIEdDQ19KSVRfSU5UX09QVElPTl9PUFRJTUlaQVRJT05fTEVWRUwsIDIpOworfQor CisjZGVmaW5lIFRFU1RfQ09NUElMSU5HX1RPX0ZJTEUKKyNkZWZpbmUgT1VUUFVUX0tJTkQgICAg ICBHQ0NfSklUX09VVFBVVF9LSU5EX0FTU0VNQkxFUgorI2RlZmluZSBPVVRQVVRfRklMRU5BTUUg ICJvdXRwdXQtb2YtdGVzdC1ub2lubGluZS1hdHRyaWJ1dGUuYy5zIgorI2luY2x1ZGUgImhhcm5l c3MuaCIKKworZ2NjX2ppdF9mdW5jdGlvbioKK2NyZWF0ZV9mdW5jdGlvbiAoZ2NjX2ppdF9jb250 ZXh0ICpjdHh0LAorCQkgY29uc3QgY2hhciAqZnVuY19uYW1lLAorCQkgZ2NjX2ppdF90eXBlICpp bnRfdHlwZSwKKwkJIGludCByZXR1cm5lZF92YWx1ZSkKK3sKKyAgZ2NjX2ppdF9mdW5jdGlvbiAq ZnVuYyA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgTlVMTCwKKyAg ICAgICAgICBHQ0NfSklUX0ZVTkNUSU9OX0lOVEVSTkFMLAorICAgICAgICAgIGludF90eXBlLAor ICAgICAgICAgIGZ1bmNfbmFtZSwKKyAgICAgICAgICAwLCBOVUxMLAorICAgICAgICAgIDApOwor CisgIGdjY19qaXRfYmxvY2sgKmZvb19ibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2Nr IChmdW5jLCBOVUxMKTsKKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGZvb19ibG9j aywgTlVMTCwKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwg aW50X3R5cGUsIHJldHVybmVkX3ZhbHVlKSk7CisKKyAgcmV0dXJuIGZ1bmM7Cit9CisKKwordm9p ZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQor eworICAvKiBMZXQncyB0cnkgdG8gaW5qZWN0IHRoZSBlcXVpdmFsZW50IG9mOgorX19hdHRyaWJ1 dGVfXyAoKG5vaW5saW5lKSkKK3N0YXRpYyBpbnQgbm90X3JlbW92ZWQoKSB7IHJldHVybiAxOyB9 CitzdGF0aWMgaW50IHJlbW92ZWQoKSB7IHJldHVybiAyOyB9CitpbnQgZm9vICgpIHsKKyAgaW50 IHggPSAwOworICB4ICs9IHJlbW92ZWQoKTsKKyAgeCArPSBub3RfcmVtb3ZlZCgpOworICByZXR1 cm4geDsKK30KKyAgKi8KKyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9CisgICAgZ2NjX2ppdF9j b250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfSU5UKTsKKworICAvKiBDcmVhdGlu ZyB0aGUgYG5vdF9yZW1vdmVkYCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9mdW5jdGlvbiAqbm90 X3JlbW92ZWRfZnVuYyA9CisgICAgY3JlYXRlX2Z1bmN0aW9uIChjdHh0LCAibm90X3JlbW92ZWQi LCBpbnRfdHlwZSwgMSk7CisgIC8qIF9fYXR0cmlidXRlX18gKChub19pbmxpbmUpKSAqLworICBn Y2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGUobm90X3JlbW92ZWRfZnVuYywgR0NDX0pJVF9G Tl9BVFRSSUJVVEVfTk9JTkxJTkUpOworCisgIC8qIENyZWF0aW5nIHRoZSBgcmVtb3ZlZGAgZnVu Y3Rpb24uICovCisgIGdjY19qaXRfZnVuY3Rpb24gKnJlbW92ZWRfZnVuYyA9CisgICAgY3JlYXRl X2Z1bmN0aW9uIChjdHh0LCAicmVtb3ZlZCIsIGludF90eXBlLCAyKTsKKworICAvKiBDcmVhdGlu ZyB0aGUgYGZvb2AgZnVuY3Rpb24uICovCisgIGdjY19qaXRfZnVuY3Rpb24gKmZvb19mdW5jID0K KyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCBOVUxMLAorCQkJCSAgR0ND X0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgIGludF90eXBlLAorCQkJCSAgImZvbyIsCisJ CQkJICAwLCBOVUxMLAorCQkJCSAgMCk7CisKKyAgZ2NjX2ppdF9ibG9jayAqZm9vX2Jsb2NrID0g Z2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZvb19mdW5jLCBOVUxMKTsKKworICAvKiBCdWls ZCBsb2NhbHM6ICAqLworICBnY2Nfaml0X2x2YWx1ZSAqeCA9CisgICAgZ2NjX2ppdF9mdW5jdGlv bl9uZXdfbG9jYWwgKGZvb19mdW5jLCBOVUxMLCBpbnRfdHlwZSwgIngiKTsKKworICAvKiBpbnQg eCA9IDA7ICovCisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQgKAorICAgIGZvb19ibG9j aywgTlVMTCwKKyAgICB4LAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50 IChjdHh0LCBpbnRfdHlwZSwgMCkpOworCisgIC8qIHggKz0gcmVtb3ZlZCgpOyAqLworICBnY2Nf aml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50X29wICgKKyAgICBmb29fYmxvY2ssIE5VTEwsCisgICAg eCwKKyAgICBHQ0NfSklUX0JJTkFSWV9PUF9QTFVTLAorICAgIGdjY19qaXRfY29udGV4dF9uZXdf Y2FsbCAoY3R4dCwgTlVMTCwgcmVtb3ZlZF9mdW5jLCAwLCBOVUxMKSk7CisgIAorICAvKiB4ICs9 IG5vdF9yZW1vdmVkKCk7ICovCisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnRfb3AgKAor ICAgIGZvb19ibG9jaywgTlVMTCwKKyAgICB4LAorICAgIEdDQ19KSVRfQklOQVJZX09QX1BMVVMs CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19jYWxsIChjdHh0LCBOVUxMLCBub3RfcmVtb3ZlZF9m dW5jLCAwLCBOVUxMKSk7CisKKyAgLyogcmV0dXJuIHg7ICovCisgIGdjY19qaXRfYmxvY2tfZW5k X3dpdGhfcmV0dXJuIChmb29fYmxvY2ssIE5VTEwsIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSh4 KSk7Cit9CisKKy8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LW91dHB1dC1maWxlLXdhcy1jcmVh dGVkICIiIH0gfSAqLworLyogQ2hlY2sgdGhhdCB0aGUgInJlbW92ZWQiIGZ1bmN0aW9uIHdhcyBp bmxpbmVkLCBidXQgbm90IHRoZSBvdGhlcnMgKi8KKy8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5 LWFzc2VtYmxlci1vdXRwdXQtbm90ICIudHlwZVxccytyZW1vdmVkLFxccytAZnVuY3Rpb24iIH0g fSAqLworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktYXNzZW1ibGVyLW91dHB1dCAiLnR5cGVc XHMrbm90X3JlbW92ZWQsXFxzK0BmdW5jdGlvbiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgaml0 LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0ICIudHlwZVxccytmb28sXFxzK0BmdW5jdGlvbiIgfSB9 ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LW5vbm51bGwtYXR0cmli dXRlLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LW5vbm51bGwtYXR0cmlidXRlLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjMzMDZmODkwNjU3Ci0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1ub25udWxsLWF0dHJpYnV0ZS5j CkBAIC0wLDAgKzEsOTQgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQtKi0q IH0gfSAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lu Y2x1ZGUgImxpYmdjY2ppdC5oIgorCisvKiBXZSBkb24ndCB3YW50IHNldF9vcHRpb25zKCkgaW4g aGFybmVzcy5oIHRvIHNldCAtTzIgdG8gc2VlIHRoYXQgdGhlIG5vbm51bGwKKyAgIGF0dHJpYnV0 ZSBhZmZlY3RzIHRoZSBvcHRpbWl6YXRpb25zLiAqLworI2RlZmluZSBURVNUX0VTQ0hFV1NfU0VU X09QVElPTlMKK3N0YXRpYyB2b2lkIHNldF9vcHRpb25zIChnY2Nfaml0X2NvbnRleHQgKmN0eHQs IGNvbnN0IGNoYXIgKmFyZ3YwKQoreworICAvLyBTZXQgIi1PMiIuCisgIGdjY19qaXRfY29udGV4 dF9zZXRfaW50X29wdGlvbihjdHh0LCBHQ0NfSklUX0lOVF9PUFRJT05fT1BUSU1JWkFUSU9OX0xF VkVMLCAyKTsKK30KKworI2RlZmluZSBURVNUX0NPTVBJTElOR19UT19GSUxFCisjZGVmaW5lIE9V VFBVVF9LSU5EICAgICAgR0NDX0pJVF9PVVRQVVRfS0lORF9BU1NFTUJMRVIKKyNkZWZpbmUgT1VU UFVUX0ZJTEVOQU1FICAib3V0cHV0LW9mLXRlc3Qtbm9ubnVsbC5jLnMiCisjaW5jbHVkZSAiaGFy bmVzcy5oIgorCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lk ICp1c2VyX2RhdGEpCit7CisgIC8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQg b2Y6CisKK19fYXR0cmlidXRlX18oKG5vbm51bGwoMSkpKQoraW50IHQoaW50ICphKSB7CisgIGlm ICghYSkgeworICAgIHJldHVybiAtMTsKKyAgfQorICByZXR1cm4gKmE7Cit9CisgICovCisgIGdj Y19qaXRfdHlwZSAqaW50X3R5cGUgPQorICAgIGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4 dCwgR0NDX0pJVF9UWVBFX0lOVCk7CisgIGdjY19qaXRfdHlwZSAqcGludF90eXBlID0gZ2NjX2pp dF90eXBlX2dldF9wb2ludGVyKGludF90eXBlKTsKKworICBnY2Nfaml0X3BhcmFtICphID0KKyAg ICBnY2Nfaml0X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0LCBOVUxMLCBwaW50X3R5cGUsICJhIik7 CisKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZnVuY190ID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3 X2Z1bmN0aW9uIChjdHh0LCBOVUxMLAorCSAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkg IGludF90eXBlLAorCSAgInQiLAorCSAgMSwgJmEsCisJICAwKTsKKyAgLyogQWRkaW5nIGBub25u dWxsKDEpYCBhdHRyaWJ1dGUuICovCisgIGludCBpbmRleGVzWzFdID0gezF9OworICBnY2Nfaml0 X2Z1bmN0aW9uX2FkZF9pbnRlZ2VyX2FycmF5X2F0dHJpYnV0ZSAoCisgICAgZnVuY190LAorICAg IEdDQ19KSVRfRk5fQVRUUklCVVRFX05PTk5VTEwsCisgICAgaW5kZXhlcywKKyAgICAxCisgICk7 CisKKyAgLyogaWYgKCFhKSB7CisgICAgcmV0dXJuIC0xOworICB9ICovCisgIGdjY19qaXRfYmxv Y2sgKmlmX2NvbmQgPQorICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmdW5jX3QsICJp Zl9jb25kIik7CisgIGdjY19qaXRfYmxvY2sgKmlmX2JvZHkgPQorICAgIGdjY19qaXRfZnVuY3Rp b25fbmV3X2Jsb2NrIChmdW5jX3QsICJpZl9ib2R5Iik7CisgIGdjY19qaXRfYmxvY2sgKmFmdGVy X2lmID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZnVuY190LCAiYWZ0ZXJfaWYi KTsKKworICAvKiBpZiAoIWEpICovCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfY29uZGl0aW9u YWwgKAorICAgIGlmX2NvbmQsIE5VTEwsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19jb21wYXJp c29uICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0NPTVBBUklTT05fRVEsCisg ICAgICBnY2Nfaml0X3BhcmFtX2FzX3J2YWx1ZSAoYSksCisgICAgICBnY2Nfaml0X2NvbnRleHRf bnVsbCAoY3R4dCwgcGludF90eXBlKSksCisgICAgaWZfYm9keSwKKyAgICBhZnRlcl9pZik7Cisg IC8qIHJldHVybiAtMTsgKi8KKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKAorICAg IGlmX2JvZHksIE5VTEwsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQg KGN0eHQsIGludF90eXBlLCAtMSkpOworCisgIC8qIHJldHVybiAqYTsgKi8KKyAgZ2NjX2ppdF9i bG9ja19lbmRfd2l0aF9yZXR1cm4gKAorICAgIGFmdGVyX2lmLCBOVUxMLAorICAgIGdjY19qaXRf bHZhbHVlX2FzX3J2YWx1ZSAoCisgICAgICBnY2Nfaml0X3J2YWx1ZV9kZXJlZmVyZW5jZSAoCisJ Z2NjX2ppdF9wYXJhbV9hc19ydmFsdWUgKGEpLCBOVUxMKSkpOworfQorCisvKiB7IGRnLWZpbmFs IHsgaml0LXZlcmlmeS1vdXRwdXQtZmlsZS13YXMtY3JlYXRlZCAiIiB9IH0gKi8KKy8qIENoZWNr IHRoYXQgdGhlICJpZiBibG9jayIgd2FzIG9wdGltaXplZCBhd2F5ICovCisvKiB7IGRnLWZpbmFs IHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0LW5vdCAidGVzdHEiIH0gfSAqLworLyogeyBk Zy1maW5hbCB7IGppdC12ZXJpZnktYXNzZW1ibGVyLW91dHB1dC1ub3QgIi0xIiB9IH0gKi8KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtcHVyZS1hdHRyaWJ1dGUuYyBiL2dj Yy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtcHVyZS1hdHRyaWJ1dGUuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGM5YmExMzY2ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXB1cmUtYXR0cmlidXRlLmMKQEAgLTAsMCArMSwxMzQg QEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQtKi0qIH0gfSAqLworCisjaW5j bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2pp dC5oIgorCisvKiBXZSBkb24ndCB3YW50IHNldF9vcHRpb25zKCkgaW4gaGFybmVzcy5oIHRvIHNl dCAtTzMgdG8gc2VlIHRoYXQgdGhlIHB1cmUKKyAgIGF0dHJpYnV0ZSBhZmZlY3RzIHRoZSBvcHRp bWl6YXRpb25zLiAqLworI2RlZmluZSBURVNUX0VTQ0hFV1NfU0VUX09QVElPTlMKK3N0YXRpYyB2 b2lkIHNldF9vcHRpb25zIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGNvbnN0IGNoYXIgKmFyZ3Yw KQoreworICAvLyBTZXQgIi1PMyIuCisgIGdjY19qaXRfY29udGV4dF9zZXRfaW50X29wdGlvbihj dHh0LCBHQ0NfSklUX0lOVF9PUFRJT05fT1BUSU1JWkFUSU9OX0xFVkVMLCAzKTsKK30KKworI2Rl ZmluZSBURVNUX0NPTVBJTElOR19UT19GSUxFCisjZGVmaW5lIE9VVFBVVF9LSU5EICAgICAgR0ND X0pJVF9PVVRQVVRfS0lORF9BU1NFTUJMRVIKKyNkZWZpbmUgT1VUUFVUX0ZJTEVOQU1FICAib3V0 cHV0LW9mLXRlc3QtcHVyZS1hdHRyaWJ1dGUuYy5zIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKwor dm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRh KQoreworICAvKiBMZXQncyB0cnkgdG8gaW5qZWN0IHRoZSBlcXVpdmFsZW50IG9mOgorX19hdHRy aWJ1dGVfXyAoKHB1cmUpKQoraW50IGZvbyAoaW50IHgpOworaW50IHh4eCh2b2lkKQoreworICBp bnQgeCA9IDQ1OworICBpbnQgc3VtID0gMDsKKworICB3aGlsZSAoeCA+Pj0gMSkKKyAgICBzdW0g Kz0gZm9vICh4KSAqIDI7CisgIHJldHVybiBzdW07Cit9CisgICovCisgIGdjY19qaXRfdHlwZSAq aW50X3R5cGUgPQorICAgIGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9U WVBFX0lOVCk7CisKKyAgLyogQ3JlYXRpbmcgdGhlIGBmb29gIGZ1bmN0aW9uLiAqLworICBnY2Nf aml0X3BhcmFtICpuID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0LCBOVUxM LCBpbnRfdHlwZSwgIngiKTsKKyAgZ2NjX2ppdF9wYXJhbSAqcGFyYW1zWzFdID0ge259OworICBn Y2Nfaml0X2Z1bmN0aW9uICpmb29fZnVuYyA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5j dGlvbiAoY3R4dCwgTlVMTCwKKyAgICAgICAgICBHQ0NfSklUX0ZVTkNUSU9OX0lNUE9SVEVELAor ICAgICAgICAgIGludF90eXBlLAorICAgICAgICAgICJmb28iLAorICAgICAgICAgIDEsIHBhcmFt cywKKyAgICAgICAgICAwKTsKKyAgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfYXR0cmlidXRlKGZvb19m dW5jLCBHQ0NfSklUX0ZOX0FUVFJJQlVURV9QVVJFKTsKKworICAvKiBDcmVhdGluZyB0aGUgYHh4 eGAgZnVuY3Rpb24uICovCisgIGdjY19qaXRfZnVuY3Rpb24gKnh4eF9mdW5jID0KKyAgICBnY2Nf aml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCBOVUxMLAorCQkJCSAgR0NDX0pJVF9GVU5D VElPTl9FWFBPUlRFRCwKKwkJCQkgIGludF90eXBlLAorCQkJCSAgInh4eCIsCisJCQkJICAwLCBO VUxMLAorCQkJCSAgMCk7CisKKyAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0 aW9uX25ld19ibG9jayAoeHh4X2Z1bmMsIE5VTEwpOworCisgIC8qIEJ1aWxkIGxvY2FsczogICov CisgIGdjY19qaXRfbHZhbHVlICp4ID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAo eHh4X2Z1bmMsIE5VTEwsIGludF90eXBlLCAieCIpOworICBnY2Nfaml0X2x2YWx1ZSAqc3VtID0K KyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoeHh4X2Z1bmMsIE5VTEwsIGludF90eXBl LCAic3VtIik7CisKKyAgLyogaW50IHggPSA0NSAqLworICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3Np Z25tZW50ICgKKyAgICBibG9jaywgTlVMTCwKKyAgICB4LAorICAgIGdjY19qaXRfY29udGV4dF9u ZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgNDUpKTsKKyAgLyogaW50IHN1bSA9 IDAgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAoCisgICAgYmxvY2ssIE5VTEws CisgICAgc3VtLAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0 LCBpbnRfdHlwZSwgMCkpOworCisgIC8qIHdoaWxlICh4ID4+PSAxKSB7IHN1bSArPSBmb28gKHgp ICogMjsgfSAqLworICBnY2Nfaml0X2Jsb2NrICpsb29wX2NvbmQgPQorICAgIGdjY19qaXRfZnVu Y3Rpb25fbmV3X2Jsb2NrICh4eHhfZnVuYywgImxvb3BfY29uZCIpOworICBnY2Nfaml0X2Jsb2Nr ICpsb29wX2JvZHkgPQorICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrICh4eHhfZnVuYywg Imxvb3BfYm9keSIpOworICBnY2Nfaml0X2Jsb2NrICphZnRlcl9sb29wID0KKyAgICBnY2Nfaml0 X2Z1bmN0aW9uX25ld19ibG9jayAoeHh4X2Z1bmMsICJhZnRlcl9sb29wIik7CisKKyAgZ2NjX2pp dF9ibG9ja19lbmRfd2l0aF9qdW1wIChibG9jaywgTlVMTCwgbG9vcF9jb25kKTsKKworCisgIC8q IGlmICh4ID4+PSAxKSAqLworICAvKiBTaW5jZSBnY2NqaXQgZG9lc24ndCAoeWV0PykgaGF2ZSBz dXBwb3J0IGZvciBgPj49YCBvcGVyYXRvciwgd2Ugd2lsbCBkZWNvbXBvc2UgaXQgaW50bzoKKyAg ICAgYGlmICh4ID0geCA+PiAxKWAgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudF9v cCAoCisgICAgbG9vcF9jb25kLCBOVUxMLAorICAgIHgsCisgICAgR0NDX0pJVF9CSU5BUllfT1Bf UlNISUZULAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBp bnRfdHlwZSwgMSkpOworICAvKiBUaGUgY29uZGl0aW9uIGl0c2VsZiAqLworICBnY2Nfaml0X2Js b2NrX2VuZF93aXRoX2NvbmRpdGlvbmFsICgKKyAgICBsb29wX2NvbmQsIE5VTEwsCisgICAgZ2Nj X2ppdF9jb250ZXh0X25ld19jb21wYXJpc29uICgKKyAgICAgICBjdHh0LCBOVUxMLAorICAgICAg IEdDQ19KSVRfQ09NUEFSSVNPTl9ORSwKKyAgICAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUg KHgpLAorICAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBp bnRfdHlwZSwgMCkpLAorICAgIGFmdGVyX2xvb3AsCisgICAgbG9vcF9ib2R5KTsKKworICAvKiBz dW0gKz0gZm9vICh4KSAqIDI7ICovCisgIGdjY19qaXRfcnZhbHVlICphcmcgPSBnY2Nfaml0X2x2 YWx1ZV9hc19ydmFsdWUoeCk7CisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnRfb3AgKAor ICAgIGxvb3BfYm9keSwgTlVMTCwKKyAgICB4LAorICAgIEdDQ19KSVRfQklOQVJZX09QX1BMVVMs CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3AgKAorICAgICAgY3R4dCwgTlVMTCwK KyAgICAgIEdDQ19KSVRfQklOQVJZX09QX01VTFQsIGludF90eXBlLAorICAgICAgZ2NjX2ppdF9j b250ZXh0X25ld19jYWxsIChjdHh0LCBOVUxMLCBmb29fZnVuYywgMSwgJmFyZyksCisgICAgICBn Y2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisJY3R4dCwKKwlpbnRfdHlwZSwK KwkyKSkpOworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX2p1bXAgKGxvb3BfYm9keSwgTlVMTCwg bG9vcF9jb25kKTsKKworICAvKiByZXR1cm4gc3VtOyAqLworICBnY2Nfaml0X2Jsb2NrX2VuZF93 aXRoX3JldHVybiAoYWZ0ZXJfbG9vcCwgTlVMTCwgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlKHN1 bSkpOworfQorCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1vdXRwdXQtZmlsZS13YXMtY3Jl YXRlZCAiIiB9IH0gKi8KKy8qIENoZWNrIHRoYXQgdGhlIGxvb3Agd2FzIG9wdGltaXplZCBhd2F5 ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0LW5vdCAiam5l IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtcmVzdHJpY3Qu YyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtcmVzdHJpY3QtYXR0cmlidXRlLmMKc2ltaWxh cml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1yZXN0 cmljdC5jCnJlbmFtZSB0byBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXJlc3RyaWN0LWF0dHJp YnV0ZS5jCmluZGV4IGE2YWM5NjMyNGQyLi43ZDc0NDRiNjI0ZiAxMDA2NDQKLS0tIGEvZ2NjL3Rl c3RzdWl0ZS9qaXQuZGcvdGVzdC1yZXN0cmljdC5jCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRn L3Rlc3QtcmVzdHJpY3QtYXR0cmlidXRlLmMKQEAgLTczLDUgKzczLDUgQEAgdm9pZCB0KGludCAq X19yZXN0cmljdF9fIGEsIGludCAqX19yZXN0cmljdF9fIGIsIGNoYXIgKl9fcmVzdHJpY3RfXyBj KSB7CiB9CiAKIC8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LW91dHB1dC1maWxlLXdhcy1jcmVh dGVkICIiIH0gfSAqLwotLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktYXNzZW1ibGVyLW91dHB1 dCAiYWRkbAklZWF4LCAoJXJkaSkKLQlhZGRsCSVlYXgsICglcnNpKSIgfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0ICJhZGRsXFxzKyVlYXgsXFxzKygl cmRpKQorXFxzK2FkZGxcXHMrJWVheCxcXHMrKCVyc2kpIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtdXNlZC1hdHRyaWJ1dGUuYyBiL2djYy90ZXN0c3VpdGUv aml0LmRnL3Rlc3QtdXNlZC1hdHRyaWJ1dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uY2IyMDk1MmM2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2ppdC5kZy90ZXN0LXVzZWQtYXR0cmlidXRlLmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qIHsgZGct ZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQtKi0qIH0gfSAqLworCisjaW5jbHVkZSA8c3RkbGli Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisjZGVm aW5lIFRFU1RfRVNDSEVXU19TRVRfT1BUSU9OUworc3RhdGljIHZvaWQgc2V0X29wdGlvbnMgKGdj Y19qaXRfY29udGV4dCAqY3R4dCwgY29uc3QgY2hhciAqYXJndjApCit7CisgIC8vIFNldCAiLU8y Ii4KKyAgZ2NjX2ppdF9jb250ZXh0X3NldF9pbnRfb3B0aW9uKGN0eHQsIEdDQ19KSVRfSU5UX09Q VElPTl9PUFRJTUlaQVRJT05fTEVWRUwsIDIpOworfQorCisjZGVmaW5lIFRFU1RfQ09NUElMSU5H X1RPX0ZJTEUKKyNkZWZpbmUgT1VUUFVUX0tJTkQgICAgICBHQ0NfSklUX09VVFBVVF9LSU5EX0FT U0VNQkxFUgorI2RlZmluZSBPVVRQVVRfRklMRU5BTUUgICJvdXRwdXQtb2YtdGVzdC11c2VkLWF0 dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCitnY2Nfaml0X2Z1bmN0aW9uKgor Y3JlYXRlX2Z1bmN0aW9uIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCSBjb25zdCBjaGFyICpm dW5jX25hbWUsCisJCSBnY2Nfaml0X3R5cGUgKmludF90eXBlLAorCQkgaW50IHJldHVybmVkX3Zh bHVlKQoreworICBnY2Nfaml0X2Z1bmN0aW9uICpmdW5jID0KKyAgICBnY2Nfaml0X2NvbnRleHRf bmV3X2Z1bmN0aW9uIChjdHh0LCBOVUxMLAorICAgICAgICAgIEdDQ19KSVRfRlVOQ1RJT05fSU5U RVJOQUwsCisgICAgICAgICAgaW50X3R5cGUsCisgICAgICAgICAgZnVuY19uYW1lLAorICAgICAg ICAgIDAsIE5VTEwsCisgICAgICAgICAgMCk7CisKKyAgZ2NjX2ppdF9ibG9jayAqZm9vX2Jsb2Nr ID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZ1bmMsIE5VTEwpOworICBnY2Nfaml0X2Js b2NrX2VuZF93aXRoX3JldHVybiAoZm9vX2Jsb2NrLCBOVUxMLAorICAgIGdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgcmV0dXJuZWRfdmFsdWUpKTsK KworICByZXR1cm4gZnVuYzsKK30KKworCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250 ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIC8qIExldCdzIHRyeSB0byBpbmplY3Qg dGhlIGVxdWl2YWxlbnQgb2Y6CitfX2F0dHJpYnV0ZV9fKCh1c2VkKSkKK3N0YXRpYyBpbnQgbm90 X3JlbW92ZWQoKSB7IHJldHVybiAxOyB9CitzdGF0aWMgaW50IHJlbW92ZWQoKSB7IHJldHVybiAy OyB9CitpbnQgZm9vKCkgeworICBpbnQgeCA9IDA7CisgIHggKz0gbm90X3JlbW92ZWQoKTsKKyAg eCArPSByZW1vdmVkKCk7CisgIHJldHVybiB4OworfQorICAqLworICBnY2Nfaml0X3R5cGUgKmlu dF90eXBlID0KKyAgICBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQ RV9JTlQpOworCisgIC8qIENyZWF0aW5nIHRoZSBgbm90X3JlbW92ZWRgIGZ1bmN0aW9uLiAqLwor ICBnY2Nfaml0X2Z1bmN0aW9uICpub3RfcmVtb3ZlZF9mdW5jID0KKyAgICBjcmVhdGVfZnVuY3Rp b24gKGN0eHQsICJub3RfcmVtb3ZlZCIsIGludF90eXBlLCAxKTsKKyAgLyogX19hdHRyaWJ1dGVf XyAoKHVzZWQpKSAqLworICBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGUobm90X3JlbW92 ZWRfZnVuYywgR0NDX0pJVF9GTl9BVFRSSUJVVEVfVVNFRCk7CisKKyAgLyogQ3JlYXRpbmcgdGhl IGByZW1vdmVkYCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9mdW5jdGlvbiAqcmVtb3ZlZF9mdW5j ID0KKyAgICBjcmVhdGVfZnVuY3Rpb24gKGN0eHQsICJyZW1vdmVkIiwgaW50X3R5cGUsIDIpOwor CisgIC8qIENyZWF0aW5nIHRoZSBgZm9vYCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9mdW5jdGlv biAqZm9vX2Z1bmMgPQorICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIE5V TEwsCisJCQkJICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgaW50X3R5cGUsCisJ CQkJICAiZm9vIiwKKwkJCQkgIDAsIE5VTEwsCisJCQkJICAwKTsKKworICBnY2Nfaml0X2Jsb2Nr ICpmb29fYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm9vX2Z1bmMsIE5VTEwp OworCisgIC8qIEJ1aWxkIGxvY2FsczogICovCisgIGdjY19qaXRfbHZhbHVlICp4ID0KKyAgICBn Y2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm9vX2Z1bmMsIE5VTEwsIGludF90eXBlLCAieCIp OworCisgIC8qIGludCB4ID0gMDsgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAo CisgICAgZm9vX2Jsb2NrLCBOVUxMLAorICAgIHgsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAwKSk7CisKKyAgLyogeCArPSByZW1vdmVk KCk7ICovCisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnRfb3AgKAorICAgIGZvb19ibG9j aywgTlVMTCwKKyAgICB4LAorICAgIEdDQ19KSVRfQklOQVJZX09QX1BMVVMsCisgICAgZ2NjX2pp dF9jb250ZXh0X25ld19jYWxsIChjdHh0LCBOVUxMLCByZW1vdmVkX2Z1bmMsIDAsIE5VTEwpKTsK KyAgCisgIC8qIHggKz0gbm90X3JlbW92ZWQoKTsgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNz aWdubWVudF9vcCAoCisgICAgZm9vX2Jsb2NrLCBOVUxMLAorICAgIHgsCisgICAgR0NDX0pJVF9C SU5BUllfT1BfUExVUywKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsIE5VTEws IG5vdF9yZW1vdmVkX2Z1bmMsIDAsIE5VTEwpKTsKKworICAvKiByZXR1cm4geDsgKi8KKyAgZ2Nj X2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGZvb19ibG9jaywgTlVMTCwgZ2NjX2ppdF9sdmFs dWVfYXNfcnZhbHVlKHgpKTsKK30KKworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktb3V0cHV0 LWZpbGUtd2FzLWNyZWF0ZWQgIiIgfSB9ICovCisvKiBDaGVjayB0aGF0IHRoZSAicmVtb3ZlZCIg ZnVuY3Rpb24gd2FzIGlubGluZWQsIGJ1dCBub3QgdGhlIG90aGVycyAqLworLyogeyBkZy1maW5h bCB7IGppdC12ZXJpZnktYXNzZW1ibGVyLW91dHB1dC1ub3QgIi50eXBlXFxzK3JlbW92ZWQsXFxz K0BmdW5jdGlvbiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXIt b3V0cHV0ICIudHlwZVxccytub3RfcmVtb3ZlZCxcXHMrQGZ1bmN0aW9uIiB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBqaXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQgIi50eXBlXFxzK2ZvbyxcXHMr QGZ1bmN0aW9uIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qt dmFyaWFibGUtYXR0cmlidXRlLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXZhcmlhYmxl LWF0dHJpYnV0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lYTg1 NGZmNGE5ZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtdmFy aWFibGUtYXR0cmlidXRlLmMKQEAgLTAsMCArMSw0NiBAQAorLyogeyBkZy1kbyBjb21waWxlIHsg dGFyZ2V0IHg4Nl82NC0qLSogfSB9ICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl IDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisKKyNkZWZpbmUgVEVTVF9DT01Q SUxJTkdfVE9fRklMRQorI2RlZmluZSBPVVRQVVRfS0lORCAgICAgIEdDQ19KSVRfT1VUUFVUX0tJ TkRfQVNTRU1CTEVSCisjZGVmaW5lIE9VVFBVVF9GSUxFTkFNRSAgIm91dHB1dC1vZi10ZXN0LXZh cmlhYmxlLWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitjcmVh dGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIC8q IExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6CisKK2ludCBQUklWQVRFIF9f YXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKSA9IDQyOworaW50IFBVQkxJQyA9 IDEyOworICAqLworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0KKyAgICBnY2Nfaml0X2NvbnRl eHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQpOworCisgIC8qIENyZWF0aW5nIHRo ZSBgUFJJVkFURWAgdmFyaWFibGUuICovCisgIGdjY19qaXRfbHZhbHVlICpwcml2YXRlID0gZ2Nj X2ppdF9jb250ZXh0X25ld19nbG9iYWwgKGN0eHQsCisgICAgTlVMTCwgR0NDX0pJVF9HTE9CQUxf RVhQT1JURUQsIGludF90eXBlLCAiUFJJVkFURSIpOworICBnY2Nfaml0X2x2YWx1ZV9hZGRfc3Ry aW5nX2F0dHJpYnV0ZSAocHJpdmF0ZSwKKyAgICBHQ0NfSklUX1ZBUklBQkxFX0FUVFJJQlVURV9W SVNJQklMSVRZLCAiaGlkZGVuIik7CisgIGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDQyKTsK KyAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAocHJpdmF0ZSwgcnZhbCk7 CisKKyAgLyogQ3JlYXRpbmcgdGhlIGBQVUJMSUNgIHZhcmlhYmxlLiAqLworICBnY2Nfaml0X2x2 YWx1ZSAqcHVibGljID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKGN0eHQsCisgICAgTlVM TCwgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsIGludF90eXBlLCAiUFVCTElDIik7CisgIGdjY19q aXRfcnZhbHVlICpydmFsMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgK KyAgICAgIGN0eHQsIGludF90eXBlLCAxMik7CisgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFs aXplcl9ydmFsdWUgKHB1YmxpYywgcnZhbDIpOworfQorCisvKiB7IGRnLWZpbmFsIHsgaml0LXZl cmlmeS1vdXRwdXQtZmlsZS13YXMtY3JlYXRlZCAiIiB9IH0gKi8KKy8qIENoZWNrIHRoYXQgdGhl IGF0dHJpYnV0ZSB3YXMgYXBwbGllZCBjb3JyZWN0bHkgKi8KKy8qIHsgZGctZmluYWwgeyBqaXQt dmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQgIi5oaWRkZW5cXHMrUFJJVkFURSIgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0ICIuZ2xvYmxcXHMrUFJJVkFU RSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0LW5v dCAiLmhpZGRlblxccytQVUJMSUMiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnkt YXNzZW1ibGVyLW91dHB1dCAiLmdsb2JsXFxzK1BVQkxJQyIgfSB9ICovCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXdlYWstYXR0cmlidXRlLmMgYi9nY2MvdGVzdHN1aXRl L2ppdC5kZy90ZXN0LXdlYWstYXR0cmlidXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjU0NmFkZTFjM2M0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9qaXQuZGcvdGVzdC13ZWFrLWF0dHJpYnV0ZS5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qIHsgZGct ZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQtKi0qIH0gfSAqLworCisjaW5jbHVkZSA8c3RkbGli Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisjZGVm aW5lIFRFU1RfQ09NUElMSU5HX1RPX0ZJTEUKKyNkZWZpbmUgT1VUUFVUX0tJTkQgICAgICBHQ0Nf SklUX09VVFBVVF9LSU5EX0FTU0VNQkxFUgorI2RlZmluZSBPVVRQVVRfRklMRU5BTUUgICJvdXRw dXQtb2YtdGVzdC13ZWFrLWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2 b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEp Cit7CisgIC8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6CisKK19fYXR0 cmlidXRlX18gKCh3ZWFrKSkKK3ZvaWQgZiAoKSB7fQorICAqLworICBnY2Nfaml0X3R5cGUgKnZv aWRfdHlwZSA9CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZ UEVfVk9JRCk7CisKKyAgLyogQ3JlYXRpbmcgdGhlIGBmYCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2pp dF9mdW5jdGlvbiAqZl9mdW5jID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChj dHh0LCBOVUxMLAorCQkJCSAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgIHZvaWRf dHlwZSwKKwkJCQkgICJmIiwKKwkJCQkgIDAsIE5VTEwsCisJCQkJICAwKTsKKyAgZ2NjX2ppdF9m dW5jdGlvbl9hZGRfYXR0cmlidXRlKGZfZnVuYywgR0NDX0pJVF9GTl9BVFRSSUJVVEVfV0VBSyk7 CisKKyAgLyogdm9pZCBmICgpIHt9ICovCisgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2pp dF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZfZnVuYywgTlVMTCk7CisgIGdjY19qaXRfYmxvY2tfZW5k X3dpdGhfdm9pZF9yZXR1cm4gKGJsb2NrLCBOVUxMKTsKK30KKworLyogeyBkZy1maW5hbCB7IGpp dC12ZXJpZnktb3V0cHV0LWZpbGUtd2FzLWNyZWF0ZWQgIiIgfSB9ICovCisvKiBDaGVjayB0aGF0 IHRoZSBhdHRyaWJ1dGUgd2FzIGFwcGxpZWQgY29ycmVjdGx5ICovCisvKiB7IGRnLWZpbmFsIHsg aml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0ICIud2Vha1xccytmIiB9IH0gKi8KLS0gCjIuMzQu MQoK --00000000000015f514060a33c00b--