Received: by 2002:a89:d88:0:b0:1fa:5c73:8e2d with SMTP id eb8csp2623307lqb; Tue, 28 May 2024 06:00:40 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXxXRC7U+Ycia3M/V67SpgrZ5/+rLSX6i1r3pIpy3FgCGj3mdyf5l5i9SxRikR45xnhO5JmWuMmILFLkS9QfSNzv+GXC2m+Scgz0t2M+Q== X-Google-Smtp-Source: AGHT+IEidNppGcew21uZbtRhmbQxxTjBXkQy3oYA77L6Oo8IDrdoOjcgXfjM7/0e7q+bNCoS9ccr X-Received: by 2002:a19:ca44:0:b0:51f:5872:dd8c with SMTP id 2adb3069b0e04-529651991afmr6930735e87.39.1716901239934; Tue, 28 May 2024 06:00:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1716901239; cv=none; d=google.com; s=arc-20160816; b=YHuIdo5aaUl3JTsYoeHasrQIYfLBUF7Zrsgysx2NyUbDF5/8ovnkN+jVwlvLipicXh lPrr9fLXGaFqHG7839IGcq+rTZOroScAVXUDjxEyFjUAd6W0I0VHQXql7KQyAbnwHa42 HdiWaWZw4k0zJwkOoFBFGgsg/G2apUbHF2sq5blBdR46ioeMP3Nkqs0IbQyw6t80fbzU gBfp34XRK2Rv3GPCcqRMHVnQsRJkf4ryR/CfV7vTDiHh/LeNB0pOMrPKzlI+gRtt/IJe Rua9hSkNDpStsi2U4J28h7rXlc+XK1AOH/iMgg5I0rt/YalMK0aHj+k0uhruyTdVsF2s Yo6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=subject:to:message-id:date:from:mime-version:delivered-to :delivered-to:reply-to:list-id:list-subscribe:list-unsubscribe :list-help:list-post:precedence:mailing-list; bh=bwNoTAoWJCFD5jPDsDDA3VD3VwS4soz1rGm5IappVeI=; fh=kufjBeJXztXw5JbZwAzDuIJZj534Ph1H5BAmvZvE+ew=; b=bqeRx4BFwpOYHqIBTzz4e2RY7Z3SGqfVgN7zchULWk2fLG58svRa6sF183wWXAWgmQ IvqE6Xj71uzXNxrbSK7KhuWkILFrJ3VvpmVGNRT7n8YNH2olwU2Fq5PCmRSotcHHiIfC SZPld1oi4IIh0kQqTWi3EMOy/VzWR1fJ80wCX76BLtM904llMXOgXet760T3aX6+8/U5 wXchpCBIcIRu0GVJnzMCMKOYGFnhsEGslZgOO28kHBlSAjPtYlO8oMRPK09BfU3zd3Bs lN1YCkzN0ETKfcMgdAf2yXOCcObTvTRYOb7KTGvhBDdQZ7kAdle7r78qqrwADCAsZIeI qP5Q==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of oss-security-return-30170-linux.lists.archive=gmail.com@lists.openwall.com designates 193.110.157.125 as permitted sender) smtp.mailfrom="oss-security-return-30170-linux.lists.archive=gmail.com@lists.openwall.com"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=0xdeadbeef.info Return-Path: Received: from second.openwall.net (second.openwall.net. [193.110.157.125]) by mx.google.com with SMTP id 4fb4d7f45d1cf-57852386dc3si5014221a12.180.2024.05.28.06.00.39 for ; Tue, 28 May 2024 06:00:39 -0700 (PDT) Received-SPF: pass (google.com: domain of oss-security-return-30170-linux.lists.archive=gmail.com@lists.openwall.com designates 193.110.157.125 as permitted sender) client-ip=193.110.157.125; Authentication-Results: mx.google.com; spf=pass (google.com: domain of oss-security-return-30170-linux.lists.archive=gmail.com@lists.openwall.com designates 193.110.157.125 as permitted sender) smtp.mailfrom="oss-security-return-30170-linux.lists.archive=gmail.com@lists.openwall.com"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=0xdeadbeef.info Received: (qmail 30445 invoked by uid 550); 28 May 2024 13:00:16 -0000 Mailing-List: contact oss-security-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: oss-security@lists.openwall.com Delivered-To: mailing list oss-security@lists.openwall.com Delivered-To: moderator for oss-security@lists.openwall.com Received: (qmail 17871 invoked from network); 28 May 2024 12:23:08 -0000 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716898979; x=1717503779; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=bwNoTAoWJCFD5jPDsDDA3VD3VwS4soz1rGm5IappVeI=; b=xTRma6m0alQXuE+i/cjtdRl4EA4F9l8AT0DRg+/J1tSwilZd3qdiroSCpnLJmo0wdX 4Hm66HmKx9/CUJeI8FRxfLA4daTdkfoqzPaOAe9eB0PB/EF10an4sP0S+vEsh51bq8y5 KQUaqDeQny/n4HkJqyvitXMRC1lhumKoz1veYmuLhbsniuUibtfKy2C/JqO0dPCdNM+P Q0QhZszkRXMBmlsiT6LpM6NmpjHdp04TLqYyAGB+tjpo43CfEg0XO0MLHdH2b0W4/crQ bDf84mfPTzNHTxUbhaIFXDDJgFeuO+EXgyhMONjf8/jIYr5kMYpsqzLQwVp4QyXFTc9p B0yw== X-Forwarded-Encrypted: i=1; AJvYcCWvoMx9KJ8SigG24LY2iYyB1zDSUG1hekGvsY2rtofa2bLw3V4E+nfrNNwOwvq/ehqyuNH5rHHP43vm+BD/ZggO+iHO1F7DaG/sBEa0E6mX X-Gm-Message-State: AOJu0YzXVKy+NEQRkMQQWmLY62nHFK2gcbFbuxuvZ3jvieSWDmc0Jpwe PhoXMaHmSBkewm/F1lAiIVOKAIW7UxQKYd4JA5OU2/gKfLdD/MLVPBE/UQ== X-Received: by 2002:a05:6820:1507:b0:5b7:1f5d:6484 with SMTP id 006d021491bc7-5b96038968amr13838277eaf.3.1716898978505; Tue, 28 May 2024 05:22:58 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCXbij6bSMwGsyF1EBhZBnOxnI+wjTlJB9B6rPSQrS7O+/9SyIOOFvukFIsCeAyITVFD4Kwai1p/l38h8AbD15I9FpElapL5a3vnoGSqp58l X-Received: by 2002:a05:6870:b494:b0:24c:ad69:e4bf with SMTP id 586e51a60fabf-24cad69ec0emr13354826fac.48.1716898977859; Tue, 28 May 2024 05:22:57 -0700 (PDT) MIME-Version: 1.0 From: Marco Ivaldi Date: Tue, 28 May 2024 14:22:31 +0200 X-Gmail-Original-Message-ID: Message-ID: To: fulldisclosure@seclists.org, oss-security@lists.openwall.com, submissions@packetstormsecurity.com Content-Type: multipart/mixed; boundary="000000000000b11d5d061982b1d4" Subject: [oss-security] HNS-2024-06 - HN Security Advisory - Multiple vulnerabilities in Eclipse ThreadX --000000000000b11d5d061982b1d4 Content-Type: text/plain; charset="UTF-8" Hi, Please find attached a security advisory that describes multiple vulnerabilities we discovered in Eclipse ThreadX (aka Azure RTOS). * Title: Multiple vulnerabilities in Eclipse ThreadX * OS: Eclipse ThreadX < 6.4.0 * Author: Marco Ivaldi * Date: 2024-05-28 * CVE IDs and severity: * CVE-2024-2214 - High - 7.0 - CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H * CVE-2024-2212 - High - 7.3 - CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:L * CVE-2024-2452 - High - 7.0 - CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:L * Advisory URLs: * https://github.com/eclipse-threadx/threadx/security/advisories/GHSA-vmp6-qhp9-r66x * https://github.com/eclipse-threadx/threadx/security/advisories/GHSA-v9jj-7qjg-h6g6 * https://github.com/eclipse-threadx/netxduo/security/advisories/GHSA-h963-7vhw-8rpx * Vendor URL: https://threadx.io/ The advisory is also available at: https://github.com/hnsecurity/vulns/blob/main/HNS-2024-06-threadx.txt For additional information, please refer to our vulnerability writeup: https://security.humanativaspa.it/multiple-vulnerabilities-in-eclipse-threadx/ Cheers, -- Marco Ivaldi https://0xdeadbeef.info/ "When cryptography is outlawed, bayl bhgynjf jvyy unir cevinpl." --000000000000b11d5d061982b1d4 Content-Type: text/plain; charset="UTF-8"; name="HNS-2024-06-threadx.txt" Content-Disposition: attachment; filename="HNS-2024-06-threadx.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lwqd8pp00 LS1bIEhOUy0yMDI0LTA2IC0gSE4gU2VjdXJpdHkgQWR2aXNvcnkgLSBodHRwczovL3NlY3VyaXR5 Lmh1bWFuYXRpdmFzcGEuaXQvCgoqIFRpdGxlOiBNdWx0aXBsZSB2dWxuZXJhYmlsaXRpZXMgaW4g RWNsaXBzZSBUaHJlYWRYCiogT1M6IEVjbGlwc2UgVGhyZWFkWCA8IDYuNC4wCiogQXV0aG9yOiBN YXJjbyBJdmFsZGkgPG1hcmNvLml2YWxkaUBobnNlY3VyaXR5Lml0PgoqIERhdGU6IDIwMjQtMDUt MjgKKiBDVkUgSURzIGFuZCBzZXZlcml0eToKICAqIENWRS0yMDI0LTIyMTQgLSBIaWdoIC0gNy4w IC0gQ1ZTUzozLjEvQVY6TC9BQzpIL1BSOk4vVUk6Ui9TOlUvQzpIL0k6SC9BOkgKICAqIENWRS0y MDI0LTIyMTIgLSBIaWdoIC0gNy4zIC0gQ1ZTUzozLjEvQVY6TC9BQzpML1BSOk4vVUk6Ui9TOlUv QzpIL0k6SC9BOkwKICAqIENWRS0yMDI0LTI0NTIgLSBIaWdoIC0gNy4wIC0gQ1ZTUzozLjEvQVY6 Ti9BQzpIL1BSOk4vVUk6Ti9TOlUvQzpML0k6SC9BOkwKKiBBZHZpc29yeSBVUkxzOiAKICAqIGh0 dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLXRocmVhZHgvdGhyZWFkeC9zZWN1cml0eS9hZHZpc29y aWVzL0dIU0Etdm1wNi1xaHA5LXI2NngKICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLXRo cmVhZHgvdGhyZWFkeC9zZWN1cml0eS9hZHZpc29yaWVzL0dIU0Etdjlqai03cWpnLWg2ZzYKICAq IGh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLXRocmVhZHgvbmV0eGR1by9zZWN1cml0eS9hZHZp c29yaWVzL0dIU0EtaDk2My03dmh3LThycHgKKiBWZW5kb3IgVVJMOiBodHRwczovL3RocmVhZHgu aW8vCgoKLS1bIDAgLSBUYWJsZSBvZiBjb250ZW50cwoKMSAtIFN1bW1hcnkKMiAtIEJhY2tncm91 bmQKMyAtIFZ1bG5lcmFiaWxpdGllcwogICAgMy4xIC0gQ1ZFLTIwMjQtMjIxNCAtIEluZWZmZWN0 aXZlIGFycmF5IHNpemUgY2hlY2sgYW5kIHN0YXRpYyBidWZmZXIgb3ZlcmZsb3cgaW4gRWNsaXBz ZSBUaHJlYWRYCiAgICAzLjIgLSBDVkUtMjAyNC0yMjEyIC0gSW50ZWdlciB3cmFwYXJvdW5kcywg dW5kZXItYWxsb2NhdGlvbnMsIGFuZCBoZWFwIGJ1ZmZlciBvdmVyZmxvd3MgaW4gaW4gRWNsaXBz ZSBUaHJlYWRYCiAgICAzLjMgLSBDVkUtMjAyNC0yNDUyIC0gSW50ZWdlciB3cmFwYXJvdW5kLCB1 bmRlci1hbGxvY2F0aW9uLCBhbmQgaGVhcCBidWZmZXIgb3ZlcmZsb3cgaW4gRWNsaXBzZSBUaHJl YWRYIE5ldFggRHVvCiAgICAzLjQgLSBPdGhlciBidWdzIHdpdGggcG90ZW50aWFsIHNlY3VyaXR5 IGltcGxpY2F0aW9ucyBpbiBFY2xpcHNlIFRocmVhZFggTmV0WCBEdW8gYW5kIFVTQlgKNCAtIEFm ZmVjdGVkIHByb2R1Y3RzCjUgLSBSZW1lZGlhdGlvbgo2IC0gRGlzY2xvc3VyZSB0aW1lbGluZQo3 IC0gQWNrbm93bGVkZ21lbnRzCjggLSBSZWZlcmVuY2VzCgoKLS1bIDEgLSBTdW1tYXJ5CgoiV2h5 IGRvbuKAmXQgeW91IHBpY2sgb24gcHJvamVjdHMgeW91ciBvd24gc2l6ZSwgCnF1aXQgdG9ybWVu dGluZyB0aGUgdGlueSBvbmVzISIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt LSBUaGUgR3J1Z3EKCkF6dXJlIFJUT1Mgd2FzIE1pY3Jvc29mdCdzIHJlYWwtdGltZSBvcGVyYXRp bmcgc3lzdGVtIGZvciBJb1QgZGV2aWNlcy4gQXQgdGhlCmJlZ2lubmluZyBvZiAyMDI0LCBNaWNy b3NvZnQgY29udHJpYnV0ZWQgdGhlIEF6dXJlIFJUT1MgdGVjaG5vbG9neSB0byB0aGUKRWNsaXBz ZSBGb3VuZGF0aW9uIFsxXS4gV2l0aCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGFzIGl0cyBuZXcg aG9tZSwgQXp1cmUgUlRPUwp3YXMgcmVicmFuZGVkIGFzIEVjbGlwc2UgVGhyZWFkWC4KCkVjbGlw c2UgVGhyZWFkWCBpcyBhbiBhZHZhbmNlZCBlbWJlZGRlZCBkZXZlbG9wbWVudCBzdWl0ZSBpbmNs dWRpbmcgYSBzbWFsbCBidXQKcG93ZXJmdWwgb3BlcmF0aW5nIHN5c3RlbSB0aGF0IHByb3ZpZGVz IHJlbGlhYmxlLCB1bHRyYS1mYXN0IHBlcmZvcm1hbmNlIGZvcgpyZXNvdXJjZS1jb25zdHJhaW5l ZCBkZXZpY2VzLiBJdCBvZmZlcnMgYSB2ZW5kb3ItbmV1dHJhbCwgb3BlbiBzb3VyY2UsIHNhZmV0 eQpjZXJ0aWZpZWQgT1MgZm9yIHJlYWwtdGltZSBhcHBsaWNhdGlvbnMsIGFsbCB1bmRlciBhIHBl cm1pc3NpdmUgbGljZW5zZS4gCgpXZSByZXZpZXdlZCBUaHJlYWRYJ3Mgc291cmNlIGNvZGUgaG9z dGVkIG9uIEdpdEh1YiBbMl0gYW5kIGlkZW50aWZpZWQgbXVsdGlwbGUKc2VjdXJpdHkgdnVsbmVy YWJpbGl0aWVzIHRoYXQgbWF5IGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uLiBUaGVpciBpbXBhY3Rz IHJhbmdlCmZyb20gZGVuaWFsIG9mIHNlcnZpY2UgdG8gcG90ZW50aWFsIGFyYml0cmFyeSBjb2Rl IGV4ZWN1dGlvbi4KCgotLVsgMiAtIEJhY2tncm91bmQKCkNvbnRpbnVpbmcgb3VyIHJlY2VudCB2 dWxuZXJhYmlsaXR5IHJlc2VhcmNoIHdvcmsgaW4gdGhlIElvVCBzcGFjZSBbM10gWzRdIFs1XSwK d2Uga2VlcCBhc3Npc3Rpbmcgb3Blbi1zb3VyY2UgcHJvamVjdHMgaW4gZmluZGluZyBhbmQgZml4 aW5nIHZ1bG5lcmFiaWxpdGllcyBieQpyZXZpZXdpbmcgdGhlaXIgc291cmNlIGNvZGUuIEluIERl Y2VtYmVyIDIwMjMsIEF6dXJlIFJUT1MsIHdoaWNoIG9uZSBtb250aApsYXRlciB3YXMgcmVicmFu ZGVkIGFzIEVjbGlwc2UgVGhyZWFkWCwgd2FzIHNlbGVjdGVkIGFzIGEgdGFyZ2V0IG9mIGludGVy ZXN0LgoKRHVyaW5nIHRoZSBzb3VyY2UgY29kZSByZXZpZXcsIHdlIG1hZGUgdXNlIG9mIG91ciBT ZW1ncmVwIEMvQysrIHJ1bGVzZXQgWzZdIGFuZAp3ZWdnbGkgcGF0dGVybiBjb2xsZWN0aW9uIFs3 XSB0byBpZGVudGlmeSBob3RzcG90cyBpbiBjb2RlIG9uIHdoaWNoIHRvIGZvY3VzCm91ciBhdHRl bnRpb24uCgoKLS1bIDMgLSBWdWxuZXJhYmlsaXRpZXMKClRoZSB2dWxuZXJhYmlsaXRpZXMgcmVz dWx0aW5nIGZyb20gb3VyIHNvdXJjZSBjb2RlIHJldmlldyBhcmUgYnJpZWZseSBkZXNjcmliZWQK aW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KCgotLVsgMy4xIC0gQ1ZFLTIwMjQtMjIxNCAtIElu ZWZmZWN0aXZlIGFycmF5IHNpemUgY2hlY2sgYW5kIHN0YXRpYyBidWZmZXIgb3ZlcmZsb3cgaW4g RWNsaXBzZSBUaHJlYWRYCgpJbiBFY2xpcHNlIFRocmVhZFggYmVmb3JlIHZlcnNpb24gNi40LjAs IHRoZSBgX010eGluaXQoKWAgZnVuY3Rpb24gaW4gdGhlClh0ZW5zYSBwb3J0IHdhcyBtaXNzaW5n IGFuIGFycmF5IHNpemUgY2hlY2sgY2F1c2luZyBhIG1lbW9yeSBvdmVyd3JpdGUuCgpUaGUgdnVs bmVyYWJpbGl0eSB3YXMgc3BvdHRlZCBpbiB0aGUgZm9sbG93aW5nIGZpbGU6CiogL3BvcnRzL3h0 ZW5zYS94Y2Mvc3JjL3R4X2NsaWJfbG9jay5jCgpUaGVyZSB3YXMgbm8gZXJyb3IgaGFuZGxpbmcg aW4gY2FzZSBgbGNudGAgPj0gYFhUX05VTV9DTElCX0xPQ0tTYC4gVGhlIHByb2dyYW0Kd291bGQg Y29udGludWUgYW5kIHRoZSBgdHhfbXV0ZXhfY3JlYXRlKClgIHdvdWxkIGV2ZW50dWFsbHkgY29y cnVwdCBtZW1vcnkgYnkKd3JpdGluZyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGB4Y2xpYl9s b2Nrc2Agc3RhdGljIGFycmF5OgpgYGBjCiNpZmRlZiBUWF9USFJFQURfU0FGRV9DTElCICAgIC8q IHRoaXMgZmlsZSBpcyBvbmx5IG5lZWRlZCBpZiB1c2luZyBDIGxpYiAqLwouLi4KI2lmIFhTSEFM X0NMSUIgPT0gWFRIQUxfQ0xJQl9YQ0xJQgouLi4Kc3RhdGljIFRYX01VVEVYIHhjbGliX2xvY2tz W1hUX05VTV9DTElCX0xPQ0tTXTsKc3RhdGljIHVpbnQzMl90IGxjbnQ7Ci4uLgovKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi8qICAgIF9NdHhpbml0IC0gaW5pdGlhbGl6ZSBhIGxvY2suIENhbGxlZCBvbmNl IGZvciBlYWNoIGxvY2suICAgICAgICAgICAgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkCl9N dHhpbml0IChfUm10eCAqIG10eCkKewogICAgVFhfTVVURVggKiBsb2NrOwoKICAgIGlmIChsY250 ID49IFhUX05VTV9DTElCX0xPQ0tTKSB7IC8vIFZVTE46IGVtcHR5IGlmKCkgYm9keQogICAgICAg IC8qIEZhdGFsIGVycm9yICovCiAgICB9CgogICAgbG9jayA9ICYoeGNsaWJfbG9ja3NbbGNudF0p OwogICAgbGNudCsrOwoKICAgIC8qIFNlZSBub3RlcyBmb3IgbmV3bGliIGNhc2UgYmVsb3cuICov CiNpZmRlZiBUSFJFQURYX1RFU1RTVUlURQogICAgdHhfbXV0ZXhfY3JlYXRlIChsb2NrLCAiQ2xp YiBsb2NrIiwgMCk7CiNlbHNlCiAgICB0eF9tdXRleF9jcmVhdGUgKGxvY2ssICJDbGliIGxvY2si LCBUWF9JTkhFUklUKTsKI2VuZGlmCgogICAgKm10eCA9IGxvY2s7Cn0KYGBgCgpGaXhlczoKaHR0 cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtdGhyZWFkeC90aHJlYWR4L3B1bGwvMzQwCgpTZWUgYWxz bzoKaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtdGhyZWFkeC90aHJlYWR4L3NlY3VyaXR5L2Fk dmlzb3JpZXMvR0hTQS12bXA2LXFocDktcjY2eAoKCi0tWyAzLjIgLSBDVkUtMjAyNC0yMjEyIC0g SW50ZWdlciB3cmFwYXJvdW5kcywgdW5kZXItYWxsb2NhdGlvbnMsIGFuZCBoZWFwIGJ1ZmZlciBv dmVyZmxvd3MgaW4gaW4gRWNsaXBzZSBUaHJlYWRYCgpJbiBFY2xpcHNlIFRocmVhZFggYmVmb3Jl IHZlcnNpb24gNi40LjAsIGZ1bmN0aW9ucyBgeFF1ZXVlQ3JlYXRlKClgIGFuZApgeFF1ZXVlQ3Jl YXRlU2V0KClgIGZyb20gdGhlIEZyZWVSVE9TIGNvbXBhdGliaWxpdHkgQVBJIHdlcmUgbWlzc2lu ZyBwYXJhbWV0ZXIKY2hlY2tzLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW50ZWdlciB3cmFwYXJvdW5k LCB1bmRlci1hbGxvY2F0aW9ucywgYW5kIGhlYXAKYnVmZmVyIG92ZXJmbG93cy4KClRoZSB2dWxu ZXJhYmlsaXRpZXMgd2VyZSBzcG90dGVkIGluIHRoZSBmb2xsb3dpbmcgZmlsZToKKiAvdXRpbGl0 eS9ydG9zX2NvbXBhdGliaWxpdHlfbGF5ZXJzL0ZyZWVSVE9TL3R4X2ZyZWVydG9zLmMKCklmIGFu IGF0dGFja2VyIGNvdWxkIGNvbnRyb2wgYHV4UXVldWVMZW5ndGhgIG9yIGB1eEl0ZW1TaXplYCwg dGhleSBjb3VsZCBjYXVzZQphbiBpbnRlZ2VyIHdyYXBhcm91bmQgdGh1cyBjYXVzaW5nIGB0eGZy X21hbGxvYygpYCB0byBhbGxvY2F0ZSBhIHNtYWxsIGFtb3VudApvZiBtZW1vcnksIGV4cG9zaW5n IHRvIHN1YnNlcXVlbnQgaGVhcCBidWZmZXIgb3ZlcmZsb3dzIChBS0EgQmFkQWxsb2Mtc3R5bGUK bWVtb3J5IGNvcnJ1cHRpb24pOgpgYGBjClF1ZXVlSGFuZGxlX3QgeFF1ZXVlQ3JlYXRlKFVCYXNl VHlwZV90IHV4UXVldWVMZW5ndGgsIFVCYXNlVHlwZV90IHV4SXRlbVNpemUpCnsKICAgIHR4ZnJf cXVldWVfdCAqcF9xdWV1ZTsKICAgIHZvaWQgKnBfbWVtOwogICAgc2l6ZV90IG1lbV9zaXplOwog ICAgVUlOVCByZXQ7CgogICAgY29uZmlnQVNTRVJUKHV4UXVldWVMZW5ndGggIT0gMHUpOwogICAg Y29uZmlnQVNTRVJUKHV4SXRlbVNpemUgPj0gc2l6ZW9mKFVJTlQpKTsKCiNpZiAoVFhfRlJFRVJU T1NfQVVUT19JTklUID09IDEpCiAgICBpZih0eGZyX2luaXRpYWxpemVkICE9IDF1KSB7CiAgICAg ICAgdHhfZnJlZXJ0b3NfYXV0b19pbml0KCk7CiAgICB9CiNlbmRpZgoKICAgIHBfcXVldWUgPSB0 eGZyX21hbGxvYyhzaXplb2YodHhmcl9xdWV1ZV90KSk7CiAgICBpZihwX3F1ZXVlID09IE5VTEwp IHsKICAgICAgICByZXR1cm4gTlVMTDsKICAgIH0KCiAgICBtZW1fc2l6ZSA9IHV4UXVldWVMZW5n dGgqKHV4SXRlbVNpemUpOwoKICAgIHBfbWVtID0gdHhmcl9tYWxsb2MobWVtX3NpemUpOyAvLyBW VUxOOiBpbnRlZ2VyIHdyYXBhcm91bmQgYW5kIHVuZGVyLWFsbG9jYXRpb24KICAgIGlmKHBfbWVt ID09IE5VTEwpIHsKICAgICAgICB0eGZyX2ZyZWUocF9xdWV1ZSk7CiAgICAgICAgcmV0dXJuIE5V TEw7CiAgICB9CgogICAgVFhfTUVNU0VUKHBfbWVtLCAwLCBtZW1fc2l6ZSk7CiAgICBUWF9NRU1T RVQocF9xdWV1ZSwgMCwgc2l6ZW9mKCpwX3F1ZXVlKSk7CiAgICBwX3F1ZXVlLT5hbGxvY2F0ZWQg PSAxdTsKICAgIHBfcXVldWUtPnBfbWVtID0gcF9tZW07CiAgICBwX3F1ZXVlLT5pZCA9IFRYX1FV RVVFX0lEOwoKICAgIHBfcXVldWUtPnBfd3JpdGUgPSAodWludDhfdCAqKXBfbWVtOwogICAgcF9x dWV1ZS0+cF9yZWFkID0gKHVpbnQ4X3QgKilwX21lbTsKICAgIHBfcXVldWUtPm1zZ19zaXplID0g dXhJdGVtU2l6ZTsKICAgIHBfcXVldWUtPnF1ZXVlX2xlbmd0aCA9IHV4UXVldWVMZW5ndGg7Cgog ICAgcmV0ID0gdHhfc2VtYXBob3JlX2NyZWF0ZSgmcF9xdWV1ZS0+cmVhZF9zZW0sICIiLCAwdSk7 CiAgICBpZihyZXQgIT0gVFhfU1VDQ0VTUykgewogICAgICAgIHJldHVybiBOVUxMOwogICAgfQoK ICAgIHJldCA9IHR4X3NlbWFwaG9yZV9jcmVhdGUoJnBfcXVldWUtPndyaXRlX3NlbSwgIiIsIHV4 UXVldWVMZW5ndGgpOwogICAgaWYocmV0ICE9IFRYX1NVQ0NFU1MpIHsKICAgICAgICByZXR1cm4g TlVMTDsKICAgIH0KCiAgICByZXR1cm4gcF9xdWV1ZTsKfQpgYGAKCklmIGFuIGF0dGFja2VyIGNv dWxkIGNvbnRyb2wgYHV4RXZlbnRRdWV1ZUxlbmd0aGlgLCB0aGV5IGNvdWxkIGNhdXNlIGFuIGlu dGVnZXIKd3JhcGFyb3VuZCB0aHVzIGNhdXNpbmcgYHR4ZnJfbWFsbG9jKClgIHRvIGFsbG9jYXRl IGEgc21hbGwgYW1vdW50IG9mIG1lbW9yeSwKZXhwb3NpbmcgdG8gc3Vic2VxdWVudCBoZWFwIGJ1 ZmZlciBvdmVyZmxvd3MgKEFLQSBCYWRBbGxvYy1zdHlsZSBtZW1vcnkKY29ycnVwdGlvbik6CmBg YGMKUXVldWVTZXRIYW5kbGVfdCB4UXVldWVDcmVhdGVTZXQoY29uc3QgVUJhc2VUeXBlX3QgdXhF dmVudFF1ZXVlTGVuZ3RoKQp7CiAgICB0eGZyX3F1ZXVlc2V0X3QgKnBfc2V0OwogICAgdm9pZCAq cF9tZW07CiAgICBVTE9ORyBxdWV1ZV9zaXplOwogICAgVUlOVCByZXQ7CgogICAgY29uZmlnQVNT RVJUKHV4RXZlbnRRdWV1ZUxlbmd0aCAhPSAwdSk7CgojaWYgKFRYX0ZSRUVSVE9TX0FVVE9fSU5J VCA9PSAxKQogICAgaWYodHhmcl9pbml0aWFsaXplZCAhPSAxdSkgewogICAgICAgIHR4X2ZyZWVy dG9zX2F1dG9faW5pdCgpOwogICAgfQojZW5kaWYKCiAgICBwX3NldCA9IHR4ZnJfbWFsbG9jKHNp emVvZih0eGZyX3F1ZXVlc2V0X3QpKTsKICAgIGlmKHBfc2V0ID09IE5VTEwpIHsKICAgICAgICBy ZXR1cm4gTlVMTDsKICAgIH0KCiAgICBxdWV1ZV9zaXplID0gc2l6ZW9mKHZvaWQgKikgKiB1eEV2 ZW50UXVldWVMZW5ndGg7CiAgICBwX21lbSA9IHR4ZnJfbWFsbG9jKHF1ZXVlX3NpemUpOyAvLyBW VUxOOiBpbnRlZ2VyIHdyYXBhcm91bmQgYW5kIHVuZGVyLWFsbG9jYXRpb24KICAgIGlmKHBfbWVt ID09IE5VTEwpIHsKICAgICAgICB0eGZyX2ZyZWUocF9zZXQpOwogICAgICAgIHJldHVybiBOVUxM OwogICAgfQoKICAgIHJldCA9IHR4X3F1ZXVlX2NyZWF0ZSgmcF9zZXQtPnF1ZXVlLCAiIiwgc2l6 ZW9mKHZvaWQgKikgLyBzaXplb2YoVUlOVCksIHBfbWVtLCBxdWV1ZV9zaXplKTsKICAgIGlmKHJl dCAhPSBUWF9TVUNDRVNTKSB7CiAgICAgICAgVFhfRlJFRVJUT1NfQVNTRVJUX0ZBSUwoKTsKICAg ICAgICByZXR1cm4gTlVMTDsKICAgIH0KCiAgICByZXR1cm4gcF9zZXQ7Cn0KYGBgCgpUaGVzZSBm dW5jdGlvbnMgYXJlIHBhcnQgb2YgYW4gZXh0ZXJuYWwgQVBJIHRvIGJlIHVzZWQgYnkgdXNlcidz IGFwcGxpY2F0aW9ucy4KVGhlIHZhbHVlcyBvZiB0aG9zZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0 aGUgdnVsbmVyYWJsZSBmdW5jdGlvbnMgZGVwZW5kIG9uCnVzZXIncyBjb2RlLgoKRml4ZXM6Cmh0 dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLXRocmVhZHgvdGhyZWFkeC9wdWxsLzMzOQoKU2VlIGFs c286Cmh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLXRocmVhZHgvdGhyZWFkeC9zZWN1cml0eS9h ZHZpc29yaWVzL0dIU0Etdjlqai03cWpnLWg2ZzYKCgotLVsgMy4zIC0gQ1ZFLTIwMjQtMjQ1MiAt IEludGVnZXIgd3JhcGFyb3VuZCwgdW5kZXItYWxsb2NhdGlvbiwgYW5kIGhlYXAgYnVmZmVyIG92 ZXJmbG93IGluIEVjbGlwc2UgVGhyZWFkWCBOZXRYIER1bwoKSW4gRWNsaXBzZSBUaHJlYWRYIE5l dFggRHVvIGJlZm9yZSB2ZXJzaW9uIDYuNC4wLCBpZiBhbiBhdHRhY2tlciBjb3VsZCBjb250cm9s CnRoZSBwYXJhbWV0ZXJzIG9mIGBfX3BvcnRhYmxlX2FsaWduZWRfYWxsb2MoKWAgdGhleSBjb3Vs ZCBjYXVzZSBhbiBpbnRlZ2VyCndyYXBhcm91bmQgYW5kIGFuIGFsbG9jYXRpb24gc21hbGxlciB0 aGFuIGV4cGVjdGVkLiBUaGlzIGNvdWxkIGNhdXNlIHN1YnNlcXVlbnQKaGVhcCBidWZmZXIgb3Zl cmZsb3dzLgoKVGhlIHZ1bG5lcmFiaWxpdHkgd2FzIHNwb3R0ZWQgaW4gdGhlIGZvbGxvd2luZyBm aWxlOgoqIC9hZGRvbnMvYXp1cmVfaW90L2F6dXJlX2lvdF9zZWN1cml0eV9tb2R1bGUvaW90LXNl Y3VyaXR5LW1vZHVsZS1jb3JlL2RlcHMvZmxhdGNjL2luY2x1ZGUvZmxhdGNjL3BvcnRhYmxlL3Bh bGlnbmVkX2FsbG9jLmgKCklmIGFuIGF0dGFja2VyIGNvdWxkIGNvbnRyb2wgdGhlIGBzaXplYCBv ciBgYWxpZ25tZW50YCBhcmd1bWVudHMgdG8gdGhlCmBfX3BvcnRhYmxlX2FsaWduZWRfYWxsb2Mo KWAgZnVuY3Rpb24sIHRoZXkgY291bGQgY2F1c2UgYW4gaW50ZWdlciB3cmFwYXJvdW5kCnRodXMg Y2F1c2luZyBgbWFsbG9jKClgIHRvIGFsbG9jYXRlIGEgc21hbGwgYW1vdW50IG9mIG1lbW9yeSwg ZXhwb3NpbmcgdG8Kc3Vic2VxdWVudCBoZWFwIGJ1ZmZlciBvdmVyZmxvd3MgKEFLQSBCYWRBbGxv Yy1zdHlsZSBtZW1vcnkgY29ycnVwdGlvbik6CmBgYGMKc3RhdGljIGlubGluZSB2b2lkICpfX3Bv cnRhYmxlX2FsaWduZWRfYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCnsKICAg IGNoYXIgKnJhdzsKICAgIHZvaWQgKmJ1ZjsKICAgIHNpemVfdCB0b3RhbF9zaXplID0gKHNpemUg KyBhbGlnbm1lbnQgLSAxICsgc2l6ZW9mKHZvaWQgKikpOyAvLyBWVUxOOiBpbnRlZ2VyIHdyYXBh cm91bmQKCiAgICBpZiAoYWxpZ25tZW50IDwgc2l6ZW9mKHZvaWQgKikpIHsKICAgICAgICBhbGln bm1lbnQgPSBzaXplb2Yodm9pZCAqKTsKICAgIH0KICAgIHJhdyA9IChjaGFyICopKHNpemVfdClt YWxsb2ModG90YWxfc2l6ZSk7IC8vIFZVTE46IHVuZGVyLWFsbG9jYXRpb24gQmFkQWxsb2Mgc3R5 bGUKICAgIGJ1ZiA9IHJhdyArIGFsaWdubWVudCAtIDEgKyBzaXplb2Yodm9pZCAqKTsKICAgIGJ1 ZiA9ICh2b2lkICopKCgoc2l6ZV90KWJ1ZikgJiB+KGFsaWdubWVudCAtIDEpKTsKICAgICgodm9p ZCAqKilidWYpWy0xXSA9IHJhdzsgLy8gbWFsbG9jIHJldCBpcyBub3QgY2hlY2tlZDsgaW4gY2Fz ZSBOVUxMIGlzIHJldHVybmVkIHRoZSBwcm9ncmFtIHdvdWxkIGNyYXNoIGhlcmUKICAgIHJldHVy biBidWY7Cn0KYGBgCgpXZSBzcG90dGVkIHRoZSBzYW1lIHZ1bG5lcmFiaWxpdHkgaW4gQXp1cmUg SW9UIFByZXZpZXcgc291cmNlIGNvZGUgYXQ6Cmh0dHBzOi8vZ2l0aHViLmNvbS9henVyZS1ydG9z L2F6dXJlLWlvdC1wcmV2aWV3L2Jsb2IvbWFzdGVyL2F6dXJlX2lvdC9henVyZV9pb3Rfc2VjdXJp dHlfbW9kdWxlL2lvdC1zZWN1cml0eS1tb2R1bGUtY29yZS9kZXBzL2ZsYXRjYy9pbmNsdWRlL2Zs YXRjYy9wb3J0YWJsZS9wYWxpZ25lZF9hbGxvYy5oCgpUaGUgbWFpbnRhaW5lcnMgY29uZmlybWVk IHRoZSB2dWxuZXJhYmlsaXR5LCBidXQgaW5mb3JtZWQgdXMgdGhhdCB0aGUgQXp1cmUgSW9UClBy ZXZpZXcgcmVwb3NpdG9yeSB3YXMgbm90IHBhcnQgb2YgYSBwcm9kdWN0LiBUaGVyZWZvcmUsIGl0 IHdhcyByZW1vdmVkCmVudGlyZWx5LgoKRml4ZXM6Cmh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNl LXRocmVhZHgvbmV0eGR1by9wdWxsLzIyNwoKU2VlIGFsc286Cmh0dHBzOi8vZ2l0aHViLmNvbS9l Y2xpcHNlLXRocmVhZHgvbmV0eGR1by9zZWN1cml0eS9hZHZpc29yaWVzL0dIU0EtaDk2My03dmh3 LThycHgKCgotLVsgMy40IC0gT3RoZXIgYnVncyB3aXRoIHBvdGVudGlhbCBzZWN1cml0eSBpbXBs aWNhdGlvbnMgaW4gRWNsaXBzZSBUaHJlYWRYIE5ldFggRHVvIGFuZCBVU0JYCgpJbiBhZGRpdGlv biB0byB0aGUgdnVsbmVyYWJpbGl0aWVzIGNvdmVyZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb25z LCB3ZSBhbHNvCnJlcG9ydGVkIGEgZmV3IG90aGVyIGJ1Z3Mgd2l0aCBwb3RlbnRpYWwgc2VjdXJp dHkgaW1wbGljYXRpb25zIHRoYXQgd2VyZSBub3QKY29uc2lkZXJlZCBhcyB2dWxuZXJhYmlsaXRp ZXMgYnkgRWNsaXBzZSBUaHJlYWRYIG1haW50YWluZXJzLiBBcyBzdWNoLCBvdXIKcmVwb3J0cyB3 ZXJlIGRlY2xhc3NlZCB0byBzdGFuZGFyZCBpc3N1ZXMgZm9yIGNvZGUgaW1wcm92ZW1lbnQuCgpU aGUgZmlyc3Qgb25lIGlzIGFuIHVuc2FmZSB1c2Ugb2YgdGhlIHJldHVybiB2YWx1ZSBvZiBgc25w cmludGYoKWAgdGhhdCB3ZQpvYnNlcnZlZCBpbiBFY2xpcHNlIFRocmVhZFggTmV0WCBEdW8sIGlu IHRoZSBmb2xsb3dpbmcgZmlsZToKKiAvYWRkb25zL2F6dXJlX2lvdC9ueF9henVyZV9pb3RfYWR1 X2FnZW50LmMKClRoZSBgc25wcmludGYoKWAgQVBJIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRvdGFs IGxlbmd0aCBvZiB0aGUgc3RyaW5nIGl0IHRyaWVkCnRvIGNyZWF0ZSwgd2hpY2ggY291bGQgYmUg bGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBsZW5ndGggd3JpdHRlbjsgaWYgYW4gYXR0YWNrZXIKd2Vy ZSBhYmxlIHRvIGNyYWZ0IGlucHV0IHNvIHRoYXQgYHVwZGF0ZV9pZF9sZW5ndGhgIGJlY2FtZSBs YXJnZXIgdGhhbgpgTlhfQVpVUkVfSU9UX0FEVV9BR0VOVF9VUERBVEVfTUFOSUZFU1RfU0laRWAg YW5kIGlmIHRoZSByZXR1cm4gdmFsdWUgd2VyZSB1c2VkCnVuc2FmZWx5IChlLmcuLCBhcyBhbiBh cnJheSBpbmRleCkgc29tZXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUsIG1lbW9yeQpjb3JydXB0aW9u IGNvdWxkIGhhdmUgb2NjdXJlZDoKYGBgYwpzdGF0aWMgVUlOVCBueF9henVyZV9pb3RfYWR1X2Fn ZW50X3JlcG9ydGVkX3Byb3BlcnRpZXNfc3RhdGVfc2VuZChOWF9BWlVSRV9JT1RfQURVX0FHRU5U ICphZHVfYWdlbnRfcHRyKQp7CgpOWF9QQUNLRVQgKnBhY2tldF9wdHI7Ck5YX0FaVVJFX0lPVF9K U09OX1dSSVRFUiBqc29uX3dyaXRlcjsKTlhfQVpVUkVfSU9UX0FEVV9BR0VOVF9VUERBVEVfTUFO SUZFU1RfQ09OVEVOVCAqbWFuaWZlc3RfY29udGVudCA9ICYoYWR1X2FnZW50X3B0ciAtPiBueF9h enVyZV9pb3RfYWR1X2FnZW50X3VwZGF0ZV9tYW5pZmVzdF9jb250ZW50KTsKVUlOVCBzdGF0dXM7 ClVJTlQgcmVzdWx0X2NvZGU7ClVJTlQgaTsKLyogUHJlcGFyZSB0aGUgYnVmZmVyIGZvciBzdGVw IG5hbWU6IHN1Y2ggYXM6ICJzdGVwXzAiLCB0aGUgbWF4IG5hbWUgaXMgInN0ZXBfeHh4Ii4gICov CkNIQVIgc3RlcF9wcm9wZXJ0eV9uYW1lWzhdID0gInN0ZXBfIjsKVUlOVCBzdGVwX3NpemUgPSBz aXplb2YoInN0ZXBfIikgLSAxOwpVSU5UIHN0ZXBfcHJvcGVydHlfbmFtZV9zaXplOwpVSU5UIHVw ZGF0ZV9pZF9sZW5ndGg7Ci4uLgogICAgLyogRmlsbCBpbnN0YWxsZWQgdXBkYXRlIGlkLiAgKi8K ICAgIGlmICgoYWR1X2FnZW50X3B0ciAtPiBueF9henVyZV9pb3RfYWR1X2FnZW50X3N0YXRlID09 IE5YX0FaVVJFX0lPVF9BRFVfQUdFTlRfU1RBVEVfSURMRSkgJiYgCiAgICAgICAgKGFkdV9hZ2Vu dF9wdHIgLT4gbnhfYXp1cmVfaW90X2FkdV9hZ2VudF91cGRhdGVfbWFuaWZlc3RfY29udGVudC5z dGVwc19jb3VudCkpCiAgICB7CgogICAgICAgIC8qIFVzZSBueF9henVyZV9pb3RfYWR1X2FnZW50 X3VwZGF0ZV9tYW5pZmVzdCBhcyB0ZW1wb3JhcnkgYnVmZmVyIHRvIGVuY29kZSB0aGUgdXBkYXRl IGlkIGFzIHN0cmluZy4qLwogICAgICAgIHVwZGF0ZV9pZF9sZW5ndGggPSAoVUlOVClzbnByaW50 ZigoQ0hBUiAqKWFkdV9hZ2VudF9wdHIgLT4gbnhfYXp1cmVfaW90X2FkdV9hZ2VudF91cGRhdGVf bWFuaWZlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5YX0Fa VVJFX0lPVF9BRFVfQUdFTlRfVVBEQVRFX01BTklGRVNUX1NJWkUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJ7XCIlLipzXCI6XCIlLipzXCIsXCIlLipzXCI6XCIl LipzXCIsXCIlLipzXCI6XCIlLipzXCJ9IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKE5YX0FaVVJFX0lPVF9BRFVfQUdFTlRfUFJPUEVSVFlfTkFNRV9Q Uk9WSURFUikgLSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO WF9BWlVSRV9JT1RfQURVX0FHRU5UX1BST1BFUlRZX05BTUVfUFJPVklERVIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X2NvbnRlbnQgLT4gdXBkYXRl X2lkLnByb3ZpZGVyX2xlbmd0aCwgbWFuaWZlc3RfY29udGVudCAtPiB1cGRhdGVfaWQucHJvdmlk ZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoTlhf QVpVUkVfSU9UX0FEVV9BR0VOVF9QUk9QRVJUWV9OQU1FX05BTUUpIC0gMSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlhfQVpVUkVfSU9UX0FEVV9BR0VOVF9QUk9Q RVJUWV9OQU1FX05BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1hbmlmZXN0X2NvbnRlbnQgLT4gdXBkYXRlX2lkLm5hbWVfbGVuZ3RoLCBtYW5pZmVzdF9jb250 ZW50IC0+IHVwZGF0ZV9pZC5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplb2YoTlhfQVpVUkVfSU9UX0FEVV9BR0VOVF9QUk9QRVJUWV9OQU1FX1ZFUlNJ T04pIC0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlhfQVpV UkVfSU9UX0FEVV9BR0VOVF9QUk9QRVJUWV9OQU1FX1ZFUlNJT04sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X2NvbnRlbnQgLT4gdXBkYXRlX2lkLnZl cnNpb25fbGVuZ3RoLCBtYW5pZmVzdF9jb250ZW50IC0+IHVwZGF0ZV9pZC52ZXJzaW9uKTsgLy8g VlVMTjogdW5zYWZlIHVzZSBvZiBzbnByaW50ZigpIHJldHVybiB2YWx1ZQoKICAgICAgICBpZiAo bnhfYXp1cmVfaW90X2pzb25fd3JpdGVyX2FwcGVuZF9wcm9wZXJ0eV93aXRoX3N0cmluZ192YWx1 ZSgmanNvbl93cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IFVDSEFSICopTlhfQVpVUkVfSU9U X0FEVV9BR0VOVF9QUk9QRVJUWV9OQU1FX0lOU1RBTExFRF9DT05URU5UX0lELAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZihOWF9BWlVSRV9JT1RfQURVX0FHRU5UX1BST1BFUlRZX05BTUVfSU5TVEFMTEVE X0NPTlRFTlRfSUQpIC0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHVfYWdlbnRfcHRyIC0+IG54X2F6dXJl X2lvdF9hZHVfYWdlbnRfdXBkYXRlX21hbmlmZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZV9pZF9s ZW5ndGgpKSAvLyBWVUxOOiBwb3RlbnRpYWxseSBsYXJnZSBsZW5ndGggaXMgdXNlZCB0byBwb3B1 bGF0ZSB0aGUgImluc3RhbGxlZFVwZGF0ZUlkIiBKU09OIHByb3BlcnR5CiAgICAgICAgewogICAg ICAgICAgICBueF9wYWNrZXRfcmVsZWFzZShwYWNrZXRfcHRyKTsKICAgICAgICAgICAgcmV0dXJu IChOWF9OT1RfU1VDQ0VTU0ZVTCk7CiAgICAgICAgfQogICAgfQouLi4KYGBgCgpXZSBhbHNvIHNw b3R0ZWQgc29tZSBwb3RlbnRpYWxseSBpbmVmZmVjdGl2ZSBzaXplIGNoZWNrcyBkdWUgdG8gYXNz ZXJ0aW9ucyBpbgpFY2xpcHNlIFRocmVhZFggVVNCWCwgaW4gdGhlIGZvbGxvd2luZyBmaWxlczoK KiAvY29tbW9uL2NvcmUvc3JjL3V4X2hjZF9zaW1faG9zdF90cmFuc2FjdGlvbl9zY2hlZHVsZS5j CiogL2NvbW1vbi91c2J4X2RldmljZV9jbGFzc2VzL3NyYy91eF9kZXZpY2VfY2xhc3NfYXVkaW8y MF9jb250cm9sX3Byb2Nlc3MuYwoKSWYgYXNzZXJ0aW9ucyB3ZXJlIGNvbXBpbGVkLW91dCBpbiBw cm9kdWN0aW9uIGNvZGUgYW5kIGB0ZCAtPgp1eF9zaW1faG9zdF90ZF9sZW5ndGhgIHdhcyBhdHRh Y2tlci1jb250cm9sbGVkLCB0aGUgYF91eF91dGlsaXR5X21lbW9yeV9jb3B5KClgCmZ1bmN0aW9u IHdvdWxkIGhhdmUgYmVlbiBhYmxlIHRvIHdyaXRlIHBhc3QgdGhlIGBzbGF2ZV90cmFuc2Zlcl9y ZXF1ZXN0IC0+CnV4X3NsYXZlX3RyYW5zZmVyX3JlcXVlc3Rfc2V0dXBgIGZpeGVkLXNpemUgKDgg Ynl0ZXMpIGJ1ZmZlcjoKYGBgYwpVSU5UICBfdXhfaGNkX3NpbV9ob3N0X3RyYW5zYWN0aW9uX3Nj aGVkdWxlKFVYX0hDRF9TSU1fSE9TVCAqaGNkX3NpbV9ob3N0LCBVWF9IQ0RfU0lNX0hPU1RfRUQg KmVkKQp7CgpVWF9EQ0RfU0lNX1NMQVZFICAgICAgICAqZGNkX3NpbV9zbGF2ZTsKVVhfSENEX1NJ TV9IT1NUX1REICAgICAgKnRkOwpVWF9IQ0RfU0lNX0hPU1RfVEQgICAgICAqaGVhZF90ZDsKVVhf SENEX1NJTV9IT1NUX1REICAgICAgKnRhaWxfdGQ7ClVYX0hDRF9TSU1fSE9TVF9URCAgICAgICpk YXRhX3RkOwpVWF9FTkRQT0lOVCAgICAgICAgICAgICAqZW5kcG9pbnQ7ClVYX1NMQVZFX0VORFBP SU5UICAgICAgICpzbGF2ZV9lbmRwb2ludDsKVVhfRENEX1NJTV9TTEFWRV9FRCAgICAgKnNsYXZl X2VkOwpVTE9ORyAgICAgICAgICAgICAgICAgICBzbGF2ZV90cmFuc2Zlcl9yZW1haW5pbmc7ClVD SEFSICAgICAgICAgICAgICAgICAgIHdha2VfaG9zdDsKVUNIQVIgICAgICAgICAgICAgICAgICAg d2FrZV9zbGF2ZTsKVUxPTkcgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25fbGVuZ3RoOwpV TE9ORyAgICAgICAgICAgICAgICAgICB0ZF9sZW5ndGg7ClVYX1NMQVZFX1RSQU5TRkVSICAgICAg ICpzbGF2ZV90cmFuc2Zlcl9yZXF1ZXN0OwpVWF9UUkFOU0ZFUiAgICAgICAgICAgICAqdHJhbnNm ZXJfcmVxdWVzdDsKVUxPTkcgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRfaW5kZXg7ClVYX1NM QVZFX0RDRCAgICAgICAgICAgICpkY2Q7CgogICAgVVhfUEFSQU1FVEVSX05PVF9VU0VEKGhjZF9z aW1faG9zdCk7CgogICAgLyogR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBEQ0QgcG9ydGlvbiBvZiB0 aGUgc2ltdWxhdG9yLiAgKi8KICAgIGRjZCA9ICAmX3V4X3N5c3RlbV9zbGF2ZSAtPiB1eF9zeXN0 ZW1fc2xhdmVfZGNkOwoKICAgIC8qIENoZWNrIHRoZSBzdGF0ZSBvZiB0aGUgY29udHJvbGxlciBp ZiBPUEVSQVRJT05BTCAuICAqLwogICAgaWYgKGRjZCAtPiB1eF9zbGF2ZV9kY2Rfc3RhdHVzICE9 ICBVWF9EQ0RfU1RBVFVTX09QRVJBVElPTkFMKQogICAgICAgIHJldHVybihVWF9FUlJPUik7Cgog ICAgLyogR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBjYW5kaWRhdGUgVEQgb24gdGhlIGhvc3QuICAq LwogICAgdGQgPSAgZWQgLT4gdXhfc2ltX2hvc3RfZWRfaGVhZF90ZDsKCiAgICAvKiBHZXQgdGhl IHBvaW50ZXIgdG8gdGhlIGVuZHBvaW50LiAgKi8KICAgIGVuZHBvaW50ID0gIGVkIC0+IHV4X3Np bV9ob3N0X2VkX2VuZHBvaW50OwoKICAgIC8qIEdldCB0aGUgcG9pbnRlciB0byB0aGUgdHJhbnNm ZXJfcmVxdWVzdCBhdHRhY2hlZCB3aXRoIHRoaXMgVEQuICAqLwogICAgdHJhbnNmZXJfcmVxdWVz dCA9ICB0ZCAtPiB1eF9zaW1faG9zdF90ZF90cmFuc2Zlcl9yZXF1ZXN0OwoKICAgIC8qIEdldCB0 aGUgaW5kZXggb2YgdGhlIGVuZHBvaW50IGZyb20gdGhlIGhvc3QuICAqLwogICAgZW5kcG9pbnRf aW5kZXggPSBlbmRwb2ludCAtPiB1eF9lbmRwb2ludF9kZXNjcmlwdG9yLmJFbmRwb2ludEFkZHJl c3MgJiB+KFVMT05HKVVYX0VORFBPSU5UX0RJUkVDVElPTjsKCiAgICAvKiBHZXQgdGhlIGFkZHJl c3Mgb2YgdGhlIGRldmljZSBjb250cm9sbGVyLiAgKi8KICAgIGRjZF9zaW1fc2xhdmUgPSAgKFVY X0RDRF9TSU1fU0xBVkUgKikgZGNkIC0+IHV4X3NsYXZlX2RjZF9jb250cm9sbGVyX2hhcmR3YXJl OwoKICAgIC8qIEdldCB0aGUgZW5kcG9pbnQgYXMgc2VlbiBmcm9tIHRoZSBkZXZpY2Ugc2lkZS4g ICovCiNpZmRlZiBVWF9ERVZJQ0VfQklESVJFQ1RJT05BTF9FTkRQT0lOVF9TVVBQT1JUCiAgICBz bGF2ZV9lZCA9ICgoZW5kcG9pbnQgLT4gdXhfZW5kcG9pbnRfZGVzY3JpcHRvci5iRW5kcG9pbnRB ZGRyZXNzID09IDApID8KICAgICAgICAgICAgJmRjZF9zaW1fc2xhdmUgLT4gdXhfZGNkX3NpbV9z bGF2ZV9lZFswXSA6CiAgICAgICAgICAgICgoZW5kcG9pbnQgLT4gdXhfZW5kcG9pbnRfZGVzY3Jp cHRvci5iRW5kcG9pbnRBZGRyZXNzICYgVVhfRU5EUE9JTlRfRElSRUNUSU9OKSA/CiAgICAgICAg ICAgICAgICAmZGNkX3NpbV9zbGF2ZSAtPiB1eF9kY2Rfc2ltX3NsYXZlX2VkX2luW2VuZHBvaW50 X2luZGV4XSA6CiAgICAgICAgICAgICAgICAmZGNkX3NpbV9zbGF2ZSAtPiB1eF9kY2Rfc2ltX3Ns YXZlX2VkW2VuZHBvaW50X2luZGV4XSkpOwojZWxzZQogICAgc2xhdmVfZWQgPSAgJmRjZF9zaW1f c2xhdmUgLT4gdXhfZGNkX3NpbV9zbGF2ZV9lZFtlbmRwb2ludF9pbmRleF07CiNlbmRpZgoKICAg IC8qIElzIHRoaXMgRUQgdXNlZD8gICovCiAgICBpZiAoKHNsYXZlX2VkIC0+IHV4X3NpbV9zbGF2 ZV9lZF9zdGF0dXMgJiBVWF9EQ0RfU0lNX1NMQVZFX0VEX1NUQVRVU19VU0VEKSA9PSAwKQogICAg ICAgIHJldHVybihVWF9FUlJPUik7CgogICAgLyogSXMgdGhpcyBFRCByZWFkeSBmb3IgdHJhbnNh Y3Rpb24gb3Igc3RhbGxlZCA/ICAqLwogICAgaWYgKChzbGF2ZV9lZCAtPiB1eF9zaW1fc2xhdmVf ZWRfc3RhdHVzICYgKFVYX0RDRF9TSU1fU0xBVkVfRURfU1RBVFVTX1RSQU5TRkVSIHwgVVhfRENE X1NJTV9TTEFWRV9FRF9TVEFUVVNfU1RBTExFRCkpID09IDApCiAgICAgICAgcmV0dXJuKFVYX0VS Uk9SKTsKCiAgICAvKiBHZXQgdGhlIGxvZ2ljYWwgZW5kcG9pbnQgZnJvbSB0aGUgcGh5c2ljYWwg ZW5kcG9pbnQuICAqLwogICAgc2xhdmVfZW5kcG9pbnQgPSAgc2xhdmVfZWQgLT4gdXhfc2ltX3Ns YXZlX2VkX2VuZHBvaW50OwoKICAgIC8qIEdldCB0aGUgcG9pbnRlciB0byB0aGUgdHJhbnNmZXIg cmVxdWVzdC4gICovCiAgICBzbGF2ZV90cmFuc2Zlcl9yZXF1ZXN0ID0gICZzbGF2ZV9lbmRwb2lu dCAtPiB1eF9zbGF2ZV9lbmRwb2ludF90cmFuc2Zlcl9yZXF1ZXN0OwoKICAgIC8qIENoZWNrIHRo ZSBwaGFzZSBmb3IgdGhpcyB0cmFuc2ZlciwgaWYgdGhpcyBpcyB0aGUgU0VUVVAgcGhhc2UsIHRy ZWF0bWVudCBpcyBkaWZmZXJlbnQuICBFeHBsYW5hdGlvbiBvZiBob3cgCiAgICAgICBjb250cm9s IHRyYW5zZmVycyBhcmUgaGFuZGxlZCBpbiB0aGUgc2ltdWxhdG9yOiBpZiB0aGUgZGF0YSBwaGFz ZSBpcyBPVVQsIHdlIGhhbmRsZSBpdCBpbW1lZGlhdGVseSwgbWVhbmluZyB3ZSAKICAgICAgIHNl bmQgYWxsIHRoZSBkYXRhIHRvIHRoZSBkZXZpY2UgYW5kIHJlbW92ZSB0aGUgU1RBVFVTIFREIGlu IHRoZSBzYW1lIHNjaGVkdWxlciBjYWxsLiBJZiB0aGUgZGF0YSBwaGFzZSBpcyBJTiwgd2UgCiAg ICAgICBvbmx5IHRha2Ugb3V0IHRoZSBTRVRVUCBURCBhbmQgaGFuZGxlIHRoZSBkYXRhIHBoYXNl IGxpa2UgYW55IG90aGVyIG5vbi1jb250cm9sIHRyYW5zYWN0aW9ucyAoaS5lLiB0aGUgc2NoZWR1 bGVyIAogICAgICAgY2FsbHMgdXMgYWdhaW4gd2l0aCB0aGUgREFUQSBURHMpLiAgKi8KICAgIGlm ICh0ZCAtPiB1eF9zaW1faG9zdF90ZF9zdGF0dXMgJiAgVVhfSENEX1NJTV9IT1NUX1REX1NFVFVQ X1BIQVNFKQogICAgewoKICAgICAgICAvKiBGb3IgY29udHJvbCB0cmFuc2Zlciwgc3RhbGwgaXMg Zm9yIHByb3RvY29sIGVycm9yIGFuZCBpdCdzIGNsZWFyZWQgYW55IHRpbWUgd2hlbiBTRVRVUCBp cyByZWNlaXZlZCAqLwogICAgICAgIHNsYXZlX2VkIC0+IHV4X3NpbV9zbGF2ZV9lZF9zdGF0dXMg Jj0gfihVTE9ORylVWF9EQ0RfU0lNX1NMQVZFX0VEX1NUQVRVU19TVEFMTEVEOwoKICAgICAgICAv KiBWYWxpZGF0ZSB0aGUgbGVuZ3RoIHRvIHRoZSBzZXR1cCB0cmFuc2FjdGlvbiBidWZmZXIuICAq LwogICAgICAgIFVYX0FTU0VSVCh0ZCAtPiB1eF9zaW1faG9zdF90ZF9sZW5ndGggPT0gOCk7IC8v IFZVTE46IGlmIGFzc2VydGlvbnMgYXJlIGNvbXBpbGVkLW91dCBpbiBwcm9kdWN0aW9uIGNvZGUs IHRoaXMgY2hlY2sgaXMgaW5lZmZlY3RpdmUKCiAgICAgICAgLyogUmVzZXQgYWN0dWFsIGRhdGEg bGVuZ3RoIChub3QgaW5jbHVkaW5nIFNFVFVQIHJlY2VpdmVkKSBzbyBmYXIuICAqLwogICAgICAg IHNsYXZlX3RyYW5zZmVyX3JlcXVlc3QgLT4gdXhfc2xhdmVfdHJhbnNmZXJfcmVxdWVzdF9hY3R1 YWxfbGVuZ3RoID0gIDA7CgogICAgICAgIC8qIE1vdmUgdGhlIGJ1ZmZlciBmcm9tIHRoZSBob3N0 IFREIHRvIHRoZSBkZXZpY2UgVEQuICAqLwogICAgICAgIF91eF91dGlsaXR5X21lbW9yeV9jb3B5 KHNsYXZlX3RyYW5zZmVyX3JlcXVlc3QgLT4gdXhfc2xhdmVfdHJhbnNmZXJfcmVxdWVzdF9zZXR1 cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZCAtPiB1eF9zaW1faG9zdF90ZF9i dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQgLT4gdXhfc2ltX2hvc3Rf dGRfbGVuZ3RoKTsgLyogVXNlIGNhc2Ugb2YgbWVtY3B5IGlzIHZlcmlmaWVkLiAqLyAvLyBWVUxO OiBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IGR1ZSB0byBpbmVmZmVjdGl2ZSBzaXplIGNoZWNr CmBgYAoKSWYgYXNzZXJ0aW9ucyB3ZXJlIGNvbXBpbGVkLW91dCBpbiBwcm9kdWN0aW9uIGNvZGUg YW5kIGBkYXRhX2xlbmd0aGAgd2FzCmF0dGFja2VyLWNvbnRyb2xsZWQsIHRoZSBgX3V4X3V0aWxp dHlfbWVtb3J5X2NvcHkoKWAgZnVuY3Rpb24gd291bGQgaGF2ZSBiZWVuCmFibGUgdG8gd3JpdGUg cGFzdCB0aGUgYHRyYW5zZmVyIC0+IHV4X3NsYXZlX3RyYW5zZmVyX3JlcXVlc3RfZGF0YV9wb2lu dGVyYApidWZmZXI6CmBgYGMKLi4uClVJTlQgX3V4X2RldmljZV9jbGFzc19hdWRpbzIwX2NvbnRy b2xfcHJvY2VzcyhVWF9ERVZJQ0VfQ0xBU1NfQVVESU8gKmF1ZGlvLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVhfU0xBVkVfVFJBTlNGRVIgKnRyYW5zZmVy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVhfREVWSUNF X0NMQVNTX0FVRElPMjBfQ09OVFJPTF9HUk9VUCAqZ3JvdXApCnsKClVYX1NMQVZFX0VORFBPSU5U ICAgICAgICAgICAgICAgICAgICplbmRwb2ludDsKVVhfREVWSUNFX0NMQVNTX0FVRElPMjBfQ09O VFJPTCAgICAgKmNvbnRyb2w7ClVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl cXVlc3Q7ClVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfdHlwZTsK VUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdF9pZDsKVUNIQVIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbF9zZWxlY3RvcjsKVUNIQVIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbF9udW1iZXI7ClVMT05HICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlcXVlc3RfbGVuZ3RoOwpVTE9ORyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkYXRhX2xlbmd0aDsKVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaTsKVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9zdWIsIHBvcywgbWlu LCBtYXgsIHJlcywgZnJlcTsKCiAgICAvKiBHZXQgaW5zdGFuY2VzLiAgKi8KICAgIGVuZHBvaW50 ID0gJmF1ZGlvIC0+IHV4X2RldmljZV9jbGFzc19hdWRpb19kZXZpY2UgLT4gdXhfc2xhdmVfZGV2 aWNlX2NvbnRyb2xfZW5kcG9pbnQ7CiAgICB0cmFuc2ZlciA9ICZlbmRwb2ludCAtPiB1eF9zbGF2 ZV9lbmRwb2ludF90cmFuc2Zlcl9yZXF1ZXN0OwoKICAgIC8qIEV4dHJhY3QgYWxsIG5lY2Vzc2Fy eSBmaWVsZHMgb2YgdGhlIHJlcXVlc3QuICAqLwogICAgcmVxdWVzdCAgICAgICAgICA9ICoodHJh bnNmZXIgLT4gdXhfc2xhdmVfdHJhbnNmZXJfcmVxdWVzdF9zZXR1cCArIFVYX0RFVklDRV9DTEFT U19BVURJT19SRVFVRVNUX1JFUVVFU1QpOwogICAgcmVxdWVzdF90eXBlICAgICA9ICoodHJhbnNm ZXIgLT4gdXhfc2xhdmVfdHJhbnNmZXJfcmVxdWVzdF9zZXR1cCArIFVYX0RFVklDRV9DTEFTU19B VURJT19SRVFVRVNUX1JFUVVFU1RfVFlQRSk7CiAgICB1bml0X2lkICAgICAgICAgID0gKih0cmFu c2ZlciAtPiB1eF9zbGF2ZV90cmFuc2Zlcl9yZXF1ZXN0X3NldHVwICsgVVhfREVWSUNFX0NMQVNT X0FVRElPX1JFUVVFU1RfRU5FSVRZX0lEKTsKICAgIGNvbnRyb2xfc2VsZWN0b3IgPSAqKHRyYW5z ZmVyIC0+IHV4X3NsYXZlX3RyYW5zZmVyX3JlcXVlc3Rfc2V0dXAgKyBVWF9ERVZJQ0VfQ0xBU1Nf QVVESU9fUkVRVUVTVF9DT05UUk9MX1NFTEVDVE9SKTsKICAgIGNoYW5uZWxfbnVtYmVyICAgPSAq KHRyYW5zZmVyIC0+IHV4X3NsYXZlX3RyYW5zZmVyX3JlcXVlc3Rfc2V0dXAgKyBVWF9ERVZJQ0Vf Q0xBU1NfQVVESU9fUkVRVUVTVF9DSEFOTkVMX05VTUJFUik7CiAgICByZXF1ZXN0X2xlbmd0aCAg ID0gX3V4X3V0aWxpdHlfc2hvcnRfZ2V0KHRyYW5zZmVyIC0+IHV4X3NsYXZlX3RyYW5zZmVyX3Jl cXVlc3Rfc2V0dXAgKyBVWF9TRVRVUF9MRU5HVEgpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBncm91 cCAtPiB1eF9kZXZpY2VfY2xhc3NfYXVkaW8yMF9jb250cm9sX2dyb3VwX2NvbnRyb2xzX25iOyBp ICsrKQogICAgewogICAgICAgIGNvbnRyb2wgPSAmZ3JvdXAgLT4gdXhfZGV2aWNlX2NsYXNzX2F1 ZGlvMjBfY29udHJvbF9ncm91cF9jb250cm9sc1tpXTsKCiAgICAgICAgLyogUmVzZXQgY2hhbmdl IG1hcC4gICovCiAgICAgICAgY29udHJvbCAtPiB1eF9kZXZpY2VfY2xhc3NfYXVkaW8yMF9jb250 cm9sX2NoYW5nZWQgPSAwOwoKICAgICAgICAvKiBJcyB0aGlzIHJlcXVlc3QgYSBjbG9jayB1bml0 IHJlcXVlc3Q/ICAqLwogICAgICAgIGlmICh1bml0X2lkID09IGNvbnRyb2wgLT4gdXhfZGV2aWNl X2NsYXNzX2F1ZGlvMjBfY29udHJvbF9jc19pZCkKICAgICAgICB7CgogICAgICAgICAgICAvKiBD bG9jayBTb3VyY2UgcmVxdWVzdC4KICAgICAgICAgICAgICogV2Ugb25seSBzdXBwb3J0IFNhbXBs aW5nIEZyZXF1ZW5jeSBDb250cm9sIGhlcmUuCiAgICAgICAgICAgICAqIFRoZSBTYW1wbGluZyBG cmVxdWVuY3kgQ29udHJvbCBtdXN0IHN1cHBvcnQgdGhlIENVUiBhbmQgUkFOR0UoTUlOLCBNQVgs IFJFUykgYXR0cmlidXRlcy4KICAgICAgICAgICAgICovCi4uLgogICAgICAgICAgICAvKiBXZSBq dXN0IHN1cHBvcnQgc2FtcGxpbmcgZnJlcXVlbmN5IGNvbnRyb2wsIEdFVCByZXF1ZXN0LiAgKi8K ICAgICAgICAgICAgaWYgKChyZXF1ZXN0X3R5cGUgJiBVWF9SRVFVRVNUX0RJUkVDVElPTikgPT0g VVhfUkVRVUVTVF9JTiAmJgogICAgICAgICAgICAgICAgKGNvbnRyb2xfc2VsZWN0b3IgPT0gVVhf REVWSUNFX0NMQVNTX0FVRElPMjBfQ1NfU0FNX0ZSRVFfQ09OVFJPTCkpCiAgICAgICAgICAgIHsK CiAgICAgICAgICAgICAgICBzd2l0Y2gocmVxdWVzdCkKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgIGNhc2UgVVhfREVWSUNFX0NMQVNTX0FVRElPMjBfQ1VSOgoKICAgICAgICAgICAg ICAgICAgICAvKiBDaGVjayByZXF1ZXN0IHBhcmFtZXRlci4gICovCiAgICAgICAgICAgICAgICAg ICAgaWYgKHJlcXVlc3RfbGVuZ3RoIDwgNCkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CgogICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgc2FtcGxpbmcgZnJlcXVlbmN5LiAgKi8KICAg ICAgICAgICAgICAgICAgICBpZiAoY29udHJvbCAtPiB1eF9kZXZpY2VfY2xhc3NfYXVkaW8yMF9j b250cm9sX3NhbXBsaW5nX2ZyZXF1ZW5jeSkKICAgICAgICAgICAgICAgICAgICAgICAgX3V4X3V0 aWxpdHlfbG9uZ19wdXQodHJhbnNmZXIgLT4gdXhfc2xhdmVfdHJhbnNmZXJfcmVxdWVzdF9kYXRh X3BvaW50ZXIsIGNvbnRyb2wgLT4gdXhfZGV2aWNlX2NsYXNzX2F1ZGlvMjBfY29udHJvbF9zYW1w bGluZ19mcmVxdWVuY3kpOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg ICAgICAgICAgX3V4X3V0aWxpdHlfbG9uZ19wdXQodHJhbnNmZXIgLT4gdXhfc2xhdmVfdHJhbnNm ZXJfcmVxdWVzdF9kYXRhX3BvaW50ZXIsIGNvbnRyb2wgLT4gdXhfZGV2aWNlX2NsYXNzX2F1ZGlv MjBfY29udHJvbF9zYW1wbGluZ19mcmVxdWVuY3lfY3VyKTsKICAgICAgICAgICAgICAgICAgICBf dXhfZGV2aWNlX3N0YWNrX3RyYW5zZmVyX3JlcXVlc3QodHJhbnNmZXIsIDQsIHJlcXVlc3RfbGVu Z3RoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4oVVhfU1VDQ0VTUyk7CgogICAgICAgICAg ICAgICAgY2FzZSBVWF9ERVZJQ0VfQ0xBU1NfQVVESU8yMF9SQU5HRToKCiAgICAgICAgICAgICAg ICAgICAgLyogQ2hlY2sgcmVxdWVzdCBwYXJhbWV0ZXIuICAqLwogICAgICAgICAgICAgICAgICAg IGlmIChyZXF1ZXN0X2xlbmd0aCA8IDIpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoK ICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbCAtPiB1eF9kZXZpY2VfY2xhc3NfYXVkaW8y MF9jb250cm9sX3NhbXBsaW5nX2ZyZXF1ZW5jeSA9PSAwKQogICAgICAgICAgICAgICAgICAgIHsK CiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgcmFuZ2UgcGFyYW1ldGVycywgUkFOR0Ug aXMgY3VzdG9taXplZC4gICovCiAgICAgICAgICAgICAgICAgICAgICAgIFVYX0FTU0VSVChjb250 cm9sIC0+IHV4X2RldmljZV9jbGFzc19hdWRpbzIwX2NvbnRyb2xfc2FtcGxpbmdfZnJlcXVlbmN5 X3JhbmdlICE9IFVYX05VTEwpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IHdOdW1T dWJSYW5nZXMuICAqLwogICAgICAgICAgICAgICAgICAgICAgICBuX3N1YiA9IF91eF91dGlsaXR5 X3Nob3J0X2dldChjb250cm9sIC0+IHV4X2RldmljZV9jbGFzc19hdWRpbzIwX2NvbnRyb2xfc2Ft cGxpbmdfZnJlcXVlbmN5X3JhbmdlKTsKICAgICAgICAgICAgICAgICAgICAgICAgVVhfQVNTRVJU KG5fc3ViID4gMCk7CgogICAgICAgICAgICAgICAgICAgICAgICAvKiBDYWxjdWxhdGUgbGVuZ3Ro LCBuX3N1YiBpcyAxNi1iaXQgd2lkdGgsIHJlc3VsdCBub3Qgb3ZlcmZsb3dzIFVMT05HLiAgKi8K ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9sZW5ndGggPSAyICsgbl9zdWIgKiAxMjsKICAg ICAgICAgICAgICAgICAgICAgICAgVVhfQVNTRVJUKGRhdGFfbGVuZ3RoIDw9IFVYX1NMQVZFX1JF UVVFU1RfQ09OVFJPTF9NQVhfTEVOR1RIKTsgIC8vIFZVTE46IGlmIGFzc2VydGlvbnMgYXJlIGNv bXBpbGVkLW91dCBpbiBwcm9kdWN0aW9uIGNvZGUsIHRoaXMgY2hlY2sgaXMgaW5lZmZlY3RpdmUK CiAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvcHkgZGF0YS4gICovCiAgICAgICAgICAgICAg ICAgICAgICAgIGRhdGFfbGVuZ3RoID0gVVhfTUlOKGRhdGFfbGVuZ3RoLCByZXF1ZXN0X2xlbmd0 aCk7CiAgICAgICAgICAgICAgICAgICAgICAgIF91eF91dGlsaXR5X21lbW9yeV9jb3B5KHRyYW5z ZmVyIC0+IHV4X3NsYXZlX3RyYW5zZmVyX3JlcXVlc3RfZGF0YV9wb2ludGVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgLT4gdXhfZGV2aWNlX2NsYXNzX2F1ZGlvMjBf Y29udHJvbF9zYW1wbGluZ19mcmVxdWVuY3lfcmFuZ2UsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGF0YV9sZW5ndGgpOyAvKiBVc2UgY2FzZSBvZiBtZW1jcHkgaXMgdmVyaWZpZWQu ICovIC8vIFZVTE46IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgZHVlIHRvIGluZWZmZWN0aXZl IHNpemUgY2hlY2sKLi4uCmBgYAoKUGxlYXNlIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgb3RoZXIg aW5zdGFuY2VzL3ZhcmlhbnRzIG9mIHRoZXNlIGxhc3QgYnVncy4KVGhlcmVmb3JlLCBhIHRob3Jv dWdoIGFzc2Vzc21lbnQgb2YgYWxsIGFzc2VydGlvbnMgdXNlZCB0byBjaGVjayBidWZmZXIgc2l6 ZXMKaW4gRWNsaXBzZSBUaHJlYWRYIGNvZGViYXNlIGlzIHJlY29tbWVuZGVkLgoKRmluYWxseSwg aW4gRWNsaXBzZSBUaHJlYWRYIFVTQlggYmVmb3JlIHB1bGwgcmVxdWVzdCAjMTYxIHdhcyBtZXJn ZWQsIHRoZXJlIHdhcwphIG1lbW9yeSBjb3B5IHdpdGggdW5jaGVja2VkIHNpemUgaW4gdGhlCmBf dXhfaG9zdF9jbGFzc19waW1hX3N0b3JhZ2VfaW5mb19nZXQoKWAgZnVuY3Rpb24gaW4gdGhlIGZv bGxvd2luZyBmaWxlOgoqIC9jb21tb24vdXNieF9ob3N0X2NsYXNzZXMvc3JjL3V4X2hvc3RfY2xh c3NfcGltYV9zdG9yYWdlX2luZm9fZ2V0LmMKClRoZXJlIHdhcyBubyBzaXplIGNoZWNrIGZvciB0 aGUgdHdvIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMgdmlhIHRoZQpgX3V4X3V0aWxpdHlfbWVtb3J5 X2NvcHkoKWAgZnVuY3Rpb24gbWFya2VkIGJlbG93LiBUaGVyZWZvcmUsIGEgd3JpdGUgcGFzdCB0 aGUKZW5kIG9mIHRoZSBmaXhlZCBzaXplICgyNTYgYnl0ZXMpIGJ1ZmZlciBgc3RvcmFnZSAtPgp1 eF9ob3N0X2NsYXNzX3BpbWFfc3RvcmFnZV9kZXNjcmlwdGlvbmAgY291bGQgaGF2ZSBvY2N1cmVk OgpgYGBjClVJTlQgIF91eF9ob3N0X2NsYXNzX3BpbWFfc3RvcmFnZV9pbmZvX2dldChVWF9IT1NU X0NMQVNTX1BJTUEgKnBpbWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBVWF9IT1NUX0NMQVNTX1BJTUFfU0VTU0lPTiAqcGltYV9zZXNzaW9uLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxPTkcgc3RvcmFnZV9pZCwgVVhfSE9TVF9DTEFT U19QSU1BX1NUT1JBR0UgKnN0b3JhZ2UpCnsKClVYX0hPU1RfQ0xBU1NfUElNQV9DT01NQU5EICAg ICAgICAgICBjb21tYW5kOwpVSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh dHVzOwpVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0b3JhZ2VfYnVmZmVy OwpVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0b3JhZ2VfcG9pbnRlcjsK VUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVfc3RyaW5nX2xlbmd0 aDsKCiAgICAvKiBJZiB0cmFjZSBpcyBlbmFibGVkLCBpbnNlcnQgdGhpcyBldmVudCBpbnRvIHRo ZSB0cmFjZSBidWZmZXIuICAqLwogICAgVVhfVFJBQ0VfSU5fTElORV9JTlNFUlQoVVhfVFJBQ0Vf SE9TVF9DTEFTU19QSU1BX1NUT1JBR0VfSU5GT19HRVQsIHBpbWEsIHN0b3JhZ2VfaWQsIHN0b3Jh Z2UsIDAsIFVYX1RSQUNFX0hPU1RfQ0xBU1NfRVZFTlRTLCAwLCAwKQoKICAgIC8qIENoZWNrIGlm IHRoaXMgc2Vzc2lvbiBpcyB2YWxpZCBvciBub3QuICAqLwogICAgaWYgKHBpbWFfc2Vzc2lvbiAt PiB1eF9ob3N0X2NsYXNzX3BpbWFfc2Vzc2lvbl9tYWdpYyAhPSBVWF9IT1NUX0NMQVNTX1BJTUFf TUFHSUNfTlVNQkVSKQogICAgICAgIHJldHVybiAoVVhfSE9TVF9DTEFTU19QSU1BX1JDX1NFU1NJ T05fTk9UX09QRU4pOwoKICAgIC8qIENoZWNrIGlmIHRoaXMgc2Vzc2lvbiBpcyBvcGVuZWQgb3Ig bm90LiAgKi8KICAgIGlmIChwaW1hX3Nlc3Npb24gLT4gdXhfaG9zdF9jbGFzc19waW1hX3Nlc3Np b25fc3RhdGUgIT0gVVhfSE9TVF9DTEFTU19QSU1BX1NFU1NJT05fU1RBVEVfT1BFTkVEKQogICAg ICAgIHJldHVybiAoVVhfSE9TVF9DTEFTU19QSU1BX1JDX1NFU1NJT05fTk9UX09QRU4pOwoKICAg IC8qIElzc3VlIGNvbW1hbmQgdG8gZ2V0IHRoZSBzdG9yYWdlIElEcy4gIDEgcGFyYW1ldGVyLiAg Ki8KICAgIGNvbW1hbmQudXhfaG9zdF9jbGFzc19waW1hX2NvbW1hbmRfbmJfcGFyYW1ldGVycyA9 ICAxOwoKICAgIC8qIFBhcmFtZXRlciAxIGlzIHRoZSBTdG9yYWdlIElELiAgKi8KICAgIGNvbW1h bmQudXhfaG9zdF9jbGFzc19waW1hX2NvbW1hbmRfcGFyYW1ldGVyXzEgPSAgc3RvcmFnZV9pZDsK CiAgICAvKiBPdGhlciBwYXJhbWV0ZXJzIHVudXNlZC4gICovCiAgICBjb21tYW5kLnV4X2hvc3Rf Y2xhc3NfcGltYV9jb21tYW5kX3BhcmFtZXRlcl8yID0gIDA7CiAgICBjb21tYW5kLnV4X2hvc3Rf Y2xhc3NfcGltYV9jb21tYW5kX3BhcmFtZXRlcl8zID0gIDA7CiAgICBjb21tYW5kLnV4X2hvc3Rf Y2xhc3NfcGltYV9jb21tYW5kX3BhcmFtZXRlcl80ID0gIDA7CiAgICBjb21tYW5kLnV4X2hvc3Rf Y2xhc3NfcGltYV9jb21tYW5kX3BhcmFtZXRlcl81ID0gIDA7CgogICAgLyogVGhlbiBzZXQgdGhl IGNvbW1hbmQgdG8gR0VUX1NUT1JBR0VfSU5GTy4gICovCiAgICBjb21tYW5kLnV4X2hvc3RfY2xh c3NfcGltYV9jb21tYW5kX29wZXJhdGlvbl9jb2RlID0gIFVYX0hPU1RfQ0xBU1NfUElNQV9PQ19H RVRfU1RPUkFHRV9JTkZPOwoKICAgIC8qIEFsbG9jYXRlIHNvbWUgRE1BIHNhZmUgbWVtb3J5IGZv ciByZWNlaXZpbmcgdGhlIHN0b3JhZ2UgaW5mbyBibG9jay4gICovCiAgICBzdG9yYWdlX2J1ZmZl ciA9ICBfdXhfdXRpbGl0eV9tZW1vcnlfYWxsb2NhdGUoVVhfU0FGRV9BTElHTiwgVVhfQ0FDSEVf U0FGRV9NRU1PUlksIFVYX0hPU1RfQ0xBU1NfUElNQV9TVE9SQUdFX01BWF9MRU5HVEgpOwogICAg aWYgKHN0b3JhZ2UgPT0gVVhfTlVMTCkKICAgICAgICByZXR1cm4oVVhfTUVNT1JZX0lOU1VGRklD SUVOVCk7CgogICAgLyogSXNzdWUgdGhlIGNvbW1hbmQuICAqLwogICAgc3RhdHVzID0gX3V4X2hv c3RfY2xhc3NfcGltYV9jb21tYW5kKHBpbWEsICZjb21tYW5kLCBVWF9IT1NUX0NMQVNTX1BJTUFf REFUQV9QSEFTRV9JTiAsIHN0b3JhZ2VfYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVVhfSE9TVF9DTEFTU19QSU1BX1NUT1JBR0VfTUFYX0xFTkdUSCwgVVhf SE9TVF9DTEFTU19QSU1BX1NUT1JBR0VfTUFYX0xFTkdUSCk7CgogICAgLyogQ2hlY2sgdGhlIHJl c3VsdC4gSWYgdGhlIHJlc3VsdCBpcyBPSywgdGhlIHN0b3JhZ2UgaW5mbyBibG9jayB3YXMgcmVh ZCBwcm9wZXJseS4gKi8KICAgIGlmIChzdGF0dXMgPT0gVVhfU1VDQ0VTUykKICAgIHsKICAgICAg ICAvKiBVbmNvbXByZXNzIHRoZSBzdG9yYWdlIGRlc2NyaXB0b3IsIGF0IGxlYXN0IHRoZSBmaXhl ZCBwYXJ0LiAgKi8KICAgICAgICBfdXhfdXRpbGl0eV9kZXNjcmlwdG9yX3BhcnNlKHN0b3JhZ2Vf YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX3V4X3N5c3RlbV9jbGFzc19waW1h X29iamVjdF9zdHJ1Y3R1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVWF9IT1NUX0NM QVNTX1BJTUFfT0JKRUNUX0VOVFJJRVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUNI QVIgKikgc3RvcmFnZSk7CgogICAgICAgIC8qIENvcHkgdGhlIHN0b3JhZ2UgZGVzY3JpcHRpb24g ZmllbGQuICBQb2ludCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdG9yYWdlIGRlc2NyaXB0aW9u IHN0cmluZy4gICovCiAgICAgICAgc3RvcmFnZV9wb2ludGVyID0gIHN0b3JhZ2VfYnVmZmVyICsg VVhfSE9TVF9DTEFTU19QSU1BX1NUT1JBR0VfVkFSSUFCTEVfT0ZGU0VUOwoKICAgICAgICAvKiBH ZXQgdGhlIHVuaWNvZGUgc3RyaW5nIGxlbmd0aC4gICovCiAgICAgICAgdW5pY29kZV9zdHJpbmdf bGVuZ3RoID0gIChVTE9ORykgKnN0b3JhZ2VfcG9pbnRlciA7CgogICAgICAgIC8qIENvcHkgdGhh dCBzdHJpbmcgaW50byB0aGUgc3RvcmFnZSBkZXNjcmlwdGlvbiBmaWVsZC4gICovCiAgICAgICAg X3V4X3V0aWxpdHlfbWVtb3J5X2NvcHkoc3RvcmFnZSAtPiB1eF9ob3N0X2NsYXNzX3BpbWFfc3Rv cmFnZV9kZXNjcmlwdGlvbiwgc3RvcmFnZV9wb2ludGVyLCB1bmljb2RlX3N0cmluZ19sZW5ndGgp OyAvKiBVc2UgY2FzZSBvZiBtZW1jcHkgaXMgdmVyaWZpZWQuICovIC8vIFZVTE46IHVuY2hlY2tl ZCBjb3B5IHNpemUgZm9yIGEgY29weSBpbiBhIGZpeGVkIHNpemUgKDI1NiBieXRlcykgYnVmZmVy IChVWF9IT1NUX0NMQVNTX1BJTUFfU1RPUkFHRV9NQVhfTEVOR1RIIHVzZWQgdG8gZHluYW1pY2Fs bHkgYWxsb2NhdGUgc3RvcmFnZV9idWZmZXIgaXMgNTEyIGJ5dGVzKQoKICAgICAgICAvKiBQb2lu dCB0byB0aGUgdm9sdW1lIGxhYmVsLiAgKi8KICAgICAgICBzdG9yYWdlX3BvaW50ZXIgPSAgc3Rv cmFnZV9idWZmZXIgKyBVWF9IT1NUX0NMQVNTX1BJTUFfU1RPUkFHRV9WQVJJQUJMRV9PRkZTRVQg KyB1bmljb2RlX3N0cmluZ19sZW5ndGg7CgogICAgICAgIC8qIEdldCB0aGUgdW5pY29kZSBzdHJp bmcgbGVuZ3RoLiAgKi8KICAgICAgICB1bmljb2RlX3N0cmluZ19sZW5ndGggPSAgKFVMT05HKSAq c3RvcmFnZV9wb2ludGVyIDsKCiAgICAgICAgLyogQ29weSB0aGF0IHN0cmluZyBpbnRvIHRoZSBz dG9yYWdlIHZvbHVtZSBsYWJlbCBmaWVsZC4gICovCiAgICAgICAgX3V4X3V0aWxpdHlfbWVtb3J5 X2NvcHkoc3RvcmFnZSAtPiB1eF9ob3N0X2NsYXNzX3BpbWFfc3RvcmFnZV92b2x1bWVfbGFiZWws IHN0b3JhZ2VfcG9pbnRlciwgdW5pY29kZV9zdHJpbmdfbGVuZ3RoKTsgLyogVXNlIGNhc2Ugb2Yg bWVtY3B5IGlzIHZlcmlmaWVkLiAqLyAvLyBWVUxOOiB1bmNoZWNrZWQgY29weSBzaXplIGZvciBh IGNvcHkgaW4gYSBmaXhlZCBzaXplICgyNTYgYnl0ZXMpIGJ1ZmZlciAoVVhfSE9TVF9DTEFTU19Q SU1BX1NUT1JBR0VfTUFYX0xFTkdUSCB1c2VkIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIHN0b3Jh Z2VfYnVmZmVyIGlzIDUxMiBieXRlcykKCiAgICB9CgogICAgLyogRnJlZSB0aGUgb3JpZ2luYWwg c3RvcmFnZSBpbmZvIGJ1ZmZlci4gICovCiAgICBfdXhfdXRpbGl0eV9tZW1vcnlfZnJlZShzdG9y YWdlX2J1ZmZlcik7CgogICAgLyogUmV0dXJuIGNvbXBsZXRpb24gc3RhdHVzLiAgKi8KICAgIHJl dHVybihzdGF0dXMpOwp9CmBgYAoKCi0tWyA0IC0gQWZmZWN0ZWQgcHJvZHVjdHMKCkVjbGlwc2Ug VGhyZWFkWCBiZWZvcmUgdmVyc2lvbiA2LjQuMCB3YXMgYWZmZWN0ZWQgYnkgdGhlIHZ1bG5lcmFi aWxpdGllcwpkaXNjdXNzZWQgaW4gdGhpcyBhZHZpc29yeS4gVGhlIG90aGVyIGJ1Z3MgaW4gRWNs aXBzZSBUaHJlYWRYIE5ldFggRHVvIGFuZCBVU0JYCnRoYXQgd2UgcmVwb3J0ZWQgd2lsbCBiZSBw YXRjaGVkIGluIHN1YnNlcXVlbnQgcmVsZWFzZXMgb2YgRWNsaXBzZSBUaHJlYWRYLgoKCi0tWyA1 IC0gUmVtZWRpYXRpb24KCkVjbGlwc2UgVGhyZWFkWCBtYWludGFpbmVycyBoYXZlIGZpeGVkIGFs bCB2dWxuZXJhYmlsaXRpZXMgZGlzY3Vzc2VkIGluIHRoaXMKYWR2aXNvcnkuCgpQbGVhc2UgY2hl Y2sgdGhlIG9mZmljaWFsIEVjbGlwc2UgVGhyZWFkWCBjaGFubmVscyBmb3IgZnVydGhlciBpbmZv cm1hdGlvbgphYm91dCBmaXhlcy4KCgotLVsgNiAtIERpc2Nsb3N1cmUgdGltZWxpbmUKCldlIHJl cG9ydGVkIHRoZSB2dWxuZXJhYmlsaXRpZXMgZGlzY3Vzc2VkIGluIHRoaXMgYWR2aXNvcnkgdG8g TWljcm9zb2Z0IGluCkRlY2VtYmVyIDIwMjMgYW5kIGVhcmx5IEphbnVhcnkgMjAyNCwgdmlhIHRo ZWlyIE1TUkMgUmVzZWFyY2hlciBQb3J0YWwgWzhdLgpGb3Igb3VyIGVmZm9ydHMsIHdlIHdlcmUg YXdhcmRlZCA3dGggcGxhY2UgaW4gdGhlIFRvcCBNU1JDIDIwMjMgUTQgQXp1cmUKU2VjdXJpdHkg UmVzZWFyY2hlcnMgTGVhZGVyYm9hcmQgWzldLgoKRm9sbG93aW5nIHRoZSBwcm9qZWN0IG93bmVy c2hpcCB0cmFuc2ZlciB0byB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB3aXRoCk1pY3Jvc29mdCdz IGhlbHAsIHdlIGNvb3JkaW5hdGVkIHdpdGggdGhlIG5ldyBtYWludGFpbmVycyB0byBwcm92aWRl CnZ1bG5lcmFiaWxpdHkgaW5mb3JtYXRpb24gYW5kIGZpeGVzIHRvIHRoZSBUaHJlYWRYIHVzZXJz JyBjb21tdW5pdHkuCgpUaGUgKHNpbXBsaWZpZWQpIGNvb3JkaW5hdGVkIGRpc2Nsb3N1cmUgdGlt ZWxpbmUgZm9sbG93czoKCjIwMjMtMTItMDE6IFJlcG9ydGVkIHR3byB2dWxuZXJhYmlsaXRpZXMg dG8gTVNSQy4KMjAyMy0xMi0xMzogTVNSQyBjb25maXJtZWQgb3VyIGZpcnN0IHZ1bG5lcmFiaWxp dHkuCjIwMjMtMTItMTQ6IE1TUkMgY29uZmlybWVkIG91ciBzZWNvbmQgdnVsbmVyYWJpbGl0eS4K MjAyMy0xMi0yMTogUmVwb3J0ZWQgb3RoZXIgdHdvIHZ1bG5lcmFiaWxpdGllcyB0byBNU1JDLgoy MDIzLTEyLTMxOiBSZXBvcnRlZCBhbm90aGVyIHZ1bG5lcmFiaWxpdHkgdG8gTVNSQy4KMjAyNC0w MS0wMjogUmVwb3J0ZWQgb3RoZXIgdGhyZWUgdnVsbmVyYWJpbGl0aWVzIHRvIE1TUkMuCjIwMjQt MDEtMDU6IE1TUkMgY29uZmlybWVkIGEgdnVsbmVyYWJpbGl0eSB3YXMgZml4ZWQgaW4gdmVyc2lv biA2LjQuCjIwMjQtMDEtMDY6IE1TUkMgaW5mb3JtZWQgdXMgd2UgbWFkZSB0aGUgMjAyMyBRNCBs ZWFkZXJib2FyZCEKMjAyNC0wMS0xMDogTVNSQyBjb25maXJtZWQgYW5vdGhlciB2dWxuZXJhYmls aXR5IHdhcyBmaXhlZCBpbiB2ZXJzaW9uIDYuNC4KMjAyNC0wMi0xMDogQXNrZWQgTVNSQyBmb3Ig dXBkYXRlcyBvbiBhbGwgb3BlbiByZXBvcnRzLgoyMDI0LTAyLTE2OiBBc2tlZCB0aGUgRWNsaXBz ZSBGb3VuZGF0aW9uIGZvciBhZHZpY2Ugb24gaG93IHRvIHByb2NlZWQuCjIwMjQtMDItMjA6IEVj bGlwc2UgcmVwbGllZCB0aGV5IHdlcmUgY29vcmRpbmF0aW5nIHdpdGggTVNSQy4KMjAyNC0wMi0y MTogTVNSQyBpbmZvcm1lZCB1cyBvZiB0aGUgb3duZXJzaGlwIHRyYW5zZmVyIHRvIEVjbGlwc2Uu CjIwMjQtMDItMjc6IE1TUkMgY29uZmlybWVkIGEgdGhpcmQgdnVsbmVyYWJpbGl0eSB3YXMgZml4 ZWQgaW4gdmVyc2lvbiA2LjQuCjIwMjQtMDItMjg6IFVwb24gTVNSQydzIHJlcXVlc3QsIHdlIHN1 Ym1pdHRlZCBvdXIgcmVwb3J0cyB0byBFY2xpcHNlLgoyMDI0LTAzLTA1OiBFY2xpcHNlIHN0YXJ0 ZWQgY3JlYXRpbmcgR2l0SHViIGFkdmlzb3JpZXMgZm9yIGFsbCByZXBvcnRzLgoyMDI0LTAzLTEz OiBQcm92aWRlZCBFY2xpcHNlIHdpdGggY2xhcmlmaWNhdGlvbnMgb24gc29tZSBvZiB0aGUgcmVw b3J0cy4KMjAyNC0wMy0xNTogTVNSQyBwcm92aWRlZCBzb21lIGFkZGl0aW9uYWwgZmVlZGJhY2sg b24gdGhlIHRyYW5zaXRpb24uCjIwMjQtMDMtMTg6IEVjbGlwc2UgZmluaXNoZWQgY3JlYXRpbmcg R2l0SHViIGFkdmlzb3JpZXMgZm9yIGFsbCByZXBvcnRzLgoyMDI0LTAzLTIyOiBNU1JDIGNsb3Nl ZCB0aGUgcmVtYWluaW5nIGNhc2VzIGFmdGVyIHRoZSB0cmFuc2l0aW9uLgoyMDI0LTAzLTI1OiBF Y2xpcHNlIHB1Ymxpc2hlZCBDVkUtMjAyNC0yMjEyLCBDVkUtMjAyNC0yMjE0LCBDVkUtMjAyNC0y NDUyLgoyMDI0LTAzLTI5OiBQcm92aWRlZCBFY2xpcHNlIHdpdGggY2xhcmlmaWNhdGlvbnMgb24g cmVtYWluaW5nIHJlcG9ydHMuCjIwMjQtMDQtMjQ6IEFza2VkIGZvciBhIHN0YXR1cyB1cGRhdGUg b24gdGhlIHJlbWFpbmluZyByZXBvcnRzLgoyMDI0LTA0LTI2OiBBZ3JlZWQgdG8gZGVjbGFzcyB0 aGUgcmVtYWluaW5nIHJlcG9ydHMgdG8gc3RhbmRhcmQgaXNzdWVzLgoyMDI0LTA1LTAyOiBTZW50 IGRyYWZ0IGFkdmlzb3J5IGFuZCB3cml0ZXVwIHRvIE1TUkMgYW5kIEVjbGlwc2UuCjIwMjQtMDUt Mjg6IFB1Ymxpc2hlZCBhZHZpc29yeSBhbmQgd3JpdGV1cC4KCgotLVsgNyAtIEFja25vd2xlZGdt ZW50cwoKV2Ugd291bGQgbGlrZSB0byB0aGFuayBNU1JDIGFuZCB0aGUgRWNsaXBzZSBGb3VuZGF0 aW9uICh3aXRoIGEgc3BlY2lhbCBtZW50aW9uCnRvIE1hcnRhIFJ5YmN6eW5za2Egd2hvIHRvb2sg Y2FyZSBvZiBjb29yZGluYXRlZCBkaXNjbG9zdXJlIGFmdGVyIHRoZSBwcm9qZWN0Cm93bmVyc2hp cCBjaGFuZ2UpIGZvciB0cmlhZ2luZyBhbmQgZml4aW5nIHRoZSByZXBvcnRlZCB2dWxuZXJhYmls aXRpZXMuIEl0IHdhcwphIHBsZWFzdXJlIHRvIHdvcmsgd2l0aCB5b3UhCgoKLS1bIDggLSBSZWZl cmVuY2VzCgpbMV0gaHR0cHM6Ly9lY2xpcHNlLWZvdW5kYXRpb24uYmxvZy8yMDIzLzExLzIxL2lu dHJvZHVjaW5nLWVjbGlwc2UtdGhyZWFkeC8KWzJdIGh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNl LXRocmVhZHgvClszXSBodHRwczovL3NlY3VyaXR5Lmh1bWFuYXRpdmFzcGEuaXQvb3N0Mi16ZXBo eXItcnRvcy1hbmQtYS1idW5jaC1vZi1jdmVzLwpbNF0gaHR0cHM6Ly9zZWN1cml0eS5odW1hbmF0 aXZhc3BhLml0L211bHRpcGxlLXZ1bG5lcmFiaWxpdGllcy1pbi1ydC10aHJlYWQtcnRvcy8KWzVd IGh0dHBzOi8vc2VjdXJpdHkuaHVtYW5hdGl2YXNwYS5pdC9tdWx0aXBsZS12dWxuZXJhYmlsaXRp ZXMtaW4tcmlvdC1vcy8KWzZdIGh0dHBzOi8vc2VjdXJpdHkuaHVtYW5hdGl2YXNwYS5pdC9iaWct dXBkYXRlLXRvLW15LXNlbWdyZXAtYy1jcHAtcnVsZXNldC8KWzddIGh0dHBzOi8vc2VjdXJpdHku aHVtYW5hdGl2YXNwYS5pdC9hLWNvbGxlY3Rpb24tb2Ytd2VnZ2xpLXBhdHRlcm5zLWZvci1jLWNw cC12dWxuZXJhYmlsaXR5LXJlc2VhcmNoLwpbOF0gaHR0cHM6Ly9tc3JjLm1pY3Jvc29mdC5jb20v cmVwb3J0L3Z1bG5lcmFiaWxpdHkKWzldIGh0dHBzOi8vbXNyYy5taWNyb3NvZnQuY29tL2Jsb2cv MjAyNC8wMS9jb25ncmF0dWxhdGlvbnMtdG8tdGhlLXRvcC1tc3JjLTIwMjMtcTQtc2VjdXJpdHkt cmVzZWFyY2hlcnMvCgoKQ29weXJpZ2h0IChjKSAyMDI0IE1hcmNvIEl2YWxkaSBhbmQgSHVtYW5h dGl2YSBHcm91cC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K --000000000000b11d5d061982b1d4--