Return-Path: <awaresystems.be+caf_=filtered=awaresystems.be@gmail.com>
Delivered-To: filtered@awaresystems.be
Received: from mx-l.one.com (mx-l.one.com [91.198.169.59])
	by mail6.local (Postfix) with ESMTP id 16BAD3001C211C
	for <filtered@awaresystems.be>; Mon,  9 Jun 2014 10:02:51 +0000 (UTC)
X-Virus-Scanned: by one.com
Received-SPF: pass (mx-l: domain of awaresystems.be+caf_=filtered=awaresystems.be@gmail.com designates 209.85.215.48 as permitted sender)
X-Greylist: whitelisted by SQLgrey-1.8.0-rc2
Received: from mail-la0-f48.google.com (mail-la0-f48.google.com [209.85.215.48])
	by mx-l.one.com (Postfix) with ESMTP id C46DF22946A2B
	for <filtered@awaresystems.be>; Mon,  9 Jun 2014 10:02:50 +0000 (UTC)
Received: by mail-la0-f48.google.com with SMTP id mc6so2935521lab.35
        for <filtered@awaresystems.be>; Mon, 09 Jun 2014 03:02:50 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20130820;
        h=x-original-authentication-results:delivered-to:delivered-to:from:to
         :thread-topic:thread-index:date:message-id:references:in-reply-to
         :accept-language:content-language:content-id:mime-version:cc:subject
         :precedence:list-id:list-unsubscribe:list-archive:list-post
         :list-help:list-subscribe:content-type:content-transfer-encoding
         :sender:errors-to;
        bh=yz5F2Kimu8VCq3gqZnQCl5m0eGOD/Jhg7paTMlAEXz0=;
        b=FnxPXnZBI2d9ILYDXqVnBBfLMxB4tP3i8WqQ+HGY2sM4FJ/NSqyUGHGAXd4yqhc7Y8
         7/CYeLXpBMRh6Rjdan1TwumXXV201LcR9YG7oPpU/ywJKWi8RjAqCPw0qt3qsebvamAt
         /jfUdLc7QbOHkS7TVem6VS99Cyjl1PAAjM1Q4x4sgwmLAHxm2LIRSwgqDkOOEtoE4vN6
         K6CIKXtBJl7jvoILYaCoinQrFVLQSwjwzwakiVjHPbJ57Xh/Ki0yHOg7E/DSm/jS69o+
         npV75fUgdCz1tBjFD8PAE6mFMNEfm1j7Sx3eZ87enT3GH7UDvvqMCtO1xyrJjQbpm4Ss
         tR9Q==
X-Original-Authentication-Results: mx.google.com;       spf=neutral (google.com: tiff-bounces@lists.maptools.org does not designate permitted sender hosts) smtp.mail=tiff-bounces@lists.maptools.org
X-Received: by 10.152.197.69 with SMTP id is5mr17182636lac.10.1402308170297;
        Mon, 09 Jun 2014 03:02:50 -0700 (PDT)
X-Forwarded-To: filtered@awaresystems.be
X-Forwarded-For: awaresystems.be@gmail.com filtered@awaresystems.be
Delivered-To: awaresystems.be@gmail.com
Received: by 10.114.18.137 with SMTP id w9csp13460ldd;
        Mon, 9 Jun 2014 03:02:49 -0700 (PDT)
X-Received: by 10.112.51.37 with SMTP id h5mr16116291lbo.24.1402308168416;
        Mon, 09 Jun 2014 03:02:48 -0700 (PDT)
Authentication-Results: mx.google.com;
       spf=neutral (google.com: tiff-bounces@lists.maptools.org does not designate permitted sender hosts) smtp.mail=tiff-bounces@lists.maptools.org
Received-SPF: none (google.com: tiff-bounces@lists.maptools.org does not designate permitted sender hosts) client-ip=195.47.247.73;
Received: by 10.152.104.165 with POP3 id gf5mf2562800lab.9;
        Mon, 09 Jun 2014 03:02:48 -0700 (PDT)
X-Gmail-Fetch-Info: info@awaresystems.be 1 pop.awaresystems.be 110 info@awaresystems.be
Delivered-To: info@awaresystems.be
Received: from mx02.one.com (mx02.one.com [195.47.247.73])
	by mail6.local (Postfix) with ESMTP id 91918300195A71
	for <info@awaresystems.be>; Mon,  9 Jun 2014 10:01:24 +0000 (UTC)
X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0-rc2
Received: from lists.maptools.org (ks365428.kimsufi.com [94.23.4.142])
	by mx02.one.com (Postfix) with ESMTP id 394A613B272B
	for <info@awaresystems.be>; Mon,  9 Jun 2014 10:01:24 +0000 (UTC)
Received: from [10.1.0.241] (localhost.localdomain [127.0.0.1])
	by lists.maptools.org (Postfix) with ESMTP id 7B19135C048;
	Mon,  9 Jun 2014 05:00:13 -0500 (EST)
Received: from emea01-db3-obe.outbound.protection.outlook.com
	(mail-db3lp0077.outbound.protection.outlook.com [213.199.154.77])
	by lists.maptools.org (Postfix) with ESMTPS id 88AC035C048
	for <tiff@lists.maptools.org>; Mon,  9 Jun 2014 04:59:49 -0500 (EST)
Received: from DB3PR06MB092.eurprd06.prod.outlook.com (10.141.1.27) by
	DB3PR06MB092.eurprd06.prod.outlook.com (10.141.1.27) with Microsoft
	SMTP Server (TLS) id 15.0.954.9; Mon, 9 Jun 2014 09:59:49 +0000
Received: from DB3PR06MB092.eurprd06.prod.outlook.com ([169.254.4.25]) by
	DB3PR06MB092.eurprd06.prod.outlook.com ([169.254.4.25]) with mapi id
	15.00.0954.000; Mon, 9 Jun 2014 09:59:49 +0000
From: Stephen Morris <s-morris@n-eos.com>
To: Paul Heckbert <ph@cs.cmu.edu>
Thread-Topic: [Tiff] What's wrong with my code for adding custom tags to a file
Thread-Index: AQHPgLG4n3B3tVLDTkqfNRJXO5POWptiqg4AgAFVbwCAAS76AIACUYqAgAEic4A=
Date: Mon, 9 Jun 2014 09:59:48 +0000
Message-ID: <CFBB41F5.1A652%s-morris@n-eos.com>
References: <CFB6138E.1A4BC%stephen@morris.net>
	<413F4632-74AC-4FB4-AEA7-D1A82DA31FB7@cs.cmu.edu>
	<CFB75D41.1A522%s-morris@n-eos.com>
	<18E06A74-F857-4627-9DF8-1872721A92EC@cs.cmu.edu>
	<1DAE1065-1AC7-48C3-95FA-4C371573E26F@cs.cmu.edu>
In-Reply-To: <1DAE1065-1AC7-48C3-95FA-4C371573E26F@cs.cmu.edu>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [89.168.13.228]
x-microsoft-antispam: BL:0; ACTION:Default; RISK:Low; SCL:0; SPMLVL:NotSpam;
	PCL:0; RULEID:
x-forefront-prvs: 02379661A3
x-forefront-antispam-report: SFV:NSPM;
	SFS:(6009001)(428001)(189002)(199002)(24454002)(45984002)(377454003)(243025005)(479174003)(83322001)(2171001)(19580395003)(15975445006)(15202345003)(85852003)(83072002)(66066001)(21056001)(2656002)(36756003)(19580405001)(19273905006)(19300405004)(81542001)(46102001)(81342001)(87936001)(101416001)(77982001)(31966008)(74662001)(79102001)(54356999)(20776003)(64706001)(76176999)(4396001)(92566001)(86362001)(93886002)(92726001)(99396002)(50986999)(562404015)(563064011);
	DIR:OUT; SFP:; SCL:1; SRVR:DB3PR06MB092;
	H:DB3PR06MB092.eurprd06.prod.outlook.com; FPR:; MLV:sfv;
	PTR:InfoNoRecords; MX:1; A:1; LANG:en; 
received-spf: None (: n-eos.com does not designate permitted sender hosts)
authentication-results: spf=none (sender IP is )
	smtp.mailfrom=s-morris@n-eos.com; 
Content-ID: <09B99FFF28B2774FAB998113004D5562@eurprd06.prod.outlook.com>
MIME-Version: 1.0
X-OriginatorOrg: n-eos.com
Cc: "tiff@lists.maptools.org" <tiff@lists.maptools.org>
Subject: Re: [Tiff] What's wrong with my code for adding custom tags to a
	file
X-BeenThere: tiff@lists.maptools.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: TIFF and libtiff discussion <tiff.lists.maptools.org>
List-Unsubscribe: <http://lists.maptools.org/mailman/listinfo/tiff>,
	<mailto:tiff-request@lists.maptools.org?subject=unsubscribe>
List-Archive: <http://lists.maptools.org/mailman/private/tiff>
List-Post: <mailto:tiff@lists.maptools.org>
List-Help: <mailto:tiff-request@lists.maptools.org?subject=help>
List-Subscribe: <http://lists.maptools.org/mailman/listinfo/tiff>,
	<mailto:tiff-request@lists.maptools.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: tiff-bounces@lists.maptools.org
Errors-To: tiff-bounces@lists.maptools.org

VGhhbmsgeW91IFBhdWwuDQoNClRoaXMgaXMgd29ya2luZyBub3c7IHlvdXIgc3VnZ2VzdGlvbiBv
ZiBjaGFuZ2luZyB0aGUgZm9ybWF0IG9mIHRoZQ0KVElGRkZpZWxkSW5mbyBkZWNsYXJhdGlvbnMg
d2FzIHRoZSBrZXkgdG8gaXQuIFRoYW5rIHlvdSB2ZXJ5IG11Y2guDQoNCkJlc2lkZXMgdGhhdCBJ
IGRpZCwgaG93ZXZlciwgbmVlZCB0byByZXZlcnQgdG8gbXkgb3JpZ2luYWwgdmVyc2lvbiBvZiB0
aGUNCmNvZGUgYW5kIGNhbGwgVElGRk1lcmdlRmllbGRJbmZvIGRpcmVjdGx5IHJhdGhlciB0aGFu
IHZpYQ0KVElGRlNldFRhZ0V4dGVuZGVyLiBJZiBJIGRpZCB0aGUgbGF0dGVyLCB0aGVuIHRoZSBU
SUZGTWVyZ2VGaWVsZEluZm8gbGluZQ0Kd2FzIG5ldmVyIGNhbGxlZC4gVGhpcyBpcyB3aGVuIHdy
aXRpbmcgZmlsZXMsIHJlbWVtYmVyOiB0aGUgYmVoYXZpb3VyIG1heQ0KYmUgZGlmZmVyZW50IHdo
ZW4gcmVhZGluZyBmaWxlcywgd2hpY2ggaXMgdGhlIG5leHQgdGhpbmcgSeKAmWxsIGJlIG1vdmlu
ZyBvbg0KdG/igKYNCg0KQWxzbywgcmVnYXJkaW5nIHZpZXdpbmcgdGhlIGdlbmVyYXRlZCBUSUZG
IGZpbGUgdG8gdmVyaWZ5IHRoZSBwcmVzZW5jZSBvZg0KdGFncywgSSB1c2VkIEFzVGlmZlRhZ1Zp
ZXdlcg0KKGh0dHA6Ly93d3cuYXdhcmVzeXN0ZW1zLmJlL2ltYWdpbmcvdGlmZi9hc3RpZmZ0YWd2
aWV3ZXIuaHRtbCkgd2hpY2ggd29ya3MNCnF1aXRlIG5pY2VseSwgdGhvdWdoIGl0IHdvdWxkIG9u
bHkgb3V0cHV0IHRoZSBoZXggdmFsdWVzIGZvciBteQ0KZmxvYXRpbmctcG9pbnQgZmllbGRzIHNv
IEkgaGFkIHRvIHVzZSB0aGUgdXNlZnVsIElFRUUgNzU0IGNvbnZlcnRlciBhdA0KaHR0cDovL3d3
dy5oLXNjaG1pZHQubmV0L0Zsb2F0Q29udmVydGVyL0lFRUU3NTQuaHRtbCB0byB2ZXJpZnkgdGhl
bS4NCg0KDQogDQpJIG5vdyBuZWVkIHRvIG1vdmUgb24gdG8gcmVhZGluZyBteSBjdXN0b20gdGFn
cyBiYWNrIGluIGFnYWluOyBvbmNlIEnigJl2ZQ0KZG9uZSB0aGF0IHRoZW4gSSB3aWxsIHBvc3Qg
bXkgY29tcGxldGUgY29kZSB0byB0aGlzIGxpc3QgZm9yIG90aGVyDQpwZW9wbGXigJlzIHJlZmVy
ZW5jZS4NCg0KDQoNCkZyb206ICBQYXVsIEhlY2tiZXJ0IDxwaEBjcy5jbXUuZWR1Pg0KRGF0ZTog
IFN1bmRheSwgOCBKdW5lIDIwMTQgMTg6NDANClRvOiAgU3RlcGhlbiBNb3JyaXMgPHMtbW9ycmlz
QG4tZW9zLmNvbT4NCkNjOiAgUGF1bCBIZWNrYmVydCA8cGhAY3MuY211LmVkdT4sICJ0aWZmQGxp
c3RzLm1hcHRvb2xzLm9yZyINCjx0aWZmQGxpc3RzLm1hcHRvb2xzLm9yZz4NClN1YmplY3Q6ICBS
ZTogW1RpZmZdIFdoYXQncyB3cm9uZyB3aXRoIG15IGNvZGUgZm9yIGFkZGluZyBjdXN0b20gdGFn
cyB0byBhDQpmaWxlDQoNCg0KU2luY2UgdGhlIGxpbGJ0aWZmIGRvY3VtZW50YXRpb24gaXMgd2Vh
aywgSSBmb3VuZCBpdCBuZWNlc3NhcnkgdG8gcmVhZCB0aGUNCnNvdXJjZSBjb2RlIHRvIGZpZ3Vy
ZSBhIGxvdCBvZiB0aGlzIG91dC4gU2VlIHRoZSBjb21tZW50IGluIG15IGNvZGUgYWJvdXQNCnBh
c3NfY291bnQuIEFuZCBpbiBteSBjb2RlLCB0aGUgZGlmZmVyZW5jZSBpbiBob3cgR2V0RmllbGQg
aXMgY2FsbGVkDQpiZXR3ZWVuIHRoZSB0YWcgd2l0aCBwYXNzX2NvdW50PTEgYW5kIHRoZQ0KIG9u
ZSB3aGVyZSBwYXNzX2NvdW50PTAuDQoNCiBJIHRoaW5rIEkgc2VlIHlvdXIgcHJvYmxlbS4gWW91
IGhhdmUNCg0KDQpzdGF0aWMgY29uc3QgVElGRkZpZWxkSW5mbyB4dGlmZkZpZWxkSW5mb1tdID0g
ew0KICAgICAgIHsgVElGRlRBR19JTkNJREVOVFBPV0VSLCAgLTEsIC0xLCBUSUZGX0xPTkcsICBG
SUVMRF9DVVNUT00sIDAsIDEsDQoNCg0KDQoNCmFuZCBsb29raW5nIGF0IGxpYnRpZmbigJlzIGxp
YnRpZmYvdGlmZmlvLmgsIHdlIHNlZSB0aGF0IHRoZXNlIHN0cnVjdHVyZQ0KZWxlbWVudHMgYXJl
DQoNCiAgdHRhZ190ICBmaWVsZF90YWc7DQovKiBmaWVsZCdzIHRhZyAqLw0KICBzaG9ydCBmaWVs
ZF9yZWFkY291bnQ7DQovKiByZWFkIGNvdW50L1RJRkZfVkFSSUFCTEUvVElGRl9TUFAgKi8NCiAg
c2hvcnQgZmllbGRfd3JpdGVjb3VudDsNCi8qIHdyaXRlIGNvdW50L1RJRkZfVkFSSUFCTEUgKi8N
CiAgVElGRkRhdGFUeXBlIGZpZWxkX3R5cGU7ICAvKiB0eXBlIG9mIGFzc29jaWF0ZWQgZGF0YSAq
Lw0KICAgICAgICB1bnNpZ25lZHNob3J0IGZpZWxkX2JpdDsNCi8qIGJpdCBpbiBmaWVsZHNzZXQg
Yml0IHZlY3RvciAqLw0KICB1bnNpZ25lZGNoYXIgZmllbGRfb2t0b2NoYW5nZTsNCi8qIGlmIHRy
dWUsIGNhbiBjaGFuZ2Ugd2hpbGUgd3JpdGluZyAqLw0KICB1bnNpZ25lZGNoYXIgZmllbGRfcGFz
c2NvdW50Ow0KLyogaWYgdHJ1ZSwgcGFzcyBkaXIgY291bnQgb24gc2V0ICovDQogIA0KY2hhciAg
KmZpZWxkX25hbWU7ICAgIC8qIEFTQ0lJIG5hbWUgKi8NCg0KQSByZWFkY291bnQgb3Igd3JpdGVj
b3VudCBvZiAtMSBtZWFucyBUSUZGX1ZBUklBQkxFIChhIHZhcmlhYmxlIG51bWJlciBvZg0KdmFs
dWVzKSBidXQgaXQgYXBwZWFycyB0aGF0IHlvdSBoYXZlIGEgY29uc3RhbnQgbnVtYmVyICgxKSBv
ZiB2YWx1ZXMgZm9yDQpMYXNlckluY2lkZW50UG93ZXIsIG5vdCBhIHZhcmlhYmxlIG51bWJlci4g
QW5kIHNpbmNlIHRoZXJlIGlzIGEgY29uc3RhbnQNCm51bWJlciBvZiB0aGVtLCBpdCB3aWxsIGJl
IHVubmVjZXNzYXJ5DQogdG8gcGFzcyBhIGNvdW50LCBzbyBwYXNzY291bnQgc2hvdWxkIGJlIDAs
IG5vdCAxLg0KDQpTbyB0cnkNCg0KDQpzdGF0aWMgY29uc3QgVElGRkZpZWxkSW5mbyB4dGlmZkZp
ZWxkSW5mb1tdID0gew0KICAgICAgIHsgVElGRlRBR19JTkNJREVOVFBPV0VSLCAgMSwgMSwgVElG
Rl9MT05HLCAgRklFTERfQ1VTVE9NLCAwLCAwLA0KDQoNCg0KT24gMjAxNC82LzcsIGF0IDI6MTUg
QU0sIFBhdWwgSGVja2JlcnQgPHBoQGNzLmNtdS5lZHU+IHdyb3RlOg0KDQoNCllvdSBtaWdodCB3
YW50IHRvIHB1dCBhc3NlcnRzIChvciB0ZXN0cyBvZiBzb21lIGtpbmQpIG9uIHRoZSByZXR1cm4g
dmFsdWUNCm9mIGFsbCB5b3VyIGxpYnRpZmYgY2FsbHMsIHRvIGhlbHAgeW91IGRldGVjdCB3aGVy
ZSB0aGluZ3MgYXJlIGdvaW5nIHdyb25nLg0KDQpGb3IgZXhhbWluaW5nIFRJRkYgYW5kIEVYSUYg
dGFncyBpbiBmaWxlcywgSSByZWNvbW1lbmQgZXhpZnRvb2wsIGluDQpwYXJ0aWN1bGFyIOKAnGV4
aWZ0b29sIC1odG1sZHVtcOKAnS4gTWF5YmUgeW91IGFscmVhZHkga25vdyBhYm91dCBpdC4gU2Vl
DQpodHRwOi8vd3d3LnNuby5waHkucXVlZW5zdS5jYS9+cGhpbC9leGlmdG9vbA0KT24gMjAxNC82
LzYsIGF0IDc6MTEgQU0sIFN0ZXBoZW4gTW9ycmlzIDxzLW1vcnJpc0BuLWVvcy5jb20+IHdyb3Rl
Og0KDQoNClRoYW5rIHlvdSBQYXVsLiBJIGluY29ycG9yYXRlZCB0aGUgVGlmZlNldFRhZ0V4dGVu
ZGVyIGNhbGwgaW4gdGhlIHdheSB0aGF0DQp5b3Ugc2hvd2VkICh3aGljaCBoZWxwZWQgbWUgYSBs
b3QgdG8gbWFrZSBzZW5zZSBvZiB0aGUgZG9jdW1lbnRhdGlvbikgdG8NCnByb2R1Y2UgdGhlIGNv
ZGUgc2hvd24gYmVsb3cuIFN1cmUgZW5vdWdoLCB0aGUgYWNjZXNzIHZpb2xhdGlvbiBoYXMgZ29u
ZQ0KYXdheSBidXQgSSBzdGlsbCBkb27CuXQgZ2V0IHRoZSBjdXN0b20gdGFncyBpbiB0aGUgZmls
ZS4gQXMgdGhlIHJvdXRpbmUNCnJ1bnMsIEkgZ2V0IGVycm9yIG1lc3NhZ2VzIGluIG15IGNvbnNv
bGUgdG8gdGhlIGVmZmVjdCBvZjoNCg0KVElGRlNldEZpZWxkOiBUZXN0SW1hZ2UudGlmOiBVbmtu
b3duIHRhZyA2NTAwMC4NClRJRkZTZXRGaWVsZDogVGVzdEltYWdlLnRpZjogVW5rbm93biB0YWcg
NjUwMDEuDQpUSUZGU2V0RmllbGQ6IFRlc3RJbWFnZS50aWY6IFVua25vd24gdGFnIDY1MDAyLg0K
VElGRlNldEZpZWxkOiBUZXN0SW1hZ2UudGlmOiBVbmtub3duIHRhZyA2NTAwMy4NClRJRkZTZXRG
aWVsZDogVGVzdEltYWdlLnRpZjogVW5rbm93biB0YWcgNjUwMDQuDQpUSUZGU2V0RmllbGQ6IFRl
c3RJbWFnZS50aWY6IFVua25vd24gdGFnIDY1MDA1Lg0KDQrFoHNvIHRoZXJlwrlzIG9idmlvdXNs
eSBzb21ldGhpbmcgdGhhdCBJwrltIHN0aWxsIG1pc3NpbmcuIEhlcmXCuXMgbXkgbmV3IGNvZGU6
DQoNCiNpbmNsdWRlICJzdGRhZnguaCINCiNpbmNsdWRlICJQR00uaCINCiNpbmNsdWRlICJ0aWZm
aW8uaCINCg0KLy8gVGhlcmUgYXJlIGEgbnVtYmVyIG9mIFRJRkYtcmVsYXRlZCBkZWZpbml0aW9u
cyB3ZSBuZWVkIHRvIG1ha2UgaW4gb3JkZXINCnRvIHN1cHBvcnQgdGhlIGN1c3RvbSB0YWdzDQov
LyB0aGF0IHdlIHdhbnQgdG8gaW5jbHVkZSBpbiBvdXIgZmlsZXMuIFRoZSBmb3JtIG9mIHRoZXNl
IGRlZmluaXRpb25zIGFuZA0Kc3Vicm91dGluZXMgY29tZXMgc3RyYWlnaHQNCi8vIG91dCBvZiB0
aGUgbGlidGlmZiBkb2N1bWVudGF0aW9uLCBhbmQgdGhlIHZhbHVlcyBvZiB0aGUgY3VzdG9tIHRh
Z3MNCnRoZW1zZWx2ZXMgY29tZSBmcm9tIHRoZQ0KLy8gcmFuZ2UgKDY1MDAwLTc1NTM1KSBkZWZp
bmVkIGluIHRoZSBUSUZGIHNwZWNpZmljYXRpb24gYXMgInJldXNhYmxlIiBhbmQNCnN1aXRhYmxl
IGZvciBwcml2YXRlIHVzZQ0KLy8gd2l0aGluIG9yZ2FuaXNhdGlvbnMuIFNlZQ0KaHR0cDovL3Bh
cnRuZXJzLmFkb2JlLmNvbS9wdWJsaWMvZGV2ZWxvcGVyL2VuL3RpZmYvVElGRjYucGRmDQojZGVm
aW5lIE4oYSkgKHNpemVvZihhKSAvIHNpemVvZiAoYVswXSkpDQojZGVmaW5lIFRJRkZUQUdfSU5D
SURFTlRQT1dFUiAgICAgNjUwMDANCiNkZWZpbmUgVElGRlRBR19SRUZMRUNURURQT1dFUiAgICA2
NTAwMQ0KI2RlZmluZSBUSUZGVEFHX1QxICAgICAgICAgICAgICAgIDY1MDAyDQojZGVmaW5lIFRJ
RkZUQUdfVDIgICAgICAgICAgICAgICAgNjUwMDMNCiNkZWZpbmUgVElGRlRBR19IVU1JRElUWSAg
ICAgICAgICA2NTAwNA0KI2RlZmluZSBUSUZGVEFHX0VYUE9TVVJFICAgICAgICAgIDY1MDA1DQoN
CnN0YXRpYyBjb25zdCBUSUZGRmllbGRJbmZvIHh0aWZmRmllbGRJbmZvW10gPSB7DQogICAgICAg
eyBUSUZGVEFHX0lOQ0lERU5UUE9XRVIsICAtMSwgLTEsIFRJRkZfTE9ORywgIEZJRUxEX0NVU1RP
TSwgMCwgMSwNCmNvbnN0X2Nhc3Q8Y2hhcio+KCJMYXNlckluY2lkZW50UG93ZXIiKSB9LA0KICAg
ICAgIHsgVElGRlRBR19SRUZMRUNURURQT1dFUiwgLTEsIC0xLCBUSUZGX0xPTkcsICBGSUVMRF9D
VVNUT00sIDAsIDEsDQpjb25zdF9jYXN0PGNoYXIqPigiTGFzZXJSZWZsZWN0ZWRQb3dlciIpIH0s
DQogICAgICAgeyBUSUZGVEFHX1QxLCAgICAgICAgICAgICAtMSwgLTEsIFRJRkZfRkxPQVQsIEZJ
RUxEX0NVU1RPTSwgMCwgMSwNCmNvbnN0X2Nhc3Q8Y2hhcio+KCJUZW1wZXJhdHVyZV8xIikgfSwN
CiAgICAgICB7IFRJRkZUQUdfVDIsICAgICAgICAgICAgIC0xLCAtMSwgVElGRl9GTE9BVCwgRklF
TERfQ1VTVE9NLCAwLCAxLA0KY29uc3RfY2FzdDxjaGFyKj4oIlRlbXBlcmF0dXJlXzIiKSB9LA0K
ICAgICAgIHsgVElGRlRBR19IVU1JRElUWSwgICAgICAgLTEsIC0xLCBUSUZGX0ZMT0FULCBGSUVM
RF9DVVNUT00sIDAsIDEsDQpjb25zdF9jYXN0PGNoYXIqPigiSHVtaWRpdHkiKSB9LA0KICAgICAg
IHsgVElGRlRBR19FWFBPU1VSRSwgICAgICAgLTEsIC0xLCBUSUZGX0ZMT0FULCBGSUVMRF9DVVNU
T00sIDAsIDEsDQpjb25zdF9jYXN0PGNoYXIqPigiRXhwb3N1cmVUaW1lKG1zKSIpIH0NCn07ICAv
Lw0KIFRoZSBjYXN0cyBhcmUgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlDQoNCi8vIHN0cmluZyBsaXRl
cmFscyBhcmUgaW5oZXJlbnRseSBjb25zdCwNCg0KLy8gYnV0IHRoZSBkZWZpbml0aW9uIG9mIFRJ
RkZGaWVsZEluZm8NCg0KLy8gcmVxdWlyZXMgYSBub24tY29uc3Qgc3RyaW5nIHBvaW50ZXIuDQoN
Ci8vIFRoZSBJbnRlbCBhbmQgTWljcm9zb2Z0IGNvbXBpbGVycw0KDQovLyB0b2xlcmF0ZSB0aGlz
LCBidXQgZ2NjIGRvZXNuJ3QuDQoNCnN0YXRpYyBUSUZGRXh0ZW5kUHJvYyBwYXJlbnRfZXh0ZW5k
ZXIgPSBOVUxMOyAgLy8gSW4gY2FzZSB3ZSB3YW50IGEgY2hhaW4NCm9mIGV4dGVuc2lvbnMNCg0K
c3RhdGljIHZvaWQgcmVnaXN0ZXJDdXN0b21USUZGVGFncyhUSUZGICp0aWYpDQp7DQogICAvKiBJ
bnN0YWxsIHRoZSBleHRlbmRlZCBUYWcgZmllbGQgaW5mbyAqLw0KICAgVElGRk1lcmdlRmllbGRJ
bmZvKHRpZiwgeHRpZmZGaWVsZEluZm8sIE4oeHRpZmZGaWVsZEluZm8pKTsNCg0KICAgaWYgKHBh
cmVudF9leHRlbmRlcikNCiAgICAgICAoKnBhcmVudF9leHRlbmRlcikodGlmKTsNCn0NCg0Kc3Rh
dGljIHZvaWQgYXVnbWVudF9saWJ0aWZmX3dpdGhfY3VzdG9tX3RhZ3MoKSB7DQogICBzdGF0aWMg
Ym9vbCBmaXJzdF90aW1lID0gdHJ1ZTsNCiAgIGlmICghZmlyc3RfdGltZSkgcmV0dXJuOw0KICAg
Zmlyc3RfdGltZSA9IGZhbHNlOw0KICAgcGFyZW50X2V4dGVuZGVyID0gVElGRlNldFRhZ0V4dGVu
ZGVyKHJlZ2lzdGVyQ3VzdG9tVElGRlRhZ3MpOw0KfQ0KDQp2b2lkIHNhdmVBc1RpZmYoaW50IG54
LCBpbnQgbnksIHVuc2lnbmVkIHNob3J0ICppbWFnZSwgY29uc3QgY2hhcioNCmZpbGVuYW1lLA0K
ICAgICAgICAgICAgICAgaW50IFBvd2VyMSwgaW50IFBvd2VyMiwgZmxvYXQgVDEsIGZsb2F0IFQy
LCBmbG9hdA0KSHVtaWRpdHksIGZsb2F0IEV4cG9zdXJlKQ0Kew0KICAgLy8gQ3JlYXRlIHRoZSBU
SUZGIGRpcmVjdG9yeSBvYmplY3Q6DQogICBUSUZGKiB0aWYgPSBUSUZGT3BlbihmaWxlbmFtZSwg
InciKTsNCg0KICAgLy8gUHJlcGFyZSBmb3Igd3JpdGluZyB0aGUgY3VzdG9tIHRhZ3M6DQogICBh
dWdtZW50X2xpYnRpZmZfd2l0aF9jdXN0b21fdGFncygpOw0KDQogICAvLyBTZXQgdGhlIHRhZ3M6
IGZpcnN0IHRoZSBzdGFuZGFyZCBvbmVzLi4uDQogICBUSUZGU2V0RmllbGQodGlmLCBUSUZGVEFH
X0lNQUdFV0lEVEgsIG54KTsNCiAgIFRJRkZTZXRGaWVsZCh0aWYsIFRJRkZUQUdfSU1BR0VMRU5H
VEgsIG55KTsNCiAgIFRJRkZTZXRGaWVsZCh0aWYsIFRJRkZUQUdfQklUU1BFUlNBTVBMRSwgMTYp
Ow0KICAgVElGRlNldEZpZWxkKHRpZiwgVElGRlRBR19DT01QUkVTU0lPTiwgQ09NUFJFU1NJT05f
REVGTEFURSk7DQogICBUSUZGU2V0RmllbGQodGlmLCBUSUZGVEFHX1pJUFFVQUxJVFksIDYpOyAv
LyBUYWtlcyBtYXhpbXVtIGFkdmFudGFnZQ0Kb2YgSW50ZWwgWkxJQiBlbmhhbmNlbWVudHMNCiAg
IFRJRkZTZXRGaWVsZCh0aWYsIFRJRkZUQUdfUEhPVE9NRVRSSUMsIFBIT1RPTUVUUklDX01JTklT
QkxBQ0spOw0KICAgVElGRlNldEZpZWxkKHRpZiwgVElGRlRBR19PUklFTlRBVElPTiwNCnN0YXRp
Y19jYXN0PGludD4oT1JJRU5UQVRJT05fVE9QTEVGVCkpOw0KICAgVElGRlNldEZpZWxkKHRpZiwg
VElGRlRBR19TQU1QTEVTUEVSUElYRUwsIDEpOw0KICAgVElGRlNldEZpZWxkKHRpZiwgVElGRlRB
R19ST1dTUEVSU1RSSVAsIG55KTsNCiAgIC8vIFNhdmluZyB0aGUgd2hvbGUgaW1hZ2UgaW4gYSBz
aW5nbGUgYmxvY2sgbWFrZXMgaGVhdnkNCiAgIC8vIGRlbWFuZHMgb24gbWVtb3J5IGJ1dCBzaG91
bGQgZW5hYmxlIG9wdGltdW0gY29tcHJlc3Npb24NCiAgIFRJRkZTZXRGaWVsZCh0aWYsIFRJRkZU
QUdfUExBTkFSQ09ORklHLCBQTEFOQVJDT05GSUdfQ09OVElHKTsNCg0KICAgLy8gLi4uIGFuZCBu
b3cgb3VyIG93biBjdXN0b20gb25lczoNCiAgIFRJRkZTZXRGaWVsZCh0aWYsIFRJRkZUQUdfSU5D
SURFTlRQT1dFUiwgUG93ZXIxKTsNCiAgIFRJRkZTZXRGaWVsZCh0aWYsIFRJRkZUQUdfUkVGTEVD
VEVEUE9XRVIsIFBvd2VyMik7DQogICBUSUZGU2V0RmllbGQodGlmLCBUSUZGVEFHX1QxLCBUMSk7
DQogICBUSUZGU2V0RmllbGQodGlmLCBUSUZGVEFHX1QyLCBUMik7DQogICBUSUZGU2V0RmllbGQo
dGlmLCBUSUZGVEFHX0hVTUlESVRZLCBIdW1pZGl0eSk7DQogICBUSUZGU2V0RmllbGQodGlmLCBU
SUZGVEFHX0VYUE9TVVJFLCBFeHBvc3VyZSk7DQoNCiAgIFRJRkZXcml0ZUVuY29kZWRTdHJpcCh0
aWYsIDAsIHN0YXRpY19jYXN0PHZvaWQgKj4oaW1hZ2UpLCBueCAqIG55ICoNCjIpOyANCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBUaGUgJyogMicNCmlzIHByZXNlbnQgYmVjYXVzZSBlYWNoIHBpeGVsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzIDE2
DQpiaXRzLCBoZW5jZSB0d28gYnl0ZXMNCiAgIC8vIFdyaXRlIHRoZSBkaXJlY3RvcnkgdG8gYSBm
aWxlLCBhbmQgY2xvc2UgaXQ6DQogICBUSUZGV3JpdGVEaXJlY3RvcnkodGlmKTsNCiAgIFRJRkZD
bG9zZSh0aWYpOw0KfQ0KDQppbnQgX3RtYWluKGludCBhcmdjLCBfVENIQVIqIGFyZ3ZbXSkNCnsN
CiAgIC8vIFZhcmlhYmxlcyB0byBob2xkIHRoZSBpbWFnZQ0KICAgaW50IG54LCBueTsNCiAgIHVu
c2lnbmVkIHNob3J0ICppbWFnZSA9IG51bGxwdHI7DQoNCiAgIC8vIEluZm9ybWF0aW9uIHdlJ2Qg
bGlrZSB0byBwdXQgaW50byBvdXIgY3VzdG9tIHRhZ3M6DQogICBpbnQgUG93ZXIxID0gMTAwMDAw
MDsNCiAgIGludCBQb3dlcjIgPSA4Ow0KICAgZmxvYXQgVDEgPSAyMy41ZjsNCiAgIGZsb2F0IFQy
ID0gLTE4LjdmOw0KICAgZmxvYXQgSHVtaWRpdHkgPSAwLjk4ZjsNCiAgIGZsb2F0IEV4cG9zdXJl
ID0gMC4wMDFmOw0KDQogICAvLyBSZWFkIHRoZSB0ZXN0IGltYWdlIGluIGZyb20gYSBQR00gZmls
ZToNCiAgIHJlYWRGcm9tUEdNKCZueCwgJm55LCAmaW1hZ2UsICJUZXN0SW1hZ2UucGdtIik7DQoN
CiAgIC8vIFNhdmUgdGhlIGltYWdlIGFzIGEgVElGIGZpbGU6DQogICBzYXZlQXNUaWZmKG54LCBu
eSwgaW1hZ2UsICJUZXN0SW1hZ2UudGlmIiwgUG93ZXIxLCBQb3dlcjIsIFQxLCBUMiwNCkh1bWlk
aXR5LCBFeHBvc3VyZSk7DQoNCiAgIHJldHVybiAwOw0KfQ0KDQoNCg0KRnJvbTogIFBhdWwgSGVj
a2JlcnQgPHBoQGNzLmNtdS5lZHU+DQpEYXRlOiAgVGh1cnNkYXksIDUgSnVuZSAyMDE0IDE2OjQ5
DQpUbzogIFN0ZXBoZW4gTW9ycmlzIDxzLW1vcnJpc0BuLWVvcy5jb20+DQpDYzogIFBhdWwgSGVj
a2JlcnQgPHBoQGNzLmNtdS5lZHU+LCAidGlmZkBsaXN0cy5tYXB0b29scy5vcmciDQo8dGlmZkBs
aXN0cy5tYXB0b29scy5vcmc+DQpTdWJqZWN0OiAgUmU6IFtUaWZmXSBXaGF0J3Mgd3Jvbmcgd2l0
aCBteSBjb2RlIGZvciBhZGRpbmcgY3VzdG9tIHRhZ3MgdG8gYQ0KZmlsZQ0KDQoNCkkgdGhpbmsg
eW91IG5lZWQgdG8gY2FsbCBUSUZGU2V0VGFnRXh0ZW5kZXIoKS4gSSBhZ3JlZSB0aGF0IHRoZSBs
aWJ0aWZmDQpkb2N1bWVudGF0aW9uIGxlYXZlcyBhIGxvdCB0byBiZSBkZXNpcmVkLg0KDQpJIHNs
b2dnZWQgdGhyb3VnaCBhIHNpbWlsYXIgZGVidWdnaW5nIGNoYWxsZW5nZSBhIGZldyBtb250aHMg
YWdvLCB3aGVuIEkNCm5lZWRlZCB0byByZWFkIFRJRkZzIGluIHRoZSDCs0ROR8KyIGRpYWxlY3Qg
dGhhdCB1c2VkIGV4b3RpYyB0YWdzIHVua25vd24gdG8NCmxpYnRpZmYuIEhlcmXCuXMgYW4gZXhj
ZXJwdCBvZiB0aGUgY29kZSBJIGNhbWUgdXAgd2l0aC4gVGhpcyB3b3Jrcw0KKGNvbXBpbGluZyB3
aXRoIGcrKyBvbiBtYWMgb3IgbGludXgpLg0KTm90ZSB0aGUgY2FsbCB0byBUSUZGU2V0VGFnRXh0
ZW5kZXIoKS4gScK5bSBub3QgaW5jbHVkaW5nIG15IERORy5oIGJlY2F1c2UNCkkgZG9uwrl0IHRo
aW5rIHRoYXTCuXMgcmVsZXZhbnQgdG8geW91LiBEb27CuXQgd29ycnkgdG9vIG11Y2ggYWJvdXQg
dGhlDQpTVUJJRkQwIHN0dWZmOyB0aGF0wrlzIGEgRE5HIGNvbnZlbnRpb24uDQoNCiNpbmNsdWRl
IDx0aWZmaW8uaD4NCg0KI2luY2x1ZGUgIkRORy5oIg0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIERORw0KdGFnIGdy
dW5nZQ0KDQovKg0KdG8gZ2V0IHJpZCBvZiB3YXJuaW5nIG1lc3NhZ2VzIGZyb20gbGlidGlmZiBv
biBzdGRvdXQgdGhhdCBsb29rIGxpa2UgdGhlDQpmb2xsb3dpbmcsDQpjb21pbmcgd2hlbiB3ZSBy
ZWFkIGZpbGVzIGNvbnRhaW5pbmcgRE5HIHRhZ3M6DQogVElGRlJlYWREaXJlY3Rvcnk6IFdhcm5p
bmcsIFVua25vd24gZmllbGQgd2l0aCB0YWcgMzM0MjEgKDB4ODI4ZCkNCmVuY291bnRlcmVkLg0K
IFRJRkZSZWFkRGlyZWN0b3J5OiBXYXJuaW5nLCBVbmtub3duIGZpZWxkIHdpdGggdGFnIDMzNDIy
ICgweDgyOGUpDQplbmNvdW50ZXJlZC4NCg0Kd2UgZm9sbG93IHRoZXNlIGluc3RydWN0aW9ucw0K
IGh0dHA6Ly93d3cucmVtb3Rlc2Vuc2luZy5vcmcvbGlidGlmZi9hZGRpbmd0YWdzLmh0bWwNCiov
DQoNCiNkZWZpbmUgRE5HX1RBR19DRkFSZXBlYXRQYXR0ZXJuRGltIDB4ODI4ZA0KI2RlZmluZSBE
TkdfVEFHX0NGQVBhdHRlcm4yIDB4ODI4ZQ0Kc3RhdGljY2hhciBDRkFSZXBlYXRQYXR0ZXJuRGlt
TmFtZVtdID0NCiJDRkFSZXBlYXRQYXR0ZXJuRGltIjsNCnN0YXRpY2NoYXIgQ0ZBUGF0dGVybjJO
YW1lW10gPQ0KIkNGQVBhdHRlcm4yIjsNCg0Kc3RhdGljY29uc3QgVElGRkZpZWxkSW5mbyBkbmdf
ZmllbGRfaW5mb1tdID0gew0KIC8vIHRhZywgcmVhZGNvdW50LCB3cml0ZWNvdW50LCBmaWVsZF90
eXBlLCBmaWVsZF9iaXQsIG9rX3RvX2NoYW5nZSwNCnBhc3Njb3VudCwgZmllbGRfbmFtZQ0KIC8v
IG5vdGU6IGlmIHBhc3NfY291bnQ9MSB0aGVuIFRJRkZHZXRGaWVsZCBzaG91bGQgYmUgcGFzc2Vk
IGEgcHRyIHRvIGENCnVpbnQxNiBjb3VudA0KIHsgRE5HX1RBR19DRkFSZXBlYXRQYXR0ZXJuRGlt
LA0KMiwgICAgICAgICAgICAgMiwgICAgICAgICAgICAgVElGRl9TSE9SVCwgRklFTERfQ1VTVE9N
LA0KDQoxLCAwLCBDRkFSZXBlYXRQYXR0ZXJuRGltTmFtZSB9LA0KIHsgRE5HX1RBR19DRkFQYXR0
ZXJuMiwgICAgICAgICBUSUZGX1ZBUklBQkxFLCBUSUZGX1ZBUklBQkxFLCBUSUZGX0JZVEUsDQpG
SUVMRF9DVVNUT00sDQoNCjEsIDEsIENGQVBhdHRlcm4yTmFtZSB9DQp9Ow0KDQpzdGF0aWMgVElG
RkV4dGVuZFByb2MgcGFyZW50X2V4dGVuZGVyID0NCk5VTEw7ICANCi8vIGluIGNhc2Ugd2Ugd2Fu
dCBhIGNoYWluIG9mIGV4dGVuc2lvbnMNCg0KLy8gRXh0ZW5kZXIgY2FsbGJhY2suDQovLyBJdCBt
ZXJnZXMgaW4gb3VyIG5ldyBmaWVsZHMgYW5kIHRoZW4gY2FsbHMgdGhlIG5leHQgZXh0ZW5kZXIg
aWYgdGhlcmUNCmlzIG9uZSBpbiBlZmZlY3QuDQoNCnN0YXRpY3ZvaWQgZG5nX2V4dGVuZGVyX2Nh
bGxiYWNrKFRJRkYgKnRpZikgew0KIC8vIGluc3RhbGwgdGFnIGZpZWxkIGV4dGVuc2lvbnMgZm9y
IERORw0KIFRJRkZNZXJnZUZpZWxkSW5mbyh0aWYsIGRuZ19maWVsZF9pbmZvLA0Kc2l6ZW9mIGRu
Z19maWVsZF9pbmZvIC8NCnNpemVvZiBkbmdfZmllbGRfaW5mb1swXSk7DQoNCiAvLyBjYWxsIGRl
ZmF1bHQgZGlyZWN0b3J5IG1ldGhvZCwgaWYgYW55DQoNCmlmIChwYXJlbnRfZXh0ZW5kZXIpDQog
ICAoKnBhcmVudF9leHRlbmRlcikodGlmKTsNCn0NCg0Kc3RhdGljdm9pZCBhdWdtZW50X2xpYnRp
ZmZfd2l0aF9kbmdfdGFncygpIHsNCg0Kc3RhdGljIGJvb2wgZmlyc3RfdGltZSA9DQp0cnVlOw0K
DQppZiAoIWZpcnN0X3RpbWUpIHJldHVybjsNCiBmaXJzdF90aW1lID0gDQpmYWxzZTsNCiBwYXJl
bnRfZXh0ZW5kZXIgPSBUSUZGU2V0VGFnRXh0ZW5kZXIoZG5nX2V4dGVuZGVyX2NhbGxiYWNrKTsN
Cn0NCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLw0KDQpzdGF0aWMgDQp2b2lkIHByaW50X2RpcihUSUZGICp0aWYpIHsN
CiBUSUZGUHJpbnREaXJlY3RvcnkodGlmLCBzdGRvdXQsIFRJRkZQUklOVF9OT05FKTsgIC8vIFBS
SU5UX05PTkUgbWVhbnMNCnByaW50IG5vIGV4dHJhIGluZm8NCg0KaW50IGZpbGV0eXBlLCBueCwg
bnk7DQogdWludDE2IHNhbXBsZXNfcGVyX3BpeGVsLCBiaXRzX3Blcl9zYW1wbGU7DQogYXNzZXJ0
KFRJRkZHZXRGaWVsZCh0aWYsIFRJRkZUQUdfU1VCRklMRVRZUEUsICZmaWxldHlwZSkpOw0KIGFz
c2VydChUSUZGR2V0RmllbGQodGlmLCBUSUZGVEFHX0lNQUdFV0lEVEgsICZueCkpOw0KIGFzc2Vy
dChUSUZGR2V0RmllbGQodGlmLCBUSUZGVEFHX0lNQUdFTEVOR1RILCAmbnkpKTsNCiBhc3NlcnQo
VElGRkdldEZpZWxkKHRpZiwgVElGRlRBR19TQU1QTEVTUEVSUElYRUwsICZzYW1wbGVzX3Blcl9w
aXhlbCkpOw0KIGFzc2VydChUSUZGR2V0RmllbGQodGlmLCBUSUZGVEFHX0JJVFNQRVJTQU1QTEUs
ICZiaXRzX3Blcl9zYW1wbGUpKTsNCiBwcmludGYoIkRORzo6RE5HIElGRCB3aXRoIGZpbGV0eXBl
PSVkJWR4JWQgc2FtcGxlc19wZXJfcGl4ZWw9JWQNCmJpdHNfcGVyX3NhbXBsZT0lZFxuIiwNCiAg
ICAgZmlsZXR5cGUsIG54LCBueSwgc2FtcGxlc19wZXJfcGl4ZWwsIGJpdHNfcGVyX3NhbXBsZSk7
DQp9DQoNCkRORzo6RE5HKGNvbnN0IHN0ZDo6c3RyaW5nICZmaWxlbmFtZSwNCmJvb2wgdmVyYm9z
ZSkNCiA6IFBpY0ZpbGU8UGl4ZWxJOD4oZmlsZW5hbWUpLA0KICAgbV90aWYoVElGRk9wZW4oZmls
ZW5hbWUuY19zdHIoKSwNCiJyIikpIHsNCg0KaWYgKG1fdGlmID09IE5VTEwpIA0KcmV0dXJuOyAg
Ly8gY2FuJ3Qgb3BlbiBmaWxlDQogLy8gdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgdW5rbm93
biB0YWdzLCBpbmZvcm0gbGlidGlmZiBhYm91dCBzZXZlcmFsDQpETkcgdGFncw0KIGF1Z21lbnRf
bGlidGlmZl93aXRoX2RuZ190YWdzKCk7DQoNCiAvLyByZWFkIFNVQklGRDAsIHdoaWNoIGNvbnRh
aW5zIHRoZSBmdWxsIHJlc29sdXRpb24gaW1hZ2UNCiBpbnQxNiBzdWJfaWZkX2NvdW50Ow0KIHVp
bnQ2NCAqb2Zmc2V0ID0NCjA7DQogYXNzZXJ0KFRJRkZHZXRGaWVsZChtX3RpZiwgVElGRlRBR19T
VUJJRkQsICZzdWJfaWZkX2NvdW50LCAmb2Zmc2V0KSk7DQogLy8gcHJpbnRmKCJHZXRGaWVsZCBT
VUJJRkQgY291bnQ9JWQgb2Zmc2V0PTB4JXB4IG9mZnNldFswXT0weCVsbHgNCm9mZnNldFsxXT0w
eCVsbHhcbiIsDQogICAgIC8vIHN1Yl9pZmRfY291bnQsIG9mZnNldCwgKGxvbmcgbG9uZylvZmZz
ZXRbMF0sIChsb25nDQpsb25nKW9mZnNldFsxXSk7DQogYXNzZXJ0KHN1Yl9pZmRfY291bnQ+PTEg
JiYgc3ViX2lmZF9jb3VudDw9Mik7DQovLyBleHBlY3QgYXQgbGVhc3QgMSBhbmQgbm90IG1vcmUg
dGhhbiAyIHN1Yi1JRkRzDQogYXNzZXJ0KFRJRkZTZXRTdWJEaXJlY3RvcnkobV90aWYsIG9mZnNl
dFswXSkpOw0KIHByaW50X2RpcihtX3RpZik7DQoNCg0KaW50IGZpbGV0eXBlOw0KIGFzc2VydChU
SUZGR2V0RmllbGQobV90aWYsIFRJRkZUQUdfU1VCRklMRVRZUEUsICZmaWxldHlwZSkpOw0KIGFz
c2VydChUSUZGR2V0RmllbGQobV90aWYsIFRJRkZUQUdfSU1BR0VXSURUSCwgJm1fbngpKTsNCiBh
c3NlcnQoVElGRkdldEZpZWxkKG1fdGlmLCBUSUZGVEFHX0lNQUdFTEVOR1RILCAmbV9ueSkpOw0K
DQppZiAodmVyYm9zZSkNCiAgIHByaW50ZigiRE5HOjpETkcNCiVzICVkeCVkXG4iLCBmaWxlbmFt
ZS5jX3N0cigpLCBtX254LCBtX255KTsNCiAvLyBleHBlY3QgdGhpcyBzdWJJRkQgdG8gY29udGFp
biB0aGUgZnVsbCBzaXplIGltYWdlLCAxIGNoYW5uZWwgKGJheWVyDQpwYXR0ZXJuKSwgOCBiaXRz
IHBlciBwaXhlbA0KIGFzc2VydChmaWxldHlwZT09RklMRVRZUEVfRlVMTFNJWkVJTUFHRSk7DQog
dWludDE2IHNhbXBsZXNfcGVyX3BpeGVsLCBiaXRzX3Blcl9zYW1wbGU7DQogYXNzZXJ0KFRJRkZH
ZXRGaWVsZChtX3RpZiwgVElGRlRBR19TQU1QTEVTUEVSUElYRUwsICZzYW1wbGVzX3Blcl9waXhl
bCkpOw0KIGFzc2VydChUSUZGR2V0RmllbGQobV90aWYsIFRJRkZUQUdfQklUU1BFUlNBTVBMRSwg
JmJpdHNfcGVyX3NhbXBsZSkpOw0KIGFzc2VydChzYW1wbGVzX3Blcl9waXhlbD09MSk7DQogYXNz
ZXJ0KGJpdHNfcGVyX3NhbXBsZT09OCk7DQoNCiAvLyBjaGVjayBhc3N1bXB0aW9ucyB0aGF0IHRo
ZSBjb2RlIG1ha2VzIGFib3V0IHRoZSBCYXllciBwYXR0ZXJuDQogdWludDE2ICpkaW07DQogYXNz
ZXJ0KFRJRkZHZXRGaWVsZChtX3RpZiwgRE5HX1RBR19DRkFSZXBlYXRQYXR0ZXJuRGltLCAmZGlt
KSk7DQogYXNzZXJ0KGRpbVswXT09MiAmJiBkaW1bMV09PTIpOw0KLy8gQmF5ZXIgcGF0dGVybiBp
cyAyeDIgcGl4ZWxzDQogdWludDE2IGNvdW50Ow0KIHVpbnQ4ICpwYXR0ZXJuOw0KIGFzc2VydChU
SUZGR2V0RmllbGQobV90aWYsIEROR19UQUdfQ0ZBUGF0dGVybjIsICZjb3VudCwgJnBhdHRlcm4p
KTsNCiAvLyBwcmludGYoIkNGQVBhdHRlcm4yOiBjb3VudD0lZCBwYXR0ZXJuPSVkLCVkLCVkLCVk
XG4iLA0KICAgICAvLyBjb3VudCwgcGF0dGVyblswXSwgcGF0dGVyblsxXSwgcGF0dGVyblsyXSwg
cGF0dGVyblszXSk7DQogYXNzZXJ0KGNvdW50PT1kaW1bMF0qZGltWzFdKTsNCiBhc3NlcnQocGF0
dGVyblswXT09MSAmJiBwYXR0ZXJuWzFdPT0wICYmIHBhdHRlcm5bMl09PTINCiYmIHBhdHRlcm5b
M109PTEpOw0KLy8gR1IsQkcNCg0KICAgLi4uDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpUaWZmIG1h
aWxpbmcgbGlzdDogVGlmZkBsaXN0cy5tYXB0b29scy5vcmcKaHR0cDovL2xpc3RzLm1hcHRvb2xz
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3RpZmYKaHR0cDovL3d3dy5yZW1vdGVzZW5zaW5nLm9yZy9s
aWJ0aWZmLw==
