From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C0E00606A323 for ; Thu, 12 Nov 2026 10:47:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=inria.fr header.i=@inria.fr header.a=rsa-sha256 header.s=dc header.b=l2CAoI77 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=mime-version:date:from:to:cc:reply-to:in-reply-to: references:message-id:subject:sender:list-id:list-help: list-subscribe:list-unsubscribe:list-post:list-owner: list-archive; bh=CyZ5cztYFhcsfp9fjPezXmpdaIUzGTSfZGmSLlTpGwY=; b=l2CAoI77jGuQu1FvzSyR1i173ikpTejy7HYAx3QsrPX1szzlA9l/Ioxu 5r1TA2uyDPZSHz2oZa7Nw7GlDDTwVR2CpaMfamt/nERz+C+iI+8Xpj0MF xRW8Al3QCHyO+NWrNB2g0fsg4ogPYBL1kus3mnG4+0uY5XgcNIZkEBuls I=; X-CSE-ConnectionGUID: C2op1lRcRr2BN9bnEY9wnw== X-CSE-MsgGUID: VHJ6J3pFQHyN+1Ln8C9t2g== Authentication-Results: mail2-relais-roc.national.inria.fr; dkim=none (message not signed) header.i=none; spf=Pass smtp.mailfrom=cocci-owner@inria.fr; spf=None smtp.helo=postmaster@prod-sympa-app.inria.fr Received-SPF: Pass (mail2-relais-roc.national.inria.fr: domain of cocci-owner@inria.fr designates 128.93.162.27 as permitted sender) identity=mailfrom; client-ip=128.93.162.27; receiver=mail2-relais-roc.national.inria.fr; envelope-from="cocci-owner@inria.fr"; x-sender="cocci-owner@inria.fr"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:128.93.142.0/24 ip4:192.134.164.0/24 ip4:128.93.162.160 ip4:128.93.162.3 ip4:128.93.162.88 ip4:128.93.162.27 mx ~all" Received-SPF: None (mail2-relais-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@prod-sympa-app.inria.fr) identity=helo; client-ip=128.93.162.27; receiver=mail2-relais-roc.national.inria.fr; envelope-from="cocci-owner@inria.fr"; x-sender="postmaster@prod-sympa-app.inria.fr"; x-conformance=spf_only X-IronPort-AV: E=Sophos;i="6.27,209,1787004000"; d="h'?c'?scan'208";a="305056258" Received: from prod-sympa-app.inria.fr ([128.93.162.27]) by mail2-relais-roc.national.inria.fr with ESMTP; 12 Nov 2026 11:47:31 +0100 Received: by prod-sympa-app.inria.fr (Postfix, from userid 990) id 3655381984; Thu, 12 Nov 2026 11:47:31 +0100 (CET) Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by prod-sympa-app.inria.fr (Postfix) with ESMTP id 8DBFE81984 for ; Thu, 12 Nov 2026 11:47:26 +0100 (CET) X-CSE-ConnectionGUID: jBrsuwArTLC8FH8x4CrUmw== X-CSE-MsgGUID: 5Tvq6AYzShKadeB9ldXcxg== IronPort-SDR: 6af5993d_1kkTVknmgBeWnp/33o0ACUgRPVQkx9VDXYHLEOOt8wnJDpT Yy5M573ybBZcLMFa8/d8SLu2WWKicPtSCxngY9A== X-ThreatScanner-Verdict: Negative X-IPAS-Result: =?us-ascii?q?A0HCAQAOmPVqjgUqG9RaH4I6gW5TgQVUFDIHCIY5h2KIe?= =?us-ascii?q?gOSGYwJgX4IBwEDAQ1NAgIEAQEBhQQCjh8CHwcEBS0HDgECBAMCAwEBAQEBA?= =?us-ascii?q?QEBAQEBCwEBAQQBAQECAQECBAMBAQEBAhABAQEBAQE5BQ47hlyMGgGEAAIBA?= =?us-ascii?q?xoBDFIQBAcJCzICKSsGG4J6AYJ0BAMBuliBATOBAYRm2WOBH0MSgU2FdIJuA?= =?us-ascii?q?YY9hDknDg2BSEWBFAGBO4FAMT6EDQMLCggtCYYmBIIiehIbgT8BfI1qGocLB?= =?us-ascii?q?wceJh13A1ksAQ8RNRMXCwcFYEVDA4EGI0sFLR03bCEdFxEeWBsGBRIgKkBDW?= =?us-ascii?q?4ESgQVdgSsoXQEBAR9GLQkBC4F1AoJRgSNdAgFJQQ4HRVMJJUMSRyQiCBIJA?= =?us-ascii?q?RMaLAqBGjU8CSY/FQxbDAgDGgUaJgIfCAILAgx0KBEQEx0eJC8FGiY+Gwp+B?= =?us-ascii?q?2Y9NwkMGQQCAUJCHRIClVwNDAg8PhMBL4EBDGwHk1YKBzSPYoE2D4IRnyA8h?= =?us-ascii?q?CqBdIIQgl+bAxIcF4QEg3KQKIskhzCZCKNeLoU5gW8LKIFcfQgagXqBD08DG?= =?us-ascii?q?Q+OLg0J0htEcQIHAgcOAwuFRowiAScECIFMAQE?= IronPort-PHdr: A9a23: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 azY9FdCaBWrUNo8Y34cGIweOSBtMPA= IronPort-Data: A9a23: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 IronPort-HdrOrdr: A9a23:3PkW86xiu02wDPhh285kKrPwML1zdoMgy1knxilNoH1uA66lfq +V8sjzuSWftN9zYh4dcLK7WJVoKEm0nfVICOIqXItKMjOKhILlFu1fBfqI+UyCJxHD X-Talos-CUID: =?us-ascii?q?9a23=3AOo11RGvZMxDdvn7TD6l4GiQF6IsnWGfG0Wj5OXO?= =?us-ascii?q?cIjZHaO2FFXSKxaZ7xp8=3D?= X-Talos-MUID: =?us-ascii?q?9a23=3A0ByTfQ4FlVxbPaohF/FZOyuAxow137q3Vmk8g64?= =?us-ascii?q?GmMCIOAYhPzuthyS4F9o=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="6.27,209,1787004000"; d="h'?c'?scan'208";a="162448320" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown X-MGA-submission: =?us-ascii?q?MDH7mjdUFYUV1SKciS4QDUsnDFpvI7frDl1fgK?= =?us-ascii?q?g3avpBoKLx3NvvCEok1yYLuMR1aiADJLxtIa3ezFj4ACaZ7NyKZt+c77?= =?us-ascii?q?QN6HrcBY8OTr44UMWbiHxv8cHFH0ddQEVBBlFBbgA7ZbZ3JgrWG2a/GE?= =?us-ascii?q?M1aJsurLA8Zcdm79oEDg7h4A=3D=3D?= Received: from smtp5-g21.free.fr ([212.27.42.5]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Nov 2026 11:47:25 +0100 Received: from lettres.chocolatnoir.net (unknown [IPv6:2a01:e35:39f0:1580:aa20:66ff:fe1e:6826]) by smtp5-g21.free.fr (Postfix) with ESMTPS id B5C8960132; Thu, 12 Nov 2026 11:47:23 +0100 (CET) Received: by lettres.chocolatnoir.net (Postfix, from userid 126) id 8EFD7CE8E20; Thu, 12 Nov 2026 11:47:23 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on aws-us-west-2-korg-listserv-alma10-1 X-Spam-Level: Received: from lettres.chocolatnoir.net (localhost [IPv6:::1]) by lettres.chocolatnoir.net (Postfix) with ESMTPA id 76C6BCE8E1D; Thu, 12 Nov 2026 11:47:21 +0100 (CET) X-Archived-By: MIME-Version: 1.0 Date: Thu, 12 Nov 2026 11:47:21 +0100 From: picca To: Julia Lawall Cc: cocci@inria.fr Reply-To: picca@debian.org Mail-Reply-To: picca@debian.org In-Reply-To: References: Message-ID: <45e0468b84f19a5d75ea99fb434113c0@debian.org> X-Sender: picca@debian.org Organization: Miaouh Content-Type: multipart/mixed; boundary="=_0f8fcd8161d529a9243cf4fab37d5a05" Subject: Re: [cocci] Bug dans la parseur de coccinelle ? X-Loop: cocci@inria.fr X-Sequence: 3792 Precedence: list Precedence: bulk Sender: cocci-request@inria.fr X-no-archive: yes List-Id: List-Help: , List-Subscribe: , List-Post: List-Owner: List-Archive: Archived-At: X-Spam-Status: No, score=-8.9 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=4.0.1 --=_0f8fcd8161d529a9243cf4fab37d5a05 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed here it is Fred --=_0f8fcd8161d529a9243cf4fab37d5a05 Content-Transfer-Encoding: base64 Content-Type: text/x-c; name=ana.h Content-Disposition: attachment; filename=ana.h; size=14676 I3ByYWdtYSBvbmNlCgojaW5jbHVkZSA8ZmxvYXQuaD4KI2luY2x1ZGUgPG1hdGguaD4KI2luY2x1 ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNpbmNsdWRlICJsc3FmaXQuaCIKI2lu Y2x1ZGUgIm1lbnUuaCIKI2luY2x1ZGUgIlBHbXlwbG90LmgiCgovKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwovKiAgICAgIGdsb2JhbCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmbmRlZiBBTkEK I2RlZmluZSBBTkEKCiNlbmRpZiAvKiBBTkEgKi8KCnR5cGVkZWYgZG91YmxlIE1BVFJJWFszXVsz XTsKCiNkZWZpbmUgRE8zRCAgICAgICAgICAgICAgICAvKiBFbmFibGUgM0QgcGxvdHRpbmcgb3B0 aW9ucyB5ZXMvbm8gKi8KCiNkZWZpbmUgSU5JVEZJTEUgICAgICJhbmFfaW5pdC5tYWMiCiNkZWZp bmUgUkFEICAgICAgICAgIDU3LjI5NTc3OTUxCiNkZWZpbmUgWFlNSU5WQUwgICAgIDFlLTEwICAv KiBNaW5pbXVtIGFjY2VwdGVkIG51bWVyaWNhbCB2YWx1ZSBmb3Igc3BlY3RydW0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0aW9ucy4gQSBzbWFsbGVyIHZhbHVlIGNhbiBj YXVzZSBudW1lcmljYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2JsZW1zIGFu ZCBpcyB0aGVyZWZvcmUgaWdub3JlZC4gKi8KI2RlZmluZSBNQVhfREFUQSAgICAgNTAwMCAgIC8q IE1heGltdW0gc3BlY3RydW0gc2l6ZSAqLwojZGVmaW5lIFRJVElORkxOICAgICAyMDAgICAgLyog TGVuZ3RoIG9mIFRpdGxlIGFuZCBJbmZvIGJ1ZmZlciBmb3IgZGF0YSAqLwojZGVmaW5lIE1BWF9T UEVDVFJVTSA1ICAgICAgLyogTnVtYmVyIG9mIHNwZWN0cmEgKi8KI2RlZmluZSBEQVRBQ09MVU1O UyAgMjUgICAgIC8qIE1heGltdW0gbnVtYmVyIG9mIGRhdGEgY29sdW1ucyBpbiBhIGRhdGEgZmls ZSAqLwojZGVmaW5lIElOSVQgICAgICAgICAwICAgICAgLyogRmxhZyBpbiBmdW5jdGlvbiBjYWxs IHRvIGRlbm90ZSBpbml0aWFsaXphdGlvbiAqLwojZGVmaW5lIENBTEMgICAgICAgICAxICAgICAg LyogRmxhZyBpbiBmdW5jdGlvbiBjYWxsIHRvIGRlbm90ZSBjYWxjdWxhdGlvbiAqLwojZGVmaW5l IERFUlYgICAgICAgICAyICAgICAgLyogRmxhZyB0byBkZW5vdGUgZml0dGluZyB3aXRoIGRlcml2 YXRpdmUgY2FsYy4gKi8KI2RlZmluZQlQRUFLICAgICAgICAgMyAgICAgIC8qIEZsYWcgdG8gZGVu b3RlIHBlYWsgaW50ZWdyYXRpb24gKi8KI2RlZmluZSBHQVVTSUcyICAgICAgMi43NzI1OS8qIDQq bG4oMik6IGZvciBGV0hNIGluIEdhdXNzaWFuIHByb2ZpbGVzICovCiNkZWZpbmUgR0NPTlNUMiAg ICAgIDEuMDY0NDcvKiAwLjUqc3FydChQSS9sbigyKSk6IGZvciBwZWFrIGludGVncmF0aW9uICov CiNkZWZpbmUgVEhfTEVOR1RIICAgIDMwICAgICAvKiBMZW5ndGggb2YgdGl0bGVzIGluIHRoZW9y eSAqLwojZGVmaW5lIFNfTEVOR1RIICAgICA2ICAgICAgLyogTGVuZ3RoIG9mIHNob3J0IHBhcmFt ZXRlciBuYW1lICovCiNkZWZpbmUJTUFYUEVBSwkgICAgIDIgICAgICAvKiBNYXhpbXVtIG51bWJl ciBvZiBwZWFrcyBpbiB0aGVvcnkgKi8KI2RlZmluZQlTVEVQU0laRSAgICAgMC4wMSAgIC8qIE5v cm1hbGl6aW5nIHN0ZXAgc2l6ZSBpbiBwZWFrIGludGVncmF0aW9uICovCiNkZWZpbmUgTkxFVkVM SU5HICAgIDQgICAgICAvKiAjIGxlZnQgYW5kIHJpZ2h0IGJhY2tncm91bmQgcG9pbnRzIHRvIGxl dmVsIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWN0cnVtICovCgovKiBBTkEg Y2hhciBJTkxJTkVbSU5MTEVOXTsgICAgICAgIC8qIElucHV0IGJ1ZmZlciBmb3IgZ2VuZXJhbCBw dXJwb3NlcyAqLwpBTkEgY2hhciBTVFJJTkdbSU5MTEVOXTsgICAgICAgIC8qIEFub3RoZXIgZ2Vu ZXJhbCBpbi9vdXRwdXQgYnVmZmVyICovCgovKiBkYXRhIGJsb2NrIHBhcmFtZXRlcnMsIHRvIGJl IGFsbG9jYXRlZCBkeW5hbWljYWxseSAqLwoKdHlwZWRlZiBzdHJ1Y3QgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogc3BlY3RydW0gc3RydWN0dXJlICovCnsKCWZsb2F0ICAgICAgIFhbTUFY X0RBVEFdOyAgICAgICAgICAgICAgLyogeC12YWx1ZXMgb2Ygc3BlY3RydW0gKi8KCWZsb2F0ICAg ICAgIFlbTUFYX0RBVEFdOyAgICAgICAgICAgICAgLyogeS12YWx1ZXMgb2Ygc3BlY3RydW0gKi8K CWZsb2F0ICAgICAgIEVbTUFYX0RBVEFdOyAgICAgICAgICAgICAgLyogZXJyb3JzIGluIHktdmFs dWVzICovCglpbnQgICAgICAgICBOUE5UOyAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBv ZiBwb2ludHMgaW4gc3BlY3RydW0gKi8KCWZsb2F0ICAgICAgIE1JTlk7ICAgICAgICAgICAgICAg ICAgICAgLyogbWluaW11bSB5LXZhbHVlIGluIHNwZWN0cnVtICovCglmbG9hdCAgICAgICBNQVhZ OyAgICAgICAgICAgICAgICAgICAgIC8qIG1heGltdW0geS12YWx1ZSBpbiBzcGVjdHJ1bSAqLwoJ Y2hhciAgICAgICAgVElUTEVbVElUTEVfTEVOR1RIKzFdOyAgICAvKiB0aXRsZSBvZiBzcGVjdHJ1 bSAqLwp9IERBVEFfQkxPQ0sgOwoKCkFOQSBEQVRBX0JMT0NLICpEQVRBOyAgICAgICAgICAgIC8q IGFsbG9jYXRlZCBpbiBtYWluIGZpbGUgKi8KCi8qIGR1bW15IHNwZWN0cnVtIHVzZWQgZm9yIHRl bXBvcmFyeSBzdG9yYWdlIGR1cmluZyBzcGVjdHJ1bSBtYW5pcHVsYXRpb24gKi8KCkFOQSBmbG9h dCAgIFhEW01BWF9EQVRBXTsKQU5BIGZsb2F0ICAgWURbTUFYX0RBVEFdOwpBTkEgZmxvYXQgICBF RFtNQVhfREFUQV07CgovKiBQYXJhbWV0ZXJzIGZvciByZWFkaW5nIGZpbGVzICovCgpBTkEgaW50 ICAgWENPTDsgICAgICAgICAgICAgICAgICAvKiBDb2x1bW4gbnVtYmVyIG9mIHggdmFsdWVzKi8K QU5BIGludCAgIFlDT0w7ICAgICAgICAgICAgICAgICAgLyogQ29sdW1uIG51bWJlciBvZiB5IHZh bHVlcyovCkFOQSBpbnQgICBNQ09MOyAgICAgICAgICAgICAgICAgIC8qIENvbHVtbiBudW1iZXIg b2YgbW9uaXRvciB2YWx1ZXMqLwpBTkEgaW50ICAgRUNPTDsgICAgICAgICAgICAgICAgICAvKiBD b2x1bW4gbnVtYmVyIG9mIGVycm9yIHZhbHVlcyAqLwpBTkEgZmxvYXQgTU9OSVRPUl9OT1JNOyAg ICAgICAgICAvKiBNb25pdG9yIG5vcm1hbGl6YXRpb24gc2lnbmFsICovCkFOQSBpbnQgICBIRUFE RVJfTElORVM7ICAgICAgICAgIC8qIE51bWJlciBvZiBoZWFkZXIgbGluZXMgaW4gZGF0YSBmaWxl ICovCkFOQSBjaGFyICBEQVRBRklMRVtGSUxFTkFNRV9NQVgtMTI4XTsvKiBOYW1lIG9mIGRhdGEg ZmlsZSAqLwpBTkEgaW50ICAgU09MSURfQ09SUjsgICAgICAgICAgICAvKiBGbGFnIGRlbm90aW5n IHNvbGlkLXN0YXRlIGRldGVjdG9yIGNvcnJlY3Rpb24gKi8KQU5BIGNoYXIgIFlDT0xOQU1FWzEw XTsgICAgICAgICAgLyogTmFtZSBvZiB5LWNvbHVtbiBpbiBTVVBFUiBmaWxlICovCkFOQSBjaGFy ICBQQVRITkFNRVs1MF07ICAgICAgICAgIC8qIFBhdGhuYW1lIG9mIFNVUEVSIGZpbGUgKG5lZWRl ZCBpbiBjYXNlIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRp YyBzdWJkaXJlY3RvcmllcyAqLwpBTkEgaW50ICAgTkFVVE9TVUI7ICAgICAgICAgICAgICAvKiBO dW1iZXIgb2Ygc2NhbiBmaWxlcyBiZWZvcmUgbmV4dAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdWJkaXJlY3RvcnkgaXMgb3BlbmVkIGZvciBkYXRhIGZpbGVzICovCkFOQSBp bnQgICBTUEVDVFlQRTsgICAgICAgICAgICAgIC8qIEZsYWcgZGVub3RpbmcgdGhlIHR5cGUgb2Yg U3BlYyBmaWxlICovCiNkZWZpbmUgSUQwMyAgIDAgICAgICAgICAgICAgICAgIC8qIElEMDMgZ2Vv bWV0cnkgKi8KI2RlZmluZSBJRDMyICAgMSAgICAgICAgICAgICAgICAgLyogSUQzMiBvbGQgKDIg KyAyIHZlcnRpY2FsKSBnZW9tZXRyeSAqLwojZGVmaW5lIERVQkJMRSAyCgovKiBTdG9yZWQgZGF0 YSBmaWxlIHBhcmFtZXRlcnMgKi8KCkFOQSBjaGFyICBGSUxFVFlQRVsxNV07ICAgICAgICAvKiBU aGUgbW9zdCByZWNlbnRseSByZWFkIGluIGZpbGUgdHlwZSAqLwpBTkEgaW50ICAgU0NBTk5SOyAg ICAgICAgICAgICAgLyogU2NhbiBudW1iZXIgb2YgZGF0YSBmaWxlICovCkFOQSBpbnQgICBSRUFE U1BFQzsgICAgICAgICAgICAvKiBOdW1iZXIgb2YgbGFzdCBzcGVjdHJ1bSByZWFkIGluICovCkFO QSBjaGFyICBEQVRBVElUTEVbVElUSU5GTE5dOyAvKiBMaW5lIHdpdGggdGl0bGUvY29tbWVudCBv ZiBtb3N0IHJlY2VudCBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxl ICovCkFOQSBjaGFyICBEQVRBSU5GT1tUSVRJTkZMTl07ICAvKiBMaW5lIHdpdGggbW9yZSBpbmZv IG9mIG1vc3QgcmVjZW50IGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp bGUgKi8KQU5BIGNoYXIgIFhDT0xOQU1FWzUwXTsgICAgICAgIC8qIFRpdGxlIG9mIHgtYXhpcyBy ZWFkIGZyb20gZGF0YSBmaWxlICovCkFOQSBmbG9hdCBITUlMOyAgICAgICAgICAgICAgICAvKiBN aWxsZXIgaW5kZXggaCBvZiBsYXN0IHNwZWN0cnVtIHJlYWQgaW4gKi8KQU5BIGZsb2F0IEtNSUw7 ICAgICAgICAgICAgICAgIC8qIE1pbGxlciBpbmRleCBrIG9mIGxhc3Qgc3BlY3RydW0gcmVhZCBp biAqLwpBTkEgZmxvYXQgTE1JTDsgICAgICAgICAgICAgICAgLyogTWlsbGVyIGluZGV4IGwgb2Yg bGFzdCBzcGVjdHJ1bSByZWFkIGluICovCkFOQSBmbG9hdCBERUxUQTsgICAgICAgICAgICAgICAv KiBEZWx0YSBhbmdsZSBvZiBtb3N0IHJlY2VudCBzY2FuIHJlYWQgaW4gKi8KQU5BIGZsb2F0IEJF VEFJTjsgICAgICAgICAgICAgIC8qIEFuZ2xlIG9mIGluY2lkZW5jZSBvZiBsYXN0IHNwZWN0cnVt IHJlYWQgaW4gKi8KQU5BIGZsb2F0IEFMUEhBOyAgICAgICAgICAgICAgIC8qIFJvdGFyeS10YWJs ZSBzZXR0aW5nIG9mIGxhc3Qgc3BlY3RydW0gcmVhZCBpbiAqLwpBTkEgZmxvYXQgR0FNTUE7ICAg ICAgICAgICAgICAgLyogb3V0LW9mLXBsYW5lIGRldGVjdG9yIGFuZ2xlIGdhbW1hICovCgovKiBQ YXJhbWV0ZXJzIGZvciB0aGVvcmV0aWNhbCBjdXJ2ZXMgKi8KCkFOQSBzdHJ1Y3QgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTdHJ1Y3R1cmUgZGVmaW5pbmcgYSB0aGVvcnkgKi8KewoJY2hh ciAgVElUTEVbVEhfTEVOR1RIICsxXTsgICAgICAgLyogTmFtZSBvZiB0aGVvcnkgKi8KCWludCAg IE5QQVI7ICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBwYXJhbWV0ZXJzIGluIHRo ZW9yeSAqLwoJZmxvYXQgUEFSW01BWFBBUl07ICAgICAgICAgICAgICAgLyogUGFyYW1ldGVyIHZh bHVlcyAqLwoJZmxvYXQgRVJSW01BWFBBUl07ICAgICAgICAgICAgICAgLyogRXJyb3JzIGluIHBh cmFtZXRlciB2YWx1ZXMgKi8KCWZsb2F0IE1JTltNQVhQQVJdOyAgICAgICAgICAgICAgIC8qIExv d2VyIGJvdW5kIG9uIHBhcmFtZXRlciB2YWx1ZXMgKi8KCWZsb2F0IE1BWFtNQVhQQVJdOyAgICAg ICAgICAgICAgIC8qIFVwcGVyIGJvdW5kIG9uIHBhcmFtZXRlciB2YWx1ZXMgKi8KCWNoYXIgIE5B TUVbTUFYUEFSXVtUSF9MRU5HVEggKzFdOy8qIE5hbWUgb2YgcGFyYW1ldGVycyAqLwoJY2hhciAg U0hPUlRbTUFYUEFSXVtTX0xFTkdUSCArMV07LyogU2hvcnQgbmFtZSBvZiBwYXJhbWV0ZXJzICov Cglib29sICBGSVhbTUFYUEFSXTsgICAgICAgICAgICAgICAvKiBUUlVFIGlmIHBhcmFtZXRlciBm aXhlZCAqLwoJaW50ICAgTlBFQUs7ICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHBl YWtzIGluIHRoZW9yeSAqLwoJZmxvYXQgUEVBS0lOVFtNQVhQRUFLXTsgICAgICAgICAgLyogSW50 ZWdyYXRlZCBwZWFrIGludGVuc2l0eSAqLwoJZmxvYXQgUEVBS0VSUltNQVhQRUFLXTsgICAgICAg ICAgLyogRXJyb3IgaW4gaW50ZWdyYXRlZCBwZWFrIGludGVuc2l0eSAqLwp9IFRIOwoKLyogUG9p bnRlciB0byBjdXJyZW50IHRoZW9yeSAqLwoKQU5BIHZvaWQgKCpGX1BUUikoZmxvYXQgeCwgZmxv YXQgYVtdLCBmbG9hdCAqeSwgZmxvYXQgZHlkYVtdLCBpbnQgbW9kZSk7CgovKiBwYXJhbWV0ZXJz IGZvciBmaXR0aW5nICovCgpBTkEgaW50ICAgRklUU1BFQzsgICAgICAgICAgICAgICAgIC8qIFNw ZWN0cnVtIG51bWJlciB0byBiZSBmaXR0ZWQgKi8KQU5BIGludCAgIEZJVE9VVFNQOyAgICAgICAg ICAgICAgICAvKiBPdXRwdXQgc3BlY3RydW0gbnVtYmVyIG9mIGZpdCAqLwpBTkEgZmxvYXQgV0VJ R0hUW01BWF9EQVRBXTsgICAgICAgIC8qIFdlaWdodCBvZiBkYXRhIHBvaW50cyAqLwpBTkEgYm9v bCAgT1VURklUOyAgICAgICAgICAgICAgICAgIC8qIEZsYWcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIg Zml0IHJlc3VsdHMgZ28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBm aWxlICovCkFOQSBGSUxFICAqRklURklMRTsgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBm aXQgb3V0cHV0IGZpbGUgKi8KQU5BIGNoYXIgIEZGSUxFTkFNRVtGSUxFTkFNRV9NQVhdOyAvKiBO YW1lIG9mIGZpdCBvdXRwdXQgZmlsZSAqLwpBTkEgZmxvYXQgQ0hJU1FSOyAgICAgICAgICAgICAg ICAgIC8qIE5vcm1hbGl6ZWQgY2hpIHNxdWFyZSB2YWx1ZSBvZiBsYXN0IGZpdCAqLwpBTkEgaW50 ICAgV0VJR0hUTU9ERTsgICAgICAgICAgICAgIC8qIEZsYWcgdG8gZGVub3RlIG1vZGUgb2Ygd2Vp Z2h0aW5nIGluIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXQgKi8K Ci8qIE51bWVyaWNhbCBpbnRlZ3JhdGlvbiBwYXJhbWV0ZXJzKi8KCkFOQSBpbnQgICBPVVRJTlQ7 ICAgICAgICAgICAgICAgICAgLyogRmxhZyBkZW5vdGluZyB3aGV0aGVyIGludGVncmF0aW9uIG91 dHB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvZXMgdG8gYSBmaWxl IG9yIG5vdCAqLwpBTkEgRklMRSAgKklOVEZJTEU7ICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIg dG8gaW50ZWdyYXRpb24gb3V0cHV0IGZpbGUgKi8KQU5BIGNoYXIgIElGSUxFTkFNRVtGSUxFTkFN RV9NQVhdOyAvKiBOYW1lIG9mIGludGVncmF0aW9uIG91dHB1dCBmaWxlICovCkFOQSBpbnQgICBO QkFDSzsgICAgICAgICAgICAgICAgICAgLyogIyBsZWZ0IGFuZCByaWdodCBwb2ludHMgdXNlZCBm b3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLCB0aGVz ZSBhcmUgbm90IHVzZWQgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu dW1lcmljYWwgaW50ZWdyYXRpb24gKi8KQU5BIGludCAgIEFVVE9fQkFDSzsJICAgICAgICAgICAv KiBGbGFnIHRvIGRlbm90ZSBhdXRvbWF0aWMgYmFja2dyb3VuZAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0aW9uICovCkFOQSBmbG9hdCBUMTEsVDEyLFQxMzsg ICAgICAgICAgICAgLyogTWF0cml4IGVsZW1lbnRzIGZvciBoa2wgdHJhbnNmb3JtYXRpb24gb24K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKi8KQU5BIGZsb2F0 IFQyMSxUMjIsVDIzOwpBTkEgZmxvYXQgVDMxLFQzMixUMzM7CkFOQSBlbnVtIHsgICAgICAgICAg ICAgICAgICAgICAvKiBGbGFnIGRlbm90aW5nIHRoZSBzY2FuIHR5cGU6ICAgICovCglyb2NrLCAg ICAgICAgICAgICAgICAgICAgICAgLyogcm9ja2luZyAoYW5ndWxhcikgc2NhbiAgICAgICAgICAq LwoJc3ByZCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHNwZWN1bGFyIHJvZCAoMDBMKSByb2Nr aW5nIHNjYW4gKi8KCWhrbCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNaWxsZXIgaW5kZXgg KGhrbCkgc2NhbiAgICAgICAgICovCn0gU0NBTlRZUEU7CkFOQSBmbG9hdCBJTlRfUkFOR0U7ICAg ICAgICAgICAvKiBOdW1lcmljYWwgaW50ZWdyYXRpb24gZ29lcyBvdmVyIElOVF9SQU5HRQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXMgdGhlIEZXSE0gb2YgdGhlIGZpdHRl ZCBwZWFrLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWdub3JlZCBpZiAwICov CgovKiBDb3JyZWN0aW9uIHBhcmFtZXRlcnMgKi8KCkFOQSBmbG9hdCBHQU1NQV9GSVg7ICAgICAv KiBmaXhlZCBvdXQtb2YtcGxhbmUgZGV0ZWN0b3IgYW5nbGUgZ2FtbWEgZm9yIFNSUyAqLwpBTkEg Ym9vbCBMSU5FQVJHQU1NQTsgICAgLyogRmxhZyB0byBkZW5vdGUgd2hldGhlciBnYW1tYSBjaXJj bGUgKG9uIDYtY2lyY2xlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmcmFjdG9tZXRl cikgaXMgaW1wbGVtZW50ZWQgYXMgbGluZWFyIHRhYmxlICovCkFOQSBpbnQgU0NBTlNXUklUVEVO OyAgICAvKiBudW1iZXIgY291bnQgb2YgZmlsZXMgd3JpdHRlbiB0byBpbnQuIGZpbGUgKi8KQU5B IGludCBGSVRTV1JJVFRFTjsgICAgIC8qIG51bWJlciBjb3VudCBvZiBmaXRzIHdyaXR0ZW4gdG8g Zml0IGZpbGUgKi8KCkFOQSBmbG9hdCBCRUFNQ09SOyAgICAgICAvKiBGbGFnIHRvIGRlbm90ZSBi ZWFtcHJvZmlsZSBjb3JyZWN0aW9uICovCkFOQSBmbG9hdCBWRVJTTElUOyAgICAgICAvKiBWZXJ0 aWNhbCBzbGl0IHdpZHRoIG9mIGluY29taW5nIGJlYW0gKi8KQU5BIGZsb2F0IEhPUlNMSVQ7ICAg ICAgIC8qIEhvcml6b250YWwgc2xpdCB3aWR0aCBvZiBpbmNvbWluZyBiZWFtICovCkFOQSBmbG9h dCBEU0xJVDsgICAgICAgICAvKiBXaWR0aCBvZiBpbi1wbGFuZSBkZXRlY3RvciBzbGl0cyAqLwpB TkEgZmxvYXQgSE9SQkVBTTsgICAgICAgLyogSG9yaXpvbnRhbCBGV0hNIG9mIGJlYW0gKi8KQU5B IGZsb2F0IFZFUkJFQU07ICAgICAgIC8qIFZlcnRpY2FsIEZXSE0gb2YgYmVhbSAqLwpBTkEgZmxv YXQgUkFESVVTOyAgICAgICAgLyogU2FtcGxlIHJhZGl1cyAocm91bmQgc2FtcGxlcykgKi8KQU5B IGZsb2F0IEhQT0xBUjsgICAgICAgIC8qIEhvcml6b250YWwgcG9sYXJpc2F0aW9uIGZyYWN0aW9u IGluIGJlYW0gKi8KQU5BIGZsb2F0IFRSQU5TSU47ICAgICAgIC8qIFRyYW5zbWlzc2lvbiBvZiBp bmNvbWluZyBiZWFtICovCkFOQSBmbG9hdCBUUkFOU09VVDsgICAgICAvKiBUcmFuc21pc3Npb24g b2Ygb3V0Z29pbmcgYmVhbSAqLwojZGVmaW5lCUxJTUlUIDQwICAgICAgICAgLyogSGFsZiBvZiBt YXhpbXVtIGludGVncmF0aW9uIGFyZWEgb3ZlciBzYW1wbGUgW21tXSAqLwojZGVmaW5lCVNURVBf QU5BICAwLjAyICAgICAgIC8qIEFyZWEgaW50ZWdyYXRpb24gc3RlcCBzaXplIFttbV0gKi8KQU5B IGludCBDT1JSRUNUTU9ERTsgICAvKiBGbGFnIGRlbm90aW5nIHR5cGUgb2YgY29ycmVjdGlvbiBm YWN0b3JzIHVzZWQ6ICovCiNkZWZpbmUgTk9DT1JSRUNUIDAgICAgICAvKiAtIG5vIGNvcnJlY3Rp b25zIGFwcGxpZWQgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgWkFYSVMgICAgIDEg ICAgICAvKiAtIHotYXhpcyBkaWZmcmFjdG9tZXRlciAgICAgICAgICAgICAgICAgICAgICAgICov CiNkZWZpbmUgVFdPUFRXTyAgIDIgICAgICAvKiAtICgyKzIpIC10eXBlIGRpZmZyYWN0b21ldGVy ICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgVFdPUFRIUkVFIDMKI2RlZmluZSBSRUZST0NL ICAgNCAgICAgIC8qIC0gcmVmbGVjdGl2aXR5IHJvY2tpbmcgc2NhbiAgICAgICAgICAgICAgICAg ICAgKi8KCi8qIEFuZCBzb21lIG90aGVyIHBhcmFtZXRlcnMgKi8KCkFOQSBib29sIERBVEFSVU47 ICAgICAgICAgLyogRmxhZyB0byBkZW5vdGUgYXV0byBwbG90dGluZyB3aXRoIGV4dHJhIGhlYWRl ciAqLwpBTkEgYm9vbCBMT09QOyAgICAgICAgICAgIC8qIEZsYWcgdG8gZGVub3RlIHdoZXRoZXIg Y29tbWFuZCBsb29wIG1vZGUgaW4gb24gKi8KQU5BIGJvb2wgU0hPV0NPVU5URVI7ICAgICAvKiBG bGFnIHRvIGRlbm90ZSB0aGUgZGlzcGxheSBvZiBsb29wIGNvdW50ZXIgKi8KQU5BIGNoYXIgTE9P UDFbNTEyXTsgICAgICAvKiBGaXJzdCBoYWxmIG9mIHN0cmluZyB0byBiZSByZXBlYXRlZCAqLwpB TkEgY2hhciBMT09QMls1MTJdOyAgICAgIC8qIFNlY29uZCBoYWxmIG9mIHN0cmluZyB0byBiZSBy ZXBlYXRlZCAqLwpBTkEgaW50ICBMT09QX0lOQ1JFTUVOVDsgIC8qIEluY3JlbWVudCBpbiBsb29w IGNvdW50ZXIgKi8KCi8qIFBhcmFtZXRlcnMgZm9yIHRoZSBsYXR0aWNlIGVuZXJneSBtaW5pbWl6 YXRpb24gKi8KdHlwZWRlZiBzdHJ1Y3QgewoJUm9kIHJvZDsKCVBncGxvdCBwZzsKfSBBbmE7Cgov KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwovKiAgICAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwoKLyogaW4gYW5hLmMgKi8KCi8qIHZvaWQgYXV0b19wbG90KHZvaWQpOyAqLwovKiB2b2lk IGNsZWFyX2RhdGEodm9pZCk7ICovCi8qIGNoYXIgKmdldF9pbml0X2ZuYW1lKHZvaWQpOyAqLwov KiB2b2lkIGluaXRpYWxpemUodm9pZCk7ICovCi8qIHZvaWQgbGlzdF9zcGVjdHJ1bShNZW51ICpt ZW51KTsgKi8KLyogdm9pZCBwbG90KHZvaWQpOyAqLwovKiB2b2lkIHBsb3RfM2Qodm9pZCk7ICov Ci8qIHZvaWQgcnVuX2xvb3Aodm9pZCk7ICovCi8qIHZvaWQgd3JpdGVfaW5pdG1hYyh2b2lkKTsg Ki8KCi8qIGluIGNvcnJlY3QuYyAqLwoKdm9pZCAgY29tcF9jb3IoZmxvYXQgKmxvcmVudHosIGZs b2F0ICpwb2xhcml6YXRpb24sIGZsb2F0ICppbnRlcmNlcHQsCgkgICAgICAgZmxvYXQgKmFyZWEs IGZsb2F0ICp0cmFuc21pc3Npb24pOwovKiB2b2lkICBjb21wX2Nvcl96YXhpcyhmbG9hdCAqbG9y ZW50eiwgZmxvYXQgKnBvbGFyaXphdGlvbiwgZmxvYXQgKmludGVyY2VwdCwgKi8KLyogCQkgICAg IGZsb2F0ICphcmVhLCBmbG9hdCAqdHJhbnNtaXNzaW9uKTsgKi8KLyogdm9pZCAgY29tcF9jb3Jf cmVmbChmbG9hdCAqbG9yZW50eiwgZmxvYXQgKnBvbGFyaXphdGlvbiwgZmxvYXQgKmludGVyY2Vw dCwgKi8KLyogCQkgICAgZmxvYXQgKmFyZWEsIGZsb2F0ICp0cmFuc21pc3Npb24pOyAqLwovKiB2 b2lkICBjb21wX2Nvcl8ycDJvcjMoZmxvYXQgKmxvcmVudHosIGZsb2F0ICpwb2xhcml6YXRpb24s IGZsb2F0ICppbnRlcmNlcHQsICovCi8qIAkJICAgICAgZmxvYXQgKmFyZWEsIGZsb2F0ICp0cmFu c21pc3Npb24pOyAqLwp2b2lkICBjb21wX2Nvcl9yaWRnZShmbG9hdCBiZXRhX2luLCBmbG9hdCAq bG9yZW50eiwgZmxvYXQgKnBvbGFyaXphdGlvbiwKCQkgICAgIGZsb2F0ICphcmVhLCBmbG9hdCAq dHJhbnNtaXNzaW9uKTsKLyogZmxvYXQgZl9iZWFtKGZsb2F0IHgsIGZsb2F0IHopOyAqLwovKiBm bG9hdCBmX29uc2FtcGxlKGZsb2F0IHgsIGZsb2F0IHkpOyAqLwovKiBmbG9hdCBmX2RldGVjdG9y KGZsb2F0IHgpOyAqLwoKLyogaW4gZml0LmMgKi8KCi8qIGZsb2F0IGZjbihmbG9hdCBhW10pOyAq LwovKiB2b2lkICBtb2RlbChkb3VibGUgKnksIGludCBpcG9pbnQsIGludCBwYXJ0aWFsX2ZsYWcp OyAqLwp2b2lkICBmaXQoQW5hICphbmEpOwovKiB2b2lkICBmZml0KFJvZCAqcm9kLCBmbG9hdCB4 LCBmbG9hdCBhW10sIGZsb2F0ICp5LCBmbG9hdCBkeWRhW10sIGludCBtYSwgKi8KLyogCSAgIGlu dCBkZXJpdmF0aXZlcyk7ICovCi8qIHZvaWQgIGd1ZXNzX2ZpdChpbnQgbnNwZWMsIGZsb2F0ICpi YWNrZ3JvdW5kLCBmbG9hdCAqc2xvcGUsIGZsb2F0ICpwb3NpdGlvbiwgKi8KLyogCQlmbG9hdCAq aGVpZ2h0LCBmbG9hdCAqd2lkdGgpOyAqLwovKiB2b2lkICBndWVzc19maXQyKGludCBuc3BlYywg ZmxvYXQgKmJnciwgZmxvYXQgKmViZ3IsIGZsb2F0ICpwb3MsIGZsb2F0ICplcG9zLCAqLwovKiAJ CSBmbG9hdCAqaGd0LCBmbG9hdCAqZWhndCwgZmxvYXQgKndkdCwgZmxvYXQgKmV3ZHQpOyAqLwov KiBpbnQgICBzZXRfYW5hZml0cGFyKHZvaWQpOyAqLwoKLyogaW4gb3BlcmF0ZS5jICovCgovKiB2 b2lkIGFkZCh2b2lkKTsgKi8KLyogdm9pZCBhcHBlbmQodm9pZCk7ICovCi8qIHZvaWQgYXV0b19t ZXJnZSh2b2lkKTsgKi8KLyogdm9pZCBjZW50ZXIodm9pZCk7ICovCi8qIHZvaWQgY3V0b2ZmKHZv aWQpOyAqLwovKiBpbnQgIGRlbGV0ZV9wb2ludHModm9pZCk7ICovCi8qIHZvaWQgZGVzcGlrZSh2 b2lkKTsgKi8KLyogdm9pZCBkaWZmZXJlbnRpYXRlKHZvaWQpOyAqLwovKiB2b2lkIGRpdmlkZSh2 b2lkKTsgKi8KLyogdm9pZCBmaXRfc3VidHJhY3Qodm9pZCk7ICovCi8qIHZvaWQgaW50ZWdyYXRl KHZvaWQpOyAqLwovKiB2b2lkIGxldmVsKHZvaWQpOyAqLwovKiB2b2lkIGx1bXAodm9pZCk7ICov Ci8qIHZvaWQgbWVyZ2Uodm9pZCk7ICovCi8qIHZvaWQgbXVsdGlwbHkodm9pZCk7ICovCnZvaWQg b3BlcmF0ZShBbmEgKmFuYSk7Ci8qIHZvaWQgcmVmX2ludGVncmF0ZSh2b2lkKTsgKi8KLyogdm9p ZCByZWZfdG9fZih2b2lkKTsgKi8KLyogdm9pZCBzY2FsZSh2b2lkKTsgKi8KLyogdm9pZCBzaGlm dCh2b2lkKTsgKi8KLyogdm9pZCBzcGxpdCh2b2lkKTsgKi8KLyogdm9pZCBzdW0odm9pZCk7ICov Ci8qIHZvaWQgd3JhcCh2b2lkKTsgKi8KLyogdm9pZCB5bG9nMTAodm9pZCk7ICovCgovKiBpbiBy ZWFkLmMgKi8KCi8qIHZvaWQgcmVhZF9jb2x1bW4odm9pZCk7ICovCi8qIHZvaWQgcmVhZF9mdGFz Y29tKHZvaWQpOyAqLwovKiB2b2lkIHJlYWRfc3BlYyh2b2lkKTsgKi8KLyogdm9pZCByZWFkX3Ny cyhpbnQgdmVyc2lvbik7ICovCi8qIHZvaWQgcmVhZF9zdXBlcihpbnQgb2xkKTsgKi8Kdm9pZCBy ZWFkX3R5cGUoQW5hICphbmEpOwovKiB2b2lkIHJlYWRfeHllKHZvaWQpOyAqLwoKLyogaW4gc2V0 LmMgKi8KCnZvaWQgc2V0KEFuYSAqYW5hKTsKLyogdm9pZCBzZXRfY29ycmVjdGlvbnModm9pZCk7 ICovCi8qIHZvaWQgc2V0X2ZpdCh2b2lkKTsgKi8KLyogdm9pZCBzZXRfZ2VuZXJhbCh2b2lkKTsg Ki8KLyogdm9pZCBzZXRfaW50ZWdyYXRlKHZvaWQpOyAqLwovKiB2b2lkIHNldF9yZWFkKHZvaWQp OyAqLwovKiB2b2lkIHNldF9sb29wKHZvaWQpOyAqLwoKLyogaW4gdGhlb3J5LmMgKi8KCi8qIHZv aWQgZ2F1c3NfZG91YmxlKGZsb2F0IHgsIGZsb2F0IGFbXSwgZmxvYXQgKnksIGZsb2F0IGR5ZGFb XSwgaW50IG1vZGUpOyAqLwovKiB2b2lkIGdhdXNzX2xvcmVudHooZmxvYXQgeCwgZmxvYXQgYVtd LCBmbG9hdCAqeSwgZmxvYXQgZHlkYVtdLCBpbnQgbW9kZSk7ICovCi8qIHZvaWQgZ2F1c3Nfc2lu Z2xlKGZsb2F0IHgsIGZsb2F0IGFbXSwgZmxvYXQgKnksIGZsb2F0IGR5ZGFbXSwgaW50IG1vZGUp OyAqLwovKiB2b2lkIGxvcmVudHpfZ2F1c3MoZmxvYXQgeCwgZmxvYXQgYVtdLCBmbG9hdCAqeSwg ZmxvYXQgZHlkYVtdLCBpbnQgbW9kZSk7ICovCi8qIHZvaWQgbG9yZW50el9kb3VibGUoZmxvYXQg eCwgZmxvYXQgYVtdLCBmbG9hdCAqeSwgZmxvYXQgZHlkYVtdLCBpbnQgbW9kZSk7ICovCi8qIHZv aWQgbG9yZW50el9zaW5nbGUoZmxvYXQgeCwgZmxvYXQgYVtdLCBmbG9hdCAqeSwgZmxvYXQgZHlk YVtdLCBpbnQgbW9kZSk7ICovCnZvaWQgcG93ZXIoZmxvYXQgeCwgZmxvYXQgYVtdLCBmbG9hdCAq eSwgZmxvYXQgZHlkYVtdLCBpbnQgbW9kZSk7Ci8qIHZvaWQgcHNldWRvX3ZvaWd0KGZsb2F0IHgs IGZsb2F0IGFbXSwgZmxvYXQgKnksIGZsb2F0IGR5ZGFbXSwgaW50IG1vZGUpOyAqLwovKiB2b2lk IHNsaXQoZmxvYXQgeCwgZmxvYXQgYVtdLCBmbG9hdCAqeSwgZmxvYXQgZHlkYVtdLCBpbnQgbW9k ZSk7ICovCnZvaWQgdGhlb3J5KEFuYSAqYW5hKTsKdm9pZCB0aGVvcnlfdHlwZShBbmEgKmFuYSk7 CgovKiBpbiB1dGlsLmMgKi8KCnZvaWQgICBnZXRfMmlub3V0c3BlYyhBbmEgKmFuYSwgaW50ICpp bl9zcGVjMSwgaW50ICppbl9zcGVjMiwgaW50ICpvdXRfc3BlYyk7CnZvaWQgICBnZXRfaW4yb3V0 c3BlYyhBbmEgKmFuYSwgaW50ICppbl9zcGVjLCBpbnQgKm91dF9zcGVjMSwgaW50ICpvdXRfc3Bl YzIpOwp2b2lkICAgZ2V0X2lub3V0c3BlYyhBbmEgKmFuYSwgaW50ICppbl9zcGVjLCBpbnQgKm91 dF9zcGVjKTsKdm9pZCAgIGdldF9pbnNwZWMoQW5hICphbmEsIGludCAqaW5fc3BlYyk7Ci8qIHZv aWQgICBzZXRfY3Vyc29yKGludCBob3Jpem9udGFsLCBpbnQgdmVydGljYWwpOyAqLwovKiBkb3Vi bGUgc3FyKGRvdWJsZSB2YWx1ZSk7ICovCnZvaWQgICB0eXBlX2hlYWRlcihBbmEgKmFuYSwgaW50 IGZsYWcpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogICAgICB1bmRlZmluZSBzb21lIGZsYWdz ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KCiN1bmRlZiBBTkEK --=_0f8fcd8161d529a9243cf4fab37d5a05 Content-Transfer-Encoding: base64 Content-Type: text/x-c; name=ana_read.c Content-Disposition: attachment; filename=ana_read.c; size=38131 I2luY2x1ZGUgPGN0eXBlLmg+CgojaW5jbHVkZSAiYW5hLmgiCgojaW5jbHVkZSAiaGtsL2NjYW4v YXJyYXlfc2l6ZS9hcnJheV9zaXplLmgiCgpzdGF0aWMgdm9pZCByZWFkX2NvbHVtbihBbmEgKmFu YSkKLyoKICogUmVhZCBmaWxlIG9mICdjb2x1bW4nIHR5cGU6CiAqIC0gSEVBREVSX0xJTkVTIGhl YWRlciBsaW5lcwogKiAtIGRhdGEgbGluZXMgd2l0aCBhcmJpcmFyeSBhbW91bnQgb2YgY29sdW1u cywgd2l0aAogKiAgIFhDT0wgdGhlIHgtdmFsdWVzCiAqICAgWUNPTCB0aGUgeS12YWx1ZXMKICog ICBFQ09MIHRoZSBlcnJvcnMgaW4geSAobm8gZXJyb3IgaWYgMCkuCiAqLwoKewoKCWNoYXIgZmls ZW5hbWVbRklMRU5BTUVfTUFYXTsKCUZJTEUgKmluZmlsZSA9IE5VTEw7CglpbnQgaSxpbl9zcGVj ID0gMCxucG9pbnRzOwoJYm9vbCBlbmRfb2ZfZmlsZSxlcnJvcl9jb2x1bW47CglmbG9hdCBkdW1t eVtEQVRBQ09MVU1OU107CglpbnQgbWF4Y29sdW1uOwoKCgkvKiBHZXQgZmlsZW5hbWUgYW5kIG9w ZW4gZmlsZSwgcmV0dXJuIGlmIG5vdCBzdWNjZXNzZnVsICovCgoJZ2V0X3Rva2VuKCZhbmEtPnJv ZC5tZW51LCBmaWxlbmFtZSwiR2l2ZSBmaWxlbmFtZSAoLmRhdCk6ICIpOwoJYWRkX2V4dGVuc2lv bihmaWxlbmFtZSwiZGF0Iik7CglpbmZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKCWlmKE5V TEwgPT0gaW5maWxlKXsKCQlzcHJpbnRmKFNUUklORywiRmFpbGVkIHRvIG9wZW4gZmlsZSAnJXMn IixmaWxlbmFtZSk7CgkJZXJydHlwZSgmYW5hLT5yb2QubWVudSwgU1RSSU5HKTsKCQljbGVhcl9j b21tYW5kKCZhbmEtPnJvZC5tZW51KTsKCQlyZXR1cm47Cgl9CgoJLyogR2V0IHNwZWN0cnVtIG51 bWJlciB3aGVyZSBkYXRhIGhhcyB0byBiZSBzdG9yZWQgKi8KCglnZXRfaW5zcGVjKGFuYSwgJmlu X3NwZWMpOwoJUkVBRFNQRUMgPSBpbl9zcGVjOwoKCS8qIFNraXAgaGVhZGVyIGxpbmVzICovCgoJ Zm9yKGkgPSAwOyBpIDwgSEVBREVSX0xJTkVTOyBpKyspCgl7CgkJaWYoZmdldHMoSU5MSU5FLElO TExFTixpbmZpbGUpID09IE5VTEwpCgkJewoJCQllcnJ0eXBlKCZhbmEtPnJvZC5tZW51LCAiRVJS T1IsIGxlc3MgdGhhbiBIRUFERVJfTElORVMgbGluZXMgaW4gZmlsZSIpOwoJCQljbGVhcl9jb21t YW5kKCZhbmEtPnJvZC5tZW51KTsKCQkJZmNsb3NlKGluZmlsZSk7CgkJCXJldHVybjsKCQl9Cgl9 CgoJLyogRmluZCBtYXhpbXVtIGNvbHVtbiBudW1iZXIgdG8gYmUgcmVhZCBpbiAqLwoKCW1heGNv bHVtbiA9IFhDT0w7CglpZihZQ09MID4gbWF4Y29sdW1uKQoJCW1heGNvbHVtbiA9IFlDT0w7Cglp ZihFQ09MID4gbWF4Y29sdW1uKQoJCW1heGNvbHVtbiA9IEVDT0w7CglpZihFQ09MICE9IDApCgkJ ZXJyb3JfY29sdW1uID0gdHJ1ZTsKCWVsc2UKCQllcnJvcl9jb2x1bW4gPSBmYWxzZTsKCgkvKiBS ZWFkIGluIHNwZWN0cnVtICovCgoJbnBvaW50cyA9IDA7CgllbmRfb2ZfZmlsZSA9IGZhbHNlOwoJ d2hpbGUoKGZnZXRzKElOTElORSxJTkxMRU4saW5maWxlKSAhPSBOVUxMKSAmJiAoIWVuZF9vZl9m aWxlKSkKCXsKCQkvKiBDaGVjayB3aGV0aGVyIGVub3VnaCBkYXRhIGlzIHJlYWQgaW4gKi8KCQlp Zihzc2NhbmYoSU5MSU5FLCIlZiVmJWYlZiVmJWYlZiVmJWYlZiVmJWYiLAoJCQkgICZkdW1teVsw XSwmZHVtbXlbMV0sJmR1bW15WzJdLCZkdW1teVszXSwmZHVtbXlbNF0sJmR1bW15WzVdLAoJCQkg ICZkdW1teVs2XSwmZHVtbXlbN10sJmR1bW15WzhdLCZkdW1teVs5XSwmZHVtbXlbMTBdLCZkdW1t eVsxMV0pCgkJICAgPj0gbWF4Y29sdW1uKQoJCXsKCQkJaWYoWENPTCA8PSAwKSAvKiBFbnVtZXJh dGUgeC12YWx1ZXMgKi8KCQkJCURBVEFbaW5fc3BlY10uWFtucG9pbnRzXSA9IChmbG9hdCkgbnBv aW50cysxOwoJCQllbHNlCgkJCQlEQVRBW2luX3NwZWNdLlhbbnBvaW50c10gPSBkdW1teVtYQ09M LTFdOwoJCQlEQVRBW2luX3NwZWNdLllbbnBvaW50c10gPSBkdW1teVtZQ09MLTFdOwoJCQlpZihl cnJvcl9jb2x1bW4pCgkJCQlEQVRBW2luX3NwZWNdLkVbbnBvaW50c10gPSBkdW1teVtFQ09MLTFd OwoJCQllbHNlCgkJCQlEQVRBW2luX3NwZWNdLkVbbnBvaW50c10gPSAxOwoJCQlucG9pbnRzKys7 CgkJfQoJCWVsc2UKCQl7CgkJCWVuZF9vZl9maWxlID0gdHJ1ZTsKCQl9Cgl9CglmY2xvc2UoaW5m aWxlKTsKCWlmKG5wb2ludHMgPT0gMCkKCXsKCQllcnJ0eXBlKCZhbmEtPnJvZC5tZW51LCAiTm8g ZGF0YSBpbiBzcGVjdHJ1bSIpOwoJCWNsZWFyX2NvbW1hbmQoJmFuYS0+cm9kLm1lbnUpOwoJCXJl dHVybjsKCX0KCURBVEFbaW5fc3BlY10uTlBOVCA9IG5wb2ludHM7CgkvKiBGaW5kIG1pbml1bXVt IGFuZCBtYXhpbXVtIGluIHNwZWN0cnVtICovCgoJREFUQVtpbl9zcGVjXS5NSU5ZID0gREFUQVtp bl9zcGVjXS5ZWzBdOwoJREFUQVtpbl9zcGVjXS5NQVhZID0gREFUQVtpbl9zcGVjXS5ZWzBdOwoJ Zm9yKGkgPSAxOyBpIDwgbnBvaW50czsgaSsrKQoJewoJCWlmKERBVEFbaW5fc3BlY10uWVtpXSA8 IERBVEFbaW5fc3BlY10uTUlOWSkKCQkJREFUQVtpbl9zcGVjXS5NSU5ZID0gREFUQVtpbl9zcGVj XS5ZW2ldOwoJCWlmKERBVEFbaW5fc3BlY10uWVtpXSA+IERBVEFbaW5fc3BlY10uTUFYWSkKCQkJ REFUQVtpbl9zcGVjXS5NQVhZID0gREFUQVtpbl9zcGVjXS5ZW2ldOwoJfQoKCS8qIEdpdmUgc3Bl Y3RydW0gYSB0aXRsZSAqLwoKCXNwcmludGYoREFUQVtpbl9zcGVjXS5USVRMRSwiJS4qcyIsVElU TEVfTEVOR1RILGZpbGVuYW1lKTsKCXNwcmludGYoREFUQVRJVExFLCIlLipzIixUSVRJTkZMTi0x LGZpbGVuYW1lKTsKCglzcHJpbnRmKFNUUklORywiUmFuZ2Ugb2YgeC1heGlzOiAlMTAuNmcgdG8g JTEwLjZnXG4iLAoJCURBVEFbaW5fc3BlY10uWFswXSxEQVRBW2luX3NwZWNdLlhbREFUQVtpbl9z cGVjXS5OUE5ULTFdKTsKCXR5cGVfbGluZSgmYW5hLT5yb2QubWVudSwgU1RSSU5HKTsKCXR5cGVf aGVhZGVyKGFuYSwgMSk7Cgp9CgpzdGF0aWMgdm9pZCByZWFkX2Z0YXNjb20oQW5hICphbmEpCi8q CiAqIFJlYWQgSEFTWUxBQiB0YXNjb20gZmlsZSBpbiBzaW5nbGUgY29sdW1uIGZvcm1hdC4KICog V2UgYXNzdW1lIGEgei1heGlzIG1vZGUuCiAqLwp7CgoJY2hhciBmaWxlbmFtZVtGSUxFTkFNRV9N QVhdLGR1bW15X25hbWVbRklMRU5BTUVfTUFYXSxkYXRlWzUwXSx0aW1lWzUwXTsKCUZJTEUgKmlu ZmlsZTsKCWludCBpLGluX3NwZWMgPSAwLG5wb2ludHM7Cglib29sIGVuZF9vZl9maWxlOwoJZmxv YXQgZHVtbXlbREFUQUNPTFVNTlNdID0gezB9OwoJZmxvYXQgZHVtbXl2YWw7CglmbG9hdCBtb25p dG9yW01BWF9EQVRBXTsKCWludCBuY29sdW1ucyxuaGVhZGVycyx4Y29sX3NhdmU7Cglib29sIGRv bmU7CgljaGFyIGNvbHVtbl9uYW1lWzIwXTsKCWNoYXIgbmFtZVsyMF1bMjBdOwoJZmxvYXQgKng9 TlVMTCwqeT1OVUxMLCplPU5VTEw7CglpbnQgZGlnaXRzOwoKCS8qIEdldCBmaWxlbmFtZSBhbmQg b3BlbiBmaWxlLCByZXR1cm4gaWYgbm90IHN1Y2Nlc3NmdWwgKi8KCglTQ0FOTlIgPSBnZXRfaW50 KCZhbmEtPnJvZC5tZW51LCAxLCJTY2FuIG51bWJlcjogIik7CgoJZm9yKGk9c3RybGVuKERBVEFG SUxFKS0xLCBkaWdpdHM9NTsgaT49MDsgaS0tLCBkaWdpdHMtLSkKCXsKCQlpZighaXNkaWdpdChE QVRBRklMRVtpXSkpIGJyZWFrOwoJfQoKCXNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5h bWUpLCAiJXMlMCpkIixEQVRBRklMRSxkaWdpdHMsU0NBTk5SKTsKCWZpbGVuYW1lW0ZJTEVOQU1F X01BWC0xXSA9ICdcMCc7CgoJYWRkX2V4dGVuc2lvbihmaWxlbmFtZSwiZGF0Iik7CglpZigoaW5m aWxlID0gZm9wZW4oZmlsZW5hbWUsInIiKSkgPT0gTlVMTCkKCXsKCQlzcHJpbnRmKFNUUklORywi RmFpbGVkIHRvIG9wZW4gZmlsZSAnJXMnIixmaWxlbmFtZSk7CgkJZXJydHlwZSgmYW5hLT5yb2Qu bWVudSwgU1RSSU5HKTsKCQljbGVhcl9jb21tYW5kKCZhbmEtPnJvZC5tZW51KTsKCQlyZXR1cm47 Cgl9CgoJLyogRXh0cmFjdCBhIGZldyB0aGluZ3MgZnJvbSB0aGUgaGVhZGVyICovCgoJLyogRmly c3QgbGluZSBjb250YWlucyAjIGhlYWRlciBsaW5lcyArICNjb2x1bW5zICovCgoJaWYoTlVMTCAh PSBmZ2V0cyhJTkxJTkUsSU5MTEVOLGluZmlsZSkpCgl7CgkJc3NjYW5mKElOTElORSwiJWQgJWQi LCZuaGVhZGVycywmbmNvbHVtbnMpOwoJfQoKCS8qIE5vdyBnZXQgZGF0ZSwgdGltZSBmcm9tIHNl Y29uZCBsaW5lICovCgoJaWYgKE5VTEwgIT0gZmdldHMoSU5MSU5FLElOTExFTixpbmZpbGUpKQoJ ewoJCXNzY2FuZihJTkxJTkUsIiAlcyAlcyIsJmRhdGVbMF0sJnRpbWVbMF0pOwoJCXNucHJpbnRm KERBVEFJTkZPLCBUSVRJTkZMTiwgIiUuNjBzIERhdGU6ICVzIHRpbWU6ICVzIixmaWxlbmFtZSxk YXRlLHRpbWUpOwoJCXNwcmludGYoU1RSSU5HLCAiRGF0ZTogJXMgdGltZTogJXNcbiIsZGF0ZSx0 aW1lKTsKCQl0eXBlX2xpbmUoJmFuYS0+cm9kLm1lbnUsIFNUUklORyk7Cgl9CgoJLyogc2tpcCBi bGFuayBsaW5lICovCgoJaWYgKE5VTEwgIT0gZmdldHMoSU5MSU5FLElOTExFTixpbmZpbGUpKQoJ ewoJCS8qIG5vIG9wICovCgl9CgoJLyogUmVzdCBtYXkgY29udGFpbiBzb21ldGhpbmcgaW50ZXJl c3RpbmcgKi8KCglBTFBIQSA9IEJFVEFJTiA9IERFTFRBID0gR0FNTUEgPSAwLjsKCWZvcihpID0g MDsgaSA8IG5oZWFkZXJzLW5jb2x1bW5zLTI7IGkrKykKCXsKCQlpZiAoTlVMTCAhPSBmZ2V0cyhJ TkxJTkUsSU5MTEVOLGluZmlsZSkpCgkJewoJCQlzc2NhbmYoSU5MSU5FLCIlcyA9ICVmIiwmZHVt bXlfbmFtZVswXSwmZHVtbXl2YWwpOwoJCQlzdHJpbmdfdG91cHBlcihkdW1teV9uYW1lKTsKCQkJ aWYoc3RyY21wKGR1bW15X25hbWUsIkZUUiIpID09IDApIEdBTU1BID0gZHVtbXl2YWw7CgkJCWlm KHN0cmNtcChkdW1teV9uYW1lLCJBTEYiKSA9PSAwKSBBTFBIQSA9IGR1bW15dmFsOwoJCQlpZihz dHJjbXAoZHVtbXlfbmFtZSwiMlRTIikgPT0gMCkgREVMVEEgPSBkdW1teXZhbDsKCQkJaWYoc3Ry Y21wKGR1bW15X25hbWUsIkgiKSA9PSAwKSBITUlMID0gZHVtbXl2YWw7CgkJCWlmKHN0cmNtcChk dW1teV9uYW1lLCJLIikgPT0gMCkgS01JTCA9IGR1bW15dmFsOwoJCQlpZihzdHJjbXAoZHVtbXlf bmFtZSwiTCIpID09IDApIExNSUwgPSBkdW1teXZhbDsKCQl9Cgl9CglCRVRBSU4gPSBBTFBIQTsg LyogVGhpcyBpcywgb2YgY291cnNlLCBvbmx5IGNvcnJlY3QgZm9yIHotYXhpcyBtb2RlICovCglz cHJpbnRmKFNUUklORywiQUxQSEE9JS4zZiwgIERFTFRBPSUuM2YsIEdBTU1BPSUuM2ZcbiIsQUxQ SEEsREVMVEEsR0FNTUEpOwoJdHlwZV9saW5lKCZhbmEtPnJvZC5tZW51LCBTVFJJTkcpOwoKCS8q IEdldCB0aGUgJ2NvbHVtbicgbmFtZXMgKi8KCglmb3IoaSA9IDA7IGkgPCBuY29sdW1uczsgaSsr KQoJewoJCWlmIChOVUxMICE9IGZnZXRzKElOTElORSwgSU5MTEVOLGluZmlsZSkpCgkJewojcHJh Z21hIEdDQyBkaWFnbm9zdGljIHB1c2gKI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICIt V3N0cmluZ29wLXRydW5jYXRpb24iCgkJCXN0cm5jcHkobmFtZVtpXSwgSU5MSU5FLCBBUlJBWV9T SVpFKG5hbWVbaV0pIC0gMSk7CiNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCgkJCW5hbWVbaV1b QVJSQVlfU0laRShuYW1lW2ldKSAtIDFdID0gJ1wwJzsKCQkJc3RyaW5nX3RvbG93ZXIobmFtZVtp XSk7CgkJfQoJfQoKCXNwcmludGYoREFUQVRJVExFLCIgICIpOyAgLyogTm8gY29tbWVudHMgbGlu ZSBoZXJlIGluIEhBU1lMQUIgKi8KCgl4Y29sX3NhdmUgPSBYQ09MOwoKCWlmKFhDT0wgPCAwKSAv KiBHZXQgbmFtZSBvZiB4ICovCgl7CgkJZG9uZSA9IGZhbHNlOwoJCXdoaWxlKCFkb25lKQoJCXsK CQkJaWYoIWdldF90b2tlbigmYW5hLT5yb2QubWVudSwgY29sdW1uX25hbWUsCgkJCQkgICAgICAi R2l2ZSBjb2x1bW4gbmFtZSAodHlwZSA8cmV0dXJuPiBmb3Igb3B0aW9ucyk6ICIpKQoJCQl7CgkJ CQlmb3IoaSA9IDA7IGkgPCBuY29sdW1uczsgaSsrKQoJCQkJewoJCQkJCXR5cGVfbGluZSgmYW5h LT5yb2QubWVudSwgbmFtZVtpXSk7CgkJCQl9CgkJCQl0eXBlX2xpbmUoJmFuYS0+cm9kLm1lbnUs ICJcbiIpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJc3RyaW5nX3RvbG93ZXIoY29sdW1uX25hbWUp OwoJCQkJZm9yKGkgPSAwOyBpIDwgbmNvbHVtbnM7IGkrKykKCQkJCXsKCQkJCQlpZihzdHJjbXAo bmFtZVtpXSxjb2x1bW5fbmFtZSkgPT0gMCkKCQkJCQl7CgkJCQkJCVhDT0wgPSBpKzE7CgkJCQkJ CWRvbmUgPSB0cnVlOwoJCQkJCQlzbnByaW50ZihYQ09MTkFNRSwgQVJSQVlfU0laRShYQ09MTkFN RSksCgkJCQkJCQkgIiUuKnMiLCAoaW50KUFSUkFZX1NJWkUobmFtZVtpXSksIG5hbWVbaV0pOwoJ CQkJCX0KCQkJCX0KCQkJCWlmKFhDT0wgPCAwKQoJCQkJewoJCQkJCWVycnR5cGUoJmFuYS0+cm9k Lm1lbnUsICJFUlJPUiwgbm8gbWF0Y2hpbmcgY29sdW1uIG5hbWUgZm91bmQiKTsKCQkJCQljbGVh cl9jb21tYW5kKCZhbmEtPnJvZC5tZW51KTsKCQkJCQlmY2xvc2UoaW5maWxlKTsKCQkJCQlYQ09M ID0geGNvbF9zYXZlOwoJCQkJCXJldHVybjsKCQkJCX0KCQkJfQoJCX0KCX0KCgoJZWxzZSBpZihY Q09MID4gMCkgLyogR2V0IGNvbHVtbiBuYW1lIG9mIHggKi8KCXsKCQlzcHJpbnRmKFhDT0xOQU1F LCIlcyIsbmFtZVtYQ09MLTFdKTsKCX0KCWVsc2UKCXsKCQlzcHJpbnRmKFhDT0xOQU1FLCJ4Iik7 Cgl9CgoJaWYoWENPTCAhPSAwKSAvKiBQdXQgeCBuYW1lIGluIGdyYXBoICovCgl7CgkJc3ByaW50 ZihTVFJJTkcsInggdGl0bGUgJXMgYnJlYWsiLFhDT0xOQU1FKTsKCQlwdXRfY29tbWFuZCgmYW5h LT5yb2QubWVudSwgU1RSSU5HKTsKCQlwbG90eHllKCZhbmEtPnBnLCAmYW5hLT5yb2QubWVudSwg eCwgeSwgZSwgMSk7Cgl9CgoJLyogR2V0IGNvbHVtbiBudW1iZXIgb2YgeSB2YWx1ZXMgKi8KCglm b3IoaSA9IDA7IGkgPCBuY29sdW1uczsgaSsrKQoJCWlmKHN0cmNtcChuYW1lW2ldLFlDT0xOQU1F KSA9PSAwKQoJCQlZQ09MID0gaSsxOwoKCS8qIEdldCBjb2x1bW4gbnVtYmVyIG9mIG1vbml0b3Ig dmFsdWVzICovCgoJaWYoTUNPTCAhPSAwKQoJewoJCWZvcihpID0gMDsgaSA8IG5jb2x1bW5zOyBp KyspCgkJewoJCQlpZihzdHJjbXAobmFtZVtpXSwibW9uIikgPT0gMCkgTUNPTCA9IGkrMTsKCQl9 Cgl9CgoJLyogR2V0IHNwZWN0cnVtIG51bWJlciB3aGVyZSBkYXRhIGhhcyB0byBiZSBzdG9yZWQg Ki8KCglnZXRfaW5zcGVjKGFuYSwgJmluX3NwZWMpOwoJUkVBRFNQRUMgPSBpbl9zcGVjOwoKCS8q IFJlYWQgaW4gc3BlY3RydW0gKi8KCglucG9pbnRzID0gMDsKCWVuZF9vZl9maWxlID0gZmFsc2U7 Cgl3aGlsZSghZW5kX29mX2ZpbGUpCgl7CgkJZm9yKGkgPSAwOyBpIDwgbmNvbHVtbnM7IGkrKykK CQl7CgkJCWlmKE5VTEwgPT0gZmdldHMoSU5MSU5FLElOTExFTixpbmZpbGUpKQoJCQl7CgkJCQll bmRfb2ZfZmlsZSA9IHRydWU7CgkJCQlicmVhazsKCQkJfQoJCQlzc2NhbmYoSU5MSU5FLCIlZiIs JmR1bW15W2ldKTsKCQl9CgoJCWlmKFhDT0wgPT0gMCkgLyogRW51bWVyYXRlIHgtdmFsdWVzICov CgkJewoJCQlEQVRBW2luX3NwZWNdLlhbbnBvaW50c10gPSAoZmxvYXQpIG5wb2ludHMrMTsKCQl9 CgkJZWxzZQoJCXsKCQkJREFUQVtpbl9zcGVjXS5YW25wb2ludHNdID0gZHVtbXlbWENPTC0xXTsK CQl9CgkJREFUQVtpbl9zcGVjXS5ZW25wb2ludHNdID0gZHVtbXlbWUNPTC0xXTsKCQlpZihNQ09M ICE9IDApCgkJCW1vbml0b3JbbnBvaW50c10gPSBkdW1teVtNQ09MLTFdOwoJCW5wb2ludHMrKzsK CQlpZihucG9pbnRzID09IE1BWF9EQVRBKQoJCXsKCQkJZXJydHlwZSgmYW5hLT5yb2QubWVudSwg IkVSUk9SLCBtYXhpbXVtIG51bWJlciBvZiBkYXRhIHBvaW50cyBleGNlZWRlZCIpOwoJCQlicmVh azsKCQl9Cgl9IC8qIGVuZCBvZiB3aGlsZSAqLwoJZmNsb3NlKGluZmlsZSk7CgoJaWYobnBvaW50 cyA9PSAwKQoJewoJCWVycnR5cGUoJmFuYS0+cm9kLm1lbnUsICJObyBkYXRhIGluIHNwZWN0cnVt Iik7CgkJY2xlYXJfY29tbWFuZCgmYW5hLT5yb2QubWVudSk7CgkJWENPTCA9IHhjb2xfc2F2ZTsK CQlyZXR1cm47Cgl9CgoJREFUQVtpbl9zcGVjXS5OUE5UID0gbnBvaW50czsKCglYQ09MID0geGNv bF9zYXZlOwoKCS8qIENhbGN1bGF0ZSBzdGF0aXN0aWNhbCBlcnJvciAqLwoKCWZvcihpID0gMDsg aSA8IG5wb2ludHM7IGkrKykgREFUQVtpbl9zcGVjXS5FW2ldID0gc3FydChEQVRBW2luX3NwZWNd LllbaV0pOwoKCS8qIGlmIHJlcXVpcmVkLCBub3JtYWxpemUgb24gbW9uaXRvciBzaWduYWwgKi8K CglpZihNQ09MICE9IDApCgl7CgkJZm9yKGkgPSAwOyBpIDwgbnBvaW50czsgaSsrKQoJCXsKCQkJ aWYobW9uaXRvcltpXSA8IDEpIG1vbml0b3JbaV0gPSAxOwoJCQlEQVRBW2luX3NwZWNdLllbaV0g Kj0gTU9OSVRPUl9OT1JNL21vbml0b3JbaV07CgkJCURBVEFbaW5fc3BlY10uRVtpXSAqPSBNT05J VE9SX05PUk0vbW9uaXRvcltpXTsKCQl9Cgl9CgoJLyogRmluZCBtaW5pdW11bSBhbmQgbWF4aW11 bSBpbiBzcGVjdHJ1bSAqLwoKCURBVEFbaW5fc3BlY10uTUlOWSA9IERBVEFbaW5fc3BlY10uWVsw XTsKCURBVEFbaW5fc3BlY10uTUFYWSA9IERBVEFbaW5fc3BlY10uWVswXTsKCWZvcihpID0gMTsg aSA8IG5wb2ludHM7IGkrKykKCXsKCQlpZihEQVRBW2luX3NwZWNdLllbaV0gPCBEQVRBW2luX3Nw ZWNdLk1JTlkpCgkJCURBVEFbaW5fc3BlY10uTUlOWSA9IERBVEFbaW5fc3BlY10uWVtpXTsKCQlp ZihEQVRBW2luX3NwZWNdLllbaV0gPiBEQVRBW2luX3NwZWNdLk1BWFkpCgkJCURBVEFbaW5fc3Bl Y10uTUFYWSA9IERBVEFbaW5fc3BlY10uWVtpXTsKCX0KCgkvKiBHaXZlIHNwZWN0cnVtIGEgdGl0 bGUgKi8KCglzcHJpbnRmKERBVEFbaW5fc3BlY10uVElUTEUsIiUuKnMiLFRJVExFX0xFTkdUSCxm aWxlbmFtZSk7CgoJc3ByaW50ZihTVFJJTkcsIlJhbmdlIG9mIHgtYXhpczogJTEwLjZnIHRvICUx MC42Z1xuIiwKCQlEQVRBW2luX3NwZWNdLlhbMF0sREFUQVtpbl9zcGVjXS5YW0RBVEFbaW5fc3Bl Y10uTlBOVC0xXSk7Cgl0eXBlX2xpbmUoJmFuYS0+cm9kLm1lbnUsIFNUUklORyk7Cgl0eXBlX2hl YWRlcihhbmEsIDEpOwoKfQoKLyoKICogUmVhZCBzY2FuIGZyb20gU1BFQyBkYXRhIGZpbGUuCiAq LwpzdGF0aWMgdm9pZCByZWFkX3NwZWMoQW5hICphbmEpCnsKCglzdGF0aWMgaW50IGhjb2wsa2Nv bCxsY29sOwoJY2hhciBwYXJbM107CglGSUxFICppbmZpbGU7CglpbnQgaW5fc3BlYyA9IDA7Cgli b29sIGZvdW5kLGVuZF9vZl9zY2FuOwoJYm9vbCBkb25lOwoJY2hhciBkYXRlWzQwXTsKCWludCBp LHNjYW47CglmbG9hdCBtb25pdG9yW01BWF9EQVRBXTsKCWZsb2F0IGR1bW15W0RBVEFDT0xVTU5T XTsKCWludCBtYXhjb2x1bW4sbnBvaW50czsKCWludCBuY29sdW1ucyx4Y29sX3NhdmU7CgljaGFy IGNvbHVtbl9uYW1lWzQwXTsKCWNoYXIgbmFtZVtEQVRBQ09MVU1OU11bNDBdOwoJZmxvYXQgKng9 TlVMTCwqeT1OVUxMLCplPU5VTEw7CgoJLyogZmVta2UgKi8KCWJvb2wgZmVta2U7CgoJLyogR2V0 IHNjYW4gbnVtYmVyIHRvIGJlIHJlYWQgaW4gKi8KCglzcHJpbnRmKFNUUklORywiU2NhbiBudW1i ZXIgdG8gYmUgcmVhZCBpbiBbJTFkXTogIixTQ0FOTlIpOwoJU0NBTk5SID0gZ2V0X2ludCgmYW5h LT5yb2QubWVudSwgU0NBTk5SLFNUUklORyk7CgoJLypmZW1rZSovCglpZihTQ0FOTlIgPCAxKQoJ ewoJCVNDQU5OUiA9IC1TQ0FOTlI7CgkJZmVta2UgPSB0cnVlOwoJfQoJZWxzZQoJCWZlbWtlID0g ZmFsc2U7CgoJLyogT3BlbiBTUEVDIGZpbGUuICovCgoJaWYoKGluZmlsZSA9IGZvcGVuKERBVEFG SUxFLCJyIikpID09IE5VTEwpCgl7CgkJc3ByaW50ZihTVFJJTkcsIkZhaWxlZCB0byBvcGVuIGlu cHV0IGZpbGUgJyVzJyIsREFUQUZJTEUpOwoJCWVycnR5cGUoJmFuYS0+cm9kLm1lbnUsIFNUUklO Ryk7CgkJY2xlYXJfY29tbWFuZCgmYW5hLT5yb2QubWVudSk7CgkJcmV0dXJuOwoJfQoKCS8qIFNl YXJjaCBmb3IgY29ycmVjdCBzY2FuIG51bWJlciAqLwoKCWZvdW5kID0gZmFsc2U7Cgl3aGlsZSgh Zm91bmQpCgl7CgkJaWYoTlVMTCA9PSBmZ2V0cyhJTkxJTkUsSU5MTEVOLGluZmlsZSkpCgkJewoJ CQlzcHJpbnRmKFNUUklORywiU2NhbiAlZCBub3QgZm91bmQgaW4gZmlsZSAnJXMnIixTQ0FOTlIs REFUQUZJTEUpOwoJCQllcnJ0eXBlKCZhbmEtPnJvZC5tZW51LCBTVFJJTkcpOwoJCQljbGVhcl9j b21tYW5kKCZhbmEtPnJvZC5tZW51KTsKCQkJZmNsb3NlKGluZmlsZSk7CgkJCXJldHVybjsKCQl9 CgoJCXNzY2FuZihJTkxJTkUsIiUzYyAlZCIscGFyLCZzY2FuKTsKCQlpZigocGFyWzBdPT0nIycp ICYmIChwYXJbMV0gPT0gJ1MnKSAmJiAoc2NhbiA9PSBTQ0FOTlIpKQoJCXsKCQkJZm91bmQgPSB0 cnVlOwoJCX0KCX0KCgkvKgoJICogV2UgaGF2ZSBmb3VuZCB0aGUgY29ycmVjdCBzY2FuIG51bWJl ciwgbm93IGdldCB0aGUgcmVzdCBvZiB0aGUKCSAqIGluZm9ybWF0aW9uLgoJICoKCSAqIEdldCB0 aGUgZGF0ZSBhbmQgdGltZSBmcm9tIHRoZSAiI0QiIGxpbmUuCgkgKi8KCWZvdW5kID0gZmFsc2U7 Cgl3aGlsZSghZm91bmQpCgl7CgkJaWYoTlVMTCA9PSBmZ2V0cyhJTkxJTkUsSU5MTEVOLGluZmls ZSkpCgkJewoJCQlzcHJpbnRmKFNUUklORywiRXJyb3IsIG5vIFwiI0RcIiBkYXRlIGxpbmUgaW4g c2NhbiIpOwoJCQllcnJ0eXBlKCZhbmEtPnJvZC5tZW51LCBTVFJJTkcpOwoJCQljbGVhcl9jb21t YW5kKCZhbmEtPnJvZC5tZW51KTsKCQkJZmNsb3NlKGluZmlsZSk7CgkJCXJldHVybjsKCQl9CgoJ CWlmICggIXN0cm5jbXAgKElOTElORSwgIiNEIiwgMikgKQoJCXsKCQkJc3NjYW5mKElOTElORSwi JTNjICUyNGMiLHBhcixkYXRlKTsKCQkJZm91bmQgPSB0cnVlOwoJCX0KCgl9CgoJZGF0ZVsyNF0g PSAwOwoJc3ByaW50ZihTVFJJTkcsIiVzXG4iLGRhdGUpOwoJdHlwZV9saW5lKCZhbmEtPnJvZC5t ZW51LCBTVFJJTkcpOwoKCS8qCgkgKiBHZXQgdGhlIGZpcnN0IHNpeCBzcGVjIHZhcmlhYmxlcyBm cm9tIHRoZSAiI1AwIiBsaW5lLiBUaGV5IGNvbnRhaW4gdGhlCgkgKiBhbmdsZXMgbmVlZGVkIGZv ciBjb21wdXRhdGlvbiBvZiBMb3JlbnR6IGZhY3RvciwgcG9sYXJpemF0aW9uIGZhY3RvciwKCSAq IGFyZWEgY29ycmVjdGlvbiBhbmQgY3V0LW9mLXRoZS1yb2QgY29ycmVjdGlvbi4KCSAqLwoJREVM VEEgPSAwOwoJQkVUQUlOID0gMDsKCUFMUEhBID0gMDsKCglmb3VuZCA9IGZhbHNlOwoJd2hpbGUo IWZvdW5kKQoJewoJCWlmKE5VTEwgPT0gZmdldHMoSU5MSU5FLElOTExFTixpbmZpbGUpKQoJCXsK CQkJc3ByaW50ZihTVFJJTkcsIkVycm9yLCBubyBcIiNQMFwiIGxpbmUgaW4gc2NhbiIpOwoJCQll cnJ0eXBlKCZhbmEtPnJvZC5tZW51LCBTVFJJTkcpOwoJCQljbGVhcl9jb21tYW5kKCZhbmEtPnJv ZC5tZW51KTsKCQkJZmNsb3NlKGluZmlsZSk7CgkJCXJldHVybjsKCQl9CgoJCWlmKCAhc3RybmNt cChJTkxJTkUsICIjUDAiLCAzKSApCgkJewoJCQlzc2NhbmYoSU5MSU5FLCIlM2MlZiVmJWYlZiVm JWYlZiIscGFyLCZkdW1teVswXSwmZHVtbXlbMV0sJmR1bW15WzJdLAoJCQkgICAgICAgJmR1bW15 WzNdLCZkdW1teVs0XSwmZHVtbXlbNV0sJmR1bW15WzZdKTsKCQkJZm91bmQgPSB0cnVlOwoJCX0K CX0KCglpZihTUEVDVFlQRSA9PSBJRDAzIHx8IFNQRUNUWVBFID09IElEMzIpCgl7CgkJREVMVEEg PSBkdW1teVswXTsKCQlBTFBIQSA9IGR1bW15WzRdOwoJCUJFVEFJTiA9IGR1bW15WzRdOyAvKiBa LWF4aXMgbW9kZSBvbmx5ICEhICovCgkJR0FNTUEgPSBkdW1teVs1XTsKCX0KCWlmKFNQRUNUWVBF ID09IERVQkJMRSkKCXsKCQlERUxUQSA9IGR1bW15WzFdOwoJCUFMUEhBID0gZHVtbXlbMl07CgkJ R0FNTUEgPSBkdW1teVswXTsKCQlCRVRBSU4gPSBkdW1teVsyXTsKCX0KCgkvKiBmZW1rZTogdHJp Y2sgdG8gZ2V0IHNwZWNpYWwgc3BlY3VsYXIgZGF0YSByZWFkIGluIHdpdGggY29ycmVjdAoJICAg aW5kaWNlcyAqLwoKCWlmKGZlbWtlKQoJewoJCUFMUEhBID0gKEFMUEhBK0dBTU1BKS8yOwoJCUdB TU1BID0gQUxQSEE7Cgl9CgoJc3ByaW50ZihTVFJJTkcsIkRFTFRBPSUuM2YsICBBTFBIQT0lLjNm LCBHQU1NQT0lLjNmLCBCRVRBX0lOPSUuM2ZcbiIsCgkJREVMVEEsQUxQSEEsR0FNTUEsQkVUQUlO KTsKCXR5cGVfbGluZSgmYW5hLT5yb2QubWVudSwgU1RSSU5HKTsKCgkvKiBSZWFkIGxpbmUgd2l0 aCBjb2x1bW4gbmFtZXMuIFNraXAgdGhpcyBsaW5lIGlmIHRoZSBjb2x1bW4gbnVtYmVyCgkgICBv ZiB0aGUgeC12YWx1ZXMgaWYgZ2l2ZW4uIElmIFhDT0wgPCAwLCBhc2sgZm9yIG5hbWUgb2YgY29s dW1uLiAqLwoKCWZvdW5kID0gZmFsc2U7Cgl3aGlsZSghZm91bmQpCgl7CgkJaWYoTlVMTCA9PSBm Z2V0cyhJTkxJTkUsSU5MTEVOLGluZmlsZSkpCgkJewoJCQlzcHJpbnRmKFNUUklORywiRXJyb3Is IGVtdHB5IHNjYW4iKTsKCQkJZXJydHlwZSgmYW5hLT5yb2QubWVudSwgU1RSSU5HKTsKCQkJY2xl YXJfY29tbWFuZCgmYW5hLT5yb2QubWVudSk7CgkJCWZjbG9zZShpbmZpbGUpOwoJCQlyZXR1cm47 CgkJfQoKCQlpZiggIXN0cm5jbXAoSU5MSU5FLCAiI0wiLCAyKSkKCQl7CgkJCWZvdW5kID0gdHJ1 ZTsKCQkJc3RhdGljIGNoYXIgKnAgPSAmSU5MSU5FWzBdOwoKCQkJLyogU1BFQyBjb2x1bW4gbmFt ZXMgYXJlIHNlcGFyYXRlZCBieSBkb3VibGUgc3BhY2VzLAoJCQkgICB0aHVzIHJlcGxhY2UgYWxs IHNpbmdsZSBzcGFjZXMgKHRoYXQgYXJlIHBhcnQgb2YgY29sdW1uCgkJCSAgIG5hbWUpIGJ5IHVu ZGVyc2NvcmUgKi8KCgkJCWZvcihpID0gMzsgaSA8IHN0cmxlbihJTkxJTkUpLTE7IGkrKykKCQkJ ewoJCQkJaWYoIChwW2ldID09ICcgJykKCQkJCSAgICAmJiAocFtpLTFdICE9ICcgJykKCQkJCSAg ICAmJiAocFtpKzFdICE9ICcgJykpCgkJCQkJcFtpXSA9ICdfJzsKCQkJfQoKCQkJLyogcmVhZCBj b2x1bW4gaGVhZGVycyAqLwoKCQkJbmNvbHVtbnMgPSBzc2NhbmYoSU5MSU5FLAoJCQkJCSAgIiUz YyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAl cyIsCgkJCQkJICBwYXIsbmFtZVswXSxuYW1lWzFdLG5hbWVbMl0sbmFtZVszXSxuYW1lWzRdLG5h bWVbNV0sbmFtZVs2XSwKCQkJCQkgIG5hbWVbN10sbmFtZVs4XSxuYW1lWzldLG5hbWVbMTBdLG5h bWVbMTFdLG5hbWVbMTJdLG5hbWVbMTNdLAoJCQkJCSAgbmFtZVsxNF0sbmFtZVsxNV0sbmFtZVsx Nl0sbmFtZVsxN10sbmFtZVsxOF0pOwoJCQluY29sdW1ucyAtPSAxOyAvKiB0aGUgZmlyc3QgaXRl bSBkb2Vzbid0IGNvdW50ICovCgkJCWlmKG5jb2x1bW5zID49IERBVEFDT0xVTU5TKQoJCQl7CgkJ CQlzcHJpbnRmKFNUUklORywiVG9vIG1hbnkgZGF0YSBjb2x1bW5zLCBvbmx5IGZpcnN0ICVkIHVz ZWQiLAoJCQkJCURBVEFDT0xVTU5TKTsKCQkJCWVycnR5cGUoJmFuYS0+cm9kLm1lbnUsIFNUUklO Ryk7CgkJCX0KCQl9Cgl9CgoJeGNvbF9zYXZlID0gWENPTDsKCWhjb2wgPSAwOwoJa2NvbCA9IDA7 CglsY29sID0gMDsKCWlmKFhDT0wgPCAwKQoJewoJCWRvbmUgPSBmYWxzZTsKCQl3aGlsZSghZG9u ZSkKCQl7CgkJCWlmKCFnZXRfdG9rZW4oJmFuYS0+cm9kLm1lbnUsIGNvbHVtbl9uYW1lLAoJCQkJ ICAgICAgIkdpdmUgY29sdW1uIG5hbWUgKHR5cGUgPHJldHVybj4gZm9yIG9wdGlvbnMpOiAiKSkK CQkJewoJCQkJdHlwZV9saW5lKCZhbmEtPnJvZC5tZW51LCBJTkxJTkUpOwoJCQl9CgkJCWVsc2UK CQkJewoJCQkJc3RyaW5nX3RvbG93ZXIoY29sdW1uX25hbWUpOwoJCQkJZm9yKGkgPSAwOyBpIDwg bmNvbHVtbnM7IGkrKykKCQkJCXsKCQkJCQlzdHJpbmdfdG9sb3dlcihuYW1lW2ldKTsKCQkJCQlp ZihzdHJjbXAobmFtZVtpXSxjb2x1bW5fbmFtZSkgPT0gMCkKCQkJCQl7CgkJCQkJCVhDT0wgPSBp KzE7CgkJCQkJCWRvbmUgPSB0cnVlOwoJCQkJCQlzbnByaW50ZihYQ09MTkFNRSwgQVJSQVlfU0la RShYQ09MTkFNRSksCgkJCQkJCQkgIiUuKnMiLCAoaW50KShBUlJBWV9TSVpFKG5hbWVbaV0pKSwg bmFtZVtpXSk7CgkJCQkJfQoJCQkJfQoJCQkJaWYoWENPTCA8IDApCgkJCQl7CgkJCQkJZXJydHlw ZSgmYW5hLT5yb2QubWVudSwgIkVSUk9SLCBubyBtYXRjaGluZyBjb2x1bW4gbmFtZSBmb3VuZCIp OwoJCQkJCWNsZWFyX2NvbW1hbmQoJmFuYS0+cm9kLm1lbnUpOwoJCQkJCWZjbG9zZShpbmZpbGUp OwoJCQkJCXJldHVybjsKCQkJCX0KCQkJfQoJCX0KCgkJLyogQXNzaWduIHgtY29sdW1uIG5hbWUg dG8gdGl0bGUgb2YgeC1heGlzIGluIHBsb3QgKi8KCgkJc3ByaW50ZihTVFJJTkcsInggdGl0bGUg JXMgYnJlYWsiLFhDT0xOQU1FKTsKCQlwdXRfY29tbWFuZCgmYW5hLT5yb2QubWVudSwgU1RSSU5H KTsKCQlwbG90eHllKHgseSxlLDEpOwoJfQoKCWZvcihpID0gMDsgaSA8IG5jb2x1bW5zOyBpKysp Cgl7CgkJc3RyaW5nX3RvbG93ZXIobmFtZVtpXSk7CgkJaWYoc3RyY21wKG5hbWVbaV0sWUNPTE5B TUUpID09IDApIFlDT0wgPSBpKzE7CgkJaWYoc3RyY21wKG5hbWVbaV0sImgiKSA9PSAwKSBoY29s ID0gaSsxOwoJCWlmKHN0cmNtcChuYW1lW2ldLCJrIikgPT0gMCkga2NvbCA9IGkrMTsKCQlpZihz dHJjbXAobmFtZVtpXSwibCIpID09IDApIGxjb2wgPSBpKzE7CgkJaWYoTUNPTCAhPSAwKQoJCXsK CQkJaWYoIXN0cmNtcChuYW1lW2ldLCJtb25pdG9yIikgfHwgIXN0cmNtcChuYW1lW2ldLCJtb25p dG9yMSIpIHx8CgkJCSAgICFzdHJjbXAobmFtZVtpXSwiaW9uX2NoIikpCgkJCQlNQ09MID0gaSsx OwoJCX0KCX0KCgkvKiBHZXQgc3BlY3RydW0gbnVtYmVyIHdoZXJlIGRhdGEgaGFzIHRvIGJlIHN0 b3JlZCAqLwoKCWdldF9pbnNwZWMoYW5hLCAmaW5fc3BlYyk7CglSRUFEU1BFQyA9IGluX3NwZWM7 CgoKCS8qIEZpbmQgbWF4aW11bSBjb2x1bW4gbnVtYmVyIHRvIGJlIHJlYWQgaW4gKi8KCglpZihY Q09MID4gWUNPTCkKCQltYXhjb2x1bW4gPSBYQ09MOwoJZWxzZQoJCW1heGNvbHVtbiA9IFlDT0w7 CgoJLyogUmVhZCBkYXRhIGFuZCBjb21wdXRlIHN0YXRpc3RpY2FsIGVycm9yIGluIHktdmFsdWVz ICovCgoJbnBvaW50cyA9IDA7CglITUlMID0gMDsKCUtNSUwgPSAwOwoJTE1JTCA9IDA7CgllbmRf b2Zfc2NhbiA9IGZhbHNlOwoJd2hpbGUoKE5VTEwgIT0gZmdldHMoSU5MSU5FLElOTExFTixpbmZp bGUpKSAmJiAoIWVuZF9vZl9zY2FuKSkKCXsKCQkvKiBDaGVjayB3aGV0aGVyIGVub3VnaCBkYXRh IGlzIHJlYWQgaW4gKi8KCQlpZihzc2NhbmYoSU5MSU5FLCIlZiVmJWYlZiVmJWYlZiVmJWYlZiVm JWYlZiVmJWYlZiVmJWYlZiIsCgkJCSAgJmR1bW15WzBdLCZkdW1teVsxXSwmZHVtbXlbMl0sJmR1 bW15WzNdLCZkdW1teVs0XSwmZHVtbXlbNV0sCgkJCSAgJmR1bW15WzZdLCZkdW1teVs3XSwmZHVt bXlbOF0sJmR1bW15WzldLCZkdW1teVsxMF0sJmR1bW15WzExXSwKCQkJICAmZHVtbXlbMTJdLCZk dW1teVsxM10sJmR1bW15WzE0XSwmZHVtbXlbMTVdLCZkdW1teVsxNl0sJmR1bW15WzE3XSwKCQkJ ICAmZHVtbXlbMThdKSA+PSBtYXhjb2x1bW4pCgkJewoJCQlpZihYQ09MID09IDApIC8qIEVudW1l cmF0ZSB4LXZhbHVlcyAqLwoJCQkJREFUQVtpbl9zcGVjXS5YW25wb2ludHNdID0gKGZsb2F0KSBu cG9pbnRzKzE7CgkJCWVsc2UKCQkJCURBVEFbaW5fc3BlY10uWFtucG9pbnRzXSA9IGR1bW15W1hD T0wtMV07CgkJCURBVEFbaW5fc3BlY10uWVtucG9pbnRzXSA9IGR1bW15W1lDT0wtMV07CgkJCWlm KE1DT0wgPiAwKQoJCQkJbW9uaXRvcltucG9pbnRzXSA9IGR1bW15W01DT0wtMV07CgkJCWVsc2UK CQkJCW1vbml0b3JbbnBvaW50c10gPSBNT05JVE9SX05PUk07CgkJCUhNSUwgKz0gZHVtbXlbaGNv bC0xXTsKCQkJS01JTCArPSBkdW1teVtrY29sLTFdOwoJCQlMTUlMICs9IGR1bW15W2xjb2wtMV07 CgkJCWlmKGR1bW15W1lDT0wtMV0gPCBYWU1JTlZBTCkKCQkJCURBVEFbaW5fc3BlY10uRVtucG9p bnRzXSA9IDEuOwoJCQllbHNlCgkJCQlEQVRBW2luX3NwZWNdLkVbbnBvaW50c10gPSBzcXJ0KGR1 bW15W1lDT0wtMV0pOwoJCQlucG9pbnRzKys7CgkJCWlmKG5wb2ludHMgPj0gTUFYX0RBVEEpCgkJ CXsKCQkJCWVycnR5cGUoJmFuYS0+cm9kLm1lbnUsICJNYXhpbXVtIG51bWJlciBvZiBkYXRhIHBv aW50cyBleGNlZWRlZCIpOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJZW5kX29m X3NjYW4gPSB0cnVlOwoJCX0KCX0KCWZjbG9zZShpbmZpbGUpOwoKCVhDT0wgPSB4Y29sX3NhdmU7 CgoJaWYobnBvaW50cyA9PSAwKQoJewoJCWVycnR5cGUoJmFuYS0+cm9kLm1lbnUsICJObyBkYXRh IGluIHNwZWN0cnVtIik7CgkJY2xlYXJfY29tbWFuZCgmYW5hLT5yb2QubWVudSk7CgkJcmV0dXJu OwoJfQoJREFUQVtpbl9zcGVjXS5OUE5UID0gbnBvaW50czsKCgkvKiBNYWtlIGgsIGssIGwgYW5k IHR3by10aGV0YSB0aGUgYXZlcmFnZSB2YWx1ZSAqLwoKCUhNSUwgPSBITUlML25wb2ludHM7CglL TUlMID0gS01JTC9ucG9pbnRzOwoJTE1JTCA9IExNSUwvbnBvaW50czsKCgkvKiBmZW1rZSAqLwoK CWlmKGZlbWtlKQoJewoJCUhNSUwgPSAwLjsKCQlLTUlMID0gMC47CgkJTE1JTCA9IDIwLjM2OSpz aW4oR0FNTUEvUkFEKTsKCX0KCglzcHJpbnRmKFNUUklORywiKGhrbCkgPSAoJTQuMmYsJTQuMmYs JTQuMmYpXG4iLEhNSUwsS01JTCxMTUlMKTsKCXR5cGVfbGluZSgmYW5hLT5yb2QubWVudSwgU1RS SU5HKTsKCgkvKiBJZiByZXF1ZXN0ZWQsIG5vcm1hbGl6ZSBkYXRhICovCgoJaWYoTUNPTCAhPSAw KQoJewoJCWZvcihpID0gMDsgaSA8IG5wb2ludHM7IGkrKykKCQl7CgkJCWlmKG1vbml0b3JbaV0g PCAxKQoJCQkJbW9uaXRvcltpXSA9IDE7CgkJCURBVEFbaW5fc3BlY10uWVtpXSAqPSBNT05JVE9S X05PUk0vbW9uaXRvcltpXTsKCQkJREFUQVtpbl9zcGVjXS5FW2ldICo9IE1PTklUT1JfTk9STS9t b25pdG9yW2ldOwoJCX0KCX0KCgkvKiBGaW5kIG1pbml1bXVtIGFuZCBtYXhpbXVtIGluIHNwZWN0 cnVtICovCgoJREFUQVtpbl9zcGVjXS5NSU5ZID0gREFUQVtpbl9zcGVjXS5ZWzBdOwoJREFUQVtp bl9zcGVjXS5NQVhZID0gREFUQVtpbl9zcGVjXS5ZWzBdOwoJZm9yKGkgPSAxOyBpIDwgbnBvaW50 czsgaSsrKQoJewoJCWlmKERBVEFbaW5fc3BlY10uWVtpXSA8IERBVEFbaW5fc3BlY10uTUlOWSkK CQkJREFUQVtpbl9zcGVjXS5NSU5ZID0gREFUQVtpbl9zcGVjXS5ZW2ldOwoJCWlmKERBVEFbaW5f c3BlY10uWVtpXSA+IERBVEFbaW5fc3BlY10uTUFYWSkKCQkJREFUQVtpbl9zcGVjXS5NQVhZID0g REFUQVtpbl9zcGVjXS5ZW2ldOwoJfQoKCS8qIEdpdmUgc3BlY3RydW0gYSB0aXRsZSAqLwoKCXNw cmludGYoREFUQVtpbl9zcGVjXS5USVRMRSwiJS4qcyAjJTFkIixUSVRMRV9MRU5HVEgtNyxEQVRB RklMRSxTQ0FOTlIpOwoKCXNwcmludGYoU1RSSU5HLCJSYW5nZSBvZiB4LWF4aXM6ICUxMC42ZyB0 byAlMTAuNmdcbiIsREFUQVtpbl9zcGVjXS5YWzBdLAoJCURBVEFbaW5fc3BlY10uWFtEQVRBW2lu X3NwZWNdLk5QTlQtMV0pOwoJdHlwZV9saW5lKCZhbmEtPnJvZC5tZW51LCBTVFJJTkcpOwoJdHlw ZV9oZWFkZXIoYW5hLCAxKTsKCn0KCnN0YXRpYyB2b2lkIHJlYWRfc3JzKEFuYSAqYW5hLCBpbnQg dmVyc2lvbikKLyoKICogUmVhZCBEYXJlc2J1cnkgU1JTIGZpbGUuCiAqIFNpbmNlIHRoZSBmaWxl IGZvcm1hdCBpcyBjaGFuZ2luZyBldmVyeSBub3cgYW5kIHRoZW4sIHRoZSBhY3Rpb25zCiAqIGRp ZmZlciBzb21ld2hhdCBhY2NvcmRpbmcgdG8gdGhlIHZlcnNpb24gZmxhZwogKiB2ZXJzaW9uIDEg ICBiZWZvcmUgOTIKICogdmVyc2lvbiAyICAgc3RhcnRpbmcgOTIKICovCgp7CgoJc3RhdGljIGlu dCBtYXhjb2x1bW47CgljaGFyIGZpbGVuYW1lW0ZJTEVOQU1FX01BWF0sZHVtbXlfbmFtZVtGSUxF TkFNRV9NQVhdLGRhdGV0aW1lWzUwXTsKCUZJTEUgKmluZmlsZTsKCWludCBpLGluX3NwZWMgPSAw LG5wb2ludHM7CglpbnQgZW5kX29mX2ZpbGU7CglmbG9hdCBkdW1teVtEQVRBQ09MVU1OU107Cglm bG9hdCBtb25pdG9yW01BWF9EQVRBXTsKCWludCBkb25lLG5jb2x1bW5zLHhjb2xfc2F2ZT0wLHRp bWVzY2FuOwoJY2hhciBjb2x1bW5fbmFtZVsyMF0sbmFtZVsyMF1bMjBdOwoJZmxvYXQgKng9TlVM TCwqeT1OVUxMLCplPU5VTEw7CgljaGFyICpzcG9zOwoJY2hhciBsYXN0bGluZVtJTkxMRU5dOwoJ aW50IGhhc19yZWFkX2JldGE7CglpbnQgZGlnaXRzOwoKCS8qIEdldCBmaWxlbmFtZSBhbmQgb3Bl biBmaWxlLCByZXR1cm4gaWYgbm90IHN1Y2Nlc3NmdWwgKi8KCglTQ0FOTlIgPSBnZXRfaW50KCZh bmEtPnJvZC5tZW51LCAxLCJTY2FuIG51bWJlcjogIik7CgoJZm9yKGk9c3RybGVuKERBVEFGSUxF KS0xLCBkaWdpdHM9NTsgaT49MDsgaS0tLCBkaWdpdHMtLSkKCXsKCQlpZighaXNkaWdpdChEQVRB RklMRVtpXSkpIGJyZWFrOwoJfQoKCXNwcmludGYoZmlsZW5hbWUsIiVzJTAqZCIsREFUQUZJTEUs ZGlnaXRzLFNDQU5OUik7CglhZGRfZXh0ZW5zaW9uKGZpbGVuYW1lLCJkYXQiKTsKCWlmKChpbmZp bGUgPSBmb3BlbihmaWxlbmFtZSwiciIpKSA9PSBOVUxMKQoJewoJCXNwcmludGYoU1RSSU5HLCJG YWlsZWQgdG8gb3BlbiBmaWxlICclcyciLGZpbGVuYW1lKTsKCQllcnJ0eXBlKCZhbmEtPnJvZC5t ZW51LCBTVFJJTkcpOwoJCWNsZWFyX2NvbW1hbmQoJmFuYS0+cm9kLm1lbnUpOwoJCXJldHVybjsK CX0KCgkvKiBFeHRyYWN0IGEgZmV3IHRoaW5ncyBmcm9tIHRoZSBoZWFkZXIgKi8KCglBTFBIQSA9 IEJFVEFJTiA9IERFTFRBID0gMC47CglHQU1NQSA9IEdBTU1BX0ZJWDsgLyogQ2FuJ3QgYmUgZm91 bmQgaW4gZGF0YSBmaWxlICovCglpZiAoTlVMTCAhPSBmZ2V0cyhJTkxJTkUsSU5MTEVOLGluZmls ZSkpIHs7fQoJaWYgKE5VTEwgIT0gZmdldHMoSU5MSU5FLElOTExFTixpbmZpbGUpKSB7O30KCXNw cmludGYoREFUQUlORk8sIiUuKnMgRGF0ZTogJS4ycy0lLjJzLSUuMnMgdGltZTogJS4yczolLjJz OiUuMnMiLAoJCVRJVElORkxOLTQwLGZpbGVuYW1lLCZJTkxJTkVbMjVdLCZJTkxJTkVbMjNdLCZJ TkxJTkVbMjFdLCZJTkxJTkVbMzVdLAoJCSZJTkxJTkVbMzddLCZJTkxJTkVbMzldKTsKCXNwcmlu dGYoZGF0ZXRpbWUsIkRhdGU6ICUuMnMtJS4ycy0lLjJzIHRpbWU6ICUuMnM6JS4yczolLjJzIiwK CQkmSU5MSU5FWzI1XSwmSU5MSU5FWzIzXSwmSU5MSU5FWzIxXSwmSU5MSU5FWzM1XSwmSU5MSU5F WzM3XSwKCQkmSU5MSU5FWzM5XSk7CglpZiAoTlVMTCAhPSBmZ2V0cyhJTkxJTkUsSU5MTEVOLGlu ZmlsZSkpIHs7fQoJaWYgKE5VTEwgIT0gZmdldHMoSU5MSU5FLElOTExFTixpbmZpbGUpKSB7O30K CXNzY2FuZihJTkxJTkUsIiU4cyVmICVmICVmICVmIixkdW1teV9uYW1lLCZITUlMLCZLTUlMLCZM TUlMLCZCRVRBSU4pOwoJLyoKCSAqIEZpcnN0IHR3byBjaGFyYWN0ZXJzIG11c3QgYmUgc3BhY2Vz IGFuZCBiZXRhIHNob3VsZG4ndCBiZSB6ZXJvIGZvcgoJICogZm9yIGNvcnJlY3QgYmV0YSByZWFk IGZyb20gaGVhZGVyCgkgKi8KCWlmKChzdHJzdHIoSU5MSU5FLCAiICAiKSAhPSBJTkxJTkUrOSkg fHwgKEJFVEFJTiA9PSAwLikpCgl7CgkJQkVUQUlOID0gMC47CgkJaGFzX3JlYWRfYmV0YSA9IGZh bHNlOwoJfQoJZWxzZQoJewoJCWhhc19yZWFkX2JldGEgPSB0cnVlOwoJfQoKCXNwcmludGYoREFU QVRJVExFLCIlLjQwcyIsJklOTElORVs5XSk7CgoJaWYodmVyc2lvbiA9PSAxKSAgIC8qIHRoYXQn cyBiZWZvcmUgJzkyICovCgl7CgkJZm9yKGkgPSAwOyBpIDwgMTE7IGkrKykKCQl7CgkJCWlmIChO VUxMICE9IGZnZXRzKElOTElORSxJTkxMRU4saW5maWxlKSkgezt9CgkJfQoJCWlmIChOVUxMICE9 IGZnZXRzKElOTElORSxJTkxMRU4saW5maWxlKSkgezt9CgkJc3NjYW5mKElOTElORSwiJXMlZiIs ZHVtbXlfbmFtZSwmREVMVEEpOwoJCWZvcihpID0gMDsgaSA8IEhFQURFUl9MSU5FUy0xNjsgaSsr KQoJCXsKCQkJaWYgKE5VTEwgIT0gZmdldHMoSU5MSU5FLElOTExFTixpbmZpbGUpKSB7O30KCQl9 CgoJCS8qIFNpbmNlIGFscGhhIGFuZCBiZXRhIGFyZSBub3QgbmVjZXNzYXJpbHkgY29ycmVjdCwg aWdub3JlIHRoZW0KCQkgICBmb3IgdGhlIHRpbWUgYmVpbmcgKi8KCQlBTFBIQSA9IEJFVEFJTiA9 IDA7Cgl9CgoJaWYodmVyc2lvbiA9PSAyKSAgIC8qIHRoaXMgaXMgYWZ0ZXIgR29yZG9uJ3MgZ3Jl YXQgcmV3cml0ZSAqLwoJewoKCQkvKiBXZSdyZSBsb29raW5nIGluIGZvciB0aGUgbWFnaWMga2V5 d29yZHMgREVMVEEgYW5kIEJFVEFfSU4KCQkgICBzb21ld2hlcmUgaW4gdGhlIGhlYWRlciAuLi4g Ki8KCgkJQUxQSEEgPSBERUxUQSA9IDAuOyAgLyogQkVUQUlOIHNob3VsZCBzdGlsbCBiZSB6ZXJv IGlmIG5vdCBpbiBoZWFkZXIgKi8KCQlmb3IoOzspIC8qIGxvb3AgdW50aWwgd2UgZmluZCB0aGUg c3RhcnQgb2YgZGF0YSBtYXJrZXIgKi8KCQl7CgkJCWlmIChOVUxMICE9IGZnZXRzKElOTElORSxJ TkxMRU4saW5maWxlKSkgezt9ICAgLyogcmVhZCBhIGxpbmUgZnJvbSBmaWxlICovCgkJCXN0cmlu Z190b3VwcGVyKElOTElORSk7ICAgICAgICAgICAgICAgIC8qIGFsbCBjaGFyJ3MgLT4gdXBwZXJj YXNlICovCgoJCQlpZihzdHJzdHIoSU5MSU5FLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0iKSAhPSBO VUxMKQoJCQl7CgkJCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAvKiBnbyBhbmQgcmVhZCBk YXRhIG5vdyAqLwoJCQl9CgoJCQlpZigoc3Bvcz1zdHJzdHIoSU5MSU5FLCJBTFBIQSIpKSAhPSBO VUxMKQoJCQl7CgkJCQlzc2NhbmYoc3Bvcys1LCIlZiIsJkFMUEhBKTsgIC8qIGdldCBhbHBoYSBp ZiB5b3UgbmVlZCBpdCAqLwoJCQl9CgkJCWlmKChzcG9zPXN0cnN0cihJTkxJTkUsIkRFTFRBIikp ICE9IE5VTEwpCgkJCXsKCQkJCXNzY2FuZihzcG9zKzUsIiVmIiwmREVMVEEpOyAgIC8qIGdldCB0 d290aGV0YSA9IGRlbHRhICovCgkJCX0KCQkJaWYoKChzcG9zPXN0cnN0cihJTkxJTkUsIkJFVEFf SU4iKSkgIT0gTlVMTCkgJiYKCQkJICAgKGhhc19yZWFkX2JldGEgPT0gZmFsc2UpKQoJCQl7CgkJ CQlzc2NhbmYoc3Bvcys3LCIlZiIsJkJFVEFJTik7ICAgLyogZ2V0IGluY29taW5nIGFuZ2xlICov CgkJCX0KCQkJaWYoKHNwb3M9c3Ryc3RyKElOTElORSwiREVURUNUT1IiKSkgIT0gTlVMTCkKCQkJ ewoJCQkJc3RyY3B5KGxhc3RsaW5lLElOTElORSk7ICAvKiBzYXZlIHRoaXMgbGluZSBmb3IgdGhl IGhlYWRlcnMgKi8KCQkJfQoJCX0gLyogZW5kIG9mIGZvciBsb29wICovCgoJCXNwcmludGYoU1RS SU5HLCJERUxUQT0lLjNmLCAgQUxQSEE9JS4zZiwgIEJFVEFfSU49JS4zZlxuIiwKCQkJREVMVEEs QUxQSEEsQkVUQUlOKTsKCQl0eXBlX2xpbmUoJmFuYS0+cm9kLm1lbnUsIFNUUklORyk7CgoJCS8q IGxvb2sgZm9yIGNvbHVtbiBoZWFkZXJzICovCgoJCWlmKHZlcnNpb24gPT0gMSkKCQl7CgkJCXJl d2luZChpbmZpbGUpOwoJCQlmb3IoaSA9IDA7IGkgPCBIRUFERVJfTElORVMtMTsgaSsrKQoJCQkJ aWYgKE5VTEwgIT0gZmdldHMoSU5MSU5FLElOTExFTixpbmZpbGUpKSB7O30KCQl9CgoJCWlmKHZl cnNpb24gPT0gMikKCQl7CgkJCXN0cmNweShJTkxJTkUsbGFzdGxpbmUpOyAgIC8qIHRoaXMgc3Rp bGwgaGFzIHRoZSBoZWFkZXJzICovCgkJfQoKCQluY29sdW1ucyA9IHNzY2FuZihJTkxJTkUsCgkJ CQkgICIgJXMgJXMgJXMgJXMgJXMgJXMgJXMgJXMgJXMgJXMgJXMgJXMgJXMiLAoJCQkJICBuYW1l WzBdLG5hbWVbMV0sbmFtZVsyXSxuYW1lWzNdLG5hbWVbNF0sbmFtZVs1XSxuYW1lWzZdLAoJCQkJ ICBuYW1lWzddLG5hbWVbOF0sbmFtZVs5XSxuYW1lWzEwXSxuYW1lWzExXSxuYW1lWzEyXSk7CgkJ Zm9yKGkgPSAwOyBpIDwgbmNvbHVtbnM7IGkrKykgc3RyaW5nX3RvbG93ZXIobmFtZVtpXSk7CgkJ eGNvbF9zYXZlID0gWENPTDsKCQlpZihYQ09MIDwgMCkgLyogR2V0IG5hbWUgb2YgeCAqLwoJCXsK CQkJZG9uZSA9IGZhbHNlOwoJCQl3aGlsZSghZG9uZSkKCQkJewoJCQkJaWYoIWdldF90b2tlbigm YW5hLT5yb2QubWVudSwgY29sdW1uX25hbWUsCgkJCQkJICAgICAgIkdpdmUgY29sdW1uIG5hbWUg KHR5cGUgPHJldHVybj4gZm9yIG9wdGlvbnMpOiAiKSkKCQkJCXsKCQkJCQl0eXBlX2xpbmUoJmFu YS0+cm9kLm1lbnUsIElOTElORSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJc3RyaW5nX3Rv bG93ZXIoY29sdW1uX25hbWUpOwoJCQkJCWZvcihpID0gMDsgaSA8IG5jb2x1bW5zOyBpKyspCgkJ CQkJewoJCQkJCQlpZihzdHJjbXAobmFtZVtpXSxjb2x1bW5fbmFtZSkgPT0gMCkKCQkJCQkJewoJ CQkJCQkJWENPTCA9IGkrMTsKCQkJCQkJCWRvbmUgPSB0cnVlOwoJCQkJCQkJc25wcmludGYoWENP TE5BTUUsQVJSQVlfU0laRShYQ09MTkFNRSksICIlLipzIiwKCQkJCQkJCQkgKGludCkoQVJSQVlf U0laRShuYW1lW2ldKSksIG5hbWVbaV0pOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWlmKFhDT0wgPCAw KQoJCQkJCXsKCQkJCQkJZXJydHlwZSgmYW5hLT5yb2QubWVudSwgIkVSUk9SLCBubyBtYXRjaGlu ZyBjb2x1bW4gbmFtZSBmb3VuZCIpOwoJCQkJCQljbGVhcl9jb21tYW5kKCZhbmEtPnJvZC5tZW51 KTsKCQkJCQkJZmNsb3NlKGluZmlsZSk7CgkJCQkJCVhDT0wgPSB4Y29sX3NhdmU7CgkJCQkJCXJl dHVybjsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJZWxzZSBpZihYQ09MID4gMCkgLyogR2V0IGNv bHVtbiBuYW1lIG9mIHggKi8KCQl7CgkJCXNwcmludGYoWENPTE5BTUUsIiVzIixuYW1lW1hDT0wt MV0pOwoJCX0KCQllbHNlCgkJewoJCQlzcHJpbnRmKFhDT0xOQU1FLCJ4Iik7CgkJfQoKCQlpZihY Q09MICE9IDApCgkJewoJCQlzcHJpbnRmKFNUUklORywieCB0aXRsZSAlcyBicmVhayIsWENPTE5B TUUpOwoJCQlwdXRfY29tbWFuZCgmYW5hLT5yb2QubWVudSwgU1RSSU5HKTsKCQkJcGxvdHh5ZSh4 LHksZSwxKTsKCQl9CgoJCS8qIEdldCBjb2x1bW4gbnVtYmVyIG9mIHkgdmFsdWVzICovCgoJCWZv cihpID0gMDsgaSA8IG5jb2x1bW5zOyBpKyspCgkJewoJCQlpZihzdHJjbXAobmFtZVtpXSxZQ09M TkFNRSkgPT0gMCkKCQkJCVlDT0wgPSBpKzE7CgkJfQoKCQkvKiBHZXQgY29sdW1uIG51bWJlciBv ZiBtb25pdG9yIHZhbHVlcyAqLwoKCQlpZihNQ09MICE9IDApCgkJewoJCQlmb3IoaSA9IDA7IGkg PCBuY29sdW1uczsgaSsrKQoJCQl7CgkJCQlpZihzdHJjbXAobmFtZVtpXSwibW9uaXRvciIpID09 IDApCgkJCQkJTUNPTCA9IGkrMTsKCQkJfQoJCX0KCX0KCglpZihzdHJjbXAoWENPTE5BTUUsInRp bWUiKSA9PSAwKQoJCXRpbWVzY2FuID0gdHJ1ZTsKCWVsc2UKCQl0aW1lc2NhbiA9IGZhbHNlOwoK CXNwcmludGYoU1RSSU5HLCIlc1xuIixkYXRldGltZSk7Cgl0eXBlX2xpbmUoJmFuYS0+cm9kLm1l bnUsIFNUUklORyk7CglzcHJpbnRmKFNUUklORywiVGl0bGU6ICVzXG4iLERBVEFUSVRMRSk7Cgl0 eXBlX2xpbmUoJmFuYS0+cm9kLm1lbnUsIFNUUklORyk7CgoJLyogR2V0IHNwZWN0cnVtIG51bWJl ciB3aGVyZSBkYXRhIGhhcyB0byBiZSBzdG9yZWQgKi8KCglnZXRfaW5zcGVjKGFuYSwgJmluX3Nw ZWMpOwoJUkVBRFNQRUMgPSBpbl9zcGVjOwoKCS8qIEZpbmQgbWF4aW11bSBjb2x1bW4gbnVtYmVy IHRvIGJlIHJlYWQgaW4gKi8KCgltYXhjb2x1bW4gPSBYQ09MOwoJaWYoWUNPTCA+IG1heGNvbHVt bikKCQltYXhjb2x1bW4gPSBZQ09MOwoJaWYoTUNPTCA+IG1heGNvbHVtbikKCQltYXhjb2x1bW4g PSBNQ09MOwoKCS8qIFJlYWQgaW4gc3BlY3RydW0gKi8KCglucG9pbnRzID0gMDsKCWVuZF9vZl9m aWxlID0gZmFsc2U7Cgl3aGlsZSgoZmdldHMoSU5MSU5FLElOTExFTixpbmZpbGUpICE9IE5VTEwp ICYmICghZW5kX29mX2ZpbGUpKQoJewoJCS8qIENoZWNrIHdoZXRoZXIgZW5vdWdoIGRhdGEgaXMg cmVhZCBpbiAqLwoJCWlmKHNzY2FuZihJTkxJTkUsIiVmJWYlZiVmJWYlZiVmJWYlZiVmJWYlZiIs CgkJCSAgJmR1bW15WzBdLCZkdW1teVsxXSwmZHVtbXlbMl0sJmR1bW15WzNdLCZkdW1teVs0XSwm ZHVtbXlbNV0sCgkJCSAgJmR1bW15WzZdLCZkdW1teVs3XSwmZHVtbXlbOF0sJmR1bW15WzldLCZk dW1teVsxMF0sJmR1bW15WzExXSkKCQkgICA+PSBtYXhjb2x1bW4pCgkJewoJCQlpZihYQ09MID09 IDApIC8qIEVudW1lcmF0ZSB4LXZhbHVlcyAqLwoJCQl7CgkJCQlEQVRBW2luX3NwZWNdLlhbbnBv aW50c10gPSAoZmxvYXQpIG5wb2ludHMrMTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWlmKG5wb2lu dHMgJiYgdGltZXNjYW4gPT0gdHJ1ZSkgLyogY3VtdWxhdGUgWCBjb2x1bW4gaWYgKi8KCQkJCXsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW4gdGltZSBzY2FuIG1vZGUgICAgKi8KCQkJ CQlEQVRBW2luX3NwZWNdLlhbbnBvaW50c10gPSBEQVRBW2luX3NwZWNdLlhbbnBvaW50cy0xXSAr CgkJCQkJCWR1bW15W1hDT0wtMV07CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJREFUQVtpbl9z cGVjXS5YW25wb2ludHNdID0gZHVtbXlbWENPTC0xXTsKCQkJCX0KCQkJfQoJCQlEQVRBW2luX3Nw ZWNdLllbbnBvaW50c10gPSBkdW1teVtZQ09MLTFdOwoJCQlpZihNQ09MICE9IDApCgkJCQltb25p dG9yW25wb2ludHNdID0gZHVtbXlbTUNPTC0xXTsKCQkJbnBvaW50cysrOwoJCQlpZihucG9pbnRz ID09IE1BWF9EQVRBKQoJCQl7CgkJCQllcnJ0eXBlKCZhbmEtPnJvZC5tZW51LCAiRVJST1IsIG1h eGltdW0gbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGV4Y2VlZGVkIik7CgkJCQlicmVhazsKCQkJfQoJ CX0KCQllbHNlCgkJewoJCQllbmRfb2ZfZmlsZSA9IHRydWU7CgkJfQoJfSAvKiBlbmQgb2Ygd2hp bGUgKi8KCWZjbG9zZShpbmZpbGUpOwoJaWYobnBvaW50cyA9PSAwKQoJewoJCWVycnR5cGUoJmFu YS0+cm9kLm1lbnUsICJObyBkYXRhIGluIHNwZWN0cnVtIik7CgkJY2xlYXJfY29tbWFuZCgmYW5h LT5yb2QubWVudSk7CgkJWENPTCA9IHhjb2xfc2F2ZTsKCQlyZXR1cm47Cgl9CglEQVRBW2luX3Nw ZWNdLk5QTlQgPSBucG9pbnRzOwoKCVhDT0wgPSB4Y29sX3NhdmU7CgoJLyogSWYgcmVxdWlyZWQs IGRvIHRoZSBzb2xpZC1zdGF0ZSBkZXRlY3RvciBjb3JyZWN0aW9uICovCgoJaWYoU09MSURfQ09S UikKCQlmb3IoaSA9IDA7IGkgPCBucG9pbnRzOyBpKyspCgkJCURBVEFbaW5fc3BlY10uWVtpXSAt PSAxOwoKCS8qIENhbGN1bGF0ZSBzdGF0aXN0aWNhbCBlcnJvciAqLwoKCWZvcihpID0gMDsgaSA8 IG5wb2ludHM7IGkrKykKCQlEQVRBW2luX3NwZWNdLkVbaV0gPSBzcXJ0KERBVEFbaW5fc3BlY10u WVtpXSk7CgoJLyogaWYgcmVxdWlyZWQsIG5vcm1hbGl6ZSBvbiBtb25pdG9yIHNpZ25hbCAqLwoK CWlmKE1DT0wgIT0gMCkKCXsKCQlmb3IoaSA9IDA7IGkgPCBucG9pbnRzOyBpKyspCgkJewoJCQlp Zihtb25pdG9yW2ldIDwgMSkgbW9uaXRvcltpXSA9IDE7CgkJCURBVEFbaW5fc3BlY10uWVtpXSAq PSBNT05JVE9SX05PUk0vbW9uaXRvcltpXTsKCQkJREFUQVtpbl9zcGVjXS5FW2ldICo9IE1PTklU T1JfTk9STS9tb25pdG9yW2ldOwoJCX0KCX0KCgkvKiBGaW5kIG1pbml1bXVtIGFuZCBtYXhpbXVt IGluIHNwZWN0cnVtICovCgoJREFUQVtpbl9zcGVjXS5NSU5ZID0gREFUQVtpbl9zcGVjXS5ZWzBd OwoJREFUQVtpbl9zcGVjXS5NQVhZID0gREFUQVtpbl9zcGVjXS5ZWzBdOwoJZm9yKGkgPSAxOyBp IDwgbnBvaW50czsgaSsrKQoJewoJCWlmKERBVEFbaW5fc3BlY10uWVtpXSA8IERBVEFbaW5fc3Bl Y10uTUlOWSkKCQkJREFUQVtpbl9zcGVjXS5NSU5ZID0gREFUQVtpbl9zcGVjXS5ZW2ldOwoJCWlm KERBVEFbaW5fc3BlY10uWVtpXSA+IERBVEFbaW5fc3BlY10uTUFYWSkKCQkJREFUQVtpbl9zcGVj XS5NQVhZID0gREFUQVtpbl9zcGVjXS5ZW2ldOwoJfQoKCS8qIEdpdmUgc3BlY3RydW0gYSB0aXRs ZSAqLwoKCXNwcmludGYoREFUQVtpbl9zcGVjXS5USVRMRSwiJS4qcyIsVElUTEVfTEVOR1RILGZp bGVuYW1lKTsKCglzcHJpbnRmKFNUUklORywiUmFuZ2Ugb2YgeC1heGlzOiAlMTAuNmcgdG8gJTEw LjZnXG4iLAoJCURBVEFbaW5fc3BlY10uWFswXSxEQVRBW2luX3NwZWNdLlhbREFUQVtpbl9zcGVj XS5OUE5ULTFdKTsKCXR5cGVfbGluZSgmYW5hLT5yb2QubWVudSwgU1RSSU5HKTsKCXR5cGVfaGVh ZGVyKGFuYSwgMSk7Cgp9CgpzdGF0aWMgdm9pZCByZWFkX3N1cGVyKEFuYSAqYW5hLCBpbnQgb2xk KQovKgogKiBSZWFkIHNjYW4gZnJvbSBTVVBFUiBmaWxlLiBUaGVyZSBhcmUgdHdvIG1vZGVzOgog KiAtIG9sZCA9IHRydWUgICAgb2xkIHN0eWxlOiBsYXJnZSBmaWxlIHdpdGggbWFueSBzY2Fucwog KiAtIG9sZCA9IGZhbHNlICAgbmV3IHN0eWxlOiBmaWxlIHdpdGggb25lIHNjYW4KICovCgp7CgoJ c3RhdGljIGludCBoY29sLGtjb2wsbGNvbCx0dGhjb2wsYWxwY29sLGJldGNvbDsKCWNoYXIgZmls ZW5hbWVbRklMRU5BTUVfTUFYXTsKCUZJTEUgKmluZmlsZSA9IE5VTEw7CglpbnQgaW5fc3BlYyA9 IDA7Cglib29sIGZvdW5kID0gZmFsc2UsZW5kX29mX3NjYW47Cglib29sIGRvbmU7CgljaGFyIGhh dGNoLGRhdGVbMjFdOwoJaW50IGksc2NhbjsKCWZsb2F0IG1vbml0b3I7CglmbG9hdCBkdW1teVtE QVRBQ09MVU1OU107CglpbnQgbWF4Y29sdW1uLG5wb2ludHM7CglmbG9hdCBub3JtX2NvcnI7Cglp bnQgbmNvbHVtbnMseGNvbF9zYXZlOwoJY2hhciBjb2x1bW5fbmFtZVsyMF0sbmFtZVsyMF1bMjBd OwoJZmxvYXQgKng9TlVMTCwqeT1OVUxMLCplPU5VTEw7CgoJLyogR2V0IHNjYW4gbnVtYmVyIHRv IGJlIHJlYWQgaW4gKi8KCglzcHJpbnRmKFNUUklORywiU2NhbiBudW1iZXIgdG8gYmUgcmVhZCBp biBbJTFkXTogIixTQ0FOTlIpOwoJU0NBTk5SID0gZ2V0X2ludCgmYW5hLT5yb2QubWVudSwgU0NB Tk5SLFNUUklORyk7CgoJLyogT3BlbiBTVVBFUiBmaWxlLiBEaWZmZXJlbnQgZm9yIHRoZSB0d28g bW9kZXMgKi8KCglpZihvbGQpICAgIC8qIE9sZCBzdHlsZSBTVVBFUiBmaWxlICovCgl7CgkJaWYo KGluZmlsZSA9IGZvcGVuKERBVEFGSUxFLCJyIikpID09IE5VTEwpCgkJewoJCQlzcHJpbnRmKFNU UklORywiRmFpbGVkIHRvIG9wZW4gaW5wdXQgZmlsZSAnJXMnIixEQVRBRklMRSk7CgkJCWVycnR5 cGUoJmFuYS0+cm9kLm1lbnUsIFNUUklORyk7CgkJCWNsZWFyX2NvbW1hbmQoJmFuYS0+cm9kLm1l bnUpOwoJCQlyZXR1cm47CgkJfQoJfQoJZWxzZSAgICAgICAgLyogTmV3IHN0eWxlIFNVUEVSIGZp bGUgKi8KCXsKCgkJLyogU2Nhbm51bWJlcnMgPiA5OTkgZ2V0IHRoZSBleHRyYSBkaWdpdCBhcyBw YXJ0IG9mIHRoZSBmaWxlbmFtZSAqLwoKCQlpZihTQ0FOTlIvMTAwMCA+IDApCgkJewoJCQlpZihO QVVUT1NVQiA+IDApCgkJCQlzcHJpbnRmKGZpbGVuYW1lLCIlcyUxZFxcJXMlMWQuJTAzZCIsUEFU SE5BTUUsU0NBTk5SL05BVVRPU1VCLAoJCQkJCURBVEFGSUxFLFNDQU5OUi8xMDAwLFNDQU5OUiUx MDAwKTsKCQkJZWxzZQoJCQkJc3ByaW50ZihmaWxlbmFtZSwiJXMlMWQuJTAzZCIsREFUQUZJTEUs U0NBTk5SLzEwMDAsU0NBTk5SJTEwMDApOwoJCX0KCQllbHNlCgkJewoJCQlpZihOQVVUT1NVQiA+ IDApCgkJCQlzcHJpbnRmKGZpbGVuYW1lLCIlcyUxZFxcJXMuJTAzZCIsUEFUSE5BTUUsU0NBTk5S L05BVVRPU1VCLAoJCQkJCURBVEFGSUxFLFNDQU5OUiUxMDAwKTsKCQkJZWxzZQoJCQkJc3ByaW50 ZihmaWxlbmFtZSwiJXMuJTAzZCIsREFUQUZJTEUsU0NBTk5SJTEwMDApOwoJCX0KCQlpZigoaW5m aWxlID0gZm9wZW4oZmlsZW5hbWUsInIiKSkgPT0gTlVMTCkKCQl7CgkJCXNwcmludGYoU1RSSU5H LCJGYWlsZWQgdG8gb3BlbiBpbnB1dCBmaWxlICclcyciLGZpbGVuYW1lKTsKCQkJZXJydHlwZSgm YW5hLT5yb2QubWVudSwgU1RSSU5HKTsKCQkJY2xlYXJfY29tbWFuZCgmYW5hLT5yb2QubWVudSk7 CgkJCXJldHVybjsKCQl9Cgl9CgoJLyogU2VhcmNoIGZvciBjb3JyZWN0IHNjYW4gbnVtYmVyICov CgoJd2hpbGUoIWZvdW5kKQoJewoJCWlmKGZnZXRzKElOTElORSxJTkxMRU4saW5maWxlKSA9PSBO VUxMKQoJCXsKCQkJaWYob2xkKQoJCQkJc3ByaW50ZihTVFJJTkcsIlNjYW4gbm90IGZvdW5kIGlu IGZpbGUgJyVzJyIsREFUQUZJTEUpOwoJCQllbHNlCgkJCQlzcHJpbnRmKFNUUklORywiU2NhbiBu b3QgZm91bmQgaW4gZmlsZSAnJXMnIixmaWxlbmFtZSk7CgkJCWVycnR5cGUoJmFuYS0+cm9kLm1l bnUsIFNUUklORyk7CgkJCWNsZWFyX2NvbW1hbmQoJmFuYS0+cm9kLm1lbnUpOwoJCQlmY2xvc2Uo aW5maWxlKTsKCQkJcmV0dXJuOwoJCX0KCQlzc2NhbmYoSU5MSU5FLCIlYyVkIiwmaGF0Y2gsJnNj YW4pOwoJCWlmKChoYXRjaCA9PSAnIycpICYmIChzY2FuID09IFNDQU5OUikpCgkJewoJCQlmb3Vu ZCA9IHRydWU7CgkJCXNzY2FuZihJTkxJTkUsIiU4MFtePV0lKmMlZiUqNmMlMjBjIixTVFJJTkcs Jm1vbml0b3IsZGF0ZSk7CgkJfQoJCWVsc2UgaWYoaGF0Y2ggPT0gJz4nKQoJCXsKCQkJLyogUmVt b3ZlIG5ld2xpbmUgY2hhcmFjdGVyIGF0IHRoZSBlbmQgKi8KCQkJaSA9IHN0cmxlbihJTkxJTkUp IDwgVElUSU5GTE4gPyBzdHJsZW4oSU5MSU5FKSA6IFRJVElORkxOOwoJCQlzcHJpbnRmKERBVEFU SVRMRSwiJS4qcyIsaS0xLElOTElORSk7CgkJfQoJfQoKCS8qIFJlYWQgbGluZSB3aXRoIGNvbHVt biBuYW1lcy4gU2tpcCB0aGlzIGxpbmUgaWYgdGhlIGNvbHVtbiBudW1iZXIKCSAgIG9mIHRoZSB4 LXZhbHVlcyBpZiBnaXZlbi4gSWYgWENPTCA8IDAsIGFzayBmb3IgbmFtZSBvZiBjb2x1bW4uICov CgoJaWYoZmdldHMoSU5MSU5FLElOTExFTixpbmZpbGUpID09IE5VTEwpCgl7CgkJZXJydHlwZSgm YW5hLT5yb2QubWVudSwgIkVycm9yLCBlbXB0eSBzcGVjdHJ1bSIpOwoJCWNsZWFyX2NvbW1hbmQo JmFuYS0+cm9kLm1lbnUpOwoJCWZjbG9zZShpbmZpbGUpOwoJCXJldHVybjsKCX0KCXhjb2xfc2F2 ZSA9IFhDT0w7CglpZihYQ09MIDwgMCkKCXsKCQloY29sID0gMDsKCQlrY29sID0gMDsKCQlsY29s ID0gMDsKCQl0dGhjb2wgPSAwOwoJCWRvbmUgPSBmYWxzZTsKCQl3aGlsZSghZG9uZSkKCQl7CgkJ CWlmKCFnZXRfdG9rZW4oJmFuYS0+cm9kLm1lbnUsIGNvbHVtbl9uYW1lLAoJCQkJICAgICAgIkdp dmUgY29sdW1uIG5hbWUgKHR5cGUgPHJldHVybj4gZm9yIG9wdGlvbnMpOiAiKSkKCQkJewoJCQkJ dHlwZV9saW5lKCZhbmEtPnJvZC5tZW51LCBJTkxJTkUpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJ c3RyaW5nX3RvbG93ZXIoY29sdW1uX25hbWUpOwoJCQkJbmNvbHVtbnMgPSBzc2NhbmYoSU5MSU5F LAoJCQkJCQkgICIlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyAlcyIsCgkJCQkJ CSAgbmFtZVswXSxuYW1lWzFdLG5hbWVbMl0sbmFtZVszXSxuYW1lWzRdLG5hbWVbNV0sbmFtZVs2 XSwKCQkJCQkJICBuYW1lWzddLG5hbWVbOF0sbmFtZVs5XSxuYW1lWzEwXSxuYW1lWzExXSxuYW1l WzEyXSk7CgkJCQlmb3IoaSA9IDA7IGkgPCBuY29sdW1uczsgaSsrKQoJCQkJewoJCQkJCXN0cmlu Z190b2xvd2VyKG5hbWVbaV0pOwoJCQkJCWlmKHN0cmNtcChuYW1lW2ldLGNvbHVtbl9uYW1lKSA9 PSAwKQoJCQkJCXsKCQkJCQkJWENPTCA9IGkrMTsKCQkJCQkJZG9uZSA9IHRydWU7CgkJCQkJCXNu cHJpbnRmKFhDT0xOQU1FLCBBUlJBWV9TSVpFKFhDT0xOQU1FKSwKCQkJCQkJCSAiJS4qcyIsIChp bnQpKEFSUkFZX1NJWkUobmFtZVtpXSkpLCBuYW1lW2ldKTsKCQkJCQl9CgkJCQkJaWYoc3RyY21w KG5hbWVbaV0sWUNPTE5BTUUpID09IDApIFlDT0wgPSBpKzE7CgkJCQkJaWYoc3RyY21wKG5hbWVb aV0sImgiKSA9PSAwKSBoY29sID0gaSsxOwoJCQkJCWlmKHN0cmNtcChuYW1lW2ldLCJrIikgPT0g MCkga2NvbCA9IGkrMTsKCQkJCQlpZihzdHJjbXAobmFtZVtpXSwibCIpID09IDApIGxjb2wgPSBp KzE7CgkJCQkJaWYoc3RyY21wKG5hbWVbaV0sInR0aCIpID09IDApIHR0aGNvbCA9IGkrMTsKCQkJ CQlpZihzdHJjbXAobmFtZVtpXSwiYmV0IikgPT0gMCkgYmV0Y29sID0gaSsxOwoJCQkJCWlmKHN0 cmNtcChuYW1lW2ldLCJtY3IiKSA9PSAwKSBhbHBjb2wgPSBpKzE7CgkJCQl9CgkJCQlpZihYQ09M IDwgMCkKCQkJCXsKCQkJCQllcnJ0eXBlKCZhbmEtPnJvZC5tZW51LCAiRVJST1IsIG5vIG1hdGNo aW5nIGNvbHVtbiBuYW1lIGZvdW5kIik7CgkJCQkJY2xlYXJfY29tbWFuZCgmYW5hLT5yb2QubWVu dSk7CgkJCQkJZmNsb3NlKGluZmlsZSk7CgkJCQkJcmV0dXJuOwoJCQkJfQoJCQl9CgkJfQoJCXNw cmludGYoU1RSSU5HLCJ4IHRpdGxlICVzIGJyZWFrIixYQ09MTkFNRSk7CgkJcHV0X2NvbW1hbmQo JmFuYS0+cm9kLm1lbnUsIFNUUklORyk7CgkJcGxvdHh5ZSgmYW5hLT5wZywgJmFuYS0+cm9kLm1l bnUsIHgsIHksIGUsIDEpOwoJfQoKCS8qIEdldCBzcGVjdHJ1bSBudW1iZXIgd2hlcmUgZGF0YSBo YXMgdG8gYmUgc3RvcmVkICovCgoJZ2V0X2luc3BlYyhhbmEsICZpbl9zcGVjKTsKCVJFQURTUEVD ID0gaW5fc3BlYzsKCgkvKiBEaXNwbGF5IHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpbGUg Ki8KCglEQVRBVElUTEVbMF0gPSAnICc7CglzcHJpbnRmKFNUUklORywiVGl0bGU6ICVzXG4iLERB VEFUSVRMRSk7Cgl0eXBlX2xpbmUoJmFuYS0+cm9kLm1lbnUsIFNUUklORyk7CglkYXRlWzIwXSA9 ICdcMCc7CglzcHJpbnRmKFNUUklORywiQ3JlYXRpb24gZGF0ZTogJXNcbiIsZGF0ZSk7Cgl0eXBl X2xpbmUoJmFuYS0+cm9kLm1lbnUsIFNUUklORyk7CgoJLyogRmluZCBtYXhpbXVtIGNvbHVtbiBu dW1iZXIgdG8gYmUgcmVhZCBpbiAqLwoKCWlmKFhDT0wgPiBZQ09MKQoJCW1heGNvbHVtbiA9IFhD T0w7CgllbHNlCgkJbWF4Y29sdW1uID0gWUNPTDsKCgkvKiBSZWFkIGRhdGEgYW5kIGNvbXB1dGUg c3RhdGlzdGljYWwgZXJyb3IgaW4geS12YWx1ZXMgKi8KCglucG9pbnRzID0gMDsKCUhNSUwgPSAw OwoJS01JTCA9IDA7CglMTUlMID0gMDsKCURFTFRBID0gMDsKCUJFVEFJTiA9IDA7CglBTFBIQSA9 IDA7CgllbmRfb2Zfc2NhbiA9IGZhbHNlOwoJd2hpbGUoKGZnZXRzKElOTElORSxJTkxMRU4saW5m aWxlKSAhPSBOVUxMKSAmJiAoIWVuZF9vZl9zY2FuKSkKCXsKCQkvKiBDaGVjayB3aGV0aGVyIGVu b3VnaCBkYXRhIGlzIHJlYWQgaW4gKi8KCQlpZihzc2NhbmYoSU5MSU5FLCIlZiVmJWYlZiVmJWYl ZiVmJWYlZiVmJWYiLAoJCQkgICZkdW1teVswXSwmZHVtbXlbMV0sJmR1bW15WzJdLCZkdW1teVsz XSwmZHVtbXlbNF0sJmR1bW15WzVdLAoJCQkgICZkdW1teVs2XSwmZHVtbXlbN10sJmR1bW15Wzhd LCZkdW1teVs5XSwmZHVtbXlbMTBdLCZkdW1teVsxMV0pCgkJICAgPj0gbWF4Y29sdW1uKQoJCXsK CQkJaWYoWENPTCA9PSAwKSAvKiBFbnVtZXJhdGUgeC12YWx1ZXMgKi8KCQkJCURBVEFbaW5fc3Bl Y10uWFtucG9pbnRzXSA9IChmbG9hdCkgbnBvaW50cysxOwoJCQllbHNlCgkJCQlEQVRBW2luX3Nw ZWNdLlhbbnBvaW50c10gPSBkdW1teVtYQ09MLTFdOwoJCQlEQVRBW2luX3NwZWNdLllbbnBvaW50 c10gPSBkdW1teVtZQ09MLTFdOwoJCQlITUlMICs9IGR1bW15W2hjb2wtMV07CgkJCUtNSUwgKz0g ZHVtbXlba2NvbC0xXTsKCQkJTE1JTCArPSBkdW1teVtsY29sLTFdOwoJCQlERUxUQSArPSBkdW1t eVt0dGhjb2wtMV07CgkJCWlmKGJldGNvbCAhPSAwKSBCRVRBSU4gKz0gZHVtbXlbYmV0Y29sLTFd OwoJCQlpZihhbHBjb2wgIT0gMCkgQUxQSEEgKz0gZHVtbXlbYWxwY29sLTFdOwoJCQlpZihkdW1t eVtZQ09MLTFdIDwgWFlNSU5WQUwpCgkJCXsKCQkJCURBVEFbaW5fc3BlY10uRVtucG9pbnRzXSA9 IDEuOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJREFUQVtpbl9zcGVjXS5FW25wb2ludHNdID0gIHNx cnQoZHVtbXlbWUNPTC0xXSk7CgkJCX0KCQkJbnBvaW50cysrOwoJCX0KCQllbHNlCgkJewoJCQll bmRfb2Zfc2NhbiA9IHRydWU7CgkJfQoJfQoJZmNsb3NlKGluZmlsZSk7CgoJWENPTCA9IHhjb2xf c2F2ZTsKCglpZihucG9pbnRzID09IDApCgl7CgkJZXJydHlwZSgmYW5hLT5yb2QubWVudSwgIk5v IGRhdGEgaW4gc3BlY3RydW0iKTsKCQljbGVhcl9jb21tYW5kKCZhbmEtPnJvZC5tZW51KTsKCQly ZXR1cm47Cgl9CglEQVRBW2luX3NwZWNdLk5QTlQgPSBucG9pbnRzOwoKCS8qIE1ha2UgaCwgaywg bCBhbmQgdHdvLXRoZXRhIHRoZSBhdmVyYWdlIHZhbHVlICovCgoJSE1JTCA9IEhNSUwvbnBvaW50 czsKCUtNSUwgPSBLTUlML25wb2ludHM7CglMTUlMID0gTE1JTC9ucG9pbnRzOwoJREVMVEEgPSBE RUxUQS9ucG9pbnRzOwoJQkVUQUlOID0gQkVUQUlOL25wb2ludHM7CglBTFBIQSA9IEFMUEhBL25w b2ludHM7CglzcHJpbnRmKFNUUklORywiKGhrbCkgPSAoJTQuMmYsJTQuMmYsJTQuMmYpXG4iLEhN SUwsS01JTCxMTUlMKTsKCXR5cGVfbGluZSgmYW5hLT5yb2QubWVudSwgU1RSSU5HKTsKCgkvKiBJ ZiByZXF1ZXN0ZWQsIG5vcm1hbGl6ZSBkYXRhICovCgoJaWYoKE1DT0wgIT0gMCkgJiYgKG1vbml0 b3IgPiAwLjEpKQoJewoJCW5vcm1fY29yciA9IE1PTklUT1JfTk9STS9tb25pdG9yOwoJCWZvcihp ID0gMDsgaSA8IG5wb2ludHM7IGkrKykKCQl7CgkJCURBVEFbaW5fc3BlY10uWVtpXSAqPSBub3Jt X2NvcnI7CgkJCURBVEFbaW5fc3BlY10uRVtpXSAqPSBub3JtX2NvcnI7CgkJfQoJfQoKCS8qIEZp bmQgbWluaXVtdW0gYW5kIG1heGltdW0gaW4gc3BlY3RydW0gKi8KCglEQVRBW2luX3NwZWNdLk1J TlkgPSBEQVRBW2luX3NwZWNdLllbMF07CglEQVRBW2luX3NwZWNdLk1BWFkgPSBEQVRBW2luX3Nw ZWNdLllbMF07Cglmb3IoaSA9IDE7IGkgPCBucG9pbnRzOyBpKyspCgl7CgkJaWYoREFUQVtpbl9z cGVjXS5ZW2ldIDwgREFUQVtpbl9zcGVjXS5NSU5ZKQoJCQlEQVRBW2luX3NwZWNdLk1JTlkgPSBE QVRBW2luX3NwZWNdLllbaV07CgkJaWYoREFUQVtpbl9zcGVjXS5ZW2ldID4gREFUQVtpbl9zcGVj XS5NQVhZKQoJCQlEQVRBW2luX3NwZWNdLk1BWFkgPSBEQVRBW2luX3NwZWNdLllbaV07Cgl9CgoJ LyogR2l2ZSBzcGVjdHJ1bSBhIHRpdGxlICovCgoJaWYob2xkKQoJCXNwcmludGYoREFUQVtpbl9z cGVjXS5USVRMRSwiJS4qcyAjJTFkIixUSVRMRV9MRU5HVEgtNyxEQVRBRklMRSxTQ0FOTlIpOwoJ ZWxzZQoJCXNwcmludGYoREFUQVtpbl9zcGVjXS5USVRMRSwiJS4qcyIsVElUTEVfTEVOR1RILGZp bGVuYW1lKTsKCglzcHJpbnRmKFNUUklORywiUmFuZ2Ugb2YgeC1heGlzOiAlMTAuNmcgdG8gJTEw LjZnXG4iLAoJCURBVEFbaW5fc3BlY10uWFswXSxEQVRBW2luX3NwZWNdLlhbREFUQVtpbl9zcGVj XS5OUE5ULTFdKTsKCXR5cGVfbGluZSgmYW5hLT5yb2QubWVudSwgU1RSSU5HKTsKCXR5cGVfaGVh ZGVyKGFuYSwgMSk7Cgp9CgpzdGF0aWMgdm9pZCByZWFkX3h5ZShBbmEgKmFuYSkKLyoKICogUmVh ZCB4eWUgZmlsZToKICogLSBvbmUgY29tbWVudCBsaW5lCiAqIC0gZGF0YSBsaW5lIHdpdGggeCBh bmQgeSB2YWx1ZXMsIGFuZCBvcHRpb25hbGx5IGFuIGVycm9yIGluIHRoaXJkIGNvbHVtbi4KICov Cgp7CgljaGFyIGZpbGVuYW1lW0ZJTEVOQU1FX01BWF07CglGSUxFICppbmZpbGU7CglpbnQgaSxp bl9zcGVjID0gMCxpdGVtcyxucG9pbnRzOwoJYm9vbCBlcnJvcl9jb2x1bW4sZW5kX29mX2ZpbGU7 CglmbG9hdCB4LHksZTsKCgkvKiBHZXQgZmlsZW5hbWUgYW5kIG9wZW4gZmlsZSwgcmV0dXJuIGlm IG5vdCBzdWNjZXNzZnVsICovCgoJZ2V0X3Rva2VuKCZhbmEtPnJvZC5tZW51LCBmaWxlbmFtZSwi R2l2ZSBmaWxlbmFtZSAoLmRhdCk6ICIpOwoJYWRkX2V4dGVuc2lvbihmaWxlbmFtZSwiZGF0Iik7 CglpZigoaW5maWxlID0gZm9wZW4oZmlsZW5hbWUsInIiKSkgPT0gTlVMTCkKCXsKCQlzcHJpbnRm KFNUUklORywiRmFpbGVkIHRvIG9wZW4gZmlsZSAnJXMnIixmaWxlbmFtZSk7CgkJZXJydHlwZSgm YW5hLT5yb2QubWVudSwgU1RSSU5HKTsKCQljbGVhcl9jb21tYW5kKCZhbmEtPnJvZC5tZW51KTsK CQlyZXR1cm47Cgl9CgoJLyogR2V0IHNwZWN0cnVtIG51bWJlciB3aGVyZSBkYXRhIGhhcyB0byBi ZSBzdG9yZWQgKi8KCglnZXRfaW5zcGVjKGFuYSwgJmluX3NwZWMpOwoJUkVBRFNQRUMgPSBpbl9z cGVjOwoKCS8qIFR5cGUgY29tbWVudHMgKi8KCglpZihmZ2V0cyhJTkxJTkUsSU5MTEVOLGluZmls ZSkgPT0gTlVMTCkKCXsKCQllcnJ0eXBlKCZhbmEtPnJvZC5tZW51LCAiRVJST1IsIGZpbGUgaXMg ZW1wdHkiKTsKCQlmY2xvc2UoaW5maWxlKTsKCQljbGVhcl9jb21tYW5kKCZhbmEtPnJvZC5tZW51 KTsKCQlyZXR1cm47Cgl9CgllbHNlCgl7CgkJdHlwZV9saW5lKCZhbmEtPnJvZC5tZW51LCBJTkxJ TkUpOwoJCXNwcmludGYoREFUQVRJVExFLCIlLipzIixUSVRJTkZMTi0xLElOTElORSk7Cgl9CgoJ LyogRmluZCBvdXQgaWYgdGhlcmUgaXMgYW4gZXJyb3IgY29sdW1uIGluIGZpbGUgKi8KCglpZihm Z2V0cyhJTkxJTkUsSU5MTEVOLGluZmlsZSkgPT0gTlVMTCkKCXsKCQllcnJ0eXBlKCZhbmEtPnJv ZC5tZW51LCAiRVJST1IsIGZpbGUgaXMgZW1wdHkiKTsKCQlmY2xvc2UoaW5maWxlKTsKCQljbGVh cl9jb21tYW5kKCZhbmEtPnJvZC5tZW51KTsKCQlyZXR1cm47Cgl9CglpdGVtcyA9IHNzY2FuZihJ TkxJTkUsIiVmJWYlZiIsJngsJnksJmUpOwoJaWYoaXRlbXMgPT0gMykKCXsKCQllcnJvcl9jb2x1 bW4gPSB0cnVlOwoJCURBVEFbaW5fc3BlY10uWFswXSA9IHg7CgkJREFUQVtpbl9zcGVjXS5ZWzBd ID0geTsKCQlEQVRBW2luX3NwZWNdLkVbMF0gPSBlOwoJfQoJZWxzZSBpZihpdGVtcyA9PSAyKQoJ ewoJCWVycm9yX2NvbHVtbiA9IGZhbHNlOwoJCURBVEFbaW5fc3BlY10uWFswXSA9IHg7CgkJREFU QVtpbl9zcGVjXS5ZWzBdID0geTsKCQlEQVRBW2luX3NwZWNdLkVbMF0gPSAxOwoJfQoJZWxzZQoJ ewoJCWVycnR5cGUoJmFuYS0+cm9kLm1lbnUsICJFUlJPUiwgd2hlbiByZWFkaW5nIGZpbGUiKTsK CQlmY2xvc2UoaW5maWxlKTsKCQljbGVhcl9jb21tYW5kKCZhbmEtPnJvZC5tZW51KTsKCQlyZXR1 cm47Cgl9CgoJbnBvaW50cyA9IDE7CgllbmRfb2ZfZmlsZSA9IGZhbHNlOwoJd2hpbGUoKGZnZXRz KElOTElORSxJTkxMRU4saW5maWxlKSAhPSBOVUxMKSAmJiAoIWVuZF9vZl9maWxlKSkKCXsKCQlp ZihlcnJvcl9jb2x1bW4pICAgICAgIC8qIHJlYWQgaW4gdGhyZWUgdmFsdWVzICovCgkJewoJCQlp Zihzc2NhbmYoSU5MSU5FLCIlZiVmJWYiLCZ4LCZ5LCZlKSA9PSAzKQoJCQl7CgkJCQlEQVRBW2lu X3NwZWNdLlhbbnBvaW50c10gPSB4OwoJCQkJREFUQVtpbl9zcGVjXS5ZW25wb2ludHNdID0geTsK CQkJCURBVEFbaW5fc3BlY10uRVtucG9pbnRzXSA9IGU7CgkJCQlucG9pbnRzKys7CgkJCX0KCQkJ ZWxzZQoJCQl7CgkJCQllbmRfb2ZfZmlsZSA9IHRydWU7CgkJCX0KCQl9CgkJZWxzZSAgICAgICAg ICAgICAgICAgICAgLyogcmVhZCBpbiB0d28gdmFsdWVzICovCgkJewoJCQlpZihzc2NhbmYoSU5M SU5FLCIlZiVmIiwmeCwmeSkgPT0gMikKCQkJewoJCQkJREFUQVtpbl9zcGVjXS5YW25wb2ludHNd ID0geDsKCQkJCURBVEFbaW5fc3BlY10uWVtucG9pbnRzXSA9IHk7CgkJCQlEQVRBW2luX3NwZWNd LkVbbnBvaW50c10gPSAxOwoJCQkJbnBvaW50cysrOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJZW5k X29mX2ZpbGUgPSB0cnVlOwoJCQl9CgkJfQoJfQoJZmNsb3NlKGluZmlsZSk7CglpZihucG9pbnRz ID09IDApCgl7CgkJZXJydHlwZSgmYW5hLT5yb2QubWVudSwgIk5vIGRhdGEgaW4gc3BlY3RydW0i KTsKCQljbGVhcl9jb21tYW5kKCZhbmEtPnJvZC5tZW51KTsKCQlyZXR1cm47Cgl9CglEQVRBW2lu X3NwZWNdLk5QTlQgPSBucG9pbnRzOwoKCS8qIEZpbmQgbWluaXVtdW0gYW5kIG1heGltdW0gaW4g c3BlY3RydW0gKi8KCglEQVRBW2luX3NwZWNdLk1JTlkgPSBEQVRBW2luX3NwZWNdLllbMF07CglE QVRBW2luX3NwZWNdLk1BWFkgPSBEQVRBW2luX3NwZWNdLllbMF07Cglmb3IoaSA9IDE7IGkgPCBu cG9pbnRzOyBpKyspCgl7CgkJaWYoREFUQVtpbl9zcGVjXS5ZW2ldIDwgREFUQVtpbl9zcGVjXS5N SU5ZKQoJCQlEQVRBW2luX3NwZWNdLk1JTlkgPSBEQVRBW2luX3NwZWNdLllbaV07CgkJaWYoREFU QVtpbl9zcGVjXS5ZW2ldID4gREFUQVtpbl9zcGVjXS5NQVhZKQoJCQlEQVRBW2luX3NwZWNdLk1B WFkgPSBEQVRBW2luX3NwZWNdLllbaV07Cgl9CgoJLyogR2l2ZSBzcGVjdHJ1bSBhIHRpdGxlICov CgoJc3ByaW50ZihEQVRBW2luX3NwZWNdLlRJVExFLCIlLipzIixUSVRMRV9MRU5HVEgsZmlsZW5h bWUpOwoKCXNwcmludGYoU1RSSU5HLCJSYW5nZSBvZiB4LWF4aXM6ICUxMC42ZyB0byAlMTAuNmdc biIsCgkJREFUQVtpbl9zcGVjXS5YWzBdLERBVEFbaW5fc3BlY10uWFtEQVRBW2luX3NwZWNdLk5Q TlQtMV0pOwoJdHlwZV9saW5lKCZhbmEtPnJvZC5tZW51LCBTVFJJTkcpOwoJdHlwZV9oZWFkZXIo YW5hLCAxKTsKCn0KCnZvaWQgcmVhZF90eXBlKEFuYSAqYW5hKQovKgogKiBHZXQgdHlwZSBvZiBm aWxlIHRvIGJlIHJlYWQgaW4uCiAqLwoKewoKCS8qIGRlZmluZSByZWFkX3R5cGVfbWVudSAqLwoK CXN0YXRpYyBzdHJ1Y3QgTUVOVSByZWFkX3R5cGVfbWVudVtdID0KCQl7CgkJCXsic3JzIiwgICAg ICAyLCAgMSwgICJTUlMgZGF0YSBmaWxlIn0sCgkJCXsic3BlYyIsICAgICAyLCAgNiwgICJTUEVD IGRhdGEgZmlsZSJ9LAoJCQl7InN1cGVyIiwgICAgMiwgIDIsICAiU3VwZXIgZGF0YSBmaWxlIChz aW5nbGUgc2NhbikifSwKCQkJeyJvc3VwZXIiLCAgIDEsICAzLCAgIk9sZCBzdXBlciBzY2FuIChp biBiaWdkYXRhIGZpbGUpIn0sCgkJCXsieHllIiwgICAgICAxLCAgNCwgICJGaWxlIHdpdGggeCB5 IChhbmQgb3B0LiBlcnJvcikgY29sdW1ucyJ9LAoJCQl7ImNvbHVtbiIsICAgMSwgIDUsICAiRmls ZSB3aXRoIGFyYml0cmFyeSBhbW91bnQgb2YgY29sdW1ucyJ9LAoJCQl7ImZ0YXNjb20iLCAgMSwg IDcsICAiU2luZ2xlIGNvbHVtbiB0YXNjb20gZGF0YSBmaWxlIn0sCgkJCXsiaGVscCIsICAgICAx LCAgMjAsICJEaXNwbGF5IG1lbnUifSwKCQkJeyJyZXR1cm4iLCAgIDEsICAyMSwgIlJldHVybiB0 byBtYWluIG1lbnUifSwKCQl9OwoJLyogbnVtYmVyIG9mIGNvbW1hbmRzIGluIHJlYWRfdHlwZSBt ZW51ICovCglpbnQgcmVhZF90eXBlX2xlbmd0aCA9IHNpemVvZihyZWFkX3R5cGVfbWVudSkgLyBz aXplb2YocmVhZF90eXBlX21lbnVbMF0pOwoKCWJvb2wgc3RvcCA9IGZhbHNlLG9sZDsKCWNoYXIg dG9rZW5bMTAwXTsKCgl3aGlsZSghc3RvcCkKCXsKCQl0eXBlX2hlYWRlcihhbmEsIDApOwoJCWlm KCFnZXRfdG9rZW4oJmFuYS0+cm9kLm1lbnUsIHRva2VuLCJGaWxlIHR5cGU6ICIpKQoJCQlyZXR1 cm47CgkJc3dpdGNoKGNtbmRfbWF0Y2goJmFuYS0+cm9kLm1lbnUsIHRva2VuLHJlYWRfdHlwZV9t ZW51LHJlYWRfdHlwZV9sZW5ndGgpKQoJCXsKCQljYXNlIC0xOgoJCQlicmVhazsKCQljYXNlIDA6 CgkJCWJyZWFrOwoJCWNhc2UgMToKCQkJc3ByaW50ZihGSUxFVFlQRSwic3JzIik7CgkJCXJlYWRf c3JzKGFuYSwgMik7CgkJCXJldHVybjsKCQljYXNlIDI6CgkJCW9sZCA9IGZhbHNlOwoJCQlzcHJp bnRmKEZJTEVUWVBFLCJzdXBlciIpOwoJCQlyZWFkX3N1cGVyKGFuYSwgb2xkKTsKCQkJcmV0dXJu OwoJCWNhc2UgMzoKCQkJb2xkID0gdHJ1ZTsKCQkJc3ByaW50ZihGSUxFVFlQRSwib3N1cGVyIik7 CgkJCXJlYWRfc3VwZXIoYW5hLCBvbGQpOwoJCQlyZXR1cm47CgkJY2FzZSA0OgoJCQlzcHJpbnRm KEZJTEVUWVBFLCJ4eWUiKTsKCQkJcmVhZF94eWUoYW5hKTsKCQkJcmV0dXJuOwoJCWNhc2UgNToK CQkJc3ByaW50ZihGSUxFVFlQRSwiY29sdW1uIik7CgkJCXJlYWRfY29sdW1uKGFuYSk7CgkJCXJl dHVybjsKCQljYXNlIDY6CgkJCXNwcmludGYoRklMRVRZUEUsInNwZWMiKTsKCQkJcmVhZF9zcGVj KGFuYSk7CgkJCXJldHVybjsKCQljYXNlIDc6CgkJCXNwcmludGYoRklMRVRZUEUsImZ0YXNjb20i KTsKCQkJcmVhZF9mdGFzY29tKGFuYSk7CgkJCXJldHVybjsKCQljYXNlIDIwOgoJCQlsaXN0X21l bnUoJmFuYS0+cm9kLm1lbnUsICJGSUxFIFRZUEVTIixyZWFkX3R5cGVfbWVudSxyZWFkX3R5cGVf bGVuZ3RoKTsKCQkJYnJlYWs7CgkJY2FzZSAyMToKCQkJc3RvcCA9IHRydWU7CgkJfQoJfQp9Cg== --=_0f8fcd8161d529a9243cf4fab37d5a05 Content-Transfer-Encoding: base64 Content-Type: text/x-c; name=refactoring.cocci Content-Disposition: attachment; filename=refactoring.cocci; size=8010 QGFuYUAKQEAKCiNpbmNsdWRlICJhbmEuaCIKCkBkZXBlbmRzIG9uIGFuYUAKZXhwcmVzc2lvbiBh LGIsYyxkOwpAQAotIHBsb3R4eWUoYSwgYiwgYywgZCkKKyBwbG90eHllKCZhbmEtPnBnLCAmYW5h LT5yb2QubWVudSwgYSwgYiwgYywgZCkKCkBkZXBlbmRzIG9uIGFuYUAKZXhwcmVzc2lvbiBhLGIs YyxkLGU7CkBACi0gcGxvdHh5ZShwZywgYSwgYiwgYywgZCwgZSkKKyBwbG90eHllKCZhbmEtPnBn LCBhLCBiLCBjLCBkLCBlKQoKQGRlcGVuZHMgb24gYW5hQApleHByZXNzaW9uIGEsYixjLGQsZTsK QEAKLSBwbG90eHllKGEsIG1lbnUsIGIsIGMsIGQsIGUpCisgcGxvdHh5ZShhLCAmYW5hLT5yb2Qu bWVudSwgYiwgYywgZCwgZSkKCkBkZXBlbmRzIG9uIGFuYUAKZXhwcmVzc2lvbiBhLGIsYyxkOwpA QAotIHBsb3QzZGN1cnZlKGEsIGIsIGMsIGQpCisgcGxvdDNkY3VydmUoJmFuYS0+cGcsICZhbmEt PnJvZC5tZW51LCBhLCBiLCBjLCBkKQoKQEAKZXhwcmVzc2lvbiBhLGIsYyxkOwpAQAotIHBsb3Qz ZGN1cnZlKGEsIGIsIGMsIGQpCisgcGxvdDNkY3VydmUocGcsIG1lbnUsIGEsIGIsIGMsIGQpCgpA QApAQAotIFRNUF9BWElTCisgcGctPlRNUF9BWElTCgpAQApAQAotIFRNUF9YTE9XRVJTQworIHBn LT5UTVBfWExPV0VSU0MKCkBACkBACi0gVE1QX1hVUFBFUlNDCisgcGctPlRNUF9YVVBQRVJTQwoK QEAKQEAKLSBUTVBfWUxPV0VSU0MKKyBwZy0+VE1QX1lMT1dFUlNDCgpAQApAQAotIFRNUF9ZVVBQ RVJTQworIHBnLT5UTVBfWVVQUEVSU0MKCkBACkBACi0gVE1QX0FVVE9YCisgcGctPlRNUF9BVVRP WAoKQEAKQEAKLSBUTVBfQVVUT1kKKyBwZy0+VE1QX0FVVE9ZCgpAQApAQAotIFRNUF9YTE9HU0MK KyBwZy0+VE1QX1hMT0dTQwoKQEAKQEAKLSBUTVBfWUxPR1NDCisgcGctPlRNUF9ZTE9HU0MKCkBA CkBACi0gWkZPUkNFCisgcGctPlpGT1JDRQoKQEAKQEAKLSBUTVBfWkZPUkNFCisgcGctPlRNUF9a Rk9SQ0UKCkBACkBACi1UTVBfWFRJQ0sKK3BnLT5UTVBfWFRJQ0sKCkBACkBACi1UTVBfWFNVQlRJ Q0sKK3BnLT5UTVBfWFNVQlRJQ0sKCkBACkBACi1YRk9STUFUCitwZy0+WEZPUk1BVAoKQEAKQEAK LVRNUF9YRk9STUFUCitwZy0+VE1QX1hGT1JNQVQKCkBACkBACi1UTVBfWVRJQ0sKK3BnLT5UTVBf WVRJQ0sKCkBACkBACi1UTVBfWVNVQlRJQ0sKK3BnLT5UTVBfWVNVQlRJQ0sKCkBACkBACi1ZRk9S TUFUCitwZy0+WUZPUk1BVAoKQEAKQEAKLVRNUF9ZRk9STUFUCitwZy0+VE1QX1lGT1JNQVQKCkBA CkBACi1UTVBfWExBQkVMCisgcGctPlRNUF9YTEFCRUwKCkBACkBACi1UTVBfWExBQlNUUklORwor cGctPlRNUF9YTEFCU1RSSU5HCgpAQApAQAotVE1QX1hMQUJQT0lOVEVSCitwZy0+VE1QX1hMQUJQ T0lOVEVSCgpAQApAQAotVE1QX1lMQUJTVFJJTkcKK3BnLT5UTVBfWUxBQlNUUklORwoKQEAKQEAK LVRNUF9ZTEFCUE9JTlRFUgorcGctPlRNUF9ZTEFCUE9JTlRFUgoKQEAKQEAKLVRNUF9ZTEFCRUwK K3BnLT5UTVBfWUxBQkVMCgpAQApAQAotVE1QX1pMT1dFUlNDCitwZy0+VE1QX1pMT1dFUlNDCgpA QApAQAotVE1QX1pVUFBFUlNDCitwZy0+VE1QX1pVUFBFUlNDCgpAQApAQAotVE1QX0FVVE9aCitw Zy0+VE1QX0FVVE9aCgpAQApAQAotVE1QX1pUSUNLCitwZy0+VE1QX1pUSUNLCgpAQApAQAotVE1Q X1pUSVRMRQorcGctPlRNUF9aVElUTEUKCkBACkBACi1UTVBfWFRJVExFCitwZy0+VE1QX1hUSVRM RQoKQEAKQEAKLVRNUF9ZVElUTEUKK3BnLT5UTVBfWVRJVExFCgpAQApAQAotVE1QX1BUSVRMRQor cGctPlRNUF9QVElUTEUKCkBACkBACi1UTVBfTkZPTlRTCitwZy0+VE1QX05GT05UUwoKQEAKQEAK LVRNUF9GT05UTkFNRQorcGctPlRNUF9GT05UTkFNRQoKQEAKQEAKLVRNUF9ERUZGT05UCitwZy0+ VE1QX0RFRkZPTlQKCkBACkBACi1UTVBfRk9OVEZJTEwKK3BnLT5UTVBfRk9OVEZJTEwKCkBACkBA Ci1UTVBfQ1VSVkVTVFlMRQorcGctPlRNUF9DVVJWRVNUWUxFCgpAQApAQAotVE1QX0xJTkVTVFlM RQorcGctPlRNUF9MSU5FU1RZTEUKCkBACkBACi1UTVBfQ1VSVkVUSElDS05FU1MKK3BnLT5UTVBf Q1VSVkVUSElDS05FU1MKCkBACkBACi1UTVBfTElORVRISUNLTkVTUworcGctPlRNUF9MSU5FVEhJ Q0tORVNTCgpAQApAQAotVE1QX1NZTVNUWUxFCitwZy0+VE1QX1NZTVNUWUxFCgpAQApAQAotVE1Q X1NZTVNJWkUKK3BnLT5UTVBfU1lNU0laRQoKQEAKQEAKLUxJTkVUWVBFCitwZy0+TElORVRZUEUK CkBACkBACi1UTVBfTElORVRZUEUKK3BnLT5UTVBfTElORVRZUEUKCkBACkBACi1UTVBfQ09MQkFD SworcGctPlRNUF9DT0xCQUNLCgpAQApAQAotVE1QX0NPTEFYRVMKK3BnLT5UTVBfQ09MQVhFUwoK QEAKQEAKLVRNUF9DT0xDVVJWRQorcGctPlRNUF9DT0xDVVJWRQoKQEAKZXhwcmVzc2lvbiBhLGIs YyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscjsKQEAKLSBhcGxvdChhLCBiLCBjLCBkLCBl LCBmLCBnLCBoLCBpLCBqLCBrLCBsLCBtLCBuLCBvLCBwLCBxLCByKQorIGFwbG90KHBnLCBtZW51 LCBhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrLCBsLCBtLCBuLCBvLCBwLCBxLCByKQoK QEAKZXhwcmVzc2lvbiBhLGIsYyxkLGUsZixnLGgsaSxqLGs7CkBACi0gcGxvdGNvbihhLCBiLCBj LCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrKQorIHBsb3Rjb24ocGcsIG1lbnUsIGEsIGIsIGMsIGQs IGUsIGYsIGcsIGgsIGksIGosIGspCgpAQApleHByZXNzaW9uIGEsYixjLGQ7CkBACi0gcGxvdHh5 ZShhLCBiLCBjLCBkKQorIHBsb3R4eWUocGcsIG1lbnUsIGEsIGIsIGMsIGQpCgpAQApleHByZXNz aW9uIGEsIGIsIGMsIGQsIGUsIGY7CkBACi0gbXlfY3BnZW52KGEsIGIsIGMsIGQsIGUsIGYpCisg bXlfY3BnZW52KHBnLCBtZW51LCBhLCBiLCBjLCBkLCBlLCBmKQoKQEAKZXhwcmVzc2lvbiBhLCBi LCBjOwpAQAotIGdldF9kc3RyaW5nKGEsIGIsIGMpCisgZ2V0X2RzdHJpbmcobWVudSwgYSwgYiwg YykKCkBACmV4cHJlc3Npb24gYSxiLGMsZDsKQEAKLSBsaXN0X21lbnVzKGEsIGIsIGMsIGQpCisg bGlzdF9tZW51cyhtZW51LCBhLCBiLCBjLCBkKQoKQEAKQEAKLSBwb3Bjb25maWcoKQorIHBvcGNv bmZpZyhwZykKCkBACkBACi0gcHVzaGNvbmZpZygpCisgcHVzaGNvbmZpZyhwZykKCkBACmV4cHJl c3Npb24gYTsKQEAKLSBwdXRfY29tbWFuZChhKQorIHB1dF9jb21tYW5kKG1lbnUsIGEpCgpAQApA QAotIGxvYWRfZm9udHMoKQorIGxvYWRfZm9udHMocGcsIG1lbnUpCgpAQApAQAotIHNldF9kZWZh dWx0KCkKKyBzZXRfZGVmYXVsdChwZykKCkBACkBACi0gc2V0X2NvbG9yKCkKKyBzZXRfY29sb3Io cGcsIG1lbnUpCgpAQApAQAotIHNldF9sYXlvdXQoKQorIHNldF9sYXlvdXQocGcsIG1lbnUpCgpA QApAQAotIGNsZWFyX2NvbW1hbmQoKQorIGNsZWFyX2NvbW1hbmQobWVudSkKCkBACkBACi0gc2V0 X3RleHQoKQorIHNldF90ZXh0KHBnLCBtZW51KQoKQEAKQEAKLSBnZXRfcGxvdF9pbml0X25hbWUo KQorIGdldF9wbG90X2luaXRfbmFtZShwZykKCkBACkBACi0gbGlzdF9wYXIoKQorIGxpc3RfcGFy KHBnLCBtZW51KQoKQEAKQEAKLSBydW5fbWFjcm8oKQorIHJ1bl9tYWNybyhtZW51KQoKQEAKQEAK LSB3cml0ZV9wbG90bWFjKCkKKyB3cml0ZV9wbG90bWFjKHBnLCBtZW51KQoKQEAKQEAKLSBkcmF3 aW5nKCkKKyBkcmF3aW5nKHBnLCBtZW51KQoKQEAKZXhwcmVzc2lvbiBhLGI7CkBACi0geWVzbm8o YSwgYikKKyB5ZXNubyhtZW51LCBhLCBiKQoKQEAKZXhwcmVzc2lvbiBhLGI7CkBACi0gZ2V0X3Rv a2VuKGEsIGIpCisgZ2V0X3Rva2VuKG1lbnUsIGEsIGIpCgpAQApleHByZXNzaW9uIGEsYjsKQEAK LSBnZXRfc3RyaW5nKGEsIGIpCisgZ2V0X3N0cmluZyhtZW51LCBhLCBiKQoKQEAKZXhwcmVzc2lv biBhOwpAQAotIHNldF9heGlzKGEpCisgc2V0X2F4aXMocGcsIG1lbnUsIGEpCgoKQEAKQEAKLXht aW4KK3BnLT54bWluCgpAQApAQAotZXB0cgorcGctPmVwdHIKCkBACkBACi14bWF4CitwZy0+eG1h eAoKQEAKQEAKLXltaW4KK3BnLT55bWluCgpAQApAQAoteW1heAorcGctPnltYXgKCkBACkBACi16 bWluCitwZy0+em1pbgoKQEAKQEAKLXptYXgKK3BnLT56bWF4CgoKQEAKQEAKLVgKK1hfQ1VSUkVO VAoKQEAKQEAKLVkKK1lfQ1VSUkVOVAoKQEAKQEAKLVoKK1pfQ1VSUkVOVAoKQEAKQEAKLVhfREVW SUNFCitwZy0+WF9ERVZJQ0UKCkBACkBACi1QTE9UX0NVUlNPUlBPSU5UUworcGctPlBMT1RfQ1VS U09SUE9JTlRTCgpAQApAQAotUExPVF9ST1dTCitwZy0+UExPVF9ST1dTCgpAQApAQAotUExPVF9D VVJTT1JOUE9JTlRTCitwZy0+UExPVF9DVVJTT1JOUE9JTlRTCgpAQApAQAotUFNfREVWSUNFCitw Zy0+UFNfREVWSUNFCgpAQApAQAotcHNmaWxuYW0KK3BnLT5wc2ZpbG5hbQoKQEAKQEAKLXhwdHIK K3BnLT54cHRyCgpAQApAQAoteXB0cgorcGctPnlwdHIKCkBACkBACi1IX1kKK3BnLT5IX1kKCkBA CkBACi1OUExPVFMKK3BnLT5OUExPVFMKCkBACkBACi1BWElTCitwZy0+QVhJUwoKQEAKQEAKLURF Rl9JTklOQU1FCitwZy0+REVGX0lOSU5BTUUKCkBACkBACi1DT0xURVhUCitwZy0+Q09MVEVYVAoK QEAKQEAKLU5YU0tJUAorcGctPk5YU0tJUAoKQEAKQEAKLU5ZU0tJUAorcGctPk5ZU0tJUAoKQEAK QEAKLVhMQUJFTAorcGctPlhMQUJFTAoKQEAKQEAKLVhMQUJTVFJJTkcKK3BnLT5YTEFCU1RSSU5H CgpAQApAQAotWExBQlBPSU5URVIKK3BnLT5YTEFCUE9JTlRFUgoKQEAKQEAKLVlMQUJFTAorcGct PllMQUJFTAoKQEAKQEAKLVlMQUJTVFJJTkcKK3BnLT5YTEFCU1RSSU5HCgpAQApAQAotWUxBQlBP SU5URVIKK3BnLT5ZTEFCUE9JTlRFUgoKQEAKQEAKLVhMT1dFUlNDCitwZy0+WExPV0VSU0MKCkBA CkBACi1YVVBQRVJTQworcGctPlhVUFBFUlNDCgpAQApAQAotWUxPV0VSU0MKK3BnLT5ZTE9XRVJT QwoKQEAKQEAKLVlVUFBFUlNDCitwZy0+WVVQUEVSU0MKCkBACkBACi1aTE9XRVJTQworcGctPlpM T1dFUlNDCgpAQApAQAotWlVQUEVSU0MKK3BnLT5aVVBQRVJTQwoKQEAKQEAKLVBMT1RfREVWCitw Zy0+UExPVF9ERVYKCkBACkBACi1BVVRPWAorcGctPkFVVE9YCgpAQApAQAotQVVUT1kKK3BnLT5B VVRPWQoKQEAKQEAKLUFVVE9aCitwZy0+QVVUT1oKCkBACkBACi1YTE9HU0MKK3BnLT5YTE9HU0MK CkBACkBACi1ZTE9HU0MKK3BnLT5ZTE9HU0MKCkBACkBACi1YVElDSworcGctPlhUSUNLCgpAQApA QAotWFNVQlRJQ0sKK3BnLT5YU1VCVElDSwoKCkBACkBACi1ZVElDSworcGctPllUSUNLCgpAQApA QAotWVNVQlRJQ0sKK3BnLT5ZU1VCVElDSwoKQEAKQEAKLVpUSUNLCitwZy0+WlRJQ0sKCkBACkBA Ci1aU1VCVElDSworcGctPlpTVUJUSUNLCgpAQApAQAotWFRJVExFCitwZy0+WFRJVExFCgpAQApA QAotWVRJVExFCitwZy0+WVRJVExFCgpAQApAQAotWlRJVExFCitwZy0+WlRJVExFCgpAQApAQAot UFRJVExFCitwZy0+UFRJVExFCgpAQApAQAotTkZPTlRTCitwZy0+TkZPTlRTCgpAQApAQAotRk9O VE5BTUUKK3BnLT5GT05UTkFNRQoKQEAKQEAKLURFRkZPTlQKK3BnLT5ERUZGT05UCgpAQApAQAot Rk9OVEZJTEwKK3BnLT5GT05URklMTAoKQEAKQEAKLUNVUlZFU1RZTEUKK3BnLT5DVVJWRVNUWUxF CgpAQApAQAotTElORVRISUNLTkVTUworcGctPkxJTkVUSElDS05FU1MKCkBACkBACi1IX0hFSUdI VAorcGctPkhfSEVJR0hUCgpAQApAQAotQVhOQU1TSVpFCitwZy0+QVhOQU1TSVpFCgpAQApAQAot QVhOVU1TSVpFCitwZy0+QVhOVU1TSVpFCgpAQApAQAotVElUTEVTSVpFCitwZy0+VElUTEVTSVpF CgpAQApAQAotVEVYVFNJWkUKK3BnLT5URVhUU0laRQoKQEAKQEAKLVhCT1gKK3BnLT5YQk9YCgpA QApAQAotWUJPWAorcGctPllCT1gKCkBACkBACi1aQk9YCitwZy0+WkJPWAoKQEAKQEAKLVhWSUVX CitwZy0+WFZJRVcKCkBACkBACi1ZVklFVworcGctPllWSUVXCgpAQApAQAotWlZJRVcKK3BnLT5a VklFVwoKQEAKQEAKLVBBR0VST1QKK3BnLT5QQUdFUk9UCgpAQApAQAotUExPVFdJRFRICitwZy0+ UExPVFdJRFRICgpAQApAQAotUExPVEhFSUdIVAorcGctPlBMT1RIRUlHSFQKCkBACkBACi1YTEVO R1RICitwZy0+WExFTkdUSAoKQEAKQEAKLVlMRU5HVEgKK3BnLT5ZTEVOR1RICgpAQApAQAotQVhF U1BBUgorcGctPkFYRVNQQVIKCkBACkBACi1HUklEUEFSCitwZy0+R1JJRFBBUgoKQEAKQEAKLVNV QkdSSURQQVIKK3BnLT5TVUJHUklEUEFSCgpAQApAQAotRlJBTUVQQVIKK3BnLT5TVUJHUklEUEFS CgpAQApAQAotIFRNUF9DT0xURVhUCisgcGctPlRNUF9DT0xURVhUCkBACkBACi0gVE1QX0JBQ0tf Q09MT1IKKyBwZy0+VE1QX0JBQ0tfQ09MT1IKQEAKQEAKLSBUTVBfSF9ZCisgcGctPlRNUF9IX1kK QEAKQEAKLSBUTVBfQ1VSVkVfQ09MT1IKKyBwZy0+VE1QX0NVUlZFX0NPTE9SCkBACkBACi0gVE1Q X0FYX0NPTE9SCisgcGctPlRNUF9BWF9DT0xPUgpAQApAQAotIFRNUF9URVhUX0NPTE9SCisgcGct PlRNUF9URVhUX0NPTE9SCkBACkBACi0gVE1QX0hfSEVJR0hUCisgcGctPlRNUF9IX0hFSUdIVApA QApAQAotIFRNUF9IX09GRlNFVAorIHBnLT5UTVBfSF9PRkZTRVQKQEAKQEAKLSBUTVBfUExPVFdJ RFRICisgcGctPlRNUF9QTE9UV0lEVEgKQEAKQEAKLSBUTVBfUExPVEhFSUdIVAorIHBnLT5UTVBf UExPVEhFSUdIVApAQApAQAotIFRNUF9YTEVOR1RICisgcGctPlRNUF9YTEVOR1RICkBACkBACi0g VE1QX1lMRU5HVEgKKyBwZy0+VE1QX1lMRU5HVEgKQEAKQEAKLSBUTVBfQVhFU1BBUgorIHBnLT5U TVBfQVhFU1BBUgpAQApAQAotIFRNUF9BWEVTQ0hBUgorIHBnLT5UTVBfQVhFU0NIQVIKQEAKQEAK LSBUTVBfRlJBTUVQQVIKKyBwZy0+VE1QX0ZSQU1FUEFSCkBACkBACi0gVE1QX0dSSURQQVIKKyBw Zy0+VE1QX0dSSURQQVIKQEAKQEAKLSBUTVBfU1VCR1JJRFBBUgorIHBnLT5UTVBfU1VCR1JJRFBB UgpAQApAQAotIFRNUF9QQUdFUk9UCisgcGctPlRNUF9QQUdFUk9UCkBACkBACi0gVE1QX1hCT1gK KyBwZy0+VE1QX1hCT1gKQEAKQEAKLSBUTVBfWUJPWAorIHBnLT5UTVBfWUJPWApAQApAQAotIFRN UF9aQk9YCisgcGctPlRNUF9aQk9YCkBACkBACi0gVE1QX1hWSUVXCisgcGctPlRNUF9YVklFVwpA QApAQAotIFRNUF9ZVklFVworIHBnLT5UTVBfWVZJRVcKQEAKQEAKLSBUTVBfWlZJRVcKKyBwZy0+ VE1QX1pWSUVXCkBACkBACi0gVE1QX05YU0tJUAorIHBnLT5UTVBfTlhTS0lQCkBACkBACi0gVE1Q X05ZU0tJUAorIHBnLT5UTVBfTllTS0lQCkBACkBACi0gVE1QX0FYTkFNU0laRQorIHBnLT5UTVBf QVhOQU1TSVpFCkBACkBACi0gVE1QX0FYTlVNU0laRQorIHBnLT5UTVBfQVhOVU1TSVpFCkBACkBA Ci0gVE1QX1RJVExFU0laRQorIHBnLT5UTVBfVElUTEVTSVpFCkBACkBACi0gVE1QX1RFWFRTSVpF CisgcGctPlRNUF9URVhUU0laRQpAQApAQAotIFRNUF9YX1RFWFQKKyBwZy0+VE1QX1hfVEVYVApA QApAQAotIFRNUF9ZX1RFWFQKKyBwZy0+VE1QX1lfVEVYVApAQApAQAotIFRNUF9NVUxUSVBMT1QK KyBwZy0+VE1QX01VTFRJUExPVApAQApAQAotIFRNUF9QTE9UX1JPV1MKKyBwZy0+VE1QX1BMT1Rf Uk9XUwpAQApAQAotIFRNUF9QTE9UX0NPTFVNTlMKKyBwZy0+VE1QX1BMT1RfQ09MVU1OUwpAQApA QAotIFRNUF9GSVJTVF9NVUxUSQorIHBnLT5UTVBfRklSU1RfTVVMVEkKQEAKQEAKLSBUTVBfWFNI SUZUVAorIHBnLT5UTVBfWFNISUZUVApAQApAQAotIFRNUF9ZU0hJRlRUCisgcGctPlRNUF9ZU0hJ RlRUCgpAQApAQAotIENVUlZFX0NPTE9SCisgcGctPkNVUlZFX0NPTE9SCkBACkBACi0gSF9PRkZT RVQKKyBwZy0+SF9PRkZTRVQKQEAKQEAKLSBBWEVTQ0hBUgorIHBnLT5BWEVTQ0hBUgpAQApAQAot IFhfVEVYVAorIHBnLT5YX1RFWFQKQEAKQEAKLSBZX1RFWFQKKyBwZy0+WV9URVhUCkBACkBACi0g TVVMVElQTE9UCisgcGctPk1VTFRJUExPVApAQApAQAotIEZJUlNUX01VTFRJCisgcGctPkZJUlNU X01VTFRJCkBACkBACi0gWFNISUZUVAorIHBnLT5YU0hJRlRUCkBACkBACi0gWVNISUZUVAorIHBn LT5ZU0hJRlRUCkBACkBACi0gVE1QX3BnCisgcGcK --=_0f8fcd8161d529a9243cf4fab37d5a05--